如何去除组码中特定点的组码
如下图,图形为带圆弧的轻量线,怎么在用ENTGET获得的组码中,把圆弧AB两点的(10)(11)组码找出,并去除掉。lwpolyline木有11组码的,您要干啥 多段线没有11组码!
你的意思我理解不了!请直接给出结果示意图! 不好意思,看差了,轻量线是没有(11)
我就想达到以下效果,如果在用标注轻量线程序时,可以使标注不用圆弧的节点。如果是修改轻量线的程序里时,可以用来删除圆弧。
alwtyp 发表于 2013-5-15 21:30 static/image/common/back.gif
不好意思,看差了,轻量线是没有(11)
我就想达到以下效果,如果在用标注轻量线程序时,可以使标注不用圆弧 ...
以10组码将entget分段,如果后面跟着的42组码不为0,即为圆弧,再将其去掉,修改70组码为0,以你搜索到的10组码重新建立坐标表,重新组表entmake即可 谢谢,我试试。 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)的吗? 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)
)
x_s_s_1 发表于 2013-5-17 02:26 static/image/common/back.gif
给您写了一个去圆弧的,不标尺寸您自己可以搞定的
这个程序执行有问题。简单的画一个矩形,再随便倒一个角或是两个角。执行程序后,点占PL后,完全可以得到不同的东西 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