00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #pragma once
00013
00015 #include "nvsgcommon.h"
00016
00017 #include "nvutil/RCObject.h"
00018 #include "nvutil/SWMRSync.h"
00019 #include "nvsg/DAL.h"
00020 #include <typeinfo>
00021
00022 namespace nvsg
00023 {
00025
00026 typedef unsigned long long DataID;
00027
00029
00038 enum
00039 {
00040 OC_INVALID = 0xFFFFFFFF
00041 , OC_OBJECT = 0
00042
00043 , OC_NODE = OC_OBJECT
00044 , OC_GEONODE
00045 , OC_GROUP
00046 , OC_LOD
00047 , OC_SWITCH
00048 , OC_TRANSFORM
00049 , OC_ANIMATEDTRANSFORM
00050 , OC_DIRECTEDLIGHT
00051 , OC_POINTLIGHT
00052 , OC_SPOTLIGHT
00053
00054 , OC_DRAWABLES = 0x20
00055 , OC_GEOSET
00056 , OC_QUADS
00057 , OC_ANIMATEDQUADS
00058 , OC_QUADSTRIPS
00059 , OC_TRIANGLES
00060 , OC_ANIMATEDTRIANGLES
00061 , OC_SKINNEDTRIANGLES
00062 , OC_TRISTRIPS
00063
00064 , OC_STATESET = 0x40
00065 , OC_STATEATTRIBUTE
00066 , OC_CGFX
00067 , OC_FACEATTRIBUTE
00068 , OC_MATERIAL
00069 , OC_TEXTUREATTRIBUTE
00070 , OC_TEXTUREATTRIBUTEITEM
00071
00072 , OC_ANIMATION = 0x60
00073 , OC_FRAMEDTRAFOANIMATION
00074 , OC_FRAMEDVNVECTORANIMATION
00075 , OC_LINEARINTERPOLATEDTRAFOANIMATION
00076 , OC_LINEARINTERPOLATEDVNVECTORANIMATION
00077
00078 , OC_CAMERA = 0x80
00079 , OC_JITTERCAMERA
00080 , OC_PARALLELCAMERA
00081 , OC_PERSPECTIVECAMERA
00082 , OC_STEREOCAMERA
00083
00084 , OC_HIGHLIGHTOBJECT = 0xA0
00085 , OC_HIGHLIGHTBOX
00086 , OC_HIGHLIGHTEDGES
00087
00088 , OC_CUSTOMOBJECT = 0xC0
00089 };
00090
00092
00093 class Object : public nvutil::RCObject
00094 , public nvutil::ISWMRSync
00095 , public DALHost
00096 {
00097 public:
00099
00100 unsigned int getObjectCode() const;
00101
00103
00105 NVSG_API virtual bool isDataShared( void ) const;
00106
00108
00110 NVSG_API virtual DataID getDataID( void ) const;
00111
00113 NVSG_API void setName( const std::string& name
00114 );
00115
00117
00118 NVSG_API const std::string& getName( void ) const;
00119
00121
00128 NVSG_API bool waitToRead( size_t milliseconds = 0xFFFFFFFF
00129 ) const;
00130
00132
00134 NVSG_API void doneReading( void ) const;
00135
00137
00144 NVSG_API bool waitToWrite( size_t milliseconds = 0xFFFFFFFF
00145 ) const;
00146
00148
00150 NVSG_API void doneWriting( void ) const;
00151
00152 protected:
00154 NVSG_API Object( void );
00155
00157 NVSG_API Object( const Object& rhs );
00158
00160 NVSG_API virtual ~Object();
00161
00162 unsigned int m_objectCode;
00163
00164
00165 private:
00166 std::string m_name;
00167 nvutil::SWMRSync m_lock;
00168 };
00169
00170 inline unsigned int Object::getObjectCode() const
00171 {
00172 __TRACE();
00173 return m_objectCode;
00174 }
00175
00176 inline void Object::setName( const std::string& name )
00177 {
00178 __TRACE();
00179 m_name = name;
00180 }
00181
00182 inline const std::string& Object::getName() const
00183 {
00184 __TRACE();
00185 return( m_name );
00186 }
00187
00188 inline bool Object::waitToRead( size_t milliseconds ) const
00189 {
00190 __TRACE();
00191 size_t status;
00192 return m_lock.waitToRead(milliseconds, status);
00193 }
00194
00195 inline void Object::doneReading( void ) const
00196 {
00197 __TRACE();
00198 m_lock.doneReading();
00199 }
00200
00201 inline bool Object::waitToWrite( size_t milliseconds ) const
00202 {
00203 __TRACE();
00204 size_t status;
00205 return m_lock.waitToWrite(milliseconds, status);
00206 }
00207
00208 inline void Object::doneWriting( void ) const
00209 {
00210 __TRACE();
00211 m_lock.doneWriting();
00212 }
00213
00232 template<typename T>
00233 inline T * beginEdit( const T * obj
00234 )
00235 {
00236 __TRACE();
00237 __ASSERT(obj);
00238 obj->waitToWrite();
00239 return const_cast<T *>(obj);
00240 }
00241
00259 template<typename T>
00260 inline const T * endEdit(T *& obj
00261 )
00262 {
00263 __TRACE();
00264 __ASSERT(obj);
00265 const T* cobj = obj;
00266 cobj->doneWriting();
00267 obj = NULL;
00268 return( cobj );
00269 }
00270
00271
00272 template<typename T>
00273 inline const T * endEdit(const T *& obj)
00274 {
00275
00276
00277 Object * p=obj;
00278 }
00279
00281
00282 template<typename T>
00283 inline bool isTypeOf( const Object *p )
00284 {
00285 return( dynamic_cast<const T *>( p ) != NULL );
00286 }
00287
00289
00290 inline bool areOfSameType( const Object &p0, const Object &p1 )
00291 {
00292 return( !! ( typeid( p0 ) == typeid( p1 ) ) );
00293 }
00294
00295 }