乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
楼主: woodman78

[编程交流] 导入贴图分幅

[复制链接]

145

主题

590

帖子

446

银币

中流砥柱

Rank: 25

铜币
725
发表于 2022-7-6 07:15:00 | 显示全部楼层
谢谢Jammie,但即使我将其设置为“entsel”,我也会得到以下结果:
  1. Command: GETMAPTILE
  2. Pick a Block: new
  3. _.insertM:\os\Maps\AutoCAD\2500\6301-A.dwg0,0,0110
  4. ; error: bad argument type: streamp nil

 
比加尔说,entsel只能用于选择1个块,而ssget需要用于选择多个块。我需要选择多个块。如何将ssget正确合并到代码中?
回复

使用道具 举报

145

主题

590

帖子

446

银币

中流砥柱

Rank: 25

铜币
725
发表于 2022-7-6 07:17:46 | 显示全部楼层
Jammie,我不知道我是否把调用脚本的代码放在了正确的位置。你能看一下吗?
谢谢
回复

使用道具 举报

2

主题

389

帖子

387

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 07:22:24 | 显示全部楼层
 
嗯,jammie是对的,声明不会按原样工作,但正如BigAl所建议的那样,使用ssget是可以的;它只是不接受消息。只需在ssget之外进行提示。Smth如下:
 
  1. (prompt "\nPick Block(s)...")
  2. (setq chk (ssget))
回复

使用道具 举报

145

主题

590

帖子

446

银币

中流砥柱

Rank: 25

铜币
725
发表于 2022-7-6 07:24:23 | 显示全部楼层
谢谢Neophoible,
我添加了这一点,并收到了以下错误消息:
  1. ; error: bad argument type: consp <Selection set: 144d>

 
这是否意味着它没有形成选择集?在这样使用提示之前,我需要设置其他内容吗?
回复

使用道具 举报

2

主题

389

帖子

387

银币

初来乍到

Rank: 1

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

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 07:32:08 | 显示全部楼层
几个例子
 
  1. (setq blockselection (ssget "_X" (list (cons 0 "INSERT") ))) ; select all blocks in dwg
  2. (setq bname "myblock")
  3. (setq blockselection (ssget "_X" (list (cons 0 "INSERT") (cons 2 bname)))) ; select all blocks named bname in dwg
  4. (setq blockselection (ssget (list (cons 0 "INSERT") ))) ; I will pick the selection but again blocks only also add cons 2 if you like
  5. (setq howmany (sslength blockselection)) ; how many blocks in selection set you can have only 1 its ok.
  6. (setq whichone (ssname blockselection X)) ; X is a number starting at 0 with last number = howmany-1
  7. (setq x 0)
  8. (repeat howmany
  9. (princ (ssname blockselection x)) ; do something here
  10. (setq X (+ x 1))
  11. )
回复

使用道具 举报

2

主题

389

帖子

387

银币

初来乍到

Rank: 1

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

使用道具 举报

145

主题

590

帖子

446

银币

中流砥柱

Rank: 25

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

使用道具 举报

145

主题

590

帖子

446

银币

中流砥柱

Rank: 25

铜币
725
发表于 2022-7-6 07:39:21 | 显示全部楼层
大家好,
 
我一直在使用Bigal早期的代码,使用脚本打开一个新图形,并将地图分幅复制到其中。但我不知道我是否错过了什么。我需要创建文件“C:\acadtemp\tiles.scr”吗?如果是这样,需要做什么?
 
  1. 16

 
谢谢,我想继续。
回复

使用道具 举报

145

主题

590

帖子

446

银币

中流砥柱

Rank: 25

铜币
725
发表于 2022-7-6 07:43:05 | 显示全部楼层
好的,我仍然在尝试SSGET。这就是我到目前为止所拥有的,但我想知道,如果我创建一个包含多个块的集合,那么我是否需要在其中另一个循环,循环通过块名称并插入每个名称的所有块?
 
  1. 17

 
省略了子程序。
 
谢谢
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-10 15:24 , Processed in 0.748529 second(s), 70 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表