Lisp加载项更改LTSCALE
您好-是否有一种方法可以编写lisp加载项,在例程运行之前提示用户输入ltscale设置,然后将ltscale恢复为。333例行程序什么时候结束?
在工作中,我们有一个我经常使用的标注例程(我不知道谁写了代码,这就是为什么我犹豫在这里发布它),但我总是需要记住在运行之前和之后重置比例。。。
谢谢
-M。 一开始就叫它:
(defun LTPrompt (/ lts)
(if (setq lts (getreal "\nSpecify Linetype Scale: "))
(setvar "LTSCALE" lts)))
(setvar "LTSCALE" 0.333)
。
应该这样做-我想把它简化一些,但我真的没有时间。 非常感谢您的帮助和回复速度。你的代码完全符合我的要求! 没问题,欢迎光临。
如果你还有其他疑问,尽管问。 好自从你提出
我对整个lisp都很感兴趣,现在我想让这个标注程序更流畅一些。。。
加载例程后,系统会提示用户选择4个点作为平面图的边界。随后拾取的每个点都会将一个具有x和y尺寸的块插入到最近的边界点。该信息显示在方向箭头块内,程序根据点所在的象限选择方向箭头块。
原始例程基于全局ltscale变量缩放该块。我重写了它,以便例程提示用户输入块比例因子,因此现在ltscale永远不需要更改。
这是可行的,但有点笨重。如果平面图的比例为3/4”,则适当的区块比例因子为7.5;对于1/2”,比例因子为10,以此类推。。。我希望能够输入绘图比例,并让程序将适当的数字转换为比例因子变量(sf)。
我一直在阅读我的AutoCAD书籍,并在线查看教程,到目前为止,这是我最接近的。。。
; Input the plot scale
(defun LTPrompt ()
(setq ans(getstring "\nSpecify Linetype Scale: ")
)
; Set the correct block scale
(defun symbol ()
(if (= ans "1/4")(progn
(setq sf 15) ;if "1/4", set sf to 15
))
(if (= ans "3/8")(progn
(setq sf 15) ;if "3/8", set sf to 15
))
(if (= ans "1/2")(progn
(setq sf 10) ;if "1/2", set sf to 10
))
(if (= ans "3/4")(progn
(setq sf 7.5) ;if "3/4, set sf to 7.5
))
)
不知何故,这总是将比例因子(sf)设置为2。所以我想我对那里发生的事情的了解比我想象的还要少。
一旦这一问题得到解决,希望一个类似的代码位将允许用户输入他们正在进行的尺寸标注(我们使用不同的符号来表示电气与音频/视频与索具),并且例程将选择具有适当符号和方向的块。
如有任何建议,不胜感激。如果我找到了解决方案,我会继续阅读教程并发回。
谢谢 好的,我会用这样的东西:
; Set the correct block scale
(defun Scaleset (/ ans sf)
(setq ans (getstring "\nSpecify Linetype Scale: "))
(cond ((= ans "1/4") (setq sf 15)) ;if "1/4", set sf to 15
((= ans "3/8") (setq sf 15)) ;if "3/8", set sf to 15
((= ans "1/2") (setq sf 10)) ;if "1/2", set sf to 10
((= ans "3/4") (setq sf 7.5)) ;if "3/4, set sf to 7.5
(T (princ "\nOption Unavailable."))
)
(princ)
)
几点提示:
[列表]
[*]我不会定义一个单独的函数来提示输入字符串-这是不必要的,这意味着当提示可以包含在另一个函数中时,您也必须调用该函数
[/列表]
[列表]
[*]当有多个选项可用时,使用“cond”,并将每个可能性括在单独的条件括号内程序将按顺序遍历每个条件,直到找到一个返回True的条件。因此,最后一个条件,“(T…”将始终返回True-如果所有其他人都不这样做。
[/列表]
[列表]
[*]“(程序……”是一个程序包装器,当在具有多行的if语句中使用时,用于包装多行代码请参见此处:
[*]http://www.cadtutor.net/forum/showthread.php?t=27101
[/列表]
页:
[1]