shyhas 发表于 2022-7-6 06:24:59

获取特定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。图纸

Tharwat 发表于 2022-7-6 06:38:04

尝试使用未经测试的代码,并小心选择块本身中的属性。
 

(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)
)

shyhas 发表于 2022-7-6 06:42:26

该方案运作良好。但是我想要的是得到一个特定标签的值,并替换隐藏在块上的标签。
 
在CTAG中。dwg,您可以找到两个标记,分别是从和到。
 
块的插入方式应确保
 
灯2x18。图纸‎ CTAG。图纸灯2x18。图纸‎ .... (可以是其他块,而不是LIGHT 2x18.dwg‎) 但标记名ETAG保持不变。
 
我想在2x18灯下获取标签的ETAG信息。图纸‎ 并将其放在CTAG的起始值上。图纸
 
并在2nd LIGHT 2x18中获取标签的ETAG信息。图纸‎ 并将其放在CTAG的TO值上。图纸
 
你能帮我锻炼一下吗。
 
谢谢和问候
希哈斯
 
 

pBe 发表于 2022-7-6 06:46:30

从cp1和cp2变量创建的线真的有必要吗?或者它只是CTAG插入点的参考?

shyhas 发表于 2022-7-6 06:58:13

8039你好
CP1和CP2用于在第一个和第二个设备之间绘制一条线,也用于获取块CTAG的插入点。
 
我们可以在CTAG块中添加动态对象,而不是这个CP1和CP2。
 
请参阅附件,该附件将向您展示图纸的最后阶段。隐藏属性值用于创建连接和设备表。
 
谢谢和问候
希哈斯

pBe 发表于 2022-7-6 07:04:54

那么,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”“设备标签值”);

shyhas 发表于 2022-7-6 07:10:37

你好
第一个块的ETAG值从CTAG值转到tag,第二个块的ETAG值从CTAG值转到tag。
 
我尝试了您发布的例程,但在选择第一个对象后停止
 
请回复
非常感谢。

pBe 发表于 2022-7-6 07:16:07

奇怪的是,如果选择无效,它的编写方式不应该只是“停止”,而是再次提示您选择有效的对象。
 
如果有错误消息,错误消息是什么?

SLW210 发表于 2022-7-6 07:21:06

shyhas,
 
请阅读代码发布指南,并在将来为您的代码使用代码标签。

shyhas 发表于 2022-7-6 07:26:38

亲爱的朋友们
 
在你的帮助下,我成功地到达了终点,直到插上了木块。
 
我有从到的数据
我不会把它放在块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]
查看完整版本: 获取特定TA的值