HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
SOP_Triangulate2D-3.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_Triangulate2D_3_0Enums
24 {
25  enum class PlanePosSrc
26  {
27  FITPLANE = 0,
29  USEATTRIB
30  };
31 
33  getToken(PlanePosSrc enum_value)
34  {
35  using namespace UT::Literal;
36  switch (enum_value) {
37  case PlanePosSrc::FITPLANE: return "fitplane"_sh;
38  case PlanePosSrc::SETPROJPLANE: return "setprojplane"_sh;
39  case PlanePosSrc::USEATTRIB: return "useattrib"_sh;
40  default: UT_ASSERT(false); return ""_sh;
41  }
42  }
43 
44  enum class TriangleSize
45  {
46  UNRESTRICTED = 0,
47  CAPMAXAREA,
49  };
50 
52  getToken(TriangleSize enum_value)
53  {
54  using namespace UT::Literal;
55  switch (enum_value) {
56  case TriangleSize::UNRESTRICTED: return "unrestricted"_sh;
57  case TriangleSize::CAPMAXAREA: return "capmaxarea"_sh;
58  case TriangleSize::SETTARGETEDGELENGTH: return "settargetedgelength"_sh;
59  default: UT_ASSERT(false); return ""_sh;
60  }
61  }
62 
63 }
64 
65 
67 {
68 public:
69  static int version() { return 1; }
70 
72  {
73  myPoints = ""_UTsh;
74  myPlanePosSrc = 0;
75  myOrigin = UT_Vector3D(0,0,0);
76  myDist = 0;
77  myDir = UT_Vector3D(0,1,0);
78  myPos2AttribName = ""_UTsh;
79  myUseConstrEdges = false;
80  myConstrEdges = ""_UTsh;
81  myUseConstrPolys = false;
82  myConstrPolys = ""_UTsh;
83  myIgnorePolyBridges = false;
84  myUseSilhouettePolys = false;
85  mySilhouettePolys = ""_UTsh;
86  myAllowConstrSplit = true;
87  myUseExactConstruction = false;
88  myIgnoreNonConstrPts = false;
89  myRemoveFromConvexHull = false;
90  myRemoveFromConstrPolys = false;
91  myRemoveOutsideSilhouette = false;
92  myRefine = false;
93  myAllowRefineConstrSplits = true;
94  myEncroachAngle = 180;
95  myMinAngle = 0;
96  myTriangleSize = 0;
97  myMaxArea = 10000;
98  myTargetEdgeLength = 100;
99  myMinEdgeLength = 0.0001;
100  myMaxNewPts = 5000;
101  myNumLloydSteps = 0;
102  myAllowMovingInteriorInputPts = false;
103  myRestorePos = false;
104  myKeepPrims = false;
105  myUpdateNormals = true;
106  myRemoveUnusedPts = true;
107  myRemoveDuplicatePts = true;
108  myUseConstrSplitPtsGrp = false;
109  myConstrSplitPtsGrp = "constrsplitpts"_UTsh;
110  myUseConstrdEdges = false;
111  myConstrdEdges = "constrdedges"_UTsh;
112  myRandomSeed = 5678;
113 
114  }
115 
116  explicit SOP_Triangulate2D_3_0Parms(const SOP_Triangulate2D_3_0Parms &) = default;
119  SOP_Triangulate2D_3_0Parms &operator=(SOP_Triangulate2D_3_0Parms &&) noexcept = default;
120 
122 
124  {
125  if (myPoints != src.myPoints) return false;
126  if (myPlanePosSrc != src.myPlanePosSrc) return false;
127  if (myOrigin != src.myOrigin) return false;
128  if (myDist != src.myDist) return false;
129  if (myDir != src.myDir) return false;
130  if (myPos2AttribName != src.myPos2AttribName) return false;
131  if (myUseConstrEdges != src.myUseConstrEdges) return false;
132  if (myConstrEdges != src.myConstrEdges) return false;
133  if (myUseConstrPolys != src.myUseConstrPolys) return false;
134  if (myConstrPolys != src.myConstrPolys) return false;
135  if (myIgnorePolyBridges != src.myIgnorePolyBridges) return false;
136  if (myUseSilhouettePolys != src.myUseSilhouettePolys) return false;
137  if (mySilhouettePolys != src.mySilhouettePolys) return false;
138  if (myAllowConstrSplit != src.myAllowConstrSplit) return false;
139  if (myUseExactConstruction != src.myUseExactConstruction) return false;
140  if (myIgnoreNonConstrPts != src.myIgnoreNonConstrPts) return false;
141  if (myRemoveFromConvexHull != src.myRemoveFromConvexHull) return false;
142  if (myRemoveFromConstrPolys != src.myRemoveFromConstrPolys) return false;
143  if (myRemoveOutsideSilhouette != src.myRemoveOutsideSilhouette) return false;
144  if (myRefine != src.myRefine) return false;
145  if (myAllowRefineConstrSplits != src.myAllowRefineConstrSplits) return false;
146  if (myEncroachAngle != src.myEncroachAngle) return false;
147  if (myMinAngle != src.myMinAngle) return false;
148  if (myTriangleSize != src.myTriangleSize) return false;
149  if (myMaxArea != src.myMaxArea) return false;
150  if (myTargetEdgeLength != src.myTargetEdgeLength) return false;
151  if (myMinEdgeLength != src.myMinEdgeLength) return false;
152  if (myMaxNewPts != src.myMaxNewPts) return false;
153  if (myNumLloydSteps != src.myNumLloydSteps) return false;
154  if (myAllowMovingInteriorInputPts != src.myAllowMovingInteriorInputPts) return false;
155  if (myRestorePos != src.myRestorePos) return false;
156  if (myKeepPrims != src.myKeepPrims) return false;
157  if (myUpdateNormals != src.myUpdateNormals) return false;
158  if (myRemoveUnusedPts != src.myRemoveUnusedPts) return false;
159  if (myRemoveDuplicatePts != src.myRemoveDuplicatePts) return false;
160  if (myUseConstrSplitPtsGrp != src.myUseConstrSplitPtsGrp) return false;
161  if (myConstrSplitPtsGrp != src.myConstrSplitPtsGrp) return false;
162  if (myUseConstrdEdges != src.myUseConstrdEdges) return false;
163  if (myConstrdEdges != src.myConstrdEdges) return false;
164  if (myRandomSeed != src.myRandomSeed) return false;
165 
166  return true;
167  }
169  {
170  return !operator==(src);
171  }
174 
175 
176 
177  void buildFromOp(const OP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
178  {
179  myPoints = ""_UTsh;
180  if (true)
181  graph->evalOpParm(myPoints, nodeidx, "points", time, 0);
182  myPlanePosSrc = 0;
183  if (true)
184  graph->evalOpParm(myPlanePosSrc, nodeidx, "planepossrc", time, 0);
185  myOrigin = UT_Vector3D(0,0,0);
186  if (true && ( (true&&!(((int64(getPlanePosSrc())!=1)))) ) )
187  graph->evalOpParm(myOrigin, nodeidx, "origin", time, 0);
188  myDist = 0;
189  if (true && ( (true&&!(((int64(getPlanePosSrc())!=1)))) ) )
190  graph->evalOpParm(myDist, nodeidx, "dist", time, 0);
191  myDir = UT_Vector3D(0,1,0);
192  if (true && ( (true&&!(((int64(getPlanePosSrc())!=1)))) ) )
193  graph->evalOpParm(myDir, nodeidx, "dir", time, 0);
194  myPos2AttribName = ""_UTsh;
195  if (true && ( (true&&!(((int64(getPlanePosSrc())!=2)))) ) )
196  graph->evalOpParm(myPos2AttribName, nodeidx, "pos2attrib", time, 0);
197  myUseConstrEdges = false;
198  if (true)
199  graph->evalOpParm(myUseConstrEdges, nodeidx, "useconstredges", time, 0);
200  myConstrEdges = ""_UTsh;
201  if (true && ( (true&&!(((getUseConstrEdges()==0)))) ) )
202  graph->evalOpParm(myConstrEdges, nodeidx, "constredges", time, 0);
203  myUseConstrPolys = false;
204  if (true)
205  graph->evalOpParm(myUseConstrPolys, nodeidx, "useconstrpolys", time, 0);
206  myConstrPolys = ""_UTsh;
207  if (true && ( (true&&!(((getUseConstrPolys()==0)))) ) )
208  graph->evalOpParm(myConstrPolys, nodeidx, "constrpolys", time, 0);
209  myIgnorePolyBridges = false;
210  if (true && ( (true&&!(((getUseConstrPolys()==0)))) ) )
211  graph->evalOpParm(myIgnorePolyBridges, nodeidx, "ignorepolybridges", time, 0);
212  myUseSilhouettePolys = false;
213  if (true)
214  graph->evalOpParm(myUseSilhouettePolys, nodeidx, "usesilhouettepolys", time, 0);
215  mySilhouettePolys = ""_UTsh;
216  if (true && ( (true&&!(((getUseSilhouettePolys()==0)))) ) )
217  graph->evalOpParm(mySilhouettePolys, nodeidx, "silhouettepolys", time, 0);
218  myAllowConstrSplit = true;
219  if (true)
220  graph->evalOpParm(myAllowConstrSplit, nodeidx, "allowconstrsplit", time, 0);
221  myUseExactConstruction = false;
222  if (true && ( (true&&!(((getAllowConstrSplit()==0)))) ) )
223  graph->evalOpParm(myUseExactConstruction, nodeidx, "useexactconstruction", time, 0);
224  myIgnoreNonConstrPts = false;
225  if (true && ( (true&&!(((getUseConstrEdges()==0)&&(getUseConstrPolys()==0)&&(getUseSilhouettePolys()==0)))) ) )
226  graph->evalOpParm(myIgnoreNonConstrPts, nodeidx, "ignorenonconstrpts", time, 0);
227  myRemoveFromConvexHull = false;
228  if (true && ( (true&&!(((getUseConstrEdges()==0)&&(getUseConstrPolys()==0)&&(getUseSilhouettePolys()==0)))) ) )
229  graph->evalOpParm(myRemoveFromConvexHull, nodeidx, "removefromconvexhull", time, 0);
230  myRemoveFromConstrPolys = false;
231  if (true && ( (true&&!(((getUseConstrPolys()==0)))) ) )
232  graph->evalOpParm(myRemoveFromConstrPolys, nodeidx, "removefromconstrpolys", time, 0);
233  myRemoveOutsideSilhouette = false;
234  if (true && ( (true&&!(((getUseSilhouettePolys()==0)))) ) )
235  graph->evalOpParm(myRemoveOutsideSilhouette, nodeidx, "removeoutsidesilhouette", time, 0);
236  myRefine = false;
237  if (true)
238  graph->evalOpParm(myRefine, nodeidx, "refine", time, 0);
239  myAllowRefineConstrSplits = true;
240  if (true)
241  graph->evalOpParm(myAllowRefineConstrSplits, nodeidx, "allowrefineonstrsplit", time, 0);
242  myEncroachAngle = 180;
243  if (true && ( (true&&!(((getAllowRefineConstrSplits()==1)))) ) )
244  graph->evalOpParm(myEncroachAngle, nodeidx, "encroachangle", time, 0);
245  myMinAngle = 0;
246  if (true && ( (true&&!(((getRefine()==0)))) ) )
247  graph->evalOpParm(myMinAngle, nodeidx, "minangle", time, 0);
248  myTriangleSize = 0;
249  if (true && ( (true&&!(((getRefine()==0)))) ) )
250  graph->evalOpParm(myTriangleSize, nodeidx, "trianglesize", time, 0);
251  myMaxArea = 10000;
252  if (true && ( (true&&!(((int64(getTriangleSize())!=1))||((getRefine()==0)))) ) )
253  graph->evalOpParm(myMaxArea, nodeidx, "maxarea", time, 0);
254  myTargetEdgeLength = 100;
255  if (true && ( (true&&!(((int64(getTriangleSize())!=2))||((getRefine()==0)))) ) )
256  graph->evalOpParm(myTargetEdgeLength, nodeidx, "targetedgelength", time, 0);
257  myMinEdgeLength = 0.0001;
258  if (true && ( (true&&!(((getRefine()==0)))) ) )
259  graph->evalOpParm(myMinEdgeLength, nodeidx, "minedgelength", time, 0);
260  myMaxNewPts = 5000;
261  if (true && ( (true&&!(((getRefine()==0)))) ) )
262  graph->evalOpParm(myMaxNewPts, nodeidx, "maxnewpts", time, 0);
263  myNumLloydSteps = 0;
264  if (true && ( (true&&!(((getRefine()==0)))) ) )
265  graph->evalOpParm(myNumLloydSteps, nodeidx, "lloydsteps", time, 0);
266  myAllowMovingInteriorInputPts = false;
267  if (true && ( (true&&!(((getRefine()==0))||((int64(getNumLloydSteps())==0)))) ) )
268  graph->evalOpParm(myAllowMovingInteriorInputPts, nodeidx, "allowmovinginteriorpts", time, 0);
269  myRestorePos = false;
270  if (true)
271  graph->evalOpParm(myRestorePos, nodeidx, "restorepos", time, 0);
272  myKeepPrims = false;
273  if (true)
274  graph->evalOpParm(myKeepPrims, nodeidx, "keepprims", time, 0);
275  myUpdateNormals = true;
276  if (true)
277  graph->evalOpParm(myUpdateNormals, nodeidx, "updatenmls", time, 0);
278  myRemoveUnusedPts = true;
279  if (true)
280  graph->evalOpParm(myRemoveUnusedPts, nodeidx, "removeunusedpoints", time, 0);
281  myRemoveDuplicatePts = true;
282  if (true)
283  graph->evalOpParm(myRemoveDuplicatePts, nodeidx, "removeduplicatepoints", time, 0);
284  myUseConstrSplitPtsGrp = false;
285  if (true && ( (true&&!(((getAllowConstrSplit()==0)))) ) )
286  graph->evalOpParm(myUseConstrSplitPtsGrp, nodeidx, "usecontrsplitptgrp", time, 0);
287  myConstrSplitPtsGrp = "constrsplitpts"_UTsh;
288  if (true && ( (true&&!(((getUseConstrSplitPtsGrp()==0)))) ) )
289  graph->evalOpParm(myConstrSplitPtsGrp, nodeidx, "constrsplitptgrp", time, 0);
290  myUseConstrdEdges = false;
291  if (true)
292  graph->evalOpParm(myUseConstrdEdges, nodeidx, "useconstrdedges", time, 0);
293  myConstrdEdges = "constrdedges"_UTsh;
294  if (true && ( (true&&!(((getUseConstrdEdges()==0)))) ) )
295  graph->evalOpParm(myConstrdEdges, nodeidx, "constrdedges", time, 0);
296  myRandomSeed = 5678;
297  if (true)
298  graph->evalOpParm(myRandomSeed, nodeidx, "randseed", time, 0);
299 
300  }
301 
302 
303  void loadFromOpSubclass(const LoadParms &loadparms) override
304  {
305  buildFromOp(loadparms.graph(), loadparms.nodeIdx(), loadparms.context().getTime(), loadparms.depnode());
306  }
307 
308 
309  void copyFrom(const OP_NodeParms *src) override
310  {
311  *this = *((const SOP_Triangulate2D_3_0Parms *)src);
312  }
313 
314  template <typename T>
315  void
316  doGetParmValue(TempIndex idx, TempIndex instance, T &value) const
317  {
318  if (idx.size() < 1)
319  return;
320  UT_ASSERT(idx.size() == instance.size()+1);
321  if (idx.size() != instance.size()+1)
322  return;
323  switch (idx[0])
324  {
325  case 0:
326  coerceValue(value, myPoints);
327  break;
328  case 1:
329  coerceValue(value, myPlanePosSrc);
330  break;
331  case 2:
332  coerceValue(value, myOrigin);
333  break;
334  case 3:
335  coerceValue(value, myDist);
336  break;
337  case 4:
338  coerceValue(value, myDir);
339  break;
340  case 5:
341  coerceValue(value, myPos2AttribName);
342  break;
343  case 6:
344  coerceValue(value, myUseConstrEdges);
345  break;
346  case 7:
347  coerceValue(value, myConstrEdges);
348  break;
349  case 8:
350  coerceValue(value, myUseConstrPolys);
351  break;
352  case 9:
353  coerceValue(value, myConstrPolys);
354  break;
355  case 10:
356  coerceValue(value, myIgnorePolyBridges);
357  break;
358  case 11:
359  coerceValue(value, myUseSilhouettePolys);
360  break;
361  case 12:
362  coerceValue(value, mySilhouettePolys);
363  break;
364  case 13:
365  coerceValue(value, myAllowConstrSplit);
366  break;
367  case 14:
368  coerceValue(value, myUseExactConstruction);
369  break;
370  case 15:
371  coerceValue(value, myIgnoreNonConstrPts);
372  break;
373  case 16:
374  coerceValue(value, myRemoveFromConvexHull);
375  break;
376  case 17:
377  coerceValue(value, myRemoveFromConstrPolys);
378  break;
379  case 18:
380  coerceValue(value, myRemoveOutsideSilhouette);
381  break;
382  case 19:
383  coerceValue(value, myRefine);
384  break;
385  case 20:
386  coerceValue(value, myAllowRefineConstrSplits);
387  break;
388  case 21:
389  coerceValue(value, myEncroachAngle);
390  break;
391  case 22:
392  coerceValue(value, myMinAngle);
393  break;
394  case 23:
395  coerceValue(value, myTriangleSize);
396  break;
397  case 24:
398  coerceValue(value, myMaxArea);
399  break;
400  case 25:
401  coerceValue(value, myTargetEdgeLength);
402  break;
403  case 26:
404  coerceValue(value, myMinEdgeLength);
405  break;
406  case 27:
407  coerceValue(value, myMaxNewPts);
408  break;
409  case 28:
410  coerceValue(value, myNumLloydSteps);
411  break;
412  case 29:
413  coerceValue(value, myAllowMovingInteriorInputPts);
414  break;
415  case 30:
416  coerceValue(value, myRestorePos);
417  break;
418  case 31:
419  coerceValue(value, myKeepPrims);
420  break;
421  case 32:
422  coerceValue(value, myUpdateNormals);
423  break;
424  case 33:
425  coerceValue(value, myRemoveUnusedPts);
426  break;
427  case 34:
428  coerceValue(value, myRemoveDuplicatePts);
429  break;
430  case 35:
431  coerceValue(value, myUseConstrSplitPtsGrp);
432  break;
433  case 36:
434  coerceValue(value, myConstrSplitPtsGrp);
435  break;
436  case 37:
437  coerceValue(value, myUseConstrdEdges);
438  break;
439  case 38:
440  coerceValue(value, myConstrdEdges);
441  break;
442  case 39:
443  coerceValue(value, myRandomSeed);
444  break;
445 
446  }
447  }
448 
449  bool isParmColorRamp(exint idx) const override
450  {
451  switch (idx)
452  {
453 
454  }
455  return false;
456  }
457 
458  void getNestParmValue(TempIndex idx, TempIndex instance, exint &value) const override
459  { doGetParmValue(idx, instance, value); }
460  void getNestParmValue(TempIndex idx, TempIndex instance, fpreal &value) const override
461  { doGetParmValue(idx, instance, value); }
462  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector2D &value) const override
463  { doGetParmValue(idx, instance, value); }
464  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector3D &value) const override
465  { doGetParmValue(idx, instance, value); }
466  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector4D &value) const override
467  { doGetParmValue(idx, instance, value); }
468  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix2D &value) const override
469  { doGetParmValue(idx, instance, value); }
470  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
471  { doGetParmValue(idx, instance, value); }
472  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix4D &value) const override
473  { doGetParmValue(idx, instance, value); }
474  void getNestParmValue(TempIndex idx, TempIndex instance, UT_StringHolder &value) const override
475  { doGetParmValue(idx, instance, value); }
476  void getNestParmValue(TempIndex idx, TempIndex instance, UT_SharedPtr<UT_Ramp> &value) const override
477  { doGetParmValue(idx, instance, value); }
478  void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
479  { doGetParmValue(idx, instance, value); }
480 
481  template <typename T>
482  void
483  doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
484  {
485  if (idx.size() < 1)
486  return;
487  UT_ASSERT(idx.size() == instance.size()+1);
488  if (idx.size() != instance.size()+1)
489  return;
490  switch (idx[0])
491  {
492  case 0:
493  coerceValue(myPoints, ( ( value ) ));
494  break;
495  case 1:
496  coerceValue(myPlanePosSrc, clampMinValue(0, clampMaxValue(2, value ) ));
497  break;
498  case 2:
499  coerceValue(myOrigin, ( ( value ) ));
500  break;
501  case 3:
502  coerceValue(myDist, ( ( value ) ));
503  break;
504  case 4:
505  coerceValue(myDir, ( ( value ) ));
506  break;
507  case 5:
508  coerceValue(myPos2AttribName, ( ( value ) ));
509  break;
510  case 6:
511  coerceValue(myUseConstrEdges, ( ( value ) ));
512  break;
513  case 7:
514  coerceValue(myConstrEdges, ( ( value ) ));
515  break;
516  case 8:
517  coerceValue(myUseConstrPolys, ( ( value ) ));
518  break;
519  case 9:
520  coerceValue(myConstrPolys, ( ( value ) ));
521  break;
522  case 10:
523  coerceValue(myIgnorePolyBridges, ( ( value ) ));
524  break;
525  case 11:
526  coerceValue(myUseSilhouettePolys, ( ( value ) ));
527  break;
528  case 12:
529  coerceValue(mySilhouettePolys, ( ( value ) ));
530  break;
531  case 13:
532  coerceValue(myAllowConstrSplit, ( ( value ) ));
533  break;
534  case 14:
535  coerceValue(myUseExactConstruction, ( ( value ) ));
536  break;
537  case 15:
538  coerceValue(myIgnoreNonConstrPts, ( ( value ) ));
539  break;
540  case 16:
541  coerceValue(myRemoveFromConvexHull, ( ( value ) ));
542  break;
543  case 17:
544  coerceValue(myRemoveFromConstrPolys, ( ( value ) ));
545  break;
546  case 18:
547  coerceValue(myRemoveOutsideSilhouette, ( ( value ) ));
548  break;
549  case 19:
550  coerceValue(myRefine, ( ( value ) ));
551  break;
552  case 20:
553  coerceValue(myAllowRefineConstrSplits, ( ( value ) ));
554  break;
555  case 21:
556  coerceValue(myEncroachAngle, clampMinValue(90, clampMaxValue(180, value ) ));
557  break;
558  case 22:
559  coerceValue(myMinAngle, clampMinValue(0, ( value ) ));
560  break;
561  case 23:
562  coerceValue(myTriangleSize, clampMinValue(0, clampMaxValue(2, value ) ));
563  break;
564  case 24:
565  coerceValue(myMaxArea, clampMinValue(0.0000001, ( value ) ));
566  break;
567  case 25:
568  coerceValue(myTargetEdgeLength, clampMinValue(0.0001, ( value ) ));
569  break;
570  case 26:
571  coerceValue(myMinEdgeLength, ( ( value ) ));
572  break;
573  case 27:
574  coerceValue(myMaxNewPts, clampMinValue(0, ( value ) ));
575  break;
576  case 28:
577  coerceValue(myNumLloydSteps, clampMinValue(0, ( value ) ));
578  break;
579  case 29:
580  coerceValue(myAllowMovingInteriorInputPts, ( ( value ) ));
581  break;
582  case 30:
583  coerceValue(myRestorePos, ( ( value ) ));
584  break;
585  case 31:
586  coerceValue(myKeepPrims, ( ( value ) ));
587  break;
588  case 32:
589  coerceValue(myUpdateNormals, ( ( value ) ));
590  break;
591  case 33:
592  coerceValue(myRemoveUnusedPts, ( ( value ) ));
593  break;
594  case 34:
595  coerceValue(myRemoveDuplicatePts, ( ( value ) ));
596  break;
597  case 35:
598  coerceValue(myUseConstrSplitPtsGrp, ( ( value ) ));
599  break;
600  case 36:
601  coerceValue(myConstrSplitPtsGrp, ( ( value ) ));
602  break;
603  case 37:
604  coerceValue(myUseConstrdEdges, ( ( value ) ));
605  break;
606  case 38:
607  coerceValue(myConstrdEdges, ( ( value ) ));
608  break;
609  case 39:
610  coerceValue(myRandomSeed, ( ( 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 40;
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 "points";
659  case 1:
660  return "planepossrc";
661  case 2:
662  return "origin";
663  case 3:
664  return "dist";
665  case 4:
666  return "dir";
667  case 5:
668  return "pos2attrib";
669  case 6:
670  return "useconstredges";
671  case 7:
672  return "constredges";
673  case 8:
674  return "useconstrpolys";
675  case 9:
676  return "constrpolys";
677  case 10:
678  return "ignorepolybridges";
679  case 11:
680  return "usesilhouettepolys";
681  case 12:
682  return "silhouettepolys";
683  case 13:
684  return "allowconstrsplit";
685  case 14:
686  return "useexactconstruction";
687  case 15:
688  return "ignorenonconstrpts";
689  case 16:
690  return "removefromconvexhull";
691  case 17:
692  return "removefromconstrpolys";
693  case 18:
694  return "removeoutsidesilhouette";
695  case 19:
696  return "refine";
697  case 20:
698  return "allowrefineonstrsplit";
699  case 21:
700  return "encroachangle";
701  case 22:
702  return "minangle";
703  case 23:
704  return "trianglesize";
705  case 24:
706  return "maxarea";
707  case 25:
708  return "targetedgelength";
709  case 26:
710  return "minedgelength";
711  case 27:
712  return "maxnewpts";
713  case 28:
714  return "lloydsteps";
715  case 29:
716  return "allowmovinginteriorpts";
717  case 30:
718  return "restorepos";
719  case 31:
720  return "keepprims";
721  case 32:
722  return "updatenmls";
723  case 33:
724  return "removeunusedpoints";
725  case 34:
726  return "removeduplicatepoints";
727  case 35:
728  return "usecontrsplitptgrp";
729  case 36:
730  return "constrsplitptgrp";
731  case 37:
732  return "useconstrdedges";
733  case 38:
734  return "constrdedges";
735  case 39:
736  return "randseed";
737 
738  }
739  return 0;
740  }
741 
742  ParmType getNestParmType(TempIndex fieldnum) const override
743  {
744  if (fieldnum.size() < 1)
745  return PARM_UNSUPPORTED;
746  switch (fieldnum[0])
747  {
748  case 0:
749  return PARM_STRING;
750  case 1:
751  return PARM_INTEGER;
752  case 2:
753  return PARM_VECTOR3;
754  case 3:
755  return PARM_FLOAT;
756  case 4:
757  return PARM_VECTOR3;
758  case 5:
759  return PARM_STRING;
760  case 6:
761  return PARM_INTEGER;
762  case 7:
763  return PARM_STRING;
764  case 8:
765  return PARM_INTEGER;
766  case 9:
767  return PARM_STRING;
768  case 10:
769  return PARM_INTEGER;
770  case 11:
771  return PARM_INTEGER;
772  case 12:
773  return PARM_STRING;
774  case 13:
775  return PARM_INTEGER;
776  case 14:
777  return PARM_INTEGER;
778  case 15:
779  return PARM_INTEGER;
780  case 16:
781  return PARM_INTEGER;
782  case 17:
783  return PARM_INTEGER;
784  case 18:
785  return PARM_INTEGER;
786  case 19:
787  return PARM_INTEGER;
788  case 20:
789  return PARM_INTEGER;
790  case 21:
791  return PARM_FLOAT;
792  case 22:
793  return PARM_FLOAT;
794  case 23:
795  return PARM_INTEGER;
796  case 24:
797  return PARM_FLOAT;
798  case 25:
799  return PARM_FLOAT;
800  case 26:
801  return PARM_FLOAT;
802  case 27:
803  return PARM_INTEGER;
804  case 28:
805  return PARM_INTEGER;
806  case 29:
807  return PARM_INTEGER;
808  case 30:
809  return PARM_INTEGER;
810  case 31:
811  return PARM_INTEGER;
812  case 32:
813  return PARM_INTEGER;
814  case 33:
815  return PARM_INTEGER;
816  case 34:
817  return PARM_INTEGER;
818  case 35:
819  return PARM_INTEGER;
820  case 36:
821  return PARM_STRING;
822  case 37:
823  return PARM_INTEGER;
824  case 38:
825  return PARM_STRING;
826  case 39:
827  return PARM_INTEGER;
828 
829  }
830  return PARM_UNSUPPORTED;
831  }
832 
833  // Boiler plate to load individual types.
834  static void loadData(UT_IStream &is, int64 &v)
835  { is.bread(&v, 1); }
836  static void loadData(UT_IStream &is, bool &v)
837  { int64 iv; is.bread(&iv, 1); v = iv; }
838  static void loadData(UT_IStream &is, fpreal64 &v)
839  { is.bread<fpreal64>(&v, 1); }
840  static void loadData(UT_IStream &is, UT_Vector2D &v)
841  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1); }
842  static void loadData(UT_IStream &is, UT_Vector3D &v)
843  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
844  is.bread<fpreal64>(&v.z(), 1); }
845  static void loadData(UT_IStream &is, UT_Vector4D &v)
846  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
847  is.bread<fpreal64>(&v.z(), 1); is.bread<fpreal64>(&v.w(), 1); }
848  static void loadData(UT_IStream &is, UT_Matrix2D &v)
849  { for (int r = 0; r < 2; r++) for (int c = 0; c < 2; c++) is.bread<fpreal64>(&v(r, c), 1); }
850  static void loadData(UT_IStream &is, UT_Matrix3D &v)
851  { for (int r = 0; r < 3; r++) for (int c = 0; c < 3; c++) is.bread<fpreal64>(&v(r, c), 1); }
852  static void loadData(UT_IStream &is, UT_Matrix4D &v)
853  { for (int r = 0; r < 4; r++) for (int c = 0; c < 4; c++) is.bread<fpreal64>(&v(r, c), 1); }
854  static void loadData(UT_IStream &is, UT_Vector2I &v)
855  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1); }
856  static void loadData(UT_IStream &is, UT_Vector3I &v)
857  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
858  is.bread<int64>(&v.z(), 1); }
859  static void loadData(UT_IStream &is, UT_Vector4I &v)
860  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
861  is.bread<int64>(&v.z(), 1); is.bread<int64>(&v.w(), 1); }
863  { is.bread(v); }
865  { UT_StringHolder rampdata;
866  loadData(is, rampdata);
867  if (rampdata.isstring())
868  {
869  v.reset(new UT_Ramp());
870  UT_IStream istr((const char *) rampdata, rampdata.length(), UT_ISTREAM_ASCII);
871  v->load(istr);
872  }
873  else v.reset();
874  }
877  loadData(is, data);
878  if (data.isstring())
879  {
880  // Find the data type.
881  const char *colon = UT_StringWrap(data).findChar(':');
882  if (colon)
883  {
884  int typelen = colon - data.buffer();
886  type.strncpy(data.buffer(), typelen);
887  UT_IStream istr(((const char *) data) + typelen + 1, data.length() - (typelen + 1), UT_ISTREAM_BINARY);
888 
889  v = PRM_DataFactory::parseBinary(type.buffer(), istr);
890  }
891  }
892  else v.reset();
893  }
894 
895  static void saveData(std::ostream &os, int64 v)
896  { UTwrite(os, &v); }
897  static void saveData(std::ostream &os, bool v)
898  { int64 iv = v; UTwrite(os, &iv); }
899  static void saveData(std::ostream &os, fpreal64 v)
900  { UTwrite<fpreal64>(os, &v); }
901  static void saveData(std::ostream &os, UT_Vector2D v)
902  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y()); }
903  static void saveData(std::ostream &os, UT_Vector3D v)
904  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
905  UTwrite<fpreal64>(os, &v.z()); }
906  static void saveData(std::ostream &os, UT_Vector4D v)
907  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
908  UTwrite<fpreal64>(os, &v.z()); UTwrite<fpreal64>(os, &v.w()); }
909  static void saveData(std::ostream &os, UT_Matrix2D v)
911  static void saveData(std::ostream &os, UT_Matrix3D v)
913  static void saveData(std::ostream &os, UT_Matrix4D v)
915  static void saveData(std::ostream &os, UT_StringHolder s)
916  { UT_StringWrap(s).saveBinary(os); }
917  static void saveData(std::ostream &os, UT_SharedPtr<UT_Ramp> s)
919  UT_OStringStream ostr;
920  if (s) s->save(ostr);
921  result = ostr.str();
922  saveData(os, result);
923  }
924  static void saveData(std::ostream &os, PRM_DataItemHandle s)
926  UT_OStringStream ostr;
927  if (s)
928  {
929  ostr << s->getDataTypeToken();
930  ostr << ":";
931  s->saveBinary(ostr);
932  }
933  result = ostr.str();
934  saveData(os, result);
935  }
936 
937 
938  void save(std::ostream &os) const
939  {
940  int32 v = version();
941  UTwrite(os, &v);
942  saveData(os, myPoints);
943  saveData(os, myPlanePosSrc);
944  saveData(os, myOrigin);
945  saveData(os, myDist);
946  saveData(os, myDir);
947  saveData(os, myPos2AttribName);
948  saveData(os, myUseConstrEdges);
949  saveData(os, myConstrEdges);
950  saveData(os, myUseConstrPolys);
951  saveData(os, myConstrPolys);
952  saveData(os, myIgnorePolyBridges);
953  saveData(os, myUseSilhouettePolys);
954  saveData(os, mySilhouettePolys);
955  saveData(os, myAllowConstrSplit);
956  saveData(os, myUseExactConstruction);
957  saveData(os, myIgnoreNonConstrPts);
958  saveData(os, myRemoveFromConvexHull);
959  saveData(os, myRemoveFromConstrPolys);
960  saveData(os, myRemoveOutsideSilhouette);
961  saveData(os, myRefine);
962  saveData(os, myAllowRefineConstrSplits);
963  saveData(os, myEncroachAngle);
964  saveData(os, myMinAngle);
965  saveData(os, myTriangleSize);
966  saveData(os, myMaxArea);
967  saveData(os, myTargetEdgeLength);
968  saveData(os, myMinEdgeLength);
969  saveData(os, myMaxNewPts);
970  saveData(os, myNumLloydSteps);
971  saveData(os, myAllowMovingInteriorInputPts);
972  saveData(os, myRestorePos);
973  saveData(os, myKeepPrims);
974  saveData(os, myUpdateNormals);
975  saveData(os, myRemoveUnusedPts);
976  saveData(os, myRemoveDuplicatePts);
977  saveData(os, myUseConstrSplitPtsGrp);
978  saveData(os, myConstrSplitPtsGrp);
979  saveData(os, myUseConstrdEdges);
980  saveData(os, myConstrdEdges);
981  saveData(os, myRandomSeed);
982 
983  }
984 
985  bool load(UT_IStream &is)
986  {
987  int32 v;
988  is.bread(&v, 1);
989  if (version() != v)
990  {
991  // Fail incompatible versions
992  return false;
993  }
994  loadData(is, myPoints);
995  loadData(is, myPlanePosSrc);
996  loadData(is, myOrigin);
997  loadData(is, myDist);
998  loadData(is, myDir);
999  loadData(is, myPos2AttribName);
1000  loadData(is, myUseConstrEdges);
1001  loadData(is, myConstrEdges);
1002  loadData(is, myUseConstrPolys);
1003  loadData(is, myConstrPolys);
1004  loadData(is, myIgnorePolyBridges);
1005  loadData(is, myUseSilhouettePolys);
1006  loadData(is, mySilhouettePolys);
1007  loadData(is, myAllowConstrSplit);
1008  loadData(is, myUseExactConstruction);
1009  loadData(is, myIgnoreNonConstrPts);
1010  loadData(is, myRemoveFromConvexHull);
1011  loadData(is, myRemoveFromConstrPolys);
1012  loadData(is, myRemoveOutsideSilhouette);
1013  loadData(is, myRefine);
1014  loadData(is, myAllowRefineConstrSplits);
1015  loadData(is, myEncroachAngle);
1016  loadData(is, myMinAngle);
1017  loadData(is, myTriangleSize);
1018  loadData(is, myMaxArea);
1019  loadData(is, myTargetEdgeLength);
1020  loadData(is, myMinEdgeLength);
1021  loadData(is, myMaxNewPts);
1022  loadData(is, myNumLloydSteps);
1023  loadData(is, myAllowMovingInteriorInputPts);
1024  loadData(is, myRestorePos);
1025  loadData(is, myKeepPrims);
1026  loadData(is, myUpdateNormals);
1027  loadData(is, myRemoveUnusedPts);
1028  loadData(is, myRemoveDuplicatePts);
1029  loadData(is, myUseConstrSplitPtsGrp);
1030  loadData(is, myConstrSplitPtsGrp);
1031  loadData(is, myUseConstrdEdges);
1032  loadData(is, myConstrdEdges);
1033  loadData(is, myRandomSeed);
1034 
1035  return true;
1036  }
1037 
1038  const UT_StringHolder & getPoints() const { return myPoints; }
1039  void setPoints(const UT_StringHolder & val) { myPoints = val; }
1041  {
1042  SOP_Node *thissop = cookparms.getNode();
1043  if (!thissop) return getPoints();
1045  OP_Utils::evalOpParm(result, thissop, "points", cookparms.getCookTime(), 0);
1046  return result;
1047  }
1048  PlanePosSrc getPlanePosSrc() const { return PlanePosSrc(myPlanePosSrc); }
1049  void setPlanePosSrc(PlanePosSrc val) { myPlanePosSrc = int64(val); }
1051  {
1052  SOP_Node *thissop = cookparms.getNode();
1053  if (!thissop) return getPlanePosSrc();
1054  int64 result;
1055  OP_Utils::evalOpParm(result, thissop, "planepossrc", cookparms.getCookTime(), 0);
1056  return PlanePosSrc(result);
1057  }
1058  UT_Vector3D getOrigin() const { return myOrigin; }
1059  void setOrigin(UT_Vector3D val) { myOrigin = val; }
1061  {
1062  SOP_Node *thissop = cookparms.getNode();
1063  if (!thissop) return getOrigin();
1065  OP_Utils::evalOpParm(result, thissop, "origin", cookparms.getCookTime(), 0);
1066  return result;
1067  }
1068  fpreal64 getDist() const { return myDist; }
1069  void setDist(fpreal64 val) { myDist = val; }
1070  fpreal64 opDist(const SOP_NodeVerb::CookParms &cookparms) const
1071  {
1072  SOP_Node *thissop = cookparms.getNode();
1073  if (!thissop) return getDist();
1074  fpreal64 result;
1075  OP_Utils::evalOpParm(result, thissop, "dist", cookparms.getCookTime(), 0);
1076  return result;
1077  }
1078  UT_Vector3D getDir() const { return myDir; }
1079  void setDir(UT_Vector3D val) { myDir = val; }
1081  {
1082  SOP_Node *thissop = cookparms.getNode();
1083  if (!thissop) return getDir();
1085  OP_Utils::evalOpParm(result, thissop, "dir", cookparms.getCookTime(), 0);
1086  return result;
1087  }
1088  const UT_StringHolder & getPos2AttribName() const { return myPos2AttribName; }
1089  void setPos2AttribName(const UT_StringHolder & val) { myPos2AttribName = val; }
1091  {
1092  SOP_Node *thissop = cookparms.getNode();
1093  if (!thissop) return getPos2AttribName();
1095  OP_Utils::evalOpParm(result, thissop, "pos2attrib", cookparms.getCookTime(), 0);
1096  return result;
1097  }
1098  bool getUseConstrEdges() const { return myUseConstrEdges; }
1099  void setUseConstrEdges(bool val) { myUseConstrEdges = val; }
1100  bool opUseConstrEdges(const SOP_NodeVerb::CookParms &cookparms) const
1101  {
1102  SOP_Node *thissop = cookparms.getNode();
1103  if (!thissop) return getUseConstrEdges();
1104  bool result;
1105  OP_Utils::evalOpParm(result, thissop, "useconstredges", cookparms.getCookTime(), 0);
1106  return result;
1107  }
1108  const UT_StringHolder & getConstrEdges() const { return myConstrEdges; }
1109  void setConstrEdges(const UT_StringHolder & val) { myConstrEdges = val; }
1111  {
1112  SOP_Node *thissop = cookparms.getNode();
1113  if (!thissop) return getConstrEdges();
1115  OP_Utils::evalOpParm(result, thissop, "constredges", cookparms.getCookTime(), 0);
1116  return result;
1117  }
1118  bool getUseConstrPolys() const { return myUseConstrPolys; }
1119  void setUseConstrPolys(bool val) { myUseConstrPolys = val; }
1120  bool opUseConstrPolys(const SOP_NodeVerb::CookParms &cookparms) const
1121  {
1122  SOP_Node *thissop = cookparms.getNode();
1123  if (!thissop) return getUseConstrPolys();
1124  bool result;
1125  OP_Utils::evalOpParm(result, thissop, "useconstrpolys", cookparms.getCookTime(), 0);
1126  return result;
1127  }
1128  const UT_StringHolder & getConstrPolys() const { return myConstrPolys; }
1129  void setConstrPolys(const UT_StringHolder & val) { myConstrPolys = val; }
1131  {
1132  SOP_Node *thissop = cookparms.getNode();
1133  if (!thissop) return getConstrPolys();
1135  OP_Utils::evalOpParm(result, thissop, "constrpolys", cookparms.getCookTime(), 0);
1136  return result;
1137  }
1138  bool getIgnorePolyBridges() const { return myIgnorePolyBridges; }
1139  void setIgnorePolyBridges(bool val) { myIgnorePolyBridges = val; }
1140  bool opIgnorePolyBridges(const SOP_NodeVerb::CookParms &cookparms) const
1141  {
1142  SOP_Node *thissop = cookparms.getNode();
1143  if (!thissop) return getIgnorePolyBridges();
1144  bool result;
1145  OP_Utils::evalOpParm(result, thissop, "ignorepolybridges", cookparms.getCookTime(), 0);
1146  return result;
1147  }
1148  bool getUseSilhouettePolys() const { return myUseSilhouettePolys; }
1149  void setUseSilhouettePolys(bool val) { myUseSilhouettePolys = val; }
1150  bool opUseSilhouettePolys(const SOP_NodeVerb::CookParms &cookparms) const
1151  {
1152  SOP_Node *thissop = cookparms.getNode();
1153  if (!thissop) return getUseSilhouettePolys();
1154  bool result;
1155  OP_Utils::evalOpParm(result, thissop, "usesilhouettepolys", cookparms.getCookTime(), 0);
1156  return result;
1157  }
1158  const UT_StringHolder & getSilhouettePolys() const { return mySilhouettePolys; }
1159  void setSilhouettePolys(const UT_StringHolder & val) { mySilhouettePolys = val; }
1161  {
1162  SOP_Node *thissop = cookparms.getNode();
1163  if (!thissop) return getSilhouettePolys();
1165  OP_Utils::evalOpParm(result, thissop, "silhouettepolys", cookparms.getCookTime(), 0);
1166  return result;
1167  }
1168  bool getAllowConstrSplit() const { return myAllowConstrSplit; }
1169  void setAllowConstrSplit(bool val) { myAllowConstrSplit = val; }
1170  bool opAllowConstrSplit(const SOP_NodeVerb::CookParms &cookparms) const
1171  {
1172  SOP_Node *thissop = cookparms.getNode();
1173  if (!thissop) return getAllowConstrSplit();
1174  bool result;
1175  OP_Utils::evalOpParm(result, thissop, "allowconstrsplit", cookparms.getCookTime(), 0);
1176  return result;
1177  }
1178  bool getUseExactConstruction() const { return myUseExactConstruction; }
1179  void setUseExactConstruction(bool val) { myUseExactConstruction = val; }
1181  {
1182  SOP_Node *thissop = cookparms.getNode();
1183  if (!thissop) return getUseExactConstruction();
1184  bool result;
1185  OP_Utils::evalOpParm(result, thissop, "useexactconstruction", cookparms.getCookTime(), 0);
1186  return result;
1187  }
1188  bool getIgnoreNonConstrPts() const { return myIgnoreNonConstrPts; }
1189  void setIgnoreNonConstrPts(bool val) { myIgnoreNonConstrPts = val; }
1190  bool opIgnoreNonConstrPts(const SOP_NodeVerb::CookParms &cookparms) const
1191  {
1192  SOP_Node *thissop = cookparms.getNode();
1193  if (!thissop) return getIgnoreNonConstrPts();
1194  bool result;
1195  OP_Utils::evalOpParm(result, thissop, "ignorenonconstrpts", cookparms.getCookTime(), 0);
1196  return result;
1197  }
1198  bool getRemoveFromConvexHull() const { return myRemoveFromConvexHull; }
1199  void setRemoveFromConvexHull(bool val) { myRemoveFromConvexHull = val; }
1201  {
1202  SOP_Node *thissop = cookparms.getNode();
1203  if (!thissop) return getRemoveFromConvexHull();
1204  bool result;
1205  OP_Utils::evalOpParm(result, thissop, "removefromconvexhull", cookparms.getCookTime(), 0);
1206  return result;
1207  }
1208  bool getRemoveFromConstrPolys() const { return myRemoveFromConstrPolys; }
1209  void setRemoveFromConstrPolys(bool val) { myRemoveFromConstrPolys = val; }
1211  {
1212  SOP_Node *thissop = cookparms.getNode();
1213  if (!thissop) return getRemoveFromConstrPolys();
1214  bool result;
1215  OP_Utils::evalOpParm(result, thissop, "removefromconstrpolys", cookparms.getCookTime(), 0);
1216  return result;
1217  }
1218  bool getRemoveOutsideSilhouette() const { return myRemoveOutsideSilhouette; }
1219  void setRemoveOutsideSilhouette(bool val) { myRemoveOutsideSilhouette = val; }
1221  {
1222  SOP_Node *thissop = cookparms.getNode();
1223  if (!thissop) return getRemoveOutsideSilhouette();
1224  bool result;
1225  OP_Utils::evalOpParm(result, thissop, "removeoutsidesilhouette", cookparms.getCookTime(), 0);
1226  return result;
1227  }
1228  bool getRefine() const { return myRefine; }
1229  void setRefine(bool val) { myRefine = val; }
1230  bool opRefine(const SOP_NodeVerb::CookParms &cookparms) const
1231  {
1232  SOP_Node *thissop = cookparms.getNode();
1233  if (!thissop) return getRefine();
1234  bool result;
1235  OP_Utils::evalOpParm(result, thissop, "refine", cookparms.getCookTime(), 0);
1236  return result;
1237  }
1238  bool getAllowRefineConstrSplits() const { return myAllowRefineConstrSplits; }
1239  void setAllowRefineConstrSplits(bool val) { myAllowRefineConstrSplits = val; }
1241  {
1242  SOP_Node *thissop = cookparms.getNode();
1243  if (!thissop) return getAllowRefineConstrSplits();
1244  bool result;
1245  OP_Utils::evalOpParm(result, thissop, "allowrefineonstrsplit", cookparms.getCookTime(), 0);
1246  return result;
1247  }
1248  fpreal64 getEncroachAngle() const { return myEncroachAngle; }
1249  void setEncroachAngle(fpreal64 val) { myEncroachAngle = val; }
1251  {
1252  SOP_Node *thissop = cookparms.getNode();
1253  if (!thissop) return getEncroachAngle();
1254  fpreal64 result;
1255  OP_Utils::evalOpParm(result, thissop, "encroachangle", cookparms.getCookTime(), 0);
1256  return result;
1257  }
1258  fpreal64 getMinAngle() const { return myMinAngle; }
1259  void setMinAngle(fpreal64 val) { myMinAngle = val; }
1261  {
1262  SOP_Node *thissop = cookparms.getNode();
1263  if (!thissop) return getMinAngle();
1264  fpreal64 result;
1265  OP_Utils::evalOpParm(result, thissop, "minangle", cookparms.getCookTime(), 0);
1266  return result;
1267  }
1268  TriangleSize getTriangleSize() const { return TriangleSize(myTriangleSize); }
1269  void setTriangleSize(TriangleSize val) { myTriangleSize = int64(val); }
1271  {
1272  SOP_Node *thissop = cookparms.getNode();
1273  if (!thissop) return getTriangleSize();
1274  int64 result;
1275  OP_Utils::evalOpParm(result, thissop, "trianglesize", cookparms.getCookTime(), 0);
1276  return TriangleSize(result);
1277  }
1278  fpreal64 getMaxArea() const { return myMaxArea; }
1279  void setMaxArea(fpreal64 val) { myMaxArea = val; }
1281  {
1282  SOP_Node *thissop = cookparms.getNode();
1283  if (!thissop) return getMaxArea();
1284  fpreal64 result;
1285  OP_Utils::evalOpParm(result, thissop, "maxarea", cookparms.getCookTime(), 0);
1286  return result;
1287  }
1288  fpreal64 getTargetEdgeLength() const { return myTargetEdgeLength; }
1289  void setTargetEdgeLength(fpreal64 val) { myTargetEdgeLength = val; }
1291  {
1292  SOP_Node *thissop = cookparms.getNode();
1293  if (!thissop) return getTargetEdgeLength();
1294  fpreal64 result;
1295  OP_Utils::evalOpParm(result, thissop, "targetedgelength", cookparms.getCookTime(), 0);
1296  return result;
1297  }
1298  fpreal64 getMinEdgeLength() const { return myMinEdgeLength; }
1299  void setMinEdgeLength(fpreal64 val) { myMinEdgeLength = val; }
1301  {
1302  SOP_Node *thissop = cookparms.getNode();
1303  if (!thissop) return getMinEdgeLength();
1304  fpreal64 result;
1305  OP_Utils::evalOpParm(result, thissop, "minedgelength", cookparms.getCookTime(), 0);
1306  return result;
1307  }
1308  int64 getMaxNewPts() const { return myMaxNewPts; }
1309  void setMaxNewPts(int64 val) { myMaxNewPts = val; }
1311  {
1312  SOP_Node *thissop = cookparms.getNode();
1313  if (!thissop) return getMaxNewPts();
1314  int64 result;
1315  OP_Utils::evalOpParm(result, thissop, "maxnewpts", cookparms.getCookTime(), 0);
1316  return result;
1317  }
1318  int64 getNumLloydSteps() const { return myNumLloydSteps; }
1319  void setNumLloydSteps(int64 val) { myNumLloydSteps = val; }
1321  {
1322  SOP_Node *thissop = cookparms.getNode();
1323  if (!thissop) return getNumLloydSteps();
1324  int64 result;
1325  OP_Utils::evalOpParm(result, thissop, "lloydsteps", cookparms.getCookTime(), 0);
1326  return result;
1327  }
1328  bool getAllowMovingInteriorInputPts() const { return myAllowMovingInteriorInputPts; }
1329  void setAllowMovingInteriorInputPts(bool val) { myAllowMovingInteriorInputPts = val; }
1331  {
1332  SOP_Node *thissop = cookparms.getNode();
1333  if (!thissop) return getAllowMovingInteriorInputPts();
1334  bool result;
1335  OP_Utils::evalOpParm(result, thissop, "allowmovinginteriorpts", cookparms.getCookTime(), 0);
1336  return result;
1337  }
1338  bool getRestorePos() const { return myRestorePos; }
1339  void setRestorePos(bool val) { myRestorePos = val; }
1340  bool opRestorePos(const SOP_NodeVerb::CookParms &cookparms) const
1341  {
1342  SOP_Node *thissop = cookparms.getNode();
1343  if (!thissop) return getRestorePos();
1344  bool result;
1345  OP_Utils::evalOpParm(result, thissop, "restorepos", cookparms.getCookTime(), 0);
1346  return result;
1347  }
1348  bool getKeepPrims() const { return myKeepPrims; }
1349  void setKeepPrims(bool val) { myKeepPrims = val; }
1350  bool opKeepPrims(const SOP_NodeVerb::CookParms &cookparms) const
1351  {
1352  SOP_Node *thissop = cookparms.getNode();
1353  if (!thissop) return getKeepPrims();
1354  bool result;
1355  OP_Utils::evalOpParm(result, thissop, "keepprims", cookparms.getCookTime(), 0);
1356  return result;
1357  }
1358  bool getUpdateNormals() const { return myUpdateNormals; }
1359  void setUpdateNormals(bool val) { myUpdateNormals = val; }
1360  bool opUpdateNormals(const SOP_NodeVerb::CookParms &cookparms) const
1361  {
1362  SOP_Node *thissop = cookparms.getNode();
1363  if (!thissop) return getUpdateNormals();
1364  bool result;
1365  OP_Utils::evalOpParm(result, thissop, "updatenmls", cookparms.getCookTime(), 0);
1366  return result;
1367  }
1368  bool getRemoveUnusedPts() const { return myRemoveUnusedPts; }
1369  void setRemoveUnusedPts(bool val) { myRemoveUnusedPts = val; }
1370  bool opRemoveUnusedPts(const SOP_NodeVerb::CookParms &cookparms) const
1371  {
1372  SOP_Node *thissop = cookparms.getNode();
1373  if (!thissop) return getRemoveUnusedPts();
1374  bool result;
1375  OP_Utils::evalOpParm(result, thissop, "removeunusedpoints", cookparms.getCookTime(), 0);
1376  return result;
1377  }
1378  bool getRemoveDuplicatePts() const { return myRemoveDuplicatePts; }
1379  void setRemoveDuplicatePts(bool val) { myRemoveDuplicatePts = val; }
1380  bool opRemoveDuplicatePts(const SOP_NodeVerb::CookParms &cookparms) const
1381  {
1382  SOP_Node *thissop = cookparms.getNode();
1383  if (!thissop) return getRemoveDuplicatePts();
1384  bool result;
1385  OP_Utils::evalOpParm(result, thissop, "removeduplicatepoints", cookparms.getCookTime(), 0);
1386  return result;
1387  }
1388  bool getUseConstrSplitPtsGrp() const { return myUseConstrSplitPtsGrp; }
1389  void setUseConstrSplitPtsGrp(bool val) { myUseConstrSplitPtsGrp = val; }
1391  {
1392  SOP_Node *thissop = cookparms.getNode();
1393  if (!thissop) return getUseConstrSplitPtsGrp();
1394  bool result;
1395  OP_Utils::evalOpParm(result, thissop, "usecontrsplitptgrp", cookparms.getCookTime(), 0);
1396  return result;
1397  }
1398  const UT_StringHolder & getConstrSplitPtsGrp() const { return myConstrSplitPtsGrp; }
1399  void setConstrSplitPtsGrp(const UT_StringHolder & val) { myConstrSplitPtsGrp = val; }
1401  {
1402  SOP_Node *thissop = cookparms.getNode();
1403  if (!thissop) return getConstrSplitPtsGrp();
1405  OP_Utils::evalOpParm(result, thissop, "constrsplitptgrp", cookparms.getCookTime(), 0);
1406  return result;
1407  }
1408  bool getUseConstrdEdges() const { return myUseConstrdEdges; }
1409  void setUseConstrdEdges(bool val) { myUseConstrdEdges = val; }
1410  bool opUseConstrdEdges(const SOP_NodeVerb::CookParms &cookparms) const
1411  {
1412  SOP_Node *thissop = cookparms.getNode();
1413  if (!thissop) return getUseConstrdEdges();
1414  bool result;
1415  OP_Utils::evalOpParm(result, thissop, "useconstrdedges", cookparms.getCookTime(), 0);
1416  return result;
1417  }
1418  const UT_StringHolder & getConstrdEdges() const { return myConstrdEdges; }
1419  void setConstrdEdges(const UT_StringHolder & val) { myConstrdEdges = val; }
1421  {
1422  SOP_Node *thissop = cookparms.getNode();
1423  if (!thissop) return getConstrdEdges();
1425  OP_Utils::evalOpParm(result, thissop, "constrdedges", cookparms.getCookTime(), 0);
1426  return result;
1427  }
1428  int64 getRandomSeed() const { return myRandomSeed; }
1429  void setRandomSeed(int64 val) { myRandomSeed = val; }
1431  {
1432  SOP_Node *thissop = cookparms.getNode();
1433  if (!thissop) return getRandomSeed();
1434  int64 result;
1435  OP_Utils::evalOpParm(result, thissop, "randseed", cookparms.getCookTime(), 0);
1436  return result;
1437  }
1438 
1439 private:
1440  UT_StringHolder myPoints;
1441  int64 myPlanePosSrc;
1442  UT_Vector3D myOrigin;
1443  fpreal64 myDist;
1444  UT_Vector3D myDir;
1445  UT_StringHolder myPos2AttribName;
1446  bool myUseConstrEdges;
1447  UT_StringHolder myConstrEdges;
1448  bool myUseConstrPolys;
1449  UT_StringHolder myConstrPolys;
1450  bool myIgnorePolyBridges;
1451  bool myUseSilhouettePolys;
1452  UT_StringHolder mySilhouettePolys;
1453  bool myAllowConstrSplit;
1454  bool myUseExactConstruction;
1455  bool myIgnoreNonConstrPts;
1456  bool myRemoveFromConvexHull;
1457  bool myRemoveFromConstrPolys;
1458  bool myRemoveOutsideSilhouette;
1459  bool myRefine;
1460  bool myAllowRefineConstrSplits;
1461  fpreal64 myEncroachAngle;
1462  fpreal64 myMinAngle;
1463  int64 myTriangleSize;
1464  fpreal64 myMaxArea;
1465  fpreal64 myTargetEdgeLength;
1466  fpreal64 myMinEdgeLength;
1467  int64 myMaxNewPts;
1468  int64 myNumLloydSteps;
1469  bool myAllowMovingInteriorInputPts;
1470  bool myRestorePos;
1471  bool myKeepPrims;
1472  bool myUpdateNormals;
1473  bool myRemoveUnusedPts;
1474  bool myRemoveDuplicatePts;
1475  bool myUseConstrSplitPtsGrp;
1476  UT_StringHolder myConstrSplitPtsGrp;
1477  bool myUseConstrdEdges;
1478  UT_StringHolder myConstrdEdges;
1479  int64 myRandomSeed;
1480 
1481 };
UT_StringHolder opConstrPolys(const SOP_NodeVerb::CookParms &cookparms) const
TriangleSize opTriangleSize(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 opMaxArea(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 opMinEdgeLength(const SOP_NodeVerb::CookParms &cookparms) const
PlanePosSrc opPlanePosSrc(const SOP_NodeVerb::CookParms &cookparms) const
void setConstrPolys(const UT_StringHolder &val)
void buildFromOp(const OP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
static void saveData(std::ostream &os, UT_Vector3D v)
bool opUseConstrEdges(const SOP_NodeVerb::CookParms &cookparms) const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector2D &value) override
int int32
Definition: SYS_Types.h:39
SOP_Node * getNode() const
Definition: SOP_NodeVerb.h:347
void loadFromOpSubclass(const LoadParms &loadparms) override
int64 opRandomSeed(const SOP_NodeVerb::CookParms &cookparms) const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix4D &value) const override
UT_StringHolder opConstrdEdges(const SOP_NodeVerb::CookParms &cookparms) const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector3D &value) override
static void loadData(UT_IStream &is, UT_Matrix2D &v)
const char * getNestParmName(TempIndex fieldnum) const override
bool opKeepPrims(const SOP_NodeVerb::CookParms &cookparms) const
exint bread(int32 *buffer, exint asize=1)
GLboolean * data
Definition: glcorearb.h:131
static void loadData(UT_IStream &is, UT_Vector4I &v)
void copyFrom(const OP_NodeParms *src) override
GT_API const UT_StringHolder time
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector4.h:493
bool opRemoveFromConvexHull(const SOP_NodeVerb::CookParms &cookparms) const
const GLdouble * v
Definition: glcorearb.h:837
static void saveData(std::ostream &os, UT_SharedPtr< UT_Ramp > s)
fpreal getTime() const
Definition: OP_Context.h:62
UT_StringHolder opPos2AttribName(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 opMinAngle(const SOP_NodeVerb::CookParms &cookparms) const
bool operator!=(const SOP_Triangulate2D_3_0Parms &src) const
static void saveData(std::ostream &os, UT_Matrix4D v)
const UT_StringHolder & getConstrEdges() const
const OP_Context & context() const
Definition: OP_NodeParms.h:97
bool opAllowConstrSplit(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
SYS_FORCE_INLINE const char * buffer() const
GLdouble s
Definition: glad.h:3009
bool opUpdateNormals(const SOP_NodeVerb::CookParms &cookparms) const
void setPoints(const UT_StringHolder &val)
static void loadData(UT_IStream &is, UT_StringHolder &v)
An output stream object that owns its own string buffer storage.
static void saveData(std::ostream &os, UT_Matrix3D v)
exint getNestNumParms(TempIndex idx) const override
ParmType getNestParmType(TempIndex fieldnum) const override
**But if you need a result
Definition: thread.h:613
void setNestParmValue(TempIndex idx, TempIndex instance, const exint &value) override
void doGetParmValue(TempIndex idx, TempIndex instance, T &value) const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_SharedPtr< UT_Ramp > &value) override
void getNestParmValue(TempIndex idx, TempIndex instance, UT_StringHolder &value) const override
void save(std::ostream &os) const
static void loadData(UT_IStream &is, bool &v)
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.
bool opAllowRefineConstrSplits(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, UT_Matrix4D &v)
void setNestParmValue(TempIndex idx, TempIndex instance, const fpreal &value) override
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix3D &value) override
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector4.h:491
UT_Vector3D opOrigin(const SOP_NodeVerb::CookParms &cookparms) const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix4D &value) override
bool opAllowMovingInteriorInputPts(const SOP_NodeVerb::CookParms &cookparms) const
void setNestParmValue(TempIndex idx, TempIndex instance, const PRM_DataItemHandle &value) override
fpreal64 opEncroachAngle(const SOP_NodeVerb::CookParms &cookparms) const
double fpreal64
Definition: SYS_Types.h:201
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector2.h:423
fpreal64 opTargetEdgeLength(const SOP_NodeVerb::CookParms &cookparms) const
bool operator==(const BaseDimensions< T > &a, const BaseDimensions< Y > &b)
Definition: Dimensions.h:137
static void saveData(std::ostream &os, UT_Matrix2D v)
const UT_StringHolder & getPoints() const
exint length() const
void setSilhouettePolys(const UT_StringHolder &val)
SYS_FORCE_INLINE const char * buffer() const
std::shared_ptr< T > UT_SharedPtr
Wrapper around std::shared_ptr.
Definition: UT_SharedPtr.h:36
UT_StringHolder opConstrSplitPtsGrp(const SOP_NodeVerb::CookParms &cookparms) const
constexpr SYS_FORCE_INLINE T & z() noexcept
Definition: UT_Vector4.h:495
bool opRemoveOutsideSilhouette(const SOP_NodeVerb::CookParms &cookparms) const
void setConstrdEdges(const UT_StringHolder &val)
bool opRemoveFromConstrPolys(const SOP_NodeVerb::CookParms &cookparms) const
const OP_GraphProxy * graph() const
Definition: OP_NodeParms.h:94
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_StringHolder &value) override
#define SYS_FORCE_INLINE
Definition: SYS_Inline.h:45
SYS_FORCE_INLINE UT_StringHolder getToken(PlanePosSrc enum_value)
static void loadData(UT_IStream &is, UT_Vector3D &v)
static void loadData(UT_IStream &is, UT_Vector2D &v)
long long int64
Definition: SYS_Types.h:116
const UT_StringHolder & getSilhouettePolys() const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
bool opRefine(const SOP_NodeVerb::CookParms &cookparms) const
UT_Vector3T< fpreal64 > UT_Vector3D
static void loadData(UT_IStream &is, int64 &v)
const UT_StringHolder & getPos2AttribName() const
const UT_StringHolder & getConstrdEdges() const
void setConstrEdges(const UT_StringHolder &val)
virtual void evalOpParm(int64 &v, NodeIdx node, const char *parmname, fpreal time, DEP_MicroNode *depnode) const =0
static void saveData(std::ostream &os, PRM_DataItemHandle s)
const UT_StringHolder & getConstrSplitPtsGrp() const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector4D &value) override
static void loadData(UT_IStream &is, UT_Vector3I &v)
static void saveData(std::ostream &os, UT_Vector4D v)
void saveBinary(std::ostream &os) const
Save string to binary stream.
Definition: UT_String.h:296
bool operator==(const SOP_Triangulate2D_3_0Parms &src) const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector4D &value) const override
GT_API const UT_StringHolder version
static void saveData(std::ostream &os, int64 v)
static void loadData(UT_IStream &is, fpreal64 &v)
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix2D &value) override
static void saveData(std::ostream &os, UT_Vector2D v)
UT_Vector3D opDir(const SOP_NodeVerb::CookParms &cookparms) const
bool opIgnorePolyBridges(const SOP_NodeVerb::CookParms &cookparms) const
void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
bool opUseExactConstruction(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opPoints(const SOP_NodeVerb::CookParms &cookparms) const
bool opUseConstrSplitPtsGrp(const SOP_NodeVerb::CookParms &cookparms) const
int64 opNumLloydSteps(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 opDist(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, UT_Matrix3D &v)
bool opRestorePos(const SOP_NodeVerb::CookParms &cookparms) const
void setPos2AttribName(const UT_StringHolder &val)
bool opRemoveDuplicatePts(const SOP_NodeVerb::CookParms &cookparms) const
bool opUseConstrdEdges(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opSilhouettePolys(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 fpreal
Definition: SYS_Types.h:277
DEP_MicroNode * depnode() const
Definition: OP_NodeParms.h:99
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix2D &value) const override
LeafData & operator=(const LeafData &)=delete
Utility class for containing a color ramp.
Definition: UT_Ramp.h:92
bool opRemoveUnusedPts(const SOP_NodeVerb::CookParms &cookparms) const
bool opUseSilhouettePolys(const SOP_NodeVerb::CookParms &cookparms) const
constexpr SYS_FORCE_INLINE T & w() noexcept
Definition: UT_Vector4.h:497
const UT_StringHolder & getConstrPolys() const
GLuint GLfloat * val
Definition: glcorearb.h:1608
#define SOP_API
Definition: SOP_API.h:10
void getNestParmValue(TempIndex idx, TempIndex instance, exint &value) const override
fpreal getCookTime() const
Definition: SOP_NodeVerb.h:361
void getNestParmValue(TempIndex idx, TempIndex instance, UT_SharedPtr< UT_Ramp > &value) const override
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector2D &value) const override
static void loadData(UT_IStream &is, UT_SharedPtr< UT_Ramp > &v)
const char * findChar(int c) const
Definition: UT_String.h:1395
#define UT_ASSERT(ZZ)
Definition: UT_Assert.h:156
Definition: core.h:1131
void getNestParmValue(TempIndex idx, TempIndex instance, fpreal &value) const override
GLboolean r
Definition: glcorearb.h:1222
bool opIgnoreNonConstrPts(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, UT_Vector2I &v)
static void saveData(std::ostream &os, fpreal64 v)
bool opUseConstrPolys(const SOP_NodeVerb::CookParms &cookparms) const
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector3.h:665
static void saveData(std::ostream &os, UT_StringHolder s)
bool isParmColorRamp(exint idx) const override
type
Definition: core.h:1059
static void saveData(std::ostream &os, bool v)
static void loadData(UT_IStream &is, UT_Vector4D &v)
static void loadData(UT_IStream &is, PRM_DataItemHandle &v)
UT_StringHolder opConstrEdges(const SOP_NodeVerb::CookParms &cookparms) const
int64 opMaxNewPts(const SOP_NodeVerb::CookParms &cookparms) const
UT_SharedPtr< const PRM_DataItem > PRM_DataItemHandle
Definition: PRM_Parm.h:97
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector2.h:425
SYS_FORCE_INLINE bool isstring() const
void setConstrSplitPtsGrp(const UT_StringHolder &val)
SYS_FORCE_INLINE void strncpy(const char *src, exint maxlen)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector3D &value) const override
void doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
GLenum src
Definition: glcorearb.h:1793
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector3.h:663