 - ;;[功能] 图元当前坐标系下包围盒,4角点坐标
- ;|
- 4 = 左上;3 = 右上
- 1 = 左下;2 = 右下
- |;
- ;;Flag : T时,返回最小包围盒角点;nil时,返回包围盒角点
- ;;说明 1 使用前加载须加载highflybird的程序Matrix-Lib.LSP
- ;; 2 作者保留本程序的一切权利,但你可以自由拷贝与复制、修改本程序用于非商业目的
- ;; 3 自贡黄明儒 2013年10月8日
- ;;示例(draw-pline1(HH:Ent4pt (car (entsel)) T)),返回UCS坐标系下坐标
- (defun HH:Ent4pt (ent Flag / LST MAT MAT1 MAXPT MINPT OBJ UCSFLAG X)
- (cond ((= (type ent) 'ENAME)
- (setq obj (vlax-ename->vla-object ent))
- )
- ((= (type ent) 'VLA-OBJECT) (setq obj ent))
- (T (exit))
- )
- (and Flag
- (setq Mat (Mat:EntityMatrix ent))
- (setq Mat1 (cadr Mat)) ;Mat1 4x4
- (setq Mat (car Mat)) ;Mat 4x4
- )
- (if (= (getvar "WORLDUCS") 0)
- (setq UcsFlag T)
- )
- (cond ((and Flag UcsFlag)
- (vla-TransformBy obj (vlax-tmatrix Mat))
- )
- (UcsFlag (vla-TransformBy obj (vlax-tmatrix (MAT:u2w))))
- (Flag (vla-TransformBy obj (vlax-tmatrix Mat)))
- )
- (vla-GetBoundingBox obj 'minPt 'maxPt) ;得到包围框
- (setq minPt (vlax-safearray->list minPt))
- (setq maxPt (vlax-safearray->list maxPt))
- (cond ((and Flag UcsFlag)
- (vla-TransformBy obj (vlax-tmatrix Mat1))
- )
- (UcsFlag (vla-TransformBy obj (vlax-tmatrix (MAT:w2u))))
- (Flag (vla-TransformBy obj (vlax-tmatrix Mat1)))
- )
- (setq lst (list minPt
- (list (car maxPt) (cadr minpt) (caddr minPt))
- maxPt
- (list (car minpt) (cadr maxPt) (caddr minPt))
- )
- )
- (COND (Flag nil)
- (UcsFlag (setq mat1 (MAT:w2u)))
- )
- (cond ((or Flag UcsFlag)
- (setq lst (mapcar '(lambda (x) (mat:mxp mat1 x)) lst)) ;wcs坐标
- (setq lst (mapcar '(lambda (x) (trans x ent 1)) lst))
- )
- )
- lst
- )
|