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_NodeVerb.h>
7 #include <SOP/SOP_GraphProxy.h>
8 
9 #include <OP/OP_Utils.h>
10 #include <PRM/PRM_Parm.h>
11 #include <UT/UT_IStream.h>
12 #include <UT/UT_NTStreamUtil.h>
13 #include <UT/UT_Ramp.h>
14 #include <UT/UT_SharedPtr.h>
15 #include <UT/UT_StringHolder.h>
16 #include <UT/UT_StringStream.h>
17 #include <UT/UT_VectorTypes.h>
18 #include <SYS/SYS_Types.h>
19 
20 using namespace UT::Literal;
21 
22 class DEP_MicroNode;
23 namespace SOP_HairGenCoreEnums
24 {
25  enum class Mode
26  {
27  SURFACE = 0,
28  POINTS
29  };
30  enum class Guideblendmethod
31  {
32  LINEARBLEND = 0,
33  EXTRUDEBLEND
34  };
36  {
37  NONE = 0,
38  SKINATTRIB,
39  TEXTURE
40  };
42  {
43  NONE = 0,
44  SKINATTRIB,
45  TEXTURE
46  };
48  {
49  NONE = 0,
50  SKINATTRIB,
51  TEXTURE
52  };
54  {
55  NONE = 0,
56  SKINATTRIB,
57  TEXTURE
58  };
60  {
61  NONE = 0,
62  SKINATTRIB,
63  TEXTURE
64  };
66  {
67  NONE = 0,
68  SKINATTRIB,
69  TEXTURE
70  };
71  enum class Thicknessoverride
72  {
73  NONE = 0,
74  SKINATTRIB,
75  TEXTURE
76  };
77 }
78 
79 
81 {
82 public:
83  static int version() { return 1; }
84 
86  {
87  myMode = 0;
88  myGroup = ""_sh;
89  myUvattrib = "uv"_sh;
90  myLimittobbox = false;
91  myBboxsize = UT_Vector3D(1,1,1);
92  myBboxcenter = UT_Vector3D(0,0,0);
93  myPrune = false;
94  myPruningratio = 0.9;
95  myPrunethicken = false;
96  myUseguides = true;
97  myUniformguidesegments = false;
98  mySkininterp = false;
99  myGuideblendmethod = 0;
100  myGuidegroup = ""_sh;
101  myInfluenceradius = 0.05;
102  myInfluenceradiusoverride = 0;
103  myInfluenceradiusattrib = "influenceradiusscale"_sh;
104  myInfluenceradiustexture = ""_sh;
105  myInfluencedecay = 2;
106  myInfluencedecayoverride = 0;
107  myInfluencedecayattrib = "influencedecayscale"_sh;
108  myInfluencedecaytexture = ""_sh;
109  myMaxguidecount = 10;
110  myMaxguidecountoverride = 0;
111  myMaxguidecountattrib = "maxguidecountscale"_sh;
112  myMaxguidecounttexture = ""_sh;
113  myMaxguideangle = 90;
114  myMaxguideangleoverride = 0;
115  myMaxguideangleattrib = "maxguideanglescale"_sh;
116  myMaxguideangletexture = ""_sh;
117  myClumpcrossover = 0;
118  myClumpcrossoveroverride = 0;
119  myClumpcrossoverattrib = "clumpcrossoverscale"_sh;
120  myClumpcrossovertexture = ""_sh;
121  myGrowunguided = true;
122  myUseinitdirattrib = true;
123  myInitdirattrib = "furdirection"_sh;
124  myUnguidedsegments = 8;
125  myUnguidedlength = 0.05;
126  myUnguidedlengthoverride = 0;
127  myUnguidedlengthattrib = "unguidedlengthscale"_sh;
128  myUnguidedlengthtexture = ""_sh;
129  myUnguidedminlength = 1e-05;
130  myCreateweightattribs = false;
131  myCreaterestrootattrib = true;
132  myOutputthicknessattrib = true;
133  myThicknessattrib = "width"_sh;
134  myThickness = 0.001;
135  myThicknessoverride = 0;
136  myThicknessskinattrib = "thicknessscale"_sh;
137  myThicknesstexture = ""_sh;
138  myHairprofile = UT_SharedPtr<UT_Ramp>(0);
139  myPointattribs = ""_sh;
140  myVertattribs = ""_sh;
141  myPrimattribs = ""_sh;
142  myDetailattribs = ""_sh;
143  myGuidepointattribs = ""_sh;
144  myGuideprimattribs = ""_sh;
145 
146  }
147 
148  explicit SOP_HairGenCoreParms(const SOP_HairGenCoreParms &) = default;
149 
150  ~SOP_HairGenCoreParms() override {}
151 
153  {
154  if (myMode != src.myMode) return false;
155  if (myGroup != src.myGroup) return false;
156  if (myUvattrib != src.myUvattrib) return false;
157  if (myLimittobbox != src.myLimittobbox) return false;
158  if (myBboxsize != src.myBboxsize) return false;
159  if (myBboxcenter != src.myBboxcenter) return false;
160  if (myPrune != src.myPrune) return false;
161  if (myPruningratio != src.myPruningratio) return false;
162  if (myPrunethicken != src.myPrunethicken) return false;
163  if (myUseguides != src.myUseguides) return false;
164  if (myUniformguidesegments != src.myUniformguidesegments) return false;
165  if (mySkininterp != src.mySkininterp) return false;
166  if (myGuideblendmethod != src.myGuideblendmethod) return false;
167  if (myGuidegroup != src.myGuidegroup) return false;
168  if (myInfluenceradius != src.myInfluenceradius) return false;
169  if (myInfluenceradiusoverride != src.myInfluenceradiusoverride) return false;
170  if (myInfluenceradiusattrib != src.myInfluenceradiusattrib) return false;
171  if (myInfluenceradiustexture != src.myInfluenceradiustexture) return false;
172  if (myInfluencedecay != src.myInfluencedecay) return false;
173  if (myInfluencedecayoverride != src.myInfluencedecayoverride) return false;
174  if (myInfluencedecayattrib != src.myInfluencedecayattrib) return false;
175  if (myInfluencedecaytexture != src.myInfluencedecaytexture) return false;
176  if (myMaxguidecount != src.myMaxguidecount) return false;
177  if (myMaxguidecountoverride != src.myMaxguidecountoverride) return false;
178  if (myMaxguidecountattrib != src.myMaxguidecountattrib) return false;
179  if (myMaxguidecounttexture != src.myMaxguidecounttexture) return false;
180  if (myMaxguideangle != src.myMaxguideangle) return false;
181  if (myMaxguideangleoverride != src.myMaxguideangleoverride) return false;
182  if (myMaxguideangleattrib != src.myMaxguideangleattrib) return false;
183  if (myMaxguideangletexture != src.myMaxguideangletexture) return false;
184  if (myClumpcrossover != src.myClumpcrossover) return false;
185  if (myClumpcrossoveroverride != src.myClumpcrossoveroverride) return false;
186  if (myClumpcrossoverattrib != src.myClumpcrossoverattrib) return false;
187  if (myClumpcrossovertexture != src.myClumpcrossovertexture) return false;
188  if (myGrowunguided != src.myGrowunguided) return false;
189  if (myUseinitdirattrib != src.myUseinitdirattrib) return false;
190  if (myInitdirattrib != src.myInitdirattrib) return false;
191  if (myUnguidedsegments != src.myUnguidedsegments) return false;
192  if (myUnguidedlength != src.myUnguidedlength) return false;
193  if (myUnguidedlengthoverride != src.myUnguidedlengthoverride) return false;
194  if (myUnguidedlengthattrib != src.myUnguidedlengthattrib) return false;
195  if (myUnguidedlengthtexture != src.myUnguidedlengthtexture) return false;
196  if (myUnguidedminlength != src.myUnguidedminlength) return false;
197  if (myCreateweightattribs != src.myCreateweightattribs) return false;
198  if (myCreaterestrootattrib != src.myCreaterestrootattrib) return false;
199  if (myOutputthicknessattrib != src.myOutputthicknessattrib) return false;
200  if (myThicknessattrib != src.myThicknessattrib) return false;
201  if (myThickness != src.myThickness) return false;
202  if (myThicknessoverride != src.myThicknessoverride) return false;
203  if (myThicknessskinattrib != src.myThicknessskinattrib) return false;
204  if (myThicknesstexture != src.myThicknesstexture) return false;
205  if (myHairprofile != src.myHairprofile) return false;
206  if (myPointattribs != src.myPointattribs) return false;
207  if (myVertattribs != src.myVertattribs) return false;
208  if (myPrimattribs != src.myPrimattribs) return false;
209  if (myDetailattribs != src.myDetailattribs) return false;
210  if (myGuidepointattribs != src.myGuidepointattribs) return false;
211  if (myGuideprimattribs != src.myGuideprimattribs) return false;
212 
213  return true;
214  }
216  {
217  return !operator==(src);
218  }
228 
229 
230 
231  void buildFromOp(const SOP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
232  {
233  myMode = 0;
234  if (true)
235  graph->evalOpParm(myMode, nodeidx, "mode", time, 0);
236  myGroup = ""_sh;
237  if (true)
238  graph->evalOpParm(myGroup, nodeidx, "group", time, 0);
239  myUvattrib = "uv"_sh;
240  if (true)
241  graph->evalOpParm(myUvattrib, nodeidx, "uvattrib", time, 0);
242  myLimittobbox = false;
243  if (true)
244  graph->evalOpParm(myLimittobbox, nodeidx, "limittobbox", time, 0);
245  myBboxsize = UT_Vector3D(1,1,1);
246  if (true && ( (!(((getLimittobbox()==0)))) ) )
247  graph->evalOpParm(myBboxsize, nodeidx, "bboxsize", time, 0);
248  myBboxcenter = UT_Vector3D(0,0,0);
249  if (true && ( (!(((getLimittobbox()==0)))) ) )
250  graph->evalOpParm(myBboxcenter, nodeidx, "bboxcenter", time, 0);
251  myPrune = false;
252  if (true)
253  graph->evalOpParm(myPrune, nodeidx, "prune", time, 0);
254  myPruningratio = 0.9;
255  if (true && ( (!(((getPrune()==0)))) ) )
256  graph->evalOpParm(myPruningratio, nodeidx, "pruningratio", time, 0);
257  myPrunethicken = false;
258  if (true && ( (!(((getPrune()==0)))) ) )
259  graph->evalOpParm(myPrunethicken, nodeidx, "prunethicken", time, 0);
260  myUseguides = true;
261  if (true)
262  graph->evalOpParm(myUseguides, nodeidx, "useguides", time, 0);
263  myUniformguidesegments = false;
264  if (true && ( (!(((getUseguides()==0)))) ) )
265  graph->evalOpParm(myUniformguidesegments, nodeidx, "uniformguidesegments", time, 0);
266  mySkininterp = false;
267  if (true && ( (!(((getUseguides()==0)))) ) )
268  graph->evalOpParm(mySkininterp, nodeidx, "skininterp", time, 0);
269  myGuideblendmethod = 0;
270  if (true)
271  graph->evalOpParm(myGuideblendmethod, nodeidx, "guideblendmethod", time, 0);
272  myGuidegroup = ""_sh;
273  if (true && ( (!(((getUseguides()==0))||((getSkininterp()==1)))) ) )
274  graph->evalOpParm(myGuidegroup, nodeidx, "guidegroup", time, 0);
275  myInfluenceradius = 0.05;
276  if (true && ( (!(((getUseguides()==0))||((getSkininterp()==1)))) ) )
277  graph->evalOpParm(myInfluenceradius, nodeidx, "influenceradius", time, 0);
278  myInfluenceradiusoverride = 0;
279  if (true && ( (!(((getUseguides()==0))||((getSkininterp()==1)))) ) )
280  graph->evalOpParm(myInfluenceradiusoverride, nodeidx, "influenceradiusoverride", time, 0);
281  myInfluenceradiusattrib = "influenceradiusscale"_sh;
282  if (true && ( (!(((getUseguides()==0))||((getSkininterp()==1))||((int64(getInfluenceradiusoverride())!=1)))) ) )
283  graph->evalOpParm(myInfluenceradiusattrib, nodeidx, "influenceradiusattrib", time, 0);
284  myInfluenceradiustexture = ""_sh;
285  if (true && ( (!(((getUseguides()==0))||((getSkininterp()==1))||((int64(getInfluenceradiusoverride())!=2)))) ) )
286  graph->evalOpParm(myInfluenceradiustexture, nodeidx, "influenceradiustexture", time, 0);
287  myInfluencedecay = 2;
288  if (true && ( (!(((getUseguides()==0))||((getSkininterp()==1)))) ) )
289  graph->evalOpParm(myInfluencedecay, nodeidx, "influencedecay", time, 0);
290  myInfluencedecayoverride = 0;
291  if (true && ( (!(((getUseguides()==0))||((getSkininterp()==1)))) ) )
292  graph->evalOpParm(myInfluencedecayoverride, nodeidx, "influencedecayoverride", time, 0);
293  myInfluencedecayattrib = "influencedecayscale"_sh;
294  if (true && ( (!(((getUseguides()==0))||((getSkininterp()==1))||((int64(getInfluencedecayoverride())!=1)))) ) )
295  graph->evalOpParm(myInfluencedecayattrib, nodeidx, "influencedecayattrib", time, 0);
296  myInfluencedecaytexture = ""_sh;
297  if (true && ( (!(((getUseguides()==0))||((getSkininterp()==1))||((int64(getInfluencedecayoverride())!=2)))) ) )
298  graph->evalOpParm(myInfluencedecaytexture, nodeidx, "influencedecaytexture", time, 0);
299  myMaxguidecount = 10;
300  if (true && ( (!(((getUseguides()==0))||((getSkininterp()==1)))) ) )
301  graph->evalOpParm(myMaxguidecount, nodeidx, "maxguidecount", time, 0);
302  myMaxguidecountoverride = 0;
303  if (true && ( (!(((getUseguides()==0))||((getSkininterp()==1)))) ) )
304  graph->evalOpParm(myMaxguidecountoverride, nodeidx, "maxguidecountoverride", time, 0);
305  myMaxguidecountattrib = "maxguidecountscale"_sh;
306  if (true && ( (!(((getUseguides()==0))||((getSkininterp()==1))||((int64(getMaxguidecountoverride())!=1)))) ) )
307  graph->evalOpParm(myMaxguidecountattrib, nodeidx, "maxguidecountattrib", time, 0);
308  myMaxguidecounttexture = ""_sh;
309  if (true && ( (!(((getUseguides()==0))||((getSkininterp()==1))||((int64(getMaxguidecountoverride())!=2)))) ) )
310  graph->evalOpParm(myMaxguidecounttexture, nodeidx, "maxguidecounttexture", time, 0);
311  myMaxguideangle = 90;
312  if (true && ( (!(((getUseguides()==0))||((getSkininterp()==1)))) ) )
313  graph->evalOpParm(myMaxguideangle, nodeidx, "maxguideangle", time, 0);
314  myMaxguideangleoverride = 0;
315  if (true && ( (!(((getUseguides()==0))||((getSkininterp()==1)))) ) )
316  graph->evalOpParm(myMaxguideangleoverride, nodeidx, "maxguideangleoverride", time, 0);
317  myMaxguideangleattrib = "maxguideanglescale"_sh;
318  if (true && ( (!(((getUseguides()==0))||((getSkininterp()==1))||((int64(getMaxguideangleoverride())!=1)))) ) )
319  graph->evalOpParm(myMaxguideangleattrib, nodeidx, "maxguideangleattrib", time, 0);
320  myMaxguideangletexture = ""_sh;
321  if (true && ( (!(((getUseguides()==0))||((getSkininterp()==1))||((int64(getMaxguideangleoverride())!=2)))) ) )
322  graph->evalOpParm(myMaxguideangletexture, nodeidx, "maxguideangletexture", time, 0);
323  myClumpcrossover = 0;
324  if (true && ( (!(((getUseguides()==0)))) ) )
325  graph->evalOpParm(myClumpcrossover, nodeidx, "clumpcrossover", time, 0);
326  myClumpcrossoveroverride = 0;
327  if (true && ( (!(((getUseguides()==0)))) ) )
328  graph->evalOpParm(myClumpcrossoveroverride, nodeidx, "clumpcrossoveroverride", time, 0);
329  myClumpcrossoverattrib = "clumpcrossoverscale"_sh;
330  if (true && ( (!(((getUseguides()==0))||((int64(getClumpcrossoveroverride())!=1)))) ) )
331  graph->evalOpParm(myClumpcrossoverattrib, nodeidx, "clumpcrossoverattrib", time, 0);
332  myClumpcrossovertexture = ""_sh;
333  if (true && ( (!(((getUseguides()==0))||((int64(getClumpcrossoveroverride())!=2)))) ) )
334  graph->evalOpParm(myClumpcrossovertexture, nodeidx, "clumpcrossovertexture", time, 0);
335  myGrowunguided = true;
336  if (true && ( (!(((getUseguides()==0)))) ) )
337  graph->evalOpParm(myGrowunguided, nodeidx, "growunguided", time, 0);
338  myUseinitdirattrib = true;
339  if (true && ( (!(((getUseguides()==1)&&(getGrowunguided()==0)))) ) )
340  graph->evalOpParm(myUseinitdirattrib, nodeidx, "useinitdirattrib", time, 0);
341  myInitdirattrib = "furdirection"_sh;
342  if (true && ( (!(((getUseinitdirattrib()==0))||((getUseguides()==1)&&(getGrowunguided()==0)))) ) )
343  graph->evalOpParm(myInitdirattrib, nodeidx, "initdirattrib", time, 0);
344  myUnguidedsegments = 8;
345  if (true && ( (!(((getUseguides()==1)&&(getGrowunguided()==0)))) ) )
346  graph->evalOpParm(myUnguidedsegments, nodeidx, "unguidedsegments", time, 0);
347  myUnguidedlength = 0.05;
348  if (true && ( (!(((getUseguides()==1)&&(getGrowunguided()==0)))) ) )
349  graph->evalOpParm(myUnguidedlength, nodeidx, "unguidedlength", time, 0);
350  myUnguidedlengthoverride = 0;
351  if (true && ( (!(((getUseguides()==1)&&(getGrowunguided()==0)))) ) )
352  graph->evalOpParm(myUnguidedlengthoverride, nodeidx, "unguidedlengthoverride", time, 0);
353  myUnguidedlengthattrib = "unguidedlengthscale"_sh;
354  if (true && ( (!(((getUseguides()==1)&&(getGrowunguided()==0))||((int64(getUnguidedlengthoverride())!=1)))) ) )
355  graph->evalOpParm(myUnguidedlengthattrib, nodeidx, "unguidedlengthattrib", time, 0);
356  myUnguidedlengthtexture = ""_sh;
357  if (true && ( (!(((getUseguides()==1)&&(getGrowunguided()==0))||((int64(getUnguidedlengthoverride())!=2)))) ) )
358  graph->evalOpParm(myUnguidedlengthtexture, nodeidx, "unguidedlengthtexture", time, 0);
359  myUnguidedminlength = 1e-05;
360  if (true && ( (!(((getUseguides()==1)&&(getGrowunguided()==0)))) ) )
361  graph->evalOpParm(myUnguidedminlength, nodeidx, "unguidedminlength", time, 0);
362  myCreateweightattribs = false;
363  if (true && ( (!(((getUseguides()==0)))) ) )
364  graph->evalOpParm(myCreateweightattribs, nodeidx, "createweightattribs", time, 0);
365  myCreaterestrootattrib = true;
366  if (true)
367  graph->evalOpParm(myCreaterestrootattrib, nodeidx, "createrestrootattrib", time, 0);
368  myOutputthicknessattrib = true;
369  if (true)
370  graph->evalOpParm(myOutputthicknessattrib, nodeidx, "outputthicknessattrib", time, 0);
371  myThicknessattrib = "width"_sh;
372  if (true && ( (!(((getOutputthicknessattrib()==0)))) ) )
373  graph->evalOpParm(myThicknessattrib, nodeidx, "thicknessattrib", time, 0);
374  myThickness = 0.001;
375  if (true && ( (!(((getOutputthicknessattrib()==0)))) ) )
376  graph->evalOpParm(myThickness, nodeidx, "thickness", time, 0);
377  myThicknessoverride = 0;
378  if (true && ( (!(((getOutputthicknessattrib()==0)))) ) )
379  graph->evalOpParm(myThicknessoverride, nodeidx, "thicknessoverride", time, 0);
380  myThicknessskinattrib = "thicknessscale"_sh;
381  if (true && ( (!(((getOutputthicknessattrib()==0))||((int64(getThicknessoverride())!=1)))) ) )
382  graph->evalOpParm(myThicknessskinattrib, nodeidx, "thicknessskinattrib", time, 0);
383  myThicknesstexture = ""_sh;
384  if (true && ( (!(((getOutputthicknessattrib()==0))||((int64(getThicknessoverride())!=2)))) ) )
385  graph->evalOpParm(myThicknesstexture, nodeidx, "thicknesstexture", time, 0);
386  myHairprofile = UT_SharedPtr<UT_Ramp>(0);
387  if (true && ( (!(((getOutputthicknessattrib()==0)))) ) )
388  graph->evalOpParm(myHairprofile, nodeidx, "hairprofile", time, 0);
389  myPointattribs = ""_sh;
390  if (true)
391  graph->evalOpParm(myPointattribs, nodeidx, "pointattribs", time, 0);
392  myVertattribs = ""_sh;
393  if (true && ( (!(((int64(getMode())!=0)))) ) )
394  graph->evalOpParm(myVertattribs, nodeidx, "vertattribs", time, 0);
395  myPrimattribs = ""_sh;
396  if (true && ( (!(((int64(getMode())!=0)))) ) )
397  graph->evalOpParm(myPrimattribs, nodeidx, "primattribs", time, 0);
398  myDetailattribs = ""_sh;
399  if (true)
400  graph->evalOpParm(myDetailattribs, nodeidx, "detailattribs", time, 0);
401  myGuidepointattribs = ""_sh;
402  if (true)
403  graph->evalOpParm(myGuidepointattribs, nodeidx, "guidepointattribs", time, 0);
404  myGuideprimattribs = ""_sh;
405  if (true)
406  graph->evalOpParm(myGuideprimattribs, nodeidx, "guideprimattribs", time, 0);
407 
408  }
409 
410 
411  void loadFromOpSubclass(const LoadParms &loadparms) override
412  {
413  buildFromOp(loadparms.graph(), loadparms.nodeIdx(), loadparms.context().getTime(), loadparms.depnode());
414  }
415 
416 
417  void copyFrom(const SOP_NodeParms *src) override
418  {
419  *this = *((const SOP_HairGenCoreParms *)src);
420  }
421 
422  template <typename T>
423  void
424  doGetParmValue(TempIndex idx, TempIndex instance, T &value) const
425  {
426  if (idx.size() < 1)
427  return;
428  UT_ASSERT(idx.size() == instance.size()+1);
429  if (idx.size() != instance.size()+1)
430  return;
431  switch (idx[0])
432  {
433  case 0:
434  coerceValue(value, myMode);
435  break;
436  case 1:
437  coerceValue(value, myGroup);
438  break;
439  case 2:
440  coerceValue(value, myUvattrib);
441  break;
442  case 3:
443  coerceValue(value, myLimittobbox);
444  break;
445  case 4:
446  coerceValue(value, myBboxsize);
447  break;
448  case 5:
449  coerceValue(value, myBboxcenter);
450  break;
451  case 6:
452  coerceValue(value, myPrune);
453  break;
454  case 7:
455  coerceValue(value, myPruningratio);
456  break;
457  case 8:
458  coerceValue(value, myPrunethicken);
459  break;
460  case 9:
461  coerceValue(value, myUseguides);
462  break;
463  case 10:
464  coerceValue(value, myUniformguidesegments);
465  break;
466  case 11:
467  coerceValue(value, mySkininterp);
468  break;
469  case 12:
470  coerceValue(value, myGuideblendmethod);
471  break;
472  case 13:
473  coerceValue(value, myGuidegroup);
474  break;
475  case 14:
476  coerceValue(value, myInfluenceradius);
477  break;
478  case 15:
479  coerceValue(value, myInfluenceradiusoverride);
480  break;
481  case 16:
482  coerceValue(value, myInfluenceradiusattrib);
483  break;
484  case 17:
485  coerceValue(value, myInfluenceradiustexture);
486  break;
487  case 18:
488  coerceValue(value, myInfluencedecay);
489  break;
490  case 19:
491  coerceValue(value, myInfluencedecayoverride);
492  break;
493  case 20:
494  coerceValue(value, myInfluencedecayattrib);
495  break;
496  case 21:
497  coerceValue(value, myInfluencedecaytexture);
498  break;
499  case 22:
500  coerceValue(value, myMaxguidecount);
501  break;
502  case 23:
503  coerceValue(value, myMaxguidecountoverride);
504  break;
505  case 24:
506  coerceValue(value, myMaxguidecountattrib);
507  break;
508  case 25:
509  coerceValue(value, myMaxguidecounttexture);
510  break;
511  case 26:
512  coerceValue(value, myMaxguideangle);
513  break;
514  case 27:
515  coerceValue(value, myMaxguideangleoverride);
516  break;
517  case 28:
518  coerceValue(value, myMaxguideangleattrib);
519  break;
520  case 29:
521  coerceValue(value, myMaxguideangletexture);
522  break;
523  case 30:
524  coerceValue(value, myClumpcrossover);
525  break;
526  case 31:
527  coerceValue(value, myClumpcrossoveroverride);
528  break;
529  case 32:
530  coerceValue(value, myClumpcrossoverattrib);
531  break;
532  case 33:
533  coerceValue(value, myClumpcrossovertexture);
534  break;
535  case 34:
536  coerceValue(value, myGrowunguided);
537  break;
538  case 35:
539  coerceValue(value, myUseinitdirattrib);
540  break;
541  case 36:
542  coerceValue(value, myInitdirattrib);
543  break;
544  case 37:
545  coerceValue(value, myUnguidedsegments);
546  break;
547  case 38:
548  coerceValue(value, myUnguidedlength);
549  break;
550  case 39:
551  coerceValue(value, myUnguidedlengthoverride);
552  break;
553  case 40:
554  coerceValue(value, myUnguidedlengthattrib);
555  break;
556  case 41:
557  coerceValue(value, myUnguidedlengthtexture);
558  break;
559  case 42:
560  coerceValue(value, myUnguidedminlength);
561  break;
562  case 43:
563  coerceValue(value, myCreateweightattribs);
564  break;
565  case 44:
566  coerceValue(value, myCreaterestrootattrib);
567  break;
568  case 45:
569  coerceValue(value, myOutputthicknessattrib);
570  break;
571  case 46:
572  coerceValue(value, myThicknessattrib);
573  break;
574  case 47:
575  coerceValue(value, myThickness);
576  break;
577  case 48:
578  coerceValue(value, myThicknessoverride);
579  break;
580  case 49:
581  coerceValue(value, myThicknessskinattrib);
582  break;
583  case 50:
584  coerceValue(value, myThicknesstexture);
585  break;
586  case 51:
587  coerceValue(value, myHairprofile);
588  break;
589  case 52:
590  coerceValue(value, myPointattribs);
591  break;
592  case 53:
593  coerceValue(value, myVertattribs);
594  break;
595  case 54:
596  coerceValue(value, myPrimattribs);
597  break;
598  case 55:
599  coerceValue(value, myDetailattribs);
600  break;
601  case 56:
602  coerceValue(value, myGuidepointattribs);
603  break;
604  case 57:
605  coerceValue(value, myGuideprimattribs);
606  break;
607 
608  }
609  }
610 
611  void getNestParmValue(TempIndex idx, TempIndex instance, exint &value) const override
612  { doGetParmValue(idx, instance, value); }
613  void getNestParmValue(TempIndex idx, TempIndex instance, fpreal &value) const override
614  { doGetParmValue(idx, instance, value); }
615  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector2D &value) const override
616  { doGetParmValue(idx, instance, value); }
617  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector3D &value) const override
618  { doGetParmValue(idx, instance, value); }
619  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector4D &value) const override
620  { doGetParmValue(idx, instance, value); }
621  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix2D &value) const override
622  { doGetParmValue(idx, instance, value); }
623  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
624  { doGetParmValue(idx, instance, value); }
625  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix4D &value) const override
626  { doGetParmValue(idx, instance, value); }
627  void getNestParmValue(TempIndex idx, TempIndex instance, UT_StringHolder &value) const override
628  { doGetParmValue(idx, instance, value); }
629  void getNestParmValue(TempIndex idx, TempIndex instance, UT_SharedPtr<UT_Ramp> &value) const override
630  { doGetParmValue(idx, instance, value); }
631  void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
632  { doGetParmValue(idx, instance, value); }
633 
634  template <typename T>
635  void
636  doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
637  {
638  if (idx.size() < 1)
639  return;
640  UT_ASSERT(idx.size() == instance.size()+1);
641  if (idx.size() != instance.size()+1)
642  return;
643  switch (idx[0])
644  {
645  case 0:
646  coerceValue(myMode, value);
647  break;
648  case 1:
649  coerceValue(myGroup, value);
650  break;
651  case 2:
652  coerceValue(myUvattrib, value);
653  break;
654  case 3:
655  coerceValue(myLimittobbox, value);
656  break;
657  case 4:
658  coerceValue(myBboxsize, value);
659  break;
660  case 5:
661  coerceValue(myBboxcenter, value);
662  break;
663  case 6:
664  coerceValue(myPrune, value);
665  break;
666  case 7:
667  coerceValue(myPruningratio, value);
668  break;
669  case 8:
670  coerceValue(myPrunethicken, value);
671  break;
672  case 9:
673  coerceValue(myUseguides, value);
674  break;
675  case 10:
676  coerceValue(myUniformguidesegments, value);
677  break;
678  case 11:
679  coerceValue(mySkininterp, value);
680  break;
681  case 12:
682  coerceValue(myGuideblendmethod, value);
683  break;
684  case 13:
685  coerceValue(myGuidegroup, value);
686  break;
687  case 14:
688  coerceValue(myInfluenceradius, value);
689  break;
690  case 15:
691  coerceValue(myInfluenceradiusoverride, value);
692  break;
693  case 16:
694  coerceValue(myInfluenceradiusattrib, value);
695  break;
696  case 17:
697  coerceValue(myInfluenceradiustexture, value);
698  break;
699  case 18:
700  coerceValue(myInfluencedecay, value);
701  break;
702  case 19:
703  coerceValue(myInfluencedecayoverride, value);
704  break;
705  case 20:
706  coerceValue(myInfluencedecayattrib, value);
707  break;
708  case 21:
709  coerceValue(myInfluencedecaytexture, value);
710  break;
711  case 22:
712  coerceValue(myMaxguidecount, value);
713  break;
714  case 23:
715  coerceValue(myMaxguidecountoverride, value);
716  break;
717  case 24:
718  coerceValue(myMaxguidecountattrib, value);
719  break;
720  case 25:
721  coerceValue(myMaxguidecounttexture, value);
722  break;
723  case 26:
724  coerceValue(myMaxguideangle, value);
725  break;
726  case 27:
727  coerceValue(myMaxguideangleoverride, value);
728  break;
729  case 28:
730  coerceValue(myMaxguideangleattrib, value);
731  break;
732  case 29:
733  coerceValue(myMaxguideangletexture, value);
734  break;
735  case 30:
736  coerceValue(myClumpcrossover, value);
737  break;
738  case 31:
739  coerceValue(myClumpcrossoveroverride, value);
740  break;
741  case 32:
742  coerceValue(myClumpcrossoverattrib, value);
743  break;
744  case 33:
745  coerceValue(myClumpcrossovertexture, value);
746  break;
747  case 34:
748  coerceValue(myGrowunguided, value);
749  break;
750  case 35:
751  coerceValue(myUseinitdirattrib, value);
752  break;
753  case 36:
754  coerceValue(myInitdirattrib, value);
755  break;
756  case 37:
757  coerceValue(myUnguidedsegments, value);
758  break;
759  case 38:
760  coerceValue(myUnguidedlength, value);
761  break;
762  case 39:
763  coerceValue(myUnguidedlengthoverride, value);
764  break;
765  case 40:
766  coerceValue(myUnguidedlengthattrib, value);
767  break;
768  case 41:
769  coerceValue(myUnguidedlengthtexture, value);
770  break;
771  case 42:
772  coerceValue(myUnguidedminlength, value);
773  break;
774  case 43:
775  coerceValue(myCreateweightattribs, value);
776  break;
777  case 44:
778  coerceValue(myCreaterestrootattrib, value);
779  break;
780  case 45:
781  coerceValue(myOutputthicknessattrib, value);
782  break;
783  case 46:
784  coerceValue(myThicknessattrib, value);
785  break;
786  case 47:
787  coerceValue(myThickness, value);
788  break;
789  case 48:
790  coerceValue(myThicknessoverride, value);
791  break;
792  case 49:
793  coerceValue(myThicknessskinattrib, value);
794  break;
795  case 50:
796  coerceValue(myThicknesstexture, value);
797  break;
798  case 51:
799  coerceValue(myHairprofile, value);
800  break;
801  case 52:
802  coerceValue(myPointattribs, value);
803  break;
804  case 53:
805  coerceValue(myVertattribs, value);
806  break;
807  case 54:
808  coerceValue(myPrimattribs, value);
809  break;
810  case 55:
811  coerceValue(myDetailattribs, value);
812  break;
813  case 56:
814  coerceValue(myGuidepointattribs, value);
815  break;
816  case 57:
817  coerceValue(myGuideprimattribs, value);
818  break;
819 
820  }
821  }
822 
823  void setNestParmValue(TempIndex idx, TempIndex instance, const exint &value) override
824  { doSetParmValue(idx, instance, value); }
825  void setNestParmValue(TempIndex idx, TempIndex instance, const fpreal &value) override
826  { doSetParmValue(idx, instance, value); }
827  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector2D &value) override
828  { doSetParmValue(idx, instance, value); }
829  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector3D &value) override
830  { doSetParmValue(idx, instance, value); }
831  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector4D &value) override
832  { doSetParmValue(idx, instance, value); }
833  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix2D &value) override
834  { doSetParmValue(idx, instance, value); }
835  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix3D &value) override
836  { doSetParmValue(idx, instance, value); }
837  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix4D &value) override
838  { doSetParmValue(idx, instance, value); }
839  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_StringHolder &value) override
840  { doSetParmValue(idx, instance, value); }
841  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_SharedPtr<UT_Ramp> &value) override
842  { doSetParmValue(idx, instance, value); }
843  void setNestParmValue(TempIndex idx, TempIndex instance, const PRM_DataItemHandle &value) override
844  { doSetParmValue(idx, instance, value); }
845 
846  exint getNestNumParms(TempIndex idx) const override
847  {
848  if (idx.size() == 0)
849  return 58;
850  switch (idx[0])
851  {
852 
853  }
854  // Invalid
855  return 0;
856  }
857 
858  const char *getNestParmName(TempIndex fieldnum) const override
859  {
860  if (fieldnum.size() < 1)
861  return 0;
862  switch (fieldnum[0])
863  {
864  case 0:
865  return "mode";
866  case 1:
867  return "group";
868  case 2:
869  return "uvattrib";
870  case 3:
871  return "limittobbox";
872  case 4:
873  return "bboxsize";
874  case 5:
875  return "bboxcenter";
876  case 6:
877  return "prune";
878  case 7:
879  return "pruningratio";
880  case 8:
881  return "prunethicken";
882  case 9:
883  return "useguides";
884  case 10:
885  return "uniformguidesegments";
886  case 11:
887  return "skininterp";
888  case 12:
889  return "guideblendmethod";
890  case 13:
891  return "guidegroup";
892  case 14:
893  return "influenceradius";
894  case 15:
895  return "influenceradiusoverride";
896  case 16:
897  return "influenceradiusattrib";
898  case 17:
899  return "influenceradiustexture";
900  case 18:
901  return "influencedecay";
902  case 19:
903  return "influencedecayoverride";
904  case 20:
905  return "influencedecayattrib";
906  case 21:
907  return "influencedecaytexture";
908  case 22:
909  return "maxguidecount";
910  case 23:
911  return "maxguidecountoverride";
912  case 24:
913  return "maxguidecountattrib";
914  case 25:
915  return "maxguidecounttexture";
916  case 26:
917  return "maxguideangle";
918  case 27:
919  return "maxguideangleoverride";
920  case 28:
921  return "maxguideangleattrib";
922  case 29:
923  return "maxguideangletexture";
924  case 30:
925  return "clumpcrossover";
926  case 31:
927  return "clumpcrossoveroverride";
928  case 32:
929  return "clumpcrossoverattrib";
930  case 33:
931  return "clumpcrossovertexture";
932  case 34:
933  return "growunguided";
934  case 35:
935  return "useinitdirattrib";
936  case 36:
937  return "initdirattrib";
938  case 37:
939  return "unguidedsegments";
940  case 38:
941  return "unguidedlength";
942  case 39:
943  return "unguidedlengthoverride";
944  case 40:
945  return "unguidedlengthattrib";
946  case 41:
947  return "unguidedlengthtexture";
948  case 42:
949  return "unguidedminlength";
950  case 43:
951  return "createweightattribs";
952  case 44:
953  return "createrestrootattrib";
954  case 45:
955  return "outputthicknessattrib";
956  case 46:
957  return "thicknessattrib";
958  case 47:
959  return "thickness";
960  case 48:
961  return "thicknessoverride";
962  case 49:
963  return "thicknessskinattrib";
964  case 50:
965  return "thicknesstexture";
966  case 51:
967  return "hairprofile";
968  case 52:
969  return "pointattribs";
970  case 53:
971  return "vertattribs";
972  case 54:
973  return "primattribs";
974  case 55:
975  return "detailattribs";
976  case 56:
977  return "guidepointattribs";
978  case 57:
979  return "guideprimattribs";
980 
981  }
982  return 0;
983  }
984 
985  ParmType getNestParmType(TempIndex fieldnum) const override
986  {
987  if (fieldnum.size() < 1)
988  return PARM_UNSUPPORTED;
989  switch (fieldnum[0])
990  {
991  case 0:
992  return PARM_INTEGER;
993  case 1:
994  return PARM_STRING;
995  case 2:
996  return PARM_STRING;
997  case 3:
998  return PARM_INTEGER;
999  case 4:
1000  return PARM_VECTOR3;
1001  case 5:
1002  return PARM_VECTOR3;
1003  case 6:
1004  return PARM_INTEGER;
1005  case 7:
1006  return PARM_FLOAT;
1007  case 8:
1008  return PARM_INTEGER;
1009  case 9:
1010  return PARM_INTEGER;
1011  case 10:
1012  return PARM_INTEGER;
1013  case 11:
1014  return PARM_INTEGER;
1015  case 12:
1016  return PARM_INTEGER;
1017  case 13:
1018  return PARM_STRING;
1019  case 14:
1020  return PARM_FLOAT;
1021  case 15:
1022  return PARM_INTEGER;
1023  case 16:
1024  return PARM_STRING;
1025  case 17:
1026  return PARM_STRING;
1027  case 18:
1028  return PARM_FLOAT;
1029  case 19:
1030  return PARM_INTEGER;
1031  case 20:
1032  return PARM_STRING;
1033  case 21:
1034  return PARM_STRING;
1035  case 22:
1036  return PARM_INTEGER;
1037  case 23:
1038  return PARM_INTEGER;
1039  case 24:
1040  return PARM_STRING;
1041  case 25:
1042  return PARM_STRING;
1043  case 26:
1044  return PARM_FLOAT;
1045  case 27:
1046  return PARM_INTEGER;
1047  case 28:
1048  return PARM_STRING;
1049  case 29:
1050  return PARM_STRING;
1051  case 30:
1052  return PARM_FLOAT;
1053  case 31:
1054  return PARM_INTEGER;
1055  case 32:
1056  return PARM_STRING;
1057  case 33:
1058  return PARM_STRING;
1059  case 34:
1060  return PARM_INTEGER;
1061  case 35:
1062  return PARM_INTEGER;
1063  case 36:
1064  return PARM_STRING;
1065  case 37:
1066  return PARM_INTEGER;
1067  case 38:
1068  return PARM_FLOAT;
1069  case 39:
1070  return PARM_INTEGER;
1071  case 40:
1072  return PARM_STRING;
1073  case 41:
1074  return PARM_STRING;
1075  case 42:
1076  return PARM_FLOAT;
1077  case 43:
1078  return PARM_INTEGER;
1079  case 44:
1080  return PARM_INTEGER;
1081  case 45:
1082  return PARM_INTEGER;
1083  case 46:
1084  return PARM_STRING;
1085  case 47:
1086  return PARM_FLOAT;
1087  case 48:
1088  return PARM_INTEGER;
1089  case 49:
1090  return PARM_STRING;
1091  case 50:
1092  return PARM_STRING;
1093  case 51:
1094  return PARM_RAMP;
1095  case 52:
1096  return PARM_STRING;
1097  case 53:
1098  return PARM_STRING;
1099  case 54:
1100  return PARM_STRING;
1101  case 55:
1102  return PARM_STRING;
1103  case 56:
1104  return PARM_STRING;
1105  case 57:
1106  return PARM_STRING;
1107 
1108  }
1109  return PARM_UNSUPPORTED;
1110  }
1111 
1112  // Boiler plate to load individual types.
1113  static void loadData(UT_IStream &is, int64 &v)
1114  { is.bread(&v, 1); }
1115  static void loadData(UT_IStream &is, bool &v)
1116  { int64 iv; is.bread(&iv, 1); v = iv; }
1117  static void loadData(UT_IStream &is, fpreal64 &v)
1118  { is.bread<fpreal64>(&v, 1); }
1119  static void loadData(UT_IStream &is, UT_Vector2D &v)
1120  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1); }
1121  static void loadData(UT_IStream &is, UT_Vector3D &v)
1122  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
1123  is.bread<fpreal64>(&v.z(), 1); }
1124  static void loadData(UT_IStream &is, UT_Vector4D &v)
1125  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
1126  is.bread<fpreal64>(&v.z(), 1); is.bread<fpreal64>(&v.w(), 1); }
1127  static void loadData(UT_IStream &is, UT_Matrix2D &v)
1128  { for (int r = 0; r < 2; r++) for (int c = 0; c < 2; c++) is.bread<fpreal64>(&v(r, c), 1); }
1129  static void loadData(UT_IStream &is, UT_Matrix3D &v)
1130  { for (int r = 0; r < 3; r++) for (int c = 0; c < 3; c++) is.bread<fpreal64>(&v(r, c), 1); }
1131  static void loadData(UT_IStream &is, UT_Matrix4D &v)
1132  { for (int r = 0; r < 4; r++) for (int c = 0; c < 4; c++) is.bread<fpreal64>(&v(r, c), 1); }
1133  static void loadData(UT_IStream &is, UT_Vector2I &v)
1134  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1); }
1135  static void loadData(UT_IStream &is, UT_Vector3I &v)
1136  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
1137  is.bread<int64>(&v.z(), 1); }
1138  static void loadData(UT_IStream &is, UT_Vector4I &v)
1139  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
1140  is.bread<int64>(&v.z(), 1); is.bread<int64>(&v.w(), 1); }
1142  { is.bread(v); }
1144  { UT_StringHolder rampdata;
1145  loadData(is, rampdata);
1146  if (rampdata.isstring())
1147  {
1148  v.reset(new UT_Ramp());
1149  UT_IStream istr((const char *) rampdata, rampdata.length(), UT_ISTREAM_ASCII);
1150  v->load(istr);
1151  }
1152  else v.reset();
1153  }
1156  loadData(is, data);
1157  if (data.isstring())
1158  {
1159  // Find the data type.
1160  const char *colon = UT_StringWrap(data).findChar(':');
1161  if (colon)
1162  {
1163  int typelen = colon - data.buffer();
1165  type.strncpy(data.buffer(), typelen);
1166  UT_IStream istr(((const char *) data) + typelen + 1, data.length() - (typelen + 1), UT_ISTREAM_BINARY);
1167 
1168  v = PRM_DataFactory::parseBinary(type.buffer(), istr);
1169  }
1170  }
1171  else v.reset();
1172  }
1173 
1174  static void saveData(std::ostream &os, int64 v)
1175  { UTwrite(os, &v); }
1176  static void saveData(std::ostream &os, bool v)
1177  { int64 iv = v; UTwrite(os, &iv); }
1178  static void saveData(std::ostream &os, fpreal64 v)
1179  { UTwrite<fpreal64>(os, &v); }
1180  static void saveData(std::ostream &os, UT_Vector2D v)
1181  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y()); }
1182  static void saveData(std::ostream &os, UT_Vector3D v)
1183  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
1184  UTwrite<fpreal64>(os, &v.z()); }
1185  static void saveData(std::ostream &os, UT_Vector4D v)
1186  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
1187  UTwrite<fpreal64>(os, &v.z()); UTwrite<fpreal64>(os, &v.w()); }
1188  static void saveData(std::ostream &os, UT_Matrix2D v)
1190  static void saveData(std::ostream &os, UT_Matrix3D v)
1192  static void saveData(std::ostream &os, UT_Matrix4D v)
1194  static void saveData(std::ostream &os, UT_StringHolder s)
1195  { UT_StringWrap(s).saveBinary(os); }
1196  static void saveData(std::ostream &os, UT_SharedPtr<UT_Ramp> s)
1198  UT_OStringStream ostr;
1199  if (s) s->save(ostr);
1200  result = ostr.str();
1201  saveData(os, result);
1202  }
1203  static void saveData(std::ostream &os, PRM_DataItemHandle s)
1205  UT_OStringStream ostr;
1206  if (s)
1207  {
1208  ostr << s->getDataTypeToken();
1209  ostr << ":";
1210  s->saveBinary(ostr);
1211  }
1212  result = ostr.str();
1213  saveData(os, result);
1214  }
1215 
1216 
1217  void save(std::ostream &os) const
1218  {
1219  int32 v = version();
1220  UTwrite(os, &v);
1221  saveData(os, myMode);
1222  saveData(os, myGroup);
1223  saveData(os, myUvattrib);
1224  saveData(os, myLimittobbox);
1225  saveData(os, myBboxsize);
1226  saveData(os, myBboxcenter);
1227  saveData(os, myPrune);
1228  saveData(os, myPruningratio);
1229  saveData(os, myPrunethicken);
1230  saveData(os, myUseguides);
1231  saveData(os, myUniformguidesegments);
1232  saveData(os, mySkininterp);
1233  saveData(os, myGuideblendmethod);
1234  saveData(os, myGuidegroup);
1235  saveData(os, myInfluenceradius);
1236  saveData(os, myInfluenceradiusoverride);
1237  saveData(os, myInfluenceradiusattrib);
1238  saveData(os, myInfluenceradiustexture);
1239  saveData(os, myInfluencedecay);
1240  saveData(os, myInfluencedecayoverride);
1241  saveData(os, myInfluencedecayattrib);
1242  saveData(os, myInfluencedecaytexture);
1243  saveData(os, myMaxguidecount);
1244  saveData(os, myMaxguidecountoverride);
1245  saveData(os, myMaxguidecountattrib);
1246  saveData(os, myMaxguidecounttexture);
1247  saveData(os, myMaxguideangle);
1248  saveData(os, myMaxguideangleoverride);
1249  saveData(os, myMaxguideangleattrib);
1250  saveData(os, myMaxguideangletexture);
1251  saveData(os, myClumpcrossover);
1252  saveData(os, myClumpcrossoveroverride);
1253  saveData(os, myClumpcrossoverattrib);
1254  saveData(os, myClumpcrossovertexture);
1255  saveData(os, myGrowunguided);
1256  saveData(os, myUseinitdirattrib);
1257  saveData(os, myInitdirattrib);
1258  saveData(os, myUnguidedsegments);
1259  saveData(os, myUnguidedlength);
1260  saveData(os, myUnguidedlengthoverride);
1261  saveData(os, myUnguidedlengthattrib);
1262  saveData(os, myUnguidedlengthtexture);
1263  saveData(os, myUnguidedminlength);
1264  saveData(os, myCreateweightattribs);
1265  saveData(os, myCreaterestrootattrib);
1266  saveData(os, myOutputthicknessattrib);
1267  saveData(os, myThicknessattrib);
1268  saveData(os, myThickness);
1269  saveData(os, myThicknessoverride);
1270  saveData(os, myThicknessskinattrib);
1271  saveData(os, myThicknesstexture);
1272  saveData(os, myHairprofile);
1273  saveData(os, myPointattribs);
1274  saveData(os, myVertattribs);
1275  saveData(os, myPrimattribs);
1276  saveData(os, myDetailattribs);
1277  saveData(os, myGuidepointattribs);
1278  saveData(os, myGuideprimattribs);
1279 
1280  }
1281 
1282  bool load(UT_IStream &is)
1283  {
1284  int32 v;
1285  is.bread(&v, 1);
1286  if (version() != v)
1287  {
1288  // Fail incompatible versions
1289  return false;
1290  }
1291  loadData(is, myMode);
1292  loadData(is, myGroup);
1293  loadData(is, myUvattrib);
1294  loadData(is, myLimittobbox);
1295  loadData(is, myBboxsize);
1296  loadData(is, myBboxcenter);
1297  loadData(is, myPrune);
1298  loadData(is, myPruningratio);
1299  loadData(is, myPrunethicken);
1300  loadData(is, myUseguides);
1301  loadData(is, myUniformguidesegments);
1302  loadData(is, mySkininterp);
1303  loadData(is, myGuideblendmethod);
1304  loadData(is, myGuidegroup);
1305  loadData(is, myInfluenceradius);
1306  loadData(is, myInfluenceradiusoverride);
1307  loadData(is, myInfluenceradiusattrib);
1308  loadData(is, myInfluenceradiustexture);
1309  loadData(is, myInfluencedecay);
1310  loadData(is, myInfluencedecayoverride);
1311  loadData(is, myInfluencedecayattrib);
1312  loadData(is, myInfluencedecaytexture);
1313  loadData(is, myMaxguidecount);
1314  loadData(is, myMaxguidecountoverride);
1315  loadData(is, myMaxguidecountattrib);
1316  loadData(is, myMaxguidecounttexture);
1317  loadData(is, myMaxguideangle);
1318  loadData(is, myMaxguideangleoverride);
1319  loadData(is, myMaxguideangleattrib);
1320  loadData(is, myMaxguideangletexture);
1321  loadData(is, myClumpcrossover);
1322  loadData(is, myClumpcrossoveroverride);
1323  loadData(is, myClumpcrossoverattrib);
1324  loadData(is, myClumpcrossovertexture);
1325  loadData(is, myGrowunguided);
1326  loadData(is, myUseinitdirattrib);
1327  loadData(is, myInitdirattrib);
1328  loadData(is, myUnguidedsegments);
1329  loadData(is, myUnguidedlength);
1330  loadData(is, myUnguidedlengthoverride);
1331  loadData(is, myUnguidedlengthattrib);
1332  loadData(is, myUnguidedlengthtexture);
1333  loadData(is, myUnguidedminlength);
1334  loadData(is, myCreateweightattribs);
1335  loadData(is, myCreaterestrootattrib);
1336  loadData(is, myOutputthicknessattrib);
1337  loadData(is, myThicknessattrib);
1338  loadData(is, myThickness);
1339  loadData(is, myThicknessoverride);
1340  loadData(is, myThicknessskinattrib);
1341  loadData(is, myThicknesstexture);
1342  loadData(is, myHairprofile);
1343  loadData(is, myPointattribs);
1344  loadData(is, myVertattribs);
1345  loadData(is, myPrimattribs);
1346  loadData(is, myDetailattribs);
1347  loadData(is, myGuidepointattribs);
1348  loadData(is, myGuideprimattribs);
1349 
1350  return true;
1351  }
1352 
1353  Mode getMode() const { return Mode(myMode); }
1354  void setMode(Mode val) { myMode = int64(val); }
1355  Mode opMode(const SOP_NodeVerb::CookParms &cookparms) const
1356  {
1357  SOP_Node *thissop = cookparms.getNode();
1358  if (!thissop) return getMode();
1359  int64 result;
1360  OP_Utils::evalOpParm(result, thissop, "mode", cookparms.getCookTime(), 0);
1361  return Mode(result);
1362  }
1363  const UT_StringHolder & getGroup() const { return myGroup; }
1364  void setGroup(const UT_StringHolder & val) { myGroup = val; }
1366  {
1367  SOP_Node *thissop = cookparms.getNode();
1368  if (!thissop) return getGroup();
1370  OP_Utils::evalOpParm(result, thissop, "group", cookparms.getCookTime(), 0);
1371  return result;
1372  }
1373  const UT_StringHolder & getUvattrib() const { return myUvattrib; }
1374  void setUvattrib(const UT_StringHolder & val) { myUvattrib = val; }
1376  {
1377  SOP_Node *thissop = cookparms.getNode();
1378  if (!thissop) return getUvattrib();
1380  OP_Utils::evalOpParm(result, thissop, "uvattrib", cookparms.getCookTime(), 0);
1381  return result;
1382  }
1383  bool getLimittobbox() const { return myLimittobbox; }
1384  void setLimittobbox(bool val) { myLimittobbox = val; }
1385  bool opLimittobbox(const SOP_NodeVerb::CookParms &cookparms) const
1386  {
1387  SOP_Node *thissop = cookparms.getNode();
1388  if (!thissop) return getLimittobbox();
1389  bool result;
1390  OP_Utils::evalOpParm(result, thissop, "limittobbox", cookparms.getCookTime(), 0);
1391  return result;
1392  }
1393  UT_Vector3D getBboxsize() const { return myBboxsize; }
1394  void setBboxsize(UT_Vector3D val) { myBboxsize = val; }
1396  {
1397  SOP_Node *thissop = cookparms.getNode();
1398  if (!thissop) return getBboxsize();
1400  OP_Utils::evalOpParm(result, thissop, "bboxsize", cookparms.getCookTime(), 0);
1401  return result;
1402  }
1403  UT_Vector3D getBboxcenter() const { return myBboxcenter; }
1404  void setBboxcenter(UT_Vector3D val) { myBboxcenter = val; }
1406  {
1407  SOP_Node *thissop = cookparms.getNode();
1408  if (!thissop) return getBboxcenter();
1410  OP_Utils::evalOpParm(result, thissop, "bboxcenter", cookparms.getCookTime(), 0);
1411  return result;
1412  }
1413  bool getPrune() const { return myPrune; }
1414  void setPrune(bool val) { myPrune = val; }
1415  bool opPrune(const SOP_NodeVerb::CookParms &cookparms) const
1416  {
1417  SOP_Node *thissop = cookparms.getNode();
1418  if (!thissop) return getPrune();
1419  bool result;
1420  OP_Utils::evalOpParm(result, thissop, "prune", cookparms.getCookTime(), 0);
1421  return result;
1422  }
1423  fpreal64 getPruningratio() const { return myPruningratio; }
1424  void setPruningratio(fpreal64 val) { myPruningratio = val; }
1426  {
1427  SOP_Node *thissop = cookparms.getNode();
1428  if (!thissop) return getPruningratio();
1429  fpreal64 result;
1430  OP_Utils::evalOpParm(result, thissop, "pruningratio", cookparms.getCookTime(), 0);
1431  return result;
1432  }
1433  bool getPrunethicken() const { return myPrunethicken; }
1434  void setPrunethicken(bool val) { myPrunethicken = val; }
1435  bool opPrunethicken(const SOP_NodeVerb::CookParms &cookparms) const
1436  {
1437  SOP_Node *thissop = cookparms.getNode();
1438  if (!thissop) return getPrunethicken();
1439  bool result;
1440  OP_Utils::evalOpParm(result, thissop, "prunethicken", cookparms.getCookTime(), 0);
1441  return result;
1442  }
1443  bool getUseguides() const { return myUseguides; }
1444  void setUseguides(bool val) { myUseguides = val; }
1445  bool opUseguides(const SOP_NodeVerb::CookParms &cookparms) const
1446  {
1447  SOP_Node *thissop = cookparms.getNode();
1448  if (!thissop) return getUseguides();
1449  bool result;
1450  OP_Utils::evalOpParm(result, thissop, "useguides", cookparms.getCookTime(), 0);
1451  return result;
1452  }
1453  bool getUniformguidesegments() const { return myUniformguidesegments; }
1454  void setUniformguidesegments(bool val) { myUniformguidesegments = val; }
1456  {
1457  SOP_Node *thissop = cookparms.getNode();
1458  if (!thissop) return getUniformguidesegments();
1459  bool result;
1460  OP_Utils::evalOpParm(result, thissop, "uniformguidesegments", cookparms.getCookTime(), 0);
1461  return result;
1462  }
1463  bool getSkininterp() const { return mySkininterp; }
1464  void setSkininterp(bool val) { mySkininterp = val; }
1465  bool opSkininterp(const SOP_NodeVerb::CookParms &cookparms) const
1466  {
1467  SOP_Node *thissop = cookparms.getNode();
1468  if (!thissop) return getSkininterp();
1469  bool result;
1470  OP_Utils::evalOpParm(result, thissop, "skininterp", cookparms.getCookTime(), 0);
1471  return result;
1472  }
1473  Guideblendmethod getGuideblendmethod() const { return Guideblendmethod(myGuideblendmethod); }
1474  void setGuideblendmethod(Guideblendmethod val) { myGuideblendmethod = int64(val); }
1476  {
1477  SOP_Node *thissop = cookparms.getNode();
1478  if (!thissop) return getGuideblendmethod();
1479  int64 result;
1480  OP_Utils::evalOpParm(result, thissop, "guideblendmethod", cookparms.getCookTime(), 0);
1481  return Guideblendmethod(result);
1482  }
1483  const UT_StringHolder & getGuidegroup() const { return myGuidegroup; }
1484  void setGuidegroup(const UT_StringHolder & val) { myGuidegroup = val; }
1486  {
1487  SOP_Node *thissop = cookparms.getNode();
1488  if (!thissop) return getGuidegroup();
1490  OP_Utils::evalOpParm(result, thissop, "guidegroup", cookparms.getCookTime(), 0);
1491  return result;
1492  }
1493  fpreal64 getInfluenceradius() const { return myInfluenceradius; }
1494  void setInfluenceradius(fpreal64 val) { myInfluenceradius = val; }
1496  {
1497  SOP_Node *thissop = cookparms.getNode();
1498  if (!thissop) return getInfluenceradius();
1499  fpreal64 result;
1500  OP_Utils::evalOpParm(result, thissop, "influenceradius", cookparms.getCookTime(), 0);
1501  return result;
1502  }
1503  Influenceradiusoverride getInfluenceradiusoverride() const { return Influenceradiusoverride(myInfluenceradiusoverride); }
1504  void setInfluenceradiusoverride(Influenceradiusoverride val) { myInfluenceradiusoverride = int64(val); }
1506  {
1507  SOP_Node *thissop = cookparms.getNode();
1508  if (!thissop) return getInfluenceradiusoverride();
1509  int64 result;
1510  OP_Utils::evalOpParm(result, thissop, "influenceradiusoverride", cookparms.getCookTime(), 0);
1511  return Influenceradiusoverride(result);
1512  }
1513  const UT_StringHolder & getInfluenceradiusattrib() const { return myInfluenceradiusattrib; }
1514  void setInfluenceradiusattrib(const UT_StringHolder & val) { myInfluenceradiusattrib = val; }
1516  {
1517  SOP_Node *thissop = cookparms.getNode();
1518  if (!thissop) return getInfluenceradiusattrib();
1520  OP_Utils::evalOpParm(result, thissop, "influenceradiusattrib", cookparms.getCookTime(), 0);
1521  return result;
1522  }
1523  const UT_StringHolder & getInfluenceradiustexture() const { return myInfluenceradiustexture; }
1524  void setInfluenceradiustexture(const UT_StringHolder & val) { myInfluenceradiustexture = val; }
1526  {
1527  SOP_Node *thissop = cookparms.getNode();
1528  if (!thissop) return getInfluenceradiustexture();
1530  OP_Utils::evalOpParm(result, thissop, "influenceradiustexture", cookparms.getCookTime(), 0);
1531  return result;
1532  }
1533  fpreal64 getInfluencedecay() const { return myInfluencedecay; }
1534  void setInfluencedecay(fpreal64 val) { myInfluencedecay = val; }
1536  {
1537  SOP_Node *thissop = cookparms.getNode();
1538  if (!thissop) return getInfluencedecay();
1539  fpreal64 result;
1540  OP_Utils::evalOpParm(result, thissop, "influencedecay", cookparms.getCookTime(), 0);
1541  return result;
1542  }
1543  Influencedecayoverride getInfluencedecayoverride() const { return Influencedecayoverride(myInfluencedecayoverride); }
1544  void setInfluencedecayoverride(Influencedecayoverride val) { myInfluencedecayoverride = int64(val); }
1546  {
1547  SOP_Node *thissop = cookparms.getNode();
1548  if (!thissop) return getInfluencedecayoverride();
1549  int64 result;
1550  OP_Utils::evalOpParm(result, thissop, "influencedecayoverride", cookparms.getCookTime(), 0);
1551  return Influencedecayoverride(result);
1552  }
1553  const UT_StringHolder & getInfluencedecayattrib() const { return myInfluencedecayattrib; }
1554  void setInfluencedecayattrib(const UT_StringHolder & val) { myInfluencedecayattrib = val; }
1556  {
1557  SOP_Node *thissop = cookparms.getNode();
1558  if (!thissop) return getInfluencedecayattrib();
1560  OP_Utils::evalOpParm(result, thissop, "influencedecayattrib", cookparms.getCookTime(), 0);
1561  return result;
1562  }
1563  const UT_StringHolder & getInfluencedecaytexture() const { return myInfluencedecaytexture; }
1564  void setInfluencedecaytexture(const UT_StringHolder & val) { myInfluencedecaytexture = val; }
1566  {
1567  SOP_Node *thissop = cookparms.getNode();
1568  if (!thissop) return getInfluencedecaytexture();
1570  OP_Utils::evalOpParm(result, thissop, "influencedecaytexture", cookparms.getCookTime(), 0);
1571  return result;
1572  }
1573  int64 getMaxguidecount() const { return myMaxguidecount; }
1574  void setMaxguidecount(int64 val) { myMaxguidecount = val; }
1576  {
1577  SOP_Node *thissop = cookparms.getNode();
1578  if (!thissop) return getMaxguidecount();
1579  int64 result;
1580  OP_Utils::evalOpParm(result, thissop, "maxguidecount", cookparms.getCookTime(), 0);
1581  return result;
1582  }
1583  Maxguidecountoverride getMaxguidecountoverride() const { return Maxguidecountoverride(myMaxguidecountoverride); }
1584  void setMaxguidecountoverride(Maxguidecountoverride val) { myMaxguidecountoverride = int64(val); }
1586  {
1587  SOP_Node *thissop = cookparms.getNode();
1588  if (!thissop) return getMaxguidecountoverride();
1589  int64 result;
1590  OP_Utils::evalOpParm(result, thissop, "maxguidecountoverride", cookparms.getCookTime(), 0);
1591  return Maxguidecountoverride(result);
1592  }
1593  const UT_StringHolder & getMaxguidecountattrib() const { return myMaxguidecountattrib; }
1594  void setMaxguidecountattrib(const UT_StringHolder & val) { myMaxguidecountattrib = val; }
1596  {
1597  SOP_Node *thissop = cookparms.getNode();
1598  if (!thissop) return getMaxguidecountattrib();
1600  OP_Utils::evalOpParm(result, thissop, "maxguidecountattrib", cookparms.getCookTime(), 0);
1601  return result;
1602  }
1603  const UT_StringHolder & getMaxguidecounttexture() const { return myMaxguidecounttexture; }
1604  void setMaxguidecounttexture(const UT_StringHolder & val) { myMaxguidecounttexture = val; }
1606  {
1607  SOP_Node *thissop = cookparms.getNode();
1608  if (!thissop) return getMaxguidecounttexture();
1610  OP_Utils::evalOpParm(result, thissop, "maxguidecounttexture", cookparms.getCookTime(), 0);
1611  return result;
1612  }
1613  fpreal64 getMaxguideangle() const { return myMaxguideangle; }
1614  void setMaxguideangle(fpreal64 val) { myMaxguideangle = val; }
1616  {
1617  SOP_Node *thissop = cookparms.getNode();
1618  if (!thissop) return getMaxguideangle();
1619  fpreal64 result;
1620  OP_Utils::evalOpParm(result, thissop, "maxguideangle", cookparms.getCookTime(), 0);
1621  return result;
1622  }
1623  Maxguideangleoverride getMaxguideangleoverride() const { return Maxguideangleoverride(myMaxguideangleoverride); }
1624  void setMaxguideangleoverride(Maxguideangleoverride val) { myMaxguideangleoverride = int64(val); }
1626  {
1627  SOP_Node *thissop = cookparms.getNode();
1628  if (!thissop) return getMaxguideangleoverride();
1629  int64 result;
1630  OP_Utils::evalOpParm(result, thissop, "maxguideangleoverride", cookparms.getCookTime(), 0);
1631  return Maxguideangleoverride(result);
1632  }
1633  const UT_StringHolder & getMaxguideangleattrib() const { return myMaxguideangleattrib; }
1634  void setMaxguideangleattrib(const UT_StringHolder & val) { myMaxguideangleattrib = val; }
1636  {
1637  SOP_Node *thissop = cookparms.getNode();
1638  if (!thissop) return getMaxguideangleattrib();
1640  OP_Utils::evalOpParm(result, thissop, "maxguideangleattrib", cookparms.getCookTime(), 0);
1641  return result;
1642  }
1643  const UT_StringHolder & getMaxguideangletexture() const { return myMaxguideangletexture; }
1644  void setMaxguideangletexture(const UT_StringHolder & val) { myMaxguideangletexture = val; }
1646  {
1647  SOP_Node *thissop = cookparms.getNode();
1648  if (!thissop) return getMaxguideangletexture();
1650  OP_Utils::evalOpParm(result, thissop, "maxguideangletexture", cookparms.getCookTime(), 0);
1651  return result;
1652  }
1653  fpreal64 getClumpcrossover() const { return myClumpcrossover; }
1654  void setClumpcrossover(fpreal64 val) { myClumpcrossover = val; }
1656  {
1657  SOP_Node *thissop = cookparms.getNode();
1658  if (!thissop) return getClumpcrossover();
1659  fpreal64 result;
1660  OP_Utils::evalOpParm(result, thissop, "clumpcrossover", cookparms.getCookTime(), 0);
1661  return result;
1662  }
1663  Clumpcrossoveroverride getClumpcrossoveroverride() const { return Clumpcrossoveroverride(myClumpcrossoveroverride); }
1664  void setClumpcrossoveroverride(Clumpcrossoveroverride val) { myClumpcrossoveroverride = int64(val); }
1666  {
1667  SOP_Node *thissop = cookparms.getNode();
1668  if (!thissop) return getClumpcrossoveroverride();
1669  int64 result;
1670  OP_Utils::evalOpParm(result, thissop, "clumpcrossoveroverride", cookparms.getCookTime(), 0);
1671  return Clumpcrossoveroverride(result);
1672  }
1673  const UT_StringHolder & getClumpcrossoverattrib() const { return myClumpcrossoverattrib; }
1674  void setClumpcrossoverattrib(const UT_StringHolder & val) { myClumpcrossoverattrib = val; }
1676  {
1677  SOP_Node *thissop = cookparms.getNode();
1678  if (!thissop) return getClumpcrossoverattrib();
1680  OP_Utils::evalOpParm(result, thissop, "clumpcrossoverattrib", cookparms.getCookTime(), 0);
1681  return result;
1682  }
1683  const UT_StringHolder & getClumpcrossovertexture() const { return myClumpcrossovertexture; }
1684  void setClumpcrossovertexture(const UT_StringHolder & val) { myClumpcrossovertexture = val; }
1686  {
1687  SOP_Node *thissop = cookparms.getNode();
1688  if (!thissop) return getClumpcrossovertexture();
1690  OP_Utils::evalOpParm(result, thissop, "clumpcrossovertexture", cookparms.getCookTime(), 0);
1691  return result;
1692  }
1693  bool getGrowunguided() const { return myGrowunguided; }
1694  void setGrowunguided(bool val) { myGrowunguided = val; }
1695  bool opGrowunguided(const SOP_NodeVerb::CookParms &cookparms) const
1696  {
1697  SOP_Node *thissop = cookparms.getNode();
1698  if (!thissop) return getGrowunguided();
1699  bool result;
1700  OP_Utils::evalOpParm(result, thissop, "growunguided", cookparms.getCookTime(), 0);
1701  return result;
1702  }
1703  bool getUseinitdirattrib() const { return myUseinitdirattrib; }
1704  void setUseinitdirattrib(bool val) { myUseinitdirattrib = val; }
1705  bool opUseinitdirattrib(const SOP_NodeVerb::CookParms &cookparms) const
1706  {
1707  SOP_Node *thissop = cookparms.getNode();
1708  if (!thissop) return getUseinitdirattrib();
1709  bool result;
1710  OP_Utils::evalOpParm(result, thissop, "useinitdirattrib", cookparms.getCookTime(), 0);
1711  return result;
1712  }
1713  const UT_StringHolder & getInitdirattrib() const { return myInitdirattrib; }
1714  void setInitdirattrib(const UT_StringHolder & val) { myInitdirattrib = val; }
1716  {
1717  SOP_Node *thissop = cookparms.getNode();
1718  if (!thissop) return getInitdirattrib();
1720  OP_Utils::evalOpParm(result, thissop, "initdirattrib", cookparms.getCookTime(), 0);
1721  return result;
1722  }
1723  int64 getUnguidedsegments() const { return myUnguidedsegments; }
1724  void setUnguidedsegments(int64 val) { myUnguidedsegments = val; }
1726  {
1727  SOP_Node *thissop = cookparms.getNode();
1728  if (!thissop) return getUnguidedsegments();
1729  int64 result;
1730  OP_Utils::evalOpParm(result, thissop, "unguidedsegments", cookparms.getCookTime(), 0);
1731  return result;
1732  }
1733  fpreal64 getUnguidedlength() const { return myUnguidedlength; }
1734  void setUnguidedlength(fpreal64 val) { myUnguidedlength = val; }
1736  {
1737  SOP_Node *thissop = cookparms.getNode();
1738  if (!thissop) return getUnguidedlength();
1739  fpreal64 result;
1740  OP_Utils::evalOpParm(result, thissop, "unguidedlength", cookparms.getCookTime(), 0);
1741  return result;
1742  }
1743  Unguidedlengthoverride getUnguidedlengthoverride() const { return Unguidedlengthoverride(myUnguidedlengthoverride); }
1744  void setUnguidedlengthoverride(Unguidedlengthoverride val) { myUnguidedlengthoverride = int64(val); }
1746  {
1747  SOP_Node *thissop = cookparms.getNode();
1748  if (!thissop) return getUnguidedlengthoverride();
1749  int64 result;
1750  OP_Utils::evalOpParm(result, thissop, "unguidedlengthoverride", cookparms.getCookTime(), 0);
1751  return Unguidedlengthoverride(result);
1752  }
1753  const UT_StringHolder & getUnguidedlengthattrib() const { return myUnguidedlengthattrib; }
1754  void setUnguidedlengthattrib(const UT_StringHolder & val) { myUnguidedlengthattrib = val; }
1756  {
1757  SOP_Node *thissop = cookparms.getNode();
1758  if (!thissop) return getUnguidedlengthattrib();
1760  OP_Utils::evalOpParm(result, thissop, "unguidedlengthattrib", cookparms.getCookTime(), 0);
1761  return result;
1762  }
1763  const UT_StringHolder & getUnguidedlengthtexture() const { return myUnguidedlengthtexture; }
1764  void setUnguidedlengthtexture(const UT_StringHolder & val) { myUnguidedlengthtexture = val; }
1766  {
1767  SOP_Node *thissop = cookparms.getNode();
1768  if (!thissop) return getUnguidedlengthtexture();
1770  OP_Utils::evalOpParm(result, thissop, "unguidedlengthtexture", cookparms.getCookTime(), 0);
1771  return result;
1772  }
1773  fpreal64 getUnguidedminlength() const { return myUnguidedminlength; }
1774  void setUnguidedminlength(fpreal64 val) { myUnguidedminlength = val; }
1776  {
1777  SOP_Node *thissop = cookparms.getNode();
1778  if (!thissop) return getUnguidedminlength();
1779  fpreal64 result;
1780  OP_Utils::evalOpParm(result, thissop, "unguidedminlength", cookparms.getCookTime(), 0);
1781  return result;
1782  }
1783  bool getCreateweightattribs() const { return myCreateweightattribs; }
1784  void setCreateweightattribs(bool val) { myCreateweightattribs = val; }
1785  bool opCreateweightattribs(const SOP_NodeVerb::CookParms &cookparms) const
1786  {
1787  SOP_Node *thissop = cookparms.getNode();
1788  if (!thissop) return getCreateweightattribs();
1789  bool result;
1790  OP_Utils::evalOpParm(result, thissop, "createweightattribs", cookparms.getCookTime(), 0);
1791  return result;
1792  }
1793  bool getCreaterestrootattrib() const { return myCreaterestrootattrib; }
1794  void setCreaterestrootattrib(bool val) { myCreaterestrootattrib = val; }
1796  {
1797  SOP_Node *thissop = cookparms.getNode();
1798  if (!thissop) return getCreaterestrootattrib();
1799  bool result;
1800  OP_Utils::evalOpParm(result, thissop, "createrestrootattrib", cookparms.getCookTime(), 0);
1801  return result;
1802  }
1803  bool getOutputthicknessattrib() const { return myOutputthicknessattrib; }
1804  void setOutputthicknessattrib(bool val) { myOutputthicknessattrib = val; }
1806  {
1807  SOP_Node *thissop = cookparms.getNode();
1808  if (!thissop) return getOutputthicknessattrib();
1809  bool result;
1810  OP_Utils::evalOpParm(result, thissop, "outputthicknessattrib", cookparms.getCookTime(), 0);
1811  return result;
1812  }
1813  const UT_StringHolder & getThicknessattrib() const { return myThicknessattrib; }
1814  void setThicknessattrib(const UT_StringHolder & val) { myThicknessattrib = val; }
1816  {
1817  SOP_Node *thissop = cookparms.getNode();
1818  if (!thissop) return getThicknessattrib();
1820  OP_Utils::evalOpParm(result, thissop, "thicknessattrib", cookparms.getCookTime(), 0);
1821  return result;
1822  }
1823  fpreal64 getThickness() const { return myThickness; }
1824  void setThickness(fpreal64 val) { myThickness = val; }
1826  {
1827  SOP_Node *thissop = cookparms.getNode();
1828  if (!thissop) return getThickness();
1829  fpreal64 result;
1830  OP_Utils::evalOpParm(result, thissop, "thickness", cookparms.getCookTime(), 0);
1831  return result;
1832  }
1833  Thicknessoverride getThicknessoverride() const { return Thicknessoverride(myThicknessoverride); }
1834  void setThicknessoverride(Thicknessoverride val) { myThicknessoverride = int64(val); }
1836  {
1837  SOP_Node *thissop = cookparms.getNode();
1838  if (!thissop) return getThicknessoverride();
1839  int64 result;
1840  OP_Utils::evalOpParm(result, thissop, "thicknessoverride", cookparms.getCookTime(), 0);
1841  return Thicknessoverride(result);
1842  }
1843  const UT_StringHolder & getThicknessskinattrib() const { return myThicknessskinattrib; }
1844  void setThicknessskinattrib(const UT_StringHolder & val) { myThicknessskinattrib = val; }
1846  {
1847  SOP_Node *thissop = cookparms.getNode();
1848  if (!thissop) return getThicknessskinattrib();
1850  OP_Utils::evalOpParm(result, thissop, "thicknessskinattrib", cookparms.getCookTime(), 0);
1851  return result;
1852  }
1853  const UT_StringHolder & getThicknesstexture() const { return myThicknesstexture; }
1854  void setThicknesstexture(const UT_StringHolder & val) { myThicknesstexture = val; }
1856  {
1857  SOP_Node *thissop = cookparms.getNode();
1858  if (!thissop) return getThicknesstexture();
1860  OP_Utils::evalOpParm(result, thissop, "thicknesstexture", cookparms.getCookTime(), 0);
1861  return result;
1862  }
1863  UT_SharedPtr<UT_Ramp> getHairprofile() const { return myHairprofile; }
1864  void setHairprofile(UT_SharedPtr<UT_Ramp> val) { myHairprofile = val; }
1866  {
1867  SOP_Node *thissop = cookparms.getNode();
1868  if (!thissop) return getHairprofile();
1870  OP_Utils::evalOpParm(result, thissop, "hairprofile", cookparms.getCookTime(), 0);
1871  return result;
1872  }
1873  const UT_StringHolder & getPointattribs() const { return myPointattribs; }
1874  void setPointattribs(const UT_StringHolder & val) { myPointattribs = val; }
1876  {
1877  SOP_Node *thissop = cookparms.getNode();
1878  if (!thissop) return getPointattribs();
1880  OP_Utils::evalOpParm(result, thissop, "pointattribs", cookparms.getCookTime(), 0);
1881  return result;
1882  }
1883  const UT_StringHolder & getVertattribs() const { return myVertattribs; }
1884  void setVertattribs(const UT_StringHolder & val) { myVertattribs = val; }
1886  {
1887  SOP_Node *thissop = cookparms.getNode();
1888  if (!thissop) return getVertattribs();
1890  OP_Utils::evalOpParm(result, thissop, "vertattribs", cookparms.getCookTime(), 0);
1891  return result;
1892  }
1893  const UT_StringHolder & getPrimattribs() const { return myPrimattribs; }
1894  void setPrimattribs(const UT_StringHolder & val) { myPrimattribs = val; }
1896  {
1897  SOP_Node *thissop = cookparms.getNode();
1898  if (!thissop) return getPrimattribs();
1900  OP_Utils::evalOpParm(result, thissop, "primattribs", cookparms.getCookTime(), 0);
1901  return result;
1902  }
1903  const UT_StringHolder & getDetailattribs() const { return myDetailattribs; }
1904  void setDetailattribs(const UT_StringHolder & val) { myDetailattribs = val; }
1906  {
1907  SOP_Node *thissop = cookparms.getNode();
1908  if (!thissop) return getDetailattribs();
1910  OP_Utils::evalOpParm(result, thissop, "detailattribs", cookparms.getCookTime(), 0);
1911  return result;
1912  }
1913  const UT_StringHolder & getGuidepointattribs() const { return myGuidepointattribs; }
1914  void setGuidepointattribs(const UT_StringHolder & val) { myGuidepointattribs = val; }
1916  {
1917  SOP_Node *thissop = cookparms.getNode();
1918  if (!thissop) return getGuidepointattribs();
1920  OP_Utils::evalOpParm(result, thissop, "guidepointattribs", cookparms.getCookTime(), 0);
1921  return result;
1922  }
1923  const UT_StringHolder & getGuideprimattribs() const { return myGuideprimattribs; }
1924  void setGuideprimattribs(const UT_StringHolder & val) { myGuideprimattribs = val; }
1926  {
1927  SOP_Node *thissop = cookparms.getNode();
1928  if (!thissop) return getGuideprimattribs();
1930  OP_Utils::evalOpParm(result, thissop, "guideprimattribs", cookparms.getCookTime(), 0);
1931  return result;
1932  }
1933 
1934 private:
1935  int64 myMode;
1936  UT_StringHolder myGroup;
1937  UT_StringHolder myUvattrib;
1938  bool myLimittobbox;
1939  UT_Vector3D myBboxsize;
1940  UT_Vector3D myBboxcenter;
1941  bool myPrune;
1942  fpreal64 myPruningratio;
1943  bool myPrunethicken;
1944  bool myUseguides;
1945  bool myUniformguidesegments;
1946  bool mySkininterp;
1947  int64 myGuideblendmethod;
1948  UT_StringHolder myGuidegroup;
1949  fpreal64 myInfluenceradius;
1950  int64 myInfluenceradiusoverride;
1951  UT_StringHolder myInfluenceradiusattrib;
1952  UT_StringHolder myInfluenceradiustexture;
1953  fpreal64 myInfluencedecay;
1954  int64 myInfluencedecayoverride;
1955  UT_StringHolder myInfluencedecayattrib;
1956  UT_StringHolder myInfluencedecaytexture;
1957  int64 myMaxguidecount;
1958  int64 myMaxguidecountoverride;
1959  UT_StringHolder myMaxguidecountattrib;
1960  UT_StringHolder myMaxguidecounttexture;
1961  fpreal64 myMaxguideangle;
1962  int64 myMaxguideangleoverride;
1963  UT_StringHolder myMaxguideangleattrib;
1964  UT_StringHolder myMaxguideangletexture;
1965  fpreal64 myClumpcrossover;
1966  int64 myClumpcrossoveroverride;
1967  UT_StringHolder myClumpcrossoverattrib;
1968  UT_StringHolder myClumpcrossovertexture;
1969  bool myGrowunguided;
1970  bool myUseinitdirattrib;
1971  UT_StringHolder myInitdirattrib;
1972  int64 myUnguidedsegments;
1973  fpreal64 myUnguidedlength;
1974  int64 myUnguidedlengthoverride;
1975  UT_StringHolder myUnguidedlengthattrib;
1976  UT_StringHolder myUnguidedlengthtexture;
1977  fpreal64 myUnguidedminlength;
1978  bool myCreateweightattribs;
1979  bool myCreaterestrootattrib;
1980  bool myOutputthicknessattrib;
1981  UT_StringHolder myThicknessattrib;
1982  fpreal64 myThickness;
1983  int64 myThicknessoverride;
1984  UT_StringHolder myThicknessskinattrib;
1985  UT_StringHolder myThicknesstexture;
1986  UT_SharedPtr<UT_Ramp> myHairprofile;
1987  UT_StringHolder myPointattribs;
1988  UT_StringHolder myVertattribs;
1989  UT_StringHolder myPrimattribs;
1990  UT_StringHolder myDetailattribs;
1991  UT_StringHolder myGuidepointattribs;
1992  UT_StringHolder myGuideprimattribs;
1993 
1994 };
Influenceradiusoverride getInfluenceradiusoverride() const
GLdouble s
Definition: glew.h:1390
UT_StringHolder opVertattribs(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 getUnguidedlength() const
UT_StringHolder opGroup(const SOP_NodeVerb::CookParms &cookparms) const
Thicknessoverride getThicknessoverride() const
UT_StringHolder opInfluenceradiustexture(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
const UT_StringHolder & getPrimattribs() const
static void saveData(std::ostream &os, UT_Vector4D v)
void setUnguidedlength(fpreal64 val)
exint nodeIdx() const
Definition: SOP_NodeVerb.h:114
fpreal64 opPruningratio(const SOP_NodeVerb::CookParms &cookparms) const
GLenum src
Definition: glew.h:2410
int int32
Definition: SYS_Types.h:39
SOP_Node * getNode() const
Definition: SOP_NodeVerb.h:640
void getNestParmValue(TempIndex idx, TempIndex instance, fpreal &value) const override
void setGuidegroup(const UT_StringHolder &val)
UT_Vector3D opBboxcenter(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 setNestParmValue(TempIndex idx, TempIndex instance, const UT_StringHolder &value) override
void setCreaterestrootattrib(bool val)
UT_StringHolder opDetailattribs(const SOP_NodeVerb::CookParms &cookparms) const
void doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
bool getUniformguidesegments() const
const UT_StringHolder & getDetailattribs() const
exint bread(int32 *buffer, exint asize=1)
GT_API const UT_StringHolder time
UT_StringHolder opGuidegroup(const SOP_NodeVerb::CookParms &cookparms) const
void setClumpcrossoverattrib(const UT_StringHolder &val)
fpreal64 getPruningratio() const
fpreal getTime() const
Definition: OP_Context.h:60
static void saveData(std::ostream &os, UT_Matrix2D v)
fpreal64 getMaxguideangle() const
const UT_StringHolder & getInfluenceradiustexture() const
GLuint const GLfloat * val
Definition: glew.h:2794
fpreal64 getInfluenceradius() const
int64 getUnguidedsegments() const
UT_StringHolder opMaxguidecounttexture(const SOP_NodeVerb::CookParms &cookparms) const
void setMaxguideangleattrib(const UT_StringHolder &val)
void setMaxguidecountattrib(const UT_StringHolder &val)
static void loadData(UT_IStream &is, UT_Vector3D &v)
void setGroup(const UT_StringHolder &val)
void setInitdirattrib(const UT_StringHolder &val)
int64 exint
Definition: SYS_Types.h:125
static void loadData(UT_IStream &is, PRM_DataItemHandle &v)
SYS_FORCE_INLINE const char * buffer() const
static void loadData(UT_IStream &is, bool &v)
const SOP_GraphProxy * graph() const
Definition: SOP_NodeVerb.h:113
const UT_StringHolder & getInfluencedecayattrib() const
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
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)
const GLdouble * v
Definition: glew.h:1391
void setMaxguideangletexture(const UT_StringHolder &val)
bool load(UT_IStream &is)
bool operator!=(const SOP_HairGenCoreParms &src) const
bool getCreaterestrootattrib() const
void setInfluenceradiusoverride(Influenceradiusoverride val)
UT_StringHolder opThicknesstexture(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getInfluencedecaytexture() const
const UT_StringHolder & getMaxguidecountattrib() const
void save(std::ostream &os) const
UT_StringHolder opUnguidedlengthattrib(const SOP_NodeVerb::CookParms &cookparms) const
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
bool opOutputthicknessattrib(const SOP_NodeVerb::CookParms &cookparms) const
void setUnguidedsegments(int64 val)
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
double fpreal64
Definition: SYS_Types.h:201
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
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
void setUnguidedlengthoverride(Unguidedlengthoverride val)
void setGuideprimattribs(const UT_StringHolder &val)
static void loadData(UT_IStream &is, UT_Matrix3D &v)
void setPrimattribs(const UT_StringHolder &val)
SYS_FORCE_INLINE T & y()
Definition: UT_Vector3.h:513
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
exint length() const
fpreal64 opUnguidedminlength(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, fpreal64 &v)
SYS_FORCE_INLINE const char * buffer() const
std::shared_ptr< T > UT_SharedPtr
Wrapper around std::shared_ptr.
Definition: UT_SharedPtr.h:28
UT_SharedPtr< UT_Ramp > opHairprofile(const SOP_NodeVerb::CookParms &cookparms) const
Clumpcrossoveroverride opClumpcrossoveroverride(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opThicknessskinattrib(const SOP_NodeVerb::CookParms &cookparms) const
GLint GLenum GLsizei GLint GLsizei const void * data
Definition: glew.h:1379
fpreal64 opInfluenceradius(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getUnguidedlengthattrib() const
UT_StringHolder opClumpcrossovertexture(const SOP_NodeVerb::CookParms &cookparms) const
Clumpcrossoveroverride getClumpcrossoveroverride() const
bool getOutputthicknessattrib() const
SYS_FORCE_INLINE T & z()
Definition: UT_Vector3.h:515
bool opCreateweightattribs(const SOP_NodeVerb::CookParms &cookparms) const
void buildFromOp(const SOP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
void setThickness(fpreal64 val)
const UT_StringHolder & getVertattribs() const
static void loadData(UT_IStream &is, UT_Vector4D &v)
void setInfluencedecayoverride(Influencedecayoverride val)
const GLfloat * c
Definition: glew.h:16296
void setGuidepointattribs(const UT_StringHolder &val)
const UT_StringHolder & getInitdirattrib() const
const UT_StringHolder & getMaxguideangletexture() 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
static void loadData(UT_IStream &is, UT_Matrix4D &v)
void setMaxguidecountoverride(Maxguidecountoverride val)
void setInfluencedecayattrib(const UT_StringHolder &val)
UT_Vector3T< fpreal64 > UT_Vector3D
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)
Influencedecayoverride opInfluencedecayoverride(const SOP_NodeVerb::CookParms &cookparms) 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)
fpreal64 opThickness(const SOP_NodeVerb::CookParms &cookparms) const
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
void saveBinary(std::ostream &os) const
Save string to binary stream.
Definition: UT_String.h:294
Guideblendmethod getGuideblendmethod() const
GT_API const UT_StringHolder version
DEP_MicroNode * depnode() const
Definition: SOP_NodeVerb.h:121
void setNestParmValue(TempIndex idx, TempIndex instance, const fpreal &value) override
static void saveData(std::ostream &os, int64 v)
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)
UT_Vector3D opBboxsize(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, int64 &v)
UT_StringHolder opPrimattribs(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 getThickness() const
void setMaxguideangle(fpreal64 val)
void setDetailattribs(const UT_StringHolder &val)
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix3D &value) override
UT_StringHolder opInfluencedecaytexture(const SOP_NodeVerb::CookParms &cookparms) const
bool opPrune(const SOP_NodeVerb::CookParms &cookparms) const
ParmType getNestParmType(TempIndex fieldnum) const override
void setUniformguidesegments(bool val)
fpreal64 fpreal
Definition: SYS_Types.h:277
Maxguideangleoverride opMaxguideangleoverride(const SOP_NodeVerb::CookParms &cookparms) const
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)
Utility class for containing a color ramp.
Definition: UT_Ramp.h:84
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector4D &value) const override
static void loadData(UT_IStream &is, UT_Vector2I &v)
void setClumpcrossoveroverride(Clumpcrossoveroverride val)
UT_Vector3D getBboxsize() const
void setBboxcenter(UT_Vector3D val)
UT_StringHolder opUvattrib(const SOP_NodeVerb::CookParms &cookparms) const
GLdouble GLdouble GLdouble r
Definition: glew.h:1406
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector4D &value) override
Thicknessoverride opThicknessoverride(const SOP_NodeVerb::CookParms &cookparms) 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 setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix2D &value) override
virtual void evalOpParm(int64 &v, NodeIdx node, const char *parmname, fpreal time, DEP_MicroNode *depnode) const =0
Unguidedlengthoverride opUnguidedlengthoverride(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 opUnguidedlength(const SOP_NodeVerb::CookParms &cookparms) const
void copyFrom(const SOP_NodeParms *src) override
const UT_StringHolder & getGuidepointattribs() const
SYS_FORCE_INLINE T & x()
Definition: UT_Vector3.h:511
UT_StringHolder opMaxguideangletexture(const SOP_NodeVerb::CookParms &cookparms) const
fpreal getCookTime() const
Definition: SOP_NodeVerb.h:654
bool opUseguides(const SOP_NodeVerb::CookParms &cookparms) const
void setUnguidedlengthattrib(const UT_StringHolder &val)
void setBboxsize(UT_Vector3D val)
static void saveData(std::ostream &os, UT_Matrix3D v)
GLuint64EXT * result
Definition: glew.h:14007
bool opGrowunguided(const SOP_NodeVerb::CookParms &cookparms) const
const char * findChar(int c) const
Definition: UT_String.h:1367
#define UT_ASSERT(ZZ)
Definition: UT_Assert.h:135
UT_StringHolder opInitdirattrib(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 getClumpcrossover() const
void setPruningratio(fpreal64 val)
void setPointattribs(const UT_StringHolder &val)
exint getNestNumParms(TempIndex idx) const override
void setInfluencedecay(fpreal64 val)
const UT_StringHolder & getThicknesstexture() const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
UT_Vector3D getBboxcenter() const
void setClumpcrossovertexture(const UT_StringHolder &val)
bool opUseinitdirattrib(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opGuidepointattribs(const SOP_NodeVerb::CookParms &cookparms) const
void setUseinitdirattrib(bool val)
static void saveData(std::ostream &os, UT_Vector3D v)
UT_StringHolder opPointattribs(const SOP_NodeVerb::CookParms &cookparms) const
void setThicknessattrib(const UT_StringHolder &val)
fpreal64 opClumpcrossover(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, UT_StringHolder &v)
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
void setCreateweightattribs(bool val)
void setClumpcrossover(fpreal64 val)
const UT_StringHolder & getUnguidedlengthtexture() const
Influencedecayoverride getInfluencedecayoverride() const
GLsizei const GLfloat * value
Definition: glew.h:1849
fpreal64 opInfluencedecay(const SOP_NodeVerb::CookParms &cookparms) const
void loadFromOpSubclass(const LoadParms &loadparms) override
void setThicknessskinattrib(const UT_StringHolder &val)
const OP_Context & context() const
Definition: SOP_NodeVerb.h:119
UT_SharedPtr< const PRM_DataItem > PRM_DataItemHandle
Definition: PRM_Parm.h:89
static void saveData(std::ostream &os, UT_StringHolder s)
static void saveData(std::ostream &os, UT_Matrix4D v)
SYS_FORCE_INLINE bool isstring() const
UT_StringHolder opInfluenceradiusattrib(const SOP_NodeVerb::CookParms &cookparms) const
bool opLimittobbox(const SOP_NodeVerb::CookParms &cookparms) const
SYS_FORCE_INLINE void strncpy(const char *src, exint maxlen)
type
Definition: core.h:528
void setInfluenceradiusattrib(const UT_StringHolder &val)
static void loadData(UT_IStream &is, UT_Matrix2D &v)
const UT_StringHolder & getGuidegroup() const
void setInfluenceradiustexture(const UT_StringHolder &val)