乐筑天下

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

[编程交流] 动态块-属性

[复制链接]

7

主题

19

帖子

12

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 18:20:34 | 显示全部楼层 |阅读模式
你好,
 
我有许多不同的块,具有不同的属性和自定义属性(旋转角度、位置1 X、位置1 Y等等)。
它们在属性名称和自定义属性名称之间都有完美的对应关系。
 
例如,如果我有一个具有自定义属性“rotation\u head”和“position\u head”的块,我将有两个属性,称为“rotation\u head”和“position\u head”。
 
我需要一个lisp,其中有两个函数在所有选定的不同块之间循环;其中一个功能是:
-对于每个选定的块,读取属性并设置自定义特性
而另一个将:
-对于每个选定的块,读取自定义特性并设置属性。
 
你认为这样的事情可能吗?
 
这种请求背后的原因是,我需要将形状文件导入和导出到autocad map,并且需要使用形状文件表设置块自定义特性。一
 
提前感谢您的任何想法/提示
当做
GTK公司
回复

使用道具 举报

12

主题

152

帖子

140

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-5 18:28:51 | 显示全部楼层
你可以从Google Lee Mac的动态块函数开始。
回复

使用道具 举报

20

主题

338

帖子

323

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-5 18:34:38 | 显示全部楼层
你所描述的是可能的。可以发布包含块和形状文件的dwg吗?
回复

使用道具 举报

7

主题

19

帖子

12

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 18:39:59 | 显示全部楼层
@Hippe013,您可以找到附着的dwg和shp。
 
@iconeo,我找到了你提到的例程,但我想我是个新手,不会lisp,我自己也做不到
lisp_示例。拉链
回复

使用道具 举报

7

主题

19

帖子

12

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 18:42:58 | 显示全部楼层
慢速地慢速地到了那里,使用Mac Lee函数,我达到了这一点:
 
  1. (defun c:testx1 ( / ent )
  2. (if (setq ent (car (entsel "\nSelect Attributed Block: ")))
  3.    (princ
  4.         (LM:setdynpropvalue
  5.                 (vlax-ename->vla-object ent)
  6.                 "value_a"   ; custom_property
  7.                 (atof
  8.                         (LM:GetAttributeValue
  9.                                 (vlax-ename->vla-object ent)
  10.                                 "value_a"
  11.                         )
  12.                 )
  13.         )
  14.    )               
  15. )
  16. (princ)
  17. )

 
这样,我就可以在选定的块上设置自定义属性“value\u a”和属性“value\u a”的值!
 
下一步是。。。如何选择多个不同的块并在其上运行相同的函数?
 
我试过:
  1. (defun c:a1(/ ss i obj j k mt)
  2.         (if (setq ss (ssget "_:L" '((0 . "INSERT") (66 . 1))))
  3.                 (repeat (setq i (sslength ss))
  4.                         (setq obj (vlax-ename->vla-object (ssname ss (setq i (1- i)))))
  5.                         (princ(LM:GetAttributeValue(obj) "Matricola"))
  6.                 )
  7.   )
  8.      (princ)
  9. )(vl-load-com)

但失败了。。。有什么提示吗?
回复

使用道具 举报

20

主题

338

帖子

323

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-5 18:48:22 | 显示全部楼层
我对你的代码研究得不多。首先想到的是你是如何计算你的ss指数的。
 
也许是这样的。。。
 
  1. (setq cnt 0)
  2. (repeat (sslength ss)
  3. (setq obj (vlax-ename->vla-object (ssname ss cnt)))
  4. (princ (LM:GetAttributeValue obj "Matricola"))
  5. (setq cnt (+ cnt 1))
  6. )
回复

使用道具 举报

7

主题

19

帖子

12

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 18:53:28 | 显示全部楼层
 
我尝试了你的解决方案,我没有得到错误,但没有得到打印。。。我甚至试过了
(princ cnt)在重复中。。。但根本没有输出
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 19:00:25 | 显示全部楼层
看起来您正在使用my Get Attributes函数的Vanilla AutoLISP版本,因此,您应该为该函数提供块参照图元名称,而不是vla对象。
 
下面是一个简单的示例:
  1. (defun c:a1 ( / ent idx sel val )
  2.    (if (setq sel (ssget "_:L" '((0 . "INSERT") (66 . 1))))
  3.        (repeat (setq idx (sslength sel))
  4.            (setq ent (ssname sel (setq idx (1- idx))))
  5.            (if (setq val (LM:getattributevalue ent "Matricola"))
  6.                (princ (strcat "\n" val))
  7.                (princ (strcat "\nAttribute tag "Matricola" not found in block " (cdr (assoc 2 (entget ent)))))
  8.            )
  9.        )
  10.    )
  11.    (princ)
  12. )
回复

使用道具 举报

7

主题

19

帖子

12

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 19:00:46 | 显示全部楼层
 
首先,谢谢你的帮助!
使用你的函数,我仍然可以得到:
; 错误:错误的参数类型:VLA-OBJECT
命令:
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 19:08:40 | 显示全部楼层
您使用的LM:getattributevalue函数的版本是什么?
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-12 19:50 , Processed in 4.163489 second(s), 72 queries .

© 2020-2025 乐筑天下

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