帮我解决这个小问题
我是个新手。我试着练习一些Autolisp示例。我写下面的代码是为了知道如何在应用命令时使用实体名称。
我在列表中收集这些实体名称,并使用命令“擦除以删除它”。
但是这里发生了一些问题。它说“糟糕的论点”,我不知道如何解决它。
(定义c:gc(/p1 p2数据n索引)
(setq p1(ssget))
(setq data())
(setq n(sslength p1))
(setq索引0)
(重复n
(setq p2(ssname p1索引))
(setq数据(附加数据p2))
(entmod数据)
(setq指数(+指数1))
)
(命令“erase”p2“”)
) 我很困惑。。。。你能粘贴它给你的确切错误吗?
看起来一切都很好,只是我不明白你们想用它做什么
数据
变量 ssget很好,您正在分配变量p1。。。。然后将“n”指定给sset p1的长度。。。然后设置一个计数器,为(ssname)函数提供其索引参数。。。。
所以你得到的是没有过滤器的ssget,这基本上就像(ENTSEL),因为你只需要手动获取选择集中的一个对象。
您可以将过滤器与ssget一起使用,以便自动选择项目。。。。
因此,entsel=1项,ssget=多项。
通过执行(setq p2(ssname p1 index))获得实体名称后,可以将其分配给变量,并使用变量提供erase命令。。。不确定我在一个空列表的变量上看到的数据是什么(entmod)?
我不认为它是这样工作的,我认为这是你的错误的原因。 不需要遍历每个要删除的实体名称,因为erase命令可以删除选择集。
(if (setq s (ssget "_:L" ))
(command "_.erase" s "")
)
是的,塔瓦当然可以提供一个选择集和旁路删除,但我认为他只是想锻炼。。。这就是为什么我试图解释我所看到的。。。。。你认为数据变量有什么好用吗?他是怎么做的? 我没有什么要补充的,你已经很好地描述了早些时候,这就是为什么我只张贴简单的示例代码
我认为这只不过是复制和粘贴代码,或者对与另一个目标相关的代码进行修改,而不是他们将代码驱动到的目标
这就是为什么事情发生在错误的地方,尽管我可能错了 啊,我明白了,好吧。我想这可能是我还不知道的事情。 (defun c:gc (/ p1 p2 data n index)
(setq p1 (ssget))
(setq data()) ;; you don't need this
(setq n (sslength p1))
(setq index 0)
(repeat n
(setq p2 (ssname p1 index))
(setq data (append data p2)) ; append is used with list, "data" variable is not a list
;this is where your error occurred
(entmod data) ; you don't need this
(setq index (+ index 1))
) ; repeat function ends without processing an entity
(command "erase" p2 "") ;must be inside of the repeat function
;put this before you increment the index counter
)
之后
(defun c:gc (/ p1 p2 n index)
(setq p1 (ssget))
(setq n (sslength p1))
(setq index 0)
(repeat n
(setq p2 (ssname p1 index))
(command "erase" p2 "")
(setq index (+ index 1))
)
(princ) ;exist cleanly
) 感谢您的帮助,bhull1985,tharwat,jdiala。
我知道我的问题发生在(setq data(append data p2))。
我尝试了另一个代码来修复这个问题。
我使用ssadd添加
我想要的一件精确的事情是使用“选择”命令以精确的顺序选择对象。
示例:一行一个文本(l1 t1);(l2 t2)。(l3 t3)。。。
但是当我运行这段代码时,我没有得到我想要的结果。
我选择一行,它选择其他行(或文本),而不是一个文本附加。
(定义c:gc(/p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 ss索引n数据开始)
(setq p1(ssget))
(setq n(sslength p1))
(setq索引0)
(setq数据(ssadd))
(重复n
(setq start(ssname p1 index))
(ssadd开始数据)
(setq p2(entget start))
(setq p3(assoc 10 p2))
(setq p4(assoc 11 p2))
(setq p5(+100(/(+(cadr p3)(cadr p4))2)))
(setq p6(+100(/(+(caddr p3)(caddr p4))2)))
(setq p7(-200 p5))
(setq p8(-200 p6))
(setq p9(列表p5 p6))
(setq p10(列表p7 p8))
(setq ss(ssget“C”p9 p10’((0。“text”)))
(setq p11(ssname ss 0))
(ssadd p11数据)
(setq指数(+指数1))
)
(命令“select”data“”)
(普林斯)
)
你可以把马牵到水边,但你不能让它喝水。
页:
[1]
2