00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef __SOP_SlideModifierPaint_h__
00022 #define __SOP_SlideModifierPaint_h__
00023
00024 #include "SOP_API.h"
00025 #include <GU/GU_Brush.h>
00026 #include <GEO/GEO_Detail.h>
00027
00028 #include "SOP_GDT.h"
00029 #include "SOP_BrushBase.h"
00030
00031 class PRM_MenuEntry;
00032
00033 enum {
00034
00035 SOP_SLIDEPAINT_GRP_IDX = SOP_GDT_GRP_IDX,
00036
00037 SOP_SLIDEPAINT_SWITCHER_IDX,
00038
00039 #define SOP_SLIDEPAINT_NUM_DEFORM_PARMS (10)
00040 SOP_SLIDEPAINT_ATTRIB_IDX,
00041 SOP_SLIDEPAINT_OP_IDX,
00042 SOP_SLIDEPAINT_MERGEMODE_IDX,
00043 SOP_SLIDEPAINT_STENCILACCUM_IDX,
00044 SOP_SLIDEPAINT_STENCILAPPLY_IDX,
00045 SOP_SLIDEPAINT_FLOODAPPLY_IDX,
00046 SOP_SLIDEPAINT_CLEARALL_IDX,
00047 SOP_SLIDEPAINT_VISUALIZE_IDX,
00048 SOP_SLIDEPAINT_VISRANGE_IDX,
00049 SOP_SLIDEPAINT_VISMODE_IDX,
00050
00051 #define SOP_SLIDEPAINT_NUM_NIB_PARMS (18)
00052 SOP_SLIDEPAINT_SHAPE_IDX,
00053 SOP_SLIDEPAINT_BITMAP_IDX,
00054 SOP_SLIDEPAINT_BITMAPCHAN_IDX,
00055 SOP_SLIDEPAINT_RAD_IDX,
00056 SOP_SLIDEPAINT_UVRAD_IDX,
00057 SOP_SLIDEPAINT_RADPRESSURE_IDX,
00058 SOP_SLIDEPAINT_USEDEPTH_IDX,
00059 SOP_SLIDEPAINT_DEPTH_IDX,
00060 SOP_SLIDEPAINT_ANGLE_IDX,
00061 SOP_SLIDEPAINT_SQUASH_IDX,
00062 SOP_SLIDEPAINT_OPAC_IDX,
00063 SOP_SLIDEPAINT_OPACPRESSURE_IDX,
00064 SOP_SLIDEPAINT_SPLATTER_IDX,
00065 SOP_SLIDEPAINT_PAPER_IDX,
00066 SOP_SLIDEPAINT_SOFTEDGE_IDX,
00067 SOP_SLIDEPAINT_KERNEL_IDX,
00068 SOP_SLIDEPAINT_UPTYPE_IDX,
00069 SOP_SLIDEPAINT_UPVECTOR_IDX,
00070
00071 #define SOP_SLIDEPAINT_NUM_SYM_PARMS (9)
00072 SOP_SLIDEPAINT_DOREFLECT_IDX,
00073 SOP_SLIDEPAINT_DOROTATION_IDX,
00074 SOP_SLIDEPAINT_SYMAXIS_IDX,
00075 SOP_SLIDEPAINT_SYMORIG_IDX,
00076 SOP_SLIDEPAINT_SYMROT_IDX,
00077 SOP_SLIDEPAINT_SYMDIST_IDX,
00078 SOP_SLIDEPAINT_DOUVREFLECT_IDX,
00079 SOP_SLIDEPAINT_SYMUVORIG_IDX,
00080 SOP_SLIDEPAINT_SYMUVANGLE_IDX,
00081
00082 #define SOP_SLIDEPAINT_NUM_RAY_PARMS (10)
00083 SOP_SLIDEPAINT_PROJTYPE_IDX,
00084 SOP_SLIDEPAINT_USECONNECTIVITY_IDX,
00085 SOP_SLIDEPAINT_REALTIME_IDX,
00086 SOP_SLIDEPAINT_RAY_ORIENT_IDX,
00087 SOP_SLIDEPAINT_RAY_HITPOS_IDX,
00088 SOP_SLIDEPAINT_RAY_HITPRIM_IDX,
00089 SOP_SLIDEPAINT_RAY_HITUV_IDX,
00090 SOP_SLIDEPAINT_RAY_HITPRESSURE_IDX,
00091 SOP_SLIDEPAINT_RAY_HITPT_IDX,
00092 SOP_SLIDEPAINT_RAY_EVENT_IDX
00093 };
00094
00095 class SOP_API SOP_SlideModifierPaint : public SOP_BrushBase
00096 {
00097 public:
00098 SOP_SlideModifierPaint(OP_Network *net, const char *name, OP_Operator *entry);
00099 virtual ~SOP_SlideModifierPaint();
00100
00101 virtual unsigned disableParms();
00102
00103 static OP_Node *myConstructor(OP_Network *net,
00104 const char *name,
00105 OP_Operator *entry);
00106
00107 static PRM_Template myTemplateList[];
00108
00109 virtual void setAccumulateStencil(bool yesno)
00110 {
00111 setInt(SOP_SLIDEPAINT_STENCILACCUM_IDX, 0, 0, yesno);
00112 }
00113 virtual void setRayOrigin(const UT_Vector3 &orig, float t)
00114 {
00115 setFloat(SOP_SLIDEPAINT_RAY_HITPOS_IDX, 0, t, orig.x());
00116 setFloat(SOP_SLIDEPAINT_RAY_HITPOS_IDX, 1, t, orig.y());
00117 setFloat(SOP_SLIDEPAINT_RAY_HITPOS_IDX, 2, t, orig.z());
00118 }
00119 virtual void setRayOrientation(const UT_Vector3 &orient, float t)
00120 {
00121 setFloat(SOP_SLIDEPAINT_RAY_ORIENT_IDX, 0, t, orient.x());
00122 setFloat(SOP_SLIDEPAINT_RAY_ORIENT_IDX, 1, t, orient.y());
00123 setFloat(SOP_SLIDEPAINT_RAY_ORIENT_IDX, 2, t, orient.z());
00124 }
00125 virtual void setHitPrimitive(int primidx, float t)
00126 {
00127 setInt(SOP_SLIDEPAINT_RAY_HITPRIM_IDX, 0, t, primidx);
00128 }
00129 virtual void setHitPoint(int pt, float t)
00130 {
00131 setInt(SOP_SLIDEPAINT_RAY_HITPT_IDX, 0, t, pt);
00132 }
00133 virtual void setHitUV(float u, float v, float t)
00134 {
00135 setFloat(SOP_SLIDEPAINT_RAY_HITUV_IDX, 0, t, u);
00136 setFloat(SOP_SLIDEPAINT_RAY_HITUV_IDX, 1, t, v);
00137 }
00138 virtual void setHitPressure(float p, float t)
00139 {
00140 setFloat(SOP_SLIDEPAINT_RAY_HITPRESSURE_IDX, 0, t, p);
00141 }
00142 virtual void setRadius(float r, float t)
00143 {
00144 setFloat(SOP_SLIDEPAINT_RAD_IDX, 0, t, r);
00145 }
00146 virtual void setUVRadius(float r, float t)
00147 {
00148 setFloat(SOP_SLIDEPAINT_UVRAD_IDX, 0, t, r);
00149 }
00150 virtual void setBrushEvent(SOP_BrushEvent event)
00151 {
00152 setInt(SOP_SLIDEPAINT_RAY_EVENT_IDX, 0, 0, int(event));
00153 }
00154 virtual void setBrushOp(SOP_BrushOp op)
00155 {
00156 int iop;
00157 switch (op)
00158 {
00159 case SOP_BRUSHOP_SMOOTHATTRIB: iop = 1; break;
00160 case SOP_BRUSHOP_ERASE: iop = 2; break;
00161 case SOP_BRUSHOP_PAINT:
00162 default: iop = 0; break;
00163 }
00164 setInt(SOP_SLIDEPAINT_OP_IDX, 0, 0, iop);
00165 }
00166 virtual void setBrushShape(SOP_BrushShape shape)
00167 {
00168 setInt(SOP_SLIDEPAINT_SHAPE_IDX, 0, 0, int(shape));
00169 }
00170 virtual void setProjectionType(int projtype)
00171 {
00172 setInt(SOP_SLIDEPAINT_PROJTYPE_IDX, 0, 0, projtype);
00173 }
00174 virtual void useForegroundColor(void)
00175 { myUseFG = true; }
00176 virtual void useBackgroundColor(void)
00177 { myUseFG = false; }
00178
00179 virtual void setCurrentColor(const UT_Vector3 &cd)
00180 { }
00181 virtual void setVisualization(int state)
00182 {
00183
00184 if( myForceVisualize != state )
00185 {
00186 myForceVisualize = state;
00187 forceRecook();
00188 }
00189 }
00190
00191 protected:
00192 virtual const char *inputLabel(unsigned idx) const;
00193
00194
00195
00196
00197 virtual void duplicateChangedSourceWrapper(
00198 unsigned idx,
00199 OP_Context &context,
00200 int *changed,
00201 bool force=false);
00202
00203 protected:
00204 virtual void doErase();
00205
00206 public:
00207 virtual int altersGeometry() const { return 0; }
00208 virtual int altersColor() const { return 1; }
00209 virtual float RAWRADIUS(float t)
00210 { return evalFloat(SOP_SLIDEPAINT_RAD_IDX, 0, t); }
00211 virtual float RAWUVRADIUS(float t)
00212 { return evalFloat(SOP_SLIDEPAINT_UVRAD_IDX, 0, t); }
00213 virtual float RADIUSPRESSURE(float t)
00214 { return evalFloat(SOP_SLIDEPAINT_RADPRESSURE_IDX, 0, t); }
00215 virtual float RAWOPACITY(float t)
00216 {return evalFloat(SOP_SLIDEPAINT_OPAC_IDX, 0, t) ; }
00217 virtual float OPACITYPRESSURE(float t)
00218 {return evalFloat(SOP_SLIDEPAINT_OPACPRESSURE_IDX, 0, t) ; }
00219
00220 virtual SOP_BrushOp OP(void)
00221 {
00222 switch (evalInt(SOP_SLIDEPAINT_OP_IDX, 0, 0))
00223 {
00224 case 0:
00225 return SOP_BRUSHOP_PAINT;
00226 case 1:
00227 return SOP_BRUSHOP_SMOOTHATTRIB;
00228 case 2:
00229 default:
00230 return SOP_BRUSHOP_ERASE;
00231 }
00232 }
00233
00234 virtual int ACCUMSTENCIL(void)
00235 { return evalInt(SOP_SLIDEPAINT_STENCILACCUM_IDX, 0, 0);}
00236 virtual int PROJECTIONTYPE(void)
00237 { return evalInt(SOP_SLIDEPAINT_PROJTYPE_IDX, 0, 0); }
00238 virtual int REALTIME(void)
00239 { return evalInt(SOP_SLIDEPAINT_REALTIME_IDX, 0, 0); }
00240 virtual int SHAPE(float t)
00241 { return evalInt(SOP_SLIDEPAINT_SHAPE_IDX, 0, t); }
00242
00243 protected:
00244 enum AttribToPaint {
00245 SOP_SLIDE_MODIFIER,
00246 SOP_INFLATE_MODIFIER
00247 };
00248
00249 virtual int MERGEMODE()
00250 { return evalInt(SOP_SLIDEPAINT_MERGEMODE_IDX, 0, 0); }
00251 virtual void SCRIPT (UT_String &, float ) {}
00252 virtual int AXIS(void) { return 0 ; }
00253 virtual float USERX(float) { return 0.0f; }
00254 virtual float USERY(float) { return 0.0f; }
00255 virtual float USERZ(float) { return 0.0f; }
00256
00257 virtual float RAYORIENTX(float t)
00258 { return evalFloat(SOP_SLIDEPAINT_RAY_ORIENT_IDX,0,t); }
00259 virtual float RAYORIENTY(float t)
00260 { return evalFloat(SOP_SLIDEPAINT_RAY_ORIENT_IDX,1,t); }
00261 virtual float RAYORIENTZ(float t)
00262 { return evalFloat(SOP_SLIDEPAINT_RAY_ORIENT_IDX,2,t); }
00263 virtual float RAYHITX(float t)
00264 { return evalFloat(SOP_SLIDEPAINT_RAY_HITPOS_IDX,0,t); }
00265 virtual float RAYHITY(float t)
00266 { return evalFloat(SOP_SLIDEPAINT_RAY_HITPOS_IDX,1,t); }
00267 virtual float RAYHITZ(float t)
00268 { return evalFloat(SOP_SLIDEPAINT_RAY_HITPOS_IDX,2,t); }
00269 virtual float RAYHITU(float t)
00270 { return evalFloat(SOP_SLIDEPAINT_RAY_HITUV_IDX, 0,t); }
00271 virtual float RAYHITV(float t)
00272 { return evalFloat(SOP_SLIDEPAINT_RAY_HITUV_IDX, 1,t); }
00273 virtual float RAYHITPRESSURE(float t)
00274 { return evalFloat(SOP_SLIDEPAINT_RAY_HITPRESSURE_IDX, 0, t); }
00275 virtual int PRIMHIT(float t)
00276 { return evalInt(SOP_SLIDEPAINT_RAY_HITPRIM_IDX, 0,t); }
00277 virtual int PTHIT(float t)
00278 { return evalInt(SOP_SLIDEPAINT_RAY_HITPT_IDX, 0, t); }
00279 virtual int EVENT()
00280 { return evalInt(SOP_SLIDEPAINT_RAY_EVENT_IDX, 0,0); }
00281 virtual bool USE_FOREGROUND(void)
00282 { return myUseFG; }
00283
00284 virtual float FGR(float t) { return 1.0; }
00285 virtual float FGG(float t) { return 1.0; }
00286 virtual float FGB(float t) { return 1.0; }
00287 virtual float BGR(float t) { return 0.0; }
00288 virtual float BGG(float t) { return 0.0; }
00289 virtual float BGB(float t) { return 0.0; }
00290
00291 virtual float SOFTEDGE(float t)
00292 { return evalFloat(SOP_SLIDEPAINT_SOFTEDGE_IDX, 0, t); }
00293 virtual void KERNEL(UT_String &str, float t)
00294 { evalString(str, SOP_SLIDEPAINT_KERNEL_IDX, 0, t); }
00295 virtual int UPTYPE(float t)
00296 { return evalInt(SOP_SLIDEPAINT_UPTYPE_IDX, 0, t); }
00297 virtual float UPX(float t)
00298 { return evalFloat(SOP_SLIDEPAINT_UPVECTOR_IDX, 0, t); }
00299 virtual float UPY(float t)
00300 { return evalFloat(SOP_SLIDEPAINT_UPVECTOR_IDX, 1, t); }
00301 virtual float UPZ(float t)
00302 { return evalFloat(SOP_SLIDEPAINT_UPVECTOR_IDX, 2, t); }
00303
00304 virtual float PAPERNOISE(float t)
00305 { return evalFloat(SOP_SLIDEPAINT_PAPER_IDX, 0, t); }
00306 virtual float SPLATTER(float t)
00307 { return evalFloat(SOP_SLIDEPAINT_SPLATTER_IDX, 0, t); }
00308 virtual void BITMAP(UT_String &str, float t)
00309 { evalString(str, SOP_SLIDEPAINT_BITMAP_IDX, 0, t); }
00310 virtual int BITMAPCHAN(float t)
00311 { return evalInt(SOP_SLIDEPAINT_BITMAPCHAN_IDX, 0, t); }
00312 virtual float ANGLE(float t)
00313 { return evalFloat(SOP_SLIDEPAINT_ANGLE_IDX, 0, t); }
00314 virtual float SQUASH(float t)
00315 { return evalFloat(SOP_SLIDEPAINT_SQUASH_IDX, 0, t); }
00316 virtual int DOSTAMPING()
00317 { return 0; }
00318 virtual int WRITEALPHA()
00319 { return 0; }
00320
00321 virtual int OVERRIDECD()
00322 { return 1; }
00323
00324
00325
00326
00327
00328
00329 virtual void CDNAME(UT_String &str, float t)
00330 {
00331 int attrib_to_paint;
00332
00333 attrib_to_paint
00334 = evalInt(SOP_SLIDEPAINT_ATTRIB_IDX, 0, 0);
00335
00336 switch ( attrib_to_paint )
00337 {
00338 case SOP_SLIDE_MODIFIER:
00339 {
00340 str = GEO_STD_ATTRIB_META_SLIDE;
00341 break;
00342 }
00343 case SOP_INFLATE_MODIFIER:
00344 {
00345 str = GEO_STD_ATTRIB_INFLATE_MODIFIER;
00346 break;
00347 }
00348 default:
00349 {
00350 str = GEO_STD_ATTRIB_META_SLIDE;
00351 break;
00352 }
00353 }
00354 }
00355
00356 virtual int OVERRIDEALPHA()
00357 { return 0; }
00358 virtual void ALPHANAME(UT_String & , float )
00359 {}
00360 virtual int OVERRIDENML() { return 0; }
00361 virtual void NMLNAME(UT_String & , float ) {}
00362
00363 virtual float SYMMETRYDIRX(float t)
00364 { return evalFloat(SOP_SLIDEPAINT_SYMAXIS_IDX, 0, t); }
00365 virtual float SYMMETRYDIRY(float t)
00366 { return evalFloat(SOP_SLIDEPAINT_SYMAXIS_IDX, 1, t); }
00367 virtual float SYMMETRYDIRZ(float t)
00368 { return evalFloat(SOP_SLIDEPAINT_SYMAXIS_IDX, 2, t); }
00369 virtual float SYMMETRYORIGX(float t)
00370 { return evalFloat(SOP_SLIDEPAINT_SYMORIG_IDX, 0, t); }
00371 virtual float SYMMETRYORIGY(float t)
00372 { return evalFloat(SOP_SLIDEPAINT_SYMORIG_IDX, 1, t); }
00373 virtual float SYMMETRYORIGZ(float t)
00374 { return evalFloat(SOP_SLIDEPAINT_SYMORIG_IDX, 2, t); }
00375 virtual int DOREFLECTION()
00376 { return evalInt(SOP_SLIDEPAINT_DOREFLECT_IDX,0, 0); }
00377 virtual int DOROTATION()
00378 { return evalInt(SOP_SLIDEPAINT_DOROTATION_IDX,0, 0); }
00379 virtual int SYMMETRYROT(float t)
00380 { return evalInt(SOP_SLIDEPAINT_SYMROT_IDX,0, t); }
00381 virtual float SYMMETRYDIST(float t)
00382 { return evalFloat(SOP_SLIDEPAINT_SYMDIST_IDX,0, t); }
00383
00384 virtual int DOUVREFLECTION()
00385 { return evalInt(SOP_SLIDEPAINT_DOUVREFLECT_IDX, 0, 0); }
00386 virtual float SYMMETRYUVORIGU(float t)
00387 { return evalFloat(SOP_SLIDEPAINT_SYMUVORIG_IDX, 0, t); }
00388 virtual float SYMMETRYUVORIGV(float t)
00389 { return evalFloat(SOP_SLIDEPAINT_SYMUVORIG_IDX, 1, t); }
00390 virtual float SYMMETRYUVANGLE(float t)
00391 { return evalFloat(SOP_SLIDEPAINT_SYMUVANGLE_IDX, 0, t);}
00392
00393 virtual int ADDATTRIB()
00394 { return 0; }
00395 virtual int VISUALIZE()
00396 { return myForceVisualize ||
00397 evalInt(SOP_SLIDEPAINT_VISUALIZE_IDX, 0, 0); }
00398 virtual float VISLOW(float t)
00399 { return evalFloat(SOP_SLIDEPAINT_VISRANGE_IDX, 0, t); }
00400 virtual float VISHIGH(float t)
00401 { return evalFloat(SOP_SLIDEPAINT_VISRANGE_IDX, 1, t); }
00402 virtual int VISMODE()
00403 { return evalInt(SOP_SLIDEPAINT_VISMODE_IDX, 0, 0); }
00404
00405 virtual int USECONNECTIVITY()
00406 { return evalInt(SOP_SLIDEPAINT_USECONNECTIVITY_IDX, 0, 0); }
00407 virtual int USEDEPTH()
00408 { return evalInt(SOP_SLIDEPAINT_USEDEPTH_IDX, 0, 0); }
00409 virtual float DEPTH(float t)
00410 { return evalFloat(SOP_SLIDEPAINT_DEPTH_IDX, 0, t); }
00411 virtual float HEIGHT(float t)
00412 { return evalFloat(SOP_SLIDEPAINT_DEPTH_IDX, 1, t); }
00413
00414
00415
00416
00417 virtual bool hasStrokeChanged(float t);
00418 virtual bool hasStyleChanged(float t);
00419
00420
00421 virtual bool hasNibFileChanged(float t);
00422 virtual bool hasAccumStencilChanged(float t);
00423 virtual bool hasNibLookChanged(float t);
00424
00425 virtual bool hasVisrangeChanged(float t);
00426
00427 private:
00428
00429 int mySlideOffset;
00430 int myInflateOffset;
00431
00432
00433
00434 bool myUseFG;
00435
00436 };
00437
00438 #endif