root/OpenSceneGraph/trunk/src/osgWrappers/deprecated-dotosg/osgParticle/IO_ParticleSystem.cpp @ 13041

Revision 13041, 8.2 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#include <osgParticle/ParticleSystem>
3
4#include <osg/BoundingBox>
5
6#include <osgDB/Registry>
7#include <osgDB/Input>
8#include <osgDB/Output>
9
10#include <iostream>
11#include <string>
12
13extern bool  read_particle(osgDB::Input &fr, osgParticle::Particle &P);
14extern void  write_particle(const osgParticle::Particle &P, osgDB::Output &fw);
15
16bool  ParticleSystem_readLocalData(osg::Object &obj, osgDB::Input &fr);
17bool  ParticleSystem_writeLocalData(const osg::Object &obj, osgDB::Output &fw);
18
19REGISTER_DOTOSGWRAPPER(ParticleSystem_Proxy)
20(
21    new osgParticle::ParticleSystem,
22    "ParticleSystem",
23    "Object Drawable ParticleSystem",
24    ParticleSystem_readLocalData,
25    ParticleSystem_writeLocalData
26);
27
28bool ParticleSystem_readLocalData(osg::Object &obj, osgDB::Input &fr)
29{
30    osgParticle::ParticleSystem &myobj = static_cast<osgParticle::ParticleSystem &>(obj);
31    bool itAdvanced = false;
32
33    if (fr[0].matchWord("particleAlignment")) {
34        if (fr[1].matchWord("BILLBOARD")) {
35            myobj.setParticleAlignment(osgParticle::ParticleSystem::BILLBOARD);
36            fr += 2;
37            itAdvanced = true;
38        }
39        if (fr[1].matchWord("FIXED")) {
40            myobj.setParticleAlignment(osgParticle::ParticleSystem::FIXED);
41            fr += 2;
42            itAdvanced = true;
43        }
44    }
45
46    if (fr[0].matchWord("particleScaleReferenceFrame")) {
47        if (fr[1].matchWord("LOCAL_COORDINATES")) {
48            myobj.setParticleScaleReferenceFrame(osgParticle::ParticleSystem::LOCAL_COORDINATES);
49            fr += 2;
50            itAdvanced = true;
51        }
52        if (fr[1].matchWord("")) {
53            myobj.setParticleScaleReferenceFrame(osgParticle::ParticleSystem::WORLD_COORDINATES);
54            fr += 2;
55            itAdvanced = true;
56        }
57    }
58
59    if (fr[0].matchWord("alignVectorX")) {
60        osg::Vec3 v;
61        if (fr[1].getFloat(v.x()) && fr[2].getFloat(v.y()) && fr[3].getFloat(v.z())) {
62            myobj.setAlignVectorX(v);
63            fr += 4;
64            itAdvanced = true;
65        }
66    }
67
68    if (fr[0].matchWord("alignVectorY")) {
69        osg::Vec3 v;
70        if (fr[1].getFloat(v.x()) && fr[2].getFloat(v.y()) && fr[3].getFloat(v.z())) {
71            myobj.setAlignVectorY(v);
72            fr += 4;
73            itAdvanced = true;
74        }
75    }
76
77    if (fr[0].matchWord("useVertexArray")) {
78        if (fr[1].matchWord("TRUE")) {
79            myobj.setUseVertexArray(true);
80            fr += 2;
81            itAdvanced = true;
82        } else if (fr[1].matchWord("FALSE")) {
83            myobj.setUseVertexArray(false);
84            fr += 2;
85            itAdvanced = true;
86        }
87    }
88
89    if (fr[0].matchWord("useShaders")) {
90        if (fr[1].matchWord("TRUE")) {
91            myobj.setUseShaders(true);
92            fr += 2;
93            itAdvanced = true;
94        } else if (fr[1].matchWord("FALSE")) {
95            myobj.setUseShaders(false);
96            fr += 2;
97            itAdvanced = true;
98        }
99    }
100
101    if (fr[0].matchWord("doublePassRendering")) {
102        if (fr[1].matchWord("TRUE")) {
103            myobj.setDoublePassRendering(true);
104            fr += 2;
105            itAdvanced = true;
106        } else if (fr[1].matchWord("FALSE")) {
107            myobj.setDoublePassRendering(false);
108            fr += 2;
109            itAdvanced = true;
110        }
111    }
112
113    if (fr[0].matchWord("frozen")) {
114        if (fr[1].matchWord("TRUE")) {
115            myobj.setFrozen(true);
116            fr += 2;
117            itAdvanced = true;
118        } else if (fr[1].matchWord("FALSE")) {
119            myobj.setFrozen(false);    // this might not be necessary
120            fr += 2;
121            itAdvanced = true;
122        }
123    }
124
125    if (fr[0].matchWord("freezeOnCull")) {
126        if (fr[1].matchWord("TRUE")) {
127            myobj.setFreezeOnCull(true);
128            fr += 2;
129            itAdvanced = true;
130        } else if (fr[1].matchWord("FALSE")) {
131            myobj.setFreezeOnCull(false);
132            fr += 2;
133            itAdvanced = true;
134        }
135    }
136
137    if (fr[0].matchWord("defaultBoundingBox")) {
138        osg::BoundingBox bbox;
139        if (    fr[1].getFloat(bbox.xMin()) &&
140            fr[2].getFloat(bbox.yMin()) &&
141            fr[3].getFloat(bbox.zMin()) &&
142            fr[4].getFloat(bbox.xMax()) &&
143            fr[5].getFloat(bbox.yMax()) &&
144            fr[6].getFloat(bbox.zMax()) ) {
145            myobj.setDefaultBoundingBox(bbox);
146            fr += 7;
147            itAdvanced = true;
148        }
149    }
150
151    if (fr[0].matchWord("sortMode")) {
152        if (fr[1].matchWord("NO_SORT")) {
153            myobj.setSortMode(osgParticle::ParticleSystem::NO_SORT);
154            fr += 2;
155            itAdvanced = true;
156        }
157        if (fr[1].matchWord("SORT_FRONT_TO_BACK")) {
158            myobj.setSortMode(osgParticle::ParticleSystem::SORT_FRONT_TO_BACK);
159            fr += 2;
160            itAdvanced = true;
161        }
162        if (fr[1].matchWord("SORT_BACK_TO_FRONT")) {
163            myobj.setSortMode(osgParticle::ParticleSystem::SORT_BACK_TO_FRONT);
164            fr += 2;
165            itAdvanced = true;
166        }
167    }
168
169    if (fr[0].matchWord("visibilityDistance")) {
170        double distance;
171        if (fr[1].getFloat(distance)) {
172            myobj.setVisibilityDistance(distance);
173            fr += 2;
174            itAdvanced = true;
175        }
176    }
177
178    if (fr[0].matchWord("particleTemplate")) {
179        ++fr;
180        itAdvanced = true;
181        osgParticle::Particle P;
182        if (read_particle(fr, P)) {
183            myobj.setDefaultParticleTemplate(P);
184        }
185    }
186
187    return itAdvanced;
188}
189
190bool ParticleSystem_writeLocalData(const osg::Object &obj, osgDB::Output &fw)
191{
192    const osgParticle::ParticleSystem &myobj = static_cast<const osgParticle::ParticleSystem &>(obj);
193
194    fw.indent() << "particleAlignment ";
195    switch (myobj.getParticleAlignment()) {
196        default:
197        case osgParticle::ParticleSystem::BILLBOARD:
198            fw << "BILLBOARD" << std::endl;
199            break;
200        case osgParticle::ParticleSystem::FIXED:
201            fw << "FIXED" << std::endl;
202            break;
203    }
204
205    fw.indent() << "particleScaleReferenceFrame ";
206    switch (myobj.getParticleScaleReferenceFrame()) {
207        default:
208        case osgParticle::ParticleSystem::LOCAL_COORDINATES:
209            fw << "LOCAL_COORDINATES" << std::endl;
210            break;
211        case osgParticle::ParticleSystem::WORLD_COORDINATES:
212            fw << "WORLD_COORDINATES" << std::endl;
213            break;
214    }
215
216    osg::Vec3 v = myobj.getAlignVectorX();
217    fw.indent() << "alignVectorX " << v.x() << " " << v.y() << " " << v.z() << std::endl;
218    v = myobj.getAlignVectorY();
219    fw.indent() << "alignVectorY " << v.x() << " " << v.y() << " " << v.z() << std::endl;
220
221    fw.indent() << "useVertexArray ";
222    if (myobj.getUseVertexArray())
223        fw << "TRUE" << std::endl;
224    else
225        fw << "FALSE" << std::endl;
226
227    fw.indent() << "useShaders ";
228    if (myobj.getUseShaders())
229        fw << "TRUE" << std::endl;
230    else
231        fw << "FALSE" << std::endl;
232
233    fw.indent() << "doublePassRendering ";
234    if (myobj.getDoublePassRendering())
235        fw << "TRUE" << std::endl;
236    else
237        fw << "FALSE" << std::endl;
238
239    fw.indent() << "frozen ";
240    if (myobj.isFrozen())
241        fw << "TRUE" << std::endl;
242    else
243        fw << "FALSE" << std::endl;
244
245    fw.indent() << "freezeOnCull ";
246    if (myobj.getFreezeOnCull())
247        fw << "TRUE" << std::endl;
248    else
249        fw << "FALSE" << std::endl;
250
251    osg::BoundingBox bbox = myobj.getDefaultBoundingBox();
252    fw.indent() << "defaultBoundingBox ";
253    fw << bbox.xMin() << " " << bbox.yMin() << " " << bbox.zMin() << " ";
254    fw << bbox.xMax() << " " << bbox.yMax() << " " << bbox.zMax() << std::endl;
255
256    fw.indent() << "sortMode ";
257    switch (myobj.getSortMode()) {
258        default:
259        case osgParticle::ParticleSystem::NO_SORT:
260            fw << "NO_SORT" << std::endl;
261            break;
262        case osgParticle::ParticleSystem::SORT_FRONT_TO_BACK:
263            fw << "SORT_FRONT_TO_BACK" << std::endl;
264            break;
265        case osgParticle::ParticleSystem::SORT_BACK_TO_FRONT:
266            fw << "SORT_BACK_TO_FRONT" << std::endl;
267            break;
268    }
269
270    fw.indent() << "visibilityDistance " << myobj.getVisibilityDistance() << std::endl;
271
272    fw.indent() << "particleTemplate ";
273    write_particle(myobj.getDefaultParticleTemplate(), fw);
274    return true;
275}
Note: See TracBrowser for help on using the browser.