lish 发表于 2013-5-2 21:44:00

lisp如何写才使我先前多选的选集的所有图形全部显示在当前的视窗,其他图形不管

lisp如何写才使我先前多选的选集的所有图形全部显示在当前的视窗,图面中的其他图形不管

xsso 发表于 2013-5-2 23:19:53

(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

感觉你不是想要这种

masterlong 发表于 2013-5-3 01:54:38

;;以指定选择集缩放窗口
(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)))
)

代码不够简洁
将就着用

masterlong 发表于 2013-5-3 04:19:26

漏了个公共函数

;;选择集转化为表
(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)
)

lsjj 发表于 2013-5-3 05:39:53

如果Zoom->O可以執行,就不用那麼累了

lish 发表于 2013-5-3 19:35:47

masterlong 发表于 2013-5-3 04:19 static/image/common/back.gif
漏了个公共函数

;;选择集转化为表


谢谢masterlong 大师!!!

夏生生 发表于 2013-5-3 19:37:10

直接zoom,object就行了
页: [1]
查看完整版本: lisp如何写才使我先前多选的选集的所有图形全部显示在当前的视窗,其他图形不管