Lord V 发表于 2022-7-6 10:53:26

愚蠢的问题?

好的,今天下午我的大脑有点疲惫,我已经很久没有写Lisp程序了。
 
我需要lisp中的一条线来选择具有公共点的所有对象(在本例中,是多段线的起点和块属性的插入点,以便将它们转换为块)
 
我应该写什么?我最终陷入了ssget、ssadd、entsel和其他所有记忆不清的函数的噩梦。
 
(顺便说一句,重新学习Lisp程序并伴有发臭的感冒从来都不是一个好主意

Freerefill 发表于 2022-7-6 10:58:20

您可能只需要一个ssget呼叫。类似这样:
 
(ssget“X”(列表(cons 10 pt)))
 
其中pt是公共点。这适用于多段线的起点、块的插入点和文本的插入点。它将选择与该点相关联的DXF组码为10的所有内容。我认为第10组是最常见的插入点,但请检查此处,以防万一:
 
http://autodesk.com/techpubs/autocad/acad2000/dxf/

Lord V 发表于 2022-7-6 11:02:32

我一直在得到“糟糕的ssget列表值”,尽管就我所见,10应该可以工作。
 
除非我错过了什么。。。。
 
这很可能。。。。

Freerefill 发表于 2022-7-6 11:04:07

检查传递给函数的点。
 
(ssget“X”(列表(cons 10(列表0)))
 
将工作,因为DXF代码10得到了它想要的列表。然而,这不会:
 
(ssget“X”(列表(cons 10“why hello thar”))
 
因为代码10不喜欢字符串。

Lord V 发表于 2022-7-6 11:06:45

我承认我现在很困惑。
 
这是我为选择多段线和属性定义并转换为块而编写的内容:
 
(ssget“x”(列表(cons 10(列表976.1774 821.7919 0.00)))
(命令“block”“populate”“976.1774821.7919”)
(命令“insert”“populate”“976.1774821.7919”“”“”“”“”“”
 
我哪里出错了?(到处都是)。。。。

Freerefill 发表于 2022-7-6 11:09:57

啊,我知道你在那里做了什么。
 
有一点建议,每当我处理这样的命令行调用时,当我遇到一个又一个错误时,我通常从第一个命令调用开始,并保持菊花链,直到我让它工作。也就是说,从以下方面开始:
 
(命令“block”)并查看发生了什么。然后
(命令“block”“populate”)并查看发生了什么。然后
(命令“block”“populate”“976.1774821.7919”)并查看发生了什么。
 
幸运的是,在这种情况下,一旦你这样做,很容易看到。我将为您省去麻烦:block命令需要对象。您已经通过ssget调用很好地收集了它们,但现在需要将它们放入创建块的命令函数中。这应该紧跟在“976.1774821.7919”之后,当你到达那里时,你会看到它(命令提示符会询问你想要的对象)。
 
此外,请记住,ssget调用可能返回nil,这将破坏创建块的命令调用,以及后面可能出现的任何其他调用。

Lord V 发表于 2022-7-6 11:12:33

不要介意。。。修复了它。
 
为你的帮助干杯。

Lord V 发表于 2022-7-6 11:17:48

感谢您的快速回复。。。正如我所说,我的大脑严重混乱……:-)
 
当我发布我的问题时,我几乎意识到我做错了什么。
 
谢谢你!

Freerefill 发表于 2022-7-6 11:21:15

很乐意帮助^。^

Lt Dan's l 发表于 2022-7-6 11:23:36

这个问题与这个问题无关,但我认为它属于一个愚蠢的问题。我已经用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
查看完整版本: 愚蠢的问题?