00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef __SOP_Comb_h__
00022 #define __SOP_Comb_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_COMB_GRP_IDX = SOP_GDT_GRP_IDX,
00035
00036 SOP_COMB_SWITCHER_IDX,
00037
00038 #define SOP_COMB_NUM_DEFORM_PARMS (6)
00039 SOP_COMB_LIFT_IDX,
00040 SOP_COMB_PRESERVENML_IDX,
00041 SOP_COMB_OVRNML_IDX,
00042 SOP_COMB_NMLNAME_IDX,
00043 SOP_COMB_CLEARALL_IDX,
00044 SOP_COMB_OP_IDX,
00045
00046 #define SOP_COMB_NUM_NIB_PARMS (18)
00047 SOP_COMB_SHAPE_IDX,
00048 SOP_COMB_BITMAP_IDX,
00049 SOP_COMB_BITMAPCHAN_IDX,
00050 SOP_COMB_RAD_IDX,
00051 SOP_COMB_UVRAD_IDX,
00052 SOP_COMB_RADPRESSURE_IDX,
00053 SOP_COMB_USEDEPTH_IDX,
00054 SOP_COMB_DEPTH_IDX,
00055 SOP_COMB_ANGLE_IDX,
00056 SOP_COMB_SQUASH_IDX,
00057 SOP_COMB_OPAC_IDX,
00058 SOP_COMB_OPACPRESSURE_IDX,
00059 SOP_COMB_SPLATTER_IDX,
00060 SOP_COMB_PAPER_IDX,
00061 SOP_COMB_SOFTEDGE_IDX,
00062 SOP_COMB_KERNEL_IDX,
00063 SOP_COMB_UPTYPE_IDX,
00064 SOP_COMB_UPVECTOR_IDX,
00065
00066 #define SOP_COMB_NUM_SYM_PARMS (9)
00067 SOP_COMB_DOREFLECT_IDX,
00068 SOP_COMB_DOROTATION_IDX,
00069 SOP_COMB_SYMAXIS_IDX,
00070 SOP_COMB_SYMORIG_IDX,
00071 SOP_COMB_SYMROT_IDX,
00072 SOP_COMB_SYMDIST_IDX,
00073 SOP_COMB_DOUVREFLECT_IDX,
00074 SOP_COMB_SYMUVORIG_IDX,
00075 SOP_COMB_SYMUVANGLE_IDX,
00076
00077 #define SOP_COMB_NUM_RAY_PARMS (10)
00078 SOP_COMB_PROJTYPE_IDX,
00079 SOP_COMB_USECONNECTIVITY_IDX,
00080 SOP_COMB_REALTIME_IDX,
00081 SOP_COMB_RAY_ORIENT_IDX,
00082 SOP_COMB_RAY_HITPOS_IDX,
00083 SOP_COMB_RAY_HITPRIM_IDX,
00084 SOP_COMB_RAY_HITUV_IDX,
00085 SOP_COMB_RAY_HITPRESSURE_IDX,
00086 SOP_COMB_RAY_HITPT_IDX,
00087 SOP_COMB_RAY_EVENT_IDX
00088 };
00089
00090 class SOP_API SOP_Comb : public SOP_BrushBase
00091 {
00092 public:
00093 SOP_Comb(OP_Network *net, const char *name, OP_Operator *entry);
00094 virtual ~SOP_Comb();
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, fpreal t)
00108 {
00109 setFloat(SOP_COMB_RAY_HITPOS_IDX, 0, t, orig.x());
00110 setFloat(SOP_COMB_RAY_HITPOS_IDX, 1, t, orig.y());
00111 setFloat(SOP_COMB_RAY_HITPOS_IDX, 2, t, orig.z());
00112 }
00113 virtual void setRayOrientation(const UT_Vector3 &orient, fpreal t)
00114 {
00115 setFloat(SOP_COMB_RAY_ORIENT_IDX, 0, t, orient.x());
00116 setFloat(SOP_COMB_RAY_ORIENT_IDX, 1, t, orient.y());
00117 setFloat(SOP_COMB_RAY_ORIENT_IDX, 2, t, orient.z());
00118 }
00119 virtual void setHitPrimitive(int primidx, fpreal t)
00120 {
00121 setInt(SOP_COMB_RAY_HITPRIM_IDX, 0, t, primidx);
00122 }
00123 virtual void setRadius(fpreal r, fpreal t)
00124 {
00125 setFloat(SOP_COMB_RAD_IDX, 0, t, r);
00126 }
00127 virtual void setUVRadius(fpreal r, fpreal t)
00128 {
00129 setFloat(SOP_COMB_UVRAD_IDX, 0, t, r);
00130 }
00131 virtual void setHitPoint(int pt, fpreal t)
00132 {
00133 setInt(SOP_COMB_RAY_HITPT_IDX, 0, t, pt);
00134 }
00135 virtual void setHitUV(fpreal u, fpreal v, fpreal t)
00136 {
00137 setFloat(SOP_COMB_RAY_HITUV_IDX, 0, t, u);
00138 setFloat(SOP_COMB_RAY_HITUV_IDX, 1, t, v);
00139 }
00140 virtual void setHitPressure(fpreal p, fpreal t)
00141 {
00142 setFloat(SOP_COMB_RAY_HITPRESSURE_IDX, 0, t, p);
00143 }
00144 virtual void setBrushEvent(SOP_BrushEvent event)
00145 {
00146 setInt(SOP_COMB_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_SMOOTHNORMAL: iop = 1; break;
00154 case SOP_BRUSHOP_ERASE: iop = 2; break;
00155 case SOP_BRUSHOP_COMB:
00156 default: iop = 0; break;
00157 }
00158 setInt(SOP_COMB_OP_IDX, 0, 0, iop);
00159 }
00160 virtual void setBrushShape(SOP_BrushShape shape)
00161 {
00162 setInt(SOP_COMB_SHAPE_IDX, 0, 0, int(shape));
00163 }
00164 virtual void setProjectionType(int projtype)
00165 {
00166 setInt(SOP_COMB_PROJTYPE_IDX, 0, 0, projtype);
00167 }
00168 virtual void useForegroundColor(void)
00169 {
00170 }
00171 virtual void useBackgroundColor(void)
00172 {
00173 }
00174
00175 virtual int altersGeometry() const { return 0; }
00176 virtual int altersColor() const { return 0; }
00177 virtual fpreal RAWRADIUS(fpreal t)
00178 { return evalFloat(SOP_COMB_RAD_IDX, 0, t); }
00179 virtual fpreal RAWUVRADIUS(fpreal t)
00180 { return evalFloat(SOP_COMB_UVRAD_IDX, 0, t); }
00181 virtual fpreal RADIUSPRESSURE(fpreal t)
00182 { return evalFloat(SOP_COMB_RADPRESSURE_IDX, 0, t); }
00183 virtual fpreal RAWOPACITY(fpreal t)
00184 {return evalFloat(SOP_COMB_OPAC_IDX, 0, t); }
00185 virtual fpreal OPACITYPRESSURE(fpreal t)
00186 {return evalFloat(SOP_COMB_OPACPRESSURE_IDX, 0, t) ; }
00187
00188 virtual SOP_BrushOp OP(void)
00189 {
00190 switch (evalInt(SOP_COMB_OP_IDX, 0, 0))
00191 {
00192 case 0: return SOP_BRUSHOP_COMB;
00193 case 1: return SOP_BRUSHOP_SMOOTHNORMAL;
00194 case 2: default: return SOP_BRUSHOP_ERASE;
00195 }
00196 }
00197 virtual int ACCUMSTENCIL(void) { return 0; }
00198 virtual int PROJECTIONTYPE(void)
00199 { return evalInt(SOP_COMB_PROJTYPE_IDX, 0, 0); }
00200 virtual int REALTIME(void)
00201 { return evalInt(SOP_COMB_REALTIME_IDX, 0, 0); }
00202 virtual int SHAPE(fpreal t)
00203 { return evalInt(SOP_COMB_SHAPE_IDX, 0, t); }
00204 virtual int OVERRIDENML()
00205 { return evalInt(SOP_COMB_OVRNML_IDX, 0, 0); }
00206 virtual void NMLNAME(UT_String &str, fpreal t)
00207 { evalString(str, SOP_COMB_NMLNAME_IDX, 0, t); }
00208
00209 protected:
00210 virtual const char *inputLabel(unsigned idx) const;
00211 virtual void doErase();
00212
00213
00214 virtual int MERGEMODE() { return 0; }
00215 virtual void SCRIPT (UT_String &, fpreal ) {}
00216 virtual int AXIS(void) { return 0 ; }
00217 virtual fpreal USERX(fpreal) { return 0.0; }
00218 virtual fpreal USERY(fpreal) { return 0.0; }
00219 virtual fpreal USERZ(fpreal) { return 0.0; }
00220
00221 virtual fpreal RAYORIENTX(fpreal t)
00222 { return evalFloat(SOP_COMB_RAY_ORIENT_IDX, 0, t); }
00223 virtual fpreal RAYORIENTY(fpreal t)
00224 { return evalFloat(SOP_COMB_RAY_ORIENT_IDX, 1, t); }
00225 virtual fpreal RAYORIENTZ(fpreal t)
00226 { return evalFloat(SOP_COMB_RAY_ORIENT_IDX, 2, t); }
00227 virtual fpreal RAYHITX(fpreal t)
00228 { return evalFloat(SOP_COMB_RAY_HITPOS_IDX, 0, t); }
00229 virtual fpreal RAYHITY(fpreal t)
00230 { return evalFloat(SOP_COMB_RAY_HITPOS_IDX, 1, t); }
00231 virtual fpreal RAYHITZ(fpreal t)
00232 { return evalFloat(SOP_COMB_RAY_HITPOS_IDX, 2, t); }
00233 virtual fpreal RAYHITU(fpreal t)
00234 { return evalFloat(SOP_COMB_RAY_HITUV_IDX, 0, t); }
00235 virtual fpreal RAYHITV(fpreal t)
00236 { return evalFloat(SOP_COMB_RAY_HITUV_IDX, 1, t); }
00237 virtual fpreal RAYHITPRESSURE(fpreal t)
00238 { return evalFloat(SOP_COMB_RAY_HITPRESSURE_IDX, 0, t); }
00239 virtual int PRIMHIT(fpreal t)
00240 { return evalInt(SOP_COMB_RAY_HITPRIM_IDX,0, t); }
00241 virtual int PTHIT(fpreal t)
00242 { return evalInt(SOP_COMB_RAY_HITPT_IDX, 0, t); }
00243 virtual int EVENT()
00244 { return evalInt(SOP_COMB_RAY_EVENT_IDX, 0, 0); }
00245 virtual bool USE_FOREGROUND(void)
00246 { return 1; }
00247
00248
00249 virtual fpreal FGR(fpreal t)
00250 { return evalFloat(SOP_COMB_LIFT_IDX, 0, t); }
00251 virtual fpreal FGG(fpreal) { return 0.0; }
00252 virtual fpreal FGB(fpreal) { return 0.0; }
00253 virtual fpreal BGR(fpreal) { return 0.0; }
00254 virtual fpreal BGG(fpreal) { return 0.0; }
00255 virtual fpreal BGB(fpreal) { return 0.0; }
00256
00257 virtual fpreal SOFTEDGE(fpreal t)
00258 { return evalFloat(SOP_COMB_SOFTEDGE_IDX, 0, t); }
00259 virtual void KERNEL(UT_String &str, fpreal t)
00260 { evalString(str, SOP_COMB_KERNEL_IDX, 0, t); }
00261 virtual int UPTYPE(fpreal t)
00262 { return evalInt(SOP_COMB_UPTYPE_IDX, 0, t); }
00263 virtual fpreal UPX(fpreal t)
00264 { return evalFloat(SOP_COMB_UPVECTOR_IDX, 0, t); }
00265 virtual fpreal UPY(fpreal t)
00266 { return evalFloat(SOP_COMB_UPVECTOR_IDX, 1, t); }
00267 virtual fpreal UPZ(fpreal t)
00268 { return evalFloat(SOP_COMB_UPVECTOR_IDX, 2, t); }
00269
00270 virtual fpreal PAPERNOISE(fpreal t)
00271 { return evalFloat(SOP_COMB_PAPER_IDX, 0, t); }
00272 virtual fpreal SPLATTER(fpreal t)
00273 { return evalFloat(SOP_COMB_SPLATTER_IDX, 0, t); }
00274 virtual void BITMAP(UT_String &str, fpreal t)
00275 { evalString(str, SOP_COMB_BITMAP_IDX, 0, t); }
00276 virtual int BITMAPCHAN(fpreal t)
00277 { return evalInt(SOP_COMB_BITMAPCHAN_IDX, 0, t); }
00278 virtual fpreal ANGLE(fpreal t)
00279 { return evalFloat(SOP_COMB_ANGLE_IDX, 0, t); }
00280 virtual fpreal SQUASH(fpreal t)
00281 { return evalFloat(SOP_COMB_SQUASH_IDX, 0, t); }
00282
00283 virtual int DOSTAMPING() { return 0; }
00284 virtual int WRITEALPHA() { return 0; }
00285 virtual int OVERRIDECD() { return 0; }
00286 virtual void CDNAME(UT_String &, fpreal) { }
00287 virtual int OVERRIDEALPHA() { return 0; }
00288 virtual void ALPHANAME(UT_String &, fpreal) { }
00289 virtual int ADDATTRIB() { return 1; }
00290 virtual int PRESERVENML()
00291 { return evalInt(SOP_COMB_PRESERVENML_IDX, 0, 0); }
00292 virtual fpreal SYMMETRYDIRX(fpreal t)
00293 { return evalFloat(SOP_COMB_SYMAXIS_IDX, 0, t); }
00294 virtual fpreal SYMMETRYDIRY(fpreal t)
00295 { return evalFloat(SOP_COMB_SYMAXIS_IDX, 1, t); }
00296 virtual fpreal SYMMETRYDIRZ(fpreal t)
00297 { return evalFloat(SOP_COMB_SYMAXIS_IDX, 2, t); }
00298 virtual fpreal SYMMETRYORIGX(fpreal t)
00299 { return evalFloat(SOP_COMB_SYMORIG_IDX, 0, t); }
00300 virtual fpreal SYMMETRYORIGY(fpreal t)
00301 { return evalFloat(SOP_COMB_SYMORIG_IDX, 1, t); }
00302 virtual fpreal SYMMETRYORIGZ(fpreal t)
00303 { return evalFloat(SOP_COMB_SYMORIG_IDX, 2, t); }
00304 virtual int DOREFLECTION()
00305 { return evalInt(SOP_COMB_DOREFLECT_IDX,0, 0); }
00306 virtual int DOROTATION()
00307 { return evalInt(SOP_COMB_DOROTATION_IDX,0, 0); }
00308 virtual int SYMMETRYROT(fpreal t)
00309 { return evalInt(SOP_COMB_SYMROT_IDX,0, t); }
00310 virtual fpreal SYMMETRYDIST(fpreal t)
00311 { return evalFloat(SOP_COMB_SYMDIST_IDX,0, t); }
00312
00313 virtual int DOUVREFLECTION()
00314 { return evalInt(SOP_COMB_DOUVREFLECT_IDX, 0, 0); }
00315 virtual fpreal SYMMETRYUVORIGU(fpreal t)
00316 { return evalFloat(SOP_COMB_SYMUVORIG_IDX, 0, t); }
00317 virtual fpreal SYMMETRYUVORIGV(fpreal t)
00318 { return evalFloat(SOP_COMB_SYMUVORIG_IDX, 1, t); }
00319 virtual fpreal SYMMETRYUVANGLE(fpreal t)
00320 { return evalFloat(SOP_COMB_SYMUVANGLE_IDX, 0, t);}
00321
00322 virtual int USECONNECTIVITY()
00323 { return evalInt(SOP_COMB_USECONNECTIVITY_IDX, 0, 0); }
00324 virtual int USEDEPTH()
00325 { return evalInt(SOP_COMB_USEDEPTH_IDX, 0, 0); }
00326 virtual fpreal DEPTH(fpreal t)
00327 { return evalFloat(SOP_COMB_DEPTH_IDX, 0, t); }
00328 virtual fpreal HEIGHT(fpreal t)
00329 { return evalFloat(SOP_COMB_DEPTH_IDX, 1, t); }
00330
00331
00332
00333 virtual bool hasStrokeChanged(fpreal t);
00334 virtual bool hasStyleChanged(fpreal t);
00335
00336
00337 virtual bool hasNibFileChanged(fpreal t);
00338 virtual bool hasAccumStencilChanged(fpreal t);
00339 virtual bool hasNibLookChanged(fpreal t);
00340
00341
00342 virtual bool wantsCookSelection(void) const { return true; }
00343
00344 };
00345
00346 #endif