乐筑天下

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

[编程交流] 获取特定TA的值

[复制链接]

2

主题

10

帖子

8

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 06:24:59 | 显示全部楼层 |阅读模式
尊敬的用户:
我想从一个属性块中获取一个特定标记的值,并将其放置在另一个块中的另一个特定标记中。
 
以下是我制作的不完整的脚本。我无法从标签中获取值。
请看一下并帮助我。
我已经附上了我想要使用的属性块。
 
 
  1. (defun c:SLD()
  2. (setq osm (getvar "osmode"))
  3. (setvar "osmode" 0)
  4. (setq CP1 (getpoint "\nStart Point: "))
  5. (setq CP2 (getpoint "\nEnd Point: "))
  6. (setq eq1 (entsel "\nSelect first equipment: "))
  7. (setq eqname1  (cdr (assoc 2 (entget (car eq1))))) filter the block name
  8. ; NEED THE FUNCTION.... get the attribute tag value of ETAG of the block eqname1
  9. (setq eq2 (entsel "\nSelect second equipment: "))
  10. (setq eqname2  (cdr (assoc 2 (entget (car eq2))))) filter the block name
  11. ; NEED THE FUNCTION.... get the attribute tag value of ETAG of the block eqname2
  12. (command "line" CP1 CP2 "")
  13. (setq CP3 (polar CP1 (angle CP1 CP2) (/ (distance CP1 CP2) 2)))
  14. (command "_insert" "d:/stdBlk/Dyn/CTAG.dwg" CP3 1 1 "") ; insert the block
  15. ; NEEDED FUNCTION.... need to replace the tag FROM & TO of the inserted block CTAG.dwg from the data retrieved
  16. ; NEEDED FUNCTION.... from the tag ETAG of eqname1 & eqname2
  17. (SETVAR "OSMODE" OSM)
  18. )

 
 
谢谢
CTAG。图纸
灯2x18。图纸
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 06:38:04 | 显示全部楼层
尝试使用未经测试的代码,并小心选择块本身中的属性。
 
  1. (defun c:CopyAtts (/ s ss)
  2. (if
  3.    (and (setq
  4.           s (car
  5.               (nentsel "\n Select the Attribute value in First Block :")
  6.             )
  7.         )
  8.         (if (eq (cdr (assoc 0 (entget s))) "ATTRIB")
  9.           T
  10.           (progn (princ "\n Missed the Attribute !") nil)
  11.         )
  12.         (setq ss
  13.                (car
  14.                  (nentsel "\n Select the Attribute value in Second Block :")
  15.                )
  16.         )
  17.         (if (eq (cdr (assoc 0 (entget ss))) "ATTRIB")
  18.           T
  19.           (progn (princ "\n Missed the Attribute !") nil)
  20.         )
  21.    )
  22.     (entmod (subst (assoc 1 (entget s))
  23.                    (assoc 1 (entget ss))
  24.                    (entget ss)
  25.             )
  26.     )
  27. )
  28. (command "_.regenall")
  29. (princ)
  30. )
回复

使用道具 举报

2

主题

10

帖子

8

银币

初来乍到

Rank: 1

铜币
10
发表于 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

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 06:46:30 | 显示全部楼层
从cp1和cp2变量创建的线真的有必要吗?或者它只是CTAG插入点的参考?
回复

使用道具 举报

2

主题

10

帖子

8

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 06:58:13 | 显示全部楼层
8039你好
CP1和CP2用于在第一个和第二个设备之间绘制一条线,也用于获取块CTAG的插入点。
 
我们可以在CTAG块中添加动态对象,而不是这个CP1和CP2。
 
请参阅附件,该附件将向您展示图纸的最后阶段。隐藏属性值用于创建连接和设备表。
 
谢谢和问候
希哈斯
072506itwkt5t7tyvpplck.jpg
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 07:04:54 | 显示全部楼层
那么,CTAG tag,[一个不可见的]第一个选定或第二个的块/etag名称的值是多少?
 
这有什么必要?
 
  1. (setq eqname1 (cdr (assoc 2 (entget (car eq1)))))

 
Anyhoo。。。。
[code](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”“设备标签值”);
回复

使用道具 举报

2

主题

10

帖子

8

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 07:10:37 | 显示全部楼层
你好
第一个块的ETAG值从CTAG值转到tag,第二个块的ETAG值从CTAG值转到tag。
 
我尝试了您发布的例程,但在选择第一个对象后停止
 
请回复
非常感谢。
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 07:16:07 | 显示全部楼层
奇怪的是,如果选择无效,它的编写方式不应该只是“停止”,而是再次提示您选择有效的对象。
 
如果有错误消息,错误消息是什么?
回复

使用道具 举报

4

主题

2143

帖子

2197

银币

限制会员

铜币
-24
发表于 2022-7-6 07:21:06 | 显示全部楼层
shyhas,
 
请阅读代码发布指南,并在将来为您的代码使用代码标签。
回复

使用道具 举报

2

主题

10

帖子

8

银币

初来乍到

Rank: 1

铜币
10
发表于 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)
(普林斯)
 
)
 
 
 
 
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-8-16 03:08 , Processed in 1.949177 second(s), 75 queries .

© 2020-2025 乐筑天下

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