1 /* 2 Copyright (c) 2008-2009 NetAllied Systems GmbH 3 4 This file is part of MayaDataModel. 5 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 9 */ 10 #ifndef __MayaDM_FIELD_H__ 11 #define __MayaDM_FIELD_H__ 12 #include "MayaDMTypes.h" 13 #include "MayaDMConnectables.h" 14 #include "MayaDMDynBase.h" 15 namespace MayaDM 16 { 17 class Field : public DynBase 18 { 19 public: 20 struct InputData{ 21 vectorArray inputPositions; 22 vectorArray inputVelocities; 23 doubleArray inputMass; 24 double deltaTime; writeInputData25 void write(FILE* file) const 26 { 27 inputPositions.write(file); 28 fprintf(file, " "); 29 inputVelocities.write(file); 30 fprintf(file, " "); 31 inputMass.write(file); 32 fprintf(file, " "); 33 fprintf(file,"%f", deltaTime); 34 } 35 }; 36 struct FalloffCurve{ 37 float falloffCurve_Position; 38 float falloffCurve_FloatValue; 39 unsigned int falloffCurve_Interp; writeFalloffCurve40 void write(FILE* file) const 41 { 42 fprintf(file,"%f ", falloffCurve_Position); 43 fprintf(file,"%f ", falloffCurve_FloatValue); 44 fprintf(file,"%i", falloffCurve_Interp); 45 } 46 }; 47 public: 48 Field()49 Field():DynBase(){} 50 Field(FILE* file,const std::string& name,const std::string& parent="",bool shared=false,bool create=true) 51 :DynBase(file, name, parent, "field", shared, create){} ~Field()52 virtual ~Field(){} 53 setMagnitude(double mag)54 void setMagnitude(double mag) 55 { 56 if(mag == 1.0) return; 57 fprintf(mFile,"\tsetAttr \".mag\" %f;\n", mag); 58 } setAttenuation(double att)59 void setAttenuation(double att) 60 { 61 if(att == 0.0) return; 62 fprintf(mFile,"\tsetAttr \".att\" %f;\n", att); 63 } setMaxDistance(double max)64 void setMaxDistance(double max) 65 { 66 if(max == 1) return; 67 fprintf(mFile,"\tsetAttr \".max\" %f;\n", max); 68 } setApplyPerVertex(bool apv)69 void setApplyPerVertex(bool apv) 70 { 71 if(apv == false) return; 72 fprintf(mFile,"\tsetAttr \".apv\" %i;\n", apv); 73 } setUseMaxDistance(bool umd)74 void setUseMaxDistance(bool umd) 75 { 76 if(umd == false) return; 77 fprintf(mFile,"\tsetAttr \".umd\" %i;\n", umd); 78 } setInputData(size_t ind_i,const InputData & ind)79 void setInputData(size_t ind_i,const InputData& ind) 80 { 81 fprintf(mFile,"\tsetAttr \".ind[%i]\" ",ind_i); 82 ind.write(mFile); 83 fprintf(mFile,";\n"); 84 } setInputData(size_t ind_start,size_t ind_end,InputData * ind)85 void setInputData(size_t ind_start,size_t ind_end,InputData* ind) 86 { 87 fprintf(mFile,"\tsetAttr \".ind[%i:%i]\" ", ind_start,ind_end); 88 size_t size = (ind_end-ind_start)*1+1; 89 for(size_t i=0;i<size;++i) 90 { 91 ind[i].write(mFile); 92 fprintf(mFile,"\n"); 93 } 94 fprintf(mFile,";\n"); 95 } startInputData(size_t ind_start,size_t ind_end)96 void startInputData(size_t ind_start,size_t ind_end)const 97 { 98 fprintf(mFile,"\tsetAttr \".ind[%i:%i]\"",ind_start,ind_end); 99 fprintf(mFile," -type \"InputData\" "); 100 } appendInputData(const InputData & ind)101 void appendInputData(const InputData& ind)const 102 { 103 fprintf(mFile," "); 104 ind.write(mFile); 105 } endInputData()106 void endInputData()const 107 { 108 fprintf(mFile,";\n"); 109 } setInputPositions(size_t ind_i,const vectorArray & inp)110 void setInputPositions(size_t ind_i,const vectorArray& inp) 111 { 112 if(inp.size == 0) return; 113 fprintf(mFile,"\tsetAttr \".ind[%i].inp\" -type \"vectorArray\" ",ind_i); 114 inp.write(mFile); 115 fprintf(mFile,";\n"); 116 } setInputVelocities(size_t ind_i,const vectorArray & inv)117 void setInputVelocities(size_t ind_i,const vectorArray& inv) 118 { 119 if(inv.size == 0) return; 120 fprintf(mFile,"\tsetAttr \".ind[%i].inv\" -type \"vectorArray\" ",ind_i); 121 inv.write(mFile); 122 fprintf(mFile,";\n"); 123 } setInputMass(size_t ind_i,const doubleArray & inm)124 void setInputMass(size_t ind_i,const doubleArray& inm) 125 { 126 if(inm.size == 0) return; 127 fprintf(mFile,"\tsetAttr \".ind[%i].inm\" -type \"doubleArray\" ",ind_i); 128 inm.write(mFile); 129 fprintf(mFile,";\n"); 130 } setDeltaTime(size_t ind_i,double dt)131 void setDeltaTime(size_t ind_i,double dt) 132 { 133 if(dt == 0) return; 134 fprintf(mFile,"\tsetAttr \".ind[%i].dt\" %f;\n", ind_i,dt); 135 } setVolumeShape(unsigned int vol)136 void setVolumeShape(unsigned int vol) 137 { 138 if(vol == 0) return; 139 fprintf(mFile,"\tsetAttr \".vol\" %i;\n", vol); 140 } setVolumeExclusion(bool vex)141 void setVolumeExclusion(bool vex) 142 { 143 if(vex == false) return; 144 fprintf(mFile,"\tsetAttr \".vex\" %i;\n", vex); 145 } setVolumeOffset(const double3 & vfo)146 void setVolumeOffset(const double3& vfo) 147 { 148 fprintf(mFile,"\tsetAttr \".vfo\" -type \"double3\" "); 149 vfo.write(mFile); 150 fprintf(mFile,";\n"); 151 } setVolumeOffsetX(double vox)152 void setVolumeOffsetX(double vox) 153 { 154 if(vox == 0) return; 155 fprintf(mFile,"\tsetAttr \".vfo.vox\" %f;\n", vox); 156 } setVolumeOffsetY(double voy)157 void setVolumeOffsetY(double voy) 158 { 159 if(voy == 0) return; 160 fprintf(mFile,"\tsetAttr \".vfo.voy\" %f;\n", voy); 161 } setVolumeOffsetZ(double voz)162 void setVolumeOffsetZ(double voz) 163 { 164 if(voz == 0) return; 165 fprintf(mFile,"\tsetAttr \".vfo.voz\" %f;\n", voz); 166 } setSectionRadius(double tsr)167 void setSectionRadius(double tsr) 168 { 169 if(tsr == 0) return; 170 fprintf(mFile,"\tsetAttr \".tsr\" %f;\n", tsr); 171 } setVolumeSweep(double vsw)172 void setVolumeSweep(double vsw) 173 { 174 if(vsw == 3) return; 175 fprintf(mFile,"\tsetAttr \".vsw\" %f;\n", vsw); 176 } setFalloffCurve(size_t fc_i,const FalloffCurve & fc)177 void setFalloffCurve(size_t fc_i,const FalloffCurve& fc) 178 { 179 fprintf(mFile,"\tsetAttr \".fc[%i]\" ",fc_i); 180 fc.write(mFile); 181 fprintf(mFile,";\n"); 182 } setFalloffCurve(size_t fc_start,size_t fc_end,FalloffCurve * fc)183 void setFalloffCurve(size_t fc_start,size_t fc_end,FalloffCurve* fc) 184 { 185 fprintf(mFile,"\tsetAttr \".fc[%i:%i]\" ", fc_start,fc_end); 186 size_t size = (fc_end-fc_start)*1+1; 187 for(size_t i=0;i<size;++i) 188 { 189 fc[i].write(mFile); 190 fprintf(mFile,"\n"); 191 } 192 fprintf(mFile,";\n"); 193 } startFalloffCurve(size_t fc_start,size_t fc_end)194 void startFalloffCurve(size_t fc_start,size_t fc_end)const 195 { 196 fprintf(mFile,"\tsetAttr \".fc[%i:%i]\"",fc_start,fc_end); 197 fprintf(mFile," -type \"FalloffCurve\" "); 198 } appendFalloffCurve(const FalloffCurve & fc)199 void appendFalloffCurve(const FalloffCurve& fc)const 200 { 201 fprintf(mFile," "); 202 fc.write(mFile); 203 } endFalloffCurve()204 void endFalloffCurve()const 205 { 206 fprintf(mFile,";\n"); 207 } setFalloffCurve_Position(size_t fc_i,float fcp)208 void setFalloffCurve_Position(size_t fc_i,float fcp) 209 { 210 if(fcp == 0.0) return; 211 fprintf(mFile,"\tsetAttr \".fc[%i].fcp\" %f;\n", fc_i,fcp); 212 } setFalloffCurve_FloatValue(size_t fc_i,float fcfv)213 void setFalloffCurve_FloatValue(size_t fc_i,float fcfv) 214 { 215 if(fcfv == 0.0) return; 216 fprintf(mFile,"\tsetAttr \".fc[%i].fcfv\" %f;\n", fc_i,fcfv); 217 } setFalloffCurve_Interp(size_t fc_i,unsigned int fci)218 void setFalloffCurve_Interp(size_t fc_i,unsigned int fci) 219 { 220 if(fci == 0) return; 221 fprintf(mFile,"\tsetAttr \".fc[%i].fci\" %i;\n", fc_i,fci); 222 } getMagnitude()223 void getMagnitude()const 224 { 225 fprintf(mFile,"\"%s.mag\"",mName.c_str()); 226 } getAttenuation()227 void getAttenuation()const 228 { 229 fprintf(mFile,"\"%s.att\"",mName.c_str()); 230 } getMaxDistance()231 void getMaxDistance()const 232 { 233 fprintf(mFile,"\"%s.max\"",mName.c_str()); 234 } getApplyPerVertex()235 void getApplyPerVertex()const 236 { 237 fprintf(mFile,"\"%s.apv\"",mName.c_str()); 238 } getUseMaxDistance()239 void getUseMaxDistance()const 240 { 241 fprintf(mFile,"\"%s.umd\"",mName.c_str()); 242 } getInputData(size_t ind_i)243 void getInputData(size_t ind_i)const 244 { 245 fprintf(mFile,"\"%s.ind[%i]\"",mName.c_str(),ind_i); 246 } getInputData()247 void getInputData()const 248 { 249 250 fprintf(mFile,"\"%s.ind\"",mName.c_str()); 251 } getInputPositions(size_t ind_i)252 void getInputPositions(size_t ind_i)const 253 { 254 fprintf(mFile,"\"%s.ind[%i].inp\"",mName.c_str(),ind_i); 255 } getInputPositions()256 void getInputPositions()const 257 { 258 259 fprintf(mFile,"\"%s.ind.inp\"",mName.c_str()); 260 } getInputVelocities(size_t ind_i)261 void getInputVelocities(size_t ind_i)const 262 { 263 fprintf(mFile,"\"%s.ind[%i].inv\"",mName.c_str(),ind_i); 264 } getInputVelocities()265 void getInputVelocities()const 266 { 267 268 fprintf(mFile,"\"%s.ind.inv\"",mName.c_str()); 269 } getInputMass(size_t ind_i)270 void getInputMass(size_t ind_i)const 271 { 272 fprintf(mFile,"\"%s.ind[%i].inm\"",mName.c_str(),ind_i); 273 } getInputMass()274 void getInputMass()const 275 { 276 277 fprintf(mFile,"\"%s.ind.inm\"",mName.c_str()); 278 } getDeltaTime(size_t ind_i)279 void getDeltaTime(size_t ind_i)const 280 { 281 fprintf(mFile,"\"%s.ind[%i].dt\"",mName.c_str(),ind_i); 282 } getDeltaTime()283 void getDeltaTime()const 284 { 285 286 fprintf(mFile,"\"%s.ind.dt\"",mName.c_str()); 287 } getInputForce(size_t inf_i)288 void getInputForce(size_t inf_i)const 289 { 290 fprintf(mFile,"\"%s.inf[%i]\"",mName.c_str(),inf_i); 291 } getInputForce()292 void getInputForce()const 293 { 294 295 fprintf(mFile,"\"%s.inf\"",mName.c_str()); 296 } getOutputForce(size_t of_i)297 void getOutputForce(size_t of_i)const 298 { 299 fprintf(mFile,"\"%s.of[%i]\"",mName.c_str(),of_i); 300 } getOutputForce()301 void getOutputForce()const 302 { 303 304 fprintf(mFile,"\"%s.of\"",mName.c_str()); 305 } getVolumeShape()306 void getVolumeShape()const 307 { 308 fprintf(mFile,"\"%s.vol\"",mName.c_str()); 309 } getVolumeExclusion()310 void getVolumeExclusion()const 311 { 312 fprintf(mFile,"\"%s.vex\"",mName.c_str()); 313 } getVolumeOffset()314 void getVolumeOffset()const 315 { 316 fprintf(mFile,"\"%s.vfo\"",mName.c_str()); 317 } getVolumeOffsetX()318 void getVolumeOffsetX()const 319 { 320 fprintf(mFile,"\"%s.vfo.vox\"",mName.c_str()); 321 } getVolumeOffsetY()322 void getVolumeOffsetY()const 323 { 324 fprintf(mFile,"\"%s.vfo.voy\"",mName.c_str()); 325 } getVolumeOffsetZ()326 void getVolumeOffsetZ()const 327 { 328 fprintf(mFile,"\"%s.vfo.voz\"",mName.c_str()); 329 } getSectionRadius()330 void getSectionRadius()const 331 { 332 fprintf(mFile,"\"%s.tsr\"",mName.c_str()); 333 } getVolumeSweep()334 void getVolumeSweep()const 335 { 336 fprintf(mFile,"\"%s.vsw\"",mName.c_str()); 337 } getInputPPData(size_t ppda_i)338 void getInputPPData(size_t ppda_i)const 339 { 340 fprintf(mFile,"\"%s.ppda[%i]\"",mName.c_str(),ppda_i); 341 } getInputPPData()342 void getInputPPData()const 343 { 344 345 fprintf(mFile,"\"%s.ppda\"",mName.c_str()); 346 } getOwnerPPData()347 void getOwnerPPData()const 348 { 349 fprintf(mFile,"\"%s.oppd\"",mName.c_str()); 350 } getFalloffCurve(size_t fc_i)351 void getFalloffCurve(size_t fc_i)const 352 { 353 fprintf(mFile,"\"%s.fc[%i]\"",mName.c_str(),fc_i); 354 } getFalloffCurve()355 void getFalloffCurve()const 356 { 357 358 fprintf(mFile,"\"%s.fc\"",mName.c_str()); 359 } getFalloffCurve_Position(size_t fc_i)360 void getFalloffCurve_Position(size_t fc_i)const 361 { 362 fprintf(mFile,"\"%s.fc[%i].fcp\"",mName.c_str(),fc_i); 363 } getFalloffCurve_Position()364 void getFalloffCurve_Position()const 365 { 366 367 fprintf(mFile,"\"%s.fc.fcp\"",mName.c_str()); 368 } getFalloffCurve_FloatValue(size_t fc_i)369 void getFalloffCurve_FloatValue(size_t fc_i)const 370 { 371 fprintf(mFile,"\"%s.fc[%i].fcfv\"",mName.c_str(),fc_i); 372 } getFalloffCurve_FloatValue()373 void getFalloffCurve_FloatValue()const 374 { 375 376 fprintf(mFile,"\"%s.fc.fcfv\"",mName.c_str()); 377 } getFalloffCurve_Interp(size_t fc_i)378 void getFalloffCurve_Interp(size_t fc_i)const 379 { 380 fprintf(mFile,"\"%s.fc[%i].fci\"",mName.c_str(),fc_i); 381 } getFalloffCurve_Interp()382 void getFalloffCurve_Interp()const 383 { 384 385 fprintf(mFile,"\"%s.fc.fci\"",mName.c_str()); 386 } 387 protected: 388 Field(FILE* file,const std::string& name,const std::string& parent,const std::string& nodeType,bool shared=false,bool create=true) DynBase(file,name,parent,nodeType,shared,create)389 :DynBase(file, name, parent, nodeType, shared, create) {} 390 391 }; 392 }//namespace MayaDM 393 #endif//__MayaDM_FIELD_H__ 394