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_MOTIONPATH_H__
11 #define __MayaDM_MOTIONPATH_H__
12 #include "MayaDMTypes.h"
13 #include "MayaDMConnectables.h"
14 #include "MayaDMDependNode.h"
15 namespace MayaDM
16 {
17 class MotionPath : public DependNode
18 {
19 public:
20 public:
21 
MotionPath()22 	MotionPath():DependNode(){}
23 	MotionPath(FILE* file,const std::string& name,const std::string& parent="",bool shared=false,bool create=true)
24 		:DependNode(file, name, parent, "motionPath", shared, create){}
~MotionPath()25 	virtual ~MotionPath(){}
26 
setUValue(double u)27 	void setUValue(double u)
28 	{
29 		if(u == 0) return;
30 		fprintf(mFile,"\tsetAttr \".u\" %f;\n", u);
31 	}
setFrontTwist(double ft)32 	void setFrontTwist(double ft)
33 	{
34 		if(ft == 0) return;
35 		fprintf(mFile,"\tsetAttr \".ft\" %f;\n", ft);
36 	}
setUpTwist(double ut)37 	void setUpTwist(double ut)
38 	{
39 		if(ut == 0) return;
40 		fprintf(mFile,"\tsetAttr \".ut\" %f;\n", ut);
41 	}
setSideTwist(double st)42 	void setSideTwist(double st)
43 	{
44 		if(st == 0) return;
45 		fprintf(mFile,"\tsetAttr \".st\" %f;\n", st);
46 	}
setRotateOrder(unsigned int ro)47 	void setRotateOrder(unsigned int ro)
48 	{
49 		if(ro == 0) return;
50 		fprintf(mFile,"\tsetAttr \".ro\" %i;\n", ro);
51 	}
setPositionMarkerTime(size_t pmt_i,double pmt)52 	void setPositionMarkerTime(size_t pmt_i,double pmt)
53 	{
54 		if(pmt == 0) return;
55 		fprintf(mFile,"\tsetAttr \".pmt[%i]\" %f;\n", pmt_i,pmt);
56 	}
setPositionMarkerTime(size_t pmt_start,size_t pmt_end,double * pmt)57 	void setPositionMarkerTime(size_t pmt_start,size_t pmt_end,double* pmt)
58 	{
59 		fprintf(mFile,"\tsetAttr \".pmt[%i:%i]\" ", pmt_start,pmt_end);
60 		size_t size = (pmt_end-pmt_start)*1+1;
61 		for(size_t i=0;i<size;++i)
62 		{
63 			fprintf(mFile,"%f",pmt[i]);
64 			if(i+1<size) fprintf(mFile," ");
65 		}
66 		fprintf(mFile,";\n");
67 	}
startPositionMarkerTime(size_t pmt_start,size_t pmt_end)68 	void startPositionMarkerTime(size_t pmt_start,size_t pmt_end)const
69 	{
70 		fprintf(mFile,"\tsetAttr \".pmt[%i:%i]\"",pmt_start,pmt_end);
71 	}
appendPositionMarkerTime(double pmt)72 	void appendPositionMarkerTime(double pmt)const
73 	{
74 		fprintf(mFile," %f",pmt);
75 	}
endPositionMarkerTime()76 	void endPositionMarkerTime()const
77 	{
78 		fprintf(mFile,";\n");
79 	}
setOrientationMarkerTime(size_t omt_i,double omt)80 	void setOrientationMarkerTime(size_t omt_i,double omt)
81 	{
82 		if(omt == 0) return;
83 		fprintf(mFile,"\tsetAttr \".omt[%i]\" %f;\n", omt_i,omt);
84 	}
setOrientationMarkerTime(size_t omt_start,size_t omt_end,double * omt)85 	void setOrientationMarkerTime(size_t omt_start,size_t omt_end,double* omt)
86 	{
87 		fprintf(mFile,"\tsetAttr \".omt[%i:%i]\" ", omt_start,omt_end);
88 		size_t size = (omt_end-omt_start)*1+1;
89 		for(size_t i=0;i<size;++i)
90 		{
91 			fprintf(mFile,"%f",omt[i]);
92 			if(i+1<size) fprintf(mFile," ");
93 		}
94 		fprintf(mFile,";\n");
95 	}
startOrientationMarkerTime(size_t omt_start,size_t omt_end)96 	void startOrientationMarkerTime(size_t omt_start,size_t omt_end)const
97 	{
98 		fprintf(mFile,"\tsetAttr \".omt[%i:%i]\"",omt_start,omt_end);
99 	}
appendOrientationMarkerTime(double omt)100 	void appendOrientationMarkerTime(double omt)const
101 	{
102 		fprintf(mFile," %f",omt);
103 	}
endOrientationMarkerTime()104 	void endOrientationMarkerTime()const
105 	{
106 		fprintf(mFile,";\n");
107 	}
setFollow(bool f)108 	void setFollow(bool f)
109 	{
110 		if(f == false) return;
111 		fprintf(mFile,"\tsetAttr \".f\" %i;\n", f);
112 	}
setNormal(bool nr)113 	void setNormal(bool nr)
114 	{
115 		if(nr == false) return;
116 		fprintf(mFile,"\tsetAttr \".nr\" %i;\n", nr);
117 	}
setInverseUp(bool iu)118 	void setInverseUp(bool iu)
119 	{
120 		if(iu == false) return;
121 		fprintf(mFile,"\tsetAttr \".iu\" %i;\n", iu);
122 	}
setInverseFront(bool if_)123 	void setInverseFront(bool if_)
124 	{
125 		if(if_ == false) return;
126 		fprintf(mFile,"\tsetAttr \".if\" %i;\n", if_);
127 	}
setFrontAxis(unsigned int fa)128 	void setFrontAxis(unsigned int fa)
129 	{
130 		if(fa == 1) return;
131 		fprintf(mFile,"\tsetAttr \".fa\" %i;\n", fa);
132 	}
setUpAxis(unsigned int ua)133 	void setUpAxis(unsigned int ua)
134 	{
135 		if(ua == 2) return;
136 		fprintf(mFile,"\tsetAttr \".ua\" %i;\n", ua);
137 	}
setWorldUpType(unsigned int wut)138 	void setWorldUpType(unsigned int wut)
139 	{
140 		if(wut == 3) return;
141 		fprintf(mFile,"\tsetAttr \".wut\" %i;\n", wut);
142 	}
setWorldUpVector(const double3 & wu)143 	void setWorldUpVector(const double3& wu)
144 	{
145 		fprintf(mFile,"\tsetAttr \".wu\" -type \"double3\" ");
146 		wu.write(mFile);
147 		fprintf(mFile,";\n");
148 	}
setWorldUpVectorX(double wux)149 	void setWorldUpVectorX(double wux)
150 	{
151 		if(wux == 0.0) return;
152 		fprintf(mFile,"\tsetAttr \".wu.wux\" %f;\n", wux);
153 	}
setWorldUpVectorY(double wuy)154 	void setWorldUpVectorY(double wuy)
155 	{
156 		if(wuy == 1.0) return;
157 		fprintf(mFile,"\tsetAttr \".wu.wuy\" %f;\n", wuy);
158 	}
setWorldUpVectorZ(double wuz)159 	void setWorldUpVectorZ(double wuz)
160 	{
161 		if(wuz == 0.0) return;
162 		fprintf(mFile,"\tsetAttr \".wu.wuz\" %f;\n", wuz);
163 	}
setWorldUpMatrix(const matrix & wum)164 	void setWorldUpMatrix(const matrix& wum)
165 	{
166 		if(wum == identity) return;
167 		fprintf(mFile,"\tsetAttr \".wum\" -type \"matrix\" ");
168 		wum.write(mFile);
169 		fprintf(mFile,";\n");
170 	}
setBank(bool b)171 	void setBank(bool b)
172 	{
173 		if(b == false) return;
174 		fprintf(mFile,"\tsetAttr \".b\" %i;\n", b);
175 	}
setBankScale(double bs)176 	void setBankScale(double bs)
177 	{
178 		if(bs == 1.0) return;
179 		fprintf(mFile,"\tsetAttr \".bs\" %f;\n", bs);
180 	}
setBankLimit(double bl)181 	void setBankLimit(double bl)
182 	{
183 		if(bl == 9) return;
184 		fprintf(mFile,"\tsetAttr \".bl\" %f;\n", bl);
185 	}
setFractionMode(bool fm)186 	void setFractionMode(bool fm)
187 	{
188 		if(fm == false) return;
189 		fprintf(mFile,"\tsetAttr \".fm\" %i;\n", fm);
190 	}
getUValue()191 	void getUValue()const
192 	{
193 		fprintf(mFile,"\"%s.u\"",mName.c_str());
194 	}
getFrontTwist()195 	void getFrontTwist()const
196 	{
197 		fprintf(mFile,"\"%s.ft\"",mName.c_str());
198 	}
getUpTwist()199 	void getUpTwist()const
200 	{
201 		fprintf(mFile,"\"%s.ut\"",mName.c_str());
202 	}
getSideTwist()203 	void getSideTwist()const
204 	{
205 		fprintf(mFile,"\"%s.st\"",mName.c_str());
206 	}
getAllCoordinates()207 	void getAllCoordinates()const
208 	{
209 		fprintf(mFile,"\"%s.ac\"",mName.c_str());
210 	}
getXCoordinate()211 	void getXCoordinate()const
212 	{
213 		fprintf(mFile,"\"%s.ac.xc\"",mName.c_str());
214 	}
getYCoordinate()215 	void getYCoordinate()const
216 	{
217 		fprintf(mFile,"\"%s.ac.yc\"",mName.c_str());
218 	}
getZCoordinate()219 	void getZCoordinate()const
220 	{
221 		fprintf(mFile,"\"%s.ac.zc\"",mName.c_str());
222 	}
getOrientMatrix()223 	void getOrientMatrix()const
224 	{
225 		fprintf(mFile,"\"%s.om\"",mName.c_str());
226 	}
getRotate()227 	void getRotate()const
228 	{
229 		fprintf(mFile,"\"%s.r\"",mName.c_str());
230 	}
getRotateX()231 	void getRotateX()const
232 	{
233 		fprintf(mFile,"\"%s.r.rx\"",mName.c_str());
234 	}
getRotateY()235 	void getRotateY()const
236 	{
237 		fprintf(mFile,"\"%s.r.ry\"",mName.c_str());
238 	}
getRotateZ()239 	void getRotateZ()const
240 	{
241 		fprintf(mFile,"\"%s.r.rz\"",mName.c_str());
242 	}
getRotateOrder()243 	void getRotateOrder()const
244 	{
245 		fprintf(mFile,"\"%s.ro\"",mName.c_str());
246 	}
getFlowNode()247 	void getFlowNode()const
248 	{
249 		fprintf(mFile,"\"%s.fn\"",mName.c_str());
250 	}
getGeometryPath()251 	void getGeometryPath()const
252 	{
253 		fprintf(mFile,"\"%s.gp\"",mName.c_str());
254 	}
getPositionMarkerTime(size_t pmt_i)255 	void getPositionMarkerTime(size_t pmt_i)const
256 	{
257 		fprintf(mFile,"\"%s.pmt[%i]\"",mName.c_str(),pmt_i);
258 	}
getPositionMarkerTime()259 	void getPositionMarkerTime()const
260 	{
261 
262 		fprintf(mFile,"\"%s.pmt\"",mName.c_str());
263 	}
getOrientationMarkerTime(size_t omt_i)264 	void getOrientationMarkerTime(size_t omt_i)const
265 	{
266 		fprintf(mFile,"\"%s.omt[%i]\"",mName.c_str(),omt_i);
267 	}
getOrientationMarkerTime()268 	void getOrientationMarkerTime()const
269 	{
270 
271 		fprintf(mFile,"\"%s.omt\"",mName.c_str());
272 	}
getNormal()273 	void getNormal()const
274 	{
275 		fprintf(mFile,"\"%s.nr\"",mName.c_str());
276 	}
getInverseUp()277 	void getInverseUp()const
278 	{
279 		fprintf(mFile,"\"%s.iu\"",mName.c_str());
280 	}
getInverseFront()281 	void getInverseFront()const
282 	{
283 		fprintf(mFile,"\"%s.if\"",mName.c_str());
284 	}
getFrontAxis()285 	void getFrontAxis()const
286 	{
287 		fprintf(mFile,"\"%s.fa\"",mName.c_str());
288 	}
getUpAxis()289 	void getUpAxis()const
290 	{
291 		fprintf(mFile,"\"%s.ua\"",mName.c_str());
292 	}
getWorldUpType()293 	void getWorldUpType()const
294 	{
295 		fprintf(mFile,"\"%s.wut\"",mName.c_str());
296 	}
getWorldUpVector()297 	void getWorldUpVector()const
298 	{
299 		fprintf(mFile,"\"%s.wu\"",mName.c_str());
300 	}
getWorldUpVectorX()301 	void getWorldUpVectorX()const
302 	{
303 		fprintf(mFile,"\"%s.wu.wux\"",mName.c_str());
304 	}
getWorldUpVectorY()305 	void getWorldUpVectorY()const
306 	{
307 		fprintf(mFile,"\"%s.wu.wuy\"",mName.c_str());
308 	}
getWorldUpVectorZ()309 	void getWorldUpVectorZ()const
310 	{
311 		fprintf(mFile,"\"%s.wu.wuz\"",mName.c_str());
312 	}
getWorldUpMatrix()313 	void getWorldUpMatrix()const
314 	{
315 		fprintf(mFile,"\"%s.wum\"",mName.c_str());
316 	}
getBank()317 	void getBank()const
318 	{
319 		fprintf(mFile,"\"%s.b\"",mName.c_str());
320 	}
getBankScale()321 	void getBankScale()const
322 	{
323 		fprintf(mFile,"\"%s.bs\"",mName.c_str());
324 	}
getBankLimit()325 	void getBankLimit()const
326 	{
327 		fprintf(mFile,"\"%s.bl\"",mName.c_str());
328 	}
329 protected:
330 	MotionPath(FILE* file,const std::string& name,const std::string& parent,const std::string& nodeType,bool shared=false,bool create=true)
DependNode(file,name,parent,nodeType,shared,create)331 		:DependNode(file, name, parent, nodeType, shared, create) {}
332 
333 };
334 }//namespace MayaDM
335 #endif//__MayaDM_MOTIONPATH_H__
336