woodman78 发表于 2022-7-6 07:15:00

谢谢Jammie,但即使我将其设置为“entsel”,我也会得到以下结果:
Command: GETMAPTILE

Pick a Block: new
_.insertM:\os\Maps\AutoCAD\2500\6301-A.dwg0,0,0110
; error: bad argument type: streamp nil
 
比加尔说,entsel只能用于选择1个块,而ssget需要用于选择多个块。我需要选择多个块。如何将ssget正确合并到代码中?

woodman78 发表于 2022-7-6 07:17:46

Jammie,我不知道我是否把调用脚本的代码放在了正确的位置。你能看一下吗?
谢谢

neophoible 发表于 2022-7-6 07:22:24

 
嗯,jammie是对的,声明不会按原样工作,但正如BigAl所建议的那样,使用ssget是可以的;它只是不接受消息。只需在ssget之外进行提示。Smth如下:
 
(prompt "\nPick Block(s)...")
(setq chk (ssget))

woodman78 发表于 2022-7-6 07:24:23

谢谢Neophoible,
我添加了这一点,并收到了以下错误消息:
; error: bad argument type: consp <Selection set: 144d>
 
这是否意味着它没有形成选择集?在这样使用提示之前,我需要设置其他内容吗?

neophoible 发表于 2022-7-6 07:26:44

很抱歉,我没有尝试遍历代码,只是注意到可以使用ssget。
 
您将遇到的“问题”是,处理一组实体与处理单个实体不同。您需要了解选择集是如何工作的。这并不难,但您会发现需要遍历集合并处理每个实体。
 
在大多数情况下,最好生成一个处理单个实体的子例程,然后为集合中的每个成员调用该子例程。它可以让你的程序更清晰,更有条理,更容易调试,等等。
 
实体在选择集中编号,因此您只需设置一个计数器并以这种方式处理它们。仔细阅读,如果你对此有任何问题,请提问。标准的起点是AutoLISP开发人员指南。它从AutoCAD 2013 PDF版本的第74页开始,但也应在线提供(请参见下面的链接)。可能还有其他一些好地方可以查看这个主题。我只是把它作为一个起点。希望这有帮助。
 
http://exchange.autodesk.com/autocad/enu/online-help/browse#WS1a9193826455f5ff561db57a12bd50eabde-7fdb。htm

BIGAL 发表于 2022-7-6 07:32:08

几个例子
 
(setq blockselection (ssget "_X" (list (cons 0 "INSERT") ))) ; select all blocks in dwg

(setq bname "myblock")
(setq blockselection (ssget "_X" (list (cons 0 "INSERT") (cons 2 bname)))) ; select all blocks named bname in dwg

(setq blockselection (ssget (list (cons 0 "INSERT") ))) ; I will pick the selection but again blocks only also add cons 2 if you like

(setq howmany (sslength blockselection)) ; how many blocks in selection set you can have only 1 its ok.
(setq whichone (ssname blockselection X)) ; X is a number starting at 0 with last number = howmany-1

(setq x 0)
(repeat howmany
(princ (ssname blockselection x)) ; do something here
(setq X (+ x 1))
)

neophoible 发表于 2022-7-6 07:33:00

仅供参考,因为你在这里申报了他们
您不需要将变量初始化为nil,也不需要声明类型。所以,你可以消除这条线
你可以使用下面的循环来获得你的集合
BIGAL在这里提供了更多,特别是关于简化集合的方法。
 
确保将用于块集的任何变量名添加到局部变量列表中。你不希望一堆不需要的选择集占用内存。

woodman78 发表于 2022-7-6 07:36:39

谢谢大家,但我一点都不懂编码。我不能把我的脑袋放在那些与选择集有关的东西上,所以我要把它关掉。
我必须回到我有希望理解的基础。
我已经决定接受用户可以选择一个块,并将该主图块的所有地图图块放入。我遇到的问题是,如果我使用块选择要插入的地图分幅,则该块在图形中定义,因此无法插入实际的地图分幅。我一直在研究的一种方法是在块的末尾放一个字母,然后当它被选中时,读取块名称并删除字母。我已经调查过了,我不知道我要去哪里。。。
 
我想做的另一件事是复制插入到新图形中的块。。。。我认为这将是相当直接的,但似乎不是。。
 
我会很感激你的帮助,请。。。
谢谢
 
15

woodman78 发表于 2022-7-6 07:39:21

大家好,
 
我一直在使用Bigal早期的代码,使用脚本打开一个新图形,并将地图分幅复制到其中。但我不知道我是否错过了什么。我需要创建文件“C:\acadtemp\tiles.scr”吗?如果是这样,需要做什么?
 
16
 
谢谢,我想继续。

woodman78 发表于 2022-7-6 07:43:05

好的,我仍然在尝试SSGET。这就是我到目前为止所拥有的,但我想知道,如果我创建一个包含多个块的集合,那么我是否需要在其中另一个循环,循环通过块名称并插入每个名称的所有块?
 
17
 
省略了子程序。
 
谢谢
页: 1 [2]
查看完整版本: 导入贴图分幅