lamensterms 发表于 2022-7-6 08:54:27

无论如何,要有GETREAL/RTOS pr

大家好,
 
我有一个attedit例程,你们中的一些人以前可能见过,我唯一的问题是它会将一个输入舍入到用LUPREC系统变量设置的小数位数。
 
我想告诉我的例程忽略LUPREC设置,并使用与用户输入完全相同的值。
 
(DEFUN C:ssc ()
(setq ocmd (getvar "CMDECHO"))
(prompt "\nSelect Title Block, Mark and Material List to be re-scaled... ")
(COMMAND "ucs" "w")
(setq sscpt1 '(0 0 0))
(setq sscsset1 (ssget))
(setq ss (ssget "X" (list (cons 0 "insert")(cons 2 "pdctitle"))))
(setq ename (ssname ss 0))
(setq data (entget ename))
(setq ssccs (cdr (assoc 41 data)))
(SETQ sscds (getREAL "\nEnter Desired Scale : "))
(COMMAND "scale" sscsset1 "" sscpt1 (/ sscds ssccs))
(COMMAND "dimscale" sscds)
(COMMAND "ltscale" (* sscds 10))
(COMMAND "-style" "PDC_Prosteel" "isocp.shx" (* sscds 3.5) "1" "0" "NO" "NO")
(setq ssctso (strcat "1:"(rtos ssccs)))
(setq ssctsn (strcat "1:"(RTOS sscds)))
(COMMAND "ZOOM" "EXTENTS")
(setq pt1 '( -500000000 -500000000 0))
(setq pt2 '( 500000000 500000000 0))
(COMMAND "-attedit" "y" "pdctitle" "pdcSCALE" "" "w" PT1 PT2 "V" "r"ssctsn "")
(COMMAND "graphscr")
(COMMAND "ZOOM" "p")
(setvar "CMDECHO" ocmd)
(alert "Please remember to check/adjust SCALE value in Title Block")
(princ)
)

 
这是缩放图纸的常规操作,我已经用粗体标记了我认为相关的线。
 
例程要求用户输入他们想要的DRG图纸比例,用户输入所需比例,然后例程将相应地缩放图纸,并更新属性标题栏中的“比例”字段。
 
问题是-如果LUPREC设置为零(0)-标题栏中只显示整数。如果用户需要1:12.5的比例,则显示为1:13(LUPREC为0)。
 
如果LUPREC设置为1(或更大)-标题栏中的结果将以小数位显示(即使输入了整数/整数)。1: 10显示为1:10.0。
 
谢谢你们的帮助。

BlackBox 发表于 2022-7-6 09:03:45

我有三个选择:
 
1、合并LUPREC变量更改和错误检查。
 
2.使用GETSTRING代替GETREAL,然后将字符串转换为实数,以获得精确的缩放值。
 
3.使用GETKWORD将用户降级到预定义的比例选项。
 
希望这有帮助!
 
编辑:本地化变量:wink:

lamensterms 发表于 2022-7-6 09:09:11

感谢RenderMan的快速回复。
 
谢谢你给我的所有建议——我对LISP还是很陌生,所以我总是在学习应该做的事和不应该做的事。
 
我曾想过使用GETSTRING,然后将SRING转换为REAL,但在谷歌搜索了几分钟后,我找不到合适的函数。然后我在这里偶然发现了一条旧线索,找到了阿托夫。
 
再次感谢你的帮助。我会告诉你我怎么走的。
 
干杯

BlackBox 发表于 2022-7-6 09:18:45

别担心;我们都从某个地方开始。。。有时,我们所需要的只是朝着正确的方向轻轻推一推眨眼:
 
干杯

BIGAL 发表于 2022-7-6 09:27:00

我有一本12版Autolisp程序员参考手册《我的圣经》,可以快速查找,但我想看看“帮助”电子版,翻页有点困难。
 
发现你可以得到一个摘要列表非常简单的内容,选择自定义指南,Autolisp,Autolisp参考和一个a-Z列表出现你可以做两件事选择一个字母字符并查看命令摘要或在右上角有一个这些将一次一个,并为每个命令提供更多信息,^把你带到字母树上去,这有点笨拙,但有时你知道这个命令,只是打字不正确。跳转页面的速度相当快。搜索unfortunatley可以为“string real”返回20个解
 
VLIDE显然也有帮助。

lamensterms 发表于 2022-7-6 09:34:25

非常感谢BigAl的小费。我同意有时候翻阅页面会更容易一些。但这个参考列表将非常有用(同样适用于我不知道存在的学习函数)。
 
猫队上周取得了一场相当不错的胜利。。。我希望他们能继续保持这种状态进入决赛。
 
再次感谢各位。

irneb 发表于 2022-7-6 09:40:46

我通常使用旧的2008帮助,而不是在线/离线帮助。这几乎是同一件事,它只是反应更灵敏&如果你从ACad help本身(而不是从VLIDE内部)启动搜索,它实际上可以工作-不同于新帮助系统上无用的搜索(最好使用谷歌在其上搜索)。与新的帮助系统不同的是,您仍然需要查看ActiveX引用—请尝试了解类似BoundingBox方法的东西在没有它的情况下是如何工作的!

BlackBox 发表于 2022-7-6 09:43:51

不久前写了这个,就是为了这个目的:眨眼:
 

(defun c:LISPDD () (c:LISPDeveloperDocumentation))
(defun c:LISPDeveloperDocumentation()
(princ "\rLISP DEVELOPER DOCUMENTATION ")
(vl-load-com)
((lambda (vrsn)
    (help
      (strcat
      "acad_dev"
      (cond
          ((vl-string-search "16.2" vrsn) "162")                     ; 2006
          ((vl-string-search "17.0" vrsn) "170")                     ; 2007
          ((vl-string-search "17.1" vrsn) "171")                     ; 2008
          ((vl-string-search "17.2" vrsn) "172")                     ; 2009
          ((vl-string-search "18.0" vrsn) "180")                     ; 2010
          ((vl-string-search "18.1" vrsn) "181")                     ; 2011
          ((vl-string-search "18.2" vrsn) "182")))))                   ; 2012
   (vlax-product-key))
(princ))

lamensterms 发表于 2022-7-6 09:50:17

大家好,
 
我知道已经有一段时间了,我只是想让大家知道,我终于开始修改例程了——使用字符串输入,然后使用ATOF。
 
现在效果很好-正是我需要的。
 
再次感谢。

BlackBox 发表于 2022-7-6 09:55:38

感谢您的跟进,祝贺您!
页: [1]
查看完整版本: 无论如何,要有GETREAL/RTOS pr