尝试使用“命令”运行
因此,我已经从在模板文件中包含块转移到使用AutoLISP脚本来检查块是否存在,如果还没有,则创建它们。以下是中心线的示例:
(defun C:CL()
(if (not (tblsearch "BLOCK" "CL"))
(progn
(entmakex (list (cons 0 "BLOCK")
(cons 100 "AcDbEntity")
(cons 100 "AcDbBlockReference")
(cons 67 0)
(cons 8 "0")
(cons 2 "CL")
(cons 10 (list 0 0 0))
(cons 70 0)))
(entmakex (list (cons 0 "LINE")
(cons 8 "MSGuidelines")
(cons 10 (list 0 0 0))
(cons 11 (list 0 6000 0))
(cons 62 256)))
(entmakex (list (cons 0 "LINE")
(cons 6 "Phantom2")
(cons 8 "Annotations")
(cons 10 (list 0 0 0))
(cons 11 (list 0 6000 0))
(cons 48 100)
(cons 62 256)))
(entmakex (list (cons 0 "ENDBLK")
(cons 100 "AcDbBlockEnd")
(cons 8 "0")))
(command "insert" "CL" "S" "1" "R" "0")
)
(command "insert" "CL" "S" "1" "R" "0")
)
(princ)
) ;End defun CL
我发现,如果我在另一个脚本中尝试以下代码行
(command "CL" ...)
我得到的消息是,命令CL不存在,即使它本身运行良好。难道不能使用“命令”来调用自定义脚本吗? 试着这样做:
(C:CL) 嗯,行得通,但不是我所需要的方式。对于CL.lsp,用户选择块需要去的地方。在另一个调用CL.lsp的脚本中,块的位置是由脚本本身计算的,我似乎无法在不添加参数的情况下将位置传递给CL.lsp,这违背了CL.lsp自身运行的目的。 只有我一个人,但脑海中浮现出“Block library”这个词。只需使用insert。
我们可能至少有200多个 ps脚本是Autocad中使用的一种命令语言,而不是“lisp脚本”,可能使用“lisp程序”之类的术语,因为lisp是Autodesk在20世纪70年代左右创建的自己的子集的编程语言。早在当时,Fortran Cobol Basic C等
这只会让阅读标题变得更容易,从而了解问题的内容。
一个想法是在运行(C:CL)之前在脚本中设置一个全局变量,然后更改C:CL函数以检查全局变量,如果不是零,则自动将块插入所需位置。只有在为块插入设置了预设坐标的情况下,这才有效。用户交互不是编写脚本的最佳方式。 如果在创建块期间出现任何故障,entmake不会返回错误。只有零
例如,如果当前样式表中不存在线型PHANTOM2,则不会创建块cl,因此无法插入。
另一种可能性是使用组8和67进行块表头entmake调用。据我所知,他们并不受尊重
可能是100 s组的顺序或位置。
-大卫
页:
[1]