HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
SOP_HairClump.proto.h
Go to the documentation of this file.
1 /* Automagically Generated by generate_proto.py
2  * Do not Edit
3  */
4 #pragma once
5 
6 #include <SOP/SOP_API.h>
7 #include <SOP/SOP_NodeVerb.h>
8 #include <SOP/SOP_GraphProxy.h>
9 
10 #include <OP/OP_Utils.h>
11 #include <PRM/PRM_Parm.h>
12 #include <UT/UT_IStream.h>
13 #include <UT/UT_NTStreamUtil.h>
14 #include <UT/UT_Ramp.h>
15 #include <UT/UT_SharedPtr.h>
16 #include <UT/UT_StringHolder.h>
17 #include <UT/UT_StringStream.h>
18 #include <UT/UT_VectorTypes.h>
19 #include <UT/UT_EnvControl.h>
20 #include <SYS/SYS_Types.h>
21 
22 class DEP_MicroNode;
23 namespace SOP_HairClumpEnums
24 {
25  enum class Blendoverride
26  {
27  NONE = 0,
29  SKINATTRIB,
30  TEXTURE,
32  };
33 
35  getToken(Blendoverride enum_value)
36  {
37  using namespace UT::Literal;
38  switch (enum_value) {
39  case Blendoverride::NONE: return "none"_sh;
40  case Blendoverride::CURVEATTRIB: return "curveattrib"_sh;
41  case Blendoverride::SKINATTRIB: return "skinattrib"_sh;
42  case Blendoverride::TEXTURE: return "texture"_sh;
43  case Blendoverride::TEXTUREPRIM: return "textureprim"_sh;
44  default: UT_ASSERT(false); return ""_sh;
45  }
46  }
47 
48  enum class Clumpsizeoverride
49  {
50  NONE = 0,
51  SKINATTRIB,
52  TEXTURE,
54  };
55 
58  {
59  using namespace UT::Literal;
60  switch (enum_value) {
61  case Clumpsizeoverride::NONE: return "none"_sh;
62  case Clumpsizeoverride::SKINATTRIB: return "skinattrib"_sh;
63  case Clumpsizeoverride::TEXTURE: return "texture"_sh;
64  case Clumpsizeoverride::TEXTUREPRIM: return "textureprim"_sh;
65  default: UT_ASSERT(false); return ""_sh;
66  }
67  }
68 
69  enum class Method
70  {
71  LINEARBLEND = 0,
73  };
74 
76  getToken(Method enum_value)
77  {
78  using namespace UT::Literal;
79  switch (enum_value) {
80  case Method::LINEARBLEND: return "linearblend"_sh;
81  case Method::EXTRUDEBLEND: return "extrudeblend"_sh;
82  default: UT_ASSERT(false); return ""_sh;
83  }
84  }
85 
86  enum class Tightnessoverride
87  {
88  NONE = 0,
91  SKINATTRIB,
92  TEXTURE,
94  };
95 
98  {
99  using namespace UT::Literal;
100  switch (enum_value) {
101  case Tightnessoverride::NONE: return "none"_sh;
102  case Tightnessoverride::CLUMPATTRIB: return "clumpattrib"_sh;
103  case Tightnessoverride::CURVEATTRIB: return "curveattrib"_sh;
104  case Tightnessoverride::SKINATTRIB: return "skinattrib"_sh;
105  case Tightnessoverride::TEXTURE: return "texture"_sh;
106  case Tightnessoverride::TEXTUREPRIM: return "textureprim"_sh;
107  default: UT_ASSERT(false); return ""_sh;
108  }
109  }
110 
112  {
113  NONE = 0,
114  CLUMPATTRIB,
115  CURVEATTRIB,
116  SKINATTRIB,
117  TEXTURE,
119  };
120 
123  {
124  using namespace UT::Literal;
125  switch (enum_value) {
126  case Strayamountoverride::NONE: return "none"_sh;
127  case Strayamountoverride::CLUMPATTRIB: return "clumpattrib"_sh;
128  case Strayamountoverride::CURVEATTRIB: return "curveattrib"_sh;
129  case Strayamountoverride::SKINATTRIB: return "skinattrib"_sh;
130  case Strayamountoverride::TEXTURE: return "texture"_sh;
131  case Strayamountoverride::TEXTUREPRIM: return "textureprim"_sh;
132  default: UT_ASSERT(false); return ""_sh;
133  }
134  }
135 
136  enum class Strayrateoverride
137  {
138  NONE = 0,
139  CLUMPATTRIB,
140  CURVEATTRIB,
141  SKINATTRIB,
142  TEXTURE,
144  };
145 
148  {
149  using namespace UT::Literal;
150  switch (enum_value) {
151  case Strayrateoverride::NONE: return "none"_sh;
152  case Strayrateoverride::CLUMPATTRIB: return "clumpattrib"_sh;
153  case Strayrateoverride::CURVEATTRIB: return "curveattrib"_sh;
154  case Strayrateoverride::SKINATTRIB: return "skinattrib"_sh;
155  case Strayrateoverride::TEXTURE: return "texture"_sh;
156  case Strayrateoverride::TEXTUREPRIM: return "textureprim"_sh;
157  default: UT_ASSERT(false); return ""_sh;
158  }
159  }
160 
162  {
163  NONE = 0,
164  CLUMPATTRIB,
165  CURVEATTRIB,
166  SKINATTRIB,
167  TEXTURE,
169  };
170 
173  {
174  using namespace UT::Literal;
175  switch (enum_value) {
176  case Strayfalloffoverride::NONE: return "none"_sh;
177  case Strayfalloffoverride::CLUMPATTRIB: return "clumpattrib"_sh;
178  case Strayfalloffoverride::CURVEATTRIB: return "curveattrib"_sh;
179  case Strayfalloffoverride::SKINATTRIB: return "skinattrib"_sh;
180  case Strayfalloffoverride::TEXTURE: return "texture"_sh;
181  case Strayfalloffoverride::TEXTUREPRIM: return "textureprim"_sh;
182  default: UT_ASSERT(false); return ""_sh;
183  }
184  }
185 
187  {
188  NONE = 0,
189  CURVEATTRIB,
190  SKINATTRIB,
191  TEXTURE,
193  };
194 
197  {
198  using namespace UT::Literal;
199  switch (enum_value) {
200  case Iterationsoverride::NONE: return "none"_sh;
201  case Iterationsoverride::CURVEATTRIB: return "curveattrib"_sh;
202  case Iterationsoverride::SKINATTRIB: return "skinattrib"_sh;
203  case Iterationsoverride::TEXTURE: return "texture"_sh;
204  case Iterationsoverride::TEXTUREPRIM: return "textureprim"_sh;
205  default: UT_ASSERT(false); return ""_sh;
206  }
207  }
208 
210  {
211  NONE = 0,
212  SKINATTRIB,
213  TEXTURE,
215  };
216 
219  {
220  using namespace UT::Literal;
221  switch (enum_value) {
222  case Sizereductionoverride::NONE: return "none"_sh;
223  case Sizereductionoverride::SKINATTRIB: return "skinattrib"_sh;
224  case Sizereductionoverride::TEXTURE: return "texture"_sh;
225  case Sizereductionoverride::TEXTUREPRIM: return "textureprim"_sh;
226  default: UT_ASSERT(false); return ""_sh;
227  }
228  }
229 
231  {
232  NONE = 0,
233  SKINATTRIB,
234  TEXTURE,
236  };
237 
240  {
241  using namespace UT::Literal;
242  switch (enum_value) {
243  case Goalfeedbackoverride::NONE: return "none"_sh;
244  case Goalfeedbackoverride::SKINATTRIB: return "skinattrib"_sh;
245  case Goalfeedbackoverride::TEXTURE: return "texture"_sh;
246  case Goalfeedbackoverride::TEXTUREPRIM: return "textureprim"_sh;
247  default: UT_ASSERT(false); return ""_sh;
248  }
249  }
250 
252  {
253  NONE = 0,
254  CURVEATTRIB,
255  SKINATTRIB,
256  TEXTURE,
258  };
259 
262  {
263  using namespace UT::Literal;
264  switch (enum_value) {
265  case Tightnessreductionoverride::NONE: return "none"_sh;
266  case Tightnessreductionoverride::CURVEATTRIB: return "curveattrib"_sh;
267  case Tightnessreductionoverride::SKINATTRIB: return "skinattrib"_sh;
268  case Tightnessreductionoverride::TEXTURE: return "texture"_sh;
269  case Tightnessreductionoverride::TEXTUREPRIM: return "textureprim"_sh;
270  default: UT_ASSERT(false); return ""_sh;
271  }
272  }
273 
274  enum class Curlampoverride
275  {
276  NONE = 0,
277  CURVEATTRIB,
278  SKINATTRIB,
279  TEXTURE,
281  };
282 
285  {
286  using namespace UT::Literal;
287  switch (enum_value) {
288  case Curlampoverride::NONE: return "none"_sh;
289  case Curlampoverride::CURVEATTRIB: return "curveattrib"_sh;
290  case Curlampoverride::SKINATTRIB: return "skinattrib"_sh;
291  case Curlampoverride::TEXTURE: return "texture"_sh;
292  case Curlampoverride::TEXTUREPRIM: return "textureprim"_sh;
293  default: UT_ASSERT(false); return ""_sh;
294  }
295  }
296 
297  enum class Curlfreqoverride
298  {
299  NONE = 0,
300  CURVEATTRIB,
301  SKINATTRIB,
302  TEXTURE,
304  };
305 
308  {
309  using namespace UT::Literal;
310  switch (enum_value) {
311  case Curlfreqoverride::NONE: return "none"_sh;
312  case Curlfreqoverride::CURVEATTRIB: return "curveattrib"_sh;
313  case Curlfreqoverride::SKINATTRIB: return "skinattrib"_sh;
314  case Curlfreqoverride::TEXTURE: return "texture"_sh;
315  case Curlfreqoverride::TEXTUREPRIM: return "textureprim"_sh;
316  default: UT_ASSERT(false); return ""_sh;
317  }
318  }
319 
320 }
321 
322 
324 {
325 public:
326  static int version() { return 1; }
327 
329  {
330  myLegacymasking = false;
331  myUvattrib = "uv"_UTsh;
332  myBlend = 1;
333  myBlendoverride = 0;
334  myBlendoptions = 0;
335  myBlendinrange = UT_Vector2D(0,1);
336  myBlendoutrange = UT_Vector2D(0,1);
337  myBlendremapramp = UT_SharedPtr<UT_Ramp>(0);
338  myBlendcurveattrib = "clumpmask"_UTsh;
339  myBlendattrib = "clumpmask"_UTsh;
340  myBlendtexture = ""_UTsh;
341  myBlendtextureprim = "mask"_UTsh;
342  myUseskinmask = false;
343  mySkinmaskattrib = "clumpmask"_UTsh;
344  myClumpsize = 0.05;
345  myClumpsizeoverride = 0;
346  myClumpsizeoptions = 0;
347  myClumpsizeinrange = UT_Vector2D(0,1);
348  myClumpsizeoutrange = UT_Vector2D(0,1);
349  myClumpsizeremapramp = UT_SharedPtr<UT_Ramp>(0);
350  myClumpsizeattrib = "clumpsize"_UTsh;
351  myClumpsizetexture = ""_UTsh;
352  myClumpsizetextureprim = "mask"_UTsh;
353  mySearchbeyondradius = true;
354  myClumpwithinclumps = true;
355  myCrossoverrate = 0.2;
356  mySeed = 0;
357  myMethod = 1;
358  myPreservelength = true;
359  myExtendtomatch = 1;
360  myShortentomatch = 1;
361  myAccuratebundling = true;
362  myHairwidth = 0.001;
363  myHairwidthscale = 1;
364  myTightness = 1;
365  myTightnessoverride = 0;
366  myTightnessoptions = 0;
367  myTightnessinrange = UT_Vector2D(0,1);
368  myTightnessoutrange = UT_Vector2D(0,1);
369  myTightnessremapramp = UT_SharedPtr<UT_Ramp>(0);
370  myTightnesscurveattrib = "tightness"_UTsh;
371  myTightnessclumpattrib = "tightness"_UTsh;
372  myTightnessattrib = "tightness"_UTsh;
373  myTightnesstexture = ""_UTsh;
374  myTightnesstextureprim = "mask"_UTsh;
375  myStrayamount = 1;
376  myStrayamountoverride = 0;
377  myStrayamountoptions = 0;
378  myStrayamountinrange = UT_Vector2D(0,1);
379  myStrayamountoutrange = UT_Vector2D(0,1);
380  myStrayamountremapramp = UT_SharedPtr<UT_Ramp>(0);
381  myStrayamountcurveattrib = "strayamount"_UTsh;
382  myStrayamountclumpattrib = "strayamount"_UTsh;
383  myStrayamountattrib = "strayamount"_UTsh;
384  myStrayamounttexture = ""_UTsh;
385  myStrayamounttextureprim = "mask"_UTsh;
386  myStrayrate = 0;
387  myStrayrateoverride = 0;
388  myStrayrateoptions = 0;
389  myStrayrateinrange = UT_Vector2D(0,1);
390  myStrayrateoutrange = UT_Vector2D(0,1);
391  myStrayrateremapramp = UT_SharedPtr<UT_Ramp>(0);
392  myStrayratecurveattrib = "strayrate"_UTsh;
393  myStrayrateclumpattrib = "strayrate"_UTsh;
394  myStrayrateattrib = "strayrate"_UTsh;
395  myStrayratetexture = ""_UTsh;
396  myStrayratetextureprim = "mask"_UTsh;
397  myStrayfalloff = 1;
398  myStrayfalloffoverride = 0;
399  myStrayfalloffoptions = 0;
400  myStrayfalloffinrange = UT_Vector2D(0,1);
401  myStrayfalloffoutrange = UT_Vector2D(0,1);
402  myStrayfalloffremapramp = UT_SharedPtr<UT_Ramp>(0);
403  myStrayfalloffcurveattrib = "strayfalloff"_UTsh;
404  myStrayfalloffclumpattrib = "strayfalloff"_UTsh;
405  myStrayfalloffattrib = "strayfalloff"_UTsh;
406  myStrayfallofftexture = ""_UTsh;
407  myStrayfallofftextureprim = "mask"_UTsh;
408  myClumpprofile = UT_SharedPtr<UT_Ramp>(0);
409  myIterations = 1;
410  myIterationsoverride = 0;
411  myIterationsoptions = 0;
412  myIterationsinrange = UT_Vector2D(0,1);
413  myIterationsoutrange = UT_Vector2D(0,1);
414  myIterationsremapramp = UT_SharedPtr<UT_Ramp>(0);
415  myIterationscurveattrib = "clumpiterations"_UTsh;
416  myIterationsattrib = "clumpiterations"_UTsh;
417  myIterationstexture = ""_UTsh;
418  myIterationstextureprim = "mask"_UTsh;
419  mySizereduction = 0.4;
420  mySizereductionoverride = 0;
421  mySizereductionoptions = 0;
422  mySizereductioninrange = UT_Vector2D(0,1);
423  mySizereductionoutrange = UT_Vector2D(0,1);
424  mySizereductionremapramp = UT_SharedPtr<UT_Ramp>(0);
425  mySizereductionattrib = "clumpsizereduction"_UTsh;
426  mySizereductiontexture = ""_UTsh;
427  mySizereductiontextureprim = "mask"_UTsh;
428  myGoalfeedback = 0.1;
429  myGoalfeedbackoverride = 0;
430  myGoalfeedbackoptions = 0;
431  myGoalfeedbackinrange = UT_Vector2D(0,1);
432  myGoalfeedbackoutrange = UT_Vector2D(0,1);
433  myGoalfeedbackremapramp = UT_SharedPtr<UT_Ramp>(0);
434  myGoalfeedbackattrib = "clumpgoalfeedback"_UTsh;
435  myGoalfeedbacktexture = ""_UTsh;
436  myGoalfeedbacktextureprim = "mask"_UTsh;
437  myTightnessreduction = 0.2;
438  myTightnessreductionoverride = 0;
439  myTightnessreductionoptions = 0;
440  myTightnessreductioninrange = UT_Vector2D(0,1);
441  myTightnessreductionoutrange = UT_Vector2D(0,1);
442  myTightnessreductionremapramp = UT_SharedPtr<UT_Ramp>(0);
443  myTightnessreductioncurveattrib = "clumptightnessreduction"_UTsh;
444  myTightnessreductionattrib = "clumptightnessreduction"_UTsh;
445  myTightnessreductiontexture = ""_UTsh;
446  myTightnessreductiontextureprim = "mask"_UTsh;
447  myEnablecurling = false;
448  myCurlamp = 0;
449  myCurlampoverride = 0;
450  myCurlampoptions = 0;
451  myCurlampinrange = UT_Vector2D(0,1);
452  myCurlampoutrange = UT_Vector2D(0,1);
453  myCurlampremapramp = UT_SharedPtr<UT_Ramp>(0);
454  myCurlampcurveattrib = "clumpcurlamp"_UTsh;
455  myCurlampattrib = "clumpcurlamp"_UTsh;
456  myCurlamptexture = ""_UTsh;
457  myCurlamptextureprim = "mask"_UTsh;
458  myCurlampramp = UT_SharedPtr<UT_Ramp>(0);
459  myCurlfreq = 5;
460  myCurlfreqoverride = 0;
461  myCurlfreqoptions = 0;
462  myCurlfreqinrange = UT_Vector2D(0,1);
463  myCurlfreqoutrange = UT_Vector2D(0,1);
464  myCurlfreqremapramp = UT_SharedPtr<UT_Ramp>(0);
465  myCurlfreqcurveattrib = "clumpcurlfreq"_UTsh;
466  myCurlfreqattrib = "clumpcurlfreq"_UTsh;
467  myCurlfreqtexture = ""_UTsh;
468  myCurlfreqtextureprim = "mask"_UTsh;
469  myCurlfreqramp = UT_SharedPtr<UT_Ramp>(0);
470  myClumpidinputattrib = "clumpid"_UTsh;
471  myCreateclumpidattrib = true;
472  myClumpidoutputattrib = "clumpid"_UTsh;
473  myUseorientinputattrib = false;
474  myOrientinputattrib = "orient"_UTsh;
475  myCreatetightnessattrib = true;
476  myTightnessoutputattrib = "tightness"_UTsh;
477  myClumppointattribs = ""_UTsh;
478  myClumpprimattribs = ""_UTsh;
479 
480  }
481 
482  explicit SOP_HairClumpParms(const SOP_HairClumpParms &) = default;
483  SOP_HairClumpParms &operator=(const SOP_HairClumpParms &) = default;
484  SOP_HairClumpParms(SOP_HairClumpParms &&) noexcept = default;
485  SOP_HairClumpParms &operator=(SOP_HairClumpParms &&) noexcept = default;
486 
487  ~SOP_HairClumpParms() override {}
488 
489  bool operator==(const SOP_HairClumpParms &src) const
490  {
491  if (myLegacymasking != src.myLegacymasking) return false;
492  if (myUvattrib != src.myUvattrib) return false;
493  if (myBlend != src.myBlend) return false;
494  if (myBlendoverride != src.myBlendoverride) return false;
495  if (myBlendoptions != src.myBlendoptions) return false;
496  if (myBlendinrange != src.myBlendinrange) return false;
497  if (myBlendoutrange != src.myBlendoutrange) return false;
498  if (myBlendremapramp != src.myBlendremapramp)
499  { if (!myBlendremapramp || !src.myBlendremapramp || !(*myBlendremapramp == *src.myBlendremapramp)) return false; }
500  if (myBlendcurveattrib != src.myBlendcurveattrib) return false;
501  if (myBlendattrib != src.myBlendattrib) return false;
502  if (myBlendtexture != src.myBlendtexture) return false;
503  if (myBlendtextureprim != src.myBlendtextureprim) return false;
504  if (myUseskinmask != src.myUseskinmask) return false;
505  if (mySkinmaskattrib != src.mySkinmaskattrib) return false;
506  if (myClumpsize != src.myClumpsize) return false;
507  if (myClumpsizeoverride != src.myClumpsizeoverride) return false;
508  if (myClumpsizeoptions != src.myClumpsizeoptions) return false;
509  if (myClumpsizeinrange != src.myClumpsizeinrange) return false;
510  if (myClumpsizeoutrange != src.myClumpsizeoutrange) return false;
511  if (myClumpsizeremapramp != src.myClumpsizeremapramp)
512  { if (!myClumpsizeremapramp || !src.myClumpsizeremapramp || !(*myClumpsizeremapramp == *src.myClumpsizeremapramp)) return false; }
513  if (myClumpsizeattrib != src.myClumpsizeattrib) return false;
514  if (myClumpsizetexture != src.myClumpsizetexture) return false;
515  if (myClumpsizetextureprim != src.myClumpsizetextureprim) return false;
516  if (mySearchbeyondradius != src.mySearchbeyondradius) return false;
517  if (myClumpwithinclumps != src.myClumpwithinclumps) return false;
518  if (myCrossoverrate != src.myCrossoverrate) return false;
519  if (mySeed != src.mySeed) return false;
520  if (myMethod != src.myMethod) return false;
521  if (myPreservelength != src.myPreservelength) return false;
522  if (myExtendtomatch != src.myExtendtomatch) return false;
523  if (myShortentomatch != src.myShortentomatch) return false;
524  if (myAccuratebundling != src.myAccuratebundling) return false;
525  if (myHairwidth != src.myHairwidth) return false;
526  if (myHairwidthscale != src.myHairwidthscale) return false;
527  if (myTightness != src.myTightness) return false;
528  if (myTightnessoverride != src.myTightnessoverride) return false;
529  if (myTightnessoptions != src.myTightnessoptions) return false;
530  if (myTightnessinrange != src.myTightnessinrange) return false;
531  if (myTightnessoutrange != src.myTightnessoutrange) return false;
532  if (myTightnessremapramp != src.myTightnessremapramp)
533  { if (!myTightnessremapramp || !src.myTightnessremapramp || !(*myTightnessremapramp == *src.myTightnessremapramp)) return false; }
534  if (myTightnesscurveattrib != src.myTightnesscurveattrib) return false;
535  if (myTightnessclumpattrib != src.myTightnessclumpattrib) return false;
536  if (myTightnessattrib != src.myTightnessattrib) return false;
537  if (myTightnesstexture != src.myTightnesstexture) return false;
538  if (myTightnesstextureprim != src.myTightnesstextureprim) return false;
539  if (myStrayamount != src.myStrayamount) return false;
540  if (myStrayamountoverride != src.myStrayamountoverride) return false;
541  if (myStrayamountoptions != src.myStrayamountoptions) return false;
542  if (myStrayamountinrange != src.myStrayamountinrange) return false;
543  if (myStrayamountoutrange != src.myStrayamountoutrange) return false;
544  if (myStrayamountremapramp != src.myStrayamountremapramp)
545  { if (!myStrayamountremapramp || !src.myStrayamountremapramp || !(*myStrayamountremapramp == *src.myStrayamountremapramp)) return false; }
546  if (myStrayamountcurveattrib != src.myStrayamountcurveattrib) return false;
547  if (myStrayamountclumpattrib != src.myStrayamountclumpattrib) return false;
548  if (myStrayamountattrib != src.myStrayamountattrib) return false;
549  if (myStrayamounttexture != src.myStrayamounttexture) return false;
550  if (myStrayamounttextureprim != src.myStrayamounttextureprim) return false;
551  if (myStrayrate != src.myStrayrate) return false;
552  if (myStrayrateoverride != src.myStrayrateoverride) return false;
553  if (myStrayrateoptions != src.myStrayrateoptions) return false;
554  if (myStrayrateinrange != src.myStrayrateinrange) return false;
555  if (myStrayrateoutrange != src.myStrayrateoutrange) return false;
556  if (myStrayrateremapramp != src.myStrayrateremapramp)
557  { if (!myStrayrateremapramp || !src.myStrayrateremapramp || !(*myStrayrateremapramp == *src.myStrayrateremapramp)) return false; }
558  if (myStrayratecurveattrib != src.myStrayratecurveattrib) return false;
559  if (myStrayrateclumpattrib != src.myStrayrateclumpattrib) return false;
560  if (myStrayrateattrib != src.myStrayrateattrib) return false;
561  if (myStrayratetexture != src.myStrayratetexture) return false;
562  if (myStrayratetextureprim != src.myStrayratetextureprim) return false;
563  if (myStrayfalloff != src.myStrayfalloff) return false;
564  if (myStrayfalloffoverride != src.myStrayfalloffoverride) return false;
565  if (myStrayfalloffoptions != src.myStrayfalloffoptions) return false;
566  if (myStrayfalloffinrange != src.myStrayfalloffinrange) return false;
567  if (myStrayfalloffoutrange != src.myStrayfalloffoutrange) return false;
568  if (myStrayfalloffremapramp != src.myStrayfalloffremapramp)
569  { if (!myStrayfalloffremapramp || !src.myStrayfalloffremapramp || !(*myStrayfalloffremapramp == *src.myStrayfalloffremapramp)) return false; }
570  if (myStrayfalloffcurveattrib != src.myStrayfalloffcurveattrib) return false;
571  if (myStrayfalloffclumpattrib != src.myStrayfalloffclumpattrib) return false;
572  if (myStrayfalloffattrib != src.myStrayfalloffattrib) return false;
573  if (myStrayfallofftexture != src.myStrayfallofftexture) return false;
574  if (myStrayfallofftextureprim != src.myStrayfallofftextureprim) return false;
575  if (myClumpprofile != src.myClumpprofile)
576  { if (!myClumpprofile || !src.myClumpprofile || !(*myClumpprofile == *src.myClumpprofile)) return false; }
577  if (myIterations != src.myIterations) return false;
578  if (myIterationsoverride != src.myIterationsoverride) return false;
579  if (myIterationsoptions != src.myIterationsoptions) return false;
580  if (myIterationsinrange != src.myIterationsinrange) return false;
581  if (myIterationsoutrange != src.myIterationsoutrange) return false;
582  if (myIterationsremapramp != src.myIterationsremapramp)
583  { if (!myIterationsremapramp || !src.myIterationsremapramp || !(*myIterationsremapramp == *src.myIterationsremapramp)) return false; }
584  if (myIterationscurveattrib != src.myIterationscurveattrib) return false;
585  if (myIterationsattrib != src.myIterationsattrib) return false;
586  if (myIterationstexture != src.myIterationstexture) return false;
587  if (myIterationstextureprim != src.myIterationstextureprim) return false;
588  if (mySizereduction != src.mySizereduction) return false;
589  if (mySizereductionoverride != src.mySizereductionoverride) return false;
590  if (mySizereductionoptions != src.mySizereductionoptions) return false;
591  if (mySizereductioninrange != src.mySizereductioninrange) return false;
592  if (mySizereductionoutrange != src.mySizereductionoutrange) return false;
593  if (mySizereductionremapramp != src.mySizereductionremapramp)
594  { if (!mySizereductionremapramp || !src.mySizereductionremapramp || !(*mySizereductionremapramp == *src.mySizereductionremapramp)) return false; }
595  if (mySizereductionattrib != src.mySizereductionattrib) return false;
596  if (mySizereductiontexture != src.mySizereductiontexture) return false;
597  if (mySizereductiontextureprim != src.mySizereductiontextureprim) return false;
598  if (myGoalfeedback != src.myGoalfeedback) return false;
599  if (myGoalfeedbackoverride != src.myGoalfeedbackoverride) return false;
600  if (myGoalfeedbackoptions != src.myGoalfeedbackoptions) return false;
601  if (myGoalfeedbackinrange != src.myGoalfeedbackinrange) return false;
602  if (myGoalfeedbackoutrange != src.myGoalfeedbackoutrange) return false;
603  if (myGoalfeedbackremapramp != src.myGoalfeedbackremapramp)
604  { if (!myGoalfeedbackremapramp || !src.myGoalfeedbackremapramp || !(*myGoalfeedbackremapramp == *src.myGoalfeedbackremapramp)) return false; }
605  if (myGoalfeedbackattrib != src.myGoalfeedbackattrib) return false;
606  if (myGoalfeedbacktexture != src.myGoalfeedbacktexture) return false;
607  if (myGoalfeedbacktextureprim != src.myGoalfeedbacktextureprim) return false;
608  if (myTightnessreduction != src.myTightnessreduction) return false;
609  if (myTightnessreductionoverride != src.myTightnessreductionoverride) return false;
610  if (myTightnessreductionoptions != src.myTightnessreductionoptions) return false;
611  if (myTightnessreductioninrange != src.myTightnessreductioninrange) return false;
612  if (myTightnessreductionoutrange != src.myTightnessreductionoutrange) return false;
613  if (myTightnessreductionremapramp != src.myTightnessreductionremapramp)
614  { if (!myTightnessreductionremapramp || !src.myTightnessreductionremapramp || !(*myTightnessreductionremapramp == *src.myTightnessreductionremapramp)) return false; }
615  if (myTightnessreductioncurveattrib != src.myTightnessreductioncurveattrib) return false;
616  if (myTightnessreductionattrib != src.myTightnessreductionattrib) return false;
617  if (myTightnessreductiontexture != src.myTightnessreductiontexture) return false;
618  if (myTightnessreductiontextureprim != src.myTightnessreductiontextureprim) return false;
619  if (myEnablecurling != src.myEnablecurling) return false;
620  if (myCurlamp != src.myCurlamp) return false;
621  if (myCurlampoverride != src.myCurlampoverride) return false;
622  if (myCurlampoptions != src.myCurlampoptions) return false;
623  if (myCurlampinrange != src.myCurlampinrange) return false;
624  if (myCurlampoutrange != src.myCurlampoutrange) return false;
625  if (myCurlampremapramp != src.myCurlampremapramp)
626  { if (!myCurlampremapramp || !src.myCurlampremapramp || !(*myCurlampremapramp == *src.myCurlampremapramp)) return false; }
627  if (myCurlampcurveattrib != src.myCurlampcurveattrib) return false;
628  if (myCurlampattrib != src.myCurlampattrib) return false;
629  if (myCurlamptexture != src.myCurlamptexture) return false;
630  if (myCurlamptextureprim != src.myCurlamptextureprim) return false;
631  if (myCurlampramp != src.myCurlampramp)
632  { if (!myCurlampramp || !src.myCurlampramp || !(*myCurlampramp == *src.myCurlampramp)) return false; }
633  if (myCurlfreq != src.myCurlfreq) return false;
634  if (myCurlfreqoverride != src.myCurlfreqoverride) return false;
635  if (myCurlfreqoptions != src.myCurlfreqoptions) return false;
636  if (myCurlfreqinrange != src.myCurlfreqinrange) return false;
637  if (myCurlfreqoutrange != src.myCurlfreqoutrange) return false;
638  if (myCurlfreqremapramp != src.myCurlfreqremapramp)
639  { if (!myCurlfreqremapramp || !src.myCurlfreqremapramp || !(*myCurlfreqremapramp == *src.myCurlfreqremapramp)) return false; }
640  if (myCurlfreqcurveattrib != src.myCurlfreqcurveattrib) return false;
641  if (myCurlfreqattrib != src.myCurlfreqattrib) return false;
642  if (myCurlfreqtexture != src.myCurlfreqtexture) return false;
643  if (myCurlfreqtextureprim != src.myCurlfreqtextureprim) return false;
644  if (myCurlfreqramp != src.myCurlfreqramp)
645  { if (!myCurlfreqramp || !src.myCurlfreqramp || !(*myCurlfreqramp == *src.myCurlfreqramp)) return false; }
646  if (myClumpidinputattrib != src.myClumpidinputattrib) return false;
647  if (myCreateclumpidattrib != src.myCreateclumpidattrib) return false;
648  if (myClumpidoutputattrib != src.myClumpidoutputattrib) return false;
649  if (myUseorientinputattrib != src.myUseorientinputattrib) return false;
650  if (myOrientinputattrib != src.myOrientinputattrib) return false;
651  if (myCreatetightnessattrib != src.myCreatetightnessattrib) return false;
652  if (myTightnessoutputattrib != src.myTightnessoutputattrib) return false;
653  if (myClumppointattribs != src.myClumppointattribs) return false;
654  if (myClumpprimattribs != src.myClumpprimattribs) return false;
655 
656  return true;
657  }
658  bool operator!=(const SOP_HairClumpParms &src) const
659  {
660  return !operator==(src);
661  }
675 
676 
677 
678  void buildFromOp(const OP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
679  {
680  myLegacymasking = false;
681  if (true)
682  graph->evalOpParm(myLegacymasking, nodeidx, "legacymasking", time, 0);
683  myUvattrib = "uv"_UTsh;
684  if (true)
685  graph->evalOpParm(myUvattrib, nodeidx, "uvattrib", time, 0);
686  myBlend = 1;
687  if (true)
688  graph->evalOpParm(myBlend, nodeidx, "blend", time, 0);
689  myBlendoverride = 0;
690  if (true && ( (true&&!(((getLegacymasking()==1)))) ) )
691  graph->evalOpParm(myBlendoverride, nodeidx, "blendoverride", time, 0);
692  myBlendoptions = 0;
693  if (true)
694  graph->evalOpParm(myBlendoptions, nodeidx, "blendoptions", time, 0);
695  myBlendinrange = UT_Vector2D(0,1);
696  if (true && ( (true&&!(((int64(getBlendoverride())==0))||((getBlendoptions()!=1)&&(getBlendoptions()!=3)))) ) )
697  graph->evalOpParm(myBlendinrange, nodeidx, "blendinrange", time, 0);
698  myBlendoutrange = UT_Vector2D(0,1);
699  if (true && ( (true&&!(((int64(getBlendoverride())==0))||((getBlendoptions()!=1)&&(getBlendoptions()!=3)))) ) )
700  graph->evalOpParm(myBlendoutrange, nodeidx, "blendoutrange", time, 0);
701  myBlendremapramp = UT_SharedPtr<UT_Ramp>(0);
702  if (true && ( (true&&!(((getBlendoptions()!=2)&&(getBlendoptions()!=3)))) ) )
703  graph->evalOpParm(myBlendremapramp, nodeidx, "blendremapramp", time, 0);
704  myBlendcurveattrib = "clumpmask"_UTsh;
705  if (true && ( (true&&!(((int64(getBlendoverride())!=1))||((getLegacymasking()==1)))) ) )
706  graph->evalOpParm(myBlendcurveattrib, nodeidx, "blendcurveattrib", time, 0);
707  myBlendattrib = "clumpmask"_UTsh;
708  if (true && ( (true&&!(((int64(getBlendoverride())!=2))||((getLegacymasking()==1)))) ) )
709  graph->evalOpParm(myBlendattrib, nodeidx, "blendattrib", time, 0);
710  myBlendtexture = ""_UTsh;
711  if (true && ( (true&&!(((int64(getBlendoverride())!=3))||((getLegacymasking()==1)))) ) )
712  graph->evalOpParm(myBlendtexture, nodeidx, "blendtexture", time, 0);
713  myBlendtextureprim = "mask"_UTsh;
714  if (true && ( (true&&!(((int64(getBlendoverride())!=4)))) ) )
715  graph->evalOpParm(myBlendtextureprim, nodeidx, "blendtextureprim", time, 0);
716  myUseskinmask = false;
717  if (true && ( (true&&!(((getLegacymasking()==0)))) ) )
718  graph->evalOpParm(myUseskinmask, nodeidx, "useskinmask", time, 0);
719  mySkinmaskattrib = "clumpmask"_UTsh;
720  if (true && ( (true&&!(((getUseskinmask()==0))||((getLegacymasking()==0)))) ) )
721  graph->evalOpParm(mySkinmaskattrib, nodeidx, "skinmaskattrib", time, 0);
722  myClumpsize = 0.05;
723  if (true)
724  graph->evalOpParm(myClumpsize, nodeidx, "clumpsize", time, 0);
725  myClumpsizeoverride = 0;
726  if (true)
727  graph->evalOpParm(myClumpsizeoverride, nodeidx, "clumpsizeoverride", time, 0);
728  myClumpsizeoptions = 0;
729  if (true)
730  graph->evalOpParm(myClumpsizeoptions, nodeidx, "clumpsizeoptions", time, 0);
731  myClumpsizeinrange = UT_Vector2D(0,1);
732  if (true && ( (true&&!(((int64(getClumpsizeoverride())==0))||((getClumpsizeoptions()!=1)&&(getClumpsizeoptions()!=3)))) ) )
733  graph->evalOpParm(myClumpsizeinrange, nodeidx, "clumpsizeinrange", time, 0);
734  myClumpsizeoutrange = UT_Vector2D(0,1);
735  if (true && ( (true&&!(((int64(getClumpsizeoverride())==0))||((getClumpsizeoptions()!=1)&&(getClumpsizeoptions()!=3)))) ) )
736  graph->evalOpParm(myClumpsizeoutrange, nodeidx, "clumpsizeoutrange", time, 0);
737  myClumpsizeremapramp = UT_SharedPtr<UT_Ramp>(0);
738  if (true && ( (true&&!(((getClumpsizeoptions()!=2)&&(getClumpsizeoptions()!=3)))) ) )
739  graph->evalOpParm(myClumpsizeremapramp, nodeidx, "clumpsizeremapramp", time, 0);
740  myClumpsizeattrib = "clumpsize"_UTsh;
741  if (true && ( (true&&!(((int64(getClumpsizeoverride())!=1)))) ) )
742  graph->evalOpParm(myClumpsizeattrib, nodeidx, "clumpsizeattrib", time, 0);
743  myClumpsizetexture = ""_UTsh;
744  if (true && ( (true&&!(((int64(getClumpsizeoverride())!=2)))) ) )
745  graph->evalOpParm(myClumpsizetexture, nodeidx, "clumpsizetexture", time, 0);
746  myClumpsizetextureprim = "mask"_UTsh;
747  if (true && ( (true&&!(((int64(getClumpsizeoverride())!=3)))) ) )
748  graph->evalOpParm(myClumpsizetextureprim, nodeidx, "clumpsizetextureprim", time, 0);
749  mySearchbeyondradius = true;
750  if (true)
751  graph->evalOpParm(mySearchbeyondradius, nodeidx, "searchbeyondradius", time, 0);
752  myClumpwithinclumps = true;
753  if (true)
754  graph->evalOpParm(myClumpwithinclumps, nodeidx, "clumpwithinclumps", time, 0);
755  myCrossoverrate = 0.2;
756  if (true)
757  graph->evalOpParm(myCrossoverrate, nodeidx, "crossoverrate", time, 0);
758  mySeed = 0;
759  if (true)
760  graph->evalOpParm(mySeed, nodeidx, "seed", time, 0);
761  myMethod = 1;
762  if (true)
763  graph->evalOpParm(myMethod, nodeidx, "method", time, 0);
764  myPreservelength = true;
765  if (true)
766  graph->evalOpParm(myPreservelength, nodeidx, "preservelength", time, 0);
767  myExtendtomatch = 1;
768  if (true && ( (true&&!(((getPreservelength()==0)))) ) )
769  graph->evalOpParm(myExtendtomatch, nodeidx, "extendtomatch", time, 0);
770  myShortentomatch = 1;
771  if (true && ( (true&&!(((getPreservelength()==0)))) ) )
772  graph->evalOpParm(myShortentomatch, nodeidx, "shortentomatch", time, 0);
773  myAccuratebundling = true;
774  if (true)
775  graph->evalOpParm(myAccuratebundling, nodeidx, "accuratebundling", time, 0);
776  myHairwidth = 0.001;
777  if (true && ( (true&&!(((getAccuratebundling()==0)))) ) )
778  graph->evalOpParm(myHairwidth, nodeidx, "hairwidth", time, 0);
779  myHairwidthscale = 1;
780  if (true && ( (true&&!(((getAccuratebundling()==0)))) ) )
781  graph->evalOpParm(myHairwidthscale, nodeidx, "hairwidthscale", time, 0);
782  myTightness = 1;
783  if (true)
784  graph->evalOpParm(myTightness, nodeidx, "tightness", time, 0);
785  myTightnessoverride = 0;
786  if (true)
787  graph->evalOpParm(myTightnessoverride, nodeidx, "tightnessoverride", time, 0);
788  myTightnessoptions = 0;
789  if (true)
790  graph->evalOpParm(myTightnessoptions, nodeidx, "tightnessoptions", time, 0);
791  myTightnessinrange = UT_Vector2D(0,1);
792  if (true && ( (true&&!(((int64(getTightnessoverride())==0))||((getTightnessoptions()!=1)&&(getTightnessoptions()!=3)))) ) )
793  graph->evalOpParm(myTightnessinrange, nodeidx, "tightnessinrange", time, 0);
794  myTightnessoutrange = UT_Vector2D(0,1);
795  if (true && ( (true&&!(((int64(getTightnessoverride())==0))||((getTightnessoptions()!=1)&&(getTightnessoptions()!=3)))) ) )
796  graph->evalOpParm(myTightnessoutrange, nodeidx, "tightnessoutrange", time, 0);
797  myTightnessremapramp = UT_SharedPtr<UT_Ramp>(0);
798  if (true && ( (true&&!(((getTightnessoptions()!=2)&&(getTightnessoptions()!=3)))) ) )
799  graph->evalOpParm(myTightnessremapramp, nodeidx, "tightnessremapramp", time, 0);
800  myTightnesscurveattrib = "tightness"_UTsh;
801  if (true && ( (true&&!(((int64(getTightnessoverride())!=2)))) ) )
802  graph->evalOpParm(myTightnesscurveattrib, nodeidx, "tightnesscurveattrib", time, 0);
803  myTightnessclumpattrib = "tightness"_UTsh;
804  if (true && ( (true&&!(((int64(getTightnessoverride())!=1)))) ) )
805  graph->evalOpParm(myTightnessclumpattrib, nodeidx, "tightnessclumpattrib", time, 0);
806  myTightnessattrib = "tightness"_UTsh;
807  if (true && ( (true&&!(((int64(getTightnessoverride())!=3)))) ) )
808  graph->evalOpParm(myTightnessattrib, nodeidx, "tightnessattrib", time, 0);
809  myTightnesstexture = ""_UTsh;
810  if (true && ( (true&&!(((int64(getTightnessoverride())!=4)))) ) )
811  graph->evalOpParm(myTightnesstexture, nodeidx, "tightnesstexture", time, 0);
812  myTightnesstextureprim = "mask"_UTsh;
813  if (true && ( (true&&!(((int64(getTightnessoverride())!=5)))) ) )
814  graph->evalOpParm(myTightnesstextureprim, nodeidx, "tightnesstextureprim", time, 0);
815  myStrayamount = 1;
816  if (true)
817  graph->evalOpParm(myStrayamount, nodeidx, "strayamount", time, 0);
818  myStrayamountoverride = 0;
819  if (true)
820  graph->evalOpParm(myStrayamountoverride, nodeidx, "strayamountoverride", time, 0);
821  myStrayamountoptions = 0;
822  if (true)
823  graph->evalOpParm(myStrayamountoptions, nodeidx, "strayamountoptions", time, 0);
824  myStrayamountinrange = UT_Vector2D(0,1);
825  if (true && ( (true&&!(((int64(getStrayamountoverride())==0))||((getStrayamountoptions()!=1)&&(getStrayamountoptions()!=3)))) ) )
826  graph->evalOpParm(myStrayamountinrange, nodeidx, "strayamountinrange", time, 0);
827  myStrayamountoutrange = UT_Vector2D(0,1);
828  if (true && ( (true&&!(((int64(getStrayamountoverride())==0))||((getStrayamountoptions()!=1)&&(getStrayamountoptions()!=3)))) ) )
829  graph->evalOpParm(myStrayamountoutrange, nodeidx, "strayamountoutrange", time, 0);
830  myStrayamountremapramp = UT_SharedPtr<UT_Ramp>(0);
831  if (true && ( (true&&!(((getStrayamountoptions()!=2)&&(getStrayamountoptions()!=3)))) ) )
832  graph->evalOpParm(myStrayamountremapramp, nodeidx, "strayamountremapramp", time, 0);
833  myStrayamountcurveattrib = "strayamount"_UTsh;
834  if (true && ( (true&&!(((int64(getStrayamountoverride())!=2)))) ) )
835  graph->evalOpParm(myStrayamountcurveattrib, nodeidx, "strayamountcurveattrib", time, 0);
836  myStrayamountclumpattrib = "strayamount"_UTsh;
837  if (true && ( (true&&!(((int64(getStrayamountoverride())!=1)))) ) )
838  graph->evalOpParm(myStrayamountclumpattrib, nodeidx, "strayamountclumpattrib", time, 0);
839  myStrayamountattrib = "strayamount"_UTsh;
840  if (true && ( (true&&!(((int64(getStrayamountoverride())!=3)))) ) )
841  graph->evalOpParm(myStrayamountattrib, nodeidx, "strayamountattrib", time, 0);
842  myStrayamounttexture = ""_UTsh;
843  if (true && ( (true&&!(((int64(getStrayamountoverride())!=4)))) ) )
844  graph->evalOpParm(myStrayamounttexture, nodeidx, "strayamounttexture", time, 0);
845  myStrayamounttextureprim = "mask"_UTsh;
846  if (true && ( (true&&!(((int64(getStrayamountoverride())!=5)))) ) )
847  graph->evalOpParm(myStrayamounttextureprim, nodeidx, "strayamounttextureprim", time, 0);
848  myStrayrate = 0;
849  if (true)
850  graph->evalOpParm(myStrayrate, nodeidx, "strayrate", time, 0);
851  myStrayrateoverride = 0;
852  if (true)
853  graph->evalOpParm(myStrayrateoverride, nodeidx, "strayrateoverride", time, 0);
854  myStrayrateoptions = 0;
855  if (true)
856  graph->evalOpParm(myStrayrateoptions, nodeidx, "strayrateoptions", time, 0);
857  myStrayrateinrange = UT_Vector2D(0,1);
858  if (true && ( (true&&!(((int64(getStrayrateoverride())==0))||((getStrayrateoptions()!=1)&&(getStrayrateoptions()!=3)))) ) )
859  graph->evalOpParm(myStrayrateinrange, nodeidx, "strayrateinrange", time, 0);
860  myStrayrateoutrange = UT_Vector2D(0,1);
861  if (true && ( (true&&!(((int64(getStrayrateoverride())==0))||((getStrayrateoptions()!=1)&&(getStrayrateoptions()!=3)))) ) )
862  graph->evalOpParm(myStrayrateoutrange, nodeidx, "strayrateoutrange", time, 0);
863  myStrayrateremapramp = UT_SharedPtr<UT_Ramp>(0);
864  if (true && ( (true&&!(((getStrayrateoptions()!=2)&&(getStrayrateoptions()!=3)))) ) )
865  graph->evalOpParm(myStrayrateremapramp, nodeidx, "strayrateremapramp", time, 0);
866  myStrayratecurveattrib = "strayrate"_UTsh;
867  if (true && ( (true&&!(((int64(getStrayrateoverride())!=2)))) ) )
868  graph->evalOpParm(myStrayratecurveattrib, nodeidx, "strayratecurveattrib", time, 0);
869  myStrayrateclumpattrib = "strayrate"_UTsh;
870  if (true && ( (true&&!(((int64(getStrayrateoverride())!=1)))) ) )
871  graph->evalOpParm(myStrayrateclumpattrib, nodeidx, "strayrateclumpattrib", time, 0);
872  myStrayrateattrib = "strayrate"_UTsh;
873  if (true && ( (true&&!(((int64(getStrayrateoverride())!=3)))) ) )
874  graph->evalOpParm(myStrayrateattrib, nodeidx, "strayrateattrib", time, 0);
875  myStrayratetexture = ""_UTsh;
876  if (true && ( (true&&!(((int64(getStrayrateoverride())!=4)))) ) )
877  graph->evalOpParm(myStrayratetexture, nodeidx, "strayratetexture", time, 0);
878  myStrayratetextureprim = "mask"_UTsh;
879  if (true && ( (true&&!(((int64(getStrayrateoverride())!=5)))) ) )
880  graph->evalOpParm(myStrayratetextureprim, nodeidx, "strayratetextureprim", time, 0);
881  myStrayfalloff = 1;
882  if (true)
883  graph->evalOpParm(myStrayfalloff, nodeidx, "strayfalloff", time, 0);
884  myStrayfalloffoverride = 0;
885  if (true)
886  graph->evalOpParm(myStrayfalloffoverride, nodeidx, "strayfalloffoverride", time, 0);
887  myStrayfalloffoptions = 0;
888  if (true)
889  graph->evalOpParm(myStrayfalloffoptions, nodeidx, "strayfalloffoptions", time, 0);
890  myStrayfalloffinrange = UT_Vector2D(0,1);
891  if (true && ( (true&&!(((int64(getStrayfalloffoverride())==0))||((getStrayfalloffoptions()!=1)&&(getStrayfalloffoptions()!=3)))) ) )
892  graph->evalOpParm(myStrayfalloffinrange, nodeidx, "strayfalloffinrange", time, 0);
893  myStrayfalloffoutrange = UT_Vector2D(0,1);
894  if (true && ( (true&&!(((int64(getStrayfalloffoverride())==0))||((getStrayfalloffoptions()!=1)&&(getStrayfalloffoptions()!=3)))) ) )
895  graph->evalOpParm(myStrayfalloffoutrange, nodeidx, "strayfalloffoutrange", time, 0);
896  myStrayfalloffremapramp = UT_SharedPtr<UT_Ramp>(0);
897  if (true && ( (true&&!(((getStrayfalloffoptions()!=2)&&(getStrayfalloffoptions()!=3)))) ) )
898  graph->evalOpParm(myStrayfalloffremapramp, nodeidx, "strayfalloffremapramp", time, 0);
899  myStrayfalloffcurveattrib = "strayfalloff"_UTsh;
900  if (true && ( (true&&!(((int64(getStrayfalloffoverride())!=2)))) ) )
901  graph->evalOpParm(myStrayfalloffcurveattrib, nodeidx, "strayfalloffcurveattrib", time, 0);
902  myStrayfalloffclumpattrib = "strayfalloff"_UTsh;
903  if (true && ( (true&&!(((int64(getStrayfalloffoverride())!=1)))) ) )
904  graph->evalOpParm(myStrayfalloffclumpattrib, nodeidx, "strayfalloffclumpattrib", time, 0);
905  myStrayfalloffattrib = "strayfalloff"_UTsh;
906  if (true && ( (true&&!(((int64(getStrayfalloffoverride())!=3)))) ) )
907  graph->evalOpParm(myStrayfalloffattrib, nodeidx, "strayfalloffattrib", time, 0);
908  myStrayfallofftexture = ""_UTsh;
909  if (true && ( (true&&!(((int64(getStrayfalloffoverride())!=4)))) ) )
910  graph->evalOpParm(myStrayfallofftexture, nodeidx, "strayfallofftexture", time, 0);
911  myStrayfallofftextureprim = "mask"_UTsh;
912  if (true && ( (true&&!(((int64(getStrayfalloffoverride())!=5)))) ) )
913  graph->evalOpParm(myStrayfallofftextureprim, nodeidx, "strayfallofftextureprim", time, 0);
914  myClumpprofile = UT_SharedPtr<UT_Ramp>(0);
915  if (true)
916  graph->evalOpParm(myClumpprofile, nodeidx, "clumpprofile", time, 0);
917  myIterations = 1;
918  if (true)
919  graph->evalOpParm(myIterations, nodeidx, "iterations", time, 0);
920  myIterationsoverride = 0;
921  if (true)
922  graph->evalOpParm(myIterationsoverride, nodeidx, "iterationsoverride", time, 0);
923  myIterationsoptions = 0;
924  if (true)
925  graph->evalOpParm(myIterationsoptions, nodeidx, "iterationsoptions", time, 0);
926  myIterationsinrange = UT_Vector2D(0,1);
927  if (true && ( (true&&!(((int64(getIterationsoverride())==0))||((getIterationsoptions()!=1)&&(getIterationsoptions()!=3)))) ) )
928  graph->evalOpParm(myIterationsinrange, nodeidx, "iterationsinrange", time, 0);
929  myIterationsoutrange = UT_Vector2D(0,1);
930  if (true && ( (true&&!(((int64(getIterationsoverride())==0))||((getIterationsoptions()!=1)&&(getIterationsoptions()!=3)))) ) )
931  graph->evalOpParm(myIterationsoutrange, nodeidx, "iterationsoutrange", time, 0);
932  myIterationsremapramp = UT_SharedPtr<UT_Ramp>(0);
933  if (true && ( (true&&!(((getIterationsoptions()!=2)&&(getIterationsoptions()!=3)))) ) )
934  graph->evalOpParm(myIterationsremapramp, nodeidx, "iterationsremapramp", time, 0);
935  myIterationscurveattrib = "clumpiterations"_UTsh;
936  if (true && ( (true&&!(((int64(getIterationsoverride())!=1)))) ) )
937  graph->evalOpParm(myIterationscurveattrib, nodeidx, "iterationscurveattrib", time, 0);
938  myIterationsattrib = "clumpiterations"_UTsh;
939  if (true && ( (true&&!(((int64(getIterationsoverride())!=2)))) ) )
940  graph->evalOpParm(myIterationsattrib, nodeidx, "iterationsattrib", time, 0);
941  myIterationstexture = ""_UTsh;
942  if (true && ( (true&&!(((int64(getIterationsoverride())!=3)))) ) )
943  graph->evalOpParm(myIterationstexture, nodeidx, "iterationstexture", time, 0);
944  myIterationstextureprim = "mask"_UTsh;
945  if (true && ( (true&&!(((int64(getIterationsoverride())!=4)))) ) )
946  graph->evalOpParm(myIterationstextureprim, nodeidx, "iterationstextureprim", time, 0);
947  mySizereduction = 0.4;
948  if (true && ( (true&&!(((getIterations()<=1)))) ) )
949  graph->evalOpParm(mySizereduction, nodeidx, "sizereduction", time, 0);
950  mySizereductionoverride = 0;
951  if (true && ( (true&&!(((getIterations()<=1)))) ) )
952  graph->evalOpParm(mySizereductionoverride, nodeidx, "sizereductionoverride", time, 0);
953  mySizereductionoptions = 0;
954  if (true && ( (true&&!(((getIterations()<=1)))) ) )
955  graph->evalOpParm(mySizereductionoptions, nodeidx, "sizereductionoptions", time, 0);
956  mySizereductioninrange = UT_Vector2D(0,1);
957  if (true && ( (true&&!(((getIterations()<=1))||((int64(getSizereductionoverride())==0))||((getSizereductionoptions()!=1)&&(getSizereductionoptions()!=3)))) ) )
958  graph->evalOpParm(mySizereductioninrange, nodeidx, "sizereductioninrange", time, 0);
959  mySizereductionoutrange = UT_Vector2D(0,1);
960  if (true && ( (true&&!(((getIterations()<=1))||((int64(getSizereductionoverride())==0))||((getSizereductionoptions()!=1)&&(getSizereductionoptions()!=3)))) ) )
961  graph->evalOpParm(mySizereductionoutrange, nodeidx, "sizereductionoutrange", time, 0);
962  mySizereductionremapramp = UT_SharedPtr<UT_Ramp>(0);
963  if (true && ( (true&&!(((getIterations()<=1))||((getSizereductionoptions()!=2)&&(getSizereductionoptions()!=3)))) ) )
964  graph->evalOpParm(mySizereductionremapramp, nodeidx, "sizereductionremapramp", time, 0);
965  mySizereductionattrib = "clumpsizereduction"_UTsh;
966  if (true && ( (true&&!(((getIterations()<=1))||((int64(getSizereductionoverride())!=1)))) ) )
967  graph->evalOpParm(mySizereductionattrib, nodeidx, "sizereductionattrib", time, 0);
968  mySizereductiontexture = ""_UTsh;
969  if (true && ( (true&&!(((getIterations()<=1))||((int64(getSizereductionoverride())!=2)))) ) )
970  graph->evalOpParm(mySizereductiontexture, nodeidx, "sizereductiontexture", time, 0);
971  mySizereductiontextureprim = "mask"_UTsh;
972  if (true && ( (true&&!(((getIterations()<=1))||((int64(getSizereductionoverride())!=3)))) ) )
973  graph->evalOpParm(mySizereductiontextureprim, nodeidx, "sizereductiontextureprim", time, 0);
974  myGoalfeedback = 0.1;
975  if (true && ( (true&&!(((getIterations()<=1)))) ) )
976  graph->evalOpParm(myGoalfeedback, nodeidx, "goalfeedback", time, 0);
977  myGoalfeedbackoverride = 0;
978  if (true && ( (true&&!(((getIterations()<=1)))) ) )
979  graph->evalOpParm(myGoalfeedbackoverride, nodeidx, "goalfeedbackoverride", time, 0);
980  myGoalfeedbackoptions = 0;
981  if (true && ( (true&&!(((getIterations()<=1)))) ) )
982  graph->evalOpParm(myGoalfeedbackoptions, nodeidx, "goalfeedbackoptions", time, 0);
983  myGoalfeedbackinrange = UT_Vector2D(0,1);
984  if (true && ( (true&&!(((getIterations()<=1))||((int64(getGoalfeedbackoverride())==0))||((getGoalfeedbackoptions()!=1)&&(getGoalfeedbackoptions()!=3)))) ) )
985  graph->evalOpParm(myGoalfeedbackinrange, nodeidx, "goalfeedbackinrange", time, 0);
986  myGoalfeedbackoutrange = UT_Vector2D(0,1);
987  if (true && ( (true&&!(((getIterations()<=1))||((int64(getGoalfeedbackoverride())==0))||((getGoalfeedbackoptions()!=1)&&(getGoalfeedbackoptions()!=3)))) ) )
988  graph->evalOpParm(myGoalfeedbackoutrange, nodeidx, "goalfeedbackoutrange", time, 0);
989  myGoalfeedbackremapramp = UT_SharedPtr<UT_Ramp>(0);
990  if (true && ( (true&&!(((getIterations()<=1))||((getGoalfeedbackoptions()!=2)&&(getGoalfeedbackoptions()!=3)))) ) )
991  graph->evalOpParm(myGoalfeedbackremapramp, nodeidx, "goalfeedbackremapramp", time, 0);
992  myGoalfeedbackattrib = "clumpgoalfeedback"_UTsh;
993  if (true && ( (true&&!(((getIterations()<=1))||((int64(getGoalfeedbackoverride())!=1)))) ) )
994  graph->evalOpParm(myGoalfeedbackattrib, nodeidx, "goalfeedbackattrib", time, 0);
995  myGoalfeedbacktexture = ""_UTsh;
996  if (true && ( (true&&!(((getIterations()<=1))||((int64(getGoalfeedbackoverride())!=2)))) ) )
997  graph->evalOpParm(myGoalfeedbacktexture, nodeidx, "goalfeedbacktexture", time, 0);
998  myGoalfeedbacktextureprim = "mask"_UTsh;
999  if (true && ( (true&&!(((getIterations()<=1))||((int64(getGoalfeedbackoverride())!=3)))) ) )
1000  graph->evalOpParm(myGoalfeedbacktextureprim, nodeidx, "goalfeedbacktextureprim", time, 0);
1001  myTightnessreduction = 0.2;
1002  if (true && ( (true&&!(((getIterations()<=1)))) ) )
1003  graph->evalOpParm(myTightnessreduction, nodeidx, "tightnessreduction", time, 0);
1004  myTightnessreductionoverride = 0;
1005  if (true && ( (true&&!(((getIterations()<=1)))) ) )
1006  graph->evalOpParm(myTightnessreductionoverride, nodeidx, "tightnessreductionoverride", time, 0);
1007  myTightnessreductionoptions = 0;
1008  if (true && ( (true&&!(((getIterations()<=1)))) ) )
1009  graph->evalOpParm(myTightnessreductionoptions, nodeidx, "tightnessreductionoptions", time, 0);
1010  myTightnessreductioninrange = UT_Vector2D(0,1);
1011  if (true && ( (true&&!(((getIterations()<=1))||((int64(getTightnessreductionoverride())==0))||((getTightnessreductionoptions()!=1)&&(getTightnessreductionoptions()!=3)))) ) )
1012  graph->evalOpParm(myTightnessreductioninrange, nodeidx, "tightnessreductioninrange", time, 0);
1013  myTightnessreductionoutrange = UT_Vector2D(0,1);
1014  if (true && ( (true&&!(((getIterations()<=1))||((int64(getTightnessreductionoverride())==0))||((getTightnessreductionoptions()!=1)&&(getTightnessreductionoptions()!=3)))) ) )
1015  graph->evalOpParm(myTightnessreductionoutrange, nodeidx, "tightnessreductionoutrange", time, 0);
1016  myTightnessreductionremapramp = UT_SharedPtr<UT_Ramp>(0);
1017  if (true && ( (true&&!(((getIterations()<=1))||((getTightnessreductionoptions()!=2)&&(getTightnessreductionoptions()!=3)))) ) )
1018  graph->evalOpParm(myTightnessreductionremapramp, nodeidx, "tightnessreductionremapramp", time, 0);
1019  myTightnessreductioncurveattrib = "clumptightnessreduction"_UTsh;
1020  if (true && ( (true&&!(((getIterations()<=1))||((int64(getTightnessreductionoverride())!=1)))) ) )
1021  graph->evalOpParm(myTightnessreductioncurveattrib, nodeidx, "tightnessreductioncurveattrib", time, 0);
1022  myTightnessreductionattrib = "clumptightnessreduction"_UTsh;
1023  if (true && ( (true&&!(((getIterations()<=1))||((int64(getTightnessreductionoverride())!=2)))) ) )
1024  graph->evalOpParm(myTightnessreductionattrib, nodeidx, "tightnessreductionattrib", time, 0);
1025  myTightnessreductiontexture = ""_UTsh;
1026  if (true && ( (true&&!(((getIterations()<=1))||((int64(getTightnessreductionoverride())!=3)))) ) )
1027  graph->evalOpParm(myTightnessreductiontexture, nodeidx, "tightnessreductiontexture", time, 0);
1028  myTightnessreductiontextureprim = "mask"_UTsh;
1029  if (true && ( (true&&!(((getIterations()<=1))||((int64(getTightnessreductionoverride())!=4)))) ) )
1030  graph->evalOpParm(myTightnessreductiontextureprim, nodeidx, "tightnessreductiontextureprim", time, 0);
1031  myEnablecurling = false;
1032  if (true)
1033  graph->evalOpParm(myEnablecurling, nodeidx, "enablecurling", time, 0);
1034  myCurlamp = 0;
1035  if (true && ( (true&&!(((getEnablecurling()==0)))) ) )
1036  graph->evalOpParm(myCurlamp, nodeidx, "curlamp", time, 0);
1037  myCurlampoverride = 0;
1038  if (true && ( (true&&!(((getEnablecurling()==0)))) ) )
1039  graph->evalOpParm(myCurlampoverride, nodeidx, "curlampoverride", time, 0);
1040  myCurlampoptions = 0;
1041  if (true && ( (true&&!(((getEnablecurling()==0)))) ) )
1042  graph->evalOpParm(myCurlampoptions, nodeidx, "curlampoptions", time, 0);
1043  myCurlampinrange = UT_Vector2D(0,1);
1044  if (true && ( (true&&!(((int64(getCurlampoverride())==0))||((getEnablecurling()==0))||((getCurlampoptions()!=1)&&(getCurlampoptions()!=3)))) ) )
1045  graph->evalOpParm(myCurlampinrange, nodeidx, "curlampinrange", time, 0);
1046  myCurlampoutrange = UT_Vector2D(0,1);
1047  if (true && ( (true&&!(((int64(getCurlampoverride())==0))||((getEnablecurling()==0))||((getCurlampoptions()!=1)&&(getCurlampoptions()!=3)))) ) )
1048  graph->evalOpParm(myCurlampoutrange, nodeidx, "curlampoutrange", time, 0);
1049  myCurlampremapramp = UT_SharedPtr<UT_Ramp>(0);
1050  if (true && ( (true&&!(((getEnablecurling()==0))||((getCurlampoptions()!=2)&&(getCurlampoptions()!=3)))) ) )
1051  graph->evalOpParm(myCurlampremapramp, nodeidx, "curlampremapramp", time, 0);
1052  myCurlampcurveattrib = "clumpcurlamp"_UTsh;
1053  if (true && ( (true&&!(((getEnablecurling()==0))||((int64(getCurlampoverride())!=1)))) ) )
1054  graph->evalOpParm(myCurlampcurveattrib, nodeidx, "curlampcurveattrib", time, 0);
1055  myCurlampattrib = "clumpcurlamp"_UTsh;
1056  if (true && ( (true&&!(((getEnablecurling()==0))||((int64(getCurlampoverride())!=2)))) ) )
1057  graph->evalOpParm(myCurlampattrib, nodeidx, "curlampattrib", time, 0);
1058  myCurlamptexture = ""_UTsh;
1059  if (true && ( (true&&!(((getEnablecurling()==0))||((int64(getCurlampoverride())!=3)))) ) )
1060  graph->evalOpParm(myCurlamptexture, nodeidx, "curlamptexture", time, 0);
1061  myCurlamptextureprim = "mask"_UTsh;
1062  if (true && ( (true&&!(((getEnablecurling()==0))||((int64(getCurlampoverride())!=4)))) ) )
1063  graph->evalOpParm(myCurlamptextureprim, nodeidx, "curlamptextureprim", time, 0);
1064  myCurlampramp = UT_SharedPtr<UT_Ramp>(0);
1065  if (true && ( (true&&!(((getEnablecurling()==0)))) ) )
1066  graph->evalOpParm(myCurlampramp, nodeidx, "curlampramp", time, 0);
1067  myCurlfreq = 5;
1068  if (true && ( (true&&!(((getEnablecurling()==0)))) ) )
1069  graph->evalOpParm(myCurlfreq, nodeidx, "curlfreq", time, 0);
1070  myCurlfreqoverride = 0;
1071  if (true && ( (true&&!(((getEnablecurling()==0)))) ) )
1072  graph->evalOpParm(myCurlfreqoverride, nodeidx, "curlfreqoverride", time, 0);
1073  myCurlfreqoptions = 0;
1074  if (true && ( (true&&!(((getEnablecurling()==0)))) ) )
1075  graph->evalOpParm(myCurlfreqoptions, nodeidx, "curlfreqoptions", time, 0);
1076  myCurlfreqinrange = UT_Vector2D(0,1);
1077  if (true && ( (true&&!(((int64(getCurlfreqoverride())==0))||((getEnablecurling()==0))||((getCurlfreqoptions()!=1)&&(getCurlfreqoptions()!=3)))) ) )
1078  graph->evalOpParm(myCurlfreqinrange, nodeidx, "curlfreqinrange", time, 0);
1079  myCurlfreqoutrange = UT_Vector2D(0,1);
1080  if (true && ( (true&&!(((int64(getCurlfreqoverride())==0))||((getEnablecurling()==0))||((getCurlfreqoptions()!=1)&&(getCurlfreqoptions()!=3)))) ) )
1081  graph->evalOpParm(myCurlfreqoutrange, nodeidx, "curlfreqoutrange", time, 0);
1082  myCurlfreqremapramp = UT_SharedPtr<UT_Ramp>(0);
1083  if (true && ( (true&&!(((getEnablecurling()==0))||((getCurlfreqoptions()!=2)&&(getCurlfreqoptions()!=3)))) ) )
1084  graph->evalOpParm(myCurlfreqremapramp, nodeidx, "curlfreqremapramp", time, 0);
1085  myCurlfreqcurveattrib = "clumpcurlfreq"_UTsh;
1086  if (true && ( (true&&!(((getEnablecurling()==0))||((int64(getCurlfreqoverride())!=1)))) ) )
1087  graph->evalOpParm(myCurlfreqcurveattrib, nodeidx, "curlfreqcurveattrib", time, 0);
1088  myCurlfreqattrib = "clumpcurlfreq"_UTsh;
1089  if (true && ( (true&&!(((getEnablecurling()==0))||((int64(getCurlfreqoverride())!=2)))) ) )
1090  graph->evalOpParm(myCurlfreqattrib, nodeidx, "curlfreqattrib", time, 0);
1091  myCurlfreqtexture = ""_UTsh;
1092  if (true && ( (true&&!(((getEnablecurling()==0))||((int64(getCurlfreqoverride())!=3)))) ) )
1093  graph->evalOpParm(myCurlfreqtexture, nodeidx, "curlfreqtexture", time, 0);
1094  myCurlfreqtextureprim = "mask"_UTsh;
1095  if (true && ( (true&&!(((getEnablecurling()==0))||((int64(getCurlfreqoverride())!=4)))) ) )
1096  graph->evalOpParm(myCurlfreqtextureprim, nodeidx, "curlfreqtextureprim", time, 0);
1097  myCurlfreqramp = UT_SharedPtr<UT_Ramp>(0);
1098  if (true && ( (true&&!(((getEnablecurling()==0)))) ) )
1099  graph->evalOpParm(myCurlfreqramp, nodeidx, "curlfreqramp", time, 0);
1100  myClumpidinputattrib = "clumpid"_UTsh;
1101  if (true)
1102  graph->evalOpParm(myClumpidinputattrib, nodeidx, "clumpidinputattrib", time, 0);
1103  myCreateclumpidattrib = true;
1104  if (true)
1105  graph->evalOpParm(myCreateclumpidattrib, nodeidx, "createclumpidattrib", time, 0);
1106  myClumpidoutputattrib = "clumpid"_UTsh;
1107  if (true)
1108  graph->evalOpParm(myClumpidoutputattrib, nodeidx, "clumpidoutputattrib", time, 0);
1109  myUseorientinputattrib = false;
1110  if (true)
1111  graph->evalOpParm(myUseorientinputattrib, nodeidx, "useorientinputattrib", time, 0);
1112  myOrientinputattrib = "orient"_UTsh;
1113  if (true)
1114  graph->evalOpParm(myOrientinputattrib, nodeidx, "orientinputattrib", time, 0);
1115  myCreatetightnessattrib = true;
1116  if (true)
1117  graph->evalOpParm(myCreatetightnessattrib, nodeidx, "createtightnessattrib", time, 0);
1118  myTightnessoutputattrib = "tightness"_UTsh;
1119  if (true)
1120  graph->evalOpParm(myTightnessoutputattrib, nodeidx, "tightnessoutputattrib", time, 0);
1121  myClumppointattribs = ""_UTsh;
1122  if (true)
1123  graph->evalOpParm(myClumppointattribs, nodeidx, "clumppointattribs", time, 0);
1124  myClumpprimattribs = ""_UTsh;
1125  if (true)
1126  graph->evalOpParm(myClumpprimattribs, nodeidx, "clumpprimattribs", time, 0);
1127 
1128  }
1129 
1130 
1131  void loadFromOpSubclass(const LoadParms &loadparms) override
1132  {
1133  buildFromOp(loadparms.graph(), loadparms.nodeIdx(), loadparms.context().getTime(), loadparms.depnode());
1134  }
1135 
1136 
1137  void copyFrom(const OP_NodeParms *src) override
1138  {
1139  *this = *((const SOP_HairClumpParms *)src);
1140  }
1141 
1142  template <typename T>
1143  void
1144  doGetParmValue(TempIndex idx, TempIndex instance, T &value) const
1145  {
1146  if (idx.size() < 1)
1147  return;
1148  UT_ASSERT(idx.size() == instance.size()+1);
1149  if (idx.size() != instance.size()+1)
1150  return;
1151  switch (idx[0])
1152  {
1153  case 0:
1154  coerceValue(value, myLegacymasking);
1155  break;
1156  case 1:
1157  coerceValue(value, myUvattrib);
1158  break;
1159  case 2:
1160  coerceValue(value, myBlend);
1161  break;
1162  case 3:
1163  coerceValue(value, myBlendoverride);
1164  break;
1165  case 4:
1166  coerceValue(value, myBlendoptions);
1167  break;
1168  case 5:
1169  coerceValue(value, myBlendinrange);
1170  break;
1171  case 6:
1172  coerceValue(value, myBlendoutrange);
1173  break;
1174  case 7:
1175  coerceValue(value, myBlendremapramp);
1176  break;
1177  case 8:
1178  coerceValue(value, myBlendcurveattrib);
1179  break;
1180  case 9:
1181  coerceValue(value, myBlendattrib);
1182  break;
1183  case 10:
1184  coerceValue(value, myBlendtexture);
1185  break;
1186  case 11:
1187  coerceValue(value, myBlendtextureprim);
1188  break;
1189  case 12:
1190  coerceValue(value, myUseskinmask);
1191  break;
1192  case 13:
1193  coerceValue(value, mySkinmaskattrib);
1194  break;
1195  case 14:
1196  coerceValue(value, myClumpsize);
1197  break;
1198  case 15:
1199  coerceValue(value, myClumpsizeoverride);
1200  break;
1201  case 16:
1202  coerceValue(value, myClumpsizeoptions);
1203  break;
1204  case 17:
1205  coerceValue(value, myClumpsizeinrange);
1206  break;
1207  case 18:
1208  coerceValue(value, myClumpsizeoutrange);
1209  break;
1210  case 19:
1211  coerceValue(value, myClumpsizeremapramp);
1212  break;
1213  case 20:
1214  coerceValue(value, myClumpsizeattrib);
1215  break;
1216  case 21:
1217  coerceValue(value, myClumpsizetexture);
1218  break;
1219  case 22:
1220  coerceValue(value, myClumpsizetextureprim);
1221  break;
1222  case 23:
1223  coerceValue(value, mySearchbeyondradius);
1224  break;
1225  case 24:
1226  coerceValue(value, myClumpwithinclumps);
1227  break;
1228  case 25:
1229  coerceValue(value, myCrossoverrate);
1230  break;
1231  case 26:
1232  coerceValue(value, mySeed);
1233  break;
1234  case 27:
1235  coerceValue(value, myMethod);
1236  break;
1237  case 28:
1238  coerceValue(value, myPreservelength);
1239  break;
1240  case 29:
1241  coerceValue(value, myExtendtomatch);
1242  break;
1243  case 30:
1244  coerceValue(value, myShortentomatch);
1245  break;
1246  case 31:
1247  coerceValue(value, myAccuratebundling);
1248  break;
1249  case 32:
1250  coerceValue(value, myHairwidth);
1251  break;
1252  case 33:
1253  coerceValue(value, myHairwidthscale);
1254  break;
1255  case 34:
1256  coerceValue(value, myTightness);
1257  break;
1258  case 35:
1259  coerceValue(value, myTightnessoverride);
1260  break;
1261  case 36:
1262  coerceValue(value, myTightnessoptions);
1263  break;
1264  case 37:
1265  coerceValue(value, myTightnessinrange);
1266  break;
1267  case 38:
1268  coerceValue(value, myTightnessoutrange);
1269  break;
1270  case 39:
1271  coerceValue(value, myTightnessremapramp);
1272  break;
1273  case 40:
1274  coerceValue(value, myTightnesscurveattrib);
1275  break;
1276  case 41:
1277  coerceValue(value, myTightnessclumpattrib);
1278  break;
1279  case 42:
1280  coerceValue(value, myTightnessattrib);
1281  break;
1282  case 43:
1283  coerceValue(value, myTightnesstexture);
1284  break;
1285  case 44:
1286  coerceValue(value, myTightnesstextureprim);
1287  break;
1288  case 45:
1289  coerceValue(value, myStrayamount);
1290  break;
1291  case 46:
1292  coerceValue(value, myStrayamountoverride);
1293  break;
1294  case 47:
1295  coerceValue(value, myStrayamountoptions);
1296  break;
1297  case 48:
1298  coerceValue(value, myStrayamountinrange);
1299  break;
1300  case 49:
1301  coerceValue(value, myStrayamountoutrange);
1302  break;
1303  case 50:
1304  coerceValue(value, myStrayamountremapramp);
1305  break;
1306  case 51:
1307  coerceValue(value, myStrayamountcurveattrib);
1308  break;
1309  case 52:
1310  coerceValue(value, myStrayamountclumpattrib);
1311  break;
1312  case 53:
1313  coerceValue(value, myStrayamountattrib);
1314  break;
1315  case 54:
1316  coerceValue(value, myStrayamounttexture);
1317  break;
1318  case 55:
1319  coerceValue(value, myStrayamounttextureprim);
1320  break;
1321  case 56:
1322  coerceValue(value, myStrayrate);
1323  break;
1324  case 57:
1325  coerceValue(value, myStrayrateoverride);
1326  break;
1327  case 58:
1328  coerceValue(value, myStrayrateoptions);
1329  break;
1330  case 59:
1331  coerceValue(value, myStrayrateinrange);
1332  break;
1333  case 60:
1334  coerceValue(value, myStrayrateoutrange);
1335  break;
1336  case 61:
1337  coerceValue(value, myStrayrateremapramp);
1338  break;
1339  case 62:
1340  coerceValue(value, myStrayratecurveattrib);
1341  break;
1342  case 63:
1343  coerceValue(value, myStrayrateclumpattrib);
1344  break;
1345  case 64:
1346  coerceValue(value, myStrayrateattrib);
1347  break;
1348  case 65:
1349  coerceValue(value, myStrayratetexture);
1350  break;
1351  case 66:
1352  coerceValue(value, myStrayratetextureprim);
1353  break;
1354  case 67:
1355  coerceValue(value, myStrayfalloff);
1356  break;
1357  case 68:
1358  coerceValue(value, myStrayfalloffoverride);
1359  break;
1360  case 69:
1361  coerceValue(value, myStrayfalloffoptions);
1362  break;
1363  case 70:
1364  coerceValue(value, myStrayfalloffinrange);
1365  break;
1366  case 71:
1367  coerceValue(value, myStrayfalloffoutrange);
1368  break;
1369  case 72:
1370  coerceValue(value, myStrayfalloffremapramp);
1371  break;
1372  case 73:
1373  coerceValue(value, myStrayfalloffcurveattrib);
1374  break;
1375  case 74:
1376  coerceValue(value, myStrayfalloffclumpattrib);
1377  break;
1378  case 75:
1379  coerceValue(value, myStrayfalloffattrib);
1380  break;
1381  case 76:
1382  coerceValue(value, myStrayfallofftexture);
1383  break;
1384  case 77:
1385  coerceValue(value, myStrayfallofftextureprim);
1386  break;
1387  case 78:
1388  coerceValue(value, myClumpprofile);
1389  break;
1390  case 79:
1391  coerceValue(value, myIterations);
1392  break;
1393  case 80:
1394  coerceValue(value, myIterationsoverride);
1395  break;
1396  case 81:
1397  coerceValue(value, myIterationsoptions);
1398  break;
1399  case 82:
1400  coerceValue(value, myIterationsinrange);
1401  break;
1402  case 83:
1403  coerceValue(value, myIterationsoutrange);
1404  break;
1405  case 84:
1406  coerceValue(value, myIterationsremapramp);
1407  break;
1408  case 85:
1409  coerceValue(value, myIterationscurveattrib);
1410  break;
1411  case 86:
1412  coerceValue(value, myIterationsattrib);
1413  break;
1414  case 87:
1415  coerceValue(value, myIterationstexture);
1416  break;
1417  case 88:
1418  coerceValue(value, myIterationstextureprim);
1419  break;
1420  case 89:
1421  coerceValue(value, mySizereduction);
1422  break;
1423  case 90:
1424  coerceValue(value, mySizereductionoverride);
1425  break;
1426  case 91:
1427  coerceValue(value, mySizereductionoptions);
1428  break;
1429  case 92:
1430  coerceValue(value, mySizereductioninrange);
1431  break;
1432  case 93:
1433  coerceValue(value, mySizereductionoutrange);
1434  break;
1435  case 94:
1436  coerceValue(value, mySizereductionremapramp);
1437  break;
1438  case 95:
1439  coerceValue(value, mySizereductionattrib);
1440  break;
1441  case 96:
1442  coerceValue(value, mySizereductiontexture);
1443  break;
1444  case 97:
1445  coerceValue(value, mySizereductiontextureprim);
1446  break;
1447  case 98:
1448  coerceValue(value, myGoalfeedback);
1449  break;
1450  case 99:
1451  coerceValue(value, myGoalfeedbackoverride);
1452  break;
1453  case 100:
1454  coerceValue(value, myGoalfeedbackoptions);
1455  break;
1456  case 101:
1457  coerceValue(value, myGoalfeedbackinrange);
1458  break;
1459  case 102:
1460  coerceValue(value, myGoalfeedbackoutrange);
1461  break;
1462  case 103:
1463  coerceValue(value, myGoalfeedbackremapramp);
1464  break;
1465  case 104:
1466  coerceValue(value, myGoalfeedbackattrib);
1467  break;
1468  case 105:
1469  coerceValue(value, myGoalfeedbacktexture);
1470  break;
1471  case 106:
1472  coerceValue(value, myGoalfeedbacktextureprim);
1473  break;
1474  case 107:
1475  coerceValue(value, myTightnessreduction);
1476  break;
1477  case 108:
1478  coerceValue(value, myTightnessreductionoverride);
1479  break;
1480  case 109:
1481  coerceValue(value, myTightnessreductionoptions);
1482  break;
1483  case 110:
1484  coerceValue(value, myTightnessreductioninrange);
1485  break;
1486  case 111:
1487  coerceValue(value, myTightnessreductionoutrange);
1488  break;
1489  case 112:
1490  coerceValue(value, myTightnessreductionremapramp);
1491  break;
1492  case 113:
1493  coerceValue(value, myTightnessreductioncurveattrib);
1494  break;
1495  case 114:
1496  coerceValue(value, myTightnessreductionattrib);
1497  break;
1498  case 115:
1499  coerceValue(value, myTightnessreductiontexture);
1500  break;
1501  case 116:
1502  coerceValue(value, myTightnessreductiontextureprim);
1503  break;
1504  case 117:
1505  coerceValue(value, myEnablecurling);
1506  break;
1507  case 118:
1508  coerceValue(value, myCurlamp);
1509  break;
1510  case 119:
1511  coerceValue(value, myCurlampoverride);
1512  break;
1513  case 120:
1514  coerceValue(value, myCurlampoptions);
1515  break;
1516  case 121:
1517  coerceValue(value, myCurlampinrange);
1518  break;
1519  case 122:
1520  coerceValue(value, myCurlampoutrange);
1521  break;
1522  case 123:
1523  coerceValue(value, myCurlampremapramp);
1524  break;
1525  case 124:
1526  coerceValue(value, myCurlampcurveattrib);
1527  break;
1528  case 125:
1529  coerceValue(value, myCurlampattrib);
1530  break;
1531  case 126:
1532  coerceValue(value, myCurlamptexture);
1533  break;
1534  case 127:
1535  coerceValue(value, myCurlamptextureprim);
1536  break;
1537  case 128:
1538  coerceValue(value, myCurlampramp);
1539  break;
1540  case 129:
1541  coerceValue(value, myCurlfreq);
1542  break;
1543  case 130:
1544  coerceValue(value, myCurlfreqoverride);
1545  break;
1546  case 131:
1547  coerceValue(value, myCurlfreqoptions);
1548  break;
1549  case 132:
1550  coerceValue(value, myCurlfreqinrange);
1551  break;
1552  case 133:
1553  coerceValue(value, myCurlfreqoutrange);
1554  break;
1555  case 134:
1556  coerceValue(value, myCurlfreqremapramp);
1557  break;
1558  case 135:
1559  coerceValue(value, myCurlfreqcurveattrib);
1560  break;
1561  case 136:
1562  coerceValue(value, myCurlfreqattrib);
1563  break;
1564  case 137:
1565  coerceValue(value, myCurlfreqtexture);
1566  break;
1567  case 138:
1568  coerceValue(value, myCurlfreqtextureprim);
1569  break;
1570  case 139:
1571  coerceValue(value, myCurlfreqramp);
1572  break;
1573  case 140:
1574  coerceValue(value, myClumpidinputattrib);
1575  break;
1576  case 141:
1577  coerceValue(value, myCreateclumpidattrib);
1578  break;
1579  case 142:
1580  coerceValue(value, myClumpidoutputattrib);
1581  break;
1582  case 143:
1583  coerceValue(value, myUseorientinputattrib);
1584  break;
1585  case 144:
1586  coerceValue(value, myOrientinputattrib);
1587  break;
1588  case 145:
1589  coerceValue(value, myCreatetightnessattrib);
1590  break;
1591  case 146:
1592  coerceValue(value, myTightnessoutputattrib);
1593  break;
1594  case 147:
1595  coerceValue(value, myClumppointattribs);
1596  break;
1597  case 148:
1598  coerceValue(value, myClumpprimattribs);
1599  break;
1600 
1601  }
1602  }
1603 
1604  bool isParmColorRamp(exint idx) const override
1605  {
1606  switch (idx)
1607  {
1608 
1609  }
1610  return false;
1611  }
1612 
1613  void getNestParmValue(TempIndex idx, TempIndex instance, exint &value) const override
1614  { doGetParmValue(idx, instance, value); }
1615  void getNestParmValue(TempIndex idx, TempIndex instance, fpreal &value) const override
1616  { doGetParmValue(idx, instance, value); }
1617  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector2D &value) const override
1618  { doGetParmValue(idx, instance, value); }
1619  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector3D &value) const override
1620  { doGetParmValue(idx, instance, value); }
1621  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector4D &value) const override
1622  { doGetParmValue(idx, instance, value); }
1623  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix2D &value) const override
1624  { doGetParmValue(idx, instance, value); }
1625  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
1626  { doGetParmValue(idx, instance, value); }
1627  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix4D &value) const override
1628  { doGetParmValue(idx, instance, value); }
1629  void getNestParmValue(TempIndex idx, TempIndex instance, UT_StringHolder &value) const override
1630  { doGetParmValue(idx, instance, value); }
1631  void getNestParmValue(TempIndex idx, TempIndex instance, UT_SharedPtr<UT_Ramp> &value) const override
1632  { doGetParmValue(idx, instance, value); }
1633  void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
1634  { doGetParmValue(idx, instance, value); }
1635 
1636  template <typename T>
1637  void
1638  doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
1639  {
1640  if (idx.size() < 1)
1641  return;
1642  UT_ASSERT(idx.size() == instance.size()+1);
1643  if (idx.size() != instance.size()+1)
1644  return;
1645  switch (idx[0])
1646  {
1647  case 0:
1648  coerceValue(myLegacymasking, ( ( value ) ));
1649  break;
1650  case 1:
1651  coerceValue(myUvattrib, ( ( value ) ));
1652  break;
1653  case 2:
1654  coerceValue(myBlend, clampMinValue(0, clampMaxValue(1, value ) ));
1655  break;
1656  case 3:
1657  coerceValue(myBlendoverride, clampMinValue(0, clampMaxValue(4, value ) ));
1658  break;
1659  case 4:
1660  coerceValue(myBlendoptions, ( ( value ) ));
1661  break;
1662  case 5:
1663  coerceValue(myBlendinrange, ( ( value ) ));
1664  break;
1665  case 6:
1666  coerceValue(myBlendoutrange, ( ( value ) ));
1667  break;
1668  case 7:
1669  coerceValue(myBlendremapramp, clampMinValue(1, ( value ) ));
1670  break;
1671  case 8:
1672  coerceValue(myBlendcurveattrib, ( ( value ) ));
1673  break;
1674  case 9:
1675  coerceValue(myBlendattrib, ( ( value ) ));
1676  break;
1677  case 10:
1678  coerceValue(myBlendtexture, ( ( value ) ));
1679  break;
1680  case 11:
1681  coerceValue(myBlendtextureprim, ( ( value ) ));
1682  break;
1683  case 12:
1684  coerceValue(myUseskinmask, ( ( value ) ));
1685  break;
1686  case 13:
1687  coerceValue(mySkinmaskattrib, ( ( value ) ));
1688  break;
1689  case 14:
1690  coerceValue(myClumpsize, ( ( value ) ));
1691  break;
1692  case 15:
1693  coerceValue(myClumpsizeoverride, clampMinValue(0, clampMaxValue(3, value ) ));
1694  break;
1695  case 16:
1696  coerceValue(myClumpsizeoptions, ( ( value ) ));
1697  break;
1698  case 17:
1699  coerceValue(myClumpsizeinrange, ( ( value ) ));
1700  break;
1701  case 18:
1702  coerceValue(myClumpsizeoutrange, ( ( value ) ));
1703  break;
1704  case 19:
1705  coerceValue(myClumpsizeremapramp, clampMinValue(1, ( value ) ));
1706  break;
1707  case 20:
1708  coerceValue(myClumpsizeattrib, ( ( value ) ));
1709  break;
1710  case 21:
1711  coerceValue(myClumpsizetexture, ( ( value ) ));
1712  break;
1713  case 22:
1714  coerceValue(myClumpsizetextureprim, ( ( value ) ));
1715  break;
1716  case 23:
1717  coerceValue(mySearchbeyondradius, ( ( value ) ));
1718  break;
1719  case 24:
1720  coerceValue(myClumpwithinclumps, ( ( value ) ));
1721  break;
1722  case 25:
1723  coerceValue(myCrossoverrate, ( ( value ) ));
1724  break;
1725  case 26:
1726  coerceValue(mySeed, ( ( value ) ));
1727  break;
1728  case 27:
1729  coerceValue(myMethod, clampMinValue(0, clampMaxValue(1, value ) ));
1730  break;
1731  case 28:
1732  coerceValue(myPreservelength, ( ( value ) ));
1733  break;
1734  case 29:
1735  coerceValue(myExtendtomatch, ( ( value ) ));
1736  break;
1737  case 30:
1738  coerceValue(myShortentomatch, ( ( value ) ));
1739  break;
1740  case 31:
1741  coerceValue(myAccuratebundling, ( ( value ) ));
1742  break;
1743  case 32:
1744  coerceValue(myHairwidth, ( ( value ) ));
1745  break;
1746  case 33:
1747  coerceValue(myHairwidthscale, ( ( value ) ));
1748  break;
1749  case 34:
1750  coerceValue(myTightness, clampMinValue(0, clampMaxValue(1, value ) ));
1751  break;
1752  case 35:
1753  coerceValue(myTightnessoverride, clampMinValue(0, clampMaxValue(5, value ) ));
1754  break;
1755  case 36:
1756  coerceValue(myTightnessoptions, ( ( value ) ));
1757  break;
1758  case 37:
1759  coerceValue(myTightnessinrange, ( ( value ) ));
1760  break;
1761  case 38:
1762  coerceValue(myTightnessoutrange, ( ( value ) ));
1763  break;
1764  case 39:
1765  coerceValue(myTightnessremapramp, clampMinValue(1, ( value ) ));
1766  break;
1767  case 40:
1768  coerceValue(myTightnesscurveattrib, ( ( value ) ));
1769  break;
1770  case 41:
1771  coerceValue(myTightnessclumpattrib, ( ( value ) ));
1772  break;
1773  case 42:
1774  coerceValue(myTightnessattrib, ( ( value ) ));
1775  break;
1776  case 43:
1777  coerceValue(myTightnesstexture, ( ( value ) ));
1778  break;
1779  case 44:
1780  coerceValue(myTightnesstextureprim, ( ( value ) ));
1781  break;
1782  case 45:
1783  coerceValue(myStrayamount, clampMinValue(0, clampMaxValue(1, value ) ));
1784  break;
1785  case 46:
1786  coerceValue(myStrayamountoverride, clampMinValue(0, clampMaxValue(5, value ) ));
1787  break;
1788  case 47:
1789  coerceValue(myStrayamountoptions, ( ( value ) ));
1790  break;
1791  case 48:
1792  coerceValue(myStrayamountinrange, ( ( value ) ));
1793  break;
1794  case 49:
1795  coerceValue(myStrayamountoutrange, ( ( value ) ));
1796  break;
1797  case 50:
1798  coerceValue(myStrayamountremapramp, clampMinValue(1, ( value ) ));
1799  break;
1800  case 51:
1801  coerceValue(myStrayamountcurveattrib, ( ( value ) ));
1802  break;
1803  case 52:
1804  coerceValue(myStrayamountclumpattrib, ( ( value ) ));
1805  break;
1806  case 53:
1807  coerceValue(myStrayamountattrib, ( ( value ) ));
1808  break;
1809  case 54:
1810  coerceValue(myStrayamounttexture, ( ( value ) ));
1811  break;
1812  case 55:
1813  coerceValue(myStrayamounttextureprim, ( ( value ) ));
1814  break;
1815  case 56:
1816  coerceValue(myStrayrate, clampMinValue(0, clampMaxValue(1, value ) ));
1817  break;
1818  case 57:
1819  coerceValue(myStrayrateoverride, clampMinValue(0, clampMaxValue(5, value ) ));
1820  break;
1821  case 58:
1822  coerceValue(myStrayrateoptions, ( ( value ) ));
1823  break;
1824  case 59:
1825  coerceValue(myStrayrateinrange, ( ( value ) ));
1826  break;
1827  case 60:
1828  coerceValue(myStrayrateoutrange, ( ( value ) ));
1829  break;
1830  case 61:
1831  coerceValue(myStrayrateremapramp, clampMinValue(1, ( value ) ));
1832  break;
1833  case 62:
1834  coerceValue(myStrayratecurveattrib, ( ( value ) ));
1835  break;
1836  case 63:
1837  coerceValue(myStrayrateclumpattrib, ( ( value ) ));
1838  break;
1839  case 64:
1840  coerceValue(myStrayrateattrib, ( ( value ) ));
1841  break;
1842  case 65:
1843  coerceValue(myStrayratetexture, ( ( value ) ));
1844  break;
1845  case 66:
1846  coerceValue(myStrayratetextureprim, ( ( value ) ));
1847  break;
1848  case 67:
1849  coerceValue(myStrayfalloff, clampMinValue(0, ( value ) ));
1850  break;
1851  case 68:
1852  coerceValue(myStrayfalloffoverride, clampMinValue(0, clampMaxValue(5, value ) ));
1853  break;
1854  case 69:
1855  coerceValue(myStrayfalloffoptions, ( ( value ) ));
1856  break;
1857  case 70:
1858  coerceValue(myStrayfalloffinrange, ( ( value ) ));
1859  break;
1860  case 71:
1861  coerceValue(myStrayfalloffoutrange, ( ( value ) ));
1862  break;
1863  case 72:
1864  coerceValue(myStrayfalloffremapramp, clampMinValue(1, ( value ) ));
1865  break;
1866  case 73:
1867  coerceValue(myStrayfalloffcurveattrib, ( ( value ) ));
1868  break;
1869  case 74:
1870  coerceValue(myStrayfalloffclumpattrib, ( ( value ) ));
1871  break;
1872  case 75:
1873  coerceValue(myStrayfalloffattrib, ( ( value ) ));
1874  break;
1875  case 76:
1876  coerceValue(myStrayfallofftexture, ( ( value ) ));
1877  break;
1878  case 77:
1879  coerceValue(myStrayfallofftextureprim, ( ( value ) ));
1880  break;
1881  case 78:
1882  coerceValue(myClumpprofile, clampMinValue(1, ( value ) ));
1883  break;
1884  case 79:
1885  coerceValue(myIterations, clampMinValue(0, ( value ) ));
1886  break;
1887  case 80:
1888  coerceValue(myIterationsoverride, clampMinValue(0, clampMaxValue(4, value ) ));
1889  break;
1890  case 81:
1891  coerceValue(myIterationsoptions, ( ( value ) ));
1892  break;
1893  case 82:
1894  coerceValue(myIterationsinrange, ( ( value ) ));
1895  break;
1896  case 83:
1897  coerceValue(myIterationsoutrange, ( ( value ) ));
1898  break;
1899  case 84:
1900  coerceValue(myIterationsremapramp, clampMinValue(1, ( value ) ));
1901  break;
1902  case 85:
1903  coerceValue(myIterationscurveattrib, ( ( value ) ));
1904  break;
1905  case 86:
1906  coerceValue(myIterationsattrib, ( ( value ) ));
1907  break;
1908  case 87:
1909  coerceValue(myIterationstexture, ( ( value ) ));
1910  break;
1911  case 88:
1912  coerceValue(myIterationstextureprim, ( ( value ) ));
1913  break;
1914  case 89:
1915  coerceValue(mySizereduction, ( ( value ) ));
1916  break;
1917  case 90:
1918  coerceValue(mySizereductionoverride, clampMinValue(0, clampMaxValue(3, value ) ));
1919  break;
1920  case 91:
1921  coerceValue(mySizereductionoptions, ( ( value ) ));
1922  break;
1923  case 92:
1924  coerceValue(mySizereductioninrange, ( ( value ) ));
1925  break;
1926  case 93:
1927  coerceValue(mySizereductionoutrange, ( ( value ) ));
1928  break;
1929  case 94:
1930  coerceValue(mySizereductionremapramp, clampMinValue(1, ( value ) ));
1931  break;
1932  case 95:
1933  coerceValue(mySizereductionattrib, ( ( value ) ));
1934  break;
1935  case 96:
1936  coerceValue(mySizereductiontexture, ( ( value ) ));
1937  break;
1938  case 97:
1939  coerceValue(mySizereductiontextureprim, ( ( value ) ));
1940  break;
1941  case 98:
1942  coerceValue(myGoalfeedback, clampMinValue(0, clampMaxValue(1, value ) ));
1943  break;
1944  case 99:
1945  coerceValue(myGoalfeedbackoverride, clampMinValue(0, clampMaxValue(3, value ) ));
1946  break;
1947  case 100:
1948  coerceValue(myGoalfeedbackoptions, ( ( value ) ));
1949  break;
1950  case 101:
1951  coerceValue(myGoalfeedbackinrange, ( ( value ) ));
1952  break;
1953  case 102:
1954  coerceValue(myGoalfeedbackoutrange, ( ( value ) ));
1955  break;
1956  case 103:
1957  coerceValue(myGoalfeedbackremapramp, clampMinValue(1, ( value ) ));
1958  break;
1959  case 104:
1960  coerceValue(myGoalfeedbackattrib, ( ( value ) ));
1961  break;
1962  case 105:
1963  coerceValue(myGoalfeedbacktexture, ( ( value ) ));
1964  break;
1965  case 106:
1966  coerceValue(myGoalfeedbacktextureprim, ( ( value ) ));
1967  break;
1968  case 107:
1969  coerceValue(myTightnessreduction, clampMinValue(0, ( value ) ));
1970  break;
1971  case 108:
1972  coerceValue(myTightnessreductionoverride, clampMinValue(0, clampMaxValue(4, value ) ));
1973  break;
1974  case 109:
1975  coerceValue(myTightnessreductionoptions, ( ( value ) ));
1976  break;
1977  case 110:
1978  coerceValue(myTightnessreductioninrange, ( ( value ) ));
1979  break;
1980  case 111:
1981  coerceValue(myTightnessreductionoutrange, ( ( value ) ));
1982  break;
1983  case 112:
1984  coerceValue(myTightnessreductionremapramp, clampMinValue(1, ( value ) ));
1985  break;
1986  case 113:
1987  coerceValue(myTightnessreductioncurveattrib, ( ( value ) ));
1988  break;
1989  case 114:
1990  coerceValue(myTightnessreductionattrib, ( ( value ) ));
1991  break;
1992  case 115:
1993  coerceValue(myTightnessreductiontexture, ( ( value ) ));
1994  break;
1995  case 116:
1996  coerceValue(myTightnessreductiontextureprim, ( ( value ) ));
1997  break;
1998  case 117:
1999  coerceValue(myEnablecurling, ( ( value ) ));
2000  break;
2001  case 118:
2002  coerceValue(myCurlamp, ( ( value ) ));
2003  break;
2004  case 119:
2005  coerceValue(myCurlampoverride, clampMinValue(0, clampMaxValue(4, value ) ));
2006  break;
2007  case 120:
2008  coerceValue(myCurlampoptions, ( ( value ) ));
2009  break;
2010  case 121:
2011  coerceValue(myCurlampinrange, ( ( value ) ));
2012  break;
2013  case 122:
2014  coerceValue(myCurlampoutrange, ( ( value ) ));
2015  break;
2016  case 123:
2017  coerceValue(myCurlampremapramp, clampMinValue(1, ( value ) ));
2018  break;
2019  case 124:
2020  coerceValue(myCurlampcurveattrib, ( ( value ) ));
2021  break;
2022  case 125:
2023  coerceValue(myCurlampattrib, ( ( value ) ));
2024  break;
2025  case 126:
2026  coerceValue(myCurlamptexture, ( ( value ) ));
2027  break;
2028  case 127:
2029  coerceValue(myCurlamptextureprim, ( ( value ) ));
2030  break;
2031  case 128:
2032  coerceValue(myCurlampramp, clampMinValue(1, ( value ) ));
2033  break;
2034  case 129:
2035  coerceValue(myCurlfreq, ( ( value ) ));
2036  break;
2037  case 130:
2038  coerceValue(myCurlfreqoverride, clampMinValue(0, clampMaxValue(4, value ) ));
2039  break;
2040  case 131:
2041  coerceValue(myCurlfreqoptions, ( ( value ) ));
2042  break;
2043  case 132:
2044  coerceValue(myCurlfreqinrange, ( ( value ) ));
2045  break;
2046  case 133:
2047  coerceValue(myCurlfreqoutrange, ( ( value ) ));
2048  break;
2049  case 134:
2050  coerceValue(myCurlfreqremapramp, clampMinValue(1, ( value ) ));
2051  break;
2052  case 135:
2053  coerceValue(myCurlfreqcurveattrib, ( ( value ) ));
2054  break;
2055  case 136:
2056  coerceValue(myCurlfreqattrib, ( ( value ) ));
2057  break;
2058  case 137:
2059  coerceValue(myCurlfreqtexture, ( ( value ) ));
2060  break;
2061  case 138:
2062  coerceValue(myCurlfreqtextureprim, ( ( value ) ));
2063  break;
2064  case 139:
2065  coerceValue(myCurlfreqramp, clampMinValue(1, ( value ) ));
2066  break;
2067  case 140:
2068  coerceValue(myClumpidinputattrib, ( ( value ) ));
2069  break;
2070  case 141:
2071  coerceValue(myCreateclumpidattrib, ( ( value ) ));
2072  break;
2073  case 142:
2074  coerceValue(myClumpidoutputattrib, ( ( value ) ));
2075  break;
2076  case 143:
2077  coerceValue(myUseorientinputattrib, ( ( value ) ));
2078  break;
2079  case 144:
2080  coerceValue(myOrientinputattrib, ( ( value ) ));
2081  break;
2082  case 145:
2083  coerceValue(myCreatetightnessattrib, ( ( value ) ));
2084  break;
2085  case 146:
2086  coerceValue(myTightnessoutputattrib, ( ( value ) ));
2087  break;
2088  case 147:
2089  coerceValue(myClumppointattribs, ( ( value ) ));
2090  break;
2091  case 148:
2092  coerceValue(myClumpprimattribs, ( ( value ) ));
2093  break;
2094 
2095  }
2096  }
2097 
2098  void setNestParmValue(TempIndex idx, TempIndex instance, const exint &value) override
2099  { doSetParmValue(idx, instance, value); }
2100  void setNestParmValue(TempIndex idx, TempIndex instance, const fpreal &value) override
2101  { doSetParmValue(idx, instance, value); }
2102  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector2D &value) override
2103  { doSetParmValue(idx, instance, value); }
2104  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector3D &value) override
2105  { doSetParmValue(idx, instance, value); }
2106  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector4D &value) override
2107  { doSetParmValue(idx, instance, value); }
2108  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix2D &value) override
2109  { doSetParmValue(idx, instance, value); }
2110  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix3D &value) override
2111  { doSetParmValue(idx, instance, value); }
2112  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix4D &value) override
2113  { doSetParmValue(idx, instance, value); }
2114  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_StringHolder &value) override
2115  { doSetParmValue(idx, instance, value); }
2116  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_SharedPtr<UT_Ramp> &value) override
2117  { doSetParmValue(idx, instance, value); }
2118  void setNestParmValue(TempIndex idx, TempIndex instance, const PRM_DataItemHandle &value) override
2119  { doSetParmValue(idx, instance, value); }
2120 
2121  exint getNestNumParms(TempIndex idx) const override
2122  {
2123  if (idx.size() == 0)
2124  return 149;
2125  switch (idx[0])
2126  {
2127 
2128  }
2129  // Invalid
2130  return 0;
2131  }
2132 
2133  const char *getNestParmName(TempIndex fieldnum) const override
2134  {
2135  if (fieldnum.size() < 1)
2136  return 0;
2137  switch (fieldnum[0])
2138  {
2139  case 0:
2140  return "legacymasking";
2141  case 1:
2142  return "uvattrib";
2143  case 2:
2144  return "blend";
2145  case 3:
2146  return "blendoverride";
2147  case 4:
2148  return "blendoptions";
2149  case 5:
2150  return "blendinrange";
2151  case 6:
2152  return "blendoutrange";
2153  case 7:
2154  return "blendremapramp";
2155  case 8:
2156  return "blendcurveattrib";
2157  case 9:
2158  return "blendattrib";
2159  case 10:
2160  return "blendtexture";
2161  case 11:
2162  return "blendtextureprim";
2163  case 12:
2164  return "useskinmask";
2165  case 13:
2166  return "skinmaskattrib";
2167  case 14:
2168  return "clumpsize";
2169  case 15:
2170  return "clumpsizeoverride";
2171  case 16:
2172  return "clumpsizeoptions";
2173  case 17:
2174  return "clumpsizeinrange";
2175  case 18:
2176  return "clumpsizeoutrange";
2177  case 19:
2178  return "clumpsizeremapramp";
2179  case 20:
2180  return "clumpsizeattrib";
2181  case 21:
2182  return "clumpsizetexture";
2183  case 22:
2184  return "clumpsizetextureprim";
2185  case 23:
2186  return "searchbeyondradius";
2187  case 24:
2188  return "clumpwithinclumps";
2189  case 25:
2190  return "crossoverrate";
2191  case 26:
2192  return "seed";
2193  case 27:
2194  return "method";
2195  case 28:
2196  return "preservelength";
2197  case 29:
2198  return "extendtomatch";
2199  case 30:
2200  return "shortentomatch";
2201  case 31:
2202  return "accuratebundling";
2203  case 32:
2204  return "hairwidth";
2205  case 33:
2206  return "hairwidthscale";
2207  case 34:
2208  return "tightness";
2209  case 35:
2210  return "tightnessoverride";
2211  case 36:
2212  return "tightnessoptions";
2213  case 37:
2214  return "tightnessinrange";
2215  case 38:
2216  return "tightnessoutrange";
2217  case 39:
2218  return "tightnessremapramp";
2219  case 40:
2220  return "tightnesscurveattrib";
2221  case 41:
2222  return "tightnessclumpattrib";
2223  case 42:
2224  return "tightnessattrib";
2225  case 43:
2226  return "tightnesstexture";
2227  case 44:
2228  return "tightnesstextureprim";
2229  case 45:
2230  return "strayamount";
2231  case 46:
2232  return "strayamountoverride";
2233  case 47:
2234  return "strayamountoptions";
2235  case 48:
2236  return "strayamountinrange";
2237  case 49:
2238  return "strayamountoutrange";
2239  case 50:
2240  return "strayamountremapramp";
2241  case 51:
2242  return "strayamountcurveattrib";
2243  case 52:
2244  return "strayamountclumpattrib";
2245  case 53:
2246  return "strayamountattrib";
2247  case 54:
2248  return "strayamounttexture";
2249  case 55:
2250  return "strayamounttextureprim";
2251  case 56:
2252  return "strayrate";
2253  case 57:
2254  return "strayrateoverride";
2255  case 58:
2256  return "strayrateoptions";
2257  case 59:
2258  return "strayrateinrange";
2259  case 60:
2260  return "strayrateoutrange";
2261  case 61:
2262  return "strayrateremapramp";
2263  case 62:
2264  return "strayratecurveattrib";
2265  case 63:
2266  return "strayrateclumpattrib";
2267  case 64:
2268  return "strayrateattrib";
2269  case 65:
2270  return "strayratetexture";
2271  case 66:
2272  return "strayratetextureprim";
2273  case 67:
2274  return "strayfalloff";
2275  case 68:
2276  return "strayfalloffoverride";
2277  case 69:
2278  return "strayfalloffoptions";
2279  case 70:
2280  return "strayfalloffinrange";
2281  case 71:
2282  return "strayfalloffoutrange";
2283  case 72:
2284  return "strayfalloffremapramp";
2285  case 73:
2286  return "strayfalloffcurveattrib";
2287  case 74:
2288  return "strayfalloffclumpattrib";
2289  case 75:
2290  return "strayfalloffattrib";
2291  case 76:
2292  return "strayfallofftexture";
2293  case 77:
2294  return "strayfallofftextureprim";
2295  case 78:
2296  return "clumpprofile";
2297  case 79:
2298  return "iterations";
2299  case 80:
2300  return "iterationsoverride";
2301  case 81:
2302  return "iterationsoptions";
2303  case 82:
2304  return "iterationsinrange";
2305  case 83:
2306  return "iterationsoutrange";
2307  case 84:
2308  return "iterationsremapramp";
2309  case 85:
2310  return "iterationscurveattrib";
2311  case 86:
2312  return "iterationsattrib";
2313  case 87:
2314  return "iterationstexture";
2315  case 88:
2316  return "iterationstextureprim";
2317  case 89:
2318  return "sizereduction";
2319  case 90:
2320  return "sizereductionoverride";
2321  case 91:
2322  return "sizereductionoptions";
2323  case 92:
2324  return "sizereductioninrange";
2325  case 93:
2326  return "sizereductionoutrange";
2327  case 94:
2328  return "sizereductionremapramp";
2329  case 95:
2330  return "sizereductionattrib";
2331  case 96:
2332  return "sizereductiontexture";
2333  case 97:
2334  return "sizereductiontextureprim";
2335  case 98:
2336  return "goalfeedback";
2337  case 99:
2338  return "goalfeedbackoverride";
2339  case 100:
2340  return "goalfeedbackoptions";
2341  case 101:
2342  return "goalfeedbackinrange";
2343  case 102:
2344  return "goalfeedbackoutrange";
2345  case 103:
2346  return "goalfeedbackremapramp";
2347  case 104:
2348  return "goalfeedbackattrib";
2349  case 105:
2350  return "goalfeedbacktexture";
2351  case 106:
2352  return "goalfeedbacktextureprim";
2353  case 107:
2354  return "tightnessreduction";
2355  case 108:
2356  return "tightnessreductionoverride";
2357  case 109:
2358  return "tightnessreductionoptions";
2359  case 110:
2360  return "tightnessreductioninrange";
2361  case 111:
2362  return "tightnessreductionoutrange";
2363  case 112:
2364  return "tightnessreductionremapramp";
2365  case 113:
2366  return "tightnessreductioncurveattrib";
2367  case 114:
2368  return "tightnessreductionattrib";
2369  case 115:
2370  return "tightnessreductiontexture";
2371  case 116:
2372  return "tightnessreductiontextureprim";
2373  case 117:
2374  return "enablecurling";
2375  case 118:
2376  return "curlamp";
2377  case 119:
2378  return "curlampoverride";
2379  case 120:
2380  return "curlampoptions";
2381  case 121:
2382  return "curlampinrange";
2383  case 122:
2384  return "curlampoutrange";
2385  case 123:
2386  return "curlampremapramp";
2387  case 124:
2388  return "curlampcurveattrib";
2389  case 125:
2390  return "curlampattrib";
2391  case 126:
2392  return "curlamptexture";
2393  case 127:
2394  return "curlamptextureprim";
2395  case 128:
2396  return "curlampramp";
2397  case 129:
2398  return "curlfreq";
2399  case 130:
2400  return "curlfreqoverride";
2401  case 131:
2402  return "curlfreqoptions";
2403  case 132:
2404  return "curlfreqinrange";
2405  case 133:
2406  return "curlfreqoutrange";
2407  case 134:
2408  return "curlfreqremapramp";
2409  case 135:
2410  return "curlfreqcurveattrib";
2411  case 136:
2412  return "curlfreqattrib";
2413  case 137:
2414  return "curlfreqtexture";
2415  case 138:
2416  return "curlfreqtextureprim";
2417  case 139:
2418  return "curlfreqramp";
2419  case 140:
2420  return "clumpidinputattrib";
2421  case 141:
2422  return "createclumpidattrib";
2423  case 142:
2424  return "clumpidoutputattrib";
2425  case 143:
2426  return "useorientinputattrib";
2427  case 144:
2428  return "orientinputattrib";
2429  case 145:
2430  return "createtightnessattrib";
2431  case 146:
2432  return "tightnessoutputattrib";
2433  case 147:
2434  return "clumppointattribs";
2435  case 148:
2436  return "clumpprimattribs";
2437 
2438  }
2439  return 0;
2440  }
2441 
2442  ParmType getNestParmType(TempIndex fieldnum) const override
2443  {
2444  if (fieldnum.size() < 1)
2445  return PARM_UNSUPPORTED;
2446  switch (fieldnum[0])
2447  {
2448  case 0:
2449  return PARM_INTEGER;
2450  case 1:
2451  return PARM_STRING;
2452  case 2:
2453  return PARM_FLOAT;
2454  case 3:
2455  return PARM_INTEGER;
2456  case 4:
2457  return PARM_INTEGER;
2458  case 5:
2459  return PARM_VECTOR2;
2460  case 6:
2461  return PARM_VECTOR2;
2462  case 7:
2463  return PARM_RAMP;
2464  case 8:
2465  return PARM_STRING;
2466  case 9:
2467  return PARM_STRING;
2468  case 10:
2469  return PARM_STRING;
2470  case 11:
2471  return PARM_STRING;
2472  case 12:
2473  return PARM_INTEGER;
2474  case 13:
2475  return PARM_STRING;
2476  case 14:
2477  return PARM_FLOAT;
2478  case 15:
2479  return PARM_INTEGER;
2480  case 16:
2481  return PARM_INTEGER;
2482  case 17:
2483  return PARM_VECTOR2;
2484  case 18:
2485  return PARM_VECTOR2;
2486  case 19:
2487  return PARM_RAMP;
2488  case 20:
2489  return PARM_STRING;
2490  case 21:
2491  return PARM_STRING;
2492  case 22:
2493  return PARM_STRING;
2494  case 23:
2495  return PARM_INTEGER;
2496  case 24:
2497  return PARM_INTEGER;
2498  case 25:
2499  return PARM_FLOAT;
2500  case 26:
2501  return PARM_FLOAT;
2502  case 27:
2503  return PARM_INTEGER;
2504  case 28:
2505  return PARM_INTEGER;
2506  case 29:
2507  return PARM_FLOAT;
2508  case 30:
2509  return PARM_FLOAT;
2510  case 31:
2511  return PARM_INTEGER;
2512  case 32:
2513  return PARM_FLOAT;
2514  case 33:
2515  return PARM_FLOAT;
2516  case 34:
2517  return PARM_FLOAT;
2518  case 35:
2519  return PARM_INTEGER;
2520  case 36:
2521  return PARM_INTEGER;
2522  case 37:
2523  return PARM_VECTOR2;
2524  case 38:
2525  return PARM_VECTOR2;
2526  case 39:
2527  return PARM_RAMP;
2528  case 40:
2529  return PARM_STRING;
2530  case 41:
2531  return PARM_STRING;
2532  case 42:
2533  return PARM_STRING;
2534  case 43:
2535  return PARM_STRING;
2536  case 44:
2537  return PARM_STRING;
2538  case 45:
2539  return PARM_FLOAT;
2540  case 46:
2541  return PARM_INTEGER;
2542  case 47:
2543  return PARM_INTEGER;
2544  case 48:
2545  return PARM_VECTOR2;
2546  case 49:
2547  return PARM_VECTOR2;
2548  case 50:
2549  return PARM_RAMP;
2550  case 51:
2551  return PARM_STRING;
2552  case 52:
2553  return PARM_STRING;
2554  case 53:
2555  return PARM_STRING;
2556  case 54:
2557  return PARM_STRING;
2558  case 55:
2559  return PARM_STRING;
2560  case 56:
2561  return PARM_FLOAT;
2562  case 57:
2563  return PARM_INTEGER;
2564  case 58:
2565  return PARM_INTEGER;
2566  case 59:
2567  return PARM_VECTOR2;
2568  case 60:
2569  return PARM_VECTOR2;
2570  case 61:
2571  return PARM_RAMP;
2572  case 62:
2573  return PARM_STRING;
2574  case 63:
2575  return PARM_STRING;
2576  case 64:
2577  return PARM_STRING;
2578  case 65:
2579  return PARM_STRING;
2580  case 66:
2581  return PARM_STRING;
2582  case 67:
2583  return PARM_FLOAT;
2584  case 68:
2585  return PARM_INTEGER;
2586  case 69:
2587  return PARM_INTEGER;
2588  case 70:
2589  return PARM_VECTOR2;
2590  case 71:
2591  return PARM_VECTOR2;
2592  case 72:
2593  return PARM_RAMP;
2594  case 73:
2595  return PARM_STRING;
2596  case 74:
2597  return PARM_STRING;
2598  case 75:
2599  return PARM_STRING;
2600  case 76:
2601  return PARM_STRING;
2602  case 77:
2603  return PARM_STRING;
2604  case 78:
2605  return PARM_RAMP;
2606  case 79:
2607  return PARM_FLOAT;
2608  case 80:
2609  return PARM_INTEGER;
2610  case 81:
2611  return PARM_INTEGER;
2612  case 82:
2613  return PARM_VECTOR2;
2614  case 83:
2615  return PARM_VECTOR2;
2616  case 84:
2617  return PARM_RAMP;
2618  case 85:
2619  return PARM_STRING;
2620  case 86:
2621  return PARM_STRING;
2622  case 87:
2623  return PARM_STRING;
2624  case 88:
2625  return PARM_STRING;
2626  case 89:
2627  return PARM_FLOAT;
2628  case 90:
2629  return PARM_INTEGER;
2630  case 91:
2631  return PARM_INTEGER;
2632  case 92:
2633  return PARM_VECTOR2;
2634  case 93:
2635  return PARM_VECTOR2;
2636  case 94:
2637  return PARM_RAMP;
2638  case 95:
2639  return PARM_STRING;
2640  case 96:
2641  return PARM_STRING;
2642  case 97:
2643  return PARM_STRING;
2644  case 98:
2645  return PARM_FLOAT;
2646  case 99:
2647  return PARM_INTEGER;
2648  case 100:
2649  return PARM_INTEGER;
2650  case 101:
2651  return PARM_VECTOR2;
2652  case 102:
2653  return PARM_VECTOR2;
2654  case 103:
2655  return PARM_RAMP;
2656  case 104:
2657  return PARM_STRING;
2658  case 105:
2659  return PARM_STRING;
2660  case 106:
2661  return PARM_STRING;
2662  case 107:
2663  return PARM_FLOAT;
2664  case 108:
2665  return PARM_INTEGER;
2666  case 109:
2667  return PARM_INTEGER;
2668  case 110:
2669  return PARM_VECTOR2;
2670  case 111:
2671  return PARM_VECTOR2;
2672  case 112:
2673  return PARM_RAMP;
2674  case 113:
2675  return PARM_STRING;
2676  case 114:
2677  return PARM_STRING;
2678  case 115:
2679  return PARM_STRING;
2680  case 116:
2681  return PARM_STRING;
2682  case 117:
2683  return PARM_INTEGER;
2684  case 118:
2685  return PARM_FLOAT;
2686  case 119:
2687  return PARM_INTEGER;
2688  case 120:
2689  return PARM_INTEGER;
2690  case 121:
2691  return PARM_VECTOR2;
2692  case 122:
2693  return PARM_VECTOR2;
2694  case 123:
2695  return PARM_RAMP;
2696  case 124:
2697  return PARM_STRING;
2698  case 125:
2699  return PARM_STRING;
2700  case 126:
2701  return PARM_STRING;
2702  case 127:
2703  return PARM_STRING;
2704  case 128:
2705  return PARM_RAMP;
2706  case 129:
2707  return PARM_FLOAT;
2708  case 130:
2709  return PARM_INTEGER;
2710  case 131:
2711  return PARM_INTEGER;
2712  case 132:
2713  return PARM_VECTOR2;
2714  case 133:
2715  return PARM_VECTOR2;
2716  case 134:
2717  return PARM_RAMP;
2718  case 135:
2719  return PARM_STRING;
2720  case 136:
2721  return PARM_STRING;
2722  case 137:
2723  return PARM_STRING;
2724  case 138:
2725  return PARM_STRING;
2726  case 139:
2727  return PARM_RAMP;
2728  case 140:
2729  return PARM_STRING;
2730  case 141:
2731  return PARM_INTEGER;
2732  case 142:
2733  return PARM_STRING;
2734  case 143:
2735  return PARM_INTEGER;
2736  case 144:
2737  return PARM_STRING;
2738  case 145:
2739  return PARM_INTEGER;
2740  case 146:
2741  return PARM_STRING;
2742  case 147:
2743  return PARM_STRING;
2744  case 148:
2745  return PARM_STRING;
2746 
2747  }
2748  return PARM_UNSUPPORTED;
2749  }
2750 
2751  // Boiler plate to load individual types.
2752  static void loadData(UT_IStream &is, int64 &v)
2753  { is.bread(&v, 1); }
2754  static void loadData(UT_IStream &is, bool &v)
2755  { int64 iv; is.bread(&iv, 1); v = iv; }
2756  static void loadData(UT_IStream &is, fpreal64 &v)
2757  { is.bread<fpreal64>(&v, 1); }
2758  static void loadData(UT_IStream &is, UT_Vector2D &v)
2759  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1); }
2760  static void loadData(UT_IStream &is, UT_Vector3D &v)
2761  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
2762  is.bread<fpreal64>(&v.z(), 1); }
2763  static void loadData(UT_IStream &is, UT_Vector4D &v)
2764  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
2765  is.bread<fpreal64>(&v.z(), 1); is.bread<fpreal64>(&v.w(), 1); }
2766  static void loadData(UT_IStream &is, UT_Matrix2D &v)
2767  { for (int r = 0; r < 2; r++) for (int c = 0; c < 2; c++) is.bread<fpreal64>(&v(r, c), 1); }
2768  static void loadData(UT_IStream &is, UT_Matrix3D &v)
2769  { for (int r = 0; r < 3; r++) for (int c = 0; c < 3; c++) is.bread<fpreal64>(&v(r, c), 1); }
2770  static void loadData(UT_IStream &is, UT_Matrix4D &v)
2771  { for (int r = 0; r < 4; r++) for (int c = 0; c < 4; c++) is.bread<fpreal64>(&v(r, c), 1); }
2772  static void loadData(UT_IStream &is, UT_Vector2I &v)
2773  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1); }
2774  static void loadData(UT_IStream &is, UT_Vector3I &v)
2775  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
2776  is.bread<int64>(&v.z(), 1); }
2777  static void loadData(UT_IStream &is, UT_Vector4I &v)
2778  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
2779  is.bread<int64>(&v.z(), 1); is.bread<int64>(&v.w(), 1); }
2781  { is.bread(v); }
2783  { UT_StringHolder rampdata;
2784  loadData(is, rampdata);
2785  if (rampdata.isstring())
2786  {
2787  v.reset(new UT_Ramp());
2788  UT_IStream istr((const char *) rampdata, rampdata.length(), UT_ISTREAM_ASCII);
2789  v->load(istr);
2790  }
2791  else v.reset();
2792  }
2795  loadData(is, data);
2796  if (data.isstring())
2797  {
2798  // Find the data type.
2799  const char *colon = UT_StringWrap(data).findChar(':');
2800  if (colon)
2801  {
2802  int typelen = colon - data.buffer();
2804  type.strncpy(data.buffer(), typelen);
2805  UT_IStream istr(((const char *) data) + typelen + 1, data.length() - (typelen + 1), UT_ISTREAM_BINARY);
2806 
2807  v = PRM_DataFactory::parseBinary(type.buffer(), istr);
2808  }
2809  }
2810  else v.reset();
2811  }
2812 
2813  static void saveData(std::ostream &os, int64 v)
2814  { UTwrite(os, &v); }
2815  static void saveData(std::ostream &os, bool v)
2816  { int64 iv = v; UTwrite(os, &iv); }
2817  static void saveData(std::ostream &os, fpreal64 v)
2818  { UTwrite<fpreal64>(os, &v); }
2819  static void saveData(std::ostream &os, UT_Vector2D v)
2820  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y()); }
2821  static void saveData(std::ostream &os, UT_Vector3D v)
2822  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
2823  UTwrite<fpreal64>(os, &v.z()); }
2824  static void saveData(std::ostream &os, UT_Vector4D v)
2825  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
2826  UTwrite<fpreal64>(os, &v.z()); UTwrite<fpreal64>(os, &v.w()); }
2827  static void saveData(std::ostream &os, UT_Matrix2D v)
2829  static void saveData(std::ostream &os, UT_Matrix3D v)
2831  static void saveData(std::ostream &os, UT_Matrix4D v)
2833  static void saveData(std::ostream &os, UT_StringHolder s)
2834  { UT_StringWrap(s).saveBinary(os); }
2835  static void saveData(std::ostream &os, UT_SharedPtr<UT_Ramp> s)
2837  UT_OStringStream ostr;
2838  if (s) s->save(ostr);
2839  result = ostr.str();
2840  saveData(os, result);
2841  }
2842  static void saveData(std::ostream &os, PRM_DataItemHandle s)
2844  UT_OStringStream ostr;
2845  if (s)
2846  {
2847  ostr << s->getDataTypeToken();
2848  ostr << ":";
2849  s->saveBinary(ostr);
2850  }
2851  result = ostr.str();
2852  saveData(os, result);
2853  }
2854 
2855 
2856  void save(std::ostream &os) const
2857  {
2858  int32 v = version();
2859  UTwrite(os, &v);
2860  saveData(os, myLegacymasking);
2861  saveData(os, myUvattrib);
2862  saveData(os, myBlend);
2863  saveData(os, myBlendoverride);
2864  saveData(os, myBlendoptions);
2865  saveData(os, myBlendinrange);
2866  saveData(os, myBlendoutrange);
2867  saveData(os, myBlendremapramp);
2868  saveData(os, myBlendcurveattrib);
2869  saveData(os, myBlendattrib);
2870  saveData(os, myBlendtexture);
2871  saveData(os, myBlendtextureprim);
2872  saveData(os, myUseskinmask);
2873  saveData(os, mySkinmaskattrib);
2874  saveData(os, myClumpsize);
2875  saveData(os, myClumpsizeoverride);
2876  saveData(os, myClumpsizeoptions);
2877  saveData(os, myClumpsizeinrange);
2878  saveData(os, myClumpsizeoutrange);
2879  saveData(os, myClumpsizeremapramp);
2880  saveData(os, myClumpsizeattrib);
2881  saveData(os, myClumpsizetexture);
2882  saveData(os, myClumpsizetextureprim);
2883  saveData(os, mySearchbeyondradius);
2884  saveData(os, myClumpwithinclumps);
2885  saveData(os, myCrossoverrate);
2886  saveData(os, mySeed);
2887  saveData(os, myMethod);
2888  saveData(os, myPreservelength);
2889  saveData(os, myExtendtomatch);
2890  saveData(os, myShortentomatch);
2891  saveData(os, myAccuratebundling);
2892  saveData(os, myHairwidth);
2893  saveData(os, myHairwidthscale);
2894  saveData(os, myTightness);
2895  saveData(os, myTightnessoverride);
2896  saveData(os, myTightnessoptions);
2897  saveData(os, myTightnessinrange);
2898  saveData(os, myTightnessoutrange);
2899  saveData(os, myTightnessremapramp);
2900  saveData(os, myTightnesscurveattrib);
2901  saveData(os, myTightnessclumpattrib);
2902  saveData(os, myTightnessattrib);
2903  saveData(os, myTightnesstexture);
2904  saveData(os, myTightnesstextureprim);
2905  saveData(os, myStrayamount);
2906  saveData(os, myStrayamountoverride);
2907  saveData(os, myStrayamountoptions);
2908  saveData(os, myStrayamountinrange);
2909  saveData(os, myStrayamountoutrange);
2910  saveData(os, myStrayamountremapramp);
2911  saveData(os, myStrayamountcurveattrib);
2912  saveData(os, myStrayamountclumpattrib);
2913  saveData(os, myStrayamountattrib);
2914  saveData(os, myStrayamounttexture);
2915  saveData(os, myStrayamounttextureprim);
2916  saveData(os, myStrayrate);
2917  saveData(os, myStrayrateoverride);
2918  saveData(os, myStrayrateoptions);
2919  saveData(os, myStrayrateinrange);
2920  saveData(os, myStrayrateoutrange);
2921  saveData(os, myStrayrateremapramp);
2922  saveData(os, myStrayratecurveattrib);
2923  saveData(os, myStrayrateclumpattrib);
2924  saveData(os, myStrayrateattrib);
2925  saveData(os, myStrayratetexture);
2926  saveData(os, myStrayratetextureprim);
2927  saveData(os, myStrayfalloff);
2928  saveData(os, myStrayfalloffoverride);
2929  saveData(os, myStrayfalloffoptions);
2930  saveData(os, myStrayfalloffinrange);
2931  saveData(os, myStrayfalloffoutrange);
2932  saveData(os, myStrayfalloffremapramp);
2933  saveData(os, myStrayfalloffcurveattrib);
2934  saveData(os, myStrayfalloffclumpattrib);
2935  saveData(os, myStrayfalloffattrib);
2936  saveData(os, myStrayfallofftexture);
2937  saveData(os, myStrayfallofftextureprim);
2938  saveData(os, myClumpprofile);
2939  saveData(os, myIterations);
2940  saveData(os, myIterationsoverride);
2941  saveData(os, myIterationsoptions);
2942  saveData(os, myIterationsinrange);
2943  saveData(os, myIterationsoutrange);
2944  saveData(os, myIterationsremapramp);
2945  saveData(os, myIterationscurveattrib);
2946  saveData(os, myIterationsattrib);
2947  saveData(os, myIterationstexture);
2948  saveData(os, myIterationstextureprim);
2949  saveData(os, mySizereduction);
2950  saveData(os, mySizereductionoverride);
2951  saveData(os, mySizereductionoptions);
2952  saveData(os, mySizereductioninrange);
2953  saveData(os, mySizereductionoutrange);
2954  saveData(os, mySizereductionremapramp);
2955  saveData(os, mySizereductionattrib);
2956  saveData(os, mySizereductiontexture);
2957  saveData(os, mySizereductiontextureprim);
2958  saveData(os, myGoalfeedback);
2959  saveData(os, myGoalfeedbackoverride);
2960  saveData(os, myGoalfeedbackoptions);
2961  saveData(os, myGoalfeedbackinrange);
2962  saveData(os, myGoalfeedbackoutrange);
2963  saveData(os, myGoalfeedbackremapramp);
2964  saveData(os, myGoalfeedbackattrib);
2965  saveData(os, myGoalfeedbacktexture);
2966  saveData(os, myGoalfeedbacktextureprim);
2967  saveData(os, myTightnessreduction);
2968  saveData(os, myTightnessreductionoverride);
2969  saveData(os, myTightnessreductionoptions);
2970  saveData(os, myTightnessreductioninrange);
2971  saveData(os, myTightnessreductionoutrange);
2972  saveData(os, myTightnessreductionremapramp);
2973  saveData(os, myTightnessreductioncurveattrib);
2974  saveData(os, myTightnessreductionattrib);
2975  saveData(os, myTightnessreductiontexture);
2976  saveData(os, myTightnessreductiontextureprim);
2977  saveData(os, myEnablecurling);
2978  saveData(os, myCurlamp);
2979  saveData(os, myCurlampoverride);
2980  saveData(os, myCurlampoptions);
2981  saveData(os, myCurlampinrange);
2982  saveData(os, myCurlampoutrange);
2983  saveData(os, myCurlampremapramp);
2984  saveData(os, myCurlampcurveattrib);
2985  saveData(os, myCurlampattrib);
2986  saveData(os, myCurlamptexture);
2987  saveData(os, myCurlamptextureprim);
2988  saveData(os, myCurlampramp);
2989  saveData(os, myCurlfreq);
2990  saveData(os, myCurlfreqoverride);
2991  saveData(os, myCurlfreqoptions);
2992  saveData(os, myCurlfreqinrange);
2993  saveData(os, myCurlfreqoutrange);
2994  saveData(os, myCurlfreqremapramp);
2995  saveData(os, myCurlfreqcurveattrib);
2996  saveData(os, myCurlfreqattrib);
2997  saveData(os, myCurlfreqtexture);
2998  saveData(os, myCurlfreqtextureprim);
2999  saveData(os, myCurlfreqramp);
3000  saveData(os, myClumpidinputattrib);
3001  saveData(os, myCreateclumpidattrib);
3002  saveData(os, myClumpidoutputattrib);
3003  saveData(os, myUseorientinputattrib);
3004  saveData(os, myOrientinputattrib);
3005  saveData(os, myCreatetightnessattrib);
3006  saveData(os, myTightnessoutputattrib);
3007  saveData(os, myClumppointattribs);
3008  saveData(os, myClumpprimattribs);
3009 
3010  }
3011 
3012  bool load(UT_IStream &is)
3013  {
3014  int32 v;
3015  is.bread(&v, 1);
3016  if (version() != v)
3017  {
3018  // Fail incompatible versions
3019  return false;
3020  }
3021  loadData(is, myLegacymasking);
3022  loadData(is, myUvattrib);
3023  loadData(is, myBlend);
3024  loadData(is, myBlendoverride);
3025  loadData(is, myBlendoptions);
3026  loadData(is, myBlendinrange);
3027  loadData(is, myBlendoutrange);
3028  loadData(is, myBlendremapramp);
3029  loadData(is, myBlendcurveattrib);
3030  loadData(is, myBlendattrib);
3031  loadData(is, myBlendtexture);
3032  loadData(is, myBlendtextureprim);
3033  loadData(is, myUseskinmask);
3034  loadData(is, mySkinmaskattrib);
3035  loadData(is, myClumpsize);
3036  loadData(is, myClumpsizeoverride);
3037  loadData(is, myClumpsizeoptions);
3038  loadData(is, myClumpsizeinrange);
3039  loadData(is, myClumpsizeoutrange);
3040  loadData(is, myClumpsizeremapramp);
3041  loadData(is, myClumpsizeattrib);
3042  loadData(is, myClumpsizetexture);
3043  loadData(is, myClumpsizetextureprim);
3044  loadData(is, mySearchbeyondradius);
3045  loadData(is, myClumpwithinclumps);
3046  loadData(is, myCrossoverrate);
3047  loadData(is, mySeed);
3048  loadData(is, myMethod);
3049  loadData(is, myPreservelength);
3050  loadData(is, myExtendtomatch);
3051  loadData(is, myShortentomatch);
3052  loadData(is, myAccuratebundling);
3053  loadData(is, myHairwidth);
3054  loadData(is, myHairwidthscale);
3055  loadData(is, myTightness);
3056  loadData(is, myTightnessoverride);
3057  loadData(is, myTightnessoptions);
3058  loadData(is, myTightnessinrange);
3059  loadData(is, myTightnessoutrange);
3060  loadData(is, myTightnessremapramp);
3061  loadData(is, myTightnesscurveattrib);
3062  loadData(is, myTightnessclumpattrib);
3063  loadData(is, myTightnessattrib);
3064  loadData(is, myTightnesstexture);
3065  loadData(is, myTightnesstextureprim);
3066  loadData(is, myStrayamount);
3067  loadData(is, myStrayamountoverride);
3068  loadData(is, myStrayamountoptions);
3069  loadData(is, myStrayamountinrange);
3070  loadData(is, myStrayamountoutrange);
3071  loadData(is, myStrayamountremapramp);
3072  loadData(is, myStrayamountcurveattrib);
3073  loadData(is, myStrayamountclumpattrib);
3074  loadData(is, myStrayamountattrib);
3075  loadData(is, myStrayamounttexture);
3076  loadData(is, myStrayamounttextureprim);
3077  loadData(is, myStrayrate);
3078  loadData(is, myStrayrateoverride);
3079  loadData(is, myStrayrateoptions);
3080  loadData(is, myStrayrateinrange);
3081  loadData(is, myStrayrateoutrange);
3082  loadData(is, myStrayrateremapramp);
3083  loadData(is, myStrayratecurveattrib);
3084  loadData(is, myStrayrateclumpattrib);
3085  loadData(is, myStrayrateattrib);
3086  loadData(is, myStrayratetexture);
3087  loadData(is, myStrayratetextureprim);
3088  loadData(is, myStrayfalloff);
3089  loadData(is, myStrayfalloffoverride);
3090  loadData(is, myStrayfalloffoptions);
3091  loadData(is, myStrayfalloffinrange);
3092  loadData(is, myStrayfalloffoutrange);
3093  loadData(is, myStrayfalloffremapramp);
3094  loadData(is, myStrayfalloffcurveattrib);
3095  loadData(is, myStrayfalloffclumpattrib);
3096  loadData(is, myStrayfalloffattrib);
3097  loadData(is, myStrayfallofftexture);
3098  loadData(is, myStrayfallofftextureprim);
3099  loadData(is, myClumpprofile);
3100  loadData(is, myIterations);
3101  loadData(is, myIterationsoverride);
3102  loadData(is, myIterationsoptions);
3103  loadData(is, myIterationsinrange);
3104  loadData(is, myIterationsoutrange);
3105  loadData(is, myIterationsremapramp);
3106  loadData(is, myIterationscurveattrib);
3107  loadData(is, myIterationsattrib);
3108  loadData(is, myIterationstexture);
3109  loadData(is, myIterationstextureprim);
3110  loadData(is, mySizereduction);
3111  loadData(is, mySizereductionoverride);
3112  loadData(is, mySizereductionoptions);
3113  loadData(is, mySizereductioninrange);
3114  loadData(is, mySizereductionoutrange);
3115  loadData(is, mySizereductionremapramp);
3116  loadData(is, mySizereductionattrib);
3117  loadData(is, mySizereductiontexture);
3118  loadData(is, mySizereductiontextureprim);
3119  loadData(is, myGoalfeedback);
3120  loadData(is, myGoalfeedbackoverride);
3121  loadData(is, myGoalfeedbackoptions);
3122  loadData(is, myGoalfeedbackinrange);
3123  loadData(is, myGoalfeedbackoutrange);
3124  loadData(is, myGoalfeedbackremapramp);
3125  loadData(is, myGoalfeedbackattrib);
3126  loadData(is, myGoalfeedbacktexture);
3127  loadData(is, myGoalfeedbacktextureprim);
3128  loadData(is, myTightnessreduction);
3129  loadData(is, myTightnessreductionoverride);
3130  loadData(is, myTightnessreductionoptions);
3131  loadData(is, myTightnessreductioninrange);
3132  loadData(is, myTightnessreductionoutrange);
3133  loadData(is, myTightnessreductionremapramp);
3134  loadData(is, myTightnessreductioncurveattrib);
3135  loadData(is, myTightnessreductionattrib);
3136  loadData(is, myTightnessreductiontexture);
3137  loadData(is, myTightnessreductiontextureprim);
3138  loadData(is, myEnablecurling);
3139  loadData(is, myCurlamp);
3140  loadData(is, myCurlampoverride);
3141  loadData(is, myCurlampoptions);
3142  loadData(is, myCurlampinrange);
3143  loadData(is, myCurlampoutrange);
3144  loadData(is, myCurlampremapramp);
3145  loadData(is, myCurlampcurveattrib);
3146  loadData(is, myCurlampattrib);
3147  loadData(is, myCurlamptexture);
3148  loadData(is, myCurlamptextureprim);
3149  loadData(is, myCurlampramp);
3150  loadData(is, myCurlfreq);
3151  loadData(is, myCurlfreqoverride);
3152  loadData(is, myCurlfreqoptions);
3153  loadData(is, myCurlfreqinrange);
3154  loadData(is, myCurlfreqoutrange);
3155  loadData(is, myCurlfreqremapramp);
3156  loadData(is, myCurlfreqcurveattrib);
3157  loadData(is, myCurlfreqattrib);
3158  loadData(is, myCurlfreqtexture);
3159  loadData(is, myCurlfreqtextureprim);
3160  loadData(is, myCurlfreqramp);
3161  loadData(is, myClumpidinputattrib);
3162  loadData(is, myCreateclumpidattrib);
3163  loadData(is, myClumpidoutputattrib);
3164  loadData(is, myUseorientinputattrib);
3165  loadData(is, myOrientinputattrib);
3166  loadData(is, myCreatetightnessattrib);
3167  loadData(is, myTightnessoutputattrib);
3168  loadData(is, myClumppointattribs);
3169  loadData(is, myClumpprimattribs);
3170 
3171  return true;
3172  }
3173 
3174  bool getLegacymasking() const { return myLegacymasking; }
3175  void setLegacymasking(bool val) { myLegacymasking = val; }
3176  bool opLegacymasking(const SOP_NodeVerb::CookParms &cookparms) const
3177  {
3178  SOP_Node *thissop = cookparms.getNode();
3179  if (!thissop) return getLegacymasking();
3180  bool result;
3181  OP_Utils::evalOpParm(result, thissop, "legacymasking", cookparms.getCookTime(), 0);
3182  return result;
3183  }
3184  const UT_StringHolder & getUvattrib() const { return myUvattrib; }
3185  void setUvattrib(const UT_StringHolder & val) { myUvattrib = val; }
3187  {
3188  SOP_Node *thissop = cookparms.getNode();
3189  if (!thissop) return getUvattrib();
3191  OP_Utils::evalOpParm(result, thissop, "uvattrib", cookparms.getCookTime(), 0);
3192  return result;
3193  }
3194  fpreal64 getBlend() const { return myBlend; }
3195  void setBlend(fpreal64 val) { myBlend = val; }
3196  fpreal64 opBlend(const SOP_NodeVerb::CookParms &cookparms) const
3197  {
3198  SOP_Node *thissop = cookparms.getNode();
3199  if (!thissop) return getBlend();
3200  fpreal64 result;
3201  OP_Utils::evalOpParm(result, thissop, "blend", cookparms.getCookTime(), 0);
3202  return result;
3203  }
3204  Blendoverride getBlendoverride() const { return Blendoverride(myBlendoverride); }
3205  void setBlendoverride(Blendoverride val) { myBlendoverride = int64(val); }
3207  {
3208  SOP_Node *thissop = cookparms.getNode();
3209  if (!thissop) return getBlendoverride();
3210  int64 result;
3211  OP_Utils::evalOpParm(result, thissop, "blendoverride", cookparms.getCookTime(), 0);
3212  return Blendoverride(result);
3213  }
3214  int64 getBlendoptions() const { return myBlendoptions; }
3215  void setBlendoptions(int64 val) { myBlendoptions = val; }
3217  {
3218  SOP_Node *thissop = cookparms.getNode();
3219  if (!thissop) return getBlendoptions();
3220  int64 result;
3221  OP_Utils::evalOpParm(result, thissop, "blendoptions", cookparms.getCookTime(), 0);
3222  return result;
3223  }
3224  UT_Vector2D getBlendinrange() const { return myBlendinrange; }
3225  void setBlendinrange(UT_Vector2D val) { myBlendinrange = val; }
3227  {
3228  SOP_Node *thissop = cookparms.getNode();
3229  if (!thissop) return getBlendinrange();
3231  OP_Utils::evalOpParm(result, thissop, "blendinrange", cookparms.getCookTime(), 0);
3232  return result;
3233  }
3234  UT_Vector2D getBlendoutrange() const { return myBlendoutrange; }
3235  void setBlendoutrange(UT_Vector2D val) { myBlendoutrange = val; }
3237  {
3238  SOP_Node *thissop = cookparms.getNode();
3239  if (!thissop) return getBlendoutrange();
3241  OP_Utils::evalOpParm(result, thissop, "blendoutrange", cookparms.getCookTime(), 0);
3242  return result;
3243  }
3244  UT_SharedPtr<UT_Ramp> getBlendremapramp() const { return myBlendremapramp; }
3245  void setBlendremapramp(UT_SharedPtr<UT_Ramp> val) { myBlendremapramp = val; }
3247  {
3248  SOP_Node *thissop = cookparms.getNode();
3249  if (!thissop) return getBlendremapramp();
3251  OP_Utils::evalOpParm(result, thissop, "blendremapramp", cookparms.getCookTime(), 0);
3252  return result;
3253  }
3254  const UT_StringHolder & getBlendcurveattrib() const { return myBlendcurveattrib; }
3255  void setBlendcurveattrib(const UT_StringHolder & val) { myBlendcurveattrib = val; }
3257  {
3258  SOP_Node *thissop = cookparms.getNode();
3259  if (!thissop) return getBlendcurveattrib();
3261  OP_Utils::evalOpParm(result, thissop, "blendcurveattrib", cookparms.getCookTime(), 0);
3262  return result;
3263  }
3264  const UT_StringHolder & getBlendattrib() const { return myBlendattrib; }
3265  void setBlendattrib(const UT_StringHolder & val) { myBlendattrib = val; }
3267  {
3268  SOP_Node *thissop = cookparms.getNode();
3269  if (!thissop) return getBlendattrib();
3271  OP_Utils::evalOpParm(result, thissop, "blendattrib", cookparms.getCookTime(), 0);
3272  return result;
3273  }
3274  const UT_StringHolder & getBlendtexture() const { return myBlendtexture; }
3275  void setBlendtexture(const UT_StringHolder & val) { myBlendtexture = val; }
3277  {
3278  SOP_Node *thissop = cookparms.getNode();
3279  if (!thissop) return getBlendtexture();
3281  OP_Utils::evalOpParm(result, thissop, "blendtexture", cookparms.getCookTime(), 0);
3282  return result;
3283  }
3284  const UT_StringHolder & getBlendtextureprim() const { return myBlendtextureprim; }
3285  void setBlendtextureprim(const UT_StringHolder & val) { myBlendtextureprim = val; }
3287  {
3288  SOP_Node *thissop = cookparms.getNode();
3289  if (!thissop) return getBlendtextureprim();
3291  OP_Utils::evalOpParm(result, thissop, "blendtextureprim", cookparms.getCookTime(), 0);
3292  return result;
3293  }
3294  bool getUseskinmask() const { return myUseskinmask; }
3295  void setUseskinmask(bool val) { myUseskinmask = val; }
3296  bool opUseskinmask(const SOP_NodeVerb::CookParms &cookparms) const
3297  {
3298  SOP_Node *thissop = cookparms.getNode();
3299  if (!thissop) return getUseskinmask();
3300  bool result;
3301  OP_Utils::evalOpParm(result, thissop, "useskinmask", cookparms.getCookTime(), 0);
3302  return result;
3303  }
3304  const UT_StringHolder & getSkinmaskattrib() const { return mySkinmaskattrib; }
3305  void setSkinmaskattrib(const UT_StringHolder & val) { mySkinmaskattrib = val; }
3307  {
3308  SOP_Node *thissop = cookparms.getNode();
3309  if (!thissop) return getSkinmaskattrib();
3311  OP_Utils::evalOpParm(result, thissop, "skinmaskattrib", cookparms.getCookTime(), 0);
3312  return result;
3313  }
3314  fpreal64 getClumpsize() const { return myClumpsize; }
3315  void setClumpsize(fpreal64 val) { myClumpsize = val; }
3317  {
3318  SOP_Node *thissop = cookparms.getNode();
3319  if (!thissop) return getClumpsize();
3320  fpreal64 result;
3321  OP_Utils::evalOpParm(result, thissop, "clumpsize", cookparms.getCookTime(), 0);
3322  return result;
3323  }
3324  Clumpsizeoverride getClumpsizeoverride() const { return Clumpsizeoverride(myClumpsizeoverride); }
3325  void setClumpsizeoverride(Clumpsizeoverride val) { myClumpsizeoverride = int64(val); }
3327  {
3328  SOP_Node *thissop = cookparms.getNode();
3329  if (!thissop) return getClumpsizeoverride();
3330  int64 result;
3331  OP_Utils::evalOpParm(result, thissop, "clumpsizeoverride", cookparms.getCookTime(), 0);
3332  return Clumpsizeoverride(result);
3333  }
3334  int64 getClumpsizeoptions() const { return myClumpsizeoptions; }
3335  void setClumpsizeoptions(int64 val) { myClumpsizeoptions = val; }
3337  {
3338  SOP_Node *thissop = cookparms.getNode();
3339  if (!thissop) return getClumpsizeoptions();
3340  int64 result;
3341  OP_Utils::evalOpParm(result, thissop, "clumpsizeoptions", cookparms.getCookTime(), 0);
3342  return result;
3343  }
3344  UT_Vector2D getClumpsizeinrange() const { return myClumpsizeinrange; }
3345  void setClumpsizeinrange(UT_Vector2D val) { myClumpsizeinrange = val; }
3347  {
3348  SOP_Node *thissop = cookparms.getNode();
3349  if (!thissop) return getClumpsizeinrange();
3351  OP_Utils::evalOpParm(result, thissop, "clumpsizeinrange", cookparms.getCookTime(), 0);
3352  return result;
3353  }
3354  UT_Vector2D getClumpsizeoutrange() const { return myClumpsizeoutrange; }
3355  void setClumpsizeoutrange(UT_Vector2D val) { myClumpsizeoutrange = val; }
3357  {
3358  SOP_Node *thissop = cookparms.getNode();
3359  if (!thissop) return getClumpsizeoutrange();
3361  OP_Utils::evalOpParm(result, thissop, "clumpsizeoutrange", cookparms.getCookTime(), 0);
3362  return result;
3363  }
3364  UT_SharedPtr<UT_Ramp> getClumpsizeremapramp() const { return myClumpsizeremapramp; }
3365  void setClumpsizeremapramp(UT_SharedPtr<UT_Ramp> val) { myClumpsizeremapramp = val; }
3367  {
3368  SOP_Node *thissop = cookparms.getNode();
3369  if (!thissop) return getClumpsizeremapramp();
3371  OP_Utils::evalOpParm(result, thissop, "clumpsizeremapramp", cookparms.getCookTime(), 0);
3372  return result;
3373  }
3374  const UT_StringHolder & getClumpsizeattrib() const { return myClumpsizeattrib; }
3375  void setClumpsizeattrib(const UT_StringHolder & val) { myClumpsizeattrib = val; }
3377  {
3378  SOP_Node *thissop = cookparms.getNode();
3379  if (!thissop) return getClumpsizeattrib();
3381  OP_Utils::evalOpParm(result, thissop, "clumpsizeattrib", cookparms.getCookTime(), 0);
3382  return result;
3383  }
3384  const UT_StringHolder & getClumpsizetexture() const { return myClumpsizetexture; }
3385  void setClumpsizetexture(const UT_StringHolder & val) { myClumpsizetexture = val; }
3387  {
3388  SOP_Node *thissop = cookparms.getNode();
3389  if (!thissop) return getClumpsizetexture();
3391  OP_Utils::evalOpParm(result, thissop, "clumpsizetexture", cookparms.getCookTime(), 0);
3392  return result;
3393  }
3394  const UT_StringHolder & getClumpsizetextureprim() const { return myClumpsizetextureprim; }
3395  void setClumpsizetextureprim(const UT_StringHolder & val) { myClumpsizetextureprim = val; }
3397  {
3398  SOP_Node *thissop = cookparms.getNode();
3399  if (!thissop) return getClumpsizetextureprim();
3401  OP_Utils::evalOpParm(result, thissop, "clumpsizetextureprim", cookparms.getCookTime(), 0);
3402  return result;
3403  }
3404  bool getSearchbeyondradius() const { return mySearchbeyondradius; }
3405  void setSearchbeyondradius(bool val) { mySearchbeyondradius = val; }
3406  bool opSearchbeyondradius(const SOP_NodeVerb::CookParms &cookparms) const
3407  {
3408  SOP_Node *thissop = cookparms.getNode();
3409  if (!thissop) return getSearchbeyondradius();
3410  bool result;
3411  OP_Utils::evalOpParm(result, thissop, "searchbeyondradius", cookparms.getCookTime(), 0);
3412  return result;
3413  }
3414  bool getClumpwithinclumps() const { return myClumpwithinclumps; }
3415  void setClumpwithinclumps(bool val) { myClumpwithinclumps = val; }
3416  bool opClumpwithinclumps(const SOP_NodeVerb::CookParms &cookparms) const
3417  {
3418  SOP_Node *thissop = cookparms.getNode();
3419  if (!thissop) return getClumpwithinclumps();
3420  bool result;
3421  OP_Utils::evalOpParm(result, thissop, "clumpwithinclumps", cookparms.getCookTime(), 0);
3422  return result;
3423  }
3424  fpreal64 getCrossoverrate() const { return myCrossoverrate; }
3425  void setCrossoverrate(fpreal64 val) { myCrossoverrate = val; }
3427  {
3428  SOP_Node *thissop = cookparms.getNode();
3429  if (!thissop) return getCrossoverrate();
3430  fpreal64 result;
3431  OP_Utils::evalOpParm(result, thissop, "crossoverrate", cookparms.getCookTime(), 0);
3432  return result;
3433  }
3434  fpreal64 getSeed() const { return mySeed; }
3435  void setSeed(fpreal64 val) { mySeed = val; }
3436  fpreal64 opSeed(const SOP_NodeVerb::CookParms &cookparms) const
3437  {
3438  SOP_Node *thissop = cookparms.getNode();
3439  if (!thissop) return getSeed();
3440  fpreal64 result;
3441  OP_Utils::evalOpParm(result, thissop, "seed", cookparms.getCookTime(), 0);
3442  return result;
3443  }
3444  Method getMethod() const { return Method(myMethod); }
3445  void setMethod(Method val) { myMethod = int64(val); }
3446  Method opMethod(const SOP_NodeVerb::CookParms &cookparms) const
3447  {
3448  SOP_Node *thissop = cookparms.getNode();
3449  if (!thissop) return getMethod();
3450  int64 result;
3451  OP_Utils::evalOpParm(result, thissop, "method", cookparms.getCookTime(), 0);
3452  return Method(result);
3453  }
3454  bool getPreservelength() const { return myPreservelength; }
3455  void setPreservelength(bool val) { myPreservelength = val; }
3456  bool opPreservelength(const SOP_NodeVerb::CookParms &cookparms) const
3457  {
3458  SOP_Node *thissop = cookparms.getNode();
3459  if (!thissop) return getPreservelength();
3460  bool result;
3461  OP_Utils::evalOpParm(result, thissop, "preservelength", cookparms.getCookTime(), 0);
3462  return result;
3463  }
3464  fpreal64 getExtendtomatch() const { return myExtendtomatch; }
3465  void setExtendtomatch(fpreal64 val) { myExtendtomatch = val; }
3467  {
3468  SOP_Node *thissop = cookparms.getNode();
3469  if (!thissop) return getExtendtomatch();
3470  fpreal64 result;
3471  OP_Utils::evalOpParm(result, thissop, "extendtomatch", cookparms.getCookTime(), 0);
3472  return result;
3473  }
3474  fpreal64 getShortentomatch() const { return myShortentomatch; }
3475  void setShortentomatch(fpreal64 val) { myShortentomatch = val; }
3477  {
3478  SOP_Node *thissop = cookparms.getNode();
3479  if (!thissop) return getShortentomatch();
3480  fpreal64 result;
3481  OP_Utils::evalOpParm(result, thissop, "shortentomatch", cookparms.getCookTime(), 0);
3482  return result;
3483  }
3484  bool getAccuratebundling() const { return myAccuratebundling; }
3485  void setAccuratebundling(bool val) { myAccuratebundling = val; }
3486  bool opAccuratebundling(const SOP_NodeVerb::CookParms &cookparms) const
3487  {
3488  SOP_Node *thissop = cookparms.getNode();
3489  if (!thissop) return getAccuratebundling();
3490  bool result;
3491  OP_Utils::evalOpParm(result, thissop, "accuratebundling", cookparms.getCookTime(), 0);
3492  return result;
3493  }
3494  fpreal64 getHairwidth() const { return myHairwidth; }
3495  void setHairwidth(fpreal64 val) { myHairwidth = val; }
3497  {
3498  SOP_Node *thissop = cookparms.getNode();
3499  if (!thissop) return getHairwidth();
3500  fpreal64 result;
3501  OP_Utils::evalOpParm(result, thissop, "hairwidth", cookparms.getCookTime(), 0);
3502  return result;
3503  }
3504  fpreal64 getHairwidthscale() const { return myHairwidthscale; }
3505  void setHairwidthscale(fpreal64 val) { myHairwidthscale = val; }
3507  {
3508  SOP_Node *thissop = cookparms.getNode();
3509  if (!thissop) return getHairwidthscale();
3510  fpreal64 result;
3511  OP_Utils::evalOpParm(result, thissop, "hairwidthscale", cookparms.getCookTime(), 0);
3512  return result;
3513  }
3514  fpreal64 getTightness() const { return myTightness; }
3515  void setTightness(fpreal64 val) { myTightness = val; }
3517  {
3518  SOP_Node *thissop = cookparms.getNode();
3519  if (!thissop) return getTightness();
3520  fpreal64 result;
3521  OP_Utils::evalOpParm(result, thissop, "tightness", cookparms.getCookTime(), 0);
3522  return result;
3523  }
3524  Tightnessoverride getTightnessoverride() const { return Tightnessoverride(myTightnessoverride); }
3525  void setTightnessoverride(Tightnessoverride val) { myTightnessoverride = int64(val); }
3527  {
3528  SOP_Node *thissop = cookparms.getNode();
3529  if (!thissop) return getTightnessoverride();
3530  int64 result;
3531  OP_Utils::evalOpParm(result, thissop, "tightnessoverride", cookparms.getCookTime(), 0);
3532  return Tightnessoverride(result);
3533  }
3534  int64 getTightnessoptions() const { return myTightnessoptions; }
3535  void setTightnessoptions(int64 val) { myTightnessoptions = val; }
3537  {
3538  SOP_Node *thissop = cookparms.getNode();
3539  if (!thissop) return getTightnessoptions();
3540  int64 result;
3541  OP_Utils::evalOpParm(result, thissop, "tightnessoptions", cookparms.getCookTime(), 0);
3542  return result;
3543  }
3544  UT_Vector2D getTightnessinrange() const { return myTightnessinrange; }
3545  void setTightnessinrange(UT_Vector2D val) { myTightnessinrange = val; }
3547  {
3548  SOP_Node *thissop = cookparms.getNode();
3549  if (!thissop) return getTightnessinrange();
3551  OP_Utils::evalOpParm(result, thissop, "tightnessinrange", cookparms.getCookTime(), 0);
3552  return result;
3553  }
3554  UT_Vector2D getTightnessoutrange() const { return myTightnessoutrange; }
3555  void setTightnessoutrange(UT_Vector2D val) { myTightnessoutrange = val; }
3557  {
3558  SOP_Node *thissop = cookparms.getNode();
3559  if (!thissop) return getTightnessoutrange();
3561  OP_Utils::evalOpParm(result, thissop, "tightnessoutrange", cookparms.getCookTime(), 0);
3562  return result;
3563  }
3564  UT_SharedPtr<UT_Ramp> getTightnessremapramp() const { return myTightnessremapramp; }
3565  void setTightnessremapramp(UT_SharedPtr<UT_Ramp> val) { myTightnessremapramp = val; }
3567  {
3568  SOP_Node *thissop = cookparms.getNode();
3569  if (!thissop) return getTightnessremapramp();
3571  OP_Utils::evalOpParm(result, thissop, "tightnessremapramp", cookparms.getCookTime(), 0);
3572  return result;
3573  }
3574  const UT_StringHolder & getTightnesscurveattrib() const { return myTightnesscurveattrib; }
3575  void setTightnesscurveattrib(const UT_StringHolder & val) { myTightnesscurveattrib = val; }
3577  {
3578  SOP_Node *thissop = cookparms.getNode();
3579  if (!thissop) return getTightnesscurveattrib();
3581  OP_Utils::evalOpParm(result, thissop, "tightnesscurveattrib", cookparms.getCookTime(), 0);
3582  return result;
3583  }
3584  const UT_StringHolder & getTightnessclumpattrib() const { return myTightnessclumpattrib; }
3585  void setTightnessclumpattrib(const UT_StringHolder & val) { myTightnessclumpattrib = val; }
3587  {
3588  SOP_Node *thissop = cookparms.getNode();
3589  if (!thissop) return getTightnessclumpattrib();
3591  OP_Utils::evalOpParm(result, thissop, "tightnessclumpattrib", cookparms.getCookTime(), 0);
3592  return result;
3593  }
3594  const UT_StringHolder & getTightnessattrib() const { return myTightnessattrib; }
3595  void setTightnessattrib(const UT_StringHolder & val) { myTightnessattrib = val; }
3597  {
3598  SOP_Node *thissop = cookparms.getNode();
3599  if (!thissop) return getTightnessattrib();
3601  OP_Utils::evalOpParm(result, thissop, "tightnessattrib", cookparms.getCookTime(), 0);
3602  return result;
3603  }
3604  const UT_StringHolder & getTightnesstexture() const { return myTightnesstexture; }
3605  void setTightnesstexture(const UT_StringHolder & val) { myTightnesstexture = val; }
3607  {
3608  SOP_Node *thissop = cookparms.getNode();
3609  if (!thissop) return getTightnesstexture();
3611  OP_Utils::evalOpParm(result, thissop, "tightnesstexture", cookparms.getCookTime(), 0);
3612  return result;
3613  }
3614  const UT_StringHolder & getTightnesstextureprim() const { return myTightnesstextureprim; }
3615  void setTightnesstextureprim(const UT_StringHolder & val) { myTightnesstextureprim = val; }
3617  {
3618  SOP_Node *thissop = cookparms.getNode();
3619  if (!thissop) return getTightnesstextureprim();
3621  OP_Utils::evalOpParm(result, thissop, "tightnesstextureprim", cookparms.getCookTime(), 0);
3622  return result;
3623  }
3624  fpreal64 getStrayamount() const { return myStrayamount; }
3625  void setStrayamount(fpreal64 val) { myStrayamount = val; }
3627  {
3628  SOP_Node *thissop = cookparms.getNode();
3629  if (!thissop) return getStrayamount();
3630  fpreal64 result;
3631  OP_Utils::evalOpParm(result, thissop, "strayamount", cookparms.getCookTime(), 0);
3632  return result;
3633  }
3634  Strayamountoverride getStrayamountoverride() const { return Strayamountoverride(myStrayamountoverride); }
3635  void setStrayamountoverride(Strayamountoverride val) { myStrayamountoverride = int64(val); }
3637  {
3638  SOP_Node *thissop = cookparms.getNode();
3639  if (!thissop) return getStrayamountoverride();
3640  int64 result;
3641  OP_Utils::evalOpParm(result, thissop, "strayamountoverride", cookparms.getCookTime(), 0);
3642  return Strayamountoverride(result);
3643  }
3644  int64 getStrayamountoptions() const { return myStrayamountoptions; }
3645  void setStrayamountoptions(int64 val) { myStrayamountoptions = val; }
3647  {
3648  SOP_Node *thissop = cookparms.getNode();
3649  if (!thissop) return getStrayamountoptions();
3650  int64 result;
3651  OP_Utils::evalOpParm(result, thissop, "strayamountoptions", cookparms.getCookTime(), 0);
3652  return result;
3653  }
3654  UT_Vector2D getStrayamountinrange() const { return myStrayamountinrange; }
3655  void setStrayamountinrange(UT_Vector2D val) { myStrayamountinrange = val; }
3657  {
3658  SOP_Node *thissop = cookparms.getNode();
3659  if (!thissop) return getStrayamountinrange();
3661  OP_Utils::evalOpParm(result, thissop, "strayamountinrange", cookparms.getCookTime(), 0);
3662  return result;
3663  }
3664  UT_Vector2D getStrayamountoutrange() const { return myStrayamountoutrange; }
3665  void setStrayamountoutrange(UT_Vector2D val) { myStrayamountoutrange = val; }
3667  {
3668  SOP_Node *thissop = cookparms.getNode();
3669  if (!thissop) return getStrayamountoutrange();
3671  OP_Utils::evalOpParm(result, thissop, "strayamountoutrange", cookparms.getCookTime(), 0);
3672  return result;
3673  }
3674  UT_SharedPtr<UT_Ramp> getStrayamountremapramp() const { return myStrayamountremapramp; }
3675  void setStrayamountremapramp(UT_SharedPtr<UT_Ramp> val) { myStrayamountremapramp = val; }
3677  {
3678  SOP_Node *thissop = cookparms.getNode();
3679  if (!thissop) return getStrayamountremapramp();
3681  OP_Utils::evalOpParm(result, thissop, "strayamountremapramp", cookparms.getCookTime(), 0);
3682  return result;
3683  }
3684  const UT_StringHolder & getStrayamountcurveattrib() const { return myStrayamountcurveattrib; }
3685  void setStrayamountcurveattrib(const UT_StringHolder & val) { myStrayamountcurveattrib = val; }
3687  {
3688  SOP_Node *thissop = cookparms.getNode();
3689  if (!thissop) return getStrayamountcurveattrib();
3691  OP_Utils::evalOpParm(result, thissop, "strayamountcurveattrib", cookparms.getCookTime(), 0);
3692  return result;
3693  }
3694  const UT_StringHolder & getStrayamountclumpattrib() const { return myStrayamountclumpattrib; }
3695  void setStrayamountclumpattrib(const UT_StringHolder & val) { myStrayamountclumpattrib = val; }
3697  {
3698  SOP_Node *thissop = cookparms.getNode();
3699  if (!thissop) return getStrayamountclumpattrib();
3701  OP_Utils::evalOpParm(result, thissop, "strayamountclumpattrib", cookparms.getCookTime(), 0);
3702  return result;
3703  }
3704  const UT_StringHolder & getStrayamountattrib() const { return myStrayamountattrib; }
3705  void setStrayamountattrib(const UT_StringHolder & val) { myStrayamountattrib = val; }
3707  {
3708  SOP_Node *thissop = cookparms.getNode();
3709  if (!thissop) return getStrayamountattrib();
3711  OP_Utils::evalOpParm(result, thissop, "strayamountattrib", cookparms.getCookTime(), 0);
3712  return result;
3713  }
3714  const UT_StringHolder & getStrayamounttexture() const { return myStrayamounttexture; }
3715  void setStrayamounttexture(const UT_StringHolder & val) { myStrayamounttexture = val; }
3717  {
3718  SOP_Node *thissop = cookparms.getNode();
3719  if (!thissop) return getStrayamounttexture();
3721  OP_Utils::evalOpParm(result, thissop, "strayamounttexture", cookparms.getCookTime(), 0);
3722  return result;
3723  }
3724  const UT_StringHolder & getStrayamounttextureprim() const { return myStrayamounttextureprim; }
3725  void setStrayamounttextureprim(const UT_StringHolder & val) { myStrayamounttextureprim = val; }
3727  {
3728  SOP_Node *thissop = cookparms.getNode();
3729  if (!thissop) return getStrayamounttextureprim();
3731  OP_Utils::evalOpParm(result, thissop, "strayamounttextureprim", cookparms.getCookTime(), 0);
3732  return result;
3733  }
3734  fpreal64 getStrayrate() const { return myStrayrate; }
3735  void setStrayrate(fpreal64 val) { myStrayrate = val; }
3737  {
3738  SOP_Node *thissop = cookparms.getNode();
3739  if (!thissop) return getStrayrate();
3740  fpreal64 result;
3741  OP_Utils::evalOpParm(result, thissop, "strayrate", cookparms.getCookTime(), 0);
3742  return result;
3743  }
3744  Strayrateoverride getStrayrateoverride() const { return Strayrateoverride(myStrayrateoverride); }
3745  void setStrayrateoverride(Strayrateoverride val) { myStrayrateoverride = int64(val); }
3747  {
3748  SOP_Node *thissop = cookparms.getNode();
3749  if (!thissop) return getStrayrateoverride();
3750  int64 result;
3751  OP_Utils::evalOpParm(result, thissop, "strayrateoverride", cookparms.getCookTime(), 0);
3752  return Strayrateoverride(result);
3753  }
3754  int64 getStrayrateoptions() const { return myStrayrateoptions; }
3755  void setStrayrateoptions(int64 val) { myStrayrateoptions = val; }
3757  {
3758  SOP_Node *thissop = cookparms.getNode();
3759  if (!thissop) return getStrayrateoptions();
3760  int64 result;
3761  OP_Utils::evalOpParm(result, thissop, "strayrateoptions", cookparms.getCookTime(), 0);
3762  return result;
3763  }
3764  UT_Vector2D getStrayrateinrange() const { return myStrayrateinrange; }
3765  void setStrayrateinrange(UT_Vector2D val) { myStrayrateinrange = val; }
3767  {
3768  SOP_Node *thissop = cookparms.getNode();
3769  if (!thissop) return getStrayrateinrange();
3771  OP_Utils::evalOpParm(result, thissop, "strayrateinrange", cookparms.getCookTime(), 0);
3772  return result;
3773  }
3774  UT_Vector2D getStrayrateoutrange() const { return myStrayrateoutrange; }
3775  void setStrayrateoutrange(UT_Vector2D val) { myStrayrateoutrange = val; }
3777  {
3778  SOP_Node *thissop = cookparms.getNode();
3779  if (!thissop) return getStrayrateoutrange();
3781  OP_Utils::evalOpParm(result, thissop, "strayrateoutrange", cookparms.getCookTime(), 0);
3782  return result;
3783  }
3784  UT_SharedPtr<UT_Ramp> getStrayrateremapramp() const { return myStrayrateremapramp; }
3785  void setStrayrateremapramp(UT_SharedPtr<UT_Ramp> val) { myStrayrateremapramp = val; }
3787  {
3788  SOP_Node *thissop = cookparms.getNode();
3789  if (!thissop) return getStrayrateremapramp();
3791  OP_Utils::evalOpParm(result, thissop, "strayrateremapramp", cookparms.getCookTime(), 0);
3792  return result;
3793  }
3794  const UT_StringHolder & getStrayratecurveattrib() const { return myStrayratecurveattrib; }
3795  void setStrayratecurveattrib(const UT_StringHolder & val) { myStrayratecurveattrib = val; }
3797  {
3798  SOP_Node *thissop = cookparms.getNode();
3799  if (!thissop) return getStrayratecurveattrib();
3801  OP_Utils::evalOpParm(result, thissop, "strayratecurveattrib", cookparms.getCookTime(), 0);
3802  return result;
3803  }
3804  const UT_StringHolder & getStrayrateclumpattrib() const { return myStrayrateclumpattrib; }
3805  void setStrayrateclumpattrib(const UT_StringHolder & val) { myStrayrateclumpattrib = val; }
3807  {
3808  SOP_Node *thissop = cookparms.getNode();
3809  if (!thissop) return getStrayrateclumpattrib();
3811  OP_Utils::evalOpParm(result, thissop, "strayrateclumpattrib", cookparms.getCookTime(), 0);
3812  return result;
3813  }
3814  const UT_StringHolder & getStrayrateattrib() const { return myStrayrateattrib; }
3815  void setStrayrateattrib(const UT_StringHolder & val) { myStrayrateattrib = val; }
3817  {
3818  SOP_Node *thissop = cookparms.getNode();
3819  if (!thissop) return getStrayrateattrib();
3821  OP_Utils::evalOpParm(result, thissop, "strayrateattrib", cookparms.getCookTime(), 0);
3822  return result;
3823  }
3824  const UT_StringHolder & getStrayratetexture() const { return myStrayratetexture; }
3825  void setStrayratetexture(const UT_StringHolder & val) { myStrayratetexture = val; }
3827  {
3828  SOP_Node *thissop = cookparms.getNode();
3829  if (!thissop) return getStrayratetexture();
3831  OP_Utils::evalOpParm(result, thissop, "strayratetexture", cookparms.getCookTime(), 0);
3832  return result;
3833  }
3834  const UT_StringHolder & getStrayratetextureprim() const { return myStrayratetextureprim; }
3835  void setStrayratetextureprim(const UT_StringHolder & val) { myStrayratetextureprim = val; }
3837  {
3838  SOP_Node *thissop = cookparms.getNode();
3839  if (!thissop) return getStrayratetextureprim();
3841  OP_Utils::evalOpParm(result, thissop, "strayratetextureprim", cookparms.getCookTime(), 0);
3842  return result;
3843  }
3844  fpreal64 getStrayfalloff() const { return myStrayfalloff; }
3845  void setStrayfalloff(fpreal64 val) { myStrayfalloff = val; }
3847  {
3848  SOP_Node *thissop = cookparms.getNode();
3849  if (!thissop) return getStrayfalloff();
3850  fpreal64 result;
3851  OP_Utils::evalOpParm(result, thissop, "strayfalloff", cookparms.getCookTime(), 0);
3852  return result;
3853  }
3854  Strayfalloffoverride getStrayfalloffoverride() const { return Strayfalloffoverride(myStrayfalloffoverride); }
3855  void setStrayfalloffoverride(Strayfalloffoverride val) { myStrayfalloffoverride = int64(val); }
3857  {
3858  SOP_Node *thissop = cookparms.getNode();
3859  if (!thissop) return getStrayfalloffoverride();
3860  int64 result;
3861  OP_Utils::evalOpParm(result, thissop, "strayfalloffoverride", cookparms.getCookTime(), 0);
3862  return Strayfalloffoverride(result);
3863  }
3864  int64 getStrayfalloffoptions() const { return myStrayfalloffoptions; }
3865  void setStrayfalloffoptions(int64 val) { myStrayfalloffoptions = val; }
3867  {
3868  SOP_Node *thissop = cookparms.getNode();
3869  if (!thissop) return getStrayfalloffoptions();
3870  int64 result;
3871  OP_Utils::evalOpParm(result, thissop, "strayfalloffoptions", cookparms.getCookTime(), 0);
3872  return result;
3873  }
3874  UT_Vector2D getStrayfalloffinrange() const { return myStrayfalloffinrange; }
3875  void setStrayfalloffinrange(UT_Vector2D val) { myStrayfalloffinrange = val; }
3877  {
3878  SOP_Node *thissop = cookparms.getNode();
3879  if (!thissop) return getStrayfalloffinrange();
3881  OP_Utils::evalOpParm(result, thissop, "strayfalloffinrange", cookparms.getCookTime(), 0);
3882  return result;
3883  }
3884  UT_Vector2D getStrayfalloffoutrange() const { return myStrayfalloffoutrange; }
3885  void setStrayfalloffoutrange(UT_Vector2D val) { myStrayfalloffoutrange = val; }
3887  {
3888  SOP_Node *thissop = cookparms.getNode();
3889  if (!thissop) return getStrayfalloffoutrange();
3891  OP_Utils::evalOpParm(result, thissop, "strayfalloffoutrange", cookparms.getCookTime(), 0);
3892  return result;
3893  }
3894  UT_SharedPtr<UT_Ramp> getStrayfalloffremapramp() const { return myStrayfalloffremapramp; }
3895  void setStrayfalloffremapramp(UT_SharedPtr<UT_Ramp> val) { myStrayfalloffremapramp = val; }
3897  {
3898  SOP_Node *thissop = cookparms.getNode();
3899  if (!thissop) return getStrayfalloffremapramp();
3901  OP_Utils::evalOpParm(result, thissop, "strayfalloffremapramp", cookparms.getCookTime(), 0);
3902  return result;
3903  }
3904  const UT_StringHolder & getStrayfalloffcurveattrib() const { return myStrayfalloffcurveattrib; }
3905  void setStrayfalloffcurveattrib(const UT_StringHolder & val) { myStrayfalloffcurveattrib = val; }
3907  {
3908  SOP_Node *thissop = cookparms.getNode();
3909  if (!thissop) return getStrayfalloffcurveattrib();
3911  OP_Utils::evalOpParm(result, thissop, "strayfalloffcurveattrib", cookparms.getCookTime(), 0);
3912  return result;
3913  }
3914  const UT_StringHolder & getStrayfalloffclumpattrib() const { return myStrayfalloffclumpattrib; }
3915  void setStrayfalloffclumpattrib(const UT_StringHolder & val) { myStrayfalloffclumpattrib = val; }
3917  {
3918  SOP_Node *thissop = cookparms.getNode();
3919  if (!thissop) return getStrayfalloffclumpattrib();
3921  OP_Utils::evalOpParm(result, thissop, "strayfalloffclumpattrib", cookparms.getCookTime(), 0);
3922  return result;
3923  }
3924  const UT_StringHolder & getStrayfalloffattrib() const { return myStrayfalloffattrib; }
3925  void setStrayfalloffattrib(const UT_StringHolder & val) { myStrayfalloffattrib = val; }
3927  {
3928  SOP_Node *thissop = cookparms.getNode();
3929  if (!thissop) return getStrayfalloffattrib();
3931  OP_Utils::evalOpParm(result, thissop, "strayfalloffattrib", cookparms.getCookTime(), 0);
3932  return result;
3933  }
3934  const UT_StringHolder & getStrayfallofftexture() const { return myStrayfallofftexture; }
3935  void setStrayfallofftexture(const UT_StringHolder & val) { myStrayfallofftexture = val; }
3937  {
3938  SOP_Node *thissop = cookparms.getNode();
3939  if (!thissop) return getStrayfallofftexture();
3941  OP_Utils::evalOpParm(result, thissop, "strayfallofftexture", cookparms.getCookTime(), 0);
3942  return result;
3943  }
3944  const UT_StringHolder & getStrayfallofftextureprim() const { return myStrayfallofftextureprim; }
3945  void setStrayfallofftextureprim(const UT_StringHolder & val) { myStrayfallofftextureprim = val; }
3947  {
3948  SOP_Node *thissop = cookparms.getNode();
3949  if (!thissop) return getStrayfallofftextureprim();
3951  OP_Utils::evalOpParm(result, thissop, "strayfallofftextureprim", cookparms.getCookTime(), 0);
3952  return result;
3953  }
3954  UT_SharedPtr<UT_Ramp> getClumpprofile() const { return myClumpprofile; }
3955  void setClumpprofile(UT_SharedPtr<UT_Ramp> val) { myClumpprofile = val; }
3957  {
3958  SOP_Node *thissop = cookparms.getNode();
3959  if (!thissop) return getClumpprofile();
3961  OP_Utils::evalOpParm(result, thissop, "clumpprofile", cookparms.getCookTime(), 0);
3962  return result;
3963  }
3964  fpreal64 getIterations() const { return myIterations; }
3965  void setIterations(fpreal64 val) { myIterations = val; }
3967  {
3968  SOP_Node *thissop = cookparms.getNode();
3969  if (!thissop) return getIterations();
3970  fpreal64 result;
3971  OP_Utils::evalOpParm(result, thissop, "iterations", cookparms.getCookTime(), 0);
3972  return result;
3973  }
3974  Iterationsoverride getIterationsoverride() const { return Iterationsoverride(myIterationsoverride); }
3975  void setIterationsoverride(Iterationsoverride val) { myIterationsoverride = int64(val); }
3977  {
3978  SOP_Node *thissop = cookparms.getNode();
3979  if (!thissop) return getIterationsoverride();
3980  int64 result;
3981  OP_Utils::evalOpParm(result, thissop, "iterationsoverride", cookparms.getCookTime(), 0);
3982  return Iterationsoverride(result);
3983  }
3984  int64 getIterationsoptions() const { return myIterationsoptions; }
3985  void setIterationsoptions(int64 val) { myIterationsoptions = val; }
3987  {
3988  SOP_Node *thissop = cookparms.getNode();
3989  if (!thissop) return getIterationsoptions();
3990  int64 result;
3991  OP_Utils::evalOpParm(result, thissop, "iterationsoptions", cookparms.getCookTime(), 0);
3992  return result;
3993  }
3994  UT_Vector2D getIterationsinrange() const { return myIterationsinrange; }
3995  void setIterationsinrange(UT_Vector2D val) { myIterationsinrange = val; }
3997  {
3998  SOP_Node *thissop = cookparms.getNode();
3999  if (!thissop) return getIterationsinrange();
4001  OP_Utils::evalOpParm(result, thissop, "iterationsinrange", cookparms.getCookTime(), 0);
4002  return result;
4003  }
4004  UT_Vector2D getIterationsoutrange() const { return myIterationsoutrange; }
4005  void setIterationsoutrange(UT_Vector2D val) { myIterationsoutrange = val; }
4007  {
4008  SOP_Node *thissop = cookparms.getNode();
4009  if (!thissop) return getIterationsoutrange();
4011  OP_Utils::evalOpParm(result, thissop, "iterationsoutrange", cookparms.getCookTime(), 0);
4012  return result;
4013  }
4014  UT_SharedPtr<UT_Ramp> getIterationsremapramp() const { return myIterationsremapramp; }
4015  void setIterationsremapramp(UT_SharedPtr<UT_Ramp> val) { myIterationsremapramp = val; }
4017  {
4018  SOP_Node *thissop = cookparms.getNode();
4019  if (!thissop) return getIterationsremapramp();
4021  OP_Utils::evalOpParm(result, thissop, "iterationsremapramp", cookparms.getCookTime(), 0);
4022  return result;
4023  }
4024  const UT_StringHolder & getIterationscurveattrib() const { return myIterationscurveattrib; }
4025  void setIterationscurveattrib(const UT_StringHolder & val) { myIterationscurveattrib = val; }
4027  {
4028  SOP_Node *thissop = cookparms.getNode();
4029  if (!thissop) return getIterationscurveattrib();
4031  OP_Utils::evalOpParm(result, thissop, "iterationscurveattrib", cookparms.getCookTime(), 0);
4032  return result;
4033  }
4034  const UT_StringHolder & getIterationsattrib() const { return myIterationsattrib; }
4035  void setIterationsattrib(const UT_StringHolder & val) { myIterationsattrib = val; }
4037  {
4038  SOP_Node *thissop = cookparms.getNode();
4039  if (!thissop) return getIterationsattrib();
4041  OP_Utils::evalOpParm(result, thissop, "iterationsattrib", cookparms.getCookTime(), 0);
4042  return result;
4043  }
4044  const UT_StringHolder & getIterationstexture() const { return myIterationstexture; }
4045  void setIterationstexture(const UT_StringHolder & val) { myIterationstexture = val; }
4047  {
4048  SOP_Node *thissop = cookparms.getNode();
4049  if (!thissop) return getIterationstexture();
4051  OP_Utils::evalOpParm(result, thissop, "iterationstexture", cookparms.getCookTime(), 0);
4052  return result;
4053  }
4054  const UT_StringHolder & getIterationstextureprim() const { return myIterationstextureprim; }
4055  void setIterationstextureprim(const UT_StringHolder & val) { myIterationstextureprim = val; }
4057  {
4058  SOP_Node *thissop = cookparms.getNode();
4059  if (!thissop) return getIterationstextureprim();
4061  OP_Utils::evalOpParm(result, thissop, "iterationstextureprim", cookparms.getCookTime(), 0);
4062  return result;
4063  }
4064  fpreal64 getSizereduction() const { return mySizereduction; }
4065  void setSizereduction(fpreal64 val) { mySizereduction = val; }
4067  {
4068  SOP_Node *thissop = cookparms.getNode();
4069  if (!thissop) return getSizereduction();
4070  fpreal64 result;
4071  OP_Utils::evalOpParm(result, thissop, "sizereduction", cookparms.getCookTime(), 0);
4072  return result;
4073  }
4074  Sizereductionoverride getSizereductionoverride() const { return Sizereductionoverride(mySizereductionoverride); }
4075  void setSizereductionoverride(Sizereductionoverride val) { mySizereductionoverride = int64(val); }
4077  {
4078  SOP_Node *thissop = cookparms.getNode();
4079  if (!thissop) return getSizereductionoverride();
4080  int64 result;
4081  OP_Utils::evalOpParm(result, thissop, "sizereductionoverride", cookparms.getCookTime(), 0);
4082  return Sizereductionoverride(result);
4083  }
4084  int64 getSizereductionoptions() const { return mySizereductionoptions; }
4085  void setSizereductionoptions(int64 val) { mySizereductionoptions = val; }
4087  {
4088  SOP_Node *thissop = cookparms.getNode();
4089  if (!thissop) return getSizereductionoptions();
4090  int64 result;
4091  OP_Utils::evalOpParm(result, thissop, "sizereductionoptions", cookparms.getCookTime(), 0);
4092  return result;
4093  }
4094  UT_Vector2D getSizereductioninrange() const { return mySizereductioninrange; }
4095  void setSizereductioninrange(UT_Vector2D val) { mySizereductioninrange = val; }
4097  {
4098  SOP_Node *thissop = cookparms.getNode();
4099  if (!thissop) return getSizereductioninrange();
4101  OP_Utils::evalOpParm(result, thissop, "sizereductioninrange", cookparms.getCookTime(), 0);
4102  return result;
4103  }
4104  UT_Vector2D getSizereductionoutrange() const { return mySizereductionoutrange; }
4105  void setSizereductionoutrange(UT_Vector2D val) { mySizereductionoutrange = val; }
4107  {
4108  SOP_Node *thissop = cookparms.getNode();
4109  if (!thissop) return getSizereductionoutrange();
4111  OP_Utils::evalOpParm(result, thissop, "sizereductionoutrange", cookparms.getCookTime(), 0);
4112  return result;
4113  }
4114  UT_SharedPtr<UT_Ramp> getSizereductionremapramp() const { return mySizereductionremapramp; }
4115  void setSizereductionremapramp(UT_SharedPtr<UT_Ramp> val) { mySizereductionremapramp = val; }
4117  {
4118  SOP_Node *thissop = cookparms.getNode();
4119  if (!thissop) return getSizereductionremapramp();
4121  OP_Utils::evalOpParm(result, thissop, "sizereductionremapramp", cookparms.getCookTime(), 0);
4122  return result;
4123  }
4124  const UT_StringHolder & getSizereductionattrib() const { return mySizereductionattrib; }
4125  void setSizereductionattrib(const UT_StringHolder & val) { mySizereductionattrib = val; }
4127  {
4128  SOP_Node *thissop = cookparms.getNode();
4129  if (!thissop) return getSizereductionattrib();
4131  OP_Utils::evalOpParm(result, thissop, "sizereductionattrib", cookparms.getCookTime(), 0);
4132  return result;
4133  }
4134  const UT_StringHolder & getSizereductiontexture() const { return mySizereductiontexture; }
4135  void setSizereductiontexture(const UT_StringHolder & val) { mySizereductiontexture = val; }
4137  {
4138  SOP_Node *thissop = cookparms.getNode();
4139  if (!thissop) return getSizereductiontexture();
4141  OP_Utils::evalOpParm(result, thissop, "sizereductiontexture", cookparms.getCookTime(), 0);
4142  return result;
4143  }
4144  const UT_StringHolder & getSizereductiontextureprim() const { return mySizereductiontextureprim; }
4145  void setSizereductiontextureprim(const UT_StringHolder & val) { mySizereductiontextureprim = val; }
4147  {
4148  SOP_Node *thissop = cookparms.getNode();
4149  if (!thissop) return getSizereductiontextureprim();
4151  OP_Utils::evalOpParm(result, thissop, "sizereductiontextureprim", cookparms.getCookTime(), 0);
4152  return result;
4153  }
4154  fpreal64 getGoalfeedback() const { return myGoalfeedback; }
4155  void setGoalfeedback(fpreal64 val) { myGoalfeedback = val; }
4157  {
4158  SOP_Node *thissop = cookparms.getNode();
4159  if (!thissop) return getGoalfeedback();
4160  fpreal64 result;
4161  OP_Utils::evalOpParm(result, thissop, "goalfeedback", cookparms.getCookTime(), 0);
4162  return result;
4163  }
4164  Goalfeedbackoverride getGoalfeedbackoverride() const { return Goalfeedbackoverride(myGoalfeedbackoverride); }
4165  void setGoalfeedbackoverride(Goalfeedbackoverride val) { myGoalfeedbackoverride = int64(val); }
4167  {
4168  SOP_Node *thissop = cookparms.getNode();
4169  if (!thissop) return getGoalfeedbackoverride();
4170  int64 result;
4171  OP_Utils::evalOpParm(result, thissop, "goalfeedbackoverride", cookparms.getCookTime(), 0);
4172  return Goalfeedbackoverride(result);
4173  }
4174  int64 getGoalfeedbackoptions() const { return myGoalfeedbackoptions; }
4175  void setGoalfeedbackoptions(int64 val) { myGoalfeedbackoptions = val; }
4177  {
4178  SOP_Node *thissop = cookparms.getNode();
4179  if (!thissop) return getGoalfeedbackoptions();
4180  int64 result;
4181  OP_Utils::evalOpParm(result, thissop, "goalfeedbackoptions", cookparms.getCookTime(), 0);
4182  return result;
4183  }
4184  UT_Vector2D getGoalfeedbackinrange() const { return myGoalfeedbackinrange; }
4185  void setGoalfeedbackinrange(UT_Vector2D val) { myGoalfeedbackinrange = val; }
4187  {
4188  SOP_Node *thissop = cookparms.getNode();
4189  if (!thissop) return getGoalfeedbackinrange();
4191  OP_Utils::evalOpParm(result, thissop, "goalfeedbackinrange", cookparms.getCookTime(), 0);
4192  return result;
4193  }
4194  UT_Vector2D getGoalfeedbackoutrange() const { return myGoalfeedbackoutrange; }
4195  void setGoalfeedbackoutrange(UT_Vector2D val) { myGoalfeedbackoutrange = val; }
4197  {
4198  SOP_Node *thissop = cookparms.getNode();
4199  if (!thissop) return getGoalfeedbackoutrange();
4201  OP_Utils::evalOpParm(result, thissop, "goalfeedbackoutrange", cookparms.getCookTime(), 0);
4202  return result;
4203  }
4204  UT_SharedPtr<UT_Ramp> getGoalfeedbackremapramp() const { return myGoalfeedbackremapramp; }
4205  void setGoalfeedbackremapramp(UT_SharedPtr<UT_Ramp> val) { myGoalfeedbackremapramp = val; }
4207  {
4208  SOP_Node *thissop = cookparms.getNode();
4209  if (!thissop) return getGoalfeedbackremapramp();
4211  OP_Utils::evalOpParm(result, thissop, "goalfeedbackremapramp", cookparms.getCookTime(), 0);
4212  return result;
4213  }
4214  const UT_StringHolder & getGoalfeedbackattrib() const { return myGoalfeedbackattrib; }
4215  void setGoalfeedbackattrib(const UT_StringHolder & val) { myGoalfeedbackattrib = val; }
4217  {
4218  SOP_Node *thissop = cookparms.getNode();
4219  if (!thissop) return getGoalfeedbackattrib();
4221  OP_Utils::evalOpParm(result, thissop, "goalfeedbackattrib", cookparms.getCookTime(), 0);
4222  return result;
4223  }
4224  const UT_StringHolder & getGoalfeedbacktexture() const { return myGoalfeedbacktexture; }
4225  void setGoalfeedbacktexture(const UT_StringHolder & val) { myGoalfeedbacktexture = val; }
4227  {
4228  SOP_Node *thissop = cookparms.getNode();
4229  if (!thissop) return getGoalfeedbacktexture();
4231  OP_Utils::evalOpParm(result, thissop, "goalfeedbacktexture", cookparms.getCookTime(), 0);
4232  return result;
4233  }
4234  const UT_StringHolder & getGoalfeedbacktextureprim() const { return myGoalfeedbacktextureprim; }
4235  void setGoalfeedbacktextureprim(const UT_StringHolder & val) { myGoalfeedbacktextureprim = val; }
4237  {
4238  SOP_Node *thissop = cookparms.getNode();
4239  if (!thissop) return getGoalfeedbacktextureprim();
4241  OP_Utils::evalOpParm(result, thissop, "goalfeedbacktextureprim", cookparms.getCookTime(), 0);
4242  return result;
4243  }
4244  fpreal64 getTightnessreduction() const { return myTightnessreduction; }
4245  void setTightnessreduction(fpreal64 val) { myTightnessreduction = val; }
4247  {
4248  SOP_Node *thissop = cookparms.getNode();
4249  if (!thissop) return getTightnessreduction();
4250  fpreal64 result;
4251  OP_Utils::evalOpParm(result, thissop, "tightnessreduction", cookparms.getCookTime(), 0);
4252  return result;
4253  }
4255  void setTightnessreductionoverride(Tightnessreductionoverride val) { myTightnessreductionoverride = int64(val); }
4257  {
4258  SOP_Node *thissop = cookparms.getNode();
4259  if (!thissop) return getTightnessreductionoverride();
4260  int64 result;
4261  OP_Utils::evalOpParm(result, thissop, "tightnessreductionoverride", cookparms.getCookTime(), 0);
4262  return Tightnessreductionoverride(result);
4263  }
4264  int64 getTightnessreductionoptions() const { return myTightnessreductionoptions; }
4265  void setTightnessreductionoptions(int64 val) { myTightnessreductionoptions = val; }
4267  {
4268  SOP_Node *thissop = cookparms.getNode();
4269  if (!thissop) return getTightnessreductionoptions();
4270  int64 result;
4271  OP_Utils::evalOpParm(result, thissop, "tightnessreductionoptions", cookparms.getCookTime(), 0);
4272  return result;
4273  }
4274  UT_Vector2D getTightnessreductioninrange() const { return myTightnessreductioninrange; }
4275  void setTightnessreductioninrange(UT_Vector2D val) { myTightnessreductioninrange = val; }
4277  {
4278  SOP_Node *thissop = cookparms.getNode();
4279  if (!thissop) return getTightnessreductioninrange();
4281  OP_Utils::evalOpParm(result, thissop, "tightnessreductioninrange", cookparms.getCookTime(), 0);
4282  return result;
4283  }
4284  UT_Vector2D getTightnessreductionoutrange() const { return myTightnessreductionoutrange; }
4285  void setTightnessreductionoutrange(UT_Vector2D val) { myTightnessreductionoutrange = val; }
4287  {
4288  SOP_Node *thissop = cookparms.getNode();
4289  if (!thissop) return getTightnessreductionoutrange();
4291  OP_Utils::evalOpParm(result, thissop, "tightnessreductionoutrange", cookparms.getCookTime(), 0);
4292  return result;
4293  }
4294  UT_SharedPtr<UT_Ramp> getTightnessreductionremapramp() const { return myTightnessreductionremapramp; }
4295  void setTightnessreductionremapramp(UT_SharedPtr<UT_Ramp> val) { myTightnessreductionremapramp = val; }
4297  {
4298  SOP_Node *thissop = cookparms.getNode();
4299  if (!thissop) return getTightnessreductionremapramp();
4301  OP_Utils::evalOpParm(result, thissop, "tightnessreductionremapramp", cookparms.getCookTime(), 0);
4302  return result;
4303  }
4304  const UT_StringHolder & getTightnessreductioncurveattrib() const { return myTightnessreductioncurveattrib; }
4305  void setTightnessreductioncurveattrib(const UT_StringHolder & val) { myTightnessreductioncurveattrib = val; }
4307  {
4308  SOP_Node *thissop = cookparms.getNode();
4309  if (!thissop) return getTightnessreductioncurveattrib();
4311  OP_Utils::evalOpParm(result, thissop, "tightnessreductioncurveattrib", cookparms.getCookTime(), 0);
4312  return result;
4313  }
4314  const UT_StringHolder & getTightnessreductionattrib() const { return myTightnessreductionattrib; }
4315  void setTightnessreductionattrib(const UT_StringHolder & val) { myTightnessreductionattrib = val; }
4317  {
4318  SOP_Node *thissop = cookparms.getNode();
4319  if (!thissop) return getTightnessreductionattrib();
4321  OP_Utils::evalOpParm(result, thissop, "tightnessreductionattrib", cookparms.getCookTime(), 0);
4322  return result;
4323  }
4324  const UT_StringHolder & getTightnessreductiontexture() const { return myTightnessreductiontexture; }
4325  void setTightnessreductiontexture(const UT_StringHolder & val) { myTightnessreductiontexture = val; }
4327  {
4328  SOP_Node *thissop = cookparms.getNode();
4329  if (!thissop) return getTightnessreductiontexture();
4331  OP_Utils::evalOpParm(result, thissop, "tightnessreductiontexture", cookparms.getCookTime(), 0);
4332  return result;
4333  }
4334  const UT_StringHolder & getTightnessreductiontextureprim() const { return myTightnessreductiontextureprim; }
4335  void setTightnessreductiontextureprim(const UT_StringHolder & val) { myTightnessreductiontextureprim = val; }
4337  {
4338  SOP_Node *thissop = cookparms.getNode();
4339  if (!thissop) return getTightnessreductiontextureprim();
4341  OP_Utils::evalOpParm(result, thissop, "tightnessreductiontextureprim", cookparms.getCookTime(), 0);
4342  return result;
4343  }
4344  bool getEnablecurling() const { return myEnablecurling; }
4345  void setEnablecurling(bool val) { myEnablecurling = val; }
4346  bool opEnablecurling(const SOP_NodeVerb::CookParms &cookparms) const
4347  {
4348  SOP_Node *thissop = cookparms.getNode();
4349  if (!thissop) return getEnablecurling();
4350  bool result;
4351  OP_Utils::evalOpParm(result, thissop, "enablecurling", cookparms.getCookTime(), 0);
4352  return result;
4353  }
4354  fpreal64 getCurlamp() const { return myCurlamp; }
4355  void setCurlamp(fpreal64 val) { myCurlamp = val; }
4357  {
4358  SOP_Node *thissop = cookparms.getNode();
4359  if (!thissop) return getCurlamp();
4360  fpreal64 result;
4361  OP_Utils::evalOpParm(result, thissop, "curlamp", cookparms.getCookTime(), 0);
4362  return result;
4363  }
4364  Curlampoverride getCurlampoverride() const { return Curlampoverride(myCurlampoverride); }
4365  void setCurlampoverride(Curlampoverride val) { myCurlampoverride = int64(val); }
4367  {
4368  SOP_Node *thissop = cookparms.getNode();
4369  if (!thissop) return getCurlampoverride();
4370  int64 result;
4371  OP_Utils::evalOpParm(result, thissop, "curlampoverride", cookparms.getCookTime(), 0);
4372  return Curlampoverride(result);
4373  }
4374  int64 getCurlampoptions() const { return myCurlampoptions; }
4375  void setCurlampoptions(int64 val) { myCurlampoptions = val; }
4377  {
4378  SOP_Node *thissop = cookparms.getNode();
4379  if (!thissop) return getCurlampoptions();
4380  int64 result;
4381  OP_Utils::evalOpParm(result, thissop, "curlampoptions", cookparms.getCookTime(), 0);
4382  return result;
4383  }
4384  UT_Vector2D getCurlampinrange() const { return myCurlampinrange; }
4385  void setCurlampinrange(UT_Vector2D val) { myCurlampinrange = val; }
4387  {
4388  SOP_Node *thissop = cookparms.getNode();
4389  if (!thissop) return getCurlampinrange();
4391  OP_Utils::evalOpParm(result, thissop, "curlampinrange", cookparms.getCookTime(), 0);
4392  return result;
4393  }
4394  UT_Vector2D getCurlampoutrange() const { return myCurlampoutrange; }
4395  void setCurlampoutrange(UT_Vector2D val) { myCurlampoutrange = val; }
4397  {
4398  SOP_Node *thissop = cookparms.getNode();
4399  if (!thissop) return getCurlampoutrange();
4401  OP_Utils::evalOpParm(result, thissop, "curlampoutrange", cookparms.getCookTime(), 0);
4402  return result;
4403  }
4404  UT_SharedPtr<UT_Ramp> getCurlampremapramp() const { return myCurlampremapramp; }
4405  void setCurlampremapramp(UT_SharedPtr<UT_Ramp> val) { myCurlampremapramp = val; }
4407  {
4408  SOP_Node *thissop = cookparms.getNode();
4409  if (!thissop) return getCurlampremapramp();
4411  OP_Utils::evalOpParm(result, thissop, "curlampremapramp", cookparms.getCookTime(), 0);
4412  return result;
4413  }
4414  const UT_StringHolder & getCurlampcurveattrib() const { return myCurlampcurveattrib; }
4415  void setCurlampcurveattrib(const UT_StringHolder & val) { myCurlampcurveattrib = val; }
4417  {
4418  SOP_Node *thissop = cookparms.getNode();
4419  if (!thissop) return getCurlampcurveattrib();
4421  OP_Utils::evalOpParm(result, thissop, "curlampcurveattrib", cookparms.getCookTime(), 0);
4422  return result;
4423  }
4424  const UT_StringHolder & getCurlampattrib() const { return myCurlampattrib; }
4425  void setCurlampattrib(const UT_StringHolder & val) { myCurlampattrib = val; }
4427  {
4428  SOP_Node *thissop = cookparms.getNode();
4429  if (!thissop) return getCurlampattrib();
4431  OP_Utils::evalOpParm(result, thissop, "curlampattrib", cookparms.getCookTime(), 0);
4432  return result;
4433  }
4434  const UT_StringHolder & getCurlamptexture() const { return myCurlamptexture; }
4435  void setCurlamptexture(const UT_StringHolder & val) { myCurlamptexture = val; }
4437  {
4438  SOP_Node *thissop = cookparms.getNode();
4439  if (!thissop) return getCurlamptexture();
4441  OP_Utils::evalOpParm(result, thissop, "curlamptexture", cookparms.getCookTime(), 0);
4442  return result;
4443  }
4444  const UT_StringHolder & getCurlamptextureprim() const { return myCurlamptextureprim; }
4445  void setCurlamptextureprim(const UT_StringHolder & val) { myCurlamptextureprim = val; }
4447  {
4448  SOP_Node *thissop = cookparms.getNode();
4449  if (!thissop) return getCurlamptextureprim();
4451  OP_Utils::evalOpParm(result, thissop, "curlamptextureprim", cookparms.getCookTime(), 0);
4452  return result;
4453  }
4454  UT_SharedPtr<UT_Ramp> getCurlampramp() const { return myCurlampramp; }
4455  void setCurlampramp(UT_SharedPtr<UT_Ramp> val) { myCurlampramp = val; }
4457  {
4458  SOP_Node *thissop = cookparms.getNode();
4459  if (!thissop) return getCurlampramp();
4461  OP_Utils::evalOpParm(result, thissop, "curlampramp", cookparms.getCookTime(), 0);
4462  return result;
4463  }
4464  fpreal64 getCurlfreq() const { return myCurlfreq; }
4465  void setCurlfreq(fpreal64 val) { myCurlfreq = val; }
4467  {
4468  SOP_Node *thissop = cookparms.getNode();
4469  if (!thissop) return getCurlfreq();
4470  fpreal64 result;
4471  OP_Utils::evalOpParm(result, thissop, "curlfreq", cookparms.getCookTime(), 0);
4472  return result;
4473  }
4474  Curlfreqoverride getCurlfreqoverride() const { return Curlfreqoverride(myCurlfreqoverride); }
4475  void setCurlfreqoverride(Curlfreqoverride val) { myCurlfreqoverride = int64(val); }
4477  {
4478  SOP_Node *thissop = cookparms.getNode();
4479  if (!thissop) return getCurlfreqoverride();
4480  int64 result;
4481  OP_Utils::evalOpParm(result, thissop, "curlfreqoverride", cookparms.getCookTime(), 0);
4482  return Curlfreqoverride(result);
4483  }
4484  int64 getCurlfreqoptions() const { return myCurlfreqoptions; }
4485  void setCurlfreqoptions(int64 val) { myCurlfreqoptions = val; }
4487  {
4488  SOP_Node *thissop = cookparms.getNode();
4489  if (!thissop) return getCurlfreqoptions();
4490  int64 result;
4491  OP_Utils::evalOpParm(result, thissop, "curlfreqoptions", cookparms.getCookTime(), 0);
4492  return result;
4493  }
4494  UT_Vector2D getCurlfreqinrange() const { return myCurlfreqinrange; }
4495  void setCurlfreqinrange(UT_Vector2D val) { myCurlfreqinrange = val; }
4497  {
4498  SOP_Node *thissop = cookparms.getNode();
4499  if (!thissop) return getCurlfreqinrange();
4501  OP_Utils::evalOpParm(result, thissop, "curlfreqinrange", cookparms.getCookTime(), 0);
4502  return result;
4503  }
4504  UT_Vector2D getCurlfreqoutrange() const { return myCurlfreqoutrange; }
4505  void setCurlfreqoutrange(UT_Vector2D val) { myCurlfreqoutrange = val; }
4507  {
4508  SOP_Node *thissop = cookparms.getNode();
4509  if (!thissop) return getCurlfreqoutrange();
4511  OP_Utils::evalOpParm(result, thissop, "curlfreqoutrange", cookparms.getCookTime(), 0);
4512  return result;
4513  }
4514  UT_SharedPtr<UT_Ramp> getCurlfreqremapramp() const { return myCurlfreqremapramp; }
4515  void setCurlfreqremapramp(UT_SharedPtr<UT_Ramp> val) { myCurlfreqremapramp = val; }
4517  {
4518  SOP_Node *thissop = cookparms.getNode();
4519  if (!thissop) return getCurlfreqremapramp();
4521