乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 76|回复: 6

[编程交流] Lisp加载项更改LTSCALE

[复制链接]

2

主题

6

帖子

4

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 15:18:46 | 显示全部楼层 |阅读模式
您好-
 
是否有一种方法可以编写lisp加载项,在例程运行之前提示用户输入ltscale设置,然后将ltscale恢复为。333例行程序什么时候结束?
 
在工作中,我们有一个我经常使用的标注例程(我不知道谁写了代码,这就是为什么我犹豫在这里发布它),但我总是需要记住在运行之前和之后重置比例。。。
 
谢谢
 
-M。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:32:51 | 显示全部楼层
一开始就叫它:
 
  1. (defun LTPrompt (/ lts)
  2.    (if (setq lts (getreal "\nSpecify Linetype Scale: "))
  3.    (setvar "LTSCALE" lts)))

 
  1. (setvar "LTSCALE" 0.333)

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

使用道具 举报

2

主题

6

帖子

4

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 15:47:48 | 显示全部楼层
非常感谢您的帮助和回复速度。你的代码完全符合我的要求!
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:58:33 | 显示全部楼层
没问题,欢迎光临。
 
如果你还有其他疑问,尽管问。
回复

使用道具 举报

2

主题

6

帖子

4

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 16:02:53 | 显示全部楼层
好自从你提出
 
我对整个lisp都很感兴趣,现在我想让这个标注程序更流畅一些。。。
 
加载例程后,系统会提示用户选择4个点作为平面图的边界。随后拾取的每个点都会将一个具有x和y尺寸的块插入到最近的边界点。该信息显示在方向箭头块内,程序根据点所在的象限选择方向箭头块。
 
原始例程基于全局ltscale变量缩放该块。我重写了它,以便例程提示用户输入块比例因子,因此现在ltscale永远不需要更改。
 
这是可行的,但有点笨重。如果平面图的比例为3/4”,则适当的区块比例因子为7.5;对于1/2”,比例因子为10,以此类推。。。我希望能够输入绘图比例,并让程序将适当的数字转换为比例因子变量(sf)。
 
我一直在阅读我的AutoCAD书籍,并在线查看教程,到目前为止,这是我最接近的。。。
 
  1. ;   Input the plot scale
  2. (defun LTPrompt ()
  3.    (setq ans  (getstring "\nSpecify Linetype Scale: ")
  4.    )
  5. ;   Set the correct block scale
  6. (defun symbol ()
  7.     (if (= ans "1/4")(progn
  8.            (setq sf 15)      ;if "1/4", set sf to 15
  9.               
  10.     ))
  11.     (if (= ans "3/8")(progn
  12.            (setq sf 15)      ;if "3/8", set sf to 15
  13.               
  14.     ))
  15.     (if (= ans "1/2")(progn
  16.            (setq sf 10)      ;if "1/2", set sf to 10
  17.               
  18.     ))
  19.     (if (= ans "3/4")(progn
  20.            (setq sf 7.5)     ;if "3/4, set sf to 7.5
  21.               
  22.     ))
  23. )

 
不知何故,这总是将比例因子(sf)设置为2。所以我想我对那里发生的事情的了解比我想象的还要少。
 
一旦这一问题得到解决,希望一个类似的代码位将允许用户输入他们正在进行的尺寸标注(我们使用不同的符号来表示电气与音频/视频与索具),并且例程将选择具有适当符号和方向的块。
 
如有任何建议,不胜感激。如果我找到了解决方案,我会继续阅读教程并发回。
 
谢谢
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 16:13:09 | 显示全部楼层
好的,我会用这样的东西:
 
  1. ;   Set the correct block scale
  2. (defun Scaleset    (/ ans sf)
  3.    (setq ans (getstring "\nSpecify Linetype Scale: "))
  4.    (cond ((= ans "1/4") (setq sf 15)) ;if "1/4", set sf to 15
  5.      ((= ans "3/8") (setq sf 15)) ;if "3/8", set sf to 15
  6.      ((= ans "1/2") (setq sf 10)) ;if "1/2", set sf to 10
  7.      ((= ans "3/4") (setq sf 7.5)) ;if "3/4, set sf to 7.5
  8.      (T (princ "\nOption Unavailable."))
  9.    )
  10.    (princ)
  11. )
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 16:28:20 | 显示全部楼层
几点提示:
 
[列表]
  • 我不会定义一个单独的函数来提示输入字符串-这是不必要的,这意味着当提示可以包含在另一个函数中时,您也必须调用该函数
    [/列表]
    [列表]
  • 当有多个选项可用时,使用“cond”,并将每个可能性括在单独的条件括号内程序将按顺序遍历每个条件,直到找到一个返回True的条件。因此,最后一个条件,“(T…”将始终返回True-如果所有其他人都不这样做。
    [/列表]
    [列表]
  • “(程序……”是一个程序包装器,当在具有多行的if语句中使用时,用于包装多行代码请参见此处:
  • http://www.cadtutor.net/forum/showthread.php?t=27101
    [/列表]
  • 回复

    使用道具 举报

    发表回复

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    • 微信公众平台

    • 扫描访问手机版

    • 点击图片下载手机App

    QQ|关于我们|小黑屋|乐筑天下 繁体中文

    GMT+8, 2025-3-4 21:00 , Processed in 0.540360 second(s), 66 queries .

    © 2020-2025 乐筑天下

    联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表