乐筑天下

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

[编程交流] 插入具有属性a的块

[复制链接]

2

主题

13

帖子

11

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 18:28:24 | 显示全部楼层 |阅读模式
我被要求想出一种方法,将仪器气泡(用3行单独的文本圈)替换为一个在一大组图形上具有属性的块。图纸上可能有20个不同的仪器气泡。我希望能够在每个位置插入新块,当它要求第一个属性值时,选择一个现有的文本字符串来填充该值。然后提示输入第二个值,然后是第三个值。然后,我可以将新块放置在旧圆圈/文本的位置。然后我想删除旧的线/圆。我搜索了一个现有的lsp例程,它可能会做一些类似的事情。
这是我到目前为止提出的。从我在这里找到的一个文件开始。我意识到这可能不是做这件事的最佳方式,任何帮助或建议都将不胜感激。
 
这正是我想要的,但我有几个问题。我正在选择一个围绕旧圆圈/文本的擦除窗口。当它到达lsp的那个部分时,它允许我为我的窗口选择2个点,但我在做时看不到选择框。有没有更好的方法可以看到选择框?
回复

使用道具 举报

2

主题

13

帖子

11

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 18:33:49 | 显示全部楼层
;定义函数-instbub,用ibblk激活
(定义c:ibb()
;定义picktext以供以后在脚本中使用
(defun picktext()(setq en1(car(entsel“\n选择文本:”)))(setq el1(entget en1))
(如果(=(cdr(assoc 0 el1))“文本”)
(setq ans(assoc 1 el1))
)
) ;结束defun
(命令“osnap”“cen”)
;将pt标识为instbub的插入点
(while(setq pt(getpoint“\n点击插入点:”))
;从文本元素获取单元名称
(picktext)
(setq unitname ans)
;从文本元素获取仪器类型
(picktext)
(setq INST ans型)
;从文本元素获取仪器编号
(picktext)
(setq INSTNUM ans)
; 根据上面存储的信息插入仪器气泡
(命令“attdia”“0”)
(命令“-insert”“instrub.DWG”“\u NON”pt“1”“1”“0”(cdr unitname)(cdr insttype)(cdr instnumb))
(命令“osnap”“off”)
(命令“ERASE”“w”(getpoint)(getpoint)“R”“L”)
(命令“redraw”)
)
(普林斯)
)
回复

使用道具 举报

62

主题

466

帖子

404

银币

后起之秀

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

