动态块-属性
你好,我有许多不同的块,具有不同的属性和自定义属性(旋转角度、位置1 X、位置1 Y等等)。
它们在属性名称和自定义属性名称之间都有完美的对应关系。
例如,如果我有一个具有自定义属性“rotation\u head”和“position\u head”的块,我将有两个属性,称为“rotation\u head”和“position\u head”。
我需要一个lisp,其中有两个函数在所有选定的不同块之间循环;其中一个功能是:
-对于每个选定的块,读取属性并设置自定义特性
而另一个将:
-对于每个选定的块,读取自定义特性并设置属性。
你认为这样的事情可能吗?
这种请求背后的原因是,我需要将形状文件导入和导出到autocad map,并且需要使用形状文件表设置块自定义特性。一
提前感谢您的任何想法/提示
当做
GTK公司 你可以从Google Lee Mac的动态块函数开始。 你所描述的是可能的。可以发布包含块和形状文件的dwg吗? @Hippe013,您可以找到附着的dwg和shp。
@iconeo,我找到了你提到的例程,但我想我是个新手,不会lisp,我自己也做不到
lisp_示例。拉链 慢速地慢速地到了那里,使用Mac Lee函数,我达到了这一点:
(defun c:testx1 ( / ent )
(if (setq ent (car (entsel "\nSelect Attributed Block: ")))
(princ
(LM:setdynpropvalue
(vlax-ename->vla-object ent)
"value_a" ; custom_property
(atof
(LM:GetAttributeValue
(vlax-ename->vla-object ent)
"value_a"
)
)
)
)
)
(princ)
)
这样,我就可以在选定的块上设置自定义属性“value\u a”和属性“value\u a”的值!
下一步是。。。如何选择多个不同的块并在其上运行相同的函数?
我试过:
(defun c:a1(/ ss i obj j k mt)
(if (setq ss (ssget "_:L" '((0 . "INSERT") (66 . 1))))
(repeat (setq i (sslength ss))
(setq obj (vlax-ename->vla-object (ssname ss (setq i (1- i)))))
(princ(LM:GetAttributeValue(obj) "Matricola"))
)
)
(princ)
)(vl-load-com)
但失败了。。。有什么提示吗? 我对你的代码研究得不多。首先想到的是你是如何计算你的ss指数的。
也许是这样的。。。
(setq cnt 0)
(repeat (sslength ss)
(setq obj (vlax-ename->vla-object (ssname ss cnt)))
(princ (LM:GetAttributeValue obj "Matricola"))
(setq cnt (+ cnt 1))
)
我尝试了你的解决方案,我没有得到错误,但没有得到打印。。。我甚至试过了
(princ cnt)在重复中。。。但根本没有输出 看起来您正在使用my Get Attributes函数的Vanilla AutoLISP版本,因此,您应该为该函数提供块参照图元名称,而不是vla对象。
下面是一个简单的示例:
(defun c:a1 ( / ent idx sel val )
(if (setq sel (ssget "_:L" '((0 . "INSERT") (66 . 1))))
(repeat (setq idx (sslength sel))
(setq ent (ssname sel (setq idx (1- idx))))
(if (setq val (LM:getattributevalue ent "Matricola"))
(princ (strcat "\n" val))
(princ (strcat "\nAttribute tag \"Matricola\" not found in block " (cdr (assoc 2 (entget ent)))))
)
)
)
(princ)
)
首先,谢谢你的帮助!
使用你的函数,我仍然可以得到:
; 错误:错误的参数类型:VLA-OBJECT
命令: 您使用的LM:getattributevalue函数的版本是什么?
页:
[1]
2