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