本帖最后由 作者 于 2009-3-27 9:12:54 编辑
在多段线上增加一端点(自己DIY)点是否在线上的判断(已更新,请nonsmall指导,感谢!)[br](defun c:cfg (/ ent pt ents i n npt item item1 item2 item3 item4 x y x1 y1 x2 y2 lstNew) (setq ent (entsel "\n选择一条多段线:")) (while (setq point (getpoint "\n在线上选择添加端点的位置:")) (setq ents (entget (car ent))) (setq i 0 npt 0 n (length ents) lstNew '() ) (while (< i n) (setq item (nth i ents)) (setq lstNew (append lstNew (list item))) (if (= (car item) 10) (if (setq item4 (nth (+ i 4) ents)) (progn (setq x (car point) y (cadr point) X1 (cadr item) y1 (caddr item) x2 (cadr item4) y2 (caddr item4) ) (if (and (and (or (and (> x x1) (< x x2)) (and (< x x1) (> x x2))) (or (and (> y y1) (< y y2)) (and (< y y1) (> y y2))) ) ;点的X,Y是否在线段两端点间 (equal (* (- x x1) (- y2 y1)) (* (- y y1) (- x2 x1));点是否在线上(两点式直线方程) 0.0001 ) ) (setq item1 (nth (+ i 1) ents) item2 (nth (+ i 2) ents) item3 (nth (+ i 3) ents) lstNew (append lstNew (list item1)) lstNew (append lstNew (list item2)) lstNew (append lstNew (list item3)) lstNew (append lstNew (list (list 10 (car point) (cadr point))) ) );增加点的坐标 ) ) ) ) (setq i (1+ i)) ) (entmod lstNew);重生成多段线 ) (princ) ) |