在论坛里面下载的黄明儒大师的中心线代码,经常碰到一个情况,就是假封闭的多段线,无法被选中,也无法生成中心线。
于是写了这个函数。
所谓假封闭,就是起点和终点相等,70组码为0
真封闭相对假封闭,节点数少1个,起点和终点不相等。
 - ;(ClosedLwp (car(entsel "\n选择线...")))
- (defun ClosedLwp (en / endpt es lst1 startpt z210 z70 z90)
- (if (and
- (setq es (entget en)
- z90 (cdr (assoc 90 es));节点数
- z70 (cdr (assoc 70 es))
- z210 (assoc 210 es);210组码
- startpt (cdr (assoc 10 es))
- endpt (cdr (assoc 10 (reverse es))))
- (eq (cdr (assoc 0 es)) "LWPOLYLINE")
- (> z90 3)
- (eq z70 0)
- (equal startpt endpt 1e-5)
- )
- (progn
- ;去除最后一个节点
- (vl-some '(lambda(x) (setq lst1 (cdr lst1)) (= 10 (car x))) (setq lst1 (reverse es)))
- (setq lst1 (reverse lst1))
- (setq es (append lst1 (list z210)))
- ;更新节点数和是否封闭
- (setq es (subst (cons 90 (1- z90)) (cons 90 z90) es))
- (setq es (subst '(70 . 1) (cons 70 z70) es))
- (entmod es)
- )
- )
- )
|