root/OpenSceneGraph/trunk/src/osgPlugins/ive/Node.cpp @ 13041

Revision 13041, 5.3 kB (checked in by robert, 3 years ago)

Ran script to remove trailing spaces and tabs

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1/**********************************************************************
2 *
3 *    FILE:            Node.cpp
4 *
5 *    DESCRIPTION:    Read/Write osg::Node in binary format to disk.
6 *
7 *    CREATED BY:        Rune Schmidt Jensen
8 *
9 *    HISTORY:        Created 10.03.2003
10 *
11 *    Copyright 2003 VR-C
12 **********************************************************************/
13
14#include "Exception.h"
15#include "Node.h"
16#include "MatrixTransform.h"
17#include "Group.h"
18#include "Object.h"
19#include "StateSet.h"
20#include "AnimationPathCallback.h"
21#include "ClusterCullingCallback.h"
22#include "VolumePropertyAdjustmentCallback.h"
23
24using namespace ive;
25
26
27void Node::write(DataOutputStream* out){
28
29    // Write node identification.
30    out->writeInt(IVENODE);
31
32    // Write out any inherited classes.
33    osg::Object*  obj = dynamic_cast<osg::Object*>(this);
34    if(obj){
35        ((ive::Object*)(obj))->write(out);
36    }
37    else
38        out_THROW_EXCEPTION("Node::write(): Could not cast this osg::Node to an osg::Object.");
39
40
41    // Write osg::node properties.
42    if ( out->getVersion() < VERSION_0012 )
43    {
44        // Write Name
45        out->writeString(getName());
46    }
47    // Write culling active
48    out->writeBool( getCullingActive());
49    // Write Descriptions
50    int nDesc =  getDescriptions().size();
51    out->writeInt(nDesc);
52    if(nDesc!=0){
53        std::vector<std::string> desc =  getDescriptions();
54        for(int i=0;i<nDesc;i++)
55            out->writeString(desc[i]);
56    }
57    // Write Stateset if any
58    out->writeBool( getStateSet()!=0);
59    if(getStateSet())
60        out->writeStateSet(getStateSet());
61
62    // Write UpdateCallback if any
63    osg::AnimationPathCallback* nc = dynamic_cast<osg::AnimationPathCallback*>(getUpdateCallback());
64    out->writeBool(nc!=0);
65    if(nc)
66        {
67        ((ive::AnimationPathCallback*)(nc))->write(out);
68    }
69
70    if (out->getVersion() >= VERSION_0006)
71    {
72        osg::ClusterCullingCallback* ccc = dynamic_cast<osg::ClusterCullingCallback*>(getCullCallback());
73        out->writeBool(ccc!=0);
74        if(ccc)
75        {
76            ((ive::ClusterCullingCallback*)(ccc))->write(out);
77        }
78    }
79
80
81    if (out->getVersion() >= VERSION_0039)
82    {
83        osgVolume::PropertyAdjustmentCallback* pac = dynamic_cast<osgVolume::PropertyAdjustmentCallback*>(getEventCallback());
84        out->writeBool(pac!=0);
85        if(pac)
86        {
87            ((ive::VolumePropertyAdjustmentCallback*)pac)->write(out);
88        }
89    }
90
91    if (out->getVersion() >= VERSION_0010)
92    {
93        const osg::BoundingSphere& bs = getInitialBound();
94        out->writeBool(bs.valid());
95        if (bs.valid())
96        {
97            out->writeVec3(bs.center());
98            out->writeFloat(bs.radius());
99        }
100    }
101
102    // Write NodeMask
103    out->writeUInt(getNodeMask());
104}
105
106
107void Node::read(DataInputStream* in){
108    // Peak on the identification id.
109    int id = in->peekInt();
110
111    if(id == IVENODE){
112        id = in->readInt();
113        osg::Object*  obj = dynamic_cast<osg::Object*>(this);
114        if(obj){
115            ((ive::Object*)(obj))->read(in);
116        }
117        else
118            in_THROW_EXCEPTION("Node::read(): Could not cast this osg::Node to an osg::Object.");
119
120        if ( in->getVersion() < VERSION_0012 )
121        {
122            // Read name
123            setName(in->readString());
124        }
125        // Read Culling active
126        setCullingActive(in->readBool());
127        // Read descriptions
128        int nDesc = in->readInt();
129        if(nDesc!=0){
130            for(int i=0;i<nDesc;i++)
131                 addDescription(in->readString());
132        }
133        // Read StateSet if any
134        if(in->readBool())
135        {
136            setStateSet(in->readStateSet());
137        }
138
139        // Read UpdateCallback if any
140        if(in->readBool())
141        {
142            osg::AnimationPathCallback* nc = new osg::AnimationPathCallback();
143            ((ive::AnimationPathCallback*)(nc))->read(in);
144            setUpdateCallback(nc);
145        }
146
147        if (in->getVersion() >= VERSION_0006)
148        {
149            if(in->readBool())
150            {
151                osg::ClusterCullingCallback* ccc = new osg::ClusterCullingCallback();
152                ((ive::ClusterCullingCallback*)(ccc))->read(in);
153                setCullCallback(ccc);
154            }
155        }
156
157        if (in->getVersion() >= VERSION_0039)
158        {
159            if(in->readBool())
160            {
161                int pacID = in->peekInt();
162                if (pacID==IVEVOLUMEPROPERTYADJUSTMENTCALLBACK)
163                {
164                    osgVolume::PropertyAdjustmentCallback* pac = new osgVolume::PropertyAdjustmentCallback();
165                    ((ive::VolumePropertyAdjustmentCallback*)(pac))->read(in);
166                    setEventCallback(pac);
167                }
168                else
169                {
170                    in_THROW_EXCEPTION("Unknown event callback identification in Node::read()");
171                }
172
173            }
174        }
175
176        if (in->getVersion() >= VERSION_0010)
177        {
178            if (in->readBool())
179            {
180                osg::BoundingSphere bs;
181                bs.center() = in->readVec3();
182                bs.radius() = in->readFloat();
183                setInitialBound(bs);
184            }
185        }
186
187        // Read NodeMask
188        setNodeMask(in->readUInt());
189    }
190    else{
191        in_THROW_EXCEPTION("Node::read(): Expected Node identification");
192    }
193}
Note: See TracBrowser for help on using the browser.