00001
00011
00012
00013 #if (_MSC_VER > 1000) || defined(SGI_COMPILER)
00014 #pragma once
00015 #endif
00016
00017 #ifndef __XSIGEOMETRY_H__
00018 #define __XSIGEOMETRY_H__
00019
00020 #include <xsi_siobject.h>
00021 #include <xsi_math.h>
00022 #include <xsi_longarray.h>
00023 #include <xsi_doublearray.h>
00024 #include <xsi_cluster.h>
00025 #include <xsi_clusterproperty.h>
00026 #include <xsi_pointlocatordata.h>
00027 #include <xsi_vector3.h>
00028
00029 namespace XSI {
00030
00031 class CFacetRefArray;
00032 class CSegmentRefArray;
00033 class CPointRefArray;
00034 class CSampleRefArray;
00035 class CRefArray;
00036 class CTriangleRefArray;
00037 class ICEAttribute;
00038
00039 namespace MATH {
00040 class CTransformation;
00041 };
00042
00043
00068
00069
00070 class SICPPSDKDECL Geometry : public SIObject
00071 {
00072 public:
00074 Geometry();
00075
00077 ~Geometry();
00078
00082 Geometry(const CRef& in_ref);
00083
00087 Geometry(const Geometry& in_obj);
00088
00093 bool IsA( siClassID in_ClassID) const;
00094
00098 siClassID GetClassID() const;
00099
00105 Geometry& operator=(const Geometry& in_obj);
00106
00112 Geometry& operator=(const CRef& in_ref);
00113
00118 CFacetRefArray GetFacets() const;
00119
00124 CSegmentRefArray GetSegments() const;
00125
00130 CPointRefArray GetPoints() const;
00131
00136 CSampleRefArray GetSamples() const;
00137
00142 CRefArray GetClusters() const;
00143
00148 CTriangleRefArray GetTriangles() const;
00149
00161 CStatus AddCluster( const CString& in_type,
00162 const CString& in_name,
00163 const CLongArray& in_indices,
00164 Cluster& io_cluster);
00165
00174 CStatus AddEmptyCluster(
00175 const CString& in_type,
00176 const CString& in_name,
00177 Cluster& io_cluster);
00178
00243 PointLocatorData GetSurfacePointLocatorsFromPoints
00244 (
00245 LONG in_nbPoints = -1,
00246 const LONG* in_pPoints = NULL
00247 ) const;
00248
00360 PointLocatorData GetClosestLocations
00361 (
00362 LONG in_nbPositions,
00363 const double* in_pPositions
00364 ) const;
00365
00449 PointLocatorData GetRaycastIntersections
00450 (
00451 LONG in_nbPositions,
00452 const double* in_pPositions,
00453 const double* in_pRays,
00454 siLineIntersectionType in_eLineType = siSemiLineIntersection
00455 ) const;
00456
00488 PointLocatorData GetClosestLocationsWithinRadius
00489 (
00490 const MATH::CVector3& in_position,
00491 double in_radius,
00492 LONG in_nbToSearch = -1
00493 ) const;
00494
00561 CStatus SetupPointLocatorQueries
00562 (
00563 siClosestLocationMethod in_method,
00564 MATH::CTransformation* in_pTransfo,
00565 LONG in_nbFacetsToRestrictSearch,
00566 const LONG* in_pFacetsToRestrictSearch,
00567 LONG in_nbLocatorsToBeQueried
00568 );
00569
00582 CStatus SetupClosestLocationQueries
00583 (
00584 siClosestLocationMethod in_method = siClosestSurface,
00585 MATH::CTransformation* in_pTransfo = NULL,
00586 LONG in_nbFacetsToRestrictSearch = -1,
00587 const LONG* in_pFacetsToRestrictSearch = NULL
00588 )
00589 {
00590 return SetupPointLocatorQueries( in_method, in_pTransfo, in_nbFacetsToRestrictSearch, in_pFacetsToRestrictSearch, -1 );
00591 }
00592
00609 CStatus EvaluatePositions
00610 (
00611 const PointLocatorData& in_ptLocators,
00612 LONG in_nbPointLocatorsIndices,
00613 const LONG* in_pPointLocatorsIndices,
00614 double* out_pPositions
00615 ) const;
00616
00634 CStatus EvaluateNormals
00635 (
00636 const PointLocatorData& in_ptLocators,
00637 siNormalComputationMethod in_ComputationMethod,
00638 LONG in_nbPointLocatorsIndices,
00639 const LONG* in_pPointLocatorsIndices,
00640 double* out_pNormals
00641 ) const;
00642
00675 CStatus EvaluateClusterProperty
00676 (
00677 const PointLocatorData& in_ptLocators,
00678 LONG in_nbPointLocatorsIndices,
00679 const LONG* in_pPointLocatorsIndices,
00680 const Cluster& in_parentCluster,
00681 const ClusterProperty& in_clusterProperty,
00682 float* out_pData
00683 ) const;
00684
00995 CStatus PutCache
00996 (
00997 CValue & in_Cache
00998 );
00999
01014 CValue GetCache();
01015
01030 CStatus GetBoundingBox
01031 (
01032 double & out_centerx,
01033 double & out_centery,
01034 double & out_centerz,
01035 double & out_extentx,
01036 double & out_extenty,
01037 double & out_extentz,
01038 const MATH::CTransformation & in_XfoObjectToBBoxSpace
01039 ) const;
01040
01041
01055 CStatus GetBoundingSphere
01056 (
01057 double & out_centerx,
01058 double & out_centery,
01059 double & out_centerz,
01060 double & out_radius,
01061 siVolumeCenterMethod in_centerMethod,
01062 const MATH::CTransformation & in_XfoObjectToBSphereSpace
01063 );
01064
01080 CStatus GetBoundingCapsule
01081 (
01082 double & out_centerx,
01083 double & out_centery,
01084 double & out_centerz,
01085 double & out_length,
01086 double & out_radius,
01087 siVolumeCenterMethod in_centerMethod,
01088 siBoundingCapsuleMethod in_axisMethod,
01089 const MATH::CTransformation & in_XfoObjectToBCapsuleSpace
01090 ) ;
01091
01097 CRefArray GetICEAttributes() const;
01098
01161 ICEAttribute GetICEAttributeFromName( const CString& in_name ) const;
01162
01163 private:
01164 Geometry * operator&() const;
01165 Geometry * operator&();
01166 };
01167
01168 };
01169
01170 #endif // __XSIGEOMETRY_H__