乐筑天下

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

[编程交流] 根据块的

[复制链接]

1

主题

4

帖子

3

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 17:01:18 | 显示全部楼层 |阅读模式
你好
 
我是autocad脚本新手,正在寻求一些建议。我有一个我以前构建的块库,数据块带有属性。是否可以使用一些可能基于脚本的东西来查看属性并将其替换为相应的块?例如,块具有以下属性:
类型:T型
尺寸1:300
尺寸2:200
连接:插座式
 
脚本是否可以查看系统中的所有块,并用库块Tee300200SC替换所有这些配置?
 
如果您能提供任何帮助,我们将不胜感激。
 
谢谢
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 17:11:34 | 显示全部楼层
是的,答案是你得到一个所有块的列表或使用一个特定的块名,然后让每个块看属性,如果是300 200,则替换块。
 
抱歉,现在就去。我会发布一些示例代码
回复

使用道具 举报

1

主题

4

帖子

3

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 17:15:50 | 显示全部楼层
所以这是可能的。我以为会的。我以前从来没有理由使用LISP。任何示例代码都将不胜感激。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 17:27:27 | 显示全部楼层
发布一个包含两个块甚至其他块的dwg,这样可以更容易地查看所需的内容。有两种方法可以通过标记名或属性创建顺序来检索属性信息。更通用的方法是使用创建顺序。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 17:31:43 | 显示全部楼层
这是一个开始加载并选择一个块。你可以看到所有属性值都可以用在具有任意数量属性的块上,我建议使用类似Blkname att 1、att 5、att 3的响应,因此这将采用块名或新的块名,然后向该块添加属性文本,然后替换块。
 
  1. (defun c:test ( / att atts obj)
  2. (setq atts '() )
  3. (setq obj (car (entsel)))
  4. (foreach att (vlax-invoke (vlax-ename->vla-object obj) 'getattributes)
  5. (setq atts (cons (vla-get-textstring att) atts))
  6. )
  7. (princ atts)
  8. )
回复

使用道具 举报

1

主题

4

帖子

3

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 17:39:14 | 显示全部楼层
我稍后会看一看,然后试着玩一玩。谢谢你的帮助比格尔。附件是我所说的一个例子。
示例文件。图纸
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 17:47:28 | 显示全部楼层
正如我所想的那样,你的区块前后都有多个属性,所以答案是询问在本例中使用哪些属性,其3 7 8 9 100 mm,11.25 deg,0.7,Socketed。它是可行的,但有一些怪癖,如匹配“11.25度”与“1125”。这有点复杂。最好是一个更通用的程序,因为您不想为每个选项不断重写代码。
 
可能需要((9 str)(3 num)(8 num)(9 str))&((3)((9)(7))这样,当您更改块之间的顺序时,它就会知道哪些属性被放置在哪里。
回复

使用道具 举报

1

主题

4

帖子

3

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 17:51:24 | 显示全部楼层
如果更容易的话,我可以更改属性顺序和块名称,使它们在本质上保持一致。这仍然是很早的过程,所以这不会成为一个问题。如果不使用一些自动化,我只能看到它变得非常复杂。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 17:57:11 | 显示全部楼层
想一想这些问题并不难
块名称前缀=B
属性需要3 7 8 9,需要一个数字是字符串还是因子*100
属性顺序新块7 3 9 ie位置1=7 2=3 3=9
Delimter为“_”
如果插座使用SO
 
一个双色框有助于自动填充块中尽可能多的属性。
属性Newposition S,N*
 
我要在路上走几天,这样其他人可能会开始。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 18:04:38 | 显示全部楼层
我找了一些时间,开始了它有点复杂,我试图制作一个通用版本,而不仅仅是一个单一的版本。这大约是1/2路。
 
[code](setq obj(car(entsel“Pick block”))(setq attlst nil);稍后在defun内删除(foreach att(vlax invoke(vlax ename->vla object obj)“getattributes”(setq attlst(cons(vla get textstring att)attlst))(setq attlst(reverse attlst))(setq newstr“拾取属性顺序下一步\n\n\n”)(setq x 0)(重复(长度attlst)(setq newstr(strcat newstr(rtos x 2 0)”“(nth x attlst)”)(setq x(+x 1))(警报newstr)(setq ansok“OK”)(while(=ansok“OK”)(if(=(setq ans(getint)“\n输入新的属性顺序
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 08:47 , Processed in 0.623074 second(s), 72 queries .

© 2020-2025 乐筑天下

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