alwtyp 发表于 2013-5-15 21:16:40

如何去除组码中特定点的组码

如下图,图形为带圆弧的轻量线,怎么在用ENTGET获得的组码中,把圆弧AB两点的(10)(11)组码找出,并去除掉。

x_s_s_1 发表于 2013-5-15 21:20:52

lwpolyline木有11组码的,您要干啥

Gu_xl 发表于 2013-5-15 21:22:13

多段线没有11组码!
你的意思我理解不了!请直接给出结果示意图!

alwtyp 发表于 2013-5-15 21:30:52

不好意思,看差了,轻量线是没有(11)
我就想达到以下效果,如果在用标注轻量线程序时,可以使标注不用圆弧的节点。如果是修改轻量线的程序里时,可以用来删除圆弧。

x_s_s_1 发表于 2013-5-15 21:42:00

alwtyp 发表于 2013-5-15 21:30 static/image/common/back.gif
不好意思,看差了,轻量线是没有(11)
我就想达到以下效果,如果在用标注轻量线程序时,可以使标注不用圆弧 ...

以10组码将entget分段,如果后面跟着的42组码不为0,即为圆弧,再将其去掉,修改70组码为0,以你搜索到的10组码重新建立坐标表,重新组表entmake即可

alwtyp 发表于 2013-5-15 21:46:04

谢谢,我试试。

alwtyp 发表于 2013-5-16 23:35:43

x_s_s_1 发表于 2013-5-15 21:42 static/image/common/back.gif
以10组码将entget分段,如果后面跟着的42组码不为0,即为圆弧,再将其去掉,修改70组码为0,以你搜索到的 ...

不好意思,还是不知道每一个顶点的组码中了(10)以外,还有哪些是必须的,固定的?难道(40)(41)(42)(91)这四个都是不可少的?还会不会有其它的? 还有他们在组码表中的排序位置固定从小 排到大(10->91)的吗?

x_s_s_1 发表于 2013-5-17 02:26:59

alwtyp 发表于 2013-5-16 23:35 static/image/common/back.gif
不好意思,还是不知道每一个顶点的组码中了(10)以外,还有哪些是必须的,固定的?难道(40)(41)(42)(91)这四 ...

给您写了一个去圆弧的,不标尺寸您自己可以搞定的(defun c:test1 (/ e en lst lstt ent x lsttt n)
(setq en (entget (setq e(car (entsel "\n选择PL:")))))
(setq        lstnil
        lstt nil
)
(setq        ent (vl-member-if
              '(lambda (x) (= 10 (car x)))
              (reverse (cdr (reverse en)))
          )
)
(repeat (/ (length ent) 4)
    (repeat 4
      (setq lst (cons (car ent) lst))
      (setq ent (cdr ent))
    )
    (setq lstt (cons (reverse lst) lstt)
          lstnil
    )
)
(setq        lst   (reverse lstt)
        lsttnil
        lsttt nil
)
(while lst
    (if        (null
          (vl-remove-if-not
          (function (lambda (x) (and (/= 0 (cdr x)) (= 42 (car x)))))
          (car lst)
          )
        )
      (progn (setq lstt (cons (car lst) lstt))
             (setq lst (cdr lst))
      )
      (progn (setq
             lsttt
                (cons
                  (cons        (subst '(42 . 0) (assoc 42 (car lst)) (car lst))
                        lstt
                  )
                  lsttt
                )
             )
             (setq lstt        nil
                   lst        (cdr lst)
             )
      )
    )
)
(setq
    lsttt (mapcar '(lambda (x) (apply 'append x)) (cons lstt lsttt))
)
(foreach n lsttt
    (entmake (append (list (assoc 0 en)
                           '(100 . "AcDbEntity")
                           (assoc 8 en)
                           '(100 . "AcDbPolyline")
                           (cons 90 (1+ (/ (length n) 4)))
                           '(70 . 0)
                     )
                     n
             )
    )
)
(entdel e)
(princ)
)

alwtyp 发表于 2013-5-17 18:20:47

x_s_s_1 发表于 2013-5-17 02:26 static/image/common/back.gif
给您写了一个去圆弧的,不标尺寸您自己可以搞定的

这个程序执行有问题。简单的画一个矩形,再随便倒一个角或是两个角。执行程序后,点占PL后,完全可以得到不同的东西

x_s_s_1 发表于 2013-5-18 10:15:06

alwtyp 发表于 2013-5-17 18:20 static/image/common/back.gif
这个程序执行有问题。简单的画一个矩形,再随便倒一个角或是两个角。执行程序后,点占PL后,完全可以得到 ...

您不要机械的使用代码,主要看思路,2010的组码我看了,有91,如果您仅用于2010的话可以将(repeat (/ (length ent) 4)(repeat 4改为(repeat (/ (length ent) 5)(repeat 5,要通用也很简单,得出每个10组码之间的组码个数列表,中间任意长度均可,再循环就是了
页: [1] 2
查看完整版本: 如何去除组码中特定点的组码