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