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_ORIENTCONSTRAINT_H__ 11 #define __MayaDM_ORIENTCONSTRAINT_H__ 12 #include "MayaDMTypes.h" 13 #include "MayaDMConnectables.h" 14 #include "MayaDMConstraint.h" 15 namespace MayaDM 16 { 17 class OrientConstraint : public Constraint 18 { 19 public: 20 struct Target{ 21 double3 targetRotate; 22 unsigned int targetRotateOrder; 23 double3 targetJointOrient; 24 matrix targetParentMatrix; 25 double targetWeight; 26 double3 targetRotateCached; writeTarget27 void write(FILE* file) const 28 { 29 targetRotate.write(file); 30 fprintf(file, " "); 31 fprintf(file,"%i ", targetRotateOrder); 32 targetJointOrient.write(file); 33 fprintf(file, " "); 34 targetParentMatrix.write(file); 35 fprintf(file, " "); 36 fprintf(file,"%f ", targetWeight); 37 targetRotateCached.write(file); 38 } 39 }; 40 public: 41 OrientConstraint()42 OrientConstraint():Constraint(){} 43 OrientConstraint(FILE* file,const std::string& name,const std::string& parent="",bool shared=false,bool create=true) 44 :Constraint(file, name, parent, "orientConstraint", shared, create){} ~OrientConstraint()45 virtual ~OrientConstraint(){} 46 setTarget(size_t tg_i,const Target & tg)47 void setTarget(size_t tg_i,const Target& tg) 48 { 49 fprintf(mFile,"\tsetAttr \".tg[%i]\" ",tg_i); 50 tg.write(mFile); 51 fprintf(mFile,";\n"); 52 } setTarget(size_t tg_start,size_t tg_end,Target * tg)53 void setTarget(size_t tg_start,size_t tg_end,Target* tg) 54 { 55 fprintf(mFile,"\tsetAttr \".tg[%i:%i]\" ", tg_start,tg_end); 56 size_t size = (tg_end-tg_start)*1+1; 57 for(size_t i=0;i<size;++i) 58 { 59 tg[i].write(mFile); 60 fprintf(mFile,"\n"); 61 } 62 fprintf(mFile,";\n"); 63 } startTarget(size_t tg_start,size_t tg_end)64 void startTarget(size_t tg_start,size_t tg_end)const 65 { 66 fprintf(mFile,"\tsetAttr \".tg[%i:%i]\"",tg_start,tg_end); 67 fprintf(mFile," -type \"Target\" "); 68 } appendTarget(const Target & tg)69 void appendTarget(const Target& tg)const 70 { 71 fprintf(mFile," "); 72 tg.write(mFile); 73 } endTarget()74 void endTarget()const 75 { 76 fprintf(mFile,";\n"); 77 } setTargetRotate(size_t tg_i,const double3 & tr)78 void setTargetRotate(size_t tg_i,const double3& tr) 79 { 80 fprintf(mFile,"\tsetAttr \".tg[%i].tr\" -type \"double3\" ",tg_i); 81 tr.write(mFile); 82 fprintf(mFile,";\n"); 83 } setTargetRotateX(size_t tg_i,double trx)84 void setTargetRotateX(size_t tg_i,double trx) 85 { 86 if(trx == 0) return; 87 fprintf(mFile,"\tsetAttr \".tg[%i].tr.trx\" %f;\n", tg_i,trx); 88 } setTargetRotateY(size_t tg_i,double try_)89 void setTargetRotateY(size_t tg_i,double try_) 90 { 91 if(try_ == 0) return; 92 fprintf(mFile,"\tsetAttr \".tg[%i].tr.try\" %f;\n", tg_i,try_); 93 } setTargetRotateZ(size_t tg_i,double trz)94 void setTargetRotateZ(size_t tg_i,double trz) 95 { 96 if(trz == 0) return; 97 fprintf(mFile,"\tsetAttr \".tg[%i].tr.trz\" %f;\n", tg_i,trz); 98 } setTargetRotateOrder(size_t tg_i,unsigned int tro)99 void setTargetRotateOrder(size_t tg_i,unsigned int tro) 100 { 101 if(tro == 0) return; 102 fprintf(mFile,"\tsetAttr \".tg[%i].tro\" %i;\n", tg_i,tro); 103 } setTargetJointOrient(size_t tg_i,const double3 & tjo)104 void setTargetJointOrient(size_t tg_i,const double3& tjo) 105 { 106 fprintf(mFile,"\tsetAttr \".tg[%i].tjo\" -type \"double3\" ",tg_i); 107 tjo.write(mFile); 108 fprintf(mFile,";\n"); 109 } setTargetJointOrientX(size_t tg_i,double tjox)110 void setTargetJointOrientX(size_t tg_i,double tjox) 111 { 112 if(tjox == 0) return; 113 fprintf(mFile,"\tsetAttr \".tg[%i].tjo.tjox\" %f;\n", tg_i,tjox); 114 } setTargetJointOrientY(size_t tg_i,double tjoy)115 void setTargetJointOrientY(size_t tg_i,double tjoy) 116 { 117 if(tjoy == 0) return; 118 fprintf(mFile,"\tsetAttr \".tg[%i].tjo.tjoy\" %f;\n", tg_i,tjoy); 119 } setTargetJointOrientZ(size_t tg_i,double tjoz)120 void setTargetJointOrientZ(size_t tg_i,double tjoz) 121 { 122 if(tjoz == 0) return; 123 fprintf(mFile,"\tsetAttr \".tg[%i].tjo.tjoz\" %f;\n", tg_i,tjoz); 124 } setTargetParentMatrix(size_t tg_i,const matrix & tpm)125 void setTargetParentMatrix(size_t tg_i,const matrix& tpm) 126 { 127 if(tpm == identity) return; 128 fprintf(mFile,"\tsetAttr \".tg[%i].tpm\" -type \"matrix\" ",tg_i); 129 tpm.write(mFile); 130 fprintf(mFile,";\n"); 131 } setTargetWeight(size_t tg_i,double tw)132 void setTargetWeight(size_t tg_i,double tw) 133 { 134 if(tw == 1.0) return; 135 fprintf(mFile,"\tsetAttr \".tg[%i].tw\" %f;\n", tg_i,tw); 136 } setTargetRotateCached(size_t tg_i,const double3 & ctr)137 void setTargetRotateCached(size_t tg_i,const double3& ctr) 138 { 139 fprintf(mFile,"\tsetAttr \".tg[%i].ctr\" -type \"double3\" ",tg_i); 140 ctr.write(mFile); 141 fprintf(mFile,";\n"); 142 } setTargetRotateCachedX(size_t tg_i,double ctrx)143 void setTargetRotateCachedX(size_t tg_i,double ctrx) 144 { 145 if(ctrx == 0) return; 146 fprintf(mFile,"\tsetAttr \".tg[%i].ctr.ctrx\" %f;\n", tg_i,ctrx); 147 } setTargetRotateCachedY(size_t tg_i,double ctry)148 void setTargetRotateCachedY(size_t tg_i,double ctry) 149 { 150 if(ctry == 0) return; 151 fprintf(mFile,"\tsetAttr \".tg[%i].ctr.ctry\" %f;\n", tg_i,ctry); 152 } setTargetRotateCachedZ(size_t tg_i,double ctrz)153 void setTargetRotateCachedZ(size_t tg_i,double ctrz) 154 { 155 if(ctrz == 0) return; 156 fprintf(mFile,"\tsetAttr \".tg[%i].ctr.ctrz\" %f;\n", tg_i,ctrz); 157 } setLastTargetRotate(const double3 & lr)158 void setLastTargetRotate(const double3& lr) 159 { 160 fprintf(mFile,"\tsetAttr \".lr\" -type \"double3\" "); 161 lr.write(mFile); 162 fprintf(mFile,";\n"); 163 } setLastTargetRotateX(double lrx)164 void setLastTargetRotateX(double lrx) 165 { 166 if(lrx == 0) return; 167 fprintf(mFile,"\tsetAttr \".lr.lrx\" %f;\n", lrx); 168 } setLastTargetRotateY(double lry)169 void setLastTargetRotateY(double lry) 170 { 171 if(lry == 0) return; 172 fprintf(mFile,"\tsetAttr \".lr.lry\" %f;\n", lry); 173 } setLastTargetRotateZ(double lrz)174 void setLastTargetRotateZ(double lrz) 175 { 176 if(lrz == 0) return; 177 fprintf(mFile,"\tsetAttr \".lr.lrz\" %f;\n", lrz); 178 } setConstraintParentInverseMatrix(const matrix & cpim)179 void setConstraintParentInverseMatrix(const matrix& cpim) 180 { 181 if(cpim == identity) return; 182 fprintf(mFile,"\tsetAttr \".cpim\" -type \"matrix\" "); 183 cpim.write(mFile); 184 fprintf(mFile,";\n"); 185 } setConstraintRotateOrder(unsigned int cro)186 void setConstraintRotateOrder(unsigned int cro) 187 { 188 if(cro == 0) return; 189 fprintf(mFile,"\tsetAttr \".cro\" %i;\n", cro); 190 } setConstraintJointOrient(const double3 & cjo)191 void setConstraintJointOrient(const double3& cjo) 192 { 193 fprintf(mFile,"\tsetAttr \".cjo\" -type \"double3\" "); 194 cjo.write(mFile); 195 fprintf(mFile,";\n"); 196 } setConstraintJointOrientX(double cjox)197 void setConstraintJointOrientX(double cjox) 198 { 199 if(cjox == 0) return; 200 fprintf(mFile,"\tsetAttr \".cjo.cjox\" %f;\n", cjox); 201 } setConstraintJointOrientY(double cjoy)202 void setConstraintJointOrientY(double cjoy) 203 { 204 if(cjoy == 0) return; 205 fprintf(mFile,"\tsetAttr \".cjo.cjoy\" %f;\n", cjoy); 206 } setConstraintJointOrientZ(double cjoz)207 void setConstraintJointOrientZ(double cjoz) 208 { 209 if(cjoz == 0) return; 210 fprintf(mFile,"\tsetAttr \".cjo.cjoz\" %f;\n", cjoz); 211 } setOffset(const double3 & o)212 void setOffset(const double3& o) 213 { 214 fprintf(mFile,"\tsetAttr \".o\" -type \"double3\" "); 215 o.write(mFile); 216 fprintf(mFile,";\n"); 217 } setOffsetX(double ox)218 void setOffsetX(double ox) 219 { 220 if(ox == 0) return; 221 fprintf(mFile,"\tsetAttr \".o.ox\" %f;\n", ox); 222 } setOffsetY(double oy)223 void setOffsetY(double oy) 224 { 225 if(oy == 0) return; 226 fprintf(mFile,"\tsetAttr \".o.oy\" %f;\n", oy); 227 } setOffsetZ(double oz)228 void setOffsetZ(double oz) 229 { 230 if(oz == 0) return; 231 fprintf(mFile,"\tsetAttr \".o.oz\" %f;\n", oz); 232 } setRestRotate(const double3 & rsrr)233 void setRestRotate(const double3& rsrr) 234 { 235 fprintf(mFile,"\tsetAttr \".rsrr\" -type \"double3\" "); 236 rsrr.write(mFile); 237 fprintf(mFile,";\n"); 238 } setRestRotateX(double rrx)239 void setRestRotateX(double rrx) 240 { 241 if(rrx == 0) return; 242 fprintf(mFile,"\tsetAttr \".rsrr.rrx\" %f;\n", rrx); 243 } setRestRotateY(double rry)244 void setRestRotateY(double rry) 245 { 246 if(rry == 0) return; 247 fprintf(mFile,"\tsetAttr \".rsrr.rry\" %f;\n", rry); 248 } setRestRotateZ(double rrz)249 void setRestRotateZ(double rrz) 250 { 251 if(rrz == 0) return; 252 fprintf(mFile,"\tsetAttr \".rsrr.rrz\" %f;\n", rrz); 253 } setInterpType(unsigned int int_)254 void setInterpType(unsigned int int_) 255 { 256 if(int_ == 1) return; 257 fprintf(mFile,"\tsetAttr \".int\" %i;\n", int_); 258 } setInterpCache(int inc)259 void setInterpCache(int inc) 260 { 261 if(inc == 0) return; 262 fprintf(mFile,"\tsetAttr \".inc\" %i;\n", inc); 263 } setUseOldOffsetCalculation(bool uooc)264 void setUseOldOffsetCalculation(bool uooc) 265 { 266 if(uooc == false) return; 267 fprintf(mFile,"\tsetAttr \".uooc\" %i;\n", uooc); 268 } getTarget(size_t tg_i)269 void getTarget(size_t tg_i)const 270 { 271 fprintf(mFile,"\"%s.tg[%i]\"",mName.c_str(),tg_i); 272 } getTarget()273 void getTarget()const 274 { 275 276 fprintf(mFile,"\"%s.tg\"",mName.c_str()); 277 } getTargetRotate(size_t tg_i)278 void getTargetRotate(size_t tg_i)const 279 { 280 fprintf(mFile,"\"%s.tg[%i].tr\"",mName.c_str(),tg_i); 281 } getTargetRotate()282 void getTargetRotate()const 283 { 284 285 fprintf(mFile,"\"%s.tg.tr\"",mName.c_str()); 286 } getTargetRotateX(size_t tg_i)287 void getTargetRotateX(size_t tg_i)const 288 { 289 fprintf(mFile,"\"%s.tg[%i].tr.trx\"",mName.c_str(),tg_i); 290 } getTargetRotateX()291 void getTargetRotateX()const 292 { 293 294 fprintf(mFile,"\"%s.tg.tr.trx\"",mName.c_str()); 295 } getTargetRotateY(size_t tg_i)296 void getTargetRotateY(size_t tg_i)const 297 { 298 fprintf(mFile,"\"%s.tg[%i].tr.try\"",mName.c_str(),tg_i); 299 } getTargetRotateY()300 void getTargetRotateY()const 301 { 302 303 fprintf(mFile,"\"%s.tg.tr.try\"",mName.c_str()); 304 } getTargetRotateZ(size_t tg_i)305 void getTargetRotateZ(size_t tg_i)const 306 { 307 fprintf(mFile,"\"%s.tg[%i].tr.trz\"",mName.c_str(),tg_i); 308 } getTargetRotateZ()309 void getTargetRotateZ()const 310 { 311 312 fprintf(mFile,"\"%s.tg.tr.trz\"",mName.c_str()); 313 } getTargetRotateOrder(size_t tg_i)314 void getTargetRotateOrder(size_t tg_i)const 315 { 316 fprintf(mFile,"\"%s.tg[%i].tro\"",mName.c_str(),tg_i); 317 } getTargetRotateOrder()318 void getTargetRotateOrder()const 319 { 320 321 fprintf(mFile,"\"%s.tg.tro\"",mName.c_str()); 322 } getTargetJointOrient(size_t tg_i)323 void getTargetJointOrient(size_t tg_i)const 324 { 325 fprintf(mFile,"\"%s.tg[%i].tjo\"",mName.c_str(),tg_i); 326 } getTargetJointOrient()327 void getTargetJointOrient()const 328 { 329 330 fprintf(mFile,"\"%s.tg.tjo\"",mName.c_str()); 331 } getTargetJointOrientX(size_t tg_i)332 void getTargetJointOrientX(size_t tg_i)const 333 { 334 fprintf(mFile,"\"%s.tg[%i].tjo.tjox\"",mName.c_str(),tg_i); 335 } getTargetJointOrientX()336 void getTargetJointOrientX()const 337 { 338 339 fprintf(mFile,"\"%s.tg.tjo.tjox\"",mName.c_str()); 340 } getTargetJointOrientY(size_t tg_i)341 void getTargetJointOrientY(size_t tg_i)const 342 { 343 fprintf(mFile,"\"%s.tg[%i].tjo.tjoy\"",mName.c_str(),tg_i); 344 } getTargetJointOrientY()345 void getTargetJointOrientY()const 346 { 347 348 fprintf(mFile,"\"%s.tg.tjo.tjoy\"",mName.c_str()); 349 } getTargetJointOrientZ(size_t tg_i)350 void getTargetJointOrientZ(size_t tg_i)const 351 { 352 fprintf(mFile,"\"%s.tg[%i].tjo.tjoz\"",mName.c_str(),tg_i); 353 } getTargetJointOrientZ()354 void getTargetJointOrientZ()const 355 { 356 357 fprintf(mFile,"\"%s.tg.tjo.tjoz\"",mName.c_str()); 358 } getTargetParentMatrix(size_t tg_i)359 void getTargetParentMatrix(size_t tg_i)const 360 { 361 fprintf(mFile,"\"%s.tg[%i].tpm\"",mName.c_str(),tg_i); 362 } getTargetParentMatrix()363 void getTargetParentMatrix()const 364 { 365 366 fprintf(mFile,"\"%s.tg.tpm\"",mName.c_str()); 367 } getTargetWeight(size_t tg_i)368 void getTargetWeight(size_t tg_i)const 369 { 370 fprintf(mFile,"\"%s.tg[%i].tw\"",mName.c_str(),tg_i); 371 } getTargetWeight()372 void getTargetWeight()const 373 { 374 375 fprintf(mFile,"\"%s.tg.tw\"",mName.c_str()); 376 } getTargetRotateCached(size_t tg_i)377 void getTargetRotateCached(size_t tg_i)const 378 { 379 fprintf(mFile,"\"%s.tg[%i].ctr\"",mName.c_str(),tg_i); 380 } getTargetRotateCached()381 void getTargetRotateCached()const 382 { 383 384 fprintf(mFile,"\"%s.tg.ctr\"",mName.c_str()); 385 } getTargetRotateCachedX(size_t tg_i)386 void getTargetRotateCachedX(size_t tg_i)const 387 { 388 fprintf(mFile,"\"%s.tg[%i].ctr.ctrx\"",mName.c_str(),tg_i); 389 } getTargetRotateCachedX()390 void getTargetRotateCachedX()const 391 { 392 393 fprintf(mFile,"\"%s.tg.ctr.ctrx\"",mName.c_str()); 394 } getTargetRotateCachedY(size_t tg_i)395 void getTargetRotateCachedY(size_t tg_i)const 396 { 397 fprintf(mFile,"\"%s.tg[%i].ctr.ctry\"",mName.c_str(),tg_i); 398 } getTargetRotateCachedY()399 void getTargetRotateCachedY()const 400 { 401 402 fprintf(mFile,"\"%s.tg.ctr.ctry\"",mName.c_str()); 403 } getTargetRotateCachedZ(size_t tg_i)404 void getTargetRotateCachedZ(size_t tg_i)const 405 { 406 fprintf(mFile,"\"%s.tg[%i].ctr.ctrz\"",mName.c_str(),tg_i); 407 } getTargetRotateCachedZ()408 void getTargetRotateCachedZ()const 409 { 410 411 fprintf(mFile,"\"%s.tg.ctr.ctrz\"",mName.c_str()); 412 } getLastTargetRotate()413 void getLastTargetRotate()const 414 { 415 fprintf(mFile,"\"%s.lr\"",mName.c_str()); 416 } getLastTargetRotateX()417 void getLastTargetRotateX()const 418 { 419 fprintf(mFile,"\"%s.lr.lrx\"",mName.c_str()); 420 } getLastTargetRotateY()421 void getLastTargetRotateY()const 422 { 423 fprintf(mFile,"\"%s.lr.lry\"",mName.c_str()); 424 } getLastTargetRotateZ()425 void getLastTargetRotateZ()const 426 { 427 fprintf(mFile,"\"%s.lr.lrz\"",mName.c_str()); 428 } getConstraintParentInverseMatrix()429 void getConstraintParentInverseMatrix()const 430 { 431 fprintf(mFile,"\"%s.cpim\"",mName.c_str()); 432 } getConstraintRotateOrder()433 void getConstraintRotateOrder()const 434 { 435 fprintf(mFile,"\"%s.cro\"",mName.c_str()); 436 } getConstraintJointOrient()437 void getConstraintJointOrient()const 438 { 439 fprintf(mFile,"\"%s.cjo\"",mName.c_str()); 440 } getConstraintJointOrientX()441 void getConstraintJointOrientX()const 442 { 443 fprintf(mFile,"\"%s.cjo.cjox\"",mName.c_str()); 444 } getConstraintJointOrientY()445 void getConstraintJointOrientY()const 446 { 447 fprintf(mFile,"\"%s.cjo.cjoy\"",mName.c_str()); 448 } getConstraintJointOrientZ()449 void getConstraintJointOrientZ()const 450 { 451 fprintf(mFile,"\"%s.cjo.cjoz\"",mName.c_str()); 452 } getConstraintRotate()453 void getConstraintRotate()const 454 { 455 fprintf(mFile,"\"%s.cr\"",mName.c_str()); 456 } getConstraintRotateX()457 void getConstraintRotateX()const 458 { 459 fprintf(mFile,"\"%s.cr.crx\"",mName.c_str()); 460 } getConstraintRotateY()461 void getConstraintRotateY()const 462 { 463 fprintf(mFile,"\"%s.cr.cry\"",mName.c_str()); 464 } getConstraintRotateZ()465 void getConstraintRotateZ()const 466 { 467 fprintf(mFile,"\"%s.cr.crz\"",mName.c_str()); 468 } getOffset()469 void getOffset()const 470 { 471 fprintf(mFile,"\"%s.o\"",mName.c_str()); 472 } getOffsetX()473 void getOffsetX()const 474 { 475 fprintf(mFile,"\"%s.o.ox\"",mName.c_str()); 476 } getOffsetY()477 void getOffsetY()const 478 { 479 fprintf(mFile,"\"%s.o.oy\"",mName.c_str()); 480 } getOffsetZ()481 void getOffsetZ()const 482 { 483 fprintf(mFile,"\"%s.o.oz\"",mName.c_str()); 484 } getRestRotate()485 void getRestRotate()const 486 { 487 fprintf(mFile,"\"%s.rsrr\"",mName.c_str()); 488 } getRestRotateX()489 void getRestRotateX()const 490 { 491 fprintf(mFile,"\"%s.rsrr.rrx\"",mName.c_str()); 492 } getRestRotateY()493 void getRestRotateY()const 494 { 495 fprintf(mFile,"\"%s.rsrr.rry\"",mName.c_str()); 496 } getRestRotateZ()497 void getRestRotateZ()const 498 { 499 fprintf(mFile,"\"%s.rsrr.rrz\"",mName.c_str()); 500 } getInterpType()501 void getInterpType()const 502 { 503 fprintf(mFile,"\"%s.int\"",mName.c_str()); 504 } getInterpCache()505 void getInterpCache()const 506 { 507 fprintf(mFile,"\"%s.inc\"",mName.c_str()); 508 } getUseOldOffsetCalculation()509 void getUseOldOffsetCalculation()const 510 { 511 fprintf(mFile,"\"%s.uooc\"",mName.c_str()); 512 } 513 protected: 514 OrientConstraint(FILE* file,const std::string& name,const std::string& parent,const std::string& nodeType,bool shared=false,bool create=true) Constraint(file,name,parent,nodeType,shared,create)515 :Constraint(file, name, parent, nodeType, shared, create) {} 516 517 }; 518 }//namespace MayaDM 519 #endif//__MayaDM_ORIENTCONSTRAINT_H__ 520