lisp如何写才使我先前多选的选集的所有图形全部显示在当前的视窗,其他图形不管
lisp如何写才使我先前多选的选集的所有图形全部显示在当前的视窗,图面中的其他图形不管 (defun c:tt (/ ssp ssa)(setq ssp (ssget "P")
ssa (ssget "x")
) ;_ 结束setq
(command "_copybase" "0,0" ssp "")
(command "_ERASE" ssa "")
(command "_pasteclip" "0,0")
) ;_ 结束defun
感觉你不是想要这种 ;;以指定选择集缩放窗口
(defun zoomss( ss sc / box x midpo )
(setq box (ssbox ss))
(setq midpo (getmidpo box))
(setq box (mapcar '(lambda (x) (p0_sc_p1 midpo x sc)) box))
(vla-zoomwindow (vlax-get-acad-object) (vlax-3d-point (car box)) (vlax-3d-point (cadr box)))
box
)
;;求两点中点
(defun getmidpo( pts / P1 P2 X Y )
(setq p1 (car pts) p2 (cadr pts))
(if (= (length p1) (length p2))
nil
(setq p1 (list (car p1) (cadr p1))
p2 (list (car p2) (cadr p2))
)
)
(mapcar '(lambda (X Y) (/ (+ X Y) 2.0)) P1 P2)
)
;;选择集的最大包围框
(defun ssbox( ss / a box p1 p2 minx miny maxx maxy i p1x p1y p2x p2y pmin pmax )
(if (= (type ss) 'PICKSET)
(setq ss (ss2list ss))
)
(setq a (nth 0 ss))
(setq box (ax:getboundingbox a))
(setq p1 (car box))
(setq p2 (cadr box))
(setq minx (carp1)
miny (cadr p1)
maxx (carp2)
maxy (cadr p2)
)
(setq i 0)
(foreach x ss
(setq box (ax:getboundingbox x))
(setq p1 (car box))
(setq p2 (cadr box))
(setq p1x (carp1)
p1y (cadr p1)
p2x (carp2)
p2y (cadr p2)
)
(if (< p1x minx) (setq minx p1x))
(if (< p1y miny) (setq miny p1y))
(if (> p2x maxx) (setq maxx p2x))
(if (> p2y maxy) (setq maxy p2y))
(setq i (1+ i))
)
(setq pmin (list minx miny)
pmax (list maxx maxy)
)
(list pmin pmax)
)
;;单个物体的最大包围框
(defun ax:GetBoundingBox ( ent / ll ur )
(vla-getboundingbox (vlax-ename->vla-object ent) 'll 'ur)
(mapcar 'vlax-safearray->list (list ll ur))
)
;;以基点p0缩放p1--P0缩放基准点
(defun p0_sc_p1 ( p0 p1 sc )
(polar p0 (angle p0 p1) (* sc (distance p0 p1)))
)
代码不够简洁
将就着用 漏了个公共函数
;;选择集转化为表
(defun ss2list ( ss / n i elist )
(setq n (if ss (sslength ss) 0)
i 0
elist '()
)
(repeat n
(setq elist (cons (ssname ss i) elist)
i (1+ i)
)
)
(reverse elist)
) 如果Zoom->O可以執行,就不用那麼累了 masterlong 发表于 2013-5-3 04:19 static/image/common/back.gif
漏了个公共函数
;;选择集转化为表
谢谢masterlong 大师!!! 直接zoom,object就行了
页:
[1]