乐筑天下

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

[编程交流] 选择嵌套属性tex

[复制链接]

24

主题

147

帖子

123

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
120
发表于 2022-7-5 23:59:01 | 显示全部楼层 |阅读模式
大家好,
 
 
我需要帮助选择嵌套对象,该对象是块中的属性文本,以便能够删除其上的图案填充。下面是我目前正在使用的代码(不是我最初使用的代码,我为我的应用程序对其进行了一些调整)。这段代码只适用于整个块,但不允许我只选择文本。
 
  1. (defun Fixhatch (/ Hatchfix objct)
  2. (while
  3.      (setq Hatchfix (entsel "\nSelect Hatch to fix (or Enter to close):"))
  4.             (redraw (car Hatchfix) 3)
  5.             (Alert "\n***Select object(s) to clear/skip hatch:***")
  6.      (setq objct (ssget))
  7.         
  8.      (if (eq (cdr (assoc 0 (entget (setq Hatchfix (car Hatchfix))))) "HATCH")
  9.    
  10.      (command "_.-hatchedit" Hatchfix "Ad" "s" objct "" "")
  11.   (princ "\nSelected entity is not a hatch.")
  12.       );end if
  13. );end while
  14.      
  15. );end defun

 
 
005902uhlyh33a55rkuvyr.jpg
 
如您所见,文本TB6是矩形块的属性文本,我只想从文本中删除图案填充。
 
这能做到吗?
 
提前谢谢。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 00:03:12 | 显示全部楼层
  1. (defun c:Test (/ s)
  2. ;; Tharwat 21.10.2013    ;;
  3. (or Doc
  4.      (setq Doc (vla-get-ActiveDocument (vlax-get-acad-object)))
  5. )
  6. (while
  7.    (and (setq s (car (nentsel "\n Select Hatch in Block to delete :")))
  8.         (eq (cdr (assoc 0 (entget s))) "HATCH")
  9.    )
  10.     (vl-catch-all-apply
  11.       'vla-delete
  12.       (list (vlax-ename->vla-object s))
  13.     )
  14.     (vla-regen Doc AcAllViewports)
  15. )
  16. (princ)
  17. )
  18. (vl-load-com)
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 00:07:00 | 显示全部楼层
据我所知,即使将属性子图元提供给HATCHEDIT命令(使用ENTSEL选择),该命令也将仅处理主块参照图元,从而在块周围创建图案填充边界。
回复

使用道具 举报

24

主题

147

帖子

123

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
120
发表于 2022-7-6 00:08:40 | 显示全部楼层
 
嗨,塔瓦,
 
我试着使用你的代码,但它只是删除了图案填充。这不是我的本意。也许我解释得不好。
 
下图显示了我的lisp版本“不正确”。如果我能得到“正确”的版本,使图案填充只跳过属性文本(而不是整个块)。
005905tz3zszh888zth1fj.jpg
 
我看到了Lee使用nentsel所说的内容,但仅限于选择上层实体(即块)。
 
有办法吗?
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 00:13:59 | 显示全部楼层
舱口是块的一部分吗?还是一个单独的实体?
回复

使用道具 举报

24

主题

147

帖子

123

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
120
发表于 2022-7-6 00:17:51 | 显示全部楼层
 
图案填充是一个单独的实体。它是由一个lisp实用程序添加的,该实用程序一次将hatch添加到多个云。
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 00:19:53 | 显示全部楼层
下面是我将如何解决这个问题:
 
选择属性实体
复制选定的嵌套实体
创建与属性属性匹配的文本
运行你的FIXHATCH东西
删除图案填充的关联特性
删除复制的文本字符串
 
编辑:一次成功。
回复

使用道具 举报

24

主题

147

帖子

123

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
120
发表于 2022-7-6 00:22:11 | 显示全部楼层
 
谢谢pBe的建议。
 
但这正是我到目前为止一直在做的工作。但这需要做更多的工作。
 
我在想AutoLISP可能有不同的方法来解决这个问题。此外,删除图案填充不仅限于文本。有时,我还必须从块中选择除文本实体之外的其他实体。
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 00:26:20 | 显示全部楼层
 
嗯,不是真的shailujp,等等,我将为属性编写一个简短的代码。。。
 
