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