00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef __SOP_UVBrush_h__
00022 #define __SOP_UVBrush_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_UVBRUSH_GRP_IDX = SOP_GDT_GRP_IDX,
00035
00036 SOP_UVBRUSH_SWITCHER_IDX,
00037
00038 #define SOP_UVBRUSH_NUM_DEFORM_PARMS (4)
00039 SOP_UVBRUSH_FOREBACK_SWITCHER_IDX,
00040 SOP_UVBRUSH_FS_IDX,
00041 SOP_UVBRUSH_BS_IDX,
00042 SOP_UVBRUSH_FLOODAPPLY_IDX,
00043 SOP_UVBRUSH_OP_IDX,
00044 SOP_UVBRUSH_CLEARALL_IDX,
00045
00046 #define SOP_UVBRUSH_NUM_NIB_PARMS (18)
00047 SOP_UVBRUSH_SHAPE_IDX,
00048 SOP_UVBRUSH_BITMAP_IDX,
00049 SOP_UVBRUSH_BITMAPCHAN_IDX,
00050 SOP_UVBRUSH_RAD_IDX,
00051 SOP_UVBRUSH_UVRAD_IDX,
00052 SOP_UVBRUSH_RADPRESSURE_IDX,
00053 SOP_UVBRUSH_USEDEPTH_IDX,
00054 SOP_UVBRUSH_DEPTH_IDX,
00055 SOP_UVBRUSH_ANGLE_IDX,
00056 SOP_UVBRUSH_SQUASH_IDX,
00057 SOP_UVBRUSH_OPAC_IDX,
00058 SOP_UVBRUSH_OPACPRESSURE_IDX,
00059 SOP_UVBRUSH_SPLATTER_IDX,
00060 SOP_UVBRUSH_PAPER_IDX,
00061 SOP_UVBRUSH_SOFTEDGE_IDX,
00062 SOP_UVBRUSH_KERNEL_IDX,
00063 SOP_UVBRUSH_UPTYPE_IDX,
00064 SOP_UVBRUSH_UPVECTOR_IDX,
00065
00066 #define SOP_UVBRUSH_NUM_SYM_PARMS (9)
00067 SOP_UVBRUSH_DOREFLECT_IDX,
00068 SOP_UVBRUSH_DOROTATION_IDX,
00069 SOP_UVBRUSH_SYMAXIS_IDX,
00070 SOP_UVBRUSH_SYMORIG_IDX,
00071 SOP_UVBRUSH_SYMROT_IDX,
00072 SOP_UVBRUSH_SYMDIST_IDX,
00073 SOP_UVBRUSH_DOUVREFLECT_IDX,
00074 SOP_UVBRUSH_SYMUVORIG_IDX,
00075 SOP_UVBRUSH_SYMUVANGLE_IDX,
00076
00077 #define SOP_UVBRUSH_NUM_RAY_PARMS (10)
00078 SOP_UVBRUSH_PROJTYPE_IDX,
00079 SOP_UVBRUSH_USECONNECTIVITY_IDX,
00080 SOP_UVBRUSH_REALTIME_IDX,
00081 SOP_UVBRUSH_RAY_ORIENT_IDX,
00082 SOP_UVBRUSH_RAY_HITPOS_IDX,
00083 SOP_UVBRUSH_RAY_HITPRIM_IDX,
00084 SOP_UVBRUSH_RAY_HITUV_IDX,
00085 SOP_UVBRUSH_RAY_HITPRESSURE_IDX,
00086 SOP_UVBRUSH_RAY_HITPT_IDX,
00087 SOP_UVBRUSH_RAY_EVENT_IDX
00088 };
00089
00090 class SOP_API SOP_UVBrush : public SOP_BrushBase
00091 {
00092 public:
00093 SOP_UVBrush(OP_Network *net, const char *name, OP_Operator *entry);
00094 virtual ~SOP_UVBrush();
00095
00096 virtual unsigned disableParms();
00097
00098 static OP_Node *myConstructor(OP_Network *net,
00099 const char *name,
00100 OP_Operator *entry);
00101
00102 static PRM_Template myTemplateList[];
00103
00104 virtual void setAccumulateStencil(bool )
00105 {
00106 }
00107 virtual void setRayOrigin(const UT_Vector3 &orig, float t)
00108 {
00109 setFloat(SOP_UVBRUSH_RAY_HITPOS_IDX, 0, t, orig.x());
00110 setFloat(SOP_UVBRUSH_RAY_HITPOS_IDX, 1, t, orig.y());
00111 setFloat(SOP_UVBRUSH_RAY_HITPOS_IDX, 2, t, orig.z());
00112 }
00113 virtual void setRayOrientation(const UT_Vector3 &orient, float t)
00114 {
00115 setFloat(SOP_UVBRUSH_RAY_ORIENT_IDX, 0, t, orient.x());
00116 setFloat(SOP_UVBRUSH_RAY_ORIENT_IDX, 1, t, orient.y());
00117 setFloat(SOP_UVBRUSH_RAY_ORIENT_IDX, 2, t, orient.z());
00118 }
00119 virtual void setHitPrimitive(int primidx, float t)
00120 {
00121 setInt(SOP_UVBRUSH_RAY_HITPRIM_IDX, 0, t, primidx);
00122 }
00123 virtual void setHitPoint(int pt, float t)
00124 {
00125 setInt(SOP_UVBRUSH_RAY_HITPT_IDX, 0, t, pt);
00126 }
00127 virtual void setHitUV(float u, float v, float t)
00128 {
00129 setFloat(SOP_UVBRUSH_RAY_HITUV_IDX, 0, t, u);
00130 setFloat(SOP_UVBRUSH_RAY_HITUV_IDX, 1, t, v);
00131 }
00132 virtual void setHitPressure(float p, float t)
00133 {
00134 setFloat(SOP_UVBRUSH_RAY_HITPRESSURE_IDX, 0, t, p);
00135 }
00136 virtual void setRadius(float r, float t)
00137 {
00138 setFloat(SOP_UVBRUSH_RAD_IDX, 0, t, r);
00139 }
00140 virtual void setUVRadius(float r, float t)
00141 {
00142 setFloat(SOP_UVBRUSH_UVRAD_IDX, 0, t, r);
00143 }
00144 virtual void setBrushEvent(SOP_BrushEvent event)
00145 {
00146 setInt(SOP_UVBRUSH_RAY_EVENT_IDX, 0, 0, int(event));
00147 }
00148 virtual void setBrushOp(SOP_BrushOp op)
00149 {
00150 int iop;
00151 switch (op)
00152 {
00153 case SOP_BRUSHOP_SCALETEXTURE: iop = 1; break;
00154 case SOP_BRUSHOP_SMOOTHTEXTURE: iop = 2; break;
00155 case SOP_BRUSHOP_ERASE: iop = 3; break;
00156 case SOP_BRUSHOP_DRAGTEXTURE:
00157 default: iop = 0; break;
00158 }
00159 setInt(SOP_UVBRUSH_OP_IDX, 0, 0, iop);
00160 }
00161 virtual void setBrushShape(SOP_BrushShape shape)
00162 {
00163 setInt(SOP_UVBRUSH_SHAPE_IDX, 0, 0, int(shape));
00164 }
00165 virtual void setProjectionType(int projtype)
00166 {
00167 setInt(SOP_UVBRUSH_PROJTYPE_IDX, 0, 0, projtype);
00168 }
00169 virtual void useForegroundColor(void)
00170 {
00171 setInt(SOP_UVBRUSH_FOREBACK_SWITCHER_IDX, 0, 0, 0);
00172 }
00173 virtual void useBackgroundColor(void)
00174 {
00175 setInt(SOP_UVBRUSH_FOREBACK_SWITCHER_IDX, 0, 0, 1);
00176 }
00177
00178 virtual void setCurrentColor(const UT_Vector3 &cd)
00179 {
00180 int idx;
00181 idx = USE_FOREGROUND() ?SOP_UVBRUSH_FS_IDX :SOP_UVBRUSH_BS_IDX;
00182 setFloat(idx, 0, 0, cd.x());
00183 }
00184 virtual void setVisualization(int state)
00185 {
00186
00187 if( myForceVisualize != state )
00188 {
00189 myForceVisualize = state;
00190 forceRecook();
00191 }
00192 }
00193
00194 protected:
00195 virtual const char *inputLabel(unsigned idx) const;
00196
00197 protected:
00198 virtual void doErase();
00199 virtual void addEraseAttributes(GU_Brush &brush);
00200
00201 public:
00202 virtual int altersGeometry() const { return 0; }
00203 virtual int altersColor() const { return 0; }
00204 virtual float RAWRADIUS(float t)
00205 { return evalFloat(SOP_UVBRUSH_RAD_IDX, 0, t); }
00206 virtual float RAWUVRADIUS(float t)
00207 { return evalFloat(SOP_UVBRUSH_UVRAD_IDX, 0, t); }
00208 virtual float RADIUSPRESSURE(float t)
00209 { return evalFloat(SOP_UVBRUSH_RADPRESSURE_IDX, 0, t); }
00210 virtual float RAWOPACITY(float t)
00211 {return evalFloat(SOP_UVBRUSH_OPAC_IDX, 0, t) ; }
00212 virtual float OPACITYPRESSURE(float t)
00213 {return evalFloat(SOP_UVBRUSH_OPACPRESSURE_IDX, 0, t) ; }
00214
00215 virtual SOP_BrushOp OP(void)
00216 {
00217 switch (evalInt(SOP_UVBRUSH_OP_IDX, 0, 0))
00218 {
00219 case 0: return SOP_BRUSHOP_DRAGTEXTURE;
00220 case 1: return SOP_BRUSHOP_SCALETEXTURE;
00221 case 2: return SOP_BRUSHOP_SMOOTHTEXTURE;
00222 case 3: default: return SOP_BRUSHOP_ERASE;
00223 }
00224 }
00225
00226 virtual int ACCUMSTENCIL(void)
00227 { return 0;}
00228 virtual int PROJECTIONTYPE(void)
00229 { return evalInt(SOP_UVBRUSH_PROJTYPE_IDX, 0, 0); }
00230 virtual int REALTIME(void)
00231 { return evalInt(SOP_UVBRUSH_REALTIME_IDX, 0, 0); }
00232 virtual int SHAPE(float t)
00233 { return evalInt(SOP_UVBRUSH_SHAPE_IDX, 0, t); }
00234
00235 protected:
00236 virtual int MERGEMODE()
00237 { return 0; }
00238 virtual void SCRIPT (UT_String &, float ) {}
00239 virtual int AXIS(void) { return 0 ; }
00240 virtual float USERX(float) { return 0.0f; }
00241 virtual float USERY(float) { return 0.0f; }
00242 virtual float USERZ(float) { return 0.0f; }
00243
00244 virtual float RAYORIENTX(float t)
00245 { return evalFloat(SOP_UVBRUSH_RAY_ORIENT_IDX,0,t); }
00246 virtual float RAYORIENTY(float t)
00247 { return evalFloat(SOP_UVBRUSH_RAY_ORIENT_IDX,1,t); }
00248 virtual float RAYORIENTZ(float t)
00249 { return evalFloat(SOP_UVBRUSH_RAY_ORIENT_IDX,2,t); }
00250 virtual float RAYHITX(float t)
00251 { return evalFloat(SOP_UVBRUSH_RAY_HITPOS_IDX,0,t); }
00252 virtual float RAYHITY(float t)
00253 { return evalFloat(SOP_UVBRUSH_RAY_HITPOS_IDX,1,t); }
00254 virtual float RAYHITZ(float t)
00255 { return evalFloat(SOP_UVBRUSH_RAY_HITPOS_IDX,2,t); }
00256 virtual float RAYHITU(float t)
00257 { return evalFloat(SOP_UVBRUSH_RAY_HITUV_IDX, 0,t); }
00258 virtual float RAYHITV(float t)
00259 { return evalFloat(SOP_UVBRUSH_RAY_HITUV_IDX, 1,t); }
00260 virtual float RAYHITPRESSURE(float t)
00261 { return evalFloat(SOP_UVBRUSH_RAY_HITPRESSURE_IDX, 0, t); }
00262 virtual int PRIMHIT(float t)
00263 { return evalInt(SOP_UVBRUSH_RAY_HITPRIM_IDX, 0,t); }
00264 virtual int PTHIT(float t)
00265 { return evalInt(SOP_UVBRUSH_RAY_HITPT_IDX, 0, t); }
00266 virtual int EVENT()
00267 { return evalInt(SOP_UVBRUSH_RAY_EVENT_IDX, 0,0); }
00268 virtual bool USE_FOREGROUND(void)
00269 { return evalInt(SOP_UVBRUSH_FOREBACK_SWITCHER_IDX,
00270 0, 0) == 0; }
00271
00272 virtual float FGR(float t) { return evalFloat(SOP_UVBRUSH_FS_IDX, 0, t); }
00273 virtual float FGG(float ) { return 0; }
00274 virtual float FGB(float ) { return 0; }
00275 virtual float BGR(float t) { return evalFloat(SOP_UVBRUSH_BS_IDX, 0, t); }
00276 virtual float BGG(float ) { return 0; }
00277 virtual float BGB(float ) { return 0; }
00278
00279 virtual float SOFTEDGE(float t)
00280 { return evalFloat(SOP_UVBRUSH_SOFTEDGE_IDX, 0, t); }
00281 virtual void KERNEL(UT_String &str, float t)
00282 { evalString(str, SOP_UVBRUSH_KERNEL_IDX, 0, t); }
00283 virtual int UPTYPE(float t)
00284 { return evalInt(SOP_UVBRUSH_UPTYPE_IDX, 0, t); }
00285 virtual float UPX(float t)
00286 { return evalFloat(SOP_UVBRUSH_UPVECTOR_IDX, 0, t); }
00287 virtual float UPY(float t)
00288 { return evalFloat(SOP_UVBRUSH_UPVECTOR_IDX, 1, t); }
00289 virtual float UPZ(float t)
00290 { return evalFloat(SOP_UVBRUSH_UPVECTOR_IDX, 2, t); }
00291
00292 virtual float PAPERNOISE(float t)
00293 { return evalFloat(SOP_UVBRUSH_PAPER_IDX, 0, t); }
00294 virtual float SPLATTER(float t)
00295 { return evalFloat(SOP_UVBRUSH_SPLATTER_IDX, 0, t); }
00296 virtual void BITMAP(UT_String &str, float t)
00297 { evalString(str, SOP_UVBRUSH_BITMAP_IDX, 0, t); }
00298 virtual int BITMAPCHAN(float t)
00299 { return evalInt(SOP_UVBRUSH_BITMAPCHAN_IDX, 0, t); }
00300 virtual float ANGLE(float t)
00301 { return evalFloat(SOP_UVBRUSH_ANGLE_IDX, 0, t); }
00302 virtual float SQUASH(float t)
00303 { return evalFloat(SOP_UVBRUSH_SQUASH_IDX, 0, t); }
00304 virtual int DOSTAMPING() { return 0; }
00305 virtual int WRITEALPHA() { return 0; }
00306
00307 virtual int OVERRIDECD() { return 0; }
00308 virtual void CDNAME(UT_String &, float ) { }
00309 virtual int OVERRIDEALPHA() { return 0; }
00310 virtual void ALPHANAME(UT_String &, float ) { }
00311 virtual int OVERRIDENML() { return 0; }
00312 virtual void NMLNAME(UT_String & , float ) {}
00313
00314 virtual float SYMMETRYDIRX(float t)
00315 { return evalFloat(SOP_UVBRUSH_SYMAXIS_IDX, 0, t); }
00316 virtual float SYMMETRYDIRY(float t)
00317 { return evalFloat(SOP_UVBRUSH_SYMAXIS_IDX, 1, t); }
00318 virtual float SYMMETRYDIRZ(float t)
00319 { return evalFloat(SOP_UVBRUSH_SYMAXIS_IDX, 2, t); }
00320 virtual float SYMMETRYORIGX(float t)
00321 { return evalFloat(SOP_UVBRUSH_SYMORIG_IDX, 0, t); }
00322 virtual float SYMMETRYORIGY(float t)
00323 { return evalFloat(SOP_UVBRUSH_SYMORIG_IDX, 1, t); }
00324 virtual float SYMMETRYORIGZ(float t)
00325 { return evalFloat(SOP_UVBRUSH_SYMORIG_IDX, 2, t); }
00326 virtual int DOREFLECTION()
00327 { return evalInt(SOP_UVBRUSH_DOREFLECT_IDX,0, 0); }
00328 virtual int DOROTATION()
00329 { return evalInt(SOP_UVBRUSH_DOROTATION_IDX,0, 0); }
00330 virtual int SYMMETRYROT(float t)
00331 { return evalInt(SOP_UVBRUSH_SYMROT_IDX,0, t); }
00332 virtual float SYMMETRYDIST(float t)
00333 { return evalFloat(SOP_UVBRUSH_SYMDIST_IDX,0, t); }
00334
00335 virtual int DOUVREFLECTION()
00336 { return evalInt(SOP_UVBRUSH_DOUVREFLECT_IDX, 0, 0); }
00337 virtual float SYMMETRYUVORIGU(float t)
00338 { return evalFloat(SOP_UVBRUSH_SYMUVORIG_IDX, 0, t); }
00339 virtual float SYMMETRYUVORIGV(float t)
00340 { return evalFloat(SOP_UVBRUSH_SYMUVORIG_IDX, 1, t); }
00341 virtual float SYMMETRYUVANGLE(float t)
00342 { return evalFloat(SOP_UVBRUSH_SYMUVANGLE_IDX, 0, t);}
00343
00344 virtual int ADDATTRIB() { return 0; }
00345 virtual int VISUALIZE() { return 0; }
00346 virtual float VISLOW(float) { return 0; }
00347 virtual float VISHIGH(float) { return 1; }
00348 virtual int VISMODE() { return 0; }
00349
00350 virtual int USECONNECTIVITY()
00351 { return evalInt(SOP_UVBRUSH_USECONNECTIVITY_IDX, 0, 0); }
00352 virtual int USEDEPTH()
00353 { return evalInt(SOP_UVBRUSH_USEDEPTH_IDX, 0, 0); }
00354 virtual float DEPTH(float t)
00355 { return evalFloat(SOP_UVBRUSH_DEPTH_IDX, 0, t); }
00356 virtual float HEIGHT(float t)
00357 { return evalFloat(SOP_UVBRUSH_DEPTH_IDX, 1, t); }
00358
00359
00360
00361
00362 virtual bool hasStrokeChanged(float t);
00363 virtual bool hasStyleChanged(float t);
00364
00365
00366 virtual bool hasNibFileChanged(float t);
00367 virtual bool hasAccumStencilChanged(float t);
00368 virtual bool hasNibLookChanged(float t);
00369
00370 virtual bool hasVisrangeChanged(float t);
00371 };
00372
00373 #endif