乐筑天下

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

[编程交流] 添加层和设置道具

[复制链接]

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 21:51:49 | 显示全部楼层 |阅读模式
我知道很多AutoCAD用户发现自己在一遍又一遍地执行相同的功能。我们大多数人可以蒙着眼睛键入命令提示,完成一半的绘图。我刚刚开始使用VBA for AutoCAD(如果有人需要帮助,我已经为excel做了一些非常复杂的VBA),所以我想我会发布一个Mechanical 2017的“hello world”宏示例。
 
我们公司在模型空间中的视图周围使用边界线,这是一种添加新层、更改颜色和关闭打印的方法。我在更新旧图形时使用它。
 
  1. Sub ADD_NOPLOT()
  2.    Dim oNEWLAYER As AcadLayer
  3.    
  4.    On Error Resume Next
  5.    
  6.    Set oNEWLAYER = ThisDrawing.Layers.Add("NO_PLOT")
  7.    oNEWLAYER.color = acMagenta
  8.    oNEWLAYER.Plottable = False
  9.       
  10. End Sub

 
对不起,这里面没有问题。我只是想,既然我花了几次搜索才把它拼凑起来,我会和你们大家分享。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 22:07:57 | 显示全部楼层
只是一个建议,为什么你不把它作为一个库函数,这样就可以在未来的任何编码中使用它。
 
添加层layname“acMagenta”“False”
 
VBA和Autocad有一些不确定性,它们有很好的文档记录,因此您可能会更好地了解VL lisp。它的语法非常相似。
回复

使用道具 举报

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 22:13:39 | 显示全部楼层
大约10年前,我用lisp做了一些工作,所以我对它并不完全陌生,但我肯定需要“复习”编码。我只是用VBA来做这个,因为我最近在Excel中做了很多工作。它更像是一个quickfire宏,只是为了节省一些时间
回复

使用道具 举报

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 22:26:01 | 显示全部楼层
比加尔,
 
这是我为lisp例程得到的。。。
 
  1. (DEFUN C:NOPLOT ()
  2. (COMMAND "-LAYER" "M" "NO_PLOT" "P" "N" "" "S" "0" "C" "MAGENTA" "NO_PLOT" "")
  3. (PRINC)
  4. )

 
不过,我不确定我是否理解您关于将其转换为库函数的意思。从来没有走过那条路,所以我甚至不知道从哪里开始。
 
谢谢
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 22:27:55 | 显示全部楼层
许多代码的使用形成了一个新的层,所以我的建议是有一个库函数,简单来说就是添加到acaddoc中。lsp生成层命令是宽容的,因为如果层存在,它不会出错,因此不需要检查是否存在。库函数的另一个例子是,我有一个12或3行的库dcl,所以当我要求一个值时,我弹出dcl,它的代码在当前程序中只有1行,(ahgetvals“Enter 1st val”“Enter 2nd val”“Enter 3rd val”),慢慢地,我将所有旧程序更改为这种方法。
 
任何好的编程都会利用子程序,而不是重复的代码。
 
因此,任何时候你需要制作一个无打印层,你都可以这样做。
 
  1. (DEFUN makelay ( layname  col LT / )
  2. (COMMAND "-LAYER" "M" layname "P" "N" "" "S" layname "C" col" layname "")
  3. (PRINC)
  4. )
  5. ;to use add to acaddoc.lsp then in any program
  6. (makelay "1stone" 2 "Dashed")
  7. ; for no plot
  8. (DEFUN NPLOT ( layname col lt / )
  9. (COMMAND "-LAYER" "M" layname "P" "N" "" "S" "0" "C" col layname "LT" lt layname "")
  10. (PRINC)
  11. )
  12. (nplot "2ndlayer" 123 "continuous")
  13. ;If you still want a keyboard option you can type the line above direct to the command line or as you did previously add the defun to your library again
  14. ;if you want a no plot layer always then add it to your DWT which is probably the best option.
  15. (defun c:noplot ()(nplot "2ndlayer" 6 "continuous"))
回复

使用道具 举报

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 22:38:03 | 显示全部楼层
好的,这更有意义。我只是不确定是否真的有一个“库”你必须添加它。是的,它已经是我的dwt文件的一部分。我只是用它来更新几年来没有出现过的旧文件,或者是来自autocad ops的文件,这些文件不注意细节。
 
现在有两个问题。。。
 
1.makelay或nplot中的defun行上,正斜杠(/)的用途是什么。我能够把其余的放在上下文中阅读代码,但那一个我躲开了。是否需要定义另一个变量槽?
 
2.我必须将其添加到acaddoc中吗。lsp还是可以使用我已经添加到启动内容中的lisp文件?我将其保存在网络上,以便进行备份并从一台电脑传输到另一台电脑。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 22:51:30 | 显示全部楼层
上面的defun中没有局部变量。
(字符串1/x y z)
 
第2项将其添加到您的lisp中,这也是我们获得它的方式。
回复

使用道具 举报

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 22:52:33 | 显示全部楼层
太棒了,再次感谢比格尔
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 12:56 , Processed in 0.363392 second(s), 68 queries .

© 2020-2025 乐筑天下

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