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