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;
00433 ParameterUnion m_description;
00434 };
00435
00436 };
00437 };
00438
00439 #endif // __XSISHAPE_H__