乐筑天下

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

[编程交流] 将颜色指定给2d

[复制链接]

2

主题

8

帖子

8

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 11:50:13 | 显示全部楼层
也许我问错问题了。这是我到目前为止使用你的重叠得到的。lsp。
 
第一个图像显示原始DWG。
 
第二幅图显示了运行重叠时发生的情况。lsp。
 
第三张图显示了我希望它做什么。
 
 
我已经找了几个小时的东西,可以做到这一点,但找不到任何东西。这样的事情可能吗?
121006zfj3f7x50uv52yqm.png
121007fedffczv4j8ccv78.png
121008ed3nd38633ta43t1.png
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:54:22 | 显示全部楼层
这是在更换过滤器之后吗?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:00:22 | 显示全部楼层
我已经修改了过滤器列表,请尝试一下:
 
  1. (defun c:overlap (/ *error* RotateByMatrix AddLwPoly BBox->List GroupByNum GetTextIns Point
  2.                    ALLOBJS DOC FILTLST ILST LAYER LL NOBJ POLY PT R SPC SS UFLAG UR)
  3. ;; Lee Mac  ~  15.03.10
  4. (vl-load-com)
  5. (defun *error* (msg)
  6.    (and uFlag (vla-EndUndomark doc))
  7.    (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
  8.        (princ (strcat "\n** Error: " msg " **")))
  9.    (princ))   
  10. (setq layer "OverLapCheck")
  11. (setq FiltLst '((-4 . "<NOT") (0 . "VIEWPORT") (-4 . "NOT>")))
  12. (defun RotateByMatrix (obj pt ang / RotationMatrix Vector)
  13.    ;; Rotation by Matrix  ~  Lee Mac
  14.    (setq RotationMatrix (list (list (cos ang) (- (sin ang))  0.0)
  15.                               (list (sin ang)    (cos ang)   0.0)
  16.                               (list    0.0           0.0     1.0)))
  17.    (setq Vector (mapcar (function -) pt
  18.                         (mapcar
  19.                           (function
  20.                             (lambda (row) (apply (function +)
  21.                                                  (mapcar (function *) row pt))))
  22.                           RotationMatrix)))
  23.    (vla-transformby obj
  24.      (vlax-tmatrix
  25.        (append
  26.          (mapcar
  27.            (function
  28.              (lambda (r x) (append r (list x))))
  29.            RotationMatrix Vector)
  30.          '((0.0 0.0 0.0 1.0))))))
  31. (defun AddLWPoly (blk lst)
  32.    (vla-AddLightWeightPolyline blk
  33.      (vlax-make-variant
  34.        (vlax-safearray-fill
  35.          (vlax-make-safearray vlax-vbDouble
  36.            (cons 0 (1- (* 2 (length lst)))))
  37.          (apply (function append) lst)))))
  38. (defun BBox->List (bbox)
  39.    (  (lambda (bbox)
  40.         (mapcar
  41.           (function
  42.             (lambda (funcs)
  43.               (mapcar
  44.                 (function
  45.                   (lambda (func)
  46.                     (apply func bbox)))
  47.                
  48.                 funcs)))
  49.          
  50.           '((caar  cadar)  (caadr cadar)
  51.             (caadr cadadr) (caar  cadadr))))
  52.      
  53.      (list bbox)))
  54. (defun GroupByNum (lst num / rtn)
  55.    (setq rtn nil)
  56.    
  57.    (if lst
  58.      (cons (reverse
  59.              (repeat num
  60.                (progn
  61.                  (setq rtn (cons (car lst) rtn)
  62.                        lst (cdr lst))
  63.                  rtn)))
  64.            
  65.            (GroupByNum lst num))))
  66. (defun GetTextIns (object)
  67.    (vlax-get object
  68.      (if (eq "AcDbText" (vla-get-ObjectName object))
  69.        (if (eq acAlignmentLeft (vla-get-Alignment object))
  70.          'InsertionPoint 'TextAlignmentPoint)
  71.        'InsertionPoint)))
  72. (defun Point (pt)
  73.    (entmakex (list (cons 0 "POINT")
  74.                    (cons 8 layer)
  75.                    (cons 10 pt)                    
  76.                    (cons 62 2))))
  77. (defun SS->VLA (ss / i e lst)
  78.    (setq i -1)
  79.    (if ss
  80.      (while (setq e (ssname ss (setq i (1+ i))))
  81.        (setq lst (cons (vlax-ename->vla-object e) lst))))
  82.    
  83.    lst)  
  84. (setq doc (vla-get-ActiveDocument
  85.              (vlax-get-acad-object))
  86.        spc (if (or (eq acModelSpace (vla-get-ActiveSpace doc))
  87.                    (eq :vlax-true   (vla-get-MSpace doc)))
  88.              (vla-get-ModelSpace doc)
  89.              (vla-get-PaperSpace doc)))  
  90. (or (tblsearch "LAYER" layer)
  91.      (vla-add (vla-get-layers doc) layer))
  92. (setq AllObjs (ss->VLA (ssget "_X" FiltLst)))
  93. (if (ssget '((0 . "TEXT,MTEXT,INSERT")))
  94.    (progn
  95.      (setq uFlag (not (vla-StartUndoMark doc)))
  96.      
  97.      (vlax-for obj (setq ss (vla-get-ActiveSelectionSet doc))
  98.        (if (not (zerop (setq r (+ (vla-get-Rotation obj)   
  99.                                   (setq ucsx
  100.                                     (if (eq (vla-get-Objectname obj) "AcDbMText")
  101.                                       (angle '(0 0 0) (getvar 'UCSXDIR)) 0.))))))
  102.          (progn
  103.            (vla-put-rotation (setq nobj (vla-copy obj)) (- 0.0 ucsx))
  104.            (vla-getBoundingBox nobj 'll 'ur)
  105.            (RotateByMatrix              
  106.              (setq Poly
  107.                (AddLWPoly spc
  108.                  (BBox->List
  109.                    (mapcar (function vlax-safearray->list)
  110.                            (list ll ur)))))
  111.              (GetTextIns obj) r)
  112.            
  113.            (vla-put-layer Poly layer)
  114.            (vla-put-Closed Poly :vlax-true)
  115.            (vla-delete nobj))
  116.          (progn
  117.            (vla-getBoundingBox obj 'll 'ur)
  118.            (vla-put-layer
  119.              (setq Poly
  120.                (AddLWPoly spc
  121.                  (BBox->List
  122.                    (mapcar (function vlax-safearray->list)
  123.                            (list ll ur)))))
  124.              layer)
  125.            
  126.            (vla-put-Closed Poly :vlax-true)))
  127.        (if (setq iLst
  128.                   (apply (function append)
  129.                     (vl-remove-if (function null)
  130.                       (mapcar
  131.                         (function
  132.                           (lambda (object)
  133.                             (GroupByNum
  134.                               (vlax-invoke Poly
  135.                                 'IntersectWith object acExtendNone) 3)))
  136.                         
  137.                         (vl-remove obj AllObjs)))))
  138.          
  139.          (progn              
  140.            (vla-put-color Poly acRed)
  141.            (mapcar (function Point) iLst))
  142.          (vla-put-color Poly acGreen)))
  143.      (vla-delete ss)
  144.      (setq uFlag (vla-EndUndoMark doc))))
  145. (princ))
回复

使用道具 举报

2

主题

8

帖子

8

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 12:04:21 | 显示全部楼层
我更改了过滤器,删除了文本过滤器。当我这样做时,文本周围会出现一个红色框,而不像以前那样是绿色的。同样的事情发生在你刚刚发布的代码上。我会继续玩它,也许我错过了什么。。。。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:09:59 | 显示全部楼层
完全正确-表示文本重叠。。。
 
它不会移动文本-这由你来做
回复

使用道具 举报

2

主题

8

帖子

8

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 12:12:21 | 显示全部楼层
我担心你会这么说。唯一的问题是我可以有500多个文本重叠。哦,很感谢你的帮助。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-6 11:26 , Processed in 0.361599 second(s), 64 queries .

© 2020-2025 乐筑天下

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