获取特定TA的值
尊敬的用户:我想从一个属性块中获取一个特定标记的值,并将其放置在另一个块中的另一个特定标记中。
以下是我制作的不完整的脚本。我无法从标签中获取值。
请看一下并帮助我。
我已经附上了我想要使用的属性块。
(defun c:SLD()
(setq osm (getvar "osmode"))
(setvar "osmode" 0)
(setq CP1 (getpoint "\nStart Point: "))
(setq CP2 (getpoint "\nEnd Point: "))
(setq eq1 (entsel "\nSelect first equipment: "))
(setq eqname1(cdr (assoc 2 (entget (car eq1))))) filter the block name
; NEED THE FUNCTION.... get the attribute tag value of ETAG of the block eqname1
(setq eq2 (entsel "\nSelect second equipment: "))
(setq eqname2(cdr (assoc 2 (entget (car eq2))))) filter the block name
; NEED THE FUNCTION.... get the attribute tag value of ETAG of the block eqname2
(command "line" CP1 CP2 "")
(setq CP3 (polar CP1 (angle CP1 CP2) (/ (distance CP1 CP2) 2)))
(command "_insert" "d:/stdBlk/Dyn/CTAG.dwg" CP3 1 1 "") ; insert the block
; NEEDED FUNCTION.... need to replace the tag FROM & TO of the inserted block CTAG.dwg from the data retrieved
; NEEDED FUNCTION.... from the tag ETAG of eqname1 & eqname2
(SETVAR "OSMODE" OSM)
)
谢谢
CTAG。图纸
灯2x18。图纸 尝试使用未经测试的代码,并小心选择块本身中的属性。
(defun c:CopyAtts (/ s ss)
(if
(and (setq
s (car
(nentsel "\n Select the Attribute value in First Block :")
)
)
(if (eq (cdr (assoc 0 (entget s))) "ATTRIB")
T
(progn (princ "\n Missed the Attribute !") nil)
)
(setq ss
(car
(nentsel "\n Select the Attribute value in Second Block :")
)
)
(if (eq (cdr (assoc 0 (entget ss))) "ATTRIB")
T
(progn (princ "\n Missed the Attribute !") nil)
)
)
(entmod (subst (assoc 1 (entget s))
(assoc 1 (entget ss))
(entget ss)
)
)
)
(command "_.regenall")
(princ)
)
该方案运作良好。但是我想要的是得到一个特定标签的值,并替换隐藏在块上的标签。
在CTAG中。dwg,您可以找到两个标记,分别是从和到。
块的插入方式应确保
灯2x18。图纸 CTAG。图纸灯2x18。图纸 .... (可以是其他块,而不是LIGHT 2x18.dwg) 但标记名ETAG保持不变。
我想在2x18灯下获取标签的ETAG信息。图纸 并将其放在CTAG的起始值上。图纸
并在2nd LIGHT 2x18中获取标签的ETAG信息。图纸 并将其放在CTAG的TO值上。图纸
你能帮我锻炼一下吗。
谢谢和问候
希哈斯
从cp1和cp2变量创建的线真的有必要吗?或者它只是CTAG插入点的参考? 8039你好
CP1和CP2用于在第一个和第二个设备之间绘制一条线,也用于获取块CTAG的插入点。
我们可以在CTAG块中添加动态对象,而不是这个CP1和CP2。
请参阅附件,该附件将向您展示图纸的最后阶段。隐藏属性值用于创建连接和设备表。
谢谢和问候
希哈斯 那么,CTAG tag,[一个不可见的]第一个选定或第二个的块/etag名称的值是多少?
这有什么必要?
(setq eqname1 (cdr (assoc 2 (entget (car eq1)))))
Anyhoo。。。。
(defun c:SLD(/*error*\u attfunc cp1 cp2 eqv1 data cp3 e)(defun*error*(msg)(命令“.u undo”“\u end”)(setvar'osmode old\u os)(setvar'attreq old\u atr)(setvar'cmdecho 1))(defun attfunc(en lst/vals v)(mapcar(函数(lambda(at)(setq vals(list(vla get tagstring at)(vla get textstring at)))(if(and lst(setq v(assoc(car vals))lst(vla put textstring at(cadr v)))vals))(vlax invoke(if(eq(type en)'VLA-OBJECT)en(vlax ename->VLA OBJECT en))'Getattributes))(setq ff nil old\u os(getvar'osmode)old\u atr(getvar'Attreq))(setvar'osmode 0)(setvar'Attreq 0)(setvar'cmdecho 0)(命令“.\u undo”“\u begin”)(if(and(and(or(tblsearch“Block”“Ctag”)(setq ff(findfile“d:/stdBlk/Dyn/Ctag.dwg)))(setq CP1(getpoint“\n起始点:”)(setq CP2(getpoint CP1”\n起始点:”)(setq data(mapcar(function)(lambda(itm)(while itm)(if(and)(setq e(Car(entsel(Strcat“\n选择“itm”设备:))))(vlax-method-applicable-p(setq e(vlax ename->vla object e))'GetAttributes)(setq val(assoc“ETAG”(\u attfunc e nil)))(setq itm nil)(提示“\n未找到属性:”)(if val(Cadr val))'(“First”“Second”))(progn(命令行“CP1 CP2”)(setq CP3(极坐标CP1(角度CP1 CP2)(/(距离CP1 CP2)2))(命令“_insert”(if ff“CTAG”)CP3 1 1(/(*(角度CP1 CP2)180.0)pi));插入块(_attfunc(entlast)(list(list“CTAG”“设备标签值”); 你好
第一个块的ETAG值从CTAG值转到tag,第二个块的ETAG值从CTAG值转到tag。
我尝试了您发布的例程,但在选择第一个对象后停止
请回复
非常感谢。 奇怪的是,如果选择无效,它的编写方式不应该只是“停止”,而是再次提示您选择有效的对象。
如果有错误消息,错误消息是什么? shyhas,
请阅读代码发布指南,并在将来为您的代码使用代码标签。 亲爱的朋友们
在你的帮助下,我成功地到达了终点,直到插上了木块。
我有从到的数据
我不会把它放在块CTAG中的相关标签上
请同样帮助我。
要从CTAG的标记中粘贴的数据为eqname1
和
要粘贴到CTAG的标记中的数据为eqname2
(定义c:SLD()
(setq osm(getvar“osmode”))
(setvar“osmode”18)
(setq eq1(nentsel“\n选择第一个设备标签:”);选择第一个设备标签
(setq eqname1(cdr(assoc 1(entget(car eq1 k)а))));需要获得第一台设备的名称
(setq eq2(nentsel“\n选择下一个设备标签:”);选择第二个设备标签
(setq eqname2(cdr(assoc 1(entget(car eq2 107;)а)));需要获取第二台设备的标签名
(setq cp1(getpoint“\n起始点:”);连接器的起点
(setq cp2(getpoint“\nEnd Point:”);连接器的端点
(命令行“cp1 cp2”);在第一个和第二个设备之间绘制线
(setq dist1(距离cp1 cp2));获取电缆标签的插入点
(setq ang(角度cp1-cp2))
(setq dist2(极性cp1 ang(/dist1 2)))
(命令“_insert”d:/stdBlk/Dyn/CTAG.dwg“dist2“”);在电缆上方插入电缆标签
;; ****
(setvar“osmode”osm)
(普林斯)
)
页:
[1]