HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
SOP_PolyDoctor.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_PolyDoctorEnums
24 {
25  enum class IllFormedAction
26  {
27  IGNORE = 0,
28  MARK,
29  REPAIR
30  };
31  enum class ManyEdgesAction
32  {
33  IGNORE = 0,
34  MARK,
35  REPAIR
36  };
37  enum class NonConvexAction
38  {
39  IGNORE = 0,
40  MARK,
41  REPAIR
42  };
43  enum class OverlappingAction
44  {
45  IGNORE = 0,
46  MARK,
47  REPAIR
48  };
50  {
51  IGNORE = 0,
52  MARK,
53  REPAIR
54  };
56  {
57  IGNORE = 0,
58  MARK,
59  REPAIR
60  };
62  {
63  IGNORE = 0,
64  MARK,
65  REPAIR
66  };
67  enum class NonUniformAction
68  {
69  IGNORE = 0,
70  MARK,
71  REPAIR
72  };
74  {
75  IGNORE = 0,
76  MARK,
77  REPAIR
78  };
80  {
81  IGNORE = 0,
82  MARK,
83  REPAIR
84  };
86  {
87  IGNORE = 0,
88  MARK,
89  REPAIR
90  };
92  {
93  IGNORE = 0,
94  MARK,
95  REPAIR
96  };
97 }
98 
99 
101 {
102 public:
103  static int version() { return 1; }
104 
106  {
107  myGroup = ""_UTsh;
108  myMaxPasses = 50;
109  myRandomSeed = 3;
110  myIllFormedAction = 2;
111  myManyEdgesAction = 2;
112  myNonConvexAction = 2;
113  myOverlappingAction = 2;
114  myPairOverlaps = false;
115  mySelfIntersectingAction = 1;
116  myThickness = 0.0001;
117  myGloballySmallAreasAction = 0;
118  myGlobalAreaThreshold = 1e-06;
119  myLocallySmallAreasAction = 0;
120  myLocalAreaThreshold = 0.01;
121  myNonUniformAction = 0;
122  myUniformityThreshold = 0.01;
123  myGloballySmallEdgesAction = 0;
124  myGlobalEdgeThreshold = 0.001;
125  myLocallySmallEdgesAction = 0;
126  myLocalEdgeThreshold = 0.3;
127  myDisconnectedPointsAction = 0;
128  myNonManifoldPointsAction = 0;
129  myIgnoreWindings = true;
130  myPreferLargeAngles = false;
131  myVisualizeMaxManifold = false;
132  myExportManifoldNumbers = false;
133  myFixWindings = false;
134  myDeleteSmallManifolds = false;
135  mySmallManifoldSize = 0;
136  myAddValidPolyAttrib = true;
137  myValidPolyAttribName = "valid_poly"_UTsh;
138  myAddRepairedPolyAttrib = true;
139  myRepairedPolyAttribName = "repaired_poly"_UTsh;
140  myAddValidPtsAttrib = true;
141  myValidPtsAttribName = "valid_pt"_UTsh;
142  myAddModifiedPtsAttrib = true;
143  myModifiedPtsAttribName = "modified_pt"_UTsh;
144  myCreateGroups = false;
145  myVisualizeInvalidPts = false;
146  myInvalidPtsColor = UT_Vector3D(0.9,0,0);
147  myVisualizeRepairedPts = false;
148  myRepairedPtsColor = UT_Vector3D(0,0,0.9);
149  myVisualizeInvalidPolys = false;
150  myInvalidPolysColor = UT_Vector3D(0.9,0,0);
151  myVisualizeRepairedPolys = false;
152  myRepairedPolysColor = UT_Vector3D(0,0,0.9);
153 
154  }
155 
156  explicit SOP_PolyDoctorParms(const SOP_PolyDoctorParms &) = default;
158  SOP_PolyDoctorParms(SOP_PolyDoctorParms &&) noexcept = default;
159  SOP_PolyDoctorParms &operator=(SOP_PolyDoctorParms &&) noexcept = default;
160 
161  ~SOP_PolyDoctorParms() override {}
162 
163  bool operator==(const SOP_PolyDoctorParms &src) const
164  {
165  if (myGroup != src.myGroup) return false;
166  if (myMaxPasses != src.myMaxPasses) return false;
167  if (myRandomSeed != src.myRandomSeed) return false;
168  if (myIllFormedAction != src.myIllFormedAction) return false;
169  if (myManyEdgesAction != src.myManyEdgesAction) return false;
170  if (myNonConvexAction != src.myNonConvexAction) return false;
171  if (myOverlappingAction != src.myOverlappingAction) return false;
172  if (myPairOverlaps != src.myPairOverlaps) return false;
173  if (mySelfIntersectingAction != src.mySelfIntersectingAction) return false;
174  if (myThickness != src.myThickness) return false;
175  if (myGloballySmallAreasAction != src.myGloballySmallAreasAction) return false;
176  if (myGlobalAreaThreshold != src.myGlobalAreaThreshold) return false;
177  if (myLocallySmallAreasAction != src.myLocallySmallAreasAction) return false;
178  if (myLocalAreaThreshold != src.myLocalAreaThreshold) return false;
179  if (myNonUniformAction != src.myNonUniformAction) return false;
180  if (myUniformityThreshold != src.myUniformityThreshold) return false;
181  if (myGloballySmallEdgesAction != src.myGloballySmallEdgesAction) return false;
182  if (myGlobalEdgeThreshold != src.myGlobalEdgeThreshold) return false;
183  if (myLocallySmallEdgesAction != src.myLocallySmallEdgesAction) return false;
184  if (myLocalEdgeThreshold != src.myLocalEdgeThreshold) return false;
185  if (myDisconnectedPointsAction != src.myDisconnectedPointsAction) return false;
186  if (myNonManifoldPointsAction != src.myNonManifoldPointsAction) return false;
187  if (myIgnoreWindings != src.myIgnoreWindings) return false;
188  if (myPreferLargeAngles != src.myPreferLargeAngles) return false;
189  if (myVisualizeMaxManifold != src.myVisualizeMaxManifold) return false;
190  if (myExportManifoldNumbers != src.myExportManifoldNumbers) return false;
191  if (myFixWindings != src.myFixWindings) return false;
192  if (myDeleteSmallManifolds != src.myDeleteSmallManifolds) return false;
193  if (mySmallManifoldSize != src.mySmallManifoldSize) return false;
194  if (myAddValidPolyAttrib != src.myAddValidPolyAttrib) return false;
195  if (myValidPolyAttribName != src.myValidPolyAttribName) return false;
196  if (myAddRepairedPolyAttrib != src.myAddRepairedPolyAttrib) return false;
197  if (myRepairedPolyAttribName != src.myRepairedPolyAttribName) return false;
198  if (myAddValidPtsAttrib != src.myAddValidPtsAttrib) return false;
199  if (myValidPtsAttribName != src.myValidPtsAttribName) return false;
200  if (myAddModifiedPtsAttrib != src.myAddModifiedPtsAttrib) return false;
201  if (myModifiedPtsAttribName != src.myModifiedPtsAttribName) return false;
202  if (myCreateGroups != src.myCreateGroups) return false;
203  if (myVisualizeInvalidPts != src.myVisualizeInvalidPts) return false;
204  if (myInvalidPtsColor != src.myInvalidPtsColor) return false;
205  if (myVisualizeRepairedPts != src.myVisualizeRepairedPts) return false;
206  if (myRepairedPtsColor != src.myRepairedPtsColor) return false;
207  if (myVisualizeInvalidPolys != src.myVisualizeInvalidPolys) return false;
208  if (myInvalidPolysColor != src.myInvalidPolysColor) return false;
209  if (myVisualizeRepairedPolys != src.myVisualizeRepairedPolys) return false;
210  if (myRepairedPolysColor != src.myRepairedPolysColor) return false;
211 
212  return true;
213  }
214  bool operator!=(const SOP_PolyDoctorParms &src) const
215  {
216  return !operator==(src);
217  }
230 
231 
232 
233  void buildFromOp(const OP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
234  {
235  myGroup = ""_UTsh;
236  if (true)
237  graph->evalOpParm(myGroup, nodeidx, "group", time, 0);
238  myMaxPasses = 50;
239  if (true)
240  graph->evalOpParm(myMaxPasses, nodeidx, "maxpasses", time, 0);
241  myRandomSeed = 3;
242  if (true)
243  graph->evalOpParm(myRandomSeed, nodeidx, "randomseed", time, 0);
244  myIllFormedAction = 2;
245  if (true)
246  graph->evalOpParm(myIllFormedAction, nodeidx, "illformed", time, 0);
247  myManyEdgesAction = 2;
248  if (true && ( (true&&!(((int64(getIllFormedAction())==0)))) ) )
249  graph->evalOpParm(myManyEdgesAction, nodeidx, "manyedges", time, 0);
250  myNonConvexAction = 2;
251  if (true && ( (true&&!(((int64(getIllFormedAction())==0))||((int64(getManyEdgesAction())==0)))) ) )
252  graph->evalOpParm(myNonConvexAction, nodeidx, "nonconvex", time, 0);
253  myOverlappingAction = 2;
254  if (true && ( (true&&!(((int64(getIllFormedAction())==0)))) ) )
255  graph->evalOpParm(myOverlappingAction, nodeidx, "overlapping", time, 0);
256  myPairOverlaps = false;
257  if (true && ( (true&&!(((int64(getIllFormedAction())==0))||((int64(getOverlappingAction())==0)))) ) )
258  graph->evalOpParm(myPairOverlaps, nodeidx, "pairoverlaps", time, 0);
259  mySelfIntersectingAction = 1;
260  if (true && ( (true&&!(((int64(getIllFormedAction())==0))||((int64(getManyEdgesAction())==0))||((int64(getNonConvexAction())==0)))) ) )
261  graph->evalOpParm(mySelfIntersectingAction, nodeidx, "intersect", time, 0);
262  myThickness = 0.0001;
263  if (true && ( (true&&!(((int64(getIllFormedAction())==0))||((int64(getManyEdgesAction())==0))||((int64(getNonConvexAction())==0)))) ) )
264  graph->evalOpParm(myThickness, nodeidx, "thickness", time, 0);
265  myGloballySmallAreasAction = 0;
266  if (true && ( (true&&!(((int64(getIllFormedAction())==0)))) ) )
267  graph->evalOpParm(myGloballySmallAreasAction, nodeidx, "glosmallarea", time, 0);
268  myGlobalAreaThreshold = 1e-06;
269  if (true && ( (true&&!(((int64(getIllFormedAction())==0)))) ) )
270  graph->evalOpParm(myGlobalAreaThreshold, nodeidx, "gloareathres", time, 0);
271  myLocallySmallAreasAction = 0;
272  if (true && ( (true&&!(((int64(getIllFormedAction())==0)))) ) )
273  graph->evalOpParm(myLocallySmallAreasAction, nodeidx, "locsmallarea", time, 0);
274  myLocalAreaThreshold = 0.01;
275  if (true && ( (true&&!(((int64(getIllFormedAction())==0)))) ) )
276  graph->evalOpParm(myLocalAreaThreshold, nodeidx, "locareathres", time, 0);
277  myNonUniformAction = 0;
278  if (true && ( (true&&!(((int64(getIllFormedAction())==0))||((int64(getManyEdgesAction())==0))||((int64(getNonConvexAction())==0)))) ) )
279  graph->evalOpParm(myNonUniformAction, nodeidx, "nonuni", time, 0);
280  myUniformityThreshold = 0.01;
281  if (true && ( (true&&!(((int64(getIllFormedAction())==0))||((int64(getManyEdgesAction())==0))||((int64(getNonConvexAction())==0)))) ) )
282  graph->evalOpParm(myUniformityThreshold, nodeidx, "unithres", time, 0);
283  myGloballySmallEdgesAction = 0;
284  if (true)
285  graph->evalOpParm(myGloballySmallEdgesAction, nodeidx, "glosmalledge", time, 0);
286  myGlobalEdgeThreshold = 0.001;
287  if (true)
288  graph->evalOpParm(myGlobalEdgeThreshold, nodeidx, "gloedgethres", time, 0);
289  myLocallySmallEdgesAction = 0;
290  if (true)
291  graph->evalOpParm(myLocallySmallEdgesAction, nodeidx, "locsmalledge", time, 0);
292  myLocalEdgeThreshold = 0.3;
293  if (true)
294  graph->evalOpParm(myLocalEdgeThreshold, nodeidx, "locedgethres", time, 0);
295  myDisconnectedPointsAction = 0;
296  if (true)
297  graph->evalOpParm(myDisconnectedPointsAction, nodeidx, "disconnectpt", time, 0);
298  myNonManifoldPointsAction = 0;
299  if (true)
300  graph->evalOpParm(myNonManifoldPointsAction, nodeidx, "nonmanifoldpt", time, 0);
301  myIgnoreWindings = true;
302  if (true)
303  graph->evalOpParm(myIgnoreWindings, nodeidx, "ignorewindings", time, 0);
304  myPreferLargeAngles = false;
305  if (true && ( (true&&!(((int64(getNonManifoldPointsAction())!=2)))) ) )
306  graph->evalOpParm(myPreferLargeAngles, nodeidx, "preferlargeangles", time, 0);
307  myVisualizeMaxManifold = false;
308  if (true)
309  graph->evalOpParm(myVisualizeMaxManifold, nodeidx, "vismaxmanifold", time, 0);
310  myExportManifoldNumbers = false;
311  if (true)
312  graph->evalOpParm(myExportManifoldNumbers, nodeidx, "exportmanifoldnumbers", time, 0);
313  myFixWindings = false;
314  if (true)
315  graph->evalOpParm(myFixWindings, nodeidx, "fixwindings", time, 0);
316  myDeleteSmallManifolds = false;
317  if (true)
318  graph->evalOpParm(myDeleteSmallManifolds, nodeidx, "deletesmallmanifolds", time, 0);
319  mySmallManifoldSize = 0;
320  if (true && ( (true&&!(((getDeleteSmallManifolds()==0)))) ) )
321  graph->evalOpParm(mySmallManifoldSize, nodeidx, "smallmanifoldsize", time, 0);
322  myAddValidPolyAttrib = true;
323  if (true)
324  graph->evalOpParm(myAddValidPolyAttrib, nodeidx, "usevalidpoly", time, 0);
325  myValidPolyAttribName = "valid_poly"_UTsh;
326  if (true)
327  graph->evalOpParm(myValidPolyAttribName, nodeidx, "validpoly", time, 0);
328  myAddRepairedPolyAttrib = true;
329  if (true)
330  graph->evalOpParm(myAddRepairedPolyAttrib, nodeidx, "userepairedpoly", time, 0);
331  myRepairedPolyAttribName = "repaired_poly"_UTsh;
332  if (true)
333  graph->evalOpParm(myRepairedPolyAttribName, nodeidx, "repairedpoly", time, 0);
334  myAddValidPtsAttrib = true;
335  if (true)
336  graph->evalOpParm(myAddValidPtsAttrib, nodeidx, "usevalidpts", time, 0);
337  myValidPtsAttribName = "valid_pt"_UTsh;
338  if (true)
339  graph->evalOpParm(myValidPtsAttribName, nodeidx, "validpts", time, 0);
340  myAddModifiedPtsAttrib = true;
341  if (true)
342  graph->evalOpParm(myAddModifiedPtsAttrib, nodeidx, "usemodifiedpts", time, 0);
343  myModifiedPtsAttribName = "modified_pt"_UTsh;
344  if (true)
345  graph->evalOpParm(myModifiedPtsAttribName, nodeidx, "modifiedpts", time, 0);
346  myCreateGroups = false;
347  if (true)
348  graph->evalOpParm(myCreateGroups, nodeidx, "creategrps", time, 0);
349  myVisualizeInvalidPts = false;
350  if (true)
351  graph->evalOpParm(myVisualizeInvalidPts, nodeidx, "visinvalidpts", time, 0);
352  myInvalidPtsColor = UT_Vector3D(0.9,0,0);
353  if (true && ( (true&&!(((getVisualizeInvalidPts()==0)))) ) )
354  graph->evalOpParm(myInvalidPtsColor, nodeidx, "visinvalidptsfg", time, 0);
355  myVisualizeRepairedPts = false;
356  if (true)
357  graph->evalOpParm(myVisualizeRepairedPts, nodeidx, "visrepairedpts", time, 0);
358  myRepairedPtsColor = UT_Vector3D(0,0,0.9);
359  if (true && ( (true&&!(((getVisualizeRepairedPts()==0)))) ) )
360  graph->evalOpParm(myRepairedPtsColor, nodeidx, "visrepairedptsfg", time, 0);
361  myVisualizeInvalidPolys = false;
362  if (true)
363  graph->evalOpParm(myVisualizeInvalidPolys, nodeidx, "visinvalidpolys", time, 0);
364  myInvalidPolysColor = UT_Vector3D(0.9,0,0);
365  if (true && ( (true&&!(((getVisualizeInvalidPolys()==0)))) ) )
366  graph->evalOpParm(myInvalidPolysColor, nodeidx, "visinvalidpolysfg", time, 0);
367  myVisualizeRepairedPolys = false;
368  if (true)
369  graph->evalOpParm(myVisualizeRepairedPolys, nodeidx, "visrepairedpolys", time, 0);
370  myRepairedPolysColor = UT_Vector3D(0,0,0.9);
371  if (true && ( (true&&!(((getVisualizeRepairedPolys()==0)))) ) )
372  graph->evalOpParm(myRepairedPolysColor, nodeidx, "visrepairedpolysfg", time, 0);
373 
374  }
375 
376 
377  void loadFromOpSubclass(const LoadParms &loadparms) override
378  {
379  buildFromOp(loadparms.graph(), loadparms.nodeIdx(), loadparms.context().getTime(), loadparms.depnode());
380  }
381 
382 
383  void copyFrom(const OP_NodeParms *src) override
384  {
385  *this = *((const SOP_PolyDoctorParms *)src);
386  }
387 
388  template <typename T>
389  void
390  doGetParmValue(TempIndex idx, TempIndex instance, T &value) const
391  {
392  if (idx.size() < 1)
393  return;
394  UT_ASSERT(idx.size() == instance.size()+1);
395  if (idx.size() != instance.size()+1)
396  return;
397  switch (idx[0])
398  {
399  case 0:
400  coerceValue(value, myGroup);
401  break;
402  case 1:
403  coerceValue(value, myMaxPasses);
404  break;
405  case 2:
406  coerceValue(value, myRandomSeed);
407  break;
408  case 3:
409  coerceValue(value, myIllFormedAction);
410  break;
411  case 4:
412  coerceValue(value, myManyEdgesAction);
413  break;
414  case 5:
415  coerceValue(value, myNonConvexAction);
416  break;
417  case 6:
418  coerceValue(value, myOverlappingAction);
419  break;
420  case 7:
421  coerceValue(value, myPairOverlaps);
422  break;
423  case 8:
424  coerceValue(value, mySelfIntersectingAction);
425  break;
426  case 9:
427  coerceValue(value, myThickness);
428  break;
429  case 10:
430  coerceValue(value, myGloballySmallAreasAction);
431  break;
432  case 11:
433  coerceValue(value, myGlobalAreaThreshold);
434  break;
435  case 12:
436  coerceValue(value, myLocallySmallAreasAction);
437  break;
438  case 13:
439  coerceValue(value, myLocalAreaThreshold);
440  break;
441  case 14:
442  coerceValue(value, myNonUniformAction);
443  break;
444  case 15:
445  coerceValue(value, myUniformityThreshold);
446  break;
447  case 16:
448  coerceValue(value, myGloballySmallEdgesAction);
449  break;
450  case 17:
451  coerceValue(value, myGlobalEdgeThreshold);
452  break;
453  case 18:
454  coerceValue(value, myLocallySmallEdgesAction);
455  break;
456  case 19:
457  coerceValue(value, myLocalEdgeThreshold);
458  break;
459  case 20:
460  coerceValue(value, myDisconnectedPointsAction);
461  break;
462  case 21:
463  coerceValue(value, myNonManifoldPointsAction);
464  break;
465  case 22:
466  coerceValue(value, myIgnoreWindings);
467  break;
468  case 23:
469  coerceValue(value, myPreferLargeAngles);
470  break;
471  case 24:
472  coerceValue(value, myVisualizeMaxManifold);
473  break;
474  case 25:
475  coerceValue(value, myExportManifoldNumbers);
476  break;
477  case 26:
478  coerceValue(value, myFixWindings);
479  break;
480  case 27:
481  coerceValue(value, myDeleteSmallManifolds);
482  break;
483  case 28:
484  coerceValue(value, mySmallManifoldSize);
485  break;
486  case 29:
487  coerceValue(value, myAddValidPolyAttrib);
488  break;
489  case 30:
490  coerceValue(value, myValidPolyAttribName);
491  break;
492  case 31:
493  coerceValue(value, myAddRepairedPolyAttrib);
494  break;
495  case 32:
496  coerceValue(value, myRepairedPolyAttribName);
497  break;
498  case 33:
499  coerceValue(value, myAddValidPtsAttrib);
500  break;
501  case 34:
502  coerceValue(value, myValidPtsAttribName);
503  break;
504  case 35:
505  coerceValue(value, myAddModifiedPtsAttrib);
506  break;
507  case 36:
508  coerceValue(value, myModifiedPtsAttribName);
509  break;
510  case 37:
511  coerceValue(value, myCreateGroups);
512  break;
513  case 38:
514  coerceValue(value, myVisualizeInvalidPts);
515  break;
516  case 39:
517  coerceValue(value, myInvalidPtsColor);
518  break;
519  case 40:
520  coerceValue(value, myVisualizeRepairedPts);
521  break;
522  case 41:
523  coerceValue(value, myRepairedPtsColor);
524  break;
525  case 42:
526  coerceValue(value, myVisualizeInvalidPolys);
527  break;
528  case 43:
529  coerceValue(value, myInvalidPolysColor);
530  break;
531  case 44:
532  coerceValue(value, myVisualizeRepairedPolys);
533  break;
534  case 45:
535  coerceValue(value, myRepairedPolysColor);
536  break;
537 
538  }
539  }
540 
541  bool isParmColorRamp(exint idx) const override
542  {
543  switch (idx)
544  {
545 
546  }
547  return false;
548  }
549 
550  void getNestParmValue(TempIndex idx, TempIndex instance, exint &value) const override
551  { doGetParmValue(idx, instance, value); }
552  void getNestParmValue(TempIndex idx, TempIndex instance, fpreal &value) const override
553  { doGetParmValue(idx, instance, value); }
554  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector2D &value) const override
555  { doGetParmValue(idx, instance, value); }
556  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector3D &value) const override
557  { doGetParmValue(idx, instance, value); }
558  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector4D &value) const override
559  { doGetParmValue(idx, instance, value); }
560  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix2D &value) const override
561  { doGetParmValue(idx, instance, value); }
562  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
563  { doGetParmValue(idx, instance, value); }
564  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix4D &value) const override
565  { doGetParmValue(idx, instance, value); }
566  void getNestParmValue(TempIndex idx, TempIndex instance, UT_StringHolder &value) const override
567  { doGetParmValue(idx, instance, value); }
568  void getNestParmValue(TempIndex idx, TempIndex instance, UT_SharedPtr<UT_Ramp> &value) const override
569  { doGetParmValue(idx, instance, value); }
570  void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
571  { doGetParmValue(idx, instance, value); }
572 
573  template <typename T>
574  void
575  doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
576  {
577  if (idx.size() < 1)
578  return;
579  UT_ASSERT(idx.size() == instance.size()+1);
580  if (idx.size() != instance.size()+1)
581  return;
582  switch (idx[0])
583  {
584  case 0:
585  coerceValue(myGroup, ( ( value ) ));
586  break;
587  case 1:
588  coerceValue(myMaxPasses, clampMinValue(1, ( value ) ));
589  break;
590  case 2:
591  coerceValue(myRandomSeed, clampMinValue(1, ( value ) ));
592  break;
593  case 3:
594  coerceValue(myIllFormedAction, clampMinValue(0, clampMaxValue(2, value ) ));
595  break;
596  case 4:
597  coerceValue(myManyEdgesAction, clampMinValue(0, clampMaxValue(2, value ) ));
598  break;
599  case 5:
600  coerceValue(myNonConvexAction, clampMinValue(0, clampMaxValue(2, value ) ));
601  break;
602  case 6:
603  coerceValue(myOverlappingAction, clampMinValue(0, clampMaxValue(2, value ) ));
604  break;
605  case 7:
606  coerceValue(myPairOverlaps, ( ( value ) ));
607  break;
608  case 8:
609  coerceValue(mySelfIntersectingAction, clampMinValue(0, clampMaxValue(2, value ) ));
610  break;
611  case 9:
612  coerceValue(myThickness, clampMinValue(0, ( value ) ));
613  break;
614  case 10:
615  coerceValue(myGloballySmallAreasAction, clampMinValue(0, clampMaxValue(2, value ) ));
616  break;
617  case 11:
618  coerceValue(myGlobalAreaThreshold, clampMinValue(0, ( value ) ));
619  break;
620  case 12:
621  coerceValue(myLocallySmallAreasAction, clampMinValue(0, clampMaxValue(2, value ) ));
622  break;
623  case 13:
624  coerceValue(myLocalAreaThreshold, clampMinValue(0, ( value ) ));
625  break;
626  case 14:
627  coerceValue(myNonUniformAction, clampMinValue(0, clampMaxValue(2, value ) ));
628  break;
629  case 15:
630  coerceValue(myUniformityThreshold, clampMinValue(0, ( value ) ));
631  break;
632  case 16:
633  coerceValue(myGloballySmallEdgesAction, clampMinValue(0, clampMaxValue(2, value ) ));
634  break;
635  case 17:
636  coerceValue(myGlobalEdgeThreshold, clampMinValue(0, ( value ) ));
637  break;
638  case 18:
639  coerceValue(myLocallySmallEdgesAction, clampMinValue(0, clampMaxValue(2, value ) ));
640  break;
641  case 19:
642  coerceValue(myLocalEdgeThreshold, clampMinValue(0, ( value ) ));
643  break;
644  case 20:
645  coerceValue(myDisconnectedPointsAction, clampMinValue(0, clampMaxValue(2, value ) ));
646  break;
647  case 21:
648  coerceValue(myNonManifoldPointsAction, clampMinValue(0, clampMaxValue(2, value ) ));
649  break;
650  case 22:
651  coerceValue(myIgnoreWindings, ( ( value ) ));
652  break;
653  case 23:
654  coerceValue(myPreferLargeAngles, ( ( value ) ));
655  break;
656  case 24:
657  coerceValue(myVisualizeMaxManifold, ( ( value ) ));
658  break;
659  case 25:
660  coerceValue(myExportManifoldNumbers, ( ( value ) ));
661  break;
662  case 26:
663  coerceValue(myFixWindings, ( ( value ) ));
664  break;
665  case 27:
666  coerceValue(myDeleteSmallManifolds, ( ( value ) ));
667  break;
668  case 28:
669  coerceValue(mySmallManifoldSize, ( ( value ) ));
670  break;
671  case 29:
672  coerceValue(myAddValidPolyAttrib, ( ( value ) ));
673  break;
674  case 30:
675  coerceValue(myValidPolyAttribName, ( ( value ) ));
676  break;
677  case 31:
678  coerceValue(myAddRepairedPolyAttrib, ( ( value ) ));
679  break;
680  case 32:
681  coerceValue(myRepairedPolyAttribName, ( ( value ) ));
682  break;
683  case 33:
684  coerceValue(myAddValidPtsAttrib, ( ( value ) ));
685  break;
686  case 34:
687  coerceValue(myValidPtsAttribName, ( ( value ) ));
688  break;
689  case 35:
690  coerceValue(myAddModifiedPtsAttrib, ( ( value ) ));
691  break;
692  case 36:
693  coerceValue(myModifiedPtsAttribName, ( ( value ) ));
694  break;
695  case 37:
696  coerceValue(myCreateGroups, ( ( value ) ));
697  break;
698  case 38:
699  coerceValue(myVisualizeInvalidPts, ( ( value ) ));
700  break;
701  case 39:
702  coerceValue(myInvalidPtsColor, ( ( value ) ));
703  break;
704  case 40:
705  coerceValue(myVisualizeRepairedPts, ( ( value ) ));
706  break;
707  case 41:
708  coerceValue(myRepairedPtsColor, ( ( value ) ));
709  break;
710  case 42:
711  coerceValue(myVisualizeInvalidPolys, ( ( value ) ));
712  break;
713  case 43:
714  coerceValue(myInvalidPolysColor, ( ( value ) ));
715  break;
716  case 44:
717  coerceValue(myVisualizeRepairedPolys, ( ( value ) ));
718  break;
719  case 45:
720  coerceValue(myRepairedPolysColor, ( ( value ) ));
721  break;
722 
723  }
724  }
725 
726  void setNestParmValue(TempIndex idx, TempIndex instance, const exint &value) override
727  { doSetParmValue(idx, instance, value); }
728  void setNestParmValue(TempIndex idx, TempIndex instance, const fpreal &value) override
729  { doSetParmValue(idx, instance, value); }
730  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector2D &value) override
731  { doSetParmValue(idx, instance, value); }
732  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector3D &value) override
733  { doSetParmValue(idx, instance, value); }
734  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector4D &value) override
735  { doSetParmValue(idx, instance, value); }
736  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix2D &value) override
737  { doSetParmValue(idx, instance, value); }
738  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix3D &value) override
739  { doSetParmValue(idx, instance, value); }
740  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix4D &value) override
741  { doSetParmValue(idx, instance, value); }
742  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_StringHolder &value) override
743  { doSetParmValue(idx, instance, value); }
744  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_SharedPtr<UT_Ramp> &value) override
745  { doSetParmValue(idx, instance, value); }
746  void setNestParmValue(TempIndex idx, TempIndex instance, const PRM_DataItemHandle &value) override
747  { doSetParmValue(idx, instance, value); }
748 
749  exint getNestNumParms(TempIndex idx) const override
750  {
751  if (idx.size() == 0)
752  return 46;
753  switch (idx[0])
754  {
755 
756  }
757  // Invalid
758  return 0;
759  }
760 
761  const char *getNestParmName(TempIndex fieldnum) const override
762  {
763  if (fieldnum.size() < 1)
764  return 0;
765  switch (fieldnum[0])
766  {
767  case 0:
768  return "group";
769  case 1:
770  return "maxpasses";
771  case 2:
772  return "randomseed";
773  case 3:
774  return "illformed";
775  case 4:
776  return "manyedges";
777  case 5:
778  return "nonconvex";
779  case 6:
780  return "overlapping";
781  case 7:
782  return "pairoverlaps";
783  case 8:
784  return "intersect";
785  case 9:
786  return "thickness";
787  case 10:
788  return "glosmallarea";
789  case 11:
790  return "gloareathres";
791  case 12:
792  return "locsmallarea";
793  case 13:
794  return "locareathres";
795  case 14:
796  return "nonuni";
797  case 15:
798  return "unithres";
799  case 16:
800  return "glosmalledge";
801  case 17:
802  return "gloedgethres";
803  case 18:
804  return "locsmalledge";
805  case 19:
806  return "locedgethres";
807  case 20:
808  return "disconnectpt";
809  case 21:
810  return "nonmanifoldpt";
811  case 22:
812  return "ignorewindings";
813  case 23:
814  return "preferlargeangles";
815  case 24:
816  return "vismaxmanifold";
817  case 25:
818  return "exportmanifoldnumbers";
819  case 26:
820  return "fixwindings";
821  case 27:
822  return "deletesmallmanifolds";
823  case 28:
824  return "smallmanifoldsize";
825  case 29:
826  return "usevalidpoly";
827  case 30:
828  return "validpoly";
829  case 31:
830  return "userepairedpoly";
831  case 32:
832  return "repairedpoly";
833  case 33:
834  return "usevalidpts";
835  case 34:
836  return "validpts";
837  case 35:
838  return "usemodifiedpts";
839  case 36:
840  return "modifiedpts";
841  case 37:
842  return "creategrps";
843  case 38:
844  return "visinvalidpts";
845  case 39:
846  return "visinvalidptsfg";
847  case 40:
848  return "visrepairedpts";
849  case 41:
850  return "visrepairedptsfg";
851  case 42:
852  return "visinvalidpolys";
853  case 43:
854  return "visinvalidpolysfg";
855  case 44:
856  return "visrepairedpolys";
857  case 45:
858  return "visrepairedpolysfg";
859 
860  }
861  return 0;
862  }
863 
864  ParmType getNestParmType(TempIndex fieldnum) const override
865  {
866  if (fieldnum.size() < 1)
867  return PARM_UNSUPPORTED;
868  switch (fieldnum[0])
869  {
870  case 0:
871  return PARM_STRING;
872  case 1:
873  return PARM_INTEGER;
874  case 2:
875  return PARM_INTEGER;
876  case 3:
877  return PARM_INTEGER;
878  case 4:
879  return PARM_INTEGER;
880  case 5:
881  return PARM_INTEGER;
882  case 6:
883  return PARM_INTEGER;
884  case 7:
885  return PARM_INTEGER;
886  case 8:
887  return PARM_INTEGER;
888  case 9:
889  return PARM_FLOAT;
890  case 10:
891  return PARM_INTEGER;
892  case 11:
893  return PARM_FLOAT;
894  case 12:
895  return PARM_INTEGER;
896  case 13:
897  return PARM_FLOAT;
898  case 14:
899  return PARM_INTEGER;
900  case 15:
901  return PARM_FLOAT;
902  case 16:
903  return PARM_INTEGER;
904  case 17:
905  return PARM_FLOAT;
906  case 18:
907  return PARM_INTEGER;
908  case 19:
909  return PARM_FLOAT;
910  case 20:
911  return PARM_INTEGER;
912  case 21:
913  return PARM_INTEGER;
914  case 22:
915  return PARM_INTEGER;
916  case 23:
917  return PARM_INTEGER;
918  case 24:
919  return PARM_INTEGER;
920  case 25:
921  return PARM_INTEGER;
922  case 26:
923  return PARM_INTEGER;
924  case 27:
925  return PARM_INTEGER;
926  case 28:
927  return PARM_INTEGER;
928  case 29:
929  return PARM_INTEGER;
930  case 30:
931  return PARM_STRING;
932  case 31:
933  return PARM_INTEGER;
934  case 32:
935  return PARM_STRING;
936  case 33:
937  return PARM_INTEGER;
938  case 34:
939  return PARM_STRING;
940  case 35:
941  return PARM_INTEGER;
942  case 36:
943  return PARM_STRING;
944  case 37:
945  return PARM_INTEGER;
946  case 38:
947  return PARM_INTEGER;
948  case 39:
949  return PARM_VECTOR3;
950  case 40:
951  return PARM_INTEGER;
952  case 41:
953  return PARM_VECTOR3;
954  case 42:
955  return PARM_INTEGER;
956  case 43:
957  return PARM_VECTOR3;
958  case 44:
959  return PARM_INTEGER;
960  case 45:
961  return PARM_VECTOR3;
962 
963  }
964  return PARM_UNSUPPORTED;
965  }
966 
967  // Boiler plate to load individual types.
968  static void loadData(UT_IStream &is, int64 &v)
969  { is.bread(&v, 1); }
970  static void loadData(UT_IStream &is, bool &v)
971  { int64 iv; is.bread(&iv, 1); v = iv; }
972  static void loadData(UT_IStream &is, fpreal64 &v)
973  { is.bread<fpreal64>(&v, 1); }
974  static void loadData(UT_IStream &is, UT_Vector2D &v)
975  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1); }
976  static void loadData(UT_IStream &is, UT_Vector3D &v)
977  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
978  is.bread<fpreal64>(&v.z(), 1); }
979  static void loadData(UT_IStream &is, UT_Vector4D &v)
980  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
981  is.bread<fpreal64>(&v.z(), 1); is.bread<fpreal64>(&v.w(), 1); }
982  static void loadData(UT_IStream &is, UT_Matrix2D &v)
983  { for (int r = 0; r < 2; r++) for (int c = 0; c < 2; c++) is.bread<fpreal64>(&v(r, c), 1); }
984  static void loadData(UT_IStream &is, UT_Matrix3D &v)
985  { for (int r = 0; r < 3; r++) for (int c = 0; c < 3; c++) is.bread<fpreal64>(&v(r, c), 1); }
986  static void loadData(UT_IStream &is, UT_Matrix4D &v)
987  { for (int r = 0; r < 4; r++) for (int c = 0; c < 4; c++) is.bread<fpreal64>(&v(r, c), 1); }
988  static void loadData(UT_IStream &is, UT_Vector2I &v)
989  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1); }
990  static void loadData(UT_IStream &is, UT_Vector3I &v)
991  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
992  is.bread<int64>(&v.z(), 1); }
993  static void loadData(UT_IStream &is, UT_Vector4I &v)
994  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
995  is.bread<int64>(&v.z(), 1); is.bread<int64>(&v.w(), 1); }
997  { is.bread(v); }
999  { UT_StringHolder rampdata;
1000  loadData(is, rampdata);
1001  if (rampdata.isstring())
1002  {
1003  v.reset(new UT_Ramp());
1004  UT_IStream istr((const char *) rampdata, rampdata.length(), UT_ISTREAM_ASCII);
1005  v->load(istr);
1006  }
1007  else v.reset();
1008  }
1011  loadData(is, data);
1012  if (data.isstring())
1013  {
1014  // Find the data type.
1015  const char *colon = UT_StringWrap(data).findChar(':');
1016  if (colon)
1017  {
1018  int typelen = colon - data.buffer();
1020  type.strncpy(data.buffer(), typelen);
1021  UT_IStream istr(((const char *) data) + typelen + 1, data.length() - (typelen + 1), UT_ISTREAM_BINARY);
1022 
1023  v = PRM_DataFactory::parseBinary(type.buffer(), istr);
1024  }
1025  }
1026  else v.reset();
1027  }
1028 
1029  static void saveData(std::ostream &os, int64 v)
1030  { UTwrite(os, &v); }
1031  static void saveData(std::ostream &os, bool v)
1032  { int64 iv = v; UTwrite(os, &iv); }
1033  static void saveData(std::ostream &os, fpreal64 v)
1034  { UTwrite<fpreal64>(os, &v); }
1035  static void saveData(std::ostream &os, UT_Vector2D v)
1036  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y()); }
1037  static void saveData(std::ostream &os, UT_Vector3D v)
1038  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
1039  UTwrite<fpreal64>(os, &v.z()); }
1040  static void saveData(std::ostream &os, UT_Vector4D v)
1041  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
1042  UTwrite<fpreal64>(os, &v.z()); UTwrite<fpreal64>(os, &v.w()); }
1043  static void saveData(std::ostream &os, UT_Matrix2D v)
1044  { for (int r = 0; r < 2; r++) for (int c = 0; c < 2; c++) UTwrite<fpreal64>(os, &v(r, c)); }
1045  static void saveData(std::ostream &os, UT_Matrix3D v)
1046  { for (int r = 0; r < 3; r++) for (int c = 0; c < 3; c++) UTwrite<fpreal64>(os, &v(r, c)); }
1047  static void saveData(std::ostream &os, UT_Matrix4D v)
1048  { for (int r = 0; r < 4; r++) for (int c = 0; c < 4; c++) UTwrite<fpreal64>(os, &v(r, c)); }
1049  static void saveData(std::ostream &os, UT_StringHolder s)
1050  { UT_StringWrap(s).saveBinary(os); }
1051  static void saveData(std::ostream &os, UT_SharedPtr<UT_Ramp> s)
1053  UT_OStringStream ostr;
1054  if (s) s->save(ostr);
1055  result = ostr.str();
1056  saveData(os, result);
1057  }
1058  static void saveData(std::ostream &os, PRM_DataItemHandle s)
1060  UT_OStringStream ostr;
1061  if (s)
1062  {
1063  ostr << s->getDataTypeToken();
1064  ostr << ":";
1065  s->saveBinary(ostr);
1066  }
1067  result = ostr.str();
1068  saveData(os, result);
1069  }
1070 
1071 
1072  void save(std::ostream &os) const
1073  {
1074  int32 v = version();
1075  UTwrite(os, &v);
1076  saveData(os, myGroup);
1077  saveData(os, myMaxPasses);
1078  saveData(os, myRandomSeed);
1079  saveData(os, myIllFormedAction);
1080  saveData(os, myManyEdgesAction);
1081  saveData(os, myNonConvexAction);
1082  saveData(os, myOverlappingAction);
1083  saveData(os, myPairOverlaps);
1084  saveData(os, mySelfIntersectingAction);
1085  saveData(os, myThickness);
1086  saveData(os, myGloballySmallAreasAction);
1087  saveData(os, myGlobalAreaThreshold);
1088  saveData(os, myLocallySmallAreasAction);
1089  saveData(os, myLocalAreaThreshold);
1090  saveData(os, myNonUniformAction);
1091  saveData(os, myUniformityThreshold);
1092  saveData(os, myGloballySmallEdgesAction);
1093  saveData(os, myGlobalEdgeThreshold);
1094  saveData(os, myLocallySmallEdgesAction);
1095  saveData(os, myLocalEdgeThreshold);
1096  saveData(os, myDisconnectedPointsAction);
1097  saveData(os, myNonManifoldPointsAction);
1098  saveData(os, myIgnoreWindings);
1099  saveData(os, myPreferLargeAngles);
1100  saveData(os, myVisualizeMaxManifold);
1101  saveData(os, myExportManifoldNumbers);
1102  saveData(os, myFixWindings);
1103  saveData(os, myDeleteSmallManifolds);
1104  saveData(os, mySmallManifoldSize);
1105  saveData(os, myAddValidPolyAttrib);
1106  saveData(os, myValidPolyAttribName);
1107  saveData(os, myAddRepairedPolyAttrib);
1108  saveData(os, myRepairedPolyAttribName);
1109  saveData(os, myAddValidPtsAttrib);
1110  saveData(os, myValidPtsAttribName);
1111  saveData(os, myAddModifiedPtsAttrib);
1112  saveData(os, myModifiedPtsAttribName);
1113  saveData(os, myCreateGroups);
1114  saveData(os, myVisualizeInvalidPts);
1115  saveData(os, myInvalidPtsColor);
1116  saveData(os, myVisualizeRepairedPts);
1117  saveData(os, myRepairedPtsColor);
1118  saveData(os, myVisualizeInvalidPolys);
1119  saveData(os, myInvalidPolysColor);
1120  saveData(os, myVisualizeRepairedPolys);
1121  saveData(os, myRepairedPolysColor);
1122 
1123  }
1124 
1125  bool load(UT_IStream &is)
1126  {
1127  int32 v;
1128  is.bread(&v, 1);
1129  if (version() != v)
1130  {
1131  // Fail incompatible versions
1132  return false;
1133  }
1134  loadData(is, myGroup);
1135  loadData(is, myMaxPasses);
1136  loadData(is, myRandomSeed);
1137  loadData(is, myIllFormedAction);
1138  loadData(is, myManyEdgesAction);
1139  loadData(is, myNonConvexAction);
1140  loadData(is, myOverlappingAction);
1141  loadData(is, myPairOverlaps);
1142  loadData(is, mySelfIntersectingAction);
1143  loadData(is, myThickness);
1144  loadData(is, myGloballySmallAreasAction);
1145  loadData(is, myGlobalAreaThreshold);
1146  loadData(is, myLocallySmallAreasAction);
1147  loadData(is, myLocalAreaThreshold);
1148  loadData(is, myNonUniformAction);
1149  loadData(is, myUniformityThreshold);
1150  loadData(is, myGloballySmallEdgesAction);
1151  loadData(is, myGlobalEdgeThreshold);
1152  loadData(is, myLocallySmallEdgesAction);
1153  loadData(is, myLocalEdgeThreshold);
1154  loadData(is, myDisconnectedPointsAction);
1155  loadData(is, myNonManifoldPointsAction);
1156  loadData(is, myIgnoreWindings);
1157  loadData(is, myPreferLargeAngles);
1158  loadData(is, myVisualizeMaxManifold);
1159  loadData(is, myExportManifoldNumbers);
1160  loadData(is, myFixWindings);
1161  loadData(is, myDeleteSmallManifolds);
1162  loadData(is, mySmallManifoldSize);
1163  loadData(is, myAddValidPolyAttrib);
1164  loadData(is, myValidPolyAttribName);
1165  loadData(is, myAddRepairedPolyAttrib);
1166  loadData(is, myRepairedPolyAttribName);
1167  loadData(is, myAddValidPtsAttrib);
1168  loadData(is, myValidPtsAttribName);
1169  loadData(is, myAddModifiedPtsAttrib);
1170  loadData(is, myModifiedPtsAttribName);
1171  loadData(is, myCreateGroups);
1172  loadData(is, myVisualizeInvalidPts);
1173  loadData(is, myInvalidPtsColor);
1174  loadData(is, myVisualizeRepairedPts);
1175  loadData(is, myRepairedPtsColor);
1176  loadData(is, myVisualizeInvalidPolys);
1177  loadData(is, myInvalidPolysColor);
1178  loadData(is, myVisualizeRepairedPolys);
1179  loadData(is, myRepairedPolysColor);
1180 
1181  return true;
1182  }
1183 
1184  const UT_StringHolder & getGroup() const { return myGroup; }
1185  void setGroup(const UT_StringHolder & val) { myGroup = val; }
1187  {
1188  SOP_Node *thissop = cookparms.getNode();
1189  if (!thissop) return getGroup();
1191  OP_Utils::evalOpParm(result, thissop, "group", cookparms.getCookTime(), 0);
1192  return result;
1193  }
1194  int64 getMaxPasses() const { return myMaxPasses; }
1195  void setMaxPasses(int64 val) { myMaxPasses = val; }
1197  {
1198  SOP_Node *thissop = cookparms.getNode();
1199  if (!thissop) return getMaxPasses();
1200  int64 result;
1201  OP_Utils::evalOpParm(result, thissop, "maxpasses", cookparms.getCookTime(), 0);
1202  return result;
1203  }
1204  int64 getRandomSeed() const { return myRandomSeed; }
1205  void setRandomSeed(int64 val) { myRandomSeed = val; }
1207  {
1208  SOP_Node *thissop = cookparms.getNode();
1209  if (!thissop) return getRandomSeed();
1210  int64 result;
1211  OP_Utils::evalOpParm(result, thissop, "randomseed", cookparms.getCookTime(), 0);
1212  return result;
1213  }
1214  IllFormedAction getIllFormedAction() const { return IllFormedAction(myIllFormedAction); }
1215  void setIllFormedAction(IllFormedAction val) { myIllFormedAction = int64(val); }
1217  {
1218  SOP_Node *thissop = cookparms.getNode();
1219  if (!thissop) return getIllFormedAction();
1220  int64 result;
1221  OP_Utils::evalOpParm(result, thissop, "illformed", cookparms.getCookTime(), 0);
1222  return IllFormedAction(result);
1223  }
1224  ManyEdgesAction getManyEdgesAction() const { return ManyEdgesAction(myManyEdgesAction); }
1225  void setManyEdgesAction(ManyEdgesAction val) { myManyEdgesAction = int64(val); }
1227  {
1228  SOP_Node *thissop = cookparms.getNode();
1229  if (!thissop) return getManyEdgesAction();
1230  int64 result;
1231  OP_Utils::evalOpParm(result, thissop, "manyedges", cookparms.getCookTime(), 0);
1232  return ManyEdgesAction(result);
1233  }
1234  NonConvexAction getNonConvexAction() const { return NonConvexAction(myNonConvexAction); }
1235  void setNonConvexAction(NonConvexAction val) { myNonConvexAction = int64(val); }
1237  {
1238  SOP_Node *thissop = cookparms.getNode();
1239  if (!thissop) return getNonConvexAction();
1240  int64 result;
1241  OP_Utils::evalOpParm(result, thissop, "nonconvex", cookparms.getCookTime(), 0);
1242  return NonConvexAction(result);
1243  }
1244  OverlappingAction getOverlappingAction() const { return OverlappingAction(myOverlappingAction); }
1245  void setOverlappingAction(OverlappingAction val) { myOverlappingAction = int64(val); }
1247  {
1248  SOP_Node *thissop = cookparms.getNode();
1249  if (!thissop) return getOverlappingAction();
1250  int64 result;
1251  OP_Utils::evalOpParm(result, thissop, "overlapping", cookparms.getCookTime(), 0);
1252  return OverlappingAction(result);
1253  }
1254  bool getPairOverlaps() const { return myPairOverlaps; }
1255  void setPairOverlaps(bool val) { myPairOverlaps = val; }
1256  bool opPairOverlaps(const SOP_NodeVerb::CookParms &cookparms) const
1257  {
1258  SOP_Node *thissop = cookparms.getNode();
1259  if (!thissop) return getPairOverlaps();
1260  bool result;
1261  OP_Utils::evalOpParm(result, thissop, "pairoverlaps", cookparms.getCookTime(), 0);
1262  return result;
1263  }
1264  SelfIntersectingAction getSelfIntersectingAction() const { return SelfIntersectingAction(mySelfIntersectingAction); }
1265  void setSelfIntersectingAction(SelfIntersectingAction val) { mySelfIntersectingAction = int64(val); }
1267  {
1268  SOP_Node *thissop = cookparms.getNode();
1269  if (!thissop) return getSelfIntersectingAction();
1270  int64 result;
1271  OP_Utils::evalOpParm(result, thissop, "intersect", cookparms.getCookTime(), 0);
1272  return SelfIntersectingAction(result);
1273  }
1274  fpreal64 getThickness() const { return myThickness; }
1275  void setThickness(fpreal64 val) { myThickness = val; }
1277  {
1278  SOP_Node *thissop = cookparms.getNode();
1279  if (!thissop) return getThickness();
1280  fpreal64 result;
1281  OP_Utils::evalOpParm(result, thissop, "thickness", cookparms.getCookTime(), 0);
1282  return result;
1283  }
1285  void setGloballySmallAreasAction(GloballySmallAreasAction val) { myGloballySmallAreasAction = int64(val); }
1287  {
1288  SOP_Node *thissop = cookparms.getNode();
1289  if (!thissop) return getGloballySmallAreasAction();
1290  int64 result;
1291  OP_Utils::evalOpParm(result, thissop, "glosmallarea", cookparms.getCookTime(), 0);
1292  return GloballySmallAreasAction(result);
1293  }
1294  fpreal64 getGlobalAreaThreshold() const { return myGlobalAreaThreshold; }
1295  void setGlobalAreaThreshold(fpreal64 val) { myGlobalAreaThreshold = val; }
1297  {
1298  SOP_Node *thissop = cookparms.getNode();
1299  if (!thissop) return getGlobalAreaThreshold();
1300  fpreal64 result;
1301  OP_Utils::evalOpParm(result, thissop, "gloareathres", cookparms.getCookTime(), 0);
1302  return result;
1303  }
1304  LocallySmallAreasAction getLocallySmallAreasAction() const { return LocallySmallAreasAction(myLocallySmallAreasAction); }
1305  void setLocallySmallAreasAction(LocallySmallAreasAction val) { myLocallySmallAreasAction = int64(val); }
1307  {
1308  SOP_Node *thissop = cookparms.getNode();
1309  if (!thissop) return getLocallySmallAreasAction();
1310  int64 result;
1311  OP_Utils::evalOpParm(result, thissop, "locsmallarea", cookparms.getCookTime(), 0);
1312  return LocallySmallAreasAction(result);
1313  }
1314  fpreal64 getLocalAreaThreshold() const { return myLocalAreaThreshold; }
1315  void setLocalAreaThreshold(fpreal64 val) { myLocalAreaThreshold = val; }
1317  {
1318  SOP_Node *thissop = cookparms.getNode();
1319  if (!thissop) return getLocalAreaThreshold();
1320  fpreal64 result;
1321  OP_Utils::evalOpParm(result, thissop, "locareathres", cookparms.getCookTime(), 0);
1322  return result;
1323  }
1324  NonUniformAction getNonUniformAction() const { return NonUniformAction(myNonUniformAction); }
1325  void setNonUniformAction(NonUniformAction val) { myNonUniformAction = int64(val); }
1327  {
1328  SOP_Node *thissop = cookparms.getNode();
1329  if (!thissop) return getNonUniformAction();
1330  int64 result;
1331  OP_Utils::evalOpParm(result, thissop, "nonuni", cookparms.getCookTime(), 0);
1332  return NonUniformAction(result);
1333  }
1334  fpreal64 getUniformityThreshold() const { return myUniformityThreshold; }
1335  void setUniformityThreshold(fpreal64 val) { myUniformityThreshold = val; }
1337  {
1338  SOP_Node *thissop = cookparms.getNode();
1339  if (!thissop) return getUniformityThreshold();
1340  fpreal64 result;
1341  OP_Utils::evalOpParm(result, thissop, "unithres", cookparms.getCookTime(), 0);
1342  return result;
1343  }
1345  void setGloballySmallEdgesAction(GloballySmallEdgesAction val) { myGloballySmallEdgesAction = int64(val); }
1347  {
1348  SOP_Node *thissop = cookparms.getNode();
1349  if (!thissop) return getGloballySmallEdgesAction();
1350  int64 result;
1351  OP_Utils::evalOpParm(result, thissop, "glosmalledge", cookparms.getCookTime(), 0);
1352  return GloballySmallEdgesAction(result);
1353  }
1354  fpreal64 getGlobalEdgeThreshold() const { return myGlobalEdgeThreshold; }
1355  void setGlobalEdgeThreshold(fpreal64 val) { myGlobalEdgeThreshold = val; }
1357  {
1358  SOP_Node *thissop = cookparms.getNode();
1359  if (!thissop) return getGlobalEdgeThreshold();
1360  fpreal64 result;
1361  OP_Utils::evalOpParm(result, thissop, "gloedgethres", cookparms.getCookTime(), 0);
1362  return result;
1363  }
1364  LocallySmallEdgesAction getLocallySmallEdgesAction() const { return LocallySmallEdgesAction(myLocallySmallEdgesAction); }
1365  void setLocallySmallEdgesAction(LocallySmallEdgesAction val) { myLocallySmallEdgesAction = int64(val); }
1367  {
1368  SOP_Node *thissop = cookparms.getNode();
1369  if (!thissop) return getLocallySmallEdgesAction();
1370  int64 result;
1371  OP_Utils::evalOpParm(result, thissop, "locsmalledge", cookparms.getCookTime(), 0);
1372  return LocallySmallEdgesAction(result);
1373  }
1374  fpreal64 getLocalEdgeThreshold() const { return myLocalEdgeThreshold; }
1375  void setLocalEdgeThreshold(fpreal64 val) { myLocalEdgeThreshold = val; }
1377  {
1378  SOP_Node *thissop = cookparms.getNode();
1379  if (!thissop) return getLocalEdgeThreshold();
1380  fpreal64 result;
1381  OP_Utils::evalOpParm(result, thissop, "locedgethres", cookparms.getCookTime(), 0);
1382  return result;
1383  }
1385  void setDisconnectedPointsAction(DisconnectedPointsAction val) { myDisconnectedPointsAction = int64(val); }
1387  {
1388  SOP_Node *thissop = cookparms.getNode();
1389  if (!thissop) return getDisconnectedPointsAction();
1390  int64 result;
1391  OP_Utils::evalOpParm(result, thissop, "disconnectpt", cookparms.getCookTime(), 0);
1392  return DisconnectedPointsAction(result);
1393  }
1394  NonManifoldPointsAction getNonManifoldPointsAction() const { return NonManifoldPointsAction(myNonManifoldPointsAction); }
1395  void setNonManifoldPointsAction(NonManifoldPointsAction val) { myNonManifoldPointsAction = int64(val); }
1397  {
1398  SOP_Node *thissop = cookparms.getNode();
1399  if (!thissop) return getNonManifoldPointsAction();
1400  int64 result;
1401  OP_Utils::evalOpParm(result, thissop, "nonmanifoldpt", cookparms.getCookTime(), 0);
1402  return NonManifoldPointsAction(result);
1403  }
1404  bool getIgnoreWindings() const { return myIgnoreWindings; }
1405  void setIgnoreWindings(bool val) { myIgnoreWindings = val; }
1406  bool opIgnoreWindings(const SOP_NodeVerb::CookParms &cookparms) const
1407  {
1408  SOP_Node *thissop = cookparms.getNode();
1409  if (!thissop) return getIgnoreWindings();
1410  bool result;
1411  OP_Utils::evalOpParm(result, thissop, "ignorewindings", cookparms.getCookTime(), 0);
1412  return result;
1413  }
1414  bool getPreferLargeAngles() const { return myPreferLargeAngles; }
1415  void setPreferLargeAngles(bool val) { myPreferLargeAngles = val; }
1416  bool opPreferLargeAngles(const SOP_NodeVerb::CookParms &cookparms) const
1417  {
1418  SOP_Node *thissop = cookparms.getNode();
1419  if (!thissop) return getPreferLargeAngles();
1420  bool result;
1421  OP_Utils::evalOpParm(result, thissop, "preferlargeangles", cookparms.getCookTime(), 0);
1422  return result;
1423  }
1424  bool getVisualizeMaxManifold() const { return myVisualizeMaxManifold; }
1425  void setVisualizeMaxManifold(bool val) { myVisualizeMaxManifold = val; }
1427  {
1428  SOP_Node *thissop = cookparms.getNode();
1429  if (!thissop) return getVisualizeMaxManifold();
1430  bool result;
1431  OP_Utils::evalOpParm(result, thissop, "vismaxmanifold", cookparms.getCookTime(), 0);
1432  return result;
1433  }
1434  bool getExportManifoldNumbers() const { return myExportManifoldNumbers; }
1435  void setExportManifoldNumbers(bool val) { myExportManifoldNumbers = val; }
1437  {
1438  SOP_Node *thissop = cookparms.getNode();
1439  if (!thissop) return getExportManifoldNumbers();
1440  bool result;
1441  OP_Utils::evalOpParm(result, thissop, "exportmanifoldnumbers", cookparms.getCookTime(), 0);
1442  return result;
1443  }
1444  bool getFixWindings() const { return myFixWindings; }
1445  void setFixWindings(bool val) { myFixWindings = val; }
1446  bool opFixWindings(const SOP_NodeVerb::CookParms &cookparms) const
1447  {
1448  SOP_Node *thissop = cookparms.getNode();
1449  if (!thissop) return getFixWindings();
1450  bool result;
1451  OP_Utils::evalOpParm(result, thissop, "fixwindings", cookparms.getCookTime(), 0);
1452  return result;
1453  }
1454  bool getDeleteSmallManifolds() const { return myDeleteSmallManifolds; }
1455  void setDeleteSmallManifolds(bool val) { myDeleteSmallManifolds = val; }
1457  {
1458  SOP_Node *thissop = cookparms.getNode();
1459  if (!thissop) return getDeleteSmallManifolds();
1460  bool result;
1461  OP_Utils::evalOpParm(result, thissop, "deletesmallmanifolds", cookparms.getCookTime(), 0);
1462  return result;
1463  }
1464  int64 getSmallManifoldSize() const { return mySmallManifoldSize; }
1465  void setSmallManifoldSize(int64 val) { mySmallManifoldSize = val; }
1467  {
1468  SOP_Node *thissop = cookparms.getNode();
1469  if (!thissop) return getSmallManifoldSize();
1470  int64 result;
1471  OP_Utils::evalOpParm(result, thissop, "smallmanifoldsize", cookparms.getCookTime(), 0);
1472  return result;
1473  }
1474  bool getAddValidPolyAttrib() const { return myAddValidPolyAttrib; }
1475  void setAddValidPolyAttrib(bool val) { myAddValidPolyAttrib = val; }
1476  bool opAddValidPolyAttrib(const SOP_NodeVerb::CookParms &cookparms) const
1477  {
1478  SOP_Node *thissop = cookparms.getNode();
1479  if (!thissop) return getAddValidPolyAttrib();
1480  bool result;
1481  OP_Utils::evalOpParm(result, thissop, "usevalidpoly", cookparms.getCookTime(), 0);
1482  return result;
1483  }
1484  const UT_StringHolder & getValidPolyAttribName() const { return myValidPolyAttribName; }
1485  void setValidPolyAttribName(const UT_StringHolder & val) { myValidPolyAttribName = val; }
1487  {
1488  SOP_Node *thissop = cookparms.getNode();
1489  if (!thissop) return getValidPolyAttribName();
1491  OP_Utils::evalOpParm(result, thissop, "validpoly", cookparms.getCookTime(), 0);
1492  return result;
1493  }
1494  bool getAddRepairedPolyAttrib() const { return myAddRepairedPolyAttrib; }
1495  void setAddRepairedPolyAttrib(bool val) { myAddRepairedPolyAttrib = val; }
1497  {
1498  SOP_Node *thissop = cookparms.getNode();
1499  if (!thissop) return getAddRepairedPolyAttrib();
1500  bool result;
1501  OP_Utils::evalOpParm(result, thissop, "userepairedpoly", cookparms.getCookTime(), 0);
1502  return result;
1503  }
1504  const UT_StringHolder & getRepairedPolyAttribName() const { return myRepairedPolyAttribName; }
1505  void setRepairedPolyAttribName(const UT_StringHolder & val) { myRepairedPolyAttribName = val; }
1507  {
1508  SOP_Node *thissop = cookparms.getNode();
1509  if (!thissop) return getRepairedPolyAttribName();
1511  OP_Utils::evalOpParm(result, thissop, "repairedpoly", cookparms.getCookTime(), 0);
1512  return result;
1513  }
1514  bool getAddValidPtsAttrib() const { return myAddValidPtsAttrib; }
1515  void setAddValidPtsAttrib(bool val) { myAddValidPtsAttrib = val; }
1516  bool opAddValidPtsAttrib(const SOP_NodeVerb::CookParms &cookparms) const
1517  {
1518  SOP_Node *thissop = cookparms.getNode();
1519  if (!thissop) return getAddValidPtsAttrib();
1520  bool result;
1521  OP_Utils::evalOpParm(result, thissop, "usevalidpts", cookparms.getCookTime(), 0);
1522  return result;
1523  }
1524  const UT_StringHolder & getValidPtsAttribName() const { return myValidPtsAttribName; }
1525  void setValidPtsAttribName(const UT_StringHolder & val) { myValidPtsAttribName = val; }
1527  {
1528  SOP_Node *thissop = cookparms.getNode();
1529  if (!thissop) return getValidPtsAttribName();
1531  OP_Utils::evalOpParm(result, thissop, "validpts", cookparms.getCookTime(), 0);
1532  return result;
1533  }
1534  bool getAddModifiedPtsAttrib() const { return myAddModifiedPtsAttrib; }
1535  void setAddModifiedPtsAttrib(bool val) { myAddModifiedPtsAttrib = val; }
1537  {
1538  SOP_Node *thissop = cookparms.getNode();
1539  if (!thissop) return getAddModifiedPtsAttrib();
1540  bool result;
1541  OP_Utils::evalOpParm(result, thissop, "usemodifiedpts", cookparms.getCookTime(), 0);
1542  return result;
1543  }
1544  const UT_StringHolder & getModifiedPtsAttribName() const { return myModifiedPtsAttribName; }
1545  void setModifiedPtsAttribName(const UT_StringHolder & val) { myModifiedPtsAttribName = val; }
1547  {
1548  SOP_Node *thissop = cookparms.getNode();
1549  if (!thissop) return getModifiedPtsAttribName();
1551  OP_Utils::evalOpParm(result, thissop, "modifiedpts", cookparms.getCookTime(), 0);
1552  return result;
1553  }
1554  bool getCreateGroups() const { return myCreateGroups; }
1555  void setCreateGroups(bool val) { myCreateGroups = val; }
1556  bool opCreateGroups(const SOP_NodeVerb::CookParms &cookparms) const
1557  {
1558  SOP_Node *thissop = cookparms.getNode();
1559  if (!thissop) return getCreateGroups();
1560  bool result;
1561  OP_Utils::evalOpParm(result, thissop, "creategrps", cookparms.getCookTime(), 0);
1562  return result;
1563  }
1564  bool getVisualizeInvalidPts() const { return myVisualizeInvalidPts; }
1565  void setVisualizeInvalidPts(bool val) { myVisualizeInvalidPts = val; }
1566  bool opVisualizeInvalidPts(const SOP_NodeVerb::CookParms &cookparms) const
1567  {
1568  SOP_Node *thissop = cookparms.getNode();
1569  if (!thissop) return getVisualizeInvalidPts();
1570  bool result;
1571  OP_Utils::evalOpParm(result, thissop, "visinvalidpts", cookparms.getCookTime(), 0);
1572  return result;
1573  }
1574  UT_Vector3D getInvalidPtsColor() const { return myInvalidPtsColor; }
1575  void setInvalidPtsColor(UT_Vector3D val) { myInvalidPtsColor = val; }
1577  {
1578  SOP_Node *thissop = cookparms.getNode();
1579  if (!thissop) return getInvalidPtsColor();
1581  OP_Utils::evalOpParm(result, thissop, "visinvalidptsfg", cookparms.getCookTime(), 0);
1582  return result;
1583  }
1584  bool getVisualizeRepairedPts() const { return myVisualizeRepairedPts; }
1585  void setVisualizeRepairedPts(bool val) { myVisualizeRepairedPts = val; }
1587  {
1588  SOP_Node *thissop = cookparms.getNode();
1589  if (!thissop) return getVisualizeRepairedPts();
1590  bool result;
1591  OP_Utils::evalOpParm(result, thissop, "visrepairedpts", cookparms.getCookTime(), 0);
1592  return result;
1593  }
1594  UT_Vector3D getRepairedPtsColor() const { return myRepairedPtsColor; }
1595  void setRepairedPtsColor(UT_Vector3D val) { myRepairedPtsColor = val; }
1597  {
1598  SOP_Node *thissop = cookparms.getNode();
1599  if (!thissop) return getRepairedPtsColor();
1601  OP_Utils::evalOpParm(result, thissop, "visrepairedptsfg", cookparms.getCookTime(), 0);
1602  return result;
1603  }
1604  bool getVisualizeInvalidPolys() const { return myVisualizeInvalidPolys; }
1605  void setVisualizeInvalidPolys(bool val) { myVisualizeInvalidPolys = val; }
1607  {
1608  SOP_Node *thissop = cookparms.getNode();
1609  if (!thissop) return getVisualizeInvalidPolys();
1610  bool result;
1611  OP_Utils::evalOpParm(result, thissop, "visinvalidpolys", cookparms.getCookTime(), 0);
1612  return result;
1613  }
1614  UT_Vector3D getInvalidPolysColor() const { return myInvalidPolysColor; }
1615  void setInvalidPolysColor(UT_Vector3D val) { myInvalidPolysColor = val; }
1617  {
1618  SOP_Node *thissop = cookparms.getNode();
1619  if (!thissop) return getInvalidPolysColor();
1621  OP_Utils::evalOpParm(result, thissop, "visinvalidpolysfg", cookparms.getCookTime(), 0);
1622  return result;
1623  }
1624  bool getVisualizeRepairedPolys() const { return myVisualizeRepairedPolys; }
1625  void setVisualizeRepairedPolys(bool val) { myVisualizeRepairedPolys = val; }
1627  {
1628  SOP_Node *thissop = cookparms.getNode();
1629  if (!thissop) return getVisualizeRepairedPolys();
1630  bool result;
1631  OP_Utils::evalOpParm(result, thissop, "visrepairedpolys", cookparms.getCookTime(), 0);
1632  return result;
1633  }
1634  UT_Vector3D getRepairedPolysColor() const { return myRepairedPolysColor; }
1635  void setRepairedPolysColor(UT_Vector3D val) { myRepairedPolysColor = val; }
1637  {
1638  SOP_Node *thissop = cookparms.getNode();
1639  if (!thissop) return getRepairedPolysColor();
1641  OP_Utils::evalOpParm(result, thissop, "visrepairedpolysfg", cookparms.getCookTime(), 0);
1642  return result;
1643  }
1644 
1645 private:
1646  UT_StringHolder myGroup;
1647  int64 myMaxPasses;
1648  int64 myRandomSeed;
1649  int64 myIllFormedAction;
1650  int64 myManyEdgesAction;
1651  int64 myNonConvexAction;
1652  int64 myOverlappingAction;
1653  bool myPairOverlaps;
1654  int64 mySelfIntersectingAction;
1655  fpreal64 myThickness;
1656  int64 myGloballySmallAreasAction;
1657  fpreal64 myGlobalAreaThreshold;
1658  int64 myLocallySmallAreasAction;
1659  fpreal64 myLocalAreaThreshold;
1660  int64 myNonUniformAction;
1661  fpreal64 myUniformityThreshold;
1662  int64 myGloballySmallEdgesAction;
1663  fpreal64 myGlobalEdgeThreshold;
1664  int64 myLocallySmallEdgesAction;
1665  fpreal64 myLocalEdgeThreshold;
1666  int64 myDisconnectedPointsAction;
1667  int64 myNonManifoldPointsAction;
1668  bool myIgnoreWindings;
1669  bool myPreferLargeAngles;
1670  bool myVisualizeMaxManifold;
1671  bool myExportManifoldNumbers;
1672  bool myFixWindings;
1673  bool myDeleteSmallManifolds;
1674  int64 mySmallManifoldSize;
1675  bool myAddValidPolyAttrib;
1676  UT_StringHolder myValidPolyAttribName;
1677  bool myAddRepairedPolyAttrib;
1678  UT_StringHolder myRepairedPolyAttribName;
1679  bool myAddValidPtsAttrib;
1680  UT_StringHolder myValidPtsAttribName;
1681  bool myAddModifiedPtsAttrib;
1682  UT_StringHolder myModifiedPtsAttribName;
1683  bool myCreateGroups;
1684  bool myVisualizeInvalidPts;
1685  UT_Vector3D myInvalidPtsColor;
1686  bool myVisualizeRepairedPts;
1687  UT_Vector3D myRepairedPtsColor;
1688  bool myVisualizeInvalidPolys;
1689  UT_Vector3D myInvalidPolysColor;
1690  bool myVisualizeRepairedPolys;
1691  UT_Vector3D myRepairedPolysColor;
1692 
1693 };
bool getVisualizeInvalidPts() const
UT_StringHolder opModifiedPtsAttribName(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 getLocalEdgeThreshold() const
const UT_StringHolder & getValidPolyAttribName() const
void setNestParmValue(TempIndex idx, TempIndex instance, const PRM_DataItemHandle &value) override
void setRepairedPtsColor(UT_Vector3D val)
const UT_StringHolder & getModifiedPtsAttribName() const
GloballySmallEdgesAction opGloballySmallEdgesAction(const SOP_NodeVerb::CookParms &cookparms) const
ManyEdgesAction opManyEdgesAction(const SOP_NodeVerb::CookParms &cookparms) const
NonUniformAction opNonUniformAction(const SOP_NodeVerb::CookParms &cookparms) const
void setGlobalAreaThreshold(fpreal64 val)
void doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
int int32
Definition: SYS_Types.h:39
SOP_Node * getNode() const
Definition: SOP_NodeVerb.h:347
fpreal64 getGlobalEdgeThreshold() const
bool opVisualizeRepairedPts(const SOP_NodeVerb::CookParms &cookparms) const
bool load(UT_IStream &is)
SelfIntersectingAction opSelfIntersectingAction(const SOP_NodeVerb::CookParms &cookparms) const
bool isParmColorRamp(exint idx) const override
T clampMaxValue(fpreal maxvalue, const T &src) const
Definition: OP_NodeParms.h:315
static void loadData(UT_IStream &is, UT_Vector3D &v)
LocallySmallAreasAction getLocallySmallAreasAction() const
const char * getNestParmName(TempIndex fieldnum) const override
int64 opRandomSeed(const SOP_NodeVerb::CookParms &cookparms) const
static void saveData(std::ostream &os, UT_Matrix2D v)
fpreal64 opUniformityThreshold(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, UT_Vector4I &v)
fpreal64 opLocalEdgeThreshold(const SOP_NodeVerb::CookParms &cookparms) const
exint bread(int32 *buffer, exint asize=1)
GLboolean * data
Definition: glcorearb.h:131
GT_API const UT_StringHolder time
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector4.h:493
bool opVisualizeRepairedPolys(const SOP_NodeVerb::CookParms &cookparms) const
const GLdouble * v
Definition: glcorearb.h:837
fpreal getTime() const
Definition: OP_Context.h:62
void setVisualizeMaxManifold(bool val)
bool opCreateGroups(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, UT_SharedPtr< UT_Ramp > &v)
LocallySmallAreasAction opLocallySmallAreasAction(const SOP_NodeVerb::CookParms &cookparms) const
int64 opMaxPasses(const SOP_NodeVerb::CookParms &cookparms) const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_StringHolder &value) const override
void setAddRepairedPolyAttrib(bool val)
void setManyEdgesAction(ManyEdgesAction val)
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector4D &value) override
static void loadData(UT_IStream &is, int64 &v)
const UT_StringHolder & getValidPtsAttribName() const
void setInvalidPtsColor(UT_Vector3D val)
const OP_Context & context() const
Definition: OP_NodeParms.h:97
static void saveData(std::ostream &os, fpreal64 v)
void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
void setNestParmValue(TempIndex idx, TempIndex instance, const fpreal &value) override
void setSmallManifoldSize(int64 val)
constexpr SYS_FORCE_INLINE T & z() noexcept
Definition: UT_Vector3.h:667
int64 exint
Definition: SYS_Types.h:125
static void loadData(UT_IStream &is, UT_Vector2D &v)
void setGlobalEdgeThreshold(fpreal64 val)
SYS_FORCE_INLINE const char * buffer() const
DisconnectedPointsAction opDisconnectedPointsAction(const SOP_NodeVerb::CookParms &cookparms) const
static void saveData(std::ostream &os, bool v)
bool opIgnoreWindings(const SOP_NodeVerb::CookParms &cookparms) const
void setThickness(fpreal64 val)
GLdouble s
Definition: glad.h:3009
An output stream object that owns its own string buffer storage.
fpreal64 getGlobalAreaThreshold() const
static void loadData(UT_IStream &is, UT_StringHolder &v)
void setMaxPasses(int64 val)
**But if you need a result
Definition: thread.h:613
void copyFrom(const OP_NodeParms *src) override
static void loadData(UT_IStream &is, fpreal64 &v)
T clampMinValue(fpreal minvalue, const T &src) const
Definition: OP_NodeParms.h:308
void getNestParmValue(TempIndex idx, TempIndex instance, UT_SharedPtr< UT_Ramp > &value) const override
exint nodeIdx() const
Definition: OP_NodeParms.h:95
void setCreateGroups(bool val)
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 getAddValidPtsAttrib() const
void getNestParmValue(TempIndex idx, TempIndex instance, exint &value) const override
void setGloballySmallAreasAction(GloballySmallAreasAction val)
bool getVisualizeRepairedPolys() const
GloballySmallAreasAction opGloballySmallAreasAction(const SOP_NodeVerb::CookParms &cookparms) const
static void saveData(std::ostream &os, int64 v)
bool opVisualizeInvalidPts(const SOP_NodeVerb::CookParms &cookparms) const
void setExportManifoldNumbers(bool val)
NonManifoldPointsAction opNonManifoldPointsAction(const SOP_NodeVerb::CookParms &cookparms) const
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector4.h:491
const UT_StringHolder & getRepairedPolyAttribName() const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix4D &value) override
void setDeleteSmallManifolds(bool val)
void setVisualizeRepairedPolys(bool val)
void setNonConvexAction(NonConvexAction val)
fpreal64 opGlobalAreaThreshold(const SOP_NodeVerb::CookParms &cookparms) const
UT_Vector3D getInvalidPtsColor() const
double fpreal64
Definition: SYS_Types.h:201
bool opAddModifiedPtsAttrib(const SOP_NodeVerb::CookParms &cookparms) const
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector2.h:423
static void saveData(std::ostream &os, UT_SharedPtr< UT_Ramp > s)
bool operator==(const BaseDimensions< T > &a, const BaseDimensions< Y > &b)
Definition: Dimensions.h:137
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector2D &value) const override
static void loadData(UT_IStream &is, UT_Vector2I &v)
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector3D &value) override
UT_Vector3D getRepairedPolysColor() const
bool opPreferLargeAngles(const SOP_NodeVerb::CookParms &cookparms) const
void setNonManifoldPointsAction(NonManifoldPointsAction val)
bool getExportManifoldNumbers() const
exint length() const
bool opExportManifoldNumbers(const SOP_NodeVerb::CookParms &cookparms) const
bool getAddValidPolyAttrib() const
NonUniformAction getNonUniformAction() const
ParmType getNestParmType(TempIndex fieldnum) const override
bool opDeleteSmallManifolds(const SOP_NodeVerb::CookParms &cookparms) const
void setPreferLargeAngles(bool 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 opGroup(const SOP_NodeVerb::CookParms &cookparms) const
constexpr SYS_FORCE_INLINE T & z() noexcept
Definition: UT_Vector4.h:495
const OP_GraphProxy * graph() const
Definition: OP_NodeParms.h:94
void setDisconnectedPointsAction(DisconnectedPointsAction val)
NonManifoldPointsAction getNonManifoldPointsAction() const
void setVisualizeInvalidPolys(bool val)
fpreal64 opGlobalEdgeThreshold(const SOP_NodeVerb::CookParms &cookparms) const
void setUniformityThreshold(fpreal64 val)
static void loadData(UT_IStream &is, UT_Vector4D &v)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix2D &value) const override
static void saveData(std::ostream &os, UT_Matrix3D v)
void loadFromOpSubclass(const LoadParms &loadparms) override
NonConvexAction opNonConvexAction(const SOP_NodeVerb::CookParms &cookparms) const
void setValidPolyAttribName(const UT_StringHolder &val)
long long int64
Definition: SYS_Types.h:116
OverlappingAction opOverlappingAction(const SOP_NodeVerb::CookParms &cookparms) const
bool getVisualizeInvalidPolys() const
fpreal64 getLocalAreaThreshold() const
static void loadData(UT_IStream &is, UT_Vector3I &v)
const UT_StringHolder & getGroup() const
UT_Vector3T< fpreal64 > UT_Vector3D
void setVisualizeRepairedPts(bool val)
void setOverlappingAction(OverlappingAction val)
fpreal64 getThickness() const
bool operator!=(const SOP_PolyDoctorParms &src) const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix3D &value) override
void setModifiedPtsAttribName(const UT_StringHolder &val)
bool getAddModifiedPtsAttrib() const
bool getVisualizeMaxManifold() const
virtual void evalOpParm(int64 &v, NodeIdx node, const char *parmname, fpreal time, DEP_MicroNode *depnode) const =0
int64 opSmallManifoldSize(const SOP_NodeVerb::CookParms &cookparms) const
IllFormedAction getIllFormedAction() const
void save(std::ostream &os) const
void setAddValidPolyAttrib(bool val)
bool getPreferLargeAngles() const
void setLocallySmallEdgesAction(LocallySmallEdgesAction val)
void saveBinary(std::ostream &os) const
Save string to binary stream.
Definition: UT_String.h:296
IllFormedAction opIllFormedAction(const SOP_NodeVerb::CookParms &cookparms) const
UT_Vector3D getRepairedPtsColor() const
void setLocalAreaThreshold(fpreal64 val)
GT_API const UT_StringHolder version
void setLocallySmallAreasAction(LocallySmallAreasAction val)
static void saveData(std::ostream &os, PRM_DataItemHandle s)
void setNestParmValue(TempIndex idx, TempIndex instance, const exint &value) override
static void saveData(std::ostream &os, UT_StringHolder s)
void setAddModifiedPtsAttrib(bool val)
bool opFixWindings(const SOP_NodeVerb::CookParms &cookparms) const
void setVisualizeInvalidPts(bool val)
void setSelfIntersectingAction(SelfIntersectingAction val)
UT_Vector3D getInvalidPolysColor() const
void setGloballySmallEdgesAction(GloballySmallEdgesAction val)
void coerceValue(T &result, const S &src) const
Definition: OP_NodeParms.h:301
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_SharedPtr< UT_Ramp > &value) override
bool getDeleteSmallManifolds() const
static void saveData(std::ostream &os, UT_Vector2D v)
GloballySmallAreasAction getGloballySmallAreasAction() const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector3D &value) const override
void setRepairedPolyAttribName(const UT_StringHolder &val)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix4D &value) const override
fpreal64 opLocalAreaThreshold(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 fpreal
Definition: SYS_Types.h:277
DEP_MicroNode * depnode() const
Definition: OP_NodeParms.h:99
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector2D &value) override
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix2D &value) override
Utility class for containing a color ramp.
Definition: UT_Ramp.h:88
void setIllFormedAction(IllFormedAction val)
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_StringHolder &value) override
static void loadData(UT_IStream &is, UT_Matrix4D &v)
constexpr SYS_FORCE_INLINE T & w() noexcept
Definition: UT_Vector4.h:497
int64 getSmallManifoldSize() const
void setValidPtsAttribName(const UT_StringHolder &val)
GLuint GLfloat * val
Definition: glcorearb.h:1608
static void saveData(std::ostream &os, UT_Vector3D v)
bool getAddRepairedPolyAttrib() const
#define SOP_API
Definition: SOP_API.h:10
void doGetParmValue(TempIndex idx, TempIndex instance, T &value) const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector4D &value) const override
void setNonUniformAction(NonUniformAction val)
static void loadData(UT_IStream &is, UT_Matrix3D &v)
UT_Vector3D opRepairedPolysColor(const SOP_NodeVerb::CookParms &cookparms) const
UT_Vector3D opInvalidPtsColor(const SOP_NodeVerb::CookParms &cookparms) const
NonConvexAction getNonConvexAction() const
fpreal64 getUniformityThreshold() const
void setInvalidPolysColor(UT_Vector3D val)
fpreal getCookTime() const
Definition: SOP_NodeVerb.h:361
static void loadData(UT_IStream &is, PRM_DataItemHandle &v)
bool opPairOverlaps(const SOP_NodeVerb::CookParms &cookparms) const
static void saveData(std::ostream &os, UT_Vector4D v)
bool opVisualizeInvalidPolys(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opValidPtsAttribName(const SOP_NodeVerb::CookParms &cookparms) const
void setPairOverlaps(bool val)
static void loadData(UT_IStream &is, bool &v)
bool operator==(const SOP_PolyDoctorParms &src) const
const char * findChar(int c) const
Definition: UT_String.h:1385
#define UT_ASSERT(ZZ)
Definition: UT_Assert.h:156
Definition: core.h:1131
GloballySmallEdgesAction getGloballySmallEdgesAction() const
void setIgnoreWindings(bool val)
bool opVisualizeMaxManifold(const SOP_NodeVerb::CookParms &cookparms) const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
LocallySmallEdgesAction opLocallySmallEdgesAction(const SOP_NodeVerb::CookParms &cookparms) const
ManyEdgesAction getManyEdgesAction() const
GLboolean r
Definition: glcorearb.h:1222
void buildFromOp(const OP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
DisconnectedPointsAction getDisconnectedPointsAction() const
UT_Vector3D opInvalidPolysColor(const SOP_NodeVerb::CookParms &cookparms) const
LocallySmallEdgesAction getLocallySmallEdgesAction() const
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector3.h:665
bool getVisualizeRepairedPts() const
fpreal64 opThickness(const SOP_NodeVerb::CookParms &cookparms) const
static void saveData(std::ostream &os, UT_Matrix4D v)
type
Definition: core.h:1059
void getNestParmValue(TempIndex idx, TempIndex instance, fpreal &value) const override
UT_Vector3D opRepairedPtsColor(const SOP_NodeVerb::CookParms &cookparms) const
void setAddValidPtsAttrib(bool val)
OverlappingAction getOverlappingAction() const
void setRandomSeed(int64 val)
void setRepairedPolysColor(UT_Vector3D val)
static void loadData(UT_IStream &is, UT_Matrix2D &v)
UT_StringHolder opRepairedPolyAttribName(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opValidPolyAttribName(const SOP_NodeVerb::CookParms &cookparms) const
SelfIntersectingAction getSelfIntersectingAction() const
UT_SharedPtr< const PRM_DataItem > PRM_DataItemHandle
Definition: PRM_Parm.h:89
exint getNestNumParms(TempIndex idx) const override
void setGroup(const UT_StringHolder &val)
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector2.h:425
bool opAddRepairedPolyAttrib(const SOP_NodeVerb::CookParms &cookparms) const
SYS_FORCE_INLINE bool isstring() const
OP_NodeParms & operator=(const OP_NodeParms &)=default
SYS_FORCE_INLINE void strncpy(const char *src, exint maxlen)
bool opAddValidPtsAttrib(const SOP_NodeVerb::CookParms &cookparms) const
void setLocalEdgeThreshold(fpreal64 val)
GLenum src
Definition: glcorearb.h:1793
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector3.h:663
bool opAddValidPolyAttrib(const SOP_NodeVerb::CookParms &cookparms) const