当然,也可以通过编程方式选择和缩放这些元素簇。
注1:在尝试c:Test之前,请使用\u OverKill命令删除双多段线。
注2:未处理引线。
- (defun KGA_Conv_Pickset_To_ObjectList (ss / i ret)
- (if ss
- (repeat (setq i (sslength ss))
- (setq ret (cons (vlax-ename->vla-object (ssname ss (setq i (1- i)))) ret))
- )
- )
- )
- (defun KGA_Geom_ObjectMiddle (obj / ptBL ptTR)
- (vla-getboundingbox obj 'ptBL 'ptTR)
- (mapcar
- '/
- (mapcar '+ (vlax-safearray->list ptBL) (vlax-safearray->list ptTR))
- '(2.0 2.0 2.0)
- )
- )
- (defun c:Test ( / dis doc lyr polyLst pt restLst scl tab)
- (setq dis 40.0) ; Search distance.
- (setq lyr "A-ANNO-NOTE") ; Layer name.
- (setq scl 0.5) ; Scale factor.
- (setq tab (if (= 1 (getvar 'cvport)) (getvar 'ctab) "Model"))
- (setq doc (vla-get-activedocument (vlax-get-acad-object)))
- (vla-endundomark doc)
- (vla-startundomark doc)
- (if
- (and
- (setq polyLst
- (KGA_Conv_Pickset_To_ObjectList
- (ssget "_A" (list (cons 8 lyr) (cons 410 tab) '(0 . "LWPOLYLINE")))
- )
- )
- (setq restLst
- (KGA_Conv_Pickset_To_ObjectList
- (ssget "_A" (list (cons 8 lyr) (cons 410 tab) '(0 . "*TEXT,SPLINE,ELLIPSE")))
- )
- )
- )
- (progn
- (setq restLst
- (mapcar
- '(lambda (obj) (list (KGA_Geom_ObjectMiddle obj) obj))
- restLst
- )
- )
- (foreach poly polyLst
- (setq pt (KGA_Geom_ObjectMiddle poly))
- (vla-scaleentity poly (vlax-3d-point pt) scl)
- (foreach sub restLst
- (if (> dis (distance pt (car sub)))
- (progn
- (vla-scaleentity (cadr sub) (vlax-3d-point pt) scl)
- (setq restLst (vl-remove sub restLst))
- )
- )
- )
- )
- (princ "\nDone! ")
- )
- )
- (vla-endundomark doc)
- (princ)
- )
|