愚蠢的问题?
好的,今天下午我的大脑有点疲惫,我已经很久没有写Lisp程序了。我需要lisp中的一条线来选择具有公共点的所有对象(在本例中,是多段线的起点和块属性的插入点,以便将它们转换为块)
我应该写什么?我最终陷入了ssget、ssadd、entsel和其他所有记忆不清的函数的噩梦。
(顺便说一句,重新学习Lisp程序并伴有发臭的感冒从来都不是一个好主意 您可能只需要一个ssget呼叫。类似这样:
(ssget“X”(列表(cons 10 pt)))
其中pt是公共点。这适用于多段线的起点、块的插入点和文本的插入点。它将选择与该点相关联的DXF组码为10的所有内容。我认为第10组是最常见的插入点,但请检查此处,以防万一:
http://autodesk.com/techpubs/autocad/acad2000/dxf/ 我一直在得到“糟糕的ssget列表值”,尽管就我所见,10应该可以工作。
除非我错过了什么。。。。
这很可能。。。。 检查传递给函数的点。
(ssget“X”(列表(cons 10(列表0)))
将工作,因为DXF代码10得到了它想要的列表。然而,这不会:
(ssget“X”(列表(cons 10“why hello thar”))
因为代码10不喜欢字符串。 我承认我现在很困惑。
这是我为选择多段线和属性定义并转换为块而编写的内容:
(ssget“x”(列表(cons 10(列表976.1774 821.7919 0.00)))
(命令“block”“populate”“976.1774821.7919”)
(命令“insert”“populate”“976.1774821.7919”“”“”“”“”“”
我哪里出错了?(到处都是)。。。。 啊,我知道你在那里做了什么。
有一点建议,每当我处理这样的命令行调用时,当我遇到一个又一个错误时,我通常从第一个命令调用开始,并保持菊花链,直到我让它工作。也就是说,从以下方面开始:
(命令“block”)并查看发生了什么。然后
(命令“block”“populate”)并查看发生了什么。然后
(命令“block”“populate”“976.1774821.7919”)并查看发生了什么。
幸运的是,在这种情况下,一旦你这样做,很容易看到。我将为您省去麻烦:block命令需要对象。您已经通过ssget调用很好地收集了它们,但现在需要将它们放入创建块的命令函数中。这应该紧跟在“976.1774821.7919”之后,当你到达那里时,你会看到它(命令提示符会询问你想要的对象)。
此外,请记住,ssget调用可能返回nil,这将破坏创建块的命令调用,以及后面可能出现的任何其他调用。 不要介意。。。修复了它。
为你的帮助干杯。 感谢您的快速回复。。。正如我所说,我的大脑严重混乱……:-)
当我发布我的问题时,我几乎意识到我做错了什么。
谢谢你! 很乐意帮助^。^ 这个问题与这个问题无关,但我认为它属于一个愚蠢的问题。我已经用ssget选择了动态块,现在如何更改动态块长度?我使用的是Alan J的一个代码,在插入块时有效,但这是更改现有块时的方法吗?
(vl-load-com)
((lambda (block)
(foreach x (vlax-invoke block 'GetDynamicBlockProperties)
(and (eq (vla-get-propertyname x) "Distance1")
(vla-put-value
x
(distance p1 p2)
)
)
)
)
)
页:
[1]
2