Hi,
the vla-getBoundingbox function always returns the boundingbox about the WCS.
here's a routine wich draw an object (3dpolyline or box) figuring the the boundingbox of the selected object about the current UCS.
;; Doug C. Broad, Jr.
;; can be used with vla-transformby to
;; transform objects from the UCS to the WCS
(defun UCS2WCSMatrix ()
(vlax-tmatrix
(append
(mapcar
'(lambda (vector origin)
(append (trans vector 1 0 t) (list origin))
)
(list '(1 0 0) '(0 1 0) '(0 0 1))
(trans '(0 0 0) 0 1)
)
(list '(0 0 0 1))
)
)
)
;; transform objects from the WCS to the UCS
(defun WCS2UCSMatrix ()
(vlax-tmatrix
(append
(mapcar
'(lambda (vector origin)
(append (trans vector 0 1 t) (list origin))
)
(list '(1 0 0) '(0 1 0) '(0 0 1))
(trans '(0 0 0) 1 0)
)
(list '(0 0 0 1))
)
)
)
;; BBOX -Gilles Chanteau-
;; Creates an entity (3D polyline or box) figuring the "bounding box"
;; of the selected object about current UCS.
(defun c:bbox (/ AcDoc Space obj bb minpoint maxpoint pt1 pt2 lst poly
box cen norm)
(vl-load-com)
(setq AcDoc (vla-get-activedocument (vlax-get-acad-object))
Space (if (= (getvar "CVPORT") 1)
(vla-get-PaperSpace AcDoc)
(vla-get-ModelSpace AcDoc)
)
)
(vla-startUndoMark AcDoc)
(while (not (setq obj (car (entsel)))))
(setq obj (vlax-ename->vla-object obj))
(vla-TransformBy obj (UCS2WCSMatrix))
(setq bb (vl-catch-all-apply
'vla-getboundingbox
(list obj
'minpoint
'maxpoint
)
)
)
(if (vl-catch-all-error-p bb)
(progn
(princ
(strcat "; erreur: " (vl-catch-all-error-message bb))
)
(vla-TransformBy obj (WCS2UCSMatrix))
(vla-endUndoMark AcDoc)
)
(progn
(setq pt1 (vlax-safearray->list minpoint)
pt2 (vlax-safearray->list maxpoint)
)
(if (or (equal (car pt1) (car pt2) 1e-007)
(equal (cadr pt1) (cadr pt2) 1e-007)
(equal (caddr pt1) (caddr pt2) 1e-007)
)
(progn
(cond
((equal (car pt1) (car pt2) 1e-007)
(setq lst (list pt1
(list (car pt1) (cadr pt1) (caddr pt2))
pt2
(list (car pt1) (cadr pt2) (caddr pt1))
)
)
)
((equal (cadr pt1) (cadr pt2) 1e-007)
(setq lst (list pt1
(list (car pt1) (cadr pt1) (caddr pt2))
pt2
(list (car pt2) (cadr pt1) (caddr pt1))
)
)
)
((equal (caddr pt1) (caddr pt2) 1e-007)
(setq lst (list pt1
(list (car pt1) (cadr pt2) (caddr pt1))
pt2
(list (car pt2) (cadr pt1) (caddr pt1))
)
)
)
)
(setq box
(vlax-invoke Space 'add3dPoly (apply 'append lst))
)
(vla-put-closed box :vlax-true)
)
(progn
(setq cen (mapcar '(lambda (x y) (/ (+ x y) 2)) pt1 pt2)
pt2 (mapcar '- pt2 pt1)
box (vla-addBox
Space
(vlax-3d-point cen)
(car pt2)
(cadr pt2)
(caddr pt2)
)
)
)
)
(if (= (vla-get-ObjectName obj) "AcDbText")
(progn
(setq norm (vlax-get obj 'Normal)
)
(vla-Move
box
(vlax-3d-point (trans '(0 0 0) norm 0))
(vlax-3d-point
(trans
(list
0
0
(caddr
(trans (vlax-get obj 'InsertionPoint)
0
norm
)
)
)
norm
0
)
)
)
)
)
(mapcar '(lambda (x) (vla-TransformBy x (WCS2UCSMatrix)))
(list obj box)
)
)
)
(vla-endUndoMark AcDoc)
(princ)
)