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 <OP/OP_GraphProxy.h>
9 
10 #include <OP/OP_Utils.h>
11 #include <PRM/PRM_Parm.h>
12 #include <UT/UT_IStream.h>
13 #include <UT/UT_NTStreamUtil.h>
14 #include <UT/UT_Ramp.h>
15 #include <UT/UT_SharedPtr.h>
16 #include <UT/UT_StringHolder.h>
17 #include <UT/UT_StringStream.h>
18 #include <UT/UT_VectorTypes.h>
19 #include <UT/UT_EnvControl.h>
20 #include <SYS/SYS_Types.h>
21 
22 class DEP_MicroNode;
23 namespace SOP_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 
167  if (baseGetSignature() != src.baseGetSignature()) return false;
168 
169  return true;
170  }
172  {
173  return !operator==(src);
174  }
177 
178 
179 
180  void buildFromOp(const OP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
181  {
182  myPoints = ""_UTsh;
183  if (true)
184  graph->evalOpParm(myPoints, nodeidx, "points", time, graph->isDirect()?nullptr:depnode);
185  myPlanePosSrc = 0;
186  if (true)
187  graph->evalOpParm(myPlanePosSrc, nodeidx, "planepossrc", time, graph->isDirect()?nullptr:depnode);
188  myOrigin = UT_Vector3D(0,0,0);
189  if (true && ( (true&&!(((int64(getPlanePosSrc())!=1)))) ) )
190  graph->evalOpParm(myOrigin, nodeidx, "origin", time, graph->isDirect()?nullptr:depnode);
191  myDist = 0;
192  if (true && ( (true&&!(((int64(getPlanePosSrc())!=1)))) ) )
193  graph->evalOpParm(myDist, nodeidx, "dist", time, graph->isDirect()?nullptr:depnode);
194  myDir = UT_Vector3D(0,1,0);
195  if (true && ( (true&&!(((int64(getPlanePosSrc())!=1)))) ) )
196  graph->evalOpParm(myDir, nodeidx, "dir", time, graph->isDirect()?nullptr:depnode);
197  myPos2AttribName = ""_UTsh;
198  if (true && ( (true&&!(((int64(getPlanePosSrc())!=2)))) ) )
199  graph->evalOpParm(myPos2AttribName, nodeidx, "pos2attrib", time, graph->isDirect()?nullptr:depnode);
200  myUseConstrEdges = false;
201  if (true)
202  graph->evalOpParm(myUseConstrEdges, nodeidx, "useconstredges", time, graph->isDirect()?nullptr:depnode);
203  myConstrEdges = ""_UTsh;
204  if (true && ( (true&&!(((getUseConstrEdges()==0)))) ) )
205  graph->evalOpParm(myConstrEdges, nodeidx, "constredges", time, graph->isDirect()?nullptr:depnode);
206  myUseConstrPolys = false;
207  if (true)
208  graph->evalOpParm(myUseConstrPolys, nodeidx, "useconstrpolys", time, graph->isDirect()?nullptr:depnode);
209  myConstrPolys = ""_UTsh;
210  if (true && ( (true&&!(((getUseConstrPolys()==0)))) ) )
211  graph->evalOpParm(myConstrPolys, nodeidx, "constrpolys", time, graph->isDirect()?nullptr:depnode);
212  myIgnorePolyBridges = false;
213  if (true && ( (true&&!(((getUseConstrPolys()==0)))) ) )
214  graph->evalOpParm(myIgnorePolyBridges, nodeidx, "ignorepolybridges", time, graph->isDirect()?nullptr:depnode);
215  myUseSilhouettePolys = false;
216  if (true)
217  graph->evalOpParm(myUseSilhouettePolys, nodeidx, "usesilhouettepolys", time, graph->isDirect()?nullptr:depnode);
218  mySilhouettePolys = ""_UTsh;
219  if (true && ( (true&&!(((getUseSilhouettePolys()==0)))) ) )
220  graph->evalOpParm(mySilhouettePolys, nodeidx, "silhouettepolys", time, graph->isDirect()?nullptr:depnode);
221  myAllowConstrSplit = true;
222  if (true)
223  graph->evalOpParm(myAllowConstrSplit, nodeidx, "allowconstrsplit", time, graph->isDirect()?nullptr:depnode);
224  myUseExactConstruction = false;
225  if (true && ( (true&&!(((getAllowConstrSplit()==0)))) ) )
226  graph->evalOpParm(myUseExactConstruction, nodeidx, "useexactconstruction", time, graph->isDirect()?nullptr:depnode);
227  myIgnoreNonConstrPts = false;
228  if (true && ( (true&&!(((getUseConstrEdges()==0)&&(getUseConstrPolys()==0)&&(getUseSilhouettePolys()==0)))) ) )
229  graph->evalOpParm(myIgnoreNonConstrPts, nodeidx, "ignorenonconstrpts", time, graph->isDirect()?nullptr:depnode);
230  myRemoveFromConvexHull = false;
231  if (true && ( (true&&!(((getUseConstrEdges()==0)&&(getUseConstrPolys()==0)&&(getUseSilhouettePolys()==0)))) ) )
232  graph->evalOpParm(myRemoveFromConvexHull, nodeidx, "removefromconvexhull", time, graph->isDirect()?nullptr:depnode);
233  myRemoveFromConstrPolys = false;
234  if (true && ( (true&&!(((getUseConstrPolys()==0)))) ) )
235  graph->evalOpParm(myRemoveFromConstrPolys, nodeidx, "removefromconstrpolys", time, graph->isDirect()?nullptr:depnode);
236  myRemoveOutsideSilhouette = false;
237  if (true && ( (true&&!(((getUseSilhouettePolys()==0)))) ) )
238  graph->evalOpParm(myRemoveOutsideSilhouette, nodeidx, "removeoutsidesilhouette", time, graph->isDirect()?nullptr:depnode);
239  myRefine = false;
240  if (true)
241  graph->evalOpParm(myRefine, nodeidx, "refine", time, graph->isDirect()?nullptr:depnode);
242  myAllowRefineConstrSplits = true;
243  if (true)
244  graph->evalOpParm(myAllowRefineConstrSplits, nodeidx, "allowrefineonstrsplit", time, graph->isDirect()?nullptr:depnode);
245  myEncroachAngle = 180;
246  if (true && ( (true&&!(((getAllowRefineConstrSplits()==1)))) ) )
247  graph->evalOpParm(myEncroachAngle, nodeidx, "encroachangle", time, graph->isDirect()?nullptr:depnode);
248  myMinAngle = 0;
249  if (true && ( (true&&!(((getRefine()==0)))) ) )
250  graph->evalOpParm(myMinAngle, nodeidx, "minangle", time, graph->isDirect()?nullptr:depnode);
251  myTriangleSize = 0;
252  if (true && ( (true&&!(((getRefine()==0)))) ) )
253  graph->evalOpParm(myTriangleSize, nodeidx, "trianglesize", time, graph->isDirect()?nullptr:depnode);
254  myMaxArea = 10000;
255  if (true && ( (true&&!(((int64(getTriangleSize())!=1))||((getRefine()==0)))) ) )
256  graph->evalOpParm(myMaxArea, nodeidx, "maxarea", time, graph->isDirect()?nullptr:depnode);
257  myTargetEdgeLength = 100;
258  if (true && ( (true&&!(((int64(getTriangleSize())!=2))||((getRefine()==0)))) ) )
259  graph->evalOpParm(myTargetEdgeLength, nodeidx, "targetedgelength", time, graph->isDirect()?nullptr:depnode);
260  myMinEdgeLength = 0.0001;
261  if (true && ( (true&&!(((getRefine()==0)))) ) )
262  graph->evalOpParm(myMinEdgeLength, nodeidx, "minedgelength", time, graph->isDirect()?nullptr:depnode);
263  myMaxNewPts = 5000;
264  if (true && ( (true&&!(((getRefine()==0)))) ) )
265  graph->evalOpParm(myMaxNewPts, nodeidx, "maxnewpts", time, graph->isDirect()?nullptr:depnode);
266  myNumLloydSteps = 0;
267  if (true && ( (true&&!(((getRefine()==0)))) ) )
268  graph->evalOpParm(myNumLloydSteps, nodeidx, "lloydsteps", time, graph->isDirect()?nullptr:depnode);
269  myAllowMovingInteriorInputPts = false;
270  if (true && ( (true&&!(((getRefine()==0))||((int64(getNumLloydSteps())==0)))) ) )
271  graph->evalOpParm(myAllowMovingInteriorInputPts, nodeidx, "allowmovinginteriorpts", time, graph->isDirect()?nullptr:depnode);
272  myRestorePos = false;
273  if (true)
274  graph->evalOpParm(myRestorePos, nodeidx, "restorepos", time, graph->isDirect()?nullptr:depnode);
275  myKeepPrims = false;
276  if (true)
277  graph->evalOpParm(myKeepPrims, nodeidx, "keepprims", time, graph->isDirect()?nullptr:depnode);
278  myUpdateNormals = true;
279  if (true)
280  graph->evalOpParm(myUpdateNormals, nodeidx, "updatenmls", time, graph->isDirect()?nullptr:depnode);
281  myRemoveUnusedPts = true;
282  if (true)
283  graph->evalOpParm(myRemoveUnusedPts, nodeidx, "removeunusedpoints", time, graph->isDirect()?nullptr:depnode);
284  myRemoveDuplicatePts = true;
285  if (true)
286  graph->evalOpParm(myRemoveDuplicatePts, nodeidx, "removeduplicatepoints", time, graph->isDirect()?nullptr:depnode);
287  myUseConstrSplitPtsGrp = false;
288  if (true && ( (true&&!(((getAllowConstrSplit()==0)))) ) )
289  graph->evalOpParm(myUseConstrSplitPtsGrp, nodeidx, "usecontrsplitptgrp", time, graph->isDirect()?nullptr:depnode);
290  myConstrSplitPtsGrp = "constrsplitpts"_UTsh;
291  if (true && ( (true&&!(((getUseConstrSplitPtsGrp()==0)))) ) )
292  graph->evalOpParm(myConstrSplitPtsGrp, nodeidx, "constrsplitptgrp", time, graph->isDirect()?nullptr:depnode);
293  myUseConstrdEdges = false;
294  if (true)
295  graph->evalOpParm(myUseConstrdEdges, nodeidx, "useconstrdedges", time, graph->isDirect()?nullptr:depnode);
296  myConstrdEdges = "constrdedges"_UTsh;
297  if (true && ( (true&&!(((getUseConstrdEdges()==0)))) ) )
298  graph->evalOpParm(myConstrdEdges, nodeidx, "constrdedges", time, graph->isDirect()?nullptr:depnode);
299  myRandomSeed = 5678;
300  if (true)
301  graph->evalOpParm(myRandomSeed, nodeidx, "randseed", time, graph->isDirect()?nullptr:depnode);
302 
303  }
304 
305 
306  void loadFromOpSubclass(const LoadParms &loadparms) override
307  {
308  buildFromOp(loadparms.graph(), loadparms.nodeIdx(), loadparms.context().getTime(), loadparms.depnode());
309  }
310 
311 
312  void copyFrom(const OP_NodeParms *src) override
313  {
314  *this = *((const SOP_Triangulate2D_3_0Parms *)src);
315  }
316 
317  template <typename T>
318  void
319  doGetParmValue(TempIndex idx, TempIndex instance, T &value) const
320  {
321  if (idx.size() < 1)
322  return;
323  UT_ASSERT(idx.size() == instance.size()+1);
324  if (idx.size() != instance.size()+1)
325  return;
326  switch (idx[0])
327  {
328  case 0:
329  coerceValue(value, myPoints);
330  break;
331  case 1:
332  coerceValue(value, myPlanePosSrc);
333  break;
334  case 2:
335  coerceValue(value, myOrigin);
336  break;
337  case 3:
338  coerceValue(value, myDist);
339  break;
340  case 4:
341  coerceValue(value, myDir);
342  break;
343  case 5:
344  coerceValue(value, myPos2AttribName);
345  break;
346  case 6:
347  coerceValue(value, myUseConstrEdges);
348  break;
349  case 7:
350  coerceValue(value, myConstrEdges);
351  break;
352  case 8:
353  coerceValue(value, myUseConstrPolys);
354  break;
355  case 9:
356  coerceValue(value, myConstrPolys);
357  break;
358  case 10:
359  coerceValue(value, myIgnorePolyBridges);
360  break;
361  case 11:
362  coerceValue(value, myUseSilhouettePolys);
363  break;
364  case 12:
365  coerceValue(value, mySilhouettePolys);
366  break;
367  case 13:
368  coerceValue(value, myAllowConstrSplit);
369  break;
370  case 14:
371  coerceValue(value, myUseExactConstruction);
372  break;
373  case 15:
374  coerceValue(value, myIgnoreNonConstrPts);
375  break;
376  case 16:
377  coerceValue(value, myRemoveFromConvexHull);
378  break;
379  case 17:
380  coerceValue(value, myRemoveFromConstrPolys);
381  break;
382  case 18:
383  coerceValue(value, myRemoveOutsideSilhouette);
384  break;
385  case 19:
386  coerceValue(value, myRefine);
387  break;
388  case 20:
389  coerceValue(value, myAllowRefineConstrSplits);
390  break;
391  case 21:
392  coerceValue(value, myEncroachAngle);
393  break;
394  case 22:
395  coerceValue(value, myMinAngle);
396  break;
397  case 23:
398  coerceValue(value, myTriangleSize);
399  break;
400  case 24:
401  coerceValue(value, myMaxArea);
402  break;
403  case 25:
404  coerceValue(value, myTargetEdgeLength);
405  break;
406  case 26:
407  coerceValue(value, myMinEdgeLength);
408  break;
409  case 27:
410  coerceValue(value, myMaxNewPts);
411  break;
412  case 28:
413  coerceValue(value, myNumLloydSteps);
414  break;
415  case 29:
416  coerceValue(value, myAllowMovingInteriorInputPts);
417  break;
418  case 30:
419  coerceValue(value, myRestorePos);
420  break;
421  case 31:
422  coerceValue(value, myKeepPrims);
423  break;
424  case 32:
425  coerceValue(value, myUpdateNormals);
426  break;
427  case 33:
428  coerceValue(value, myRemoveUnusedPts);
429  break;
430  case 34:
431  coerceValue(value, myRemoveDuplicatePts);
432  break;
433  case 35:
434  coerceValue(value, myUseConstrSplitPtsGrp);
435  break;
436  case 36:
437  coerceValue(value, myConstrSplitPtsGrp);
438  break;
439  case 37:
440  coerceValue(value, myUseConstrdEdges);
441  break;
442  case 38:
443  coerceValue(value, myConstrdEdges);
444  break;
445  case 39:
446  coerceValue(value, myRandomSeed);
447  break;
448 
449  }
450  }
451 
452  bool isParmColorRamp(exint idx) const override
453  {
454  switch (idx)
455  {
456 
457  }
458  return false;
459  }
460 
461  void getNestParmValue(TempIndex idx, TempIndex instance, exint &value) const override
462  { doGetParmValue(idx, instance, value); }
463  void getNestParmValue(TempIndex idx, TempIndex instance, fpreal &value) const override
464  { doGetParmValue(idx, instance, value); }
465  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector2D &value) const override
466  { doGetParmValue(idx, instance, value); }
467  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector3D &value) const override
468  { doGetParmValue(idx, instance, value); }
469  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector4D &value) const override
470  { doGetParmValue(idx, instance, value); }
471  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix2D &value) const override
472  { doGetParmValue(idx, instance, value); }
473  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
474  { doGetParmValue(idx, instance, value); }
475  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix4D &value) const override
476  { doGetParmValue(idx, instance, value); }
477  void getNestParmValue(TempIndex idx, TempIndex instance, UT_StringHolder &value) const override
478  { doGetParmValue(idx, instance, value); }
479  void getNestParmValue(TempIndex idx, TempIndex instance, UT_SharedPtr<UT_Ramp> &value) const override
480  { doGetParmValue(idx, instance, value); }
481  void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
482  { doGetParmValue(idx, instance, value); }
483 
484  template <typename T>
485  void
486  doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
487  {
488  if (idx.size() < 1)
489  return;
490  UT_ASSERT(idx.size() == instance.size()+1);
491  if (idx.size() != instance.size()+1)
492  return;
493  switch (idx[0])
494  {
495  case 0:
496  coerceValue(myPoints, ( ( value ) ));
497  break;
498  case 1:
499  coerceValue(myPlanePosSrc, clampMinValue(0, clampMaxValue(2, value ) ));
500  break;
501  case 2:
502  coerceValue(myOrigin, ( ( value ) ));
503  break;
504  case 3:
505  coerceValue(myDist, ( ( value ) ));
506  break;
507  case 4:
508  coerceValue(myDir, ( ( value ) ));
509  break;
510  case 5:
511  coerceValue(myPos2AttribName, ( ( value ) ));
512  break;
513  case 6:
514  coerceValue(myUseConstrEdges, ( ( value ) ));
515  break;
516  case 7:
517  coerceValue(myConstrEdges, ( ( value ) ));
518  break;
519  case 8:
520  coerceValue(myUseConstrPolys, ( ( value ) ));
521  break;
522  case 9:
523  coerceValue(myConstrPolys, ( ( value ) ));
524  break;
525  case 10:
526  coerceValue(myIgnorePolyBridges, ( ( value ) ));
527  break;
528  case 11:
529  coerceValue(myUseSilhouettePolys, ( ( value ) ));
530  break;
531  case 12:
532  coerceValue(mySilhouettePolys, ( ( value ) ));
533  break;
534  case 13:
535  coerceValue(myAllowConstrSplit, ( ( value ) ));
536  break;
537  case 14:
538  coerceValue(myUseExactConstruction, ( ( value ) ));
539  break;
540  case 15:
541  coerceValue(myIgnoreNonConstrPts, ( ( value ) ));
542  break;
543  case 16:
544  coerceValue(myRemoveFromConvexHull, ( ( value ) ));
545  break;
546  case 17:
547  coerceValue(myRemoveFromConstrPolys, ( ( value ) ));
548  break;
549  case 18:
550  coerceValue(myRemoveOutsideSilhouette, ( ( value ) ));
551  break;
552  case 19:
553  coerceValue(myRefine, ( ( value ) ));
554  break;
555  case 20:
556  coerceValue(myAllowRefineConstrSplits, ( ( value ) ));
557  break;
558  case 21:
559  coerceValue(myEncroachAngle, clampMinValue(90, clampMaxValue(180, value ) ));
560  break;
561  case 22:
562  coerceValue(myMinAngle, clampMinValue(0, ( value ) ));
563  break;
564  case 23:
565  coerceValue(myTriangleSize, clampMinValue(0, clampMaxValue(2, value ) ));
566  break;
567  case 24:
568  coerceValue(myMaxArea, clampMinValue(0.0000001, ( value ) ));
569  break;
570  case 25:
571  coerceValue(myTargetEdgeLength, clampMinValue(0.0001, ( value ) ));
572  break;
573  case 26:
574  coerceValue(myMinEdgeLength, ( ( value ) ));
575  break;
576  case 27:
577  coerceValue(myMaxNewPts, clampMinValue(0, ( value ) ));
578  break;
579  case 28:
580  coerceValue(myNumLloydSteps, clampMinValue(0, ( value ) ));
581  break;
582  case 29:
583  coerceValue(myAllowMovingInteriorInputPts, ( ( value ) ));
584  break;
585  case 30:
586  coerceValue(myRestorePos, ( ( value ) ));
587  break;
588  case 31:
589  coerceValue(myKeepPrims, ( ( value ) ));
590  break;
591  case 32:
592  coerceValue(myUpdateNormals, ( ( value ) ));
593  break;
594  case 33:
595  coerceValue(myRemoveUnusedPts, ( ( value ) ));
596  break;
597  case 34:
598  coerceValue(myRemoveDuplicatePts, ( ( value ) ));
599  break;
600  case 35:
601  coerceValue(myUseConstrSplitPtsGrp, ( ( value ) ));
602  break;
603  case 36:
604  coerceValue(myConstrSplitPtsGrp, ( ( value ) ));
605  break;
606  case 37:
607  coerceValue(myUseConstrdEdges, ( ( value ) ));
608  break;
609  case 38:
610  coerceValue(myConstrdEdges, ( ( value ) ));
611  break;
612  case 39:
613  coerceValue(myRandomSeed, ( ( value ) ));
614  break;
615 
616  }
617  }
618 
619  void setNestParmValue(TempIndex idx, TempIndex instance, const exint &value) override
620  { doSetParmValue(idx, instance, value); }
621  void setNestParmValue(TempIndex idx, TempIndex instance, const fpreal &value) override
622  { doSetParmValue(idx, instance, value); }
623  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector2D &value) override
624  { doSetParmValue(idx, instance, value); }
625  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector3D &value) override
626  { doSetParmValue(idx, instance, value); }
627  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector4D &value) override
628  { doSetParmValue(idx, instance, value); }
629  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix2D &value) override
630  { doSetParmValue(idx, instance, value); }
631  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix3D &value) override
632  { doSetParmValue(idx, instance, value); }
633  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix4D &value) override
634  { doSetParmValue(idx, instance, value); }
635  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_StringHolder &value) override
636  { doSetParmValue(idx, instance, value); }
637  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_SharedPtr<UT_Ramp> &value) override
638  { doSetParmValue(idx, instance, value); }
639  void setNestParmValue(TempIndex idx, TempIndex instance, const PRM_DataItemHandle &value) override
640  { doSetParmValue(idx, instance, value); }
641 
642  exint getNestNumParms(TempIndex idx) const override
643  {
644  if (idx.size() == 0)
645  return 40;
646  switch (idx[0])
647  {
648 
649  }
650  // Invalid
651  return 0;
652  }
653 
654  const char *getNestParmName(TempIndex fieldnum) const override
655  {
656  if (fieldnum.size() < 1)
657  return 0;
658  switch (fieldnum[0])
659  {
660  case 0:
661  return "points";
662  case 1:
663  return "planepossrc";
664  case 2:
665  return "origin";
666  case 3:
667  return "dist";
668  case 4:
669  return "dir";
670  case 5:
671  return "pos2attrib";
672  case 6:
673  return "useconstredges";
674  case 7:
675  return "constredges";
676  case 8:
677  return "useconstrpolys";
678  case 9:
679  return "constrpolys";
680  case 10:
681  return "ignorepolybridges";
682  case 11:
683  return "usesilhouettepolys";
684  case 12:
685  return "silhouettepolys";
686  case 13:
687  return "allowconstrsplit";
688  case 14:
689  return "useexactconstruction";
690  case 15:
691  return "ignorenonconstrpts";
692  case 16:
693  return "removefromconvexhull";
694  case 17:
695  return "removefromconstrpolys";
696  case 18:
697  return "removeoutsidesilhouette";
698  case 19:
699  return "refine";
700  case 20:
701  return "allowrefineonstrsplit";
702  case 21:
703  return "encroachangle";
704  case 22:
705  return "minangle";
706  case 23:
707  return "trianglesize";
708  case 24:
709  return "maxarea";
710  case 25:
711  return "targetedgelength";
712  case 26:
713  return "minedgelength";
714  case 27:
715  return "maxnewpts";
716  case 28:
717  return "lloydsteps";
718  case 29:
719  return "allowmovinginteriorpts";
720  case 30:
721  return "restorepos";
722  case 31:
723  return "keepprims";
724  case 32:
725  return "updatenmls";
726  case 33:
727  return "removeunusedpoints";
728  case 34:
729  return "removeduplicatepoints";
730  case 35:
731  return "usecontrsplitptgrp";
732  case 36:
733  return "constrsplitptgrp";
734  case 37:
735  return "useconstrdedges";
736  case 38:
737  return "constrdedges";
738  case 39:
739  return "randseed";
740 
741  }
742  return 0;
743  }
744 
745  ParmType getNestParmType(TempIndex fieldnum) const override
746  {
747  if (fieldnum.size() < 1)
748  return PARM_UNSUPPORTED;
749  switch (fieldnum[0])
750  {
751  case 0:
752  return PARM_STRING;
753  case 1:
754  return PARM_INTEGER;
755  case 2:
756  return PARM_VECTOR3;
757  case 3:
758  return PARM_FLOAT;
759  case 4:
760  return PARM_VECTOR3;
761  case 5:
762  return PARM_STRING;
763  case 6:
764  return PARM_INTEGER;
765  case 7:
766  return PARM_STRING;
767  case 8:
768  return PARM_INTEGER;
769  case 9:
770  return PARM_STRING;
771  case 10:
772  return PARM_INTEGER;
773  case 11:
774  return PARM_INTEGER;
775  case 12:
776  return PARM_STRING;
777  case 13:
778  return PARM_INTEGER;
779  case 14:
780  return PARM_INTEGER;
781  case 15:
782  return PARM_INTEGER;
783  case 16:
784  return PARM_INTEGER;
785  case 17:
786  return PARM_INTEGER;
787  case 18:
788  return PARM_INTEGER;
789  case 19:
790  return PARM_INTEGER;
791  case 20:
792  return PARM_INTEGER;
793  case 21:
794  return PARM_FLOAT;
795  case 22:
796  return PARM_FLOAT;
797  case 23:
798  return PARM_INTEGER;
799  case 24:
800  return PARM_FLOAT;
801  case 25:
802  return PARM_FLOAT;
803  case 26:
804  return PARM_FLOAT;
805  case 27:
806  return PARM_INTEGER;
807  case 28:
808  return PARM_INTEGER;
809  case 29:
810  return PARM_INTEGER;
811  case 30:
812  return PARM_INTEGER;
813  case 31:
814  return PARM_INTEGER;
815  case 32:
816  return PARM_INTEGER;
817  case 33:
818  return PARM_INTEGER;
819  case 34:
820  return PARM_INTEGER;
821  case 35:
822  return PARM_INTEGER;
823  case 36:
824  return PARM_STRING;
825  case 37:
826  return PARM_INTEGER;
827  case 38:
828  return PARM_STRING;
829  case 39:
830  return PARM_INTEGER;
831 
832  }
833  return PARM_UNSUPPORTED;
834  }
835 
836  // Boiler plate to load individual types.
837  static void loadData(UT_IStream &is, int64 &v)
838  { is.bread(&v, 1); }
839  static void loadData(UT_IStream &is, bool &v)
840  { int64 iv; is.bread(&iv, 1); v = iv; }
841  static void loadData(UT_IStream &is, fpreal64 &v)
842  { is.bread<fpreal64>(&v, 1); }
843  static void loadData(UT_IStream &is, UT_Vector2D &v)
844  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1); }
845  static void loadData(UT_IStream &is, UT_Vector3D &v)
846  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
847  is.bread<fpreal64>(&v.z(), 1); }
848  static void loadData(UT_IStream &is, UT_Vector4D &v)
849  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
850  is.bread<fpreal64>(&v.z(), 1); is.bread<fpreal64>(&v.w(), 1); }
851  static void loadData(UT_IStream &is, UT_Matrix2D &v)
852  { for (int r = 0; r < 2; r++) for (int c = 0; c < 2; c++) is.bread<fpreal64>(&v(r, c), 1); }
853  static void loadData(UT_IStream &is, UT_Matrix3D &v)
854  { for (int r = 0; r < 3; r++) for (int c = 0; c < 3; c++) is.bread<fpreal64>(&v(r, c), 1); }
855  static void loadData(UT_IStream &is, UT_Matrix4D &v)
856  { for (int r = 0; r < 4; r++) for (int c = 0; c < 4; c++) is.bread<fpreal64>(&v(r, c), 1); }
857  static void loadData(UT_IStream &is, UT_Vector2I &v)
858  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1); }
859  static void loadData(UT_IStream &is, UT_Vector3I &v)
860  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
861  is.bread<int64>(&v.z(), 1); }
862  static void loadData(UT_IStream &is, UT_Vector4I &v)
863  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
864  is.bread<int64>(&v.z(), 1); is.bread<int64>(&v.w(), 1); }
866  { is.bread(v); }
868  { UT_StringHolder rampdata;
869  loadData(is, rampdata);
870  if (rampdata.isstring())
871  {
872  v.reset(new UT_Ramp());
873  UT_IStream istr((const char *) rampdata, rampdata.length(), UT_ISTREAM_ASCII);
874  v->load(istr);
875  }
876  else v.reset();
877  }
880  loadData(is, data);
881  if (data.isstring())
882  {
883  // Find the data type.
884  const char *colon = UT_StringWrap(data).findChar(':');
885  if (colon)
886  {
887  int typelen = colon - data.buffer();
889  type.strncpy(data.buffer(), typelen);
890  UT_IStream istr(((const char *) data) + typelen + 1, data.length() - (typelen + 1), UT_ISTREAM_BINARY);
891 
892  v = PRM_DataFactory::parseBinary(type.buffer(), istr);
893  }
894  }
895  else v.reset();
896  }
897 
898  static void saveData(std::ostream &os, int64 v)
899  { UTwrite(os, &v); }
900  static void saveData(std::ostream &os, bool v)
901  { int64 iv = v; UTwrite(os, &iv); }
902  static void saveData(std::ostream &os, fpreal64 v)
903  { UTwrite<fpreal64>(os, &v); }
904  static void saveData(std::ostream &os, UT_Vector2D v)
905  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y()); }
906  static void saveData(std::ostream &os, UT_Vector3D v)
907  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
908  UTwrite<fpreal64>(os, &v.z()); }
909  static void saveData(std::ostream &os, UT_Vector4D v)
910  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
911  UTwrite<fpreal64>(os, &v.z()); UTwrite<fpreal64>(os, &v.w()); }
912  static void saveData(std::ostream &os, UT_Matrix2D v)
914  static void saveData(std::ostream &os, UT_Matrix3D v)
916  static void saveData(std::ostream &os, UT_Matrix4D v)
918  static void saveData(std::ostream &os, UT_StringHolder s)
919  { UT_StringWrap(s).saveBinary(os); }
920  static void saveData(std::ostream &os, UT_SharedPtr<UT_Ramp> s)
922  UT_OStringStream ostr;
923  if (s) s->save(ostr);
924  result = ostr.str();
925  saveData(os, result);
926  }
927  static void saveData(std::ostream &os, PRM_DataItemHandle s)
929  UT_OStringStream ostr;
930  if (s)
931  {
932  ostr << s->getDataTypeToken();
933  ostr << ":";
934  s->saveBinary(ostr);
935  }
936  result = ostr.str();
937  saveData(os, result);
938  }
939 
940 
941  void save(std::ostream &os) const
942  {
943  int32 v = version();
944  UTwrite(os, &v);
945  saveData(os, myPoints);
946  saveData(os, myPlanePosSrc);
947  saveData(os, myOrigin);
948  saveData(os, myDist);
949  saveData(os, myDir);
950  saveData(os, myPos2AttribName);
951  saveData(os, myUseConstrEdges);
952  saveData(os, myConstrEdges);
953  saveData(os, myUseConstrPolys);
954  saveData(os, myConstrPolys);
955  saveData(os, myIgnorePolyBridges);
956  saveData(os, myUseSilhouettePolys);
957  saveData(os, mySilhouettePolys);
958  saveData(os, myAllowConstrSplit);
959  saveData(os, myUseExactConstruction);
960  saveData(os, myIgnoreNonConstrPts);
961  saveData(os, myRemoveFromConvexHull);
962  saveData(os, myRemoveFromConstrPolys);
963  saveData(os, myRemoveOutsideSilhouette);
964  saveData(os, myRefine);
965  saveData(os, myAllowRefineConstrSplits);
966  saveData(os, myEncroachAngle);
967  saveData(os, myMinAngle);
968  saveData(os, myTriangleSize);
969  saveData(os, myMaxArea);
970  saveData(os, myTargetEdgeLength);
971  saveData(os, myMinEdgeLength);
972  saveData(os, myMaxNewPts);
973  saveData(os, myNumLloydSteps);
974  saveData(os, myAllowMovingInteriorInputPts);
975  saveData(os, myRestorePos);
976  saveData(os, myKeepPrims);
977  saveData(os, myUpdateNormals);
978  saveData(os, myRemoveUnusedPts);
979  saveData(os, myRemoveDuplicatePts);
980  saveData(os, myUseConstrSplitPtsGrp);
981  saveData(os, myConstrSplitPtsGrp);
982  saveData(os, myUseConstrdEdges);
983  saveData(os, myConstrdEdges);
984  saveData(os, myRandomSeed);
985 
986  }
987 
988  bool load(UT_IStream &is)
989  {
990  int32 v;
991  is.bread(&v, 1);
992  if (version() != v)
993  {
994  // Fail incompatible versions
995  return false;
996  }
997  loadData(is, myPoints);
998  loadData(is, myPlanePosSrc);
999  loadData(is, myOrigin);
1000  loadData(is, myDist);
1001  loadData(is, myDir);
1002  loadData(is, myPos2AttribName);
1003  loadData(is, myUseConstrEdges);
1004  loadData(is, myConstrEdges);
1005  loadData(is, myUseConstrPolys);
1006  loadData(is, myConstrPolys);
1007  loadData(is, myIgnorePolyBridges);
1008  loadData(is, myUseSilhouettePolys);
1009  loadData(is, mySilhouettePolys);
1010  loadData(is, myAllowConstrSplit);
1011  loadData(is, myUseExactConstruction);
1012  loadData(is, myIgnoreNonConstrPts);
1013  loadData(is, myRemoveFromConvexHull);
1014  loadData(is, myRemoveFromConstrPolys);
1015  loadData(is, myRemoveOutsideSilhouette);
1016  loadData(is, myRefine);
1017  loadData(is, myAllowRefineConstrSplits);
1018  loadData(is, myEncroachAngle);
1019  loadData(is, myMinAngle);
1020  loadData(is, myTriangleSize);
1021  loadData(is, myMaxArea);
1022  loadData(is, myTargetEdgeLength);
1023  loadData(is, myMinEdgeLength);
1024  loadData(is, myMaxNewPts);
1025  loadData(is, myNumLloydSteps);
1026  loadData(is, myAllowMovingInteriorInputPts);
1027  loadData(is, myRestorePos);
1028  loadData(is, myKeepPrims);
1029  loadData(is, myUpdateNormals);
1030  loadData(is, myRemoveUnusedPts);
1031  loadData(is, myRemoveDuplicatePts);
1032  loadData(is, myUseConstrSplitPtsGrp);
1033  loadData(is, myConstrSplitPtsGrp);
1034  loadData(is, myUseConstrdEdges);
1035  loadData(is, myConstrdEdges);
1036  loadData(is, myRandomSeed);
1037 
1038  return true;
1039  }
1040 
1041  const UT_StringHolder & getPoints() const { return myPoints; }
1042  void setPoints(const UT_StringHolder & val) { myPoints = val; }
1044  {
1045  SOP_Node *thissop = cookparms.getNode();
1046  if (!thissop) return getPoints();
1048  OP_Utils::evalOpParm(result, thissop, "points", cookparms.getCookTime(), 0);
1049  return result;
1050  }
1051  PlanePosSrc getPlanePosSrc() const { return PlanePosSrc(myPlanePosSrc); }
1052  void setPlanePosSrc(PlanePosSrc val) { myPlanePosSrc = int64(val); }
1054  {
1055  SOP_Node *thissop = cookparms.getNode();
1056  if (!thissop) return getPlanePosSrc();
1057  int64 result;
1058  OP_Utils::evalOpParm(result, thissop, "planepossrc", cookparms.getCookTime(), 0);
1059  return PlanePosSrc(result);
1060  }
1061  UT_Vector3D getOrigin() const { return myOrigin; }
1062  void setOrigin(UT_Vector3D val) { myOrigin = val; }
1064  {
1065  SOP_Node *thissop = cookparms.getNode();
1066  if (!thissop) return getOrigin();
1068  OP_Utils::evalOpParm(result, thissop, "origin", cookparms.getCookTime(), 0);
1069  return result;
1070  }
1071  fpreal64 getDist() const { return myDist; }
1072  void setDist(fpreal64 val) { myDist = val; }
1073  fpreal64 opDist(const SOP_NodeVerb::CookParms &cookparms) const
1074  {
1075  SOP_Node *thissop = cookparms.getNode();
1076  if (!thissop) return getDist();
1077  fpreal64 result;
1078  OP_Utils::evalOpParm(result, thissop, "dist", cookparms.getCookTime(), 0);
1079  return result;
1080  }
1081  UT_Vector3D getDir() const { return myDir; }
1082  void setDir(UT_Vector3D val) { myDir = val; }
1084  {
1085  SOP_Node *thissop = cookparms.getNode();
1086  if (!thissop) return getDir();
1088  OP_Utils::evalOpParm(result, thissop, "dir", cookparms.getCookTime(), 0);
1089  return result;
1090  }
1091  const UT_StringHolder & getPos2AttribName() const { return myPos2AttribName; }
1092  void setPos2AttribName(const UT_StringHolder & val) { myPos2AttribName = val; }
1094  {
1095  SOP_Node *thissop = cookparms.getNode();
1096  if (!thissop) return getPos2AttribName();
1098  OP_Utils::evalOpParm(result, thissop, "pos2attrib", cookparms.getCookTime(), 0);
1099  return result;
1100  }
1101  bool getUseConstrEdges() const { return myUseConstrEdges; }
1102  void setUseConstrEdges(bool val) { myUseConstrEdges = val; }
1103  bool opUseConstrEdges(const SOP_NodeVerb::CookParms &cookparms) const
1104  {
1105  SOP_Node *thissop = cookparms.getNode();
1106  if (!thissop) return getUseConstrEdges();
1107  bool result;
1108  OP_Utils::evalOpParm(result, thissop, "useconstredges", cookparms.getCookTime(), 0);
1109  return result;
1110  }
1111  const UT_StringHolder & getConstrEdges() const { return myConstrEdges; }
1112  void setConstrEdges(const UT_StringHolder & val) { myConstrEdges = val; }
1114  {
1115  SOP_Node *thissop = cookparms.getNode();
1116  if (!thissop) return getConstrEdges();
1118  OP_Utils::evalOpParm(result, thissop, "constredges", cookparms.getCookTime(), 0);
1119  return result;
1120  }
1121  bool getUseConstrPolys() const { return myUseConstrPolys; }
1122  void setUseConstrPolys(bool val) { myUseConstrPolys = val; }
1123  bool opUseConstrPolys(const SOP_NodeVerb::CookParms &cookparms) const
1124  {
1125  SOP_Node *thissop = cookparms.getNode();
1126  if (!thissop) return getUseConstrPolys();
1127  bool result;
1128  OP_Utils::evalOpParm(result, thissop, "useconstrpolys", cookparms.getCookTime(), 0);
1129  return result;
1130  }
1131  const UT_StringHolder & getConstrPolys() const { return myConstrPolys; }
1132  void setConstrPolys(const UT_StringHolder & val) { myConstrPolys = val; }
1134  {
1135  SOP_Node *thissop = cookparms.getNode();
1136  if (!thissop) return getConstrPolys();
1138  OP_Utils::evalOpParm(result, thissop, "constrpolys", cookparms.getCookTime(), 0);
1139  return result;
1140  }
1141  bool getIgnorePolyBridges() const { return myIgnorePolyBridges; }
1142  void setIgnorePolyBridges(bool val) { myIgnorePolyBridges = val; }
1143  bool opIgnorePolyBridges(const SOP_NodeVerb::CookParms &cookparms) const
1144  {
1145  SOP_Node *thissop = cookparms.getNode();
1146  if (!thissop) return getIgnorePolyBridges();
1147  bool result;
1148  OP_Utils::evalOpParm(result, thissop, "ignorepolybridges", cookparms.getCookTime(), 0);
1149  return result;
1150  }
1151  bool getUseSilhouettePolys() const { return myUseSilhouettePolys; }
1152  void setUseSilhouettePolys(bool val) { myUseSilhouettePolys = val; }
1153  bool opUseSilhouettePolys(const SOP_NodeVerb::CookParms &cookparms) const
1154  {
1155  SOP_Node *thissop = cookparms.getNode();
1156  if (!thissop) return getUseSilhouettePolys();
1157  bool result;
1158  OP_Utils::evalOpParm(result, thissop, "usesilhouettepolys", cookparms.getCookTime(), 0);
1159  return result;
1160  }
1161  const UT_StringHolder & getSilhouettePolys() const { return mySilhouettePolys; }
1162  void setSilhouettePolys(const UT_StringHolder & val) { mySilhouettePolys = val; }
1164  {
1165  SOP_Node *thissop = cookparms.getNode();
1166  if (!thissop) return getSilhouettePolys();
1168  OP_Utils::evalOpParm(result, thissop, "silhouettepolys", cookparms.getCookTime(), 0);
1169  return result;
1170  }
1171  bool getAllowConstrSplit() const { return myAllowConstrSplit; }
1172  void setAllowConstrSplit(bool val) { myAllowConstrSplit = val; }
1173  bool opAllowConstrSplit(const SOP_NodeVerb::CookParms &cookparms) const
1174  {
1175  SOP_Node *thissop = cookparms.getNode();
1176  if (!thissop) return getAllowConstrSplit();
1177  bool result;
1178  OP_Utils::evalOpParm(result, thissop, "allowconstrsplit", cookparms.getCookTime(), 0);
1179  return result;
1180  }
1181  bool getUseExactConstruction() const { return myUseExactConstruction; }
1182  void setUseExactConstruction(bool val) { myUseExactConstruction = val; }
1184  {
1185  SOP_Node *thissop = cookparms.getNode();
1186  if (!thissop) return getUseExactConstruction();
1187  bool result;
1188  OP_Utils::evalOpParm(result, thissop, "useexactconstruction", cookparms.getCookTime(), 0);
1189  return result;
1190  }
1191  bool getIgnoreNonConstrPts() const { return myIgnoreNonConstrPts; }
1192  void setIgnoreNonConstrPts(bool val) { myIgnoreNonConstrPts = val; }
1193  bool opIgnoreNonConstrPts(const SOP_NodeVerb::CookParms &cookparms) const
1194  {
1195  SOP_Node *thissop = cookparms.getNode();
1196  if (!thissop) return getIgnoreNonConstrPts();
1197  bool result;
1198  OP_Utils::evalOpParm(result, thissop, "ignorenonconstrpts", cookparms.getCookTime(), 0);
1199  return result;
1200  }
1201  bool getRemoveFromConvexHull() const { return myRemoveFromConvexHull; }
1202  void setRemoveFromConvexHull(bool val) { myRemoveFromConvexHull = val; }
1204  {
1205  SOP_Node *thissop = cookparms.getNode();
1206  if (!thissop) return getRemoveFromConvexHull();
1207  bool result;
1208  OP_Utils::evalOpParm(result, thissop, "removefromconvexhull", cookparms.getCookTime(), 0);
1209  return result;
1210  }
1211  bool getRemoveFromConstrPolys() const { return myRemoveFromConstrPolys; }
1212  void setRemoveFromConstrPolys(bool val) { myRemoveFromConstrPolys = val; }
1214  {
1215  SOP_Node *thissop = cookparms.getNode();
1216  if (!thissop) return getRemoveFromConstrPolys();
1217  bool result;
1218  OP_Utils::evalOpParm(result, thissop, "removefromconstrpolys", cookparms.getCookTime(), 0);
1219  return result;
1220  }
1221  bool getRemoveOutsideSilhouette() const { return myRemoveOutsideSilhouette; }
1222  void setRemoveOutsideSilhouette(bool val) { myRemoveOutsideSilhouette = val; }
1224  {
1225  SOP_Node *thissop = cookparms.getNode();
1226  if (!thissop) return getRemoveOutsideSilhouette();
1227  bool result;
1228  OP_Utils::evalOpParm(result, thissop, "removeoutsidesilhouette", cookparms.getCookTime(), 0);
1229  return result;
1230  }
1231  bool getRefine() const { return myRefine; }
1232  void setRefine(bool val) { myRefine = val; }
1233  bool opRefine(const SOP_NodeVerb::CookParms &cookparms) const
1234  {
1235  SOP_Node *thissop = cookparms.getNode();
1236  if (!thissop) return getRefine();
1237  bool result;
1238  OP_Utils::evalOpParm(result, thissop, "refine", cookparms.getCookTime(), 0);
1239  return result;
1240  }
1241  bool getAllowRefineConstrSplits() const { return myAllowRefineConstrSplits; }
1242  void setAllowRefineConstrSplits(bool val) { myAllowRefineConstrSplits = val; }
1244  {
1245  SOP_Node *thissop = cookparms.getNode();
1246  if (!thissop) return getAllowRefineConstrSplits();
1247  bool result;
1248  OP_Utils::evalOpParm(result, thissop, "allowrefineonstrsplit", cookparms.getCookTime(), 0);
1249  return result;
1250  }
1251  fpreal64 getEncroachAngle() const { return myEncroachAngle; }
1252  void setEncroachAngle(fpreal64 val) { myEncroachAngle = val; }
1254  {
1255  SOP_Node *thissop = cookparms.getNode();
1256  if (!thissop) return getEncroachAngle();
1257  fpreal64 result;
1258  OP_Utils::evalOpParm(result, thissop, "encroachangle", cookparms.getCookTime(), 0);
1259  return result;
1260  }
1261  fpreal64 getMinAngle() const { return myMinAngle; }
1262  void setMinAngle(fpreal64 val) { myMinAngle = val; }
1264  {
1265  SOP_Node *thissop = cookparms.getNode();
1266  if (!thissop) return getMinAngle();
1267  fpreal64 result;
1268  OP_Utils::evalOpParm(result, thissop, "minangle", cookparms.getCookTime(), 0);
1269  return result;
1270  }
1271  TriangleSize getTriangleSize() const { return TriangleSize(myTriangleSize); }
1272  void setTriangleSize(TriangleSize val) { myTriangleSize = int64(val); }
1274  {
1275  SOP_Node *thissop = cookparms.getNode();
1276  if (!thissop) return getTriangleSize();
1277  int64 result;
1278  OP_Utils::evalOpParm(result, thissop, "trianglesize", cookparms.getCookTime(), 0);
1279  return TriangleSize(result);
1280  }
1281  fpreal64 getMaxArea() const { return myMaxArea; }
1282  void setMaxArea(fpreal64 val) { myMaxArea = val; }
1284  {
1285  SOP_Node *thissop = cookparms.getNode();
1286  if (!thissop) return getMaxArea();
1287  fpreal64 result;
1288  OP_Utils::evalOpParm(result, thissop, "maxarea", cookparms.getCookTime(), 0);
1289  return result;
1290  }
1291  fpreal64 getTargetEdgeLength() const { return myTargetEdgeLength; }
1292  void setTargetEdgeLength(fpreal64 val) { myTargetEdgeLength = val; }
1294  {
1295  SOP_Node *thissop = cookparms.getNode();
1296  if (!thissop) return getTargetEdgeLength();
1297  fpreal64 result;
1298  OP_Utils::evalOpParm(result, thissop, "targetedgelength", cookparms.getCookTime(), 0);
1299  return result;
1300  }
1301  fpreal64 getMinEdgeLength() const { return myMinEdgeLength; }
1302  void setMinEdgeLength(fpreal64 val) { myMinEdgeLength = val; }
1304  {
1305  SOP_Node *thissop = cookparms.getNode();
1306  if (!thissop) return getMinEdgeLength();
1307  fpreal64 result;
1308  OP_Utils::evalOpParm(result, thissop, "minedgelength", cookparms.getCookTime(), 0);
1309  return result;
1310  }
1311  int64 getMaxNewPts() const { return myMaxNewPts; }
1312  void setMaxNewPts(int64 val) { myMaxNewPts = val; }
1314  {
1315  SOP_Node *thissop = cookparms.getNode();
1316  if (!thissop) return getMaxNewPts();
1317  int64 result;
1318  OP_Utils::evalOpParm(result, thissop, "maxnewpts", cookparms.getCookTime(), 0);
1319  return result;
1320  }
1321  int64 getNumLloydSteps() const { return myNumLloydSteps; }
1322  void setNumLloydSteps(int64 val) { myNumLloydSteps = val; }
1324  {
1325  SOP_Node *thissop = cookparms.getNode();
1326  if (!thissop) return getNumLloydSteps();
1327  int64 result;
1328  OP_Utils::evalOpParm(result, thissop, "lloydsteps", cookparms.getCookTime(), 0);
1329  return result;
1330  }
1331  bool getAllowMovingInteriorInputPts() const { return myAllowMovingInteriorInputPts; }
1332  void setAllowMovingInteriorInputPts(bool val) { myAllowMovingInteriorInputPts = val; }
1334  {
1335  SOP_Node *thissop = cookparms.getNode();
1336  if (!thissop) return getAllowMovingInteriorInputPts();
1337  bool result;
1338  OP_Utils::evalOpParm(result, thissop, "allowmovinginteriorpts", cookparms.getCookTime(), 0);
1339  return result;
1340  }
1341  bool getRestorePos() const { return myRestorePos; }
1342  void setRestorePos(bool val) { myRestorePos = val; }
1343  bool opRestorePos(const SOP_NodeVerb::CookParms &cookparms) const
1344  {
1345  SOP_Node *thissop = cookparms.getNode();
1346  if (!thissop) return getRestorePos();
1347  bool result;
1348  OP_Utils::evalOpParm(result, thissop, "restorepos", cookparms.getCookTime(), 0);
1349  return result;
1350  }
1351  bool getKeepPrims() const { return myKeepPrims; }
1352  void setKeepPrims(bool val) { myKeepPrims = val; }
1353  bool opKeepPrims(const SOP_NodeVerb::CookParms &cookparms) const
1354  {
1355  SOP_Node *thissop = cookparms.getNode();
1356  if (!thissop) return getKeepPrims();
1357  bool result;
1358  OP_Utils::evalOpParm(result, thissop, "keepprims", cookparms.getCookTime(), 0);
1359  return result;
1360  }
1361  bool getUpdateNormals() const { return myUpdateNormals; }
1362  void setUpdateNormals(bool val) { myUpdateNormals = val; }
1363  bool opUpdateNormals(const SOP_NodeVerb::CookParms &cookparms) const
1364  {
1365  SOP_Node *thissop = cookparms.getNode();
1366  if (!thissop) return getUpdateNormals();
1367  bool result;
1368  OP_Utils::evalOpParm(result, thissop, "updatenmls", cookparms.getCookTime(), 0);
1369  return result;
1370  }
1371  bool getRemoveUnusedPts() const { return myRemoveUnusedPts; }
1372  void setRemoveUnusedPts(bool val) { myRemoveUnusedPts = val; }
1373  bool opRemoveUnusedPts(const SOP_NodeVerb::CookParms &cookparms) const
1374  {
1375  SOP_Node *thissop = cookparms.getNode();
1376  if (!thissop) return getRemoveUnusedPts();
1377  bool result;
1378  OP_Utils::evalOpParm(result, thissop, "removeunusedpoints", cookparms.getCookTime(), 0);
1379  return result;
1380  }
1381  bool getRemoveDuplicatePts() const { return myRemoveDuplicatePts; }
1382  void setRemoveDuplicatePts(bool val) { myRemoveDuplicatePts = val; }
1383  bool opRemoveDuplicatePts(const SOP_NodeVerb::CookParms &cookparms) const
1384  {
1385  SOP_Node *thissop = cookparms.getNode();
1386  if (!thissop) return getRemoveDuplicatePts();
1387  bool result;
1388  OP_Utils::evalOpParm(result, thissop, "removeduplicatepoints", cookparms.getCookTime(), 0);
1389  return result;
1390  }
1391  bool getUseConstrSplitPtsGrp() const { return myUseConstrSplitPtsGrp; }
1392  void setUseConstrSplitPtsGrp(bool val) { myUseConstrSplitPtsGrp = val; }
1394  {
1395  SOP_Node *thissop = cookparms.getNode();
1396  if (!thissop) return getUseConstrSplitPtsGrp();
1397  bool result;
1398  OP_Utils::evalOpParm(result, thissop, "usecontrsplitptgrp", cookparms.getCookTime(), 0);
1399  return result;
1400  }
1401  const UT_StringHolder & getConstrSplitPtsGrp() const { return myConstrSplitPtsGrp; }
1402  void setConstrSplitPtsGrp(const UT_StringHolder & val) { myConstrSplitPtsGrp = val; }
1404  {
1405  SOP_Node *thissop = cookparms.getNode();
1406  if (!thissop) return getConstrSplitPtsGrp();
1408  OP_Utils::evalOpParm(result, thissop, "constrsplitptgrp", cookparms.getCookTime(), 0);
1409  return result;
1410  }
1411  bool getUseConstrdEdges() const { return myUseConstrdEdges; }
1412  void setUseConstrdEdges(bool val) { myUseConstrdEdges = val; }
1413  bool opUseConstrdEdges(const SOP_NodeVerb::CookParms &cookparms) const
1414  {
1415  SOP_Node *thissop = cookparms.getNode();
1416  if (!thissop) return getUseConstrdEdges();
1417  bool result;
1418  OP_Utils::evalOpParm(result, thissop, "useconstrdedges", cookparms.getCookTime(), 0);
1419  return result;
1420  }
1421  const UT_StringHolder & getConstrdEdges() const { return myConstrdEdges; }
1422  void setConstrdEdges(const UT_StringHolder & val) { myConstrdEdges = val; }
1424  {
1425  SOP_Node *thissop = cookparms.getNode();
1426  if (!thissop) return getConstrdEdges();
1428  OP_Utils::evalOpParm(result, thissop, "constrdedges", cookparms.getCookTime(), 0);
1429  return result;
1430  }
1431  int64 getRandomSeed() const { return myRandomSeed; }
1432  void setRandomSeed(int64 val) { myRandomSeed = val; }
1434  {
1435  SOP_Node *thissop = cookparms.getNode();
1436  if (!thissop) return getRandomSeed();
1437  int64 result;
1438  OP_Utils::evalOpParm(result, thissop, "randseed", cookparms.getCookTime(), 0);
1439  return result;
1440  }
1441 
1442 private:
1443  UT_StringHolder myPoints;
1444  int64 myPlanePosSrc;
1445  UT_Vector3D myOrigin;
1446  fpreal64 myDist;
1447  UT_Vector3D myDir;
1448  UT_StringHolder myPos2AttribName;
1449  bool myUseConstrEdges;
1450  UT_StringHolder myConstrEdges;
1451  bool myUseConstrPolys;
1452  UT_StringHolder myConstrPolys;
1453  bool myIgnorePolyBridges;
1454  bool myUseSilhouettePolys;
1455  UT_StringHolder mySilhouettePolys;
1456  bool myAllowConstrSplit;
1457  bool myUseExactConstruction;
1458  bool myIgnoreNonConstrPts;
1459  bool myRemoveFromConvexHull;
1460  bool myRemoveFromConstrPolys;
1461  bool myRemoveOutsideSilhouette;
1462  bool myRefine;
1463  bool myAllowRefineConstrSplits;
1464  fpreal64 myEncroachAngle;
1465  fpreal64 myMinAngle;
1466  int64 myTriangleSize;
1467  fpreal64 myMaxArea;
1468  fpreal64 myTargetEdgeLength;
1469  fpreal64 myMinEdgeLength;
1470  int64 myMaxNewPts;
1471  int64 myNumLloydSteps;
1472  bool myAllowMovingInteriorInputPts;
1473  bool myRestorePos;
1474  bool myKeepPrims;
1475  bool myUpdateNormals;
1476  bool myRemoveUnusedPts;
1477  bool myRemoveDuplicatePts;
1478  bool myUseConstrSplitPtsGrp;
1479  UT_StringHolder myConstrSplitPtsGrp;
1480  bool myUseConstrdEdges;
1481  UT_StringHolder myConstrdEdges;
1482  int64 myRandomSeed;
1483 
1484 };
UT_StringHolder opConstrPolys(const SOP_NodeVerb::CookParms &cookparms) const
type
Definition: core.h:556
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:63
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
GLsizei const GLfloat * value
Definition: glcorearb.h:824
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:622
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
UT_SharedPtr< const PRM_DataItem > PRM_DataItemHandle
Definition: APEX_Include.h:55
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:303
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:278
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:96
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
virtual UT_StringHolder baseGetSignature() const
Definition: OP_NodeParms.h:294
#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:372
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:1401
#define UT_ASSERT(ZZ)
Definition: UT_Assert.h:156
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
static void saveData(std::ostream &os, bool v)
static void loadData(UT_IStream &is, UT_Vector4D &v)
virtual bool isDirect() const =0
Direct proxies mirror actual nodes:
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
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