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_DYNAMICCONSTRAINT_H__ 11 #define __MayaDM_DYNAMICCONSTRAINT_H__ 12 #include "MayaDMTypes.h" 13 #include "MayaDMConnectables.h" 14 #include "MayaDMShape.h" 15 namespace MayaDM 16 { 17 class DynamicConstraint : public Shape 18 { 19 public: 20 struct ConnectionDensityRange{ 21 float connectionDensityRange_Position; 22 float connectionDensityRange_FloatValue; 23 unsigned int connectionDensityRange_Interp; writeConnectionDensityRange24 void write(FILE* file) const 25 { 26 fprintf(file,"%f ", connectionDensityRange_Position); 27 fprintf(file,"%f ", connectionDensityRange_FloatValue); 28 fprintf(file,"%i", connectionDensityRange_Interp); 29 } 30 }; 31 struct StrengthDropoff{ 32 float strengthDropoff_Position; 33 float strengthDropoff_FloatValue; 34 unsigned int strengthDropoff_Interp; writeStrengthDropoff35 void write(FILE* file) const 36 { 37 fprintf(file,"%f ", strengthDropoff_Position); 38 fprintf(file,"%f ", strengthDropoff_FloatValue); 39 fprintf(file,"%i", strengthDropoff_Interp); 40 } 41 }; 42 public: 43 DynamicConstraint()44 DynamicConstraint():Shape(){} 45 DynamicConstraint(FILE* file,const std::string& name,const std::string& parent="",bool shared=false,bool create=true) 46 :Shape(file, name, parent, "dynamicConstraint", shared, create){} ~DynamicConstraint()47 virtual ~DynamicConstraint(){} 48 setIsDynamic(bool isd)49 void setIsDynamic(bool isd) 50 { 51 if(isd == true) return; 52 fprintf(mFile,"\tsetAttr \".isd\" %i;\n", isd); 53 } setEnable(bool ena)54 void setEnable(bool ena) 55 { 56 if(ena == true) return; 57 fprintf(mFile,"\tsetAttr \".ena\" %i;\n", ena); 58 } setConstraintMethod(unsigned int cm)59 void setConstraintMethod(unsigned int cm) 60 { 61 if(cm == 1) return; 62 fprintf(mFile,"\tsetAttr \".cm\" %i;\n", cm); 63 } setConnectionMethod(unsigned int cnm)64 void setConnectionMethod(unsigned int cnm) 65 { 66 if(cnm == 0) return; 67 fprintf(mFile,"\tsetAttr \".cnm\" %i;\n", cnm); 68 } setConstraintRelation(unsigned int crr)69 void setConstraintRelation(unsigned int crr) 70 { 71 if(crr == 1) return; 72 fprintf(mFile,"\tsetAttr \".crr\" %i;\n", crr); 73 } setComponentRelation(unsigned int cmr)74 void setComponentRelation(unsigned int cmr) 75 { 76 if(cmr == 0) return; 77 fprintf(mFile,"\tsetAttr \".cmr\" %i;\n", cmr); 78 } setConnectionUpdate(unsigned int cu)79 void setConnectionUpdate(unsigned int cu) 80 { 81 if(cu == 0) return; 82 fprintf(mFile,"\tsetAttr \".cu\" %i;\n", cu); 83 } setConnectWithinComponent(bool cwc)84 void setConnectWithinComponent(bool cwc) 85 { 86 if(cwc == false) return; 87 fprintf(mFile,"\tsetAttr \".cwc\" %i;\n", cwc); 88 } setConnectionDensity(double cdn)89 void setConnectionDensity(double cdn) 90 { 91 if(cdn == 1.0) return; 92 fprintf(mFile,"\tsetAttr \".cdn\" %f;\n", cdn); 93 } setConnectionDensityRange(size_t cdnr_i,const ConnectionDensityRange & cdnr)94 void setConnectionDensityRange(size_t cdnr_i,const ConnectionDensityRange& cdnr) 95 { 96 fprintf(mFile,"\tsetAttr \".cdnr[%i]\" ",cdnr_i); 97 cdnr.write(mFile); 98 fprintf(mFile,";\n"); 99 } setConnectionDensityRange(size_t cdnr_start,size_t cdnr_end,ConnectionDensityRange * cdnr)100 void setConnectionDensityRange(size_t cdnr_start,size_t cdnr_end,ConnectionDensityRange* cdnr) 101 { 102 fprintf(mFile,"\tsetAttr \".cdnr[%i:%i]\" ", cdnr_start,cdnr_end); 103 size_t size = (cdnr_end-cdnr_start)*1+1; 104 for(size_t i=0;i<size;++i) 105 { 106 cdnr[i].write(mFile); 107 fprintf(mFile,"\n"); 108 } 109 fprintf(mFile,";\n"); 110 } startConnectionDensityRange(size_t cdnr_start,size_t cdnr_end)111 void startConnectionDensityRange(size_t cdnr_start,size_t cdnr_end)const 112 { 113 fprintf(mFile,"\tsetAttr \".cdnr[%i:%i]\"",cdnr_start,cdnr_end); 114 fprintf(mFile," -type \"ConnectionDensityRange\" "); 115 } appendConnectionDensityRange(const ConnectionDensityRange & cdnr)116 void appendConnectionDensityRange(const ConnectionDensityRange& cdnr)const 117 { 118 fprintf(mFile," "); 119 cdnr.write(mFile); 120 } endConnectionDensityRange()121 void endConnectionDensityRange()const 122 { 123 fprintf(mFile,";\n"); 124 } setConnectionDensityRange_Position(size_t cdnr_i,float cdnrp)125 void setConnectionDensityRange_Position(size_t cdnr_i,float cdnrp) 126 { 127 if(cdnrp == 0.0) return; 128 fprintf(mFile,"\tsetAttr \".cdnr[%i].cdnrp\" %f;\n", cdnr_i,cdnrp); 129 } setConnectionDensityRange_FloatValue(size_t cdnr_i,float cdnrfv)130 void setConnectionDensityRange_FloatValue(size_t cdnr_i,float cdnrfv) 131 { 132 if(cdnrfv == 0.0) return; 133 fprintf(mFile,"\tsetAttr \".cdnr[%i].cdnrfv\" %f;\n", cdnr_i,cdnrfv); 134 } setConnectionDensityRange_Interp(size_t cdnr_i,unsigned int cdnri)135 void setConnectionDensityRange_Interp(size_t cdnr_i,unsigned int cdnri) 136 { 137 if(cdnri == 0) return; 138 fprintf(mFile,"\tsetAttr \".cdnr[%i].cdnri\" %i;\n", cdnr_i,cdnri); 139 } setDisplayConnections(bool dcn)140 void setDisplayConnections(bool dcn) 141 { 142 if(dcn == true) return; 143 fprintf(mFile,"\tsetAttr \".dcn\" %i;\n", dcn); 144 } setStrength(double str)145 void setStrength(double str) 146 { 147 if(str == 20.0) return; 148 fprintf(mFile,"\tsetAttr \".str\" %f;\n", str); 149 } setRestLengthMethod(unsigned int rlm)150 void setRestLengthMethod(unsigned int rlm) 151 { 152 if(rlm == 0) return; 153 fprintf(mFile,"\tsetAttr \".rlm\" %i;\n", rlm); 154 } setRestLength(double rl)155 void setRestLength(double rl) 156 { 157 if(rl == 0.0) return; 158 fprintf(mFile,"\tsetAttr \".rl\" %f;\n", rl); 159 } setRestLengthScale(double rls)160 void setRestLengthScale(double rls) 161 { 162 if(rls == 1.0) return; 163 fprintf(mFile,"\tsetAttr \".rls\" %f;\n", rls); 164 } setTangentStrength(double tst)165 void setTangentStrength(double tst) 166 { 167 if(tst == 10) return; 168 fprintf(mFile,"\tsetAttr \".tst\" %f;\n", tst); 169 } setBend(bool bnd)170 void setBend(bool bnd) 171 { 172 if(bnd == false) return; 173 fprintf(mFile,"\tsetAttr \".bnd\" %i;\n", bnd); 174 } setBendStrength(double bns)175 void setBendStrength(double bns) 176 { 177 if(bns == 20.0) return; 178 fprintf(mFile,"\tsetAttr \".bns\" %f;\n", bns); 179 } setBendBreakAngle(double bba)180 void setBendBreakAngle(double bba) 181 { 182 if(bba == 360.0) return; 183 fprintf(mFile,"\tsetAttr \".bba\" %f;\n", bba); 184 } setGlueStrength(double gls)185 void setGlueStrength(double gls) 186 { 187 if(gls == 1.0) return; 188 fprintf(mFile,"\tsetAttr \".gls\" %f;\n", gls); 189 } setGlueStrengthScale(double glss)190 void setGlueStrengthScale(double glss) 191 { 192 if(glss == 1.0) return; 193 fprintf(mFile,"\tsetAttr \".glss\" %f;\n", glss); 194 } setForce(double for_)195 void setForce(double for_) 196 { 197 if(for_ == 0.0) return; 198 fprintf(mFile,"\tsetAttr \".for\" %f;\n", for_); 199 } setMotionDrag(double mdg)200 void setMotionDrag(double mdg) 201 { 202 if(mdg == 0.0) return; 203 fprintf(mFile,"\tsetAttr \".mdg\" %f;\n", mdg); 204 } setDropoff(double drp)205 void setDropoff(double drp) 206 { 207 if(drp == 1.0) return; 208 fprintf(mFile,"\tsetAttr \".drp\" %f;\n", drp); 209 } setDropoffDistance(double ddd)210 void setDropoffDistance(double ddd) 211 { 212 if(ddd == 50.0) return; 213 fprintf(mFile,"\tsetAttr \".ddd\" %f;\n", ddd); 214 } setStrengthDropoff(size_t sdp_i,const StrengthDropoff & sdp)215 void setStrengthDropoff(size_t sdp_i,const StrengthDropoff& sdp) 216 { 217 fprintf(mFile,"\tsetAttr \".sdp[%i]\" ",sdp_i); 218 sdp.write(mFile); 219 fprintf(mFile,";\n"); 220 } setStrengthDropoff(size_t sdp_start,size_t sdp_end,StrengthDropoff * sdp)221 void setStrengthDropoff(size_t sdp_start,size_t sdp_end,StrengthDropoff* sdp) 222 { 223 fprintf(mFile,"\tsetAttr \".sdp[%i:%i]\" ", sdp_start,sdp_end); 224 size_t size = (sdp_end-sdp_start)*1+1; 225 for(size_t i=0;i<size;++i) 226 { 227 sdp[i].write(mFile); 228 fprintf(mFile,"\n"); 229 } 230 fprintf(mFile,";\n"); 231 } startStrengthDropoff(size_t sdp_start,size_t sdp_end)232 void startStrengthDropoff(size_t sdp_start,size_t sdp_end)const 233 { 234 fprintf(mFile,"\tsetAttr \".sdp[%i:%i]\"",sdp_start,sdp_end); 235 fprintf(mFile," -type \"StrengthDropoff\" "); 236 } appendStrengthDropoff(const StrengthDropoff & sdp)237 void appendStrengthDropoff(const StrengthDropoff& sdp)const 238 { 239 fprintf(mFile," "); 240 sdp.write(mFile); 241 } endStrengthDropoff()242 void endStrengthDropoff()const 243 { 244 fprintf(mFile,";\n"); 245 } setStrengthDropoff_Position(size_t sdp_i,float sdpp)246 void setStrengthDropoff_Position(size_t sdp_i,float sdpp) 247 { 248 if(sdpp == 0.0) return; 249 fprintf(mFile,"\tsetAttr \".sdp[%i].sdpp\" %f;\n", sdp_i,sdpp); 250 } setStrengthDropoff_FloatValue(size_t sdp_i,float sdpfv)251 void setStrengthDropoff_FloatValue(size_t sdp_i,float sdpfv) 252 { 253 if(sdpfv == 0.0) return; 254 fprintf(mFile,"\tsetAttr \".sdp[%i].sdpfv\" %f;\n", sdp_i,sdpfv); 255 } setStrengthDropoff_Interp(size_t sdp_i,unsigned int sdpi)256 void setStrengthDropoff_Interp(size_t sdp_i,unsigned int sdpi) 257 { 258 if(sdpi == 0) return; 259 fprintf(mFile,"\tsetAttr \".sdp[%i].sdpi\" %i;\n", sdp_i,sdpi); 260 } setMaxDistance(double mds)261 void setMaxDistance(double mds) 262 { 263 if(mds == 0.1) return; 264 fprintf(mFile,"\tsetAttr \".mds\" %f;\n", mds); 265 } setDamp(double dmp)266 void setDamp(double dmp) 267 { 268 if(dmp == 0.0) return; 269 fprintf(mFile,"\tsetAttr \".dmp\" %f;\n", dmp); 270 } setFriction(double frc)271 void setFriction(double frc) 272 { 273 if(frc == 0.0) return; 274 fprintf(mFile,"\tsetAttr \".frc\" %f;\n", frc); 275 } setLocalCollide(bool lcl)276 void setLocalCollide(bool lcl) 277 { 278 if(lcl == false) return; 279 fprintf(mFile,"\tsetAttr \".lcl\" %i;\n", lcl); 280 } setCollideWidthScale(double cws)281 void setCollideWidthScale(double cws) 282 { 283 if(cws == 1.0) return; 284 fprintf(mFile,"\tsetAttr \".cws\" %f;\n", cws); 285 } setExcludeCollisions(bool excs)286 void setExcludeCollisions(bool excs) 287 { 288 if(excs == false) return; 289 fprintf(mFile,"\tsetAttr \".excs\" %i;\n", excs); 290 } setSingleSided(bool ssd)291 void setSingleSided(bool ssd) 292 { 293 if(ssd == true) return; 294 fprintf(mFile,"\tsetAttr \".ssd\" %i;\n", ssd); 295 } setMaxIterations(int mitr)296 void setMaxIterations(int mitr) 297 { 298 if(mitr == 500) return; 299 fprintf(mFile,"\tsetAttr \".mitr\" %i;\n", mitr); 300 } setMinIterations(int mini)301 void setMinIterations(int mini) 302 { 303 if(mini == 0) return; 304 fprintf(mFile,"\tsetAttr \".mini\" %i;\n", mini); 305 } getIsDynamic()306 void getIsDynamic()const 307 { 308 fprintf(mFile,"\"%s.isd\"",mName.c_str()); 309 } getEnable()310 void getEnable()const 311 { 312 fprintf(mFile,"\"%s.ena\"",mName.c_str()); 313 } getCurrentTime()314 void getCurrentTime()const 315 { 316 fprintf(mFile,"\"%s.cti\"",mName.c_str()); 317 } getComponentIds(size_t cid_i)318 void getComponentIds(size_t cid_i)const 319 { 320 fprintf(mFile,"\"%s.cid[%i]\"",mName.c_str(),cid_i); 321 } getComponentIds()322 void getComponentIds()const 323 { 324 325 fprintf(mFile,"\"%s.cid\"",mName.c_str()); 326 } getConstraintMethod()327 void getConstraintMethod()const 328 { 329 fprintf(mFile,"\"%s.cm\"",mName.c_str()); 330 } getConnectionMethod()331 void getConnectionMethod()const 332 { 333 fprintf(mFile,"\"%s.cnm\"",mName.c_str()); 334 } getConstraintRelation()335 void getConstraintRelation()const 336 { 337 fprintf(mFile,"\"%s.crr\"",mName.c_str()); 338 } getComponentRelation()339 void getComponentRelation()const 340 { 341 fprintf(mFile,"\"%s.cmr\"",mName.c_str()); 342 } getConnectionUpdate()343 void getConnectionUpdate()const 344 { 345 fprintf(mFile,"\"%s.cu\"",mName.c_str()); 346 } getConnectWithinComponent()347 void getConnectWithinComponent()const 348 { 349 fprintf(mFile,"\"%s.cwc\"",mName.c_str()); 350 } getConnectionDensity()351 void getConnectionDensity()const 352 { 353 fprintf(mFile,"\"%s.cdn\"",mName.c_str()); 354 } getConnectionDensityRange(size_t cdnr_i)355 void getConnectionDensityRange(size_t cdnr_i)const 356 { 357 fprintf(mFile,"\"%s.cdnr[%i]\"",mName.c_str(),cdnr_i); 358 } getConnectionDensityRange()359 void getConnectionDensityRange()const 360 { 361 362 fprintf(mFile,"\"%s.cdnr\"",mName.c_str()); 363 } getConnectionDensityRange_Position(size_t cdnr_i)364 void getConnectionDensityRange_Position(size_t cdnr_i)const 365 { 366 fprintf(mFile,"\"%s.cdnr[%i].cdnrp\"",mName.c_str(),cdnr_i); 367 } getConnectionDensityRange_Position()368 void getConnectionDensityRange_Position()const 369 { 370 371 fprintf(mFile,"\"%s.cdnr.cdnrp\"",mName.c_str()); 372 } getConnectionDensityRange_FloatValue(size_t cdnr_i)373 void getConnectionDensityRange_FloatValue(size_t cdnr_i)const 374 { 375 fprintf(mFile,"\"%s.cdnr[%i].cdnrfv\"",mName.c_str(),cdnr_i); 376 } getConnectionDensityRange_FloatValue()377 void getConnectionDensityRange_FloatValue()const 378 { 379 380 fprintf(mFile,"\"%s.cdnr.cdnrfv\"",mName.c_str()); 381 } getConnectionDensityRange_Interp(size_t cdnr_i)382 void getConnectionDensityRange_Interp(size_t cdnr_i)const 383 { 384 fprintf(mFile,"\"%s.cdnr[%i].cdnri\"",mName.c_str(),cdnr_i); 385 } getConnectionDensityRange_Interp()386 void getConnectionDensityRange_Interp()const 387 { 388 389 fprintf(mFile,"\"%s.cdnr.cdnri\"",mName.c_str()); 390 } getDisplayConnections()391 void getDisplayConnections()const 392 { 393 fprintf(mFile,"\"%s.dcn\"",mName.c_str()); 394 } getStrength()395 void getStrength()const 396 { 397 fprintf(mFile,"\"%s.str\"",mName.c_str()); 398 } getRestLengthMethod()399 void getRestLengthMethod()const 400 { 401 fprintf(mFile,"\"%s.rlm\"",mName.c_str()); 402 } getRestLength()403 void getRestLength()const 404 { 405 fprintf(mFile,"\"%s.rl\"",mName.c_str()); 406 } getRestLengthScale()407 void getRestLengthScale()const 408 { 409 fprintf(mFile,"\"%s.rls\"",mName.c_str()); 410 } getTangentStrength()411 void getTangentStrength()const 412 { 413 fprintf(mFile,"\"%s.tst\"",mName.c_str()); 414 } getBend()415 void getBend()const 416 { 417 fprintf(mFile,"\"%s.bnd\"",mName.c_str()); 418 } getBendStrength()419 void getBendStrength()const 420 { 421 fprintf(mFile,"\"%s.bns\"",mName.c_str()); 422 } getBendBreakAngle()423 void getBendBreakAngle()const 424 { 425 fprintf(mFile,"\"%s.bba\"",mName.c_str()); 426 } getGlueStrength()427 void getGlueStrength()const 428 { 429 fprintf(mFile,"\"%s.gls\"",mName.c_str()); 430 } getGlueStrengthScale()431 void getGlueStrengthScale()const 432 { 433 fprintf(mFile,"\"%s.glss\"",mName.c_str()); 434 } getForce()435 void getForce()const 436 { 437 fprintf(mFile,"\"%s.for\"",mName.c_str()); 438 } getMotionDrag()439 void getMotionDrag()const 440 { 441 fprintf(mFile,"\"%s.mdg\"",mName.c_str()); 442 } getDropoff()443 void getDropoff()const 444 { 445 fprintf(mFile,"\"%s.drp\"",mName.c_str()); 446 } getDropoffDistance()447 void getDropoffDistance()const 448 { 449 fprintf(mFile,"\"%s.ddd\"",mName.c_str()); 450 } getStrengthDropoff(size_t sdp_i)451 void getStrengthDropoff(size_t sdp_i)const 452 { 453 fprintf(mFile,"\"%s.sdp[%i]\"",mName.c_str(),sdp_i); 454 } getStrengthDropoff()455 void getStrengthDropoff()const 456 { 457 458 fprintf(mFile,"\"%s.sdp\"",mName.c_str()); 459 } getStrengthDropoff_Position(size_t sdp_i)460 void getStrengthDropoff_Position(size_t sdp_i)const 461 { 462 fprintf(mFile,"\"%s.sdp[%i].sdpp\"",mName.c_str(),sdp_i); 463 } getStrengthDropoff_Position()464 void getStrengthDropoff_Position()const 465 { 466 467 fprintf(mFile,"\"%s.sdp.sdpp\"",mName.c_str()); 468 } getStrengthDropoff_FloatValue(size_t sdp_i)469 void getStrengthDropoff_FloatValue(size_t sdp_i)const 470 { 471 fprintf(mFile,"\"%s.sdp[%i].sdpfv\"",mName.c_str(),sdp_i); 472 } getStrengthDropoff_FloatValue()473 void getStrengthDropoff_FloatValue()const 474 { 475 476 fprintf(mFile,"\"%s.sdp.sdpfv\"",mName.c_str()); 477 } getStrengthDropoff_Interp(size_t sdp_i)478 void getStrengthDropoff_Interp(size_t sdp_i)const 479 { 480 fprintf(mFile,"\"%s.sdp[%i].sdpi\"",mName.c_str(),sdp_i); 481 } getStrengthDropoff_Interp()482 void getStrengthDropoff_Interp()const 483 { 484 485 fprintf(mFile,"\"%s.sdp.sdpi\"",mName.c_str()); 486 } getMaxDistance()487 void getMaxDistance()const 488 { 489 fprintf(mFile,"\"%s.mds\"",mName.c_str()); 490 } getDamp()491 void getDamp()const 492 { 493 fprintf(mFile,"\"%s.dmp\"",mName.c_str()); 494 } getFriction()495 void getFriction()const 496 { 497 fprintf(mFile,"\"%s.frc\"",mName.c_str()); 498 } getLocalCollide()499 void getLocalCollide()const 500 { 501 fprintf(mFile,"\"%s.lcl\"",mName.c_str()); 502 } getCollideWidthScale()503 void getCollideWidthScale()const 504 { 505 fprintf(mFile,"\"%s.cws\"",mName.c_str()); 506 } getExcludeCollisions()507 void getExcludeCollisions()const 508 { 509 fprintf(mFile,"\"%s.excs\"",mName.c_str()); 510 } getSingleSided()511 void getSingleSided()const 512 { 513 fprintf(mFile,"\"%s.ssd\"",mName.c_str()); 514 } getMaxIterations()515 void getMaxIterations()const 516 { 517 fprintf(mFile,"\"%s.mitr\"",mName.c_str()); 518 } getMinIterations()519 void getMinIterations()const 520 { 521 fprintf(mFile,"\"%s.mini\"",mName.c_str()); 522 } getEvalStart(size_t evs_i)523 void getEvalStart(size_t evs_i)const 524 { 525 fprintf(mFile,"\"%s.evs[%i]\"",mName.c_str(),evs_i); 526 } getEvalStart()527 void getEvalStart()const 528 { 529 530 fprintf(mFile,"\"%s.evs\"",mName.c_str()); 531 } getEvalCurrent(size_t evc_i)532 void getEvalCurrent(size_t evc_i)const 533 { 534 fprintf(mFile,"\"%s.evc[%i]\"",mName.c_str(),evc_i); 535 } getEvalCurrent()536 void getEvalCurrent()const 537 { 538 539 fprintf(mFile,"\"%s.evc\"",mName.c_str()); 540 } getIterations()541 void getIterations()const 542 { 543 fprintf(mFile,"\"%s.itr\"",mName.c_str()); 544 } getCollide()545 void getCollide()const 546 { 547 fprintf(mFile,"\"%s.cld\"",mName.c_str()); 548 } 549 protected: 550 DynamicConstraint(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)551 :Shape(file, name, parent, nodeType, shared, create) {} 552 553 }; 554 }//namespace MayaDM 555 #endif//__MayaDM_DYNAMICCONSTRAINT_H__ 556