2
Copyright (c) 2008-2009 NetAllied Systems GmbH
4
This file is part of MayaDataModel.
6
Licensed under the MIT Open Source License,
7
for details please see LICENSE file or the website
8
http://www.opensource.org/licenses/mit-license.php
10
#ifndef __MayaDM_SPRING_H__
11
#define __MayaDM_SPRING_H__
12
#include "MayaDMTypes.h"
13
#include "MayaDMConnectables.h"
14
#include "MayaDMShape.h"
17
class Spring : public Shape
21
void write(FILE* file) const
28
Spring(FILE* file,const std::string& name,const std::string& parent="",bool shared=false,bool create=true)
29
:Shape(file, name, parent, "spring", shared, create){}
32
void setEnd1Weight(double f)
35
fprintf(mFile,"\tsetAttr \".f\" %f;\n", f);
37
void setEnd2Weight(double t)
40
fprintf(mFile,"\tsetAttr \".t\" %f;\n", t);
42
void setUseStiffnessPS(bool usps)
44
if(usps == true) return;
45
fprintf(mFile,"\tsetAttr \".usps\" %i;\n", usps);
47
void setUseDampingPS(bool udps)
49
if(udps == true) return;
50
fprintf(mFile,"\tsetAttr \".udps\" %i;\n", udps);
52
void setUseRestLengthPS(bool urps)
54
if(urps == true) return;
55
fprintf(mFile,"\tsetAttr \".urps\" %i;\n", urps);
57
void setStiffness(double s)
60
fprintf(mFile,"\tsetAttr \".s\" %f;\n", s);
62
void setDamping(double d)
65
fprintf(mFile,"\tsetAttr \".d\" %f;\n", d);
67
void setRestLength(double r)
70
fprintf(mFile,"\tsetAttr \".r\" %f;\n", r);
72
void setStiffnessPS(const doubleArray& sps)
74
if(sps.size == 0) return;
75
fprintf(mFile,"\tsetAttr \".sps\" -type \"doubleArray\" ");
79
void setDampingPS(const doubleArray& dps)
81
if(dps.size == 0) return;
82
fprintf(mFile,"\tsetAttr \".dps\" -type \"doubleArray\" ");
86
void setRestLengthPS(const doubleArray& rps)
88
if(rps.size == 0) return;
89
fprintf(mFile,"\tsetAttr \".rps\" -type \"doubleArray\" ");
93
void setObjectPositions(size_t opos_i,const vectorArray& opos)
95
if(opos.size == 0) return;
96
fprintf(mFile,"\tsetAttr \".opos[%i]\" -type \"vectorArray\" ",opos_i);
100
void setObjectPositions(size_t opos_start,size_t opos_end,vectorArray* opos)
102
fprintf(mFile,"\tsetAttr \".opos[%i:%i]\" ", opos_start,opos_end);
103
size_t size = (opos_end-opos_start)*1+1;
104
for(size_t i=0;i<size;++i)
106
opos[i].write(mFile);
109
fprintf(mFile,";\n");
111
void startObjectPositions(size_t opos_start,size_t opos_end)const
113
fprintf(mFile,"\tsetAttr \".opos[%i:%i]\"",opos_start,opos_end);
114
fprintf(mFile," -type \"vectorArray\" ");
116
void appendObjectPositions(const vectorArray& opos)const
121
void endObjectPositions()const
123
fprintf(mFile,";\n");
125
void setObjectVelocities(size_t ovel_i,const vectorArray& ovel)
127
if(ovel.size == 0) return;
128
fprintf(mFile,"\tsetAttr \".ovel[%i]\" -type \"vectorArray\" ",ovel_i);
130
fprintf(mFile,";\n");
132
void setObjectVelocities(size_t ovel_start,size_t ovel_end,vectorArray* ovel)
134
fprintf(mFile,"\tsetAttr \".ovel[%i:%i]\" ", ovel_start,ovel_end);
135
size_t size = (ovel_end-ovel_start)*1+1;
136
for(size_t i=0;i<size;++i)
138
ovel[i].write(mFile);
141
fprintf(mFile,";\n");
143
void startObjectVelocities(size_t ovel_start,size_t ovel_end)const
145
fprintf(mFile,"\tsetAttr \".ovel[%i:%i]\"",ovel_start,ovel_end);
146
fprintf(mFile," -type \"vectorArray\" ");
148
void appendObjectVelocities(const vectorArray& ovel)const
153
void endObjectVelocities()const
155
fprintf(mFile,";\n");
157
void setObjectMass(size_t omas_i,const doubleArray& omas)
159
if(omas.size == 0) return;
160
fprintf(mFile,"\tsetAttr \".omas[%i]\" -type \"doubleArray\" ",omas_i);
162
fprintf(mFile,";\n");
164
void setObjectMass(size_t omas_start,size_t omas_end,doubleArray* omas)
166
fprintf(mFile,"\tsetAttr \".omas[%i:%i]\" ", omas_start,omas_end);
167
size_t size = (omas_end-omas_start)*1+1;
168
for(size_t i=0;i<size;++i)
170
omas[i].write(mFile);
173
fprintf(mFile,";\n");
175
void startObjectMass(size_t omas_start,size_t omas_end)const
177
fprintf(mFile,"\tsetAttr \".omas[%i:%i]\"",omas_start,omas_end);
178
fprintf(mFile," -type \"doubleArray\" ");
180
void appendObjectMass(const doubleArray& omas)const
185
void endObjectMass()const
187
fprintf(mFile,";\n");
189
void setDeltaTime(size_t dt_i,double dt)
192
fprintf(mFile,"\tsetAttr \".dt[%i]\" %f;\n", dt_i,dt);
194
void setDeltaTime(size_t dt_start,size_t dt_end,double* dt)
196
fprintf(mFile,"\tsetAttr \".dt[%i:%i]\" ", dt_start,dt_end);
197
size_t size = (dt_end-dt_start)*1+1;
198
for(size_t i=0;i<size;++i)
200
fprintf(mFile,"%f",dt[i]);
201
if(i+1<size) fprintf(mFile," ");
203
fprintf(mFile,";\n");
205
void startDeltaTime(size_t dt_start,size_t dt_end)const
207
fprintf(mFile,"\tsetAttr \".dt[%i:%i]\"",dt_start,dt_end);
209
void appendDeltaTime(double dt)const
211
fprintf(mFile," %f",dt);
213
void endDeltaTime()const
215
fprintf(mFile,";\n");
217
void setValidIndex(const intArray& vali)
219
if(vali.size == 0) return;
220
fprintf(mFile,"\tsetAttr \".vali\" -type \"intArray\" ");
222
fprintf(mFile,";\n");
224
void setObject0(const intArray& obz)
226
if(obz.size == 0) return;
227
fprintf(mFile,"\tsetAttr \".obz\" -type \"intArray\" ");
229
fprintf(mFile,";\n");
231
void setPoint0(const intArray& ptz)
233
if(ptz.size == 0) return;
234
fprintf(mFile,"\tsetAttr \".ptz\" -type \"intArray\" ");
236
fprintf(mFile,";\n");
238
void setObject1(const intArray& obo)
240
if(obo.size == 0) return;
241
fprintf(mFile,"\tsetAttr \".obo\" -type \"intArray\" ");
243
fprintf(mFile,";\n");
245
void setPoint1(const intArray& pto)
247
if(pto.size == 0) return;
248
fprintf(mFile,"\tsetAttr \".pto\" -type \"intArray\" ");
250
fprintf(mFile,";\n");
252
void setMinSprings(int ms)
255
fprintf(mFile,"\tsetAttr \".ms\" %i;\n", ms);
257
void setManageParticleDeath(bool mpd)
259
if(mpd == true) return;
260
fprintf(mFile,"\tsetAttr \".mpd\" %i;\n", mpd);
262
void setLengths(const doubleArray& lns)
264
if(lns.size == 0) return;
265
fprintf(mFile,"\tsetAttr \".lns\" -type \"doubleArray\" ");
267
fprintf(mFile,";\n");
269
void getEnd1Weight()const
271
fprintf(mFile,"\"%s.f\"",mName.c_str());
273
void getEnd2Weight()const
275
fprintf(mFile,"\"%s.t\"",mName.c_str());
277
void getStiffness()const
279
fprintf(mFile,"\"%s.s\"",mName.c_str());
281
void getDamping()const
283
fprintf(mFile,"\"%s.d\"",mName.c_str());
285
void getRestLength()const
287
fprintf(mFile,"\"%s.r\"",mName.c_str());
289
void getStiffnessPS()const
291
fprintf(mFile,"\"%s.sps\"",mName.c_str());
293
void getDampingPS()const
295
fprintf(mFile,"\"%s.dps\"",mName.c_str());
297
void getRestLengthPS()const
299
fprintf(mFile,"\"%s.rps\"",mName.c_str());
301
void getObjectPositions(size_t opos_i)const
303
fprintf(mFile,"\"%s.opos[%i]\"",mName.c_str(),opos_i);
305
void getObjectPositions()const
308
fprintf(mFile,"\"%s.opos\"",mName.c_str());
310
void getObjectVelocities(size_t ovel_i)const
312
fprintf(mFile,"\"%s.ovel[%i]\"",mName.c_str(),ovel_i);
314
void getObjectVelocities()const
317
fprintf(mFile,"\"%s.ovel\"",mName.c_str());
319
void getObjectMass(size_t omas_i)const
321
fprintf(mFile,"\"%s.omas[%i]\"",mName.c_str(),omas_i);
323
void getObjectMass()const
326
fprintf(mFile,"\"%s.omas\"",mName.c_str());
328
void getDeltaTime(size_t dt_i)const
330
fprintf(mFile,"\"%s.dt[%i]\"",mName.c_str(),dt_i);
332
void getDeltaTime()const
335
fprintf(mFile,"\"%s.dt\"",mName.c_str());
337
void getOutputForce(size_t of_i)const
339
fprintf(mFile,"\"%s.of[%i]\"",mName.c_str(),of_i);
341
void getOutputForce()const
344
fprintf(mFile,"\"%s.of\"",mName.c_str());
346
void getIdMapping(size_t idm_i)const
348
fprintf(mFile,"\"%s.idm[%i]\"",mName.c_str(),idm_i);
350
void getIdMapping()const
353
fprintf(mFile,"\"%s.idm\"",mName.c_str());
355
void getSortedId(size_t idm_i)const
357
fprintf(mFile,"\"%s.idm[%i].sid\"",mName.c_str(),idm_i);
359
void getSortedId()const
362
fprintf(mFile,"\"%s.idm.sid\"",mName.c_str());
364
void getIdIndex(size_t idm_i)const
366
fprintf(mFile,"\"%s.idm[%i].idix\"",mName.c_str(),idm_i);
368
void getIdIndex()const
371
fprintf(mFile,"\"%s.idm.idix\"",mName.c_str());
375
fprintf(mFile,"\"%s.cnt\"",mName.c_str());
377
void getObjects(size_t obj_i)const
379
fprintf(mFile,"\"%s.obj[%i]\"",mName.c_str(),obj_i);
381
void getObjects()const
384
fprintf(mFile,"\"%s.obj\"",mName.c_str());
386
void getObjCount()const
388
fprintf(mFile,"\"%s.obc\"",mName.c_str());
390
void getLengths()const
392
fprintf(mFile,"\"%s.lns\"",mName.c_str());
394
void getMinUsed()const
396
fprintf(mFile,"\"%s.mnu\"",mName.c_str());
398
void getMaxUsed()const
400
fprintf(mFile,"\"%s.mxu\"",mName.c_str());
402
void getPt0Index()const
404
fprintf(mFile,"\"%s.pzi\"",mName.c_str());
406
void getPt1Index()const
408
fprintf(mFile,"\"%s.poi\"",mName.c_str());
410
void getObj0Index()const
412
fprintf(mFile,"\"%s.ozi\"",mName.c_str());
414
void getObj1Index()const
416
fprintf(mFile,"\"%s.ooi\"",mName.c_str());
419
Spring(FILE* file,const std::string& name,const std::string& parent,const std::string& nodeType,bool shared=false,bool create=true)
420
:Shape(file, name, parent, nodeType, shared, create) {}
424
#endif//__MayaDM_SPRING_H__