问题一:能不能不用全显也能指定范围内的物体选上
问题二:用COMMAND的命令较慢,有否其它方法
(defun c:test ( / ssl i ptl) (setq tc_layer (cdr (assoc 8 (entget (car (entsel "\n请选取参照多义线框")))))) (setq ss (ssget (list(cons 8 tc_layer)(cons 0 "LWPOLYLINE")))) (setq ssl (sslength ss) i -1 ) (repeat ssl (setq ptl (cons (xd_getObjectboundingbox (ssname ss (setq i (1+ i)))) ptl ) ) ;(ax:DrawVpBorder (ssname ss (setq i (1+ i)))) (setq tc_fix (strcat (vl-filename-base (getvar "dwgname")) "-" (rtos i 2 0)) ) (setq tc_po_list (xd-points_box (apply 'append ptl))) (setq tc_point1 (nth 0 tc_po_list)) (setq tc_point2 (nth 1 tc_po_list)) ;(ax:DrawVpBorder ;(vl-cmdf "_.Zoom" "_Window" "_non" tc_point1 tc_point2);;;进入全图显示 (command "wblock" tc_fix "" tc_point1 (ssget "c" tc_point1 tc_point2) "") ) )
;;求点集的最大包盒对角点 ;;返回值: (<左下点> <右上点> ) (defun xd-points_box (ptl /) (list (apply 'mapcar (cons 'min ptl)) (apply 'mapcar (cons 'max ptl)) ) )
;; ! *************************************************************************** ;; ! xd_GetObjectBoundingBox ;; ! *************************************************************************** ;; ! 功 能 : 返回实体包围盒的对角点. ;; ! 参 数 : 'ename' - Any Drawing Object ;; ! 返回值 : 'Lst' - is a list of LL and UR ;; ! 说 明 : 适用 AutoCAD 2000+ ;; ! e-mail : eachy@xdcad.net ;; ! Web : www.xdcad.net ;; ! **************************************************************************** (defun xd_GetObjectBoundingBox (ename / ll ur) (vla-GetBoundingBox (vlax-ename->vla-object ename) 'll 'ur) (list (vlax-safearray->list ll) (vlax-safearray->list ur) ) )
|