Delphi1 发表于 2022-7-6 15:18:46

Lisp加载项更改LTSCALE

您好-
 
是否有一种方法可以编写lisp加载项,在例程运行之前提示用户输入ltscale设置,然后将ltscale恢复为。333例行程序什么时候结束?
 
在工作中,我们有一个我经常使用的标注例程(我不知道谁写了代码,这就是为什么我犹豫在这里发布它),但我总是需要记住在运行之前和之后重置比例。。。
 
谢谢
 
-M。

Lee Mac 发表于 2022-7-6 15:32:51

一开始就叫它:
 

(defun LTPrompt (/ lts)
   (if (setq lts (getreal "\nSpecify Linetype Scale: "))
   (setvar "LTSCALE" lts)))


 

(setvar "LTSCALE" 0.333)

 
应该这样做-我想把它简化一些,但我真的没有时间。

Delphi1 发表于 2022-7-6 15:47:48

非常感谢您的帮助和回复速度。你的代码完全符合我的要求!

Lee Mac 发表于 2022-7-6 15:58:33

没问题,欢迎光临。
 
如果你还有其他疑问,尽管问。

Delphi1 发表于 2022-7-6 16:02:53

好自从你提出
 
我对整个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。所以我想我对那里发生的事情的了解比我想象的还要少。
 
一旦这一问题得到解决,希望一个类似的代码位将允许用户输入他们正在进行的尺寸标注(我们使用不同的符号来表示电气与音频/视频与索具),并且例程将选择具有适当符号和方向的块。
 
如有任何建议,不胜感激。如果我找到了解决方案,我会继续阅读教程并发回。
 
谢谢

Lee Mac 发表于 2022-7-6 16:13:09

好的,我会用这样的东西:
 

;   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)
)

Lee Mac 发表于 2022-7-6 16:28:20

几点提示:
 
[列表]
[*]我不会定义一个单独的函数来提示输入字符串-这是不必要的,这意味着当提示可以包含在另一个函数中时,您也必须调用该函数
[/列表]
[列表]
[*]当有多个选项可用时,使用“cond”,并将每个可能性括在单独的条件括号内程序将按顺序遍历每个条件,直到找到一个返回True的条件。因此,最后一个条件,“(T…”将始终返回True-如果所有其他人都不这样做。
[/列表]
[列表]
[*]“(程序……”是一个程序包装器,当在具有多行的if语句中使用时,用于包装多行代码请参见此处:
[*]http://www.cadtutor.net/forum/showthread.php?t=27101
[/列表]
页: [1]
查看完整版本: Lisp加载项更改LTSCALE