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_NodeVerb.h>
7 #include <SOP/SOP_GraphProxy.h>
8 
9 #include <OP/OP_Utils.h>
10 #include <PRM/PRM_Parm.h>
11 #include <UT/UT_IStream.h>
12 #include <UT/UT_NTStreamUtil.h>
13 #include <UT/UT_Ramp.h>
14 #include <UT/UT_SharedPtr.h>
15 #include <UT/UT_StringHolder.h>
16 #include <UT/UT_StringStream.h>
17 #include <UT/UT_VectorTypes.h>
18 #include <SYS/SYS_Types.h>
19 
20 using namespace UT::Literal;
21 
22 class DEP_MicroNode;
23 namespace SOP_HairClumpEnums
24 {
25  enum class Blendoverride
26  {
27  NONE = 0,
28  CURVEATTRIB,
29  SKINATTRIB,
30  TEXTURE
31  };
32  enum class Clumpsizeoverride
33  {
34  NONE = 0,
35  SKINATTRIB,
36  TEXTURE
37  };
38  enum class Method
39  {
40  LINEARBLEND = 0,
42  };
43  enum class Tightnessoverride
44  {
45  NONE = 0,
47  CURVEATTRIB,
48  SKINATTRIB,
49  TEXTURE
50  };
52  {
53  NONE = 0,
55  CURVEATTRIB,
56  SKINATTRIB,
57  TEXTURE
58  };
59  enum class Strayrateoverride
60  {
61  NONE = 0,
63  CURVEATTRIB,
64  SKINATTRIB,
65  TEXTURE
66  };
68  {
69  NONE = 0,
71  CURVEATTRIB,
72  SKINATTRIB,
73  TEXTURE
74  };
75  enum class Iterationsoverride
76  {
77  NONE = 0,
78  CURVEATTRIB,
79  SKINATTRIB,
80  TEXTURE
81  };
83  {
84  NONE = 0,
85  SKINATTRIB,
86  TEXTURE
87  };
89  {
90  NONE = 0,
91  SKINATTRIB,
92  TEXTURE
93  };
95  {
96  NONE = 0,
97  CURVEATTRIB,
98  SKINATTRIB,
99  TEXTURE
100  };
101  enum class Curlampoverride
102  {
103  NONE = 0,
104  CURVEATTRIB,
105  SKINATTRIB,
106  TEXTURE
107  };
108  enum class Curlfreqoverride
109  {
110  NONE = 0,
111  CURVEATTRIB,
112  SKINATTRIB,
113  TEXTURE
114  };
115 }
116 
117 
119 {
120 public:
121  static int version() { return 1; }
122 
124  {
125  myLegacymasking = false;
126  myUvattrib = "uv"_sh;
127  myBlend = 1;
128  myBlendoverride = 0;
129  myBlendcurveattrib = "clumpmask"_sh;
130  myBlendattrib = "clumpmask"_sh;
131  myBlendtexture = ""_sh;
132  myUseskinmask = false;
133  mySkinmaskattrib = "clumpmask"_sh;
134  myClumpsize = 0.05;
135  myClumpsizeoverride = 0;
136  myClumpsizeattrib = "clumpsize"_sh;
137  myClumpsizetexture = ""_sh;
138  mySearchbeyondradius = true;
139  myClumpwithinclumps = true;
140  myCrossoverrate = 0.2;
141  mySeed = 0;
142  myMethod = 1;
143  myPreservelength = true;
144  myExtendtomatch = 1;
145  myShortentomatch = 1;
146  myAccuratebundling = true;
147  myHairwidth = 0.001;
148  myHairwidthscale = 1;
149  myTightness = 1;
150  myTightnessoverride = 0;
151  myTightnesscurveattrib = "tightness"_sh;
152  myTightnessclumpattrib = "tightness"_sh;
153  myTightnessattrib = "tightness"_sh;
154  myTightnesstexture = ""_sh;
155  myStrayamount = 1;
156  myStrayamountoverride = 0;
157  myStrayamountcurveattrib = "strayamount"_sh;
158  myStrayamountclumpattrib = "strayamount"_sh;
159  myStrayamountattrib = "strayamount"_sh;
160  myStrayamounttexture = ""_sh;
161  myStrayrate = 0;
162  myStrayrateoverride = 0;
163  myStrayratecurveattrib = "strayrate"_sh;
164  myStrayrateclumpattrib = "strayrate"_sh;
165  myStrayrateattrib = "strayrate"_sh;
166  myStrayratetexture = ""_sh;
167  myStrayfalloff = 1;
168  myStrayfalloffoverride = 0;
169  myStrayfalloffcurveattrib = "strayfalloff"_sh;
170  myStrayfalloffclumpattrib = "strayfalloff"_sh;
171  myStrayfalloffattrib = "strayfalloff"_sh;
172  myStrayfallofftexture = ""_sh;
173  myClumpprofile = UT_SharedPtr<UT_Ramp>(0);
174  myIterations = 1;
175  myIterationsoverride = 0;
176  myIterationscurveattrib = "clumpiterations"_sh;
177  myIterationsattrib = "clumpiterations"_sh;
178  myIterationstexture = ""_sh;
179  mySizereduction = 0.4;
180  mySizereductionoverride = 0;
181  mySizereductionattrib = "clumpsizereduction"_sh;
182  mySizereductiontexture = ""_sh;
183  myGoalfeedback = 0.1;
184  myGoalfeedbackoverride = 0;
185  myGoalfeedbackattrib = "clumpgoalfeedback"_sh;
186  myGoalfeedbacktexture = ""_sh;
187  myTightnessreduction = 0.2;
188  myTightnessreductionoverride = 0;
189  myTightnessreductioncurveattrib = "clumptightnessreduction"_sh;
190  myTightnessreductionattrib = "clumptightnessreduction"_sh;
191  myTightnessreductiontexture = ""_sh;
192  myEnablecurling = false;
193  myCurlamp = 0;
194  myCurlampoverride = 0;
195  myCurlampcurveattrib = "clumpcurlamp"_sh;
196  myCurlampattrib = "clumpcurlamp"_sh;
197  myCurlamptexture = ""_sh;
198  myCurlampramp = UT_SharedPtr<UT_Ramp>(0);
199  myCurlfreq = 5;
200  myCurlfreqoverride = 0;
201  myCurlfreqcurveattrib = "clumpcurlfreq"_sh;
202  myCurveattrib = "clumpcurlfreq"_sh;
203  myCurlfreqattrib = "clumpcurlfreq"_sh;
204  myCurlfreqtexture = ""_sh;
205  myCurlfreqramp = UT_SharedPtr<UT_Ramp>(0);
206  myCreateclumpidattrib = true;
207  myClumpidoutputattrib = "clumpid"_sh;
208  myCreatetightnessattrib = true;
209  myTightnessoutputattrib = "tightness"_sh;
210  myClumppointattribs = ""_sh;
211  myClumpprimattribs = ""_sh;
212 
213  }
214 
215  explicit SOP_HairClumpParms(const SOP_HairClumpParms &) = default;
216 
217  ~SOP_HairClumpParms() override {}
218 
219  bool operator==(const SOP_HairClumpParms &src) const
220  {
221  if (myLegacymasking != src.myLegacymasking) return false;
222  if (myUvattrib != src.myUvattrib) return false;
223  if (myBlend != src.myBlend) return false;
224  if (myBlendoverride != src.myBlendoverride) return false;
225  if (myBlendcurveattrib != src.myBlendcurveattrib) return false;
226  if (myBlendattrib != src.myBlendattrib) return false;
227  if (myBlendtexture != src.myBlendtexture) return false;
228  if (myUseskinmask != src.myUseskinmask) return false;
229  if (mySkinmaskattrib != src.mySkinmaskattrib) return false;
230  if (myClumpsize != src.myClumpsize) return false;
231  if (myClumpsizeoverride != src.myClumpsizeoverride) return false;
232  if (myClumpsizeattrib != src.myClumpsizeattrib) return false;
233  if (myClumpsizetexture != src.myClumpsizetexture) return false;
234  if (mySearchbeyondradius != src.mySearchbeyondradius) return false;
235  if (myClumpwithinclumps != src.myClumpwithinclumps) return false;
236  if (myCrossoverrate != src.myCrossoverrate) return false;
237  if (mySeed != src.mySeed) return false;
238  if (myMethod != src.myMethod) return false;
239  if (myPreservelength != src.myPreservelength) return false;
240  if (myExtendtomatch != src.myExtendtomatch) return false;
241  if (myShortentomatch != src.myShortentomatch) return false;
242  if (myAccuratebundling != src.myAccuratebundling) return false;
243  if (myHairwidth != src.myHairwidth) return false;
244  if (myHairwidthscale != src.myHairwidthscale) return false;
245  if (myTightness != src.myTightness) return false;
246  if (myTightnessoverride != src.myTightnessoverride) return false;
247  if (myTightnesscurveattrib != src.myTightnesscurveattrib) return false;
248  if (myTightnessclumpattrib != src.myTightnessclumpattrib) return false;
249  if (myTightnessattrib != src.myTightnessattrib) return false;
250  if (myTightnesstexture != src.myTightnesstexture) return false;
251  if (myStrayamount != src.myStrayamount) return false;
252  if (myStrayamountoverride != src.myStrayamountoverride) return false;
253  if (myStrayamountcurveattrib != src.myStrayamountcurveattrib) return false;
254  if (myStrayamountclumpattrib != src.myStrayamountclumpattrib) return false;
255  if (myStrayamountattrib != src.myStrayamountattrib) return false;
256  if (myStrayamounttexture != src.myStrayamounttexture) return false;
257  if (myStrayrate != src.myStrayrate) return false;
258  if (myStrayrateoverride != src.myStrayrateoverride) return false;
259  if (myStrayratecurveattrib != src.myStrayratecurveattrib) return false;
260  if (myStrayrateclumpattrib != src.myStrayrateclumpattrib) return false;
261  if (myStrayrateattrib != src.myStrayrateattrib) return false;
262  if (myStrayratetexture != src.myStrayratetexture) return false;
263  if (myStrayfalloff != src.myStrayfalloff) return false;
264  if (myStrayfalloffoverride != src.myStrayfalloffoverride) return false;
265  if (myStrayfalloffcurveattrib != src.myStrayfalloffcurveattrib) return false;
266  if (myStrayfalloffclumpattrib != src.myStrayfalloffclumpattrib) return false;
267  if (myStrayfalloffattrib != src.myStrayfalloffattrib) return false;
268  if (myStrayfallofftexture != src.myStrayfallofftexture) return false;
269  if (myClumpprofile != src.myClumpprofile) return false;
270  if (myIterations != src.myIterations) return false;
271  if (myIterationsoverride != src.myIterationsoverride) return false;
272  if (myIterationscurveattrib != src.myIterationscurveattrib) return false;
273  if (myIterationsattrib != src.myIterationsattrib) return false;
274  if (myIterationstexture != src.myIterationstexture) return false;
275  if (mySizereduction != src.mySizereduction) return false;
276  if (mySizereductionoverride != src.mySizereductionoverride) return false;
277  if (mySizereductionattrib != src.mySizereductionattrib) return false;
278  if (mySizereductiontexture != src.mySizereductiontexture) return false;
279  if (myGoalfeedback != src.myGoalfeedback) return false;
280  if (myGoalfeedbackoverride != src.myGoalfeedbackoverride) return false;
281  if (myGoalfeedbackattrib != src.myGoalfeedbackattrib) return false;
282  if (myGoalfeedbacktexture != src.myGoalfeedbacktexture) return false;
283  if (myTightnessreduction != src.myTightnessreduction) return false;
284  if (myTightnessreductionoverride != src.myTightnessreductionoverride) return false;
285  if (myTightnessreductioncurveattrib != src.myTightnessreductioncurveattrib) return false;
286  if (myTightnessreductionattrib != src.myTightnessreductionattrib) return false;
287  if (myTightnessreductiontexture != src.myTightnessreductiontexture) return false;
288  if (myEnablecurling != src.myEnablecurling) return false;
289  if (myCurlamp != src.myCurlamp) return false;
290  if (myCurlampoverride != src.myCurlampoverride) return false;
291  if (myCurlampcurveattrib != src.myCurlampcurveattrib) return false;
292  if (myCurlampattrib != src.myCurlampattrib) return false;
293  if (myCurlamptexture != src.myCurlamptexture) return false;
294  if (myCurlampramp != src.myCurlampramp) return false;
295  if (myCurlfreq != src.myCurlfreq) return false;
296  if (myCurlfreqoverride != src.myCurlfreqoverride) return false;
297  if (myCurlfreqcurveattrib != src.myCurlfreqcurveattrib) return false;
298  if (myCurveattrib != src.myCurveattrib) return false;
299  if (myCurlfreqattrib != src.myCurlfreqattrib) return false;
300  if (myCurlfreqtexture != src.myCurlfreqtexture) return false;
301  if (myCurlfreqramp != src.myCurlfreqramp) return false;
302  if (myCreateclumpidattrib != src.myCreateclumpidattrib) return false;
303  if (myClumpidoutputattrib != src.myClumpidoutputattrib) return false;
304  if (myCreatetightnessattrib != src.myCreatetightnessattrib) return false;
305  if (myTightnessoutputattrib != src.myTightnessoutputattrib) return false;
306  if (myClumppointattribs != src.myClumppointattribs) return false;
307  if (myClumpprimattribs != src.myClumpprimattribs) return false;
308 
309  return true;
310  }
311  bool operator!=(const SOP_HairClumpParms &src) const
312  {
313  return !operator==(src);
314  }
328 
329 
330 
331  void buildFromOp(const SOP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
332  {
333  myLegacymasking = false;
334  if (true)
335  graph->evalOpParm(myLegacymasking, nodeidx, "legacymasking", time, 0);
336  myUvattrib = "uv"_sh;
337  if (true)
338  graph->evalOpParm(myUvattrib, nodeidx, "uvattrib", time, 0);
339  myBlend = 1;
340  if (true)
341  graph->evalOpParm(myBlend, nodeidx, "blend", time, 0);
342  myBlendoverride = 0;
343  if (true && ( (!(((getLegacymasking()==1)))) ) )
344  graph->evalOpParm(myBlendoverride, nodeidx, "blendoverride", time, 0);
345  myBlendcurveattrib = "clumpmask"_sh;
346  if (true && ( (!(((int64(getBlendoverride())!=1))||((getLegacymasking()==1)))) ) )
347  graph->evalOpParm(myBlendcurveattrib, nodeidx, "blendcurveattrib", time, 0);
348  myBlendattrib = "clumpmask"_sh;
349  if (true && ( (!(((int64(getBlendoverride())!=2))||((getLegacymasking()==1)))) ) )
350  graph->evalOpParm(myBlendattrib, nodeidx, "blendattrib", time, 0);
351  myBlendtexture = ""_sh;
352  if (true && ( (!(((int64(getBlendoverride())!=3))||((getLegacymasking()==1)))) ) )
353  graph->evalOpParm(myBlendtexture, nodeidx, "blendtexture", time, 0);
354  myUseskinmask = false;
355  if (true && ( (!(((getLegacymasking()==0)))) ) )
356  graph->evalOpParm(myUseskinmask, nodeidx, "useskinmask", time, 0);
357  mySkinmaskattrib = "clumpmask"_sh;
358  if (true && ( (!(((getUseskinmask()==0))||((getLegacymasking()==0)))) ) )
359  graph->evalOpParm(mySkinmaskattrib, nodeidx, "skinmaskattrib", time, 0);
360  myClumpsize = 0.05;
361  if (true)
362  graph->evalOpParm(myClumpsize, nodeidx, "clumpsize", time, 0);
363  myClumpsizeoverride = 0;
364  if (true)
365  graph->evalOpParm(myClumpsizeoverride, nodeidx, "clumpsizeoverride", time, 0);
366  myClumpsizeattrib = "clumpsize"_sh;
367  if (true && ( (!(((int64(getClumpsizeoverride())!=1)))) ) )
368  graph->evalOpParm(myClumpsizeattrib, nodeidx, "clumpsizeattrib", time, 0);
369  myClumpsizetexture = ""_sh;
370  if (true && ( (!(((int64(getClumpsizeoverride())!=2)))) ) )
371  graph->evalOpParm(myClumpsizetexture, nodeidx, "clumpsizetexture", time, 0);
372  mySearchbeyondradius = true;
373  if (true)
374  graph->evalOpParm(mySearchbeyondradius, nodeidx, "searchbeyondradius", time, 0);
375  myClumpwithinclumps = true;
376  if (true)
377  graph->evalOpParm(myClumpwithinclumps, nodeidx, "clumpwithinclumps", time, 0);
378  myCrossoverrate = 0.2;
379  if (true)
380  graph->evalOpParm(myCrossoverrate, nodeidx, "crossoverrate", time, 0);
381  mySeed = 0;
382  if (true)
383  graph->evalOpParm(mySeed, nodeidx, "seed", time, 0);
384  myMethod = 1;
385  if (true)
386  graph->evalOpParm(myMethod, nodeidx, "method", time, 0);
387  myPreservelength = true;
388  if (true)
389  graph->evalOpParm(myPreservelength, nodeidx, "preservelength", time, 0);
390  myExtendtomatch = 1;
391  if (true && ( (!(((getPreservelength()==0)))) ) )
392  graph->evalOpParm(myExtendtomatch, nodeidx, "extendtomatch", time, 0);
393  myShortentomatch = 1;
394  if (true && ( (!(((getPreservelength()==0)))) ) )
395  graph->evalOpParm(myShortentomatch, nodeidx, "shortentomatch", time, 0);
396  myAccuratebundling = true;
397  if (true)
398  graph->evalOpParm(myAccuratebundling, nodeidx, "accuratebundling", time, 0);
399  myHairwidth = 0.001;
400  if (true && ( (!(((getAccuratebundling()==0)))) ) )
401  graph->evalOpParm(myHairwidth, nodeidx, "hairwidth", time, 0);
402  myHairwidthscale = 1;
403  if (true && ( (!(((getAccuratebundling()==0)))) ) )
404  graph->evalOpParm(myHairwidthscale, nodeidx, "hairwidthscale", time, 0);
405  myTightness = 1;
406  if (true)
407  graph->evalOpParm(myTightness, nodeidx, "tightness", time, 0);
408  myTightnessoverride = 0;
409  if (true)
410  graph->evalOpParm(myTightnessoverride, nodeidx, "tightnessoverride", time, 0);
411  myTightnesscurveattrib = "tightness"_sh;
412  if (true && ( (!(((int64(getTightnessoverride())!=2)))) ) )
413  graph->evalOpParm(myTightnesscurveattrib, nodeidx, "tightnesscurveattrib", time, 0);
414  myTightnessclumpattrib = "tightness"_sh;
415  if (true && ( (!(((int64(getTightnessoverride())!=1)))) ) )
416  graph->evalOpParm(myTightnessclumpattrib, nodeidx, "tightnessclumpattrib", time, 0);
417  myTightnessattrib = "tightness"_sh;
418  if (true && ( (!(((int64(getTightnessoverride())!=3)))) ) )
419  graph->evalOpParm(myTightnessattrib, nodeidx, "tightnessattrib", time, 0);
420  myTightnesstexture = ""_sh;
421  if (true && ( (!(((int64(getTightnessoverride())!=4)))) ) )
422  graph->evalOpParm(myTightnesstexture, nodeidx, "tightnesstexture", time, 0);
423  myStrayamount = 1;
424  if (true)
425  graph->evalOpParm(myStrayamount, nodeidx, "strayamount", time, 0);
426  myStrayamountoverride = 0;
427  if (true)
428  graph->evalOpParm(myStrayamountoverride, nodeidx, "strayamountoverride", time, 0);
429  myStrayamountcurveattrib = "strayamount"_sh;
430  if (true && ( (!(((int64(getStrayamountoverride())!=2)))) ) )
431  graph->evalOpParm(myStrayamountcurveattrib, nodeidx, "strayamountcurveattrib", time, 0);
432  myStrayamountclumpattrib = "strayamount"_sh;
433  if (true && ( (!(((int64(getStrayamountoverride())!=1)))) ) )
434  graph->evalOpParm(myStrayamountclumpattrib, nodeidx, "strayamountclumpattrib", time, 0);
435  myStrayamountattrib = "strayamount"_sh;
436  if (true && ( (!(((int64(getStrayamountoverride())!=3)))) ) )
437  graph->evalOpParm(myStrayamountattrib, nodeidx, "strayamountattrib", time, 0);
438  myStrayamounttexture = ""_sh;
439  if (true && ( (!(((int64(getStrayamountoverride())!=4)))) ) )
440  graph->evalOpParm(myStrayamounttexture, nodeidx, "strayamounttexture", time, 0);
441  myStrayrate = 0;
442  if (true)
443  graph->evalOpParm(myStrayrate, nodeidx, "strayrate", time, 0);
444  myStrayrateoverride = 0;
445  if (true)
446  graph->evalOpParm(myStrayrateoverride, nodeidx, "strayrateoverride", time, 0);
447  myStrayratecurveattrib = "strayrate"_sh;
448  if (true && ( (!(((int64(getStrayrateoverride())!=2)))) ) )
449  graph->evalOpParm(myStrayratecurveattrib, nodeidx, "strayratecurveattrib", time, 0);
450  myStrayrateclumpattrib = "strayrate"_sh;
451  if (true && ( (!(((int64(getStrayrateoverride())!=1)))) ) )
452  graph->evalOpParm(myStrayrateclumpattrib, nodeidx, "strayrateclumpattrib", time, 0);
453  myStrayrateattrib = "strayrate"_sh;
454  if (true && ( (!(((int64(getStrayrateoverride())!=3)))) ) )
455  graph->evalOpParm(myStrayrateattrib, nodeidx, "strayrateattrib", time, 0);
456  myStrayratetexture = ""_sh;
457  if (true && ( (!(((int64(getStrayrateoverride())!=4)))) ) )
458  graph->evalOpParm(myStrayratetexture, nodeidx, "strayratetexture", time, 0);
459  myStrayfalloff = 1;
460  if (true)
461  graph->evalOpParm(myStrayfalloff, nodeidx, "strayfalloff", time, 0);
462  myStrayfalloffoverride = 0;
463  if (true)
464  graph->evalOpParm(myStrayfalloffoverride, nodeidx, "strayfalloffoverride", time, 0);
465  myStrayfalloffcurveattrib = "strayfalloff"_sh;
466  if (true && ( (!(((int64(getStrayfalloffoverride())!=2)))) ) )
467  graph->evalOpParm(myStrayfalloffcurveattrib, nodeidx, "strayfalloffcurveattrib", time, 0);
468  myStrayfalloffclumpattrib = "strayfalloff"_sh;
469  if (true && ( (!(((int64(getStrayfalloffoverride())!=1)))) ) )
470  graph->evalOpParm(myStrayfalloffclumpattrib, nodeidx, "strayfalloffclumpattrib", time, 0);
471  myStrayfalloffattrib = "strayfalloff"_sh;
472  if (true && ( (!(((int64(getStrayfalloffoverride())!=3)))) ) )
473  graph->evalOpParm(myStrayfalloffattrib, nodeidx, "strayfalloffattrib", time, 0);
474  myStrayfallofftexture = ""_sh;
475  if (true && ( (!(((int64(getStrayfalloffoverride())!=4)))) ) )
476  graph->evalOpParm(myStrayfallofftexture, nodeidx, "strayfallofftexture", time, 0);
477  myClumpprofile = UT_SharedPtr<UT_Ramp>(0);
478  if (true)
479  graph->evalOpParm(myClumpprofile, nodeidx, "clumpprofile", time, 0);
480  myIterations = 1;
481  if (true)
482  graph->evalOpParm(myIterations, nodeidx, "iterations", time, 0);
483  myIterationsoverride = 0;
484  if (true)
485  graph->evalOpParm(myIterationsoverride, nodeidx, "iterationsoverride", time, 0);
486  myIterationscurveattrib = "clumpiterations"_sh;
487  if (true && ( (!(((int64(getIterationsoverride())!=1)))) ) )
488  graph->evalOpParm(myIterationscurveattrib, nodeidx, "iterationscurveattrib", time, 0);
489  myIterationsattrib = "clumpiterations"_sh;
490  if (true && ( (!(((int64(getIterationsoverride())!=2)))) ) )
491  graph->evalOpParm(myIterationsattrib, nodeidx, "iterationsattrib", time, 0);
492  myIterationstexture = ""_sh;
493  if (true && ( (!(((int64(getIterationsoverride())!=3)))) ) )
494  graph->evalOpParm(myIterationstexture, nodeidx, "iterationstexture", time, 0);
495  mySizereduction = 0.4;
496  if (true && ( (!(((getIterations()<=1)))) ) )
497  graph->evalOpParm(mySizereduction, nodeidx, "sizereduction", time, 0);
498  mySizereductionoverride = 0;
499  if (true && ( (!(((getIterations()<=1)))) ) )
500  graph->evalOpParm(mySizereductionoverride, nodeidx, "sizereductionoverride", time, 0);
501  mySizereductionattrib = "clumpsizereduction"_sh;
502  if (true && ( (!(((getIterations()<=1))||((int64(getSizereductionoverride())!=1)))) ) )
503  graph->evalOpParm(mySizereductionattrib, nodeidx, "sizereductionattrib", time, 0);
504  mySizereductiontexture = ""_sh;
505  if (true && ( (!(((getIterations()<=1))||((int64(getSizereductionoverride())!=2)))) ) )
506  graph->evalOpParm(mySizereductiontexture, nodeidx, "sizereductiontexture", time, 0);
507  myGoalfeedback = 0.1;
508  if (true && ( (!(((getIterations()<=1)))) ) )
509  graph->evalOpParm(myGoalfeedback, nodeidx, "goalfeedback", time, 0);
510  myGoalfeedbackoverride = 0;
511  if (true && ( (!(((getIterations()<=1)))) ) )
512  graph->evalOpParm(myGoalfeedbackoverride, nodeidx, "goalfeedbackoverride", time, 0);
513  myGoalfeedbackattrib = "clumpgoalfeedback"_sh;
514  if (true && ( (!(((getIterations()<=1))||((int64(getGoalfeedbackoverride())!=1)))) ) )
515  graph->evalOpParm(myGoalfeedbackattrib, nodeidx, "goalfeedbackattrib", time, 0);
516  myGoalfeedbacktexture = ""_sh;
517  if (true && ( (!(((getIterations()<=1))||((int64(getGoalfeedbackoverride())!=2)))) ) )
518  graph->evalOpParm(myGoalfeedbacktexture, nodeidx, "goalfeedbacktexture", time, 0);
519  myTightnessreduction = 0.2;
520  if (true && ( (!(((getIterations()<=1)))) ) )
521  graph->evalOpParm(myTightnessreduction, nodeidx, "tightnessreduction", time, 0);
522  myTightnessreductionoverride = 0;
523  if (true && ( (!(((getIterations()<=1)))) ) )
524  graph->evalOpParm(myTightnessreductionoverride, nodeidx, "tightnessreductionoverride", time, 0);
525  myTightnessreductioncurveattrib = "clumptightnessreduction"_sh;
526  if (true && ( (!(((getIterations()<=1))||((int64(getTightnessreductionoverride())!=1)))) ) )
527  graph->evalOpParm(myTightnessreductioncurveattrib, nodeidx, "tightnessreductioncurveattrib", time, 0);
528  myTightnessreductionattrib = "clumptightnessreduction"_sh;
529  if (true && ( (!(((getIterations()<=1))||((int64(getTightnessreductionoverride())!=2)))) ) )
530  graph->evalOpParm(myTightnessreductionattrib, nodeidx, "tightnessreductionattrib", time, 0);
531  myTightnessreductiontexture = ""_sh;
532  if (true && ( (!(((getIterations()<=1))||((int64(getTightnessreductionoverride())!=3)))) ) )
533  graph->evalOpParm(myTightnessreductiontexture, nodeidx, "tightnessreductiontexture", time, 0);
534  myEnablecurling = false;
535  if (true)
536  graph->evalOpParm(myEnablecurling, nodeidx, "enablecurling", time, 0);
537  myCurlamp = 0;
538  if (true && ( (!(((getEnablecurling()==0)))) ) )
539  graph->evalOpParm(myCurlamp, nodeidx, "curlamp", time, 0);
540  myCurlampoverride = 0;
541  if (true && ( (!(((getEnablecurling()==0)))) ) )
542  graph->evalOpParm(myCurlampoverride, nodeidx, "curlampoverride", time, 0);
543  myCurlampcurveattrib = "clumpcurlamp"_sh;
544  if (true && ( (!(((getEnablecurling()==0))||((int64(getCurlampoverride())!=1)))) ) )
545  graph->evalOpParm(myCurlampcurveattrib, nodeidx, "curlampcurveattrib", time, 0);
546  myCurlampattrib = "clumpcurlamp"_sh;
547  if (true && ( (!(((getEnablecurling()==0))||((int64(getCurlampoverride())!=2)))) ) )
548  graph->evalOpParm(myCurlampattrib, nodeidx, "curlampattrib", time, 0);
549  myCurlamptexture = ""_sh;
550  if (true && ( (!(((getEnablecurling()==0))||((int64(getCurlampoverride())!=3)))) ) )
551  graph->evalOpParm(myCurlamptexture, nodeidx, "curlamptexture", time, 0);
552  myCurlampramp = UT_SharedPtr<UT_Ramp>(0);
553  if (true && ( (!(((getEnablecurling()==0)))) ) )
554  graph->evalOpParm(myCurlampramp, nodeidx, "curlampramp", time, 0);
555  myCurlfreq = 5;
556  if (true && ( (!(((getEnablecurling()==0)))) ) )
557  graph->evalOpParm(myCurlfreq, nodeidx, "curlfreq", time, 0);
558  myCurlfreqoverride = 0;
559  if (true && ( (!(((getEnablecurling()==0)))) ) )
560  graph->evalOpParm(myCurlfreqoverride, nodeidx, "curlfreqoverride", time, 0);
561  myCurlfreqcurveattrib = "clumpcurlfreq"_sh;
562  if (true && ( (!(((getEnablecurling()==0))||((int64(getCurlfreqoverride())!=1)))) ) )
563  graph->evalOpParm(myCurlfreqcurveattrib, nodeidx, "curlfreqcurveattrib", time, 0);
564  myCurveattrib = "clumpcurlfreq"_sh;
565  if (true && ( (!(((getEnablecurling()==0))||((int64(getCurlfreqoverride())!=1)))) ) )
566  graph->evalOpParm(myCurveattrib, nodeidx, "curveattrib", time, 0);
567  myCurlfreqattrib = "clumpcurlfreq"_sh;
568  if (true && ( (!(((getEnablecurling()==0))||((int64(getCurlfreqoverride())!=2)))) ) )
569  graph->evalOpParm(myCurlfreqattrib, nodeidx, "curlfreqattrib", time, 0);
570  myCurlfreqtexture = ""_sh;
571  if (true && ( (!(((getEnablecurling()==0))||((int64(getCurlfreqoverride())!=3)))) ) )
572  graph->evalOpParm(myCurlfreqtexture, nodeidx, "curlfreqtexture", time, 0);
573  myCurlfreqramp = UT_SharedPtr<UT_Ramp>(0);
574  if (true && ( (!(((getEnablecurling()==0)))) ) )
575  graph->evalOpParm(myCurlfreqramp, nodeidx, "curlfreqramp", time, 0);
576  myCreateclumpidattrib = true;
577  if (true)
578  graph->evalOpParm(myCreateclumpidattrib, nodeidx, "createclumpidattrib", time, 0);
579  myClumpidoutputattrib = "clumpid"_sh;
580  if (true)
581  graph->evalOpParm(myClumpidoutputattrib, nodeidx, "clumpidoutputattrib", time, 0);
582  myCreatetightnessattrib = true;
583  if (true)
584  graph->evalOpParm(myCreatetightnessattrib, nodeidx, "createtightnessattrib", time, 0);
585  myTightnessoutputattrib = "tightness"_sh;
586  if (true)
587  graph->evalOpParm(myTightnessoutputattrib, nodeidx, "tightnessoutputattrib", time, 0);
588  myClumppointattribs = ""_sh;
589  if (true)
590  graph->evalOpParm(myClumppointattribs, nodeidx, "clumppointattribs", time, 0);
591  myClumpprimattribs = ""_sh;
592  if (true)
593  graph->evalOpParm(myClumpprimattribs, nodeidx, "clumpprimattribs", time, 0);
594 
595  }
596 
597 
598  void loadFromOpSubclass(const LoadParms &loadparms) override
599  {
600  buildFromOp(loadparms.graph(), loadparms.nodeIdx(), loadparms.context().getTime(), loadparms.depnode());
601  }
602 
603 
604  void copyFrom(const SOP_NodeParms *src) override
605  {
606  *this = *((const SOP_HairClumpParms *)src);
607  }
608 
609  template <typename T>
610  void
611  doGetParmValue(TempIndex idx, TempIndex instance, T &value) const
612  {
613  if (idx.size() < 1)
614  return;
615  UT_ASSERT(idx.size() == instance.size()+1);
616  if (idx.size() != instance.size()+1)
617  return;
618  switch (idx[0])
619  {
620  case 0:
621  coerceValue(value, myLegacymasking);
622  break;
623  case 1:
624  coerceValue(value, myUvattrib);
625  break;
626  case 2:
627  coerceValue(value, myBlend);
628  break;
629  case 3:
630  coerceValue(value, myBlendoverride);
631  break;
632  case 4:
633  coerceValue(value, myBlendcurveattrib);
634  break;
635  case 5:
636  coerceValue(value, myBlendattrib);
637  break;
638  case 6:
639  coerceValue(value, myBlendtexture);
640  break;
641  case 7:
642  coerceValue(value, myUseskinmask);
643  break;
644  case 8:
645  coerceValue(value, mySkinmaskattrib);
646  break;
647  case 9:
648  coerceValue(value, myClumpsize);
649  break;
650  case 10:
651  coerceValue(value, myClumpsizeoverride);
652  break;
653  case 11:
654  coerceValue(value, myClumpsizeattrib);
655  break;
656  case 12:
657  coerceValue(value, myClumpsizetexture);
658  break;
659  case 13:
660  coerceValue(value, mySearchbeyondradius);
661  break;
662  case 14:
663  coerceValue(value, myClumpwithinclumps);
664  break;
665  case 15:
666  coerceValue(value, myCrossoverrate);
667  break;
668  case 16:
669  coerceValue(value, mySeed);
670  break;
671  case 17:
672  coerceValue(value, myMethod);
673  break;
674  case 18:
675  coerceValue(value, myPreservelength);
676  break;
677  case 19:
678  coerceValue(value, myExtendtomatch);
679  break;
680  case 20:
681  coerceValue(value, myShortentomatch);
682  break;
683  case 21:
684  coerceValue(value, myAccuratebundling);
685  break;
686  case 22:
687  coerceValue(value, myHairwidth);
688  break;
689  case 23:
690  coerceValue(value, myHairwidthscale);
691  break;
692  case 24:
693  coerceValue(value, myTightness);
694  break;
695  case 25:
696  coerceValue(value, myTightnessoverride);
697  break;
698  case 26:
699  coerceValue(value, myTightnesscurveattrib);
700  break;
701  case 27:
702  coerceValue(value, myTightnessclumpattrib);
703  break;
704  case 28:
705  coerceValue(value, myTightnessattrib);
706  break;
707  case 29:
708  coerceValue(value, myTightnesstexture);
709  break;
710  case 30:
711  coerceValue(value, myStrayamount);
712  break;
713  case 31:
714  coerceValue(value, myStrayamountoverride);
715  break;
716  case 32:
717  coerceValue(value, myStrayamountcurveattrib);
718  break;
719  case 33:
720  coerceValue(value, myStrayamountclumpattrib);
721  break;
722  case 34:
723  coerceValue(value, myStrayamountattrib);
724  break;
725  case 35:
726  coerceValue(value, myStrayamounttexture);
727  break;
728  case 36:
729  coerceValue(value, myStrayrate);
730  break;
731  case 37:
732  coerceValue(value, myStrayrateoverride);
733  break;
734  case 38:
735  coerceValue(value, myStrayratecurveattrib);
736  break;
737  case 39:
738  coerceValue(value, myStrayrateclumpattrib);
739  break;
740  case 40:
741  coerceValue(value, myStrayrateattrib);
742  break;
743  case 41:
744  coerceValue(value, myStrayratetexture);
745  break;
746  case 42:
747  coerceValue(value, myStrayfalloff);
748  break;
749  case 43:
750  coerceValue(value, myStrayfalloffoverride);
751  break;
752  case 44:
753  coerceValue(value, myStrayfalloffcurveattrib);
754  break;
755  case 45:
756  coerceValue(value, myStrayfalloffclumpattrib);
757  break;
758  case 46:
759  coerceValue(value, myStrayfalloffattrib);
760  break;
761  case 47:
762  coerceValue(value, myStrayfallofftexture);
763  break;
764  case 48:
765  coerceValue(value, myClumpprofile);
766  break;
767  case 49:
768  coerceValue(value, myIterations);
769  break;
770  case 50:
771  coerceValue(value, myIterationsoverride);
772  break;
773  case 51:
774  coerceValue(value, myIterationscurveattrib);
775  break;
776  case 52:
777  coerceValue(value, myIterationsattrib);
778  break;
779  case 53:
780  coerceValue(value, myIterationstexture);
781  break;
782  case 54:
783  coerceValue(value, mySizereduction);
784  break;
785  case 55:
786  coerceValue(value, mySizereductionoverride);
787  break;
788  case 56:
789  coerceValue(value, mySizereductionattrib);
790  break;
791  case 57:
792  coerceValue(value, mySizereductiontexture);
793  break;
794  case 58:
795  coerceValue(value, myGoalfeedback);
796  break;
797  case 59:
798  coerceValue(value, myGoalfeedbackoverride);
799  break;
800  case 60:
801  coerceValue(value, myGoalfeedbackattrib);
802  break;
803  case 61:
804  coerceValue(value, myGoalfeedbacktexture);
805  break;
806  case 62:
807  coerceValue(value, myTightnessreduction);
808  break;
809  case 63:
810  coerceValue(value, myTightnessreductionoverride);
811  break;
812  case 64:
813  coerceValue(value, myTightnessreductioncurveattrib);
814  break;
815  case 65:
816  coerceValue(value, myTightnessreductionattrib);
817  break;
818  case 66:
819  coerceValue(value, myTightnessreductiontexture);
820  break;
821  case 67:
822  coerceValue(value, myEnablecurling);
823  break;
824  case 68:
825  coerceValue(value, myCurlamp);
826  break;
827  case 69:
828  coerceValue(value, myCurlampoverride);
829  break;
830  case 70:
831  coerceValue(value, myCurlampcurveattrib);
832  break;
833  case 71:
834  coerceValue(value, myCurlampattrib);
835  break;
836  case 72:
837  coerceValue(value, myCurlamptexture);
838  break;
839  case 73:
840  coerceValue(value, myCurlampramp);
841  break;
842  case 74:
843  coerceValue(value, myCurlfreq);
844  break;
845  case 75:
846  coerceValue(value, myCurlfreqoverride);
847  break;
848  case 76:
849  coerceValue(value, myCurlfreqcurveattrib);
850  break;
851  case 77:
852  coerceValue(value, myCurveattrib);
853  break;
854  case 78:
855  coerceValue(value, myCurlfreqattrib);
856  break;
857  case 79:
858  coerceValue(value, myCurlfreqtexture);
859  break;
860  case 80:
861  coerceValue(value, myCurlfreqramp);
862  break;
863  case 81:
864  coerceValue(value, myCreateclumpidattrib);
865  break;
866  case 82:
867  coerceValue(value, myClumpidoutputattrib);
868  break;
869  case 83:
870  coerceValue(value, myCreatetightnessattrib);
871  break;
872  case 84:
873  coerceValue(value, myTightnessoutputattrib);
874  break;
875  case 85:
876  coerceValue(value, myClumppointattribs);
877  break;
878  case 86:
879  coerceValue(value, myClumpprimattribs);
880  break;
881 
882  }
883  }
884 
885  void getNestParmValue(TempIndex idx, TempIndex instance, exint &value) const override
886  { doGetParmValue(idx, instance, value); }
887  void getNestParmValue(TempIndex idx, TempIndex instance, fpreal &value) const override
888  { doGetParmValue(idx, instance, value); }
889  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector2D &value) const override
890  { doGetParmValue(idx, instance, value); }
891  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector3D &value) const override
892  { doGetParmValue(idx, instance, value); }
893  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector4D &value) const override
894  { doGetParmValue(idx, instance, value); }
895  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix2D &value) const override
896  { doGetParmValue(idx, instance, value); }
897  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
898  { doGetParmValue(idx, instance, value); }
899  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix4D &value) const override
900  { doGetParmValue(idx, instance, value); }
901  void getNestParmValue(TempIndex idx, TempIndex instance, UT_StringHolder &value) const override
902  { doGetParmValue(idx, instance, value); }
903  void getNestParmValue(TempIndex idx, TempIndex instance, UT_SharedPtr<UT_Ramp> &value) const override
904  { doGetParmValue(idx, instance, value); }
905  void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
906  { doGetParmValue(idx, instance, value); }
907 
908  template <typename T>
909  void
910  doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
911  {
912  if (idx.size() < 1)
913  return;
914  UT_ASSERT(idx.size() == instance.size()+1);
915  if (idx.size() != instance.size()+1)
916  return;
917  switch (idx[0])
918  {
919  case 0:
920  coerceValue(myLegacymasking, value);
921  break;
922  case 1:
923  coerceValue(myUvattrib, value);
924  break;
925  case 2:
926  coerceValue(myBlend, value);
927  break;
928  case 3:
929  coerceValue(myBlendoverride, value);
930  break;
931  case 4:
932  coerceValue(myBlendcurveattrib, value);
933  break;
934  case 5:
935  coerceValue(myBlendattrib, value);
936  break;
937  case 6:
938  coerceValue(myBlendtexture, value);
939  break;
940  case 7:
941  coerceValue(myUseskinmask, value);
942  break;
943  case 8:
944  coerceValue(mySkinmaskattrib, value);
945  break;
946  case 9:
947  coerceValue(myClumpsize, value);
948  break;
949  case 10:
950  coerceValue(myClumpsizeoverride, value);
951  break;
952  case 11:
953  coerceValue(myClumpsizeattrib, value);
954  break;
955  case 12:
956  coerceValue(myClumpsizetexture, value);
957  break;
958  case 13:
959  coerceValue(mySearchbeyondradius, value);
960  break;
961  case 14:
962  coerceValue(myClumpwithinclumps, value);
963  break;
964  case 15:
965  coerceValue(myCrossoverrate, value);
966  break;
967  case 16:
968  coerceValue(mySeed, value);
969  break;
970  case 17:
971  coerceValue(myMethod, value);
972  break;
973  case 18:
974  coerceValue(myPreservelength, value);
975  break;
976  case 19:
977  coerceValue(myExtendtomatch, value);
978  break;
979  case 20:
980  coerceValue(myShortentomatch, value);
981  break;
982  case 21:
983  coerceValue(myAccuratebundling, value);
984  break;
985  case 22:
986  coerceValue(myHairwidth, value);
987  break;
988  case 23:
989  coerceValue(myHairwidthscale, value);
990  break;
991  case 24:
992  coerceValue(myTightness, value);
993  break;
994  case 25:
995  coerceValue(myTightnessoverride, value);
996  break;
997  case 26:
998  coerceValue(myTightnesscurveattrib, value);
999  break;
1000  case 27:
1001  coerceValue(myTightnessclumpattrib, value);
1002  break;
1003  case 28:
1004  coerceValue(myTightnessattrib, value);
1005  break;
1006  case 29:
1007  coerceValue(myTightnesstexture, value);
1008  break;
1009  case 30:
1010  coerceValue(myStrayamount, value);
1011  break;
1012  case 31:
1013  coerceValue(myStrayamountoverride, value);
1014  break;
1015  case 32:
1016  coerceValue(myStrayamountcurveattrib, value);
1017  break;
1018  case 33:
1019  coerceValue(myStrayamountclumpattrib, value);
1020  break;
1021  case 34:
1022  coerceValue(myStrayamountattrib, value);
1023  break;
1024  case 35:
1025  coerceValue(myStrayamounttexture, value);
1026  break;
1027  case 36:
1028  coerceValue(myStrayrate, value);
1029  break;
1030  case 37:
1031  coerceValue(myStrayrateoverride, value);
1032  break;
1033  case 38:
1034  coerceValue(myStrayratecurveattrib, value);
1035  break;
1036  case 39:
1037  coerceValue(myStrayrateclumpattrib, value);
1038  break;
1039  case 40:
1040  coerceValue(myStrayrateattrib, value);
1041  break;
1042  case 41:
1043  coerceValue(myStrayratetexture, value);
1044  break;
1045  case 42:
1046  coerceValue(myStrayfalloff, value);
1047  break;
1048  case 43:
1049  coerceValue(myStrayfalloffoverride, value);
1050  break;
1051  case 44:
1052  coerceValue(myStrayfalloffcurveattrib, value);
1053  break;
1054  case 45:
1055  coerceValue(myStrayfalloffclumpattrib, value);
1056  break;
1057  case 46:
1058  coerceValue(myStrayfalloffattrib, value);
1059  break;
1060  case 47:
1061  coerceValue(myStrayfallofftexture, value);
1062  break;
1063  case 48:
1064  coerceValue(myClumpprofile, value);
1065  break;
1066  case 49:
1067  coerceValue(myIterations, value);
1068  break;
1069  case 50:
1070  coerceValue(myIterationsoverride, value);
1071  break;
1072  case 51:
1073  coerceValue(myIterationscurveattrib, value);
1074  break;
1075  case 52:
1076  coerceValue(myIterationsattrib, value);
1077  break;
1078  case 53:
1079  coerceValue(myIterationstexture, value);
1080  break;
1081  case 54:
1082  coerceValue(mySizereduction, value);
1083  break;
1084  case 55:
1085  coerceValue(mySizereductionoverride, value);
1086  break;
1087  case 56:
1088  coerceValue(mySizereductionattrib, value);
1089  break;
1090  case 57:
1091  coerceValue(mySizereductiontexture, value);
1092  break;
1093  case 58:
1094  coerceValue(myGoalfeedback, value);
1095  break;
1096  case 59:
1097  coerceValue(myGoalfeedbackoverride, value);
1098  break;
1099  case 60:
1100  coerceValue(myGoalfeedbackattrib, value);
1101  break;
1102  case 61:
1103  coerceValue(myGoalfeedbacktexture, value);
1104  break;
1105  case 62:
1106  coerceValue(myTightnessreduction, value);
1107  break;
1108  case 63:
1109  coerceValue(myTightnessreductionoverride, value);
1110  break;
1111  case 64:
1112  coerceValue(myTightnessreductioncurveattrib, value);
1113  break;
1114  case 65:
1115  coerceValue(myTightnessreductionattrib, value);
1116  break;
1117  case 66:
1118  coerceValue(myTightnessreductiontexture, value);
1119  break;
1120  case 67:
1121  coerceValue(myEnablecurling, value);
1122  break;
1123  case 68:
1124  coerceValue(myCurlamp, value);
1125  break;
1126  case 69:
1127  coerceValue(myCurlampoverride, value);
1128  break;
1129  case 70:
1130  coerceValue(myCurlampcurveattrib, value);
1131  break;
1132  case 71:
1133  coerceValue(myCurlampattrib, value);
1134  break;
1135  case 72:
1136  coerceValue(myCurlamptexture, value);
1137  break;
1138  case 73:
1139  coerceValue(myCurlampramp, value);
1140  break;
1141  case 74:
1142  coerceValue(myCurlfreq, value);
1143  break;
1144  case 75:
1145  coerceValue(myCurlfreqoverride, value);
1146  break;
1147  case 76:
1148  coerceValue(myCurlfreqcurveattrib, value);
1149  break;
1150  case 77:
1151  coerceValue(myCurveattrib, value);
1152  break;
1153  case 78:
1154  coerceValue(myCurlfreqattrib, value);
1155  break;
1156  case 79:
1157  coerceValue(myCurlfreqtexture, value);
1158  break;
1159  case 80:
1160  coerceValue(myCurlfreqramp, value);
1161  break;
1162  case 81:
1163  coerceValue(myCreateclumpidattrib, value);
1164  break;
1165  case 82:
1166  coerceValue(myClumpidoutputattrib, value);
1167  break;
1168  case 83:
1169  coerceValue(myCreatetightnessattrib, value);
1170  break;
1171  case 84:
1172  coerceValue(myTightnessoutputattrib, value);
1173  break;
1174  case 85:
1175  coerceValue(myClumppointattribs, value);
1176  break;
1177  case 86:
1178  coerceValue(myClumpprimattribs, value);
1179  break;
1180 
1181  }
1182  }
1183 
1184  void setNestParmValue(TempIndex idx, TempIndex instance, const exint &value) override
1185  { doSetParmValue(idx, instance, value); }
1186  void setNestParmValue(TempIndex idx, TempIndex instance, const fpreal &value) override
1187  { doSetParmValue(idx, instance, value); }
1188  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector2D &value) override
1189  { doSetParmValue(idx, instance, value); }
1190  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector3D &value) override
1191  { doSetParmValue(idx, instance, value); }
1192  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector4D &value) override
1193  { doSetParmValue(idx, instance, value); }
1194  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix2D &value) override
1195  { doSetParmValue(idx, instance, value); }
1196  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix3D &value) override
1197  { doSetParmValue(idx, instance, value); }
1198  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix4D &value) override
1199  { doSetParmValue(idx, instance, value); }
1200  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_StringHolder &value) override
1201  { doSetParmValue(idx, instance, value); }
1202  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_SharedPtr<UT_Ramp> &value) override
1203  { doSetParmValue(idx, instance, value); }
1204  void setNestParmValue(TempIndex idx, TempIndex instance, const PRM_DataItemHandle &value) override
1205  { doSetParmValue(idx, instance, value); }
1206 
1207  exint getNestNumParms(TempIndex idx) const override
1208  {
1209  if (idx.size() == 0)
1210  return 87;
1211  switch (idx[0])
1212  {
1213 
1214  }
1215  // Invalid
1216  return 0;
1217  }
1218 
1219  const char *getNestParmName(TempIndex fieldnum) const override
1220  {
1221  if (fieldnum.size() < 1)
1222  return 0;
1223  switch (fieldnum[0])
1224  {
1225  case 0:
1226  return "legacymasking";
1227  case 1:
1228  return "uvattrib";
1229  case 2:
1230  return "blend";
1231  case 3:
1232  return "blendoverride";
1233  case 4:
1234  return "blendcurveattrib";
1235  case 5:
1236  return "blendattrib";
1237  case 6:
1238  return "blendtexture";
1239  case 7:
1240  return "useskinmask";
1241  case 8:
1242  return "skinmaskattrib";
1243  case 9:
1244  return "clumpsize";
1245  case 10:
1246  return "clumpsizeoverride";
1247  case 11:
1248  return "clumpsizeattrib";
1249  case 12:
1250  return "clumpsizetexture";
1251  case 13:
1252  return "searchbeyondradius";
1253  case 14:
1254  return "clumpwithinclumps";
1255  case 15:
1256  return "crossoverrate";
1257  case 16:
1258  return "seed";
1259  case 17:
1260  return "method";
1261  case 18:
1262  return "preservelength";
1263  case 19:
1264  return "extendtomatch";
1265  case 20:
1266  return "shortentomatch";
1267  case 21:
1268  return "accuratebundling";
1269  case 22:
1270  return "hairwidth";
1271  case 23:
1272  return "hairwidthscale";
1273  case 24:
1274  return "tightness";
1275  case 25:
1276  return "tightnessoverride";
1277  case 26:
1278  return "tightnesscurveattrib";
1279  case 27:
1280  return "tightnessclumpattrib";
1281  case 28:
1282  return "tightnessattrib";
1283  case 29:
1284  return "tightnesstexture";
1285  case 30:
1286  return "strayamount";
1287  case 31:
1288  return "strayamountoverride";
1289  case 32:
1290  return "strayamountcurveattrib";
1291  case 33:
1292  return "strayamountclumpattrib";
1293  case 34:
1294  return "strayamountattrib";
1295  case 35:
1296  return "strayamounttexture";
1297  case 36:
1298  return "strayrate";
1299  case 37:
1300  return "strayrateoverride";
1301  case 38:
1302  return "strayratecurveattrib";
1303  case 39:
1304  return "strayrateclumpattrib";
1305  case 40:
1306  return "strayrateattrib";
1307  case 41:
1308  return "strayratetexture";
1309  case 42:
1310  return "strayfalloff";
1311  case 43:
1312  return "strayfalloffoverride";
1313  case 44:
1314  return "strayfalloffcurveattrib";
1315  case 45:
1316  return "strayfalloffclumpattrib";
1317  case 46:
1318  return "strayfalloffattrib";
1319  case 47:
1320  return "strayfallofftexture";
1321  case 48:
1322  return "clumpprofile";
1323  case 49:
1324  return "iterations";
1325  case 50:
1326  return "iterationsoverride";
1327  case 51:
1328  return "iterationscurveattrib";
1329  case 52:
1330  return "iterationsattrib";
1331  case 53:
1332  return "iterationstexture";
1333  case 54:
1334  return "sizereduction";
1335  case 55:
1336  return "sizereductionoverride";
1337  case 56:
1338  return "sizereductionattrib";
1339  case 57:
1340  return "sizereductiontexture";
1341  case 58:
1342  return "goalfeedback";
1343  case 59:
1344  return "goalfeedbackoverride";
1345  case 60:
1346  return "goalfeedbackattrib";
1347  case 61:
1348  return "goalfeedbacktexture";
1349  case 62:
1350  return "tightnessreduction";
1351  case 63:
1352  return "tightnessreductionoverride";
1353  case 64:
1354  return "tightnessreductioncurveattrib";
1355  case 65:
1356  return "tightnessreductionattrib";
1357  case 66:
1358  return "tightnessreductiontexture";
1359  case 67:
1360  return "enablecurling";
1361  case 68:
1362  return "curlamp";
1363  case 69:
1364  return "curlampoverride";
1365  case 70:
1366  return "curlampcurveattrib";
1367  case 71:
1368  return "curlampattrib";
1369  case 72:
1370  return "curlamptexture";
1371  case 73:
1372  return "curlampramp";
1373  case 74:
1374  return "curlfreq";
1375  case 75:
1376  return "curlfreqoverride";
1377  case 76:
1378  return "curlfreqcurveattrib";
1379  case 77:
1380  return "curveattrib";
1381  case 78:
1382  return "curlfreqattrib";
1383  case 79:
1384  return "curlfreqtexture";
1385  case 80:
1386  return "curlfreqramp";
1387  case 81:
1388  return "createclumpidattrib";
1389  case 82:
1390  return "clumpidoutputattrib";
1391  case 83:
1392  return "createtightnessattrib";
1393  case 84:
1394  return "tightnessoutputattrib";
1395  case 85:
1396  return "clumppointattribs";
1397  case 86:
1398  return "clumpprimattribs";
1399 
1400  }
1401  return 0;
1402  }
1403 
1404  ParmType getNestParmType(TempIndex fieldnum) const override
1405  {
1406  if (fieldnum.size() < 1)
1407  return PARM_UNSUPPORTED;
1408  switch (fieldnum[0])
1409  {
1410  case 0:
1411  return PARM_INTEGER;
1412  case 1:
1413  return PARM_STRING;
1414  case 2:
1415  return PARM_FLOAT;
1416  case 3:
1417  return PARM_INTEGER;
1418  case 4:
1419  return PARM_STRING;
1420  case 5:
1421  return PARM_STRING;
1422  case 6:
1423  return PARM_STRING;
1424  case 7:
1425  return PARM_INTEGER;
1426  case 8:
1427  return PARM_STRING;
1428  case 9:
1429  return PARM_FLOAT;
1430  case 10:
1431  return PARM_INTEGER;
1432  case 11:
1433  return PARM_STRING;
1434  case 12:
1435  return PARM_STRING;
1436  case 13:
1437  return PARM_INTEGER;
1438  case 14:
1439  return PARM_INTEGER;
1440  case 15:
1441  return PARM_FLOAT;
1442  case 16:
1443  return PARM_FLOAT;
1444  case 17:
1445  return PARM_INTEGER;
1446  case 18:
1447  return PARM_INTEGER;
1448  case 19:
1449  return PARM_FLOAT;
1450  case 20:
1451  return PARM_FLOAT;
1452  case 21:
1453  return PARM_INTEGER;
1454  case 22:
1455  return PARM_FLOAT;
1456  case 23:
1457  return PARM_FLOAT;
1458  case 24:
1459  return PARM_FLOAT;
1460  case 25:
1461  return PARM_INTEGER;
1462  case 26:
1463  return PARM_STRING;
1464  case 27:
1465  return PARM_STRING;
1466  case 28:
1467  return PARM_STRING;
1468  case 29:
1469  return PARM_STRING;
1470  case 30:
1471  return PARM_FLOAT;
1472  case 31:
1473  return PARM_INTEGER;
1474  case 32:
1475  return PARM_STRING;
1476  case 33:
1477  return PARM_STRING;
1478  case 34:
1479  return PARM_STRING;
1480  case 35:
1481  return PARM_STRING;
1482  case 36:
1483  return PARM_FLOAT;
1484  case 37:
1485  return PARM_INTEGER;
1486  case 38:
1487  return PARM_STRING;
1488  case 39:
1489  return PARM_STRING;
1490  case 40:
1491  return PARM_STRING;
1492  case 41:
1493  return PARM_STRING;
1494  case 42:
1495  return PARM_FLOAT;
1496  case 43:
1497  return PARM_INTEGER;
1498  case 44:
1499  return PARM_STRING;
1500  case 45:
1501  return PARM_STRING;
1502  case 46:
1503  return PARM_STRING;
1504  case 47:
1505  return PARM_STRING;
1506  case 48:
1507  return PARM_RAMP;
1508  case 49:
1509  return PARM_FLOAT;
1510  case 50:
1511  return PARM_INTEGER;
1512  case 51:
1513  return PARM_STRING;
1514  case 52:
1515  return PARM_STRING;
1516  case 53:
1517  return PARM_STRING;
1518  case 54:
1519  return PARM_FLOAT;
1520  case 55:
1521  return PARM_INTEGER;
1522  case 56:
1523  return PARM_STRING;
1524  case 57:
1525  return PARM_STRING;
1526  case 58:
1527  return PARM_FLOAT;
1528  case 59:
1529  return PARM_INTEGER;
1530  case 60:
1531  return PARM_STRING;
1532  case 61:
1533  return PARM_STRING;
1534  case 62:
1535  return PARM_FLOAT;
1536  case 63:
1537  return PARM_INTEGER;
1538  case 64:
1539  return PARM_STRING;
1540  case 65:
1541  return PARM_STRING;
1542  case 66:
1543  return PARM_STRING;
1544  case 67:
1545  return PARM_INTEGER;
1546  case 68:
1547  return PARM_FLOAT;
1548  case 69:
1549  return PARM_INTEGER;
1550  case 70:
1551  return PARM_STRING;
1552  case 71:
1553  return PARM_STRING;
1554  case 72:
1555  return PARM_STRING;
1556  case 73:
1557  return PARM_RAMP;
1558  case 74:
1559  return PARM_FLOAT;
1560  case 75:
1561  return PARM_INTEGER;
1562  case 76:
1563  return PARM_STRING;
1564  case 77:
1565  return PARM_STRING;
1566  case 78:
1567  return PARM_STRING;
1568  case 79:
1569  return PARM_STRING;
1570  case 80:
1571  return PARM_RAMP;
1572  case 81:
1573  return PARM_INTEGER;
1574  case 82:
1575  return PARM_STRING;
1576  case 83:
1577  return PARM_INTEGER;
1578  case 84:
1579  return PARM_STRING;
1580  case 85:
1581  return PARM_STRING;
1582  case 86:
1583  return PARM_STRING;
1584 
1585  }
1586  return PARM_UNSUPPORTED;
1587  }
1588 
1589  // Boiler plate to load individual types.
1590  static void loadData(UT_IStream &is, int64 &v)
1591  { is.bread(&v, 1); }
1592  static void loadData(UT_IStream &is, bool &v)
1593  { int64 iv; is.bread(&iv, 1); v = iv; }
1594  static void loadData(UT_IStream &is, fpreal64 &v)
1595  { is.bread<fpreal64>(&v, 1); }
1596  static void loadData(UT_IStream &is, UT_Vector2D &v)
1597  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1); }
1598  static void loadData(UT_IStream &is, UT_Vector3D &v)
1599  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
1600  is.bread<fpreal64>(&v.z(), 1); }
1601  static void loadData(UT_IStream &is, UT_Vector4D &v)
1602  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
1603  is.bread<fpreal64>(&v.z(), 1); is.bread<fpreal64>(&v.w(), 1); }
1604  static void loadData(UT_IStream &is, UT_Matrix2D &v)
1605  { for (int r = 0; r < 2; r++) for (int c = 0; c < 2; c++) is.bread<fpreal64>(&v(r, c), 1); }
1606  static void loadData(UT_IStream &is, UT_Matrix3D &v)
1607  { for (int r = 0; r < 3; r++) for (int c = 0; c < 3; c++) is.bread<fpreal64>(&v(r, c), 1); }
1608  static void loadData(UT_IStream &is, UT_Matrix4D &v)
1609  { for (int r = 0; r < 4; r++) for (int c = 0; c < 4; c++) is.bread<fpreal64>(&v(r, c), 1); }
1610  static void loadData(UT_IStream &is, UT_Vector2I &v)
1611  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1); }
1612  static void loadData(UT_IStream &is, UT_Vector3I &v)
1613  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
1614  is.bread<int64>(&v.z(), 1); }
1615  static void loadData(UT_IStream &is, UT_Vector4I &v)
1616  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
1617  is.bread<int64>(&v.z(), 1); is.bread<int64>(&v.w(), 1); }
1619  { is.bread(v); }
1621  { UT_StringHolder rampdata;
1622  loadData(is, rampdata);
1623  if (rampdata.isstring())
1624  {
1625  v.reset(new UT_Ramp());
1626  UT_IStream istr((const char *) rampdata, rampdata.length(), UT_ISTREAM_ASCII);
1627  v->load(istr);
1628  }
1629  else v.reset();
1630  }
1633  loadData(is, data);
1634  if (data.isstring())
1635  {
1636  // Find the data type.
1637  const char *colon = UT_StringWrap(data).findChar(':');
1638  if (colon)
1639  {
1640  int typelen = colon - data.buffer();
1642  type.strncpy(data.buffer(), typelen);
1643  UT_IStream istr(((const char *) data) + typelen + 1, data.length() - (typelen + 1), UT_ISTREAM_BINARY);
1644 
1645  v = PRM_DataFactory::parseBinary(type.buffer(), istr);
1646  }
1647  }
1648  else v.reset();
1649  }
1650 
1651  static void saveData(std::ostream &os, int64 v)
1652  { UTwrite(os, &v); }
1653  static void saveData(std::ostream &os, bool v)
1654  { int64 iv = v; UTwrite(os, &iv); }
1655  static void saveData(std::ostream &os, fpreal64 v)
1656  { UTwrite<fpreal64>(os, &v); }
1657  static void saveData(std::ostream &os, UT_Vector2D v)
1658  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y()); }
1659  static void saveData(std::ostream &os, UT_Vector3D v)
1660  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
1661  UTwrite<fpreal64>(os, &v.z()); }
1662  static void saveData(std::ostream &os, UT_Vector4D v)
1663  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
1664  UTwrite<fpreal64>(os, &v.z()); UTwrite<fpreal64>(os, &v.w()); }
1665  static void saveData(std::ostream &os, UT_Matrix2D v)
1667  static void saveData(std::ostream &os, UT_Matrix3D v)
1669  static void saveData(std::ostream &os, UT_Matrix4D v)
1671  static void saveData(std::ostream &os, UT_StringHolder s)
1672  { UT_StringWrap(s).saveBinary(os); }
1673  static void saveData(std::ostream &os, UT_SharedPtr<UT_Ramp> s)
1675  UT_OStringStream ostr;
1676  if (s) s->save(ostr);
1677  result = ostr.str();
1678  saveData(os, result);
1679  }
1680  static void saveData(std::ostream &os, PRM_DataItemHandle s)
1682  UT_OStringStream ostr;
1683  if (s)
1684  {
1685  ostr << s->getDataTypeToken();
1686  ostr << ":";
1687  s->saveBinary(ostr);
1688  }
1689  result = ostr.str();
1690  saveData(os, result);
1691  }
1692 
1693 
1694  void save(std::ostream &os) const
1695  {
1696  int32 v = version();
1697  UTwrite(os, &v);
1698  saveData(os, myLegacymasking);
1699  saveData(os, myUvattrib);
1700  saveData(os, myBlend);
1701  saveData(os, myBlendoverride);
1702  saveData(os, myBlendcurveattrib);
1703  saveData(os, myBlendattrib);
1704  saveData(os, myBlendtexture);
1705  saveData(os, myUseskinmask);
1706  saveData(os, mySkinmaskattrib);
1707  saveData(os, myClumpsize);
1708  saveData(os, myClumpsizeoverride);
1709  saveData(os, myClumpsizeattrib);
1710  saveData(os, myClumpsizetexture);
1711  saveData(os, mySearchbeyondradius);
1712  saveData(os, myClumpwithinclumps);
1713  saveData(os, myCrossoverrate);
1714  saveData(os, mySeed);
1715  saveData(os, myMethod);
1716  saveData(os, myPreservelength);
1717  saveData(os, myExtendtomatch);
1718  saveData(os, myShortentomatch);
1719  saveData(os, myAccuratebundling);
1720  saveData(os, myHairwidth);
1721  saveData(os, myHairwidthscale);
1722  saveData(os, myTightness);
1723  saveData(os, myTightnessoverride);
1724  saveData(os, myTightnesscurveattrib);
1725  saveData(os, myTightnessclumpattrib);
1726  saveData(os, myTightnessattrib);
1727  saveData(os, myTightnesstexture);
1728  saveData(os, myStrayamount);
1729  saveData(os, myStrayamountoverride);
1730  saveData(os, myStrayamountcurveattrib);
1731  saveData(os, myStrayamountclumpattrib);
1732  saveData(os, myStrayamountattrib);
1733  saveData(os, myStrayamounttexture);
1734  saveData(os, myStrayrate);
1735  saveData(os, myStrayrateoverride);
1736  saveData(os, myStrayratecurveattrib);
1737  saveData(os, myStrayrateclumpattrib);
1738  saveData(os, myStrayrateattrib);
1739  saveData(os, myStrayratetexture);
1740  saveData(os, myStrayfalloff);
1741  saveData(os, myStrayfalloffoverride);
1742  saveData(os, myStrayfalloffcurveattrib);
1743  saveData(os, myStrayfalloffclumpattrib);
1744  saveData(os, myStrayfalloffattrib);
1745  saveData(os, myStrayfallofftexture);
1746  saveData(os, myClumpprofile);
1747  saveData(os, myIterations);
1748  saveData(os, myIterationsoverride);
1749  saveData(os, myIterationscurveattrib);
1750  saveData(os, myIterationsattrib);
1751  saveData(os, myIterationstexture);
1752  saveData(os, mySizereduction);
1753  saveData(os, mySizereductionoverride);
1754  saveData(os, mySizereductionattrib);
1755  saveData(os, mySizereductiontexture);
1756  saveData(os, myGoalfeedback);
1757  saveData(os, myGoalfeedbackoverride);
1758  saveData(os, myGoalfeedbackattrib);
1759  saveData(os, myGoalfeedbacktexture);
1760  saveData(os, myTightnessreduction);
1761  saveData(os, myTightnessreductionoverride);
1762  saveData(os, myTightnessreductioncurveattrib);
1763  saveData(os, myTightnessreductionattrib);
1764  saveData(os, myTightnessreductiontexture);
1765  saveData(os, myEnablecurling);
1766  saveData(os, myCurlamp);
1767  saveData(os, myCurlampoverride);
1768  saveData(os, myCurlampcurveattrib);
1769  saveData(os, myCurlampattrib);
1770  saveData(os, myCurlamptexture);
1771  saveData(os, myCurlampramp);
1772  saveData(os, myCurlfreq);
1773  saveData(os, myCurlfreqoverride);
1774  saveData(os, myCurlfreqcurveattrib);
1775  saveData(os, myCurveattrib);
1776  saveData(os, myCurlfreqattrib);
1777  saveData(os, myCurlfreqtexture);
1778  saveData(os, myCurlfreqramp);
1779  saveData(os, myCreateclumpidattrib);
1780  saveData(os, myClumpidoutputattrib);
1781  saveData(os, myCreatetightnessattrib);
1782  saveData(os, myTightnessoutputattrib);
1783  saveData(os, myClumppointattribs);
1784  saveData(os, myClumpprimattribs);
1785 
1786  }
1787 
1788  bool load(UT_IStream &is)
1789  {
1790  int32 v;
1791  is.bread(&v, 1);
1792  if (version() != v)
1793  {
1794  // Fail incompatible versions
1795  return false;
1796  }
1797  loadData(is, myLegacymasking);
1798  loadData(is, myUvattrib);
1799  loadData(is, myBlend);
1800  loadData(is, myBlendoverride);
1801  loadData(is, myBlendcurveattrib);
1802  loadData(is, myBlendattrib);
1803  loadData(is, myBlendtexture);
1804  loadData(is, myUseskinmask);
1805  loadData(is, mySkinmaskattrib);
1806  loadData(is, myClumpsize);
1807  loadData(is, myClumpsizeoverride);
1808  loadData(is, myClumpsizeattrib);
1809  loadData(is, myClumpsizetexture);
1810  loadData(is, mySearchbeyondradius);
1811  loadData(is, myClumpwithinclumps);
1812  loadData(is, myCrossoverrate);
1813  loadData(is, mySeed);
1814  loadData(is, myMethod);
1815  loadData(is, myPreservelength);
1816  loadData(is, myExtendtomatch);
1817  loadData(is, myShortentomatch);
1818  loadData(is, myAccuratebundling);
1819  loadData(is, myHairwidth);
1820  loadData(is, myHairwidthscale);
1821  loadData(is, myTightness);
1822  loadData(is, myTightnessoverride);
1823  loadData(is, myTightnesscurveattrib);
1824  loadData(is, myTightnessclumpattrib);
1825  loadData(is, myTightnessattrib);
1826  loadData(is, myTightnesstexture);
1827  loadData(is, myStrayamount);
1828  loadData(is, myStrayamountoverride);
1829  loadData(is, myStrayamountcurveattrib);
1830  loadData(is, myStrayamountclumpattrib);
1831  loadData(is, myStrayamountattrib);
1832  loadData(is, myStrayamounttexture);
1833  loadData(is, myStrayrate);
1834  loadData(is, myStrayrateoverride);
1835  loadData(is, myStrayratecurveattrib);
1836  loadData(is, myStrayrateclumpattrib);
1837  loadData(is, myStrayrateattrib);
1838  loadData(is, myStrayratetexture);
1839  loadData(is, myStrayfalloff);
1840  loadData(is, myStrayfalloffoverride);
1841  loadData(is, myStrayfalloffcurveattrib);
1842  loadData(is, myStrayfalloffclumpattrib);
1843  loadData(is, myStrayfalloffattrib);
1844  loadData(is, myStrayfallofftexture);
1845  loadData(is, myClumpprofile);
1846  loadData(is, myIterations);
1847  loadData(is, myIterationsoverride);
1848  loadData(is, myIterationscurveattrib);
1849  loadData(is, myIterationsattrib);
1850  loadData(is, myIterationstexture);
1851  loadData(is, mySizereduction);
1852  loadData(is, mySizereductionoverride);
1853  loadData(is, mySizereductionattrib);
1854  loadData(is, mySizereductiontexture);
1855  loadData(is, myGoalfeedback);
1856  loadData(is, myGoalfeedbackoverride);
1857  loadData(is, myGoalfeedbackattrib);
1858  loadData(is, myGoalfeedbacktexture);
1859  loadData(is, myTightnessreduction);
1860  loadData(is, myTightnessreductionoverride);
1861  loadData(is, myTightnessreductioncurveattrib);
1862  loadData(is, myTightnessreductionattrib);
1863  loadData(is, myTightnessreductiontexture);
1864  loadData(is, myEnablecurling);
1865  loadData(is, myCurlamp);
1866  loadData(is, myCurlampoverride);
1867  loadData(is, myCurlampcurveattrib);
1868  loadData(is, myCurlampattrib);
1869  loadData(is, myCurlamptexture);
1870  loadData(is, myCurlampramp);
1871  loadData(is, myCurlfreq);
1872  loadData(is, myCurlfreqoverride);
1873  loadData(is, myCurlfreqcurveattrib);
1874  loadData(is, myCurveattrib);
1875  loadData(is, myCurlfreqattrib);
1876  loadData(is, myCurlfreqtexture);
1877  loadData(is, myCurlfreqramp);
1878  loadData(is, myCreateclumpidattrib);
1879  loadData(is, myClumpidoutputattrib);
1880  loadData(is, myCreatetightnessattrib);
1881  loadData(is, myTightnessoutputattrib);
1882  loadData(is, myClumppointattribs);
1883  loadData(is, myClumpprimattribs);
1884 
1885  return true;
1886  }
1887 
1888  bool getLegacymasking() const { return myLegacymasking; }
1889  void setLegacymasking(bool val) { myLegacymasking = val; }
1890  bool opLegacymasking(const SOP_NodeVerb::CookParms &cookparms) const
1891  {
1892  SOP_Node *thissop = cookparms.getNode();
1893  if (!thissop) return getLegacymasking();
1894  bool result;
1895  OP_Utils::evalOpParm(result, thissop, "legacymasking", cookparms.getCookTime(), 0);
1896  return result;
1897  }
1898  const UT_StringHolder & getUvattrib() const { return myUvattrib; }
1899  void setUvattrib(const UT_StringHolder & val) { myUvattrib = val; }
1901  {
1902  SOP_Node *thissop = cookparms.getNode();
1903  if (!thissop) return getUvattrib();
1905  OP_Utils::evalOpParm(result, thissop, "uvattrib", cookparms.getCookTime(), 0);
1906  return result;
1907  }
1908  fpreal64 getBlend() const { return myBlend; }
1909  void setBlend(fpreal64 val) { myBlend = val; }
1910  fpreal64 opBlend(const SOP_NodeVerb::CookParms &cookparms) const
1911  {
1912  SOP_Node *thissop = cookparms.getNode();
1913  if (!thissop) return getBlend();
1914  fpreal64 result;
1915  OP_Utils::evalOpParm(result, thissop, "blend", cookparms.getCookTime(), 0);
1916  return result;
1917  }
1918  Blendoverride getBlendoverride() const { return Blendoverride(myBlendoverride); }
1919  void setBlendoverride(Blendoverride val) { myBlendoverride = int64(val); }
1921  {
1922  SOP_Node *thissop = cookparms.getNode();
1923  if (!thissop) return getBlendoverride();
1924  int64 result;
1925  OP_Utils::evalOpParm(result, thissop, "blendoverride", cookparms.getCookTime(), 0);
1926  return Blendoverride(result);
1927  }
1928  const UT_StringHolder & getBlendcurveattrib() const { return myBlendcurveattrib; }
1929  void setBlendcurveattrib(const UT_StringHolder & val) { myBlendcurveattrib = val; }
1931  {
1932  SOP_Node *thissop = cookparms.getNode();
1933  if (!thissop) return getBlendcurveattrib();
1935  OP_Utils::evalOpParm(result, thissop, "blendcurveattrib", cookparms.getCookTime(), 0);
1936  return result;
1937  }
1938  const UT_StringHolder & getBlendattrib() const { return myBlendattrib; }
1939  void setBlendattrib(const UT_StringHolder & val) { myBlendattrib = val; }
1941  {
1942  SOP_Node *thissop = cookparms.getNode();
1943  if (!thissop) return getBlendattrib();
1945  OP_Utils::evalOpParm(result, thissop, "blendattrib", cookparms.getCookTime(), 0);
1946  return result;
1947  }
1948  const UT_StringHolder & getBlendtexture() const { return myBlendtexture; }
1949  void setBlendtexture(const UT_StringHolder & val) { myBlendtexture = val; }
1951  {
1952  SOP_Node *thissop = cookparms.getNode();
1953  if (!thissop) return getBlendtexture();
1955  OP_Utils::evalOpParm(result, thissop, "blendtexture", cookparms.getCookTime(), 0);
1956  return result;
1957  }
1958  bool getUseskinmask() const { return myUseskinmask; }
1959  void setUseskinmask(bool val) { myUseskinmask = val; }
1960  bool opUseskinmask(const SOP_NodeVerb::CookParms &cookparms) const
1961  {
1962  SOP_Node *thissop = cookparms.getNode();
1963  if (!thissop) return getUseskinmask();
1964  bool result;
1965  OP_Utils::evalOpParm(result, thissop, "useskinmask", cookparms.getCookTime(), 0);
1966  return result;
1967  }
1968  const UT_StringHolder & getSkinmaskattrib() const { return mySkinmaskattrib; }
1969  void setSkinmaskattrib(const UT_StringHolder & val) { mySkinmaskattrib = val; }
1971  {
1972  SOP_Node *thissop = cookparms.getNode();
1973  if (!thissop) return getSkinmaskattrib();
1975  OP_Utils::evalOpParm(result, thissop, "skinmaskattrib", cookparms.getCookTime(), 0);
1976  return result;
1977  }
1978  fpreal64 getClumpsize() const { return myClumpsize; }
1979  void setClumpsize(fpreal64 val) { myClumpsize = val; }
1981  {
1982  SOP_Node *thissop = cookparms.getNode();
1983  if (!thissop) return getClumpsize();
1984  fpreal64 result;
1985  OP_Utils::evalOpParm(result, thissop, "clumpsize", cookparms.getCookTime(), 0);
1986  return result;
1987  }
1988  Clumpsizeoverride getClumpsizeoverride() const { return Clumpsizeoverride(myClumpsizeoverride); }
1989  void setClumpsizeoverride(Clumpsizeoverride val) { myClumpsizeoverride = int64(val); }
1991  {
1992  SOP_Node *thissop = cookparms.getNode();
1993  if (!thissop) return getClumpsizeoverride();
1994  int64 result;
1995  OP_Utils::evalOpParm(result, thissop, "clumpsizeoverride", cookparms.getCookTime(), 0);
1996  return Clumpsizeoverride(result);
1997  }
1998  const UT_StringHolder & getClumpsizeattrib() const { return myClumpsizeattrib; }
1999  void setClumpsizeattrib(const UT_StringHolder & val) { myClumpsizeattrib = val; }
2001  {
2002  SOP_Node *thissop = cookparms.getNode();
2003  if (!thissop) return getClumpsizeattrib();
2005  OP_Utils::evalOpParm(result, thissop, "clumpsizeattrib", cookparms.getCookTime(), 0);
2006  return result;
2007  }
2008  const UT_StringHolder & getClumpsizetexture() const { return myClumpsizetexture; }
2009  void setClumpsizetexture(const UT_StringHolder & val) { myClumpsizetexture = val; }
2011  {
2012  SOP_Node *thissop = cookparms.getNode();
2013  if (!thissop) return getClumpsizetexture();
2015  OP_Utils::evalOpParm(result, thissop, "clumpsizetexture", cookparms.getCookTime(), 0);
2016  return result;
2017  }
2018  bool getSearchbeyondradius() const { return mySearchbeyondradius; }
2019  void setSearchbeyondradius(bool val) { mySearchbeyondradius = val; }
2020  bool opSearchbeyondradius(const SOP_NodeVerb::CookParms &cookparms) const
2021  {
2022  SOP_Node *thissop = cookparms.getNode();
2023  if (!thissop) return getSearchbeyondradius();
2024  bool result;
2025  OP_Utils::evalOpParm(result, thissop, "searchbeyondradius", cookparms.getCookTime(), 0);
2026  return result;
2027  }
2028  bool getClumpwithinclumps() const { return myClumpwithinclumps; }
2029  void setClumpwithinclumps(bool val) { myClumpwithinclumps = val; }
2030  bool opClumpwithinclumps(const SOP_NodeVerb::CookParms &cookparms) const
2031  {
2032  SOP_Node *thissop = cookparms.getNode();
2033  if (!thissop) return getClumpwithinclumps();
2034  bool result;
2035  OP_Utils::evalOpParm(result, thissop, "clumpwithinclumps", cookparms.getCookTime(), 0);
2036  return result;
2037  }
2038  fpreal64 getCrossoverrate() const { return myCrossoverrate; }
2039  void setCrossoverrate(fpreal64 val) { myCrossoverrate = val; }
2041  {
2042  SOP_Node *thissop = cookparms.getNode();
2043  if (!thissop) return getCrossoverrate();
2044  fpreal64 result;
2045  OP_Utils::evalOpParm(result, thissop, "crossoverrate", cookparms.getCookTime(), 0);
2046  return result;
2047  }
2048  fpreal64 getSeed() const { return mySeed; }
2049  void setSeed(fpreal64 val) { mySeed = val; }
2050  fpreal64 opSeed(const SOP_NodeVerb::CookParms &cookparms) const
2051  {
2052  SOP_Node *thissop = cookparms.getNode();
2053  if (!thissop) return getSeed();
2054  fpreal64 result;
2055  OP_Utils::evalOpParm(result, thissop, "seed", cookparms.getCookTime(), 0);
2056  return result;
2057  }
2058  Method getMethod() const { return Method(myMethod); }
2059  void setMethod(Method val) { myMethod = int64(val); }
2060  Method opMethod(const SOP_NodeVerb::CookParms &cookparms) const
2061  {
2062  SOP_Node *thissop = cookparms.getNode();
2063  if (!thissop) return getMethod();
2064  int64 result;
2065  OP_Utils::evalOpParm(result, thissop, "method", cookparms.getCookTime(), 0);
2066  return Method(result);
2067  }
2068  bool getPreservelength() const { return myPreservelength; }
2069  void setPreservelength(bool val) { myPreservelength = val; }
2070  bool opPreservelength(const SOP_NodeVerb::CookParms &cookparms) const
2071  {
2072  SOP_Node *thissop = cookparms.getNode();
2073  if (!thissop) return getPreservelength();
2074  bool result;
2075  OP_Utils::evalOpParm(result, thissop, "preservelength", cookparms.getCookTime(), 0);
2076  return result;
2077  }
2078  fpreal64 getExtendtomatch() const { return myExtendtomatch; }
2079  void setExtendtomatch(fpreal64 val) { myExtendtomatch = val; }
2081  {
2082  SOP_Node *thissop = cookparms.getNode();
2083  if (!thissop) return getExtendtomatch();
2084  fpreal64 result;
2085  OP_Utils::evalOpParm(result, thissop, "extendtomatch", cookparms.getCookTime(), 0);
2086  return result;
2087  }
2088  fpreal64 getShortentomatch() const { return myShortentomatch; }
2089  void setShortentomatch(fpreal64 val) { myShortentomatch = val; }
2091  {
2092  SOP_Node *thissop = cookparms.getNode();
2093  if (!thissop) return getShortentomatch();
2094  fpreal64 result;
2095  OP_Utils::evalOpParm(result, thissop, "shortentomatch", cookparms.getCookTime(), 0);
2096  return result;
2097  }
2098  bool getAccuratebundling() const { return myAccuratebundling; }
2099  void setAccuratebundling(bool val) { myAccuratebundling = val; }
2100  bool opAccuratebundling(const SOP_NodeVerb::CookParms &cookparms) const
2101  {
2102  SOP_Node *thissop = cookparms.getNode();
2103  if (!thissop) return getAccuratebundling();
2104  bool result;
2105  OP_Utils::evalOpParm(result, thissop, "accuratebundling", cookparms.getCookTime(), 0);
2106  return result;
2107  }
2108  fpreal64 getHairwidth() const { return myHairwidth; }
2109  void setHairwidth(fpreal64 val) { myHairwidth = val; }
2111  {
2112  SOP_Node *thissop = cookparms.getNode();
2113  if (!thissop) return getHairwidth();
2114  fpreal64 result;
2115  OP_Utils::evalOpParm(result, thissop, "hairwidth", cookparms.getCookTime(), 0);
2116  return result;
2117  }
2118  fpreal64 getHairwidthscale() const { return myHairwidthscale; }
2119  void setHairwidthscale(fpreal64 val) { myHairwidthscale = val; }
2121  {
2122  SOP_Node *thissop = cookparms.getNode();
2123  if (!thissop) return getHairwidthscale();
2124  fpreal64 result;
2125  OP_Utils::evalOpParm(result, thissop, "hairwidthscale", cookparms.getCookTime(), 0);
2126  return result;
2127  }
2128  fpreal64 getTightness() const { return myTightness; }
2129  void setTightness(fpreal64 val) { myTightness = val; }
2131  {
2132  SOP_Node *thissop = cookparms.getNode();
2133  if (!thissop) return getTightness();
2134  fpreal64 result;
2135  OP_Utils::evalOpParm(result, thissop, "tightness", cookparms.getCookTime(), 0);
2136  return result;
2137  }
2138  Tightnessoverride getTightnessoverride() const { return Tightnessoverride(myTightnessoverride); }
2139  void setTightnessoverride(Tightnessoverride val) { myTightnessoverride = int64(val); }
2141  {
2142  SOP_Node *thissop = cookparms.getNode();
2143  if (!thissop) return getTightnessoverride();
2144  int64 result;
2145  OP_Utils::evalOpParm(result, thissop, "tightnessoverride", cookparms.getCookTime(), 0);
2146  return Tightnessoverride(result);
2147  }
2148  const UT_StringHolder & getTightnesscurveattrib() const { return myTightnesscurveattrib; }
2149  void setTightnesscurveattrib(const UT_StringHolder & val) { myTightnesscurveattrib = val; }
2151  {
2152  SOP_Node *thissop = cookparms.getNode();
2153  if (!thissop) return getTightnesscurveattrib();
2155  OP_Utils::evalOpParm(result, thissop, "tightnesscurveattrib", cookparms.getCookTime(), 0);
2156  return result;
2157  }
2158  const UT_StringHolder & getTightnessclumpattrib() const { return myTightnessclumpattrib; }
2159  void setTightnessclumpattrib(const UT_StringHolder & val) { myTightnessclumpattrib = val; }
2161  {
2162  SOP_Node *thissop = cookparms.getNode();
2163  if (!thissop) return getTightnessclumpattrib();
2165  OP_Utils::evalOpParm(result, thissop, "tightnessclumpattrib", cookparms.getCookTime(), 0);
2166  return result;
2167  }
2168  const UT_StringHolder & getTightnessattrib() const { return myTightnessattrib; }
2169  void setTightnessattrib(const UT_StringHolder & val) { myTightnessattrib = val; }
2171  {
2172  SOP_Node *thissop = cookparms.getNode();
2173  if (!thissop) return getTightnessattrib();
2175  OP_Utils::evalOpParm(result, thissop, "tightnessattrib", cookparms.getCookTime(), 0);
2176  return result;
2177  }
2178  const UT_StringHolder & getTightnesstexture() const { return myTightnesstexture; }
2179  void setTightnesstexture(const UT_StringHolder & val) { myTightnesstexture = val; }
2181  {
2182  SOP_Node *thissop = cookparms.getNode();
2183  if (!thissop) return getTightnesstexture();
2185  OP_Utils::evalOpParm(result, thissop, "tightnesstexture", cookparms.getCookTime(), 0);
2186  return result;
2187  }
2188  fpreal64 getStrayamount() const { return myStrayamount; }
2189  void setStrayamount(fpreal64 val) { myStrayamount = val; }
2191  {
2192  SOP_Node *thissop = cookparms.getNode();
2193  if (!thissop) return getStrayamount();
2194  fpreal64 result;
2195  OP_Utils::evalOpParm(result, thissop, "strayamount", cookparms.getCookTime(), 0);
2196  return result;
2197  }
2198  Strayamountoverride getStrayamountoverride() const { return Strayamountoverride(myStrayamountoverride); }
2199  void setStrayamountoverride(Strayamountoverride val) { myStrayamountoverride = int64(val); }
2201  {
2202  SOP_Node *thissop = cookparms.getNode();
2203  if (!thissop) return getStrayamountoverride();
2204  int64 result;
2205  OP_Utils::evalOpParm(result, thissop, "strayamountoverride", cookparms.getCookTime(), 0);
2206  return Strayamountoverride(result);
2207  }
2208  const UT_StringHolder & getStrayamountcurveattrib() const { return myStrayamountcurveattrib; }
2209  void setStrayamountcurveattrib(const UT_StringHolder & val) { myStrayamountcurveattrib = val; }
2211  {
2212  SOP_Node *thissop = cookparms.getNode();
2213  if (!thissop) return getStrayamountcurveattrib();
2215  OP_Utils::evalOpParm(result, thissop, "strayamountcurveattrib", cookparms.getCookTime(), 0);
2216  return result;
2217  }
2218  const UT_StringHolder & getStrayamountclumpattrib() const { return myStrayamountclumpattrib; }
2219  void setStrayamountclumpattrib(const UT_StringHolder & val) { myStrayamountclumpattrib = val; }
2221  {
2222  SOP_Node *thissop = cookparms.getNode();
2223  if (!thissop) return getStrayamountclumpattrib();
2225  OP_Utils::evalOpParm(result, thissop, "strayamountclumpattrib", cookparms.getCookTime(), 0);
2226  return result;
2227  }
2228  const UT_StringHolder & getStrayamountattrib() const { return myStrayamountattrib; }
2229  void setStrayamountattrib(const UT_StringHolder & val) { myStrayamountattrib = val; }
2231  {
2232  SOP_Node *thissop = cookparms.getNode();
2233  if (!thissop) return getStrayamountattrib();
2235  OP_Utils::evalOpParm(result, thissop, "strayamountattrib", cookparms.getCookTime(), 0);
2236  return result;
2237  }
2238  const UT_StringHolder & getStrayamounttexture() const { return myStrayamounttexture; }
2239  void setStrayamounttexture(const UT_StringHolder & val) { myStrayamounttexture = val; }
2241  {
2242  SOP_Node *thissop = cookparms.getNode();
2243  if (!thissop) return getStrayamounttexture();
2245  OP_Utils::evalOpParm(result, thissop, "strayamounttexture", cookparms.getCookTime(), 0);
2246  return result;
2247  }
2248  fpreal64 getStrayrate() const { return myStrayrate; }
2249  void setStrayrate(fpreal64 val) { myStrayrate = val; }
2251  {
2252  SOP_Node *thissop = cookparms.getNode();
2253  if (!thissop) return getStrayrate();
2254  fpreal64 result;
2255  OP_Utils::evalOpParm(result, thissop, "strayrate", cookparms.getCookTime(), 0);
2256  return result;
2257  }
2258  Strayrateoverride getStrayrateoverride() const { return Strayrateoverride(myStrayrateoverride); }
2259  void setStrayrateoverride(Strayrateoverride val) { myStrayrateoverride = int64(val); }
2261  {
2262  SOP_Node *thissop = cookparms.getNode();
2263  if (!thissop) return getStrayrateoverride();
2264  int64 result;
2265  OP_Utils::evalOpParm(result, thissop, "strayrateoverride", cookparms.getCookTime(), 0);
2266  return Strayrateoverride(result);
2267  }
2268  const UT_StringHolder & getStrayratecurveattrib() const { return myStrayratecurveattrib; }
2269  void setStrayratecurveattrib(const UT_StringHolder & val) { myStrayratecurveattrib = val; }
2271  {
2272  SOP_Node *thissop = cookparms.getNode();
2273  if (!thissop) return getStrayratecurveattrib();
2275  OP_Utils::evalOpParm(result, thissop, "strayratecurveattrib", cookparms.getCookTime(), 0);
2276  return result;
2277  }
2278  const UT_StringHolder & getStrayrateclumpattrib() const { return myStrayrateclumpattrib; }
2279  void setStrayrateclumpattrib(const UT_StringHolder & val) { myStrayrateclumpattrib = val; }
2281  {
2282  SOP_Node *thissop = cookparms.getNode();
2283  if (!thissop) return getStrayrateclumpattrib();
2285  OP_Utils::evalOpParm(result, thissop, "strayrateclumpattrib", cookparms.getCookTime(), 0);
2286  return result;
2287  }
2288  const UT_StringHolder & getStrayrateattrib() const { return myStrayrateattrib; }
2289  void setStrayrateattrib(const UT_StringHolder & val) { myStrayrateattrib = val; }
2291  {
2292  SOP_Node *thissop = cookparms.getNode();
2293  if (!thissop) return getStrayrateattrib();
2295  OP_Utils::evalOpParm(result, thissop, "strayrateattrib", cookparms.getCookTime(), 0);
2296  return result;
2297  }
2298  const UT_StringHolder & getStrayratetexture() const { return myStrayratetexture; }
2299  void setStrayratetexture(const UT_StringHolder & val) { myStrayratetexture = val; }
2301  {
2302  SOP_Node *thissop = cookparms.getNode();
2303  if (!thissop) return getStrayratetexture();
2305  OP_Utils::evalOpParm(result, thissop, "strayratetexture", cookparms.getCookTime(), 0);
2306  return result;
2307  }
2308  fpreal64 getStrayfalloff() const { return myStrayfalloff; }
2309  void setStrayfalloff(fpreal64 val) { myStrayfalloff = val; }
2311  {
2312  SOP_Node *thissop = cookparms.getNode();
2313  if (!thissop) return getStrayfalloff();
2314  fpreal64 result;
2315  OP_Utils::evalOpParm(result, thissop, "strayfalloff", cookparms.getCookTime(), 0);
2316  return result;
2317  }
2318  Strayfalloffoverride getStrayfalloffoverride() const { return Strayfalloffoverride(myStrayfalloffoverride); }
2319  void setStrayfalloffoverride(Strayfalloffoverride val) { myStrayfalloffoverride = int64(val); }
2321  {
2322  SOP_Node *thissop = cookparms.getNode();
2323  if (!thissop) return getStrayfalloffoverride();
2324  int64 result;
2325  OP_Utils::evalOpParm(result, thissop, "strayfalloffoverride", cookparms.getCookTime(), 0);
2326  return Strayfalloffoverride(result);
2327  }
2328  const UT_StringHolder & getStrayfalloffcurveattrib() const { return myStrayfalloffcurveattrib; }
2329  void setStrayfalloffcurveattrib(const UT_StringHolder & val) { myStrayfalloffcurveattrib = val; }
2331  {
2332  SOP_Node *thissop = cookparms.getNode();
2333  if (!thissop) return getStrayfalloffcurveattrib();
2335  OP_Utils::evalOpParm(result, thissop, "strayfalloffcurveattrib", cookparms.getCookTime(), 0);
2336  return result;
2337  }
2338  const UT_StringHolder & getStrayfalloffclumpattrib() const { return myStrayfalloffclumpattrib; }
2339  void setStrayfalloffclumpattrib(const UT_StringHolder & val) { myStrayfalloffclumpattrib = val; }
2341  {
2342  SOP_Node *thissop = cookparms.getNode();
2343  if (!thissop) return getStrayfalloffclumpattrib();
2345  OP_Utils::evalOpParm(result, thissop, "strayfalloffclumpattrib", cookparms.getCookTime(), 0);
2346  return result;
2347  }
2348  const UT_StringHolder & getStrayfalloffattrib() const { return myStrayfalloffattrib; }
2349  void setStrayfalloffattrib(const UT_StringHolder & val) { myStrayfalloffattrib = val; }
2351  {
2352  SOP_Node *thissop = cookparms.getNode();
2353  if (!thissop) return getStrayfalloffattrib();
2355  OP_Utils::evalOpParm(result, thissop, "strayfalloffattrib", cookparms.getCookTime(), 0);
2356  return result;
2357  }
2358  const UT_StringHolder & getStrayfallofftexture() const { return myStrayfallofftexture; }
2359  void setStrayfallofftexture(const UT_StringHolder & val) { myStrayfallofftexture = val; }
2361  {
2362  SOP_Node *thissop = cookparms.getNode();
2363  if (!thissop) return getStrayfallofftexture();
2365  OP_Utils::evalOpParm(result, thissop, "strayfallofftexture", cookparms.getCookTime(), 0);
2366  return result;
2367  }
2368  UT_SharedPtr<UT_Ramp> getClumpprofile() const { return myClumpprofile; }
2369  void setClumpprofile(UT_SharedPtr<UT_Ramp> val) { myClumpprofile = val; }
2371  {
2372  SOP_Node *thissop = cookparms.getNode();
2373  if (!thissop) return getClumpprofile();
2375  OP_Utils::evalOpParm(result, thissop, "clumpprofile", cookparms.getCookTime(), 0);
2376  return result;
2377  }
2378  fpreal64 getIterations() const { return myIterations; }
2379  void setIterations(fpreal64 val) { myIterations = val; }
2381  {
2382  SOP_Node *thissop = cookparms.getNode();
2383  if (!thissop) return getIterations();
2384  fpreal64 result;
2385  OP_Utils::evalOpParm(result, thissop, "iterations", cookparms.getCookTime(), 0);
2386  return result;
2387  }
2388  Iterationsoverride getIterationsoverride() const { return Iterationsoverride(myIterationsoverride); }
2389  void setIterationsoverride(Iterationsoverride val) { myIterationsoverride = int64(val); }
2391  {
2392  SOP_Node *thissop = cookparms.getNode();
2393  if (!thissop) return getIterationsoverride();
2394  int64 result;
2395  OP_Utils::evalOpParm(result, thissop, "iterationsoverride", cookparms.getCookTime(), 0);
2396  return Iterationsoverride(result);
2397  }
2398  const UT_StringHolder & getIterationscurveattrib() const { return myIterationscurveattrib; }
2399  void setIterationscurveattrib(const UT_StringHolder & val) { myIterationscurveattrib = val; }
2401  {
2402  SOP_Node *thissop = cookparms.getNode();
2403  if (!thissop) return getIterationscurveattrib();
2405  OP_Utils::evalOpParm(result, thissop, "iterationscurveattrib", cookparms.getCookTime(), 0);
2406  return result;
2407  }
2408  const UT_StringHolder & getIterationsattrib() const { return myIterationsattrib; }
2409  void setIterationsattrib(const UT_StringHolder & val) { myIterationsattrib = val; }
2411  {
2412  SOP_Node *thissop = cookparms.getNode();
2413  if (!thissop) return getIterationsattrib();
2415  OP_Utils::evalOpParm(result, thissop, "iterationsattrib", cookparms.getCookTime(), 0);
2416  return result;
2417  }
2418  const UT_StringHolder & getIterationstexture() const { return myIterationstexture; }
2419  void setIterationstexture(const UT_StringHolder & val) { myIterationstexture = val; }
2421  {
2422  SOP_Node *thissop = cookparms.getNode();
2423  if (!thissop) return getIterationstexture();
2425  OP_Utils::evalOpParm(result, thissop, "iterationstexture", cookparms.getCookTime(), 0);
2426  return result;
2427  }
2428  fpreal64 getSizereduction() const { return mySizereduction; }
2429  void setSizereduction(fpreal64 val) { mySizereduction = val; }
2431  {
2432  SOP_Node *thissop = cookparms.getNode();
2433  if (!thissop) return getSizereduction();
2434  fpreal64 result;
2435  OP_Utils::evalOpParm(result, thissop, "sizereduction", cookparms.getCookTime(), 0);
2436  return result;
2437  }
2438  Sizereductionoverride getSizereductionoverride() const { return Sizereductionoverride(mySizereductionoverride); }
2439  void setSizereductionoverride(Sizereductionoverride val) { mySizereductionoverride = int64(val); }
2441  {
2442  SOP_Node *thissop = cookparms.getNode();
2443  if (!thissop) return getSizereductionoverride();
2444  int64 result;
2445  OP_Utils::evalOpParm(result, thissop, "sizereductionoverride", cookparms.getCookTime(), 0);
2446  return Sizereductionoverride(result);
2447  }
2448  const UT_StringHolder & getSizereductionattrib() const { return mySizereductionattrib; }
2449  void setSizereductionattrib(const UT_StringHolder & val) { mySizereductionattrib = val; }
2451  {
2452  SOP_Node *thissop = cookparms.getNode();
2453  if (!thissop) return getSizereductionattrib();
2455  OP_Utils::evalOpParm(result, thissop, "sizereductionattrib", cookparms.getCookTime(), 0);
2456  return result;
2457  }
2458  const UT_StringHolder & getSizereductiontexture() const { return mySizereductiontexture; }
2459  void setSizereductiontexture(const UT_StringHolder & val) { mySizereductiontexture = val; }
2461  {
2462  SOP_Node *thissop = cookparms.getNode();
2463  if (!thissop) return getSizereductiontexture();
2465  OP_Utils::evalOpParm(result, thissop, "sizereductiontexture", cookparms.getCookTime(), 0);
2466  return result;
2467  }
2468  fpreal64 getGoalfeedback() const { return myGoalfeedback; }
2469  void setGoalfeedback(fpreal64 val) { myGoalfeedback = val; }
2471  {
2472  SOP_Node *thissop = cookparms.getNode();
2473  if (!thissop) return getGoalfeedback();
2474  fpreal64 result;
2475  OP_Utils::evalOpParm(result, thissop, "goalfeedback", cookparms.getCookTime(), 0);
2476  return result;
2477  }
2478  Goalfeedbackoverride getGoalfeedbackoverride() const { return Goalfeedbackoverride(myGoalfeedbackoverride); }
2479  void setGoalfeedbackoverride(Goalfeedbackoverride val) { myGoalfeedbackoverride = int64(val); }
2481  {
2482  SOP_Node *thissop = cookparms.getNode();
2483  if (!thissop) return getGoalfeedbackoverride();
2484  int64 result;
2485  OP_Utils::evalOpParm(result, thissop, "goalfeedbackoverride", cookparms.getCookTime(), 0);
2486  return Goalfeedbackoverride(result);
2487  }
2488  const UT_StringHolder & getGoalfeedbackattrib() const { return myGoalfeedbackattrib; }
2489  void setGoalfeedbackattrib(const UT_StringHolder & val) { myGoalfeedbackattrib = val; }
2491  {
2492  SOP_Node *thissop = cookparms.getNode();
2493  if (!thissop) return getGoalfeedbackattrib();
2495  OP_Utils::evalOpParm(result, thissop, "goalfeedbackattrib", cookparms.getCookTime(), 0);
2496  return result;
2497  }
2498  const UT_StringHolder & getGoalfeedbacktexture() const { return myGoalfeedbacktexture; }
2499  void setGoalfeedbacktexture(const UT_StringHolder & val) { myGoalfeedbacktexture = val; }
2501  {
2502  SOP_Node *thissop = cookparms.getNode();
2503  if (!thissop) return getGoalfeedbacktexture();
2505  OP_Utils::evalOpParm(result, thissop, "goalfeedbacktexture", cookparms.getCookTime(), 0);
2506  return result;
2507  }
2508  fpreal64 getTightnessreduction() const { return myTightnessreduction; }
2509  void setTightnessreduction(fpreal64 val) { myTightnessreduction = val; }
2511  {
2512  SOP_Node *thissop = cookparms.getNode();
2513  if (!thissop) return getTightnessreduction();
2514  fpreal64 result;
2515  OP_Utils::evalOpParm(result, thissop, "tightnessreduction", cookparms.getCookTime(), 0);
2516  return result;
2517  }
2519  void setTightnessreductionoverride(Tightnessreductionoverride val) { myTightnessreductionoverride = int64(val); }
2521  {
2522  SOP_Node *thissop = cookparms.getNode();
2523  if (!thissop) return getTightnessreductionoverride();
2524  int64 result;
2525  OP_Utils::evalOpParm(result, thissop, "tightnessreductionoverride", cookparms.getCookTime(), 0);
2526  return Tightnessreductionoverride(result);
2527  }
2528  const UT_StringHolder & getTightnessreductioncurveattrib() const { return myTightnessreductioncurveattrib; }
2529  void setTightnessreductioncurveattrib(const UT_StringHolder & val) { myTightnessreductioncurveattrib = val; }
2531  {
2532  SOP_Node *thissop = cookparms.getNode();
2533  if (!thissop) return getTightnessreductioncurveattrib();
2535  OP_Utils::evalOpParm(result, thissop, "tightnessreductioncurveattrib", cookparms.getCookTime(), 0);
2536  return result;
2537  }
2538  const UT_StringHolder & getTightnessreductionattrib() const { return myTightnessreductionattrib; }
2539  void setTightnessreductionattrib(const UT_StringHolder & val) { myTightnessreductionattrib = val; }
2541  {
2542  SOP_Node *thissop = cookparms.getNode();
2543  if (!thissop) return getTightnessreductionattrib();
2545  OP_Utils::evalOpParm(result, thissop, "tightnessreductionattrib", cookparms.getCookTime(), 0);
2546  return result;
2547  }
2548  const UT_StringHolder & getTightnessreductiontexture() const { return myTightnessreductiontexture; }
2549  void setTightnessreductiontexture(const UT_StringHolder & val) { myTightnessreductiontexture = val; }
2551  {
2552  SOP_Node *thissop = cookparms.getNode();
2553  if (!thissop) return getTightnessreductiontexture();
2555  OP_Utils::evalOpParm(result, thissop, "tightnessreductiontexture", cookparms.getCookTime(), 0);
2556  return result;
2557  }
2558  bool getEnablecurling() const { return myEnablecurling; }
2559  void setEnablecurling(bool val) { myEnablecurling = val; }
2560  bool opEnablecurling(const SOP_NodeVerb::CookParms &cookparms) const
2561  {
2562  SOP_Node *thissop = cookparms.getNode();
2563  if (!thissop) return getEnablecurling();
2564  bool result;
2565  OP_Utils::evalOpParm(result, thissop, "enablecurling", cookparms.getCookTime(), 0);
2566  return result;
2567  }
2568  fpreal64 getCurlamp() const { return myCurlamp; }
2569  void setCurlamp(fpreal64 val) { myCurlamp = val; }
2571  {
2572  SOP_Node *thissop = cookparms.getNode();
2573  if (!thissop) return getCurlamp();
2574  fpreal64 result;
2575  OP_Utils::evalOpParm(result, thissop, "curlamp", cookparms.getCookTime(), 0);
2576  return result;
2577  }
2578  Curlampoverride getCurlampoverride() const { return Curlampoverride(myCurlampoverride); }
2579  void setCurlampoverride(Curlampoverride val) { myCurlampoverride = int64(val); }
2581  {
2582  SOP_Node *thissop = cookparms.getNode();
2583  if (!thissop) return getCurlampoverride();
2584  int64 result;
2585  OP_Utils::evalOpParm(result, thissop, "curlampoverride", cookparms.getCookTime(), 0);
2586  return Curlampoverride(result);
2587  }
2588  const UT_StringHolder & getCurlampcurveattrib() const { return myCurlampcurveattrib; }
2589  void setCurlampcurveattrib(const UT_StringHolder & val) { myCurlampcurveattrib = val; }
2591  {
2592  SOP_Node *thissop = cookparms.getNode();
2593  if (!thissop) return getCurlampcurveattrib();
2595  OP_Utils::evalOpParm(result, thissop, "curlampcurveattrib", cookparms.getCookTime(), 0);
2596  return result;
2597  }
2598  const UT_StringHolder & getCurlampattrib() const { return myCurlampattrib; }
2599  void setCurlampattrib(const UT_StringHolder & val) { myCurlampattrib = val; }
2601  {
2602  SOP_Node *thissop = cookparms.getNode();
2603  if (!thissop) return getCurlampattrib();
2605  OP_Utils::evalOpParm(result, thissop, "curlampattrib", cookparms.getCookTime(), 0);
2606  return result;
2607  }
2608  const UT_StringHolder & getCurlamptexture() const { return myCurlamptexture; }
2609  void setCurlamptexture(const UT_StringHolder & val) { myCurlamptexture = val; }
2611  {
2612  SOP_Node *thissop = cookparms.getNode();
2613  if (!thissop) return getCurlamptexture();
2615  OP_Utils::evalOpParm(result, thissop, "curlamptexture", cookparms.getCookTime(), 0);
2616  return result;
2617  }
2618  UT_SharedPtr<UT_Ramp> getCurlampramp() const { return myCurlampramp; }
2619  void setCurlampramp(UT_SharedPtr<UT_Ramp> val) { myCurlampramp = val; }
2621  {
2622  SOP_Node *thissop = cookparms.getNode();
2623  if (!thissop) return getCurlampramp();
2625  OP_Utils::evalOpParm(result, thissop, "curlampramp", cookparms.getCookTime(), 0);
2626  return result;
2627  }
2628  fpreal64 getCurlfreq() const { return myCurlfreq; }
2629  void setCurlfreq(fpreal64 val) { myCurlfreq = val; }
2631  {
2632  SOP_Node *thissop = cookparms.getNode();
2633  if (!thissop) return getCurlfreq();
2634  fpreal64 result;
2635  OP_Utils::evalOpParm(result, thissop, "curlfreq", cookparms.getCookTime(), 0);
2636  return result;
2637  }
2638  Curlfreqoverride getCurlfreqoverride() const { return Curlfreqoverride(myCurlfreqoverride); }
2639  void setCurlfreqoverride(Curlfreqoverride val) { myCurlfreqoverride = int64(val); }
2641  {
2642  SOP_Node *thissop = cookparms.getNode();
2643  if (!thissop) return getCurlfreqoverride();
2644  int64 result;
2645  OP_Utils::evalOpParm(result, thissop, "curlfreqoverride", cookparms.getCookTime(), 0);
2646  return Curlfreqoverride(result);
2647  }
2648  const UT_StringHolder & getCurlfreqcurveattrib() const { return myCurlfreqcurveattrib; }
2649  void setCurlfreqcurveattrib(const UT_StringHolder & val) { myCurlfreqcurveattrib = val; }
2651  {
2652  SOP_Node *thissop = cookparms.getNode();
2653  if (!thissop) return getCurlfreqcurveattrib();
2655  OP_Utils::evalOpParm(result, thissop, "curlfreqcurveattrib", cookparms.getCookTime(), 0);
2656  return result;
2657  }
2658  const UT_StringHolder & getCurveattrib() const { return myCurveattrib; }
2659  void setCurveattrib(const UT_StringHolder & val) { myCurveattrib = val; }
2661  {
2662  SOP_Node *thissop = cookparms.getNode();
2663  if (!thissop) return getCurveattrib();
2665  OP_Utils::evalOpParm(result, thissop, "curveattrib", cookparms.getCookTime(), 0);
2666  return result;
2667  }
2668  const UT_StringHolder & getCurlfreqattrib() const { return myCurlfreqattrib; }
2669  void setCurlfreqattrib(const UT_StringHolder & val) { myCurlfreqattrib = val; }
2671  {
2672  SOP_Node *thissop = cookparms.getNode();
2673  if (!thissop) return getCurlfreqattrib();
2675  OP_Utils::evalOpParm(result, thissop, "curlfreqattrib", cookparms.getCookTime(), 0);
2676  return result;
2677  }
2678  const UT_StringHolder & getCurlfreqtexture() const { return myCurlfreqtexture; }
2679  void setCurlfreqtexture(const UT_StringHolder & val) { myCurlfreqtexture = val; }
2681  {
2682  SOP_Node *thissop = cookparms.getNode();
2683  if (!thissop) return getCurlfreqtexture();
2685  OP_Utils::evalOpParm(result, thissop, "curlfreqtexture", cookparms.getCookTime(), 0);
2686  return result;
2687  }
2688  UT_SharedPtr<UT_Ramp> getCurlfreqramp() const { return myCurlfreqramp; }
2689  void setCurlfreqramp(UT_SharedPtr<UT_Ramp> val) { myCurlfreqramp = val; }
2691  {
2692  SOP_Node *thissop = cookparms.getNode();
2693  if (!thissop) return getCurlfreqramp();
2695  OP_Utils::evalOpParm(result, thissop, "curlfreqramp", cookparms.getCookTime(), 0);
2696  return result;
2697  }
2698  bool getCreateclumpidattrib() const { return myCreateclumpidattrib; }
2699  void setCreateclumpidattrib(bool val) { myCreateclumpidattrib = val; }
2700  bool opCreateclumpidattrib(const SOP_NodeVerb::CookParms &cookparms) const
2701  {
2702  SOP_Node *thissop = cookparms.getNode();
2703  if (!thissop) return getCreateclumpidattrib();
2704  bool result;
2705  OP_Utils::evalOpParm(result, thissop, "createclumpidattrib", cookparms.getCookTime(), 0);
2706  return result;
2707  }
2708  const UT_StringHolder & getClumpidoutputattrib() const { return myClumpidoutputattrib; }
2709  void setClumpidoutputattrib(const UT_StringHolder & val) { myClumpidoutputattrib = val; }
2711  {
2712  SOP_Node *thissop = cookparms.getNode();
2713  if (!thissop) return getClumpidoutputattrib();
2715  OP_Utils::evalOpParm(result, thissop, "clumpidoutputattrib", cookparms.getCookTime(), 0);
2716  return result;
2717  }
2718  bool getCreatetightnessattrib() const { return myCreatetightnessattrib; }
2719  void setCreatetightnessattrib(bool val) { myCreatetightnessattrib = val; }
2721  {
2722  SOP_Node *thissop = cookparms.getNode();
2723  if (!thissop) return getCreatetightnessattrib();
2724  bool result;
2725  OP_Utils::evalOpParm(result, thissop, "createtightnessattrib", cookparms.getCookTime(), 0);
2726  return result;
2727  }
2728  const UT_StringHolder & getTightnessoutputattrib() const { return myTightnessoutputattrib; }
2729  void setTightnessoutputattrib(const UT_StringHolder & val) { myTightnessoutputattrib = val; }
2731  {
2732  SOP_Node *thissop = cookparms.getNode();
2733  if (!thissop) return getTightnessoutputattrib();
2735  OP_Utils::evalOpParm(result, thissop, "tightnessoutputattrib", cookparms.getCookTime(), 0);
2736  return result;
2737  }
2738  const UT_StringHolder & getClumppointattribs() const { return myClumppointattribs; }
2739  void setClumppointattribs(const UT_StringHolder & val) { myClumppointattribs = val; }
2741  {
2742  SOP_Node *thissop = cookparms.getNode();
2743  if (!thissop) return getClumppointattribs();
2745  OP_Utils::evalOpParm(result, thissop, "clumppointattribs", cookparms.getCookTime(), 0);
2746  return result;
2747  }
2748  const UT_StringHolder & getClumpprimattribs() const { return myClumpprimattribs; }
2749  void setClumpprimattribs(const UT_StringHolder & val) { myClumpprimattribs = val; }
2751  {
2752  SOP_Node *thissop = cookparms.getNode();
2753  if (!thissop) return getClumpprimattribs();
2755  OP_Utils::evalOpParm(result, thissop, "clumpprimattribs", cookparms.getCookTime(), 0);
2756  return result;
2757  }
2758 
2759 private:
2760  bool myLegacymasking;
2761  UT_StringHolder myUvattrib;
2762  fpreal64 myBlend;
2763  int64 myBlendoverride;
2764  UT_StringHolder myBlendcurveattrib;
2765  UT_StringHolder myBlendattrib;
2766  UT_StringHolder myBlendtexture;
2767  bool myUseskinmask;
2768  UT_StringHolder mySkinmaskattrib;
2769  fpreal64 myClumpsize;
2770  int64 myClumpsizeoverride;
2771  UT_StringHolder myClumpsizeattrib;
2772  UT_StringHolder myClumpsizetexture;
2773  bool mySearchbeyondradius;
2774  bool myClumpwithinclumps;
2775  fpreal64 myCrossoverrate;
2776  fpreal64 mySeed;
2777  int64 myMethod;
2778  bool myPreservelength;
2779  fpreal64 myExtendtomatch;
2780  fpreal64 myShortentomatch;
2781  bool myAccuratebundling;
2782  fpreal64 myHairwidth;
2783  fpreal64 myHairwidthscale;
2784  fpreal64 myTightness;
2785  int64 myTightnessoverride;
2786  UT_StringHolder myTightnesscurveattrib;
2787  UT_StringHolder myTightnessclumpattrib;
2788  UT_StringHolder myTightnessattrib;
2789  UT_StringHolder myTightnesstexture;
2790  fpreal64 myStrayamount;
2791  int64 myStrayamountoverride;
2792  UT_StringHolder myStrayamountcurveattrib;
2793  UT_StringHolder myStrayamountclumpattrib;
2794  UT_StringHolder myStrayamountattrib;
2795  UT_StringHolder myStrayamounttexture;
2796  fpreal64 myStrayrate;
2797  int64 myStrayrateoverride;
2798  UT_StringHolder myStrayratecurveattrib;
2799  UT_StringHolder myStrayrateclumpattrib;
2800  UT_StringHolder myStrayrateattrib;
2801  UT_StringHolder myStrayratetexture;
2802  fpreal64 myStrayfalloff;
2803  int64 myStrayfalloffoverride;
2804  UT_StringHolder myStrayfalloffcurveattrib;
2805  UT_StringHolder myStrayfalloffclumpattrib;
2806  UT_StringHolder myStrayfalloffattrib;
2807  UT_StringHolder myStrayfallofftexture;
2808  UT_SharedPtr<UT_Ramp> myClumpprofile;
2809  fpreal64 myIterations;
2810  int64 myIterationsoverride;
2811  UT_StringHolder myIterationscurveattrib;
2812  UT_StringHolder myIterationsattrib;
2813  UT_StringHolder myIterationstexture;
2814  fpreal64 mySizereduction;
2815  int64 mySizereductionoverride;
2816  UT_StringHolder mySizereductionattrib;
2817  UT_StringHolder mySizereductiontexture;
2818  fpreal64 myGoalfeedback;
2819  int64 myGoalfeedbackoverride;
2820  UT_StringHolder myGoalfeedbackattrib;
2821  UT_StringHolder myGoalfeedbacktexture;
2822  fpreal64 myTightnessreduction;
2823  int64 myTightnessreductionoverride;
2824  UT_StringHolder myTightnessreductioncurveattrib;
2825  UT_StringHolder myTightnessreductionattrib;
2826  UT_StringHolder myTightnessreductiontexture;
2827  bool myEnablecurling;
2828  fpreal64 myCurlamp;
2829  int64 myCurlampoverride;
2830  UT_StringHolder myCurlampcurveattrib;
2831  UT_StringHolder myCurlampattrib;
2832  UT_StringHolder myCurlamptexture;
2833  UT_SharedPtr<UT_Ramp> myCurlampramp;
2834  fpreal64 myCurlfreq;
2835  int64 myCurlfreqoverride;
2836  UT_StringHolder myCurlfreqcurveattrib;
2837  UT_StringHolder myCurveattrib;
2838  UT_StringHolder myCurlfreqattrib;
2839  UT_StringHolder myCurlfreqtexture;
2840  UT_SharedPtr<UT_Ramp> myCurlfreqramp;
2841  bool myCreateclumpidattrib;
2842  UT_StringHolder myClumpidoutputattrib;
2843  bool myCreatetightnessattrib;
2844  UT_StringHolder myTightnessoutputattrib;
2845  UT_StringHolder myClumppointattribs;
2846  UT_StringHolder myClumpprimattribs;
2847 
2848 };
UT_StringHolder opCurveattrib(const SOP_NodeVerb::CookParms &cookparms) const
GLdouble s
Definition: glew.h:1390
fpreal64 getExtendtomatch() const
const UT_StringHolder & getGoalfeedbacktexture() const
static void saveData(std::ostream &os, UT_Matrix3D v)
UT_StringHolder opCurlfreqtexture(const SOP_NodeVerb::CookParms &cookparms) const
void setTightnessreductiontexture(const UT_StringHolder &val)
bool opCreatetightnessattrib(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getStrayamounttexture() const
void setBlendoverride(Blendoverride val)
Tightnessreductionoverride opTightnessreductionoverride(const SOP_NodeVerb::CookParms &cookparms) const
ParmType getNestParmType(TempIndex fieldnum) const override
fpreal64 opSizereduction(const SOP_NodeVerb::CookParms &cookparms) const
void setTightnessclumpattrib(const UT_StringHolder &val)
fpreal64 getCurlamp() const
fpreal64 getGoalfeedback() const
fpreal64 opStrayrate(const SOP_NodeVerb::CookParms &cookparms) const
void setClumppointattribs(const UT_StringHolder &val)
void setHairwidthscale(fpreal64 val)
void setShortentomatch(fpreal64 val)
fpreal64 getHairwidth() const
fpreal64 getBlend() const
bool getUseskinmask() const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_SharedPtr< UT_Ramp > &value) override
void setSearchbeyondradius(bool val)
void setSizereductionattrib(const UT_StringHolder &val)
Tightnessoverride opTightnessoverride(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opIterationstexture(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opSkinmaskattrib(const SOP_NodeVerb::CookParms &cookparms) const
exint nodeIdx() const
Definition: SOP_NodeVerb.h:114
const UT_StringHolder & getStrayfalloffclumpattrib() const
UT_StringHolder opTightnessreductioncurveattrib(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 opIterations(const SOP_NodeVerb::CookParms &cookparms) const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector2D &value) override
const UT_StringHolder & getClumpidoutputattrib() const
GLenum src
Definition: glew.h:2410
UT_StringHolder opCurlfreqattrib(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opIterationscurveattrib(const SOP_NodeVerb::CookParms &cookparms) const
int int32
Definition: SYS_Types.h:39
SOP_Node * getNode() const
Definition: SOP_NodeVerb.h:640
const char * getNestParmName(TempIndex fieldnum) const override
void setTightnesstexture(const UT_StringHolder &val)
const UT_StringHolder & getIterationsattrib() const
static void loadData(UT_IStream &is, UT_Matrix2D &v)
UT_StringHolder opTightnesstexture(const SOP_NodeVerb::CookParms &cookparms) const
void setStrayfalloffattrib(const UT_StringHolder &val)
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix3D &value) override
void setClumpidoutputattrib(const UT_StringHolder &val)
UT_StringHolder opUvattrib(const SOP_NodeVerb::CookParms &cookparms) const
void copyFrom(const SOP_NodeParms *src) override
static void saveData(std::ostream &os, UT_SharedPtr< UT_Ramp > s)
void doGetParmValue(TempIndex idx, TempIndex instance, T &value) const
void setBlendtexture(const UT_StringHolder &val)
void setCurlfreq(fpreal64 val)
const UT_StringHolder & getCurlfreqtexture() const
exint bread(int32 *buffer, exint asize=1)
const UT_StringHolder & getStrayratecurveattrib() const
void setSizereductiontexture(const UT_StringHolder &val)
GT_API const UT_StringHolder time
UT_StringHolder opClumpprimattribs(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getCurlfreqcurveattrib() const
fpreal getTime() const
Definition: OP_Context.h:60
void setIterationstexture(const UT_StringHolder &val)
const UT_StringHolder & getBlendattrib() const
GLuint const GLfloat * val
Definition: glew.h:2794
const UT_StringHolder & getCurlamptexture() const
const UT_StringHolder & getTightnessattrib() const
const UT_StringHolder & getTightnessclumpattrib() const
void setCurlampattrib(const UT_StringHolder &val)
UT_StringHolder opStrayamountcurveattrib(const SOP_NodeVerb::CookParms &cookparms) const
void setStrayfalloffoverride(Strayfalloffoverride val)
const UT_StringHolder & getStrayfalloffattrib() const
UT_StringHolder opStrayratetexture(const SOP_NodeVerb::CookParms &cookparms) const
void setSizereduction(fpreal64 val)
int64 exint
Definition: SYS_Types.h:125
void buildFromOp(const SOP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
void setNestParmValue(TempIndex idx, TempIndex instance, const fpreal &value) override
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix2D &value) override
SYS_FORCE_INLINE const char * buffer() const
static void loadData(UT_IStream &is, UT_SharedPtr< UT_Ramp > &v)
void setTightnessattrib(const UT_StringHolder &val)
const SOP_GraphProxy * graph() const
Definition: SOP_NodeVerb.h:113
const UT_StringHolder & getClumpprimattribs() const
void setIterationsoverride(Iterationsoverride val)
bool getPreservelength() const
const UT_StringHolder & getSizereductiontexture() const
static void saveData(std::ostream &os, bool v)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector4D &value) const override
An output stream object that owns its own string buffer storage.
void getNestParmValue(TempIndex idx, TempIndex instance, UT_StringHolder &value) const override
void setSizereductionoverride(Sizereductionoverride val)
Curlfreqoverride getCurlfreqoverride() const
const UT_StringHolder & getTightnesscurveattrib() const
fpreal64 getStrayfalloff() const
void setCurlfreqramp(UT_SharedPtr< UT_Ramp > val)
fpreal64 opStrayamount(const SOP_NodeVerb::CookParms &cookparms) const
Tightnessoverride getTightnessoverride() const
Blendoverride opBlendoverride(const SOP_NodeVerb::CookParms &cookparms) const
void setStrayfalloffcurveattrib(const UT_StringHolder &val)
static void saveData(std::ostream &os, UT_Vector3D v)
const GLdouble * v
Definition: glew.h:1391
Iterationsoverride getIterationsoverride() const
UT_StringHolder opClumppointattribs(const SOP_NodeVerb::CookParms &cookparms) const
void setCurlampoverride(Curlampoverride val)
UT_StringHolder opClumpidoutputattrib(const SOP_NodeVerb::CookParms &cookparms) const
void setCurlamp(fpreal64 val)
UT_StringHolder opStrayfalloffclumpattrib(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, int64 &v)
void setAccuratebundling(bool val)
const UT_StringHolder & getCurveattrib() const
fpreal64 getClumpsize() const
UT_SharedPtr< UT_Ramp > getClumpprofile() const
UT_SharedPtr< UT_Ramp > opCurlampramp(const SOP_NodeVerb::CookParms &cookparms) const
Clumpsizeoverride opClumpsizeoverride(const SOP_NodeVerb::CookParms &cookparms) const
Goalfeedbackoverride getGoalfeedbackoverride() const
void setStrayamount(fpreal64 val)
static PRM_DataItemHandle parseBinary(const char *type, UT_IStream &is)
UT_StringHolder opStrayfalloffcurveattrib(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opStrayfalloffattrib(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, UT_Vector3D &v)
const UT_WorkBuffer & str()
Returns a read-only reference to the underlying UT_WorkBuffer.
const UT_StringHolder & getTightnesstexture() const
void setClumpprimattribs(const UT_StringHolder &val)
fpreal64 opHairwidthscale(const SOP_NodeVerb::CookParms &cookparms) const
void setStrayamountoverride(Strayamountoverride val)
fpreal64 getCrossoverrate() const
void setCrossoverrate(fpreal64 val)
void setBlend(fpreal64 val)
void setUseskinmask(bool val)
void setStrayamountclumpattrib(const UT_StringHolder &val)
UT_StringHolder opTightnessoutputattrib(const SOP_NodeVerb::CookParms &cookparms) const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector2D &value) const override
UT_SharedPtr< UT_Ramp > getCurlfreqramp() const
Method opMethod(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, UT_Vector4D &v)
static void loadData(UT_IStream &is, UT_Vector3I &v)
const UT_StringHolder & getBlendtexture() const
const UT_StringHolder & getCurlampcurveattrib() const
double fpreal64
Definition: SYS_Types.h:201
fpreal64 getStrayrate() const
Blendoverride getBlendoverride() const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector3D &value) override
const UT_StringHolder & getUvattrib() const
static void saveData(std::ostream &os, UT_StringHolder s)
bool operator==(const BaseDimensions< T > &a, const BaseDimensions< Y > &b)
Definition: Dimensions.h:137
bool getEnablecurling() const
fpreal64 opCurlamp(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opStrayrateclumpattrib(const SOP_NodeVerb::CookParms &cookparms) const
bool load(UT_IStream &is)
UT_StringHolder opStrayrateattrib(const SOP_NodeVerb::CookParms &cookparms) const
void setTightnesscurveattrib(const UT_StringHolder &val)
bool getLegacymasking() const
static void saveData(std::ostream &os, UT_Matrix4D v)
fpreal64 opStrayfalloff(const SOP_NodeVerb::CookParms &cookparms) const
Strayfalloffoverride opStrayfalloffoverride(const SOP_NodeVerb::CookParms &cookparms) const
void setGoalfeedback(fpreal64 val)
Sizereductionoverride getSizereductionoverride() const
SYS_FORCE_INLINE T & y()
Definition: UT_Vector3.h:513
void setCurlfreqattrib(const UT_StringHolder &val)
const UT_StringHolder & getSkinmaskattrib() const
void setStrayrateoverride(Strayrateoverride val)
const UT_StringHolder & getTightnessreductioncurveattrib() const
bool opLegacymasking(const SOP_NodeVerb::CookParms &cookparms) const
bool opUseskinmask(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getIterationscurveattrib() const
UT_StringHolder opGoalfeedbackattrib(const SOP_NodeVerb::CookParms &cookparms) const
void setLegacymasking(bool val)
exint length() const
void setMethod(Method val)
fpreal64 getTightnessreduction() const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix4D &value) override
SYS_FORCE_INLINE const char * buffer() const
void setStrayratetexture(const UT_StringHolder &val)
std::shared_ptr< T > UT_SharedPtr
Wrapper around std::shared_ptr.
Definition: UT_SharedPtr.h:28
void setCreateclumpidattrib(bool val)
static void saveData(std::ostream &os, UT_Matrix2D v)
const UT_StringHolder & getStrayamountclumpattrib() const
UT_StringHolder opTightnessattrib(const SOP_NodeVerb::CookParms &cookparms) const
Strayfalloffoverride getStrayfalloffoverride() const
fpreal64 opExtendtomatch(const SOP_NodeVerb::CookParms &cookparms) const
GLint GLenum GLsizei GLint GLsizei const void * data
Definition: glew.h:1379
void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
UT_StringHolder opStrayamounttexture(const SOP_NodeVerb::CookParms &cookparms) const
bool getAccuratebundling() const
UT_StringHolder opClumpsizetexture(const SOP_NodeVerb::CookParms &cookparms) const
SYS_FORCE_INLINE T & z()
Definition: UT_Vector3.h:515
void setStrayamounttexture(const UT_StringHolder &val)
const UT_StringHolder & getTightnessreductionattrib() const
Goalfeedbackoverride opGoalfeedbackoverride(const SOP_NodeVerb::CookParms &cookparms) const
void setIterations(fpreal64 val)
UT_StringHolder opGoalfeedbacktexture(const SOP_NodeVerb::CookParms &cookparms) const
const GLfloat * c
Definition: glew.h:16296
Strayrateoverride opStrayrateoverride(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opTightnessreductionattrib(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getStrayfallofftexture() const
void setTightnessreduction(fpreal64 val)
static void loadData(UT_IStream &is, PRM_DataItemHandle &v)
fpreal64 opBlend(const SOP_NodeVerb::CookParms &cookparms) const
long long int64
Definition: SYS_Types.h:116
const UT_StringHolder & getIterationstexture() const
const UT_StringHolder & getClumpsizetexture() const
bool opAccuratebundling(const SOP_NodeVerb::CookParms &cookparms) const
bool opPreservelength(const SOP_NodeVerb::CookParms &cookparms) const
Clumpsizeoverride getClumpsizeoverride() const
const UT_StringHolder & getCurlfreqattrib() const
UT_StringHolder opIterationsattrib(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getCurlampattrib() const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_StringHolder &value) override
const UT_StringHolder & getStrayrateattrib() const
Curlampoverride getCurlampoverride() const
void setGoalfeedbackattrib(const UT_StringHolder &val)
UT_StringHolder opStrayfallofftexture(const SOP_NodeVerb::CookParms &cookparms) const
void setCurlfreqtexture(const UT_StringHolder &val)
void setTightness(fpreal64 val)
UT_StringHolder opSizereductionattrib(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opTightnesscurveattrib(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, UT_Matrix3D &v)
bool opClumpwithinclumps(const SOP_NodeVerb::CookParms &cookparms) const
Curlampoverride opCurlampoverride(const SOP_NodeVerb::CookParms &cookparms) const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector3D &value) const override
UT_StringHolder opSizereductiontexture(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getTightnessreductiontexture() const
void setClumpsizeattrib(const UT_StringHolder &val)
UT_SharedPtr< UT_Ramp > opClumpprofile(const SOP_NodeVerb::CookParms &cookparms) const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix4D &value) const override
UT_StringHolder opCurlampattrib(const SOP_NodeVerb::CookParms &cookparms) const
void saveBinary(std::ostream &os) const
Save string to binary stream.
Definition: UT_String.h:294
static void loadData(UT_IStream &is, UT_StringHolder &v)
void setNestParmValue(TempIndex idx, TempIndex instance, const exint &value) override
fpreal64 getShortentomatch() const
void setBlendattrib(const UT_StringHolder &val)
void setExtendtomatch(fpreal64 val)
GT_API const UT_StringHolder version
const UT_StringHolder & getGoalfeedbackattrib() const
DEP_MicroNode * depnode() const
Definition: SOP_NodeVerb.h:121
void setStrayfalloff(fpreal64 val)
Strayamountoverride getStrayamountoverride() const
const UT_StringHolder & getStrayamountattrib() const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
void setPreservelength(bool val)
Tightnessreductionoverride getTightnessreductionoverride() const
const UT_StringHolder & getStrayamountcurveattrib() const
void setEnablecurling(bool val)
void setHairwidth(fpreal64 val)
fpreal64 getCurlfreq() const
UT_StringHolder opCurlamptexture(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, bool &v)
UT_StringHolder opCurlampcurveattrib(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, UT_Vector2D &v)
void setStrayratecurveattrib(const UT_StringHolder &val)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_SharedPtr< UT_Ramp > &value) const override
void setSeed(fpreal64 val)
exint getNestNumParms(TempIndex idx) const override
Curlfreqoverride opCurlfreqoverride(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 opHairwidth(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getStrayrateclumpattrib() const
fpreal64 opGoalfeedback(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 fpreal
Definition: SYS_Types.h:277
void setClumpwithinclumps(bool val)
const UT_StringHolder & getStrayratetexture() const
bool operator!=(const SOP_HairClumpParms &src) const
Strayamountoverride opStrayamountoverride(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 opTightnessreduction(const SOP_NodeVerb::CookParms &cookparms) const
Utility class for containing a color ramp.
Definition: UT_Ramp.h:84
UT_StringHolder opTightnessclumpattrib(const SOP_NodeVerb::CookParms &cookparms) const
void setTightnessreductionoverride(Tightnessreductionoverride val)
fpreal64 opSeed(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 getIterations() const
static void loadData(UT_IStream &is, UT_Matrix4D &v)
static void saveData(std::ostream &os, UT_Vector2D v)
static void loadData(UT_IStream &is, fpreal64 &v)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix2D &value) const override
GLdouble GLdouble GLdouble r
Definition: glew.h:1406
static void saveData(std::ostream &os, UT_Vector4D v)
void save(std::ostream &os) const
void setTightnessreductionattrib(const UT_StringHolder &val)
void doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
fpreal64 getSeed() const
static void loadData(UT_IStream &is, UT_Vector4I &v)
Method getMethod() const
void setClumpprofile(UT_SharedPtr< UT_Ramp > val)
fpreal64 opCurlfreq(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opStrayamountattrib(const SOP_NodeVerb::CookParms &cookparms) const
void getNestParmValue(TempIndex idx, TempIndex instance, fpreal &value) const override
#define SOP_API
Definition: SOP_API.h:10
fpreal64 opShortentomatch(const SOP_NodeVerb::CookParms &cookparms) const
void setGoalfeedbacktexture(const UT_StringHolder &val)
void setCurlfreqcurveattrib(const UT_StringHolder &val)
UT_SharedPtr< UT_Ramp > opCurlfreqramp(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getClumppointattribs() const
virtual void evalOpParm(int64 &v, NodeIdx node, const char *parmname, fpreal time, DEP_MicroNode *depnode) const =0
UT_SharedPtr< UT_Ramp > getCurlampramp() const
static void saveData(std::ostream &os, int64 v)
SYS_FORCE_INLINE T & x()
Definition: UT_Vector3.h:511
const UT_StringHolder & getClumpsizeattrib() const
bool getCreateclumpidattrib() const
UT_StringHolder opTightnessreductiontexture(const SOP_NodeVerb::CookParms &cookparms) const
void setBlendcurveattrib(const UT_StringHolder &val)
fpreal getCookTime() const
Definition: SOP_NodeVerb.h:654
UT_StringHolder opStrayratecurveattrib(const SOP_NodeVerb::CookParms &cookparms) const
static void saveData(std::ostream &os, fpreal64 v)
void setCurlampramp(UT_SharedPtr< UT_Ramp > val)
void setSkinmaskattrib(const UT_StringHolder &val)
UT_StringHolder opStrayamountclumpattrib(const SOP_NodeVerb::CookParms &cookparms) const
GLuint64EXT * result
Definition: glew.h:14007
Sizereductionoverride opSizereductionoverride(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getStrayfalloffcurveattrib() const
Iterationsoverride opIterationsoverride(const SOP_NodeVerb::CookParms &cookparms) const
const char * findChar(int c) const
Definition: UT_String.h:1367
#define UT_ASSERT(ZZ)
Definition: UT_Assert.h:135
bool getClumpwithinclumps() const
bool getSearchbeyondradius() const
void setIterationscurveattrib(const UT_StringHolder &val)
void setStrayrate(fpreal64 val)
bool opEnablecurling(const SOP_NodeVerb::CookParms &cookparms) const
void getNestParmValue(TempIndex idx, TempIndex instance, exint &value) const override
fpreal64 getStrayamount() const
void setClumpsize(fpreal64 val)
void setStrayrateclumpattrib(const UT_StringHolder &val)
fpreal64 getSizereduction() const
void setTightnessoutputattrib(const UT_StringHolder &val)
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector4D &value) override
UT_StringHolder opCurlfreqcurveattrib(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getSizereductionattrib() const
fpreal64 opClumpsize(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 getHairwidthscale() const
static void loadData(UT_IStream &is, UT_Vector2I &v)
bool operator==(const SOP_HairClumpParms &src) const
const UT_StringHolder & getBlendcurveattrib() const
UT_StringHolder opBlendtexture(const SOP_NodeVerb::CookParms &cookparms) const
void setTightnessoverride(Tightnessoverride val)
void setStrayfallofftexture(const UT_StringHolder &val)
void setCreatetightnessattrib(bool val)
UT_StringHolder opBlendcurveattrib(const SOP_NodeVerb::CookParms &cookparms) const
bool opCreateclumpidattrib(const SOP_NodeVerb::CookParms &cookparms) const
void setCurlfreqoverride(Curlfreqoverride val)
UT_StringHolder opBlendattrib(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 opTightness(const SOP_NodeVerb::CookParms &cookparms) const
void setCurlampcurveattrib(const UT_StringHolder &val)
void setUvattrib(const UT_StringHolder &val)
GLsizei const GLfloat * value
Definition: glew.h:1849
fpreal64 getTightness() const
bool getCreatetightnessattrib() const
void loadFromOpSubclass(const LoadParms &loadparms) override
const OP_Context & context() const
Definition: SOP_NodeVerb.h:119
void setStrayrateattrib(const UT_StringHolder &val)
UT_SharedPtr< const PRM_DataItem > PRM_DataItemHandle
Definition: PRM_Parm.h:89
void setStrayfalloffclumpattrib(const UT_StringHolder &val)
UT_StringHolder opClumpsizeattrib(const SOP_NodeVerb::CookParms &cookparms) const
void setClumpsizeoverride(Clumpsizeoverride val)
void setIterationsattrib(const UT_StringHolder &val)
bool opSearchbeyondradius(const SOP_NodeVerb::CookParms &cookparms) const
void setTightnessreductioncurveattrib(const UT_StringHolder &val)
SYS_FORCE_INLINE bool isstring() const
fpreal64 opCrossoverrate(const SOP_NodeVerb::CookParms &cookparms) const
void setStrayamountcurveattrib(const UT_StringHolder &val)
void setClumpsizetexture(const UT_StringHolder &val)
SYS_FORCE_INLINE void strncpy(const char *src, exint maxlen)
Strayrateoverride getStrayrateoverride() const
type
Definition: core.h:528
void setGoalfeedbackoverride(Goalfeedbackoverride val)
static void saveData(std::ostream &os, PRM_DataItemHandle s)
const UT_StringHolder & getTightnessoutputattrib() const
void setCurveattrib(const UT_StringHolder &val)
void setNestParmValue(TempIndex idx, TempIndex instance, const PRM_DataItemHandle &value) override
void setStrayamountattrib(const UT_StringHolder &val)
void setCurlamptexture(const UT_StringHolder &val)