xsi_shape.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 __XSISHAPE_H__
    00018 #define __XSISHAPE_H__
    00019
    00020 #include "sicppsdk.h"
    00021 #include <xsi_decl.h>
    00022
    00023 namespace XSI {
    00024
    00025 namespace MATH {
    00026
    00027 //*****************************************************************************
    00238 //*****************************************************************************
    00239 class CShape
    00240 {
    00241 public:
    00246     struct ParameterInstance
    00247     {
    00248         bool operator==( const ParameterInstance& in_rOther ) const
    00249         {
    00250             return m_nInstanceIndex == in_rOther.m_nInstanceIndex;
    00251         }
    00252         ULONG m_nInstanceIndex;
    00253     };
    00254
    00259     struct ParameterReference
    00260     {
    00261         bool operator==( const ParameterReference& in_rOther ) const
    00262         {
    00263             return m_nObjectID == in_rOther.m_nObjectID && m_bBranch == in_rOther.m_bBranch;
    00264         }
    00265         ULONG m_nObjectID;
    00266         bool m_bBranch;
    00267     };
    00268
    00272     CShape( XSI::siICEShapeType in_type = XSI::siICEShapePoint ) : m_type( in_type )
    00273     {
    00274     }
    00275
    00279     CShape( const CShape& in_shape )
    00280     {
    00281         *this = in_shape;
    00282     }
    00283
    00285     ~CShape() {}
    00286
    00291     CShape& operator = ( const CShape& in_shape )
    00292     {
    00293         m_type = in_shape.m_type;
    00294         switch ( m_type )
    00295         {
    00296             case XSI::siICEShapeInstance:
    00297             {
    00298                 m_description.m_shapeInstance = in_shape.m_description.m_shapeInstance;
    00299             }
    00300             break;
    00301
    00302             case XSI::siICEShapeReference:
    00303             {
    00304                 m_description.m_shapeReference = in_shape.m_description.m_shapeReference;
    00305             }
    00306             break;
    00307         };
    00308         return *this;
    00309     }
    00310
    00314     XSI::siICEShapeType GetType()
    00315     {
    00316         return (XSI::siICEShapeType)m_type;
    00317     }
    00318
    00323     ULONG GetReferenceID( )
    00324     {
    00325         if ( m_type == XSI::siICEShapeReference )
    00326         {
    00327             return m_description.m_shapeReference.m_nObjectID;
    00328         }
    00329         return UINT_MAX;
    00330     }
    00331
    00336     bool IsBranchSelected( )
    00337     {
    00338         if ( m_type == XSI::siICEShapeReference )
    00339         {
    00340             return m_description.m_shapeReference.m_bBranch;
    00341         }
    00342         return false;
    00343     }
    00344
    00349     bool operator == (const CShape & in_shape )const
    00350     {
    00351         if( m_type != in_shape.m_type )
    00352         {
    00353             return false;
    00354         }
    00355
    00356         switch( m_type )
    00357         {
    00358             case XSI::siICEShapeInstance:
    00359             {
    00360                 return m_description.m_shapeInstance == in_shape.m_description.m_shapeInstance;
    00361             }
    00362             break;
    00363
    00364             case XSI::siICEShapeReference:
    00365             {
    00366                 return m_description.m_shapeReference == in_shape.m_description.m_shapeReference;
    00367             }
    00368             break;
    00369         }
    00370         return true;
    00371     }
    00372
    00378     void SetAsInstance(ULONG in_instanceIndex)
    00379     {
    00380         m_type = (unsigned char)XSI::siICEShapeInstance;
    00381         m_description.m_shapeInstance.m_nInstanceIndex = in_instanceIndex;
    00382     }
    00383
    00390     void SetAsReference(ULONG in_objectId, bool in_branch)
    00391     {
    00392         m_type = (unsigned char)XSI::siICEShapeReference;
    00393         m_description.m_shapeReference.m_nObjectID = in_objectId;
    00394         m_description.m_shapeReference.m_bBranch = in_branch;
    00395     }
    00396
    00401     void SetAsTrivial( XSI::siICEShapeType in_trivialType )
    00402     {
    00403         m_type = (unsigned char)in_trivialType;
    00404     }
    00405
    00409     XSI::siICEShapeType GetType() const { return (XSI::siICEShapeType)m_type;}
    00410
    00412     const ParameterReference& GetReferenceDescription() const
    00413     {
    00414         assert( m_type == (unsigned char)XSI::siICEShapeReference);
    00415         return m_description.m_shapeReference;
    00416     }
    00417
    00419     const ParameterInstance& GetInstanceDescription() const
    00420     {
    00421         assert( m_type == (unsigned char)XSI::siICEShapeInstance);
    00422         return m_description.m_shapeInstance;
    00423     }
    00424
    00425     private:
    00426     union ParameterUnion
    00427     {
    00428         ParameterInstance   m_shapeInstance;
    00429         ParameterReference  m_shapeReference;
    00430     };
    00431
    00432     unsigned char m_type; // XSI::siICEShapeType m_type;
    00433     ParameterUnion m_description;
    00434 };
    00435
    00436 }; // MATH
    00437 }; // XSI
    00438
    00439 #endif // __XSISHAPE_H__