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