编辑:针对多选和选定图元类型进行修改
 
  1. (defun c:HIH (/ _tempE hat ob a2t atb prop atb hat holes ); Hole in Hatch
  2. (defun _tempE (ne / tmp)
  3. (setq tmp (entmakex (entget (car ne))))
  4. (vla-transformby
  5.    (vlax-ename->vla-object tmp)
  6.    (vlax-tmatrix (caddr ne))
  7. )
  8. tmp
  9. )
  10. ;;;        Borrowed from LM        ;;;
  11. ;;;   mod from /= to wcmatch          ;;;
  12. (defun _selectobject ( msg obj fun / sel )
  13.        (while
  14.            (progn (setvar 'errno 0) (setq sel (car (setq itm ((eval fun) msg))))
  15.                (cond
  16.                    (   (= 7 (getvar 'errno))
  17.                        (princ "\nMissed, try again.")
  18.                    )
  19.                    (   (= 'ename (type sel))
  20.                        (if (not (wcmatch  (cdr (assoc 0 (entget sel))) obj))
  21.                            (princ "\nInvalid object selected.")
  22.                        )
  23.                    )
  24.                )
  25.            )
  26.        )
  27.        itm
  28.    )
  29. ;;;                                ;;;
  30. (if  (setq holes (ssadd) hat (_selectobject "\nSelect Hatch: "     "HATCH"  'entsel))
  31. (progn
  32.    [color="blue"](redraw (car hat) 3)[/color]
  33. (while
  34.   (Setq ob (_selectobject "\nSelect objects to exclude hatch: " "ATTRIB,*LINE,*TEXT,CIRCLE" 'nentselp))
  35.   (ssadd
  36.   (if (eq (cdr (assoc 0 (entget (car ob)))) "ATTRIB")
  37.                 (progn
  38.                   (setq a2t (vlax-ename->vla-object (car ob)))
  39.                   (Setq        prop (mapcar '(lambda (p)
  40.                                         (vlax-get a2t p)
  41.                                       )
  42.                                      '("Insertionpoint" "Textstring" "Height")))
  43.                   (setq  atb        (vlax-invoke
  44.                           (vlax-get (vla-get-ActiveLayout
  45.                                       (vla-get-activedocument (vlax-get-acad-object))
  46.                                     ) 'Block ) 'AddText
  47.                           (cadr prop)
  48.                           (car prop)
  49.                           (caddr prop)
  50.                         )
  51.                   )(vlax-vla-object->ename atb)
  52.                 )
  53.     (_tempE ob)
  54.     ) Holes)
  55. [color="blue"] (redraw (ssname holes (1- (sslength holes))) 3)[/color]
  56.   )
  57. (command "_.-hatchedit" (setq hat (Car hat)) "Ad" "s" holes "" "")
  58. (vla-put-AssociativeHatch (vlax-ename->vla-object hat) :vlax-false)
  59.            (command "_.erase" holes "")
  60. )
  61. )(princ)
  62. )

 
编辑:针对多个选择进行修改
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 00:30:35 | 显示全部楼层
好主意pBe-跳出框框思考
 
以下是我对您想法的实现,使用我的Burst升级程序中的函数:
 
  1. ([color=BLUE]defun[/color] c:fixhatch ( [color=BLUE]/[/color] _selectobject att hat obj txt )
  2.    ([color=BLUE]defun[/color] _selectobject ( msg obj fun [color=BLUE]/[/color] sel )
  3.        ([color=BLUE]while[/color]
  4.            ([color=BLUE]progn[/color] ([color=BLUE]setvar[/color] 'errno 0) ([color=BLUE]setq[/color] sel ([color=BLUE]car[/color] (([color=BLUE]eval[/color] fun) msg)))
  5.                ([color=BLUE]cond[/color]
  6.                    (   ([color=BLUE]=[/color] 7 ([color=BLUE]getvar[/color] 'errno))
  7.                        ([color=BLUE]princ[/color] [color=MAROON]"\nMissed, try again."[/color])
  8.                    )
  9.                    (   ([color=BLUE]=[/color] 'ename ([color=BLUE]type[/color] sel))
  10.                        ([color=BLUE]if[/color] ([color=BLUE]/=[/color] obj ([color=BLUE]cdr[/color] ([color=BLUE]assoc[/color] 0 ([color=BLUE]entget[/color] sel))))
  11.                            ([color=BLUE]princ[/color] [color=MAROON]"\nInvalid object selected."[/color])
  12.                        )
  13.                    )
  14.                )
  15.            )
  16.        )
  17.        sel
  18.    )
  19.    ([color=BLUE]if[/color]
  20.        ([color=BLUE]and[/color]
  21.            ([color=BLUE]setq[/color] hat (_selectobject [color=MAROON]"\nSelect Hatch: "[/color]     [color=MAROON]"HATCH"[/color]  '[color=BLUE]entsel[/color]))
  22.            ([color=BLUE]setq[/color] att (_selectobject [color=MAROON]"\nSelect Attribute: "[/color] [color=MAROON]"ATTRIB"[/color] '[color=BLUE]nentsel[/color]))
  23.            ([color=BLUE]setq[/color] obj ([color=BLUE]vlax-ename->vla-object[/color] att))
  24.        )
  25.        ([color=BLUE]if[/color] ([color=BLUE]setq[/color] txt
  26.                ([color=BLUE]if[/color] ([color=BLUE]and[/color] ([color=BLUE]vlax-property-available-p[/color] obj 'mtextattribute) ([color=BLUE]=[/color] [color=BLUE]:vlax-true[/color] ([color=BLUE]vla-get-mtextattribute[/color] obj)))
  27.                    (iburst:matt2mtext ([color=BLUE]entget[/color] att))
  28.                    (iburst:att2text   ([color=BLUE]entget[/color] att))
  29.                )
  30.            )
  31.            ([color=BLUE]progn[/color]
  32.                ([color=BLUE]command[/color] [color=MAROON]"_.-hatchedit"[/color] hat [color=MAROON]"_DI"[/color] [color=MAROON]"_.-hatchedit"[/color] hat [color=MAROON]"_AD"[/color] [color=MAROON]"_S"[/color] txt [color=MAROON]""[/color] [color=MAROON]""[/color])
  33.                ([color=BLUE]entdel[/color] txt)
  34.            )
  35.            ([color=BLUE]princ[/color] [color=MAROON]"\nUnable to convert attribute to text."[/color])
  36.        )
  37.    )
  38.    ([color=BLUE]princ[/color])
  39. )
  40. [color=GREEN];; The following functions are taken from Burst Upgraded:[/color]
  41. [color=GREEN];; http://lee-mac.com/upgradedburst.html[/color]
  42. ([color=BLUE]defun[/color] iburst:removepairs ( itm lst )
  43.    ([color=BLUE]vl-remove-if[/color] '([color=BLUE]lambda[/color] ( x ) ([color=BLUE]member[/color] ([color=BLUE]car[/color] x) itm)) lst)
  44. )
  45. ([color=BLUE]defun[/color] iburst:remove1stpairs ( itm lst )
  46.    ([color=BLUE]vl-remove-if[/color] '([color=BLUE]lambda[/color] ( x ) ([color=BLUE]if[/color] ([color=BLUE]member[/color] ([color=BLUE]car[/color] x) itm) ([color=BLUE]progn[/color] ([color=BLUE]setq[/color] itm ([color=BLUE]vl-remove[/color] ([color=BLUE]car[/color] x) itm)) [color=BLUE]t[/color]))) lst)
  47. )
  48. ([color=BLUE]defun[/color] iburst:att2text ( enx )
  49.    ([color=BLUE]entmakex[/color]
  50.        ([color=BLUE]append[/color] '((0 . [color=MAROON]"TEXT"[/color]))
  51.            (iburst:removepairs '(000 002 070 074 100 280)
  52.                ([color=BLUE]subst[/color] ([color=BLUE]cons[/color] 73 ([color=BLUE]cdr[/color] ([color=BLUE]assoc[/color] 74 enx))) ([color=BLUE]assoc[/color] 74 enx) enx)
  53.            )
  54.        )
  55.    )
  56. )
  57. ([color=BLUE]defun[/color] iburst:matt2mtext ( enx )
  58.    ([color=BLUE]entmakex[/color]
  59.        ([color=BLUE]append[/color] '((0 . [color=MAROON]"MTEXT"[/color]) (100 . [color=MAROON]"AcDbEntity"[/color]) (100 . [color=MAROON]"AcDbMText"[/color]))
  60.            (iburst:remove1stpairs  '(001 007 010 011 040 041 050 071 072 073 210)
  61.                (iburst:removepairs '(000 002 042 043 051 070 074 100 101 102 280 330 360) enx)
  62.            )
  63.        )
  64.    )
  65. )
  66. ([color=BLUE]vl-load-com[/color]) ([color=BLUE]princ[/color])
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 21:06 , Processed in 0.519175 second(s), 75 queries .

© 2020-2025 乐筑天下

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