HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
SOP_Scatter-2.0.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 <OP/OP_GraphProxy.h>
9 
10 #include <OP/OP_Utils.h>
11 #include <PRM/PRM_Parm.h>
12 #include <UT/UT_IStream.h>
13 #include <UT/UT_NTStreamUtil.h>
14 #include <UT/UT_Ramp.h>
15 #include <UT/UT_SharedPtr.h>
16 #include <UT/UT_StringHolder.h>
17 #include <UT/UT_StringStream.h>
18 #include <UT/UT_VectorTypes.h>
19 #include <UT/UT_EnvControl.h>
20 #include <SYS/SYS_Types.h>
21 
22 class DEP_MicroNode;
23 namespace SOP_Scatter_2_0Enums
24 {
25  enum class GenerateBy
26  {
27  BYDENSITY = 0,
30  };
31 
33  getToken(GenerateBy enum_value)
34  {
35  using namespace UT::Literal;
36  switch (enum_value) {
37  case GenerateBy::BYDENSITY: return "bydensity"_sh;
38  case GenerateBy::COUNTPERPRIMITIVE: return "countperprimitive"_sh;
39  case GenerateBy::TEXTURESPACE: return "texturespace"_sh;
40  default: UT_ASSERT(false); return ""_sh;
41  }
42  }
43 
44 }
45 
46 
48 {
49 public:
50  static int version() { return 1; }
51 
53  {
54  myGroup = ""_UTsh;
55  myGenerateBy = 0;
56  myIndepVoxel = false;
57  myForceTotal = true;
58  myNpts = 1000;
59  myDensityScale = 10;
60  myUseDensityAttrib = false;
61  myDensityAttrib = "density"_UTsh;
62  myUseAreaAttrib = false;
63  myAreaAttrib = "area"_UTsh;
64  myUseAreaForVolumes = false;
65  myUseDensityTexture = false;
66  myDensityTexture = "default.pic"_UTsh;
67  myUVAttrib = "uv"_UTsh;
68  myCountPerPrimAttrib = "count"_UTsh;
69  myUseEmergencyLimit = true;
70  myEmergencyLimit = 1e+06;
71  mySeed = 0;
72  myOverridePrimSeed = false;
73  myPrimSeedAttrib = "primid"_UTsh;
74  myRandomizeOrder = true;
75  myRelaxPoints = true;
76  myRelaxIterations = 10;
77  myUseGeometricNormals = false;
78  myUsePrimNumAttrib = false;
79  myPrimNumAttrib = "sourceprim"_UTsh;
80  myUsePrimUVWAttrib = false;
81  myPrimUVWAttrib = "sourceprimuv"_UTsh;
82  myUseOutputDensityAttrib = false;
83  myOutputDensityAttrib = "density"_UTsh;
84  myUseOutputRadiusAttrib = false;
85  myOutputRadiusAttrib = "pscale"_UTsh;
86  myUseOutputIdAttrib = false;
87  myOutputIdAttrib = "id"_UTsh;
88  myRadiusInTextureSpace = false;
89  myPointAttribs = "*"_UTsh;
90  myVertAttribs = "N uv*"_UTsh;
91  myPrimAttribs = ""_UTsh;
92  myDetailAttribs = ""_UTsh;
93  myDetailAttribsAsDetail = ""_UTsh;
94  myScaleRadiiBy = 1;
95  myUseMaxRadius = true;
96  myMaxRadius = 10;
97 
98  }
99 
100  explicit SOP_Scatter_2_0Parms(const SOP_Scatter_2_0Parms &) = default;
102  SOP_Scatter_2_0Parms(SOP_Scatter_2_0Parms &&) noexcept = default;
103  SOP_Scatter_2_0Parms &operator=(SOP_Scatter_2_0Parms &&) noexcept = default;
104 
105  ~SOP_Scatter_2_0Parms() override {}
106 
108  {
109  if (myGroup != src.myGroup) return false;
110  if (myGenerateBy != src.myGenerateBy) return false;
111  if (myIndepVoxel != src.myIndepVoxel) return false;
112  if (myForceTotal != src.myForceTotal) return false;
113  if (myNpts != src.myNpts) return false;
114  if (myDensityScale != src.myDensityScale) return false;
115  if (myUseDensityAttrib != src.myUseDensityAttrib) return false;
116  if (myDensityAttrib != src.myDensityAttrib) return false;
117  if (myUseAreaAttrib != src.myUseAreaAttrib) return false;
118  if (myAreaAttrib != src.myAreaAttrib) return false;
119  if (myUseAreaForVolumes != src.myUseAreaForVolumes) return false;
120  if (myUseDensityTexture != src.myUseDensityTexture) return false;
121  if (myDensityTexture != src.myDensityTexture) return false;
122  if (myUVAttrib != src.myUVAttrib) return false;
123  if (myCountPerPrimAttrib != src.myCountPerPrimAttrib) return false;
124  if (myUseEmergencyLimit != src.myUseEmergencyLimit) return false;
125  if (myEmergencyLimit != src.myEmergencyLimit) return false;
126  if (mySeed != src.mySeed) return false;
127  if (myOverridePrimSeed != src.myOverridePrimSeed) return false;
128  if (myPrimSeedAttrib != src.myPrimSeedAttrib) return false;
129  if (myRandomizeOrder != src.myRandomizeOrder) return false;
130  if (myRelaxPoints != src.myRelaxPoints) return false;
131  if (myRelaxIterations != src.myRelaxIterations) return false;
132  if (myUseGeometricNormals != src.myUseGeometricNormals) return false;
133  if (myUsePrimNumAttrib != src.myUsePrimNumAttrib) return false;
134  if (myPrimNumAttrib != src.myPrimNumAttrib) return false;
135  if (myUsePrimUVWAttrib != src.myUsePrimUVWAttrib) return false;
136  if (myPrimUVWAttrib != src.myPrimUVWAttrib) return false;
137  if (myUseOutputDensityAttrib != src.myUseOutputDensityAttrib) return false;
138  if (myOutputDensityAttrib != src.myOutputDensityAttrib) return false;
139  if (myUseOutputRadiusAttrib != src.myUseOutputRadiusAttrib) return false;
140  if (myOutputRadiusAttrib != src.myOutputRadiusAttrib) return false;
141  if (myUseOutputIdAttrib != src.myUseOutputIdAttrib) return false;
142  if (myOutputIdAttrib != src.myOutputIdAttrib) return false;
143  if (myRadiusInTextureSpace != src.myRadiusInTextureSpace) return false;
144  if (myPointAttribs != src.myPointAttribs) return false;
145  if (myVertAttribs != src.myVertAttribs) return false;
146  if (myPrimAttribs != src.myPrimAttribs) return false;
147  if (myDetailAttribs != src.myDetailAttribs) return false;
148  if (myDetailAttribsAsDetail != src.myDetailAttribsAsDetail) return false;
149  if (myScaleRadiiBy != src.myScaleRadiiBy) return false;
150  if (myUseMaxRadius != src.myUseMaxRadius) return false;
151  if (myMaxRadius != src.myMaxRadius) return false;
152 
153 
154  if (baseGetSignature() != src.baseGetSignature()) return false;
155 
156  return true;
157  }
159  {
160  return !operator==(src);
161  }
163 
164 
165 
166  void buildFromOp(const OP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
167  {
168  myGroup = ""_UTsh;
169  if (true)
170  graph->evalOpParm(myGroup, nodeidx, "group", time, graph->isDirect()?nullptr:depnode);
171  myGenerateBy = 0;
172  if (true)
173  graph->evalOpParm(myGenerateBy, nodeidx, "generateby", time, graph->isDirect()?nullptr:depnode);
174  myIndepVoxel = false;
175  if (true && ( (true&&!(((int64(getGenerateBy())!=0)))) ) )
176  graph->evalOpParm(myIndepVoxel, nodeidx, "indepvoxel", time, graph->isDirect()?nullptr:depnode);
177  myForceTotal = true;
178  if (true && ( (true&&!(((int64(getGenerateBy())!=0))||((getIndepVoxel()==1)))) ) )
179  graph->evalOpParm(myForceTotal, nodeidx, "forcetotal", time, graph->isDirect()?nullptr:depnode);
180  myNpts = 1000;
181  if (true && ( (true&&!(((int64(getGenerateBy())!=0))||((getForceTotal()==0))||((getIndepVoxel()==1)))) ) )
182  graph->evalOpParm(myNpts, nodeidx, "npts", time, graph->isDirect()?nullptr:depnode);
183  myDensityScale = 10;
184  if (true && ( (true&&!(((int64(getGenerateBy())==1))||((int64(getGenerateBy())==0)&&(getForceTotal()==1)&&(getIndepVoxel()==0)))) ) )
185  graph->evalOpParm(myDensityScale, nodeidx, "densityscale", time, graph->isDirect()?nullptr:depnode);
186  myUseDensityAttrib = false;
187  if (true && ( (true&&!(((int64(getGenerateBy())!=0)))) ) )
188  graph->evalOpParm(myUseDensityAttrib, nodeidx, "usedensityattrib", time, graph->isDirect()?nullptr:depnode);
189  myDensityAttrib = "density"_UTsh;
190  if (true && ( (true&&!(((int64(getGenerateBy())!=0))||((getUseDensityAttrib()==0)))) ) )
191  graph->evalOpParm(myDensityAttrib, nodeidx, "densityattrib", time, graph->isDirect()?nullptr:depnode);
192  myUseAreaAttrib = false;
193  if (true && ( (true&&!(((int64(getGenerateBy())!=0)))) ) )
194  graph->evalOpParm(myUseAreaAttrib, nodeidx, "useareaattrib", time, graph->isDirect()?nullptr:depnode);
195  myAreaAttrib = "area"_UTsh;
196  if (true && ( (true&&!(((int64(getGenerateBy())!=0))||((getUseAreaAttrib()==0)))) ) )
197  graph->evalOpParm(myAreaAttrib, nodeidx, "areaattrib", time, graph->isDirect()?nullptr:depnode);
198  myUseAreaForVolumes = false;
199  if (true && ( (true&&!(((int64(getGenerateBy())!=0))||((getForceTotal()==1)&&(getIndepVoxel()==0)))) ) )
200  graph->evalOpParm(myUseAreaForVolumes, nodeidx, "useareaforvolumes", time, graph->isDirect()?nullptr:depnode);
201  myUseDensityTexture = false;
202  if (true && ( (true&&!(((int64(getGenerateBy())!=2)))) ) )
203  graph->evalOpParm(myUseDensityTexture, nodeidx, "usedensitytexture", time, graph->isDirect()?nullptr:depnode);
204  myDensityTexture = "default.pic"_UTsh;
205  if (true && ( (true&&!(((int64(getGenerateBy())!=2))||((getUseDensityTexture()==0)))) ) )
206  graph->evalOpParm(myDensityTexture, nodeidx, "densitytexture", time, graph->isDirect()?nullptr:depnode);
207  myUVAttrib = "uv"_UTsh;
208  if (true && ( (true&&!(((int64(getGenerateBy())!=2)))) ) )
209  graph->evalOpParm(myUVAttrib, nodeidx, "uvattrib", time, graph->isDirect()?nullptr:depnode);
210  myCountPerPrimAttrib = "count"_UTsh;
211  if (true && ( (true&&!(((int64(getGenerateBy())!=1)))) ) )
212  graph->evalOpParm(myCountPerPrimAttrib, nodeidx, "primcountattrib", time, graph->isDirect()?nullptr:depnode);
213  myUseEmergencyLimit = true;
214  if (true)
215  graph->evalOpParm(myUseEmergencyLimit, nodeidx, "useemergencylimit", time, graph->isDirect()?nullptr:depnode);
216  myEmergencyLimit = 1e+06;
217  if (true && ( (true&&!(((getUseEmergencyLimit()==0)))) ) )
218  graph->evalOpParm(myEmergencyLimit, nodeidx, "emergencylimit", time, graph->isDirect()?nullptr:depnode);
219  mySeed = 0;
220  if (true)
221  graph->evalOpParm(mySeed, nodeidx, "seed", time, graph->isDirect()?nullptr:depnode);
222  myOverridePrimSeed = false;
223  if (true && ( (true&&!(((int64(getGenerateBy())==2)))) ) )
224  graph->evalOpParm(myOverridePrimSeed, nodeidx, "overrideprimseed", time, graph->isDirect()?nullptr:depnode);
225  myPrimSeedAttrib = "primid"_UTsh;
226  if (true && ( (true&&!(((int64(getGenerateBy())==2))||((getOverridePrimSeed()==0)))) ) )
227  graph->evalOpParm(myPrimSeedAttrib, nodeidx, "primseedattrib", time, graph->isDirect()?nullptr:depnode);
228  myRandomizeOrder = true;
229  if (true)
230  graph->evalOpParm(myRandomizeOrder, nodeidx, "randomizeorder", time, graph->isDirect()?nullptr:depnode);
231  myRelaxPoints = true;
232  if (true)
233  graph->evalOpParm(myRelaxPoints, nodeidx, "relaxpoints", time, graph->isDirect()?nullptr:depnode);
234  myRelaxIterations = 10;
235  if (true && ( (true&&!(((getRelaxPoints()==0)))) ) )
236  graph->evalOpParm(myRelaxIterations, nodeidx, "relaxiterations", time, graph->isDirect()?nullptr:depnode);
237  myUseGeometricNormals = false;
238  if (true && ( (true&&!(((getRelaxPoints()==0)))) ) )
239  graph->evalOpParm(myUseGeometricNormals, nodeidx, "usegeometricnormals", time, graph->isDirect()?nullptr:depnode);
240  myUsePrimNumAttrib = false;
241  if (true)
242  graph->evalOpParm(myUsePrimNumAttrib, nodeidx, "useprimnumattrib", time, graph->isDirect()?nullptr:depnode);
243  myPrimNumAttrib = "sourceprim"_UTsh;
244  if (true && ( (true&&!(((getUsePrimNumAttrib()==0)))) ) )
245  graph->evalOpParm(myPrimNumAttrib, nodeidx, "primnumattrib", time, graph->isDirect()?nullptr:depnode);
246  myUsePrimUVWAttrib = false;
247  if (true)
248  graph->evalOpParm(myUsePrimUVWAttrib, nodeidx, "useprimuvwattrib", time, graph->isDirect()?nullptr:depnode);
249  myPrimUVWAttrib = "sourceprimuv"_UTsh;
250  if (true && ( (true&&!(((getUsePrimUVWAttrib()==0)))) ) )
251  graph->evalOpParm(myPrimUVWAttrib, nodeidx, "primuvwattrib", time, graph->isDirect()?nullptr:depnode);
252  myUseOutputDensityAttrib = false;
253  if (true)
254  graph->evalOpParm(myUseOutputDensityAttrib, nodeidx, "useoutputdensityattrib", time, graph->isDirect()?nullptr:depnode);
255  myOutputDensityAttrib = "density"_UTsh;
256  if (true && ( (true&&!(((getUseOutputDensityAttrib()==0)))) ) )
257  graph->evalOpParm(myOutputDensityAttrib, nodeidx, "outputdensityattrib", time, graph->isDirect()?nullptr:depnode);
258  myUseOutputRadiusAttrib = false;
259  if (true)
260  graph->evalOpParm(myUseOutputRadiusAttrib, nodeidx, "useoutputradiusattrib", time, graph->isDirect()?nullptr:depnode);
261  myOutputRadiusAttrib = "pscale"_UTsh;
262  if (true && ( (true&&!(((getUseOutputRadiusAttrib()==0)))) ) )
263  graph->evalOpParm(myOutputRadiusAttrib, nodeidx, "outputradiusattrib", time, graph->isDirect()?nullptr:depnode);
264  myUseOutputIdAttrib = false;
265  if (true)
266  graph->evalOpParm(myUseOutputIdAttrib, nodeidx, "useoutputidattrib", time, graph->isDirect()?nullptr:depnode);
267  myOutputIdAttrib = "id"_UTsh;
268  if (true && ( (true&&!(((getUseOutputIdAttrib()==0)))) ) )
269  graph->evalOpParm(myOutputIdAttrib, nodeidx, "outputidattrib", time, graph->isDirect()?nullptr:depnode);
270  myRadiusInTextureSpace = false;
271  if (true && ( (true&&!(((int64(getGenerateBy())!=2))||((getUseOutputRadiusAttrib()==0)&&(getUseOutputDensityAttrib()==0)))) ) )
272  graph->evalOpParm(myRadiusInTextureSpace, nodeidx, "radiusintexturespace", time, graph->isDirect()?nullptr:depnode);
273  myPointAttribs = "*"_UTsh;
274  if (true)
275  graph->evalOpParm(myPointAttribs, nodeidx, "pointattribs", time, graph->isDirect()?nullptr:depnode);
276  myVertAttribs = "N uv*"_UTsh;
277  if (true)
278  graph->evalOpParm(myVertAttribs, nodeidx, "vertattribs", time, graph->isDirect()?nullptr:depnode);
279  myPrimAttribs = ""_UTsh;
280  if (true)
281  graph->evalOpParm(myPrimAttribs, nodeidx, "primattribs", time, graph->isDirect()?nullptr:depnode);
282  myDetailAttribs = ""_UTsh;
283  if (true)
284  graph->evalOpParm(myDetailAttribs, nodeidx, "detailattribs", time, graph->isDirect()?nullptr:depnode);
285  myDetailAttribsAsDetail = ""_UTsh;
286  if (true)
287  graph->evalOpParm(myDetailAttribsAsDetail, nodeidx, "detailattribsasdetail", time, graph->isDirect()?nullptr:depnode);
288  myScaleRadiiBy = 1;
289  if (true && ( (true&&!(((getRelaxPoints()==0)&&(getUseOutputRadiusAttrib()==0)))) ) )
290  graph->evalOpParm(myScaleRadiiBy, nodeidx, "scaleradiiby", time, graph->isDirect()?nullptr:depnode);
291  myUseMaxRadius = true;
292  if (true && ( (true&&!(((getRelaxPoints()==0)&&(getUseOutputRadiusAttrib()==0)))) ) )
293  graph->evalOpParm(myUseMaxRadius, nodeidx, "usemaxradius", time, graph->isDirect()?nullptr:depnode);
294  myMaxRadius = 10;
295  if (true && ( (true&&!(((getRelaxPoints()==0)&&(getUseOutputRadiusAttrib()==0))||((getUseMaxRadius()==0)))) ) )
296  graph->evalOpParm(myMaxRadius, nodeidx, "maxradius", time, graph->isDirect()?nullptr:depnode);
297 
298  }
299 
300 
301  void loadFromOpSubclass(const LoadParms &loadparms) override
302  {
303  buildFromOp(loadparms.graph(), loadparms.nodeIdx(), loadparms.context().getTime(), loadparms.depnode());
304  }
305 
306 
307  void copyFrom(const OP_NodeParms *src) override
308  {
309  *this = *((const SOP_Scatter_2_0Parms *)src);
310  }
311 
312  template <typename T>
313  void
314  doGetParmValue(TempIndex idx, TempIndex instance, T &value) const
315  {
316  if (idx.size() < 1)
317  return;
318  UT_ASSERT(idx.size() == instance.size()+1);
319  if (idx.size() != instance.size()+1)
320  return;
321  switch (idx[0])
322  {
323  case 0:
324  coerceValue(value, myGroup);
325  break;
326  case 1:
327  coerceValue(value, myGenerateBy);
328  break;
329  case 2:
330  coerceValue(value, myIndepVoxel);
331  break;
332  case 3:
333  coerceValue(value, myForceTotal);
334  break;
335  case 4:
336  coerceValue(value, myNpts);
337  break;
338  case 5:
339  coerceValue(value, myDensityScale);
340  break;
341  case 6:
342  coerceValue(value, myUseDensityAttrib);
343  break;
344  case 7:
345  coerceValue(value, myDensityAttrib);
346  break;
347  case 8:
348  coerceValue(value, myUseAreaAttrib);
349  break;
350  case 9:
351  coerceValue(value, myAreaAttrib);
352  break;
353  case 10:
354  coerceValue(value, myUseAreaForVolumes);
355  break;
356  case 11:
357  coerceValue(value, myUseDensityTexture);
358  break;
359  case 12:
360  coerceValue(value, myDensityTexture);
361  break;
362  case 13:
363  coerceValue(value, myUVAttrib);
364  break;
365  case 14:
366  coerceValue(value, myCountPerPrimAttrib);
367  break;
368  case 15:
369  coerceValue(value, myUseEmergencyLimit);
370  break;
371  case 16:
372  coerceValue(value, myEmergencyLimit);
373  break;
374  case 17:
375  coerceValue(value, mySeed);
376  break;
377  case 18:
378  coerceValue(value, myOverridePrimSeed);
379  break;
380  case 19:
381  coerceValue(value, myPrimSeedAttrib);
382  break;
383  case 20:
384  coerceValue(value, myRandomizeOrder);
385  break;
386  case 21:
387  coerceValue(value, myRelaxPoints);
388  break;
389  case 22:
390  coerceValue(value, myRelaxIterations);
391  break;
392  case 23:
393  coerceValue(value, myUseGeometricNormals);
394  break;
395  case 24:
396  coerceValue(value, myUsePrimNumAttrib);
397  break;
398  case 25:
399  coerceValue(value, myPrimNumAttrib);
400  break;
401  case 26:
402  coerceValue(value, myUsePrimUVWAttrib);
403  break;
404  case 27:
405  coerceValue(value, myPrimUVWAttrib);
406  break;
407  case 28:
408  coerceValue(value, myUseOutputDensityAttrib);
409  break;
410  case 29:
411  coerceValue(value, myOutputDensityAttrib);
412  break;
413  case 30:
414  coerceValue(value, myUseOutputRadiusAttrib);
415  break;
416  case 31:
417  coerceValue(value, myOutputRadiusAttrib);
418  break;
419  case 32:
420  coerceValue(value, myUseOutputIdAttrib);
421  break;
422  case 33:
423  coerceValue(value, myOutputIdAttrib);
424  break;
425  case 34:
426  coerceValue(value, myRadiusInTextureSpace);
427  break;
428  case 35:
429  coerceValue(value, myPointAttribs);
430  break;
431  case 36:
432  coerceValue(value, myVertAttribs);
433  break;
434  case 37:
435  coerceValue(value, myPrimAttribs);
436  break;
437  case 38:
438  coerceValue(value, myDetailAttribs);
439  break;
440  case 39:
441  coerceValue(value, myDetailAttribsAsDetail);
442  break;
443  case 40:
444  coerceValue(value, myScaleRadiiBy);
445  break;
446  case 41:
447  coerceValue(value, myUseMaxRadius);
448  break;
449  case 42:
450  coerceValue(value, myMaxRadius);
451  break;
452 
453  }
454  }
455 
456  bool isParmColorRamp(exint idx) const override
457  {
458  switch (idx)
459  {
460 
461  }
462  return false;
463  }
464 
465  void getNestParmValue(TempIndex idx, TempIndex instance, exint &value) const override
466  { doGetParmValue(idx, instance, value); }
467  void getNestParmValue(TempIndex idx, TempIndex instance, fpreal &value) const override
468  { doGetParmValue(idx, instance, value); }
469  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector2D &value) const override
470  { doGetParmValue(idx, instance, value); }
471  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector3D &value) const override
472  { doGetParmValue(idx, instance, value); }
473  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector4D &value) const override
474  { doGetParmValue(idx, instance, value); }
475  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix2D &value) const override
476  { doGetParmValue(idx, instance, value); }
477  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
478  { doGetParmValue(idx, instance, value); }
479  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix4D &value) const override
480  { doGetParmValue(idx, instance, value); }
481  void getNestParmValue(TempIndex idx, TempIndex instance, UT_StringHolder &value) const override
482  { doGetParmValue(idx, instance, value); }
483  void getNestParmValue(TempIndex idx, TempIndex instance, UT_SharedPtr<UT_Ramp> &value) const override
484  { doGetParmValue(idx, instance, value); }
485  void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
486  { doGetParmValue(idx, instance, value); }
487 
488  template <typename T>
489  void
490  doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
491  {
492  if (idx.size() < 1)
493  return;
494  UT_ASSERT(idx.size() == instance.size()+1);
495  if (idx.size() != instance.size()+1)
496  return;
497  switch (idx[0])
498  {
499  case 0:
500  coerceValue(myGroup, ( ( value ) ));
501  break;
502  case 1:
503  coerceValue(myGenerateBy, clampMinValue(0, clampMaxValue(2, value ) ));
504  break;
505  case 2:
506  coerceValue(myIndepVoxel, ( ( value ) ));
507  break;
508  case 3:
509  coerceValue(myForceTotal, ( ( value ) ));
510  break;
511  case 4:
512  coerceValue(myNpts, ( ( value ) ));
513  break;
514  case 5:
515  coerceValue(myDensityScale, ( ( value ) ));
516  break;
517  case 6:
518  coerceValue(myUseDensityAttrib, ( ( value ) ));
519  break;
520  case 7:
521  coerceValue(myDensityAttrib, ( ( value ) ));
522  break;
523  case 8:
524  coerceValue(myUseAreaAttrib, ( ( value ) ));
525  break;
526  case 9:
527  coerceValue(myAreaAttrib, ( ( value ) ));
528  break;
529  case 10:
530  coerceValue(myUseAreaForVolumes, ( ( value ) ));
531  break;
532  case 11:
533  coerceValue(myUseDensityTexture, ( ( value ) ));
534  break;
535  case 12:
536  coerceValue(myDensityTexture, ( ( value ) ));
537  break;
538  case 13:
539  coerceValue(myUVAttrib, ( ( value ) ));
540  break;
541  case 14:
542  coerceValue(myCountPerPrimAttrib, ( ( value ) ));
543  break;
544  case 15:
545  coerceValue(myUseEmergencyLimit, ( ( value ) ));
546  break;
547  case 16:
548  coerceValue(myEmergencyLimit, ( ( value ) ));
549  break;
550  case 17:
551  coerceValue(mySeed, ( ( value ) ));
552  break;
553  case 18:
554  coerceValue(myOverridePrimSeed, ( ( value ) ));
555  break;
556  case 19:
557  coerceValue(myPrimSeedAttrib, ( ( value ) ));
558  break;
559  case 20:
560  coerceValue(myRandomizeOrder, ( ( value ) ));
561  break;
562  case 21:
563  coerceValue(myRelaxPoints, ( ( value ) ));
564  break;
565  case 22:
566  coerceValue(myRelaxIterations, clampMinValue(0, ( value ) ));
567  break;
568  case 23:
569  coerceValue(myUseGeometricNormals, ( ( value ) ));
570  break;
571  case 24:
572  coerceValue(myUsePrimNumAttrib, ( ( value ) ));
573  break;
574  case 25:
575  coerceValue(myPrimNumAttrib, ( ( value ) ));
576  break;
577  case 26:
578  coerceValue(myUsePrimUVWAttrib, ( ( value ) ));
579  break;
580  case 27:
581  coerceValue(myPrimUVWAttrib, ( ( value ) ));
582  break;
583  case 28:
584  coerceValue(myUseOutputDensityAttrib, ( ( value ) ));
585  break;
586  case 29:
587  coerceValue(myOutputDensityAttrib, ( ( value ) ));
588  break;
589  case 30:
590  coerceValue(myUseOutputRadiusAttrib, ( ( value ) ));
591  break;
592  case 31:
593  coerceValue(myOutputRadiusAttrib, ( ( value ) ));
594  break;
595  case 32:
596  coerceValue(myUseOutputIdAttrib, ( ( value ) ));
597  break;
598  case 33:
599  coerceValue(myOutputIdAttrib, ( ( value ) ));
600  break;
601  case 34:
602  coerceValue(myRadiusInTextureSpace, ( ( value ) ));
603  break;
604  case 35:
605  coerceValue(myPointAttribs, ( ( value ) ));
606  break;
607  case 36:
608  coerceValue(myVertAttribs, ( ( value ) ));
609  break;
610  case 37:
611  coerceValue(myPrimAttribs, ( ( value ) ));
612  break;
613  case 38:
614  coerceValue(myDetailAttribs, ( ( value ) ));
615  break;
616  case 39:
617  coerceValue(myDetailAttribsAsDetail, ( ( value ) ));
618  break;
619  case 40:
620  coerceValue(myScaleRadiiBy, clampMinValue(0, ( value ) ));
621  break;
622  case 41:
623  coerceValue(myUseMaxRadius, ( ( value ) ));
624  break;
625  case 42:
626  coerceValue(myMaxRadius, clampMinValue(0, ( value ) ));
627  break;
628 
629  }
630  }
631 
632  void setNestParmValue(TempIndex idx, TempIndex instance, const exint &value) override
633  { doSetParmValue(idx, instance, value); }
634  void setNestParmValue(TempIndex idx, TempIndex instance, const fpreal &value) override
635  { doSetParmValue(idx, instance, value); }
636  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector2D &value) override
637  { doSetParmValue(idx, instance, value); }
638  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector3D &value) override
639  { doSetParmValue(idx, instance, value); }
640  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector4D &value) override
641  { doSetParmValue(idx, instance, value); }
642  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix2D &value) override
643  { doSetParmValue(idx, instance, value); }
644  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix3D &value) override
645  { doSetParmValue(idx, instance, value); }
646  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix4D &value) override
647  { doSetParmValue(idx, instance, value); }
648  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_StringHolder &value) override
649  { doSetParmValue(idx, instance, value); }
650  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_SharedPtr<UT_Ramp> &value) override
651  { doSetParmValue(idx, instance, value); }
652  void setNestParmValue(TempIndex idx, TempIndex instance, const PRM_DataItemHandle &value) override
653  { doSetParmValue(idx, instance, value); }
654 
655  exint getNestNumParms(TempIndex idx) const override
656  {
657  if (idx.size() == 0)
658  return 43;
659  switch (idx[0])
660  {
661 
662  }
663  // Invalid
664  return 0;
665  }
666 
667  const char *getNestParmName(TempIndex fieldnum) const override
668  {
669  if (fieldnum.size() < 1)
670  return 0;
671  switch (fieldnum[0])
672  {
673  case 0:
674  return "group";
675  case 1:
676  return "generateby";
677  case 2:
678  return "indepvoxel";
679  case 3:
680  return "forcetotal";
681  case 4:
682  return "npts";
683  case 5:
684  return "densityscale";
685  case 6:
686  return "usedensityattrib";
687  case 7:
688  return "densityattrib";
689  case 8:
690  return "useareaattrib";
691  case 9:
692  return "areaattrib";
693  case 10:
694  return "useareaforvolumes";
695  case 11:
696  return "usedensitytexture";
697  case 12:
698  return "densitytexture";
699  case 13:
700  return "uvattrib";
701  case 14:
702  return "primcountattrib";
703  case 15:
704  return "useemergencylimit";
705  case 16:
706  return "emergencylimit";
707  case 17:
708  return "seed";
709  case 18:
710  return "overrideprimseed";
711  case 19:
712  return "primseedattrib";
713  case 20:
714  return "randomizeorder";
715  case 21:
716  return "relaxpoints";
717  case 22:
718  return "relaxiterations";
719  case 23:
720  return "usegeometricnormals";
721  case 24:
722  return "useprimnumattrib";
723  case 25:
724  return "primnumattrib";
725  case 26:
726  return "useprimuvwattrib";
727  case 27:
728  return "primuvwattrib";
729  case 28:
730  return "useoutputdensityattrib";
731  case 29:
732  return "outputdensityattrib";
733  case 30:
734  return "useoutputradiusattrib";
735  case 31:
736  return "outputradiusattrib";
737  case 32:
738  return "useoutputidattrib";
739  case 33:
740  return "outputidattrib";
741  case 34:
742  return "radiusintexturespace";
743  case 35:
744  return "pointattribs";
745  case 36:
746  return "vertattribs";
747  case 37:
748  return "primattribs";
749  case 38:
750  return "detailattribs";
751  case 39:
752  return "detailattribsasdetail";
753  case 40:
754  return "scaleradiiby";
755  case 41:
756  return "usemaxradius";
757  case 42:
758  return "maxradius";
759 
760  }
761  return 0;
762  }
763 
764  ParmType getNestParmType(TempIndex fieldnum) const override
765  {
766  if (fieldnum.size() < 1)
767  return PARM_UNSUPPORTED;
768  switch (fieldnum[0])
769  {
770  case 0:
771  return PARM_STRING;
772  case 1:
773  return PARM_INTEGER;
774  case 2:
775  return PARM_INTEGER;
776  case 3:
777  return PARM_INTEGER;
778  case 4:
779  return PARM_INTEGER;
780  case 5:
781  return PARM_FLOAT;
782  case 6:
783  return PARM_INTEGER;
784  case 7:
785  return PARM_STRING;
786  case 8:
787  return PARM_INTEGER;
788  case 9:
789  return PARM_STRING;
790  case 10:
791  return PARM_INTEGER;
792  case 11:
793  return PARM_INTEGER;
794  case 12:
795  return PARM_STRING;
796  case 13:
797  return PARM_STRING;
798  case 14:
799  return PARM_STRING;
800  case 15:
801  return PARM_INTEGER;
802  case 16:
803  return PARM_INTEGER;
804  case 17:
805  return PARM_FLOAT;
806  case 18:
807  return PARM_INTEGER;
808  case 19:
809  return PARM_STRING;
810  case 20:
811  return PARM_INTEGER;
812  case 21:
813  return PARM_INTEGER;
814  case 22:
815  return PARM_INTEGER;
816  case 23:
817  return PARM_INTEGER;
818  case 24:
819  return PARM_INTEGER;
820  case 25:
821  return PARM_STRING;
822  case 26:
823  return PARM_INTEGER;
824  case 27:
825  return PARM_STRING;
826  case 28:
827  return PARM_INTEGER;
828  case 29:
829  return PARM_STRING;
830  case 30:
831  return PARM_INTEGER;
832  case 31:
833  return PARM_STRING;
834  case 32:
835  return PARM_INTEGER;
836  case 33:
837  return PARM_STRING;
838  case 34:
839  return PARM_INTEGER;
840  case 35:
841  return PARM_STRING;
842  case 36:
843  return PARM_STRING;
844  case 37:
845  return PARM_STRING;
846  case 38:
847  return PARM_STRING;
848  case 39:
849  return PARM_STRING;
850  case 40:
851  return PARM_FLOAT;
852  case 41:
853  return PARM_INTEGER;
854  case 42:
855  return PARM_FLOAT;
856 
857  }
858  return PARM_UNSUPPORTED;
859  }
860 
861  // Boiler plate to load individual types.
862  static void loadData(UT_IStream &is, int64 &v)
863  { is.bread(&v, 1); }
864  static void loadData(UT_IStream &is, bool &v)
865  { int64 iv; is.bread(&iv, 1); v = iv; }
866  static void loadData(UT_IStream &is, fpreal64 &v)
867  { is.bread<fpreal64>(&v, 1); }
868  static void loadData(UT_IStream &is, UT_Vector2D &v)
869  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1); }
870  static void loadData(UT_IStream &is, UT_Vector3D &v)
871  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
872  is.bread<fpreal64>(&v.z(), 1); }
873  static void loadData(UT_IStream &is, UT_Vector4D &v)
874  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
875  is.bread<fpreal64>(&v.z(), 1); is.bread<fpreal64>(&v.w(), 1); }
876  static void loadData(UT_IStream &is, UT_Matrix2D &v)
877  { for (int r = 0; r < 2; r++) for (int c = 0; c < 2; c++) is.bread<fpreal64>(&v(r, c), 1); }
878  static void loadData(UT_IStream &is, UT_Matrix3D &v)
879  { for (int r = 0; r < 3; r++) for (int c = 0; c < 3; c++) is.bread<fpreal64>(&v(r, c), 1); }
880  static void loadData(UT_IStream &is, UT_Matrix4D &v)
881  { for (int r = 0; r < 4; r++) for (int c = 0; c < 4; c++) is.bread<fpreal64>(&v(r, c), 1); }
882  static void loadData(UT_IStream &is, UT_Vector2I &v)
883  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1); }
884  static void loadData(UT_IStream &is, UT_Vector3I &v)
885  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
886  is.bread<int64>(&v.z(), 1); }
887  static void loadData(UT_IStream &is, UT_Vector4I &v)
888  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
889  is.bread<int64>(&v.z(), 1); is.bread<int64>(&v.w(), 1); }
891  { is.bread(v); }
893  { UT_StringHolder rampdata;
894  loadData(is, rampdata);
895  if (rampdata.isstring())
896  {
897  v.reset(new UT_Ramp());
898  UT_IStream istr((const char *) rampdata, rampdata.length(), UT_ISTREAM_ASCII);
899  v->load(istr);
900  }
901  else v.reset();
902  }
905  loadData(is, data);
906  if (data.isstring())
907  {
908  // Find the data type.
909  const char *colon = UT_StringWrap(data).findChar(':');
910  if (colon)
911  {
912  int typelen = colon - data.buffer();
914  type.strncpy(data.buffer(), typelen);
915  UT_IStream istr(((const char *) data) + typelen + 1, data.length() - (typelen + 1), UT_ISTREAM_BINARY);
916 
917  v = PRM_DataFactory::parseBinary(type.buffer(), istr);
918  }
919  }
920  else v.reset();
921  }
922 
923  static void saveData(std::ostream &os, int64 v)
924  { UTwrite(os, &v); }
925  static void saveData(std::ostream &os, bool v)
926  { int64 iv = v; UTwrite(os, &iv); }
927  static void saveData(std::ostream &os, fpreal64 v)
928  { UTwrite<fpreal64>(os, &v); }
929  static void saveData(std::ostream &os, UT_Vector2D v)
930  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y()); }
931  static void saveData(std::ostream &os, UT_Vector3D v)
932  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
933  UTwrite<fpreal64>(os, &v.z()); }
934  static void saveData(std::ostream &os, UT_Vector4D v)
935  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
936  UTwrite<fpreal64>(os, &v.z()); UTwrite<fpreal64>(os, &v.w()); }
937  static void saveData(std::ostream &os, UT_Matrix2D v)
939  static void saveData(std::ostream &os, UT_Matrix3D v)
941  static void saveData(std::ostream &os, UT_Matrix4D v)
943  static void saveData(std::ostream &os, UT_StringHolder s)
944  { UT_StringWrap(s).saveBinary(os); }
945  static void saveData(std::ostream &os, UT_SharedPtr<UT_Ramp> s)
947  UT_OStringStream ostr;
948  if (s) s->save(ostr);
949  result = ostr.str();
950  saveData(os, result);
951  }
952  static void saveData(std::ostream &os, PRM_DataItemHandle s)
954  UT_OStringStream ostr;
955  if (s)
956  {
957  ostr << s->getDataTypeToken();
958  ostr << ":";
959  s->saveBinary(ostr);
960  }
961  result = ostr.str();
962  saveData(os, result);
963  }
964 
965 
966  void save(std::ostream &os) const
967  {
968  int32 v = version();
969  UTwrite(os, &v);
970  saveData(os, myGroup);
971  saveData(os, myGenerateBy);
972  saveData(os, myIndepVoxel);
973  saveData(os, myForceTotal);
974  saveData(os, myNpts);
975  saveData(os, myDensityScale);
976  saveData(os, myUseDensityAttrib);
977  saveData(os, myDensityAttrib);
978  saveData(os, myUseAreaAttrib);
979  saveData(os, myAreaAttrib);
980  saveData(os, myUseAreaForVolumes);
981  saveData(os, myUseDensityTexture);
982  saveData(os, myDensityTexture);
983  saveData(os, myUVAttrib);
984  saveData(os, myCountPerPrimAttrib);
985  saveData(os, myUseEmergencyLimit);
986  saveData(os, myEmergencyLimit);
987  saveData(os, mySeed);
988  saveData(os, myOverridePrimSeed);
989  saveData(os, myPrimSeedAttrib);
990  saveData(os, myRandomizeOrder);
991  saveData(os, myRelaxPoints);
992  saveData(os, myRelaxIterations);
993  saveData(os, myUseGeometricNormals);
994  saveData(os, myUsePrimNumAttrib);
995  saveData(os, myPrimNumAttrib);
996  saveData(os, myUsePrimUVWAttrib);
997  saveData(os, myPrimUVWAttrib);
998  saveData(os, myUseOutputDensityAttrib);
999  saveData(os, myOutputDensityAttrib);
1000  saveData(os, myUseOutputRadiusAttrib);
1001  saveData(os, myOutputRadiusAttrib);
1002  saveData(os, myUseOutputIdAttrib);
1003  saveData(os, myOutputIdAttrib);
1004  saveData(os, myRadiusInTextureSpace);
1005  saveData(os, myPointAttribs);
1006  saveData(os, myVertAttribs);
1007  saveData(os, myPrimAttribs);
1008  saveData(os, myDetailAttribs);
1009  saveData(os, myDetailAttribsAsDetail);
1010  saveData(os, myScaleRadiiBy);
1011  saveData(os, myUseMaxRadius);
1012  saveData(os, myMaxRadius);
1013 
1014  }
1015 
1016  bool load(UT_IStream &is)
1017  {
1018  int32 v;
1019  is.bread(&v, 1);
1020  if (version() != v)
1021  {
1022  // Fail incompatible versions
1023  return false;
1024  }
1025  loadData(is, myGroup);
1026  loadData(is, myGenerateBy);
1027  loadData(is, myIndepVoxel);
1028  loadData(is, myForceTotal);
1029  loadData(is, myNpts);
1030  loadData(is, myDensityScale);
1031  loadData(is, myUseDensityAttrib);
1032  loadData(is, myDensityAttrib);
1033  loadData(is, myUseAreaAttrib);
1034  loadData(is, myAreaAttrib);
1035  loadData(is, myUseAreaForVolumes);
1036  loadData(is, myUseDensityTexture);
1037  loadData(is, myDensityTexture);
1038  loadData(is, myUVAttrib);
1039  loadData(is, myCountPerPrimAttrib);
1040  loadData(is, myUseEmergencyLimit);
1041  loadData(is, myEmergencyLimit);
1042  loadData(is, mySeed);
1043  loadData(is, myOverridePrimSeed);
1044  loadData(is, myPrimSeedAttrib);
1045  loadData(is, myRandomizeOrder);
1046  loadData(is, myRelaxPoints);
1047  loadData(is, myRelaxIterations);
1048  loadData(is, myUseGeometricNormals);
1049  loadData(is, myUsePrimNumAttrib);
1050  loadData(is, myPrimNumAttrib);
1051  loadData(is, myUsePrimUVWAttrib);
1052  loadData(is, myPrimUVWAttrib);
1053  loadData(is, myUseOutputDensityAttrib);
1054  loadData(is, myOutputDensityAttrib);
1055  loadData(is, myUseOutputRadiusAttrib);
1056  loadData(is, myOutputRadiusAttrib);
1057  loadData(is, myUseOutputIdAttrib);
1058  loadData(is, myOutputIdAttrib);
1059  loadData(is, myRadiusInTextureSpace);
1060  loadData(is, myPointAttribs);
1061  loadData(is, myVertAttribs);
1062  loadData(is, myPrimAttribs);
1063  loadData(is, myDetailAttribs);
1064  loadData(is, myDetailAttribsAsDetail);
1065  loadData(is, myScaleRadiiBy);
1066  loadData(is, myUseMaxRadius);
1067  loadData(is, myMaxRadius);
1068 
1069  return true;
1070  }
1071 
1072  const UT_StringHolder & getGroup() const { return myGroup; }
1073  void setGroup(const UT_StringHolder & val) { myGroup = val; }
1075  {
1076  SOP_Node *thissop = cookparms.getNode();
1077  if (!thissop) return getGroup();
1079  OP_Utils::evalOpParm(result, thissop, "group", cookparms.getCookTime(), 0);
1080  return result;
1081  }
1082  GenerateBy getGenerateBy() const { return GenerateBy(myGenerateBy); }
1083  void setGenerateBy(GenerateBy val) { myGenerateBy = int64(val); }
1085  {
1086  SOP_Node *thissop = cookparms.getNode();
1087  if (!thissop) return getGenerateBy();
1088  int64 result;
1089  OP_Utils::evalOpParm(result, thissop, "generateby", cookparms.getCookTime(), 0);
1090  return GenerateBy(result);
1091  }
1092  bool getIndepVoxel() const { return myIndepVoxel; }
1093  void setIndepVoxel(bool val) { myIndepVoxel = val; }
1094  bool opIndepVoxel(const SOP_NodeVerb::CookParms &cookparms) const
1095  {
1096  SOP_Node *thissop = cookparms.getNode();
1097  if (!thissop) return getIndepVoxel();
1098  bool result;
1099  OP_Utils::evalOpParm(result, thissop, "indepvoxel", cookparms.getCookTime(), 0);
1100  return result;
1101  }
1102  bool getForceTotal() const { return myForceTotal; }
1103  void setForceTotal(bool val) { myForceTotal = val; }
1104  bool opForceTotal(const SOP_NodeVerb::CookParms &cookparms) const
1105  {
1106  SOP_Node *thissop = cookparms.getNode();
1107  if (!thissop) return getForceTotal();
1108  bool result;
1109  OP_Utils::evalOpParm(result, thissop, "forcetotal", cookparms.getCookTime(), 0);
1110  return result;
1111  }
1112  int64 getNpts() const { return myNpts; }
1113  void setNpts(int64 val) { myNpts = val; }
1114  int64 opNpts(const SOP_NodeVerb::CookParms &cookparms) const
1115  {
1116  SOP_Node *thissop = cookparms.getNode();
1117  if (!thissop) return getNpts();
1118  int64 result;
1119  OP_Utils::evalOpParm(result, thissop, "npts", cookparms.getCookTime(), 0);
1120  return result;
1121  }
1122  fpreal64 getDensityScale() const { return myDensityScale; }
1123  void setDensityScale(fpreal64 val) { myDensityScale = val; }
1125  {
1126  SOP_Node *thissop = cookparms.getNode();
1127  if (!thissop) return getDensityScale();
1128  fpreal64 result;
1129  OP_Utils::evalOpParm(result, thissop, "densityscale", cookparms.getCookTime(), 0);
1130  return result;
1131  }
1132  bool getUseDensityAttrib() const { return myUseDensityAttrib; }
1133  void setUseDensityAttrib(bool val) { myUseDensityAttrib = val; }
1134  bool opUseDensityAttrib(const SOP_NodeVerb::CookParms &cookparms) const
1135  {
1136  SOP_Node *thissop = cookparms.getNode();
1137  if (!thissop) return getUseDensityAttrib();
1138  bool result;
1139  OP_Utils::evalOpParm(result, thissop, "usedensityattrib", cookparms.getCookTime(), 0);
1140  return result;
1141  }
1142  const UT_StringHolder & getDensityAttrib() const { return myDensityAttrib; }
1143  void setDensityAttrib(const UT_StringHolder & val) { myDensityAttrib = val; }
1145  {
1146  SOP_Node *thissop = cookparms.getNode();
1147  if (!thissop) return getDensityAttrib();
1149  OP_Utils::evalOpParm(result, thissop, "densityattrib", cookparms.getCookTime(), 0);
1150  return result;
1151  }
1152  bool getUseAreaAttrib() const { return myUseAreaAttrib; }
1153  void setUseAreaAttrib(bool val) { myUseAreaAttrib = val; }
1154  bool opUseAreaAttrib(const SOP_NodeVerb::CookParms &cookparms) const
1155  {
1156  SOP_Node *thissop = cookparms.getNode();
1157  if (!thissop) return getUseAreaAttrib();
1158  bool result;
1159  OP_Utils::evalOpParm(result, thissop, "useareaattrib", cookparms.getCookTime(), 0);
1160  return result;
1161  }
1162  const UT_StringHolder & getAreaAttrib() const { return myAreaAttrib; }
1163  void setAreaAttrib(const UT_StringHolder & val) { myAreaAttrib = val; }
1165  {
1166  SOP_Node *thissop = cookparms.getNode();
1167  if (!thissop) return getAreaAttrib();
1169  OP_Utils::evalOpParm(result, thissop, "areaattrib", cookparms.getCookTime(), 0);
1170  return result;
1171  }
1172  bool getUseAreaForVolumes() const { return myUseAreaForVolumes; }
1173  void setUseAreaForVolumes(bool val) { myUseAreaForVolumes = val; }
1174  bool opUseAreaForVolumes(const SOP_NodeVerb::CookParms &cookparms) const
1175  {
1176  SOP_Node *thissop = cookparms.getNode();
1177  if (!thissop) return getUseAreaForVolumes();
1178  bool result;
1179  OP_Utils::evalOpParm(result, thissop, "useareaforvolumes", cookparms.getCookTime(), 0);
1180  return result;
1181  }
1182  bool getUseDensityTexture() const { return myUseDensityTexture; }
1183  void setUseDensityTexture(bool val) { myUseDensityTexture = val; }
1184  bool opUseDensityTexture(const SOP_NodeVerb::CookParms &cookparms) const
1185  {
1186  SOP_Node *thissop = cookparms.getNode();
1187  if (!thissop) return getUseDensityTexture();
1188  bool result;
1189  OP_Utils::evalOpParm(result, thissop, "usedensitytexture", cookparms.getCookTime(), 0);
1190  return result;
1191  }
1192  const UT_StringHolder & getDensityTexture() const { return myDensityTexture; }
1193  void setDensityTexture(const UT_StringHolder & val) { myDensityTexture = val; }
1195  {
1196  SOP_Node *thissop = cookparms.getNode();
1197  if (!thissop) return getDensityTexture();
1199  OP_Utils::evalOpParm(result, thissop, "densitytexture", cookparms.getCookTime(), 0);
1200  return result;
1201  }
1202  const UT_StringHolder & getUVAttrib() const { return myUVAttrib; }
1203  void setUVAttrib(const UT_StringHolder & val) { myUVAttrib = val; }
1205  {
1206  SOP_Node *thissop = cookparms.getNode();
1207  if (!thissop) return getUVAttrib();
1209  OP_Utils::evalOpParm(result, thissop, "uvattrib", cookparms.getCookTime(), 0);
1210  return result;
1211  }
1212  const UT_StringHolder & getCountPerPrimAttrib() const { return myCountPerPrimAttrib; }
1213  void setCountPerPrimAttrib(const UT_StringHolder & val) { myCountPerPrimAttrib = val; }
1215  {
1216  SOP_Node *thissop = cookparms.getNode();
1217  if (!thissop) return getCountPerPrimAttrib();
1219  OP_Utils::evalOpParm(result, thissop, "primcountattrib", cookparms.getCookTime(), 0);
1220  return result;
1221  }
1222  bool getUseEmergencyLimit() const { return myUseEmergencyLimit; }
1223  void setUseEmergencyLimit(bool val) { myUseEmergencyLimit = val; }
1224  bool opUseEmergencyLimit(const SOP_NodeVerb::CookParms &cookparms) const
1225  {
1226  SOP_Node *thissop = cookparms.getNode();
1227  if (!thissop) return getUseEmergencyLimit();
1228  bool result;
1229  OP_Utils::evalOpParm(result, thissop, "useemergencylimit", cookparms.getCookTime(), 0);
1230  return result;
1231  }
1232  int64 getEmergencyLimit() const { return myEmergencyLimit; }
1233  void setEmergencyLimit(int64 val) { myEmergencyLimit = val; }
1235  {
1236  SOP_Node *thissop = cookparms.getNode();
1237  if (!thissop) return getEmergencyLimit();
1238  int64 result;
1239  OP_Utils::evalOpParm(result, thissop, "emergencylimit", cookparms.getCookTime(), 0);
1240  return result;
1241  }
1242  fpreal64 getSeed() const { return mySeed; }
1243  void setSeed(fpreal64 val) { mySeed = val; }
1244  fpreal64 opSeed(const SOP_NodeVerb::CookParms &cookparms) const
1245  {
1246  SOP_Node *thissop = cookparms.getNode();
1247  if (!thissop) return getSeed();
1248  fpreal64 result;
1249  OP_Utils::evalOpParm(result, thissop, "seed", cookparms.getCookTime(), 0);
1250  return result;
1251  }
1252  bool getOverridePrimSeed() const { return myOverridePrimSeed; }
1253  void setOverridePrimSeed(bool val) { myOverridePrimSeed = val; }
1254  bool opOverridePrimSeed(const SOP_NodeVerb::CookParms &cookparms) const
1255  {
1256  SOP_Node *thissop = cookparms.getNode();
1257  if (!thissop) return getOverridePrimSeed();
1258  bool result;
1259  OP_Utils::evalOpParm(result, thissop, "overrideprimseed", cookparms.getCookTime(), 0);
1260  return result;
1261  }
1262  const UT_StringHolder & getPrimSeedAttrib() const { return myPrimSeedAttrib; }
1263  void setPrimSeedAttrib(const UT_StringHolder & val) { myPrimSeedAttrib = val; }
1265  {
1266  SOP_Node *thissop = cookparms.getNode();
1267  if (!thissop) return getPrimSeedAttrib();
1269  OP_Utils::evalOpParm(result, thissop, "primseedattrib", cookparms.getCookTime(), 0);
1270  return result;
1271  }
1272  bool getRandomizeOrder() const { return myRandomizeOrder; }
1273  void setRandomizeOrder(bool val) { myRandomizeOrder = val; }
1274  bool opRandomizeOrder(const SOP_NodeVerb::CookParms &cookparms) const
1275  {
1276  SOP_Node *thissop = cookparms.getNode();
1277  if (!thissop) return getRandomizeOrder();
1278  bool result;
1279  OP_Utils::evalOpParm(result, thissop, "randomizeorder", cookparms.getCookTime(), 0);
1280  return result;
1281  }
1282  bool getRelaxPoints() const { return myRelaxPoints; }
1283  void setRelaxPoints(bool val) { myRelaxPoints = val; }
1284  bool opRelaxPoints(const SOP_NodeVerb::CookParms &cookparms) const
1285  {
1286  SOP_Node *thissop = cookparms.getNode();
1287  if (!thissop) return getRelaxPoints();
1288  bool result;
1289  OP_Utils::evalOpParm(result, thissop, "relaxpoints", cookparms.getCookTime(), 0);
1290  return result;
1291  }
1292  int64 getRelaxIterations() const { return myRelaxIterations; }
1293  void setRelaxIterations(int64 val) { myRelaxIterations = val; }
1295  {
1296  SOP_Node *thissop = cookparms.getNode();
1297  if (!thissop) return getRelaxIterations();
1298  int64 result;
1299  OP_Utils::evalOpParm(result, thissop, "relaxiterations", cookparms.getCookTime(), 0);
1300  return result;
1301  }
1302  bool getUseGeometricNormals() const { return myUseGeometricNormals; }
1303  void setUseGeometricNormals(bool val) { myUseGeometricNormals = val; }
1304  bool opUseGeometricNormals(const SOP_NodeVerb::CookParms &cookparms) const
1305  {
1306  SOP_Node *thissop = cookparms.getNode();
1307  if (!thissop) return getUseGeometricNormals();
1308  bool result;
1309  OP_Utils::evalOpParm(result, thissop, "usegeometricnormals", cookparms.getCookTime(), 0);
1310  return result;
1311  }
1312  bool getUsePrimNumAttrib() const { return myUsePrimNumAttrib; }
1313  void setUsePrimNumAttrib(bool val) { myUsePrimNumAttrib = val; }
1314  bool opUsePrimNumAttrib(const SOP_NodeVerb::CookParms &cookparms) const
1315  {
1316  SOP_Node *thissop = cookparms.getNode();
1317  if (!thissop) return getUsePrimNumAttrib();
1318  bool result;
1319  OP_Utils::evalOpParm(result, thissop, "useprimnumattrib", cookparms.getCookTime(), 0);
1320  return result;
1321  }
1322  const UT_StringHolder & getPrimNumAttrib() const { return myPrimNumAttrib; }
1323  void setPrimNumAttrib(const UT_StringHolder & val) { myPrimNumAttrib = val; }
1325  {
1326  SOP_Node *thissop = cookparms.getNode();
1327  if (!thissop) return getPrimNumAttrib();
1329  OP_Utils::evalOpParm(result, thissop, "primnumattrib", cookparms.getCookTime(), 0);
1330  return result;
1331  }
1332  bool getUsePrimUVWAttrib() const { return myUsePrimUVWAttrib; }
1333  void setUsePrimUVWAttrib(bool val) { myUsePrimUVWAttrib = val; }
1334  bool opUsePrimUVWAttrib(const SOP_NodeVerb::CookParms &cookparms) const
1335  {
1336  SOP_Node *thissop = cookparms.getNode();
1337  if (!thissop) return getUsePrimUVWAttrib();
1338  bool result;
1339  OP_Utils::evalOpParm(result, thissop, "useprimuvwattrib", cookparms.getCookTime(), 0);
1340  return result;
1341  }
1342  const UT_StringHolder & getPrimUVWAttrib() const { return myPrimUVWAttrib; }
1343  void setPrimUVWAttrib(const UT_StringHolder & val) { myPrimUVWAttrib = val; }
1345  {
1346  SOP_Node *thissop = cookparms.getNode();
1347  if (!thissop) return getPrimUVWAttrib();
1349  OP_Utils::evalOpParm(result, thissop, "primuvwattrib", cookparms.getCookTime(), 0);
1350  return result;
1351  }
1352  bool getUseOutputDensityAttrib() const { return myUseOutputDensityAttrib; }
1353  void setUseOutputDensityAttrib(bool val) { myUseOutputDensityAttrib = val; }
1355  {
1356  SOP_Node *thissop = cookparms.getNode();
1357  if (!thissop) return getUseOutputDensityAttrib();
1358  bool result;
1359  OP_Utils::evalOpParm(result, thissop, "useoutputdensityattrib", cookparms.getCookTime(), 0);
1360  return result;
1361  }
1362  const UT_StringHolder & getOutputDensityAttrib() const { return myOutputDensityAttrib; }
1363  void setOutputDensityAttrib(const UT_StringHolder & val) { myOutputDensityAttrib = val; }
1365  {
1366  SOP_Node *thissop = cookparms.getNode();
1367  if (!thissop) return getOutputDensityAttrib();
1369  OP_Utils::evalOpParm(result, thissop, "outputdensityattrib", cookparms.getCookTime(), 0);
1370  return result;
1371  }
1372  bool getUseOutputRadiusAttrib() const { return myUseOutputRadiusAttrib; }
1373  void setUseOutputRadiusAttrib(bool val) { myUseOutputRadiusAttrib = val; }
1375  {
1376  SOP_Node *thissop = cookparms.getNode();
1377  if (!thissop) return getUseOutputRadiusAttrib();
1378  bool result;
1379  OP_Utils::evalOpParm(result, thissop, "useoutputradiusattrib", cookparms.getCookTime(), 0);
1380  return result;
1381  }
1382  const UT_StringHolder & getOutputRadiusAttrib() const { return myOutputRadiusAttrib; }
1383  void setOutputRadiusAttrib(const UT_StringHolder & val) { myOutputRadiusAttrib = val; }
1385  {
1386  SOP_Node *thissop = cookparms.getNode();
1387  if (!thissop) return getOutputRadiusAttrib();
1389  OP_Utils::evalOpParm(result, thissop, "outputradiusattrib", cookparms.getCookTime(), 0);
1390  return result;
1391  }
1392  bool getUseOutputIdAttrib() const { return myUseOutputIdAttrib; }
1393  void setUseOutputIdAttrib(bool val) { myUseOutputIdAttrib = val; }
1394  bool opUseOutputIdAttrib(const SOP_NodeVerb::CookParms &cookparms) const
1395  {
1396  SOP_Node *thissop = cookparms.getNode();
1397  if (!thissop) return getUseOutputIdAttrib();
1398  bool result;
1399  OP_Utils::evalOpParm(result, thissop, "useoutputidattrib", cookparms.getCookTime(), 0);
1400  return result;
1401  }
1402  const UT_StringHolder & getOutputIdAttrib() const { return myOutputIdAttrib; }
1403  void setOutputIdAttrib(const UT_StringHolder & val) { myOutputIdAttrib = val; }
1405  {
1406  SOP_Node *thissop = cookparms.getNode();
1407  if (!thissop) return getOutputIdAttrib();
1409  OP_Utils::evalOpParm(result, thissop, "outputidattrib", cookparms.getCookTime(), 0);
1410  return result;
1411  }
1412  bool getRadiusInTextureSpace() const { return myRadiusInTextureSpace; }
1413  void setRadiusInTextureSpace(bool val) { myRadiusInTextureSpace = val; }
1415  {
1416  SOP_Node *thissop = cookparms.getNode();
1417  if (!thissop) return getRadiusInTextureSpace();
1418  bool result;
1419  OP_Utils::evalOpParm(result, thissop, "radiusintexturespace", cookparms.getCookTime(), 0);
1420  return result;
1421  }
1422  const UT_StringHolder & getPointAttribs() const { return myPointAttribs; }
1423  void setPointAttribs(const UT_StringHolder & val) { myPointAttribs = val; }
1425  {
1426  SOP_Node *thissop = cookparms.getNode();
1427  if (!thissop) return getPointAttribs();
1429  OP_Utils::evalOpParm(result, thissop, "pointattribs", cookparms.getCookTime(), 0);
1430  return result;
1431  }
1432  const UT_StringHolder & getVertAttribs() const { return myVertAttribs; }
1433  void setVertAttribs(const UT_StringHolder & val) { myVertAttribs = val; }
1435  {
1436  SOP_Node *thissop = cookparms.getNode();
1437  if (!thissop) return getVertAttribs();
1439  OP_Utils::evalOpParm(result, thissop, "vertattribs", cookparms.getCookTime(), 0);
1440  return result;
1441  }
1442  const UT_StringHolder & getPrimAttribs() const { return myPrimAttribs; }
1443  void setPrimAttribs(const UT_StringHolder & val) { myPrimAttribs = val; }
1445  {
1446  SOP_Node *thissop = cookparms.getNode();
1447  if (!thissop) return getPrimAttribs();
1449  OP_Utils::evalOpParm(result, thissop, "primattribs", cookparms.getCookTime(), 0);
1450  return result;
1451  }
1452  const UT_StringHolder & getDetailAttribs() const { return myDetailAttribs; }
1453  void setDetailAttribs(const UT_StringHolder & val) { myDetailAttribs = val; }
1455  {
1456  SOP_Node *thissop = cookparms.getNode();
1457  if (!thissop) return getDetailAttribs();
1459  OP_Utils::evalOpParm(result, thissop, "detailattribs", cookparms.getCookTime(), 0);
1460  return result;
1461  }
1462  const UT_StringHolder & getDetailAttribsAsDetail() const { return myDetailAttribsAsDetail; }
1463  void setDetailAttribsAsDetail(const UT_StringHolder & val) { myDetailAttribsAsDetail = val; }
1465  {
1466  SOP_Node *thissop = cookparms.getNode();
1467  if (!thissop) return getDetailAttribsAsDetail();
1469  OP_Utils::evalOpParm(result, thissop, "detailattribsasdetail", cookparms.getCookTime(), 0);
1470  return result;
1471  }
1472  fpreal64 getScaleRadiiBy() const { return myScaleRadiiBy; }
1473  void setScaleRadiiBy(fpreal64 val) { myScaleRadiiBy = val; }
1475  {
1476  SOP_Node *thissop = cookparms.getNode();
1477  if (!thissop) return getScaleRadiiBy();
1478  fpreal64 result;
1479  OP_Utils::evalOpParm(result, thissop, "scaleradiiby", cookparms.getCookTime(), 0);
1480  return result;
1481  }
1482  bool getUseMaxRadius() const { return myUseMaxRadius; }
1483  void setUseMaxRadius(bool val) { myUseMaxRadius = val; }
1484  bool opUseMaxRadius(const SOP_NodeVerb::CookParms &cookparms) const
1485  {
1486  SOP_Node *thissop = cookparms.getNode();
1487  if (!thissop) return getUseMaxRadius();
1488  bool result;
1489  OP_Utils::evalOpParm(result, thissop, "usemaxradius", cookparms.getCookTime(), 0);
1490  return result;
1491  }
1492  fpreal64 getMaxRadius() const { return myMaxRadius; }
1493  void setMaxRadius(fpreal64 val) { myMaxRadius = val; }
1495  {
1496  SOP_Node *thissop = cookparms.getNode();
1497  if (!thissop) return getMaxRadius();
1498  fpreal64 result;
1499  OP_Utils::evalOpParm(result, thissop, "maxradius", cookparms.getCookTime(), 0);
1500  return result;
1501  }
1502 
1503 private:
1504  UT_StringHolder myGroup;
1505  int64 myGenerateBy;
1506  bool myIndepVoxel;
1507  bool myForceTotal;
1508  int64 myNpts;
1509  fpreal64 myDensityScale;
1510  bool myUseDensityAttrib;
1511  UT_StringHolder myDensityAttrib;
1512  bool myUseAreaAttrib;
1513  UT_StringHolder myAreaAttrib;
1514  bool myUseAreaForVolumes;
1515  bool myUseDensityTexture;
1516  UT_StringHolder myDensityTexture;
1517  UT_StringHolder myUVAttrib;
1518  UT_StringHolder myCountPerPrimAttrib;
1519  bool myUseEmergencyLimit;
1520  int64 myEmergencyLimit;
1521  fpreal64 mySeed;
1522  bool myOverridePrimSeed;
1523  UT_StringHolder myPrimSeedAttrib;
1524  bool myRandomizeOrder;
1525  bool myRelaxPoints;
1526  int64 myRelaxIterations;
1527  bool myUseGeometricNormals;
1528  bool myUsePrimNumAttrib;
1529  UT_StringHolder myPrimNumAttrib;
1530  bool myUsePrimUVWAttrib;
1531  UT_StringHolder myPrimUVWAttrib;
1532  bool myUseOutputDensityAttrib;
1533  UT_StringHolder myOutputDensityAttrib;
1534  bool myUseOutputRadiusAttrib;
1535  UT_StringHolder myOutputRadiusAttrib;
1536  bool myUseOutputIdAttrib;
1537  UT_StringHolder myOutputIdAttrib;
1538  bool myRadiusInTextureSpace;
1539  UT_StringHolder myPointAttribs;
1540  UT_StringHolder myVertAttribs;
1541  UT_StringHolder myPrimAttribs;
1542  UT_StringHolder myDetailAttribs;
1543  UT_StringHolder myDetailAttribsAsDetail;
1544  fpreal64 myScaleRadiiBy;
1545  bool myUseMaxRadius;
1546  fpreal64 myMaxRadius;
1547 
1548 };
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix4D &value) override
UT_StringHolder opVertAttribs(const SOP_NodeVerb::CookParms &cookparms) const
type
Definition: core.h:556
fpreal64 getScaleRadiiBy() const
static void saveData(std::ostream &os, UT_Vector4D v)
const UT_StringHolder & getPrimNumAttrib() const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector2D &value) const override
static void loadData(UT_IStream &is, UT_Matrix4D &v)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_StringHolder &value) const override
void setGroup(const UT_StringHolder &val)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector4D &value) const override
static void saveData(std::ostream &os, UT_SharedPtr< UT_Ramp > s)
UT_StringHolder opGroup(const SOP_NodeVerb::CookParms &cookparms) const
int int32
Definition: SYS_Types.h:39
SOP_Node * getNode() const
Definition: SOP_NodeVerb.h:347
void setSeed(fpreal64 val)
void setScaleRadiiBy(fpreal64 val)
static void loadData(UT_IStream &is, UT_Vector2D &v)
static void saveData(std::ostream &os, UT_StringHolder s)
void setDetailAttribsAsDetail(const UT_StringHolder &val)
UT_StringHolder opPrimAttribs(const SOP_NodeVerb::CookParms &cookparms) const
void setUseDensityTexture(bool val)
static void loadData(UT_IStream &is, UT_SharedPtr< UT_Ramp > &v)
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_SharedPtr< UT_Ramp > &value) override
void setVertAttribs(const UT_StringHolder &val)
void setGenerateBy(GenerateBy val)
void setOutputIdAttrib(const UT_StringHolder &val)
exint bread(int32 *buffer, exint asize=1)
GLboolean * data
Definition: glcorearb.h:131
static void loadData(UT_IStream &is, PRM_DataItemHandle &v)
GT_API const UT_StringHolder time
void loadFromOpSubclass(const LoadParms &loadparms) override
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector4.h:493
const GLdouble * v
Definition: glcorearb.h:837
fpreal getTime() const
Definition: OP_Context.h:63
bool opUseDensityAttrib(const SOP_NodeVerb::CookParms &cookparms) const
void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
UT_StringHolder opPrimSeedAttrib(const SOP_NodeVerb::CookParms &cookparms) const
GLsizei const GLfloat * value
Definition: glcorearb.h:824
void setDensityScale(fpreal64 val)
static void saveData(std::ostream &os, UT_Matrix3D v)
const UT_StringHolder & getOutputIdAttrib() const
bool opUseOutputRadiusAttrib(const SOP_NodeVerb::CookParms &cookparms) const
void setUseOutputRadiusAttrib(bool val)
const OP_Context & context() const
Definition: OP_NodeParms.h:97
void setUseOutputDensityAttrib(bool val)
UT_StringHolder opOutputDensityAttrib(const SOP_NodeVerb::CookParms &cookparms) const
constexpr SYS_FORCE_INLINE T & z() noexcept
Definition: UT_Vector3.h:667
int64 exint
Definition: SYS_Types.h:125
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
SYS_FORCE_INLINE const char * buffer() const
void setPrimUVWAttrib(const UT_StringHolder &val)
GLdouble s
Definition: glad.h:3009
static void loadData(UT_IStream &is, UT_Vector3I &v)
An output stream object that owns its own string buffer storage.
static void loadData(UT_IStream &is, bool &v)
UT_StringHolder opDetailAttribs(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opDensityTexture(const SOP_NodeVerb::CookParms &cookparms) const
void setPrimAttribs(const UT_StringHolder &val)
static void saveData(std::ostream &os, UT_Vector3D v)
const UT_StringHolder & getPrimSeedAttrib() const
**But if you need a result
Definition: thread.h:622
static void saveData(std::ostream &os, UT_Vector2D v)
bool opRandomizeOrder(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opOutputRadiusAttrib(const SOP_NodeVerb::CookParms &cookparms) const
exint nodeIdx() const
Definition: OP_NodeParms.h:95
static PRM_DataItemHandle parseBinary(const char *type, UT_IStream &is)
const UT_WorkBuffer & str()
Returns a read-only reference to the underlying UT_WorkBuffer.
UT_StringHolder opUVAttrib(const SOP_NodeVerb::CookParms &cookparms) const
void setPointAttribs(const UT_StringHolder &val)
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix2D &value) override
void setNestParmValue(TempIndex idx, TempIndex instance, const PRM_DataItemHandle &value) override
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix3D &value) override
const char * getNestParmName(TempIndex fieldnum) const override
const UT_StringHolder & getVertAttribs() const
void setDensityAttrib(const UT_StringHolder &val)
const UT_StringHolder & getOutputDensityAttrib() const
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector4.h:491
bool opUseMaxRadius(const SOP_NodeVerb::CookParms &cookparms) const
bool opOverridePrimSeed(const SOP_NodeVerb::CookParms &cookparms) const
void setMaxRadius(fpreal64 val)
void setUseAreaForVolumes(bool val)
UT_StringHolder opAreaAttrib(const SOP_NodeVerb::CookParms &cookparms) const
void doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
void setDensityTexture(const UT_StringHolder &val)
double fpreal64
Definition: SYS_Types.h:201
void setOutputDensityAttrib(const UT_StringHolder &val)
UT_SharedPtr< const PRM_DataItem > PRM_DataItemHandle
Definition: APEX_Include.h:55
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector2.h:423
void setUseOutputIdAttrib(bool val)
bool operator==(const BaseDimensions< T > &a, const BaseDimensions< Y > &b)
Definition: Dimensions.h:137
ParmType getNestParmType(TempIndex fieldnum) const override
UT_StringHolder opDensityAttrib(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getDetailAttribsAsDetail() const
const UT_StringHolder & getAreaAttrib() const
SYS_FORCE_INLINE UT_StringHolder getToken(GenerateBy enum_value)
bool opUsePrimNumAttrib(const SOP_NodeVerb::CookParms &cookparms) const
bool opRadiusInTextureSpace(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 opSeed(const SOP_NodeVerb::CookParms &cookparms) const
GenerateBy opGenerateBy(const SOP_NodeVerb::CookParms &cookparms) const
exint length() const
const UT_StringHolder & getCountPerPrimAttrib() const
void getNestParmValue(TempIndex idx, TempIndex instance, fpreal &value) const override
SYS_FORCE_INLINE const char * buffer() const
const UT_StringHolder & getDensityTexture() const
std::shared_ptr< T > UT_SharedPtr
Wrapper around std::shared_ptr.
Definition: UT_SharedPtr.h:36
void copyFrom(const OP_NodeParms *src) override
constexpr SYS_FORCE_INLINE T & z() noexcept
Definition: UT_Vector4.h:495
void setNestParmValue(TempIndex idx, TempIndex instance, const fpreal &value) override
bool opIndepVoxel(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getDetailAttribs() const
const OP_GraphProxy * graph() const
Definition: OP_NodeParms.h:94
#define SYS_FORCE_INLINE
Definition: SYS_Inline.h:45
const UT_StringHolder & getPrimAttribs() const
const UT_StringHolder & getGroup() const
void setAreaAttrib(const UT_StringHolder &val)
const UT_StringHolder & getOutputRadiusAttrib() const
int64 opNpts(const SOP_NodeVerb::CookParms &cookparms) const
bool opUseAreaForVolumes(const SOP_NodeVerb::CookParms &cookparms) const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector3D &value) const override
bool operator==(const SOP_Scatter_2_0Parms &src) const
exint getNestNumParms(TempIndex idx) const override
void setUseGeometricNormals(bool val)
static void saveData(std::ostream &os, int64 v)
long long int64
Definition: SYS_Types.h:116
bool opUseAreaAttrib(const SOP_NodeVerb::CookParms &cookparms) const
void setCountPerPrimAttrib(const UT_StringHolder &val)
bool getUseOutputRadiusAttrib() const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector3D &value) override
static void loadData(UT_IStream &is, UT_Matrix3D &v)
void save(std::ostream &os) const
bool isParmColorRamp(exint idx) const override
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix2D &value) const override
const UT_StringHolder & getPointAttribs() const
UT_StringHolder opPrimUVWAttrib(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 opMaxRadius(const SOP_NodeVerb::CookParms &cookparms) const
GenerateBy getGenerateBy() const
virtual void evalOpParm(int64 &v, NodeIdx node, const char *parmname, fpreal time, DEP_MicroNode *depnode) const =0
const UT_StringHolder & getDensityAttrib() const
bool opForceTotal(const SOP_NodeVerb::CookParms &cookparms) const
bool opUsePrimUVWAttrib(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, UT_Vector2I &v)
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_StringHolder &value) override
void saveBinary(std::ostream &os) const
Save string to binary stream.
Definition: UT_String.h:303
UT_StringHolder opPrimNumAttrib(const SOP_NodeVerb::CookParms &cookparms) const
void buildFromOp(const OP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
GT_API const UT_StringHolder version
UT_StringHolder opOutputIdAttrib(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, int64 &v)
bool opUseDensityTexture(const SOP_NodeVerb::CookParms &cookparms) const
static void saveData(std::ostream &os, PRM_DataItemHandle s)
bool getUseGeometricNormals() const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector2D &value) override
void setUsePrimUVWAttrib(bool val)
bool opRelaxPoints(const SOP_NodeVerb::CookParms &cookparms) const
static void saveData(std::ostream &os, UT_Matrix4D v)
static void saveData(std::ostream &os, fpreal64 v)
void setUVAttrib(const UT_StringHolder &val)
bool operator!=(const SOP_Scatter_2_0Parms &src) const
static void loadData(UT_IStream &is, UT_StringHolder &v)
const UT_StringHolder & getPrimUVWAttrib() const
bool opUseOutputDensityAttrib(const SOP_NodeVerb::CookParms &cookparms) const
void doGetParmValue(TempIndex idx, TempIndex instance, T &value) const
fpreal64 opScaleRadiiBy(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 fpreal
Definition: SYS_Types.h:278
DEP_MicroNode * depnode() const
Definition: OP_NodeParms.h:99
UT_StringHolder opDetailAttribsAsDetail(const SOP_NodeVerb::CookParms &cookparms) const
LeafData & operator=(const LeafData &)=delete
static void loadData(UT_IStream &is, fpreal64 &v)
Utility class for containing a color ramp.
Definition: UT_Ramp.h:96
UT_StringHolder opPointAttribs(const SOP_NodeVerb::CookParms &cookparms) const
void setDetailAttribs(const UT_StringHolder &val)
fpreal64 getDensityScale() const
constexpr SYS_FORCE_INLINE T & w() noexcept
Definition: UT_Vector4.h:497
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix4D &value) const override
void setUseDensityAttrib(bool val)
GLuint GLfloat * val
Definition: glcorearb.h:1608
virtual UT_StringHolder baseGetSignature() const
Definition: OP_NodeParms.h:294
bool getRadiusInTextureSpace() const
fpreal64 getMaxRadius() const
#define SOP_API
Definition: SOP_API.h:10
bool opUseEmergencyLimit(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opCountPerPrimAttrib(const SOP_NodeVerb::CookParms &cookparms) const
bool opUseGeometricNormals(const SOP_NodeVerb::CookParms &cookparms) const
void setRadiusInTextureSpace(bool val)
int64 opEmergencyLimit(const SOP_NodeVerb::CookParms &cookparms) const
fpreal getCookTime() const
Definition: SOP_NodeVerb.h:372
bool load(UT_IStream &is)
void setEmergencyLimit(int64 val)
void setNestParmValue(TempIndex idx, TempIndex instance, const exint &value) override
const char * findChar(int c) const
Definition: UT_String.h:1401
#define UT_ASSERT(ZZ)
Definition: UT_Assert.h:156
void setOutputRadiusAttrib(const UT_StringHolder &val)
void setPrimNumAttrib(const UT_StringHolder &val)
const UT_StringHolder & getUVAttrib() const
GLboolean r
Definition: glcorearb.h:1222
void getNestParmValue(TempIndex idx, TempIndex instance, exint &value) const override
static void saveData(std::ostream &os, UT_Matrix2D v)
void setRelaxIterations(int64 val)
static void saveData(std::ostream &os, bool v)
void setPrimSeedAttrib(const UT_StringHolder &val)
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector3.h:665
int64 opRelaxIterations(const SOP_NodeVerb::CookParms &cookparms) const
bool getUseOutputDensityAttrib() const
static void loadData(UT_IStream &is, UT_Vector4D &v)
void setUsePrimNumAttrib(bool val)
virtual bool isDirect() const =0
Direct proxies mirror actual nodes:
void setOverridePrimSeed(bool val)
void setUseEmergencyLimit(bool val)
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector2.h:425
SYS_FORCE_INLINE bool isstring() const
static void loadData(UT_IStream &is, UT_Matrix2D &v)
static void loadData(UT_IStream &is, UT_Vector3D &v)
bool opUseOutputIdAttrib(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, UT_Vector4I &v)
SYS_FORCE_INLINE void strncpy(const char *src, exint maxlen)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_SharedPtr< UT_Ramp > &value) const override
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector4D &value) override
GLenum src
Definition: glcorearb.h:1793
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector3.h:663
fpreal64 opDensityScale(const SOP_NodeVerb::CookParms &cookparms) const