1.用下面函数求出屏幕的的范围,储存,然后 zoom w (defun viewBox (/ vc vh vs) (setq vc (trans (getvar "viewctr") 1 2) vh (getvar "viewsize") vs (mapcar '/ (list (* (apply '/ (getvar "screensize")) vh) vh) '(2 2)) ) (mapcar '(lambda (f) (trans (mapcar f vc vs) 2 1)) '(- +)) ) 2.笨方法,以前写过一个用vlax-curve-getFirstDeriv方法的,适应任意曲线,一下子没找到 ;;只有矩形适应 (defun c:test (/ rec p1 p2 p d) (setq rec (entsel)) (setq rec (car rec)) (setq p1 (vlax-curve-getPointAtParam rec 0.5)) (setq p2 (vlax-curve-getPointAtParam rec 3.5)) (setq p (polar p1 (angle p1 p2) 1)) (setq d (distance p1 p)) (if (not (equal (angle p1 p) (angle p2 p) 1e-6)) (setq d (- d)) ) (vla-offset (vlax-ename->vla-object rec) d) ) 3.(defun polyVertexs (ply / i p lst) (setq i 0) (while (setq p (vlax-curve-getPointAtParam ply i)) (setq lst (cons p lst) i (1+ i)) ) (if (vlax-curve-isClosed ply) (setq lst (cdr lst))) (reverse lst) ) |