乐筑天下

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

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

[复制链接]

2

主题

7

帖子

5

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 11:10:04 | 显示全部楼层 |阅读模式
大家圣诞快乐!
 
我正在寻找一种方法来解决我遇到的两个问题。
1) 我正在处理等高线,我正在寻找一种lisp,它可以检测二维多段线或具有相同高程的多段线,并为它们指定预定义的颜色。
例如
标高=1,6,101001000=蓝色
标高-2,7,202002000=颜色32
标高=3,8,3030003000=绿色
等等
 
我不知道这是否有帮助,但所有的轮廓都在同一层。
 
2) 我有很多文本元素(不是多行文字),其中许多相互重叠。所以我正在寻找一个程序来识别这些文本并高亮显示或更改它们的颜色,这样我就可以手动移动它们。
 
我非常感谢你的帮助!
谢谢
回复

使用道具 举报

9

主题

383

帖子

82

银币

后起之秀

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

铜币
355
发表于 2022-7-6 11:14:19 | 显示全部楼层
这将试图解决您的第一个问题
  1. (vl-load-com)
  2. (defun c:test (/ Elev SS)
  3. (princ "\nSelect contours: ")
  4. (if (setq SS (ssget (list (cons 0 "LWPOLYLINE"))))
  5.    (foreach EntObj (mapcar 'vlax-ename->vla-object
  6.                     (vl-remove-if 'listp (mapcar 'cadr (ssnamex SS)))
  7.             )
  8.      (setq Elev (vla-get-Elevation EntObj))
  9.      (vla-put-Color
  10. EntObj
  11. (cond ((vl-position Elev (list 1.0 6.0 10.0 100.0 1000.0)) 5)
  12.       ((vl-position Elev (list 2.0 7.0 20.0 200.0 2000.0)) 32)
  13.       ((vl-position Elev (list 3.0 8.0 30.0 3000.0 3000.0)) 3)
  14. )
  15.      )
  16.    )
  17. )
  18. (princ)
  19. )
回复

使用道具 举报

CAB

29

主题

781

帖子

430

银币

中流砥柱

Rank: 25

铜币
526
发表于 2022-7-6 11:20:45 | 显示全部楼层
第二部分:
  1. ;; TextOverlap.lsp  CAB 12.27.07
  2. ;;  Circle Text overlap in current space
  3. ;;  Returns the list of circles created to flag the overlaps
  4. (defun c:TOL() (c:TextOverlap))
  5. (defun c:TextOverlap (/ ss *doc* lay olst obj1 obj2 intlst olf)
  6. (vl-load-com)
  7. ;;==============================================================
  8. ;;  return a list of intersect points
  9. ;;==============================================================
  10. (defun get_interpts (obj1 obj2 / iplist)
  11.    (if (not (vl-catch-all-error-p
  12.               (setq iplist (vl-catch-all-apply
  13.                              'vlax-safearray->list
  14.                              (list
  15.                                (vlax-variant-value
  16.                                  (vla-intersectwith obj1 obj2 acextendnone)
  17.                                ))))))
  18.      iplist
  19.    )
  20. )
  21. (defun makecircle (pts)
  22.    (entmakex (list (cons 0 "CIRCLE")
  23.               (cons 8 "OVERLAP")
  24.               (cons 10 (list (car pts) (cadr pts)))
  25.               (cons 40 10.0) ; radius
  26.               ))
  27. )
  28. (and (setq *doc* (vla-get-activedocument (vlax-get-acad-object)))
  29.       (setq lay (vla-add (vla-get-layers *doc*) "OVERLAP"))
  30.       (or (vla-put-color lay acred) t)
  31.       (setq ss (ssget "_x"
  32.                       (list (cons 0 "TEXT,MTEXT") (cons 410 (getvar "ctab")))))
  33.       (setq olst (mapcar 'vlax-ename->vla-object (mapcar 'cadr (ssnamex ss))))
  34.       (princ (strcat "\n" (itoa(length olst)) " items to process, Please wait....\n"))
  35.       (while (setq obj1 (car olst) olst (cdr olst))
  36.         (foreach obj2 olst
  37.           (if (setq pts (get_interpts obj1 obj2))
  38.             (setq intlst (cons (cons obj1 obj2) intlst)
  39.                   olf (cons (makecircle pts) olf))
  40.           )
  41.         )
  42.       )
  43. )
  44. olf
  45. )
回复

使用道具 举报

2

主题

7

帖子

5

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 11:23:12 | 显示全部楼层
非常感谢你!
 
第二个很有魅力!我真的很感激!谢谢你,出租车!
第一个很好用,这正是我想要的。但是你能修改它使它同时适用于多段线和二维多段线吗?
我可能在同一张有立面图的图纸中有两个。
 
非常感谢
回复

使用道具 举报

9

主题

383

帖子

82

银币

后起之秀

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

铜币
355
发表于 2022-7-6 11:27:52 | 显示全部楼层
  1. (vl-load-com)
  2. (defun c:test (/ Elev SS)
  3. (princ "\nSelect contours: ")
  4. (if (setq SS (ssget (list (cons 0 "*POLYLINE"))))
  5.    (foreach EntObj (mapcar 'vlax-ename->vla-object
  6.                     (vl-remove-if 'listp (mapcar 'cadr (ssnamex SS)))
  7.             )
  8.      (if (vlax-property-available-p EntObj 'Elevation)
  9. (progn (setq Elev (vla-get-Elevation EntObj))
  10.        ((lambda        (c)
  11.           (if c
  12.             (vla-put-Color EntObj c)
  13.           )
  14.         )
  15.          (cond ((vl-position Elev (list 1.0 6.0 10.0 100.0 1000.0)) 5)
  16.                ((vl-position Elev (list 2.0 7.0 20.0 200.0 2000.0)) 32)
  17.                ((vl-position Elev (list 3.0 8.0 30.0 3000.0 3000.0)) 3)
  18.                (t nil)
  19.          )
  20.        )
  21. )
  22.      )
  23.    )
  24. )
  25. (princ)
  26. )
回复

使用道具 举报

2

主题

7

帖子

5

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 11:30:33 | 显示全部楼层
很 完美!
:眨眼:
 
再次感谢你们!
回复

使用道具 举报

2

主题

8

帖子

8

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 11:37:32 | 显示全部楼层
很抱歉在这里打了一匹死马,但我使用了搜索并找到了这条线索
 
我试过运行上面CAB提供的“textoverlap.lsp”,但它似乎与我的2005 AutoCAD不兼容。我有很多相互重叠的文本,有没有人有任何lsp可以重新排列所有重叠的文本?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:39:24 | 显示全部楼层
我试过解决这个问题。
回复

使用道具 举报

2

主题

8

帖子

8

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 11:43:20 | 显示全部楼层
李·麦克,
 
谢谢你的回复。我必须先在沼泽登记才能查看。我在考虑相同的文本重叠问题,但是lisp是否可以移动文本,使它们不再接触或在绘制的边界框内?
 
谢谢你的帮助!
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:46:45 | 显示全部楼层
我认为当前可能会设置为使用文本/多行文字过滤检查,您可能必须将其从过滤列表中删除-我不确定文本与文本相交时的准确性,因为我没有这样测试-但请告诉我您进展如何。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-6 11:38 , Processed in 0.333915 second(s), 72 queries .

© 2020-2025 乐筑天下

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