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_TANGENTCONSTRAINT_H__ 11 #define __MayaDM_TANGENTCONSTRAINT_H__ 12 #include "MayaDMTypes.h" 13 #include "MayaDMConnectables.h" 14 #include "MayaDMConstraint.h" 15 namespace MayaDM 16 { 17 class TangentConstraint : public Constraint 18 { 19 public: 20 struct Target{ 21 double targetWeight; writeTarget22 void write(FILE* file) const 23 { 24 fprintf(file,"%f", targetWeight); 25 } 26 }; 27 public: 28 TangentConstraint()29 TangentConstraint():Constraint(){} 30 TangentConstraint(FILE* file,const std::string& name,const std::string& parent="",bool shared=false,bool create=true) 31 :Constraint(file, name, parent, "tangentConstraint", shared, create){} ~TangentConstraint()32 virtual ~TangentConstraint(){} 33 setTarget(size_t tg_i,const Target & tg)34 void setTarget(size_t tg_i,const Target& tg) 35 { 36 fprintf(mFile,"\tsetAttr \".tg[%i]\" ",tg_i); 37 tg.write(mFile); 38 fprintf(mFile,";\n"); 39 } setTarget(size_t tg_start,size_t tg_end,Target * tg)40 void setTarget(size_t tg_start,size_t tg_end,Target* tg) 41 { 42 fprintf(mFile,"\tsetAttr \".tg[%i:%i]\" ", tg_start,tg_end); 43 size_t size = (tg_end-tg_start)*1+1; 44 for(size_t i=0;i<size;++i) 45 { 46 tg[i].write(mFile); 47 fprintf(mFile,"\n"); 48 } 49 fprintf(mFile,";\n"); 50 } startTarget(size_t tg_start,size_t tg_end)51 void startTarget(size_t tg_start,size_t tg_end)const 52 { 53 fprintf(mFile,"\tsetAttr \".tg[%i:%i]\"",tg_start,tg_end); 54 fprintf(mFile," -type \"Target\" "); 55 } appendTarget(const Target & tg)56 void appendTarget(const Target& tg)const 57 { 58 fprintf(mFile," "); 59 tg.write(mFile); 60 } endTarget()61 void endTarget()const 62 { 63 fprintf(mFile,";\n"); 64 } setTargetWeight(size_t tg_i,double tw)65 void setTargetWeight(size_t tg_i,double tw) 66 { 67 if(tw == 1.0) return; 68 fprintf(mFile,"\tsetAttr \".tg[%i].tw\" %f;\n", tg_i,tw); 69 } setConstraintParentInverseMatrix(const matrix & cpim)70 void setConstraintParentInverseMatrix(const matrix& cpim) 71 { 72 if(cpim == identity) return; 73 fprintf(mFile,"\tsetAttr \".cpim\" -type \"matrix\" "); 74 cpim.write(mFile); 75 fprintf(mFile,";\n"); 76 } setAimVector(const double3 & a)77 void setAimVector(const double3& a) 78 { 79 fprintf(mFile,"\tsetAttr \".a\" -type \"double3\" "); 80 a.write(mFile); 81 fprintf(mFile,";\n"); 82 } setAimVectorX(double ax)83 void setAimVectorX(double ax) 84 { 85 if(ax == 1.0) return; 86 fprintf(mFile,"\tsetAttr \".a.ax\" %f;\n", ax); 87 } setAimVectorY(double ay)88 void setAimVectorY(double ay) 89 { 90 if(ay == 0.0) return; 91 fprintf(mFile,"\tsetAttr \".a.ay\" %f;\n", ay); 92 } setAimVectorZ(double az)93 void setAimVectorZ(double az) 94 { 95 if(az == 0.0) return; 96 fprintf(mFile,"\tsetAttr \".a.az\" %f;\n", az); 97 } setUpVector(const double3 & u)98 void setUpVector(const double3& u) 99 { 100 fprintf(mFile,"\tsetAttr \".u\" -type \"double3\" "); 101 u.write(mFile); 102 fprintf(mFile,";\n"); 103 } setUpVectorX(double ux)104 void setUpVectorX(double ux) 105 { 106 if(ux == 0.0) return; 107 fprintf(mFile,"\tsetAttr \".u.ux\" %f;\n", ux); 108 } setUpVectorY(double uy)109 void setUpVectorY(double uy) 110 { 111 if(uy == 1.0) return; 112 fprintf(mFile,"\tsetAttr \".u.uy\" %f;\n", uy); 113 } setUpVectorZ(double uz)114 void setUpVectorZ(double uz) 115 { 116 if(uz == 0.0) return; 117 fprintf(mFile,"\tsetAttr \".u.uz\" %f;\n", uz); 118 } setWorldUpVector(const double3 & wu)119 void setWorldUpVector(const double3& wu) 120 { 121 fprintf(mFile,"\tsetAttr \".wu\" -type \"double3\" "); 122 wu.write(mFile); 123 fprintf(mFile,";\n"); 124 } setWorldUpVectorX(double wux)125 void setWorldUpVectorX(double wux) 126 { 127 if(wux == 0.0) return; 128 fprintf(mFile,"\tsetAttr \".wu.wux\" %f;\n", wux); 129 } setWorldUpVectorY(double wuy)130 void setWorldUpVectorY(double wuy) 131 { 132 if(wuy == 1.0) return; 133 fprintf(mFile,"\tsetAttr \".wu.wuy\" %f;\n", wuy); 134 } setWorldUpVectorZ(double wuz)135 void setWorldUpVectorZ(double wuz) 136 { 137 if(wuz == 0.0) return; 138 fprintf(mFile,"\tsetAttr \".wu.wuz\" %f;\n", wuz); 139 } setWorldUpMatrix(const matrix & wum)140 void setWorldUpMatrix(const matrix& wum) 141 { 142 if(wum == identity) return; 143 fprintf(mFile,"\tsetAttr \".wum\" -type \"matrix\" "); 144 wum.write(mFile); 145 fprintf(mFile,";\n"); 146 } setWorldUpType(unsigned int wut)147 void setWorldUpType(unsigned int wut) 148 { 149 if(wut == 3) return; 150 fprintf(mFile,"\tsetAttr \".wut\" %i;\n", wut); 151 } setConstraintTranslate(const double3 & ct)152 void setConstraintTranslate(const double3& ct) 153 { 154 fprintf(mFile,"\tsetAttr \".ct\" -type \"double3\" "); 155 ct.write(mFile); 156 fprintf(mFile,";\n"); 157 } setConstraintTranslateX(double ctx)158 void setConstraintTranslateX(double ctx) 159 { 160 if(ctx == 0) return; 161 fprintf(mFile,"\tsetAttr \".ct.ctx\" %f;\n", ctx); 162 } setConstraintTranslateY(double cty)163 void setConstraintTranslateY(double cty) 164 { 165 if(cty == 0) return; 166 fprintf(mFile,"\tsetAttr \".ct.cty\" %f;\n", cty); 167 } setConstraintTranslateZ(double ctz)168 void setConstraintTranslateZ(double ctz) 169 { 170 if(ctz == 0) return; 171 fprintf(mFile,"\tsetAttr \".ct.ctz\" %f;\n", ctz); 172 } setConstraintRotatePivot(const double3 & crp)173 void setConstraintRotatePivot(const double3& crp) 174 { 175 fprintf(mFile,"\tsetAttr \".crp\" -type \"double3\" "); 176 crp.write(mFile); 177 fprintf(mFile,";\n"); 178 } setConstraintRotatePivotX(double crpx)179 void setConstraintRotatePivotX(double crpx) 180 { 181 if(crpx == 0) return; 182 fprintf(mFile,"\tsetAttr \".crp.crpx\" %f;\n", crpx); 183 } setConstraintRotatePivotY(double crpy)184 void setConstraintRotatePivotY(double crpy) 185 { 186 if(crpy == 0) return; 187 fprintf(mFile,"\tsetAttr \".crp.crpy\" %f;\n", crpy); 188 } setConstraintRotatePivotZ(double crpz)189 void setConstraintRotatePivotZ(double crpz) 190 { 191 if(crpz == 0) return; 192 fprintf(mFile,"\tsetAttr \".crp.crpz\" %f;\n", crpz); 193 } setConstraintRotateTranslate(const double3 & crt)194 void setConstraintRotateTranslate(const double3& crt) 195 { 196 fprintf(mFile,"\tsetAttr \".crt\" -type \"double3\" "); 197 crt.write(mFile); 198 fprintf(mFile,";\n"); 199 } setConstraintRotateTranslateX(double crtx)200 void setConstraintRotateTranslateX(double crtx) 201 { 202 if(crtx == 0) return; 203 fprintf(mFile,"\tsetAttr \".crt.crtx\" %f;\n", crtx); 204 } setConstraintRotateTranslateY(double crty)205 void setConstraintRotateTranslateY(double crty) 206 { 207 if(crty == 0) return; 208 fprintf(mFile,"\tsetAttr \".crt.crty\" %f;\n", crty); 209 } setConstraintRotateTranslateZ(double crtz)210 void setConstraintRotateTranslateZ(double crtz) 211 { 212 if(crtz == 0) return; 213 fprintf(mFile,"\tsetAttr \".crt.crtz\" %f;\n", crtz); 214 } setConstraintRotateOrder(unsigned int cro)215 void setConstraintRotateOrder(unsigned int cro) 216 { 217 if(cro == 0) return; 218 fprintf(mFile,"\tsetAttr \".cro\" %i;\n", cro); 219 } setConstraintJointOrient(const double3 & cjo)220 void setConstraintJointOrient(const double3& cjo) 221 { 222 fprintf(mFile,"\tsetAttr \".cjo\" -type \"double3\" "); 223 cjo.write(mFile); 224 fprintf(mFile,";\n"); 225 } setConstraintJointOrientX(double cjox)226 void setConstraintJointOrientX(double cjox) 227 { 228 if(cjox == 0) return; 229 fprintf(mFile,"\tsetAttr \".cjo.cjox\" %f;\n", cjox); 230 } setConstraintJointOrientY(double cjoy)231 void setConstraintJointOrientY(double cjoy) 232 { 233 if(cjoy == 0) return; 234 fprintf(mFile,"\tsetAttr \".cjo.cjoy\" %f;\n", cjoy); 235 } setConstraintJointOrientZ(double cjoz)236 void setConstraintJointOrientZ(double cjoz) 237 { 238 if(cjoz == 0) return; 239 fprintf(mFile,"\tsetAttr \".cjo.cjoz\" %f;\n", cjoz); 240 } setRestRotate(const double3 & rsrr)241 void setRestRotate(const double3& rsrr) 242 { 243 fprintf(mFile,"\tsetAttr \".rsrr\" -type \"double3\" "); 244 rsrr.write(mFile); 245 fprintf(mFile,";\n"); 246 } setRestRotateX(double rrx)247 void setRestRotateX(double rrx) 248 { 249 if(rrx == 0) return; 250 fprintf(mFile,"\tsetAttr \".rsrr.rrx\" %f;\n", rrx); 251 } setRestRotateY(double rry)252 void setRestRotateY(double rry) 253 { 254 if(rry == 0) return; 255 fprintf(mFile,"\tsetAttr \".rsrr.rry\" %f;\n", rry); 256 } setRestRotateZ(double rrz)257 void setRestRotateZ(double rrz) 258 { 259 if(rrz == 0) return; 260 fprintf(mFile,"\tsetAttr \".rsrr.rrz\" %f;\n", rrz); 261 } getTarget(size_t tg_i)262 void getTarget(size_t tg_i)const 263 { 264 fprintf(mFile,"\"%s.tg[%i]\"",mName.c_str(),tg_i); 265 } getTarget()266 void getTarget()const 267 { 268 269 fprintf(mFile,"\"%s.tg\"",mName.c_str()); 270 } getTargetGeometry(size_t tg_i)271 void getTargetGeometry(size_t tg_i)const 272 { 273 fprintf(mFile,"\"%s.tg[%i].tgm\"",mName.c_str(),tg_i); 274 } getTargetGeometry()275 void getTargetGeometry()const 276 { 277 278 fprintf(mFile,"\"%s.tg.tgm\"",mName.c_str()); 279 } getTargetWeight(size_t tg_i)280 void getTargetWeight(size_t tg_i)const 281 { 282 fprintf(mFile,"\"%s.tg[%i].tw\"",mName.c_str(),tg_i); 283 } getTargetWeight()284 void getTargetWeight()const 285 { 286 287 fprintf(mFile,"\"%s.tg.tw\"",mName.c_str()); 288 } getConstraintParentInverseMatrix()289 void getConstraintParentInverseMatrix()const 290 { 291 fprintf(mFile,"\"%s.cpim\"",mName.c_str()); 292 } getAimVector()293 void getAimVector()const 294 { 295 fprintf(mFile,"\"%s.a\"",mName.c_str()); 296 } getAimVectorX()297 void getAimVectorX()const 298 { 299 fprintf(mFile,"\"%s.a.ax\"",mName.c_str()); 300 } getAimVectorY()301 void getAimVectorY()const 302 { 303 fprintf(mFile,"\"%s.a.ay\"",mName.c_str()); 304 } getAimVectorZ()305 void getAimVectorZ()const 306 { 307 fprintf(mFile,"\"%s.a.az\"",mName.c_str()); 308 } getUpVector()309 void getUpVector()const 310 { 311 fprintf(mFile,"\"%s.u\"",mName.c_str()); 312 } getUpVectorX()313 void getUpVectorX()const 314 { 315 fprintf(mFile,"\"%s.u.ux\"",mName.c_str()); 316 } getUpVectorY()317 void getUpVectorY()const 318 { 319 fprintf(mFile,"\"%s.u.uy\"",mName.c_str()); 320 } getUpVectorZ()321 void getUpVectorZ()const 322 { 323 fprintf(mFile,"\"%s.u.uz\"",mName.c_str()); 324 } getWorldUpVector()325 void getWorldUpVector()const 326 { 327 fprintf(mFile,"\"%s.wu\"",mName.c_str()); 328 } getWorldUpVectorX()329 void getWorldUpVectorX()const 330 { 331 fprintf(mFile,"\"%s.wu.wux\"",mName.c_str()); 332 } getWorldUpVectorY()333 void getWorldUpVectorY()const 334 { 335 fprintf(mFile,"\"%s.wu.wuy\"",mName.c_str()); 336 } getWorldUpVectorZ()337 void getWorldUpVectorZ()const 338 { 339 fprintf(mFile,"\"%s.wu.wuz\"",mName.c_str()); 340 } getWorldUpMatrix()341 void getWorldUpMatrix()const 342 { 343 fprintf(mFile,"\"%s.wum\"",mName.c_str()); 344 } getWorldUpType()345 void getWorldUpType()const 346 { 347 fprintf(mFile,"\"%s.wut\"",mName.c_str()); 348 } getConstraintTranslate()349 void getConstraintTranslate()const 350 { 351 fprintf(mFile,"\"%s.ct\"",mName.c_str()); 352 } getConstraintTranslateX()353 void getConstraintTranslateX()const 354 { 355 fprintf(mFile,"\"%s.ct.ctx\"",mName.c_str()); 356 } getConstraintTranslateY()357 void getConstraintTranslateY()const 358 { 359 fprintf(mFile,"\"%s.ct.cty\"",mName.c_str()); 360 } getConstraintTranslateZ()361 void getConstraintTranslateZ()const 362 { 363 fprintf(mFile,"\"%s.ct.ctz\"",mName.c_str()); 364 } getConstraintRotatePivot()365 void getConstraintRotatePivot()const 366 { 367 fprintf(mFile,"\"%s.crp\"",mName.c_str()); 368 } getConstraintRotatePivotX()369 void getConstraintRotatePivotX()const 370 { 371 fprintf(mFile,"\"%s.crp.crpx\"",mName.c_str()); 372 } getConstraintRotatePivotY()373 void getConstraintRotatePivotY()const 374 { 375 fprintf(mFile,"\"%s.crp.crpy\"",mName.c_str()); 376 } getConstraintRotatePivotZ()377 void getConstraintRotatePivotZ()const 378 { 379 fprintf(mFile,"\"%s.crp.crpz\"",mName.c_str()); 380 } getConstraintRotateTranslate()381 void getConstraintRotateTranslate()const 382 { 383 fprintf(mFile,"\"%s.crt\"",mName.c_str()); 384 } getConstraintRotateTranslateX()385 void getConstraintRotateTranslateX()const 386 { 387 fprintf(mFile,"\"%s.crt.crtx\"",mName.c_str()); 388 } getConstraintRotateTranslateY()389 void getConstraintRotateTranslateY()const 390 { 391 fprintf(mFile,"\"%s.crt.crty\"",mName.c_str()); 392 } getConstraintRotateTranslateZ()393 void getConstraintRotateTranslateZ()const 394 { 395 fprintf(mFile,"\"%s.crt.crtz\"",mName.c_str()); 396 } getConstraintRotateOrder()397 void getConstraintRotateOrder()const 398 { 399 fprintf(mFile,"\"%s.cro\"",mName.c_str()); 400 } getConstraintJointOrient()401 void getConstraintJointOrient()const 402 { 403 fprintf(mFile,"\"%s.cjo\"",mName.c_str()); 404 } getConstraintJointOrientX()405 void getConstraintJointOrientX()const 406 { 407 fprintf(mFile,"\"%s.cjo.cjox\"",mName.c_str()); 408 } getConstraintJointOrientY()409 void getConstraintJointOrientY()const 410 { 411 fprintf(mFile,"\"%s.cjo.cjoy\"",mName.c_str()); 412 } getConstraintJointOrientZ()413 void getConstraintJointOrientZ()const 414 { 415 fprintf(mFile,"\"%s.cjo.cjoz\"",mName.c_str()); 416 } getConstraintRotate()417 void getConstraintRotate()const 418 { 419 fprintf(mFile,"\"%s.cr\"",mName.c_str()); 420 } getConstraintRotateX()421 void getConstraintRotateX()const 422 { 423 fprintf(mFile,"\"%s.cr.crx\"",mName.c_str()); 424 } getConstraintRotateY()425 void getConstraintRotateY()const 426 { 427 fprintf(mFile,"\"%s.cr.cry\"",mName.c_str()); 428 } getConstraintRotateZ()429 void getConstraintRotateZ()const 430 { 431 fprintf(mFile,"\"%s.cr.crz\"",mName.c_str()); 432 } getConstraintVector()433 void getConstraintVector()const 434 { 435 fprintf(mFile,"\"%s.cv\"",mName.c_str()); 436 } getConstraintVectorX()437 void getConstraintVectorX()const 438 { 439 fprintf(mFile,"\"%s.cv.cvx\"",mName.c_str()); 440 } getConstraintVectorY()441 void getConstraintVectorY()const 442 { 443 fprintf(mFile,"\"%s.cv.cvy\"",mName.c_str()); 444 } getConstraintVectorZ()445 void getConstraintVectorZ()const 446 { 447 fprintf(mFile,"\"%s.cv.cvz\"",mName.c_str()); 448 } getRestRotate()449 void getRestRotate()const 450 { 451 fprintf(mFile,"\"%s.rsrr\"",mName.c_str()); 452 } getRestRotateX()453 void getRestRotateX()const 454 { 455 fprintf(mFile,"\"%s.rsrr.rrx\"",mName.c_str()); 456 } getRestRotateY()457 void getRestRotateY()const 458 { 459 fprintf(mFile,"\"%s.rsrr.rry\"",mName.c_str()); 460 } getRestRotateZ()461 void getRestRotateZ()const 462 { 463 fprintf(mFile,"\"%s.rsrr.rrz\"",mName.c_str()); 464 } 465 protected: 466 TangentConstraint(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)467 :Constraint(file, name, parent, nodeType, shared, create) {} 468 469 }; 470 }//namespace MayaDM 471 #endif//__MayaDM_TANGENTCONSTRAINT_H__ 472