00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef __SOP_BrushHairLen__
00029 #define __SOP_BrushHairLen__
00030
00031 #include <SOP/SOP_Node.h>
00032 #include <SOP/SOP_BrushBase.h>
00033
00034 namespace HDK_Sample {
00035 class SOP_BrushHairLen : public SOP_BrushBase
00036 {
00037 public:
00038 SOP_BrushHairLen(OP_Network *net, const char *, OP_Operator *entry);
00039 virtual ~SOP_BrushHairLen();
00040
00041 virtual unsigned disableParms();
00042
00043 static OP_Node *myConstructor(OP_Network *net, const char *name,
00044 OP_Operator *entry);
00045 static PRM_Template myTemplateList[];
00046
00047
00048 void brushOpCallback(
00049 GEO_Point *pt,
00050 const UT_PtrArray<const GEO_Point *> *ptneighbour,
00051 GEO_Vertex *vtx,
00052 const UT_PtrArray<const GEO_Vertex *> *vtxneighbour,
00053 GEO_Primitive *vtx_prim,
00054 int prim_vtx_idx,
00055 float alpha,
00056 GEO_Delta *delta);
00057
00058 protected:
00059 virtual OP_ERROR cookMySop (OP_Context &context);
00060
00061
00062
00063
00064
00065
00066
00067 public:
00068
00069 const GU_Detail *getIsectGdp();
00070
00071
00072
00073
00074 virtual int altersGeometry() const
00075 { return 0; }
00076
00077 virtual int altersColor() const
00078 { return 1; }
00079
00080
00081 virtual float RAWRADIUS(float t)
00082 { return evalFloat("radius", 0, t); }
00083
00084 virtual float RAWUVRADIUS(float t)
00085 { return evalFloat("uvradius", 0, t); }
00086
00087 virtual float RADIUSPRESSURE(float )
00088 { return 1.0f; }
00089
00090 virtual float RAWOPACITY(float )
00091 { return 1.0f; }
00092 virtual float OPACITYPRESSURE(float )
00093 { return 1.0f; }
00094
00095
00096
00097 virtual float DEPTH(float t)
00098 { return evalFloat("radius", 0, t); }
00099 virtual float HEIGHT(float t)
00100 { return evalFloat("radius", 0, t); }
00101
00102 virtual int USEDEPTH()
00103 { return 1; }
00104
00105
00106 virtual int USECONNECTIVITY()
00107 { return 0; }
00108
00109
00110
00111 virtual SOP_BrushOp OP();
00112
00113
00114 virtual int ACCUMSTENCIL()
00115 { return 0; }
00116
00117
00118 virtual int PROJECTIONTYPE()
00119 { return 0; }
00120
00121
00122
00123 virtual int REALTIME()
00124 { return 1; }
00125
00126 virtual int SHAPE(float )
00127 { return SOP_BRUSHSHAPE_CIRCLE; }
00128
00129
00130 protected:
00131
00132
00133 virtual int MERGEMODE()
00134 { return GU_BRUSHMERGEMODE_REPLACE; }
00135
00136
00137 virtual void SCRIPT(UT_String & , float )
00138 { }
00139
00140
00141 virtual int AXIS()
00142 { return 0; }
00143 virtual float USERX(float )
00144 { return 0.0f; }
00145 virtual float USERY(float )
00146 { return 0.0f; }
00147 virtual float USERZ(float )
00148 { return 0.0f; }
00149
00150
00151 virtual float RAYORIENTX(float )
00152 { return myRayOrient.x(); }
00153 virtual float RAYORIENTY(float )
00154 { return myRayOrient.y(); }
00155 virtual float RAYORIENTZ(float )
00156 { return myRayOrient.z(); }
00157 virtual float RAYHITX(float )
00158 { return myRayHit.x(); }
00159 virtual float RAYHITY(float )
00160 { return myRayHit.y(); }
00161 virtual float RAYHITZ(float )
00162 { return myRayHit.z(); }
00163 virtual float RAYHITU(float )
00164 { return myRayHitU; }
00165 virtual float RAYHITV(float )
00166 { return myRayHitV; }
00167 virtual float RAYHITPRESSURE(float )
00168 { return myRayHitPressure; }
00169 virtual int PRIMHIT(float )
00170 { return myPrimHit; }
00171 virtual int PTHIT(float )
00172 { return myPtHit; }
00173 virtual int EVENT()
00174 { return myEvent; }
00175
00176
00177
00178
00179
00180 virtual bool USE_FOREGROUND()
00181 { return myUseFore; }
00182 virtual float FGR(float t)
00183 { return evalFloat("flen", 0, t); }
00184 virtual float FGG(float )
00185 { return 0.0f; }
00186 virtual float FGB(float )
00187 { return 0.0f; }
00188 virtual float BGR(float t)
00189 { return evalFloat("blen", 0, t); }
00190 virtual float BGG(float )
00191 { return 0.0f; }
00192 virtual float BGB(float )
00193 { return 0.0f; }
00194
00195
00196
00197
00198 virtual float SOFTEDGE(float )
00199 { return 1.0f; }
00200
00201 virtual void KERNEL(UT_String &str, float )
00202 { str = "Elendt"; }
00203
00204 virtual int UPTYPE(float )
00205 { return 0; }
00206 virtual float UPX(float )
00207 { return 0.0f; }
00208 virtual float UPY(float )
00209 { return 0.0f; }
00210 virtual float UPZ(float )
00211 { return 0.0f; }
00212
00213
00214 virtual float PAPERNOISE(float )
00215 { return 0.0f; }
00216
00217 virtual float SPLATTER(float )
00218 { return 0.0f; }
00219
00220 virtual void BITMAP(UT_String & , float )
00221 { }
00222
00223 virtual int BITMAPCHAN(float )
00224 { return 0; }
00225
00226 virtual float ANGLE(float )
00227 { return 0.0f; }
00228 virtual float SQUASH(float )
00229 { return 1.0f; }
00230 virtual int DOSTAMPING()
00231 { return 0; }
00232 virtual int WRITEALPHA()
00233 { return 0; }
00234
00235
00236 virtual int OVERRIDECD()
00237 { return 1; }
00238 virtual void CDNAME(UT_String &str, float )
00239 { str = "hairlen"; }
00240
00241 virtual int OVERRIDEALPHA()
00242 { return 0; }
00243 virtual void ALPHANAME(UT_String & , float )
00244 { }
00245
00246 virtual int PRESERVENML()
00247 { return 0; }
00248
00249 virtual int OVERRIDENML()
00250 { return 0; }
00251 virtual void NMLNAME(UT_String & , float )
00252 { }
00253
00254
00255
00256 virtual int DOREFLECTION()
00257 { return 0; }
00258 virtual int DOROTATION()
00259 { return 0; }
00260 virtual float SYMMETRYDIRX(float )
00261 { return 0.0f; }
00262 virtual float SYMMETRYDIRY(float )
00263 { return 0.0f; }
00264 virtual float SYMMETRYDIRZ(float )
00265 { return 0.0f; }
00266 virtual float SYMMETRYORIGX(float )
00267 { return 0.0f; }
00268 virtual float SYMMETRYORIGY(float )
00269 { return 0.0f; }
00270 virtual float SYMMETRYORIGZ(float )
00271 { return 0.0f; }
00272 virtual int SYMMETRYROT(float )
00273 { return 0; }
00274 virtual float SYMMETRYDIST(float )
00275 { return 0.0f; }
00276
00277
00278
00279 virtual int ADDATTRIB()
00280 { return 0; }
00281
00282 virtual int VISUALIZE()
00283 { return 0; }
00284 virtual int VISTYPE()
00285 { return 0; }
00286 virtual float VISLOW(float )
00287 { return 0.0f; }
00288 virtual float VISHIGH(float )
00289 { return 1.0f; }
00290 virtual int VISMODE()
00291 { return 0; }
00292 virtual float ZEROWEIGHTCOLOR_R()
00293 { return 1.0f; }
00294 virtual float ZEROWEIGHTCOLOR_G()
00295 { return 1.0f; }
00296 virtual float ZEROWEIGHTCOLOR_B()
00297 { return 1.0f; }
00298
00299
00300
00301 virtual int NORMALIZEWEIGHT()
00302 { return 0; }
00303
00304
00305 virtual int USECAPTURE()
00306 { return 0; }
00307
00308 virtual int CAPTUREIDX(float )
00309 { return 0; }
00310
00311
00312
00313
00314
00315
00316 virtual bool hasStrokeChanged(float )
00317 { return myStrokeChanged; }
00318
00319
00320
00321 virtual bool hasStyleChanged(float t);
00322
00323 virtual bool hasNibFileChanged(float )
00324 { return false; }
00325
00326
00327 virtual bool hasNibLookChanged(float )
00328 { return false; }
00329
00330 virtual bool hasAccumStencilChanged(float )
00331 { return false; }
00332
00333 virtual bool hasCaptureIdxChanged(float )
00334 { return false; }
00335
00336 virtual bool hasVisrangeChanged(float )
00337 { return false; }
00338
00339
00340
00341 virtual bool wantsCookSelection() const
00342 { return false; }
00343
00344
00345
00346
00347 public:
00348
00349
00350 virtual void setAccumulateStencil(bool ) {}
00351 virtual void setRayOrigin(const UT_Vector3 &orig, float )
00352 { myRayHit = orig; myStrokeChanged = true; forceRecook(); }
00353 virtual void setRayOrientation(const UT_Vector3 &orient, float )
00354 { myRayOrient = orient; myStrokeChanged = true; forceRecook(); }
00355 virtual void setHitPrimitive(int primidx, float )
00356 { myPrimHit = primidx; myStrokeChanged = true; forceRecook(); }
00357 virtual void setHitPoint(int ptidx, float )
00358 { myPtHit = ptidx; myStrokeChanged = true; forceRecook(); }
00359 virtual void setHitUV(float u, float v, float )
00360 { myRayHitU = u; myRayHitV = v; myStrokeChanged = true; forceRecook(); }
00361 virtual void setHitPressure(float pressure, float )
00362 { myRayHitPressure = pressure; myStrokeChanged = true; forceRecook(); }
00363 virtual void setBrushEvent(SOP_BrushEvent event)
00364 { myEvent = event; myStrokeChanged = true; forceRecook(); }
00365
00366
00367 virtual void setBrushOp(SOP_BrushOp op);
00368
00369
00370 virtual void setBrushShape(SOP_BrushShape ) {}
00371
00372
00373 virtual void setProjectionType(int ) {}
00374 virtual void useForegroundColor()
00375 { myUseFore = true; }
00376 virtual void useBackgroundColor()
00377 { myUseFore = false; }
00378
00379
00380 virtual void setCurrentColor(const UT_Vector3 &cd)
00381 {
00382 setFloat(myUseFore ? "flen" : "blen", 0, 0, cd.x());
00383 }
00384
00385
00386 virtual void setRadius(float r, float t)
00387 {
00388 setFloat("radius", 0, t, r);
00389 }
00390 virtual void setUVRadius(float r, float t)
00391 {
00392 setFloat("uvradius", 0, t, r);
00393 }
00394
00395 protected:
00396
00397
00398 virtual void doErase();
00399
00400 private:
00401
00402 UT_Vector3 myRayOrient, myRayHit;
00403 float myRayHitU, myRayHitV;
00404 float myRayHitPressure;
00405 int myPrimHit;
00406 int myPtHit;
00407 int myEvent;
00408 bool myUseFore;
00409 bool myStrokeChanged;
00410
00411
00412
00413
00414 int myHairlenIdx;
00415 float myTime;
00416 };
00417 }
00418
00419 #endif