2
Copyright (c) 2008-2009 NetAllied Systems GmbH
4
This file is part of MayaDataModel.
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
10
#ifndef __MayaDM_SKINCLUSTER_H__
11
#define __MayaDM_SKINCLUSTER_H__
12
#include "MayaDMTypes.h"
13
#include "MayaDMConnectables.h"
14
#include "MayaDMGeometryFilter.h"
17
class SkinCluster : public GeometryFilter
22
void write(FILE* file) const
24
size_t size = sizeof(weights)/sizeof(double);
25
for(size_t i=0; i<size; ++i)
27
fprintf(file,"%f", weights[i]);
28
if(i+1<size) fprintf(file," ");
34
SkinCluster():GeometryFilter(){}
35
SkinCluster(FILE* file,const std::string& name,const std::string& parent="",bool shared=false,bool create=true)
36
:GeometryFilter(file, name, parent, "skinCluster", shared, create){}
37
virtual ~SkinCluster(){}
39
void setWeightList(size_t wl_i,const WeightList& wl)
41
fprintf(mFile,"\tsetAttr \".wl[%i]\" ",wl_i);
45
void setWeightList(size_t wl_start,size_t wl_end,WeightList* wl)
47
fprintf(mFile,"\tsetAttr \".wl[%i:%i]\" ", wl_start,wl_end);
48
size_t size = (wl_end-wl_start)*1+1;
49
for(size_t i=0;i<size;++i)
56
void startWeightList(size_t wl_start,size_t wl_end)const
58
fprintf(mFile,"\tsetAttr \".wl[%i:%i]\"",wl_start,wl_end);
59
fprintf(mFile," -type \"WeightList\" ");
61
void appendWeightList(const WeightList& wl)const
66
void endWeightList()const
70
void setWeights(size_t wl_i,size_t w_i,double w)
73
fprintf(mFile,"\tsetAttr \".wl[%i].w[%i]\" %f;\n", wl_i,w_i,w);
75
void setWeights(size_t wl_i,size_t w_start,size_t w_end,double* w)
77
fprintf(mFile,"\tsetAttr \".wl[%i].w[%i:%i]\" ", wl_i,w_start,w_end);
78
size_t size = (w_end-w_start)*1+1;
79
for(size_t i=0;i<size;++i)
81
fprintf(mFile,"%f",w[i]);
82
if(i+1<size) fprintf(mFile," ");
86
void startWeights(size_t wl_i,size_t w_start,size_t w_end)const
88
fprintf(mFile,"\tsetAttr \".wl[%i].w[%i:%i]\"",wl_i,w_start,w_end);
90
void appendWeights(double w)const
92
fprintf(mFile," %f",w);
94
void endWeights()const
98
void setBindPreMatrix(size_t pm_i,const matrix& pm)
100
if(pm == identity) return;
101
fprintf(mFile,"\tsetAttr \".pm[%i]\" -type \"matrix\" ",pm_i);
103
fprintf(mFile,";\n");
105
void setBindPreMatrix(size_t pm_start,size_t pm_end,matrix* pm)
107
fprintf(mFile,"\tsetAttr \".pm[%i:%i]\" ", pm_start,pm_end);
108
size_t size = (pm_end-pm_start)*1+1;
109
for(size_t i=0;i<size;++i)
114
fprintf(mFile,";\n");
116
void startBindPreMatrix(size_t pm_start,size_t pm_end)const
118
fprintf(mFile,"\tsetAttr \".pm[%i:%i]\"",pm_start,pm_end);
119
fprintf(mFile," -type \"matrix\" ");
121
void appendBindPreMatrix(const matrix& pm)const
126
void endBindPreMatrix()const
128
fprintf(mFile,";\n");
130
void setGeomMatrix(const matrix& gm)
132
if(gm == identity) return;
133
fprintf(mFile,"\tsetAttr \".gm\" -type \"matrix\" ");
135
fprintf(mFile,";\n");
137
void setMatrix(size_t ma_i,const matrix& ma)
139
if(ma == identity) return;
140
fprintf(mFile,"\tsetAttr \".ma[%i]\" -type \"matrix\" ",ma_i);
142
fprintf(mFile,";\n");
144
void setMatrix(size_t ma_start,size_t ma_end,matrix* ma)
146
fprintf(mFile,"\tsetAttr \".ma[%i:%i]\" ", ma_start,ma_end);
147
size_t size = (ma_end-ma_start)*1+1;
148
for(size_t i=0;i<size;++i)
153
fprintf(mFile,";\n");
155
void startMatrix(size_t ma_start,size_t ma_end)const
157
fprintf(mFile,"\tsetAttr \".ma[%i:%i]\"",ma_start,ma_end);
158
fprintf(mFile," -type \"matrix\" ");
160
void appendMatrix(const matrix& ma)const
165
void endMatrix()const
167
fprintf(mFile,";\n");
169
void setDropoff(size_t dpf_i,double dpf)
171
if(dpf == 4.0) return;
172
fprintf(mFile,"\tsetAttr \".dpf[%i]\" %f;\n", dpf_i,dpf);
174
void setDropoff(size_t dpf_start,size_t dpf_end,double* dpf)
176
fprintf(mFile,"\tsetAttr \".dpf[%i:%i]\" ", dpf_start,dpf_end);
177
size_t size = (dpf_end-dpf_start)*1+1;
178
for(size_t i=0;i<size;++i)
180
fprintf(mFile,"%f",dpf[i]);
181
if(i+1<size) fprintf(mFile," ");
183
fprintf(mFile,";\n");
185
void startDropoff(size_t dpf_start,size_t dpf_end)const
187
fprintf(mFile,"\tsetAttr \".dpf[%i:%i]\"",dpf_start,dpf_end);
189
void appendDropoff(double dpf)const
191
fprintf(mFile," %f",dpf);
193
void endDropoff()const
195
fprintf(mFile,";\n");
197
void setSmoothness(size_t smt_i,double smt)
199
if(smt == 0.0) return;
200
fprintf(mFile,"\tsetAttr \".smt[%i]\" %f;\n", smt_i,smt);
202
void setSmoothness(size_t smt_start,size_t smt_end,double* smt)
204
fprintf(mFile,"\tsetAttr \".smt[%i:%i]\" ", smt_start,smt_end);
205
size_t size = (smt_end-smt_start)*1+1;
206
for(size_t i=0;i<size;++i)
208
fprintf(mFile,"%f",smt[i]);
209
if(i+1<size) fprintf(mFile," ");
211
fprintf(mFile,";\n");
213
void startSmoothness(size_t smt_start,size_t smt_end)const
215
fprintf(mFile,"\tsetAttr \".smt[%i:%i]\"",smt_start,smt_end);
217
void appendSmoothness(double smt)const
219
fprintf(mFile," %f",smt);
221
void endSmoothness()const
223
fprintf(mFile,";\n");
225
void setLockWeights(size_t lw_i,bool lw)
227
if(lw == false) return;
228
fprintf(mFile,"\tsetAttr \".lw[%i]\" %i;\n", lw_i,lw);
230
void setLockWeights(size_t lw_start,size_t lw_end,bool* lw)
232
fprintf(mFile,"\tsetAttr \".lw[%i:%i]\" ", lw_start,lw_end);
233
size_t size = (lw_end-lw_start)*1+1;
234
for(size_t i=0;i<size;++i)
236
fprintf(mFile,"%i",lw[i]);
237
if(i+1<size) fprintf(mFile," ");
239
fprintf(mFile,";\n");
241
void startLockWeights(size_t lw_start,size_t lw_end)const
243
fprintf(mFile,"\tsetAttr \".lw[%i:%i]\"",lw_start,lw_end);
245
void appendLockWeights(bool lw)const
247
fprintf(mFile," %i",lw);
249
void endLockWeights()const
251
fprintf(mFile,";\n");
253
void setMaintainMaxInfluences(bool mmi)
255
if(mmi == false) return;
256
fprintf(mFile,"\tsetAttr \".mmi\" %i;\n", mmi);
258
void setMaxInfluences(int mi)
261
fprintf(mFile,"\tsetAttr \".mi\" %i;\n", mi);
263
void setBindMethod(int bm)
266
fprintf(mFile,"\tsetAttr \".bm\" %i;\n", bm);
268
void setPaintWeights(const doubleArray& ptw)
270
if(ptw.size == 0) return;
271
fprintf(mFile,"\tsetAttr \".ptw\" -type \"doubleArray\" ");
273
fprintf(mFile,";\n");
275
void setUseComponents(bool uc)
278
fprintf(mFile,"\tsetAttr \".uc\" %i;\n", uc);
280
void setNurbsSamples(size_t ns_i,int ns)
283
fprintf(mFile,"\tsetAttr \".ns[%i]\" %i;\n", ns_i,ns);
285
void setNurbsSamples(size_t ns_start,size_t ns_end,int* ns)
287
fprintf(mFile,"\tsetAttr \".ns[%i:%i]\" ", ns_start,ns_end);
288
size_t size = (ns_end-ns_start)*1+1;
289
for(size_t i=0;i<size;++i)
291
fprintf(mFile,"%i",ns[i]);
292
if(i+1<size) fprintf(mFile," ");
294
fprintf(mFile,";\n");
296
void startNurbsSamples(size_t ns_start,size_t ns_end)const
298
fprintf(mFile,"\tsetAttr \".ns[%i:%i]\"",ns_start,ns_end);
300
void appendNurbsSamples(int ns)const
302
fprintf(mFile," %i",ns);
304
void endNurbsSamples()const
306
fprintf(mFile,";\n");
308
void setUseComponentsMatrix(bool ucm)
310
if(ucm == false) return;
311
fprintf(mFile,"\tsetAttr \".ucm\" %i;\n", ucm);
313
void setNormalizeWeights(bool nw)
315
if(nw == true) return;
316
fprintf(mFile,"\tsetAttr \".nw\" %i;\n", nw);
318
void setDeformUserNormals(bool dun)
320
if(dun == true) return;
321
fprintf(mFile,"\tsetAttr \".dun\" %i;\n", dun);
323
void getWeightList(size_t wl_i)const
325
fprintf(mFile,"\"%s.wl[%i]\"",mName.c_str(),wl_i);
327
void getWeightList()const
330
fprintf(mFile,"\"%s.wl\"",mName.c_str());
332
void getWeights(size_t wl_i,size_t w_i)const
334
fprintf(mFile,"\"%s.wl[%i].w[%i]\"",mName.c_str(),wl_i,w_i);
336
void getWeights(size_t w_i)const
339
fprintf(mFile,"\"%s.wl.w[%i]\"",mName.c_str(),w_i);
341
void getBindPreMatrix(size_t pm_i)const
343
fprintf(mFile,"\"%s.pm[%i]\"",mName.c_str(),pm_i);
345
void getBindPreMatrix()const
348
fprintf(mFile,"\"%s.pm\"",mName.c_str());
350
void getGeomMatrix()const
352
fprintf(mFile,"\"%s.gm\"",mName.c_str());
354
void getMatrix(size_t ma_i)const
356
fprintf(mFile,"\"%s.ma[%i]\"",mName.c_str(),ma_i);
358
void getMatrix()const
361
fprintf(mFile,"\"%s.ma\"",mName.c_str());
363
void getDropoffRate()const
365
fprintf(mFile,"\"%s.dr\"",mName.c_str());
367
void getDropoff(size_t dpf_i)const
369
fprintf(mFile,"\"%s.dpf[%i]\"",mName.c_str(),dpf_i);
371
void getDropoff()const
374
fprintf(mFile,"\"%s.dpf\"",mName.c_str());
376
void getSmoothness(size_t smt_i)const
378
fprintf(mFile,"\"%s.smt[%i]\"",mName.c_str(),smt_i);
380
void getSmoothness()const
383
fprintf(mFile,"\"%s.smt\"",mName.c_str());
385
void getLockWeights(size_t lw_i)const
387
fprintf(mFile,"\"%s.lw[%i]\"",mName.c_str(),lw_i);
389
void getLockWeights()const
392
fprintf(mFile,"\"%s.lw\"",mName.c_str());
394
void getMaintainMaxInfluences()const
396
fprintf(mFile,"\"%s.mmi\"",mName.c_str());
398
void getMaxInfluences()const
400
fprintf(mFile,"\"%s.mi\"",mName.c_str());
402
void getBindMethod()const
404
fprintf(mFile,"\"%s.bm\"",mName.c_str());
406
void getDriverPoints(size_t drp_i)const
408
fprintf(mFile,"\"%s.drp[%i]\"",mName.c_str(),drp_i);
410
void getDriverPoints()const
413
fprintf(mFile,"\"%s.drp\"",mName.c_str());
415
void getBasePoints(size_t bsp_i)const
417
fprintf(mFile,"\"%s.bsp[%i]\"",mName.c_str(),bsp_i);
419
void getBasePoints()const
422
fprintf(mFile,"\"%s.bsp\"",mName.c_str());
424
void getBaseDirty()const
426
fprintf(mFile,"\"%s.bsd\"",mName.c_str());
428
void getPaintWeights()const
430
fprintf(mFile,"\"%s.ptw\"",mName.c_str());
432
void getPaintTrans()const
434
fprintf(mFile,"\"%s.ptt\"",mName.c_str());
436
void getPaintArrDirty()const
438
fprintf(mFile,"\"%s.pad\"",mName.c_str());
440
void getUseComponents()const
442
fprintf(mFile,"\"%s.uc\"",mName.c_str());
444
void getNurbsSamples(size_t ns_i)const
446
fprintf(mFile,"\"%s.ns[%i]\"",mName.c_str(),ns_i);
448
void getNurbsSamples()const
451
fprintf(mFile,"\"%s.ns\"",mName.c_str());
453
void getUseComponentsMatrix()const
455
fprintf(mFile,"\"%s.ucm\"",mName.c_str());
457
void getNormalizeWeights()const
459
fprintf(mFile,"\"%s.nw\"",mName.c_str());
461
void getDeformUserNormals()const
463
fprintf(mFile,"\"%s.dun\"",mName.c_str());
465
void getWtDrty()const
467
fprintf(mFile,"\"%s.wtd\"",mName.c_str());
469
void getBindPose()const
471
fprintf(mFile,"\"%s.bp\"",mName.c_str());
474
SkinCluster(FILE* file,const std::string& name,const std::string& parent,const std::string& nodeType,bool shared=false,bool create=true)
475
:GeometryFilter(file, name, parent, nodeType, shared, create) {}
479
#endif//__MayaDM_SKINCLUSTER_H__