添加层和设置道具
我知道很多AutoCAD用户发现自己在一遍又一遍地执行相同的功能。我们大多数人可以蒙着眼睛键入命令提示,完成一半的绘图。我刚刚开始使用VBA for AutoCAD(如果有人需要帮助,我已经为excel做了一些非常复杂的VBA),所以我想我会发布一个Mechanical 2017的“hello world”宏示例。我们公司在模型空间中的视图周围使用边界线,这是一种添加新层、更改颜色和关闭打印的方法。我在更新旧图形时使用它。
Sub ADD_NOPLOT()
Dim oNEWLAYER As AcadLayer
On Error Resume Next
Set oNEWLAYER = ThisDrawing.Layers.Add("NO_PLOT")
oNEWLAYER.color = acMagenta
oNEWLAYER.Plottable = False
End Sub
对不起,这里面没有问题。我只是想,既然我花了几次搜索才把它拼凑起来,我会和你们大家分享。 只是一个建议,为什么你不把它作为一个库函数,这样就可以在未来的任何编码中使用它。
添加层layname“acMagenta”“False”
VBA和Autocad有一些不确定性,它们有很好的文档记录,因此您可能会更好地了解VL lisp。它的语法非常相似。 大约10年前,我用lisp做了一些工作,所以我对它并不完全陌生,但我肯定需要“复习”编码。我只是用VBA来做这个,因为我最近在Excel中做了很多工作。它更像是一个quickfire宏,只是为了节省一些时间 比加尔,
这是我为lisp例程得到的。。。
(DEFUN C:NOPLOT ()
(COMMAND "-LAYER" "M" "NO_PLOT" "P" "N" "" "S" "0" "C" "MAGENTA" "NO_PLOT" "")
(PRINC)
)
不过,我不确定我是否理解您关于将其转换为库函数的意思。从来没有走过那条路,所以我甚至不知道从哪里开始。
谢谢 许多代码的使用形成了一个新的层,所以我的建议是有一个库函数,简单来说就是添加到acaddoc中。lsp生成层命令是宽容的,因为如果层存在,它不会出错,因此不需要检查是否存在。库函数的另一个例子是,我有一个12或3行的库dcl,所以当我要求一个值时,我弹出dcl,它的代码在当前程序中只有1行,(ahgetvals“Enter 1st val”“Enter 2nd val”“Enter 3rd val”),慢慢地,我将所有旧程序更改为这种方法。
任何好的编程都会利用子程序,而不是重复的代码。
因此,任何时候你需要制作一个无打印层,你都可以这样做。
(DEFUN makelay ( laynamecol LT / )
(COMMAND "-LAYER" "M" layname "P" "N" "" "S" layname "C" col" layname "")
(PRINC)
)
;to use add to acaddoc.lsp then in any program
(makelay "1stone" 2 "Dashed")
; for no plot
(DEFUN NPLOT ( layname col lt / )
(COMMAND "-LAYER" "M" layname "P" "N" "" "S" "0" "C" col layname "LT" lt layname "")
(PRINC)
)
(nplot "2ndlayer" 123 "continuous")
;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
;if you want a no plot layer always then add it to your DWT which is probably the best option.
(defun c:noplot ()(nplot "2ndlayer" 6 "continuous"))
好的,这更有意义。我只是不确定是否真的有一个“库”你必须添加它。是的,它已经是我的dwt文件的一部分。我只是用它来更新几年来没有出现过的旧文件,或者是来自autocad ops的文件,这些文件不注意细节。
现在有两个问题。。。
1.makelay或nplot中的defun行上,正斜杠(/)的用途是什么。我能够把其余的放在上下文中阅读代码,但那一个我躲开了。是否需要定义另一个变量槽?
2.我必须将其添加到acaddoc中吗。lsp还是可以使用我已经添加到启动内容中的lisp文件?我将其保存在网络上,以便进行备份并从一台电脑传输到另一台电脑。 上面的defun中没有局部变量。
(字符串1/x y z)
第2项将其添加到您的lisp中,这也是我们获得它的方式。 太棒了,再次感谢比格尔
页:
[1]