缺少了子函数,我重写了子函数,你试试。 ;;;删除线上点;;;; (defun c:delpoint (/ ensel ename object point width points new) (if (setq ensel (entsel "\n请选择一根线:")) (progn (setvar "cmdecho" 0) (command "undo" "g") (setq ename (car ensel)) (setq object (vlax-ename->vla-object ename)) (if (= (vla-get-ObjectName object) "AcDbPolyline") (while (progn (setvar "osmode" 1) (setq point (getpoint "\n请选择将要删除的点:"))) (setq point (list (car point) (cadr point))) (setq width (car (vla-getWidth object 0 'StartWidth, 'EndWidth))) (setq points (poly_pts (vla-get-coordinates object))) (if (setq new (delpt)) (progn (vla-put-coordinates object new) (command "pedit" ename "w" width)) (print "只有两个点已不能再删除了!") ) ) (princ "\n这个程序只支持LWPOLYLINE!") ) (vlax-release-object object) (command "undo" "e") (prin1) ) ) ) (defun delpt (/ m n del return pt pnts) (setq m (length points)) (setq n 0) (repeat m (setq pt (nth n points) n (1+ n) ) (if del (setq return (append return pt)) (if (equal pt point) (setq del t) (setq return (append return pt)) ) ) ) (if (> (length return) 3) (progn (setq pnts (vlax-make-safearray vlax-vbDouble (cons 0 (1- (length return))))) (vlax-safearray-fill pnts return) pnts ) ) ) (defun poly_pts (num / lst i% lst_n) (setq lst (vlax-safearray->list (variant-value num))) (setq i% 0) (repeat (/ (length lst) 2) (setq lst_n (cons (list (nth i% lst) (nth (1+ i%) lst)) lst_n)) (setq i% (+ 2 i%)) ) (setq lst_n (reverse lst_n)) )
|