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_TWEAK_H__ 11 #define __MayaDM_TWEAK_H__ 12 #include "MayaDMTypes.h" 13 #include "MayaDMConnectables.h" 14 #include "MayaDMGeometryFilter.h" 15 namespace MayaDM 16 { 17 class Tweak : public GeometryFilter 18 { 19 public: 20 struct Plist{ 21 double3* controlPoints; 22 size_t nbControlPoints; writePlist23 void write(FILE* file) const 24 { 25 for (size_t i = 0; i<nbControlPoints; ++i) 26 { 27 controlPoints[i].write(file); 28 if (i + 1<nbControlPoints) fprintf(file, " "); 29 } 30 } 31 }; 32 struct Vlist{ 33 float3* vertex; 34 size_t nbVertex; writeVlist35 void write(FILE* file) const 36 { 37 for (size_t i = 0; i<nbVertex; ++i) 38 { 39 vertex[i].write(file); 40 if (i + 1<nbVertex) fprintf(file, " "); 41 } 42 } 43 }; 44 public: 45 Tweak()46 Tweak():GeometryFilter(){} 47 Tweak(FILE* file,const std::string& name,const std::string& parent="",bool shared=false,bool create=true) 48 :GeometryFilter(file, name, parent, "tweak", shared, create){} ~Tweak()49 virtual ~Tweak(){} 50 setRelativeTweak(bool rtw)51 void setRelativeTweak(bool rtw) 52 { 53 if(rtw == true) return; 54 fprintf(mFile,"\tsetAttr \".rtw\" %i;\n", rtw); 55 } setPlist(size_t pl_i,const Plist & pl)56 void setPlist(size_t pl_i,const Plist& pl) 57 { 58 fprintf(mFile,"\tsetAttr \".pl[%i]\" ",pl_i); 59 pl.write(mFile); 60 fprintf(mFile,";\n"); 61 } setPlist(size_t pl_start,size_t pl_end,Plist * pl)62 void setPlist(size_t pl_start,size_t pl_end,Plist* pl) 63 { 64 fprintf(mFile,"\tsetAttr \".pl[%i:%i]\" ", pl_start,pl_end); 65 size_t size = (pl_end-pl_start)*1+1; 66 for(size_t i=0;i<size;++i) 67 { 68 pl[i].write(mFile); 69 fprintf(mFile,"\n"); 70 } 71 fprintf(mFile,";\n"); 72 } startPlist(size_t pl_start,size_t pl_end)73 void startPlist(size_t pl_start,size_t pl_end)const 74 { 75 fprintf(mFile,"\tsetAttr \".pl[%i:%i]\"",pl_start,pl_end); 76 fprintf(mFile," -type \"Plist\" "); 77 } appendPlist(const Plist & pl)78 void appendPlist(const Plist& pl)const 79 { 80 fprintf(mFile," "); 81 pl.write(mFile); 82 } endPlist()83 void endPlist()const 84 { 85 fprintf(mFile,";\n"); 86 } setControlPoints(size_t pl_i,size_t cp_i,const double3 & cp)87 void setControlPoints(size_t pl_i,size_t cp_i,const double3& cp) 88 { 89 fprintf(mFile,"\tsetAttr \".pl[%i].cp[%i]\" -type \"double3\" ",pl_i,cp_i); 90 cp.write(mFile); 91 fprintf(mFile,";\n"); 92 } setControlPoints(size_t pl_i,size_t cp_start,size_t cp_end,double * cp)93 void setControlPoints(size_t pl_i,size_t cp_start,size_t cp_end,double* cp) 94 { 95 fprintf(mFile,"\tsetAttr \".pl[%i].cp[%i:%i]\" ", pl_i,cp_start,cp_end); 96 size_t size = (cp_end-cp_start)*3+3; 97 for(size_t i=0;i<size;++i) 98 { 99 fprintf(mFile,"%f",cp[i]); 100 if(i+1<size) fprintf(mFile," "); 101 } 102 fprintf(mFile,";\n"); 103 } startControlPoints(size_t pl_i,size_t cp_start,size_t cp_end)104 void startControlPoints(size_t pl_i,size_t cp_start,size_t cp_end)const 105 { 106 fprintf(mFile,"\tsetAttr \".pl[%i].cp[%i:%i]\"",pl_i,cp_start,cp_end); 107 } appendControlPoints(double cp)108 void appendControlPoints(double cp)const 109 { 110 fprintf(mFile," %f",cp); 111 } endControlPoints()112 void endControlPoints()const 113 { 114 fprintf(mFile,";\n"); 115 } setXValue(size_t pl_i,size_t cp_i,double xv)116 void setXValue(size_t pl_i,size_t cp_i,double xv) 117 { 118 if(xv == 0) return; 119 fprintf(mFile,"\tsetAttr \".pl[%i].cp[%i].xv\" %f;\n", pl_i,cp_i,xv); 120 } setYValue(size_t pl_i,size_t cp_i,double yv)121 void setYValue(size_t pl_i,size_t cp_i,double yv) 122 { 123 if(yv == 0) return; 124 fprintf(mFile,"\tsetAttr \".pl[%i].cp[%i].yv\" %f;\n", pl_i,cp_i,yv); 125 } setZValue(size_t pl_i,size_t cp_i,double zv)126 void setZValue(size_t pl_i,size_t cp_i,double zv) 127 { 128 if(zv == 0) return; 129 fprintf(mFile,"\tsetAttr \".pl[%i].cp[%i].zv\" %f;\n", pl_i,cp_i,zv); 130 } setVlist(size_t vl_i,const Vlist & vl)131 void setVlist(size_t vl_i,const Vlist& vl) 132 { 133 fprintf(mFile,"\tsetAttr \".vl[%i]\" ",vl_i); 134 vl.write(mFile); 135 fprintf(mFile,";\n"); 136 } setVlist(size_t vl_start,size_t vl_end,Vlist * vl)137 void setVlist(size_t vl_start,size_t vl_end,Vlist* vl) 138 { 139 fprintf(mFile,"\tsetAttr \".vl[%i:%i]\" ", vl_start,vl_end); 140 size_t size = (vl_end-vl_start)*1+1; 141 for(size_t i=0;i<size;++i) 142 { 143 vl[i].write(mFile); 144 fprintf(mFile,"\n"); 145 } 146 fprintf(mFile,";\n"); 147 } startVlist(size_t vl_start,size_t vl_end)148 void startVlist(size_t vl_start,size_t vl_end)const 149 { 150 fprintf(mFile,"\tsetAttr \".vl[%i:%i]\"",vl_start,vl_end); 151 fprintf(mFile," -type \"Vlist\" "); 152 } appendVlist(const Vlist & vl)153 void appendVlist(const Vlist& vl)const 154 { 155 fprintf(mFile," "); 156 vl.write(mFile); 157 } endVlist()158 void endVlist()const 159 { 160 fprintf(mFile,";\n"); 161 } setVertex(size_t vl_i,size_t vt_i,const float3 & vt)162 void setVertex(size_t vl_i,size_t vt_i,const float3& vt) 163 { 164 fprintf(mFile,"\tsetAttr \".vl[%i].vt[%i]\" -type \"float3\" ",vl_i,vt_i); 165 vt.write(mFile); 166 fprintf(mFile,";\n"); 167 } setVertex(size_t vl_i,size_t vt_start,size_t vt_end,float * vt)168 void setVertex(size_t vl_i,size_t vt_start,size_t vt_end,float* vt) 169 { 170 fprintf(mFile,"\tsetAttr \".vl[%i].vt[%i:%i]\" ", vl_i,vt_start,vt_end); 171 size_t size = (vt_end-vt_start)*3+3; 172 for(size_t i=0;i<size;++i) 173 { 174 fprintf(mFile,"%f",vt[i]); 175 if(i+1<size) fprintf(mFile," "); 176 } 177 fprintf(mFile,";\n"); 178 } startVertex(size_t vl_i,size_t vt_start,size_t vt_end)179 void startVertex(size_t vl_i,size_t vt_start,size_t vt_end)const 180 { 181 fprintf(mFile,"\tsetAttr \".vl[%i].vt[%i:%i]\"",vl_i,vt_start,vt_end); 182 } appendVertex(float vt)183 void appendVertex(float vt)const 184 { 185 fprintf(mFile," %f",vt); 186 } endVertex()187 void endVertex()const 188 { 189 fprintf(mFile,";\n"); 190 } setXVertex(size_t vl_i,size_t vt_i,float vx)191 void setXVertex(size_t vl_i,size_t vt_i,float vx) 192 { 193 if(vx == 0) return; 194 fprintf(mFile,"\tsetAttr \".vl[%i].vt[%i].vx\" %f;\n", vl_i,vt_i,vx); 195 } setYVertex(size_t vl_i,size_t vt_i,float vy)196 void setYVertex(size_t vl_i,size_t vt_i,float vy) 197 { 198 if(vy == 0) return; 199 fprintf(mFile,"\tsetAttr \".vl[%i].vt[%i].vy\" %f;\n", vl_i,vt_i,vy); 200 } setZVertex(size_t vl_i,size_t vt_i,float vz)201 void setZVertex(size_t vl_i,size_t vt_i,float vz) 202 { 203 if(vz == 0) return; 204 fprintf(mFile,"\tsetAttr \".vl[%i].vt[%i].vz\" %f;\n", vl_i,vt_i,vz); 205 } getRelativeTweak()206 void getRelativeTweak()const 207 { 208 fprintf(mFile,"\"%s.rtw\"",mName.c_str()); 209 } getPlist(size_t pl_i)210 void getPlist(size_t pl_i)const 211 { 212 fprintf(mFile,"\"%s.pl[%i]\"",mName.c_str(),pl_i); 213 } getPlist()214 void getPlist()const 215 { 216 217 fprintf(mFile,"\"%s.pl\"",mName.c_str()); 218 } getControlPoints(size_t pl_i,size_t cp_i)219 void getControlPoints(size_t pl_i,size_t cp_i)const 220 { 221 fprintf(mFile,"\"%s.pl[%i].cp[%i]\"",mName.c_str(),pl_i,cp_i); 222 } getControlPoints(size_t cp_i)223 void getControlPoints(size_t cp_i)const 224 { 225 226 fprintf(mFile,"\"%s.pl.cp[%i]\"",mName.c_str(),cp_i); 227 } getXValue(size_t pl_i,size_t cp_i)228 void getXValue(size_t pl_i,size_t cp_i)const 229 { 230 fprintf(mFile,"\"%s.pl[%i].cp[%i].xv\"",mName.c_str(),pl_i,cp_i); 231 } getXValue(size_t cp_i)232 void getXValue(size_t cp_i)const 233 { 234 235 fprintf(mFile,"\"%s.pl.cp[%i].xv\"",mName.c_str(),cp_i); 236 } getYValue(size_t pl_i,size_t cp_i)237 void getYValue(size_t pl_i,size_t cp_i)const 238 { 239 fprintf(mFile,"\"%s.pl[%i].cp[%i].yv\"",mName.c_str(),pl_i,cp_i); 240 } getYValue(size_t cp_i)241 void getYValue(size_t cp_i)const 242 { 243 244 fprintf(mFile,"\"%s.pl.cp[%i].yv\"",mName.c_str(),cp_i); 245 } getZValue(size_t pl_i,size_t cp_i)246 void getZValue(size_t pl_i,size_t cp_i)const 247 { 248 fprintf(mFile,"\"%s.pl[%i].cp[%i].zv\"",mName.c_str(),pl_i,cp_i); 249 } getZValue(size_t cp_i)250 void getZValue(size_t cp_i)const 251 { 252 253 fprintf(mFile,"\"%s.pl.cp[%i].zv\"",mName.c_str(),cp_i); 254 } getVlist(size_t vl_i)255 void getVlist(size_t vl_i)const 256 { 257 fprintf(mFile,"\"%s.vl[%i]\"",mName.c_str(),vl_i); 258 } getVlist()259 void getVlist()const 260 { 261 262 fprintf(mFile,"\"%s.vl\"",mName.c_str()); 263 } getVertex(size_t vl_i,size_t vt_i)264 void getVertex(size_t vl_i,size_t vt_i)const 265 { 266 fprintf(mFile,"\"%s.vl[%i].vt[%i]\"",mName.c_str(),vl_i,vt_i); 267 } getVertex(size_t vt_i)268 void getVertex(size_t vt_i)const 269 { 270 271 fprintf(mFile,"\"%s.vl.vt[%i]\"",mName.c_str(),vt_i); 272 } getXVertex(size_t vl_i,size_t vt_i)273 void getXVertex(size_t vl_i,size_t vt_i)const 274 { 275 fprintf(mFile,"\"%s.vl[%i].vt[%i].vx\"",mName.c_str(),vl_i,vt_i); 276 } getXVertex(size_t vt_i)277 void getXVertex(size_t vt_i)const 278 { 279 280 fprintf(mFile,"\"%s.vl.vt[%i].vx\"",mName.c_str(),vt_i); 281 } getYVertex(size_t vl_i,size_t vt_i)282 void getYVertex(size_t vl_i,size_t vt_i)const 283 { 284 fprintf(mFile,"\"%s.vl[%i].vt[%i].vy\"",mName.c_str(),vl_i,vt_i); 285 } getYVertex(size_t vt_i)286 void getYVertex(size_t vt_i)const 287 { 288 289 fprintf(mFile,"\"%s.vl.vt[%i].vy\"",mName.c_str(),vt_i); 290 } getZVertex(size_t vl_i,size_t vt_i)291 void getZVertex(size_t vl_i,size_t vt_i)const 292 { 293 fprintf(mFile,"\"%s.vl[%i].vt[%i].vz\"",mName.c_str(),vl_i,vt_i); 294 } getZVertex(size_t vt_i)295 void getZVertex(size_t vt_i)const 296 { 297 298 fprintf(mFile,"\"%s.vl.vt[%i].vz\"",mName.c_str(),vt_i); 299 } 300 protected: 301 Tweak(FILE* file,const std::string& name,const std::string& parent,const std::string& nodeType,bool shared=false,bool create=true) GeometryFilter(file,name,parent,nodeType,shared,create)302 :GeometryFilter(file, name, parent, nodeType, shared, create) {} 303 304 }; 305 }//namespace MayaDM 306 #endif//__MayaDM_TWEAK_H__ 307