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_SPRING_H__ 11 #define __MayaDM_SPRING_H__ 12 #include "MayaDMTypes.h" 13 #include "MayaDMConnectables.h" 14 #include "MayaDMShape.h" 15 namespace MayaDM 16 { 17 class Spring : public Shape 18 { 19 public: 20 struct IdMapping{ writeIdMapping21 void write(FILE* file) const 22 { 23 } 24 }; 25 public: 26 Spring()27 Spring():Shape(){} 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){} ~Spring()30 virtual ~Spring(){} 31 setEnd1Weight(double f)32 void setEnd1Weight(double f) 33 { 34 if(f == 1) return; 35 fprintf(mFile,"\tsetAttr \".f\" %f;\n", f); 36 } setEnd2Weight(double t)37 void setEnd2Weight(double t) 38 { 39 if(t == 1) return; 40 fprintf(mFile,"\tsetAttr \".t\" %f;\n", t); 41 } setUseStiffnessPS(bool usps)42 void setUseStiffnessPS(bool usps) 43 { 44 if(usps == true) return; 45 fprintf(mFile,"\tsetAttr \".usps\" %i;\n", usps); 46 } setUseDampingPS(bool udps)47 void setUseDampingPS(bool udps) 48 { 49 if(udps == true) return; 50 fprintf(mFile,"\tsetAttr \".udps\" %i;\n", udps); 51 } setUseRestLengthPS(bool urps)52 void setUseRestLengthPS(bool urps) 53 { 54 if(urps == true) return; 55 fprintf(mFile,"\tsetAttr \".urps\" %i;\n", urps); 56 } setStiffness(double s)57 void setStiffness(double s) 58 { 59 if(s == 1) return; 60 fprintf(mFile,"\tsetAttr \".s\" %f;\n", s); 61 } setDamping(double d)62 void setDamping(double d) 63 { 64 if(d == .2) return; 65 fprintf(mFile,"\tsetAttr \".d\" %f;\n", d); 66 } setRestLength(double r)67 void setRestLength(double r) 68 { 69 if(r == 0) return; 70 fprintf(mFile,"\tsetAttr \".r\" %f;\n", r); 71 } setStiffnessPS(const doubleArray & sps)72 void setStiffnessPS(const doubleArray& sps) 73 { 74 if(sps.size == 0) return; 75 fprintf(mFile,"\tsetAttr \".sps\" -type \"doubleArray\" "); 76 sps.write(mFile); 77 fprintf(mFile,";\n"); 78 } setDampingPS(const doubleArray & dps)79 void setDampingPS(const doubleArray& dps) 80 { 81 if(dps.size == 0) return; 82 fprintf(mFile,"\tsetAttr \".dps\" -type \"doubleArray\" "); 83 dps.write(mFile); 84 fprintf(mFile,";\n"); 85 } setRestLengthPS(const doubleArray & rps)86 void setRestLengthPS(const doubleArray& rps) 87 { 88 if(rps.size == 0) return; 89 fprintf(mFile,"\tsetAttr \".rps\" -type \"doubleArray\" "); 90 rps.write(mFile); 91 fprintf(mFile,";\n"); 92 } setObjectPositions(size_t opos_i,const vectorArray & opos)93 void setObjectPositions(size_t opos_i,const vectorArray& opos) 94 { 95 if(opos.size == 0) return; 96 fprintf(mFile,"\tsetAttr \".opos[%i]\" -type \"vectorArray\" ",opos_i); 97 opos.write(mFile); 98 fprintf(mFile,";\n"); 99 } setObjectPositions(size_t opos_start,size_t opos_end,vectorArray * opos)100 void setObjectPositions(size_t opos_start,size_t opos_end,vectorArray* opos) 101 { 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) 105 { 106 opos[i].write(mFile); 107 fprintf(mFile,"\n"); 108 } 109 fprintf(mFile,";\n"); 110 } startObjectPositions(size_t opos_start,size_t opos_end)111 void startObjectPositions(size_t opos_start,size_t opos_end)const 112 { 113 fprintf(mFile,"\tsetAttr \".opos[%i:%i]\"",opos_start,opos_end); 114 fprintf(mFile," -type \"vectorArray\" "); 115 } appendObjectPositions(const vectorArray & opos)116 void appendObjectPositions(const vectorArray& opos)const 117 { 118 fprintf(mFile," "); 119 opos.write(mFile); 120 } endObjectPositions()121 void endObjectPositions()const 122 { 123 fprintf(mFile,";\n"); 124 } setObjectVelocities(size_t ovel_i,const vectorArray & ovel)125 void setObjectVelocities(size_t ovel_i,const vectorArray& ovel) 126 { 127 if(ovel.size == 0) return; 128 fprintf(mFile,"\tsetAttr \".ovel[%i]\" -type \"vectorArray\" ",ovel_i); 129 ovel.write(mFile); 130 fprintf(mFile,";\n"); 131 } setObjectVelocities(size_t ovel_start,size_t ovel_end,vectorArray * ovel)132 void setObjectVelocities(size_t ovel_start,size_t ovel_end,vectorArray* ovel) 133 { 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) 137 { 138 ovel[i].write(mFile); 139 fprintf(mFile,"\n"); 140 } 141 fprintf(mFile,";\n"); 142 } startObjectVelocities(size_t ovel_start,size_t ovel_end)143 void startObjectVelocities(size_t ovel_start,size_t ovel_end)const 144 { 145 fprintf(mFile,"\tsetAttr \".ovel[%i:%i]\"",ovel_start,ovel_end); 146 fprintf(mFile," -type \"vectorArray\" "); 147 } appendObjectVelocities(const vectorArray & ovel)148 void appendObjectVelocities(const vectorArray& ovel)const 149 { 150 fprintf(mFile," "); 151 ovel.write(mFile); 152 } endObjectVelocities()153 void endObjectVelocities()const 154 { 155 fprintf(mFile,";\n"); 156 } setObjectMass(size_t omas_i,const doubleArray & omas)157 void setObjectMass(size_t omas_i,const doubleArray& omas) 158 { 159 if(omas.size == 0) return; 160 fprintf(mFile,"\tsetAttr \".omas[%i]\" -type \"doubleArray\" ",omas_i); 161 omas.write(mFile); 162 fprintf(mFile,";\n"); 163 } setObjectMass(size_t omas_start,size_t omas_end,doubleArray * omas)164 void setObjectMass(size_t omas_start,size_t omas_end,doubleArray* omas) 165 { 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) 169 { 170 omas[i].write(mFile); 171 fprintf(mFile,"\n"); 172 } 173 fprintf(mFile,";\n"); 174 } startObjectMass(size_t omas_start,size_t omas_end)175 void startObjectMass(size_t omas_start,size_t omas_end)const 176 { 177 fprintf(mFile,"\tsetAttr \".omas[%i:%i]\"",omas_start,omas_end); 178 fprintf(mFile," -type \"doubleArray\" "); 179 } appendObjectMass(const doubleArray & omas)180 void appendObjectMass(const doubleArray& omas)const 181 { 182 fprintf(mFile," "); 183 omas.write(mFile); 184 } endObjectMass()185 void endObjectMass()const 186 { 187 fprintf(mFile,";\n"); 188 } setDeltaTime(size_t dt_i,double dt)189 void setDeltaTime(size_t dt_i,double dt) 190 { 191 if(dt == 0) return; 192 fprintf(mFile,"\tsetAttr \".dt[%i]\" %f;\n", dt_i,dt); 193 } setDeltaTime(size_t dt_start,size_t dt_end,double * dt)194 void setDeltaTime(size_t dt_start,size_t dt_end,double* dt) 195 { 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) 199 { 200 fprintf(mFile,"%f",dt[i]); 201 if(i+1<size) fprintf(mFile," "); 202 } 203 fprintf(mFile,";\n"); 204 } startDeltaTime(size_t dt_start,size_t dt_end)205 void startDeltaTime(size_t dt_start,size_t dt_end)const 206 { 207 fprintf(mFile,"\tsetAttr \".dt[%i:%i]\"",dt_start,dt_end); 208 } appendDeltaTime(double dt)209 void appendDeltaTime(double dt)const 210 { 211 fprintf(mFile," %f",dt); 212 } endDeltaTime()213 void endDeltaTime()const 214 { 215 fprintf(mFile,";\n"); 216 } setValidIndex(const intArray & vali)217 void setValidIndex(const intArray& vali) 218 { 219 if(vali.size == 0) return; 220 fprintf(mFile,"\tsetAttr \".vali\" -type \"intArray\" "); 221 vali.write(mFile); 222 fprintf(mFile,";\n"); 223 } setObject0(const intArray & obz)224 void setObject0(const intArray& obz) 225 { 226 if(obz.size == 0) return; 227 fprintf(mFile,"\tsetAttr \".obz\" -type \"intArray\" "); 228 obz.write(mFile); 229 fprintf(mFile,";\n"); 230 } setPoint0(const intArray & ptz)231 void setPoint0(const intArray& ptz) 232 { 233 if(ptz.size == 0) return; 234 fprintf(mFile,"\tsetAttr \".ptz\" -type \"intArray\" "); 235 ptz.write(mFile); 236 fprintf(mFile,";\n"); 237 } setObject1(const intArray & obo)238 void setObject1(const intArray& obo) 239 { 240 if(obo.size == 0) return; 241 fprintf(mFile,"\tsetAttr \".obo\" -type \"intArray\" "); 242 obo.write(mFile); 243 fprintf(mFile,";\n"); 244 } setPoint1(const intArray & pto)245 void setPoint1(const intArray& pto) 246 { 247 if(pto.size == 0) return; 248 fprintf(mFile,"\tsetAttr \".pto\" -type \"intArray\" "); 249 pto.write(mFile); 250 fprintf(mFile,";\n"); 251 } setMinSprings(int ms)252 void setMinSprings(int ms) 253 { 254 if(ms == 0) return; 255 fprintf(mFile,"\tsetAttr \".ms\" %i;\n", ms); 256 } setManageParticleDeath(bool mpd)257 void setManageParticleDeath(bool mpd) 258 { 259 if(mpd == true) return; 260 fprintf(mFile,"\tsetAttr \".mpd\" %i;\n", mpd); 261 } setLengths(const doubleArray & lns)262 void setLengths(const doubleArray& lns) 263 { 264 if(lns.size == 0) return; 265 fprintf(mFile,"\tsetAttr \".lns\" -type \"doubleArray\" "); 266 lns.write(mFile); 267 fprintf(mFile,";\n"); 268 } getEnd1Weight()269 void getEnd1Weight()const 270 { 271 fprintf(mFile,"\"%s.f\"",mName.c_str()); 272 } getEnd2Weight()273 void getEnd2Weight()const 274 { 275 fprintf(mFile,"\"%s.t\"",mName.c_str()); 276 } getStiffness()277 void getStiffness()const 278 { 279 fprintf(mFile,"\"%s.s\"",mName.c_str()); 280 } getDamping()281 void getDamping()const 282 { 283 fprintf(mFile,"\"%s.d\"",mName.c_str()); 284 } getRestLength()285 void getRestLength()const 286 { 287 fprintf(mFile,"\"%s.r\"",mName.c_str()); 288 } getStiffnessPS()289 void getStiffnessPS()const 290 { 291 fprintf(mFile,"\"%s.sps\"",mName.c_str()); 292 } getDampingPS()293 void getDampingPS()const 294 { 295 fprintf(mFile,"\"%s.dps\"",mName.c_str()); 296 } getRestLengthPS()297 void getRestLengthPS()const 298 { 299 fprintf(mFile,"\"%s.rps\"",mName.c_str()); 300 } getObjectPositions(size_t opos_i)301 void getObjectPositions(size_t opos_i)const 302 { 303 fprintf(mFile,"\"%s.opos[%i]\"",mName.c_str(),opos_i); 304 } getObjectPositions()305 void getObjectPositions()const 306 { 307 308 fprintf(mFile,"\"%s.opos\"",mName.c_str()); 309 } getObjectVelocities(size_t ovel_i)310 void getObjectVelocities(size_t ovel_i)const 311 { 312 fprintf(mFile,"\"%s.ovel[%i]\"",mName.c_str(),ovel_i); 313 } getObjectVelocities()314 void getObjectVelocities()const 315 { 316 317 fprintf(mFile,"\"%s.ovel\"",mName.c_str()); 318 } getObjectMass(size_t omas_i)319 void getObjectMass(size_t omas_i)const 320 { 321 fprintf(mFile,"\"%s.omas[%i]\"",mName.c_str(),omas_i); 322 } getObjectMass()323 void getObjectMass()const 324 { 325 326 fprintf(mFile,"\"%s.omas\"",mName.c_str()); 327 } getDeltaTime(size_t dt_i)328 void getDeltaTime(size_t dt_i)const 329 { 330 fprintf(mFile,"\"%s.dt[%i]\"",mName.c_str(),dt_i); 331 } getDeltaTime()332 void getDeltaTime()const 333 { 334 335 fprintf(mFile,"\"%s.dt\"",mName.c_str()); 336 } getOutputForce(size_t of_i)337 void getOutputForce(size_t of_i)const 338 { 339 fprintf(mFile,"\"%s.of[%i]\"",mName.c_str(),of_i); 340 } getOutputForce()341 void getOutputForce()const 342 { 343 344 fprintf(mFile,"\"%s.of\"",mName.c_str()); 345 } getIdMapping(size_t idm_i)346 void getIdMapping(size_t idm_i)const 347 { 348 fprintf(mFile,"\"%s.idm[%i]\"",mName.c_str(),idm_i); 349 } getIdMapping()350 void getIdMapping()const 351 { 352 353 fprintf(mFile,"\"%s.idm\"",mName.c_str()); 354 } getSortedId(size_t idm_i)355 void getSortedId(size_t idm_i)const 356 { 357 fprintf(mFile,"\"%s.idm[%i].sid\"",mName.c_str(),idm_i); 358 } getSortedId()359 void getSortedId()const 360 { 361 362 fprintf(mFile,"\"%s.idm.sid\"",mName.c_str()); 363 } getIdIndex(size_t idm_i)364 void getIdIndex(size_t idm_i)const 365 { 366 fprintf(mFile,"\"%s.idm[%i].idix\"",mName.c_str(),idm_i); 367 } getIdIndex()368 void getIdIndex()const 369 { 370 371 fprintf(mFile,"\"%s.idm.idix\"",mName.c_str()); 372 } getCount()373 void getCount()const 374 { 375 fprintf(mFile,"\"%s.cnt\"",mName.c_str()); 376 } getObjects(size_t obj_i)377 void getObjects(size_t obj_i)const 378 { 379 fprintf(mFile,"\"%s.obj[%i]\"",mName.c_str(),obj_i); 380 } getObjects()381 void getObjects()const 382 { 383 384 fprintf(mFile,"\"%s.obj\"",mName.c_str()); 385 } getObjCount()386 void getObjCount()const 387 { 388 fprintf(mFile,"\"%s.obc\"",mName.c_str()); 389 } getLengths()390 void getLengths()const 391 { 392 fprintf(mFile,"\"%s.lns\"",mName.c_str()); 393 } getMinUsed()394 void getMinUsed()const 395 { 396 fprintf(mFile,"\"%s.mnu\"",mName.c_str()); 397 } getMaxUsed()398 void getMaxUsed()const 399 { 400 fprintf(mFile,"\"%s.mxu\"",mName.c_str()); 401 } getPt0Index()402 void getPt0Index()const 403 { 404 fprintf(mFile,"\"%s.pzi\"",mName.c_str()); 405 } getPt1Index()406 void getPt1Index()const 407 { 408 fprintf(mFile,"\"%s.poi\"",mName.c_str()); 409 } getObj0Index()410 void getObj0Index()const 411 { 412 fprintf(mFile,"\"%s.ozi\"",mName.c_str()); 413 } getObj1Index()414 void getObj1Index()const 415 { 416 fprintf(mFile,"\"%s.ooi\"",mName.c_str()); 417 } 418 protected: 419 Spring(FILE* file,const std::string& name,const std::string& parent,const std::string& nodeType,bool shared=false,bool create=true) Shape(file,name,parent,nodeType,shared,create)420 :Shape(file, name, parent, nodeType, shared, create) {} 421 422 }; 423 }//namespace MayaDM 424 #endif//__MayaDM_SPRING_H__ 425