Erickson1026 发表于 2022-7-6 07:49:50

lisp中的多边形线

大家好,
在将lisp用于非常特定的函数方面有点新。
问题是,我有一个lisp例程,需要保存图层状态,将特定图层设置为当前图层,锁定其他图层,然后运行poly line命令,退出pline命令,然后在运行pline命令后重置回原始图层状态。这是到目前为止的代码。
 
在我到达仍在开发中的层状态之前,pline出错了。
 
那么主要的问题是,我能先让pline命令正常工作吗。
 
LOA.LSP        2012 by David W. Erickson
;;;DESCRIPTION
;;;
;;;This function turns on a-wall-e layer and locks all non Ioffice layers, sets io-area-indv current and starts the polyline command.

(DEFUN C:LOA(/ LAYER OFF )
(COMMAND "-LAYER" "A" "S" "DAVE" "" "" "" "" )
           (SETQ pT1 (GETPOINT "\nSelect the 1st POINT. "))
(command "-layer" "fr" "*" "th" "io*" "th" "a-*-e" "lo" "*" "unlock" "io*" "set" "io-area-indv" "fr" "a-anno*" "th" "_close_door" "u" "_close_door" "off" "a-door-e" "OFF" "A-FLOR-STRS-E" "OFF" "IO-SEC-SPCS" "OFF" "A-EQPM-E" "")
(command "pline" pt1 pause )
(COMMAND "-LA" "A" "R" "DAVE" "" "" "" )
(COMMAND "-LA" "A" "D" "DAVE" "" "" "" )
(princ)
)

 
提前谢谢。
 
戴夫

MSasu 发表于 2022-7-6 08:01:37

请尝试用这个方法绘制多段线(我没有检查代码的其余部分):
请编辑您的帖子并添加代码标签。非常感谢。

Erickson1026 发表于 2022-7-6 08:08:24

修订代码如下。我越来越近了。谢谢你的提示,希望我能恰当地包装代码。它可以设置图层并绘制多段线,但在我可以拾取第一个点之前,“命令行对话框”会出现并要求拾取第一个点,然后需要在图形编辑器中进行额外的(2)次拾取以启动pline。也许是一些简单的事情。
 
 
LOA.LSP        2012 by David W. Erickson
;;; DESCRIPTION
;;;
;;; This function turns on a-wall-e layer and locks all non Ioffice layers, sets io-area-indv current and starts the polyline command.

(DEFUN C:LOA (/ LAYER OFF )
(COMMAND "-LAYER" "A" "S" "DAVE" "" "")
(SETQ pT1 (GETPOINT "\nSelect the 1st POINT. "))
(command "-layer" "fr" "*" "th" "io*" "th" "a-*-e" "lo" "*" "unlock" "io*" "set" "io-area-indv" "fr" "a-anno*" "th" "_close_door" "u" "_close_door" "off" "a-door-e" "OFF" "A-FLOR-STRS-E" "OFF" "IO-SEC-SPCS" "OFF" "A-EQPM-E" "")
(command "_PLINE")
(while (> (getvar "CMDACTIVE") 0)
(command pause)
(COMMAND "-LAYER" "A" "R" "DAVE" "" "" "")
(COMMAND "-LAYER" "A" "D" "DAVE" "" "")
(princ)
)

MSasu 发表于 2022-7-6 08:13:30

似乎你错过了结束语。
再次,请编辑您的两篇帖子并添加代码标签。

Erickson1026 发表于 2022-7-6 08:20:47

谢谢你。这次找到了代码标签。仍然并没有额外的命令行对话框窗口弹出和额外的鼠标点击所需的启动命令运气。
 
LOA.LSP        2012 by David W. Erickson
;;; DESCRIPTION
;;;
;;; This function turns on a-wall-e layer and locks all non Ioffice layers, sets io-area-indv current and starts the polyline command.

(DEFUN C:LOA (/ LAYER OFF )
(COMMAND "-LAYER" "A" "S" "DAVE" "" "" "" "")
(SETQ pT1 (GETPOINT "\nSelect the 1st POINT. "))
(command "-layer" "fr" "*" "th" "io*" "th" "a-*-e" "lo" "*" "unlock" "io*" "set" "io-area-indv" "fr" "a-anno*" "th" "_close_door" "u" "_close_door" "off" "a-door-e" "OFF" "A-FLOR-STRS-E" "OFF" "IO-SEC-SPCS" "OFF" "A-EQPM-E" "")
(command "_PLINE")
(while (> (getvar "CMDACTIVE") 0)
(command pause)
)
(COMMAND "-LAYER" "A" "R" "DAVE" "" "" "")
(COMMAND "-LAYER" "A" "D" "DAVE" "" "")
(princ)
)

MSasu 发表于 2022-7-6 08:29:43

刚才注意到,在代码的前面,您要求输入一个点;也许代码应该是这样的:
(command "_PLINE" pT1)
(while (> (getvar "CMDACTIVE") 0)
(command pause)
)
如果它仍然不能像预期的那样工作,那么请在这里发布您将在其中使用它的图形(没有内容,仅适用于第三层),以测试代码的其余部分。
谢谢你编辑第一篇帖子,现在看起来好多了。

Erickson1026 发表于 2022-7-6 08:36:27

成功了!非常感谢您的耐心和帮助。在接下来的几个月里,这一常规将非常适合!
 
非常感谢,保重。
 
大卫

MSasu 发表于 2022-7-6 08:40:04

很高兴听到这个问题现在解决了。不客气,大卫!

Erickson1026 发表于 2022-7-6 08:47:33

事实上,今天早上上班后,我不得不对它进行更多修改。前一个版本在第一次运行时效果很好,但是如果我再次运行它,我会被F2屏幕击中,必须在屏幕上重新拾取以开始多段线。我在一些地方添加了graphscr命令来抑制屏幕并继续滚动。
 
再次感谢你的帮助。
 
6

MSasu 发表于 2022-7-6 08:49:50

尝试如下调用LAYER命令:
7
页: [1]
查看完整版本: lisp中的多边形线