xsi_geometry.h Source File
 
 
 
xsi_geometry.h
Go to the documentation of this file.
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, //-1 if all
00613                 const LONG* in_pPointLocatorsIndices, // 0 if all
00614                 double* out_pPositions
00615         ) const;
00616 
00634         CStatus EvaluateNormals
00635         (
00636                 const PointLocatorData& in_ptLocators,
00637                 siNormalComputationMethod in_ComputationMethod,
00638                 LONG in_nbPointLocatorsIndices, //-1 if all
00639                 const LONG* in_pPointLocatorsIndices, // 0 if all
00640                 double* out_pNormals
00641         ) const;
00642 
00675         CStatus EvaluateClusterProperty
00676         (
00677                 const PointLocatorData& in_ptLocators,
00678                 LONG in_nbPointLocatorsIndices, //-1 if all
00679                 const LONG* in_pPointLocatorsIndices, // 0 if all
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 
01174         ICEAttribute AddICEAttribute( const CString& in_name, XSI::siICENodeDataType in_DataType, XSI::siICENodeStructureType in_StructureType, XSI::siICENodeContextType in_ContextType );
01175 
01185         CStatus RemoveICEAttribute( const CString& in_name );
01186 
01187         private:
01188         Geometry * operator&() const;
01189         Geometry * operator&();
01190 };
01191 
01192 };
01193 
01194 #endif // __XSIGEOMETRY_H__