00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 #ifndef _OSGNODEIMPL_H_
00038 #define _OSGNODEIMPL_H_
00039 #ifdef __sgi
00040 #pragma once
00041 #endif
00042
00043 #ifdef OSG_DOC_FILES_IN_MODULE
00044
00047 #endif
00048
00049 #include <string>
00050 #include <vector>
00051
00052 #include <OSGSystemDef.h>
00053 #include <OSGBaseTypes.h>
00054 #include <OSGMatrix.h>
00055 #include <OSGFieldContainer.h>
00056 #include <OSGSFSysTypes.h>
00057 #include <OSGSFBaseTypes.h>
00058
00059 #include <OSGAttachmentContainer.h>
00060 #include <OSGSFNodeCorePtr.h>
00061 #include <OSGSFNodePtrImpl.h>
00062 #include <OSGSFNodePtrDepImpl.h>
00063 #include <OSGMFNodePtrImpl.h>
00064 #include <OSGMFNodePtrDepImpl.h>
00065
00066 OSG_BEGIN_NAMESPACE
00067
00068 class NodeCore;
00069 class BinaryDataHandler;
00070 class FieldDescription;
00071
00075 class OSG_SYSTEMLIB_DLLMAPPING Node : public AttachmentContainer
00076 {
00077
00078
00079 protected:
00080
00081 typedef AttachmentContainer Inherited;
00082
00083
00084
00085 public:
00086
00087 enum
00088 {
00089 VolumeFieldId = Inherited::NextFieldId,
00090 TravMaskFieldId = VolumeFieldId + 1,
00091 ParentFieldId = TravMaskFieldId + 1,
00092 ChildrenFieldId = ParentFieldId + 1,
00093 CoreFieldId = ChildrenFieldId + 1,
00094 NextFieldId = CoreFieldId + 1
00095 };
00096
00097 static const BitVector VolumeFieldMask;
00098 static const BitVector TravMaskFieldMask;
00099 static const BitVector ParentFieldMask;
00100 static const BitVector ChildrenFieldMask;
00101 static const BitVector CoreFieldMask;
00102
00103 typedef NodePtr Ptr;
00104
00105
00109 OSG_FIELD_CONTAINER_DECL(NodePtr)
00110
00111
00112
00116 NodeCorePtr getCore( void );
00117 NodeCorePtr getCore( void ) const;
00118
00119 void setCore(const NodeCorePtr &core);
00120
00122
00126 NodePtr getParent(void);
00127
00129
00133 UInt32 getNChildren (void ) const;
00134
00135 void addChild (const NodePtr &childP );
00136
00137 void insertChild ( UInt32 childIndex,
00138 const NodePtr &childP );
00139
00140 void replaceChild ( UInt32 childIndex,
00141 const NodePtr &childP );
00142
00143 bool replaceChildBy(const NodePtr &childP,
00144 const NodePtr &newChildP );
00145
00146 Int32 findChild (const NodePtr &childP ) const;
00147
00148 void subChild (const NodePtr &childP );
00149 void subChild ( UInt32 childIndex);
00150
00151 NodePtr getChild ( UInt32 childIndex);
00152
00154
00158 bool getActive (void ) const;
00159
00160 void setActive (bool val);
00161
00162 void setTravMask(UInt32 val);
00163 UInt32 getTravMask(void ) const;
00164
00165 void setOcclusionMask(UInt8 val);
00166 UInt8 getOcclusionMask(void ) const;
00167
00169
00173 NodePtr clone(void);
00174
00176
00180 SFDynamicVolume *getSFVolume (void);
00181 SFUInt32 *getSFTravMask(void);
00182 SFNodePtr *getSFParent (void);
00183 SFNodeCorePtr *getSFCore (void);
00184 MFNodePtr *getMFChildren(void);
00185
00187
00191 Matrix getToWorld(void );
00192
00193 void getToWorld(Matrix &result);
00194
00196
00200 DynamicVolume &getVolume (bool update );
00201
00202 const DynamicVolume &getVolume (void ) const;
00203
00204 void getWorldVolume (DynamicVolume &result);
00205
00206 void updateVolume (void );
00207
00208 void invalidateVolume(void );
00209
00211
00215 virtual void changed(BitVector whichField,
00216 UInt32 origin );
00217
00219
00223 virtual UInt32 getBinSize (const BitVector &whichField);
00224
00225 virtual void copyToBin ( BinaryDataHandler &pMem,
00226 const BitVector &whichField);
00227 virtual void copyFromBin( BinaryDataHandler &pMem,
00228 const BitVector &whichField);
00229
00231
00235 virtual void dump( UInt32 uiIndent = 0,
00236 const BitVector bvFlags = 0) const;
00237
00239
00240
00241 protected:
00242
00243 friend class FieldContainer;
00244 friend class FieldContainerType;
00245
00246
00250 static FieldDescription *_desc[];
00251 static FieldContainerType _type;
00252
00253 static const NodePtr NullNode;
00254
00256
00260 SFDynamicVolume _sfVolume;
00261
00262 SFUInt32 _sfTravMask;
00263
00264 SFNodePtr _sfParent;
00265 MFNodePtr _mfChildren;
00266
00267 SFNodeCorePtr _sfCore;
00268
00269 UInt8 _occlusionMask;
00270
00272
00276 Node(void);
00277 Node(const Node &source);
00278
00280
00284 virtual ~Node (void);
00285
00287
00291 void setParent(const NodePtr &parent);
00292
00293 void onCreate (const Node *source = NULL);
00294
00295 #if defined(OSG_FIXED_MFIELDSYNC)
00296 virtual void onDestroyAspect(UInt32 uiId, UInt32 uiAspect);
00297 #endif
00298
00300
00304 #if !defined(OSG_FIXED_MFIELDSYNC)
00305 virtual void executeSync ( FieldContainer &other,
00306 const BitVector &whichField);
00307
00308 void executeSyncImpl( Node *pOther,
00309 const BitVector &whichField);
00310 #else
00311 virtual void executeSync ( FieldContainer &other,
00312 const BitVector &whichField,
00313 const SyncInfo &sInfo );
00314
00315 void executeSyncImpl ( Node *pOther,
00316 const BitVector &whichField,
00317 const SyncInfo &sInfo );
00318
00319 virtual void execBeginEdit (const BitVector &whichField,
00320 UInt32 uiAspect,
00321 UInt32 uiContainerSize);
00322
00323 void execBeginEditImpl (const BitVector &whichField,
00324 UInt32 uiAspect,
00325 UInt32 uiContainerSize);
00326 #endif
00327
00329
00333 NodePtr getPtr(void) const;
00334
00336
00337
00338 private:
00339
00340
00341 void operator =(const Node &source);
00342 };
00343
00344
00348 OSG_SYSTEMLIB_DLLMAPPING
00349 NodePtr cloneTree(const NodePtr &pRootNode);
00350
00351 OSG_SYSTEMLIB_DLLMAPPING
00352 FieldContainerPtr deepClone(const FieldContainerPtr &src,
00353 const std::vector<std::string> &share);
00354
00355 OSG_SYSTEMLIB_DLLMAPPING
00356 FieldContainerPtr deepClone(const FieldContainerPtr &src,
00357 const std::vector<UInt16> &shareGroupIds);
00358
00359 OSG_SYSTEMLIB_DLLMAPPING
00360 FieldContainerPtr deepClone(const FieldContainerPtr &src,
00361 const std::string &shareString = "");
00362
00363 OSG_SYSTEMLIB_DLLMAPPING
00364 void deepCloneAttachments(const AttachmentContainerPtr &src,
00365 AttachmentContainerPtr dst,
00366 const std::vector<std::string> &share);
00367
00368 OSG_SYSTEMLIB_DLLMAPPING
00369 void deepCloneAttachments(const AttachmentContainerPtr &src,
00370 AttachmentContainerPtr dst,
00371 const std::vector<UInt16> &shareGroupIds);
00372
00373 OSG_SYSTEMLIB_DLLMAPPING
00374 void deepCloneAttachments(const NodePtr &src, NodePtr &dst,
00375 const std::string &shareString = "");
00376
00377 OSG_SYSTEMLIB_DLLMAPPING
00378 NodePtr deepCloneTree(const NodePtr &src,
00379 const std::vector<std::string> &share);
00380
00381 OSG_SYSTEMLIB_DLLMAPPING
00382 NodePtr deepCloneTree(const NodePtr &src,
00383 const std::vector<UInt16> &shareGroupIds);
00384
00385 OSG_SYSTEMLIB_DLLMAPPING
00386 NodePtr deepCloneTree(const NodePtr &src,
00387 const std::string &shareString = "");
00388
00389 OSG_END_NAMESPACE
00390
00391 #define OSGNODE_HEADER_CVSID "@(#)$Id: $"
00392
00393 #endif