HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
SOP_HairGenCore.proto.h
Go to the documentation of this file.
1 /* Automagically Generated by generate_proto.py
2  * Do not Edit
3  */
4 #pragma once
5 
6 #include <SOP/SOP_API.h>
7 #include <SOP/SOP_NodeVerb.h>
8 #include <SOP/SOP_GraphProxy.h>
9 
10 #include <OP/OP_Utils.h>
11 #include <PRM/PRM_Parm.h>
12 #include <UT/UT_IStream.h>
13 #include <UT/UT_NTStreamUtil.h>
14 #include <UT/UT_Ramp.h>
15 #include <UT/UT_SharedPtr.h>
16 #include <UT/UT_StringHolder.h>
17 #include <UT/UT_StringStream.h>
18 #include <UT/UT_VectorTypes.h>
19 #include <UT/UT_EnvControl.h>
20 #include <SYS/SYS_Types.h>
21 
22 class DEP_MicroNode;
23 namespace SOP_HairGenCoreEnums
24 {
25  enum class Mode
26  {
27  SURFACE = 0,
28  POINTS
29  };
30 
32  getToken(Mode enum_value)
33  {
34  using namespace UT::Literal;
35  switch (enum_value) {
36  case Mode::SURFACE: return "surface"_sh;
37  case Mode::POINTS: return "points"_sh;
38  default: UT_ASSERT(false); return ""_sh;
39  }
40  }
41 
42  enum class Skinguidemode
43  {
44  MATCHBYGUIDEID = 0,
46  };
47 
49  getToken(Skinguidemode enum_value)
50  {
51  using namespace UT::Literal;
52  switch (enum_value) {
53  case Skinguidemode::MATCHBYGUIDEID: return "matchbyguideid"_sh;
54  case Skinguidemode::WEIGHTARRAYS: return "weightarrays"_sh;
55  default: UT_ASSERT(false); return ""_sh;
56  }
57  }
58 
59  enum class Guideblendmethod
60  {
61  LINEARBLEND = 0,
63  };
64 
67  {
68  using namespace UT::Literal;
69  switch (enum_value) {
70  case Guideblendmethod::LINEARBLEND: return "linearblend"_sh;
71  case Guideblendmethod::EXTRUDEBLEND: return "extrudeblend"_sh;
72  default: UT_ASSERT(false); return ""_sh;
73  }
74  }
75 
77  {
78  NONE = 0,
79  SKINATTRIB,
80  TEXTURE,
82  };
83 
86  {
87  using namespace UT::Literal;
88  switch (enum_value) {
89  case Influenceradiusoverride::NONE: return "none"_sh;
90  case Influenceradiusoverride::SKINATTRIB: return "skinattrib"_sh;
91  case Influenceradiusoverride::TEXTURE: return "texture"_sh;
92  case Influenceradiusoverride::TEXTUREPRIM: return "textureprim"_sh;
93  default: UT_ASSERT(false); return ""_sh;
94  }
95  }
96 
98  {
99  NONE = 0,
100  SKINATTRIB,
101  TEXTURE,
103  };
104 
107  {
108  using namespace UT::Literal;
109  switch (enum_value) {
110  case Influencedecayoverride::NONE: return "none"_sh;
111  case Influencedecayoverride::SKINATTRIB: return "skinattrib"_sh;
112  case Influencedecayoverride::TEXTURE: return "texture"_sh;
113  case Influencedecayoverride::TEXTUREPRIM: return "textureprim"_sh;
114  default: UT_ASSERT(false); return ""_sh;
115  }
116  }
117 
119  {
120  NONE = 0,
121  SKINATTRIB,
122  TEXTURE,
124  };
125 
128  {
129  using namespace UT::Literal;
130  switch (enum_value) {
131  case Maxguidecountoverride::NONE: return "none"_sh;
132  case Maxguidecountoverride::SKINATTRIB: return "skinattrib"_sh;
133  case Maxguidecountoverride::TEXTURE: return "texture"_sh;
134  case Maxguidecountoverride::TEXTUREPRIM: return "textureprim"_sh;
135  default: UT_ASSERT(false); return ""_sh;
136  }
137  }
138 
140  {
141  NONE = 0,
142  SKINATTRIB,
143  TEXTURE,
145  };
146 
149  {
150  using namespace UT::Literal;
151  switch (enum_value) {
152  case Maxguideangleoverride::NONE: return "none"_sh;
153  case Maxguideangleoverride::SKINATTRIB: return "skinattrib"_sh;
154  case Maxguideangleoverride::TEXTURE: return "texture"_sh;
155  case Maxguideangleoverride::TEXTUREPRIM: return "textureprim"_sh;
156  default: UT_ASSERT(false); return ""_sh;
157  }
158  }
159 
161  {
162  NONE = 0,
163  SKINATTRIB,
164  TEXTURE,
166  };
167 
170  {
171  using namespace UT::Literal;
172  switch (enum_value) {
173  case Clumpcrossoveroverride::NONE: return "none"_sh;
174  case Clumpcrossoveroverride::SKINATTRIB: return "skinattrib"_sh;
175  case Clumpcrossoveroverride::TEXTURE: return "texture"_sh;
176  case Clumpcrossoveroverride::TEXTUREPRIM: return "textureprim"_sh;
177  default: UT_ASSERT(false); return ""_sh;
178  }
179  }
180 
182  {
183  NONE = 0,
184  SKINATTRIB,
185  TEXTURE,
187  };
188 
191  {
192  using namespace UT::Literal;
193  switch (enum_value) {
194  case Unguidedlengthoverride::NONE: return "none"_sh;
195  case Unguidedlengthoverride::SKINATTRIB: return "skinattrib"_sh;
196  case Unguidedlengthoverride::TEXTURE: return "texture"_sh;
197  case Unguidedlengthoverride::TEXTUREPRIM: return "textureprim"_sh;
198  default: UT_ASSERT(false); return ""_sh;
199  }
200  }
201 
202  enum class Thicknessoverride
203  {
204  NONE = 0,
205  SKINATTRIB,
206  TEXTURE
207  };
208 
211  {
212  using namespace UT::Literal;
213  switch (enum_value) {
214  case Thicknessoverride::NONE: return "none"_sh;
215  case Thicknessoverride::SKINATTRIB: return "skinattrib"_sh;
216  case Thicknessoverride::TEXTURE: return "texture"_sh;
217  default: UT_ASSERT(false); return ""_sh;
218  }
219  }
220 
221 }
222 
223 
225 {
226 public:
227  static int version() { return 1; }
229  {
232 
233 
235  {
236  guideindexattrib = "guides"_UTsh;
237  guideweightattrib = "weights"_UTsh;
238 
239  }
240 
241  bool operator==(const WeightArrayPairs &src) const
242  {
243  if (guideindexattrib != src.guideindexattrib) return false;
244  if (guideweightattrib != src.guideweightattrib) return false;
245 
246  return true;
247  }
248  bool operator!=(const WeightArrayPairs &src) const
249  {
250  return !operator==(src);
251  }
252 
253  };
254 
256  {
258 
259  buf.strcat("[ ");
260  for (int i = 0; i < list.entries(); i++)
261  {
262  if (i)
263  buf.strcat(", ");
264  buf.strcat("( ");
265  buf.append("");
266  { UT_String tmp; tmp = UT_StringWrap(list(i).guideindexattrib).makeQuotedString('"'); buf.strcat(tmp); }
267  buf.append(", ");
268  { UT_String tmp; tmp = UT_StringWrap(list(i).guideweightattrib).makeQuotedString('"'); buf.strcat(tmp); }
269 
270  buf.strcat(" )");
271  }
272  buf.strcat(" ]");
273 
275  return result;
276  }
277 
279  {
280  myMode = 0;
281  myGroup = ""_UTsh;
282  myUvattrib = "uv"_UTsh;
283  myLimittobbox = false;
284  myBBoxSize = UT_Vector3D(1,1,1);
285  myBBoxCenter = UT_Vector3D(0,0,0);
286  myPrune = false;
287  myPruningratio = 0.9;
288  myPrunethicken = false;
289  myUseguides = true;
290  myUniformguidesegments = false;
291  mySkininterp = false;
292  myUseInterpMesh = false;
293  mySkininterpguidesattrib = "guides"_UTsh;
294  mySkininterpweightsattrib = "weights"_UTsh;
295  mySkinguidemode = 0;
296  myGuideblendmethod = 0;
297  myGuidegroup = ""_UTsh;
298  myInfluenceradius = 0.05;
299  myInfluenceradiusoverride = 0;
300  myInfluenceradiusoptions = 0;
301  myInfluenceradiusinrange = UT_Vector2D(0,1);
302  myInfluenceradiusoutrange = UT_Vector2D(0,1);
303  myInfluenceradiusattrib = "influenceradiusscale"_UTsh;
304  myInfluenceradiustexture = ""_UTsh;
305  myInfluenceradiustextureprim = "influenceradiusscale"_UTsh;
306  myInfluencedecay = 2;
307  myInfluencedecayoverride = 0;
308  myInfluencedecayoptions = 0;
309  myInfluencedecayinrange = UT_Vector2D(0,1);
310  myInfluencedecayoutrange = UT_Vector2D(0,1);
311  myInfluencedecayattrib = "influencedecayscale"_UTsh;
312  myInfluencedecaytexture = ""_UTsh;
313  myInfluencedecaytextureprim = "influencedecayscale"_UTsh;
314  myMaxguidecount = 10;
315  myMaxguidecountoverride = 0;
316  myMaxguidecountoptions = 0;
317  myMaxguidecountinrange = UT_Vector2D(0,1);
318  myMaxguidecountoutrange = UT_Vector2D(0,1);
319  myMaxguidecountattrib = "maxguidecountscale"_UTsh;
320  myMaxguidecounttexture = ""_UTsh;
321  myMaxguidecounttextureprim = "maxguidecountscale"_UTsh;
322  myMaxguideangle = 90;
323  myMaxguideangleoverride = 0;
324  myMaxguideangleoptions = 0;
325  myMaxguideangleinrange = UT_Vector2D(0,1);
326  myMaxguideangleoutrange = UT_Vector2D(0,1);
327  myMaxguideangleattrib = "maxguideanglescale"_UTsh;
328  myMaxguideangletexture = ""_UTsh;
329  myMaxguideangletextureprim = "maxguideanglescale"_UTsh;
330  myClumpcrossover = 0;
331  myClumpcrossoveroverride = 0;
332  myClumpcrossoveroptions = 0;
333  myClumpcrossoverinrange = UT_Vector2D(0,1);
334  myClumpcrossoveroutrange = UT_Vector2D(0,1);
335  myClumpcrossoverattrib = "clumpcrossoverscale"_UTsh;
336  myClumpcrossovertexture = ""_UTsh;
337  myClumpcrossovertextureprim = "clumpcrossoverscale"_UTsh;
338  myGrowunguided = true;
339  myUseinitdirattrib = true;
340  myInitdirattrib = "furdirection"_UTsh;
341  myUnguidedsegments = 8;
342  myUnguidedlength = 0.05;
343  myUnguidedlengthoverride = 0;
344  myUnguidedlengthoptions = 0;
345  myUnguidedlengthinrange = UT_Vector2D(0,1);
346  myUnguidedlengthoutrange = UT_Vector2D(0,1);
347  myUnguidedlengthattrib = "unguidedlengthscale"_UTsh;
348  myUnguidedlengthtexture = ""_UTsh;
349  myUnguidedlengthtextureprim = "unguidedlengthscale"_UTsh;
350  myUnguidedminlength = 1e-05;
351  myCreateweightattribs = false;
352  myCreaterestrootattrib = true;
353  myClumpidattrib = "clumpid"_UTsh;
354  myOutputthicknessattrib = true;
355  myThicknessattrib = "width"_UTsh;
356  myThickness = 0.001;
357  myThicknessoverride = 0;
358  myThicknessskinattrib = "thicknessscale"_UTsh;
359  myThicknesstexture = ""_UTsh;
360  myHairprofile = UT_SharedPtr<UT_Ramp>(0);
361  myPointattribs = ""_UTsh;
362  myVertattribs = ""_UTsh;
363  myPrimattribs = ""_UTsh;
364  myDetailattribs = ""_UTsh;
365  myGuidepointattribs = ""_UTsh;
366  myGuideprimattribs = ""_UTsh;
367  myWeightArrayPairs.setSize(0);
368 
369  }
370 
371  explicit SOP_HairGenCoreParms(const SOP_HairGenCoreParms &) = default;
373  SOP_HairGenCoreParms(SOP_HairGenCoreParms &&) noexcept = default;
374  SOP_HairGenCoreParms &operator=(SOP_HairGenCoreParms &&) noexcept = default;
375 
376  ~SOP_HairGenCoreParms() override {}
377 
379  {
380  if (myMode != src.myMode) return false;
381  if (myGroup != src.myGroup) return false;
382  if (myUvattrib != src.myUvattrib) return false;
383  if (myLimittobbox != src.myLimittobbox) return false;
384  if (myBBoxSize != src.myBBoxSize) return false;
385  if (myBBoxCenter != src.myBBoxCenter) return false;
386  if (myPrune != src.myPrune) return false;
387  if (myPruningratio != src.myPruningratio) return false;
388  if (myPrunethicken != src.myPrunethicken) return false;
389  if (myUseguides != src.myUseguides) return false;
390  if (myUniformguidesegments != src.myUniformguidesegments) return false;
391  if (mySkininterp != src.mySkininterp) return false;
392  if (myUseInterpMesh != src.myUseInterpMesh) return false;
393  if (mySkininterpguidesattrib != src.mySkininterpguidesattrib) return false;
394  if (mySkininterpweightsattrib != src.mySkininterpweightsattrib) return false;
395  if (mySkinguidemode != src.mySkinguidemode) return false;
396  if (myGuideblendmethod != src.myGuideblendmethod) return false;
397  if (myGuidegroup != src.myGuidegroup) return false;
398  if (myInfluenceradius != src.myInfluenceradius) return false;
399  if (myInfluenceradiusoverride != src.myInfluenceradiusoverride) return false;
400  if (myInfluenceradiusoptions != src.myInfluenceradiusoptions) return false;
401  if (myInfluenceradiusinrange != src.myInfluenceradiusinrange) return false;
402  if (myInfluenceradiusoutrange != src.myInfluenceradiusoutrange) return false;
403  if (myInfluenceradiusattrib != src.myInfluenceradiusattrib) return false;
404  if (myInfluenceradiustexture != src.myInfluenceradiustexture) return false;
405  if (myInfluenceradiustextureprim != src.myInfluenceradiustextureprim) return false;
406  if (myInfluencedecay != src.myInfluencedecay) return false;
407  if (myInfluencedecayoverride != src.myInfluencedecayoverride) return false;
408  if (myInfluencedecayoptions != src.myInfluencedecayoptions) return false;
409  if (myInfluencedecayinrange != src.myInfluencedecayinrange) return false;
410  if (myInfluencedecayoutrange != src.myInfluencedecayoutrange) return false;
411  if (myInfluencedecayattrib != src.myInfluencedecayattrib) return false;
412  if (myInfluencedecaytexture != src.myInfluencedecaytexture) return false;
413  if (myInfluencedecaytextureprim != src.myInfluencedecaytextureprim) return false;
414  if (myMaxguidecount != src.myMaxguidecount) return false;
415  if (myMaxguidecountoverride != src.myMaxguidecountoverride) return false;
416  if (myMaxguidecountoptions != src.myMaxguidecountoptions) return false;
417  if (myMaxguidecountinrange != src.myMaxguidecountinrange) return false;
418  if (myMaxguidecountoutrange != src.myMaxguidecountoutrange) return false;
419  if (myMaxguidecountattrib != src.myMaxguidecountattrib) return false;
420  if (myMaxguidecounttexture != src.myMaxguidecounttexture) return false;
421  if (myMaxguidecounttextureprim != src.myMaxguidecounttextureprim) return false;
422  if (myMaxguideangle != src.myMaxguideangle) return false;
423  if (myMaxguideangleoverride != src.myMaxguideangleoverride) return false;
424  if (myMaxguideangleoptions != src.myMaxguideangleoptions) return false;
425  if (myMaxguideangleinrange != src.myMaxguideangleinrange) return false;
426  if (myMaxguideangleoutrange != src.myMaxguideangleoutrange) return false;
427  if (myMaxguideangleattrib != src.myMaxguideangleattrib) return false;
428  if (myMaxguideangletexture != src.myMaxguideangletexture) return false;
429  if (myMaxguideangletextureprim != src.myMaxguideangletextureprim) return false;
430  if (myClumpcrossover != src.myClumpcrossover) return false;
431  if (myClumpcrossoveroverride != src.myClumpcrossoveroverride) return false;
432  if (myClumpcrossoveroptions != src.myClumpcrossoveroptions) return false;
433  if (myClumpcrossoverinrange != src.myClumpcrossoverinrange) return false;
434  if (myClumpcrossoveroutrange != src.myClumpcrossoveroutrange) return false;
435  if (myClumpcrossoverattrib != src.myClumpcrossoverattrib) return false;
436  if (myClumpcrossovertexture != src.myClumpcrossovertexture) return false;
437  if (myClumpcrossovertextureprim != src.myClumpcrossovertextureprim) return false;
438  if (myGrowunguided != src.myGrowunguided) return false;
439  if (myUseinitdirattrib != src.myUseinitdirattrib) return false;
440  if (myInitdirattrib != src.myInitdirattrib) return false;
441  if (myUnguidedsegments != src.myUnguidedsegments) return false;
442  if (myUnguidedlength != src.myUnguidedlength) return false;
443  if (myUnguidedlengthoverride != src.myUnguidedlengthoverride) return false;
444  if (myUnguidedlengthoptions != src.myUnguidedlengthoptions) return false;
445  if (myUnguidedlengthinrange != src.myUnguidedlengthinrange) return false;
446  if (myUnguidedlengthoutrange != src.myUnguidedlengthoutrange) return false;
447  if (myUnguidedlengthattrib != src.myUnguidedlengthattrib) return false;
448  if (myUnguidedlengthtexture != src.myUnguidedlengthtexture) return false;
449  if (myUnguidedlengthtextureprim != src.myUnguidedlengthtextureprim) return false;
450  if (myUnguidedminlength != src.myUnguidedminlength) return false;
451  if (myCreateweightattribs != src.myCreateweightattribs) return false;
452  if (myCreaterestrootattrib != src.myCreaterestrootattrib) return false;
453  if (myClumpidattrib != src.myClumpidattrib) return false;
454  if (myOutputthicknessattrib != src.myOutputthicknessattrib) return false;
455  if (myThicknessattrib != src.myThicknessattrib) return false;
456  if (myThickness != src.myThickness) return false;
457  if (myThicknessoverride != src.myThicknessoverride) return false;
458  if (myThicknessskinattrib != src.myThicknessskinattrib) return false;
459  if (myThicknesstexture != src.myThicknesstexture) return false;
460  if (myHairprofile != src.myHairprofile)
461  { if (!myHairprofile || !src.myHairprofile || !(*myHairprofile == *src.myHairprofile)) return false; }
462  if (myPointattribs != src.myPointattribs) return false;
463  if (myVertattribs != src.myVertattribs) return false;
464  if (myPrimattribs != src.myPrimattribs) return false;
465  if (myDetailattribs != src.myDetailattribs) return false;
466  if (myGuidepointattribs != src.myGuidepointattribs) return false;
467  if (myGuideprimattribs != src.myGuideprimattribs) return false;
468  if (myWeightArrayPairs != src.myWeightArrayPairs) return false;
469 
470  return true;
471  }
473  {
474  return !operator==(src);
475  }
486 
487 
488 
489  void buildFromOp(const OP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
490  {
491  myMode = 0;
492  if (true)
493  graph->evalOpParm(myMode, nodeidx, "mode", time, 0);
494  myGroup = ""_UTsh;
495  if (true)
496  graph->evalOpParm(myGroup, nodeidx, "group", time, 0);
497  myUvattrib = "uv"_UTsh;
498  if (true)
499  graph->evalOpParm(myUvattrib, nodeidx, "uvattrib", time, 0);
500  myLimittobbox = false;
501  if (true)
502  graph->evalOpParm(myLimittobbox, nodeidx, "limittobbox", time, 0);
503  myBBoxSize = UT_Vector3D(1,1,1);
504  if (true && ( (true&&!(((getLimittobbox()==0)))) ) )
505  graph->evalOpParm(myBBoxSize, nodeidx, "bboxsize", time, 0);
506  myBBoxCenter = UT_Vector3D(0,0,0);
507  if (true && ( (true&&!(((getLimittobbox()==0)))) ) )
508  graph->evalOpParm(myBBoxCenter, nodeidx, "bboxcenter", time, 0);
509  myPrune = false;
510  if (true)
511  graph->evalOpParm(myPrune, nodeidx, "prune", time, 0);
512  myPruningratio = 0.9;
513  if (true && ( (true&&!(((getPrune()==0)))) ) )
514  graph->evalOpParm(myPruningratio, nodeidx, "pruningratio", time, 0);
515  myPrunethicken = false;
516  if (true && ( (true&&!(((getPrune()==0)))) ) )
517  graph->evalOpParm(myPrunethicken, nodeidx, "prunethicken", time, 0);
518  myUseguides = true;
519  if (true)
520  graph->evalOpParm(myUseguides, nodeidx, "useguides", time, 0);
521  myUniformguidesegments = false;
522  if (true && ( (true&&!(((getUseguides()==0)))) ) )
523  graph->evalOpParm(myUniformguidesegments, nodeidx, "uniformguidesegments", time, 0);
524  mySkininterp = false;
525  if (true && ( (true&&!(((getUseguides()==0)))) ) )
526  graph->evalOpParm(mySkininterp, nodeidx, "skininterp", time, 0);
527  myUseInterpMesh = false;
528  if (true && ( (true&&!(((getUseguides()==0))||((getSkininterp()==0)))) ) )
529  graph->evalOpParm(myUseInterpMesh, nodeidx, "useinterpmesh", time, 0);
530  mySkininterpguidesattrib = "guides"_UTsh;
531  if (true && ( (true&&!(((getUseguides()==0))||((getSkininterp()==0))||((getUseInterpMesh()==0)))) ) )
532  graph->evalOpParm(mySkininterpguidesattrib, nodeidx, "skininterpguidesattrib", time, 0);
533  mySkininterpweightsattrib = "weights"_UTsh;
534  if (true && ( (true&&!(((getUseguides()==0))||((getSkininterp()==0))||((getUseInterpMesh()==0)))) ) )
535  graph->evalOpParm(mySkininterpweightsattrib, nodeidx, "skininterpweightsattrib", time, 0);
536  mySkinguidemode = 0;
537  if (true)
538  graph->evalOpParm(mySkinguidemode, nodeidx, "skinguidemode", time, 0);
539  myGuideblendmethod = 0;
540  if (true)
541  graph->evalOpParm(myGuideblendmethod, nodeidx, "guideblendmethod", time, 0);
542  myGuidegroup = ""_UTsh;
543  if (true && ( (true&&!(((getUseguides()==0))||((getSkininterp()==1)))) ) )
544  graph->evalOpParm(myGuidegroup, nodeidx, "guidegroup", time, 0);
545  myInfluenceradius = 0.05;
546  if (true && ( (true&&!(((getUseguides()==0))||((getSkininterp()==1)))) ) )
547  graph->evalOpParm(myInfluenceradius, nodeidx, "influenceradius", time, 0);
548  myInfluenceradiusoverride = 0;
549  if (true && ( (true&&!(((getUseguides()==0))||((getSkininterp()==1)))) ) )
550  graph->evalOpParm(myInfluenceradiusoverride, nodeidx, "influenceradiusoverride", time, 0);
551  myInfluenceradiusoptions = 0;
552  if (true && ( (true&&!(((getUseguides()==0))||((getSkininterp()==1)))) ) )
553  graph->evalOpParm(myInfluenceradiusoptions, nodeidx, "influenceradiusoptions", time, 0);
554  myInfluenceradiusinrange = UT_Vector2D(0,1);
555  if (true && ( (true&&!(((getUseguides()==0))||((getSkininterp()==1))||((int64(getInfluenceradiusoverride())==0))||((getInfluenceradiusoptions()!=1)&&(getInfluenceradiusoptions()!=3)))) ) )
556  graph->evalOpParm(myInfluenceradiusinrange, nodeidx, "influenceradiusinrange", time, 0);
557  myInfluenceradiusoutrange = UT_Vector2D(0,1);
558  if (true && ( (true&&!(((getUseguides()==0))||((getSkininterp()==1))||((int64(getInfluenceradiusoverride())==0))||((getInfluenceradiusoptions()!=1)&&(getInfluenceradiusoptions()!=3)))) ) )
559  graph->evalOpParm(myInfluenceradiusoutrange, nodeidx, "influenceradiusoutrange", time, 0);
560  myInfluenceradiusattrib = "influenceradiusscale"_UTsh;
561  if (true && ( (true&&!(((getUseguides()==0))||((getSkininterp()==1))||((int64(getInfluenceradiusoverride())!=1)))) ) )
562  graph->evalOpParm(myInfluenceradiusattrib, nodeidx, "influenceradiusattrib", time, 0);
563  myInfluenceradiustexture = ""_UTsh;
564  if (true && ( (true&&!(((getUseguides()==0))||((getSkininterp()==1))||((int64(getInfluenceradiusoverride())!=2)))) ) )
565  graph->evalOpParm(myInfluenceradiustexture, nodeidx, "influenceradiustexture", time, 0);
566  myInfluenceradiustextureprim = "influenceradiusscale"_UTsh;
567  if (true && ( (true&&!(((getUseguides()==0))||((getSkininterp()==1))||((int64(getInfluenceradiusoverride())!=3)))) ) )
568  graph->evalOpParm(myInfluenceradiustextureprim, nodeidx, "influenceradiustextureprim", time, 0);
569  myInfluencedecay = 2;
570  if (true && ( (true&&!(((getUseguides()==0))||((getSkininterp()==1)))) ) )
571  graph->evalOpParm(myInfluencedecay, nodeidx, "influencedecay", time, 0);
572  myInfluencedecayoverride = 0;
573  if (true && ( (true&&!(((getUseguides()==0))||((getSkininterp()==1)))) ) )
574  graph->evalOpParm(myInfluencedecayoverride, nodeidx, "influencedecayoverride", time, 0);
575  myInfluencedecayoptions = 0;
576  if (true && ( (true&&!(((getUseguides()==0))||((getSkininterp()==1)))) ) )
577  graph->evalOpParm(myInfluencedecayoptions, nodeidx, "influencedecayoptions", time, 0);
578  myInfluencedecayinrange = UT_Vector2D(0,1);
579  if (true && ( (true&&!(((getUseguides()==0))||((getSkininterp()==1))||((int64(getInfluencedecayoverride())==0))||((getInfluencedecayoptions()!=1)&&(getInfluencedecayoptions()!=3)))) ) )
580  graph->evalOpParm(myInfluencedecayinrange, nodeidx, "influencedecayinrange", time, 0);
581  myInfluencedecayoutrange = UT_Vector2D(0,1);
582  if (true && ( (true&&!(((getUseguides()==0))||((getSkininterp()==1))||((int64(getInfluencedecayoverride())==0))||((getInfluencedecayoptions()!=1)&&(getInfluencedecayoptions()!=3)))) ) )
583  graph->evalOpParm(myInfluencedecayoutrange, nodeidx, "influencedecayoutrange", time, 0);
584  myInfluencedecayattrib = "influencedecayscale"_UTsh;
585  if (true && ( (true&&!(((getUseguides()==0))||((getSkininterp()==1))||((int64(getInfluencedecayoverride())!=1)))) ) )
586  graph->evalOpParm(myInfluencedecayattrib, nodeidx, "influencedecayattrib", time, 0);
587  myInfluencedecaytexture = ""_UTsh;
588  if (true && ( (true&&!(((getUseguides()==0))||((getSkininterp()==1))||((int64(getInfluencedecayoverride())!=2)))) ) )
589  graph->evalOpParm(myInfluencedecaytexture, nodeidx, "influencedecaytexture", time, 0);
590  myInfluencedecaytextureprim = "influencedecayscale"_UTsh;
591  if (true && ( (true&&!(((getUseguides()==0))||((getSkininterp()==1))||((int64(getInfluencedecayoverride())!=3)))) ) )
592  graph->evalOpParm(myInfluencedecaytextureprim, nodeidx, "influencedecaytextureprim", time, 0);
593  myMaxguidecount = 10;
594  if (true && ( (true&&!(((getUseguides()==0))||((getSkininterp()==1)))) ) )
595  graph->evalOpParm(myMaxguidecount, nodeidx, "maxguidecount", time, 0);
596  myMaxguidecountoverride = 0;
597  if (true && ( (true&&!(((getUseguides()==0))||((getSkininterp()==1)))) ) )
598  graph->evalOpParm(myMaxguidecountoverride, nodeidx, "maxguidecountoverride", time, 0);
599  myMaxguidecountoptions = 0;
600  if (true && ( (true&&!(((getUseguides()==0))||((getSkininterp()==1)))) ) )
601  graph->evalOpParm(myMaxguidecountoptions, nodeidx, "maxguidecountoptions", time, 0);
602  myMaxguidecountinrange = UT_Vector2D(0,1);
603  if (true && ( (true&&!(((getUseguides()==0))||((getSkininterp()==1))||((int64(getMaxguidecountoverride())==0))||((getMaxguidecountoptions()!=1)&&(getMaxguidecountoptions()!=3)))) ) )
604  graph->evalOpParm(myMaxguidecountinrange, nodeidx, "maxguidecountinrange", time, 0);
605  myMaxguidecountoutrange = UT_Vector2D(0,1);
606  if (true && ( (true&&!(((getUseguides()==0))||((getSkininterp()==1))||((int64(getMaxguidecountoverride())==0))||((getMaxguidecountoptions()!=1)&&(getMaxguidecountoptions()!=3)))) ) )
607  graph->evalOpParm(myMaxguidecountoutrange, nodeidx, "maxguidecountoutrange", time, 0);
608  myMaxguidecountattrib = "maxguidecountscale"_UTsh;
609  if (true && ( (true&&!(((getUseguides()==0))||((getSkininterp()==1))||((int64(getMaxguidecountoverride())!=1)))) ) )
610  graph->evalOpParm(myMaxguidecountattrib, nodeidx, "maxguidecountattrib", time, 0);
611  myMaxguidecounttexture = ""_UTsh;
612  if (true && ( (true&&!(((getUseguides()==0))||((getSkininterp()==1))||((int64(getMaxguidecountoverride())!=2)))) ) )
613  graph->evalOpParm(myMaxguidecounttexture, nodeidx, "maxguidecounttexture", time, 0);
614  myMaxguidecounttextureprim = "maxguidecountscale"_UTsh;
615  if (true && ( (true&&!(((getUseguides()==0))||((getSkininterp()==1))||((int64(getMaxguidecountoverride())!=3)))) ) )
616  graph->evalOpParm(myMaxguidecounttextureprim, nodeidx, "maxguidecounttextureprim", time, 0);
617  myMaxguideangle = 90;
618  if (true && ( (true&&!(((getUseguides()==0))||((getSkininterp()==1)))) ) )
619  graph->evalOpParm(myMaxguideangle, nodeidx, "maxguideangle", time, 0);
620  myMaxguideangleoverride = 0;
621  if (true && ( (true&&!(((getUseguides()==0))||((getSkininterp()==1)))) ) )
622  graph->evalOpParm(myMaxguideangleoverride, nodeidx, "maxguideangleoverride", time, 0);
623  myMaxguideangleoptions = 0;
624  if (true && ( (true&&!(((getUseguides()==0))||((getSkininterp()==1)))) ) )
625  graph->evalOpParm(myMaxguideangleoptions, nodeidx, "maxguideangleoptions", time, 0);
626  myMaxguideangleinrange = UT_Vector2D(0,1);
627  if (true && ( (true&&!(((getUseguides()==0))||((getSkininterp()==1))||((int64(getMaxguideangleoverride())==0))||((getMaxguideangleoptions()!=1)&&(getMaxguideangleoptions()!=3)))) ) )
628  graph->evalOpParm(myMaxguideangleinrange, nodeidx, "maxguideangleinrange", time, 0);
629  myMaxguideangleoutrange = UT_Vector2D(0,1);
630  if (true && ( (true&&!(((getUseguides()==0))||((getSkininterp()==1))||((int64(getMaxguideangleoverride())==0))||((getMaxguideangleoptions()!=1)&&(getMaxguideangleoptions()!=3)))) ) )
631  graph->evalOpParm(myMaxguideangleoutrange, nodeidx, "maxguideangleoutrange", time, 0);
632  myMaxguideangleattrib = "maxguideanglescale"_UTsh;
633  if (true && ( (true&&!(((getUseguides()==0))||((getSkininterp()==1))||((int64(getMaxguideangleoverride())!=1)))) ) )
634  graph->evalOpParm(myMaxguideangleattrib, nodeidx, "maxguideangleattrib", time, 0);
635  myMaxguideangletexture = ""_UTsh;
636  if (true && ( (true&&!(((getUseguides()==0))||((getSkininterp()==1))||((int64(getMaxguideangleoverride())!=2)))) ) )
637  graph->evalOpParm(myMaxguideangletexture, nodeidx, "maxguideangletexture", time, 0);
638  myMaxguideangletextureprim = "maxguideanglescale"_UTsh;
639  if (true && ( (true&&!(((getUseguides()==0))||((getSkininterp()==1))||((int64(getMaxguideangleoverride())!=3)))) ) )
640  graph->evalOpParm(myMaxguideangletextureprim, nodeidx, "maxguideangletextureprim", time, 0);
641  myClumpcrossover = 0;
642  if (true && ( (true&&!(((getUseguides()==0)))) ) )
643  graph->evalOpParm(myClumpcrossover, nodeidx, "clumpcrossover", time, 0);
644  myClumpcrossoveroverride = 0;
645  if (true && ( (true&&!(((getUseguides()==0)))) ) )
646  graph->evalOpParm(myClumpcrossoveroverride, nodeidx, "clumpcrossoveroverride", time, 0);
647  myClumpcrossoveroptions = 0;
648  if (true && ( (true&&!(((getUseguides()==0)))) ) )
649  graph->evalOpParm(myClumpcrossoveroptions, nodeidx, "clumpcrossoveroptions", time, 0);
650  myClumpcrossoverinrange = UT_Vector2D(0,1);
651  if (true && ( (true&&!(((getUseguides()==0))||((int64(getClumpcrossoveroverride())==0))||((getClumpcrossoveroptions()!=1)&&(getClumpcrossoveroptions()!=3)))) ) )
652  graph->evalOpParm(myClumpcrossoverinrange, nodeidx, "clumpcrossoverinrange", time, 0);
653  myClumpcrossoveroutrange = UT_Vector2D(0,1);
654  if (true && ( (true&&!(((getUseguides()==0))||((int64(getClumpcrossoveroverride())==0))||((getClumpcrossoveroptions()!=1)&&(getClumpcrossoveroptions()!=3)))) ) )
655  graph->evalOpParm(myClumpcrossoveroutrange, nodeidx, "clumpcrossoveroutrange", time, 0);
656  myClumpcrossoverattrib = "clumpcrossoverscale"_UTsh;
657  if (true && ( (true&&!(((getUseguides()==0))||((int64(getClumpcrossoveroverride())!=1)))) ) )
658  graph->evalOpParm(myClumpcrossoverattrib, nodeidx, "clumpcrossoverattrib", time, 0);
659  myClumpcrossovertexture = ""_UTsh;
660  if (true && ( (true&&!(((getUseguides()==0))||((int64(getClumpcrossoveroverride())!=2)))) ) )
661  graph->evalOpParm(myClumpcrossovertexture, nodeidx, "clumpcrossovertexture", time, 0);
662  myClumpcrossovertextureprim = "clumpcrossoverscale"_UTsh;
663  if (true && ( (true&&!(((getUseguides()==0))||((int64(getClumpcrossoveroverride())!=3)))) ) )
664  graph->evalOpParm(myClumpcrossovertextureprim, nodeidx, "clumpcrossovertextureprim", time, 0);
665  myGrowunguided = true;
666  if (true && ( (true&&!(((getUseguides()==0)))) ) )
667  graph->evalOpParm(myGrowunguided, nodeidx, "growunguided", time, 0);
668  myUseinitdirattrib = true;
669  if (true && ( (true&&!(((getUseguides()==1)&&(getGrowunguided()==0)))) ) )
670  graph->evalOpParm(myUseinitdirattrib, nodeidx, "useinitdirattrib", time, 0);
671  myInitdirattrib = "furdirection"_UTsh;
672  if (true && ( (true&&!(((getUseinitdirattrib()==0))||((getUseguides()==1)&&(getGrowunguided()==0)))) ) )
673  graph->evalOpParm(myInitdirattrib, nodeidx, "initdirattrib", time, 0);
674  myUnguidedsegments = 8;
675  if (true && ( (true&&!(((getUseguides()==1)&&(getGrowunguided()==0)))) ) )
676  graph->evalOpParm(myUnguidedsegments, nodeidx, "unguidedsegments", time, 0);
677  myUnguidedlength = 0.05;
678  if (true && ( (true&&!(((getUseguides()==1)&&(getGrowunguided()==0)))) ) )
679  graph->evalOpParm(myUnguidedlength, nodeidx, "unguidedlength", time, 0);
680  myUnguidedlengthoverride = 0;
681  if (true && ( (true&&!(((getUseguides()==1)&&(getGrowunguided()==0)))) ) )
682  graph->evalOpParm(myUnguidedlengthoverride, nodeidx, "unguidedlengthoverride", time, 0);
683  myUnguidedlengthoptions = 0;
684  if (true && ( (true&&!(((getUseguides()==1)&&(getGrowunguided()==0)))) ) )
685  graph->evalOpParm(myUnguidedlengthoptions, nodeidx, "unguidedlengthoptions", time, 0);
686  myUnguidedlengthinrange = UT_Vector2D(0,1);
687  if (true && ( (true&&!(((getUseguides()==1)&&(getGrowunguided()==0))||((int64(getUnguidedlengthoverride())==0))||((getUnguidedlengthoptions()!=1)&&(getUnguidedlengthoptions()!=3)))) ) )
688  graph->evalOpParm(myUnguidedlengthinrange, nodeidx, "unguidedlengthinrange", time, 0);
689  myUnguidedlengthoutrange = UT_Vector2D(0,1);
690  if (true && ( (true&&!(((getUseguides()==1)&&(getGrowunguided()==0))||((int64(getUnguidedlengthoverride())==0))||((getUnguidedlengthoptions()!=1)&&(getUnguidedlengthoptions()!=3)))) ) )
691  graph->evalOpParm(myUnguidedlengthoutrange, nodeidx, "unguidedlengthoutrange", time, 0);
692  myUnguidedlengthattrib = "unguidedlengthscale"_UTsh;
693  if (true && ( (true&&!(((getUseguides()==1)&&(getGrowunguided()==0))||((int64(getUnguidedlengthoverride())!=1)))) ) )
694  graph->evalOpParm(myUnguidedlengthattrib, nodeidx, "unguidedlengthattrib", time, 0);
695  myUnguidedlengthtexture = ""_UTsh;
696  if (true && ( (true&&!(((getUseguides()==1)&&(getGrowunguided()==0))||((int64(getUnguidedlengthoverride())!=2)))) ) )
697  graph->evalOpParm(myUnguidedlengthtexture, nodeidx, "unguidedlengthtexture", time, 0);
698  myUnguidedlengthtextureprim = "unguidedlengthscale"_UTsh;
699  if (true && ( (true&&!(((getUseguides()==1)&&(getGrowunguided()==0))||((int64(getUnguidedlengthoverride())!=3)))) ) )
700  graph->evalOpParm(myUnguidedlengthtextureprim, nodeidx, "unguidedlengthtextureprim", time, 0);
701  myUnguidedminlength = 1e-05;
702  if (true && ( (true&&!(((getUseguides()==1)&&(getGrowunguided()==0)))) ) )
703  graph->evalOpParm(myUnguidedminlength, nodeidx, "unguidedminlength", time, 0);
704  myCreateweightattribs = false;
705  if (true && ( (true&&!(((getUseguides()==0)))) ) )
706  graph->evalOpParm(myCreateweightattribs, nodeidx, "createweightattribs", time, 0);
707  myCreaterestrootattrib = true;
708  if (true)
709  graph->evalOpParm(myCreaterestrootattrib, nodeidx, "createrestrootattrib", time, 0);
710  myClumpidattrib = "clumpid"_UTsh;
711  if (true)
712  graph->evalOpParm(myClumpidattrib, nodeidx, "clumpidattrib", time, 0);
713  myOutputthicknessattrib = true;
714  if (true)
715  graph->evalOpParm(myOutputthicknessattrib, nodeidx, "outputthicknessattrib", time, 0);
716  myThicknessattrib = "width"_UTsh;
717  if (true && ( (true&&!(((getOutputthicknessattrib()==0)))) ) )
718  graph->evalOpParm(myThicknessattrib, nodeidx, "thicknessattrib", time, 0);
719  myThickness = 0.001;
720  if (true && ( (true&&!(((getOutputthicknessattrib()==0)))) ) )
721  graph->evalOpParm(myThickness, nodeidx, "thickness", time, 0);
722  myThicknessoverride = 0;
723  if (true && ( (true&&!(((getOutputthicknessattrib()==0)))) ) )
724  graph->evalOpParm(myThicknessoverride, nodeidx, "thicknessoverride", time, 0);
725  myThicknessskinattrib = "thicknessscale"_UTsh;
726  if (true && ( (true&&!(((getOutputthicknessattrib()==0))||((int64(getThicknessoverride())!=1)))) ) )
727  graph->evalOpParm(myThicknessskinattrib, nodeidx, "thicknessskinattrib", time, 0);
728  myThicknesstexture = ""_UTsh;
729  if (true && ( (true&&!(((getOutputthicknessattrib()==0))||((int64(getThicknessoverride())!=2)))) ) )
730  graph->evalOpParm(myThicknesstexture, nodeidx, "thicknesstexture", time, 0);
731  myHairprofile = UT_SharedPtr<UT_Ramp>(0);
732  if (true && ( (true&&!(((getOutputthicknessattrib()==0)))) ) )
733  graph->evalOpParm(myHairprofile, nodeidx, "hairprofile", time, 0);
734  myPointattribs = ""_UTsh;
735  if (true)
736  graph->evalOpParm(myPointattribs, nodeidx, "pointattribs", time, 0);
737  myVertattribs = ""_UTsh;
738  if (true && ( (true&&!(((int64(getMode())!=0)))) ) )
739  graph->evalOpParm(myVertattribs, nodeidx, "vertattribs", time, 0);
740  myPrimattribs = ""_UTsh;
741  if (true && ( (true&&!(((int64(getMode())!=0)))) ) )
742  graph->evalOpParm(myPrimattribs, nodeidx, "primattribs", time, 0);
743  myDetailattribs = ""_UTsh;
744  if (true)
745  graph->evalOpParm(myDetailattribs, nodeidx, "detailattribs", time, 0);
746  myGuidepointattribs = ""_UTsh;
747  if (true)
748  graph->evalOpParm(myGuidepointattribs, nodeidx, "guidepointattribs", time, 0);
749  myGuideprimattribs = ""_UTsh;
750  if (true)
751  graph->evalOpParm(myGuideprimattribs, nodeidx, "guideprimattribs", time, 0);
752  if (true)
753  {
754  int64 length = 0;
755  graph->evalOpParm(length, nodeidx, "folder_weightarraypairs", time, 0);
756  if (length < 0) length = 0;
757  myWeightArrayPairs.setSize(length);
758  for (exint i = 0; i < length; i++)
759  {
760  int parmidx[1];
761  int offsets[1];
762  parmidx[0] = i+0;
763  offsets[0] = 0;
764  auto && _curentry = myWeightArrayPairs(i);
765  (void) _curentry;
766  _curentry.guideindexattrib = "guides"_UTsh;
767  if (true)
768  graph->evalOpParmInst(_curentry.guideindexattrib, nodeidx, "guideindexattrib#", parmidx, offsets, time, 0, 2-1);
769  _curentry.guideweightattrib = "weights"_UTsh;
770  if (true)
771  graph->evalOpParmInst(_curentry.guideweightattrib, nodeidx, "guideweightattrib#", parmidx, offsets, time, 0, 2-1);
772 
773  }
774  }
775  else
776  myWeightArrayPairs.clear();
777 
778  }
779 
780 
781  void loadFromOpSubclass(const LoadParms &loadparms) override
782  {
783  buildFromOp(loadparms.graph(), loadparms.nodeIdx(), loadparms.context().getTime(), loadparms.depnode());
784  }
785 
786 
787  void copyFrom(const OP_NodeParms *src) override
788  {
789  *this = *((const SOP_HairGenCoreParms *)src);
790  }
791 
792  template <typename T>
793  void
794  doGetParmValue(TempIndex idx, TempIndex instance, T &value) const
795  {
796  if (idx.size() < 1)
797  return;
798  UT_ASSERT(idx.size() == instance.size()+1);
799  if (idx.size() != instance.size()+1)
800  return;
801  switch (idx[0])
802  {
803  case 0:
804  coerceValue(value, myMode);
805  break;
806  case 1:
807  coerceValue(value, myGroup);
808  break;
809  case 2:
810  coerceValue(value, myUvattrib);
811  break;
812  case 3:
813  coerceValue(value, myLimittobbox);
814  break;
815  case 4:
816  coerceValue(value, myBBoxSize);
817  break;
818  case 5:
819  coerceValue(value, myBBoxCenter);
820  break;
821  case 6:
822  coerceValue(value, myPrune);
823  break;
824  case 7:
825  coerceValue(value, myPruningratio);
826  break;
827  case 8:
828  coerceValue(value, myPrunethicken);
829  break;
830  case 9:
831  coerceValue(value, myUseguides);
832  break;
833  case 10:
834  coerceValue(value, myUniformguidesegments);
835  break;
836  case 11:
837  coerceValue(value, mySkininterp);
838  break;
839  case 12:
840  coerceValue(value, myUseInterpMesh);
841  break;
842  case 13:
843  coerceValue(value, mySkininterpguidesattrib);
844  break;
845  case 14:
846  coerceValue(value, mySkininterpweightsattrib);
847  break;
848  case 15:
849  coerceValue(value, mySkinguidemode);
850  break;
851  case 16:
852  coerceValue(value, myGuideblendmethod);
853  break;
854  case 17:
855  coerceValue(value, myGuidegroup);
856  break;
857  case 18:
858  coerceValue(value, myInfluenceradius);
859  break;
860  case 19:
861  coerceValue(value, myInfluenceradiusoverride);
862  break;
863  case 20:
864  coerceValue(value, myInfluenceradiusoptions);
865  break;
866  case 21:
867  coerceValue(value, myInfluenceradiusinrange);
868  break;
869  case 22:
870  coerceValue(value, myInfluenceradiusoutrange);
871  break;
872  case 23:
873  coerceValue(value, myInfluenceradiusattrib);
874  break;
875  case 24:
876  coerceValue(value, myInfluenceradiustexture);
877  break;
878  case 25:
879  coerceValue(value, myInfluenceradiustextureprim);
880  break;
881  case 26:
882  coerceValue(value, myInfluencedecay);
883  break;
884  case 27:
885  coerceValue(value, myInfluencedecayoverride);
886  break;
887  case 28:
888  coerceValue(value, myInfluencedecayoptions);
889  break;
890  case 29:
891  coerceValue(value, myInfluencedecayinrange);
892  break;
893  case 30:
894  coerceValue(value, myInfluencedecayoutrange);
895  break;
896  case 31:
897  coerceValue(value, myInfluencedecayattrib);
898  break;
899  case 32:
900  coerceValue(value, myInfluencedecaytexture);
901  break;
902  case 33:
903  coerceValue(value, myInfluencedecaytextureprim);
904  break;
905  case 34:
906  coerceValue(value, myMaxguidecount);
907  break;
908  case 35:
909  coerceValue(value, myMaxguidecountoverride);
910  break;
911  case 36:
912  coerceValue(value, myMaxguidecountoptions);
913  break;
914  case 37:
915  coerceValue(value, myMaxguidecountinrange);
916  break;
917  case 38:
918  coerceValue(value, myMaxguidecountoutrange);
919  break;
920  case 39:
921  coerceValue(value, myMaxguidecountattrib);
922  break;
923  case 40:
924  coerceValue(value, myMaxguidecounttexture);
925  break;
926  case 41:
927  coerceValue(value, myMaxguidecounttextureprim);
928  break;
929  case 42:
930  coerceValue(value, myMaxguideangle);
931  break;
932  case 43:
933  coerceValue(value, myMaxguideangleoverride);
934  break;
935  case 44:
936  coerceValue(value, myMaxguideangleoptions);
937  break;
938  case 45:
939  coerceValue(value, myMaxguideangleinrange);
940  break;
941  case 46:
942  coerceValue(value, myMaxguideangleoutrange);
943  break;
944  case 47:
945  coerceValue(value, myMaxguideangleattrib);
946  break;
947  case 48:
948  coerceValue(value, myMaxguideangletexture);
949  break;
950  case 49:
951  coerceValue(value, myMaxguideangletextureprim);
952  break;
953  case 50:
954  coerceValue(value, myClumpcrossover);
955  break;
956  case 51:
957  coerceValue(value, myClumpcrossoveroverride);
958  break;
959  case 52:
960  coerceValue(value, myClumpcrossoveroptions);
961  break;
962  case 53:
963  coerceValue(value, myClumpcrossoverinrange);
964  break;
965  case 54:
966  coerceValue(value, myClumpcrossoveroutrange);
967  break;
968  case 55:
969  coerceValue(value, myClumpcrossoverattrib);
970  break;
971  case 56:
972  coerceValue(value, myClumpcrossovertexture);
973  break;
974  case 57:
975  coerceValue(value, myClumpcrossovertextureprim);
976  break;
977  case 58:
978  coerceValue(value, myGrowunguided);
979  break;
980  case 59:
981  coerceValue(value, myUseinitdirattrib);
982  break;
983  case 60:
984  coerceValue(value, myInitdirattrib);
985  break;
986  case 61:
987  coerceValue(value, myUnguidedsegments);
988  break;
989  case 62:
990  coerceValue(value, myUnguidedlength);
991  break;
992  case 63:
993  coerceValue(value, myUnguidedlengthoverride);
994  break;
995  case 64:
996  coerceValue(value, myUnguidedlengthoptions);
997  break;
998  case 65:
999  coerceValue(value, myUnguidedlengthinrange);
1000  break;
1001  case 66:
1002  coerceValue(value, myUnguidedlengthoutrange);
1003  break;
1004  case 67:
1005  coerceValue(value, myUnguidedlengthattrib);
1006  break;
1007  case 68:
1008  coerceValue(value, myUnguidedlengthtexture);
1009  break;
1010  case 69:
1011  coerceValue(value, myUnguidedlengthtextureprim);
1012  break;
1013  case 70:
1014  coerceValue(value, myUnguidedminlength);
1015  break;
1016  case 71:
1017  coerceValue(value, myCreateweightattribs);
1018  break;
1019  case 72:
1020  coerceValue(value, myCreaterestrootattrib);
1021  break;
1022  case 73:
1023  coerceValue(value, myClumpidattrib);
1024  break;
1025  case 74:
1026  coerceValue(value, myOutputthicknessattrib);
1027  break;
1028  case 75:
1029  coerceValue(value, myThicknessattrib);
1030  break;
1031  case 76:
1032  coerceValue(value, myThickness);
1033  break;
1034  case 77:
1035  coerceValue(value, myThicknessoverride);
1036  break;
1037  case 78:
1038  coerceValue(value, myThicknessskinattrib);
1039  break;
1040  case 79:
1041  coerceValue(value, myThicknesstexture);
1042  break;
1043  case 80:
1044  coerceValue(value, myHairprofile);
1045  break;
1046  case 81:
1047  coerceValue(value, myPointattribs);
1048  break;
1049  case 82:
1050  coerceValue(value, myVertattribs);
1051  break;
1052  case 83:
1053  coerceValue(value, myPrimattribs);
1054  break;
1055  case 84:
1056  coerceValue(value, myDetailattribs);
1057  break;
1058  case 85:
1059  coerceValue(value, myGuidepointattribs);
1060  break;
1061  case 86:
1062  coerceValue(value, myGuideprimattribs);
1063  break;
1064  case 87:
1065  if (idx.size() == 1)
1066  coerceValue(value, myWeightArrayPairs.entries());
1067  else if (instance[0] < myWeightArrayPairs.entries())
1068  {
1069  auto && _data = myWeightArrayPairs(instance[0]);
1070  switch (idx[1])
1071  {
1072  case 0:
1073  coerceValue(value, _data.guideindexattrib);
1074  break;
1075  case 1:
1076  coerceValue(value, _data.guideweightattrib);
1077  break;
1078 
1079  }
1080  }
1081  break;
1082 
1083  }
1084  }
1085 
1086  bool isParmColorRamp(exint idx) const override
1087  {
1088  switch (idx)
1089  {
1090 
1091  }
1092  return false;
1093  }
1094 
1095  void getNestParmValue(TempIndex idx, TempIndex instance, exint &value) const override
1096  { doGetParmValue(idx, instance, value); }
1097  void getNestParmValue(TempIndex idx, TempIndex instance, fpreal &value) const override
1098  { doGetParmValue(idx, instance, value); }
1099  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector2D &value) const override
1100  { doGetParmValue(idx, instance, value); }
1101  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector3D &value) const override
1102  { doGetParmValue(idx, instance, value); }
1103  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector4D &value) const override
1104  { doGetParmValue(idx, instance, value); }
1105  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix2D &value) const override
1106  { doGetParmValue(idx, instance, value); }
1107  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
1108  { doGetParmValue(idx, instance, value); }
1109  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix4D &value) const override
1110  { doGetParmValue(idx, instance, value); }
1111  void getNestParmValue(TempIndex idx, TempIndex instance, UT_StringHolder &value) const override
1112  { doGetParmValue(idx, instance, value); }
1113  void getNestParmValue(TempIndex idx, TempIndex instance, UT_SharedPtr<UT_Ramp> &value) const override
1114  { doGetParmValue(idx, instance, value); }
1115  void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
1116  { doGetParmValue(idx, instance, value); }
1117 
1118  template <typename T>
1119  void
1120  doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
1121  {
1122  if (idx.size() < 1)
1123  return;
1124  UT_ASSERT(idx.size() == instance.size()+1);
1125  if (idx.size() != instance.size()+1)
1126  return;
1127  switch (idx[0])
1128  {
1129  case 0:
1130  coerceValue(myMode, clampMinValue(0, clampMaxValue(1, value ) ));
1131  break;
1132  case 1:
1133  coerceValue(myGroup, ( ( value ) ));
1134  break;
1135  case 2:
1136  coerceValue(myUvattrib, ( ( value ) ));
1137  break;
1138  case 3:
1139  coerceValue(myLimittobbox, ( ( value ) ));
1140  break;
1141  case 4:
1142  coerceValue(myBBoxSize, ( ( value ) ));
1143  break;
1144  case 5:
1145  coerceValue(myBBoxCenter, ( ( value ) ));
1146  break;
1147  case 6:
1148  coerceValue(myPrune, ( ( value ) ));
1149  break;
1150  case 7:
1151  coerceValue(myPruningratio, ( ( value ) ));
1152  break;
1153  case 8:
1154  coerceValue(myPrunethicken, ( ( value ) ));
1155  break;
1156  case 9:
1157  coerceValue(myUseguides, ( ( value ) ));
1158  break;
1159  case 10:
1160  coerceValue(myUniformguidesegments, ( ( value ) ));
1161  break;
1162  case 11:
1163  coerceValue(mySkininterp, ( ( value ) ));
1164  break;
1165  case 12:
1166  coerceValue(myUseInterpMesh, ( ( value ) ));
1167  break;
1168  case 13:
1169  coerceValue(mySkininterpguidesattrib, ( ( value ) ));
1170  break;
1171  case 14:
1172  coerceValue(mySkininterpweightsattrib, ( ( value ) ));
1173  break;
1174  case 15:
1175  coerceValue(mySkinguidemode, clampMinValue(0, clampMaxValue(1, value ) ));
1176  break;
1177  case 16:
1178  coerceValue(myGuideblendmethod, clampMinValue(0, clampMaxValue(1, value ) ));
1179  break;
1180  case 17:
1181  coerceValue(myGuidegroup, ( ( value ) ));
1182  break;
1183  case 18:
1184  coerceValue(myInfluenceradius, ( ( value ) ));
1185  break;
1186  case 19:
1187  coerceValue(myInfluenceradiusoverride, clampMinValue(0, clampMaxValue(3, value ) ));
1188  break;
1189  case 20:
1190  coerceValue(myInfluenceradiusoptions, ( ( value ) ));
1191  break;
1192  case 21:
1193  coerceValue(myInfluenceradiusinrange, ( ( value ) ));
1194  break;
1195  case 22:
1196  coerceValue(myInfluenceradiusoutrange, ( ( value ) ));
1197  break;
1198  case 23:
1199  coerceValue(myInfluenceradiusattrib, ( ( value ) ));
1200  break;
1201  case 24:
1202  coerceValue(myInfluenceradiustexture, ( ( value ) ));
1203  break;
1204  case 25:
1205  coerceValue(myInfluenceradiustextureprim, ( ( value ) ));
1206  break;
1207  case 26:
1208  coerceValue(myInfluencedecay, ( ( value ) ));
1209  break;
1210  case 27:
1211  coerceValue(myInfluencedecayoverride, clampMinValue(0, clampMaxValue(3, value ) ));
1212  break;
1213  case 28:
1214  coerceValue(myInfluencedecayoptions, ( ( value ) ));
1215  break;
1216  case 29:
1217  coerceValue(myInfluencedecayinrange, ( ( value ) ));
1218  break;
1219  case 30:
1220  coerceValue(myInfluencedecayoutrange, ( ( value ) ));
1221  break;
1222  case 31:
1223  coerceValue(myInfluencedecayattrib, ( ( value ) ));
1224  break;
1225  case 32:
1226  coerceValue(myInfluencedecaytexture, ( ( value ) ));
1227  break;
1228  case 33:
1229  coerceValue(myInfluencedecaytextureprim, ( ( value ) ));
1230  break;
1231  case 34:
1232  coerceValue(myMaxguidecount, ( ( value ) ));
1233  break;
1234  case 35:
1235  coerceValue(myMaxguidecountoverride, clampMinValue(0, clampMaxValue(3, value ) ));
1236  break;
1237  case 36:
1238  coerceValue(myMaxguidecountoptions, ( ( value ) ));
1239  break;
1240  case 37:
1241  coerceValue(myMaxguidecountinrange, ( ( value ) ));
1242  break;
1243  case 38:
1244  coerceValue(myMaxguidecountoutrange, ( ( value ) ));
1245  break;
1246  case 39:
1247  coerceValue(myMaxguidecountattrib, ( ( value ) ));
1248  break;
1249  case 40:
1250  coerceValue(myMaxguidecounttexture, ( ( value ) ));
1251  break;
1252  case 41:
1253  coerceValue(myMaxguidecounttextureprim, ( ( value ) ));
1254  break;
1255  case 42:
1256  coerceValue(myMaxguideangle, clampMinValue(0, clampMaxValue(180, value ) ));
1257  break;
1258  case 43:
1259  coerceValue(myMaxguideangleoverride, clampMinValue(0, clampMaxValue(3, value ) ));
1260  break;
1261  case 44:
1262  coerceValue(myMaxguideangleoptions, ( ( value ) ));
1263  break;
1264  case 45:
1265  coerceValue(myMaxguideangleinrange, ( ( value ) ));
1266  break;
1267  case 46:
1268  coerceValue(myMaxguideangleoutrange, ( ( value ) ));
1269  break;
1270  case 47:
1271  coerceValue(myMaxguideangleattrib, ( ( value ) ));
1272  break;
1273  case 48:
1274  coerceValue(myMaxguideangletexture, ( ( value ) ));
1275  break;
1276  case 49:
1277  coerceValue(myMaxguideangletextureprim, ( ( value ) ));
1278  break;
1279  case 50:
1280  coerceValue(myClumpcrossover, ( ( value ) ));
1281  break;
1282  case 51:
1283  coerceValue(myClumpcrossoveroverride, clampMinValue(0, clampMaxValue(3, value ) ));
1284  break;
1285  case 52:
1286  coerceValue(myClumpcrossoveroptions, ( ( value ) ));
1287  break;
1288  case 53:
1289  coerceValue(myClumpcrossoverinrange, ( ( value ) ));
1290  break;
1291  case 54:
1292  coerceValue(myClumpcrossoveroutrange, ( ( value ) ));
1293  break;
1294  case 55:
1295  coerceValue(myClumpcrossoverattrib, ( ( value ) ));
1296  break;
1297  case 56:
1298  coerceValue(myClumpcrossovertexture, ( ( value ) ));
1299  break;
1300  case 57:
1301  coerceValue(myClumpcrossovertextureprim, ( ( value ) ));
1302  break;
1303  case 58:
1304  coerceValue(myGrowunguided, ( ( value ) ));
1305  break;
1306  case 59:
1307  coerceValue(myUseinitdirattrib, ( ( value ) ));
1308  break;
1309  case 60:
1310  coerceValue(myInitdirattrib, ( ( value ) ));
1311  break;
1312  case 61:
1313  coerceValue(myUnguidedsegments, clampMinValue(1, ( value ) ));
1314  break;
1315  case 62:
1316  coerceValue(myUnguidedlength, ( ( value ) ));
1317  break;
1318  case 63:
1319  coerceValue(myUnguidedlengthoverride, clampMinValue(0, clampMaxValue(3, value ) ));
1320  break;
1321  case 64:
1322  coerceValue(myUnguidedlengthoptions, ( ( value ) ));
1323  break;
1324  case 65:
1325  coerceValue(myUnguidedlengthinrange, ( ( value ) ));
1326  break;
1327  case 66:
1328  coerceValue(myUnguidedlengthoutrange, ( ( value ) ));
1329  break;
1330  case 67:
1331  coerceValue(myUnguidedlengthattrib, ( ( value ) ));
1332  break;
1333  case 68:
1334  coerceValue(myUnguidedlengthtexture, ( ( value ) ));
1335  break;
1336  case 69:
1337  coerceValue(myUnguidedlengthtextureprim, ( ( value ) ));
1338  break;
1339  case 70:
1340  coerceValue(myUnguidedminlength, ( ( value ) ));
1341  break;
1342  case 71:
1343  coerceValue(myCreateweightattribs, ( ( value ) ));
1344  break;
1345  case 72:
1346  coerceValue(myCreaterestrootattrib, ( ( value ) ));
1347  break;
1348  case 73:
1349  coerceValue(myClumpidattrib, ( ( value ) ));
1350  break;
1351  case 74:
1352  coerceValue(myOutputthicknessattrib, ( ( value ) ));
1353  break;
1354  case 75:
1355  coerceValue(myThicknessattrib, ( ( value ) ));
1356  break;
1357  case 76:
1358  coerceValue(myThickness, ( ( value ) ));
1359  break;
1360  case 77:
1361  coerceValue(myThicknessoverride, clampMinValue(0, clampMaxValue(2, value ) ));
1362  break;
1363  case 78:
1364  coerceValue(myThicknessskinattrib, ( ( value ) ));
1365  break;
1366  case 79:
1367  coerceValue(myThicknesstexture, ( ( value ) ));
1368  break;
1369  case 80:
1370  coerceValue(myHairprofile, clampMinValue(1, ( value ) ));
1371  break;
1372  case 81:
1373  coerceValue(myPointattribs, ( ( value ) ));
1374  break;
1375  case 82:
1376  coerceValue(myVertattribs, ( ( value ) ));
1377  break;
1378  case 83:
1379  coerceValue(myPrimattribs, ( ( value ) ));
1380  break;
1381  case 84:
1382  coerceValue(myDetailattribs, ( ( value ) ));
1383  break;
1384  case 85:
1385  coerceValue(myGuidepointattribs, ( ( value ) ));
1386  break;
1387  case 86:
1388  coerceValue(myGuideprimattribs, ( ( value ) ));
1389  break;
1390  case 87:
1391  if (idx.size() == 1)
1392  {
1393  exint newsize;
1394  coerceValue(newsize, value);
1395  if (newsize < 0) newsize = 0;
1396  myWeightArrayPairs.setSize(newsize);
1397  }
1398  else
1399  {
1400  if (instance[0] < 0)
1401  return;
1402  myWeightArrayPairs.setSizeIfNeeded(instance[0]+1);
1403  auto && _data = myWeightArrayPairs(instance[0]);
1404  switch (idx[1])
1405  {
1406  case 0:
1407  coerceValue(_data.guideindexattrib, value);
1408  break;
1409  case 1:
1410  coerceValue(_data.guideweightattrib, value);
1411  break;
1412 
1413  }
1414  }
1415  break;
1416 
1417  }
1418  }
1419 
1420  void setNestParmValue(TempIndex idx, TempIndex instance, const exint &value) override
1421  { doSetParmValue(idx, instance, value); }
1422  void setNestParmValue(TempIndex idx, TempIndex instance, const fpreal &value) override
1423  { doSetParmValue(idx, instance, value); }
1424  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector2D &value) override
1425  { doSetParmValue(idx, instance, value); }
1426  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector3D &value) override
1427  { doSetParmValue(idx, instance, value); }
1428  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector4D &value) override
1429  { doSetParmValue(idx, instance, value); }
1430  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix2D &value) override
1431  { doSetParmValue(idx, instance, value); }
1432  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix3D &value) override
1433  { doSetParmValue(idx, instance, value); }
1434  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix4D &value) override
1435  { doSetParmValue(idx, instance, value); }
1436  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_StringHolder &value) override
1437  { doSetParmValue(idx, instance, value); }
1438  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_SharedPtr<UT_Ramp> &value) override
1439  { doSetParmValue(idx, instance, value); }
1440  void setNestParmValue(TempIndex idx, TempIndex instance, const PRM_DataItemHandle &value) override
1441  { doSetParmValue(idx, instance, value); }
1442 
1443  exint getNestNumParms(TempIndex idx) const override
1444  {
1445  if (idx.size() == 0)
1446  return 88;
1447  switch (idx[0])
1448  {
1449  case 87:
1450  return 2;
1451 
1452  }
1453  // Invalid
1454  return 0;
1455  }
1456 
1457  const char *getNestParmName(TempIndex fieldnum) const override
1458  {
1459  if (fieldnum.size() < 1)
1460  return 0;
1461  switch (fieldnum[0])
1462  {
1463  case 0:
1464  return "mode";
1465  case 1:
1466  return "group";
1467  case 2:
1468  return "uvattrib";
1469  case 3:
1470  return "limittobbox";
1471  case 4:
1472  return "bboxsize";
1473  case 5:
1474  return "bboxcenter";
1475  case 6:
1476  return "prune";
1477  case 7:
1478  return "pruningratio";
1479  case 8:
1480  return "prunethicken";
1481  case 9:
1482  return "useguides";
1483  case 10:
1484  return "uniformguidesegments";
1485  case 11:
1486  return "skininterp";
1487  case 12:
1488  return "useinterpmesh";
1489  case 13:
1490  return "skininterpguidesattrib";
1491  case 14:
1492  return "skininterpweightsattrib";
1493  case 15:
1494  return "skinguidemode";
1495  case 16:
1496  return "guideblendmethod";
1497  case 17:
1498  return "guidegroup";
1499  case 18:
1500  return "influenceradius";
1501  case 19:
1502  return "influenceradiusoverride";
1503  case 20:
1504  return "influenceradiusoptions";
1505  case 21:
1506  return "influenceradiusinrange";
1507  case 22:
1508  return "influenceradiusoutrange";
1509  case 23:
1510  return "influenceradiusattrib";
1511  case 24:
1512  return "influenceradiustexture";
1513  case 25:
1514  return "influenceradiustextureprim";
1515  case 26:
1516  return "influencedecay";
1517  case 27:
1518  return "influencedecayoverride";
1519  case 28:
1520  return "influencedecayoptions";
1521  case 29:
1522  return "influencedecayinrange";
1523  case 30:
1524  return "influencedecayoutrange";
1525  case 31:
1526  return "influencedecayattrib";
1527  case 32:
1528  return "influencedecaytexture";
1529  case 33:
1530  return "influencedecaytextureprim";
1531  case 34:
1532  return "maxguidecount";
1533  case 35:
1534  return "maxguidecountoverride";
1535  case 36:
1536  return "maxguidecountoptions";
1537  case 37:
1538  return "maxguidecountinrange";
1539  case 38:
1540  return "maxguidecountoutrange";
1541  case 39:
1542  return "maxguidecountattrib";
1543  case 40:
1544  return "maxguidecounttexture";
1545  case 41:
1546  return "maxguidecounttextureprim";
1547  case 42:
1548  return "maxguideangle";
1549  case 43:
1550  return "maxguideangleoverride";
1551  case 44:
1552  return "maxguideangleoptions";
1553  case 45:
1554  return "maxguideangleinrange";
1555  case 46:
1556  return "maxguideangleoutrange";
1557  case 47:
1558  return "maxguideangleattrib";
1559  case 48:
1560  return "maxguideangletexture";
1561  case 49:
1562  return "maxguideangletextureprim";
1563  case 50:
1564  return "clumpcrossover";
1565  case 51:
1566  return "clumpcrossoveroverride";
1567  case 52:
1568  return "clumpcrossoveroptions";
1569  case 53:
1570  return "clumpcrossoverinrange";
1571  case 54:
1572  return "clumpcrossoveroutrange";
1573  case 55:
1574  return "clumpcrossoverattrib";
1575  case 56:
1576  return "clumpcrossovertexture";
1577  case 57:
1578  return "clumpcrossovertextureprim";
1579  case 58:
1580  return "growunguided";
1581  case 59:
1582  return "useinitdirattrib";
1583  case 60:
1584  return "initdirattrib";
1585  case 61:
1586  return "unguidedsegments";
1587  case 62:
1588  return "unguidedlength";
1589  case 63:
1590  return "unguidedlengthoverride";
1591  case 64:
1592  return "unguidedlengthoptions";
1593  case 65:
1594  return "unguidedlengthinrange";
1595  case 66:
1596  return "unguidedlengthoutrange";
1597  case 67:
1598  return "unguidedlengthattrib";
1599  case 68:
1600  return "unguidedlengthtexture";
1601  case 69:
1602  return "unguidedlengthtextureprim";
1603  case 70:
1604  return "unguidedminlength";
1605  case 71:
1606  return "createweightattribs";
1607  case 72:
1608  return "createrestrootattrib";
1609  case 73:
1610  return "clumpidattrib";
1611  case 74:
1612  return "outputthicknessattrib";
1613  case 75:
1614  return "thicknessattrib";
1615  case 76:
1616  return "thickness";
1617  case 77:
1618  return "thicknessoverride";
1619  case 78:
1620  return "thicknessskinattrib";
1621  case 79:
1622  return "thicknesstexture";
1623  case 80:
1624  return "hairprofile";
1625  case 81:
1626  return "pointattribs";
1627  case 82:
1628  return "vertattribs";
1629  case 83:
1630  return "primattribs";
1631  case 84:
1632  return "detailattribs";
1633  case 85:
1634  return "guidepointattribs";
1635  case 86:
1636  return "guideprimattribs";
1637  case 87:
1638  if (fieldnum.size() == 1)
1639  return "folder_weightarraypairs";
1640  switch (fieldnum[1])
1641  {
1642  case 0:
1643  return "guideindexattrib#";
1644  case 1:
1645  return "guideweightattrib#";
1646 
1647  }
1648  return 0;
1649 
1650  }
1651  return 0;
1652  }
1653 
1654  ParmType getNestParmType(TempIndex fieldnum) const override
1655  {
1656  if (fieldnum.size() < 1)
1657  return PARM_UNSUPPORTED;
1658  switch (fieldnum[0])
1659  {
1660  case 0:
1661  return PARM_INTEGER;
1662  case 1:
1663  return PARM_STRING;
1664  case 2:
1665  return PARM_STRING;
1666  case 3:
1667  return PARM_INTEGER;
1668  case 4:
1669  return PARM_VECTOR3;
1670  case 5:
1671  return PARM_VECTOR3;
1672  case 6:
1673  return PARM_INTEGER;
1674  case 7:
1675  return PARM_FLOAT;
1676  case 8:
1677  return PARM_INTEGER;
1678  case 9:
1679  return PARM_INTEGER;
1680  case 10:
1681  return PARM_INTEGER;
1682  case 11:
1683  return PARM_INTEGER;
1684  case 12:
1685  return PARM_INTEGER;
1686  case 13:
1687  return PARM_STRING;
1688  case 14:
1689  return PARM_STRING;
1690  case 15:
1691  return PARM_INTEGER;
1692  case 16:
1693  return PARM_INTEGER;
1694  case 17:
1695  return PARM_STRING;
1696  case 18:
1697  return PARM_FLOAT;
1698  case 19:
1699  return PARM_INTEGER;
1700  case 20:
1701  return PARM_INTEGER;
1702  case 21:
1703  return PARM_VECTOR2;
1704  case 22:
1705  return PARM_VECTOR2;
1706  case 23:
1707  return PARM_STRING;
1708  case 24:
1709  return PARM_STRING;
1710  case 25:
1711  return PARM_STRING;
1712  case 26:
1713  return PARM_FLOAT;
1714  case 27:
1715  return PARM_INTEGER;
1716  case 28:
1717  return PARM_INTEGER;
1718  case 29:
1719  return PARM_VECTOR2;
1720  case 30:
1721  return PARM_VECTOR2;
1722  case 31:
1723  return PARM_STRING;
1724  case 32:
1725  return PARM_STRING;
1726  case 33:
1727  return PARM_STRING;
1728  case 34:
1729  return PARM_INTEGER;
1730  case 35:
1731  return PARM_INTEGER;
1732  case 36:
1733  return PARM_INTEGER;
1734  case 37:
1735  return PARM_VECTOR2;
1736  case 38:
1737  return PARM_VECTOR2;
1738  case 39:
1739  return PARM_STRING;
1740  case 40:
1741  return PARM_STRING;
1742  case 41:
1743  return PARM_STRING;
1744  case 42:
1745  return PARM_FLOAT;
1746  case 43:
1747  return PARM_INTEGER;
1748  case 44:
1749  return PARM_INTEGER;
1750  case 45:
1751  return PARM_VECTOR2;
1752  case 46:
1753  return PARM_VECTOR2;
1754  case 47:
1755  return PARM_STRING;
1756  case 48:
1757  return PARM_STRING;
1758  case 49:
1759  return PARM_STRING;
1760  case 50:
1761  return PARM_FLOAT;
1762  case 51:
1763  return PARM_INTEGER;
1764  case 52:
1765  return PARM_INTEGER;
1766  case 53:
1767  return PARM_VECTOR2;
1768  case 54:
1769  return PARM_VECTOR2;
1770  case 55:
1771  return PARM_STRING;
1772  case 56:
1773  return PARM_STRING;
1774  case 57:
1775  return PARM_STRING;
1776  case 58:
1777  return PARM_INTEGER;
1778  case 59:
1779  return PARM_INTEGER;
1780  case 60:
1781  return PARM_STRING;
1782  case 61:
1783  return PARM_INTEGER;
1784  case 62:
1785  return PARM_FLOAT;
1786  case 63:
1787  return PARM_INTEGER;
1788  case 64:
1789  return PARM_INTEGER;
1790  case 65:
1791  return PARM_VECTOR2;
1792  case 66:
1793  return PARM_VECTOR2;
1794  case 67:
1795  return PARM_STRING;
1796  case 68:
1797  return PARM_STRING;
1798  case 69:
1799  return PARM_STRING;
1800  case 70:
1801  return PARM_FLOAT;
1802  case 71:
1803  return PARM_INTEGER;
1804  case 72:
1805  return PARM_INTEGER;
1806  case 73:
1807  return PARM_STRING;
1808  case 74:
1809  return PARM_INTEGER;
1810  case 75:
1811  return PARM_STRING;
1812  case 76:
1813  return PARM_FLOAT;
1814  case 77:
1815  return PARM_INTEGER;
1816  case 78:
1817  return PARM_STRING;
1818  case 79:
1819  return PARM_STRING;
1820  case 80:
1821  return PARM_RAMP;
1822  case 81:
1823  return PARM_STRING;
1824  case 82:
1825  return PARM_STRING;
1826  case 83:
1827  return PARM_STRING;
1828  case 84:
1829  return PARM_STRING;
1830  case 85:
1831  return PARM_STRING;
1832  case 86:
1833  return PARM_STRING;
1834  case 87:
1835  if (fieldnum.size() == 1)
1836  return PARM_MULTIPARM;
1837  switch (fieldnum[1])
1838  {
1839  case 0:
1840  return PARM_STRING;
1841  case 1:
1842  return PARM_STRING;
1843 
1844  }
1845  return PARM_UNSUPPORTED;
1846 
1847  }
1848  return PARM_UNSUPPORTED;
1849  }
1850 
1851  // Boiler plate to load individual types.
1852  static void loadData(UT_IStream &is, int64 &v)
1853  { is.bread(&v, 1); }
1854  static void loadData(UT_IStream &is, bool &v)
1855  { int64 iv; is.bread(&iv, 1); v = iv; }
1856  static void loadData(UT_IStream &is, fpreal64 &v)
1857  { is.bread<fpreal64>(&v, 1); }
1858  static void loadData(UT_IStream &is, UT_Vector2D &v)
1859  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1); }
1860  static void loadData(UT_IStream &is, UT_Vector3D &v)
1861  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
1862  is.bread<fpreal64>(&v.z(), 1); }
1863  static void loadData(UT_IStream &is, UT_Vector4D &v)
1864  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
1865  is.bread<fpreal64>(&v.z(), 1); is.bread<fpreal64>(&v.w(), 1); }
1866  static void loadData(UT_IStream &is, UT_Matrix2D &v)
1867  { for (int r = 0; r < 2; r++) for (int c = 0; c < 2; c++) is.bread<fpreal64>(&v(r, c), 1); }
1868  static void loadData(UT_IStream &is, UT_Matrix3D &v)
1869  { for (int r = 0; r < 3; r++) for (int c = 0; c < 3; c++) is.bread<fpreal64>(&v(r, c), 1); }
1870  static void loadData(UT_IStream &is, UT_Matrix4D &v)
1871  { for (int r = 0; r < 4; r++) for (int c = 0; c < 4; c++) is.bread<fpreal64>(&v(r, c), 1); }
1872  static void loadData(UT_IStream &is, UT_Vector2I &v)
1873  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1); }
1874  static void loadData(UT_IStream &is, UT_Vector3I &v)
1875  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
1876  is.bread<int64>(&v.z(), 1); }
1877  static void loadData(UT_IStream &is, UT_Vector4I &v)
1878  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
1879  is.bread<int64>(&v.z(), 1); is.bread<int64>(&v.w(), 1); }
1881  { is.bread(v); }
1883  { UT_StringHolder rampdata;
1884  loadData(is, rampdata);
1885  if (rampdata.isstring())
1886  {
1887  v.reset(new UT_Ramp());
1888  UT_IStream istr((const char *) rampdata, rampdata.length(), UT_ISTREAM_ASCII);
1889  v->load(istr);
1890  }
1891  else v.reset();
1892  }
1895  loadData(is, data);
1896  if (data.isstring())
1897  {
1898  // Find the data type.
1899  const char *colon = UT_StringWrap(data).findChar(':');
1900  if (colon)
1901  {
1902  int typelen = colon - data.buffer();
1904  type.strncpy(data.buffer(), typelen);
1905  UT_IStream istr(((const char *) data) + typelen + 1, data.length() - (typelen + 1), UT_ISTREAM_BINARY);
1906 
1907  v = PRM_DataFactory::parseBinary(type.buffer(), istr);
1908  }
1909  }
1910  else v.reset();
1911  }
1912 
1913  static void saveData(std::ostream &os, int64 v)
1914  { UTwrite(os, &v); }
1915  static void saveData(std::ostream &os, bool v)
1916  { int64 iv = v; UTwrite(os, &iv); }
1917  static void saveData(std::ostream &os, fpreal64 v)
1918  { UTwrite<fpreal64>(os, &v); }
1919  static void saveData(std::ostream &os, UT_Vector2D v)
1920  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y()); }
1921  static void saveData(std::ostream &os, UT_Vector3D v)
1922  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
1923  UTwrite<fpreal64>(os, &v.z()); }
1924  static void saveData(std::ostream &os, UT_Vector4D v)
1925  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
1926  UTwrite<fpreal64>(os, &v.z()); UTwrite<fpreal64>(os, &v.w()); }
1927  static void saveData(std::ostream &os, UT_Matrix2D v)
1929  static void saveData(std::ostream &os, UT_Matrix3D v)
1931  static void saveData(std::ostream &os, UT_Matrix4D v)
1933  static void saveData(std::ostream &os, UT_StringHolder s)
1934  { UT_StringWrap(s).saveBinary(os); }
1935  static void saveData(std::ostream &os, UT_SharedPtr<UT_Ramp> s)
1937  UT_OStringStream ostr;
1938  if (s) s->save(ostr);
1939  result = ostr.str();
1940  saveData(os, result);
1941  }
1942  static void saveData(std::ostream &os, PRM_DataItemHandle s)
1944  UT_OStringStream ostr;
1945  if (s)
1946  {
1947  ostr << s->getDataTypeToken();
1948  ostr << ":";
1949  s->saveBinary(ostr);
1950  }
1951  result = ostr.str();
1952  saveData(os, result);
1953  }
1954 
1955 
1956  void save(std::ostream &os) const
1957  {
1958  int32 v = version();
1959  UTwrite(os, &v);
1960  saveData(os, myMode);
1961  saveData(os, myGroup);
1962  saveData(os, myUvattrib);
1963  saveData(os, myLimittobbox);
1964  saveData(os, myBBoxSize);
1965  saveData(os, myBBoxCenter);
1966  saveData(os, myPrune);
1967  saveData(os, myPruningratio);
1968  saveData(os, myPrunethicken);
1969  saveData(os, myUseguides);
1970  saveData(os, myUniformguidesegments);
1971  saveData(os, mySkininterp);
1972  saveData(os, myUseInterpMesh);
1973  saveData(os, mySkininterpguidesattrib);
1974  saveData(os, mySkininterpweightsattrib);
1975  saveData(os, mySkinguidemode);
1976  saveData(os, myGuideblendmethod);
1977  saveData(os, myGuidegroup);
1978  saveData(os, myInfluenceradius);
1979  saveData(os, myInfluenceradiusoverride);
1980  saveData(os, myInfluenceradiusoptions);
1981  saveData(os, myInfluenceradiusinrange);
1982  saveData(os, myInfluenceradiusoutrange);
1983  saveData(os, myInfluenceradiusattrib);
1984  saveData(os, myInfluenceradiustexture);
1985  saveData(os, myInfluenceradiustextureprim);
1986  saveData(os, myInfluencedecay);
1987  saveData(os, myInfluencedecayoverride);
1988  saveData(os, myInfluencedecayoptions);
1989  saveData(os, myInfluencedecayinrange);
1990  saveData(os, myInfluencedecayoutrange);
1991  saveData(os, myInfluencedecayattrib);
1992  saveData(os, myInfluencedecaytexture);
1993  saveData(os, myInfluencedecaytextureprim);
1994  saveData(os, myMaxguidecount);
1995  saveData(os, myMaxguidecountoverride);
1996  saveData(os, myMaxguidecountoptions);
1997  saveData(os, myMaxguidecountinrange);
1998  saveData(os, myMaxguidecountoutrange);
1999  saveData(os, myMaxguidecountattrib);
2000  saveData(os, myMaxguidecounttexture);
2001  saveData(os, myMaxguidecounttextureprim);
2002  saveData(os, myMaxguideangle);
2003  saveData(os, myMaxguideangleoverride);
2004  saveData(os, myMaxguideangleoptions);
2005  saveData(os, myMaxguideangleinrange);
2006  saveData(os, myMaxguideangleoutrange);
2007  saveData(os, myMaxguideangleattrib);
2008  saveData(os, myMaxguideangletexture);
2009  saveData(os, myMaxguideangletextureprim);
2010  saveData(os, myClumpcrossover);
2011  saveData(os, myClumpcrossoveroverride);
2012  saveData(os, myClumpcrossoveroptions);
2013  saveData(os, myClumpcrossoverinrange);
2014  saveData(os, myClumpcrossoveroutrange);
2015  saveData(os, myClumpcrossoverattrib);
2016  saveData(os, myClumpcrossovertexture);
2017  saveData(os, myClumpcrossovertextureprim);
2018  saveData(os, myGrowunguided);
2019  saveData(os, myUseinitdirattrib);
2020  saveData(os, myInitdirattrib);
2021  saveData(os, myUnguidedsegments);
2022  saveData(os, myUnguidedlength);
2023  saveData(os, myUnguidedlengthoverride);
2024  saveData(os, myUnguidedlengthoptions);
2025  saveData(os, myUnguidedlengthinrange);
2026  saveData(os, myUnguidedlengthoutrange);
2027  saveData(os, myUnguidedlengthattrib);
2028  saveData(os, myUnguidedlengthtexture);
2029  saveData(os, myUnguidedlengthtextureprim);
2030  saveData(os, myUnguidedminlength);
2031  saveData(os, myCreateweightattribs);
2032  saveData(os, myCreaterestrootattrib);
2033  saveData(os, myClumpidattrib);
2034  saveData(os, myOutputthicknessattrib);
2035  saveData(os, myThicknessattrib);
2036  saveData(os, myThickness);
2037  saveData(os, myThicknessoverride);
2038  saveData(os, myThicknessskinattrib);
2039  saveData(os, myThicknesstexture);
2040  saveData(os, myHairprofile);
2041  saveData(os, myPointattribs);
2042  saveData(os, myVertattribs);
2043  saveData(os, myPrimattribs);
2044  saveData(os, myDetailattribs);
2045  saveData(os, myGuidepointattribs);
2046  saveData(os, myGuideprimattribs);
2047  {
2048  int64 length = myWeightArrayPairs.entries();
2049  UTwrite(os, &length);
2050  for (exint i = 0; i < length; i++)
2051  {
2052  auto && _curentry = myWeightArrayPairs(i);
2053  (void) _curentry;
2054  saveData(os, _curentry.guideindexattrib);
2055  saveData(os, _curentry.guideweightattrib);
2056 
2057  }
2058  }
2059 
2060  }
2061 
2062  bool load(UT_IStream &is)
2063  {
2064  int32 v;
2065  is.bread(&v, 1);
2066  if (version() != v)
2067  {
2068  // Fail incompatible versions
2069  return false;
2070  }
2071  loadData(is, myMode);
2072  loadData(is, myGroup);
2073  loadData(is, myUvattrib);
2074  loadData(is, myLimittobbox);
2075  loadData(is, myBBoxSize);
2076  loadData(is, myBBoxCenter);
2077  loadData(is, myPrune);
2078  loadData(is, myPruningratio);
2079  loadData(is, myPrunethicken);
2080  loadData(is, myUseguides);
2081  loadData(is, myUniformguidesegments);
2082  loadData(is, mySkininterp);
2083  loadData(is, myUseInterpMesh);
2084  loadData(is, mySkininterpguidesattrib);
2085  loadData(is, mySkininterpweightsattrib);
2086  loadData(is, mySkinguidemode);
2087  loadData(is, myGuideblendmethod);
2088  loadData(is, myGuidegroup);
2089  loadData(is, myInfluenceradius);
2090  loadData(is, myInfluenceradiusoverride);
2091  loadData(is, myInfluenceradiusoptions);
2092  loadData(is, myInfluenceradiusinrange);
2093  loadData(is, myInfluenceradiusoutrange);
2094  loadData(is, myInfluenceradiusattrib);
2095  loadData(is, myInfluenceradiustexture);
2096  loadData(is, myInfluenceradiustextureprim);
2097  loadData(is, myInfluencedecay);
2098  loadData(is, myInfluencedecayoverride);
2099  loadData(is, myInfluencedecayoptions);
2100  loadData(is, myInfluencedecayinrange);
2101  loadData(is, myInfluencedecayoutrange);
2102  loadData(is, myInfluencedecayattrib);
2103  loadData(is, myInfluencedecaytexture);
2104  loadData(is, myInfluencedecaytextureprim);
2105  loadData(is, myMaxguidecount);
2106  loadData(is, myMaxguidecountoverride);
2107  loadData(is, myMaxguidecountoptions);
2108  loadData(is, myMaxguidecountinrange);
2109  loadData(is, myMaxguidecountoutrange);
2110  loadData(is, myMaxguidecountattrib);
2111  loadData(is, myMaxguidecounttexture);
2112  loadData(is, myMaxguidecounttextureprim);
2113  loadData(is, myMaxguideangle);
2114  loadData(is, myMaxguideangleoverride);
2115  loadData(is, myMaxguideangleoptions);
2116  loadData(is, myMaxguideangleinrange);
2117  loadData(is, myMaxguideangleoutrange);
2118  loadData(is, myMaxguideangleattrib);
2119  loadData(is, myMaxguideangletexture);
2120  loadData(is, myMaxguideangletextureprim);
2121  loadData(is, myClumpcrossover);
2122  loadData(is, myClumpcrossoveroverride);
2123  loadData(is, myClumpcrossoveroptions);
2124  loadData(is, myClumpcrossoverinrange);
2125  loadData(is, myClumpcrossoveroutrange);
2126  loadData(is, myClumpcrossoverattrib);
2127  loadData(is, myClumpcrossovertexture);
2128  loadData(is, myClumpcrossovertextureprim);
2129  loadData(is, myGrowunguided);
2130  loadData(is, myUseinitdirattrib);
2131  loadData(is, myInitdirattrib);
2132  loadData(is, myUnguidedsegments);
2133  loadData(is, myUnguidedlength);
2134  loadData(is, myUnguidedlengthoverride);
2135  loadData(is, myUnguidedlengthoptions);
2136  loadData(is, myUnguidedlengthinrange);
2137  loadData(is, myUnguidedlengthoutrange);
2138  loadData(is, myUnguidedlengthattrib);
2139  loadData(is, myUnguidedlengthtexture);
2140  loadData(is, myUnguidedlengthtextureprim);
2141  loadData(is, myUnguidedminlength);
2142  loadData(is, myCreateweightattribs);
2143  loadData(is, myCreaterestrootattrib);
2144  loadData(is, myClumpidattrib);
2145  loadData(is, myOutputthicknessattrib);
2146  loadData(is, myThicknessattrib);
2147  loadData(is, myThickness);
2148  loadData(is, myThicknessoverride);
2149  loadData(is, myThicknessskinattrib);
2150  loadData(is, myThicknesstexture);
2151  loadData(is, myHairprofile);
2152  loadData(is, myPointattribs);
2153  loadData(is, myVertattribs);
2154  loadData(is, myPrimattribs);
2155  loadData(is, myDetailattribs);
2156  loadData(is, myGuidepointattribs);
2157  loadData(is, myGuideprimattribs);
2158  {
2159  int64 length;
2160  is.read(&length, 1);
2161  myWeightArrayPairs.setSize(length);
2162  for (exint i = 0; i < length; i++)
2163  {
2164  auto && _curentry = myWeightArrayPairs(i);
2165  (void) _curentry;
2166  loadData(is, _curentry.guideindexattrib);
2167  loadData(is, _curentry.guideweightattrib);
2168 
2169  }
2170  }
2171 
2172  return true;
2173  }
2174 
2175  Mode getMode() const { return Mode(myMode); }
2176  void setMode(Mode val) { myMode = int64(val); }
2177  Mode opMode(const SOP_NodeVerb::CookParms &cookparms) const
2178  {
2179  SOP_Node *thissop = cookparms.getNode();
2180  if (!thissop) return getMode();
2181  int64 result;
2182  OP_Utils::evalOpParm(result, thissop, "mode", cookparms.getCookTime(), 0);
2183  return Mode(result);
2184  }
2185  const UT_StringHolder & getGroup() const { return myGroup; }
2186  void setGroup(const UT_StringHolder & val) { myGroup = val; }
2188  {
2189  SOP_Node *thissop = cookparms.getNode();
2190  if (!thissop) return getGroup();
2192  OP_Utils::evalOpParm(result, thissop, "group", cookparms.getCookTime(), 0);
2193  return result;
2194  }
2195  const UT_StringHolder & getUvattrib() const { return myUvattrib; }
2196  void setUvattrib(const UT_StringHolder & val) { myUvattrib = val; }
2198  {
2199  SOP_Node *thissop = cookparms.getNode();
2200  if (!thissop) return getUvattrib();
2202  OP_Utils::evalOpParm(result, thissop, "uvattrib", cookparms.getCookTime(), 0);
2203  return result;
2204  }
2205  bool getLimittobbox() const { return myLimittobbox; }
2206  void setLimittobbox(bool val) { myLimittobbox = val; }
2207  bool opLimittobbox(const SOP_NodeVerb::CookParms &cookparms) const
2208  {
2209  SOP_Node *thissop = cookparms.getNode();
2210  if (!thissop) return getLimittobbox();
2211  bool result;
2212  OP_Utils::evalOpParm(result, thissop, "limittobbox", cookparms.getCookTime(), 0);
2213  return result;
2214  }
2215  UT_Vector3D getBBoxSize() const { return myBBoxSize; }
2216  void setBBoxSize(UT_Vector3D val) { myBBoxSize = val; }
2218  {
2219  SOP_Node *thissop = cookparms.getNode();
2220  if (!thissop) return getBBoxSize();
2222  OP_Utils::evalOpParm(result, thissop, "bboxsize", cookparms.getCookTime(), 0);
2223  return result;
2224  }
2225  UT_Vector3D getBBoxCenter() const { return myBBoxCenter; }
2226  void setBBoxCenter(UT_Vector3D val) { myBBoxCenter = val; }
2228  {
2229  SOP_Node *thissop = cookparms.getNode();
2230  if (!thissop) return getBBoxCenter();
2232  OP_Utils::evalOpParm(result, thissop, "bboxcenter", cookparms.getCookTime(), 0);
2233  return result;
2234  }
2235  bool getPrune() const { return myPrune; }
2236  void setPrune(bool val) { myPrune = val; }
2237  bool opPrune(const SOP_NodeVerb::CookParms &cookparms) const
2238  {
2239  SOP_Node *thissop = cookparms.getNode();
2240  if (!thissop) return getPrune();
2241  bool result;
2242  OP_Utils::evalOpParm(result, thissop, "prune", cookparms.getCookTime(), 0);
2243  return result;
2244  }
2245  fpreal64 getPruningratio() const { return myPruningratio; }
2246  void setPruningratio(fpreal64 val) { myPruningratio = val; }
2248  {
2249  SOP_Node *thissop = cookparms.getNode();
2250  if (!thissop) return getPruningratio();
2251  fpreal64 result;
2252  OP_Utils::evalOpParm(result, thissop, "pruningratio", cookparms.getCookTime(), 0);
2253  return result;
2254  }
2255  bool getPrunethicken() const { return myPrunethicken; }
2256  void setPrunethicken(bool val) { myPrunethicken = val; }
2257  bool opPrunethicken(const SOP_NodeVerb::CookParms &cookparms) const
2258  {
2259  SOP_Node *thissop = cookparms.getNode();
2260  if (!thissop) return getPrunethicken();
2261  bool result;
2262  OP_Utils::evalOpParm(result, thissop, "prunethicken", cookparms.getCookTime(), 0);
2263  return result;
2264  }
2265  bool getUseguides() const { return myUseguides; }
2266  void setUseguides(bool val) { myUseguides = val; }
2267  bool opUseguides(const SOP_NodeVerb::CookParms &cookparms) const
2268  {
2269  SOP_Node *thissop = cookparms.getNode();
2270  if (!thissop) return getUseguides();
2271  bool result;
2272  OP_Utils::evalOpParm(result, thissop, "useguides", cookparms.getCookTime(), 0);
2273  return result;
2274  }
2275  bool getUniformguidesegments() const { return myUniformguidesegments; }
2276  void setUniformguidesegments(bool val) { myUniformguidesegments = val; }
2278  {
2279  SOP_Node *thissop = cookparms.getNode();
2280  if (!thissop) return getUniformguidesegments();
2281  bool result;
2282  OP_Utils::evalOpParm(result, thissop, "uniformguidesegments", cookparms.getCookTime(), 0);
2283  return result;
2284  }
2285  bool getSkininterp() const { return mySkininterp; }
2286  void setSkininterp(bool val) { mySkininterp = val; }
2287  bool opSkininterp(const SOP_NodeVerb::CookParms &cookparms) const
2288  {
2289  SOP_Node *thissop = cookparms.getNode();
2290  if (!thissop) return getSkininterp();
2291  bool result;
2292  OP_Utils::evalOpParm(result, thissop, "skininterp", cookparms.getCookTime(), 0);
2293  return result;
2294  }
2295  bool getUseInterpMesh() const { return myUseInterpMesh; }
2296  void setUseInterpMesh(bool val) { myUseInterpMesh = val; }
2297  bool opUseInterpMesh(const SOP_NodeVerb::CookParms &cookparms) const
2298  {
2299  SOP_Node *thissop = cookparms.getNode();
2300  if (!thissop) return getUseInterpMesh();
2301  bool result;
2302  OP_Utils::evalOpParm(result, thissop, "useinterpmesh", cookparms.getCookTime(), 0);
2303  return result;
2304  }
2305  const UT_StringHolder & getSkininterpguidesattrib() const { return mySkininterpguidesattrib; }
2306  void setSkininterpguidesattrib(const UT_StringHolder & val) { mySkininterpguidesattrib = val; }
2308  {
2309  SOP_Node *thissop = cookparms.getNode();
2310  if (!thissop) return getSkininterpguidesattrib();
2312  OP_Utils::evalOpParm(result, thissop, "skininterpguidesattrib", cookparms.getCookTime(), 0);
2313  return result;
2314  }
2315  const UT_StringHolder & getSkininterpweightsattrib() const { return mySkininterpweightsattrib; }
2316  void setSkininterpweightsattrib(const UT_StringHolder & val) { mySkininterpweightsattrib = val; }
2318  {
2319  SOP_Node *thissop = cookparms.getNode();
2320  if (!thissop) return getSkininterpweightsattrib();
2322  OP_Utils::evalOpParm(result, thissop, "skininterpweightsattrib", cookparms.getCookTime(), 0);
2323  return result;
2324  }
2325  Skinguidemode getSkinguidemode() const { return Skinguidemode(mySkinguidemode); }
2326  void setSkinguidemode(Skinguidemode val) { mySkinguidemode = int64(val); }
2328  {
2329  SOP_Node *thissop = cookparms.getNode();
2330  if (!thissop) return getSkinguidemode();
2331  int64 result;
2332  OP_Utils::evalOpParm(result, thissop, "skinguidemode", cookparms.getCookTime(), 0);
2333  return Skinguidemode(result);
2334  }
2335  Guideblendmethod getGuideblendmethod() const { return Guideblendmethod(myGuideblendmethod); }
2336  void setGuideblendmethod(Guideblendmethod val) { myGuideblendmethod = int64(val); }
2338  {
2339  SOP_Node *thissop = cookparms.getNode();
2340  if (!thissop) return getGuideblendmethod();
2341  int64 result;
2342  OP_Utils::evalOpParm(result, thissop, "guideblendmethod", cookparms.getCookTime(), 0);
2343  return Guideblendmethod(result);
2344  }
2345  const UT_StringHolder & getGuidegroup() const { return myGuidegroup; }
2346  void setGuidegroup(const UT_StringHolder & val) { myGuidegroup = val; }
2348  {
2349  SOP_Node *thissop = cookparms.getNode();
2350  if (!thissop) return getGuidegroup();
2352  OP_Utils::evalOpParm(result, thissop, "guidegroup", cookparms.getCookTime(), 0);
2353  return result;
2354  }
2355  fpreal64 getInfluenceradius() const { return myInfluenceradius; }
2356  void setInfluenceradius(fpreal64 val) { myInfluenceradius = val; }
2358  {
2359  SOP_Node *thissop = cookparms.getNode();
2360  if (!thissop) return getInfluenceradius();
2361  fpreal64 result;
2362  OP_Utils::evalOpParm(result, thissop, "influenceradius", cookparms.getCookTime(), 0);
2363  return result;
2364  }
2365  Influenceradiusoverride getInfluenceradiusoverride() const { return Influenceradiusoverride(myInfluenceradiusoverride); }
2366  void setInfluenceradiusoverride(Influenceradiusoverride val) { myInfluenceradiusoverride = int64(val); }
2368  {
2369  SOP_Node *thissop = cookparms.getNode();
2370  if (!thissop) return getInfluenceradiusoverride();
2371  int64 result;
2372  OP_Utils::evalOpParm(result, thissop, "influenceradiusoverride", cookparms.getCookTime(), 0);
2373  return Influenceradiusoverride(result);
2374  }
2375  int64 getInfluenceradiusoptions() const { return myInfluenceradiusoptions; }
2376  void setInfluenceradiusoptions(int64 val) { myInfluenceradiusoptions = val; }
2378  {
2379  SOP_Node *thissop = cookparms.getNode();
2380  if (!thissop) return getInfluenceradiusoptions();
2381  int64 result;
2382  OP_Utils::evalOpParm(result, thissop, "influenceradiusoptions", cookparms.getCookTime(), 0);
2383  return result;
2384  }
2385  UT_Vector2D getInfluenceradiusinrange() const { return myInfluenceradiusinrange; }
2386  void setInfluenceradiusinrange(UT_Vector2D val) { myInfluenceradiusinrange = val; }
2388  {
2389  SOP_Node *thissop = cookparms.getNode();
2390  if (!thissop) return getInfluenceradiusinrange();
2392  OP_Utils::evalOpParm(result, thissop, "influenceradiusinrange", cookparms.getCookTime(), 0);
2393  return result;
2394  }
2395  UT_Vector2D getInfluenceradiusoutrange() const { return myInfluenceradiusoutrange; }
2396  void setInfluenceradiusoutrange(UT_Vector2D val) { myInfluenceradiusoutrange = val; }
2398  {
2399  SOP_Node *thissop = cookparms.getNode();
2400  if (!thissop) return getInfluenceradiusoutrange();
2402  OP_Utils::evalOpParm(result, thissop, "influenceradiusoutrange", cookparms.getCookTime(), 0);
2403  return result;
2404  }
2405  const UT_StringHolder & getInfluenceradiusattrib() const { return myInfluenceradiusattrib; }
2406  void setInfluenceradiusattrib(const UT_StringHolder & val) { myInfluenceradiusattrib = val; }
2408  {
2409  SOP_Node *thissop = cookparms.getNode();
2410  if (!thissop) return getInfluenceradiusattrib();
2412  OP_Utils::evalOpParm(result, thissop, "influenceradiusattrib", cookparms.getCookTime(), 0);
2413  return result;
2414  }
2415  const UT_StringHolder & getInfluenceradiustexture() const { return myInfluenceradiustexture; }
2416  void setInfluenceradiustexture(const UT_StringHolder & val) { myInfluenceradiustexture = val; }
2418  {
2419  SOP_Node *thissop = cookparms.getNode();
2420  if (!thissop) return getInfluenceradiustexture();
2422  OP_Utils::evalOpParm(result, thissop, "influenceradiustexture", cookparms.getCookTime(), 0);
2423  return result;
2424  }
2425  const UT_StringHolder & getInfluenceradiustextureprim() const { return myInfluenceradiustextureprim; }
2426  void setInfluenceradiustextureprim(const UT_StringHolder & val) { myInfluenceradiustextureprim = val; }
2428  {
2429  SOP_Node *thissop = cookparms.getNode();
2430  if (!thissop) return getInfluenceradiustextureprim();
2432  OP_Utils::evalOpParm(result, thissop, "influenceradiustextureprim", cookparms.getCookTime(), 0);
2433  return result;
2434  }
2435  fpreal64 getInfluencedecay() const { return myInfluencedecay; }
2436  void setInfluencedecay(fpreal64 val) { myInfluencedecay = val; }
2438  {
2439  SOP_Node *thissop = cookparms.getNode();
2440  if (!thissop) return getInfluencedecay();
2441  fpreal64 result;
2442  OP_Utils::evalOpParm(result, thissop, "influencedecay", cookparms.getCookTime(), 0);
2443  return result;
2444  }
2445  Influencedecayoverride getInfluencedecayoverride() const { return Influencedecayoverride(myInfluencedecayoverride); }
2446  void setInfluencedecayoverride(Influencedecayoverride val) { myInfluencedecayoverride = int64(val); }
2448  {
2449  SOP_Node *thissop = cookparms.getNode();
2450  if (!thissop) return getInfluencedecayoverride();
2451  int64 result;
2452  OP_Utils::evalOpParm(result, thissop, "influencedecayoverride", cookparms.getCookTime(), 0);
2453  return Influencedecayoverride(result);
2454  }
2455  int64 getInfluencedecayoptions() const { return myInfluencedecayoptions; }
2456  void setInfluencedecayoptions(int64 val) { myInfluencedecayoptions = val; }
2458  {
2459  SOP_Node *thissop = cookparms.getNode();
2460  if (!thissop) return getInfluencedecayoptions();
2461  int64 result;
2462  OP_Utils::evalOpParm(result, thissop, "influencedecayoptions", cookparms.getCookTime(), 0);
2463  return result;
2464  }
2465  UT_Vector2D getInfluencedecayinrange() const { return myInfluencedecayinrange; }
2466  void setInfluencedecayinrange(UT_Vector2D val) { myInfluencedecayinrange = val; }
2468  {
2469  SOP_Node *thissop = cookparms.getNode();
2470  if (!thissop) return getInfluencedecayinrange();
2472  OP_Utils::evalOpParm(result, thissop, "influencedecayinrange", cookparms.getCookTime(), 0);
2473  return result;
2474  }
2475  UT_Vector2D getInfluencedecayoutrange() const { return myInfluencedecayoutrange; }
2476  void setInfluencedecayoutrange(UT_Vector2D val) { myInfluencedecayoutrange = val; }
2478  {
2479  SOP_Node *thissop = cookparms.getNode();
2480  if (!thissop) return getInfluencedecayoutrange();
2482  OP_Utils::evalOpParm(result, thissop, "influencedecayoutrange", cookparms.getCookTime(), 0);
2483  return result;
2484  }
2485  const UT_StringHolder & getInfluencedecayattrib() const { return myInfluencedecayattrib; }
2486  void setInfluencedecayattrib(const UT_StringHolder & val) { myInfluencedecayattrib = val; }
2488  {
2489  SOP_Node *thissop = cookparms.getNode();
2490  if (!thissop) return getInfluencedecayattrib();
2492  OP_Utils::evalOpParm(result, thissop, "influencedecayattrib", cookparms.getCookTime(), 0);
2493  return result;
2494  }
2495  const UT_StringHolder & getInfluencedecaytexture() const { return myInfluencedecaytexture; }
2496  void setInfluencedecaytexture(const UT_StringHolder & val) { myInfluencedecaytexture = val; }
2498  {
2499  SOP_Node *thissop = cookparms.getNode();
2500  if (!thissop) return getInfluencedecaytexture();
2502  OP_Utils::evalOpParm(result, thissop, "influencedecaytexture", cookparms.getCookTime(), 0);
2503  return result;
2504  }
2505  const UT_StringHolder & getInfluencedecaytextureprim() const { return myInfluencedecaytextureprim; }
2506  void setInfluencedecaytextureprim(const UT_StringHolder & val) { myInfluencedecaytextureprim = val; }
2508  {
2509  SOP_Node *thissop = cookparms.getNode();
2510  if (!thissop) return getInfluencedecaytextureprim();
2512  OP_Utils::evalOpParm(result, thissop, "influencedecaytextureprim", cookparms.getCookTime(), 0);
2513  return result;
2514  }
2515  int64 getMaxguidecount() const { return myMaxguidecount; }
2516  void setMaxguidecount(int64 val) { myMaxguidecount = val; }
2518  {
2519  SOP_Node *thissop = cookparms.getNode();
2520  if (!thissop) return getMaxguidecount();
2521  int64 result;
2522  OP_Utils::evalOpParm(result, thissop, "maxguidecount", cookparms.getCookTime(), 0);
2523  return result;
2524  }
2525  Maxguidecountoverride getMaxguidecountoverride() const { return Maxguidecountoverride(myMaxguidecountoverride); }
2526  void setMaxguidecountoverride(Maxguidecountoverride val) { myMaxguidecountoverride = int64(val); }
2528  {
2529  SOP_Node *thissop = cookparms.getNode();
2530  if (!thissop) return getMaxguidecountoverride();
2531  int64 result;
2532  OP_Utils::evalOpParm(result, thissop, "maxguidecountoverride", cookparms.getCookTime(), 0);
2533  return Maxguidecountoverride(result);
2534  }
2535  int64 getMaxguidecountoptions() const { return myMaxguidecountoptions; }
2536  void setMaxguidecountoptions(int64 val) { myMaxguidecountoptions = val; }
2538  {
2539  SOP_Node *thissop = cookparms.getNode();
2540  if (!thissop) return getMaxguidecountoptions();
2541  int64 result;
2542  OP_Utils::evalOpParm(result, thissop, "maxguidecountoptions", cookparms.getCookTime(), 0);
2543  return result;
2544  }
2545  UT_Vector2D getMaxguidecountinrange() const { return myMaxguidecountinrange; }
2546  void setMaxguidecountinrange(UT_Vector2D val) { myMaxguidecountinrange = val; }
2548  {
2549  SOP_Node *thissop = cookparms.getNode();
2550  if (!thissop) return getMaxguidecountinrange();
2552  OP_Utils::evalOpParm(result, thissop, "maxguidecountinrange", cookparms.getCookTime(), 0);
2553  return result;
2554  }
2555  UT_Vector2D getMaxguidecountoutrange() const { return myMaxguidecountoutrange; }
2556  void setMaxguidecountoutrange(UT_Vector2D val) { myMaxguidecountoutrange = val; }
2558  {
2559  SOP_Node *thissop = cookparms.getNode();
2560  if (!thissop) return getMaxguidecountoutrange();
2562  OP_Utils::evalOpParm(result, thissop, "maxguidecountoutrange", cookparms.getCookTime(), 0);
2563  return result;
2564  }
2565  const UT_StringHolder & getMaxguidecountattrib() const { return myMaxguidecountattrib; }
2566  void setMaxguidecountattrib(const UT_StringHolder & val) { myMaxguidecountattrib = val; }
2568  {
2569  SOP_Node *thissop = cookparms.getNode();
2570  if (!thissop) return getMaxguidecountattrib();
2572  OP_Utils::evalOpParm(result, thissop, "maxguidecountattrib", cookparms.getCookTime(), 0);
2573  return result;
2574  }
2575  const UT_StringHolder & getMaxguidecounttexture() const { return myMaxguidecounttexture; }
2576  void setMaxguidecounttexture(const UT_StringHolder & val) { myMaxguidecounttexture = val; }
2578  {
2579  SOP_Node *thissop = cookparms.getNode();
2580  if (!thissop) return getMaxguidecounttexture();
2582  OP_Utils::evalOpParm(result, thissop, "maxguidecounttexture", cookparms.getCookTime(), 0);
2583  return result;
2584  }
2585  const UT_StringHolder & getMaxguidecounttextureprim() const { return myMaxguidecounttextureprim; }
2586  void setMaxguidecounttextureprim(const UT_StringHolder & val) { myMaxguidecounttextureprim = val; }
2588  {
2589  SOP_Node *thissop = cookparms.getNode();
2590  if (!thissop) return getMaxguidecounttextureprim();
2592  OP_Utils::evalOpParm(result, thissop, "maxguidecounttextureprim", cookparms.getCookTime(), 0);
2593  return result;
2594  }
2595  fpreal64 getMaxguideangle() const { return myMaxguideangle; }
2596  void setMaxguideangle(fpreal64 val) { myMaxguideangle = val; }
2598  {
2599  SOP_Node *thissop = cookparms.getNode();
2600  if (!thissop) return getMaxguideangle();
2601  fpreal64 result;
2602  OP_Utils::evalOpParm(result, thissop, "maxguideangle", cookparms.getCookTime(), 0);
2603  return result;
2604  }
2605  Maxguideangleoverride getMaxguideangleoverride() const { return Maxguideangleoverride(myMaxguideangleoverride); }
2606  void setMaxguideangleoverride(Maxguideangleoverride val) { myMaxguideangleoverride = int64(val); }
2608  {
2609  SOP_Node *thissop = cookparms.getNode();
2610  if (!thissop) return getMaxguideangleoverride();
2611  int64 result;
2612  OP_Utils::evalOpParm(result, thissop, "maxguideangleoverride", cookparms.getCookTime(), 0);
2613  return Maxguideangleoverride(result);
2614  }
2615  int64 getMaxguideangleoptions() const { return myMaxguideangleoptions; }
2616  void setMaxguideangleoptions(int64 val) { myMaxguideangleoptions = val; }
2618  {
2619  SOP_Node *thissop = cookparms.getNode();
2620  if (!thissop) return getMaxguideangleoptions();
2621  int64 result;
2622  OP_Utils::evalOpParm(result, thissop, "maxguideangleoptions", cookparms.getCookTime(), 0);
2623  return result;
2624  }
2625  UT_Vector2D getMaxguideangleinrange() const { return myMaxguideangleinrange; }
2626  void setMaxguideangleinrange(UT_Vector2D val) { myMaxguideangleinrange = val; }
2628  {
2629  SOP_Node *thissop = cookparms.getNode();
2630  if (!thissop) return getMaxguideangleinrange();
2632  OP_Utils::evalOpParm(result, thissop, "maxguideangleinrange", cookparms.getCookTime(), 0);
2633  return result;
2634  }
2635  UT_Vector2D getMaxguideangleoutrange() const { return myMaxguideangleoutrange; }
2636  void setMaxguideangleoutrange(UT_Vector2D val) { myMaxguideangleoutrange = val; }
2638  {
2639  SOP_Node *thissop = cookparms.getNode();
2640  if (!thissop) return getMaxguideangleoutrange();
2642  OP_Utils::evalOpParm(result, thissop, "maxguideangleoutrange", cookparms.getCookTime(), 0);
2643  return result;
2644  }
2645  const UT_StringHolder & getMaxguideangleattrib() const { return myMaxguideangleattrib; }
2646  void setMaxguideangleattrib(const UT_StringHolder & val) { myMaxguideangleattrib = val; }
2648  {
2649  SOP_Node *thissop = cookparms.getNode();
2650  if (!thissop) return getMaxguideangleattrib();
2652  OP_Utils::evalOpParm(result, thissop, "maxguideangleattrib", cookparms.getCookTime(), 0);
2653  return result;
2654  }
2655  const UT_StringHolder & getMaxguideangletexture() const { return myMaxguideangletexture; }
2656  void setMaxguideangletexture(const UT_StringHolder & val) { myMaxguideangletexture = val; }
2658  {
2659  SOP_Node *thissop = cookparms.getNode();
2660  if (!thissop) return getMaxguideangletexture();
2662  OP_Utils::evalOpParm(result, thissop, "maxguideangletexture", cookparms.getCookTime(), 0);
2663  return result;
2664  }
2665  const UT_StringHolder & getMaxguideangletextureprim() const { return myMaxguideangletextureprim; }
2666  void setMaxguideangletextureprim(const UT_StringHolder & val) { myMaxguideangletextureprim = val; }
2668  {
2669  SOP_Node *thissop = cookparms.getNode();
2670  if (!thissop) return getMaxguideangletextureprim();
2672  OP_Utils::evalOpParm(result, thissop, "maxguideangletextureprim", cookparms.getCookTime(), 0);
2673  return result;
2674  }
2675  fpreal64 getClumpcrossover() const { return myClumpcrossover; }
2676  void setClumpcrossover(fpreal64 val) { myClumpcrossover = val; }
2678  {
2679  SOP_Node *thissop = cookparms.getNode();
2680  if (!thissop) return getClumpcrossover();
2681  fpreal64 result;
2682  OP_Utils::evalOpParm(result, thissop, "clumpcrossover", cookparms.getCookTime(), 0);
2683  return result;
2684  }
2685  Clumpcrossoveroverride getClumpcrossoveroverride() const { return Clumpcrossoveroverride(myClumpcrossoveroverride); }
2686  void setClumpcrossoveroverride(Clumpcrossoveroverride val) { myClumpcrossoveroverride = int64(val); }
2688  {
2689  SOP_Node *thissop = cookparms.getNode();
2690  if (!thissop) return getClumpcrossoveroverride();
2691  int64 result;
2692  OP_Utils::evalOpParm(result, thissop, "clumpcrossoveroverride", cookparms.getCookTime(), 0);
2693  return Clumpcrossoveroverride(result);
2694  }
2695  int64 getClumpcrossoveroptions() const { return myClumpcrossoveroptions; }
2696  void setClumpcrossoveroptions(int64 val) { myClumpcrossoveroptions = val; }
2698  {
2699  SOP_Node *thissop = cookparms.getNode();
2700  if (!thissop) return getClumpcrossoveroptions();
2701  int64 result;
2702  OP_Utils::evalOpParm(result, thissop, "clumpcrossoveroptions", cookparms.getCookTime(), 0);
2703  return result;
2704  }
2705  UT_Vector2D getClumpcrossoverinrange() const { return myClumpcrossoverinrange; }
2706  void setClumpcrossoverinrange(UT_Vector2D val) { myClumpcrossoverinrange = val; }
2708  {
2709  SOP_Node *thissop = cookparms.getNode();
2710  if (!thissop) return getClumpcrossoverinrange();
2712  OP_Utils::evalOpParm(result, thissop, "clumpcrossoverinrange", cookparms.getCookTime(), 0);
2713  return result;
2714  }
2715  UT_Vector2D getClumpcrossoveroutrange() const { return myClumpcrossoveroutrange; }
2716  void setClumpcrossoveroutrange(UT_Vector2D val) { myClumpcrossoveroutrange = val; }
2718  {
2719  SOP_Node *thissop = cookparms.getNode();
2720  if (!thissop) return getClumpcrossoveroutrange();
2722  OP_Utils::evalOpParm(result, thissop, "clumpcrossoveroutrange", cookparms.getCookTime(), 0);
2723  return result;
2724  }
2725  const UT_StringHolder & getClumpcrossoverattrib() const { return myClumpcrossoverattrib; }
2726  void setClumpcrossoverattrib(const UT_StringHolder & val) { myClumpcrossoverattrib = val; }
2728  {
2729  SOP_Node *thissop = cookparms.getNode();
2730  if (!thissop) return getClumpcrossoverattrib();
2732  OP_Utils::evalOpParm(result, thissop, "clumpcrossoverattrib", cookparms.getCookTime(), 0);
2733  return result;
2734  }
2735  const UT_StringHolder & getClumpcrossovertexture() const { return myClumpcrossovertexture; }
2736  void setClumpcrossovertexture(const UT_StringHolder & val) { myClumpcrossovertexture = val; }
2738  {
2739  SOP_Node *thissop = cookparms.getNode();
2740  if (!thissop) return getClumpcrossovertexture();
2742  OP_Utils::evalOpParm(result, thissop, "clumpcrossovertexture", cookparms.getCookTime(), 0);
2743  return result;
2744  }
2745  const UT_StringHolder & getClumpcrossovertextureprim() const { return myClumpcrossovertextureprim; }
2746  void setClumpcrossovertextureprim(const UT_StringHolder & val) { myClumpcrossovertextureprim = val; }
2748  {
2749  SOP_Node *thissop = cookparms.getNode();
2750  if (!thissop) return getClumpcrossovertextureprim();
2752  OP_Utils::evalOpParm(result, thissop, "clumpcrossovertextureprim", cookparms.getCookTime(), 0);
2753  return result;
2754  }
2755  bool getGrowunguided() const { return myGrowunguided; }
2756  void setGrowunguided(bool val) { myGrowunguided = val; }
2757  bool opGrowunguided(const SOP_NodeVerb::CookParms &cookparms) const
2758  {
2759  SOP_Node *thissop = cookparms.getNode();
2760  if (!thissop) return getGrowunguided();
2761  bool result;
2762  OP_Utils::evalOpParm(result, thissop, "growunguided", cookparms.getCookTime(), 0);
2763  return result;
2764  }
2765  bool getUseinitdirattrib() const { return myUseinitdirattrib; }
2766  void setUseinitdirattrib(bool val) { myUseinitdirattrib = val; }
2767  bool opUseinitdirattrib(const SOP_NodeVerb::CookParms &cookparms) const
2768  {
2769  SOP_Node *thissop = cookparms.getNode();
2770  if (!thissop) return getUseinitdirattrib();
2771  bool result;
2772  OP_Utils::evalOpParm(result, thissop, "useinitdirattrib", cookparms.getCookTime(), 0);
2773  return result;
2774  }
2775  const UT_StringHolder & getInitdirattrib() const { return myInitdirattrib; }
2776  void setInitdirattrib(const UT_StringHolder & val) { myInitdirattrib = val; }
2778  {
2779  SOP_Node *thissop = cookparms.getNode();
2780  if (!thissop) return getInitdirattrib();
2782  OP_Utils::evalOpParm(result, thissop, "initdirattrib", cookparms.getCookTime(), 0);
2783  return result;
2784  }
2785  int64 getUnguidedsegments() const { return myUnguidedsegments; }
2786  void setUnguidedsegments(int64 val) { myUnguidedsegments = val; }
2788  {
2789  SOP_Node *thissop = cookparms.getNode();
2790  if (!thissop) return getUnguidedsegments();
2791  int64 result;
2792  OP_Utils::evalOpParm(result, thissop, "unguidedsegments", cookparms.getCookTime(), 0);
2793  return result;
2794  }
2795  fpreal64 getUnguidedlength() const { return myUnguidedlength; }
2796  void setUnguidedlength(fpreal64 val) { myUnguidedlength = val; }
2798  {
2799  SOP_Node *thissop = cookparms.getNode();
2800  if (!thissop) return getUnguidedlength();
2801  fpreal64 result;
2802  OP_Utils::evalOpParm(result, thissop, "unguidedlength", cookparms.getCookTime(), 0);
2803  return result;
2804  }
2805  Unguidedlengthoverride getUnguidedlengthoverride() const { return Unguidedlengthoverride(myUnguidedlengthoverride); }
2806  void setUnguidedlengthoverride(Unguidedlengthoverride val) { myUnguidedlengthoverride = int64(val); }
2808  {
2809  SOP_Node *thissop = cookparms.getNode();
2810  if (!thissop) return getUnguidedlengthoverride();
2811  int64 result;
2812  OP_Utils::evalOpParm(result, thissop, "unguidedlengthoverride", cookparms.getCookTime(), 0);
2813  return Unguidedlengthoverride(result);
2814  }
2815  int64 getUnguidedlengthoptions() const { return myUnguidedlengthoptions; }
2816  void setUnguidedlengthoptions(int64 val) { myUnguidedlengthoptions = val; }
2818  {
2819  SOP_Node *thissop = cookparms.getNode();
2820  if (!thissop) return getUnguidedlengthoptions();
2821  int64 result;
2822  OP_Utils::evalOpParm(result, thissop, "unguidedlengthoptions", cookparms.getCookTime(), 0);
2823  return result;
2824  }
2825  UT_Vector2D getUnguidedlengthinrange() const { return myUnguidedlengthinrange; }
2826  void setUnguidedlengthinrange(UT_Vector2D val) { myUnguidedlengthinrange = val; }
2828  {
2829  SOP_Node *thissop = cookparms.getNode();
2830  if (!thissop) return getUnguidedlengthinrange();
2832  OP_Utils::evalOpParm(result, thissop, "unguidedlengthinrange", cookparms.getCookTime(), 0);
2833  return result;
2834  }
2835  UT_Vector2D getUnguidedlengthoutrange() const { return myUnguidedlengthoutrange; }
2836  void setUnguidedlengthoutrange(UT_Vector2D val) { myUnguidedlengthoutrange = val; }
2838  {
2839  SOP_Node *thissop = cookparms.getNode();
2840  if (!thissop) return getUnguidedlengthoutrange();
2842  OP_Utils::evalOpParm(result, thissop, "unguidedlengthoutrange", cookparms.getCookTime(), 0);
2843  return result;
2844  }
2845  const UT_StringHolder & getUnguidedlengthattrib() const { return myUnguidedlengthattrib; }
2846  void setUnguidedlengthattrib(const UT_StringHolder & val) { myUnguidedlengthattrib = val; }
2848  {
2849  SOP_Node *thissop = cookparms.getNode();
2850  if (!thissop) return getUnguidedlengthattrib();
2852  OP_Utils::evalOpParm(result, thissop, "unguidedlengthattrib", cookparms.getCookTime(), 0);
2853  return result;
2854  }
2855  const UT_StringHolder & getUnguidedlengthtexture() const { return myUnguidedlengthtexture; }
2856  void setUnguidedlengthtexture(const UT_StringHolder & val) { myUnguidedlengthtexture = val; }
2858  {
2859  SOP_Node *thissop = cookparms.getNode();
2860  if (!thissop) return getUnguidedlengthtexture();
2862  OP_Utils::evalOpParm(result, thissop, "unguidedlengthtexture", cookparms.getCookTime(), 0);
2863  return result;
2864  }
2865  const UT_StringHolder & getUnguidedlengthtextureprim() const { return myUnguidedlengthtextureprim; }
2866  void setUnguidedlengthtextureprim(const UT_StringHolder & val) { myUnguidedlengthtextureprim = val; }
2868  {
2869  SOP_Node *thissop = cookparms.getNode();
2870  if (!thissop) return getUnguidedlengthtextureprim();
2872  OP_Utils::evalOpParm(result, thissop, "unguidedlengthtextureprim", cookparms.getCookTime(), 0);
2873  return result;
2874  }
2875  fpreal64 getUnguidedminlength() const { return myUnguidedminlength; }
2876  void setUnguidedminlength(fpreal64 val) { myUnguidedminlength = val; }
2878  {
2879  SOP_Node *thissop = cookparms.getNode();
2880  if (!thissop) return getUnguidedminlength();
2881  fpreal64 result;
2882  OP_Utils::evalOpParm(result, thissop, "unguidedminlength", cookparms.getCookTime(), 0);
2883  return result;
2884  }
2885  bool getCreateweightattribs() const { return myCreateweightattribs; }
2886  void setCreateweightattribs(bool val) { myCreateweightattribs = val; }
2887  bool opCreateweightattribs(const SOP_NodeVerb::CookParms &cookparms) const
2888  {
2889  SOP_Node *thissop = cookparms.getNode();
2890  if (!thissop) return getCreateweightattribs();
2891  bool result;
2892  OP_Utils::evalOpParm(result, thissop, "createweightattribs", cookparms.getCookTime(), 0);
2893  return result;
2894  }
2895  bool getCreaterestrootattrib() const { return myCreaterestrootattrib; }
2896  void setCreaterestrootattrib(bool val) { myCreaterestrootattrib = val; }
2898  {
2899  SOP_Node *thissop = cookparms.getNode();
2900  if (!thissop) return getCreaterestrootattrib();
2901  bool result;
2902  OP_Utils::evalOpParm(result, thissop, "createrestrootattrib", cookparms.getCookTime(), 0);
2903  return result;
2904  }
2905  const UT_StringHolder & getClumpidattrib() const { return myClumpidattrib; }
2906  void setClumpidattrib(const UT_StringHolder & val) { myClumpidattrib = val; }
2908  {
2909  SOP_Node *thissop = cookparms.getNode();
2910  if (!thissop) return getClumpidattrib();
2912  OP_Utils::evalOpParm(result, thissop, "clumpidattrib", cookparms.getCookTime(), 0);
2913  return result;
2914  }
2915  bool getOutputthicknessattrib() const { return myOutputthicknessattrib; }
2916  void setOutputthicknessattrib(bool val) { myOutputthicknessattrib = val; }
2918  {
2919  SOP_Node *thissop = cookparms.getNode();
2920  if (!thissop) return getOutputthicknessattrib();
2921  bool result;
2922  OP_Utils::evalOpParm(result, thissop, "outputthicknessattrib", cookparms.getCookTime(), 0);
2923  return result;
2924  }
2925  const UT_StringHolder & getThicknessattrib() const { return myThicknessattrib; }
2926  void setThicknessattrib(const UT_StringHolder & val) { myThicknessattrib = val; }
2928  {
2929  SOP_Node *thissop = cookparms.getNode();
2930  if (!thissop) return getThicknessattrib();
2932  OP_Utils::evalOpParm(result, thissop, "thicknessattrib", cookparms.getCookTime(), 0);
2933  return result;
2934  }
2935  fpreal64 getThickness() const { return myThickness; }
2936  void setThickness(fpreal64 val) { myThickness = val; }
2938  {
2939  SOP_Node *thissop = cookparms.getNode();
2940  if (!thissop) return getThickness();
2941  fpreal64 result;
2942  OP_Utils::evalOpParm(result, thissop, "thickness", cookparms.getCookTime(), 0);
2943  return result;
2944  }
2945  Thicknessoverride getThicknessoverride() const { return Thicknessoverride(myThicknessoverride); }
2946  void setThicknessoverride(Thicknessoverride val) { myThicknessoverride = int64(val); }
2948  {
2949  SOP_Node *thissop = cookparms.getNode();
2950  if (!thissop) return getThicknessoverride();
2951  int64 result;
2952  OP_Utils::evalOpParm(result, thissop, "thicknessoverride", cookparms.getCookTime(), 0);
2953  return Thicknessoverride(result);
2954  }
2955  const UT_StringHolder & getThicknessskinattrib() const { return myThicknessskinattrib; }
2956  void setThicknessskinattrib(const UT_StringHolder & val) { myThicknessskinattrib = val; }
2958  {
2959  SOP_Node *thissop = cookparms.getNode();
2960  if (!thissop) return getThicknessskinattrib();
2962  OP_Utils::evalOpParm(result, thissop, "thicknessskinattrib", cookparms.getCookTime(), 0);
2963  return result;
2964  }
2965  const UT_StringHolder & getThicknesstexture() const { return myThicknesstexture; }
2966  void setThicknesstexture(const UT_StringHolder & val) { myThicknesstexture = val; }
2968  {
2969  SOP_Node *thissop = cookparms.getNode();
2970  if (!thissop) return getThicknesstexture();
2972  OP_Utils::evalOpParm(result, thissop, "thicknesstexture", cookparms.getCookTime(), 0);
2973  return result;
2974  }
2975  UT_SharedPtr<UT_Ramp> getHairprofile() const { return myHairprofile; }
2976  void setHairprofile(UT_SharedPtr<UT_Ramp> val) { myHairprofile = val; }
2978  {
2979  SOP_Node *thissop = cookparms.getNode();
2980  if (!thissop) return getHairprofile();
2982  OP_Utils::evalOpParm(result, thissop, "hairprofile", cookparms.getCookTime(), 0);
2983  return result;
2984  }
2985  const UT_StringHolder & getPointattribs() const { return myPointattribs; }
2986  void setPointattribs(const UT_StringHolder & val) { myPointattribs = val; }
2988  {
2989  SOP_Node *thissop = cookparms.getNode();
2990  if (!thissop) return getPointattribs();
2992  OP_Utils::evalOpParm(result, thissop, "pointattribs", cookparms.getCookTime(), 0);
2993  return result;
2994  }
2995  const UT_StringHolder & getVertattribs() const { return myVertattribs; }
2996  void setVertattribs(const UT_StringHolder & val) { myVertattribs = val; }
2998  {
2999  SOP_Node *thissop = cookparms.getNode();
3000  if (!thissop) return getVertattribs();
3002  OP_Utils::evalOpParm(result, thissop, "vertattribs", cookparms.getCookTime(), 0);
3003  return result;
3004  }
3005  const UT_StringHolder & getPrimattribs() const { return myPrimattribs; }
3006  void setPrimattribs(const UT_StringHolder & val) { myPrimattribs = val; }
3008  {
3009  SOP_Node *thissop = cookparms.getNode();
3010  if (!thissop) return getPrimattribs();
3012  OP_Utils::evalOpParm(result, thissop, "primattribs", cookparms.getCookTime(), 0);
3013  return result;
3014  }
3015  const UT_StringHolder & getDetailattribs() const { return myDetailattribs; }
3016  void setDetailattribs(const UT_StringHolder & val) { myDetailattribs = val; }
3018  {
3019  SOP_Node *thissop = cookparms.getNode();
3020  if (!thissop) return getDetailattribs();
3022  OP_Utils::evalOpParm(result, thissop, "detailattribs", cookparms.getCookTime(), 0);
3023  return result;
3024  }
3025  const UT_StringHolder & getGuidepointattribs() const { return myGuidepointattribs; }
3026  void setGuidepointattribs(const UT_StringHolder & val) { myGuidepointattribs = val; }
3028  {
3029  SOP_Node *thissop = cookparms.getNode();
3030  if (!thissop) return getGuidepointattribs();
3032  OP_Utils::evalOpParm(result, thissop, "guidepointattribs", cookparms.getCookTime(), 0);
3033  return result;
3034  }
3035  const UT_StringHolder & getGuideprimattribs() const { return myGuideprimattribs; }
3036  void setGuideprimattribs(const UT_StringHolder & val) { myGuideprimattribs = val; }
3038  {
3039  SOP_Node *thissop = cookparms.getNode();
3040  if (!thissop) return getGuideprimattribs();
3042  OP_Utils::evalOpParm(result, thissop, "guideprimattribs", cookparms.getCookTime(), 0);
3043  return result;
3044  }
3045  const UT_Array<WeightArrayPairs> &getWeightArrayPairs() const { return myWeightArrayPairs; }
3046 void setWeightArrayPairs(const UT_Array<WeightArrayPairs> &val) { myWeightArrayPairs = val; }
3048  {
3049  SOP_Node *thissop = cookparms.getNode();
3050  if (!thissop) return getWeightArrayPairs().entries();
3051  exint result;
3052  OP_Utils::evalOpParm(result, thissop, "folder_weightarraypairs", cookparms.getCookTime(), 0);
3053  return result;
3054  }
3056  { return opinstWeightArrayPairs_guideindexattrib(cookparms, &_idx); }
3058  {
3059  SOP_Node *thissop = cookparms.getNode();
3060  if (!thissop) return (myWeightArrayPairs(_idx[0]).guideindexattrib);
3061  int _parmidx[2-1];
3062  _parmidx[1-1] = _idx[1-1] + 0;
3063 
3065  OP_Utils::evalOpParmInst(result, thissop, "guideindexattrib#", _parmidx, cookparms.getCookTime(), 0, 2-1);
3066  return (result);
3067  }
3069  { return opinstWeightArrayPairs_guideweightattrib(cookparms, &_idx); }
3071  {
3072  SOP_Node *thissop = cookparms.getNode();
3073  if (!thissop) return (myWeightArrayPairs(_idx[0]).guideweightattrib);
3074  int _parmidx[2-1];
3075  _parmidx[1-1] = _idx[1-1] + 0;
3076 
3078  OP_Utils::evalOpParmInst(result, thissop, "guideweightattrib#", _parmidx, cookparms.getCookTime(), 0, 2-1);
3079  return (result);
3080  }
3081 
3082 
3083 private:
3084  int64 myMode;
3085  UT_StringHolder myGroup;
3086  UT_StringHolder myUvattrib;
3087  bool myLimittobbox;
3088  UT_Vector3D myBBoxSize;
3089  UT_Vector3D myBBoxCenter;
3090  bool myPrune;
3091  fpreal64 myPruningratio;
3092  bool myPrunethicken;
3093  bool myUseguides;
3094  bool myUniformguidesegments;
3095  bool mySkininterp;
3096  bool myUseInterpMesh;
3097  UT_StringHolder mySkininterpguidesattrib;
3098  UT_StringHolder mySkininterpweightsattrib;
3099  int64 mySkinguidemode;
3100  int64 myGuideblendmethod;
3101  UT_StringHolder myGuidegroup;
3102  fpreal64 myInfluenceradius;
3103  int64 myInfluenceradiusoverride;
3104  int64 myInfluenceradiusoptions;
3105  UT_Vector2D myInfluenceradiusinrange;
3106  UT_Vector2D myInfluenceradiusoutrange;
3107  UT_StringHolder myInfluenceradiusattrib;
3108  UT_StringHolder myInfluenceradiustexture;
3109  UT_StringHolder myInfluenceradiustextureprim;
3110  fpreal64 myInfluencedecay;
3111  int64 myInfluencedecayoverride;
3112  int64 myInfluencedecayoptions;
3113  UT_Vector2D myInfluencedecayinrange;
3114  UT_Vector2D myInfluencedecayoutrange;
3115  UT_StringHolder myInfluencedecayattrib;
3116  UT_StringHolder myInfluencedecaytexture;
3117  UT_StringHolder myInfluencedecaytextureprim;
3118  int64 myMaxguidecount;
3119  int64 myMaxguidecountoverride;
3120  int64 myMaxguidecountoptions;
3121  UT_Vector2D myMaxguidecountinrange;
3122  UT_Vector2D myMaxguidecountoutrange;
3123  UT_StringHolder myMaxguidecountattrib;
3124  UT_StringHolder myMaxguidecounttexture;
3125  UT_StringHolder myMaxguidecounttextureprim;
3126  fpreal64 myMaxguideangle;
3127  int64 myMaxguideangleoverride;
3128  int64 myMaxguideangleoptions;
3129  UT_Vector2D myMaxguideangleinrange;
3130  UT_Vector2D myMaxguideangleoutrange;
3131  UT_StringHolder myMaxguideangleattrib;
3132  UT_StringHolder myMaxguideangletexture;
3133  UT_StringHolder myMaxguideangletextureprim;
3134  fpreal64 myClumpcrossover;
3135  int64 myClumpcrossoveroverride;
3136  int64 myClumpcrossoveroptions;
3137  UT_Vector2D myClumpcrossoverinrange;
3138  UT_Vector2D myClumpcrossoveroutrange;
3139  UT_StringHolder myClumpcrossoverattrib;
3140  UT_StringHolder myClumpcrossovertexture;
3141  UT_StringHolder myClumpcrossovertextureprim;
3142  bool myGrowunguided;
3143  bool myUseinitdirattrib;
3144  UT_StringHolder myInitdirattrib;
3145  int64 myUnguidedsegments;
3146  fpreal64 myUnguidedlength;
3147  int64 myUnguidedlengthoverride;
3148  int64 myUnguidedlengthoptions;
3149  UT_Vector2D myUnguidedlengthinrange;
3150  UT_Vector2D myUnguidedlengthoutrange;
3151  UT_StringHolder myUnguidedlengthattrib;
3152  UT_StringHolder myUnguidedlengthtexture;
3153  UT_StringHolder myUnguidedlengthtextureprim;
3154  fpreal64 myUnguidedminlength;
3155  bool myCreateweightattribs;
3156  bool myCreaterestrootattrib;
3157  UT_StringHolder myClumpidattrib;
3158  bool myOutputthicknessattrib;
3159  UT_StringHolder myThicknessattrib;
3160  fpreal64 myThickness;
3161  int64 myThicknessoverride;
3162  UT_StringHolder myThicknessskinattrib;
3163  UT_StringHolder myThicknesstexture;
3164  UT_SharedPtr<UT_Ramp> myHairprofile;
3165  UT_StringHolder myPointattribs;
3166  UT_StringHolder myVertattribs;
3167  UT_StringHolder myPrimattribs;
3168  UT_StringHolder myDetailattribs;
3169  UT_StringHolder myGuidepointattribs;
3170  UT_StringHolder myGuideprimattribs;
3171  UT_Array<WeightArrayPairs> myWeightArrayPairs;
3172 
3173 };
Influenceradiusoverride getInfluenceradiusoverride() const
UT_StringHolder opVertattribs(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 getUnguidedlength() const
UT_Vector2D opMaxguidecountoutrange(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opGroup(const SOP_NodeVerb::CookParms &cookparms) const
Thicknessoverride getThicknessoverride() const
int64 opMaxguideangleoptions(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opInfluenceradiustexture(const SOP_NodeVerb::CookParms &cookparms) const
UT_Vector2D getClumpcrossoverinrange() const
UT_Vector2D opInfluenceradiusoutrange(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getPointattribs() const
static void saveData(std::ostream &os, fpreal64 v)
void setThicknessoverride(Thicknessoverride val)
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector3D &value) override
void setClumpcrossovertextureprim(const UT_StringHolder &val)
const UT_StringHolder & getPrimattribs() const
static void saveData(std::ostream &os, UT_Vector4D v)
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glcorearb.h:2540
void setMaxguideangleinrange(UT_Vector2D val)
void setUnguidedlength(fpreal64 val)
bool opUseInterpMesh(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 opPruningratio(const SOP_NodeVerb::CookParms &cookparms) const
int int32
Definition: SYS_Types.h:39
SOP_Node * getNode() const
Definition: SOP_NodeVerb.h:347
void getNestParmValue(TempIndex idx, TempIndex instance, fpreal &value) const override
void setMaxguidecountoptions(int64 val)
void setGuidegroup(const UT_StringHolder &val)
int64 getMaxguideangleoptions() const
int64 opClumpcrossoveroptions(const SOP_NodeVerb::CookParms &cookparms) const
const char * getNestParmName(TempIndex fieldnum) const override
Maxguideangleoverride getMaxguideangleoverride() const
void setMaxguidecount(int64 val)
const UT_StringHolder & getInfluenceradiusattrib() const
void setThicknesstexture(const UT_StringHolder &val)
static void loadData(UT_IStream &is, UT_Vector4I &v)
UT_StringHolder opMaxguidecountattrib(const SOP_NodeVerb::CookParms &cookparms) const
void setMaxguideangleoutrange(UT_Vector2D val)
UT_StringHolder createString(const UT_Array< WeightArrayPairs > &list) const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_StringHolder &value) override
void setCreaterestrootattrib(bool val)
UT_StringHolder opDetailattribs(const SOP_NodeVerb::CookParms &cookparms) const
void doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
const UT_StringHolder & getMaxguidecounttextureprim() const
void setClumpcrossoveroutrange(UT_Vector2D val)
bool getUniformguidesegments() const
void
Definition: png.h:1083
const UT_StringHolder & getDetailattribs() const
void setInfluenceradiusoptions(int64 val)
exint bread(int32 *buffer, exint asize=1)
GLboolean * data
Definition: glcorearb.h:131
GT_API const UT_StringHolder time
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector4.h:493
const GLdouble * v
Definition: glcorearb.h:837
UT_StringHolder opGuidegroup(const SOP_NodeVerb::CookParms &cookparms) const
void setMaxguidecounttextureprim(const UT_StringHolder &val)
void setClumpcrossoverattrib(const UT_StringHolder &val)
fpreal64 getPruningratio() const
fpreal getTime() const
Definition: OP_Context.h:62
static void saveData(std::ostream &os, UT_Matrix2D v)
fpreal64 getMaxguideangle() const
UT_Vector2T< fpreal64 > UT_Vector2D
void copyFrom(const OP_NodeParms *src) override
const UT_StringHolder & getInfluenceradiustexture() const
fpreal64 getInfluenceradius() const
int64 getUnguidedsegments() const
UT_StringHolder opMaxguidecounttexture(const SOP_NodeVerb::CookParms &cookparms) const
void setMaxguideangleattrib(const UT_StringHolder &val)
UT_StringHolder opUnguidedlengthtextureprim(const SOP_NodeVerb::CookParms &cookparms) const
UT_Vector2D opInfluenceradiusinrange(const SOP_NodeVerb::CookParms &cookparms) const
void setMaxguidecountattrib(const UT_StringHolder &val)
static void loadData(UT_IStream &is, UT_Vector3D &v)
UT_String makeQuotedString(char delimiter='\'', bool escape_nonprinting=false) const
void setGroup(const UT_StringHolder &val)
const OP_Context & context() const
Definition: OP_NodeParms.h:97
void setInitdirattrib(const UT_StringHolder &val)
UT_StringHolder opMaxguidecounttextureprim(const SOP_NodeVerb::CookParms &cookparms) const
constexpr SYS_FORCE_INLINE T & z() noexcept
Definition: UT_Vector3.h:667
int64 exint
Definition: SYS_Types.h:125
void setSkininterpguidesattrib(const UT_StringHolder &val)
static void loadData(UT_IStream &is, PRM_DataItemHandle &v)
void setUnguidedlengthinrange(UT_Vector2D val)
int64 opMaxguidecountoptions(const SOP_NodeVerb::CookParms &cookparms) const
UT_Vector2D getInfluenceradiusoutrange() const
SYS_FORCE_INLINE const char * buffer() const
static void loadData(UT_IStream &is, bool &v)
GLdouble s
Definition: glad.h:3009
GLuint GLsizei GLsizei * length
Definition: glcorearb.h:795
const UT_StringHolder & getInfluencedecayattrib() const
void setClumpcrossoveroptions(int64 val)
void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
void getNestParmValue(TempIndex idx, TempIndex instance, exint &value) const override
An output stream object that owns its own string buffer storage.
const UT_StringHolder & getThicknessskinattrib() const
Skinguidemode getSkinguidemode() const
UT_Vector2D opMaxguidecountinrange(const SOP_NodeVerb::CookParms &cookparms) const
Maxguidecountoverride getMaxguidecountoverride() const
void setInfluencedecaytexture(const UT_StringHolder &val)
UT_StringHolder opInfluencedecayattrib(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, UT_Vector2D &v)
UT_Vector2D opUnguidedlengthoutrange(const SOP_NodeVerb::CookParms &cookparms) const
**But if you need a result
Definition: thread.h:613
void setMaxguideangletexture(const UT_StringHolder &val)
bool load(UT_IStream &is)
bool operator!=(const SOP_HairGenCoreParms &src) const
bool getCreaterestrootattrib() const
void setInfluenceradiusoverride(Influenceradiusoverride val)
UT_StringHolder opThicknesstexture(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getInfluencedecaytexture() const
const UT_StringHolder & getMaxguidecountattrib() const
void save(std::ostream &os) const
UT_StringHolder opUnguidedlengthattrib(const SOP_NodeVerb::CookParms &cookparms) const
exint nodeIdx() const
Definition: OP_NodeParms.h:95
static PRM_DataItemHandle parseBinary(const char *type, UT_IStream &is)
Guideblendmethod opGuideblendmethod(const SOP_NodeVerb::CookParms &cookparms) const
const UT_WorkBuffer & str()
Returns a read-only reference to the underlying UT_WorkBuffer.
const UT_StringHolder & getThicknessattrib() const
void setMaxguideangleoverride(Maxguideangleoverride val)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector3D &value) const override
int64 opInfluencedecayoptions(const SOP_NodeVerb::CookParms &cookparms) const
bool opOutputthicknessattrib(const SOP_NodeVerb::CookParms &cookparms) const
void setUnguidedsegments(int64 val)
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector4.h:491
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix4D &value) const override
static void loadData(UT_IStream &is, UT_Vector3I &v)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix2D &value) const override
bool operator==(const SOP_HairGenCoreParms &src) const
exint opWeightArrayPairs(const SOP_NodeVerb::CookParms &cookparms) const
void setClumpcrossoverinrange(UT_Vector2D val)
GLuint GLsizei const GLuint const GLintptr * offsets
Definition: glcorearb.h:2621
double fpreal64
Definition: SYS_Types.h:201
UT_StringHolder opMaxguideangletextureprim(const SOP_NodeVerb::CookParms &cookparms) const
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector2.h:423
void setSkininterpweightsattrib(const UT_StringHolder &val)
fpreal64 getInfluencedecay() const
void setUvattrib(const UT_StringHolder &val)
const UT_StringHolder & getGroup() const
UT_StringHolder opUnguidedlengthtexture(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opClumpcrossoverattrib(const SOP_NodeVerb::CookParms &cookparms) const
UT_Vector3D opBBoxCenter(const SOP_NodeVerb::CookParms &cookparms) const
bool operator==(const BaseDimensions< T > &a, const BaseDimensions< Y > &b)
Definition: Dimensions.h:137
bool getCreateweightattribs() const
static void saveData(std::ostream &os, PRM_DataItemHandle s)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector2D &value) const override
int64 getInfluencedecayoptions() const
void setUnguidedlengthoverride(Unguidedlengthoverride val)
void setGuideprimattribs(const UT_StringHolder &val)
static void loadData(UT_IStream &is, UT_Matrix3D &v)
void setMaxguideangletextureprim(const UT_StringHolder &val)
void setPrimattribs(const UT_StringHolder &val)
const UT_StringHolder & getMaxguidecounttexture() const
const UT_StringHolder & getClumpcrossoverattrib() const
void doGetParmValue(TempIndex idx, TempIndex instance, T &value) const
void setUnguidedminlength(fpreal64 val)
Maxguidecountoverride opMaxguidecountoverride(const SOP_NodeVerb::CookParms &cookparms) const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector2D &value) override
void setHairprofile(UT_SharedPtr< UT_Ramp > val)
Influenceradiusoverride opInfluenceradiusoverride(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opMaxguideangleattrib(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 opMaxguideangle(const SOP_NodeVerb::CookParms &cookparms) const
void setClumpidattrib(const UT_StringHolder &val)
exint length() const
fpreal64 opUnguidedminlength(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, fpreal64 &v)
UT_Vector3D getBBoxSize() const
SYS_FORCE_INLINE const char * buffer() const
std::shared_ptr< T > UT_SharedPtr
Wrapper around std::shared_ptr.
Definition: UT_SharedPtr.h:36
UT_SharedPtr< UT_Ramp > opHairprofile(const SOP_NodeVerb::CookParms &cookparms) const
constexpr SYS_FORCE_INLINE T & z() noexcept
Definition: UT_Vector4.h:495
Clumpcrossoveroverride opClumpcrossoveroverride(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opThicknessskinattrib(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 opInfluenceradius(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getUnguidedlengthattrib() const
bool operator!=(const WeightArrayPairs &src) const
UT_StringHolder opClumpcrossovertexture(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getInfluencedecaytextureprim() const
UT_StringHolder opInfluencedecaytextureprim(const SOP_NodeVerb::CookParms &cookparms) const
Clumpcrossoveroverride getClumpcrossoveroverride() const
bool getOutputthicknessattrib() const
exint read(bool *array, exint sz=1)
Definition: UT_IStream.h:276
const OP_GraphProxy * graph() const
Definition: OP_NodeParms.h:94
#define SYS_FORCE_INLINE
Definition: SYS_Inline.h:45
bool opCreateweightattribs(const SOP_NodeVerb::CookParms &cookparms) const
void setThickness(fpreal64 val)
const UT_StringHolder & getVertattribs() const
UT_Vector2D getMaxguideangleinrange() const
static void loadData(UT_IStream &is, UT_Vector4D &v)
void setInfluencedecayoverride(Influencedecayoverride val)
void setGuidepointattribs(const UT_StringHolder &val)
const UT_StringHolder & getInitdirattrib() const
virtual void evalOpParmInst(int64 &v, NodeIdx node, const char *parmname, const int *inst, const int *offsets, fpreal time, DEP_MicroNode *depnode, int nestlevel=1) const =0
const UT_StringHolder & getSkininterpguidesattrib() const
const UT_StringHolder & getMaxguideangletexture() const
UT_Vector2D getInfluenceradiusinrange() const
bool opPrunethicken(const SOP_NodeVerb::CookParms &cookparms) const
void setOutputthicknessattrib(bool val)
long long int64
Definition: SYS_Types.h:116
void setNestParmValue(TempIndex idx, TempIndex instance, const PRM_DataItemHandle &value) override
UT_StringHolder opThicknessattrib(const SOP_NodeVerb::CookParms &cookparms) const
Skinguidemode opSkinguidemode(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, UT_Matrix4D &v)
void setMaxguidecountoverride(Maxguidecountoverride val)
void setInfluencedecayattrib(const UT_StringHolder &val)
const UT_StringHolder & getMaxguideangletextureprim() const
UT_Vector3T< fpreal64 > UT_Vector3D
int64 getUnguidedlengthoptions() const
UT_Vector2D opInfluencedecayoutrange(const SOP_NodeVerb::CookParms &cookparms) const
void setUnguidedlengthoutrange(UT_Vector2D val)
UT_StringHolder opWeightArrayPairs_guideindexattrib(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
const UT_StringHolder & getClumpcrossovertexture() const
bool opUniformguidesegments(const SOP_NodeVerb::CookParms &cookparms) const
void setUnguidedlengthtexture(const UT_StringHolder &val)
void setMaxguidecounttexture(const UT_StringHolder &val)
UT_StringHolder opSkininterpweightsattrib(const SOP_NodeVerb::CookParms &cookparms) const
Influencedecayoverride opInfluencedecayoverride(const SOP_NodeVerb::CookParms &cookparms) const
UT_Vector2D getInfluencedecayoutrange() const
static void saveData(std::ostream &os, bool v)
bool opSkininterp(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 getUnguidedminlength() const
int64 opUnguidedsegments(const SOP_NodeVerb::CookParms &cookparms) const
void setGuideblendmethod(Guideblendmethod val)
virtual void evalOpParm(int64 &v, NodeIdx node, const char *parmname, fpreal time, DEP_MicroNode *depnode) const =0
fpreal64 opThickness(const SOP_NodeVerb::CookParms &cookparms) const
void setInfluenceradiusinrange(UT_Vector2D val)
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix4D &value) override
static void loadData(UT_IStream &is, UT_SharedPtr< UT_Ramp > &v)
Mode opMode(const SOP_NodeVerb::CookParms &cookparms) const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_SharedPtr< UT_Ramp > &value) override
SYS_FORCE_INLINE void strcat(const char *src)
UT_StringHolder opinstWeightArrayPairs_guideweightattrib(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
void saveBinary(std::ostream &os) const
Save string to binary stream.
Definition: UT_String.h:296
SYS_FORCE_INLINE UT_StringHolder getToken(Mode enum_value)
UT_StringHolder opClumpidattrib(const SOP_NodeVerb::CookParms &cookparms) const
Guideblendmethod getGuideblendmethod() const
UT_Vector3D getBBoxCenter() const
UT_Vector2D opClumpcrossoverinrange(const SOP_NodeVerb::CookParms &cookparms) const
GT_API const UT_StringHolder version
void setNestParmValue(TempIndex idx, TempIndex instance, const fpreal &value) override
static void saveData(std::ostream &os, int64 v)
exint entries() const
Alias of size(). size() is preferred.
Definition: UT_Array.h:648
bool opCreaterestrootattrib(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getUvattrib() const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_StringHolder &value) const override
void setVertattribs(const UT_StringHolder &val)
void setMaxguideangleoptions(int64 val)
UT_Vector2D getUnguidedlengthoutrange() const
UT_Vector2D opInfluencedecayinrange(const SOP_NodeVerb::CookParms &cookparms) const
void setMaxguidecountoutrange(UT_Vector2D val)
static void loadData(UT_IStream &is, int64 &v)
const UT_StringHolder & getClumpidattrib() const
UT_StringHolder opPrimattribs(const SOP_NodeVerb::CookParms &cookparms) const
int64 opUnguidedlengthoptions(const SOP_NodeVerb::CookParms &cookparms) const
UT_Vector3D opBBoxSize(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 getThickness() const
void setMaxguideangle(fpreal64 val)
void setDetailattribs(const UT_StringHolder &val)
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix3D &value) override
UT_StringHolder opInfluencedecaytexture(const SOP_NodeVerb::CookParms &cookparms) const
void setWeightArrayPairs(const UT_Array< WeightArrayPairs > &val)
int64 opInfluenceradiusoptions(const SOP_NodeVerb::CookParms &cookparms) const
bool opPrune(const SOP_NodeVerb::CookParms &cookparms) const
ParmType getNestParmType(TempIndex fieldnum) const override
UT_Vector2D getMaxguidecountoutrange() const
void setUniformguidesegments(bool val)
fpreal64 fpreal
Definition: SYS_Types.h:277
Maxguideangleoverride opMaxguideangleoverride(const SOP_NodeVerb::CookParms &cookparms) const
DEP_MicroNode * depnode() const
Definition: OP_NodeParms.h:99
void getNestParmValue(TempIndex idx, TempIndex instance, UT_SharedPtr< UT_Ramp > &value) const override
const UT_StringHolder & getMaxguideangleattrib() const
Unguidedlengthoverride getUnguidedlengthoverride() const
static void saveData(std::ostream &os, UT_SharedPtr< UT_Ramp > s)
void setUnguidedlengthtextureprim(const UT_StringHolder &val)
LeafData & operator=(const LeafData &)=delete
Utility class for containing a color ramp.
Definition: UT_Ramp.h:92
void setBBoxSize(UT_Vector3D val)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector4D &value) const override
static void loadData(UT_IStream &is, UT_Vector2I &v)
bool isParmColorRamp(exint idx) const override
void setClumpcrossoveroverride(Clumpcrossoveroverride val)
int64 getMaxguidecountoptions() const
UT_StringHolder opUvattrib(const SOP_NodeVerb::CookParms &cookparms) const
constexpr SYS_FORCE_INLINE T & w() noexcept
Definition: UT_Vector4.h:497
SYS_FORCE_INLINE void append(char character)
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector4D &value) override
GLuint GLfloat * val
Definition: glcorearb.h:1608
Thicknessoverride opThicknessoverride(const SOP_NodeVerb::CookParms &cookparms) const
UT_Vector2D getMaxguideangleoutrange() const
#define SOP_API
Definition: SOP_API.h:10
static void saveData(std::ostream &os, UT_Vector2D v)
const UT_StringHolder & getGuideprimattribs() const
void setInfluenceradius(fpreal64 val)
void setInfluencedecayoptions(int64 val)
bool operator==(const WeightArrayPairs &src) const
UT_StringHolder opinstWeightArrayPairs_guideindexattrib(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix2D &value) override
Unguidedlengthoverride opUnguidedlengthoverride(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getSkininterpweightsattrib() const
fpreal64 opUnguidedlength(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opInfluenceradiustextureprim(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getGuidepointattribs() const
UT_StringHolder opMaxguideangletexture(const SOP_NodeVerb::CookParms &cookparms) const
UT_Vector2D getUnguidedlengthinrange() const
fpreal getCookTime() const
Definition: SOP_NodeVerb.h:361
UT_Vector2D opMaxguideangleinrange(const SOP_NodeVerb::CookParms &cookparms) const
bool opUseguides(const SOP_NodeVerb::CookParms &cookparms) const
void setUnguidedlengthattrib(const UT_StringHolder &val)
static void saveData(std::ostream &os, UT_Matrix3D v)
void setBBoxCenter(UT_Vector3D val)
bool opGrowunguided(const SOP_NodeVerb::CookParms &cookparms) const
const char * findChar(int c) const
Definition: UT_String.h:1395
#define UT_ASSERT(ZZ)
Definition: UT_Assert.h:156
Definition: core.h:1131
UT_StringHolder opInitdirattrib(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 getClumpcrossover() const
void setPruningratio(fpreal64 val)
UT_Vector2D getMaxguidecountinrange() const
void setPointattribs(const UT_StringHolder &val)
exint getNestNumParms(TempIndex idx) const override
void setInfluencedecay(fpreal64 val)
const UT_StringHolder & getThicknesstexture() const
void setInfluencedecayoutrange(UT_Vector2D val)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
UT_StringHolder opSkininterpguidesattrib(const SOP_NodeVerb::CookParms &cookparms) const
GLboolean r
Definition: glcorearb.h:1222
void setClumpcrossovertexture(const UT_StringHolder &val)
void setInfluencedecaytextureprim(const UT_StringHolder &val)
bool opUseinitdirattrib(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opGuidepointattribs(const SOP_NodeVerb::CookParms &cookparms) const
void setInfluencedecayinrange(UT_Vector2D val)
UT_StringHolder opWeightArrayPairs_guideweightattrib(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
void setUnguidedlengthoptions(int64 val)
void setUseinitdirattrib(bool val)
static void saveData(std::ostream &os, UT_Vector3D v)
UT_StringHolder opPointattribs(const SOP_NodeVerb::CookParms &cookparms) const
int64 getClumpcrossoveroptions() const
UT_Vector2D getClumpcrossoveroutrange() const
void setThicknessattrib(const UT_StringHolder &val)
fpreal64 opClumpcrossover(const SOP_NodeVerb::CookParms &cookparms) const
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector3.h:665
void buildFromOp(const OP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
static void loadData(UT_IStream &is, UT_StringHolder &v)
void setSkinguidemode(Skinguidemode val)
void setNestParmValue(TempIndex idx, TempIndex instance, const exint &value) override
UT_SharedPtr< UT_Ramp > getHairprofile() const
UT_StringHolder opGuideprimattribs(const SOP_NodeVerb::CookParms &cookparms) const
int64 opMaxguidecount(const SOP_NodeVerb::CookParms &cookparms) const
type
Definition: core.h:1059
UT_Vector2D opUnguidedlengthinrange(const SOP_NodeVerb::CookParms &cookparms) const
const UT_Array< WeightArrayPairs > & getWeightArrayPairs() const
void setCreateweightattribs(bool val)
void setClumpcrossover(fpreal64 val)
const UT_StringHolder & getUnguidedlengthtexture() const
Influencedecayoverride getInfluencedecayoverride() const
void setMaxguidecountinrange(UT_Vector2D val)
fpreal64 opInfluencedecay(const SOP_NodeVerb::CookParms &cookparms) const
void loadFromOpSubclass(const LoadParms &loadparms) override
UT_Vector2D getInfluencedecayinrange() const
void setThicknessskinattrib(const UT_StringHolder &val)
const UT_StringHolder & getInfluenceradiustextureprim() const
UT_SharedPtr< const PRM_DataItem > PRM_DataItemHandle
Definition: PRM_Parm.h:97
int64 getInfluenceradiusoptions() const
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector2.h:425
static void saveData(std::ostream &os, UT_StringHolder s)
void setInfluenceradiusoutrange(UT_Vector2D val)
static void saveData(std::ostream &os, UT_Matrix4D v)
SYS_FORCE_INLINE bool isstring() const
UT_Vector2D opMaxguideangleoutrange(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getClumpcrossovertextureprim() const
UT_StringHolder opInfluenceradiusattrib(const SOP_NodeVerb::CookParms &cookparms) const
bool opLimittobbox(const SOP_NodeVerb::CookParms &cookparms) const
SYS_FORCE_INLINE void strncpy(const char *src, exint maxlen)
UT_StringHolder opClumpcrossovertextureprim(const SOP_NodeVerb::CookParms &cookparms) const
void setInfluenceradiusattrib(const UT_StringHolder &val)
const UT_StringHolder & getUnguidedlengthtextureprim() const
static void loadData(UT_IStream &is, UT_Matrix2D &v)
void setInfluenceradiustextureprim(const UT_StringHolder &val)
GLenum src
Definition: glcorearb.h:1793
const UT_StringHolder & getGuidegroup() const
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector3.h:663
void setInfluenceradiustexture(const UT_StringHolder &val)
UT_Vector2D opClumpcrossoveroutrange(const SOP_NodeVerb::CookParms &cookparms) const