00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __SOP_CaptureLayerPaint_h__
00021 #define __SOP_CaptureLayerPaint_h__
00022
00023 #include "SOP_API.h"
00024 #include <UT/UT_String.h>
00025 #include <PRM/PRM_ChoiceList.h>
00026 #include <PRM/PRM_Parm.h>
00027 #include <GU/GU_Brush.h>
00028
00029 #include "SOP_GDT.h"
00030 #include "SOP_BrushBase.h"
00031 #include "SOP_CaptureData.h"
00032 #include "SOP_CaptureLayerData.h"
00033
00034 class PRM_MenuEntry;
00035 class PRM_Name;
00036
00037
00038 enum {
00039
00040 SOP_CAPTURELAYERPAINT_GRP_IDX = SOP_GDT_GRP_IDX,
00041 SOP_CAPTURELAYERPAINT_GRPTYPE_IDX,
00042
00043 SOP_CAPTURELAYERPAINT_CAPTYPE_IDX,
00044
00045 SOP_CAPTURELAYERPAINT_SWITCHER_IDX,
00046
00047 #define SOP_CAPTURELAYERPAINT_NUM_DEFORM_PARMS (13)
00048 SOP_CAPTURELAYERPAINT_OP_IDX,
00049 SOP_CAPTURELAYERPAINT_SKELROOT_IDX,
00050 SOP_CAPTURELAYERPAINT_CAPTUREREGION_IDX,
00051 SOP_CAPTURELAYERPAINT_MAXPAINTVALUE_IDX,
00052 SOP_CAPTURELAYERPAINT_MINREDUCEVALUE_IDX,
00053 SOP_CAPTURELAYERPAINT_FLOODAPPLY_IDX,
00054 SOP_CAPTURELAYERPAINT_CLEARALL_IDX,
00055 SOP_CAPTURELAYERPAINT_FLATTEN_IDX,
00056 SOP_CAPTURELAYERPAINT_VISUALIZE_IDX,
00057 SOP_CAPTURELAYERPAINT_VISNORMALIZED_IDX,
00058 SOP_CAPTURELAYERPAINT_VISLAYER_IDX,
00059 SOP_CAPTURELAYERPAINT_VISTYPE_IDX,
00060 SOP_CAPTURELAYERPAINT_VISMODE_IDX,
00061
00062 #define SOP_CAPTURELAYERPAINT_NUM_NIB_PARMS (18)
00063 SOP_CAPTURELAYERPAINT_SHAPE_IDX,
00064 SOP_CAPTURELAYERPAINT_BITMAP_IDX,
00065 SOP_CAPTURELAYERPAINT_BITMAPCHAN_IDX,
00066 SOP_CAPTURELAYERPAINT_RAD_IDX,
00067 SOP_CAPTURELAYERPAINT_UVRAD_IDX,
00068 SOP_CAPTURELAYERPAINT_RADPRESSURE_IDX,
00069 SOP_CAPTURELAYERPAINT_USEDEPTH_IDX,
00070 SOP_CAPTURELAYERPAINT_DEPTH_IDX,
00071 SOP_CAPTURELAYERPAINT_ANGLE_IDX,
00072 SOP_CAPTURELAYERPAINT_SQUASH_IDX,
00073 SOP_CAPTURELAYERPAINT_OPAC_IDX,
00074 SOP_CAPTURELAYERPAINT_OPACPRESSURE_IDX,
00075 SOP_CAPTURELAYERPAINT_SPLATTER_IDX,
00076 SOP_CAPTURELAYERPAINT_PAPER_IDX,
00077 SOP_CAPTURELAYERPAINT_SOFTEDGE_IDX,
00078 SOP_CAPTURELAYERPAINT_KERNEL_IDX,
00079 SOP_CAPTURELAYERPAINT_UPTYPE_IDX,
00080 SOP_CAPTURELAYERPAINT_UPVECTOR_IDX,
00081
00082 #define SOP_CAPTURELAYERPAINT_NUM_SYM_PARMS (9)
00083 SOP_CAPTURELAYERPAINT_DOREFLECT_IDX,
00084 SOP_CAPTURELAYERPAINT_DOROTATION_IDX,
00085 SOP_CAPTURELAYERPAINT_SYMAXIS_IDX,
00086 SOP_CAPTURELAYERPAINT_SYMORIG_IDX,
00087 SOP_CAPTURELAYERPAINT_SYMROT_IDX,
00088 SOP_CAPTURELAYERPAINT_SYMDIST_IDX,
00089 SOP_CAPTURELAYERPAINT_DOUVREFLECT_IDX,
00090 SOP_CAPTURELAYERPAINT_SYMUVORIG_IDX,
00091 SOP_CAPTURELAYERPAINT_SYMUVANGLE_IDX,
00092
00093 #define SOP_CAPTURELAYERPAINT_NUM_RAY_PARMS (10)
00094 SOP_CAPTURELAYERPAINT_PROJTYPE_IDX,
00095 SOP_CAPTURELAYERPAINT_USECONNECTIVITY_IDX,
00096 SOP_CAPTURELAYERPAINT_REALTIME_IDX,
00097 SOP_CAPTURELAYERPAINT_RAY_ORIENT_IDX,
00098 SOP_CAPTURELAYERPAINT_RAY_HITPOS_IDX,
00099 SOP_CAPTURELAYERPAINT_RAY_HITPRIM_IDX,
00100 SOP_CAPTURELAYERPAINT_RAY_HITUV_IDX,
00101 SOP_CAPTURELAYERPAINT_RAY_HITPRESSURE_IDX,
00102 SOP_CAPTURELAYERPAINT_RAY_HITPT_IDX,
00103 SOP_CAPTURELAYERPAINT_RAY_EVENT_IDX
00104 };
00105
00106 class SOP_API SOP_CaptureLayerPaint : public SOP_BrushBase
00107 {
00108 public:
00109 SOP_CaptureLayerPaint(OP_Network *net, const char *name, OP_Operator *entry);
00110 virtual ~SOP_CaptureLayerPaint();
00111
00112 virtual unsigned disableParms();
00113
00114 static OP_Node *myConstructor(OP_Network *net,
00115 const char *name,
00116 OP_Operator *entry);
00117
00118 static PRM_Template myTemplateList[];
00119 static PRM_Template myObsoleteList[];
00120
00121 virtual void setAccumulateStencil(bool) {}
00122
00123 virtual void setRayOrigin(const UT_Vector3 &orig, float t)
00124 {
00125 setFloat(SOP_CAPTURELAYERPAINT_RAY_HITPOS_IDX, 0, t, orig.x());
00126 setFloat(SOP_CAPTURELAYERPAINT_RAY_HITPOS_IDX, 1, t, orig.y());
00127 setFloat(SOP_CAPTURELAYERPAINT_RAY_HITPOS_IDX, 2, t, orig.z());
00128 }
00129 virtual void setRayOrientation(const UT_Vector3 &orient, float t)
00130 {
00131 setFloat(SOP_CAPTURELAYERPAINT_RAY_ORIENT_IDX, 0, t,orient.x());
00132 setFloat(SOP_CAPTURELAYERPAINT_RAY_ORIENT_IDX, 1, t,orient.y());
00133 setFloat(SOP_CAPTURELAYERPAINT_RAY_ORIENT_IDX, 2, t,orient.z());
00134 }
00135 virtual void setHitPrimitive(int primidx, float t)
00136 {
00137 setInt(SOP_CAPTURELAYERPAINT_RAY_HITPRIM_IDX, 0, t, primidx);
00138 }
00139 virtual void setHitPoint(int pt, float t)
00140 {
00141 setInt(SOP_CAPTURELAYERPAINT_RAY_HITPT_IDX, 0, t, pt);
00142 }
00143 virtual void setHitUV(float u, float v, float t)
00144 {
00145 setFloat(SOP_CAPTURELAYERPAINT_RAY_HITUV_IDX, 0, t, u);
00146 setFloat(SOP_CAPTURELAYERPAINT_RAY_HITUV_IDX, 1, t, v);
00147 }
00148 virtual void setHitPressure(float p, float t)
00149 {
00150 setFloat(SOP_CAPTURELAYERPAINT_RAY_HITPRESSURE_IDX, 0, t, p);
00151 }
00152 virtual void setRadius(float r, float t)
00153 {
00154 setFloat(SOP_CAPTURELAYERPAINT_RAD_IDX, 0, t, r);
00155 }
00156 virtual void setUVRadius(float r, float t)
00157 {
00158 setFloat(SOP_CAPTURELAYERPAINT_UVRAD_IDX, 0, t, r);
00159 }
00160 virtual void setBrushEvent(SOP_BrushEvent event)
00161 {
00162 setInt(SOP_CAPTURELAYERPAINT_RAY_EVENT_IDX, 0, 0, int(event));
00163 }
00164 virtual void setBrushOp(SOP_BrushOp op)
00165 {
00166 int iop;
00167 switch (op)
00168 {
00169 case SOP_BRUSHOP_SMOOTHATTRIB: iop = 1; break;
00170 case SOP_BRUSHOP_SMOOTHLAYER: iop = 2; break;
00171 case SOP_BRUSHOP_SMOOTHSINGLE: iop = 3; break;
00172 case SOP_BRUSHOP_REDUCE: iop = 4; break;
00173 case SOP_BRUSHOP_ERASE: iop = 5; break;
00174 case SOP_BRUSHOP_ERASESINGLE: iop = 6; break;
00175 case SOP_BRUSHOP_EYEDROP: iop = 7; break;
00176 case SOP_BRUSHOP_PAINT:
00177 default: iop = 0; break;
00178 }
00179 setInt(SOP_CAPTURELAYERPAINT_OP_IDX, 0, 0, iop);
00180 }
00181 virtual void setBrushShape(SOP_BrushShape shape)
00182 {
00183 setInt(SOP_CAPTURELAYERPAINT_SHAPE_IDX, 0, 0, int(shape));
00184 }
00185 virtual void setProjectionType(int projtype)
00186 {
00187 setInt(SOP_CAPTURELAYERPAINT_PROJTYPE_IDX, 0, 0, projtype);
00188 }
00189 virtual void useForegroundColor(void) { }
00190 virtual void useBackgroundColor(void) { }
00191 virtual void setVisualization(int state)
00192 {
00193
00194 if( myForceVisualize != state )
00195 {
00196 myForceVisualize = state;
00197 forceRecook();
00198 }
00199 }
00200
00201 bool getCurrentStencilColor(OP_Context &context, UT_Color &color);
00202
00203 bool getAccumulatedModifiedPoints(UT_IntArray &changed);
00204
00205 protected:
00206 virtual OP_ERROR processBrushOp(OP_Context &context,
00207 bool changed_input, bool changed_group);
00208
00209 virtual const char *inputLabel(unsigned idx) const;
00210 virtual int isRefInput(unsigned idx) const;
00211
00212 virtual void initializeInput(OP_Context &context,
00213 OP_Node *inputnode);
00214
00215 virtual void doErase();
00216
00217 void updateCaptureWeight(int ptnum, const GU_Detail *pgdp,
00218 float *alphas);
00219
00220 virtual OP_ERROR cookInputGroups(OP_Context &context,
00221 int alone = 0);
00222 void updateStencilMappings();
00223 OP_ERROR migrateStencils();
00224 virtual OP_ERROR cookMySop(OP_Context &context);
00225 void doVisualize(OP_Context &context, bool update_all);
00226
00227
00228
00229
00230 virtual OP_ERROR save(ostream &os, const OP_SaveFlags &flags,
00231 const char *path_prefix);
00232 virtual bool load(UT_IStream &is, const char *extension,
00233 const char *path);
00234
00235 virtual OP_Node *getRestGeoInput() { return getInput(1); }
00236
00237 public:
00238 virtual int altersGeometry() const { return 0; }
00239 virtual int altersColor() const { return 1; }
00240 virtual float RAWRADIUS(float t)
00241 { return evalFloat(SOP_CAPTURELAYERPAINT_RAD_IDX, 0, t); }
00242 virtual float RAWUVRADIUS(float t)
00243 { return evalFloat(SOP_CAPTURELAYERPAINT_UVRAD_IDX, 0, t); }
00244 virtual float RADIUSPRESSURE(float t)
00245 { return evalFloat(SOP_CAPTURELAYERPAINT_RADPRESSURE_IDX, 0, t); }
00246 virtual float RAWOPACITY(float t)
00247 {return evalFloat(SOP_CAPTURELAYERPAINT_OPAC_IDX, 0, t); }
00248 virtual float OPACITYPRESSURE(float t)
00249 {return evalFloat(SOP_CAPTURELAYERPAINT_OPACPRESSURE_IDX, 0, t) ; }
00250
00251 virtual SOP_BrushOp OP(void)
00252 {
00253 return SOP_BRUSHOP_CALLBACK;
00254 }
00255 virtual SOP_BrushOp getBrushOP()
00256 {
00257 switch (evalInt(SOP_CAPTURELAYERPAINT_OP_IDX, 0, 0))
00258 {
00259 case 1: return SOP_BRUSHOP_SMOOTHATTRIB;
00260 case 2: return SOP_BRUSHOP_SMOOTHLAYER;
00261 case 3: return SOP_BRUSHOP_SMOOTHSINGLE;
00262 case 4: return SOP_BRUSHOP_REDUCE;
00263 case 5: return SOP_BRUSHOP_ERASE;
00264 case 6: return SOP_BRUSHOP_ERASESINGLE;
00265 case 7: return SOP_BRUSHOP_EYEDROP;
00266 default: return SOP_BRUSHOP_PAINT;
00267 }
00268 }
00269
00270 virtual int ACCUMSTENCIL(void) { return 0; }
00271
00272 virtual int PROJECTIONTYPE(void)
00273 { return evalInt(SOP_CAPTURELAYERPAINT_PROJTYPE_IDX, 0, 0); }
00274 virtual int REALTIME(void)
00275 { return evalInt(SOP_CAPTURELAYERPAINT_REALTIME_IDX, 0, 0); }
00276 virtual int SHAPE(float t)
00277 { return evalInt(SOP_CAPTURELAYERPAINT_SHAPE_IDX, 0, t); }
00278
00279
00280 virtual void brushOpCallback(
00281 GEO_Point *pt,
00282 const UT_PtrArray<const GEO_Point *> *ptneighbour,
00283 GEO_Vertex *vtx,
00284 const UT_PtrArray<const GEO_Vertex *> *vtxneighbour,
00285 GEO_Primitive *vtx_prim,
00286 int prim_vtx_idx,
00287 float alpha,
00288 GEO_Delta *delta);
00289
00290 virtual void flood(float t);
00291 static int flattenStatic(void *op, int, float time,
00292 const PRM_Template *);
00293 void flatten(float t);
00294 virtual void clearAllDeltas(float t);
00295 void applyUndo(const SOP_CaptureLayerData &delta,
00296 const UT_String &rootpath,
00297 const UT_StringArray &mapping);
00298 void applyRedo(const SOP_CaptureLayerData &delta,
00299 const UT_String &rootpath,
00300 const UT_StringArray &mapping);
00301
00302 GEO_Detail::CaptureType getCaptureType() const
00303 { return myCaptureType; }
00304
00305 protected:
00306 void applyDelta(const SOP_CaptureLayerData &delta,
00307 const UT_String &rootpath,
00308 const UT_StringArray &mapping, bool is_add);
00309 int getNumStencils();
00310 float getStencilValue(int snum, int ptnum);
00311 void setStencilValue(int snum, int ptnum, float value);
00312
00313 void createTempLayer();
00314 void postOperation();
00315
00316 void setupForUndo();
00317 void saveUndo();
00318
00319 virtual const GB_PointGroup *getPointGroup() { return myPointGroup; }
00320 virtual bool isGroupParmDirty(OP_Context &context);
00321
00322 int GRPTYPE()
00323 { return evalInt(SOP_CAPTURELAYERPAINT_GRPTYPE_IDX, 0, 0); }
00324
00325 virtual GEO_Detail::CaptureType CAPTURETYPE()
00326 { return static_cast<GEO_Detail::CaptureType>(
00327 evalInt(SOP_CAPTURELAYERPAINT_CAPTYPE_IDX, 0, 0)); }
00328
00329 virtual int MERGEMODE() { return 0; }
00330 virtual void SCRIPT (UT_String &, float ) {}
00331 virtual int AXIS(void) { return 0 ; }
00332 virtual float USERX(float) { return 0.0f; }
00333 virtual float USERY(float) { return 0.0f; }
00334 virtual float USERZ(float) { return 0.0f; }
00335
00336 virtual float RAYORIENTX(float t)
00337 { return evalFloat(SOP_CAPTURELAYERPAINT_RAY_ORIENT_IDX,0,t); }
00338 virtual float RAYORIENTY(float t)
00339 { return evalFloat(SOP_CAPTURELAYERPAINT_RAY_ORIENT_IDX,1,t); }
00340 virtual float RAYORIENTZ(float t)
00341 { return evalFloat(SOP_CAPTURELAYERPAINT_RAY_ORIENT_IDX,2,t); }
00342 virtual float RAYHITX(float t)
00343 { return evalFloat(SOP_CAPTURELAYERPAINT_RAY_HITPOS_IDX,0,t); }
00344 virtual float RAYHITY(float t)
00345 { return evalFloat(SOP_CAPTURELAYERPAINT_RAY_HITPOS_IDX,1,t); }
00346 virtual float RAYHITZ(float t)
00347 { return evalFloat(SOP_CAPTURELAYERPAINT_RAY_HITPOS_IDX,2,t); }
00348 virtual float RAYHITU(float t)
00349 { return evalFloat(SOP_CAPTURELAYERPAINT_RAY_HITUV_IDX, 0,t); }
00350 virtual float RAYHITV(float t)
00351 { return evalFloat(SOP_CAPTURELAYERPAINT_RAY_HITUV_IDX, 1,t); }
00352 virtual float RAYHITPRESSURE(float t)
00353 { return evalFloat(SOP_CAPTURELAYERPAINT_RAY_HITPRESSURE_IDX, 0, t); }
00354 virtual int PRIMHIT(float t)
00355 { return evalInt(SOP_CAPTURELAYERPAINT_RAY_HITPRIM_IDX, 0,t); }
00356 virtual int PTHIT(float t)
00357 { return evalInt(SOP_CAPTURELAYERPAINT_RAY_HITPT_IDX, 0, t); }
00358 virtual int EVENT()
00359 { return evalInt(SOP_CAPTURELAYERPAINT_RAY_EVENT_IDX, 0,0); }
00360 virtual bool USE_FOREGROUND(void) { return true; }
00361 virtual float FGR(float) { return 0.0f; }
00362 virtual float FGG(float) { return 0.0f; }
00363 virtual float FGB(float) { return 0.0f; }
00364 virtual float BGR(float) { return 0.0f; }
00365 virtual float BGG(float) { return 0.0f; }
00366 virtual float BGB(float) { return 0.0f; }
00367 virtual float SOFTEDGE(float t)
00368 { return evalFloat(SOP_CAPTURELAYERPAINT_SOFTEDGE_IDX, 0, t); }
00369 virtual void KERNEL(UT_String &str, float t)
00370 { evalString(str, SOP_CAPTURELAYERPAINT_KERNEL_IDX, 0, t); }
00371 virtual int UPTYPE(float t)
00372 { return evalInt(SOP_CAPTURELAYERPAINT_UPTYPE_IDX, 0, t); }
00373 virtual float UPX(float t)
00374 { return evalFloat(SOP_CAPTURELAYERPAINT_UPVECTOR_IDX, 0, t); }
00375 virtual float UPY(float t)
00376 { return evalFloat(SOP_CAPTURELAYERPAINT_UPVECTOR_IDX, 1, t); }
00377 virtual float UPZ(float t)
00378 { return evalFloat(SOP_CAPTURELAYERPAINT_UPVECTOR_IDX, 2, t); }
00379
00380 virtual float PAPERNOISE(float t)
00381 { return evalFloat(SOP_CAPTURELAYERPAINT_PAPER_IDX, 0, t); }
00382 virtual float SPLATTER(float t)
00383 { return evalFloat(SOP_CAPTURELAYERPAINT_SPLATTER_IDX, 0, t); }
00384 virtual void BITMAP(UT_String &str, float t)
00385 { evalString(str, SOP_CAPTURELAYERPAINT_BITMAP_IDX, 0, t); }
00386 virtual int BITMAPCHAN(float t)
00387 { return evalInt(SOP_CAPTURELAYERPAINT_BITMAPCHAN_IDX, 0, t); }
00388 virtual float ANGLE(float t)
00389 { return evalFloat(SOP_CAPTURELAYERPAINT_ANGLE_IDX, 0, t); }
00390 virtual float SQUASH(float t)
00391 { return evalFloat(SOP_CAPTURELAYERPAINT_SQUASH_IDX, 0, t); }
00392 virtual int DOSTAMPING() { return 0; }
00393 virtual int WRITEALPHA() { return 0; }
00394
00395 virtual int OVERRIDECD() { return 1; }
00396 virtual void CDNAME(UT_String & , float ) { }
00397 virtual int OVERRIDEALPHA() { return 0; }
00398 virtual void ALPHANAME(UT_String & , float ) {}
00399 virtual int OVERRIDENML() { return 0; }
00400 virtual void NMLNAME(UT_String & , float ) {}
00401
00402 virtual float SYMMETRYDIRX(float t)
00403 { return evalFloat(SOP_CAPTURELAYERPAINT_SYMAXIS_IDX, 0, t); }
00404 virtual float SYMMETRYDIRY(float t)
00405 { return evalFloat(SOP_CAPTURELAYERPAINT_SYMAXIS_IDX, 1, t); }
00406 virtual float SYMMETRYDIRZ(float t)
00407 { return evalFloat(SOP_CAPTURELAYERPAINT_SYMAXIS_IDX, 2, t); }
00408 virtual float SYMMETRYORIGX(float t)
00409 { return evalFloat(SOP_CAPTURELAYERPAINT_SYMORIG_IDX, 0, t); }
00410 virtual float SYMMETRYORIGY(float t)
00411 { return evalFloat(SOP_CAPTURELAYERPAINT_SYMORIG_IDX, 1, t); }
00412 virtual float SYMMETRYORIGZ(float t)
00413 { return evalFloat(SOP_CAPTURELAYERPAINT_SYMORIG_IDX, 2, t); }
00414 virtual int DOREFLECTION()
00415 { return evalInt(SOP_CAPTURELAYERPAINT_DOREFLECT_IDX,0, 0); }
00416 virtual int DOROTATION()
00417 { return evalInt(SOP_CAPTURELAYERPAINT_DOROTATION_IDX,0, 0); }
00418 virtual int SYMMETRYROT(float t)
00419 { return evalInt(SOP_CAPTURELAYERPAINT_SYMROT_IDX,0, t); }
00420 virtual float SYMMETRYDIST(float t)
00421 { return evalFloat(SOP_CAPTURELAYERPAINT_SYMDIST_IDX,0, t); }
00422
00423 virtual int DOUVREFLECTION()
00424 { return evalInt(SOP_CAPTURELAYERPAINT_DOUVREFLECT_IDX, 0, 0); }
00425 virtual float SYMMETRYUVORIGU(float t)
00426 { return evalFloat(SOP_CAPTURELAYERPAINT_SYMUVORIG_IDX, 0, t); }
00427 virtual float SYMMETRYUVORIGV(float t)
00428 { return evalFloat(SOP_CAPTURELAYERPAINT_SYMUVORIG_IDX, 1, t); }
00429 virtual float SYMMETRYUVANGLE(float t)
00430 { return evalFloat(SOP_CAPTURELAYERPAINT_SYMUVANGLE_IDX, 0, t);}
00431
00432 virtual int ADDATTRIB() { return 0; }
00433 virtual bool SHOWVISUALIZE()
00434 { return myForceVisualize || evalInt(SOP_CAPTURELAYERPAINT_VISUALIZE_IDX, 0, 0); }
00435 virtual int VISLAYER()
00436 { return evalInt(SOP_CAPTURELAYERPAINT_VISLAYER_IDX, 0, 0); }
00437 virtual int VISTYPE()
00438 { return evalInt(SOP_CAPTURELAYERPAINT_VISTYPE_IDX, 0, 0); }
00439 virtual int VISMODE()
00440 { return evalInt(SOP_CAPTURELAYERPAINT_VISMODE_IDX, 0, 0); }
00441 virtual int USECAPTURE() { return 1; }
00442 virtual int CAPTUREIDX()
00443 {
00444 UT_String cregion_name;
00445 CAPTUREREGION(cregion_name);
00446 return gdp->getCaptureRegionIndex(cregion_name,
00447 myCaptureType);
00448 }
00449 virtual void SKELROOT(UT_String &str)
00450 { evalString(str, SOP_CAPTURELAYERPAINT_SKELROOT_IDX, 0, 0); }
00451 public:
00452 virtual void CAPTUREREGION(UT_String &str)
00453 { evalString(str, SOP_CAPTURELAYERPAINT_CAPTUREREGION_IDX, 0, 0); }
00454 protected:
00455 virtual int USECONNECTIVITY()
00456 { return evalInt(SOP_CAPTURELAYERPAINT_USECONNECTIVITY_IDX, 0, 0); }
00457 virtual int USEDEPTH()
00458 { return evalInt(SOP_CAPTURELAYERPAINT_USEDEPTH_IDX, 0, 0); }
00459 virtual float DEPTH(float t)
00460 { return evalFloat(SOP_CAPTURELAYERPAINT_DEPTH_IDX, 0, t); }
00461 virtual float HEIGHT(float t)
00462 { return evalFloat(SOP_CAPTURELAYERPAINT_DEPTH_IDX, 1, t); }
00463 virtual float MAXPAINTVALUE()
00464 { return evalFloat(SOP_CAPTURELAYERPAINT_MAXPAINTVALUE_IDX, 0, 0); }
00465 virtual float MINREDUCEVALUE()
00466 { return evalFloat(SOP_CAPTURELAYERPAINT_MINREDUCEVALUE_IDX, 0, 0); }
00467 virtual bool VISNORMALIZED()
00468 { return evalInt(SOP_CAPTURELAYERPAINT_VISNORMALIZED_IDX, 0, 0) != 0; }
00469
00470
00471
00472
00473 virtual bool hasStrokeChanged(float t);
00474 virtual bool hasStyleChanged(float) { return false; }
00475
00476
00477 virtual bool hasNibFileChanged(float t);
00478 virtual bool hasAccumStencilChanged(float) { return false; }
00479 virtual bool hasNibLookChanged(float t);
00480 bool hasVisChanged(float t);
00481
00482 virtual void buildOpDependencies();
00483 virtual void buildParmDependency( int parm_index );
00484 virtual void handleOpDependency( int referenced_op_id,
00485 const OP_Dependency &op_dep,
00486 OP_InterestType interest_type,
00487 bool &need_cook,
00488 const char *old_fullpath,
00489 const char *old_cwd,
00490 const char *old_chan_name );
00491
00492
00493 virtual void applyAndClearCurrentDelta() {}
00494
00495 public:
00496
00497
00498 static void buildCaptureRegionMenu(
00499 void *data, PRM_Name *menu_entries,
00500 int num_entries, const PRM_SpareData *,
00501 PRM_Parm *);
00502
00503 private:
00504 void updateStencilIndex();
00505 int getStencilIndex();
00506 void checkCaptureRegions();
00507
00508 int addCaptureRegion( const char *cregion_name );
00509
00510 void clearStencils();
00511 int findStencilForCaptureRegion(int cregion);
00512 int getStencilForCaptureRegion(int cregion);
00513 int addNewStencilForCaptureRegion(int cregion);
00514 void addedStencilForCaptureRegion(int snum, int cregion);
00515 static bool getRootPathCandidates(OP_Node &node, void *data);
00516
00517 bool boneCapture() const
00518 { return myCaptureType == GEO_Detail::CAPTURE_BONE; }
00519 bool metaCapture() const
00520 { return myCaptureType == GEO_Detail::CAPTURE_META; }
00521 bool wireCapture() const
00522 { return myCaptureType == GEO_Detail::CAPTURE_WIRE; }
00523
00524 private:
00525 UT_String myRootPath;
00526
00527 static PRM_ChoiceList theCaptureRegionMenu;
00528
00529
00530 SOP_CaptureLayerData myStencils;
00531 UT_StringArray myStencilMapping;
00532 UT_IntArray myCaptureRegionMapping;
00533 UT_IntArray myRegionToStencilMapping;
00534 int myNullStencilIndex;
00535
00536
00537 SOP_CaptureLayerData *myTempSmoothLayer;
00538 float *myTempSmoothAlpha;
00539
00540
00541 int myStencilIndex;
00542
00543
00544 SOP_CaptureLayerData myDelta;
00545 UT_String myOldRootPath;
00546 UT_StringArray myOldStencilMapping;
00547
00548
00549 UT_IntArray myModifiedPoints;
00550 bool myLastVisualize;
00551
00552
00553
00554 UT_IntArray myAccumulatedModifiedPoints;
00555 bool myHaveAccumulatedModifiedPoints;
00556
00557 const GB_PointGroup *myPointGroup;
00558 bool myAddWarningFlag;
00559 bool myFlattenFlag;
00560
00561
00562 bool myMigrationNeeded;
00563 UT_String myTestCregionName;
00564 UT_IntArray myTestCregionCandidates;
00565
00566 UT_String myLoadedRootPath;
00567 UT_String myLoadedPathChanged;
00568 UT_StringArray myLoadedStencilMapping;
00569
00570
00571 GEO_Detail::CaptureType myCaptureType;
00572 };
00573
00574 #endif