明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1381|回复: 6

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

[复制链接]
发表于 2013-5-2 21:44 | 显示全部楼层 |阅读模式
lisp如何写才使我先前多选的选集的所有图形全部显示在当前的视窗,图面中的其他图形不管
发表于 2013-5-2 23:19 | 显示全部楼层
  1. (defun c:tt (/ ssp ssa)
  2.   (setq        ssp (ssget "P")
  3.         ssa (ssget "x")
  4.   ) ;_ 结束setq
  5.   (command "_copybase" "0,0" ssp "")
  6.   (command "_ERASE" ssa "")
  7.   (command "_pasteclip" "0,0")
  8. ) ;_ 结束defun

感觉你不是想要这种
发表于 2013-5-3 01:54 | 显示全部楼层
;;以指定选择集缩放窗口
(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 (car  p1)
                        miny (cadr p1)
                        maxx (car  p2)
                        maxy (cadr p2)
        )
        (setq i 0)
        (foreach x ss
                (setq box (ax:getboundingbox x))
                (setq p1 (car box))
                (setq p2 (cadr box))
                (setq p1x (car  p1)
                                p1y (cadr p1)
                                p2x (car  p2)
                                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)))
)

代码不够简洁
将就着用
发表于 2013-5-3 04:19 | 显示全部楼层
漏了个公共函数

;;选择集转化为表
(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)
)
发表于 2013-5-3 05:39 | 显示全部楼层
如果Zoom->O可以執行,就不用那麼累了
 楼主| 发表于 2013-5-3 19:35 | 显示全部楼层
masterlong 发表于 2013-5-3 04:19
漏了个公共函数

;;选择集转化为表

谢谢masterlong 大师!!!
发表于 2013-5-3 19:37 | 显示全部楼层
直接zoom,object就行了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-22 21:49 , Processed in 0.252474 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表