HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
SOP_PolyBevel-3.0.proto.h
Go to the documentation of this file.
1 /* Automagically Generated by generate_proto.py
2  * Do not Edit
3  */
4 #pragma once
5 
6 #include <SOP/SOP_API.h>
7 #include <SOP/SOP_NodeVerb.h>
8 #include <SOP/SOP_GraphProxy.h>
9 
10 #include <OP/OP_Utils.h>
11 #include <PRM/PRM_Parm.h>
12 #include <UT/UT_IStream.h>
13 #include <UT/UT_NTStreamUtil.h>
14 #include <UT/UT_Ramp.h>
15 #include <UT/UT_SharedPtr.h>
16 #include <UT/UT_StringHolder.h>
17 #include <UT/UT_StringStream.h>
18 #include <UT/UT_VectorTypes.h>
19 #include <UT/UT_EnvControl.h>
20 #include <SYS/SYS_Types.h>
21 
22 class DEP_MicroNode;
23 namespace SOP_PolyBevel_3_0Enums
24 {
25  enum class GroupType
26  {
27  PRIMS = 0,
28  POINTS,
29  EDGES,
30  GUESS
31  };
32 
34  getToken(GroupType enum_value)
35  {
36  using namespace UT::Literal;
37  switch (enum_value) {
38  case GroupType::PRIMS: return "prims"_sh;
39  case GroupType::POINTS: return "points"_sh;
40  case GroupType::EDGES: return "edges"_sh;
41  case GroupType::GUESS: return "guess"_sh;
42  default: UT_ASSERT(false); return ""_sh;
43  }
44  }
45 
46  enum class UseOffsetScale
47  {
48  UNSCALED = 0,
49  BYATTRIB
50  };
51 
53  getToken(UseOffsetScale enum_value)
54  {
55  using namespace UT::Literal;
56  switch (enum_value) {
57  case UseOffsetScale::UNSCALED: return "unscaled"_sh;
58  case UseOffsetScale::BYATTRIB: return "byattrib"_sh;
59  default: UT_ASSERT(false); return ""_sh;
60  }
61  }
62 
63  enum class Sliding
64  {
65  AUTO = 0,
66  ALWAYS,
67  NEVER
68  };
69 
71  getToken(Sliding enum_value)
72  {
73  using namespace UT::Literal;
74  switch (enum_value) {
75  case Sliding::AUTO: return "auto"_sh;
76  case Sliding::ALWAYS: return "always"_sh;
77  case Sliding::NEVER: return "never"_sh;
78  default: UT_ASSERT(false); return ""_sh;
79  }
80  }
81 
82  enum class Limit
83  {
84  NEVER = 0,
87  };
88 
90  getToken(Limit enum_value)
91  {
92  using namespace UT::Literal;
93  switch (enum_value) {
94  case Limit::NEVER: return "never"_sh;
95  case Limit::INDIVIDUALLY: return "individually"_sh;
96  case Limit::SIMULTANEOUSLY: return "simultaneously"_sh;
97  default: UT_ASSERT(false); return ""_sh;
98  }
99  }
100 
101  enum class FilletShape
102  {
103  NONE = 0,
104  SOLID,
105  CREASE,
106  CHAMFER,
107  ROUND
108  };
109 
111  getToken(FilletShape enum_value)
112  {
113  using namespace UT::Literal;
114  switch (enum_value) {
115  case FilletShape::NONE: return "none"_sh;
116  case FilletShape::SOLID: return "solid"_sh;
117  case FilletShape::CREASE: return "crease"_sh;
118  case FilletShape::CHAMFER: return "chamfer"_sh;
119  case FilletShape::ROUND: return "round"_sh;
120  default: UT_ASSERT(false); return ""_sh;
121  }
122  }
123 
124  enum class ProfileSampling
125  {
126  UNIFORM = 0,
127  ADAPTIVE,
129  };
130 
133  {
134  using namespace UT::Literal;
135  switch (enum_value) {
136  case ProfileSampling::UNIFORM: return "uniform"_sh;
137  case ProfileSampling::ADAPTIVE: return "adaptive"_sh;
138  case ProfileSampling::CONTROLPOINTS: return "controlpoints"_sh;
139  default: UT_ASSERT(false); return ""_sh;
140  }
141  }
142 
143  enum class ProfileSource
144  {
145  BASIC = 0,
146  RAMP,
147  EXTERNAL
148  };
149 
151  getToken(ProfileSource enum_value)
152  {
153  using namespace UT::Literal;
154  switch (enum_value) {
155  case ProfileSource::BASIC: return "basic"_sh;
156  case ProfileSource::RAMP: return "ramp"_sh;
157  case ProfileSource::EXTERNAL: return "external"_sh;
158  default: UT_ASSERT(false); return ""_sh;
159  }
160  }
161 
162 }
163 
164 
166 {
167 public:
168  static int version() { return 1; }
169 
171  {
172  myGroup = ""_UTsh;
173  myGroupType = 3;
174  myIgnoreBridges = true;
175  myIgnoreShared = false;
176  myIgnoreFlatEdges = false;
177  myIgnoreFlatPoints = false;
178  myIgnoreInlinePoints = false;
179  myFlatAngle = 2;
180  myOffset = 0;
181  myUseOffsetScale = 0;
182  myPointScaleAttr = "pscale"_UTsh;
183  mySliding = 0;
184  myAsymTol = 0.5;
185  mySlideEdges = ""_UTsh;
186  myDetectCollisions = true;
187  myRestrictSlides = true;
188  myLimit = 1;
189  myStopAtSlideEnd = true;
190  myStopAtPinches = true;
191  myPinchAngle = 0;
192  myStopAtCollisions = true;
193  myFilletShape = 4;
194  myConvexity = 1.0;
195  myProfileSource = 0;
196  myProfileScale = 1;
197  myReverseProfile = false;
198  mySymmetrizeProfile = true;
199  myProfileDirection = ""_UTsh;
200  myProfileRamp = UT_SharedPtr<UT_Ramp>(0);
201  myFlatBoost = 30;
202  myUsePointFilletPolys = false;
203  myPointFilletPolys = "pointfilletpolys"_UTsh;
204  myUsePointFilletEdges = false;
205  myPointFilletEdges = "pointfilletedges"_UTsh;
206  myUseEdgeFilletGroup = false;
207  myEdgeFilletGroup = "edgefilletpolys"_UTsh;
208  myUseOffsetEdges = false;
209  myOffsetEdges = "offsetedges"_UTsh;
210  myUseOffsetPoints = false;
211  myOffsetPoints = "offsetpoints"_UTsh;
212  myUseMergedPoints = false;
213  myMergedPoints = "mergedpoints"_UTsh;
214  myProfileSampling = 0;
215  myDivisions = 1;
216 
217  }
218 
219  explicit SOP_PolyBevel_3_0Parms(const SOP_PolyBevel_3_0Parms &) = default;
221  SOP_PolyBevel_3_0Parms(SOP_PolyBevel_3_0Parms &&) noexcept = default;
222  SOP_PolyBevel_3_0Parms &operator=(SOP_PolyBevel_3_0Parms &&) noexcept = default;
223 
224  ~SOP_PolyBevel_3_0Parms() override {}
225 
227  {
228  if (myGroup != src.myGroup) return false;
229  if (myGroupType != src.myGroupType) return false;
230  if (myIgnoreBridges != src.myIgnoreBridges) return false;
231  if (myIgnoreShared != src.myIgnoreShared) return false;
232  if (myIgnoreFlatEdges != src.myIgnoreFlatEdges) return false;
233  if (myIgnoreFlatPoints != src.myIgnoreFlatPoints) return false;
234  if (myIgnoreInlinePoints != src.myIgnoreInlinePoints) return false;
235  if (myFlatAngle != src.myFlatAngle) return false;
236  if (myOffset != src.myOffset) return false;
237  if (myUseOffsetScale != src.myUseOffsetScale) return false;
238  if (myPointScaleAttr != src.myPointScaleAttr) return false;
239  if (mySliding != src.mySliding) return false;
240  if (myAsymTol != src.myAsymTol) return false;
241  if (mySlideEdges != src.mySlideEdges) return false;
242  if (myDetectCollisions != src.myDetectCollisions) return false;
243  if (myRestrictSlides != src.myRestrictSlides) return false;
244  if (myLimit != src.myLimit) return false;
245  if (myStopAtSlideEnd != src.myStopAtSlideEnd) return false;
246  if (myStopAtPinches != src.myStopAtPinches) return false;
247  if (myPinchAngle != src.myPinchAngle) return false;
248  if (myStopAtCollisions != src.myStopAtCollisions) return false;
249  if (myFilletShape != src.myFilletShape) return false;
250  if (myConvexity != src.myConvexity) return false;
251  if (myProfileSource != src.myProfileSource) return false;
252  if (myProfileScale != src.myProfileScale) return false;
253  if (myReverseProfile != src.myReverseProfile) return false;
254  if (mySymmetrizeProfile != src.mySymmetrizeProfile) return false;
255  if (myProfileDirection != src.myProfileDirection) return false;
256  if (myProfileRamp != src.myProfileRamp)
257  { if (!myProfileRamp || !src.myProfileRamp || !(*myProfileRamp == *src.myProfileRamp)) return false; }
258  if (myFlatBoost != src.myFlatBoost) return false;
259  if (myUsePointFilletPolys != src.myUsePointFilletPolys) return false;
260  if (myPointFilletPolys != src.myPointFilletPolys) return false;
261  if (myUsePointFilletEdges != src.myUsePointFilletEdges) return false;
262  if (myPointFilletEdges != src.myPointFilletEdges) return false;
263  if (myUseEdgeFilletGroup != src.myUseEdgeFilletGroup) return false;
264  if (myEdgeFilletGroup != src.myEdgeFilletGroup) return false;
265  if (myUseOffsetEdges != src.myUseOffsetEdges) return false;
266  if (myOffsetEdges != src.myOffsetEdges) return false;
267  if (myUseOffsetPoints != src.myUseOffsetPoints) return false;
268  if (myOffsetPoints != src.myOffsetPoints) return false;
269  if (myUseMergedPoints != src.myUseMergedPoints) return false;
270  if (myMergedPoints != src.myMergedPoints) return false;
271  if (myProfileSampling != src.myProfileSampling) return false;
272  if (myDivisions != src.myDivisions) return false;
273 
274  return true;
275  }
277  {
278  return !operator==(src);
279  }
287 
288 
289 
290  void buildFromOp(const OP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
291  {
292  myGroup = ""_UTsh;
293  if (true)
294  graph->evalOpParm(myGroup, nodeidx, "group", time, 0);
295  myGroupType = 3;
296  if (true)
297  graph->evalOpParm(myGroupType, nodeidx, "grouptype", time, 0);
298  myIgnoreBridges = true;
299  if (true && ( (true&&!(((int64(getGroupType())!=0)))) ) )
300  graph->evalOpParm(myIgnoreBridges, nodeidx, "ignorebridgededges", time, 0);
301  myIgnoreShared = false;
302  if (true && ( (true&&!(((int64(getGroupType())!=0)))) ) )
303  graph->evalOpParm(myIgnoreShared, nodeidx, "ignoresharededges", time, 0);
304  myIgnoreFlatEdges = false;
305  if (true && ( (true&&!(((int64(getGroupType())==1)))) ) )
306  graph->evalOpParm(myIgnoreFlatEdges, nodeidx, "ignoreflatedges", time, 0);
307  myIgnoreFlatPoints = false;
308  if (true && ( (true&&!(((int64(getGroupType())!=1)))) ) )
309  graph->evalOpParm(myIgnoreFlatPoints, nodeidx, "ignoreflatpoints", time, 0);
310  myIgnoreInlinePoints = false;
311  if (true && ( (true&&!(((int64(getGroupType())!=1)))) ) )
312  graph->evalOpParm(myIgnoreInlinePoints, nodeidx, "ignoreinlinepoints", time, 0);
313  myFlatAngle = 2;
314  if (true && ( (true&&!(((getIgnoreFlatEdges()==0)&&(getIgnoreFlatPoints()==0)&&(getIgnoreInlinePoints()==0)))) ) )
315  graph->evalOpParm(myFlatAngle, nodeidx, "flatangle", time, 0);
316  myOffset = 0;
317  if (true)
318  graph->evalOpParm(myOffset, nodeidx, "offset", time, 0);
319  myUseOffsetScale = 0;
320  if (true)
321  graph->evalOpParm(myUseOffsetScale, nodeidx, "useoffsetscale", time, 0);
322  myPointScaleAttr = "pscale"_UTsh;
323  if (true && ( (true&&!(((int64(getUseOffsetScale())==0)))) ) )
324  graph->evalOpParm(myPointScaleAttr, nodeidx, "pointscaleattr", time, 0);
325  mySliding = 0;
326  if (true)
327  graph->evalOpParm(mySliding, nodeidx, "sliding", time, 0);
328  myAsymTol = 0.5;
329  if (true && ( (true&&!(((int64(getSliding())!=0))||((int64(getGroupType())==1)))) ) )
330  graph->evalOpParm(myAsymTol, nodeidx, "asymtol", time, 0);
331  mySlideEdges = ""_UTsh;
332  if (true && ( (true&&!(((int64(getSliding())==1)))) ) )
333  graph->evalOpParm(mySlideEdges, nodeidx, "slideedges", time, 0);
334  myDetectCollisions = true;
335  if (true)
336  graph->evalOpParm(myDetectCollisions, nodeidx, "detectcollisions", time, 0);
337  myRestrictSlides = true;
338  if (true)
339  graph->evalOpParm(myRestrictSlides, nodeidx, "restrictslides", time, 0);
340  myLimit = 1;
341  if (true)
342  graph->evalOpParm(myLimit, nodeidx, "limit", time, 0);
343  myStopAtSlideEnd = true;
344  if (true && ( (true&&!(((int64(getLimit())==0))||((getRestrictSlides()==0)))) ) )
345  graph->evalOpParm(myStopAtSlideEnd, nodeidx, "stopatslideend", time, 0);
346  myStopAtPinches = true;
347  if (true && ( (true&&!(((int64(getLimit())==0))||((getDetectCollisions()==0)))) ) )
348  graph->evalOpParm(myStopAtPinches, nodeidx, "stopatpinches", time, 0);
349  myPinchAngle = 0;
350  if (true && ( (true&&!(((getStopAtPinches()==0)))) ) )
351  graph->evalOpParm(myPinchAngle, nodeidx, "pinchangle", time, 0);
352  myStopAtCollisions = true;
353  if (true && ( (true&&!(((getStopAtPinches()==0)))) ) )
354  graph->evalOpParm(myStopAtCollisions, nodeidx, "stopatcollisions", time, 0);
355  myFilletShape = 4;
356  if (true)
357  graph->evalOpParm(myFilletShape, nodeidx, "filletshape", time, 0);
358  myConvexity = 1.0;
359  if (true && ( (true&&!(((int64(getFilletShape())!=4))||((int64(getGroupType())==1)))) ) )
360  graph->evalOpParm(myConvexity, nodeidx, "convexity", time, 0);
361  myProfileSource = 0;
362  if (true && ( (true&&!(((int64(getGroupType())==1))||((int64(getFilletShape())!=4)))) ) )
363  graph->evalOpParm(myProfileSource, nodeidx, "profilesource", time, 0);
364  myProfileScale = 1;
365  if (true && ( (true&&!(((int64(getGroupType())==1))||((int64(getFilletShape())!=4))||((int64(getProfileSource())==0))||((int64(getGroupType())==1))||((int64(getFilletShape())!=4))||((int64(getProfileSource())==0)))) ) )
366  graph->evalOpParm(myProfileScale, nodeidx, "profilescale", time, 0);
367  myReverseProfile = false;
368  if (true && ( (true&&!(((int64(getGroupType())==1))||((int64(getFilletShape())!=4))||((int64(getProfileSource())==0))||((int64(getGroupType())==1))||((int64(getFilletShape())!=4))||((int64(getProfileSource())==0)))) ) )
369  graph->evalOpParm(myReverseProfile, nodeidx, "reverseprofile", time, 0);
370  mySymmetrizeProfile = true;
371  if (true && ( (true&&!(((int64(getGroupType())==1))||((int64(getFilletShape())!=4))||((int64(getProfileSource())==0))||((int64(getGroupType())==1))||((int64(getFilletShape())!=4))||((int64(getProfileSource())==0)))) ) )
372  graph->evalOpParm(mySymmetrizeProfile, nodeidx, "symmetrizeprofile", time, 0);
373  myProfileDirection = ""_UTsh;
374  if (true && ( (true&&!(((int64(getGroupType())==1))||((int64(getFilletShape())!=4))||((int64(getProfileSource())==0))||((getSymmetrizeProfile()==1)))) ) )
375  graph->evalOpParm(myProfileDirection, nodeidx, "profiledirection", time, 0);
376  myProfileRamp = UT_SharedPtr<UT_Ramp>(0);
377  if (true && ( (true&&!(((int64(getGroupType())==1))||((int64(getFilletShape())!=4))||((int64(getProfileSource())==0))||((int64(getGroupType())==1))||((int64(getFilletShape())!=4))||((int64(getProfileSource())!=1)))) ) )
378  graph->evalOpParm(myProfileRamp, nodeidx, "profileramp", time, 0);
379  myFlatBoost = 30;
380  if (true && ( (true&&!(((int64(getGroupType())==1))||((int64(getFilletShape())!=4))||((int64(getProfileSource())==0)))) ) )
381  graph->evalOpParm(myFlatBoost, nodeidx, "flatboost", time, 0);
382  myUsePointFilletPolys = false;
383  if (true)
384  graph->evalOpParm(myUsePointFilletPolys, nodeidx, "useptfilletgroup", time, 0);
385  myPointFilletPolys = "pointfilletpolys"_UTsh;
386  if (true && ( (true&&!(((getUsePointFilletPolys()==0)))) ) )
387  graph->evalOpParm(myPointFilletPolys, nodeidx, "ptfilletgroup", time, 0);
388  myUsePointFilletEdges = false;
389  if (true)
390  graph->evalOpParm(myUsePointFilletEdges, nodeidx, "useptfilletedges", time, 0);
391  myPointFilletEdges = "pointfilletedges"_UTsh;
392  if (true && ( (true&&!(((getUsePointFilletEdges()==0)))) ) )
393  graph->evalOpParm(myPointFilletEdges, nodeidx, "ptfilletedges", time, 0);
394  myUseEdgeFilletGroup = false;
395  if (true && ( (true&&!(((int64(getGroupType())==1)))) ) )
396  graph->evalOpParm(myUseEdgeFilletGroup, nodeidx, "useedgefilletgroup", time, 0);
397  myEdgeFilletGroup = "edgefilletpolys"_UTsh;
398  if (true && ( (true&&!(((getUseEdgeFilletGroup()==0))||((int64(getGroupType())==1)))) ) )
399  graph->evalOpParm(myEdgeFilletGroup, nodeidx, "edgeprims", time, 0);
400  myUseOffsetEdges = false;
401  if (true)
402  graph->evalOpParm(myUseOffsetEdges, nodeidx, "useoffsetedges", time, 0);
403  myOffsetEdges = "offsetedges"_UTsh;
404  if (true && ( (true&&!(((getUseOffsetEdges()==0)))) ) )
405  graph->evalOpParm(myOffsetEdges, nodeidx, "offsetedges", time, 0);
406  myUseOffsetPoints = false;
407  if (true)
408  graph->evalOpParm(myUseOffsetPoints, nodeidx, "useoffsetpoints", time, 0);
409  myOffsetPoints = "offsetpoints"_UTsh;
410  if (true && ( (true&&!(((getUseOffsetPoints()==0)))) ) )
411  graph->evalOpParm(myOffsetPoints, nodeidx, "offsetpoints", time, 0);
412  myUseMergedPoints = false;
413  if (true)
414  graph->evalOpParm(myUseMergedPoints, nodeidx, "usemergedpoints", time, 0);
415  myMergedPoints = "mergedpoints"_UTsh;
416  if (true && ( (true&&!(((getUseMergedPoints()==0)))) ) )
417  graph->evalOpParm(myMergedPoints, nodeidx, "mergedpoints", time, 0);
418  myProfileSampling = 0;
419  if (true && ( (true&&!(((int64(getGroupType())==1))||((int64(getFilletShape())!=4))||((int64(getProfileSource())==0)))) ) )
420  graph->evalOpParm(myProfileSampling, nodeidx, "profilesampling", time, 0);
421  myDivisions = 1;
422  if (true && ( (true&&!(((int64(getFilletShape())==0))||((int64(getProfileSampling())==2)))) ) )
423  graph->evalOpParm(myDivisions, nodeidx, "divisions", time, 0);
424 
425  }
426 
427 
428  void loadFromOpSubclass(const LoadParms &loadparms) override
429  {
430  buildFromOp(loadparms.graph(), loadparms.nodeIdx(), loadparms.context().getTime(), loadparms.depnode());
431  }
432 
433 
434  void copyFrom(const OP_NodeParms *src) override
435  {
436  *this = *((const SOP_PolyBevel_3_0Parms *)src);
437  }
438 
439  template <typename T>
440  void
441  doGetParmValue(TempIndex idx, TempIndex instance, T &value) const
442  {
443  if (idx.size() < 1)
444  return;
445  UT_ASSERT(idx.size() == instance.size()+1);
446  if (idx.size() != instance.size()+1)
447  return;
448  switch (idx[0])
449  {
450  case 0:
451  coerceValue(value, myGroup);
452  break;
453  case 1:
454  coerceValue(value, myGroupType);
455  break;
456  case 2:
457  coerceValue(value, myIgnoreBridges);
458  break;
459  case 3:
460  coerceValue(value, myIgnoreShared);
461  break;
462  case 4:
463  coerceValue(value, myIgnoreFlatEdges);
464  break;
465  case 5:
466  coerceValue(value, myIgnoreFlatPoints);
467  break;
468  case 6:
469  coerceValue(value, myIgnoreInlinePoints);
470  break;
471  case 7:
472  coerceValue(value, myFlatAngle);
473  break;
474  case 8:
475  coerceValue(value, myOffset);
476  break;
477  case 9:
478  coerceValue(value, myUseOffsetScale);
479  break;
480  case 10:
481  coerceValue(value, myPointScaleAttr);
482  break;
483  case 11:
484  coerceValue(value, mySliding);
485  break;
486  case 12:
487  coerceValue(value, myAsymTol);
488  break;
489  case 13:
490  coerceValue(value, mySlideEdges);
491  break;
492  case 14:
493  coerceValue(value, myDetectCollisions);
494  break;
495  case 15:
496  coerceValue(value, myRestrictSlides);
497  break;
498  case 16:
499  coerceValue(value, myLimit);
500  break;
501  case 17:
502  coerceValue(value, myStopAtSlideEnd);
503  break;
504  case 18:
505  coerceValue(value, myStopAtPinches);
506  break;
507  case 19:
508  coerceValue(value, myPinchAngle);
509  break;
510  case 20:
511  coerceValue(value, myStopAtCollisions);
512  break;
513  case 21:
514  coerceValue(value, myFilletShape);
515  break;
516  case 22:
517  coerceValue(value, myConvexity);
518  break;
519  case 23:
520  coerceValue(value, myProfileSource);
521  break;
522  case 24:
523  coerceValue(value, myProfileScale);
524  break;
525  case 25:
526  coerceValue(value, myReverseProfile);
527  break;
528  case 26:
529  coerceValue(value, mySymmetrizeProfile);
530  break;
531  case 27:
532  coerceValue(value, myProfileDirection);
533  break;
534  case 28:
535  coerceValue(value, myProfileRamp);
536  break;
537  case 29:
538  coerceValue(value, myFlatBoost);
539  break;
540  case 30:
541  coerceValue(value, myUsePointFilletPolys);
542  break;
543  case 31:
544  coerceValue(value, myPointFilletPolys);
545  break;
546  case 32:
547  coerceValue(value, myUsePointFilletEdges);
548  break;
549  case 33:
550  coerceValue(value, myPointFilletEdges);
551  break;
552  case 34:
553  coerceValue(value, myUseEdgeFilletGroup);
554  break;
555  case 35:
556  coerceValue(value, myEdgeFilletGroup);
557  break;
558  case 36:
559  coerceValue(value, myUseOffsetEdges);
560  break;
561  case 37:
562  coerceValue(value, myOffsetEdges);
563  break;
564  case 38:
565  coerceValue(value, myUseOffsetPoints);
566  break;
567  case 39:
568  coerceValue(value, myOffsetPoints);
569  break;
570  case 40:
571  coerceValue(value, myUseMergedPoints);
572  break;
573  case 41:
574  coerceValue(value, myMergedPoints);
575  break;
576  case 42:
577  coerceValue(value, myProfileSampling);
578  break;
579  case 43:
580  coerceValue(value, myDivisions);
581  break;
582 
583  }
584  }
585 
586  bool isParmColorRamp(exint idx) const override
587  {
588  switch (idx)
589  {
590 
591  }
592  return false;
593  }
594 
595  void getNestParmValue(TempIndex idx, TempIndex instance, exint &value) const override
596  { doGetParmValue(idx, instance, value); }
597  void getNestParmValue(TempIndex idx, TempIndex instance, fpreal &value) const override
598  { doGetParmValue(idx, instance, value); }
599  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector2D &value) const override
600  { doGetParmValue(idx, instance, value); }
601  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector3D &value) const override
602  { doGetParmValue(idx, instance, value); }
603  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector4D &value) const override
604  { doGetParmValue(idx, instance, value); }
605  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix2D &value) const override
606  { doGetParmValue(idx, instance, value); }
607  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
608  { doGetParmValue(idx, instance, value); }
609  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix4D &value) const override
610  { doGetParmValue(idx, instance, value); }
611  void getNestParmValue(TempIndex idx, TempIndex instance, UT_StringHolder &value) const override
612  { doGetParmValue(idx, instance, value); }
613  void getNestParmValue(TempIndex idx, TempIndex instance, UT_SharedPtr<UT_Ramp> &value) const override
614  { doGetParmValue(idx, instance, value); }
615  void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
616  { doGetParmValue(idx, instance, value); }
617 
618  template <typename T>
619  void
620  doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
621  {
622  if (idx.size() < 1)
623  return;
624  UT_ASSERT(idx.size() == instance.size()+1);
625  if (idx.size() != instance.size()+1)
626  return;
627  switch (idx[0])
628  {
629  case 0:
630  coerceValue(myGroup, ( ( value ) ));
631  break;
632  case 1:
633  coerceValue(myGroupType, clampMinValue(0, clampMaxValue(3, value ) ));
634  break;
635  case 2:
636  coerceValue(myIgnoreBridges, ( ( value ) ));
637  break;
638  case 3:
639  coerceValue(myIgnoreShared, ( ( value ) ));
640  break;
641  case 4:
642  coerceValue(myIgnoreFlatEdges, ( ( value ) ));
643  break;
644  case 5:
645  coerceValue(myIgnoreFlatPoints, ( ( value ) ));
646  break;
647  case 6:
648  coerceValue(myIgnoreInlinePoints, ( ( value ) ));
649  break;
650  case 7:
651  coerceValue(myFlatAngle, clampMinValue(0, clampMaxValue(180, value ) ));
652  break;
653  case 8:
654  coerceValue(myOffset, clampMinValue(0, ( value ) ));
655  break;
656  case 9:
657  coerceValue(myUseOffsetScale, clampMinValue(0, clampMaxValue(1, value ) ));
658  break;
659  case 10:
660  coerceValue(myPointScaleAttr, ( ( value ) ));
661  break;
662  case 11:
663  coerceValue(mySliding, clampMinValue(0, clampMaxValue(2, value ) ));
664  break;
665  case 12:
666  coerceValue(myAsymTol, clampMinValue(0, clampMaxValue(1, value ) ));
667  break;
668  case 13:
669  coerceValue(mySlideEdges, ( ( value ) ));
670  break;
671  case 14:
672  coerceValue(myDetectCollisions, ( ( value ) ));
673  break;
674  case 15:
675  coerceValue(myRestrictSlides, ( ( value ) ));
676  break;
677  case 16:
678  coerceValue(myLimit, clampMinValue(0, clampMaxValue(2, value ) ));
679  break;
680  case 17:
681  coerceValue(myStopAtSlideEnd, ( ( value ) ));
682  break;
683  case 18:
684  coerceValue(myStopAtPinches, ( ( value ) ));
685  break;
686  case 19:
687  coerceValue(myPinchAngle, clampMinValue(0, ( value ) ));
688  break;
689  case 20:
690  coerceValue(myStopAtCollisions, ( ( value ) ));
691  break;
692  case 21:
693  coerceValue(myFilletShape, clampMinValue(0, clampMaxValue(4, value ) ));
694  break;
695  case 22:
696  coerceValue(myConvexity, clampMinValue(-1, clampMaxValue(1, value ) ));
697  break;
698  case 23:
699  coerceValue(myProfileSource, clampMinValue(0, clampMaxValue(2, value ) ));
700  break;
701  case 24:
702  coerceValue(myProfileScale, ( ( value ) ));
703  break;
704  case 25:
705  coerceValue(myReverseProfile, ( ( value ) ));
706  break;
707  case 26:
708  coerceValue(mySymmetrizeProfile, ( ( value ) ));
709  break;
710  case 27:
711  coerceValue(myProfileDirection, ( ( value ) ));
712  break;
713  case 28:
714  coerceValue(myProfileRamp, clampMinValue(1, ( value ) ));
715  break;
716  case 29:
717  coerceValue(myFlatBoost, clampMinValue(0, clampMaxValue(90, value ) ));
718  break;
719  case 30:
720  coerceValue(myUsePointFilletPolys, ( ( value ) ));
721  break;
722  case 31:
723  coerceValue(myPointFilletPolys, ( ( value ) ));
724  break;
725  case 32:
726  coerceValue(myUsePointFilletEdges, ( ( value ) ));
727  break;
728  case 33:
729  coerceValue(myPointFilletEdges, ( ( value ) ));
730  break;
731  case 34:
732  coerceValue(myUseEdgeFilletGroup, ( ( value ) ));
733  break;
734  case 35:
735  coerceValue(myEdgeFilletGroup, ( ( value ) ));
736  break;
737  case 36:
738  coerceValue(myUseOffsetEdges, ( ( value ) ));
739  break;
740  case 37:
741  coerceValue(myOffsetEdges, ( ( value ) ));
742  break;
743  case 38:
744  coerceValue(myUseOffsetPoints, ( ( value ) ));
745  break;
746  case 39:
747  coerceValue(myOffsetPoints, ( ( value ) ));
748  break;
749  case 40:
750  coerceValue(myUseMergedPoints, ( ( value ) ));
751  break;
752  case 41:
753  coerceValue(myMergedPoints, ( ( value ) ));
754  break;
755  case 42:
756  coerceValue(myProfileSampling, clampMinValue(0, clampMaxValue(2, value ) ));
757  break;
758  case 43:
759  coerceValue(myDivisions, clampMinValue(1, ( value ) ));
760  break;
761 
762  }
763  }
764 
765  void setNestParmValue(TempIndex idx, TempIndex instance, const exint &value) override
766  { doSetParmValue(idx, instance, value); }
767  void setNestParmValue(TempIndex idx, TempIndex instance, const fpreal &value) override
768  { doSetParmValue(idx, instance, value); }
769  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector2D &value) override
770  { doSetParmValue(idx, instance, value); }
771  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector3D &value) override
772  { doSetParmValue(idx, instance, value); }
773  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector4D &value) override
774  { doSetParmValue(idx, instance, value); }
775  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix2D &value) override
776  { doSetParmValue(idx, instance, value); }
777  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix3D &value) override
778  { doSetParmValue(idx, instance, value); }
779  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix4D &value) override
780  { doSetParmValue(idx, instance, value); }
781  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_StringHolder &value) override
782  { doSetParmValue(idx, instance, value); }
783  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_SharedPtr<UT_Ramp> &value) override
784  { doSetParmValue(idx, instance, value); }
785  void setNestParmValue(TempIndex idx, TempIndex instance, const PRM_DataItemHandle &value) override
786  { doSetParmValue(idx, instance, value); }
787 
788  exint getNestNumParms(TempIndex idx) const override
789  {
790  if (idx.size() == 0)
791  return 44;
792  switch (idx[0])
793  {
794 
795  }
796  // Invalid
797  return 0;
798  }
799 
800  const char *getNestParmName(TempIndex fieldnum) const override
801  {
802  if (fieldnum.size() < 1)
803  return 0;
804  switch (fieldnum[0])
805  {
806  case 0:
807  return "group";
808  case 1:
809  return "grouptype";
810  case 2:
811  return "ignorebridgededges";
812  case 3:
813  return "ignoresharededges";
814  case 4:
815  return "ignoreflatedges";
816  case 5:
817  return "ignoreflatpoints";
818  case 6:
819  return "ignoreinlinepoints";
820  case 7:
821  return "flatangle";
822  case 8:
823  return "offset";
824  case 9:
825  return "useoffsetscale";
826  case 10:
827  return "pointscaleattr";
828  case 11:
829  return "sliding";
830  case 12:
831  return "asymtol";
832  case 13:
833  return "slideedges";
834  case 14:
835  return "detectcollisions";
836  case 15:
837  return "restrictslides";
838  case 16:
839  return "limit";
840  case 17:
841  return "stopatslideend";
842  case 18:
843  return "stopatpinches";
844  case 19:
845  return "pinchangle";
846  case 20:
847  return "stopatcollisions";
848  case 21:
849  return "filletshape";
850  case 22:
851  return "convexity";
852  case 23:
853  return "profilesource";
854  case 24:
855  return "profilescale";
856  case 25:
857  return "reverseprofile";
858  case 26:
859  return "symmetrizeprofile";
860  case 27:
861  return "profiledirection";
862  case 28:
863  return "profileramp";
864  case 29:
865  return "flatboost";
866  case 30:
867  return "useptfilletgroup";
868  case 31:
869  return "ptfilletgroup";
870  case 32:
871  return "useptfilletedges";
872  case 33:
873  return "ptfilletedges";
874  case 34:
875  return "useedgefilletgroup";
876  case 35:
877  return "edgeprims";
878  case 36:
879  return "useoffsetedges";
880  case 37:
881  return "offsetedges";
882  case 38:
883  return "useoffsetpoints";
884  case 39:
885  return "offsetpoints";
886  case 40:
887  return "usemergedpoints";
888  case 41:
889  return "mergedpoints";
890  case 42:
891  return "profilesampling";
892  case 43:
893  return "divisions";
894 
895  }
896  return 0;
897  }
898 
899  ParmType getNestParmType(TempIndex fieldnum) const override
900  {
901  if (fieldnum.size() < 1)
902  return PARM_UNSUPPORTED;
903  switch (fieldnum[0])
904  {
905  case 0:
906  return PARM_STRING;
907  case 1:
908  return PARM_INTEGER;
909  case 2:
910  return PARM_INTEGER;
911  case 3:
912  return PARM_INTEGER;
913  case 4:
914  return PARM_INTEGER;
915  case 5:
916  return PARM_INTEGER;
917  case 6:
918  return PARM_INTEGER;
919  case 7:
920  return PARM_FLOAT;
921  case 8:
922  return PARM_FLOAT;
923  case 9:
924  return PARM_INTEGER;
925  case 10:
926  return PARM_STRING;
927  case 11:
928  return PARM_INTEGER;
929  case 12:
930  return PARM_FLOAT;
931  case 13:
932  return PARM_STRING;
933  case 14:
934  return PARM_INTEGER;
935  case 15:
936  return PARM_INTEGER;
937  case 16:
938  return PARM_INTEGER;
939  case 17:
940  return PARM_INTEGER;
941  case 18:
942  return PARM_INTEGER;
943  case 19:
944  return PARM_FLOAT;
945  case 20:
946  return PARM_INTEGER;
947  case 21:
948  return PARM_INTEGER;
949  case 22:
950  return PARM_FLOAT;
951  case 23:
952  return PARM_INTEGER;
953  case 24:
954  return PARM_FLOAT;
955  case 25:
956  return PARM_INTEGER;
957  case 26:
958  return PARM_INTEGER;
959  case 27:
960  return PARM_STRING;
961  case 28:
962  return PARM_RAMP;
963  case 29:
964  return PARM_FLOAT;
965  case 30:
966  return PARM_INTEGER;
967  case 31:
968  return PARM_STRING;
969  case 32:
970  return PARM_INTEGER;
971  case 33:
972  return PARM_STRING;
973  case 34:
974  return PARM_INTEGER;
975  case 35:
976  return PARM_STRING;
977  case 36:
978  return PARM_INTEGER;
979  case 37:
980  return PARM_STRING;
981  case 38:
982  return PARM_INTEGER;
983  case 39:
984  return PARM_STRING;
985  case 40:
986  return PARM_INTEGER;
987  case 41:
988  return PARM_STRING;
989  case 42:
990  return PARM_INTEGER;
991  case 43:
992  return PARM_INTEGER;
993 
994  }
995  return PARM_UNSUPPORTED;
996  }
997 
998  // Boiler plate to load individual types.
999  static void loadData(UT_IStream &is, int64 &v)
1000  { is.bread(&v, 1); }
1001  static void loadData(UT_IStream &is, bool &v)
1002  { int64 iv; is.bread(&iv, 1); v = iv; }
1003  static void loadData(UT_IStream &is, fpreal64 &v)
1004  { is.bread<fpreal64>(&v, 1); }
1005  static void loadData(UT_IStream &is, UT_Vector2D &v)
1006  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1); }
1007  static void loadData(UT_IStream &is, UT_Vector3D &v)
1008  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
1009  is.bread<fpreal64>(&v.z(), 1); }
1010  static void loadData(UT_IStream &is, UT_Vector4D &v)
1011  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
1012  is.bread<fpreal64>(&v.z(), 1); is.bread<fpreal64>(&v.w(), 1); }
1013  static void loadData(UT_IStream &is, UT_Matrix2D &v)
1014  { for (int r = 0; r < 2; r++) for (int c = 0; c < 2; c++) is.bread<fpreal64>(&v(r, c), 1); }
1015  static void loadData(UT_IStream &is, UT_Matrix3D &v)
1016  { for (int r = 0; r < 3; r++) for (int c = 0; c < 3; c++) is.bread<fpreal64>(&v(r, c), 1); }
1017  static void loadData(UT_IStream &is, UT_Matrix4D &v)
1018  { for (int r = 0; r < 4; r++) for (int c = 0; c < 4; c++) is.bread<fpreal64>(&v(r, c), 1); }
1019  static void loadData(UT_IStream &is, UT_Vector2I &v)
1020  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1); }
1021  static void loadData(UT_IStream &is, UT_Vector3I &v)
1022  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
1023  is.bread<int64>(&v.z(), 1); }
1024  static void loadData(UT_IStream &is, UT_Vector4I &v)
1025  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
1026  is.bread<int64>(&v.z(), 1); is.bread<int64>(&v.w(), 1); }
1028  { is.bread(v); }
1030  { UT_StringHolder rampdata;
1031  loadData(is, rampdata);
1032  if (rampdata.isstring())
1033  {
1034  v.reset(new UT_Ramp());
1035  UT_IStream istr((const char *) rampdata, rampdata.length(), UT_ISTREAM_ASCII);
1036  v->load(istr);
1037  }
1038  else v.reset();
1039  }
1042  loadData(is, data);
1043  if (data.isstring())
1044  {
1045  // Find the data type.
1046  const char *colon = UT_StringWrap(data).findChar(':');
1047  if (colon)
1048  {
1049  int typelen = colon - data.buffer();
1051  type.strncpy(data.buffer(), typelen);
1052  UT_IStream istr(((const char *) data) + typelen + 1, data.length() - (typelen + 1), UT_ISTREAM_BINARY);
1053 
1054  v = PRM_DataFactory::parseBinary(type.buffer(), istr);
1055  }
1056  }
1057  else v.reset();
1058  }
1059 
1060  static void saveData(std::ostream &os, int64 v)
1061  { UTwrite(os, &v); }
1062  static void saveData(std::ostream &os, bool v)
1063  { int64 iv = v; UTwrite(os, &iv); }
1064  static void saveData(std::ostream &os, fpreal64 v)
1065  { UTwrite<fpreal64>(os, &v); }
1066  static void saveData(std::ostream &os, UT_Vector2D v)
1067  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y()); }
1068  static void saveData(std::ostream &os, UT_Vector3D v)
1069  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
1070  UTwrite<fpreal64>(os, &v.z()); }
1071  static void saveData(std::ostream &os, UT_Vector4D v)
1072  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
1073  UTwrite<fpreal64>(os, &v.z()); UTwrite<fpreal64>(os, &v.w()); }
1074  static void saveData(std::ostream &os, UT_Matrix2D v)
1076  static void saveData(std::ostream &os, UT_Matrix3D v)
1078  static void saveData(std::ostream &os, UT_Matrix4D v)
1080  static void saveData(std::ostream &os, UT_StringHolder s)
1081  { UT_StringWrap(s).saveBinary(os); }
1082  static void saveData(std::ostream &os, UT_SharedPtr<UT_Ramp> s)
1084  UT_OStringStream ostr;
1085  if (s) s->save(ostr);
1086  result = ostr.str();
1087  saveData(os, result);
1088  }
1089  static void saveData(std::ostream &os, PRM_DataItemHandle s)
1091  UT_OStringStream ostr;
1092  if (s)
1093  {
1094  ostr << s->getDataTypeToken();
1095  ostr << ":";
1096  s->saveBinary(ostr);
1097  }
1098  result = ostr.str();
1099  saveData(os, result);
1100  }
1101 
1102 
1103  void save(std::ostream &os) const
1104  {
1105  int32 v = version();
1106  UTwrite(os, &v);
1107  saveData(os, myGroup);
1108  saveData(os, myGroupType);
1109  saveData(os, myIgnoreBridges);
1110  saveData(os, myIgnoreShared);
1111  saveData(os, myIgnoreFlatEdges);
1112  saveData(os, myIgnoreFlatPoints);
1113  saveData(os, myIgnoreInlinePoints);
1114  saveData(os, myFlatAngle);
1115  saveData(os, myOffset);
1116  saveData(os, myUseOffsetScale);
1117  saveData(os, myPointScaleAttr);
1118  saveData(os, mySliding);
1119  saveData(os, myAsymTol);
1120  saveData(os, mySlideEdges);
1121  saveData(os, myDetectCollisions);
1122  saveData(os, myRestrictSlides);
1123  saveData(os, myLimit);
1124  saveData(os, myStopAtSlideEnd);
1125  saveData(os, myStopAtPinches);
1126  saveData(os, myPinchAngle);
1127  saveData(os, myStopAtCollisions);
1128  saveData(os, myFilletShape);
1129  saveData(os, myConvexity);
1130  saveData(os, myProfileSource);
1131  saveData(os, myProfileScale);
1132  saveData(os, myReverseProfile);
1133  saveData(os, mySymmetrizeProfile);
1134  saveData(os, myProfileDirection);
1135  saveData(os, myProfileRamp);
1136  saveData(os, myFlatBoost);
1137  saveData(os, myUsePointFilletPolys);
1138  saveData(os, myPointFilletPolys);
1139  saveData(os, myUsePointFilletEdges);
1140  saveData(os, myPointFilletEdges);
1141  saveData(os, myUseEdgeFilletGroup);
1142  saveData(os, myEdgeFilletGroup);
1143  saveData(os, myUseOffsetEdges);
1144  saveData(os, myOffsetEdges);
1145  saveData(os, myUseOffsetPoints);
1146  saveData(os, myOffsetPoints);
1147  saveData(os, myUseMergedPoints);
1148  saveData(os, myMergedPoints);
1149  saveData(os, myProfileSampling);
1150  saveData(os, myDivisions);
1151 
1152  }
1153 
1154  bool load(UT_IStream &is)
1155  {
1156  int32 v;
1157  is.bread(&v, 1);
1158  if (version() != v)
1159  {
1160  // Fail incompatible versions
1161  return false;
1162  }
1163  loadData(is, myGroup);
1164  loadData(is, myGroupType);
1165  loadData(is, myIgnoreBridges);
1166  loadData(is, myIgnoreShared);
1167  loadData(is, myIgnoreFlatEdges);
1168  loadData(is, myIgnoreFlatPoints);
1169  loadData(is, myIgnoreInlinePoints);
1170  loadData(is, myFlatAngle);
1171  loadData(is, myOffset);
1172  loadData(is, myUseOffsetScale);
1173  loadData(is, myPointScaleAttr);
1174  loadData(is, mySliding);
1175  loadData(is, myAsymTol);
1176  loadData(is, mySlideEdges);
1177  loadData(is, myDetectCollisions);
1178  loadData(is, myRestrictSlides);
1179  loadData(is, myLimit);
1180  loadData(is, myStopAtSlideEnd);
1181  loadData(is, myStopAtPinches);
1182  loadData(is, myPinchAngle);
1183  loadData(is, myStopAtCollisions);
1184  loadData(is, myFilletShape);
1185  loadData(is, myConvexity);
1186  loadData(is, myProfileSource);
1187  loadData(is, myProfileScale);
1188  loadData(is, myReverseProfile);
1189  loadData(is, mySymmetrizeProfile);
1190  loadData(is, myProfileDirection);
1191  loadData(is, myProfileRamp);
1192  loadData(is, myFlatBoost);
1193  loadData(is, myUsePointFilletPolys);
1194  loadData(is, myPointFilletPolys);
1195  loadData(is, myUsePointFilletEdges);
1196  loadData(is, myPointFilletEdges);
1197  loadData(is, myUseEdgeFilletGroup);
1198  loadData(is, myEdgeFilletGroup);
1199  loadData(is, myUseOffsetEdges);
1200  loadData(is, myOffsetEdges);
1201  loadData(is, myUseOffsetPoints);
1202  loadData(is, myOffsetPoints);
1203  loadData(is, myUseMergedPoints);
1204  loadData(is, myMergedPoints);
1205  loadData(is, myProfileSampling);
1206  loadData(is, myDivisions);
1207 
1208  return true;
1209  }
1210 
1211  const UT_StringHolder & getGroup() const { return myGroup; }
1212  void setGroup(const UT_StringHolder & val) { myGroup = val; }
1214  {
1215  SOP_Node *thissop = cookparms.getNode();
1216  if (!thissop) return getGroup();
1218  OP_Utils::evalOpParm(result, thissop, "group", cookparms.getCookTime(), 0);
1219  return result;
1220  }
1221  GroupType getGroupType() const { return GroupType(myGroupType); }
1222  void setGroupType(GroupType val) { myGroupType = int64(val); }
1224  {
1225  SOP_Node *thissop = cookparms.getNode();
1226  if (!thissop) return getGroupType();
1227  int64 result;
1228  OP_Utils::evalOpParm(result, thissop, "grouptype", cookparms.getCookTime(), 0);
1229  return GroupType(result);
1230  }
1231  bool getIgnoreBridges() const { return myIgnoreBridges; }
1232  void setIgnoreBridges(bool val) { myIgnoreBridges = val; }
1233  bool opIgnoreBridges(const SOP_NodeVerb::CookParms &cookparms) const
1234  {
1235  SOP_Node *thissop = cookparms.getNode();
1236  if (!thissop) return getIgnoreBridges();
1237  bool result;
1238  OP_Utils::evalOpParm(result, thissop, "ignorebridgededges", cookparms.getCookTime(), 0);
1239  return result;
1240  }
1241  bool getIgnoreShared() const { return myIgnoreShared; }
1242  void setIgnoreShared(bool val) { myIgnoreShared = val; }
1243  bool opIgnoreShared(const SOP_NodeVerb::CookParms &cookparms) const
1244  {
1245  SOP_Node *thissop = cookparms.getNode();
1246  if (!thissop) return getIgnoreShared();
1247  bool result;
1248  OP_Utils::evalOpParm(result, thissop, "ignoresharededges", cookparms.getCookTime(), 0);
1249  return result;
1250  }
1251  bool getIgnoreFlatEdges() const { return myIgnoreFlatEdges; }
1252  void setIgnoreFlatEdges(bool val) { myIgnoreFlatEdges = val; }
1253  bool opIgnoreFlatEdges(const SOP_NodeVerb::CookParms &cookparms) const
1254  {
1255  SOP_Node *thissop = cookparms.getNode();
1256  if (!thissop) return getIgnoreFlatEdges();
1257  bool result;
1258  OP_Utils::evalOpParm(result, thissop, "ignoreflatedges", cookparms.getCookTime(), 0);
1259  return result;
1260  }
1261  bool getIgnoreFlatPoints() const { return myIgnoreFlatPoints; }
1262  void setIgnoreFlatPoints(bool val) { myIgnoreFlatPoints = val; }
1263  bool opIgnoreFlatPoints(const SOP_NodeVerb::CookParms &cookparms) const
1264  {
1265  SOP_Node *thissop = cookparms.getNode();
1266  if (!thissop) return getIgnoreFlatPoints();
1267  bool result;
1268  OP_Utils::evalOpParm(result, thissop, "ignoreflatpoints", cookparms.getCookTime(), 0);
1269  return result;
1270  }
1271  bool getIgnoreInlinePoints() const { return myIgnoreInlinePoints; }
1272  void setIgnoreInlinePoints(bool val) { myIgnoreInlinePoints = val; }
1273  bool opIgnoreInlinePoints(const SOP_NodeVerb::CookParms &cookparms) const
1274  {
1275  SOP_Node *thissop = cookparms.getNode();
1276  if (!thissop) return getIgnoreInlinePoints();
1277  bool result;
1278  OP_Utils::evalOpParm(result, thissop, "ignoreinlinepoints", cookparms.getCookTime(), 0);
1279  return result;
1280  }
1281  fpreal64 getFlatAngle() const { return myFlatAngle; }
1282  void setFlatAngle(fpreal64 val) { myFlatAngle = val; }
1284  {
1285  SOP_Node *thissop = cookparms.getNode();
1286  if (!thissop) return getFlatAngle();
1287  fpreal64 result;
1288  OP_Utils::evalOpParm(result, thissop, "flatangle", cookparms.getCookTime(), 0);
1289  return result;
1290  }
1291  fpreal64 getOffset() const { return myOffset; }
1292  void setOffset(fpreal64 val) { myOffset = val; }
1294  {
1295  SOP_Node *thissop = cookparms.getNode();
1296  if (!thissop) return getOffset();
1297  fpreal64 result;
1298  OP_Utils::evalOpParm(result, thissop, "offset", cookparms.getCookTime(), 0);
1299  return result;
1300  }
1301  UseOffsetScale getUseOffsetScale() const { return UseOffsetScale(myUseOffsetScale); }
1302  void setUseOffsetScale(UseOffsetScale val) { myUseOffsetScale = int64(val); }
1304  {
1305  SOP_Node *thissop = cookparms.getNode();
1306  if (!thissop) return getUseOffsetScale();
1307  int64 result;
1308  OP_Utils::evalOpParm(result, thissop, "useoffsetscale", cookparms.getCookTime(), 0);
1309  return UseOffsetScale(result);
1310  }
1311  const UT_StringHolder & getPointScaleAttr() const { return myPointScaleAttr; }
1312  void setPointScaleAttr(const UT_StringHolder & val) { myPointScaleAttr = val; }
1314  {
1315  SOP_Node *thissop = cookparms.getNode();
1316  if (!thissop) return getPointScaleAttr();
1318  OP_Utils::evalOpParm(result, thissop, "pointscaleattr", cookparms.getCookTime(), 0);
1319  return result;
1320  }
1321  Sliding getSliding() const { return Sliding(mySliding); }
1322  void setSliding(Sliding val) { mySliding = int64(val); }
1324  {
1325  SOP_Node *thissop = cookparms.getNode();
1326  if (!thissop) return getSliding();
1327  int64 result;
1328  OP_Utils::evalOpParm(result, thissop, "sliding", cookparms.getCookTime(), 0);
1329  return Sliding(result);
1330  }
1331  fpreal64 getAsymTol() const { return myAsymTol; }
1332  void setAsymTol(fpreal64 val) { myAsymTol = val; }
1334  {
1335  SOP_Node *thissop = cookparms.getNode();
1336  if (!thissop) return getAsymTol();
1337  fpreal64 result;
1338  OP_Utils::evalOpParm(result, thissop, "asymtol", cookparms.getCookTime(), 0);
1339  return result;
1340  }
1341  const UT_StringHolder & getSlideEdges() const { return mySlideEdges; }
1342  void setSlideEdges(const UT_StringHolder & val) { mySlideEdges = val; }
1344  {
1345  SOP_Node *thissop = cookparms.getNode();
1346  if (!thissop) return getSlideEdges();
1348  OP_Utils::evalOpParm(result, thissop, "slideedges", cookparms.getCookTime(), 0);
1349  return result;
1350  }
1351  bool getDetectCollisions() const { return myDetectCollisions; }
1352  void setDetectCollisions(bool val) { myDetectCollisions = val; }
1353  bool opDetectCollisions(const SOP_NodeVerb::CookParms &cookparms) const
1354  {
1355  SOP_Node *thissop = cookparms.getNode();
1356  if (!thissop) return getDetectCollisions();
1357  bool result;
1358  OP_Utils::evalOpParm(result, thissop, "detectcollisions", cookparms.getCookTime(), 0);
1359  return result;
1360  }
1361  bool getRestrictSlides() const { return myRestrictSlides; }
1362  void setRestrictSlides(bool val) { myRestrictSlides = val; }
1363  bool opRestrictSlides(const SOP_NodeVerb::CookParms &cookparms) const
1364  {
1365  SOP_Node *thissop = cookparms.getNode();
1366  if (!thissop) return getRestrictSlides();
1367  bool result;
1368  OP_Utils::evalOpParm(result, thissop, "restrictslides", cookparms.getCookTime(), 0);
1369  return result;
1370  }
1371  Limit getLimit() const { return Limit(myLimit); }
1372  void setLimit(Limit val) { myLimit = int64(val); }
1373  Limit opLimit(const SOP_NodeVerb::CookParms &cookparms) const
1374  {
1375  SOP_Node *thissop = cookparms.getNode();
1376  if (!thissop) return getLimit();
1377  int64 result;
1378  OP_Utils::evalOpParm(result, thissop, "limit", cookparms.getCookTime(), 0);
1379  return Limit(result);
1380  }
1381  bool getStopAtSlideEnd() const { return myStopAtSlideEnd; }
1382  void setStopAtSlideEnd(bool val) { myStopAtSlideEnd = val; }
1383  bool opStopAtSlideEnd(const SOP_NodeVerb::CookParms &cookparms) const
1384  {
1385  SOP_Node *thissop = cookparms.getNode();
1386  if (!thissop) return getStopAtSlideEnd();
1387  bool result;
1388  OP_Utils::evalOpParm(result, thissop, "stopatslideend", cookparms.getCookTime(), 0);
1389  return result;
1390  }
1391  bool getStopAtPinches() const { return myStopAtPinches; }
1392  void setStopAtPinches(bool val) { myStopAtPinches = val; }
1393  bool opStopAtPinches(const SOP_NodeVerb::CookParms &cookparms) const
1394  {
1395  SOP_Node *thissop = cookparms.getNode();
1396  if (!thissop) return getStopAtPinches();
1397  bool result;
1398  OP_Utils::evalOpParm(result, thissop, "stopatpinches", cookparms.getCookTime(), 0);
1399  return result;
1400  }
1401  fpreal64 getPinchAngle() const { return myPinchAngle; }
1402  void setPinchAngle(fpreal64 val) { myPinchAngle = val; }
1404  {
1405  SOP_Node *thissop = cookparms.getNode();
1406  if (!thissop) return getPinchAngle();
1407  fpreal64 result;
1408  OP_Utils::evalOpParm(result, thissop, "pinchangle", cookparms.getCookTime(), 0);
1409  return result;
1410  }
1411  bool getStopAtCollisions() const { return myStopAtCollisions; }
1412  void setStopAtCollisions(bool val) { myStopAtCollisions = val; }
1413  bool opStopAtCollisions(const SOP_NodeVerb::CookParms &cookparms) const
1414  {
1415  SOP_Node *thissop = cookparms.getNode();
1416  if (!thissop) return getStopAtCollisions();
1417  bool result;
1418  OP_Utils::evalOpParm(result, thissop, "stopatcollisions", cookparms.getCookTime(), 0);
1419  return result;
1420  }
1421  FilletShape getFilletShape() const { return FilletShape(myFilletShape); }
1422  void setFilletShape(FilletShape val) { myFilletShape = int64(val); }
1424  {
1425  SOP_Node *thissop = cookparms.getNode();
1426  if (!thissop) return getFilletShape();
1427  int64 result;
1428  OP_Utils::evalOpParm(result, thissop, "filletshape", cookparms.getCookTime(), 0);
1429  return FilletShape(result);
1430  }
1431  fpreal64 getConvexity() const { return myConvexity; }
1432  void setConvexity(fpreal64 val) { myConvexity = val; }
1434  {
1435  SOP_Node *thissop = cookparms.getNode();
1436  if (!thissop) return getConvexity();
1437  fpreal64 result;
1438  OP_Utils::evalOpParm(result, thissop, "convexity", cookparms.getCookTime(), 0);
1439  return result;
1440  }
1441  ProfileSource getProfileSource() const { return ProfileSource(myProfileSource); }
1442  void setProfileSource(ProfileSource val) { myProfileSource = int64(val); }
1444  {
1445  SOP_Node *thissop = cookparms.getNode();
1446  if (!thissop) return getProfileSource();
1447  int64 result;
1448  OP_Utils::evalOpParm(result, thissop, "profilesource", cookparms.getCookTime(), 0);
1449  return ProfileSource(result);
1450  }
1451  fpreal64 getProfileScale() const { return myProfileScale; }
1452  void setProfileScale(fpreal64 val) { myProfileScale = val; }
1454  {
1455  SOP_Node *thissop = cookparms.getNode();
1456  if (!thissop) return getProfileScale();
1457  fpreal64 result;
1458  OP_Utils::evalOpParm(result, thissop, "profilescale", cookparms.getCookTime(), 0);
1459  return result;
1460  }
1461  bool getReverseProfile() const { return myReverseProfile; }
1462  void setReverseProfile(bool val) { myReverseProfile = val; }
1463  bool opReverseProfile(const SOP_NodeVerb::CookParms &cookparms) const
1464  {
1465  SOP_Node *thissop = cookparms.getNode();
1466  if (!thissop) return getReverseProfile();
1467  bool result;
1468  OP_Utils::evalOpParm(result, thissop, "reverseprofile", cookparms.getCookTime(), 0);
1469  return result;
1470  }
1471  bool getSymmetrizeProfile() const { return mySymmetrizeProfile; }
1472  void setSymmetrizeProfile(bool val) { mySymmetrizeProfile = val; }
1473  bool opSymmetrizeProfile(const SOP_NodeVerb::CookParms &cookparms) const
1474  {
1475  SOP_Node *thissop = cookparms.getNode();
1476  if (!thissop) return getSymmetrizeProfile();
1477  bool result;
1478  OP_Utils::evalOpParm(result, thissop, "symmetrizeprofile", cookparms.getCookTime(), 0);
1479  return result;
1480  }
1481  const UT_StringHolder & getProfileDirection() const { return myProfileDirection; }
1482  void setProfileDirection(const UT_StringHolder & val) { myProfileDirection = val; }
1484  {
1485  SOP_Node *thissop = cookparms.getNode();
1486  if (!thissop) return getProfileDirection();
1488  OP_Utils::evalOpParm(result, thissop, "profiledirection", cookparms.getCookTime(), 0);
1489  return result;
1490  }
1491  UT_SharedPtr<UT_Ramp> getProfileRamp() const { return myProfileRamp; }
1492  void setProfileRamp(UT_SharedPtr<UT_Ramp> val) { myProfileRamp = val; }
1494  {
1495  SOP_Node *thissop = cookparms.getNode();
1496  if (!thissop) return getProfileRamp();
1498  OP_Utils::evalOpParm(result, thissop, "profileramp", cookparms.getCookTime(), 0);
1499  return result;
1500  }
1501  fpreal64 getFlatBoost() const { return myFlatBoost; }
1502  void setFlatBoost(fpreal64 val) { myFlatBoost = val; }
1504  {
1505  SOP_Node *thissop = cookparms.getNode();
1506  if (!thissop) return getFlatBoost();
1507  fpreal64 result;
1508  OP_Utils::evalOpParm(result, thissop, "flatboost", cookparms.getCookTime(), 0);
1509  return result;
1510  }
1511  bool getUsePointFilletPolys() const { return myUsePointFilletPolys; }
1512  void setUsePointFilletPolys(bool val) { myUsePointFilletPolys = val; }
1513  bool opUsePointFilletPolys(const SOP_NodeVerb::CookParms &cookparms) const
1514  {
1515  SOP_Node *thissop = cookparms.getNode();
1516  if (!thissop) return getUsePointFilletPolys();
1517  bool result;
1518  OP_Utils::evalOpParm(result, thissop, "useptfilletgroup", cookparms.getCookTime(), 0);
1519  return result;
1520  }
1521  const UT_StringHolder & getPointFilletPolys() const { return myPointFilletPolys; }
1522  void setPointFilletPolys(const UT_StringHolder & val) { myPointFilletPolys = val; }
1524  {
1525  SOP_Node *thissop = cookparms.getNode();
1526  if (!thissop) return getPointFilletPolys();
1528  OP_Utils::evalOpParm(result, thissop, "ptfilletgroup", cookparms.getCookTime(), 0);
1529  return result;
1530  }
1531  bool getUsePointFilletEdges() const { return myUsePointFilletEdges; }
1532  void setUsePointFilletEdges(bool val) { myUsePointFilletEdges = val; }
1533  bool opUsePointFilletEdges(const SOP_NodeVerb::CookParms &cookparms) const
1534  {
1535  SOP_Node *thissop = cookparms.getNode();
1536  if (!thissop) return getUsePointFilletEdges();
1537  bool result;
1538  OP_Utils::evalOpParm(result, thissop, "useptfilletedges", cookparms.getCookTime(), 0);
1539  return result;
1540  }
1541  const UT_StringHolder & getPointFilletEdges() const { return myPointFilletEdges; }
1542  void setPointFilletEdges(const UT_StringHolder & val) { myPointFilletEdges = val; }
1544  {
1545  SOP_Node *thissop = cookparms.getNode();
1546  if (!thissop) return getPointFilletEdges();
1548  OP_Utils::evalOpParm(result, thissop, "ptfilletedges", cookparms.getCookTime(), 0);
1549  return result;
1550  }
1551  bool getUseEdgeFilletGroup() const { return myUseEdgeFilletGroup; }
1552  void setUseEdgeFilletGroup(bool val) { myUseEdgeFilletGroup = val; }
1553  bool opUseEdgeFilletGroup(const SOP_NodeVerb::CookParms &cookparms) const
1554  {
1555  SOP_Node *thissop = cookparms.getNode();
1556  if (!thissop) return getUseEdgeFilletGroup();
1557  bool result;
1558  OP_Utils::evalOpParm(result, thissop, "useedgefilletgroup", cookparms.getCookTime(), 0);
1559  return result;
1560  }
1561  const UT_StringHolder & getEdgeFilletGroup() const { return myEdgeFilletGroup; }
1562  void setEdgeFilletGroup(const UT_StringHolder & val) { myEdgeFilletGroup = val; }
1564  {
1565  SOP_Node *thissop = cookparms.getNode();
1566  if (!thissop) return getEdgeFilletGroup();
1568  OP_Utils::evalOpParm(result, thissop, "edgeprims", cookparms.getCookTime(), 0);
1569  return result;
1570  }
1571  bool getUseOffsetEdges() const { return myUseOffsetEdges; }
1572  void setUseOffsetEdges(bool val) { myUseOffsetEdges = val; }
1573  bool opUseOffsetEdges(const SOP_NodeVerb::CookParms &cookparms) const
1574  {
1575  SOP_Node *thissop = cookparms.getNode();
1576  if (!thissop) return getUseOffsetEdges();
1577  bool result;
1578  OP_Utils::evalOpParm(result, thissop, "useoffsetedges", cookparms.getCookTime(), 0);
1579  return result;
1580  }
1581  const UT_StringHolder & getOffsetEdges() const { return myOffsetEdges; }
1582  void setOffsetEdges(const UT_StringHolder & val) { myOffsetEdges = val; }
1584  {
1585  SOP_Node *thissop = cookparms.getNode();
1586  if (!thissop) return getOffsetEdges();
1588  OP_Utils::evalOpParm(result, thissop, "offsetedges", cookparms.getCookTime(), 0);
1589  return result;
1590  }
1591  bool getUseOffsetPoints() const { return myUseOffsetPoints; }
1592  void setUseOffsetPoints(bool val) { myUseOffsetPoints = val; }
1593  bool opUseOffsetPoints(const SOP_NodeVerb::CookParms &cookparms) const
1594  {
1595  SOP_Node *thissop = cookparms.getNode();
1596  if (!thissop) return getUseOffsetPoints();
1597  bool result;
1598  OP_Utils::evalOpParm(result, thissop, "useoffsetpoints", cookparms.getCookTime(), 0);
1599  return result;
1600  }
1601  const UT_StringHolder & getOffsetPoints() const { return myOffsetPoints; }
1602  void setOffsetPoints(const UT_StringHolder & val) { myOffsetPoints = val; }
1604  {
1605  SOP_Node *thissop = cookparms.getNode();
1606  if (!thissop) return getOffsetPoints();
1608  OP_Utils::evalOpParm(result, thissop, "offsetpoints", cookparms.getCookTime(), 0);
1609  return result;
1610  }
1611  bool getUseMergedPoints() const { return myUseMergedPoints; }
1612  void setUseMergedPoints(bool val) { myUseMergedPoints = val; }
1613  bool opUseMergedPoints(const SOP_NodeVerb::CookParms &cookparms) const
1614  {
1615  SOP_Node *thissop = cookparms.getNode();
1616  if (!thissop) return getUseMergedPoints();
1617  bool result;
1618  OP_Utils::evalOpParm(result, thissop, "usemergedpoints", cookparms.getCookTime(), 0);
1619  return result;
1620  }
1621  const UT_StringHolder & getMergedPoints() const { return myMergedPoints; }
1622  void setMergedPoints(const UT_StringHolder & val) { myMergedPoints = val; }
1624  {
1625  SOP_Node *thissop = cookparms.getNode();
1626  if (!thissop) return getMergedPoints();
1628  OP_Utils::evalOpParm(result, thissop, "mergedpoints", cookparms.getCookTime(), 0);
1629  return result;
1630  }
1631  ProfileSampling getProfileSampling() const { return ProfileSampling(myProfileSampling); }
1632  void setProfileSampling(ProfileSampling val) { myProfileSampling = int64(val); }
1634  {
1635  SOP_Node *thissop = cookparms.getNode();
1636  if (!thissop) return getProfileSampling();
1637  int64 result;
1638  OP_Utils::evalOpParm(result, thissop, "profilesampling", cookparms.getCookTime(), 0);
1639  return ProfileSampling(result);
1640  }
1641  int64 getDivisions() const { return myDivisions; }
1642  void setDivisions(int64 val) { myDivisions = val; }
1644  {
1645  SOP_Node *thissop = cookparms.getNode();
1646  if (!thissop) return getDivisions();
1647  int64 result;
1648  OP_Utils::evalOpParm(result, thissop, "divisions", cookparms.getCookTime(), 0);
1649  return result;
1650  }
1651 
1652 private:
1653  UT_StringHolder myGroup;
1654  int64 myGroupType;
1655  bool myIgnoreBridges;
1656  bool myIgnoreShared;
1657  bool myIgnoreFlatEdges;
1658  bool myIgnoreFlatPoints;
1659  bool myIgnoreInlinePoints;
1660  fpreal64 myFlatAngle;
1661  fpreal64 myOffset;
1662  int64 myUseOffsetScale;
1663  UT_StringHolder myPointScaleAttr;
1664  int64 mySliding;
1665  fpreal64 myAsymTol;
1666  UT_StringHolder mySlideEdges;
1667  bool myDetectCollisions;
1668  bool myRestrictSlides;
1669  int64 myLimit;
1670  bool myStopAtSlideEnd;
1671  bool myStopAtPinches;
1672  fpreal64 myPinchAngle;
1673  bool myStopAtCollisions;
1674  int64 myFilletShape;
1675  fpreal64 myConvexity;
1676  int64 myProfileSource;
1677  fpreal64 myProfileScale;
1678  bool myReverseProfile;
1679  bool mySymmetrizeProfile;
1680  UT_StringHolder myProfileDirection;
1681  UT_SharedPtr<UT_Ramp> myProfileRamp;
1682  fpreal64 myFlatBoost;
1683  bool myUsePointFilletPolys;
1684  UT_StringHolder myPointFilletPolys;
1685  bool myUsePointFilletEdges;
1686  UT_StringHolder myPointFilletEdges;
1687  bool myUseEdgeFilletGroup;
1688  UT_StringHolder myEdgeFilletGroup;
1689  bool myUseOffsetEdges;
1690  UT_StringHolder myOffsetEdges;
1691  bool myUseOffsetPoints;
1692  UT_StringHolder myOffsetPoints;
1693  bool myUseMergedPoints;
1694  UT_StringHolder myMergedPoints;
1695  int64 myProfileSampling;
1696  int64 myDivisions;
1697 
1698 };
void getNestParmValue(TempIndex idx, TempIndex instance, exint &value) const override
FilletShape opFilletShape(const SOP_NodeVerb::CookParms &cookparms) const
void copyFrom(const OP_NodeParms *src) override
void setSlideEdges(const UT_StringHolder &val)
static void loadData(UT_IStream &is, UT_Vector2I &v)
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix4D &value) override
static void saveData(std::ostream &os, UT_Matrix4D v)
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector3D &value) override
fpreal64 opFlatAngle(const SOP_NodeVerb::CookParms &cookparms) const
int int32
Definition: SYS_Types.h:39
SOP_Node * getNode() const
Definition: SOP_NodeVerb.h:347
static void loadData(UT_IStream &is, bool &v)
bool operator==(const SOP_PolyBevel_3_0Parms &src) const
void getNestParmValue(TempIndex idx, TempIndex instance, fpreal &value) const override
const UT_StringHolder & getProfileDirection() const
bool opUseEdgeFilletGroup(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, UT_Vector2D &v)
bool operator!=(const SOP_PolyBevel_3_0Parms &src) const
bool opRestrictSlides(const SOP_NodeVerb::CookParms &cookparms) const
ProfileSource getProfileSource() const
void setOffsetPoints(const UT_StringHolder &val)
bool opDetectCollisions(const SOP_NodeVerb::CookParms &cookparms) const
void setMergedPoints(const UT_StringHolder &val)
exint bread(int32 *buffer, exint asize=1)
GLboolean * data
Definition: glcorearb.h:131
GT_API const UT_StringHolder time
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector4.h:493
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector3D &value) const override
const GLdouble * v
Definition: glcorearb.h:837
fpreal getTime() const
Definition: OP_Context.h:62
void setProfileDirection(const UT_StringHolder &val)
bool opUsePointFilletEdges(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getPointFilletPolys() const
FilletShape getFilletShape() const
const OP_Context & context() const
Definition: OP_NodeParms.h:97
void setProfileRamp(UT_SharedPtr< UT_Ramp > val)
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector4D &value) override
void setGroup(const UT_StringHolder &val)
constexpr SYS_FORCE_INLINE T & z() noexcept
Definition: UT_Vector3.h:667
int64 exint
Definition: SYS_Types.h:125
fpreal64 opPinchAngle(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, UT_Matrix4D &v)
SYS_FORCE_INLINE const char * buffer() const
GroupType opGroupType(const SOP_NodeVerb::CookParms &cookparms) const
GLdouble s
Definition: glad.h:3009
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
An output stream object that owns its own string buffer storage.
bool opIgnoreShared(const SOP_NodeVerb::CookParms &cookparms) const
ParmType getNestParmType(TempIndex fieldnum) const override
bool opUsePointFilletPolys(const SOP_NodeVerb::CookParms &cookparms) const
**But if you need a result
Definition: thread.h:613
bool opIgnoreBridges(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, UT_Vector4I &v)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector2D &value) const override
static void loadData(UT_IStream &is, UT_Matrix2D &v)
static void saveData(std::ostream &os, fpreal64 v)
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix2D &value) override
exint nodeIdx() const
Definition: OP_NodeParms.h:95
static PRM_DataItemHandle parseBinary(const char *type, UT_IStream &is)
bool opUseOffsetEdges(const SOP_NodeVerb::CookParms &cookparms) const
const UT_WorkBuffer & str()
Returns a read-only reference to the underlying UT_WorkBuffer.
static void loadData(UT_IStream &is, fpreal64 &v)
const UT_StringHolder & getSlideEdges() const
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector4.h:491
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector2D &value) override
void getNestParmValue(TempIndex idx, TempIndex instance, UT_StringHolder &value) const override
bool opIgnoreFlatEdges(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getEdgeFilletGroup() const
UT_StringHolder opOffsetEdges(const SOP_NodeVerb::CookParms &cookparms) const
double fpreal64
Definition: SYS_Types.h:201
void save(std::ostream &os) const
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector2.h:423
void setProfileSampling(ProfileSampling val)
bool opIgnoreInlinePoints(const SOP_NodeVerb::CookParms &cookparms) const
bool operator==(const BaseDimensions< T > &a, const BaseDimensions< Y > &b)
Definition: Dimensions.h:137
void setNestParmValue(TempIndex idx, TempIndex instance, const fpreal &value) override
void setOffsetEdges(const UT_StringHolder &val)
bool opUseMergedPoints(const SOP_NodeVerb::CookParms &cookparms) const
void setProfileScale(fpreal64 val)
exint getNestNumParms(TempIndex idx) const override
static void saveData(std::ostream &os, UT_Matrix3D v)
exint length() const
void setProfileSource(ProfileSource val)
UT_StringHolder opPointScaleAttr(const SOP_NodeVerb::CookParms &cookparms) const
SYS_FORCE_INLINE const char * buffer() const
std::shared_ptr< T > UT_SharedPtr
Wrapper around std::shared_ptr.
Definition: UT_SharedPtr.h:36
UT_StringHolder opMergedPoints(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, UT_Vector3D &v)
constexpr SYS_FORCE_INLINE T & z() noexcept
Definition: UT_Vector4.h:495
void setNestParmValue(TempIndex idx, TempIndex instance, const PRM_DataItemHandle &value) override
UT_StringHolder opPointFilletPolys(const SOP_NodeVerb::CookParms &cookparms) const
const OP_GraphProxy * graph() const
Definition: OP_NodeParms.h:94
#define SYS_FORCE_INLINE
Definition: SYS_Inline.h:45
ProfileSampling getProfileSampling() const
UseOffsetScale opUseOffsetScale(const SOP_NodeVerb::CookParms &cookparms) const
bool opUseOffsetPoints(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, UT_SharedPtr< UT_Ramp > &v)
void setGroupType(GroupType val)
void setPointScaleAttr(const UT_StringHolder &val)
static void loadData(UT_IStream &is, UT_Matrix3D &v)
long long int64
Definition: SYS_Types.h:116
void setPointFilletEdges(const UT_StringHolder &val)
const UT_StringHolder & getGroup() const
UT_StringHolder opProfileDirection(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 opConvexity(const SOP_NodeVerb::CookParms &cookparms) const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_StringHolder &value) override
void setEdgeFilletGroup(const UT_StringHolder &val)
void setNestParmValue(TempIndex idx, TempIndex instance, const exint &value) override
static void loadData(UT_IStream &is, int64 &v)
const UT_StringHolder & getPointScaleAttr() const
UT_SharedPtr< UT_Ramp > opProfileRamp(const SOP_NodeVerb::CookParms &cookparms) const
static void saveData(std::ostream &os, UT_Vector3D v)
Limit opLimit(const SOP_NodeVerb::CookParms &cookparms) const
virtual void evalOpParm(int64 &v, NodeIdx node, const char *parmname, fpreal time, DEP_MicroNode *depnode) const =0
fpreal64 opAsymTol(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 opOffset(const SOP_NodeVerb::CookParms &cookparms) const
void setPointFilletPolys(const UT_StringHolder &val)
void doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
static void saveData(std::ostream &os, bool v)
static void loadData(UT_IStream &is, UT_StringHolder &v)
void saveBinary(std::ostream &os) const
Save string to binary stream.
Definition: UT_String.h:296
static void loadData(UT_IStream &is, UT_Vector4D &v)
UT_StringHolder opOffsetPoints(const SOP_NodeVerb::CookParms &cookparms) const
void setFilletShape(FilletShape val)
GT_API const UT_StringHolder version
static void saveData(std::ostream &os, PRM_DataItemHandle s)
static void loadData(UT_IStream &is, PRM_DataItemHandle &v)
static void saveData(std::ostream &os, UT_SharedPtr< UT_Ramp > s)
void buildFromOp(const OP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector4D &value) const override
void setUseOffsetScale(UseOffsetScale val)
const UT_StringHolder & getMergedPoints() const
bool opStopAtPinches(const SOP_NodeVerb::CookParms &cookparms) const
ProfileSampling opProfileSampling(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, UT_Vector3I &v)
bool opStopAtSlideEnd(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getOffsetPoints() const
UT_StringHolder opGroup(const SOP_NodeVerb::CookParms &cookparms) const
bool opStopAtCollisions(const SOP_NodeVerb::CookParms &cookparms) const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix2D &value) const override
fpreal64 fpreal
Definition: SYS_Types.h:277
DEP_MicroNode * depnode() const
Definition: OP_NodeParms.h:99
bool opIgnoreFlatPoints(const SOP_NodeVerb::CookParms &cookparms) const
LeafData & operator=(const LeafData &)=delete
Utility class for containing a color ramp.
Definition: UT_Ramp.h:92
constexpr SYS_FORCE_INLINE T & w() noexcept
Definition: UT_Vector4.h:497
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix4D &value) const override
GLuint GLfloat * val
Definition: glcorearb.h:1608
fpreal64 opProfileScale(const SOP_NodeVerb::CookParms &cookparms) const
#define SOP_API
Definition: SOP_API.h:10
const UT_StringHolder & getOffsetEdges() const
UT_StringHolder opEdgeFilletGroup(const SOP_NodeVerb::CookParms &cookparms) const
bool opSymmetrizeProfile(const SOP_NodeVerb::CookParms &cookparms) const
fpreal getCookTime() const
Definition: SOP_NodeVerb.h:361
UT_StringHolder opSlideEdges(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opPointFilletEdges(const SOP_NodeVerb::CookParms &cookparms) const
UT_SharedPtr< UT_Ramp > getProfileRamp() const
ProfileSource opProfileSource(const SOP_NodeVerb::CookParms &cookparms) const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_SharedPtr< UT_Ramp > &value) override
const char * findChar(int c) const
Definition: UT_String.h:1395
#define UT_ASSERT(ZZ)
Definition: UT_Assert.h:156
bool isParmColorRamp(exint idx) const override
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix3D &value) override
void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
Definition: core.h:1131
void getNestParmValue(TempIndex idx, TempIndex instance, UT_SharedPtr< UT_Ramp > &value) const override
bool opReverseProfile(const SOP_NodeVerb::CookParms &cookparms) const
static void saveData(std::ostream &os, UT_Vector4D v)
GLboolean r
Definition: glcorearb.h:1222
Sliding opSliding(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 opFlatBoost(const SOP_NodeVerb::CookParms &cookparms) const
void doGetParmValue(TempIndex idx, TempIndex instance, T &value) const
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector3.h:665
static void saveData(std::ostream &os, UT_StringHolder s)
type
Definition: core.h:1059
static void saveData(std::ostream &os, int64 v)
const UT_StringHolder & getPointFilletEdges() const
void loadFromOpSubclass(const LoadParms &loadparms) override
const char * getNestParmName(TempIndex fieldnum) const override
UT_SharedPtr< const PRM_DataItem > PRM_DataItemHandle
Definition: PRM_Parm.h:97
UseOffsetScale getUseOffsetScale() const
int64 opDivisions(const SOP_NodeVerb::CookParms &cookparms) const
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector2.h:425
SYS_FORCE_INLINE bool isstring() const
static void saveData(std::ostream &os, UT_Matrix2D v)
static void saveData(std::ostream &os, UT_Vector2D v)
SYS_FORCE_INLINE UT_StringHolder getToken(GroupType enum_value)
SYS_FORCE_INLINE void strncpy(const char *src, exint maxlen)
GLenum src
Definition: glcorearb.h:1793
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector3.h:663