HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
SOP_Boolean.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_BooleanEnums
24 {
25  enum class ASurface
26  {
27  SOLID = 0,
28  SURFACE
29  };
30 
32  getToken(ASurface enum_value)
33  {
34  using namespace UT::Literal;
35  switch (enum_value) {
36  case ASurface::SOLID: return "solid"_sh;
37  case ASurface::SURFACE: return "surface"_sh;
38  default: UT_ASSERT(false); return ""_sh;
39  }
40  }
41 
42  enum class BSurface
43  {
44  SOLID = 0,
45  SURFACE
46  };
47 
49  getToken(BSurface enum_value)
50  {
51  using namespace UT::Literal;
52  switch (enum_value) {
53  case BSurface::SOLID: return "solid"_sh;
54  case BSurface::SURFACE: return "surface"_sh;
55  default: UT_ASSERT(false); return ""_sh;
56  }
57  }
58 
59  enum class BooleanOp
60  {
61  UNION = 0,
62  INTERSECT,
63  SUBTRACT,
64  SHATTER,
65  CUSTOM,
66  // -- menu separator --
67  SEAM = 6,
68  // -- menu separator --
69  DETECT = 8,
70  RESOLVE
71  };
72 
74  getToken(BooleanOp enum_value)
75  {
76  using namespace UT::Literal;
77  switch (enum_value) {
78  case BooleanOp::UNION: return "union"_sh;
79  case BooleanOp::INTERSECT: return "intersect"_sh;
80  case BooleanOp::SUBTRACT: return "subtract"_sh;
81  case BooleanOp::SHATTER: return "shatter"_sh;
82  case BooleanOp::CUSTOM: return "custom"_sh;
83  // -- menu separator --
84  case BooleanOp::SEAM: return "seam"_sh;
85  // -- menu separator --
86  case BooleanOp::DETECT: return "detect"_sh;
87  case BooleanOp::RESOLVE: return "resolve"_sh;
88  default: UT_ASSERT(false); return ""_sh;
89  }
90  }
91 
92  enum class SubtractChoices
93  {
94  AMINUSB = 0,
95  BMINUSA,
96  BOTH
97  };
98 
101  {
102  using namespace UT::Literal;
103  switch (enum_value) {
104  case SubtractChoices::AMINUSB: return "aminusb"_sh;
105  case SubtractChoices::BMINUSA: return "bminusa"_sh;
106  case SubtractChoices::BOTH: return "both"_sh;
107  default: UT_ASSERT(false); return ""_sh;
108  }
109  }
110 
111  enum class ShatterChoices
112  {
113  APIECES = 0,
114  BPIECES,
115  BOTH
116  };
117 
120  {
121  using namespace UT::Literal;
122  switch (enum_value) {
123  case ShatterChoices::APIECES: return "apieces"_sh;
124  case ShatterChoices::BPIECES: return "bpieces"_sh;
125  case ShatterChoices::BOTH: return "both"_sh;
126  default: UT_ASSERT(false); return ""_sh;
127  }
128  }
129 
130  enum class WindingOp
131  {
132  ARANGE = 0,
133  BRANGE,
134  AND,
135  OR,
136  XOR
137  };
138 
140  getToken(WindingOp enum_value)
141  {
142  using namespace UT::Literal;
143  switch (enum_value) {
144  case WindingOp::ARANGE: return "arange"_sh;
145  case WindingOp::BRANGE: return "brange"_sh;
146  case WindingOp::AND: return "and"_sh;
147  case WindingOp::OR: return "or"_sh;
148  case WindingOp::XOR: return "xor"_sh;
149  default: UT_ASSERT(false); return ""_sh;
150  }
151  }
152 
153  enum class Detriangulate
154  {
155  NONE = 0,
156  UNCHANGED,
157  ALL
158  };
159 
161  getToken(Detriangulate enum_value)
162  {
163  using namespace UT::Literal;
164  switch (enum_value) {
165  case Detriangulate::NONE: return "none"_sh;
166  case Detriangulate::UNCHANGED: return "unchanged"_sh;
167  case Detriangulate::ALL: return "all"_sh;
168  default: UT_ASSERT(false); return ""_sh;
169  }
170  }
171 
172 }
173 
174 
176 {
177 public:
178  static int version() { return 1; }
179 
181  {
182  myGroupA = ""_UTsh;
183  myASurface = 0;
184  myResolveA = true;
185  myGroupB = ""_UTsh;
186  myBSurface = 0;
187  myResolveB = true;
188  myBooleanOp = 0;
189  mySubtractChoices = 0;
190  myShatterChoices = 0;
191  myOpenCurvesOnly = true;
192  myGenerateAASeams = true;
193  myGenerateBBSeams = true;
194  myGenerateABSeams = true;
195  myWindingOp = 0;
196  myMergeNbrs = false;
197  myDetriangulate = 2;
198  myRemoveInlinePoints = true;
199  myUniqueSeams = false;
200  myCorrectNormals = true;
201  myUseAxAPolys = false;
202  myAxAPolys = "axapolys"_UTsh;
203  myUseAxBPolys = false;
204  myAxBPolys = "axbpolys"_UTsh;
205  myUseAxAList = false;
206  myAxAList = "axalist"_UTsh;
207  myUseAxBList = false;
208  myAxBList = "axblist"_UTsh;
209  myCollapseTinyEdges = true;
210  myLengthThreshold = 0.00001;
211  myUseAPolys = false;
212  myAPolys = "apolys"_UTsh;
213  myUseAInsideB = false;
214  myAInsideB = "ainsideb"_UTsh;
215  myUseAOutsideB = false;
216  myAOutsideB = "aoutsideb"_UTsh;
217  myUseBPolys = false;
218  myBPolys = "bpolys"_UTsh;
219  myUseBInsideA = false;
220  myBInsideA = "binsidea"_UTsh;
221  myUseBOutsideA = false;
222  myBOutsideA = "boutsidea"_UTsh;
223  myUseABOverlap = false;
224  myABOverlap = "aboverlap"_UTsh;
225  myUseAPieces = false;
226  myAPieces = "apieces"_UTsh;
227  myUseBPieces = false;
228  myBPieces = "bpieces"_UTsh;
229  myUseABPieces = false;
230  myABPieces = "abpieces"_UTsh;
231  myUseReversedPolys = false;
232  myReversedPolys = "reversed"_UTsh;
233  myUseAASeamEdges = false;
234  myAASeamEdges = "aseams"_UTsh;
235  myUseBBSeamEdges = false;
236  myBBSeamEdges = "bseams"_UTsh;
237  myUseABSeamEdges = false;
238  myABSeamEdges = "abseams"_UTsh;
239  myDepthInA = UT_Vector2I(1,1000);
240  myDepthInB = UT_Vector2I(1,1000);
241 
242  }
243 
244  explicit SOP_BooleanParms(const SOP_BooleanParms &) = default;
245  SOP_BooleanParms &operator=(const SOP_BooleanParms &) = default;
246  SOP_BooleanParms(SOP_BooleanParms &&) noexcept = default;
247  SOP_BooleanParms &operator=(SOP_BooleanParms &&) noexcept = default;
248 
249  ~SOP_BooleanParms() override {}
250 
251  bool operator==(const SOP_BooleanParms &src) const
252  {
253  if (myGroupA != src.myGroupA) return false;
254  if (myASurface != src.myASurface) return false;
255  if (myResolveA != src.myResolveA) return false;
256  if (myGroupB != src.myGroupB) return false;
257  if (myBSurface != src.myBSurface) return false;
258  if (myResolveB != src.myResolveB) return false;
259  if (myBooleanOp != src.myBooleanOp) return false;
260  if (mySubtractChoices != src.mySubtractChoices) return false;
261  if (myShatterChoices != src.myShatterChoices) return false;
262  if (myOpenCurvesOnly != src.myOpenCurvesOnly) return false;
263  if (myGenerateAASeams != src.myGenerateAASeams) return false;
264  if (myGenerateBBSeams != src.myGenerateBBSeams) return false;
265  if (myGenerateABSeams != src.myGenerateABSeams) return false;
266  if (myWindingOp != src.myWindingOp) return false;
267  if (myMergeNbrs != src.myMergeNbrs) return false;
268  if (myDetriangulate != src.myDetriangulate) return false;
269  if (myRemoveInlinePoints != src.myRemoveInlinePoints) return false;
270  if (myUniqueSeams != src.myUniqueSeams) return false;
271  if (myCorrectNormals != src.myCorrectNormals) return false;
272  if (myUseAxAPolys != src.myUseAxAPolys) return false;
273  if (myAxAPolys != src.myAxAPolys) return false;
274  if (myUseAxBPolys != src.myUseAxBPolys) return false;
275  if (myAxBPolys != src.myAxBPolys) return false;
276  if (myUseAxAList != src.myUseAxAList) return false;
277  if (myAxAList != src.myAxAList) return false;
278  if (myUseAxBList != src.myUseAxBList) return false;
279  if (myAxBList != src.myAxBList) return false;
280  if (myCollapseTinyEdges != src.myCollapseTinyEdges) return false;
281  if (myLengthThreshold != src.myLengthThreshold) return false;
282  if (myUseAPolys != src.myUseAPolys) return false;
283  if (myAPolys != src.myAPolys) return false;
284  if (myUseAInsideB != src.myUseAInsideB) return false;
285  if (myAInsideB != src.myAInsideB) return false;
286  if (myUseAOutsideB != src.myUseAOutsideB) return false;
287  if (myAOutsideB != src.myAOutsideB) return false;
288  if (myUseBPolys != src.myUseBPolys) return false;
289  if (myBPolys != src.myBPolys) return false;
290  if (myUseBInsideA != src.myUseBInsideA) return false;
291  if (myBInsideA != src.myBInsideA) return false;
292  if (myUseBOutsideA != src.myUseBOutsideA) return false;
293  if (myBOutsideA != src.myBOutsideA) return false;
294  if (myUseABOverlap != src.myUseABOverlap) return false;
295  if (myABOverlap != src.myABOverlap) return false;
296  if (myUseAPieces != src.myUseAPieces) return false;
297  if (myAPieces != src.myAPieces) return false;
298  if (myUseBPieces != src.myUseBPieces) return false;
299  if (myBPieces != src.myBPieces) return false;
300  if (myUseABPieces != src.myUseABPieces) return false;
301  if (myABPieces != src.myABPieces) return false;
302  if (myUseReversedPolys != src.myUseReversedPolys) return false;
303  if (myReversedPolys != src.myReversedPolys) return false;
304  if (myUseAASeamEdges != src.myUseAASeamEdges) return false;
305  if (myAASeamEdges != src.myAASeamEdges) return false;
306  if (myUseBBSeamEdges != src.myUseBBSeamEdges) return false;
307  if (myBBSeamEdges != src.myBBSeamEdges) return false;
308  if (myUseABSeamEdges != src.myUseABSeamEdges) return false;
309  if (myABSeamEdges != src.myABSeamEdges) return false;
310  if (myDepthInA != src.myDepthInA) return false;
311  if (myDepthInB != src.myDepthInB) return false;
312 
313  return true;
314  }
315  bool operator!=(const SOP_BooleanParms &src) const
316  {
317  return !operator==(src);
318  }
326 
327 
328 
329  void buildFromOp(const OP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
330  {
331  myGroupA = ""_UTsh;
332  if (true)
333  graph->evalOpParm(myGroupA, nodeidx, "agroup", time, 0);
334  myASurface = 0;
335  if (true)
336  graph->evalOpParm(myASurface, nodeidx, "asurface", time, 0);
337  myResolveA = true;
338  if (true)
339  graph->evalOpParm(myResolveA, nodeidx, "resolvea", time, 0);
340  myGroupB = ""_UTsh;
341  if (true)
342  graph->evalOpParm(myGroupB, nodeidx, "bgroup", time, 0);
343  myBSurface = 0;
344  if (true)
345  graph->evalOpParm(myBSurface, nodeidx, "bsurface", time, 0);
346  myResolveB = true;
347  if (true)
348  graph->evalOpParm(myResolveB, nodeidx, "resolveb", time, 0);
349  myBooleanOp = 0;
350  if (true)
351  graph->evalOpParm(myBooleanOp, nodeidx, "booleanop", time, 0);
352  mySubtractChoices = 0;
353  if (true && ( (true&&!(((int64(getBooleanOp())!=2)))) ) )
354  graph->evalOpParm(mySubtractChoices, nodeidx, "subtractchoices", time, 0);
355  myShatterChoices = 0;
356  if (true && ( (true&&!(((int64(getBooleanOp())!=3)))) ) )
357  graph->evalOpParm(myShatterChoices, nodeidx, "shatterchoices", time, 0);
358  myOpenCurvesOnly = true;
359  if (true && ( (true&&!(((int64(getBooleanOp())!=6)))) ) )
360  graph->evalOpParm(myOpenCurvesOnly, nodeidx, "opencurvesonly", time, 0);
361  myGenerateAASeams = true;
362  if (true && ( (true&&!(((int64(getBooleanOp())!=6)))) ) )
363  graph->evalOpParm(myGenerateAASeams, nodeidx, "generateaaseams", time, 0);
364  myGenerateBBSeams = true;
365  if (true && ( (true&&!(((int64(getBooleanOp())!=6)))) ) )
366  graph->evalOpParm(myGenerateBBSeams, nodeidx, "generatebbseams", time, 0);
367  myGenerateABSeams = true;
368  if (true && ( (true&&!(((int64(getBooleanOp())!=6)))) ) )
369  graph->evalOpParm(myGenerateABSeams, nodeidx, "generateabseams", time, 0);
370  myWindingOp = 0;
371  if (true && ( (true&&!(((int64(getBooleanOp())!=4)))) ) )
372  graph->evalOpParm(myWindingOp, nodeidx, "windingop", time, 0);
373  myMergeNbrs = false;
374  if (true && ( (true&&!(((int64(getBooleanOp())!=4)))) ) )
375  graph->evalOpParm(myMergeNbrs, nodeidx, "mergenbrs", time, 0);
376  myDetriangulate = 2;
377  if (true && ( (true&&!(((int64(getBooleanOp())==6))||((int64(getBooleanOp())==8))||((int64(getBooleanOp())==9)))) ) )
378  graph->evalOpParm(myDetriangulate, nodeidx, "detriangulate", time, 0);
379  myRemoveInlinePoints = true;
380  if (true && ( (true&&!(((int64(getBooleanOp())==6))||((int64(getBooleanOp())==8))||((int64(getBooleanOp())==9))||((int64(getDetriangulate())!=2)))) ) )
381  graph->evalOpParm(myRemoveInlinePoints, nodeidx, "removeinlinepoints", time, 0);
382  myUniqueSeams = false;
383  if (true && ( (true&&!(((int64(getBooleanOp())==6))||((int64(getBooleanOp())==8))||((int64(getBooleanOp())==9)))) ) )
384  graph->evalOpParm(myUniqueSeams, nodeidx, "uniqueseams", time, 0);
385  myCorrectNormals = true;
386  if (true && ( (true&&!(((int64(getBooleanOp())==6))||((int64(getBooleanOp())==8))||((int64(getBooleanOp())==9)))) ) )
387  graph->evalOpParm(myCorrectNormals, nodeidx, "correctnormals", time, 0);
388  myUseAxAPolys = false;
389  if (true && ( (true&&!(((int64(getBooleanOp())!=8)))) ) )
390  graph->evalOpParm(myUseAxAPolys, nodeidx, "useaxapolys", time, 0);
391  myAxAPolys = "axapolys"_UTsh;
392  if (true && ( (true&&!(((getUseAxAPolys()==0))||((int64(getBooleanOp())!=8)))) ) )
393  graph->evalOpParm(myAxAPolys, nodeidx, "axapolys", time, 0);
394  myUseAxBPolys = false;
395  if (true && ( (true&&!(((int64(getBooleanOp())!=8)))) ) )
396  graph->evalOpParm(myUseAxBPolys, nodeidx, "useaxbpolys", time, 0);
397  myAxBPolys = "axbpolys"_UTsh;
398  if (true && ( (true&&!(((getUseAxBPolys()==0))||((int64(getBooleanOp())!=8)))) ) )
399  graph->evalOpParm(myAxBPolys, nodeidx, "axbpolys", time, 0);
400  myUseAxAList = false;
401  if (true && ( (true&&!(((int64(getBooleanOp())!=8)))) ) )
402  graph->evalOpParm(myUseAxAList, nodeidx, "useaxalist", time, 0);
403  myAxAList = "axalist"_UTsh;
404  if (true && ( (true&&!(((getUseAxAList()==0))||((int64(getBooleanOp())!=8)))) ) )
405  graph->evalOpParm(myAxAList, nodeidx, "axalist", time, 0);
406  myUseAxBList = false;
407  if (true && ( (true&&!(((int64(getBooleanOp())!=8)))) ) )
408  graph->evalOpParm(myUseAxBList, nodeidx, "useaxblist", time, 0);
409  myAxBList = "axblist"_UTsh;
410  if (true && ( (true&&!(((getUseAxBList()==0))||((int64(getBooleanOp())!=8)))) ) )
411  graph->evalOpParm(myAxBList, nodeidx, "axblist", time, 0);
412  myCollapseTinyEdges = true;
413  if (true && ( (true&&!(((int64(getBooleanOp())==8))||((int64(getBooleanOp())==9))||((int64(getBooleanOp())==6)))) ) )
414  graph->evalOpParm(myCollapseTinyEdges, nodeidx, "collapsetinyedges", time, 0);
415  myLengthThreshold = 0.00001;
416  if (true && ( (true&&!(((int64(getBooleanOp())==8))||((int64(getBooleanOp())==9))||((int64(getBooleanOp())==6))||((getCollapseTinyEdges()==0)))) ) )
417  graph->evalOpParm(myLengthThreshold, nodeidx, "lengththreshold", time, 0);
418  myUseAPolys = false;
419  if (true && ( (true&&!(((int64(getBooleanOp())==6))||((int64(getBooleanOp())==8))||((int64(getBooleanOp())==9))||((int64(getBSurface())==0)))) ) )
420  graph->evalOpParm(myUseAPolys, nodeidx, "useapolys", time, 0);
421  myAPolys = "apolys"_UTsh;
422  if (true && ( (true&&!(((int64(getBSurface())==0))||((getUseAPolys()==0)))) ) )
423  graph->evalOpParm(myAPolys, nodeidx, "apolys", time, 0);
424  myUseAInsideB = false;
425  if (true && ( (true&&!(((int64(getBooleanOp())==6))||((int64(getBooleanOp())==8))||((int64(getBooleanOp())==9))||((int64(getBSurface())==1)))) ) )
426  graph->evalOpParm(myUseAInsideB, nodeidx, "useainsideb", time, 0);
427  myAInsideB = "ainsideb"_UTsh;
428  if (true && ( (true&&!(((int64(getBSurface())==1))||((getUseAInsideB()==0)))) ) )
429  graph->evalOpParm(myAInsideB, nodeidx, "ainsideb", time, 0);
430  myUseAOutsideB = false;
431  if (true && ( (true&&!(((int64(getBooleanOp())==6))||((int64(getBooleanOp())==8))||((int64(getBooleanOp())==9))||((int64(getBSurface())==1)))) ) )
432  graph->evalOpParm(myUseAOutsideB, nodeidx, "useaoutsideb", time, 0);
433  myAOutsideB = "aoutsideb"_UTsh;
434  if (true && ( (true&&!(((int64(getBSurface())==1))||((getUseAOutsideB()==0)))) ) )
435  graph->evalOpParm(myAOutsideB, nodeidx, "aoutsideb", time, 0);
436  myUseBPolys = false;
437  if (true && ( (true&&!(((int64(getBooleanOp())==6))||((int64(getBooleanOp())==8))||((int64(getBooleanOp())==9))||((int64(getASurface())==0)))) ) )
438  graph->evalOpParm(myUseBPolys, nodeidx, "usebpolys", time, 0);
439  myBPolys = "bpolys"_UTsh;
440  if (true && ( (true&&!(((getUseBPolys()==0))||((int64(getASurface())==0)))) ) )
441  graph->evalOpParm(myBPolys, nodeidx, "bpolys", time, 0);
442  myUseBInsideA = false;
443  if (true && ( (true&&!(((int64(getASurface())==1))||((int64(getBooleanOp())==6))||((int64(getBooleanOp())==8))||((int64(getBooleanOp())==9)))) ) )
444  graph->evalOpParm(myUseBInsideA, nodeidx, "usebinsidea", time, 0);
445  myBInsideA = "binsidea"_UTsh;
446  if (true && ( (true&&!(((int64(getASurface())==1))||((getUseBInsideA()==0)))) ) )
447  graph->evalOpParm(myBInsideA, nodeidx, "binsidea", time, 0);
448  myUseBOutsideA = false;
449  if (true && ( (true&&!(((int64(getASurface())==1))||((int64(getBooleanOp())==6))||((int64(getBooleanOp())==8))||((int64(getBooleanOp())==9)))) ) )
450  graph->evalOpParm(myUseBOutsideA, nodeidx, "useboutsidea", time, 0);
451  myBOutsideA = "boutsidea"_UTsh;
452  if (true && ( (true&&!(((int64(getASurface())==1))||((getUseBOutsideA()==0)))) ) )
453  graph->evalOpParm(myBOutsideA, nodeidx, "boutsidea", time, 0);
454  myUseABOverlap = false;
455  if (true && ( (true&&!(((int64(getBooleanOp())==6))||((int64(getBooleanOp())==8))||((int64(getBooleanOp())==9)))) ) )
456  graph->evalOpParm(myUseABOverlap, nodeidx, "useaboverlap", time, 0);
457  myABOverlap = "aboverlap"_UTsh;
458  if (true && ( (true&&!(((getUseABOverlap()==0)))) ) )
459  graph->evalOpParm(myABOverlap, nodeidx, "aboverlap", time, 0);
460  myUseAPieces = false;
461  if (true && ( (true&&!(((int64(getASurface())==1))||((int64(getBooleanOp())!=2)&&(int64(getBooleanOp())!=3))||((int64(getBooleanOp())==2)&&(int64(getSubtractChoices())!=2))||((int64(getBooleanOp())==3)&&(int64(getShatterChoices())==1)))) ) )
462  graph->evalOpParm(myUseAPieces, nodeidx, "useaonlypieces", time, 0);
463  myAPieces = "apieces"_UTsh;
464  if (true && ( (true&&!(((int64(getASurface())==1))||((int64(getBooleanOp())!=2)&&(int64(getBooleanOp())!=3))||((int64(getBooleanOp())==2)&&(int64(getSubtractChoices())!=2))||((int64(getBooleanOp())==3)&&(int64(getShatterChoices())==1))||((getUseAPieces()==0)))) ) )
465  graph->evalOpParm(myAPieces, nodeidx, "aonlypieces", time, 0);
466  myUseBPieces = false;
467  if (true && ( (true&&!(((int64(getBSurface())==1))||((int64(getBooleanOp())!=2)&&(int64(getBooleanOp())!=3))||((int64(getBooleanOp())==2)&&(int64(getSubtractChoices())!=2))||((int64(getBooleanOp())==3)&&(int64(getShatterChoices())==0)))) ) )
468  graph->evalOpParm(myUseBPieces, nodeidx, "usebonlypieces", time, 0);
469  myBPieces = "bpieces"_UTsh;
470  if (true && ( (true&&!(((int64(getBSurface())==1))||((int64(getBooleanOp())!=2)&&(int64(getBooleanOp())!=3))||((int64(getBooleanOp())==2)&&(int64(getSubtractChoices())!=2))||((int64(getBooleanOp())==3)&&(int64(getShatterChoices())==0))||((getUseBPieces()==0)))) ) )
471  graph->evalOpParm(myBPieces, nodeidx, "bonlypieces", time, 0);
472  myUseABPieces = false;
473  if (true && ( (true&&!(((int64(getBSurface())==1)&&(int64(getASurface())==1))||((int64(getBooleanOp())!=3)))) ) )
474  graph->evalOpParm(myUseABPieces, nodeidx, "useabpieces", time, 0);
475  myABPieces = "abpieces"_UTsh;
476  if (true && ( (true&&!(((int64(getBSurface())==1)&&(int64(getASurface())==1))||((int64(getBooleanOp())!=3))||((getUseABPieces()==0)))) ) )
477  graph->evalOpParm(myABPieces, nodeidx, "abpieces", time, 0);
478  myUseReversedPolys = false;
479  if (true && ( (true&&!(((int64(getBSurface())==1)&&(int64(getASurface())==1))||((int64(getBooleanOp())!=3)&&(int64(getBooleanOp())!=2)))) ) )
480  graph->evalOpParm(myUseReversedPolys, nodeidx, "usereversedpolys", time, 0);
481  myReversedPolys = "reversed"_UTsh;
482  if (true && ( (true&&!(((int64(getBSurface())==1)&&(int64(getASurface())==1))||((int64(getBooleanOp())!=3)&&(int64(getBooleanOp())!=2))||((getUseReversedPolys()==0)))) ) )
483  graph->evalOpParm(myReversedPolys, nodeidx, "reversedpolys", time, 0);
484  myUseAASeamEdges = false;
485  if (true && ( (true&&!(((int64(getBooleanOp())==8))||((int64(getBooleanOp())==9)))) ) )
486  graph->evalOpParm(myUseAASeamEdges, nodeidx, "useaaseamedges", time, 0);
487  myAASeamEdges = "aseams"_UTsh;
488  if (true && ( (true&&!(((getUseAASeamEdges()==0))||((int64(getBooleanOp())==8))||((int64(getBooleanOp())==9)))) ) )
489  graph->evalOpParm(myAASeamEdges, nodeidx, "aaseamedges", time, 0);
490  myUseBBSeamEdges = false;
491  if (true && ( (true&&!(((int64(getBooleanOp())==8))||((int64(getBooleanOp())==9)))) ) )
492  graph->evalOpParm(myUseBBSeamEdges, nodeidx, "usebbseamedges", time, 0);
493  myBBSeamEdges = "bseams"_UTsh;
494  if (true && ( (true&&!(((getUseBBSeamEdges()==0))||((int64(getBooleanOp())==8))||((int64(getBooleanOp())==9)))) ) )
495  graph->evalOpParm(myBBSeamEdges, nodeidx, "bbseamedges", time, 0);
496  myUseABSeamEdges = false;
497  if (true && ( (true&&!(((int64(getBooleanOp())==8))||((int64(getBooleanOp())==9)))) ) )
498  graph->evalOpParm(myUseABSeamEdges, nodeidx, "useabseamedges", time, 0);
499  myABSeamEdges = "abseams"_UTsh;
500  if (true && ( (true&&!(((getUseABSeamEdges()==0))||((int64(getBooleanOp())==8))||((int64(getBooleanOp())==9)))) ) )
501  graph->evalOpParm(myABSeamEdges, nodeidx, "abseamedges", time, 0);
502  myDepthInA = UT_Vector2I(1,1000);
503  if (true && ( (true&&!(((int64(getBooleanOp())!=4))||((int64(getWindingOp())==1)))) ) )
504  graph->evalOpParm(myDepthInA, nodeidx, "adepth", time, 0);
505  myDepthInB = UT_Vector2I(1,1000);
506  if (true && ( (true&&!(((int64(getBooleanOp())!=4))||((int64(getWindingOp())==0)))) ) )
507  graph->evalOpParm(myDepthInB, nodeidx, "bdepth", time, 0);
508 
509  }
510 
511 
512  void loadFromOpSubclass(const LoadParms &loadparms) override
513  {
514  buildFromOp(loadparms.graph(), loadparms.nodeIdx(), loadparms.context().getTime(), loadparms.depnode());
515  }
516 
517 
518  void copyFrom(const OP_NodeParms *src) override
519  {
520  *this = *((const SOP_BooleanParms *)src);
521  }
522 
523  template <typename T>
524  void
525  doGetParmValue(TempIndex idx, TempIndex instance, T &value) const
526  {
527  if (idx.size() < 1)
528  return;
529  UT_ASSERT(idx.size() == instance.size()+1);
530  if (idx.size() != instance.size()+1)
531  return;
532  switch (idx[0])
533  {
534  case 0:
535  coerceValue(value, myGroupA);
536  break;
537  case 1:
538  coerceValue(value, myASurface);
539  break;
540  case 2:
541  coerceValue(value, myResolveA);
542  break;
543  case 3:
544  coerceValue(value, myGroupB);
545  break;
546  case 4:
547  coerceValue(value, myBSurface);
548  break;
549  case 5:
550  coerceValue(value, myResolveB);
551  break;
552  case 6:
553  coerceValue(value, myBooleanOp);
554  break;
555  case 7:
556  coerceValue(value, mySubtractChoices);
557  break;
558  case 8:
559  coerceValue(value, myShatterChoices);
560  break;
561  case 9:
562  coerceValue(value, myOpenCurvesOnly);
563  break;
564  case 10:
565  coerceValue(value, myGenerateAASeams);
566  break;
567  case 11:
568  coerceValue(value, myGenerateBBSeams);
569  break;
570  case 12:
571  coerceValue(value, myGenerateABSeams);
572  break;
573  case 13:
574  coerceValue(value, myWindingOp);
575  break;
576  case 14:
577  coerceValue(value, myMergeNbrs);
578  break;
579  case 15:
580  coerceValue(value, myDetriangulate);
581  break;
582  case 16:
583  coerceValue(value, myRemoveInlinePoints);
584  break;
585  case 17:
586  coerceValue(value, myUniqueSeams);
587  break;
588  case 18:
589  coerceValue(value, myCorrectNormals);
590  break;
591  case 19:
592  coerceValue(value, myUseAxAPolys);
593  break;
594  case 20:
595  coerceValue(value, myAxAPolys);
596  break;
597  case 21:
598  coerceValue(value, myUseAxBPolys);
599  break;
600  case 22:
601  coerceValue(value, myAxBPolys);
602  break;
603  case 23:
604  coerceValue(value, myUseAxAList);
605  break;
606  case 24:
607  coerceValue(value, myAxAList);
608  break;
609  case 25:
610  coerceValue(value, myUseAxBList);
611  break;
612  case 26:
613  coerceValue(value, myAxBList);
614  break;
615  case 27:
616  coerceValue(value, myCollapseTinyEdges);
617  break;
618  case 28:
619  coerceValue(value, myLengthThreshold);
620  break;
621  case 29:
622  coerceValue(value, myUseAPolys);
623  break;
624  case 30:
625  coerceValue(value, myAPolys);
626  break;
627  case 31:
628  coerceValue(value, myUseAInsideB);
629  break;
630  case 32:
631  coerceValue(value, myAInsideB);
632  break;
633  case 33:
634  coerceValue(value, myUseAOutsideB);
635  break;
636  case 34:
637  coerceValue(value, myAOutsideB);
638  break;
639  case 35:
640  coerceValue(value, myUseBPolys);
641  break;
642  case 36:
643  coerceValue(value, myBPolys);
644  break;
645  case 37:
646  coerceValue(value, myUseBInsideA);
647  break;
648  case 38:
649  coerceValue(value, myBInsideA);
650  break;
651  case 39:
652  coerceValue(value, myUseBOutsideA);
653  break;
654  case 40:
655  coerceValue(value, myBOutsideA);
656  break;
657  case 41:
658  coerceValue(value, myUseABOverlap);
659  break;
660  case 42:
661  coerceValue(value, myABOverlap);
662  break;
663  case 43:
664  coerceValue(value, myUseAPieces);
665  break;
666  case 44:
667  coerceValue(value, myAPieces);
668  break;
669  case 45:
670  coerceValue(value, myUseBPieces);
671  break;
672  case 46:
673  coerceValue(value, myBPieces);
674  break;
675  case 47:
676  coerceValue(value, myUseABPieces);
677  break;
678  case 48:
679  coerceValue(value, myABPieces);
680  break;
681  case 49:
682  coerceValue(value, myUseReversedPolys);
683  break;
684  case 50:
685  coerceValue(value, myReversedPolys);
686  break;
687  case 51:
688  coerceValue(value, myUseAASeamEdges);
689  break;
690  case 52:
691  coerceValue(value, myAASeamEdges);
692  break;
693  case 53:
694  coerceValue(value, myUseBBSeamEdges);
695  break;
696  case 54:
697  coerceValue(value, myBBSeamEdges);
698  break;
699  case 55:
700  coerceValue(value, myUseABSeamEdges);
701  break;
702  case 56:
703  coerceValue(value, myABSeamEdges);
704  break;
705  case 57:
706  coerceValue(value, myDepthInA);
707  break;
708  case 58:
709  coerceValue(value, myDepthInB);
710  break;
711 
712  }
713  }
714 
715  bool isParmColorRamp(exint idx) const override
716  {
717  switch (idx)
718  {
719 
720  }
721  return false;
722  }
723 
724  void getNestParmValue(TempIndex idx, TempIndex instance, exint &value) const override
725  { doGetParmValue(idx, instance, value); }
726  void getNestParmValue(TempIndex idx, TempIndex instance, fpreal &value) const override
727  { doGetParmValue(idx, instance, value); }
728  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector2D &value) const override
729  { doGetParmValue(idx, instance, value); }
730  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector3D &value) const override
731  { doGetParmValue(idx, instance, value); }
732  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector4D &value) const override
733  { doGetParmValue(idx, instance, value); }
734  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix2D &value) const override
735  { doGetParmValue(idx, instance, value); }
736  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
737  { doGetParmValue(idx, instance, value); }
738  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix4D &value) const override
739  { doGetParmValue(idx, instance, value); }
740  void getNestParmValue(TempIndex idx, TempIndex instance, UT_StringHolder &value) const override
741  { doGetParmValue(idx, instance, value); }
742  void getNestParmValue(TempIndex idx, TempIndex instance, UT_SharedPtr<UT_Ramp> &value) const override
743  { doGetParmValue(idx, instance, value); }
744  void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
745  { doGetParmValue(idx, instance, value); }
746 
747  template <typename T>
748  void
749  doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
750  {
751  if (idx.size() < 1)
752  return;
753  UT_ASSERT(idx.size() == instance.size()+1);
754  if (idx.size() != instance.size()+1)
755  return;
756  switch (idx[0])
757  {
758  case 0:
759  coerceValue(myGroupA, ( ( value ) ));
760  break;
761  case 1:
762  coerceValue(myASurface, clampMinValue(0, clampMaxValue(1, value ) ));
763  break;
764  case 2:
765  coerceValue(myResolveA, ( ( value ) ));
766  break;
767  case 3:
768  coerceValue(myGroupB, ( ( value ) ));
769  break;
770  case 4:
771  coerceValue(myBSurface, clampMinValue(0, clampMaxValue(1, value ) ));
772  break;
773  case 5:
774  coerceValue(myResolveB, ( ( value ) ));
775  break;
776  case 6:
777  coerceValue(myBooleanOp, clampMinValue(0, clampMaxValue(9, value ) ));
778  break;
779  case 7:
780  coerceValue(mySubtractChoices, clampMinValue(0, clampMaxValue(2, value ) ));
781  break;
782  case 8:
783  coerceValue(myShatterChoices, clampMinValue(0, clampMaxValue(2, value ) ));
784  break;
785  case 9:
786  coerceValue(myOpenCurvesOnly, ( ( value ) ));
787  break;
788  case 10:
789  coerceValue(myGenerateAASeams, ( ( value ) ));
790  break;
791  case 11:
792  coerceValue(myGenerateBBSeams, ( ( value ) ));
793  break;
794  case 12:
795  coerceValue(myGenerateABSeams, ( ( value ) ));
796  break;
797  case 13:
798  coerceValue(myWindingOp, clampMinValue(0, clampMaxValue(4, value ) ));
799  break;
800  case 14:
801  coerceValue(myMergeNbrs, ( ( value ) ));
802  break;
803  case 15:
804  coerceValue(myDetriangulate, clampMinValue(0, clampMaxValue(2, value ) ));
805  break;
806  case 16:
807  coerceValue(myRemoveInlinePoints, ( ( value ) ));
808  break;
809  case 17:
810  coerceValue(myUniqueSeams, ( ( value ) ));
811  break;
812  case 18:
813  coerceValue(myCorrectNormals, ( ( value ) ));
814  break;
815  case 19:
816  coerceValue(myUseAxAPolys, ( ( value ) ));
817  break;
818  case 20:
819  coerceValue(myAxAPolys, ( ( value ) ));
820  break;
821  case 21:
822  coerceValue(myUseAxBPolys, ( ( value ) ));
823  break;
824  case 22:
825  coerceValue(myAxBPolys, ( ( value ) ));
826  break;
827  case 23:
828  coerceValue(myUseAxAList, ( ( value ) ));
829  break;
830  case 24:
831  coerceValue(myAxAList, ( ( value ) ));
832  break;
833  case 25:
834  coerceValue(myUseAxBList, ( ( value ) ));
835  break;
836  case 26:
837  coerceValue(myAxBList, ( ( value ) ));
838  break;
839  case 27:
840  coerceValue(myCollapseTinyEdges, ( ( value ) ));
841  break;
842  case 28:
843  coerceValue(myLengthThreshold, ( ( value ) ));
844  break;
845  case 29:
846  coerceValue(myUseAPolys, ( ( value ) ));
847  break;
848  case 30:
849  coerceValue(myAPolys, ( ( value ) ));
850  break;
851  case 31:
852  coerceValue(myUseAInsideB, ( ( value ) ));
853  break;
854  case 32:
855  coerceValue(myAInsideB, ( ( value ) ));
856  break;
857  case 33:
858  coerceValue(myUseAOutsideB, ( ( value ) ));
859  break;
860  case 34:
861  coerceValue(myAOutsideB, ( ( value ) ));
862  break;
863  case 35:
864  coerceValue(myUseBPolys, ( ( value ) ));
865  break;
866  case 36:
867  coerceValue(myBPolys, ( ( value ) ));
868  break;
869  case 37:
870  coerceValue(myUseBInsideA, ( ( value ) ));
871  break;
872  case 38:
873  coerceValue(myBInsideA, ( ( value ) ));
874  break;
875  case 39:
876  coerceValue(myUseBOutsideA, ( ( value ) ));
877  break;
878  case 40:
879  coerceValue(myBOutsideA, ( ( value ) ));
880  break;
881  case 41:
882  coerceValue(myUseABOverlap, ( ( value ) ));
883  break;
884  case 42:
885  coerceValue(myABOverlap, ( ( value ) ));
886  break;
887  case 43:
888  coerceValue(myUseAPieces, ( ( value ) ));
889  break;
890  case 44:
891  coerceValue(myAPieces, ( ( value ) ));
892  break;
893  case 45:
894  coerceValue(myUseBPieces, ( ( value ) ));
895  break;
896  case 46:
897  coerceValue(myBPieces, ( ( value ) ));
898  break;
899  case 47:
900  coerceValue(myUseABPieces, ( ( value ) ));
901  break;
902  case 48:
903  coerceValue(myABPieces, ( ( value ) ));
904  break;
905  case 49:
906  coerceValue(myUseReversedPolys, ( ( value ) ));
907  break;
908  case 50:
909  coerceValue(myReversedPolys, ( ( value ) ));
910  break;
911  case 51:
912  coerceValue(myUseAASeamEdges, ( ( value ) ));
913  break;
914  case 52:
915  coerceValue(myAASeamEdges, ( ( value ) ));
916  break;
917  case 53:
918  coerceValue(myUseBBSeamEdges, ( ( value ) ));
919  break;
920  case 54:
921  coerceValue(myBBSeamEdges, ( ( value ) ));
922  break;
923  case 55:
924  coerceValue(myUseABSeamEdges, ( ( value ) ));
925  break;
926  case 56:
927  coerceValue(myABSeamEdges, ( ( value ) ));
928  break;
929  case 57:
930  coerceValue(myDepthInA, ( ( value ) ));
931  break;
932  case 58:
933  coerceValue(myDepthInB, ( ( value ) ));
934  break;
935 
936  }
937  }
938 
939  void setNestParmValue(TempIndex idx, TempIndex instance, const exint &value) override
940  { doSetParmValue(idx, instance, value); }
941  void setNestParmValue(TempIndex idx, TempIndex instance, const fpreal &value) override
942  { doSetParmValue(idx, instance, value); }
943  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector2D &value) override
944  { doSetParmValue(idx, instance, value); }
945  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector3D &value) override
946  { doSetParmValue(idx, instance, value); }
947  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector4D &value) override
948  { doSetParmValue(idx, instance, value); }
949  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix2D &value) override
950  { doSetParmValue(idx, instance, value); }
951  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix3D &value) override
952  { doSetParmValue(idx, instance, value); }
953  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix4D &value) override
954  { doSetParmValue(idx, instance, value); }
955  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_StringHolder &value) override
956  { doSetParmValue(idx, instance, value); }
957  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_SharedPtr<UT_Ramp> &value) override
958  { doSetParmValue(idx, instance, value); }
959  void setNestParmValue(TempIndex idx, TempIndex instance, const PRM_DataItemHandle &value) override
960  { doSetParmValue(idx, instance, value); }
961 
962  exint getNestNumParms(TempIndex idx) const override
963  {
964  if (idx.size() == 0)
965  return 59;
966  switch (idx[0])
967  {
968 
969  }
970  // Invalid
971  return 0;
972  }
973 
974  const char *getNestParmName(TempIndex fieldnum) const override
975  {
976  if (fieldnum.size() < 1)
977  return 0;
978  switch (fieldnum[0])
979  {
980  case 0:
981  return "agroup";
982  case 1:
983  return "asurface";
984  case 2:
985  return "resolvea";
986  case 3:
987  return "bgroup";
988  case 4:
989  return "bsurface";
990  case 5:
991  return "resolveb";
992  case 6:
993  return "booleanop";
994  case 7:
995  return "subtractchoices";
996  case 8:
997  return "shatterchoices";
998  case 9:
999  return "opencurvesonly";
1000  case 10:
1001  return "generateaaseams";
1002  case 11:
1003  return "generatebbseams";
1004  case 12:
1005  return "generateabseams";
1006  case 13:
1007  return "windingop";
1008  case 14:
1009  return "mergenbrs";
1010  case 15:
1011  return "detriangulate";
1012  case 16:
1013  return "removeinlinepoints";
1014  case 17:
1015  return "uniqueseams";
1016  case 18:
1017  return "correctnormals";
1018  case 19:
1019  return "useaxapolys";
1020  case 20:
1021  return "axapolys";
1022  case 21:
1023  return "useaxbpolys";
1024  case 22:
1025  return "axbpolys";
1026  case 23:
1027  return "useaxalist";
1028  case 24:
1029  return "axalist";
1030  case 25:
1031  return "useaxblist";
1032  case 26:
1033  return "axblist";
1034  case 27:
1035  return "collapsetinyedges";
1036  case 28:
1037  return "lengththreshold";
1038  case 29:
1039  return "useapolys";
1040  case 30:
1041  return "apolys";
1042  case 31:
1043  return "useainsideb";
1044  case 32:
1045  return "ainsideb";
1046  case 33:
1047  return "useaoutsideb";
1048  case 34:
1049  return "aoutsideb";
1050  case 35:
1051  return "usebpolys";
1052  case 36:
1053  return "bpolys";
1054  case 37:
1055  return "usebinsidea";
1056  case 38:
1057  return "binsidea";
1058  case 39:
1059  return "useboutsidea";
1060  case 40:
1061  return "boutsidea";
1062  case 41:
1063  return "useaboverlap";
1064  case 42:
1065  return "aboverlap";
1066  case 43:
1067  return "useaonlypieces";
1068  case 44:
1069  return "aonlypieces";
1070  case 45:
1071  return "usebonlypieces";
1072  case 46:
1073  return "bonlypieces";
1074  case 47:
1075  return "useabpieces";
1076  case 48:
1077  return "abpieces";
1078  case 49:
1079  return "usereversedpolys";
1080  case 50:
1081  return "reversedpolys";
1082  case 51:
1083  return "useaaseamedges";
1084  case 52:
1085  return "aaseamedges";
1086  case 53:
1087  return "usebbseamedges";
1088  case 54:
1089  return "bbseamedges";
1090  case 55:
1091  return "useabseamedges";
1092  case 56:
1093  return "abseamedges";
1094  case 57:
1095  return "adepth";
1096  case 58:
1097  return "bdepth";
1098 
1099  }
1100  return 0;
1101  }
1102 
1103  ParmType getNestParmType(TempIndex fieldnum) const override
1104  {
1105  if (fieldnum.size() < 1)
1106  return PARM_UNSUPPORTED;
1107  switch (fieldnum[0])
1108  {
1109  case 0:
1110  return PARM_STRING;
1111  case 1:
1112  return PARM_INTEGER;
1113  case 2:
1114  return PARM_INTEGER;
1115  case 3:
1116  return PARM_STRING;
1117  case 4:
1118  return PARM_INTEGER;
1119  case 5:
1120  return PARM_INTEGER;
1121  case 6:
1122  return PARM_INTEGER;
1123  case 7:
1124  return PARM_INTEGER;
1125  case 8:
1126  return PARM_INTEGER;
1127  case 9:
1128  return PARM_INTEGER;
1129  case 10:
1130  return PARM_INTEGER;
1131  case 11:
1132  return PARM_INTEGER;
1133  case 12:
1134  return PARM_INTEGER;
1135  case 13:
1136  return PARM_INTEGER;
1137  case 14:
1138  return PARM_INTEGER;
1139  case 15:
1140  return PARM_INTEGER;
1141  case 16:
1142  return PARM_INTEGER;
1143  case 17:
1144  return PARM_INTEGER;
1145  case 18:
1146  return PARM_INTEGER;
1147  case 19:
1148  return PARM_INTEGER;
1149  case 20:
1150  return PARM_STRING;
1151  case 21:
1152  return PARM_INTEGER;
1153  case 22:
1154  return PARM_STRING;
1155  case 23:
1156  return PARM_INTEGER;
1157  case 24:
1158  return PARM_STRING;
1159  case 25:
1160  return PARM_INTEGER;
1161  case 26:
1162  return PARM_STRING;
1163  case 27:
1164  return PARM_INTEGER;
1165  case 28:
1166  return PARM_FLOAT;
1167  case 29:
1168  return PARM_INTEGER;
1169  case 30:
1170  return PARM_STRING;
1171  case 31:
1172  return PARM_INTEGER;
1173  case 32:
1174  return PARM_STRING;
1175  case 33:
1176  return PARM_INTEGER;
1177  case 34:
1178  return PARM_STRING;
1179  case 35:
1180  return PARM_INTEGER;
1181  case 36:
1182  return PARM_STRING;
1183  case 37:
1184  return PARM_INTEGER;
1185  case 38:
1186  return PARM_STRING;
1187  case 39:
1188  return PARM_INTEGER;
1189  case 40:
1190  return PARM_STRING;
1191  case 41:
1192  return PARM_INTEGER;
1193  case 42:
1194  return PARM_STRING;
1195  case 43:
1196  return PARM_INTEGER;
1197  case 44:
1198  return PARM_STRING;
1199  case 45:
1200  return PARM_INTEGER;
1201  case 46:
1202  return PARM_STRING;
1203  case 47:
1204  return PARM_INTEGER;
1205  case 48:
1206  return PARM_STRING;
1207  case 49:
1208  return PARM_INTEGER;
1209  case 50:
1210  return PARM_STRING;
1211  case 51:
1212  return PARM_INTEGER;
1213  case 52:
1214  return PARM_STRING;
1215  case 53:
1216  return PARM_INTEGER;
1217  case 54:
1218  return PARM_STRING;
1219  case 55:
1220  return PARM_INTEGER;
1221  case 56:
1222  return PARM_STRING;
1223  case 57:
1224  return PARM_VECTOR2;
1225  case 58:
1226  return PARM_VECTOR2;
1227 
1228  }
1229  return PARM_UNSUPPORTED;
1230  }
1231 
1232  // Boiler plate to load individual types.
1233  static void loadData(UT_IStream &is, int64 &v)
1234  { is.bread(&v, 1); }
1235  static void loadData(UT_IStream &is, bool &v)
1236  { int64 iv; is.bread(&iv, 1); v = iv; }
1237  static void loadData(UT_IStream &is, fpreal64 &v)
1238  { is.bread<fpreal64>(&v, 1); }
1239  static void loadData(UT_IStream &is, UT_Vector2D &v)
1240  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1); }
1241  static void loadData(UT_IStream &is, UT_Vector3D &v)
1242  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
1243  is.bread<fpreal64>(&v.z(), 1); }
1244  static void loadData(UT_IStream &is, UT_Vector4D &v)
1245  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
1246  is.bread<fpreal64>(&v.z(), 1); is.bread<fpreal64>(&v.w(), 1); }
1247  static void loadData(UT_IStream &is, UT_Matrix2D &v)
1248  { for (int r = 0; r < 2; r++) for (int c = 0; c < 2; c++) is.bread<fpreal64>(&v(r, c), 1); }
1249  static void loadData(UT_IStream &is, UT_Matrix3D &v)
1250  { for (int r = 0; r < 3; r++) for (int c = 0; c < 3; c++) is.bread<fpreal64>(&v(r, c), 1); }
1251  static void loadData(UT_IStream &is, UT_Matrix4D &v)
1252  { for (int r = 0; r < 4; r++) for (int c = 0; c < 4; c++) is.bread<fpreal64>(&v(r, c), 1); }
1253  static void loadData(UT_IStream &is, UT_Vector2I &v)
1254  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1); }
1255  static void loadData(UT_IStream &is, UT_Vector3I &v)
1256  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
1257  is.bread<int64>(&v.z(), 1); }
1258  static void loadData(UT_IStream &is, UT_Vector4I &v)
1259  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
1260  is.bread<int64>(&v.z(), 1); is.bread<int64>(&v.w(), 1); }
1262  { is.bread(v); }
1264  { UT_StringHolder rampdata;
1265  loadData(is, rampdata);
1266  if (rampdata.isstring())
1267  {
1268  v.reset(new UT_Ramp());
1269  UT_IStream istr((const char *) rampdata, rampdata.length(), UT_ISTREAM_ASCII);
1270  v->load(istr);
1271  }
1272  else v.reset();
1273  }
1276  loadData(is, data);
1277  if (data.isstring())
1278  {
1279  // Find the data type.
1280  const char *colon = UT_StringWrap(data).findChar(':');
1281  if (colon)
1282  {
1283  int typelen = colon - data.buffer();
1285  type.strncpy(data.buffer(), typelen);
1286  UT_IStream istr(((const char *) data) + typelen + 1, data.length() - (typelen + 1), UT_ISTREAM_BINARY);
1287 
1288  v = PRM_DataFactory::parseBinary(type.buffer(), istr);
1289  }
1290  }
1291  else v.reset();
1292  }
1293 
1294  static void saveData(std::ostream &os, int64 v)
1295  { UTwrite(os, &v); }
1296  static void saveData(std::ostream &os, bool v)
1297  { int64 iv = v; UTwrite(os, &iv); }
1298  static void saveData(std::ostream &os, fpreal64 v)
1299  { UTwrite<fpreal64>(os, &v); }
1300  static void saveData(std::ostream &os, UT_Vector2D v)
1301  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y()); }
1302  static void saveData(std::ostream &os, UT_Vector3D v)
1303  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
1304  UTwrite<fpreal64>(os, &v.z()); }
1305  static void saveData(std::ostream &os, UT_Vector4D v)
1306  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
1307  UTwrite<fpreal64>(os, &v.z()); UTwrite<fpreal64>(os, &v.w()); }
1308  static void saveData(std::ostream &os, UT_Matrix2D v)
1310  static void saveData(std::ostream &os, UT_Matrix3D v)
1312  static void saveData(std::ostream &os, UT_Matrix4D v)
1314  static void saveData(std::ostream &os, UT_StringHolder s)
1315  { UT_StringWrap(s).saveBinary(os); }
1316  static void saveData(std::ostream &os, UT_SharedPtr<UT_Ramp> s)
1318  UT_OStringStream ostr;
1319  if (s) s->save(ostr);
1320  result = ostr.str();
1321  saveData(os, result);
1322  }
1323  static void saveData(std::ostream &os, PRM_DataItemHandle s)
1325  UT_OStringStream ostr;
1326  if (s)
1327  {
1328  ostr << s->getDataTypeToken();
1329  ostr << ":";
1330  s->saveBinary(ostr);
1331  }
1332  result = ostr.str();
1333  saveData(os, result);
1334  }
1335 
1336 
1337  void save(std::ostream &os) const
1338  {
1339  int32 v = version();
1340  UTwrite(os, &v);
1341  saveData(os, myGroupA);
1342  saveData(os, myASurface);
1343  saveData(os, myResolveA);
1344  saveData(os, myGroupB);
1345  saveData(os, myBSurface);
1346  saveData(os, myResolveB);
1347  saveData(os, myBooleanOp);
1348  saveData(os, mySubtractChoices);
1349  saveData(os, myShatterChoices);
1350  saveData(os, myOpenCurvesOnly);
1351  saveData(os, myGenerateAASeams);
1352  saveData(os, myGenerateBBSeams);
1353  saveData(os, myGenerateABSeams);
1354  saveData(os, myWindingOp);
1355  saveData(os, myMergeNbrs);
1356  saveData(os, myDetriangulate);
1357  saveData(os, myRemoveInlinePoints);
1358  saveData(os, myUniqueSeams);
1359  saveData(os, myCorrectNormals);
1360  saveData(os, myUseAxAPolys);
1361  saveData(os, myAxAPolys);
1362  saveData(os, myUseAxBPolys);
1363  saveData(os, myAxBPolys);
1364  saveData(os, myUseAxAList);
1365  saveData(os, myAxAList);
1366  saveData(os, myUseAxBList);
1367  saveData(os, myAxBList);
1368  saveData(os, myCollapseTinyEdges);
1369  saveData(os, myLengthThreshold);
1370  saveData(os, myUseAPolys);
1371  saveData(os, myAPolys);
1372  saveData(os, myUseAInsideB);
1373  saveData(os, myAInsideB);
1374  saveData(os, myUseAOutsideB);
1375  saveData(os, myAOutsideB);
1376  saveData(os, myUseBPolys);
1377  saveData(os, myBPolys);
1378  saveData(os, myUseBInsideA);
1379  saveData(os, myBInsideA);
1380  saveData(os, myUseBOutsideA);
1381  saveData(os, myBOutsideA);
1382  saveData(os, myUseABOverlap);
1383  saveData(os, myABOverlap);
1384  saveData(os, myUseAPieces);
1385  saveData(os, myAPieces);
1386  saveData(os, myUseBPieces);
1387  saveData(os, myBPieces);
1388  saveData(os, myUseABPieces);
1389  saveData(os, myABPieces);
1390  saveData(os, myUseReversedPolys);
1391  saveData(os, myReversedPolys);
1392  saveData(os, myUseAASeamEdges);
1393  saveData(os, myAASeamEdges);
1394  saveData(os, myUseBBSeamEdges);
1395  saveData(os, myBBSeamEdges);
1396  saveData(os, myUseABSeamEdges);
1397  saveData(os, myABSeamEdges);
1398  saveData(os, myDepthInA);
1399  saveData(os, myDepthInB);
1400 
1401  }
1402 
1403  bool load(UT_IStream &is)
1404  {
1405  int32 v;
1406  is.bread(&v, 1);
1407  if (version() != v)
1408  {
1409  // Fail incompatible versions
1410  return false;
1411  }
1412  loadData(is, myGroupA);
1413  loadData(is, myASurface);
1414  loadData(is, myResolveA);
1415  loadData(is, myGroupB);
1416  loadData(is, myBSurface);
1417  loadData(is, myResolveB);
1418  loadData(is, myBooleanOp);
1419  loadData(is, mySubtractChoices);
1420  loadData(is, myShatterChoices);
1421  loadData(is, myOpenCurvesOnly);
1422  loadData(is, myGenerateAASeams);
1423  loadData(is, myGenerateBBSeams);
1424  loadData(is, myGenerateABSeams);
1425  loadData(is, myWindingOp);
1426  loadData(is, myMergeNbrs);
1427  loadData(is, myDetriangulate);
1428  loadData(is, myRemoveInlinePoints);
1429  loadData(is, myUniqueSeams);
1430  loadData(is, myCorrectNormals);
1431  loadData(is, myUseAxAPolys);
1432  loadData(is, myAxAPolys);
1433  loadData(is, myUseAxBPolys);
1434  loadData(is, myAxBPolys);
1435  loadData(is, myUseAxAList);
1436  loadData(is, myAxAList);
1437  loadData(is, myUseAxBList);
1438  loadData(is, myAxBList);
1439  loadData(is, myCollapseTinyEdges);
1440  loadData(is, myLengthThreshold);
1441  loadData(is, myUseAPolys);
1442  loadData(is, myAPolys);
1443  loadData(is, myUseAInsideB);
1444  loadData(is, myAInsideB);
1445  loadData(is, myUseAOutsideB);
1446  loadData(is, myAOutsideB);
1447  loadData(is, myUseBPolys);
1448  loadData(is, myBPolys);
1449  loadData(is, myUseBInsideA);
1450  loadData(is, myBInsideA);
1451  loadData(is, myUseBOutsideA);
1452  loadData(is, myBOutsideA);
1453  loadData(is, myUseABOverlap);
1454  loadData(is, myABOverlap);
1455  loadData(is, myUseAPieces);
1456  loadData(is, myAPieces);
1457  loadData(is, myUseBPieces);
1458  loadData(is, myBPieces);
1459  loadData(is, myUseABPieces);
1460  loadData(is, myABPieces);
1461  loadData(is, myUseReversedPolys);
1462  loadData(is, myReversedPolys);
1463  loadData(is, myUseAASeamEdges);
1464  loadData(is, myAASeamEdges);
1465  loadData(is, myUseBBSeamEdges);
1466  loadData(is, myBBSeamEdges);
1467  loadData(is, myUseABSeamEdges);
1468  loadData(is, myABSeamEdges);
1469  loadData(is, myDepthInA);
1470  loadData(is, myDepthInB);
1471 
1472  return true;
1473  }
1474 
1475  const UT_StringHolder & getGroupA() const { return myGroupA; }
1476  void setGroupA(const UT_StringHolder & val) { myGroupA = val; }
1478  {
1479  SOP_Node *thissop = cookparms.getNode();
1480  if (!thissop) return getGroupA();
1482  OP_Utils::evalOpParm(result, thissop, "agroup", cookparms.getCookTime(), 0);
1483  return result;
1484  }
1485  ASurface getASurface() const { return ASurface(myASurface); }
1486  void setASurface(ASurface val) { myASurface = int64(val); }
1488  {
1489  SOP_Node *thissop = cookparms.getNode();
1490  if (!thissop) return getASurface();
1491  int64 result;
1492  OP_Utils::evalOpParm(result, thissop, "asurface", cookparms.getCookTime(), 0);
1493  return ASurface(result);
1494  }
1495  bool getResolveA() const { return myResolveA; }
1496  void setResolveA(bool val) { myResolveA = val; }
1497  bool opResolveA(const SOP_NodeVerb::CookParms &cookparms) const
1498  {
1499  SOP_Node *thissop = cookparms.getNode();
1500  if (!thissop) return getResolveA();
1501  bool result;
1502  OP_Utils::evalOpParm(result, thissop, "resolvea", cookparms.getCookTime(), 0);
1503  return result;
1504  }
1505  const UT_StringHolder & getGroupB() const { return myGroupB; }
1506  void setGroupB(const UT_StringHolder & val) { myGroupB = val; }
1508  {
1509  SOP_Node *thissop = cookparms.getNode();
1510  if (!thissop) return getGroupB();
1512  OP_Utils::evalOpParm(result, thissop, "bgroup", cookparms.getCookTime(), 0);
1513  return result;
1514  }
1515  BSurface getBSurface() const { return BSurface(myBSurface); }
1516  void setBSurface(BSurface val) { myBSurface = int64(val); }
1518  {
1519  SOP_Node *thissop = cookparms.getNode();
1520  if (!thissop) return getBSurface();
1521  int64 result;
1522  OP_Utils::evalOpParm(result, thissop, "bsurface", cookparms.getCookTime(), 0);
1523  return BSurface(result);
1524  }
1525  bool getResolveB() const { return myResolveB; }
1526  void setResolveB(bool val) { myResolveB = val; }
1527  bool opResolveB(const SOP_NodeVerb::CookParms &cookparms) const
1528  {
1529  SOP_Node *thissop = cookparms.getNode();
1530  if (!thissop) return getResolveB();
1531  bool result;
1532  OP_Utils::evalOpParm(result, thissop, "resolveb", cookparms.getCookTime(), 0);
1533  return result;
1534  }
1535  BooleanOp getBooleanOp() const { return BooleanOp(myBooleanOp); }
1536  void setBooleanOp(BooleanOp val) { myBooleanOp = int64(val); }
1538  {
1539  SOP_Node *thissop = cookparms.getNode();
1540  if (!thissop) return getBooleanOp();
1541  int64 result;
1542  OP_Utils::evalOpParm(result, thissop, "booleanop", cookparms.getCookTime(), 0);
1543  return BooleanOp(result);
1544  }
1545  SubtractChoices getSubtractChoices() const { return SubtractChoices(mySubtractChoices); }
1546  void setSubtractChoices(SubtractChoices val) { mySubtractChoices = int64(val); }
1548  {
1549  SOP_Node *thissop = cookparms.getNode();
1550  if (!thissop) return getSubtractChoices();
1551  int64 result;
1552  OP_Utils::evalOpParm(result, thissop, "subtractchoices", cookparms.getCookTime(), 0);
1553  return SubtractChoices(result);
1554  }
1555  ShatterChoices getShatterChoices() const { return ShatterChoices(myShatterChoices); }
1556  void setShatterChoices(ShatterChoices val) { myShatterChoices = int64(val); }
1558  {
1559  SOP_Node *thissop = cookparms.getNode();
1560  if (!thissop) return getShatterChoices();
1561  int64 result;
1562  OP_Utils::evalOpParm(result, thissop, "shatterchoices", cookparms.getCookTime(), 0);
1563  return ShatterChoices(result);
1564  }
1565  bool getOpenCurvesOnly() const { return myOpenCurvesOnly; }
1566  void setOpenCurvesOnly(bool val) { myOpenCurvesOnly = val; }
1567  bool opOpenCurvesOnly(const SOP_NodeVerb::CookParms &cookparms) const
1568  {
1569  SOP_Node *thissop = cookparms.getNode();
1570  if (!thissop) return getOpenCurvesOnly();
1571  bool result;
1572  OP_Utils::evalOpParm(result, thissop, "opencurvesonly", cookparms.getCookTime(), 0);
1573  return result;
1574  }
1575  bool getGenerateAASeams() const { return myGenerateAASeams; }
1576  void setGenerateAASeams(bool val) { myGenerateAASeams = val; }
1577  bool opGenerateAASeams(const SOP_NodeVerb::CookParms &cookparms) const
1578  {
1579  SOP_Node *thissop = cookparms.getNode();
1580  if (!thissop) return getGenerateAASeams();
1581  bool result;
1582  OP_Utils::evalOpParm(result, thissop, "generateaaseams", cookparms.getCookTime(), 0);
1583  return result;
1584  }
1585  bool getGenerateBBSeams() const { return myGenerateBBSeams; }
1586  void setGenerateBBSeams(bool val) { myGenerateBBSeams = val; }
1587  bool opGenerateBBSeams(const SOP_NodeVerb::CookParms &cookparms) const
1588  {
1589  SOP_Node *thissop = cookparms.getNode();
1590  if (!thissop) return getGenerateBBSeams();
1591  bool result;
1592  OP_Utils::evalOpParm(result, thissop, "generatebbseams", cookparms.getCookTime(), 0);
1593  return result;
1594  }
1595  bool getGenerateABSeams() const { return myGenerateABSeams; }
1596  void setGenerateABSeams(bool val) { myGenerateABSeams = val; }
1597  bool opGenerateABSeams(const SOP_NodeVerb::CookParms &cookparms) const
1598  {
1599  SOP_Node *thissop = cookparms.getNode();
1600  if (!thissop) return getGenerateABSeams();
1601  bool result;
1602  OP_Utils::evalOpParm(result, thissop, "generateabseams", cookparms.getCookTime(), 0);
1603  return result;
1604  }
1605  WindingOp getWindingOp() const { return WindingOp(myWindingOp); }
1606  void setWindingOp(WindingOp val) { myWindingOp = int64(val); }
1608  {
1609  SOP_Node *thissop = cookparms.getNode();
1610  if (!thissop) return getWindingOp();
1611  int64 result;
1612  OP_Utils::evalOpParm(result, thissop, "windingop", cookparms.getCookTime(), 0);
1613  return WindingOp(result);
1614  }
1615  bool getMergeNbrs() const { return myMergeNbrs; }
1616  void setMergeNbrs(bool val) { myMergeNbrs = val; }
1617  bool opMergeNbrs(const SOP_NodeVerb::CookParms &cookparms) const
1618  {
1619  SOP_Node *thissop = cookparms.getNode();
1620  if (!thissop) return getMergeNbrs();
1621  bool result;
1622  OP_Utils::evalOpParm(result, thissop, "mergenbrs", cookparms.getCookTime(), 0);
1623  return result;
1624  }
1625  Detriangulate getDetriangulate() const { return Detriangulate(myDetriangulate); }
1626  void setDetriangulate(Detriangulate val) { myDetriangulate = int64(val); }
1628  {
1629  SOP_Node *thissop = cookparms.getNode();
1630  if (!thissop) return getDetriangulate();
1631  int64 result;
1632  OP_Utils::evalOpParm(result, thissop, "detriangulate", cookparms.getCookTime(), 0);
1633  return Detriangulate(result);
1634  }
1635  bool getRemoveInlinePoints() const { return myRemoveInlinePoints; }
1636  void setRemoveInlinePoints(bool val) { myRemoveInlinePoints = val; }
1637  bool opRemoveInlinePoints(const SOP_NodeVerb::CookParms &cookparms) const
1638  {
1639  SOP_Node *thissop = cookparms.getNode();
1640  if (!thissop) return getRemoveInlinePoints();
1641  bool result;
1642  OP_Utils::evalOpParm(result, thissop, "removeinlinepoints", cookparms.getCookTime(), 0);
1643  return result;
1644  }
1645  bool getUniqueSeams() const { return myUniqueSeams; }
1646  void setUniqueSeams(bool val) { myUniqueSeams = val; }
1647  bool opUniqueSeams(const SOP_NodeVerb::CookParms &cookparms) const
1648  {
1649  SOP_Node *thissop = cookparms.getNode();
1650  if (!thissop) return getUniqueSeams();
1651  bool result;
1652  OP_Utils::evalOpParm(result, thissop, "uniqueseams", cookparms.getCookTime(), 0);
1653  return result;
1654  }
1655  bool getCorrectNormals() const { return myCorrectNormals; }
1656  void setCorrectNormals(bool val) { myCorrectNormals = val; }
1657  bool opCorrectNormals(const SOP_NodeVerb::CookParms &cookparms) const
1658  {
1659  SOP_Node *thissop = cookparms.getNode();
1660  if (!thissop) return getCorrectNormals();
1661  bool result;
1662  OP_Utils::evalOpParm(result, thissop, "correctnormals", cookparms.getCookTime(), 0);
1663  return result;
1664  }
1665  bool getUseAxAPolys() const { return myUseAxAPolys; }
1666  void setUseAxAPolys(bool val) { myUseAxAPolys = val; }
1667  bool opUseAxAPolys(const SOP_NodeVerb::CookParms &cookparms) const
1668  {
1669  SOP_Node *thissop = cookparms.getNode();
1670  if (!thissop) return getUseAxAPolys();
1671  bool result;
1672  OP_Utils::evalOpParm(result, thissop, "useaxapolys", cookparms.getCookTime(), 0);
1673  return result;
1674  }
1675  const UT_StringHolder & getAxAPolys() const { return myAxAPolys; }
1676  void setAxAPolys(const UT_StringHolder & val) { myAxAPolys = val; }
1678  {
1679  SOP_Node *thissop = cookparms.getNode();
1680  if (!thissop) return getAxAPolys();
1682  OP_Utils::evalOpParm(result, thissop, "axapolys", cookparms.getCookTime(), 0);
1683  return result;
1684  }
1685  bool getUseAxBPolys() const { return myUseAxBPolys; }
1686  void setUseAxBPolys(bool val) { myUseAxBPolys = val; }
1687  bool opUseAxBPolys(const SOP_NodeVerb::CookParms &cookparms) const
1688  {
1689  SOP_Node *thissop = cookparms.getNode();
1690  if (!thissop) return getUseAxBPolys();
1691  bool result;
1692  OP_Utils::evalOpParm(result, thissop, "useaxbpolys", cookparms.getCookTime(), 0);
1693  return result;
1694  }
1695  const UT_StringHolder & getAxBPolys() const { return myAxBPolys; }
1696  void setAxBPolys(const UT_StringHolder & val) { myAxBPolys = val; }
1698  {
1699  SOP_Node *thissop = cookparms.getNode();
1700  if (!thissop) return getAxBPolys();
1702  OP_Utils::evalOpParm(result, thissop, "axbpolys", cookparms.getCookTime(), 0);
1703  return result;
1704  }
1705  bool getUseAxAList() const { return myUseAxAList; }
1706  void setUseAxAList(bool val) { myUseAxAList = val; }
1707  bool opUseAxAList(const SOP_NodeVerb::CookParms &cookparms) const
1708  {
1709  SOP_Node *thissop = cookparms.getNode();
1710  if (!thissop) return getUseAxAList();
1711  bool result;
1712  OP_Utils::evalOpParm(result, thissop, "useaxalist", cookparms.getCookTime(), 0);
1713  return result;
1714  }
1715  const UT_StringHolder & getAxAList() const { return myAxAList; }
1716  void setAxAList(const UT_StringHolder & val) { myAxAList = val; }
1718  {
1719  SOP_Node *thissop = cookparms.getNode();
1720  if (!thissop) return getAxAList();
1722  OP_Utils::evalOpParm(result, thissop, "axalist", cookparms.getCookTime(), 0);
1723  return result;
1724  }
1725  bool getUseAxBList() const { return myUseAxBList; }
1726  void setUseAxBList(bool val) { myUseAxBList = val; }
1727  bool opUseAxBList(const SOP_NodeVerb::CookParms &cookparms) const
1728  {
1729  SOP_Node *thissop = cookparms.getNode();
1730  if (!thissop) return getUseAxBList();
1731  bool result;
1732  OP_Utils::evalOpParm(result, thissop, "useaxblist", cookparms.getCookTime(), 0);
1733  return result;
1734  }
1735  const UT_StringHolder & getAxBList() const { return myAxBList; }
1736  void setAxBList(const UT_StringHolder & val) { myAxBList = val; }
1738  {
1739  SOP_Node *thissop = cookparms.getNode();
1740  if (!thissop) return getAxBList();
1742  OP_Utils::evalOpParm(result, thissop, "axblist", cookparms.getCookTime(), 0);
1743  return result;
1744  }
1745  bool getCollapseTinyEdges() const { return myCollapseTinyEdges; }
1746  void setCollapseTinyEdges(bool val) { myCollapseTinyEdges = val; }
1747  bool opCollapseTinyEdges(const SOP_NodeVerb::CookParms &cookparms) const
1748  {
1749  SOP_Node *thissop = cookparms.getNode();
1750  if (!thissop) return getCollapseTinyEdges();
1751  bool result;
1752  OP_Utils::evalOpParm(result, thissop, "collapsetinyedges", cookparms.getCookTime(), 0);
1753  return result;
1754  }
1755  fpreal64 getLengthThreshold() const { return myLengthThreshold; }
1756  void setLengthThreshold(fpreal64 val) { myLengthThreshold = val; }
1758  {
1759  SOP_Node *thissop = cookparms.getNode();
1760  if (!thissop) return getLengthThreshold();
1761  fpreal64 result;
1762  OP_Utils::evalOpParm(result, thissop, "lengththreshold", cookparms.getCookTime(), 0);
1763  return result;
1764  }
1765  bool getUseAPolys() const { return myUseAPolys; }
1766  void setUseAPolys(bool val) { myUseAPolys = val; }
1767  bool opUseAPolys(const SOP_NodeVerb::CookParms &cookparms) const
1768  {
1769  SOP_Node *thissop = cookparms.getNode();
1770  if (!thissop) return getUseAPolys();
1771  bool result;
1772  OP_Utils::evalOpParm(result, thissop, "useapolys", cookparms.getCookTime(), 0);
1773  return result;
1774  }
1775  const UT_StringHolder & getAPolys() const { return myAPolys; }
1776  void setAPolys(const UT_StringHolder & val) { myAPolys = val; }
1778  {
1779  SOP_Node *thissop = cookparms.getNode();
1780  if (!thissop) return getAPolys();
1782  OP_Utils::evalOpParm(result, thissop, "apolys", cookparms.getCookTime(), 0);
1783  return result;
1784  }
1785  bool getUseAInsideB() const { return myUseAInsideB; }
1786  void setUseAInsideB(bool val) { myUseAInsideB = val; }
1787  bool opUseAInsideB(const SOP_NodeVerb::CookParms &cookparms) const
1788  {
1789  SOP_Node *thissop = cookparms.getNode();
1790  if (!thissop) return getUseAInsideB();
1791  bool result;
1792  OP_Utils::evalOpParm(result, thissop, "useainsideb", cookparms.getCookTime(), 0);
1793  return result;
1794  }
1795  const UT_StringHolder & getAInsideB() const { return myAInsideB; }
1796  void setAInsideB(const UT_StringHolder & val) { myAInsideB = val; }
1798  {
1799  SOP_Node *thissop = cookparms.getNode();
1800  if (!thissop) return getAInsideB();
1802  OP_Utils::evalOpParm(result, thissop, "ainsideb", cookparms.getCookTime(), 0);
1803  return result;
1804  }
1805  bool getUseAOutsideB() const { return myUseAOutsideB; }
1806  void setUseAOutsideB(bool val) { myUseAOutsideB = val; }
1807  bool opUseAOutsideB(const SOP_NodeVerb::CookParms &cookparms) const
1808  {
1809  SOP_Node *thissop = cookparms.getNode();
1810  if (!thissop) return getUseAOutsideB();
1811  bool result;
1812  OP_Utils::evalOpParm(result, thissop, "useaoutsideb", cookparms.getCookTime(), 0);
1813  return result;
1814  }
1815  const UT_StringHolder & getAOutsideB() const { return myAOutsideB; }
1816  void setAOutsideB(const UT_StringHolder & val) { myAOutsideB = val; }
1818  {
1819  SOP_Node *thissop = cookparms.getNode();
1820  if (!thissop) return getAOutsideB();
1822  OP_Utils::evalOpParm(result, thissop, "aoutsideb", cookparms.getCookTime(), 0);
1823  return result;
1824  }
1825  bool getUseBPolys() const { return myUseBPolys; }
1826  void setUseBPolys(bool val) { myUseBPolys = val; }
1827  bool opUseBPolys(const SOP_NodeVerb::CookParms &cookparms) const
1828  {
1829  SOP_Node *thissop = cookparms.getNode();
1830  if (!thissop) return getUseBPolys();
1831  bool result;
1832  OP_Utils::evalOpParm(result, thissop, "usebpolys", cookparms.getCookTime(), 0);
1833  return result;
1834  }
1835  const UT_StringHolder & getBPolys() const { return myBPolys; }
1836  void setBPolys(const UT_StringHolder & val) { myBPolys = val; }
1838  {
1839  SOP_Node *thissop = cookparms.getNode();
1840  if (!thissop) return getBPolys();
1842  OP_Utils::evalOpParm(result, thissop, "bpolys", cookparms.getCookTime(), 0);
1843  return result;
1844  }
1845  bool getUseBInsideA() const { return myUseBInsideA; }
1846  void setUseBInsideA(bool val) { myUseBInsideA = val; }
1847  bool opUseBInsideA(const SOP_NodeVerb::CookParms &cookparms) const
1848  {
1849  SOP_Node *thissop = cookparms.getNode();
1850  if (!thissop) return getUseBInsideA();
1851  bool result;
1852  OP_Utils::evalOpParm(result, thissop, "usebinsidea", cookparms.getCookTime(), 0);
1853  return result;
1854  }
1855  const UT_StringHolder & getBInsideA() const { return myBInsideA; }
1856  void setBInsideA(const UT_StringHolder & val) { myBInsideA = val; }
1858  {
1859  SOP_Node *thissop = cookparms.getNode();
1860  if (!thissop) return getBInsideA();
1862  OP_Utils::evalOpParm(result, thissop, "binsidea", cookparms.getCookTime(), 0);
1863  return result;
1864  }
1865  bool getUseBOutsideA() const { return myUseBOutsideA; }
1866  void setUseBOutsideA(bool val) { myUseBOutsideA = val; }
1867  bool opUseBOutsideA(const SOP_NodeVerb::CookParms &cookparms) const
1868  {
1869  SOP_Node *thissop = cookparms.getNode();
1870  if (!thissop) return getUseBOutsideA();
1871  bool result;
1872  OP_Utils::evalOpParm(result, thissop, "useboutsidea", cookparms.getCookTime(), 0);
1873  return result;
1874  }
1875  const UT_StringHolder & getBOutsideA() const { return myBOutsideA; }
1876  void setBOutsideA(const UT_StringHolder & val) { myBOutsideA = val; }
1878  {
1879  SOP_Node *thissop = cookparms.getNode();
1880  if (!thissop) return getBOutsideA();
1882  OP_Utils::evalOpParm(result, thissop, "boutsidea", cookparms.getCookTime(), 0);
1883  return result;
1884  }
1885  bool getUseABOverlap() const { return myUseABOverlap; }
1886  void setUseABOverlap(bool val) { myUseABOverlap = val; }
1887  bool opUseABOverlap(const SOP_NodeVerb::CookParms &cookparms) const
1888  {
1889  SOP_Node *thissop = cookparms.getNode();
1890  if (!thissop) return getUseABOverlap();
1891  bool result;
1892  OP_Utils::evalOpParm(result, thissop, "useaboverlap", cookparms.getCookTime(), 0);
1893  return result;
1894  }
1895  const UT_StringHolder & getABOverlap() const { return myABOverlap; }
1896  void setABOverlap(const UT_StringHolder & val) { myABOverlap = val; }
1898  {
1899  SOP_Node *thissop = cookparms.getNode();
1900  if (!thissop) return getABOverlap();
1902  OP_Utils::evalOpParm(result, thissop, "aboverlap", cookparms.getCookTime(), 0);
1903  return result;
1904  }
1905  bool getUseAPieces() const { return myUseAPieces; }
1906  void setUseAPieces(bool val) { myUseAPieces = val; }
1907  bool opUseAPieces(const SOP_NodeVerb::CookParms &cookparms) const
1908  {
1909  SOP_Node *thissop = cookparms.getNode();
1910  if (!thissop) return getUseAPieces();
1911  bool result;
1912  OP_Utils::evalOpParm(result, thissop, "useaonlypieces", cookparms.getCookTime(), 0);
1913  return result;
1914  }
1915  const UT_StringHolder & getAPieces() const { return myAPieces; }
1916  void setAPieces(const UT_StringHolder & val) { myAPieces = val; }
1918  {
1919  SOP_Node *thissop = cookparms.getNode();
1920  if (!thissop) return getAPieces();
1922  OP_Utils::evalOpParm(result, thissop, "aonlypieces", cookparms.getCookTime(), 0);
1923  return result;
1924  }
1925  bool getUseBPieces() const { return myUseBPieces; }
1926  void setUseBPieces(bool val) { myUseBPieces = val; }
1927  bool opUseBPieces(const SOP_NodeVerb::CookParms &cookparms) const
1928  {
1929  SOP_Node *thissop = cookparms.getNode();
1930  if (!thissop) return getUseBPieces();
1931  bool result;
1932  OP_Utils::evalOpParm(result, thissop, "usebonlypieces", cookparms.getCookTime(), 0);
1933  return result;
1934  }
1935  const UT_StringHolder & getBPieces() const { return myBPieces; }
1936  void setBPieces(const UT_StringHolder & val) { myBPieces = val; }
1938  {
1939  SOP_Node *thissop = cookparms.getNode();
1940  if (!thissop) return getBPieces();
1942  OP_Utils::evalOpParm(result, thissop, "bonlypieces", cookparms.getCookTime(), 0);
1943  return result;
1944  }
1945  bool getUseABPieces() const { return myUseABPieces; }
1946  void setUseABPieces(bool val) { myUseABPieces = val; }
1947  bool opUseABPieces(const SOP_NodeVerb::CookParms &cookparms) const
1948  {
1949  SOP_Node *thissop = cookparms.getNode();
1950  if (!thissop) return getUseABPieces();
1951  bool result;
1952  OP_Utils::evalOpParm(result, thissop, "useabpieces", cookparms.getCookTime(), 0);
1953  return result;
1954  }
1955  const UT_StringHolder & getABPieces() const { return myABPieces; }
1956  void setABPieces(const UT_StringHolder & val) { myABPieces = val; }
1958  {
1959  SOP_Node *thissop = cookparms.getNode();
1960  if (!thissop) return getABPieces();
1962  OP_Utils::evalOpParm(result, thissop, "abpieces", cookparms.getCookTime(), 0);
1963  return result;
1964  }
1965  bool getUseReversedPolys() const { return myUseReversedPolys; }
1966  void setUseReversedPolys(bool val) { myUseReversedPolys = val; }
1967  bool opUseReversedPolys(const SOP_NodeVerb::CookParms &cookparms) const
1968  {
1969  SOP_Node *thissop = cookparms.getNode();
1970  if (!thissop) return getUseReversedPolys();
1971  bool result;
1972  OP_Utils::evalOpParm(result, thissop, "usereversedpolys", cookparms.getCookTime(), 0);
1973  return result;
1974  }
1975  const UT_StringHolder & getReversedPolys() const { return myReversedPolys; }
1976  void setReversedPolys(const UT_StringHolder & val) { myReversedPolys = val; }
1978  {
1979  SOP_Node *thissop = cookparms.getNode();
1980  if (!thissop) return getReversedPolys();
1982  OP_Utils::evalOpParm(result, thissop, "reversedpolys", cookparms.getCookTime(), 0);
1983  return result;
1984  }
1985  bool getUseAASeamEdges() const { return myUseAASeamEdges; }
1986  void setUseAASeamEdges(bool val) { myUseAASeamEdges = val; }
1987  bool opUseAASeamEdges(const SOP_NodeVerb::CookParms &cookparms) const
1988  {
1989  SOP_Node *thissop = cookparms.getNode();
1990  if (!thissop) return getUseAASeamEdges();
1991  bool result;
1992  OP_Utils::evalOpParm(result, thissop, "useaaseamedges", cookparms.getCookTime(), 0);
1993  return result;
1994  }
1995  const UT_StringHolder & getAASeamEdges() const { return myAASeamEdges; }
1996  void setAASeamEdges(const UT_StringHolder & val) { myAASeamEdges = val; }
1998  {
1999  SOP_Node *thissop = cookparms.getNode();
2000  if (!thissop) return getAASeamEdges();
2002  OP_Utils::evalOpParm(result, thissop, "aaseamedges", cookparms.getCookTime(), 0);
2003  return result;
2004  }
2005  bool getUseBBSeamEdges() const { return myUseBBSeamEdges; }
2006  void setUseBBSeamEdges(bool val) { myUseBBSeamEdges = val; }
2007  bool opUseBBSeamEdges(const SOP_NodeVerb::CookParms &cookparms) const
2008  {
2009  SOP_Node *thissop = cookparms.getNode();
2010  if (!thissop) return getUseBBSeamEdges();
2011  bool result;
2012  OP_Utils::evalOpParm(result, thissop, "usebbseamedges", cookparms.getCookTime(), 0);
2013  return result;
2014  }
2015  const UT_StringHolder & getBBSeamEdges() const { return myBBSeamEdges; }
2016  void setBBSeamEdges(const UT_StringHolder & val) { myBBSeamEdges = val; }
2018  {
2019  SOP_Node *thissop = cookparms.getNode();
2020  if (!thissop) return getBBSeamEdges();
2022  OP_Utils::evalOpParm(result, thissop, "bbseamedges", cookparms.getCookTime(), 0);
2023  return result;
2024  }
2025  bool getUseABSeamEdges() const { return myUseABSeamEdges; }
2026  void setUseABSeamEdges(bool val) { myUseABSeamEdges = val; }
2027  bool opUseABSeamEdges(const SOP_NodeVerb::CookParms &cookparms) const
2028  {
2029  SOP_Node *thissop = cookparms.getNode();
2030  if (!thissop) return getUseABSeamEdges();
2031  bool result;
2032  OP_Utils::evalOpParm(result, thissop, "useabseamedges", cookparms.getCookTime(), 0);
2033  return result;
2034  }
2035  const UT_StringHolder & getABSeamEdges() const { return myABSeamEdges; }
2036  void setABSeamEdges(const UT_StringHolder & val) { myABSeamEdges = val; }
2038  {
2039  SOP_Node *thissop = cookparms.getNode();
2040  if (!thissop) return getABSeamEdges();
2042  OP_Utils::evalOpParm(result, thissop, "abseamedges", cookparms.getCookTime(), 0);
2043  return result;
2044  }
2045  UT_Vector2I getDepthInA() const { return myDepthInA; }
2046  void setDepthInA(UT_Vector2I val) { myDepthInA = val; }
2048  {
2049  SOP_Node *thissop = cookparms.getNode();
2050  if (!thissop) return getDepthInA();
2052  OP_Utils::evalOpParm(result, thissop, "adepth", cookparms.getCookTime(), 0);
2053  return result;
2054  }
2055  UT_Vector2I getDepthInB() const { return myDepthInB; }
2056  void setDepthInB(UT_Vector2I val) { myDepthInB = val; }
2058  {
2059  SOP_Node *thissop = cookparms.getNode();
2060  if (!thissop) return getDepthInB();
2062  OP_Utils::evalOpParm(result, thissop, "bdepth", cookparms.getCookTime(), 0);
2063  return result;
2064  }
2065 
2066 private:
2067  UT_StringHolder myGroupA;
2068  int64 myASurface;
2069  bool myResolveA;
2070  UT_StringHolder myGroupB;
2071  int64 myBSurface;
2072  bool myResolveB;
2073  int64 myBooleanOp;
2074  int64 mySubtractChoices;
2075  int64 myShatterChoices;
2076  bool myOpenCurvesOnly;
2077  bool myGenerateAASeams;
2078  bool myGenerateBBSeams;
2079  bool myGenerateABSeams;
2080  int64 myWindingOp;
2081  bool myMergeNbrs;
2082  int64 myDetriangulate;
2083  bool myRemoveInlinePoints;
2084  bool myUniqueSeams;
2085  bool myCorrectNormals;
2086  bool myUseAxAPolys;
2087  UT_StringHolder myAxAPolys;
2088  bool myUseAxBPolys;
2089  UT_StringHolder myAxBPolys;
2090  bool myUseAxAList;
2091  UT_StringHolder myAxAList;
2092  bool myUseAxBList;
2093  UT_StringHolder myAxBList;
2094  bool myCollapseTinyEdges;
2095  fpreal64 myLengthThreshold;
2096  bool myUseAPolys;
2097  UT_StringHolder myAPolys;
2098  bool myUseAInsideB;
2099  UT_StringHolder myAInsideB;
2100  bool myUseAOutsideB;
2101  UT_StringHolder myAOutsideB;
2102  bool myUseBPolys;
2103  UT_StringHolder myBPolys;
2104  bool myUseBInsideA;
2105  UT_StringHolder myBInsideA;
2106  bool myUseBOutsideA;
2107  UT_StringHolder myBOutsideA;
2108  bool myUseABOverlap;
2109  UT_StringHolder myABOverlap;
2110  bool myUseAPieces;
2111  UT_StringHolder myAPieces;
2112  bool myUseBPieces;
2113  UT_StringHolder myBPieces;
2114  bool myUseABPieces;
2115  UT_StringHolder myABPieces;
2116  bool myUseReversedPolys;
2117  UT_StringHolder myReversedPolys;
2118  bool myUseAASeamEdges;
2119  UT_StringHolder myAASeamEdges;
2120  bool myUseBBSeamEdges;
2121  UT_StringHolder myBBSeamEdges;
2122  bool myUseABSeamEdges;
2123  UT_StringHolder myABSeamEdges;
2124  UT_Vector2I myDepthInA;
2125  UT_Vector2I myDepthInB;
2126 
2127 };
bool opUseABSeamEdges(const SOP_NodeVerb::CookParms &cookparms) const
static void saveData(std::ostream &os, UT_Vector2D v)
static void saveData(std::ostream &os, bool v)
UT_Vector2T< int64 > UT_Vector2I
static void loadData(UT_IStream &is, UT_Vector3D &v)
bool opRemoveInlinePoints(const SOP_NodeVerb::CookParms &cookparms) const
bool getRemoveInlinePoints() const
BooleanOp getBooleanOp() const
void buildFromOp(const OP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
ShatterChoices getShatterChoices() const
bool opGenerateBBSeams(const SOP_NodeVerb::CookParms &cookparms) const
static void saveData(std::ostream &os, UT_Vector4D v)
bool opUseAASeamEdges(const SOP_NodeVerb::CookParms &cookparms) const
void setCorrectNormals(bool val)
bool opGenerateAASeams(const SOP_NodeVerb::CookParms &cookparms) const
int int32
Definition: SYS_Types.h:39
SOP_Node * getNode() const
Definition: SOP_NodeVerb.h:347
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix3D &value) override
void setDetriangulate(Detriangulate val)
static void loadData(UT_IStream &is, int64 &v)
void setWindingOp(WindingOp val)
void setUseABOverlap(bool val)
void setUniqueSeams(bool val)
void setGroupB(const UT_StringHolder &val)
bool getUseABSeamEdges() const
void doGetParmValue(TempIndex idx, TempIndex instance, T &value) const
UT_StringHolder opAPolys(const SOP_NodeVerb::CookParms &cookparms) const
BSurface opBSurface(const SOP_NodeVerb::CookParms &cookparms) const
void save(std::ostream &os) const
UT_StringHolder opAxBPolys(const SOP_NodeVerb::CookParms &cookparms) const
void setAPieces(const UT_StringHolder &val)
bool opUseAxBPolys(const SOP_NodeVerb::CookParms &cookparms) const
bool opUseAPieces(const SOP_NodeVerb::CookParms &cookparms) const
bool operator!=(const SOP_BooleanParms &src) const
static void saveData(std::ostream &os, fpreal64 v)
exint bread(int32 *buffer, exint asize=1)
GLboolean * data
Definition: glcorearb.h:131
GT_API const UT_StringHolder time
void setNestParmValue(TempIndex idx, TempIndex instance, const PRM_DataItemHandle &value) override
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector4.h:493
static void loadData(UT_IStream &is, fpreal64 &v)
const GLdouble * v
Definition: glcorearb.h:837
bool getUseAxBPolys() const
fpreal getTime() const
Definition: OP_Context.h:62
UT_StringHolder opAxAPolys(const SOP_NodeVerb::CookParms &cookparms) const
BSurface getBSurface() const
UT_StringHolder opGroupA(const SOP_NodeVerb::CookParms &cookparms) const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector4D &value) override
UT_StringHolder opABOverlap(const SOP_NodeVerb::CookParms &cookparms) const
void setSubtractChoices(SubtractChoices val)
bool getUseAxBList() const
void setUseABPieces(bool val)
bool opGenerateABSeams(const SOP_NodeVerb::CookParms &cookparms) const
bool getOpenCurvesOnly() const
void setUseABSeamEdges(bool val)
bool opUseBOutsideA(const SOP_NodeVerb::CookParms &cookparms) const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix4D &value) override
const OP_Context & context() const
Definition: OP_NodeParms.h:97
bool getUseAPieces() const
static void saveData(std::ostream &os, UT_Vector3D v)
void setUseAPolys(bool val)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_StringHolder &value) const override
constexpr SYS_FORCE_INLINE T & z() noexcept
Definition: UT_Vector3.h:667
int64 exint
Definition: SYS_Types.h:125
bool isParmColorRamp(exint idx) const override
SYS_FORCE_INLINE const char * buffer() const
void doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
void setAPolys(const UT_StringHolder &val)
GLdouble s
Definition: glad.h:3009
void setAInsideB(const UT_StringHolder &val)
const UT_StringHolder & getGroupA() const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
An output stream object that owns its own string buffer storage.
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix4D &value) const override
static void saveData(std::ostream &os, UT_Matrix4D v)
ASurface getASurface() const
static void loadData(UT_IStream &is, PRM_DataItemHandle &v)
UT_StringHolder opReversedPolys(const SOP_NodeVerb::CookParms &cookparms) const
**But if you need a result
Definition: thread.h:613
static void loadData(UT_IStream &is, UT_Matrix3D &v)
bool getCollapseTinyEdges() const
void setAxAList(const UT_StringHolder &val)
bool getUniqueSeams() const
UT_Vector2I opDepthInA(const SOP_NodeVerb::CookParms &cookparms) const
void setUseAASeamEdges(bool val)
exint nodeIdx() const
Definition: OP_NodeParms.h:95
void loadFromOpSubclass(const LoadParms &loadparms) override
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_StringHolder &value) override
static PRM_DataItemHandle parseBinary(const char *type, UT_IStream &is)
void setNestParmValue(TempIndex idx, TempIndex instance, const exint &value) override
const UT_WorkBuffer & str()
Returns a read-only reference to the underlying UT_WorkBuffer.
void setUseBPolys(bool val)
static void loadData(UT_IStream &is, UT_Vector3I &v)
const UT_StringHolder & getBPieces() const
void setCollapseTinyEdges(bool val)
fpreal64 opLengthThreshold(const SOP_NodeVerb::CookParms &cookparms) const
void setMergeNbrs(bool val)
bool getUseAInsideB() const
UT_StringHolder opAInsideB(const SOP_NodeVerb::CookParms &cookparms) const
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector4.h:491
void setBOutsideA(const UT_StringHolder &val)
bool opResolveA(const SOP_NodeVerb::CookParms &cookparms) const
WindingOp opWindingOp(const SOP_NodeVerb::CookParms &cookparms) const
bool opOpenCurvesOnly(const SOP_NodeVerb::CookParms &cookparms) const
bool opUseAPolys(const SOP_NodeVerb::CookParms &cookparms) const
void setUseAInsideB(bool val)
const UT_StringHolder & getBInsideA() const
bool getUseBOutsideA() const
bool opUniqueSeams(const SOP_NodeVerb::CookParms &cookparms) const
double fpreal64
Definition: SYS_Types.h:201
bool load(UT_IStream &is)
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector2.h:423
bool getUseBPolys() const
bool opUseAOutsideB(const SOP_NodeVerb::CookParms &cookparms) const
void setBooleanOp(BooleanOp val)
bool getUseAASeamEdges() const
bool operator==(const BaseDimensions< T > &a, const BaseDimensions< Y > &b)
Definition: Dimensions.h:137
bool getUseBPieces() const
static void loadData(UT_IStream &is, UT_SharedPtr< UT_Ramp > &v)
UT_StringHolder opAxAList(const SOP_NodeVerb::CookParms &cookparms) const
bool getGenerateABSeams() const
UT_StringHolder opBBSeamEdges(const SOP_NodeVerb::CookParms &cookparms) const
static void saveData(std::ostream &os, int64 v)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector3D &value) const override
const UT_StringHolder & getBPolys() const
void setABOverlap(const UT_StringHolder &val)
exint length() const
void setAxBPolys(const UT_StringHolder &val)
UT_StringHolder opAOutsideB(const SOP_NodeVerb::CookParms &cookparms) const
bool opUseBPolys(const SOP_NodeVerb::CookParms &cookparms) const
UT_Vector2I getDepthInB() const
SYS_FORCE_INLINE const char * buffer() const
std::shared_ptr< T > UT_SharedPtr
Wrapper around std::shared_ptr.
Definition: UT_SharedPtr.h:36
bool getUseReversedPolys() const
UT_Vector2I opDepthInB(const SOP_NodeVerb::CookParms &cookparms) const
constexpr SYS_FORCE_INLINE T & z() noexcept
Definition: UT_Vector4.h:495
bool opUseAInsideB(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getReversedPolys() const
void setResolveA(bool val)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector2D &value) const override
static void loadData(UT_IStream &is, UT_Vector2D &v)
SYS_FORCE_INLINE UT_StringHolder getToken(ASurface enum_value)
static int version()
bool getUseAxAPolys() const
bool getCorrectNormals() const
const OP_GraphProxy * graph() const
Definition: OP_NodeParms.h:94
fpreal64 getLengthThreshold() const
void setUseAxAPolys(bool val)
#define SYS_FORCE_INLINE
Definition: SYS_Inline.h:45
bool opUseAxAPolys(const SOP_NodeVerb::CookParms &cookparms) const
void copyFrom(const OP_NodeParms *src) override
bool opUseABPieces(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getAPolys() const
exint getNestNumParms(TempIndex idx) const override
static void loadData(UT_IStream &is, UT_StringHolder &v)
bool opMergeNbrs(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getABOverlap() const
const UT_StringHolder & getBBSeamEdges() const
void setResolveB(bool val)
void setAASeamEdges(const UT_StringHolder &val)
void getNestParmValue(TempIndex idx, TempIndex instance, fpreal &value) const override
bool opResolveB(const SOP_NodeVerb::CookParms &cookparms) const
void setAxAPolys(const UT_StringHolder &val)
void setDepthInB(UT_Vector2I val)
void setGroupA(const UT_StringHolder &val)
SubtractChoices opSubtractChoices(const SOP_NodeVerb::CookParms &cookparms) const
long long int64
Definition: SYS_Types.h:116
bool opUseBInsideA(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getAASeamEdges() const
static void saveData(std::ostream &os, UT_Matrix3D v)
const UT_StringHolder & getGroupB() const
void setASurface(ASurface val)
void setUseAOutsideB(bool val)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_SharedPtr< UT_Ramp > &value) const override
bool getGenerateBBSeams() const
bool opUseABOverlap(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opABPieces(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getAxBList() const
void setGenerateBBSeams(bool val)
bool opUseAxAList(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, UT_Vector2I &v)
virtual void evalOpParm(int64 &v, NodeIdx node, const char *parmname, fpreal time, DEP_MicroNode *depnode) const =0
bool getResolveB() const
bool opUseAxBList(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opABSeamEdges(const SOP_NodeVerb::CookParms &cookparms) const
bool getUseAPolys() const
ASurface opASurface(const SOP_NodeVerb::CookParms &cookparms) const
void setUseAxAList(bool val)
void setRemoveInlinePoints(bool val)
bool opCorrectNormals(const SOP_NodeVerb::CookParms &cookparms) const
void saveBinary(std::ostream &os) const
Save string to binary stream.
Definition: UT_String.h:296
GT_API const UT_StringHolder version
const UT_StringHolder & getABPieces() const
bool opUseBPieces(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getAxBPolys() const
UT_StringHolder opAxBList(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getAInsideB() const
void setAxBList(const UT_StringHolder &val)
void getNestParmValue(TempIndex idx, TempIndex instance, exint &value) const override
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector3D &value) override
void setBSurface(BSurface val)
void setDepthInA(UT_Vector2I val)
Detriangulate getDetriangulate() const
void setBPolys(const UT_StringHolder &val)
UT_StringHolder opBPolys(const SOP_NodeVerb::CookParms &cookparms) const
bool getUseBInsideA() const
void setBInsideA(const UT_StringHolder &val)
bool getUseABPieces() const
bool getResolveA() const
void setGenerateABSeams(bool val)
ShatterChoices opShatterChoices(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getAxAList() const
void setUseBOutsideA(bool val)
static void saveData(std::ostream &os, PRM_DataItemHandle s)
bool opCollapseTinyEdges(const SOP_NodeVerb::CookParms &cookparms) const
BooleanOp opBooleanOp(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 fpreal
Definition: SYS_Types.h:277
DEP_MicroNode * depnode() const
Definition: OP_NodeParms.h:99
bool operator==(const SOP_BooleanParms &src) const
Detriangulate opDetriangulate(const SOP_NodeVerb::CookParms &cookparms) const
LeafData & operator=(const LeafData &)=delete
Utility class for containing a color ramp.
Definition: UT_Ramp.h:92
bool getMergeNbrs() const
void setUseAPieces(bool val)
void setABPieces(const UT_StringHolder &val)
static void saveData(std::ostream &os, UT_SharedPtr< UT_Ramp > s)
void setUseBPieces(bool val)
constexpr SYS_FORCE_INLINE T & w() noexcept
Definition: UT_Vector4.h:497
UT_StringHolder opAPieces(const SOP_NodeVerb::CookParms &cookparms) const
static void saveData(std::ostream &os, UT_StringHolder s)
GLuint GLfloat * val
Definition: glcorearb.h:1608
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix2D &value) override
WindingOp getWindingOp() const
#define SOP_API
Definition: SOP_API.h:10
static void loadData(UT_IStream &is, UT_Matrix2D &v)
void setReversedPolys(const UT_StringHolder &val)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector4D &value) const override
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_SharedPtr< UT_Ramp > &value) override
void setLengthThreshold(fpreal64 val)
fpreal getCookTime() const
Definition: SOP_NodeVerb.h:361
const UT_StringHolder & getBOutsideA() const
void setUseAxBList(bool val)
void setUseBInsideA(bool val)
static void loadData(UT_IStream &is, UT_Vector4I &v)
bool opUseBBSeamEdges(const SOP_NodeVerb::CookParms &cookparms) const
UT_Vector2I getDepthInA() const
const UT_StringHolder & getAOutsideB() const
const char * findChar(int c) const
Definition: UT_String.h:1395
#define UT_ASSERT(ZZ)
Definition: UT_Assert.h:156
Definition: core.h:1131
bool getUseAxAList() const
GLboolean r
Definition: glcorearb.h:1222
UT_StringHolder opAASeamEdges(const SOP_NodeVerb::CookParms &cookparms) const
void setUseAxBPolys(bool val)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix2D &value) const override
static void loadData(UT_IStream &is, UT_Vector4D &v)
void setUseReversedPolys(bool val)
const UT_StringHolder & getAPieces() const
void setGenerateAASeams(bool val)
void setBBSeamEdges(const UT_StringHolder &val)
ParmType getNestParmType(TempIndex fieldnum) const override
void setUseBBSeamEdges(bool val)
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector2D &value) override
void setBPieces(const UT_StringHolder &val)
void setShatterChoices(ShatterChoices val)
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector3.h:665
bool opUseReversedPolys(const SOP_NodeVerb::CookParms &cookparms) const
void setABSeamEdges(const UT_StringHolder &val)
type
Definition: core.h:1059
const UT_StringHolder & getABSeamEdges() const
void setOpenCurvesOnly(bool val)
const UT_StringHolder & getAxAPolys() const
bool getUseAOutsideB() const
UT_StringHolder opBPieces(const SOP_NodeVerb::CookParms &cookparms) const
void setAOutsideB(const UT_StringHolder &val)
static void loadData(UT_IStream &is, bool &v)
UT_SharedPtr< const PRM_DataItem > PRM_DataItemHandle
Definition: PRM_Parm.h:97
void setNestParmValue(TempIndex idx, TempIndex instance, const fpreal &value) override
UT_StringHolder opBInsideA(const SOP_NodeVerb::CookParms &cookparms) const
SubtractChoices getSubtractChoices() const
static void saveData(std::ostream &os, UT_Matrix2D v)
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector2.h:425
SYS_FORCE_INLINE bool isstring() const
UT_StringHolder opGroupB(const SOP_NodeVerb::CookParms &cookparms) const
bool getGenerateAASeams() const
UT_StringHolder opBOutsideA(const SOP_NodeVerb::CookParms &cookparms) const
const char * getNestParmName(TempIndex fieldnum) const override
bool getUseBBSeamEdges() const
SYS_FORCE_INLINE void strncpy(const char *src, exint maxlen)
bool getUseABOverlap() const
static void loadData(UT_IStream &is, UT_Matrix4D &v)
GLenum src
Definition: glcorearb.h:1793
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector3.h:663
void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override