明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: 树櫴希德

如何根据闭合多段线内文字改多段线颜色

[复制链接]
发表于 2014-6-11 00:26 | 显示全部楼层
本帖最后由 llsheng_73 于 2014-6-11 20:29 编辑

  1. (defun poinpl(pt e / p e1 area area1 dist dist1)
  2.    (setq e(vlax-ename->vla-object e)dist(distance(reverse(cdr(reverse pt)))(vlax-curve-getclosestpointto e pt))area(vla-get-area e)
  3.          e1(car(vlax-safearray->list(vlax-variant-value(vla-offset e(* dist 1e-4)))))area1(vla-get-area e1)
  4.          dist1(distance(reverse(cdr(reverse pt)))(vlax-curve-getclosestpointto e1 pt)))  (entdel(entlast))
  5.    (if(< dist 1e-6)0;;线上
  6.      (if(>(*(- area1 area)(- dist1 dist))0)1 -1)));1线内-1线外
  7. (defun c:tt(/ s1 s2 p m n l)
  8.   (if(setq s1(ssget"X"(list'(0 . "TEXT")(cons 1 (strcat"*"(getstring"\n匹配内容")"*")))))
  9.     (progn(setq i -1)
  10.       (repeat(sslength s1)
  11.         (setq i(1+ i)e(entget(ssname s1 i))p(cons(if(equal(cdr(assoc 10 e))'(0 0 0))(cdr(assoc 11 e))(cdr(assoc 10 e)))p)))
  12.       (if(setq s1(ssget"X"'((0 . "*lyline")(-4 . "<OR")(70 . 1)(70 . 129)(-4 . "OR>"))))
  13.         (progn(setq i -1)
  14.           (repeat(sslength s1)
  15.             (setq i(1+ i)e(ssname s1 i)l(length p)m 0)
  16.             (while(< m l)
  17.               (if(and(>(vla-get-area(vlax-ename->vla-object e))1e-3) (=(poinpl(nth m p)e)1))
  18.                 (entmod(setq p(vl-remove(nth m p)p)e(entget e)m l
  19.                              e(if(assoc 62 e)(subst'(62 . 1)(assoc 62 e)e)
  20.                                 (append e'((62 . 1))))))
  21.                 (setq m(1+ m)))))))))
  22.   (princ))

我的方法比较另类一点

评分

参与人数 1明经币 +1 收起 理由
树櫴希德 + 1 很给力!

查看全部评分

 楼主| 发表于 2014-6-11 08:44 | 显示全部楼层
73哥好厉害啊,佩服
 楼主| 发表于 2014-6-11 09:05 | 显示全部楼层
; 错误: Automation 错误。未提供说明。
发表于 2014-6-11 10:00 | 显示全部楼层
树櫴希德 发表于 2014-6-11 09:05
; 错误: Automation 错误。未提供说明。


你那是线是三维的?
 楼主| 发表于 2014-6-11 10:14 | 显示全部楼层
2维的,是LWPOLYLINE
 楼主| 发表于 2014-6-11 10:15 | 显示全部楼层
LIST 找到 1 个

                  LWPOLYLINE  图层: MJZJ
                            空间: 模型空间
                   颜色: BYLAYER    线型: CONTINUOUS
                   句柄 = 170b
            闭合
    固定宽度    0.0000
              面积   16.8172
         周长   20.3983

          于端点  X=45101.9951  Y=15339.2654  Z=   0.0000
          于端点  X=45100.7360  Y=15331.4550  Z=   0.0000
          于端点  X=45105.0911  Y=15331.7571  Z=   0.0000
 楼主| 发表于 2014-6-11 10:31 | 显示全部楼层
(entget (car (entsel ""))) ((-1 . <图元名: 7e10a518>) (0 . "LWPOLYLINE")
(330 . <图元名: 7e10ecc0>) (5 . "106B") (100 . "AcDbEntity") (67 . 0) (410 .
"Model") (8 . "MJZJ") (6 . "Continuous") (100 . "AcDbPolyline") (90 . 3) (70 .
129) (43 . 0.0) (38 . 0.0) (39 . 0.0) (10 45127.1 15304.9) (40 . 0.0) (41 .
0.0) (42 . 0.0) (10 45124.5 15304.4) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10
45127.3 15303.2) (40 . 0.0) (41 . 0.0) (42 . 0.0) (210 0.0 0.0 1.0))
发表于 2014-6-11 10:48 | 显示全部楼层
那你加上(vl-load-com)?
 楼主| 发表于 2014-6-11 10:50 | 显示全部楼层
还是不行(vl-load-com)
(defun poinpl(pt e / p e1 area area1 dist dist1)
  (setq e(vlax-ename->vla-object e)dist(distance pt(vlax-curve-getclosestpointto e pt))area(vla-get-area e)
        e1(car(vlax-safearray->list(vlax-variant-value(vla-offset e(* dist 0.2)))))area1(vla-get-area e1)
        dist1(distance pt(vlax-curve-getclosestpointto e1 pt)))
  (entdel(entlast))
  (if(< dist 1e-6)0;;线上
    (if(>(*(- area1 area)(- dist1 dist))0)1 -1)));1线内-1线外
(defun c:tta(/ s1 s2 p m n l)
  (if(setq s1(ssget"X"(list'(0 . "TEXT")(cons 1 (strcat"*"(getstring"\n匹配内容")"*")))))
    (progn(setq i -1)
      (repeat(sslength s1)
        (setq i(1+ i)e(entget(ssname s1 i))p(cons(if(equal(cdr(assoc 10 e))'(0 0 0))(cdr(assoc 11 e))(cdr(assoc 10 e)))p)))
      (if(setq s1(ssget"X"'((0 . "lwpolyline")(-4 . "<OR")(70 . 1)(70 . 129)(-4 . "OR>"))))
        (progn(setq i -1)
          (repeat(sslength s1)
            (setq i(1+ i)e(ssname s1 i)l(length p)m 0)
            (while(< m l)
              (if(=(poinpl(nth m p)e)1)
                (entmod(setq p(vl-remove(nth m p)p)e(entget e)m l
                             e(if(assoc 62 e)(subst'(62 . 1)(assoc 62 e)e)
                                (append e'((62 . 1))))))
                (setq m(1+ m)))))))))
  (princ))
 楼主| 发表于 2014-6-11 10:53 | 显示全部楼层
奉上测试图,

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-18 23:33 , Processed in 0.303771 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表