00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef __SOP_CaptureRegion__
00020 #define __SOP_CaptureRegion__
00021
00022 #include "SOP_API.h"
00023 #include "SOP_Node.h"
00024
00025 class SOP_API SOP_CaptureRegion : public SOP_Node
00026 {
00027 public:
00028
00029
00030 static UT_XformOrder CR_XFORM_ORDER;
00031
00032 SOP_CaptureRegion(OP_Network *net, const char *name,
00033 OP_Operator *entry);
00034 virtual ~SOP_CaptureRegion();
00035
00036 static OP_Node *myConstructor(OP_Network *net, const char *name,
00037 OP_Operator *entry);
00038 static PRM_Template myTemplateList[];
00039 static PRM_Template myObsoleteList[];
00040
00041
00042 virtual void resolveObsoleteParms(PRM_ParmList *obsolete_parms);
00043
00044
00045
00046
00047
00048
00049
00050 void setCaptureParameters(OP_Context &context,
00051 UT_String &errors);
00052
00053
00054 void copyRegularToCaptureParameters( OP_Context &context );
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072 void setRigAdjustment(OP_Context &context,
00073 const UT_DMatrix4 &bone_inv_anim,
00074 const UT_DMatrix4 &bone_capture,
00075 UT_String &errors);
00076
00077
00078 void getCaptureData( float t, UT_Matrix4 &xform, float *atr_data );
00079
00080
00081
00082 void synchronizeCaptureToDeform(
00083 OP_Context &context,
00084 const UT_DMatrix4 &bone_anim,
00085 const UT_DMatrix4 &bone_inv_capture,
00086 UT_String &errors);
00087
00088
00089
00090 void synchronizeDeformToCapture(
00091 OP_Context &context,
00092 const UT_DMatrix4 &bone_inv_anim,
00093 const UT_DMatrix4 &bone_capture,
00094 UT_String &errors);
00095
00096
00097 void getCaptureXform( OP_Context &context, UT_DMatrix4 &xform );
00098 void setCaptureXform( OP_Context &context, const UT_DMatrix4 &xform);
00099
00100
00101 void getDeformXform( OP_Context &context, UT_DMatrix4 &xform );
00102 void setDeformXform( OP_Context &context, const UT_DMatrix4 &xform );
00103
00104
00105
00106
00107
00108
00109
00110 void getRigAdjustXform( OP_Context & context, UT_DMatrix4 &xform );
00111
00112
00113 enum SOP_Indices
00114 {
00115 I_SWITCHER = 0,
00116
00117 I_ANIM_SWITCHER,
00118 I_AXIS,
00119 I_CENTER,
00120 I_ORIENT,
00121 I_SQUASH,
00122 I_TOP_H,
00123 I_TOP_CAP,
00124 I_BOT_H,
00125 I_BOT_CAP,
00126 I_ZFACTOR,
00127
00128 I_RIG_ADJUST_T,
00129 I_RIG_ADJUST_R,
00130 I_RIG_ADJUST_S,
00131 I_RIG_ADJUST_ZFACTOR,
00132
00133 I_C_AXIS,
00134 I_C_CENTER,
00135 I_C_ORIENT,
00136 I_C_SQUASH,
00137 I_C_TOP_H,
00138 I_C_TOP_CAP,
00139 I_C_BOT_H,
00140 I_C_BOT_CAP,
00141 I_C_ZFACTOR,
00142 I_C_RANGE_W,
00143
00144 I_COLOR,
00145 I_N_SOPCAPTURE_INDICES
00146 };
00147
00148 float COLORR(float t) { return evalFloat( I_COLOR, 0, t); }
00149 float COLORG(float t) { return evalFloat( I_COLOR, 1, t); }
00150 float COLORB(float t) { return evalFloat( I_COLOR, 2, t); }
00151
00152
00153 protected:
00154 virtual OP_ERROR cookMySop( OP_Context &context );
00155
00156 private:
00157
00158 void getParameters( float t,
00159 float &tx, float &ty, float &tz,
00160 float &rx, float &ry, float &rz,
00161 float &squash_x, float &squash_y, float &squash_z,
00162 float &top_tube_sy, float &bot_tube_sy,
00163 float &top_x, float &top_y, float &top_z,
00164 float &bot_x, float &bot_y, float &bot_z,
00165 bool capture );
00166
00167
00168 bool createChannelWithReference(const char* ch_name,
00169 const char* ref,
00170 CH_ExprLanguage language);
00171 bool updateObsoleteParm(PRM_ParmList *obsolete_parms,
00172 const char *old_parm_name, int vi,
00173 const char *new_parm_name,
00174 const char *new_chan_name,
00175 const char *find_expr,
00176 const char *replace_expr,
00177 float scale);
00178
00179
00180 void setDeformToCaptureTube( OP_Context &context );
00181 void setCaptureToDeformTube( OP_Context &context );
00182
00183
00184 void setRigAdjustXform(OP_Context &context,
00185 const UT_DMatrix4 &xform,
00186 UT_String &errors);
00187
00188
00189 void updateRigAdjusmentZFactor( OP_Context &context );
00190
00191
00192 int AXIS() { return evalInt ( I_AXIS, 0, 0); }
00193 float CENTERX(float t) { return evalFloat( I_CENTER, 0, t); }
00194 float CENTERY(float t) { return evalFloat( I_CENTER, 1, t); }
00195 float CENTERZ(float t) { return evalFloat( I_CENTER, 2, t); }
00196 float ORIENTX(float t) { return evalFloat( I_ORIENT, 0, t); }
00197 float ORIENTY(float t) { return evalFloat( I_ORIENT, 1, t); }
00198 float ORIENTZ(float t) { return evalFloat( I_ORIENT, 2, t); }
00199 float SQUASHX(float t) { return evalFloat( I_SQUASH, 0, t); }
00200 float SQUASHY(float t) { return evalFloat( I_SQUASH, 1, t); }
00201 float SQUASHZ(float t) { return evalFloat( I_SQUASH, 2, t); }
00202 float TOPHEIGHT(float t) { return evalFloat( I_TOP_H, 0, t); }
00203 float TOPX(float t) { return evalFloat( I_TOP_CAP, 0, t); }
00204 float TOPY(float t) { return evalFloat( I_TOP_CAP, 1, t); }
00205 float TOPZ(float t) { return evalFloat( I_TOP_CAP, 2, t); }
00206 float BOTHEIGHT(float t) { return evalFloat( I_BOT_H, 0, t); }
00207 float BOTX(float t) { return evalFloat( I_BOT_CAP, 0, t); }
00208 float BOTY(float t) { return evalFloat( I_BOT_CAP, 1, t); }
00209 float BOTZ(float t) { return evalFloat( I_BOT_CAP, 2, t); }
00210 float ZFACTOR(float t) { return evalFloat( I_ZFACTOR, 0, t); }
00211
00212 float RIGADJUSTTX(float t) {return evalFloat( I_RIG_ADJUST_T, 0, t);}
00213 float RIGADJUSTTY(float t) {return evalFloat( I_RIG_ADJUST_T, 1, t);}
00214 float RIGADJUSTTZ(float t) {return evalFloat( I_RIG_ADJUST_T, 2, t);}
00215 float RIGADJUSTRX(float t) {return evalFloat( I_RIG_ADJUST_R, 0, t);}
00216 float RIGADJUSTRY(float t) {return evalFloat( I_RIG_ADJUST_R, 1, t);}
00217 float RIGADJUSTRZ(float t) {return evalFloat( I_RIG_ADJUST_R, 2, t);}
00218 float RIGADJUSTSX(float t) {return evalFloat( I_RIG_ADJUST_S, 0, t);}
00219 float RIGADJUSTSY(float t) {return evalFloat( I_RIG_ADJUST_S, 1, t);}
00220 float RIGADJUSTSZ(float t) {return evalFloat( I_RIG_ADJUST_S, 2, t);}
00221 float RIGADJUSTZFACTOR(float t)
00222 {return evalFloat( I_RIG_ADJUST_ZFACTOR, 0, t);}
00223
00224 int C_AXIS() { return evalInt ( I_C_AXIS, 0, 0); }
00225 float C_CENTERX(float t) { return evalFloat( I_C_CENTER, 0, t); }
00226 float C_CENTERY(float t) { return evalFloat( I_C_CENTER, 1, t); }
00227 float C_CENTERZ(float t) { return evalFloat( I_C_CENTER, 2, t); }
00228 float C_ORIENTX(float t) { return evalFloat( I_C_ORIENT, 0, t); }
00229 float C_ORIENTY(float t) { return evalFloat( I_C_ORIENT, 1, t); }
00230 float C_ORIENTZ(float t) { return evalFloat( I_C_ORIENT, 2, t); }
00231 float C_SQUASHX(float t) { return evalFloat( I_C_SQUASH, 0, t); }
00232 float C_SQUASHY(float t) { return evalFloat( I_C_SQUASH, 1, t); }
00233 float C_SQUASHZ(float t) { return evalFloat( I_C_SQUASH, 2, t); }
00234 float C_TOPHEIGHT(float t){ return evalFloat( I_C_TOP_H, 0, t); }
00235 float C_TOPX(float t) { return evalFloat( I_C_TOP_CAP, 0, t); }
00236 float C_TOPY(float t) { return evalFloat( I_C_TOP_CAP, 1, t); }
00237 float C_TOPZ(float t) { return evalFloat( I_C_TOP_CAP, 2, t); }
00238 float C_BOTHEIGHT(float t){ return evalFloat( I_C_BOT_H, 0, t); }
00239 float C_BOTX(float t) { return evalFloat( I_C_BOT_CAP, 0, t); }
00240 float C_BOTY(float t) { return evalFloat( I_C_BOT_CAP, 1, t); }
00241 float C_BOTZ(float t) { return evalFloat( I_C_BOT_CAP, 2, t); }
00242 float C_ZFACTOR(float t){ return evalFloat(I_C_ZFACTOR, 0, t); }
00243 float C_INWEIGHT(float t) { return evalFloat( I_C_RANGE_W, 0, t); }
00244 float C_OUTWEIGHT(float t){ return evalFloat( I_C_RANGE_W, 1, t); }
00245
00246
00247 void setAXIS( int v) { setChRefInt ( I_AXIS, 0, 0, v); }
00248 void setCENTER(const UT_Vector3 &v, float t)
00249 {
00250 setChRefFloat( I_CENTER, 0, t, v.x());
00251 setChRefFloat( I_CENTER, 1, t, v.y());
00252 setChRefFloat( I_CENTER, 2, t, v.z());
00253 }
00254 void setORIENT(const UT_Vector3 &v, float t)
00255 {
00256 setChRefFloat( I_ORIENT, 0, t, v.x());
00257 setChRefFloat( I_ORIENT, 1, t, v.y());
00258 setChRefFloat( I_ORIENT, 2, t, v.z());
00259 }
00260 void setSQUASH(const UT_Vector3 &v, float t)
00261 {
00262 setChRefFloat( I_SQUASH, 0, t, v.x());
00263 setChRefFloat( I_SQUASH, 1, t, v.y());
00264 setChRefFloat( I_SQUASH, 2, t, v.z());
00265 }
00266 void setTOPHEIGHT(float v, float t)
00267 {
00268 setChRefFloat( I_TOP_H, 0, t, v);
00269 }
00270 void setTOP(const UT_Vector3 &v, float t)
00271 {
00272 setChRefFloat( I_TOP_CAP, 0, t, v.x());
00273 setChRefFloat( I_TOP_CAP, 1, t, v.y());
00274 setChRefFloat( I_TOP_CAP, 2, t, v.z());
00275 }
00276 void setBOTHEIGHT(float v, float t)
00277 {
00278 setChRefFloat( I_BOT_H, 0, t, v);
00279 }
00280 void setBOT(const UT_Vector3 &v, float t)
00281 {
00282 setChRefFloat( I_BOT_CAP, 0, t, v.x());
00283 setChRefFloat( I_BOT_CAP, 1, t, v.y());
00284 setChRefFloat( I_BOT_CAP, 2, t, v.z());
00285 }
00286 void setZFACTOR(float v, float t)
00287 {
00288 setChRefFloat( I_ZFACTOR, 0, t, v);
00289 }
00290
00291
00292
00293 void setC_AXIS( int v) { setChRefInt ( I_C_AXIS, 0, 0, v); }
00294 void setC_CENTER(const UT_Vector3 &v, float t)
00295 {
00296 setChRefFloat( I_C_CENTER, 0, t, v.x());
00297 setChRefFloat( I_C_CENTER, 1, t, v.y());
00298 setChRefFloat( I_C_CENTER, 2, t, v.z());
00299 }
00300 void setC_ORIENT(const UT_Vector3 &v, float t)
00301 {
00302 setChRefFloat( I_C_ORIENT, 0, t, v.x());
00303 setChRefFloat( I_C_ORIENT, 1, t, v.y());
00304 setChRefFloat( I_C_ORIENT, 2, t, v.z());
00305 }
00306 void setC_SQUASH(const UT_Vector3 &v, float t)
00307 {
00308 setChRefFloat( I_C_SQUASH, 0, t, v.x());
00309 setChRefFloat( I_C_SQUASH, 1, t, v.y());
00310 setChRefFloat( I_C_SQUASH, 2, t, v.z());
00311 }
00312 void setC_TOPHEIGHT(float v, float t)
00313 {
00314 setChRefFloat( I_C_TOP_H, 0, t, v);
00315 }
00316 void setC_TOP(const UT_Vector3 &v, float t)
00317 {
00318 setChRefFloat( I_C_TOP_CAP, 0, t,v.x());
00319 setChRefFloat( I_C_TOP_CAP, 1, t,v.y());
00320 setChRefFloat( I_C_TOP_CAP, 2, t,v.z());
00321 }
00322 void setC_BOTHEIGHT(float v, float t)
00323 {
00324 setChRefFloat( I_C_BOT_H, 0, t, v);
00325 }
00326 void setC_BOT(const UT_Vector3 &v, float t)
00327 {
00328 setChRefFloat( I_C_BOT_CAP, 0, t,v.x());
00329 setChRefFloat( I_C_BOT_CAP, 1, t,v.y());
00330 setChRefFloat( I_C_BOT_CAP, 2, t,v.z());
00331 }
00332 void setC_ZFACTOR(float v, float t)
00333 {
00334 setChRefFloat( I_C_ZFACTOR, 0, t, v);
00335 }
00336
00337 void setRIGADJUSTT(const UT_Vector3 &v, float t)
00338 {
00339 setChRefFloat(I_RIG_ADJUST_T,0,t,v.x());
00340 setChRefFloat(I_RIG_ADJUST_T,1,t,v.y());
00341 setChRefFloat(I_RIG_ADJUST_T,2,t,v.z());
00342 }
00343 void setRIGADJUSTR(const UT_Vector3 &v, float t)
00344 {
00345 setChRefFloat(I_RIG_ADJUST_R,0,t,v.x());
00346 setChRefFloat(I_RIG_ADJUST_R,1,t,v.y());
00347 setChRefFloat(I_RIG_ADJUST_R,2,t,v.z());
00348 }
00349 void setRIGADJUSTS(const UT_Vector3 &v, float t)
00350 {
00351 setChRefFloat(I_RIG_ADJUST_S,0,t,v.x());
00352 setChRefFloat(I_RIG_ADJUST_S,1,t,v.y());
00353 setChRefFloat(I_RIG_ADJUST_S,2,t,v.z());
00354 }
00355 void setRIGADJUSTZFACTOR(float v, float t)
00356 {
00357 setChRefFloat( I_RIG_ADJUST_ZFACTOR,
00358 0, t, v );
00359 }
00360
00361 };
00362
00363 #endif
00364