;; | ---------------------------------------------------------------------------- ;; | GE_GetCentroid ;; | ---------------------------------------------------------------------------- ;; | Function : Compute center of gravity of masses (closed regions(polylines)) ;; | Author : Rakesh Rao, Bangalore - India ;; | Arguments: 'ename' - Entity name should be a polyline, region or 3dsolid ;; | Updated : 27 August, 2002 ;; | e-mail : rakesh.rao@4d-technologies.com ;; | Web : www.4d-technologies.com ;; | ---------------------------------------------------------------------------- (defun GE_GetCentroid( ename / OS oname vlist len en entl pt ) (setq entl (entget ename) en (LI_item 0 entl) OS (getvar "OSMODE") pt nil ) (setvar "OSMODE" 0) (cond ((member en (list "POLYLINE" "LWPOLYLINE")) (if (or (PL_3d? ename) (not (PL_Arced? ename)) ) (setq vlist (PL_plist ename) len (length vlist) pt (GE_centroid vlist) ) (progn (command "._Copy" ename "" (list 0.0 0.0 0.0) "") (setq ename (entlast)) (command "._Region" ename "") (setq ename (entlast)) (command "._Ucs" "_Object" ename) (setq oname (vlax-ename->vla-object ename) pt (vla-Get-Centroid oname) ; Returns a variant type 'pt' pt (vlax-safearray->list (vlax-variant-value pt)) ; Get Variant value i.e safearray and then convert to list pt (trans pt 1 0) ) (vlax-release-object oname) (entdel ename) (command "._Ucs" "_Previous") ) ) ) ((member en (list "REGION" "3DSOLID")) (setq oname (vlax-ename->vla-object ename) pt (vla-Get-Centroid oname) ; Returns a variant type 'pt' pt (vlax-safearray->list (vlax-variant-value pt)) ; Get Variant value i.e safearray and then convert to list ) (vlax-release-object oname) ) (T (princ (strcat "\n" en " is not a valid object type for centroid computation.")) ) ) (setvar "OSMODE" OS) pt )