大家一起来除错,大家一起来优化
- ;;这是一个关于删除pline线中多余点的小小程序,但是总运行出错,请大侠们see……see……
- ;;====================================================================
- ;;删除顶点
- (defun delp (ent pt) ;ent为选择的线 ents为扩展数据 pt为要删除的点
- (princ "要删除一个点")
- (setq ents (entget ent))
- (setq lst (member (cons 10 pt) ents))
- (if lst
- (progn
- (setq lst (list (assoc 10 lst)
- (assoc 40 lst)
- (assoc 41 lst)
- (assoc 42 lst)
- )
- )
- (setq i 0)
- (repeat 4
- (setq ents (vl-remove (nth i lst) ents))
- (setq i (1+ i))
- )
- )
- )
- (entmod ents)
- (princ "删除一个点")
- (princ)
- )
- ;;====================================================================
- ;;优化pline线
- (defun C:N7 ()
- (vl-load-com)
- (setq ss1 (ssget '((0 . "*polyline"))))
- (setq nn1 (sslength ss1) ;赋值ii1=0,nn1是子集ss1的数目
- ii1 0
- )
- ;;ss1为选择集、ss2为图元、ss3为ename的图元(扩展数据)、ss4为第ii3个扩展数据
- (while (< ii1 nn1)
- (setq ss2 (ssname ss1 ii1)) ;对第ii1个图元进行分析
- (setq ss3 (entget ss2))
- (setq nn3 (length ss3)
- ii3 0
- pt1 nil
- pt2 nil
- pt3 nil
- ptf nil ;第一点以备后用
- pts nil ;第二点以备后用
- )
- (while (< ii3 nn3) ;顺序读取各个扩展信息
- (setq ss4 (nth ii3 ss3)) ;第ii3个扩展信息表放入ss4中
- ;;读取为10的扩展信息,即坐标信息
- (if (= (car ss4) 10)
- (progn
- (setq ss4 (cdr ss4))
- (setq pt1 pt2)
- (setq pt2 pt3)
- (setq pt3 ss4)
- (if (= pts nil)
- (if (= ptf nil)
- (setq ptf ss4)
- (setq pts ss4)
- )
- ;;看pt2是否是多余的点
- (if (equal (+ (distance pt2 pt1) (distance pt2 pt3))
- (distance pt1 pt3)
- 0.000001
- )
- (progn
- (princ "ok")
- (delp (ss2 pt2))
- )
- )
- )
- )
- )
- (setq ii3 (+ ii3 1))
- )
- (setq ii1 (+ ii1 1))
- )
- (princ "PLine线优化完毕!")
- (princ)
- )
- ;;====================================================================
|