本帖最后由 zzyong00 于 2014-9-2 22:44 编辑
有错误,圆弧反转后变直线了 - [code=lisp];;反转PL线-----zzyong00
- (defun C:RevPL (/ SS)
- (princ "\n反转PL线,假设只有直线段")
- (if (setq SS (ssget '((0 . "LWPOLYLINE"))))
- (progn
- (setq I 0)
- (repeat (sslength SS)
- (setq ENT (entget (ssname SS I)))
- ;;得到顶点表
- (setq LST_PT '())
- ;;得到凸度表
- (setq LST_Bulge '())
- ;取多段线的顶点10和凸度42构成的表,反向,把最前的42组码(原是最后)调整到最后,把所有不为0的凸度组码取负值,加上实体表头和210组码对原实体表进行替换。
- (foreach N ENT
- (if (= (car N) 10)
- (setq LST_PT (cons N LST_PT))
- )
- (if (= (car N) 42)
- (progn
- (if (not (eq (cdr N) 0.0))
- (setq
- LST_Bulge (cons (cons 42 (- (cdr N))) LST_Bulge)
- )
- (setq LST_Bulge (cons N LST_Bulge))
- )
- )
- )
- )
- (foreach L '(10)
- (setq
- ENT (vl-remove-if
- '(lambda (N) (= (car N) L))
- ENT
- )
- )
- )
- (foreach L '(42)
- (setq
- ENT (vl-remove-if
- '(lambda (N) (= (car N) L))
- ENT
- )
- )
- )
- (setq ENT (append ENT LST_PT LST_Bulge))
- (entmod ENT)
- ;;
- (setq I (1+ I))
- ) ;repeat
- ) ;progn
- (princ ">>>图内没有二维多段线")
- ) ;if
- (princ)
- )
[/code] |