K Baden 发表于 2022-7-5 15:48:16

需要帮助优化命令

所以,我有一个小命令,可以修复我们绘图中的一些小东西,但它会做一些奇怪的事情。我觉得这与命令中的空“”标记有关。我将在运行时发布代码和命令行。从命令行提示判断,Draworder命令和集中的最后一个命令似乎有问题。
 

(defun c:PLDO()

(setq sel1 (ssget "x" '((8 . "PROPERTY_LINES"))))
(command "draworder" sel1 "" "back")

(setq sel2 (ssget "x" '((8 . "FENCE"))))
(command "._chprop" sel2 "" "s" "0.5" "")

(setq sel3 (ssget "x" '((6 . "DASHDOT"))))
(command "._chprop" sel3 "" "s" "1" "")

(setq sel4 (ssget "x" '((8 . "ANTENNA") (0 . "TEXT,MTEXT,*LEADER"))))
(command "._chprop" sel4 "" "c" "byblock" "")

(princ)
)

 
Command: PLDO
draworder
Select objects:
Command: PLDO
Unknown command "PLDO".Press F1 for help.
Command: back Unknown command "BACK".Press F1 for help.
Command: ._chprop
Select objects:   4 found
Select objects:
Enter property to change : s
Specify new linetype scale <0'-0 1/2">: 0.5
Enter property to change :
Command: ._chprop
Select objects:   4 found
Select objects:
Enter property to change : s
Specify new linetype scale <0'-1">: 1
Enter property to change :
Command: ._chprop
Select objects:
Command: PLDO
Unknown command "PLDO".Press F1 for help.
Command: c Unknown command "C".Press F1 for help.
Command: byblock Unknown command "BYBLOCK".Press F1 for help.
Command: PLDO
Unknown command "PLDO".Press F1 for help.

ronjonp 发表于 2022-7-5 16:00:17

啊!这样一个小小的改变就解决了问题。我甚至没有想到这是因为没有做出选择。非常感谢你的帮助!这绝对是我今后会记得的事情

K Baden 发表于 2022-7-5 16:04:31

我还注意到,您本地化了选择变量“s”,并多次使用了它。我有几个类似的命令。如果在开始时本地化,变量是否可以相同?或者这取决于集合中是否附加了IF语句?

K Baden 发表于 2022-7-5 16:18:20

 
由于ssget返回选择集或nil,因此可以重用该变量。您应该始终本地化变量。
 
我使用的经验法则是检查无效输入(通常为零)如何影响后续命令,并相应地调整代码。一个主要示例是使用entget而不检查是否正在传递ename。

ronjonp 发表于 2022-7-5 16:21:58

请确保将代码中的“sel1”更改为“s”!

Lee Mac 发表于 2022-7-5 16:27:47

你们俩都给了我很好的建议。非常感谢!我有自己捏造的印象,如果我多次使用它,我必须在一个命令内用每个单独的ssget函数更改变量。我真的很感谢你的帮助!这应该会清理我的代码很多!

K Baden 发表于 2022-7-5 16:37:54

有时我想知道我自己,哈哈!我编辑删除了之前的问题,因为我自己看着代码回答了这个问题。再次感谢你们,我真的非常感谢你们的帮助!

K Baden 发表于 2022-7-5 16:42:27

我看到有人在这里质疑过类似的任务,答案总是使用foreach函数。
这是一条类似的线。

Grrr 发表于 2022-7-5 16:52:30

页: [1]
查看完整版本: 需要帮助优化命令