00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef __SOP_Paint_h__
00022 #define __SOP_Paint_h__
00023
00024 #include "SOP_API.h"
00025 #include <GU/GU_Brush.h>
00026
00027 #include "SOP_GDT.h"
00028 #include "SOP_BrushBase.h"
00029
00030 class PRM_MenuEntry;
00031
00032 enum {
00033
00034 SOP_PAINT_GRP_IDX = SOP_GDT_GRP_IDX,
00035
00036 SOP_PAINT_SWITCHER_IDX,
00037
00038 #define SOP_PAINT_NUM_DEFORM_PARMS (17)
00039 SOP_PAINT_OP_IDX,
00040 SOP_PAINT_MERGEMODE_IDX,
00041 SOP_PAINT_STENCILACCUM_IDX,
00042 SOP_PAINT_STENCILAPPLY_IDX,
00043 SOP_PAINT_COLOR_SWITCHER_IDX,
00044 SOP_PAINT_FG_IDX,
00045 SOP_PAINT_BG_IDX,
00046 SOP_PAINT_STAMP_IDX,
00047 SOP_PAINT_FLOODAPPLY_IDX,
00048 SOP_PAINT_CLEARALL_IDX,
00049 SOP_PAINT_ADDATTRIB_IDX,
00050 SOP_PAINT_WRITEALPHA_IDX,
00051 SOP_PAINT_OVERRIDECD_IDX,
00052 SOP_PAINT_CDNAME_IDX,
00053 SOP_PAINT_OVERRIDEALPHA_IDX,
00054 SOP_PAINT_ALPHANAME_IDX,
00055 SOP_PAINT_VISUALIZE_IDX,
00056 SOP_PAINT_VISRANGE_IDX,
00057 SOP_PAINT_VISMODE_IDX,
00058
00059 #define SOP_PAINT_NUM_NIB_PARMS (18)
00060 SOP_PAINT_SHAPE_IDX,
00061 SOP_PAINT_BITMAP_IDX,
00062 SOP_PAINT_BITMAPCHAN_IDX,
00063 SOP_PAINT_RAD_IDX,
00064 SOP_PAINT_UVRAD_IDX,
00065 SOP_PAINT_RADPRESSURE_IDX,
00066 SOP_PAINT_USEDEPTH_IDX,
00067 SOP_PAINT_DEPTH_IDX,
00068 SOP_PAINT_ANGLE_IDX,
00069 SOP_PAINT_SQUASH_IDX,
00070 SOP_PAINT_OPAC_IDX,
00071 SOP_PAINT_OPACPRESSURE_IDX,
00072 SOP_PAINT_SPLATTER_IDX,
00073 SOP_PAINT_PAPER_IDX,
00074 SOP_PAINT_SOFTEDGE_IDX,
00075 SOP_PAINT_KERNEL_IDX,
00076 SOP_PAINT_UPTYPE_IDX,
00077 SOP_PAINT_UPVECTOR_IDX,
00078
00079 #define SOP_PAINT_NUM_SYM_PARMS (9)
00080 SOP_PAINT_DOREFLECT_IDX,
00081 SOP_PAINT_DOROTATION_IDX,
00082 SOP_PAINT_SYMAXIS_IDX,
00083 SOP_PAINT_SYMORIG_IDX,
00084 SOP_PAINT_SYMROT_IDX,
00085 SOP_PAINT_SYMDIST_IDX,
00086 SOP_PAINT_DOUVREFLECT_IDX,
00087 SOP_PAINT_SYMUVORIG_IDX,
00088 SOP_PAINT_SYMUVANGLE_IDX,
00089
00090 #define SOP_PAINT_NUM_RAY_PARMS (10)
00091 SOP_PAINT_PROJTYPE_IDX,
00092 SOP_PAINT_USECONNECTIVITY_IDX,
00093 SOP_PAINT_REALTIME_IDX,
00094 SOP_PAINT_RAY_ORIENT_IDX,
00095 SOP_PAINT_RAY_HITPOS_IDX,
00096 SOP_PAINT_RAY_HITPRIM_IDX,
00097 SOP_PAINT_RAY_HITUV_IDX,
00098 SOP_PAINT_RAY_HITPRESSURE_IDX,
00099 SOP_PAINT_RAY_HITPT_IDX,
00100 SOP_PAINT_RAY_EVENT_IDX
00101 };
00102
00103 class SOP_API SOP_Paint : public SOP_BrushBase
00104 {
00105 public:
00106 SOP_Paint(OP_Network *net, const char *name, OP_Operator *entry);
00107 virtual ~SOP_Paint();
00108
00109 virtual unsigned disableParms();
00110
00111 static OP_Node *myConstructor(OP_Network *net,
00112 const char *name,
00113 OP_Operator *entry);
00114
00115 static PRM_Template myTemplateList[];
00116
00117 virtual void setAccumulateStencil(bool yesno)
00118 {
00119 setInt(SOP_PAINT_STENCILACCUM_IDX, 0, 0, yesno);
00120 }
00121 virtual void setRayOrigin(const UT_Vector3 &orig, float t)
00122 {
00123 setFloat(SOP_PAINT_RAY_HITPOS_IDX, 0, t, orig.x());
00124 setFloat(SOP_PAINT_RAY_HITPOS_IDX, 1, t, orig.y());
00125 setFloat(SOP_PAINT_RAY_HITPOS_IDX, 2, t, orig.z());
00126 }
00127 virtual void setRayOrientation(const UT_Vector3 &orient, float t)
00128 {
00129 setFloat(SOP_PAINT_RAY_ORIENT_IDX, 0, t, orient.x());
00130 setFloat(SOP_PAINT_RAY_ORIENT_IDX, 1, t, orient.y());
00131 setFloat(SOP_PAINT_RAY_ORIENT_IDX, 2, t, orient.z());
00132 }
00133 virtual void setHitPrimitive(int primidx, float t)
00134 {
00135 setInt(SOP_PAINT_RAY_HITPRIM_IDX, 0, t, primidx);
00136 }
00137 virtual void setHitPoint(int pt, float t)
00138 {
00139 setInt(SOP_PAINT_RAY_HITPT_IDX, 0, t, pt);
00140 }
00141 virtual void setHitUV(float u, float v, float t)
00142 {
00143 setFloat(SOP_PAINT_RAY_HITUV_IDX, 0, t, u);
00144 setFloat(SOP_PAINT_RAY_HITUV_IDX, 1, t, v);
00145 }
00146 virtual void setHitPressure(float p, float t)
00147 {
00148 setFloat(SOP_PAINT_RAY_HITPRESSURE_IDX, 0, t, p);
00149 }
00150 virtual void setRadius(float r, float t)
00151 {
00152 setFloat(SOP_PAINT_RAD_IDX, 0, t, r);
00153 }
00154 virtual void setUVRadius(float r, float t)
00155 {
00156 setFloat(SOP_PAINT_UVRAD_IDX, 0, t, r);
00157 }
00158 virtual void setBrushEvent(SOP_BrushEvent event)
00159 {
00160 setInt(SOP_PAINT_RAY_EVENT_IDX, 0, 0, int(event));
00161 }
00162 virtual void setBrushOp(SOP_BrushOp op)
00163 {
00164 int iop;
00165 switch (op)
00166 {
00167 case SOP_BRUSHOP_EYEDROP: iop = 1; break;
00168 case SOP_BRUSHOP_SMOOTHATTRIB: iop = 2; break;
00169 case SOP_BRUSHOP_ERASE: iop = 3; break;
00170 case SOP_BRUSHOP_PAINT:
00171 default: iop = 0; break;
00172 }
00173 setInt(SOP_PAINT_OP_IDX, 0, 0, iop);
00174 }
00175 virtual void setBrushShape(SOP_BrushShape shape)
00176 {
00177 setInt(SOP_PAINT_SHAPE_IDX, 0, 0, int(shape));
00178 }
00179 virtual void setProjectionType(int projtype)
00180 {
00181 setInt(SOP_PAINT_PROJTYPE_IDX, 0, 0, projtype);
00182 }
00183 virtual void useForegroundColor(void)
00184 {
00185 setInt(SOP_PAINT_COLOR_SWITCHER_IDX, 0, 0, 0);
00186 }
00187 virtual void useBackgroundColor(void)
00188 {
00189 setInt(SOP_PAINT_COLOR_SWITCHER_IDX, 0, 0, 1);
00190 }
00191
00192 virtual void setCurrentColor(const UT_Vector3 &cd)
00193 {
00194 int idx;
00195 idx = USE_FOREGROUND() ?SOP_PAINT_FG_IDX :SOP_PAINT_BG_IDX;
00196 setFloat(idx, 0, 0, cd.x());
00197 setFloat(idx, 1, 0, cd.y());
00198 setFloat(idx, 2, 0, cd.z());
00199 }
00200 virtual void setVisualization(int state)
00201 {
00202
00203 if( myForceVisualize != state )
00204 {
00205 myForceVisualize = state;
00206 forceRecook();
00207 }
00208 }
00209
00210 protected:
00211 virtual const char *inputLabel(unsigned idx) const;
00212
00213 protected:
00214 virtual void doErase();
00215
00216 public:
00217 virtual int altersGeometry() const { return 0; }
00218 virtual int altersColor() const { return 1; }
00219 virtual float RAWRADIUS(float t)
00220 { return evalFloat(SOP_PAINT_RAD_IDX, 0, t); }
00221 virtual float RAWUVRADIUS(float t)
00222 { return evalFloat(SOP_PAINT_UVRAD_IDX, 0, t); }
00223 virtual float RADIUSPRESSURE(float t)
00224 { return evalFloat(SOP_PAINT_RADPRESSURE_IDX, 0, t); }
00225 virtual float RAWOPACITY(float t)
00226 {return evalFloat(SOP_PAINT_OPAC_IDX, 0, t) ; }
00227 virtual float OPACITYPRESSURE(float t)
00228 {return evalFloat(SOP_PAINT_OPACPRESSURE_IDX, 0, t) ; }
00229
00230 virtual SOP_BrushOp OP(void)
00231 {
00232 switch (evalInt(SOP_PAINT_OP_IDX, 0, 0))
00233 {
00234 case 0: return SOP_BRUSHOP_PAINT;
00235 case 1: return SOP_BRUSHOP_EYEDROP;
00236 case 2: return SOP_BRUSHOP_SMOOTHATTRIB;
00237 case 3: default: return SOP_BRUSHOP_ERASE;
00238 }
00239 }
00240
00241 virtual int ACCUMSTENCIL(void)
00242 { return evalInt(SOP_PAINT_STENCILACCUM_IDX, 0, 0);}
00243 virtual int PROJECTIONTYPE(void)
00244 { return evalInt(SOP_PAINT_PROJTYPE_IDX, 0, 0); }
00245 virtual int REALTIME(void)
00246 { return evalInt(SOP_PAINT_REALTIME_IDX, 0, 0); }
00247 virtual int SHAPE(float t)
00248 { return evalInt(SOP_PAINT_SHAPE_IDX, 0, t); }
00249
00250 protected:
00251 virtual int MERGEMODE()
00252 { return evalInt(SOP_PAINT_MERGEMODE_IDX, 0, 0); }
00253 virtual void SCRIPT (UT_String &, float ) {}
00254 virtual int AXIS(void) { return 0 ; }
00255 virtual float USERX(float) { return 0.0f; }
00256 virtual float USERY(float) { return 0.0f; }
00257 virtual float USERZ(float) { return 0.0f; }
00258
00259 virtual float RAYORIENTX(float t)
00260 { return evalFloat(SOP_PAINT_RAY_ORIENT_IDX,0,t); }
00261 virtual float RAYORIENTY(float t)
00262 { return evalFloat(SOP_PAINT_RAY_ORIENT_IDX,1,t); }
00263 virtual float RAYORIENTZ(float t)
00264 { return evalFloat(SOP_PAINT_RAY_ORIENT_IDX,2,t); }
00265 virtual float RAYHITX(float t)
00266 { return evalFloat(SOP_PAINT_RAY_HITPOS_IDX,0,t); }
00267 virtual float RAYHITY(float t)
00268 { return evalFloat(SOP_PAINT_RAY_HITPOS_IDX,1,t); }
00269 virtual float RAYHITZ(float t)
00270 { return evalFloat(SOP_PAINT_RAY_HITPOS_IDX,2,t); }
00271 virtual float RAYHITU(float t)
00272 { return evalFloat(SOP_PAINT_RAY_HITUV_IDX, 0,t); }
00273 virtual float RAYHITV(float t)
00274 { return evalFloat(SOP_PAINT_RAY_HITUV_IDX, 1,t); }
00275 virtual float RAYHITPRESSURE(float t)
00276 { return evalFloat(SOP_PAINT_RAY_HITPRESSURE_IDX, 0, t); }
00277 virtual int PRIMHIT(float t)
00278 { return evalInt(SOP_PAINT_RAY_HITPRIM_IDX, 0,t); }
00279 virtual int PTHIT(float t)
00280 { return evalInt(SOP_PAINT_RAY_HITPT_IDX, 0, t); }
00281 virtual int EVENT()
00282 { return evalInt(SOP_PAINT_RAY_EVENT_IDX, 0,0); }
00283 virtual bool USE_FOREGROUND(void)
00284 { return evalInt(SOP_PAINT_COLOR_SWITCHER_IDX,
00285 0, 0) == 0; }
00286
00287 virtual float FGR(float t) { return evalFloat(SOP_PAINT_FG_IDX, 0, t); }
00288 virtual float FGG(float t) { return evalFloat(SOP_PAINT_FG_IDX, 1, t); }
00289 virtual float FGB(float t) { return evalFloat(SOP_PAINT_FG_IDX, 2, t); }
00290 virtual float BGR(float t) { return evalFloat(SOP_PAINT_BG_IDX, 0, t); }
00291 virtual float BGG(float t) { return evalFloat(SOP_PAINT_BG_IDX, 1, t); }
00292 virtual float BGB(float t) { return evalFloat(SOP_PAINT_BG_IDX, 2, t); }
00293
00294 virtual float SOFTEDGE(float t)
00295 { return evalFloat(SOP_PAINT_SOFTEDGE_IDX, 0, t); }
00296 virtual void KERNEL(UT_String &str, float t)
00297 { evalString(str, SOP_PAINT_KERNEL_IDX, 0, t); }
00298 virtual int UPTYPE(float t)
00299 { return evalInt(SOP_PAINT_UPTYPE_IDX, 0, t); }
00300 virtual float UPX(float t)
00301 { return evalFloat(SOP_PAINT_UPVECTOR_IDX, 0, t); }
00302 virtual float UPY(float t)
00303 { return evalFloat(SOP_PAINT_UPVECTOR_IDX, 1, t); }
00304 virtual float UPZ(float t)
00305 { return evalFloat(SOP_PAINT_UPVECTOR_IDX, 2, t); }
00306
00307 virtual float PAPERNOISE(float t)
00308 { return evalFloat(SOP_PAINT_PAPER_IDX, 0, t); }
00309 virtual float SPLATTER(float t)
00310 { return evalFloat(SOP_PAINT_SPLATTER_IDX, 0, t); }
00311 virtual void BITMAP(UT_String &str, float t)
00312 { evalString(str, SOP_PAINT_BITMAP_IDX, 0, t); }
00313 virtual int BITMAPCHAN(float t)
00314 { return evalInt(SOP_PAINT_BITMAPCHAN_IDX, 0, t); }
00315 virtual float ANGLE(float t)
00316 { return evalFloat(SOP_PAINT_ANGLE_IDX, 0, t); }
00317 virtual float SQUASH(float t)
00318 { return evalFloat(SOP_PAINT_SQUASH_IDX, 0, t); }
00319 virtual int DOSTAMPING()
00320 { return evalInt(SOP_PAINT_STAMP_IDX, 0, 0); }
00321 virtual int WRITEALPHA()
00322 { return evalInt(SOP_PAINT_WRITEALPHA_IDX, 0, 0); }
00323
00324 virtual int OVERRIDECD()
00325 { return evalInt(SOP_PAINT_OVERRIDECD_IDX, 0, 0); }
00326 virtual void CDNAME(UT_String &str, float t)
00327 { evalString(str, SOP_PAINT_CDNAME_IDX, 0, t); }
00328 virtual int OVERRIDEALPHA()
00329 { return evalInt(SOP_PAINT_OVERRIDEALPHA_IDX,0,0); }
00330 virtual void ALPHANAME(UT_String &str, float t)
00331 { evalString(str, SOP_PAINT_ALPHANAME_IDX, 0,t); }
00332 virtual int OVERRIDENML() { return 0; }
00333 virtual void NMLNAME(UT_String & , float ) {}
00334
00335 virtual float SYMMETRYDIRX(float t)
00336 { return evalFloat(SOP_PAINT_SYMAXIS_IDX, 0, t); }
00337 virtual float SYMMETRYDIRY(float t)
00338 { return evalFloat(SOP_PAINT_SYMAXIS_IDX, 1, t); }
00339 virtual float SYMMETRYDIRZ(float t)
00340 { return evalFloat(SOP_PAINT_SYMAXIS_IDX, 2, t); }
00341 virtual float SYMMETRYORIGX(float t)
00342 { return evalFloat(SOP_PAINT_SYMORIG_IDX, 0, t); }
00343 virtual float SYMMETRYORIGY(float t)
00344 { return evalFloat(SOP_PAINT_SYMORIG_IDX, 1, t); }
00345 virtual float SYMMETRYORIGZ(float t)
00346 { return evalFloat(SOP_PAINT_SYMORIG_IDX, 2, t); }
00347 virtual int DOREFLECTION()
00348 { return evalInt(SOP_PAINT_DOREFLECT_IDX,0, 0); }
00349 virtual int DOROTATION()
00350 { return evalInt(SOP_PAINT_DOROTATION_IDX,0, 0); }
00351 virtual int SYMMETRYROT(float t)
00352 { return evalInt(SOP_PAINT_SYMROT_IDX,0, t); }
00353 virtual float SYMMETRYDIST(float t)
00354 { return evalFloat(SOP_PAINT_SYMDIST_IDX,0, t); }
00355
00356 virtual int DOUVREFLECTION()
00357 { return evalInt(SOP_PAINT_DOUVREFLECT_IDX, 0, 0); }
00358 virtual float SYMMETRYUVORIGU(float t)
00359 { return evalFloat(SOP_PAINT_SYMUVORIG_IDX, 0, t); }
00360 virtual float SYMMETRYUVORIGV(float t)
00361 { return evalFloat(SOP_PAINT_SYMUVORIG_IDX, 1, t); }
00362 virtual float SYMMETRYUVANGLE(float t)
00363 { return evalFloat(SOP_PAINT_SYMUVANGLE_IDX, 0, t);}
00364
00365 virtual int ADDATTRIB()
00366 { return evalInt(SOP_PAINT_ADDATTRIB_IDX, 0, 0); }
00367 virtual int VISUALIZE()
00368 { return myForceVisualize ||
00369 evalInt(SOP_PAINT_VISUALIZE_IDX, 0, 0); }
00370 virtual float VISLOW(float t)
00371 { return evalFloat(SOP_PAINT_VISRANGE_IDX, 0, t); }
00372 virtual float VISHIGH(float t)
00373 { return evalFloat(SOP_PAINT_VISRANGE_IDX, 1, t); }
00374 virtual int VISMODE()
00375 { return evalInt(SOP_PAINT_VISMODE_IDX, 0, 0); }
00376
00377 virtual int USECONNECTIVITY()
00378 { return evalInt(SOP_PAINT_USECONNECTIVITY_IDX, 0, 0); }
00379 virtual int USEDEPTH()
00380 { return evalInt(SOP_PAINT_USEDEPTH_IDX, 0, 0); }
00381 virtual float DEPTH(float t)
00382 { return evalFloat(SOP_PAINT_DEPTH_IDX, 0, t); }
00383 virtual float HEIGHT(float t)
00384 { return evalFloat(SOP_PAINT_DEPTH_IDX, 1, t); }
00385
00386
00387
00388
00389 virtual bool hasStrokeChanged(float t);
00390 virtual bool hasStyleChanged(float t);
00391
00392
00393 virtual bool hasNibFileChanged(float t);
00394 virtual bool hasAccumStencilChanged(float t);
00395 virtual bool hasNibLookChanged(float t);
00396
00397 virtual bool hasVisrangeChanged(float t);
00398 };
00399
00400 #endif