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 <OP/OP_GraphProxy.h>
9 
10 #include <OP/OP_Utils.h>
11 #include <PRM/PRM_Parm.h>
12 #include <UT/UT_IStream.h>
13 #include <UT/UT_NTStreamUtil.h>
14 #include <UT/UT_Ramp.h>
15 #include <UT/UT_SharedPtr.h>
16 #include <UT/UT_StringHolder.h>
17 #include <UT/UT_StringStream.h>
18 #include <UT/UT_VectorTypes.h>
19 #include <UT/UT_EnvControl.h>
20 #include <SYS/SYS_Types.h>
21 
22 class DEP_MicroNode;
23 namespace SOP_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 
314  if (baseGetSignature() != src.baseGetSignature()) return false;
315 
316  return true;
317  }
318  bool operator!=(const SOP_BooleanParms &src) const
319  {
320  return !operator==(src);
321  }
329 
330 
331 
332  void buildFromOp(const OP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
333  {
334  myGroupA = ""_UTsh;
335  if (true)
336  graph->evalOpParm(myGroupA, nodeidx, "agroup", time, graph->isDirect()?nullptr:depnode);
337  myASurface = 0;
338  if (true)
339  graph->evalOpParm(myASurface, nodeidx, "asurface", time, graph->isDirect()?nullptr:depnode);
340  myResolveA = true;
341  if (true)
342  graph->evalOpParm(myResolveA, nodeidx, "resolvea", time, graph->isDirect()?nullptr:depnode);
343  myGroupB = ""_UTsh;
344  if (true)
345  graph->evalOpParm(myGroupB, nodeidx, "bgroup", time, graph->isDirect()?nullptr:depnode);
346  myBSurface = 0;
347  if (true)
348  graph->evalOpParm(myBSurface, nodeidx, "bsurface", time, graph->isDirect()?nullptr:depnode);
349  myResolveB = true;
350  if (true)
351  graph->evalOpParm(myResolveB, nodeidx, "resolveb", time, graph->isDirect()?nullptr:depnode);
352  myBooleanOp = 0;
353  if (true)
354  graph->evalOpParm(myBooleanOp, nodeidx, "booleanop", time, graph->isDirect()?nullptr:depnode);
355  mySubtractChoices = 0;
356  if (true && ( (true&&!(((int64(getBooleanOp())!=2)))) ) )
357  graph->evalOpParm(mySubtractChoices, nodeidx, "subtractchoices", time, graph->isDirect()?nullptr:depnode);
358  myShatterChoices = 0;
359  if (true && ( (true&&!(((int64(getBooleanOp())!=3)))) ) )
360  graph->evalOpParm(myShatterChoices, nodeidx, "shatterchoices", time, graph->isDirect()?nullptr:depnode);
361  myOpenCurvesOnly = true;
362  if (true && ( (true&&!(((int64(getBooleanOp())!=6)))) ) )
363  graph->evalOpParm(myOpenCurvesOnly, nodeidx, "opencurvesonly", time, graph->isDirect()?nullptr:depnode);
364  myGenerateAASeams = true;
365  if (true && ( (true&&!(((int64(getBooleanOp())!=6)))) ) )
366  graph->evalOpParm(myGenerateAASeams, nodeidx, "generateaaseams", time, graph->isDirect()?nullptr:depnode);
367  myGenerateBBSeams = true;
368  if (true && ( (true&&!(((int64(getBooleanOp())!=6)))) ) )
369  graph->evalOpParm(myGenerateBBSeams, nodeidx, "generatebbseams", time, graph->isDirect()?nullptr:depnode);
370  myGenerateABSeams = true;
371  if (true && ( (true&&!(((int64(getBooleanOp())!=6)))) ) )
372  graph->evalOpParm(myGenerateABSeams, nodeidx, "generateabseams", time, graph->isDirect()?nullptr:depnode);
373  myWindingOp = 0;
374  if (true && ( (true&&!(((int64(getBooleanOp())!=4)))) ) )
375  graph->evalOpParm(myWindingOp, nodeidx, "windingop", time, graph->isDirect()?nullptr:depnode);
376  myMergeNbrs = false;
377  if (true && ( (true&&!(((int64(getBooleanOp())!=4)))) ) )
378  graph->evalOpParm(myMergeNbrs, nodeidx, "mergenbrs", time, graph->isDirect()?nullptr:depnode);
379  myDetriangulate = 2;
380  if (true && ( (true&&!(((int64(getBooleanOp())==6))||((int64(getBooleanOp())==8))||((int64(getBooleanOp())==9)))) ) )
381  graph->evalOpParm(myDetriangulate, nodeidx, "detriangulate", time, graph->isDirect()?nullptr:depnode);
382  myRemoveInlinePoints = true;
383  if (true && ( (true&&!(((int64(getBooleanOp())==6))||((int64(getBooleanOp())==8))||((int64(getBooleanOp())==9))||((int64(getDetriangulate())!=2)))) ) )
384  graph->evalOpParm(myRemoveInlinePoints, nodeidx, "removeinlinepoints", time, graph->isDirect()?nullptr:depnode);
385  myUniqueSeams = false;
386  if (true && ( (true&&!(((int64(getBooleanOp())==6))||((int64(getBooleanOp())==8))||((int64(getBooleanOp())==9)))) ) )
387  graph->evalOpParm(myUniqueSeams, nodeidx, "uniqueseams", time, graph->isDirect()?nullptr:depnode);
388  myCorrectNormals = true;
389  if (true && ( (true&&!(((int64(getBooleanOp())==6))||((int64(getBooleanOp())==8))||((int64(getBooleanOp())==9)))) ) )
390  graph->evalOpParm(myCorrectNormals, nodeidx, "correctnormals", time, graph->isDirect()?nullptr:depnode);
391  myUseAxAPolys = false;
392  if (true && ( (true&&!(((int64(getBooleanOp())!=8)))) ) )
393  graph->evalOpParm(myUseAxAPolys, nodeidx, "useaxapolys", time, graph->isDirect()?nullptr:depnode);
394  myAxAPolys = "axapolys"_UTsh;
395  if (true && ( (true&&!(((getUseAxAPolys()==0))||((int64(getBooleanOp())!=8)))) ) )
396  graph->evalOpParm(myAxAPolys, nodeidx, "axapolys", time, graph->isDirect()?nullptr:depnode);
397  myUseAxBPolys = false;
398  if (true && ( (true&&!(((int64(getBooleanOp())!=8)))) ) )
399  graph->evalOpParm(myUseAxBPolys, nodeidx, "useaxbpolys", time, graph->isDirect()?nullptr:depnode);
400  myAxBPolys = "axbpolys"_UTsh;
401  if (true && ( (true&&!(((getUseAxBPolys()==0))||((int64(getBooleanOp())!=8)))) ) )
402  graph->evalOpParm(myAxBPolys, nodeidx, "axbpolys", time, graph->isDirect()?nullptr:depnode);
403  myUseAxAList = false;
404  if (true && ( (true&&!(((int64(getBooleanOp())!=8)))) ) )
405  graph->evalOpParm(myUseAxAList, nodeidx, "useaxalist", time, graph->isDirect()?nullptr:depnode);
406  myAxAList = "axalist"_UTsh;
407  if (true && ( (true&&!(((getUseAxAList()==0))||((int64(getBooleanOp())!=8)))) ) )
408  graph->evalOpParm(myAxAList, nodeidx, "axalist", time, graph->isDirect()?nullptr:depnode);
409  myUseAxBList = false;
410  if (true && ( (true&&!(((int64(getBooleanOp())!=8)))) ) )
411  graph->evalOpParm(myUseAxBList, nodeidx, "useaxblist", time, graph->isDirect()?nullptr:depnode);
412  myAxBList = "axblist"_UTsh;
413  if (true && ( (true&&!(((getUseAxBList()==0))||((int64(getBooleanOp())!=8)))) ) )
414  graph->evalOpParm(myAxBList, nodeidx, "axblist", time, graph->isDirect()?nullptr:depnode);
415  myCollapseTinyEdges = true;
416  if (true && ( (true&&!(((int64(getBooleanOp())==8))||((int64(getBooleanOp())==9))||((int64(getBooleanOp())==6)))) ) )
417  graph->evalOpParm(myCollapseTinyEdges, nodeidx, "collapsetinyedges", time, graph->isDirect()?nullptr:depnode);
418  myLengthThreshold = 0.00001;
419  if (true && ( (true&&!(((int64(getBooleanOp())==8))||((int64(getBooleanOp())==9))||((int64(getBooleanOp())==6))||((getCollapseTinyEdges()==0)))) ) )
420  graph->evalOpParm(myLengthThreshold, nodeidx, "lengththreshold", time, graph->isDirect()?nullptr:depnode);
421  myUseAPolys = false;
422  if (true && ( (true&&!(((int64(getBooleanOp())==6))||((int64(getBooleanOp())==8))||((int64(getBooleanOp())==9))||((int64(getBSurface())==0)))) ) )
423  graph->evalOpParm(myUseAPolys, nodeidx, "useapolys", time, graph->isDirect()?nullptr:depnode);
424  myAPolys = "apolys"_UTsh;
425  if (true && ( (true&&!(((int64(getBSurface())==0))||((getUseAPolys()==0)))) ) )
426  graph->evalOpParm(myAPolys, nodeidx, "apolys", time, graph->isDirect()?nullptr:depnode);
427  myUseAInsideB = false;
428  if (true && ( (true&&!(((int64(getBooleanOp())==6))||((int64(getBooleanOp())==8))||((int64(getBooleanOp())==9))||((int64(getBSurface())==1)))) ) )
429  graph->evalOpParm(myUseAInsideB, nodeidx, "useainsideb", time, graph->isDirect()?nullptr:depnode);
430  myAInsideB = "ainsideb"_UTsh;
431  if (true && ( (true&&!(((int64(getBSurface())==1))||((getUseAInsideB()==0)))) ) )
432  graph->evalOpParm(myAInsideB, nodeidx, "ainsideb", time, graph->isDirect()?nullptr:depnode);
433  myUseAOutsideB = false;
434  if (true && ( (true&&!(((int64(getBooleanOp())==6))||((int64(getBooleanOp())==8))||((int64(getBooleanOp())==9))||((int64(getBSurface())==1)))) ) )
435  graph->evalOpParm(myUseAOutsideB, nodeidx, "useaoutsideb", time, graph->isDirect()?nullptr:depnode);
436  myAOutsideB = "aoutsideb"_UTsh;
437  if (true && ( (true&&!(((int64(getBSurface())==1))||((getUseAOutsideB()==0)))) ) )
438  graph->evalOpParm(myAOutsideB, nodeidx, "aoutsideb", time, graph->isDirect()?nullptr:depnode);
439  myUseBPolys = false;
440  if (true && ( (true&&!(((int64(getBooleanOp())==6))||((int64(getBooleanOp())==8))||((int64(getBooleanOp())==9))||((int64(getASurface())==0)))) ) )
441  graph->evalOpParm(myUseBPolys, nodeidx, "usebpolys", time, graph->isDirect()?nullptr:depnode);
442  myBPolys = "bpolys"_UTsh;
443  if (true && ( (true&&!(((getUseBPolys()==0))||((int64(getASurface())==0)))) ) )
444  graph->evalOpParm(myBPolys, nodeidx, "bpolys", time, graph->isDirect()?nullptr:depnode);
445  myUseBInsideA = false;
446  if (true && ( (true&&!(((int64(getASurface())==1))||((int64(getBooleanOp())==6))||((int64(getBooleanOp())==8))||((int64(getBooleanOp())==9)))) ) )
447  graph->evalOpParm(myUseBInsideA, nodeidx, "usebinsidea", time, graph->isDirect()?nullptr:depnode);
448  myBInsideA = "binsidea"_UTsh;
449  if (true && ( (true&&!(((int64(getASurface())==1))||((getUseBInsideA()==0)))) ) )
450  graph->evalOpParm(myBInsideA, nodeidx, "binsidea", time, graph->isDirect()?nullptr:depnode);
451  myUseBOutsideA = false;
452  if (true && ( (true&&!(((int64(getASurface())==1))||((int64(getBooleanOp())==6))||((int64(getBooleanOp())==8))||((int64(getBooleanOp())==9)))) ) )
453  graph->evalOpParm(myUseBOutsideA, nodeidx, "useboutsidea", time, graph->isDirect()?nullptr:depnode);
454  myBOutsideA = "boutsidea"_UTsh;
455  if (true && ( (true&&!(((int64(getASurface())==1))||((getUseBOutsideA()==0)))) ) )
456  graph->evalOpParm(myBOutsideA, nodeidx, "boutsidea", time, graph->isDirect()?nullptr:depnode);
457  myUseABOverlap = false;
458  if (true && ( (true&&!(((int64(getBooleanOp())==6))||((int64(getBooleanOp())==8))||((int64(getBooleanOp())==9)))) ) )
459  graph->evalOpParm(myUseABOverlap, nodeidx, "useaboverlap", time, graph->isDirect()?nullptr:depnode);
460  myABOverlap = "aboverlap"_UTsh;
461  if (true && ( (true&&!(((getUseABOverlap()==0)))) ) )
462  graph->evalOpParm(myABOverlap, nodeidx, "aboverlap", time, graph->isDirect()?nullptr:depnode);
463  myUseAPieces = false;
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)))) ) )
465  graph->evalOpParm(myUseAPieces, nodeidx, "useaonlypieces", time, graph->isDirect()?nullptr:depnode);
466  myAPieces = "apieces"_UTsh;
467  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)))) ) )
468  graph->evalOpParm(myAPieces, nodeidx, "aonlypieces", time, graph->isDirect()?nullptr:depnode);
469  myUseBPieces = false;
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)))) ) )
471  graph->evalOpParm(myUseBPieces, nodeidx, "usebonlypieces", time, graph->isDirect()?nullptr:depnode);
472  myBPieces = "bpieces"_UTsh;
473  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)))) ) )
474  graph->evalOpParm(myBPieces, nodeidx, "bonlypieces", time, graph->isDirect()?nullptr:depnode);
475  myUseABPieces = false;
476  if (true && ( (true&&!(((int64(getBSurface())==1)&&(int64(getASurface())==1))||((int64(getBooleanOp())!=3)))) ) )
477  graph->evalOpParm(myUseABPieces, nodeidx, "useabpieces", time, graph->isDirect()?nullptr:depnode);
478  myABPieces = "abpieces"_UTsh;
479  if (true && ( (true&&!(((int64(getBSurface())==1)&&(int64(getASurface())==1))||((int64(getBooleanOp())!=3))||((getUseABPieces()==0)))) ) )
480  graph->evalOpParm(myABPieces, nodeidx, "abpieces", time, graph->isDirect()?nullptr:depnode);
481  myUseReversedPolys = false;
482  if (true && ( (true&&!(((int64(getBSurface())==1)&&(int64(getASurface())==1))||((int64(getBooleanOp())!=3)&&(int64(getBooleanOp())!=2)))) ) )
483  graph->evalOpParm(myUseReversedPolys, nodeidx, "usereversedpolys", time, graph->isDirect()?nullptr:depnode);
484  myReversedPolys = "reversed"_UTsh;
485  if (true && ( (true&&!(((int64(getBSurface())==1)&&(int64(getASurface())==1))||((int64(getBooleanOp())!=3)&&(int64(getBooleanOp())!=2))||((getUseReversedPolys()==0)))) ) )
486  graph->evalOpParm(myReversedPolys, nodeidx, "reversedpolys", time, graph->isDirect()?nullptr:depnode);
487  myUseAASeamEdges = false;
488  if (true && ( (true&&!(((int64(getBooleanOp())==8))||((int64(getBooleanOp())==9)))) ) )
489  graph->evalOpParm(myUseAASeamEdges, nodeidx, "useaaseamedges", time, graph->isDirect()?nullptr:depnode);
490  myAASeamEdges = "aseams"_UTsh;
491  if (true && ( (true&&!(((getUseAASeamEdges()==0))||((int64(getBooleanOp())==8))||((int64(getBooleanOp())==9)))) ) )
492  graph->evalOpParm(myAASeamEdges, nodeidx, "aaseamedges", time, graph->isDirect()?nullptr:depnode);
493  myUseBBSeamEdges = false;
494  if (true && ( (true&&!(((int64(getBooleanOp())==8))||((int64(getBooleanOp())==9)))) ) )
495  graph->evalOpParm(myUseBBSeamEdges, nodeidx, "usebbseamedges", time, graph->isDirect()?nullptr:depnode);
496  myBBSeamEdges = "bseams"_UTsh;
497  if (true && ( (true&&!(((getUseBBSeamEdges()==0))||((int64(getBooleanOp())==8))||((int64(getBooleanOp())==9)))) ) )
498  graph->evalOpParm(myBBSeamEdges, nodeidx, "bbseamedges", time, graph->isDirect()?nullptr:depnode);
499  myUseABSeamEdges = false;
500  if (true && ( (true&&!(((int64(getBooleanOp())==8))||((int64(getBooleanOp())==9)))) ) )
501  graph->evalOpParm(myUseABSeamEdges, nodeidx, "useabseamedges", time, graph->isDirect()?nullptr:depnode);
502  myABSeamEdges = "abseams"_UTsh;
503  if (true && ( (true&&!(((getUseABSeamEdges()==0))||((int64(getBooleanOp())==8))||((int64(getBooleanOp())==9)))) ) )
504  graph->evalOpParm(myABSeamEdges, nodeidx, "abseamedges", time, graph->isDirect()?nullptr:depnode);
505  myDepthInA = UT_Vector2I(1,1000);
506  if (true && ( (true&&!(((int64(getBooleanOp())!=4))||((int64(getWindingOp())==1)))) ) )
507  graph->evalOpParm(myDepthInA, nodeidx, "adepth", time, graph->isDirect()?nullptr:depnode);
508  myDepthInB = UT_Vector2I(1,1000);
509  if (true && ( (true&&!(((int64(getBooleanOp())!=4))||((int64(getWindingOp())==0)))) ) )
510  graph->evalOpParm(myDepthInB, nodeidx, "bdepth", time, graph->isDirect()?nullptr:depnode);
511 
512  }
513 
514 
515  void loadFromOpSubclass(const LoadParms &loadparms) override
516  {
517  buildFromOp(loadparms.graph(), loadparms.nodeIdx(), loadparms.context().getTime(), loadparms.depnode());
518  }
519 
520 
521  void copyFrom(const OP_NodeParms *src) override
522  {
523  *this = *((const SOP_BooleanParms *)src);
524  }
525 
526  template <typename T>
527  void
528  doGetParmValue(TempIndex idx, TempIndex instance, T &value) const
529  {
530  if (idx.size() < 1)
531  return;
532  UT_ASSERT(idx.size() == instance.size()+1);
533  if (idx.size() != instance.size()+1)
534  return;
535  switch (idx[0])
536  {
537  case 0:
538  coerceValue(value, myGroupA);
539  break;
540  case 1:
541  coerceValue(value, myASurface);
542  break;
543  case 2:
544  coerceValue(value, myResolveA);
545  break;
546  case 3:
547  coerceValue(value, myGroupB);
548  break;
549  case 4:
550  coerceValue(value, myBSurface);
551  break;
552  case 5:
553  coerceValue(value, myResolveB);
554  break;
555  case 6:
556  coerceValue(value, myBooleanOp);
557  break;
558  case 7:
559  coerceValue(value, mySubtractChoices);
560  break;
561  case 8:
562  coerceValue(value, myShatterChoices);
563  break;
564  case 9:
565  coerceValue(value, myOpenCurvesOnly);
566  break;
567  case 10:
568  coerceValue(value, myGenerateAASeams);
569  break;
570  case 11:
571  coerceValue(value, myGenerateBBSeams);
572  break;
573  case 12:
574  coerceValue(value, myGenerateABSeams);
575  break;
576  case 13:
577  coerceValue(value, myWindingOp);
578  break;
579  case 14:
580  coerceValue(value, myMergeNbrs);
581  break;
582  case 15:
583  coerceValue(value, myDetriangulate);
584  break;
585  case 16:
586  coerceValue(value, myRemoveInlinePoints);
587  break;
588  case 17:
589  coerceValue(value, myUniqueSeams);
590  break;
591  case 18:
592  coerceValue(value, myCorrectNormals);
593  break;
594  case 19:
595  coerceValue(value, myUseAxAPolys);
596  break;
597  case 20:
598  coerceValue(value, myAxAPolys);
599  break;
600  case 21:
601  coerceValue(value, myUseAxBPolys);
602  break;
603  case 22:
604  coerceValue(value, myAxBPolys);
605  break;
606  case 23:
607  coerceValue(value, myUseAxAList);
608  break;
609  case 24:
610  coerceValue(value, myAxAList);
611  break;
612  case 25:
613  coerceValue(value, myUseAxBList);
614  break;
615  case 26:
616  coerceValue(value, myAxBList);
617  break;
618  case 27:
619  coerceValue(value, myCollapseTinyEdges);
620  break;
621  case 28:
622  coerceValue(value, myLengthThreshold);
623  break;
624  case 29:
625  coerceValue(value, myUseAPolys);
626  break;
627  case 30:
628  coerceValue(value, myAPolys);
629  break;
630  case 31:
631  coerceValue(value, myUseAInsideB);
632  break;
633  case 32:
634  coerceValue(value, myAInsideB);
635  break;
636  case 33:
637  coerceValue(value, myUseAOutsideB);
638  break;
639  case 34:
640  coerceValue(value, myAOutsideB);
641  break;
642  case 35:
643  coerceValue(value, myUseBPolys);
644  break;
645  case 36:
646  coerceValue(value, myBPolys);
647  break;
648  case 37:
649  coerceValue(value, myUseBInsideA);
650  break;
651  case 38:
652  coerceValue(value, myBInsideA);
653  break;
654  case 39:
655  coerceValue(value, myUseBOutsideA);
656  break;
657  case 40:
658  coerceValue(value, myBOutsideA);
659  break;
660  case 41:
661  coerceValue(value, myUseABOverlap);
662  break;
663  case 42:
664  coerceValue(value, myABOverlap);
665  break;
666  case 43:
667  coerceValue(value, myUseAPieces);
668  break;
669  case 44:
670  coerceValue(value, myAPieces);
671  break;
672  case 45:
673  coerceValue(value, myUseBPieces);
674  break;
675  case 46:
676  coerceValue(value, myBPieces);
677  break;
678  case 47:
679  coerceValue(value, myUseABPieces);
680  break;
681  case 48:
682  coerceValue(value, myABPieces);
683  break;
684  case 49:
685  coerceValue(value, myUseReversedPolys);
686  break;
687  case 50:
688  coerceValue(value, myReversedPolys);
689  break;
690  case 51:
691  coerceValue(value, myUseAASeamEdges);
692  break;
693  case 52:
694  coerceValue(value, myAASeamEdges);
695  break;
696  case 53:
697  coerceValue(value, myUseBBSeamEdges);
698  break;
699  case 54:
700  coerceValue(value, myBBSeamEdges);
701  break;
702  case 55:
703  coerceValue(value, myUseABSeamEdges);
704  break;
705  case 56:
706  coerceValue(value, myABSeamEdges);
707  break;
708  case 57:
709  coerceValue(value, myDepthInA);
710  break;
711  case 58:
712  coerceValue(value, myDepthInB);
713  break;
714 
715  }
716  }
717 
718  bool isParmColorRamp(exint idx) const override
719  {
720  switch (idx)
721  {
722 
723  }
724  return false;
725  }
726 
727  void getNestParmValue(TempIndex idx, TempIndex instance, exint &value) const override
728  { doGetParmValue(idx, instance, value); }
729  void getNestParmValue(TempIndex idx, TempIndex instance, fpreal &value) const override
730  { doGetParmValue(idx, instance, value); }
731  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector2D &value) const override
732  { doGetParmValue(idx, instance, value); }
733  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector3D &value) const override
734  { doGetParmValue(idx, instance, value); }
735  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector4D &value) const override
736  { doGetParmValue(idx, instance, value); }
737  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix2D &value) const override
738  { doGetParmValue(idx, instance, value); }
739  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
740  { doGetParmValue(idx, instance, value); }
741  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix4D &value) const override
742  { doGetParmValue(idx, instance, value); }
743  void getNestParmValue(TempIndex idx, TempIndex instance, UT_StringHolder &value) const override
744  { doGetParmValue(idx, instance, value); }
745  void getNestParmValue(TempIndex idx, TempIndex instance, UT_SharedPtr<UT_Ramp> &value) const override
746  { doGetParmValue(idx, instance, value); }
747  void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
748  { doGetParmValue(idx, instance, value); }
749 
750  template <typename T>
751  void
752  doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
753  {
754  if (idx.size() < 1)
755  return;
756  UT_ASSERT(idx.size() == instance.size()+1);
757  if (idx.size() != instance.size()+1)
758  return;
759  switch (idx[0])
760  {
761  case 0:
762  coerceValue(myGroupA, ( ( value ) ));
763  break;
764  case 1:
765  coerceValue(myASurface, clampMinValue(0, clampMaxValue(1, value ) ));
766  break;
767  case 2:
768  coerceValue(myResolveA, ( ( value ) ));
769  break;
770  case 3:
771  coerceValue(myGroupB, ( ( value ) ));
772  break;
773  case 4:
774  coerceValue(myBSurface, clampMinValue(0, clampMaxValue(1, value ) ));
775  break;
776  case 5:
777  coerceValue(myResolveB, ( ( value ) ));
778  break;
779  case 6:
780  coerceValue(myBooleanOp, clampMinValue(0, clampMaxValue(9, value ) ));
781  break;
782  case 7:
783  coerceValue(mySubtractChoices, clampMinValue(0, clampMaxValue(2, value ) ));
784  break;
785  case 8:
786  coerceValue(myShatterChoices, clampMinValue(0, clampMaxValue(2, value ) ));
787  break;
788  case 9:
789  coerceValue(myOpenCurvesOnly, ( ( value ) ));
790  break;
791  case 10:
792  coerceValue(myGenerateAASeams, ( ( value ) ));
793  break;
794  case 11:
795  coerceValue(myGenerateBBSeams, ( ( value ) ));
796  break;
797  case 12:
798  coerceValue(myGenerateABSeams, ( ( value ) ));
799  break;
800  case 13:
801  coerceValue(myWindingOp, clampMinValue(0, clampMaxValue(4, value ) ));
802  break;
803  case 14:
804  coerceValue(myMergeNbrs, ( ( value ) ));
805  break;
806  case 15:
807  coerceValue(myDetriangulate, clampMinValue(0, clampMaxValue(2, value ) ));
808  break;
809  case 16:
810  coerceValue(myRemoveInlinePoints, ( ( value ) ));
811  break;
812  case 17:
813  coerceValue(myUniqueSeams, ( ( value ) ));
814  break;
815  case 18:
816  coerceValue(myCorrectNormals, ( ( value ) ));
817  break;
818  case 19:
819  coerceValue(myUseAxAPolys, ( ( value ) ));
820  break;
821  case 20:
822  coerceValue(myAxAPolys, ( ( value ) ));
823  break;
824  case 21:
825  coerceValue(myUseAxBPolys, ( ( value ) ));
826  break;
827  case 22:
828  coerceValue(myAxBPolys, ( ( value ) ));
829  break;
830  case 23:
831  coerceValue(myUseAxAList, ( ( value ) ));
832  break;
833  case 24:
834  coerceValue(myAxAList, ( ( value ) ));
835  break;
836  case 25:
837  coerceValue(myUseAxBList, ( ( value ) ));
838  break;
839  case 26:
840  coerceValue(myAxBList, ( ( value ) ));
841  break;
842  case 27:
843  coerceValue(myCollapseTinyEdges, ( ( value ) ));
844  break;
845  case 28:
846  coerceValue(myLengthThreshold, ( ( value ) ));
847  break;
848  case 29:
849  coerceValue(myUseAPolys, ( ( value ) ));
850  break;
851  case 30:
852  coerceValue(myAPolys, ( ( value ) ));
853  break;
854  case 31:
855  coerceValue(myUseAInsideB, ( ( value ) ));
856  break;
857  case 32:
858  coerceValue(myAInsideB, ( ( value ) ));
859  break;
860  case 33:
861  coerceValue(myUseAOutsideB, ( ( value ) ));
862  break;
863  case 34:
864  coerceValue(myAOutsideB, ( ( value ) ));
865  break;
866  case 35:
867  coerceValue(myUseBPolys, ( ( value ) ));
868  break;
869  case 36:
870  coerceValue(myBPolys, ( ( value ) ));
871  break;
872  case 37:
873  coerceValue(myUseBInsideA, ( ( value ) ));
874  break;
875  case 38:
876  coerceValue(myBInsideA, ( ( value ) ));
877  break;
878  case 39:
879  coerceValue(myUseBOutsideA, ( ( value ) ));
880  break;
881  case 40:
882  coerceValue(myBOutsideA, ( ( value ) ));
883  break;
884  case 41:
885  coerceValue(myUseABOverlap, ( ( value ) ));
886  break;
887  case 42:
888  coerceValue(myABOverlap, ( ( value ) ));
889  break;
890  case 43:
891  coerceValue(myUseAPieces, ( ( value ) ));
892  break;
893  case 44:
894  coerceValue(myAPieces, ( ( value ) ));
895  break;
896  case 45:
897  coerceValue(myUseBPieces, ( ( value ) ));
898  break;
899  case 46:
900  coerceValue(myBPieces, ( ( value ) ));
901  break;
902  case 47:
903  coerceValue(myUseABPieces, ( ( value ) ));
904  break;
905  case 48:
906  coerceValue(myABPieces, ( ( value ) ));
907  break;
908  case 49:
909  coerceValue(myUseReversedPolys, ( ( value ) ));
910  break;
911  case 50:
912  coerceValue(myReversedPolys, ( ( value ) ));
913  break;
914  case 51:
915  coerceValue(myUseAASeamEdges, ( ( value ) ));
916  break;
917  case 52:
918  coerceValue(myAASeamEdges, ( ( value ) ));
919  break;
920  case 53:
921  coerceValue(myUseBBSeamEdges, ( ( value ) ));
922  break;
923  case 54:
924  coerceValue(myBBSeamEdges, ( ( value ) ));
925  break;
926  case 55:
927  coerceValue(myUseABSeamEdges, ( ( value ) ));
928  break;
929  case 56:
930  coerceValue(myABSeamEdges, ( ( value ) ));
931  break;
932  case 57:
933  coerceValue(myDepthInA, ( ( value ) ));
934  break;
935  case 58:
936  coerceValue(myDepthInB, ( ( value ) ));
937  break;
938 
939  }
940  }
941 
942  void setNestParmValue(TempIndex idx, TempIndex instance, const exint &value) override
943  { doSetParmValue(idx, instance, value); }
944  void setNestParmValue(TempIndex idx, TempIndex instance, const fpreal &value) override
945  { doSetParmValue(idx, instance, value); }
946  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector2D &value) override
947  { doSetParmValue(idx, instance, value); }
948  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector3D &value) override
949  { doSetParmValue(idx, instance, value); }
950  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector4D &value) override
951  { doSetParmValue(idx, instance, value); }
952  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix2D &value) override
953  { doSetParmValue(idx, instance, value); }
954  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix3D &value) override
955  { doSetParmValue(idx, instance, value); }
956  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix4D &value) override
957  { doSetParmValue(idx, instance, value); }
958  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_StringHolder &value) override
959  { doSetParmValue(idx, instance, value); }
960  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_SharedPtr<UT_Ramp> &value) override
961  { doSetParmValue(idx, instance, value); }
962  void setNestParmValue(TempIndex idx, TempIndex instance, const PRM_DataItemHandle &value) override
963  { doSetParmValue(idx, instance, value); }
964 
965  exint getNestNumParms(TempIndex idx) const override
966  {
967  if (idx.size() == 0)
968  return 59;
969  switch (idx[0])
970  {
971 
972  }
973  // Invalid
974  return 0;
975  }
976 
977  const char *getNestParmName(TempIndex fieldnum) const override
978  {
979  if (fieldnum.size() < 1)
980  return 0;
981  switch (fieldnum[0])
982  {
983  case 0:
984  return "agroup";
985  case 1:
986  return "asurface";
987  case 2:
988  return "resolvea";
989  case 3:
990  return "bgroup";
991  case 4:
992  return "bsurface";
993  case 5:
994  return "resolveb";
995  case 6:
996  return "booleanop";
997  case 7:
998  return "subtractchoices";
999  case 8:
1000  return "shatterchoices";
1001  case 9:
1002  return "opencurvesonly";
1003  case 10:
1004  return "generateaaseams";
1005  case 11:
1006  return "generatebbseams";
1007  case 12:
1008  return "generateabseams";
1009  case 13:
1010  return "windingop";
1011  case 14:
1012  return "mergenbrs";
1013  case 15:
1014  return "detriangulate";
1015  case 16:
1016  return "removeinlinepoints";
1017  case 17:
1018  return "uniqueseams";
1019  case 18:
1020  return "correctnormals";
1021  case 19:
1022  return "useaxapolys";
1023  case 20:
1024  return "axapolys";
1025  case 21:
1026  return "useaxbpolys";
1027  case 22:
1028  return "axbpolys";
1029  case 23:
1030  return "useaxalist";
1031  case 24:
1032  return "axalist";
1033  case 25:
1034  return "useaxblist";
1035  case 26:
1036  return "axblist";
1037  case 27:
1038  return "collapsetinyedges";
1039  case 28:
1040  return "lengththreshold";
1041  case 29:
1042  return "useapolys";
1043  case 30:
1044  return "apolys";
1045  case 31:
1046  return "useainsideb";
1047  case 32:
1048  return "ainsideb";
1049  case 33:
1050  return "useaoutsideb";
1051  case 34:
1052  return "aoutsideb";
1053  case 35:
1054  return "usebpolys";
1055  case 36:
1056  return "bpolys";
1057  case 37:
1058  return "usebinsidea";
1059  case 38:
1060  return "binsidea";
1061  case 39:
1062  return "useboutsidea";
1063  case 40:
1064  return "boutsidea";
1065  case 41:
1066  return "useaboverlap";
1067  case 42:
1068  return "aboverlap";
1069  case 43:
1070  return "useaonlypieces";
1071  case 44:
1072  return "aonlypieces";
1073  case 45:
1074  return "usebonlypieces";
1075  case 46:
1076  return "bonlypieces";
1077  case 47:
1078  return "useabpieces";
1079  case 48:
1080  return "abpieces";
1081  case 49:
1082  return "usereversedpolys";
1083  case 50:
1084  return "reversedpolys";
1085  case 51:
1086  return "useaaseamedges";
1087  case 52:
1088  return "aaseamedges";
1089  case 53:
1090  return "usebbseamedges";
1091  case 54:
1092  return "bbseamedges";
1093  case 55:
1094  return "useabseamedges";
1095  case 56:
1096  return "abseamedges";
1097  case 57:
1098  return "adepth";
1099  case 58:
1100  return "bdepth";
1101 
1102  }
1103  return 0;
1104  }
1105 
1106  ParmType getNestParmType(TempIndex fieldnum) const override
1107  {
1108  if (fieldnum.size() < 1)
1109  return PARM_UNSUPPORTED;
1110  switch (fieldnum[0])
1111  {
1112  case 0:
1113  return PARM_STRING;
1114  case 1:
1115  return PARM_INTEGER;
1116  case 2:
1117  return PARM_INTEGER;
1118  case 3:
1119  return PARM_STRING;
1120  case 4:
1121  return PARM_INTEGER;
1122  case 5:
1123  return PARM_INTEGER;
1124  case 6:
1125  return PARM_INTEGER;
1126  case 7:
1127  return PARM_INTEGER;
1128  case 8:
1129  return PARM_INTEGER;
1130  case 9:
1131  return PARM_INTEGER;
1132  case 10:
1133  return PARM_INTEGER;
1134  case 11:
1135  return PARM_INTEGER;
1136  case 12:
1137  return PARM_INTEGER;
1138  case 13:
1139  return PARM_INTEGER;
1140  case 14:
1141  return PARM_INTEGER;
1142  case 15:
1143  return PARM_INTEGER;
1144  case 16:
1145  return PARM_INTEGER;
1146  case 17:
1147  return PARM_INTEGER;
1148  case 18:
1149  return PARM_INTEGER;
1150  case 19:
1151  return PARM_INTEGER;
1152  case 20:
1153  return PARM_STRING;
1154  case 21:
1155  return PARM_INTEGER;
1156  case 22:
1157  return PARM_STRING;
1158  case 23:
1159  return PARM_INTEGER;
1160  case 24:
1161  return PARM_STRING;
1162  case 25:
1163  return PARM_INTEGER;
1164  case 26:
1165  return PARM_STRING;
1166  case 27:
1167  return PARM_INTEGER;
1168  case 28:
1169  return PARM_FLOAT;
1170  case 29:
1171  return PARM_INTEGER;
1172  case 30:
1173  return PARM_STRING;
1174  case 31:
1175  return PARM_INTEGER;
1176  case 32:
1177  return PARM_STRING;
1178  case 33:
1179  return PARM_INTEGER;
1180  case 34:
1181  return PARM_STRING;
1182  case 35:
1183  return PARM_INTEGER;
1184  case 36:
1185  return PARM_STRING;
1186  case 37:
1187  return PARM_INTEGER;
1188  case 38:
1189  return PARM_STRING;
1190  case 39:
1191  return PARM_INTEGER;
1192  case 40:
1193  return PARM_STRING;
1194  case 41:
1195  return PARM_INTEGER;
1196  case 42:
1197  return PARM_STRING;
1198  case 43:
1199  return PARM_INTEGER;
1200  case 44:
1201  return PARM_STRING;
1202  case 45:
1203  return PARM_INTEGER;
1204  case 46:
1205  return PARM_STRING;
1206  case 47:
1207  return PARM_INTEGER;
1208  case 48:
1209  return PARM_STRING;
1210  case 49:
1211  return PARM_INTEGER;
1212  case 50:
1213  return PARM_STRING;
1214  case 51:
1215  return PARM_INTEGER;
1216  case 52:
1217  return PARM_STRING;
1218  case 53:
1219  return PARM_INTEGER;
1220  case 54:
1221  return PARM_STRING;
1222  case 55:
1223  return PARM_INTEGER;
1224  case 56:
1225  return PARM_STRING;
1226  case 57:
1227  return PARM_VECTOR2;
1228  case 58:
1229  return PARM_VECTOR2;
1230 
1231  }
1232  return PARM_UNSUPPORTED;
1233  }
1234 
1235  // Boiler plate to load individual types.
1236  static void loadData(UT_IStream &is, int64 &v)
1237  { is.bread(&v, 1); }
1238  static void loadData(UT_IStream &is, bool &v)
1239  { int64 iv; is.bread(&iv, 1); v = iv; }
1240  static void loadData(UT_IStream &is, fpreal64 &v)
1241  { is.bread<fpreal64>(&v, 1); }
1242  static void loadData(UT_IStream &is, UT_Vector2D &v)
1243  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1); }
1244  static void loadData(UT_IStream &is, UT_Vector3D &v)
1245  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
1246  is.bread<fpreal64>(&v.z(), 1); }
1247  static void loadData(UT_IStream &is, UT_Vector4D &v)
1248  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
1249  is.bread<fpreal64>(&v.z(), 1); is.bread<fpreal64>(&v.w(), 1); }
1250  static void loadData(UT_IStream &is, UT_Matrix2D &v)
1251  { for (int r = 0; r < 2; r++) for (int c = 0; c < 2; c++) is.bread<fpreal64>(&v(r, c), 1); }
1252  static void loadData(UT_IStream &is, UT_Matrix3D &v)
1253  { for (int r = 0; r < 3; r++) for (int c = 0; c < 3; c++) is.bread<fpreal64>(&v(r, c), 1); }
1254  static void loadData(UT_IStream &is, UT_Matrix4D &v)
1255  { for (int r = 0; r < 4; r++) for (int c = 0; c < 4; c++) is.bread<fpreal64>(&v(r, c), 1); }
1256  static void loadData(UT_IStream &is, UT_Vector2I &v)
1257  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1); }
1258  static void loadData(UT_IStream &is, UT_Vector3I &v)
1259  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
1260  is.bread<int64>(&v.z(), 1); }
1261  static void loadData(UT_IStream &is, UT_Vector4I &v)
1262  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
1263  is.bread<int64>(&v.z(), 1); is.bread<int64>(&v.w(), 1); }
1265  { is.bread(v); }
1267  { UT_StringHolder rampdata;
1268  loadData(is, rampdata);
1269  if (rampdata.isstring())
1270  {
1271  v.reset(new UT_Ramp());
1272  UT_IStream istr((const char *) rampdata, rampdata.length(), UT_ISTREAM_ASCII);
1273  v->load(istr);
1274  }
1275  else v.reset();
1276  }
1279  loadData(is, data);
1280  if (data.isstring())
1281  {
1282  // Find the data type.
1283  const char *colon = UT_StringWrap(data).findChar(':');
1284  if (colon)
1285  {
1286  int typelen = colon - data.buffer();
1288  type.strncpy(data.buffer(), typelen);
1289  UT_IStream istr(((const char *) data) + typelen + 1, data.length() - (typelen + 1), UT_ISTREAM_BINARY);
1290 
1291  v = PRM_DataFactory::parseBinary(type.buffer(), istr);
1292  }
1293  }
1294  else v.reset();
1295  }
1296 
1297  static void saveData(std::ostream &os, int64 v)
1298  { UTwrite(os, &v); }
1299  static void saveData(std::ostream &os, bool v)
1300  { int64 iv = v; UTwrite(os, &iv); }
1301  static void saveData(std::ostream &os, fpreal64 v)
1302  { UTwrite<fpreal64>(os, &v); }
1303  static void saveData(std::ostream &os, UT_Vector2D v)
1304  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y()); }
1305  static void saveData(std::ostream &os, UT_Vector3D v)
1306  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
1307  UTwrite<fpreal64>(os, &v.z()); }
1308  static void saveData(std::ostream &os, UT_Vector4D v)
1309  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
1310  UTwrite<fpreal64>(os, &v.z()); UTwrite<fpreal64>(os, &v.w()); }
1311  static void saveData(std::ostream &os, UT_Matrix2D v)
1313  static void saveData(std::ostream &os, UT_Matrix3D v)
1315  static void saveData(std::ostream &os, UT_Matrix4D v)
1317  static void saveData(std::ostream &os, UT_StringHolder s)
1318  { UT_StringWrap(s).saveBinary(os); }
1319  static void saveData(std::ostream &os, UT_SharedPtr<UT_Ramp> s)
1321  UT_OStringStream ostr;
1322  if (s) s->save(ostr);
1323  result = ostr.str();
1324  saveData(os, result);
1325  }
1326  static void saveData(std::ostream &os, PRM_DataItemHandle s)
1328  UT_OStringStream ostr;
1329  if (s)
1330  {
1331  ostr << s->getDataTypeToken();
1332  ostr << ":";
1333  s->saveBinary(ostr);
1334  }
1335  result = ostr.str();
1336  saveData(os, result);
1337  }
1338 
1339 
1340  void save(std::ostream &os) const
1341  {
1342  int32 v = version();
1343  UTwrite(os, &v);
1344  saveData(os, myGroupA);
1345  saveData(os, myASurface);
1346  saveData(os, myResolveA);
1347  saveData(os, myGroupB);
1348  saveData(os, myBSurface);
1349  saveData(os, myResolveB);
1350  saveData(os, myBooleanOp);
1351  saveData(os, mySubtractChoices);
1352  saveData(os, myShatterChoices);
1353  saveData(os, myOpenCurvesOnly);
1354  saveData(os, myGenerateAASeams);
1355  saveData(os, myGenerateBBSeams);
1356  saveData(os, myGenerateABSeams);
1357  saveData(os, myWindingOp);
1358  saveData(os, myMergeNbrs);
1359  saveData(os, myDetriangulate);
1360  saveData(os, myRemoveInlinePoints);
1361  saveData(os, myUniqueSeams);
1362  saveData(os, myCorrectNormals);
1363  saveData(os, myUseAxAPolys);
1364  saveData(os, myAxAPolys);
1365  saveData(os, myUseAxBPolys);
1366  saveData(os, myAxBPolys);
1367  saveData(os, myUseAxAList);
1368  saveData(os, myAxAList);
1369  saveData(os, myUseAxBList);
1370  saveData(os, myAxBList);
1371  saveData(os, myCollapseTinyEdges);
1372  saveData(os, myLengthThreshold);
1373  saveData(os, myUseAPolys);
1374  saveData(os, myAPolys);
1375  saveData(os, myUseAInsideB);
1376  saveData(os, myAInsideB);
1377  saveData(os, myUseAOutsideB);
1378  saveData(os, myAOutsideB);
1379  saveData(os, myUseBPolys);
1380  saveData(os, myBPolys);
1381  saveData(os, myUseBInsideA);
1382  saveData(os, myBInsideA);
1383  saveData(os, myUseBOutsideA);
1384  saveData(os, myBOutsideA);
1385  saveData(os, myUseABOverlap);
1386  saveData(os, myABOverlap);
1387  saveData(os, myUseAPieces);
1388  saveData(os, myAPieces);
1389  saveData(os, myUseBPieces);
1390  saveData(os, myBPieces);
1391  saveData(os, myUseABPieces);
1392  saveData(os, myABPieces);
1393  saveData(os, myUseReversedPolys);
1394  saveData(os, myReversedPolys);
1395  saveData(os, myUseAASeamEdges);
1396  saveData(os, myAASeamEdges);
1397  saveData(os, myUseBBSeamEdges);
1398  saveData(os, myBBSeamEdges);
1399  saveData(os, myUseABSeamEdges);
1400  saveData(os, myABSeamEdges);
1401  saveData(os, myDepthInA);
1402  saveData(os, myDepthInB);
1403 
1404  }
1405 
1406  bool load(UT_IStream &is)
1407  {
1408  int32 v;
1409  is.bread(&v, 1);
1410  if (version() != v)
1411  {
1412  // Fail incompatible versions
1413  return false;
1414  }
1415  loadData(is, myGroupA);
1416  loadData(is, myASurface);
1417  loadData(is, myResolveA);
1418  loadData(is, myGroupB);
1419  loadData(is, myBSurface);
1420  loadData(is, myResolveB);
1421  loadData(is, myBooleanOp);
1422  loadData(is, mySubtractChoices);
1423  loadData(is, myShatterChoices);
1424  loadData(is, myOpenCurvesOnly);
1425  loadData(is, myGenerateAASeams);
1426  loadData(is, myGenerateBBSeams);
1427  loadData(is, myGenerateABSeams);
1428  loadData(is, myWindingOp);
1429  loadData(is, myMergeNbrs);
1430  loadData(is, myDetriangulate);
1431  loadData(is, myRemoveInlinePoints);
1432  loadData(is, myUniqueSeams);
1433  loadData(is, myCorrectNormals);
1434  loadData(is, myUseAxAPolys);
1435  loadData(is, myAxAPolys);
1436  loadData(is, myUseAxBPolys);
1437  loadData(is, myAxBPolys);
1438  loadData(is, myUseAxAList);
1439  loadData(is, myAxAList);
1440  loadData(is, myUseAxBList);
1441  loadData(is, myAxBList);
1442  loadData(is, myCollapseTinyEdges);
1443  loadData(is, myLengthThreshold);
1444  loadData(is, myUseAPolys);
1445  loadData(is, myAPolys);
1446  loadData(is, myUseAInsideB);
1447  loadData(is, myAInsideB);
1448  loadData(is, myUseAOutsideB);
1449  loadData(is, myAOutsideB);
1450  loadData(is, myUseBPolys);
1451  loadData(is, myBPolys);
1452  loadData(is, myUseBInsideA);
1453  loadData(is, myBInsideA);
1454  loadData(is, myUseBOutsideA);
1455  loadData(is, myBOutsideA);
1456  loadData(is, myUseABOverlap);
1457  loadData(is, myABOverlap);
1458  loadData(is, myUseAPieces);
1459  loadData(is, myAPieces);
1460  loadData(is, myUseBPieces);
1461  loadData(is, myBPieces);
1462  loadData(is, myUseABPieces);
1463  loadData(is, myABPieces);
1464  loadData(is, myUseReversedPolys);
1465  loadData(is, myReversedPolys);
1466  loadData(is, myUseAASeamEdges);
1467  loadData(is, myAASeamEdges);
1468  loadData(is, myUseBBSeamEdges);
1469  loadData(is, myBBSeamEdges);
1470  loadData(is, myUseABSeamEdges);
1471  loadData(is, myABSeamEdges);
1472  loadData(is, myDepthInA);
1473  loadData(is, myDepthInB);
1474 
1475  return true;
1476  }
1477 
1478  const UT_StringHolder & getGroupA() const { return myGroupA; }
1479  void setGroupA(const UT_StringHolder & val) { myGroupA = val; }
1481  {
1482  SOP_Node *thissop = cookparms.getNode();
1483  if (!thissop) return getGroupA();
1485  OP_Utils::evalOpParm(result, thissop, "agroup", cookparms.getCookTime(), 0);
1486  return result;
1487  }
1488  ASurface getASurface() const { return ASurface(myASurface); }
1489  void setASurface(ASurface val) { myASurface = int64(val); }
1491  {
1492  SOP_Node *thissop = cookparms.getNode();
1493  if (!thissop) return getASurface();
1494  int64 result;
1495  OP_Utils::evalOpParm(result, thissop, "asurface", cookparms.getCookTime(), 0);
1496  return ASurface(result);
1497  }
1498  bool getResolveA() const { return myResolveA; }
1499  void setResolveA(bool val) { myResolveA = val; }
1500  bool opResolveA(const SOP_NodeVerb::CookParms &cookparms) const
1501  {
1502  SOP_Node *thissop = cookparms.getNode();
1503  if (!thissop) return getResolveA();
1504  bool result;
1505  OP_Utils::evalOpParm(result, thissop, "resolvea", cookparms.getCookTime(), 0);
1506  return result;
1507  }
1508  const UT_StringHolder & getGroupB() const { return myGroupB; }
1509  void setGroupB(const UT_StringHolder & val) { myGroupB = val; }
1511  {
1512  SOP_Node *thissop = cookparms.getNode();
1513  if (!thissop) return getGroupB();
1515  OP_Utils::evalOpParm(result, thissop, "bgroup", cookparms.getCookTime(), 0);
1516  return result;
1517  }
1518  BSurface getBSurface() const { return BSurface(myBSurface); }
1519  void setBSurface(BSurface val) { myBSurface = int64(val); }
1521  {
1522  SOP_Node *thissop = cookparms.getNode();
1523  if (!thissop) return getBSurface();
1524  int64 result;
1525  OP_Utils::evalOpParm(result, thissop, "bsurface", cookparms.getCookTime(), 0);
1526  return BSurface(result);
1527  }
1528  bool getResolveB() const { return myResolveB; }
1529  void setResolveB(bool val) { myResolveB = val; }
1530  bool opResolveB(const SOP_NodeVerb::CookParms &cookparms) const
1531  {
1532  SOP_Node *thissop = cookparms.getNode();
1533  if (!thissop) return getResolveB();
1534  bool result;
1535  OP_Utils::evalOpParm(result, thissop, "resolveb", cookparms.getCookTime(), 0);
1536  return result;
1537  }
1538  BooleanOp getBooleanOp() const { return BooleanOp(myBooleanOp); }
1539  void setBooleanOp(BooleanOp val) { myBooleanOp = int64(val); }
1541  {
1542  SOP_Node *thissop = cookparms.getNode();
1543  if (!thissop) return getBooleanOp();
1544  int64 result;
1545  OP_Utils::evalOpParm(result, thissop, "booleanop", cookparms.getCookTime(), 0);
1546  return BooleanOp(result);
1547  }
1548  SubtractChoices getSubtractChoices() const { return SubtractChoices(mySubtractChoices); }
1549  void setSubtractChoices(SubtractChoices val) { mySubtractChoices = int64(val); }
1551  {
1552  SOP_Node *thissop = cookparms.getNode();
1553  if (!thissop) return getSubtractChoices();
1554  int64 result;
1555  OP_Utils::evalOpParm(result, thissop, "subtractchoices", cookparms.getCookTime(), 0);
1556  return SubtractChoices(result);
1557  }
1558  ShatterChoices getShatterChoices() const { return ShatterChoices(myShatterChoices); }
1559  void setShatterChoices(ShatterChoices val) { myShatterChoices = int64(val); }
1561  {
1562  SOP_Node *thissop = cookparms.getNode();
1563  if (!thissop) return getShatterChoices();
1564  int64 result;
1565  OP_Utils::evalOpParm(result, thissop, "shatterchoices", cookparms.getCookTime(), 0);
1566  return ShatterChoices(result);
1567  }
1568  bool getOpenCurvesOnly() const { return myOpenCurvesOnly; }
1569  void setOpenCurvesOnly(bool val) { myOpenCurvesOnly = val; }
1570  bool opOpenCurvesOnly(const SOP_NodeVerb::CookParms &cookparms) const
1571  {
1572  SOP_Node *thissop = cookparms.getNode();
1573  if (!thissop) return getOpenCurvesOnly();
1574  bool result;
1575  OP_Utils::evalOpParm(result, thissop, "opencurvesonly", cookparms.getCookTime(), 0);
1576  return result;
1577  }
1578  bool getGenerateAASeams() const { return myGenerateAASeams; }
1579  void setGenerateAASeams(bool val) { myGenerateAASeams = val; }
1580  bool opGenerateAASeams(const SOP_NodeVerb::CookParms &cookparms) const
1581  {
1582  SOP_Node *thissop = cookparms.getNode();
1583  if (!thissop) return getGenerateAASeams();
1584  bool result;
1585  OP_Utils::evalOpParm(result, thissop, "generateaaseams", cookparms.getCookTime(), 0);
1586  return result;
1587  }
1588  bool getGenerateBBSeams() const { return myGenerateBBSeams; }
1589  void setGenerateBBSeams(bool val) { myGenerateBBSeams = val; }
1590  bool opGenerateBBSeams(const SOP_NodeVerb::CookParms &cookparms) const
1591  {
1592  SOP_Node *thissop = cookparms.getNode();
1593  if (!thissop) return getGenerateBBSeams();
1594  bool result;
1595  OP_Utils::evalOpParm(result, thissop, "generatebbseams", cookparms.getCookTime(), 0);
1596  return result;
1597  }
1598  bool getGenerateABSeams() const { return myGenerateABSeams; }
1599  void setGenerateABSeams(bool val) { myGenerateABSeams = val; }
1600  bool opGenerateABSeams(const SOP_NodeVerb::CookParms &cookparms) const
1601  {
1602  SOP_Node *thissop = cookparms.getNode();
1603  if (!thissop) return getGenerateABSeams();
1604  bool result;
1605  OP_Utils::evalOpParm(result, thissop, "generateabseams", cookparms.getCookTime(), 0);
1606  return result;
1607  }
1608  WindingOp getWindingOp() const { return WindingOp(myWindingOp); }
1609  void setWindingOp(WindingOp val) { myWindingOp = int64(val); }
1611  {
1612  SOP_Node *thissop = cookparms.getNode();
1613  if (!thissop) return getWindingOp();
1614  int64 result;
1615  OP_Utils::evalOpParm(result, thissop, "windingop", cookparms.getCookTime(), 0);
1616  return WindingOp(result);
1617  }
1618  bool getMergeNbrs() const { return myMergeNbrs; }
1619  void setMergeNbrs(bool val) { myMergeNbrs = val; }
1620  bool opMergeNbrs(const SOP_NodeVerb::CookParms &cookparms) const
1621  {
1622  SOP_Node *thissop = cookparms.getNode();
1623  if (!thissop) return getMergeNbrs();
1624  bool result;
1625  OP_Utils::evalOpParm(result, thissop, "mergenbrs", cookparms.getCookTime(), 0);
1626  return result;
1627  }
1628  Detriangulate getDetriangulate() const { return Detriangulate(myDetriangulate); }
1629  void setDetriangulate(Detriangulate val) { myDetriangulate = int64(val); }
1631  {
1632  SOP_Node *thissop = cookparms.getNode();
1633  if (!thissop) return getDetriangulate();
1634  int64 result;
1635  OP_Utils::evalOpParm(result, thissop, "detriangulate", cookparms.getCookTime(), 0);
1636  return Detriangulate(result);
1637  }
1638  bool getRemoveInlinePoints() const { return myRemoveInlinePoints; }
1639  void setRemoveInlinePoints(bool val) { myRemoveInlinePoints = val; }
1640  bool opRemoveInlinePoints(const SOP_NodeVerb::CookParms &cookparms) const
1641  {
1642  SOP_Node *thissop = cookparms.getNode();
1643  if (!thissop) return getRemoveInlinePoints();
1644  bool result;
1645  OP_Utils::evalOpParm(result, thissop, "removeinlinepoints", cookparms.getCookTime(), 0);
1646  return result;
1647  }
1648  bool getUniqueSeams() const { return myUniqueSeams; }
1649  void setUniqueSeams(bool val) { myUniqueSeams = val; }
1650  bool opUniqueSeams(const SOP_NodeVerb::CookParms &cookparms) const
1651  {
1652  SOP_Node *thissop = cookparms.getNode();
1653  if (!thissop) return getUniqueSeams();
1654  bool result;
1655  OP_Utils::evalOpParm(result, thissop, "uniqueseams", cookparms.getCookTime(), 0);
1656  return result;
1657  }
1658  bool getCorrectNormals() const { return myCorrectNormals; }
1659  void setCorrectNormals(bool val) { myCorrectNormals = val; }
1660  bool opCorrectNormals(const SOP_NodeVerb::CookParms &cookparms) const
1661  {
1662  SOP_Node *thissop = cookparms.getNode();
1663  if (!thissop) return getCorrectNormals();
1664  bool result;
1665  OP_Utils::evalOpParm(result, thissop, "correctnormals", cookparms.getCookTime(), 0);
1666  return result;
1667  }
1668  bool getUseAxAPolys() const { return myUseAxAPolys; }
1669  void setUseAxAPolys(bool val) { myUseAxAPolys = val; }
1670  bool opUseAxAPolys(const SOP_NodeVerb::CookParms &cookparms) const
1671  {
1672  SOP_Node *thissop = cookparms.getNode();
1673  if (!thissop) return getUseAxAPolys();
1674  bool result;
1675  OP_Utils::evalOpParm(result, thissop, "useaxapolys", cookparms.getCookTime(), 0);
1676  return result;
1677  }
1678  const UT_StringHolder & getAxAPolys() const { return myAxAPolys; }
1679  void setAxAPolys(const UT_StringHolder & val) { myAxAPolys = val; }
1681  {
1682  SOP_Node *thissop = cookparms.getNode();
1683  if (!thissop) return getAxAPolys();
1685  OP_Utils::evalOpParm(result, thissop, "axapolys", cookparms.getCookTime(), 0);
1686  return result;
1687  }
1688  bool getUseAxBPolys() const { return myUseAxBPolys; }
1689  void setUseAxBPolys(bool val) { myUseAxBPolys = val; }
1690  bool opUseAxBPolys(const SOP_NodeVerb::CookParms &cookparms) const
1691  {
1692  SOP_Node *thissop = cookparms.getNode();
1693  if (!thissop) return getUseAxBPolys();
1694  bool result;
1695  OP_Utils::evalOpParm(result, thissop, "useaxbpolys", cookparms.getCookTime(), 0);
1696  return result;
1697  }
1698  const UT_StringHolder & getAxBPolys() const { return myAxBPolys; }
1699  void setAxBPolys(const UT_StringHolder & val) { myAxBPolys = val; }
1701  {
1702  SOP_Node *thissop = cookparms.getNode();
1703  if (!thissop) return getAxBPolys();
1705  OP_Utils::evalOpParm(result, thissop, "axbpolys", cookparms.getCookTime(), 0);
1706  return result;
1707  }
1708  bool getUseAxAList() const { return myUseAxAList; }
1709  void setUseAxAList(bool val) { myUseAxAList = val; }
1710  bool opUseAxAList(const SOP_NodeVerb::CookParms &cookparms) const
1711  {
1712  SOP_Node *thissop = cookparms.getNode();
1713  if (!thissop) return getUseAxAList();
1714  bool result;
1715  OP_Utils::evalOpParm(result, thissop, "useaxalist", cookparms.getCookTime(), 0);
1716  return result;
1717  }
1718  const UT_StringHolder & getAxAList() const { return myAxAList; }
1719  void setAxAList(const UT_StringHolder & val) { myAxAList = val; }
1721  {
1722  SOP_Node *thissop = cookparms.getNode();
1723  if (!thissop) return getAxAList();
1725  OP_Utils::evalOpParm(result, thissop, "axalist", cookparms.getCookTime(), 0);
1726  return result;
1727  }
1728  bool getUseAxBList() const { return myUseAxBList; }
1729  void setUseAxBList(bool val) { myUseAxBList = val; }
1730  bool opUseAxBList(const SOP_NodeVerb::CookParms &cookparms) const
1731  {
1732  SOP_Node *thissop = cookparms.getNode();
1733  if (!thissop) return getUseAxBList();
1734  bool result;
1735  OP_Utils::evalOpParm(result, thissop, "useaxblist", cookparms.getCookTime(), 0);
1736  return result;
1737  }
1738  const UT_StringHolder & getAxBList() const { return myAxBList; }
1739  void setAxBList(const UT_StringHolder & val) { myAxBList = val; }
1741  {
1742  SOP_Node *thissop = cookparms.getNode();
1743  if (!thissop) return getAxBList();
1745  OP_Utils::evalOpParm(result, thissop, "axblist", cookparms.getCookTime(), 0);
1746  return result;
1747  }
1748  bool getCollapseTinyEdges() const { return myCollapseTinyEdges; }
1749  void setCollapseTinyEdges(bool val) { myCollapseTinyEdges = val; }
1750  bool opCollapseTinyEdges(const SOP_NodeVerb::CookParms &cookparms) const
1751  {
1752  SOP_Node *thissop = cookparms.getNode();
1753  if (!thissop) return getCollapseTinyEdges();
1754  bool result;
1755  OP_Utils::evalOpParm(result, thissop, "collapsetinyedges", cookparms.getCookTime(), 0);
1756  return result;
1757  }
1758  fpreal64 getLengthThreshold() const { return myLengthThreshold; }
1759  void setLengthThreshold(fpreal64 val) { myLengthThreshold = val; }
1761  {
1762  SOP_Node *thissop = cookparms.getNode();
1763  if (!thissop) return getLengthThreshold();
1764  fpreal64 result;
1765  OP_Utils::evalOpParm(result, thissop, "lengththreshold", cookparms.getCookTime(), 0);
1766  return result;
1767  }
1768  bool getUseAPolys() const { return myUseAPolys; }
1769  void setUseAPolys(bool val) { myUseAPolys = val; }
1770  bool opUseAPolys(const SOP_NodeVerb::CookParms &cookparms) const
1771  {
1772  SOP_Node *thissop = cookparms.getNode();
1773  if (!thissop) return getUseAPolys();
1774  bool result;
1775  OP_Utils::evalOpParm(result, thissop, "useapolys", cookparms.getCookTime(), 0);
1776  return result;
1777  }
1778  const UT_StringHolder & getAPolys() const { return myAPolys; }
1779  void setAPolys(const UT_StringHolder & val) { myAPolys = val; }
1781  {
1782  SOP_Node *thissop = cookparms.getNode();
1783  if (!thissop) return getAPolys();
1785  OP_Utils::evalOpParm(result, thissop, "apolys", cookparms.getCookTime(), 0);
1786  return result;
1787  }
1788  bool getUseAInsideB() const { return myUseAInsideB; }
1789  void setUseAInsideB(bool val) { myUseAInsideB = val; }
1790  bool opUseAInsideB(const SOP_NodeVerb::CookParms &cookparms) const
1791  {
1792  SOP_Node *thissop = cookparms.getNode();
1793  if (!thissop) return getUseAInsideB();
1794  bool result;
1795  OP_Utils::evalOpParm(result, thissop, "useainsideb", cookparms.getCookTime(), 0);
1796  return result;
1797  }
1798  const UT_StringHolder & getAInsideB() const { return myAInsideB; }
1799  void setAInsideB(const UT_StringHolder & val) { myAInsideB = val; }
1801  {
1802  SOP_Node *thissop = cookparms.getNode();
1803  if (!thissop) return getAInsideB();
1805  OP_Utils::evalOpParm(result, thissop, "ainsideb", cookparms.getCookTime(), 0);
1806  return result;
1807  }
1808  bool getUseAOutsideB() const { return myUseAOutsideB; }
1809  void setUseAOutsideB(bool val) { myUseAOutsideB = val; }
1810  bool opUseAOutsideB(const SOP_NodeVerb::CookParms &cookparms) const
1811  {
1812  SOP_Node *thissop = cookparms.getNode();
1813  if (!thissop) return getUseAOutsideB();
1814  bool result;
1815  OP_Utils::evalOpParm(result, thissop, "useaoutsideb", cookparms.getCookTime(), 0);
1816  return result;
1817  }
1818  const UT_StringHolder & getAOutsideB() const { return myAOutsideB; }
1819  void setAOutsideB(const UT_StringHolder & val) { myAOutsideB = val; }
1821  {
1822  SOP_Node *thissop = cookparms.getNode();
1823  if (!thissop) return getAOutsideB();
1825  OP_Utils::evalOpParm(result, thissop, "aoutsideb", cookparms.getCookTime(), 0);
1826  return result;
1827  }
1828  bool getUseBPolys() const { return myUseBPolys; }
1829  void setUseBPolys(bool val) { myUseBPolys = val; }
1830  bool opUseBPolys(const SOP_NodeVerb::CookParms &cookparms) const
1831  {
1832  SOP_Node *thissop = cookparms.getNode();
1833  if (!thissop) return getUseBPolys();
1834  bool result;
1835  OP_Utils::evalOpParm(result, thissop, "usebpolys", cookparms.getCookTime(), 0);
1836  return result;
1837  }
1838  const UT_StringHolder & getBPolys() const { return myBPolys; }
1839  void setBPolys(const UT_StringHolder & val) { myBPolys = val; }
1841  {
1842  SOP_Node *thissop = cookparms.getNode();
1843  if (!thissop) return getBPolys();
1845  OP_Utils::evalOpParm(result, thissop, "bpolys", cookparms.getCookTime(), 0);
1846  return result;
1847  }
1848  bool getUseBInsideA() const { return myUseBInsideA; }
1849  void setUseBInsideA(bool val) { myUseBInsideA = val; }
1850  bool opUseBInsideA(const SOP_NodeVerb::CookParms &cookparms) const
1851  {
1852  SOP_Node *thissop = cookparms.getNode();
1853  if (!thissop) return getUseBInsideA();
1854  bool result;
1855  OP_Utils::evalOpParm(result, thissop, "usebinsidea", cookparms.getCookTime(), 0);
1856  return result;
1857  }
1858  const UT_StringHolder & getBInsideA() const { return myBInsideA; }
1859  void setBInsideA(const UT_StringHolder & val) { myBInsideA = val; }
1861  {
1862  SOP_Node *thissop = cookparms.getNode();
1863  if (!thissop) return getBInsideA();
1865  OP_Utils::evalOpParm(result, thissop, "binsidea", cookparms.getCookTime(), 0);
1866  return result;
1867  }
1868  bool getUseBOutsideA() const { return myUseBOutsideA; }
1869  void setUseBOutsideA(bool val) { myUseBOutsideA = val; }
1870  bool opUseBOutsideA(const SOP_NodeVerb::CookParms &cookparms) const
1871  {
1872  SOP_Node *thissop = cookparms.getNode();
1873  if (!thissop) return getUseBOutsideA();
1874  bool result;
1875  OP_Utils::evalOpParm(result, thissop, "useboutsidea", cookparms.getCookTime(), 0);
1876  return result;
1877  }
1878  const UT_StringHolder & getBOutsideA() const { return myBOutsideA; }
1879  void setBOutsideA(const UT_StringHolder & val) { myBOutsideA = val; }
1881  {
1882  SOP_Node *thissop = cookparms.getNode();
1883  if (!thissop) return getBOutsideA();
1885  OP_Utils::evalOpParm(result, thissop, "boutsidea", cookparms.getCookTime(), 0);
1886  return result;
1887  }
1888  bool getUseABOverlap() const { return myUseABOverlap; }
1889  void setUseABOverlap(bool val) { myUseABOverlap = val; }
1890  bool opUseABOverlap(const SOP_NodeVerb::CookParms &cookparms) const
1891  {
1892  SOP_Node *thissop = cookparms.getNode();
1893  if (!thissop) return getUseABOverlap();
1894  bool result;
1895  OP_Utils::evalOpParm(result, thissop, "useaboverlap", cookparms.getCookTime(), 0);
1896  return result;
1897  }
1898  const UT_StringHolder & getABOverlap() const { return myABOverlap; }
1899  void setABOverlap(const UT_StringHolder & val) { myABOverlap = val; }
1901  {
1902  SOP_Node *thissop = cookparms.getNode();
1903  if (!thissop) return getABOverlap();
1905  OP_Utils::evalOpParm(result, thissop, "aboverlap", cookparms.getCookTime(), 0);
1906  return result;
1907  }
1908  bool getUseAPieces() const { return myUseAPieces; }
1909  void setUseAPieces(bool val) { myUseAPieces = val; }
1910  bool opUseAPieces(const SOP_NodeVerb::CookParms &cookparms) const
1911  {
1912  SOP_Node *thissop = cookparms.getNode();
1913  if (!thissop) return getUseAPieces();
1914  bool result;
1915  OP_Utils::evalOpParm(result, thissop, "useaonlypieces", cookparms.getCookTime(), 0);
1916  return result;
1917  }
1918  const UT_StringHolder & getAPieces() const { return myAPieces; }
1919  void setAPieces(const UT_StringHolder & val) { myAPieces = val; }
1921  {
1922  SOP_Node *thissop = cookparms.getNode();
1923  if (!thissop) return getAPieces();
1925  OP_Utils::evalOpParm(result, thissop, "aonlypieces", cookparms.getCookTime(), 0);
1926  return result;
1927  }
1928  bool getUseBPieces() const { return myUseBPieces; }
1929  void setUseBPieces(bool val) { myUseBPieces = val; }
1930  bool opUseBPieces(const SOP_NodeVerb::CookParms &cookparms) const
1931  {
1932  SOP_Node *thissop = cookparms.getNode();
1933  if (!thissop) return getUseBPieces();
1934  bool result;
1935  OP_Utils::evalOpParm(result, thissop, "usebonlypieces", cookparms.getCookTime(), 0);
1936  return result;
1937  }
1938  const UT_StringHolder & getBPieces() const { return myBPieces; }
1939  void setBPieces(const UT_StringHolder & val) { myBPieces = val; }
1941  {
1942  SOP_Node *thissop = cookparms.getNode();
1943  if (!thissop) return getBPieces();
1945  OP_Utils::evalOpParm(result, thissop, "bonlypieces", cookparms.getCookTime(), 0);
1946  return result;
1947  }
1948  bool getUseABPieces() const { return myUseABPieces; }
1949  void setUseABPieces(bool val) { myUseABPieces = val; }
1950  bool opUseABPieces(const SOP_NodeVerb::CookParms &cookparms) const
1951  {
1952  SOP_Node *thissop = cookparms.getNode();
1953  if (!thissop) return getUseABPieces();
1954  bool result;
1955  OP_Utils::evalOpParm(result, thissop, "useabpieces", cookparms.getCookTime(), 0);
1956  return result;
1957  }
1958  const UT_StringHolder & getABPieces() const { return myABPieces; }
1959  void setABPieces(const UT_StringHolder & val) { myABPieces = val; }
1961  {
1962  SOP_Node *thissop = cookparms.getNode();
1963  if (!thissop) return getABPieces();
1965  OP_Utils::evalOpParm(result, thissop, "abpieces", cookparms.getCookTime(), 0);
1966  return result;
1967  }
1968  bool getUseReversedPolys() const { return myUseReversedPolys; }
1969  void setUseReversedPolys(bool val) { myUseReversedPolys = val; }
1970  bool opUseReversedPolys(const SOP_NodeVerb::CookParms &cookparms) const
1971  {
1972  SOP_Node *thissop = cookparms.getNode();
1973  if (!thissop) return getUseReversedPolys();
1974  bool result;
1975  OP_Utils::evalOpParm(result, thissop, "usereversedpolys", cookparms.getCookTime(), 0);
1976  return result;
1977  }
1978  const UT_StringHolder & getReversedPolys() const { return myReversedPolys; }
1979  void setReversedPolys(const UT_StringHolder & val) { myReversedPolys = val; }
1981  {
1982  SOP_Node *thissop = cookparms.getNode();
1983  if (!thissop) return getReversedPolys();
1985  OP_Utils::evalOpParm(result, thissop, "reversedpolys", cookparms.getCookTime(), 0);
1986  return result;
1987  }
1988  bool getUseAASeamEdges() const { return myUseAASeamEdges; }
1989  void setUseAASeamEdges(bool val) { myUseAASeamEdges = val; }
1990  bool opUseAASeamEdges(const SOP_NodeVerb::CookParms &cookparms) const
1991  {
1992  SOP_Node *thissop = cookparms.getNode();
1993  if (!thissop) return getUseAASeamEdges();
1994  bool result;
1995  OP_Utils::evalOpParm(result, thissop, "useaaseamedges", cookparms.getCookTime(), 0);
1996  return result;
1997  }
1998  const UT_StringHolder & getAASeamEdges() const { return myAASeamEdges; }
1999  void setAASeamEdges(const UT_StringHolder & val) { myAASeamEdges = val; }
2001  {
2002  SOP_Node *thissop = cookparms.getNode();
2003  if (!thissop) return getAASeamEdges();
2005  OP_Utils::evalOpParm(result, thissop, "aaseamedges", cookparms.getCookTime(), 0);
2006  return result;
2007  }
2008  bool getUseBBSeamEdges() const { return myUseBBSeamEdges; }
2009  void setUseBBSeamEdges(bool val) { myUseBBSeamEdges = val; }
2010  bool opUseBBSeamEdges(const SOP_NodeVerb::CookParms &cookparms) const
2011  {
2012  SOP_Node *thissop = cookparms.getNode();
2013  if (!thissop) return getUseBBSeamEdges();
2014  bool result;
2015  OP_Utils::evalOpParm(result, thissop, "usebbseamedges", cookparms.getCookTime(), 0);
2016  return result;
2017  }
2018  const UT_StringHolder & getBBSeamEdges() const { return myBBSeamEdges; }
2019  void setBBSeamEdges(const UT_StringHolder & val) { myBBSeamEdges = val; }
2021  {
2022  SOP_Node *thissop = cookparms.getNode();
2023  if (!thissop) return getBBSeamEdges();
2025  OP_Utils::evalOpParm(result, thissop, "bbseamedges", cookparms.getCookTime(), 0);
2026  return result;
2027  }
2028  bool getUseABSeamEdges() const { return myUseABSeamEdges; }
2029  void setUseABSeamEdges(bool val) { myUseABSeamEdges = val; }
2030  bool opUseABSeamEdges(const SOP_NodeVerb::CookParms &cookparms) const
2031  {
2032  SOP_Node *thissop = cookparms.getNode();
2033  if (!thissop) return getUseABSeamEdges();
2034  bool result;
2035  OP_Utils::evalOpParm(result, thissop, "useabseamedges", cookparms.getCookTime(), 0);
2036  return result;
2037  }
2038  const UT_StringHolder & getABSeamEdges() const { return myABSeamEdges; }
2039  void setABSeamEdges(const UT_StringHolder & val) { myABSeamEdges = val; }
2041  {
2042  SOP_Node *thissop = cookparms.getNode();
2043  if (!thissop) return getABSeamEdges();
2045  OP_Utils::evalOpParm(result, thissop, "abseamedges", cookparms.getCookTime(), 0);
2046  return result;
2047  }
2048  UT_Vector2I getDepthInA() const { return myDepthInA; }
2049  void setDepthInA(UT_Vector2I val) { myDepthInA = val; }
2051  {
2052  SOP_Node *thissop = cookparms.getNode();
2053  if (!thissop) return getDepthInA();
2055  OP_Utils::evalOpParm(result, thissop, "adepth", cookparms.getCookTime(), 0);
2056  return result;
2057  }
2058  UT_Vector2I getDepthInB() const { return myDepthInB; }
2059  void setDepthInB(UT_Vector2I val) { myDepthInB = val; }
2061  {
2062  SOP_Node *thissop = cookparms.getNode();
2063  if (!thissop) return getDepthInB();
2065  OP_Utils::evalOpParm(result, thissop, "bdepth", cookparms.getCookTime(), 0);
2066  return result;
2067  }
2068 
2069 private:
2070  UT_StringHolder myGroupA;
2071  int64 myASurface;
2072  bool myResolveA;
2073  UT_StringHolder myGroupB;
2074  int64 myBSurface;
2075  bool myResolveB;
2076  int64 myBooleanOp;
2077  int64 mySubtractChoices;
2078  int64 myShatterChoices;
2079  bool myOpenCurvesOnly;
2080  bool myGenerateAASeams;
2081  bool myGenerateBBSeams;
2082  bool myGenerateABSeams;
2083  int64 myWindingOp;
2084  bool myMergeNbrs;
2085  int64 myDetriangulate;
2086  bool myRemoveInlinePoints;
2087  bool myUniqueSeams;
2088  bool myCorrectNormals;
2089  bool myUseAxAPolys;
2090  UT_StringHolder myAxAPolys;
2091  bool myUseAxBPolys;
2092  UT_StringHolder myAxBPolys;
2093  bool myUseAxAList;
2094  UT_StringHolder myAxAList;
2095  bool myUseAxBList;
2096  UT_StringHolder myAxBList;
2097  bool myCollapseTinyEdges;
2098  fpreal64 myLengthThreshold;
2099  bool myUseAPolys;
2100  UT_StringHolder myAPolys;
2101  bool myUseAInsideB;
2102  UT_StringHolder myAInsideB;
2103  bool myUseAOutsideB;
2104  UT_StringHolder myAOutsideB;
2105  bool myUseBPolys;
2106  UT_StringHolder myBPolys;
2107  bool myUseBInsideA;
2108  UT_StringHolder myBInsideA;
2109  bool myUseBOutsideA;
2110  UT_StringHolder myBOutsideA;
2111  bool myUseABOverlap;
2112  UT_StringHolder myABOverlap;
2113  bool myUseAPieces;
2114  UT_StringHolder myAPieces;
2115  bool myUseBPieces;
2116  UT_StringHolder myBPieces;
2117  bool myUseABPieces;
2118  UT_StringHolder myABPieces;
2119  bool myUseReversedPolys;
2120  UT_StringHolder myReversedPolys;
2121  bool myUseAASeamEdges;
2122  UT_StringHolder myAASeamEdges;
2123  bool myUseBBSeamEdges;
2124  UT_StringHolder myBBSeamEdges;
2125  bool myUseABSeamEdges;
2126  UT_StringHolder myABSeamEdges;
2127  UT_Vector2I myDepthInA;
2128  UT_Vector2I myDepthInB;
2129 
2130 };
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)
type
Definition: core.h:556
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:63
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
GLsizei const GLfloat * value
Definition: glcorearb.h:824
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:622
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)
UT_SharedPtr< const PRM_DataItem > PRM_DataItemHandle
Definition: APEX_Include.h:55
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:303
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:278
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:96
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
virtual UT_StringHolder baseGetSignature() const
Definition: OP_NodeParms.h:294
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:372
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:1401
#define UT_ASSERT(ZZ)
Definition: UT_Assert.h:156
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)
const UT_StringHolder & getABSeamEdges() const
virtual bool isDirect() const =0
Direct proxies mirror actual nodes:
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)
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