bohoon 发表于 2022-7-5 22:38:55

如果图层exi,则更改绘制顺序

大家好
我试图编写简短的lisp,以检查层(在lisp中指定)是否存在,如果存在,请更改其绘制顺序(将其发送到后面或前面)。我组合了另外两个LISP,它们都工作得很好,但发现现在不工作了:“错误:函数不好:”
 
代码如下:
 
(defun C:cdo( );Correct Draw Order
(progn
(if (tblsearch "LAYER" "l1");test if layer exists
(
(setq la1 (ssget "X" '((8 . "l1"))))
(command "draworder" la1 "" "F")
);else
(command "");do this
);end if
(princ)
)
)
 
我没有在“else”后面放任何东西,但是即使层存在,也会出现错误。这一定很简单,但我感到困惑,无法找到自己的错误。有人能帮我指出吗?

BlackBox 发表于 2022-7-5 22:48:45


(defun c:SendLayerToBack (/ ss)
(if (setq ss (ssget "_x" '((8 . "L1"))))
   (progn
   (sssetfirst nil ss)
   (ai_draworder "_b")
   )
   (prompt "\n** Layer not found ** ")
)
(princ)
)

(defun c:BringLayerToFront (/ ss)
(if (setq ss (ssget "_x" '((8 . "L1"))))
   (progn
   (sssetfirst nil ss)
   (ai_draworder "_f")
   )
   (prompt "\n** Layer not found ** ")
)
(princ)
)

bohoon 发表于 2022-7-5 23:03:34

感谢您的快速回复。你的代码工作完美:)我只是想知道我做错了什么?你能告诉我这个错误可能来自我的代码吗?这只是为了我对Lisp程序的理解。
 
再次感谢

BlackBox 发表于 2022-7-5 23:05:43

 
不客气,鲍恩;我很乐意帮忙。
 
 
 
通过简单地检查有效的选择集,您可以验证层是否存在,以及所述层上是否存在对象-请注意,这并不检查锁定的层,这只是一个示例。一旦返回非Nil,则会在屏幕上选择之前制作的选择集,因为绘制顺序子函数(ai_draworder)需要首先进行隐式选择,然后我们调用提供必要的“back”或“front”参数的子函数来完成命令。
 
希望(更多?)立即感知。
 
干杯

bohoon 发表于 2022-7-5 23:13:26

好的,那么你的函数ai_draworder需要先进行选择。然而,我认为我在这两行中也做了同样的事情:

(setq la1 (ssget "X" '((8 . "l1"))))
(command "draworder" la1 "" "F")
 
选择la1,然后在常规draworder命令中使用它
在我添加“if”函数之前,它确实起了作用:
 
(if (tblsearch "LAYER" "l1");test if layer exists
 
这是否意味着在“if”中它会以某种方式切换我的命令顺序?

BlackBox 发表于 2022-7-5 23:24:09

 
这不是我的子功能;它是AutoCAD的,在Acad20##Doc中定义。lsp
 
 
 
 
不,您对TBLSEARCH的调用返回非Nil,因此IF语句的测试表达式很好-鉴于您想要操作在所述层上找到的实体,因此没有必要,只需调用SSGET,而不是测试所述层上的有效实体选择集(如果实体被分配到该层,则隐式存在)。
 
在快速测试中,这些也可以很好地工作:
 

(defun c:SendLayerToBack2 (/ ss)
(if (setq ss (ssget "_x" '((8 . "L1"))))
   (command "._draworder" ss "" "_b")
   (prompt "\n** Layer not found ** ")
)
(princ)
)

(defun c:BringLayerToFront2 (/ ss)
(if (setq ss (ssget "_x" '((8 . "L1"))))
   (command "._draworder" ss "" "_f")
   (prompt "\n** Layer not found ** ")
)
(princ)
)

 
 
... 主要区别在于我的函数提供了“b”和“f”本地化选项,而上面的原始代码没有。在一个测试中,添加这个本地化选项可以“修复”代码。
 
HTH公司

bohoon 发表于 2022-7-5 23:32:52

再次感谢。我感谢你的帮助。

BlackBox 发表于 2022-7-5 23:47:21

 
不客气。
页: [1]
查看完整版本: 如果图层exi,则更改绘制顺序