乐筑天下

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

[编程交流] autolisp提取心房

[复制链接]

55

主题

118

帖子

65

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
273
发表于 2022-7-6 09:49:56 | 显示全部楼层 |阅读模式
我需要多次提取某些块的属性,以便比较结果。因此,非常希望有人帮助我使用autolisp例程,该例程可以从以“通配符”开头的块中请求属性,并将信息提取到具有序列名称的excel文件中
 
提前感谢
S
回复

使用道具 举报

3

主题

19

帖子

16

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-6 10:10:58 | 显示全部楼层
如果您安装了Express Tools,则有一个从块中提取属性的ATTOUT,不确定这是否对您有用
回复

使用道具 举报

11

主题

98

帖子

87

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
55
发表于 2022-7-6 10:38:12 | 显示全部楼层
以下代码应该可以帮助您开始
[code](vl load com)(defun c:ccc(/blockFound block blockRecord atts getAtts name validCollection attList i)(while(=blockFound nil)(setq block(entsel“\n选择一个attibute块的实例:”)(if(=block nil)(princ“\n未选择实体”)(progn(setq block(vlax ename->vla object(car block))(if(eq(vlax get property block’objectName)“AcDbBlockReference”)(if(=(vla get hasaattributes block):vlax true)(setq blockFound t)(princ“\n所选块不包含属性”)(princ“\n所选实体不是块引用”))(setq blockRecord(getBlockTableRecord(vlax get property block'Name))(setq atts(getAttNames blockRecord))(listtributes(vlax get property blockRecord'Name)atts)(while(=validCollection nil)(setq name(getstring“\n输入要添加到集合的属性名称或留空以继续:”)(cond((eq name“”)(if(/=getAtts nil)(setq validCollection t)(princ“\n至少必须将一个属性添加到集合列表:”)((isInList atts name)(if(=(isInList getAtts name)nil)(setq getAtts(append getAtts(list name))))(princ“\n属性已在集合列表中”))((princ“\n添加了无效的属性名称”)))(setq sset(ssget“X”(list(cons 0“INSERT”)(cons 2(vlax get property blockRecord‘name kа))(setq i-1)(while(vla object(ssname sset i))getAtts)))(princ attList))(defun getBlockTableRecord(name/bl c)(vlax for c(vla get blocks(vla get activedocument)(vlax get acad object))(if(eq(vla get name c)name)(setq bl c))(bl)(defun getAttNames(blockRecord/c name)(vlax for c blockRecord(if(eq(vlax get property c’objectName)“acdbattributefinition”)(setq names(append names(list(vlax get property c’tagString))))name)(defun getAttValues(ent atts/i return attList)(setq attList(vlax safearray->list)(vlax variant value(vla getattributes ent))(foreach c atts(setq i-1)(while(<(setq i(1+i))(length attList))(if(eq(strcase(vla get tagString(nth i attList)))(strcase c))(setq return(append return(list(vla get textring(nth i attList)k)))))return)(defun listtributes(blockName atts/c)(princ(strcat“\n block name:”blockName))(princ“\n属性:”)(foreach c atts(princ(strcat“\n”c)))(defun isInList(lst item/i return)(setq i-1)(而(
回复

使用道具 举报

11

主题

98

帖子

87

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
55
发表于 2022-7-6 11:07:23 | 显示全部楼层
Right在当天早些时候与excel进行了一场较量。
 
[code](vl load com)(defun c:ccc(/blockFound block blockRecord atts getAtts name validCollection attList i)(while(=blockFound nil)(setq block(entsel“\n选择一个attibute块的实例:”)(if(=block nil)(princ“\n未选择实体”)(progn(setq block(vlax ename->vla object(car block)))(if(eq(vlax get property block'objectName)“AcDbBlockReference”)(if(=(vla get hasaattributes block):vlax true)(setq blockFound t)(princ“\n所选块不包含属性”)(princ“\n所选实体不是块引用”))(setq blockRecord(getBlockTableRecord(vlax get property block'Name))(setq atts(getAttNames blockRecord))(listtributes(vlax get property blockRecord'Name)atts)(while(=validCollection nil)(setq name(getstring“\n输入要添加到集合的属性名称或留空以继续:”)(cond((eq name“”)(if(/=getAtts nil)(setq validCollection t)(princ“\n至少必须将一个属性添加到集合列表:”)((isInList atts name)(if(=(isInList getAtts name)nil)(setq getAtts(append getAtts(list name))))(princ“\n属性已在集合列表中”))((princ“\n添加了无效的属性名称”)))(setq sset(ssget“X”(list(cons 0“INSERT”)(cons 2(vlax get property blockRecord'name凖凖))(setq i-1)(while(vla object(ssname sset i))getAtts)))(toExcel atts attList))(defun getBlockTableRecord(name/bl c)(vlax for c(vla get blocks(vla get activedocument))(vlax get acad object))(if(eq(vla get name c)name)(setq bl c))(bl)(defun getAttNames(blockRecord/c name)(vlax for c blockRecord(if(eq(vlax get property c’objectName)“acdbattributefinition”)(setq names(append names(list(vlax get property c’tagString))))name)(defun getAttValues(ent atts/i return attList)(setq attList(vlax safearray->list)(vlax variant value(vla getattributes ent))(foreach c atts(setq i-1)(while(<(setq i(1+i))(length attList))(if(eq(strcase(vla get tagString(nth i attList)))(strcase c))(setq return(append return(list(vla get textring(nth i attList)k)))))return)(defun listtributes(blockName atts/c)(princ(strcat“\n block name:”blockName))(princ“\n属性:”)(foreach c atts(princ(strcat“\n”c)))(defun isInList(lst item/i return)(setq i-1)(而(
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-7 00:32 , Processed in 0.425042 second(s), 60 queries .

© 2020-2025 乐筑天下

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