铜币
310
发表于 2022-7-5 18:36:51 | 显示全部楼层
你有gif录音机吗?文本字符串(其内容)是什么?文字在圆圈内吗?
 
 
 
 
:编辑(修复错误)
 
  1. (defun c:test ( / *error* rb:insertblock rb:put_attributes ss->lst ss blckname )
  2. (defun *error* ( msg )
  3.    (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
  4.        (princ (strcat "\n** Error: " msg " **")))
  5.    (princ)
  6. )
  7. (defun rb:insertblock ( activespace blockname layer insertionpoint scale rotation vla-object / block )
  8. (if
  9.    (setq block
  10.      (vla-insertblock activespace
  11.        (vlax-3d-point insertionpoint)
  12.        blockname scale scale scale rotation
  13.      )
  14.    )
  15.    (progn
  16.      (and (tblsearch "layer" layer)
  17.        (vla-put-layer block layer)
  18.      )
  19.      (if vla-object
  20.        block
  21.        (handent (vla-get-handle block))
  22.      )
  23.    )
  24. )
  25. )
  26. (defun ss->lst ( ss flag / id lst )
  27. (if (eq 'PICKSET (type ss))
  28.    (repeat (setq id (sslength ss))
  29.      (
  30.        (lambda ( name )
  31.          (setq lst
  32.            (cons
  33.              (if flag (vlax-ename->vla-object name)
  34.                name
  35.              )lst
  36.            )
  37.          )
  38.        )(ssname ss (setq id (1- id)))
  39.      )
  40.    )
  41. )
  42. )
  43. (defun rb:put_attributes ( block lst )
  44. (and (vlax-method-applicable-p block 'getattributes)
  45.    (foreach x (vlax-invoke block 'getattributes)
  46.      (foreach a lst
  47.        (if
  48.          (eq (strcase (car a))
  49.            (strcase (vla-get-tagstring x))
  50.          ) (vlax-put x 'textstring (cdr a))
  51.        )
  52.      )
  53.    )
  54. )
  55. )
  56. (if
  57.    (and
  58.      (or
  59.        (and (tblsearch "block" "instrbub") (setq blckname "instrbub"))
  60.        (findfile "instrbub.DWG")
  61.        (alert "Block "instrbub" is missing!")
  62.      )
  63.      (setq ss (ss->lst (ssget '((0 . "circle"))) t))
  64.    )
  65.    (progn
  66.      (foreach x ss
  67.        (rb:put_attributes
  68.          (rb:insertblock
  69.            (vla-get-modelspace
  70.              (vla-get-activedocument (vlax-get-acad-object))
  71.            )
  72.            (setq blckname
  73.              (cond ( blckname "wallball2" )
  74.                ( (findfile "wallball2") )
  75.              )
  76.            )
  77.            (getvar 'clayer)     ;layer
  78.            (vlax-get x 'Center) ;location
  79.             1.                  ;scale
  80.             0.                  ;rotation
  81.             t                   ;return vla-object
  82.          )
  83.          (list
  84.            (cons "tagname1"                               ;attribute tag
  85.                  "text to add to "tagname1" attribute"  ;text for attribute
  86.            )
  87.            (cons
  88.              "tagname2"                               ;attribute tag
  89.              "text to add to "tagname2" attribute"  ;text for attribute
  90.            )
  91.          )
  92.        ) (vla-delete x)
  93.      )
  94.    )
  95. ) (princ)
  96. )
回复

使用道具 举报

2

主题

13

帖子

11

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 18:41:07 | 显示全部楼层
我没有gif录音机。我想做的是用一个块替换图形上的一个符号,这个符号是一个圆圈,里面有3行文字,其中3行是属性(instrub.dwg)。每个图形上可能会出现50个不同的符号,我有大约1000个图形要做。我已经得到了lisp,我一直在努力工作,它是相当好的工作,但如果有一个更有效的方法,我愿意使用它。我正在查看你发布的代码,但我需要一段时间来整理你在那里做了什么。谢谢你的帮助。
 
 
以下是我的最新迭代:
 
 
;定义函数-instbub,用ibb激活
(定义c:ibb()
;定义picktext以供以后在脚本中使用
(defun picktext()(setq en1(car(entsel“\n选择单元文本:”))(setq el1(entget en1))
(如果(=(cdr(assoc 0 el1))“文本”)
(setq ans(assoc 1 el1))
)
) ;结束defun
(defun picktext2()(setq en1(car(entsel“\n选择类型文本:”)))(setq el1(entget en1))
(如果(=(cdr(assoc 0 el1))“文本”)
(setq ans(assoc 1 el1))
)
) ;结束defun
(defun picktext3()(setq en1(car(entsel“\n选择Numb text:)))(setq el1(entget en1))
(如果(=(cdr(assoc 0 el1))“文本”)
(setq ans(assoc 1 el1))
)
) ;结束defun
(命令“osnap”“cen”)
;将pt标识为instbub的插入点
(while(setq pt(getpoint“\n点击插入点:”))
;从文本元素获取单元名称
(picktext)
(setq unitname ans)
;从文本元素获取仪器类型
(picktext2)
(setq INST ans型)
;从文本元素获取仪器编号
(picktext3)
(setq INSTNUM ans)
; 根据上面存储的信息插入仪器气泡
(命令“attdia”“0”)
(命令“-insert”“instrub.DWG”“\u NON”pt“1”“1”“0”(cdr unitname)(cdr insttype)(cdr instnumb))
(命令“osnap”“off”)
(setq old(ssget))
(命令“ERASE”old“R”“L”)
(命令“osnap”“cen”)
(命令“redraw”)
)
(普林斯)
)
回复

使用道具 举报

2

主题

13

帖子

11

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 18:42:05 | 显示全部楼层
我附上一个示例图纸。底部的4个圆圈是我试图修复的。它们被画成一个圆圈和文字。我希望它们与上面的圆形相同,具有文本的属性值。希望这能澄清我想做什么。
实例图纸
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 18:44:48 | 显示全部楼层
您应该只能在文本位于内部时拾取圆,这样ssget就会找到,y插入值上的排序将确定其正确顺序,因为您有对象只需对所有对象使用erase,所以它们就消失了,当您拾取时,您设置了一个变量obj1 obj2 obj3,实体名称为erase obj1 obj2 obj3 OBJ4。与圆心相同,其检索为assoc 10,而不是使用osnap。
 
正如上面的帖子所指出的那样,先选择文本,然后插入,或者现在你有了值,就更新属性。
 
我个人一次性完成所有更改!选择一个圆,返回图层名,或根据您的图纸选择revcloud和hydrogen,建立图层名列表,然后一切都会完成,而不是五分钟的代码抱歉。
 
我相信ssget不能使用圆作为内部选择,任何人请纠正我,所以你需要一个方面的搜索来使用ssget“WP”查找文本对象。正好有一个弧面lisp,我可以改变。
 
最后,周末可能会下雨,所以我可能有一些时间。但其他人请站出来。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 18:47:36 | 显示全部楼层
对于任何感兴趣的人
 
来自帮助
(ssget“WP”pt\U列表)创建由pt\U列表定义的多边形内所有实体的选择集
 
  1. ; converts an arc to a series of straights
  2. ; next version circles
  3. (vl-load-com)
  4. (setq oldsnap (getvar "osmode"))
  5. (setvar "osmode" 0)
  6. (setq oldecho (getvar "cmdecho"))
  7. (setvar "cmdecho" 0)
  8. (while (setq ent (entsel "\nPick arc: "))
  9. (setq obj (vlax-ename->vla-object (car ent)))
  10. (if (= div nil) (setq div (getint "\nEnter number of chords: ")))
  11.      
  12. (setq  endpt (vlax-curve-getEndPoint obj)
  13.     totlen (vlax-curve-getDistAtPoint obj endpt)
  14.     arclen (/ totlen div)
  15.     chrdpt (vlax-curve-getStartPoint obj)
  16.     num 1     
  17. )
  18. (repeat div
  19. (setq newpt (vlax-curve-getPointatDist obj (* arclen num)))
  20. (command "line" chrdpt newpt "")
  21. (setq num (+ num 1))   
  22. (setq chrdpt newpt)
  23. ) ;repeat
  24. (setq objlst (cons obj objlst))
  25. ) ; end while
  26. ;(vlax-for objdel objlst (vlax-delete  objdel))
  27. (setvar "cmdecho" oldecho)
  28. (setvar "osmode" oldsnap)
  29. (princ)
回复

使用道具 举报

7

主题

80

帖子

73

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 18:53:48 | 显示全部楼层
 
所以你试图用红色气球的currnet仪器标签来替换所有红色的仪器符号/气泡,即BLRCL-&BLDIS-,以Instrub“蓝色”代替,对吗?
 
我确实遇到过这种情况,特别是对于新的起草者,在我的项目中进行p&id。。
回复

使用道具 举报

7

主题

80

帖子

73

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 18:54:13 | 显示全部楼层
使用的Lisp:
Ricky Medley的变形
块替换器
 
命令:
嬗变
cg公司
移动“文字/多行文字”
 
请参阅随附的gif。
我很乐意随时帮你清理那些图纸,只要给我买杯啤酒,顺便说一句,我也做p&ID。
文本到att block bubs。拉链
 
此处显示GIF演示
回复

使用道具 举报

2

主题

13

帖子

11

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 18:59:33 | 显示全部楼层
 
 
 
不完全是这样。在过去的20年里,我有1000张由多人制作/修改的图纸,但这个符号没有标准。一些是BLRCL,或者BLDIS,包含3个文本字符串,一些只是一个包含文本的圆,其他的是一个具有不同名称的块。没有太多的一致性。我也许可以使用你发送的文件。非常感谢。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-12 20:12 , Processed in 0.922214 second(s), 72 queries .

© 2020-2025 乐筑天下

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