HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
SOP_PolyExtrude-2.0.proto.h
Go to the documentation of this file.
1 /* Automagically Generated by generate_proto.py
2  * Do not Edit
3  */
4 #pragma once
5 
6 #include <SOP/SOP_API.h>
7 #include <SOP/SOP_NodeVerb.h>
8 #include <OP/OP_GraphProxy.h>
9 
10 #include <OP/OP_Utils.h>
11 #include <PRM/PRM_Parm.h>
12 #include <UT/UT_IStream.h>
13 #include <UT/UT_NTStreamUtil.h>
14 #include <UT/UT_Ramp.h>
15 #include <UT/UT_SharedPtr.h>
16 #include <UT/UT_StringHolder.h>
17 #include <UT/UT_StringStream.h>
18 #include <UT/UT_VectorTypes.h>
19 #include <UT/UT_EnvControl.h>
20 #include <SYS/SYS_Types.h>
21 
22 class DEP_MicroNode;
23 namespace SOP_PolyExtrude_2_0Enums
24 {
25  enum class SplitType
26  {
27  ELEMENTS = 0,
29  };
30 
32  getToken(SplitType enum_value)
33  {
34  using namespace UT::Literal;
35  switch (enum_value) {
36  case SplitType::ELEMENTS: return "elements"_sh;
37  case SplitType::COMPONENTS: return "components"_sh;
38  default: UT_ASSERT(false); return ""_sh;
39  }
40  }
41 
42  enum class ExtrusionMode
43  {
44  PRIMNORMAL = 0,
46  };
47 
49  getToken(ExtrusionMode enum_value)
50  {
51  using namespace UT::Literal;
52  switch (enum_value) {
53  case ExtrusionMode::PRIMNORMAL: return "primnormal"_sh;
54  case ExtrusionMode::POINTNORMAL: return "pointnormal"_sh;
55  default: UT_ASSERT(false); return ""_sh;
56  }
57  }
58 
59  enum class PtNormalSrc
60  {
61  PRECOMPUTE = 0,
62  EXISTING,
63  ATTRIBUTE
64  };
65 
67  getToken(PtNormalSrc enum_value)
68  {
69  using namespace UT::Literal;
70  switch (enum_value) {
71  case PtNormalSrc::PRECOMPUTE: return "precompute"_sh;
72  case PtNormalSrc::EXISTING: return "existing"_sh;
73  case PtNormalSrc::ATTRIBUTE: return "attribute"_sh;
74  default: UT_ASSERT(false); return ""_sh;
75  }
76  }
77 
78  enum class SpineType
79  {
80  STRAIGHT = 0,
81  CURVED,
82  EXTERNAL
83  };
84 
86  getToken(SpineType enum_value)
87  {
88  using namespace UT::Literal;
89  switch (enum_value) {
90  case SpineType::STRAIGHT: return "straight"_sh;
91  case SpineType::CURVED: return "curved"_sh;
92  case SpineType::EXTERNAL: return "external"_sh;
93  default: UT_ASSERT(false); return ""_sh;
94  }
95  }
96 
97  enum class XformSpace
98  {
99  LOCAL = 0,
100  GLOBAL
101  };
102 
104  getToken(XformSpace enum_value)
105  {
106  using namespace UT::Literal;
107  switch (enum_value) {
108  case XformSpace::LOCAL: return "local"_sh;
109  case XformSpace::GLOBAL: return "global"_sh;
110  default: UT_ASSERT(false); return ""_sh;
111  }
112  }
113 
114  enum class XformOrder
115  {
116  SRT = 0,
117  STR,
118  RST,
119  RTS,
120  TSR,
121  TRS
122  };
123 
125  getToken(XformOrder enum_value)
126  {
127  using namespace UT::Literal;
128  switch (enum_value) {
129  case XformOrder::SRT: return "srt"_sh;
130  case XformOrder::STR: return "str"_sh;
131  case XformOrder::RST: return "rst"_sh;
132  case XformOrder::RTS: return "rts"_sh;
133  case XformOrder::TSR: return "tsr"_sh;
134  case XformOrder::TRS: return "trs"_sh;
135  default: UT_ASSERT(false); return ""_sh;
136  }
137  }
138 
139  enum class RotateOrder
140  {
141  XYZ = 0,
142  XZY,
143  YXZ,
144  YZX,
145  ZXY,
146  ZYX
147  };
148 
150  getToken(RotateOrder enum_value)
151  {
152  using namespace UT::Literal;
153  switch (enum_value) {
154  case RotateOrder::XYZ: return "xyz"_sh;
155  case RotateOrder::XZY: return "xzy"_sh;
156  case RotateOrder::YXZ: return "yxz"_sh;
157  case RotateOrder::YZX: return "yzx"_sh;
158  case RotateOrder::ZXY: return "zxy"_sh;
159  case RotateOrder::ZYX: return "zyx"_sh;
160  default: UT_ASSERT(false); return ""_sh;
161  }
162  }
163 
164  enum class PreXformOrder
165  {
166  SRT = 0,
167  STR,
168  RST,
169  RTS,
170  TSR,
171  TRS
172  };
173 
175  getToken(PreXformOrder enum_value)
176  {
177  using namespace UT::Literal;
178  switch (enum_value) {
179  case PreXformOrder::SRT: return "srt"_sh;
180  case PreXformOrder::STR: return "str"_sh;
181  case PreXformOrder::RST: return "rst"_sh;
182  case PreXformOrder::RTS: return "rts"_sh;
183  case PreXformOrder::TSR: return "tsr"_sh;
184  case PreXformOrder::TRS: return "trs"_sh;
185  default: UT_ASSERT(false); return ""_sh;
186  }
187  }
188 
190  {
191  XYZ = 0,
192  XZY,
193  YXZ,
194  YZX,
195  ZXY,
196  ZYX
197  };
198 
201  {
202  using namespace UT::Literal;
203  switch (enum_value) {
204  case PreXformRotateOrder::XYZ: return "xyz"_sh;
205  case PreXformRotateOrder::XZY: return "xzy"_sh;
206  case PreXformRotateOrder::YXZ: return "yxz"_sh;
207  case PreXformRotateOrder::YZX: return "yzx"_sh;
208  case PreXformRotateOrder::ZXY: return "zxy"_sh;
209  case PreXformRotateOrder::ZYX: return "zyx"_sh;
210  default: UT_ASSERT(false); return ""_sh;
211  }
212  }
213 
214  enum class UVStyle
215  {
216  UNITSQUARE = 0,
217  RECTANGULAR,
219  };
220 
222  getToken(UVStyle enum_value)
223  {
224  using namespace UT::Literal;
225  switch (enum_value) {
226  case UVStyle::UNITSQUARE: return "unitsquare"_sh;
227  case UVStyle::RECTANGULAR: return "rectangular"_sh;
228  case UVStyle::PROPRTIONAL: return "proprtional"_sh;
229  default: UT_ASSERT(false); return ""_sh;
230  }
231  }
232 
233  enum class UVScaling
234  {
235  FITUNITSQUARE = 0,
236  MATCH3D,
237  MATCHUV
238  };
239 
241  getToken(UVScaling enum_value)
242  {
243  using namespace UT::Literal;
244  switch (enum_value) {
245  case UVScaling::FITUNITSQUARE: return "fitunitsquare"_sh;
246  case UVScaling::MATCH3D: return "match3d"_sh;
247  case UVScaling::MATCHUV: return "matchuv"_sh;
248  default: UT_ASSERT(false); return ""_sh;
249  }
250  }
251 
252  enum class Interpolation
253  {
254  LINEAR = 0,
256  };
257 
259  getToken(Interpolation enum_value)
260  {
261  using namespace UT::Literal;
262  switch (enum_value) {
263  case Interpolation::LINEAR: return "linear"_sh;
264  case Interpolation::ROTATINGFRAME: return "rotatingframe"_sh;
265  default: UT_ASSERT(false); return ""_sh;
266  }
267  }
268 
269  enum class Spacing
270  {
271  ARCLENGTHUNIFORM = 0,
273  };
274 
276  getToken(Spacing enum_value)
277  {
278  using namespace UT::Literal;
279  switch (enum_value) {
280  case Spacing::ARCLENGTHUNIFORM: return "arclengthuniform"_sh;
281  case Spacing::CURVATUREADAPTIVE: return "curvatureadaptive"_sh;
282  default: UT_ASSERT(false); return ""_sh;
283  }
284  }
285 
286 }
287 
288 
290 {
291 public:
292  static int version() { return 1; }
293 
295  {
296  myGroup = ""_UTsh;
297  mySplitType = 1;
298  myUseSplitGroup = false;
299  mySplitGroup = ""_UTsh;
300  myExtrusionMode = 0;
301  myPtNormalSrc = 0;
302  myPtNormalAttrib = "N"_UTsh;
303  myDist = 0;
304  myInset = 0;
305  myTwist = 0;
306  myDivs = 1;
307  mySpineType = 0;
308  myXformFront = false;
309  myXformSpace = 0;
310  myXformOrder = 0;
311  myRotateOrder = 0;
312  myTranslate = UT_Vector3D(0,0,0);
313  myRotate = UT_Vector3D(0,0,0);
314  myScale = UT_Vector3D(1,1,1);
315  myShear = UT_Vector3D(0,0,0);
316  myPivot = UT_Vector3D(0,0,0);
317  myPivotRotate = UT_Vector3D(0,0,0);
318  myPreXformOrder = 0;
319  myPreXformRotateOrder = 0;
320  myPreXformTranslate = UT_Vector3D(0,0,0);
321  myPreXformRotate = UT_Vector3D(0,0,0);
322  myPreXformScale = UT_Vector3D(1,1,1);
323  myPreXformShear = UT_Vector3D(0,0,0);
324  myOutputFront = true;
325  myOutputFrontGrp = false;
326  myFrontGrp = "extrudeFront"_UTsh;
327  myOutputBack = false;
328  myOutputBackGrp = false;
329  myBackGrp = "extrudeBack"_UTsh;
330  myOutputSide = true;
331  myOutputSideGrp = false;
332  mySideGrp = "extrudeSide"_UTsh;
333  myOutputFrontSeamGrp = false;
334  myFrontSeamGrp = "extrudeFrontSeam"_UTsh;
335  myOutputBackSeamGrp = false;
336  myBackSeamGrp = "extrudeBackSeam"_UTsh;
337  myPreserveGroups = true;
338  myCopyEdgeGroups = false;
339  myCopyPointGroups = false;
340  myCopyPrimitiveGroups = true;
341  myLimitInset = true;
342  myCommonLimit = true;
343  myAddVertexNormals = false;
344  myCuspAngle = 60;
345  myCuspFront = true;
346  myCuspBack = true;
347  myGenUVs = true;
348  myUVStyle = 2;
349  myUVScaling = 2;
350  myFrontMagnitude = 1;
351  myBackMagnitude = 1;
352  myFrontStiffness = 0;
353  myBackStiffness = 0;
354  myInterpolation = 1;
355  mySpacing = 0;
356  myReverseSpineDirection = false;
357  myAxialRotation = 0;
358  myFrontBlend = 0.1;
359  myBackBlend = 0.1;
360  myThicknessScale = 1;
361  myUseThicknessAttrib = true;
362  myThicknessAttrib = "thickness"_UTsh;
363  myUseThicknessRamp = true;
364  myThicknessRamp = UT_Ramp::buildFromDefault("1pos ( 0 ) 1value ( 1 ) 1interp ( catmull-rom ) 2pos ( 1 ) 2value ( 1 ) 2interp ( catmull-rom )");
365  myUseTwistAttrib = true;
366  myTwistAttrib = "twist"_UTsh;
367  myUseTwistRamp = true;
368  myTwistRamp = UT_Ramp::buildFromDefault("1pos ( 0 ) 1value ( 0.5 ) 1interp ( catmull-rom ) 2pos ( 1 ) 2value ( 0.5 ) 2interp ( catmull-rom )");
369  myTwistScale = 180;
370  myUseLocalZScaleAttrib = false;
371  myLocalZScaleAttrib = "zscale"_UTsh;
372  myUseLocalInsetScaleAttrib = false;
373  myLocalInsetScaleAttrib = "insetscale"_UTsh;
374  myUseLocalTwistScaleAttrib = false;
375  myLocalTwistScaleAttrib = "twistscale"_UTsh;
376  myUseLocalDivScaleAttrib = false;
377  myLocalDivScaleAttrib = "divsscale"_UTsh;
378  myUseLocalXAttrib = false;
379  myLocalXAttrib = "localx"_UTsh;
380  myUseLocalZAttrib = false;
381  myLocalZAttrib = "localz"_UTsh;
382  myUseLocalCtrAttrib = false;
383  myLocalCtrAttrib = "localctr"_UTsh;
384 
385  }
386 
387  explicit SOP_PolyExtrude_2_0Parms(const SOP_PolyExtrude_2_0Parms &) = default;
389  SOP_PolyExtrude_2_0Parms(SOP_PolyExtrude_2_0Parms &&) noexcept = default;
390  SOP_PolyExtrude_2_0Parms &operator=(SOP_PolyExtrude_2_0Parms &&) noexcept = default;
391 
393 
395  {
396  if (myGroup != src.myGroup) return false;
397  if (mySplitType != src.mySplitType) return false;
398  if (myUseSplitGroup != src.myUseSplitGroup) return false;
399  if (mySplitGroup != src.mySplitGroup) return false;
400  if (myExtrusionMode != src.myExtrusionMode) return false;
401  if (myPtNormalSrc != src.myPtNormalSrc) return false;
402  if (myPtNormalAttrib != src.myPtNormalAttrib) return false;
403  if (myDist != src.myDist) return false;
404  if (myInset != src.myInset) return false;
405  if (myTwist != src.myTwist) return false;
406  if (myDivs != src.myDivs) return false;
407  if (mySpineType != src.mySpineType) return false;
408  if (myXformFront != src.myXformFront) return false;
409  if (myXformSpace != src.myXformSpace) return false;
410  if (myXformOrder != src.myXformOrder) return false;
411  if (myRotateOrder != src.myRotateOrder) return false;
412  if (myTranslate != src.myTranslate) return false;
413  if (myRotate != src.myRotate) return false;
414  if (myScale != src.myScale) return false;
415  if (myShear != src.myShear) return false;
416  if (myPivot != src.myPivot) return false;
417  if (myPivotRotate != src.myPivotRotate) return false;
418  if (myPreXformOrder != src.myPreXformOrder) return false;
419  if (myPreXformRotateOrder != src.myPreXformRotateOrder) return false;
420  if (myPreXformTranslate != src.myPreXformTranslate) return false;
421  if (myPreXformRotate != src.myPreXformRotate) return false;
422  if (myPreXformScale != src.myPreXformScale) return false;
423  if (myPreXformShear != src.myPreXformShear) return false;
424  if (myOutputFront != src.myOutputFront) return false;
425  if (myOutputFrontGrp != src.myOutputFrontGrp) return false;
426  if (myFrontGrp != src.myFrontGrp) return false;
427  if (myOutputBack != src.myOutputBack) return false;
428  if (myOutputBackGrp != src.myOutputBackGrp) return false;
429  if (myBackGrp != src.myBackGrp) return false;
430  if (myOutputSide != src.myOutputSide) return false;
431  if (myOutputSideGrp != src.myOutputSideGrp) return false;
432  if (mySideGrp != src.mySideGrp) return false;
433  if (myOutputFrontSeamGrp != src.myOutputFrontSeamGrp) return false;
434  if (myFrontSeamGrp != src.myFrontSeamGrp) return false;
435  if (myOutputBackSeamGrp != src.myOutputBackSeamGrp) return false;
436  if (myBackSeamGrp != src.myBackSeamGrp) return false;
437  if (myPreserveGroups != src.myPreserveGroups) return false;
438  if (myCopyEdgeGroups != src.myCopyEdgeGroups) return false;
439  if (myCopyPointGroups != src.myCopyPointGroups) return false;
440  if (myCopyPrimitiveGroups != src.myCopyPrimitiveGroups) return false;
441  if (myLimitInset != src.myLimitInset) return false;
442  if (myCommonLimit != src.myCommonLimit) return false;
443  if (myAddVertexNormals != src.myAddVertexNormals) return false;
444  if (myCuspAngle != src.myCuspAngle) return false;
445  if (myCuspFront != src.myCuspFront) return false;
446  if (myCuspBack != src.myCuspBack) return false;
447  if (myGenUVs != src.myGenUVs) return false;
448  if (myUVStyle != src.myUVStyle) return false;
449  if (myUVScaling != src.myUVScaling) return false;
450  if (myFrontMagnitude != src.myFrontMagnitude) return false;
451  if (myBackMagnitude != src.myBackMagnitude) return false;
452  if (myFrontStiffness != src.myFrontStiffness) return false;
453  if (myBackStiffness != src.myBackStiffness) return false;
454  if (myInterpolation != src.myInterpolation) return false;
455  if (mySpacing != src.mySpacing) return false;
456  if (myReverseSpineDirection != src.myReverseSpineDirection) return false;
457  if (myAxialRotation != src.myAxialRotation) return false;
458  if (myFrontBlend != src.myFrontBlend) return false;
459  if (myBackBlend != src.myBackBlend) return false;
460  if (myThicknessScale != src.myThicknessScale) return false;
461  if (myUseThicknessAttrib != src.myUseThicknessAttrib) return false;
462  if (myThicknessAttrib != src.myThicknessAttrib) return false;
463  if (myUseThicknessRamp != src.myUseThicknessRamp) return false;
464  if (myThicknessRamp != src.myThicknessRamp)
465  { if (!myThicknessRamp || !src.myThicknessRamp || !(*myThicknessRamp == *src.myThicknessRamp)) return false; }
466  if (myUseTwistAttrib != src.myUseTwistAttrib) return false;
467  if (myTwistAttrib != src.myTwistAttrib) return false;
468  if (myUseTwistRamp != src.myUseTwistRamp) return false;
469  if (myTwistRamp != src.myTwistRamp)
470  { if (!myTwistRamp || !src.myTwistRamp || !(*myTwistRamp == *src.myTwistRamp)) return false; }
471  if (myTwistScale != src.myTwistScale) return false;
472  if (myUseLocalZScaleAttrib != src.myUseLocalZScaleAttrib) return false;
473  if (myLocalZScaleAttrib != src.myLocalZScaleAttrib) return false;
474  if (myUseLocalInsetScaleAttrib != src.myUseLocalInsetScaleAttrib) return false;
475  if (myLocalInsetScaleAttrib != src.myLocalInsetScaleAttrib) return false;
476  if (myUseLocalTwistScaleAttrib != src.myUseLocalTwistScaleAttrib) return false;
477  if (myLocalTwistScaleAttrib != src.myLocalTwistScaleAttrib) return false;
478  if (myUseLocalDivScaleAttrib != src.myUseLocalDivScaleAttrib) return false;
479  if (myLocalDivScaleAttrib != src.myLocalDivScaleAttrib) return false;
480  if (myUseLocalXAttrib != src.myUseLocalXAttrib) return false;
481  if (myLocalXAttrib != src.myLocalXAttrib) return false;
482  if (myUseLocalZAttrib != src.myUseLocalZAttrib) return false;
483  if (myLocalZAttrib != src.myLocalZAttrib) return false;
484  if (myUseLocalCtrAttrib != src.myUseLocalCtrAttrib) return false;
485  if (myLocalCtrAttrib != src.myLocalCtrAttrib) return false;
486 
487 
488  if (baseGetSignature() != src.baseGetSignature()) return false;
489 
490  return true;
491  }
493  {
494  return !operator==(src);
495  }
509 
510 
511 
512  void buildFromOp(const OP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
513  {
514  myGroup = ""_UTsh;
515  if (true)
516  graph->evalOpParm(myGroup, nodeidx, "group", time, graph->isDirect()?nullptr:depnode);
517  mySplitType = 1;
518  if (true)
519  graph->evalOpParm(mySplitType, nodeidx, "splittype", time, graph->isDirect()?nullptr:depnode);
520  myUseSplitGroup = false;
521  if (true && ( (true&&!(((int64(getSplitType())!=1)))) ) )
522  graph->evalOpParm(myUseSplitGroup, nodeidx, "usesplitgroup", time, graph->isDirect()?nullptr:depnode);
523  mySplitGroup = ""_UTsh;
524  if (true && ( (true&&!(((int64(getSplitType())!=1))||((getUseSplitGroup()!=1)))) ) )
525  graph->evalOpParm(mySplitGroup, nodeidx, "splitgroup", time, graph->isDirect()?nullptr:depnode);
526  myExtrusionMode = 0;
527  if (true)
528  graph->evalOpParm(myExtrusionMode, nodeidx, "extrusionmode", time, graph->isDirect()?nullptr:depnode);
529  myPtNormalSrc = 0;
530  if (true && ( (true&&!(((int64(getExtrusionMode())!=1)))) ) )
531  graph->evalOpParm(myPtNormalSrc, nodeidx, "ptnormalsrc", time, graph->isDirect()?nullptr:depnode);
532  myPtNormalAttrib = "N"_UTsh;
533  if (true && ( (true&&!(((int64(getExtrusionMode())!=1))||((int64(getPtNormalSrc())!=2)))) ) )
534  graph->evalOpParm(myPtNormalAttrib, nodeidx, "ptnormalattrib", time, graph->isDirect()?nullptr:depnode);
535  myDist = 0;
536  if (true)
537  graph->evalOpParm(myDist, nodeidx, "dist", time, graph->isDirect()?nullptr:depnode);
538  myInset = 0;
539  if (true)
540  graph->evalOpParm(myInset, nodeidx, "inset", time, graph->isDirect()?nullptr:depnode);
541  myTwist = 0;
542  if (true)
543  graph->evalOpParm(myTwist, nodeidx, "twist", time, graph->isDirect()?nullptr:depnode);
544  myDivs = 1;
545  if (true)
546  graph->evalOpParm(myDivs, nodeidx, "divs", time, graph->isDirect()?nullptr:depnode);
547  mySpineType = 0;
548  if (true)
549  graph->evalOpParm(mySpineType, nodeidx, "spinetype", time, graph->isDirect()?nullptr:depnode);
550  myXformFront = false;
551  if (true)
552  graph->evalOpParm(myXformFront, nodeidx, "xformfront", time, graph->isDirect()?nullptr:depnode);
553  myXformSpace = 0;
554  if (true && ( (true&&!(((getXformFront()==0)))) ) )
555  graph->evalOpParm(myXformSpace, nodeidx, "xformspace", time, graph->isDirect()?nullptr:depnode);
556  myXformOrder = 0;
557  if (true && ( (true&&!(((getXformFront()==0)))) ) )
558  graph->evalOpParm(myXformOrder, nodeidx, "rst", time, graph->isDirect()?nullptr:depnode);
559  myRotateOrder = 0;
560  if (true && ( (true&&!(((getXformFront()==0)))) ) )
561  graph->evalOpParm(myRotateOrder, nodeidx, "xyz", time, graph->isDirect()?nullptr:depnode);
562  myTranslate = UT_Vector3D(0,0,0);
563  if (true && ( (true&&!(((getXformFront()==0)))) ) )
564  graph->evalOpParm(myTranslate, nodeidx, "translate", time, graph->isDirect()?nullptr:depnode);
565  myRotate = UT_Vector3D(0,0,0);
566  if (true && ( (true&&!(((getXformFront()==0)))) ) )
567  graph->evalOpParm(myRotate, nodeidx, "rotate", time, graph->isDirect()?nullptr:depnode);
568  myScale = UT_Vector3D(1,1,1);
569  if (true && ( (true&&!(((getXformFront()==0)))) ) )
570  graph->evalOpParm(myScale, nodeidx, "scale", time, graph->isDirect()?nullptr:depnode);
571  myShear = UT_Vector3D(0,0,0);
572  if (true && ( (true&&!(((getXformFront()==0)))) ) )
573  graph->evalOpParm(myShear, nodeidx, "shear", time, graph->isDirect()?nullptr:depnode);
574  myPivot = UT_Vector3D(0,0,0);
575  if (true && ( (true&&!(((getXformFront()==0)))) ) )
576  graph->evalOpParm(myPivot, nodeidx, "pivot", time, graph->isDirect()?nullptr:depnode);
577  myPivotRotate = UT_Vector3D(0,0,0);
578  if (true && ( (true&&!(((getXformFront()==0)))) ) )
579  graph->evalOpParm(myPivotRotate, nodeidx, "pivotrotate", time, graph->isDirect()?nullptr:depnode);
580  myPreXformOrder = 0;
581  if (true && ( (true&&!(((getXformFront()==0)))) ) )
582  graph->evalOpParm(myPreXformOrder, nodeidx, "prexform_rst", time, graph->isDirect()?nullptr:depnode);
583  myPreXformRotateOrder = 0;
584  if (true && ( (true&&!(((getXformFront()==0)))) ) )
585  graph->evalOpParm(myPreXformRotateOrder, nodeidx, "prexform_xyz", time, graph->isDirect()?nullptr:depnode);
586  myPreXformTranslate = UT_Vector3D(0,0,0);
587  if (true && ( (true&&!(((getXformFront()==0)))) ) )
588  graph->evalOpParm(myPreXformTranslate, nodeidx, "prexform_translate", time, graph->isDirect()?nullptr:depnode);
589  myPreXformRotate = UT_Vector3D(0,0,0);
590  if (true && ( (true&&!(((getXformFront()==0)))) ) )
591  graph->evalOpParm(myPreXformRotate, nodeidx, "prexform_rotate", time, graph->isDirect()?nullptr:depnode);
592  myPreXformScale = UT_Vector3D(1,1,1);
593  if (true && ( (true&&!(((getXformFront()==0)))) ) )
594  graph->evalOpParm(myPreXformScale, nodeidx, "prexform_scale", time, graph->isDirect()?nullptr:depnode);
595  myPreXformShear = UT_Vector3D(0,0,0);
596  if (true && ( (true&&!(((getXformFront()==0)))) ) )
597  graph->evalOpParm(myPreXformShear, nodeidx, "prexform_shear", time, graph->isDirect()?nullptr:depnode);
598  myOutputFront = true;
599  if (true)
600  graph->evalOpParm(myOutputFront, nodeidx, "outputfront", time, graph->isDirect()?nullptr:depnode);
601  myOutputFrontGrp = false;
602  if (true)
603  graph->evalOpParm(myOutputFrontGrp, nodeidx, "outputfrontgrp", time, graph->isDirect()?nullptr:depnode);
604  myFrontGrp = "extrudeFront"_UTsh;
605  if (true && ( (true&&!(((getOutputFrontGrp()==0)))) ) )
606  graph->evalOpParm(myFrontGrp, nodeidx, "frontgrp", time, graph->isDirect()?nullptr:depnode);
607  myOutputBack = false;
608  if (true)
609  graph->evalOpParm(myOutputBack, nodeidx, "outputback", time, graph->isDirect()?nullptr:depnode);
610  myOutputBackGrp = false;
611  if (true)
612  graph->evalOpParm(myOutputBackGrp, nodeidx, "outputbackgrp", time, graph->isDirect()?nullptr:depnode);
613  myBackGrp = "extrudeBack"_UTsh;
614  if (true && ( (true&&!(((getOutputBackGrp()==0)))) ) )
615  graph->evalOpParm(myBackGrp, nodeidx, "backgrp", time, graph->isDirect()?nullptr:depnode);
616  myOutputSide = true;
617  if (true)
618  graph->evalOpParm(myOutputSide, nodeidx, "outputside", time, graph->isDirect()?nullptr:depnode);
619  myOutputSideGrp = false;
620  if (true)
621  graph->evalOpParm(myOutputSideGrp, nodeidx, "outputsidegrp", time, graph->isDirect()?nullptr:depnode);
622  mySideGrp = "extrudeSide"_UTsh;
623  if (true && ( (true&&!(((getOutputSideGrp()==0)))) ) )
624  graph->evalOpParm(mySideGrp, nodeidx, "sidegrp", time, graph->isDirect()?nullptr:depnode);
625  myOutputFrontSeamGrp = false;
626  if (true)
627  graph->evalOpParm(myOutputFrontSeamGrp, nodeidx, "outputfrontseamgrp", time, graph->isDirect()?nullptr:depnode);
628  myFrontSeamGrp = "extrudeFrontSeam"_UTsh;
629  if (true && ( (true&&!(((getOutputFrontSeamGrp()==0)))) ) )
630  graph->evalOpParm(myFrontSeamGrp, nodeidx, "frontseamgrp", time, graph->isDirect()?nullptr:depnode);
631  myOutputBackSeamGrp = false;
632  if (true)
633  graph->evalOpParm(myOutputBackSeamGrp, nodeidx, "outputbackseamgrp", time, graph->isDirect()?nullptr:depnode);
634  myBackSeamGrp = "extrudeBackSeam"_UTsh;
635  if (true && ( (true&&!(((getOutputBackSeamGrp()==0)))) ) )
636  graph->evalOpParm(myBackSeamGrp, nodeidx, "backseamgrp", time, graph->isDirect()?nullptr:depnode);
637  myPreserveGroups = true;
638  if (true)
639  graph->evalOpParm(myPreserveGroups, nodeidx, "preservegroups", time, graph->isDirect()?nullptr:depnode);
640  myCopyEdgeGroups = false;
641  if (true)
642  graph->evalOpParm(myCopyEdgeGroups, nodeidx, "copyedgegroups", time, graph->isDirect()?nullptr:depnode);
643  myCopyPointGroups = false;
644  if (true)
645  graph->evalOpParm(myCopyPointGroups, nodeidx, "copypointgroups", time, graph->isDirect()?nullptr:depnode);
646  myCopyPrimitiveGroups = true;
647  if (true)
648  graph->evalOpParm(myCopyPrimitiveGroups, nodeidx, "copyprimitivegroups", time, graph->isDirect()?nullptr:depnode);
649  myLimitInset = true;
650  if (true)
651  graph->evalOpParm(myLimitInset, nodeidx, "limitinset", time, graph->isDirect()?nullptr:depnode);
652  myCommonLimit = true;
653  if (true && ( (true&&!(((getLimitInset()==0)))) ) )
654  graph->evalOpParm(myCommonLimit, nodeidx, "commonlimit", time, graph->isDirect()?nullptr:depnode);
655  myAddVertexNormals = false;
656  if (true)
657  graph->evalOpParm(myAddVertexNormals, nodeidx, "addvertexnomrals", time, graph->isDirect()?nullptr:depnode);
658  myCuspAngle = 60;
659  if (true && ( (true&&!(((getAddVertexNormals()==0)))) ) )
660  graph->evalOpParm(myCuspAngle, nodeidx, "cuspangle", time, graph->isDirect()?nullptr:depnode);
661  myCuspFront = true;
662  if (true && ( (true&&!(((getAddVertexNormals()==0)))) ) )
663  graph->evalOpParm(myCuspFront, nodeidx, "cuspfront", time, graph->isDirect()?nullptr:depnode);
664  myCuspBack = true;
665  if (true && ( (true&&!(((getAddVertexNormals()==0)))) ) )
666  graph->evalOpParm(myCuspBack, nodeidx, "cuspback", time, graph->isDirect()?nullptr:depnode);
667  myGenUVs = true;
668  if (true)
669  graph->evalOpParm(myGenUVs, nodeidx, "genuvs", time, graph->isDirect()?nullptr:depnode);
670  myUVStyle = 2;
671  if (true && ( (true&&!(((getGenUVs()==0)))) ) )
672  graph->evalOpParm(myUVStyle, nodeidx, "uvstyle", time, graph->isDirect()?nullptr:depnode);
673  myUVScaling = 2;
674  if (true && ( (true&&!(((getGenUVs()==0)))) ) )
675  graph->evalOpParm(myUVScaling, nodeidx, "uvscaling", time, graph->isDirect()?nullptr:depnode);
676  myFrontMagnitude = 1;
677  if (true && ( (true&&!(((int64(getSpineType())==0)))) ) )
678  graph->evalOpParm(myFrontMagnitude, nodeidx, "frontmagnitude", time, graph->isDirect()?nullptr:depnode);
679  myBackMagnitude = 1;
680  if (true && ( (true&&!(((int64(getSpineType())==0)))) ) )
681  graph->evalOpParm(myBackMagnitude, nodeidx, "backmagnitude", time, graph->isDirect()?nullptr:depnode);
682  myFrontStiffness = 0;
683  if (true && ( (true&&!(((int64(getSpineType())==0)))) ) )
684  graph->evalOpParm(myFrontStiffness, nodeidx, "frontstiffness", time, graph->isDirect()?nullptr:depnode);
685  myBackStiffness = 0;
686  if (true && ( (true&&!(((int64(getSpineType())==0)))) ) )
687  graph->evalOpParm(myBackStiffness, nodeidx, "backstiffness", time, graph->isDirect()?nullptr:depnode);
688  myInterpolation = 1;
689  if (true)
690  graph->evalOpParm(myInterpolation, nodeidx, "interpolation", time, graph->isDirect()?nullptr:depnode);
691  mySpacing = 0;
692  if (true)
693  graph->evalOpParm(mySpacing, nodeidx, "spacing", time, graph->isDirect()?nullptr:depnode);
694  myReverseSpineDirection = false;
695  if (true && ( (true&&!(((int64(getSpineType())!=2))||(((graph->getInput(nodeidx,1)>=0)==0)))) ) )
696  graph->evalOpParm(myReverseSpineDirection, nodeidx, "reversespinedirection", time, graph->isDirect()?nullptr:depnode);
697  myAxialRotation = 0;
698  if (true && ( (true&&!(((int64(getSpineType())!=2))||(((graph->getInput(nodeidx,1)>=0)==0)))) ) )
699  graph->evalOpParm(myAxialRotation, nodeidx, "axialrotation", time, graph->isDirect()?nullptr:depnode);
700  myFrontBlend = 0.1;
701  if (true && ( (true&&!(((int64(getSpineType())!=2))||(((graph->getInput(nodeidx,1)>=0)==0)))) ) )
702  graph->evalOpParm(myFrontBlend, nodeidx, "frontblend", time, graph->isDirect()?nullptr:depnode);
703  myBackBlend = 0.1;
704  if (true && ( (true&&!(((int64(getSpineType())!=2))||(((graph->getInput(nodeidx,1)>=0)==0)))) ) )
705  graph->evalOpParm(myBackBlend, nodeidx, "backblend", time, graph->isDirect()?nullptr:depnode);
706  myThicknessScale = 1;
707  if (true)
708  graph->evalOpParm(myThicknessScale, nodeidx, "thicknessscale", time, graph->isDirect()?nullptr:depnode);
709  myUseThicknessAttrib = true;
710  if (true && ( (true&&!(((int64(getSpineType())!=2))||(((graph->getInput(nodeidx,1)>=0)==0)))) ) )
711  graph->evalOpParm(myUseThicknessAttrib, nodeidx, "usethicknessattrib", time, graph->isDirect()?nullptr:depnode);
712  myThicknessAttrib = "thickness"_UTsh;
713  if (true && ( (true&&!(((int64(getSpineType())!=2))||(((graph->getInput(nodeidx,1)>=0)==0))||((getUseThicknessAttrib()==0)))) ) )
714  graph->evalOpParm(myThicknessAttrib, nodeidx, "thicknessattrib", time, graph->isDirect()?nullptr:depnode);
715  myUseThicknessRamp = true;
716  if (true)
717  graph->evalOpParm(myUseThicknessRamp, nodeidx, "usethicknessramp", time, graph->isDirect()?nullptr:depnode);
718  myThicknessRamp = UT_Ramp::buildFromDefault("1pos ( 0 ) 1value ( 1 ) 1interp ( catmull-rom ) 2pos ( 1 ) 2value ( 1 ) 2interp ( catmull-rom )");
719  if (true && ( (true&&!(((getUseThicknessRamp()==0)))) ) )
720  graph->evalOpParm(myThicknessRamp, nodeidx, "thicknessramp", time, graph->isDirect()?nullptr:depnode);
721  myUseTwistAttrib = true;
722  if (true && ( (true&&!(((int64(getSpineType())!=2))||(((graph->getInput(nodeidx,1)>=0)==0)))) ) )
723  graph->evalOpParm(myUseTwistAttrib, nodeidx, "usetwistattrib", time, graph->isDirect()?nullptr:depnode);
724  myTwistAttrib = "twist"_UTsh;
725  if (true && ( (true&&!(((int64(getSpineType())!=2))||(((graph->getInput(nodeidx,1)>=0)==0))||((getUseTwistAttrib()==0)))) ) )
726  graph->evalOpParm(myTwistAttrib, nodeidx, "twistattrib", time, graph->isDirect()?nullptr:depnode);
727  myUseTwistRamp = true;
728  if (true)
729  graph->evalOpParm(myUseTwistRamp, nodeidx, "usetwistramp", time, graph->isDirect()?nullptr:depnode);
730  myTwistRamp = UT_Ramp::buildFromDefault("1pos ( 0 ) 1value ( 0.5 ) 1interp ( catmull-rom ) 2pos ( 1 ) 2value ( 0.5 ) 2interp ( catmull-rom )");
731  if (true && ( (true&&!(((getUseTwistRamp()==0)))) ) )
732  graph->evalOpParm(myTwistRamp, nodeidx, "twistramp", time, graph->isDirect()?nullptr:depnode);
733  myTwistScale = 180;
734  if (true)
735  graph->evalOpParm(myTwistScale, nodeidx, "twistscale", time, graph->isDirect()?nullptr:depnode);
736  myUseLocalZScaleAttrib = false;
737  if (true)
738  graph->evalOpParm(myUseLocalZScaleAttrib, nodeidx, "uselocalzscaleattrib", time, graph->isDirect()?nullptr:depnode);
739  myLocalZScaleAttrib = "zscale"_UTsh;
740  if (true && ( (true&&!(((getUseLocalZScaleAttrib()==0)))) ) )
741  graph->evalOpParm(myLocalZScaleAttrib, nodeidx, "localzscaleattrib", time, graph->isDirect()?nullptr:depnode);
742  myUseLocalInsetScaleAttrib = false;
743  if (true)
744  graph->evalOpParm(myUseLocalInsetScaleAttrib, nodeidx, "uselocalinsetscaleattrib", time, graph->isDirect()?nullptr:depnode);
745  myLocalInsetScaleAttrib = "insetscale"_UTsh;
746  if (true && ( (true&&!(((getUseLocalInsetScaleAttrib()==0)))) ) )
747  graph->evalOpParm(myLocalInsetScaleAttrib, nodeidx, "localinsetscaleattrib", time, graph->isDirect()?nullptr:depnode);
748  myUseLocalTwistScaleAttrib = false;
749  if (true)
750  graph->evalOpParm(myUseLocalTwistScaleAttrib, nodeidx, "uselocaltwistattrib", time, graph->isDirect()?nullptr:depnode);
751  myLocalTwistScaleAttrib = "twistscale"_UTsh;
752  if (true && ( (true&&!(((getUseLocalTwistScaleAttrib()==0)))) ) )
753  graph->evalOpParm(myLocalTwistScaleAttrib, nodeidx, "localtwistscaleattrib", time, graph->isDirect()?nullptr:depnode);
754  myUseLocalDivScaleAttrib = false;
755  if (true)
756  graph->evalOpParm(myUseLocalDivScaleAttrib, nodeidx, "uselocaldivsattrib", time, graph->isDirect()?nullptr:depnode);
757  myLocalDivScaleAttrib = "divsscale"_UTsh;
758  if (true && ( (true&&!(((getUseLocalDivScaleAttrib()==0)))) ) )
759  graph->evalOpParm(myLocalDivScaleAttrib, nodeidx, "locadivscaleattrib", time, graph->isDirect()?nullptr:depnode);
760  myUseLocalXAttrib = false;
761  if (true)
762  graph->evalOpParm(myUseLocalXAttrib, nodeidx, "uselocalxattrib", time, graph->isDirect()?nullptr:depnode);
763  myLocalXAttrib = "localx"_UTsh;
764  if (true && ( (true&&!(((getUseLocalXAttrib()==0)))) ) )
765  graph->evalOpParm(myLocalXAttrib, nodeidx, "localxattrib", time, graph->isDirect()?nullptr:depnode);
766  myUseLocalZAttrib = false;
767  if (true)
768  graph->evalOpParm(myUseLocalZAttrib, nodeidx, "uselocalzattirb", time, graph->isDirect()?nullptr:depnode);
769  myLocalZAttrib = "localz"_UTsh;
770  if (true && ( (true&&!(((getUseLocalZAttrib()==0)))) ) )
771  graph->evalOpParm(myLocalZAttrib, nodeidx, "localzattirb", time, graph->isDirect()?nullptr:depnode);
772  myUseLocalCtrAttrib = false;
773  if (true)
774  graph->evalOpParm(myUseLocalCtrAttrib, nodeidx, "uselocalctrattrib", time, graph->isDirect()?nullptr:depnode);
775  myLocalCtrAttrib = "localctr"_UTsh;
776  if (true && ( (true&&!(((getUseLocalCtrAttrib()==0)))) ) )
777  graph->evalOpParm(myLocalCtrAttrib, nodeidx, "localctrattrib", time, graph->isDirect()?nullptr:depnode);
778 
779  }
780 
781 
782  void loadFromOpSubclass(const LoadParms &loadparms) override
783  {
784  buildFromOp(loadparms.graph(), loadparms.nodeIdx(), loadparms.context().getTime(), loadparms.depnode());
785  }
786 
787 
788  void copyFrom(const OP_NodeParms *src) override
789  {
790  *this = *((const SOP_PolyExtrude_2_0Parms *)src);
791  }
792 
793  template <typename T>
794  void
795  doGetParmValue(TempIndex idx, TempIndex instance, T &value) const
796  {
797  if (idx.size() < 1)
798  return;
799  UT_ASSERT(idx.size() == instance.size()+1);
800  if (idx.size() != instance.size()+1)
801  return;
802  switch (idx[0])
803  {
804  case 0:
805  coerceValue(value, myGroup);
806  break;
807  case 1:
808  coerceValue(value, mySplitType);
809  break;
810  case 2:
811  coerceValue(value, myUseSplitGroup);
812  break;
813  case 3:
814  coerceValue(value, mySplitGroup);
815  break;
816  case 4:
817  coerceValue(value, myExtrusionMode);
818  break;
819  case 5:
820  coerceValue(value, myPtNormalSrc);
821  break;
822  case 6:
823  coerceValue(value, myPtNormalAttrib);
824  break;
825  case 7:
826  coerceValue(value, myDist);
827  break;
828  case 8:
829  coerceValue(value, myInset);
830  break;
831  case 9:
832  coerceValue(value, myTwist);
833  break;
834  case 10:
835  coerceValue(value, myDivs);
836  break;
837  case 11:
838  coerceValue(value, mySpineType);
839  break;
840  case 12:
841  coerceValue(value, myXformFront);
842  break;
843  case 13:
844  coerceValue(value, myXformSpace);
845  break;
846  case 14:
847  coerceValue(value, myXformOrder);
848  break;
849  case 15:
850  coerceValue(value, myRotateOrder);
851  break;
852  case 16:
853  coerceValue(value, myTranslate);
854  break;
855  case 17:
856  coerceValue(value, myRotate);
857  break;
858  case 18:
859  coerceValue(value, myScale);
860  break;
861  case 19:
862  coerceValue(value, myShear);
863  break;
864  case 20:
865  coerceValue(value, myPivot);
866  break;
867  case 21:
868  coerceValue(value, myPivotRotate);
869  break;
870  case 22:
871  coerceValue(value, myPreXformOrder);
872  break;
873  case 23:
874  coerceValue(value, myPreXformRotateOrder);
875  break;
876  case 24:
877  coerceValue(value, myPreXformTranslate);
878  break;
879  case 25:
880  coerceValue(value, myPreXformRotate);
881  break;
882  case 26:
883  coerceValue(value, myPreXformScale);
884  break;
885  case 27:
886  coerceValue(value, myPreXformShear);
887  break;
888  case 28:
889  coerceValue(value, myOutputFront);
890  break;
891  case 29:
892  coerceValue(value, myOutputFrontGrp);
893  break;
894  case 30:
895  coerceValue(value, myFrontGrp);
896  break;
897  case 31:
898  coerceValue(value, myOutputBack);
899  break;
900  case 32:
901  coerceValue(value, myOutputBackGrp);
902  break;
903  case 33:
904  coerceValue(value, myBackGrp);
905  break;
906  case 34:
907  coerceValue(value, myOutputSide);
908  break;
909  case 35:
910  coerceValue(value, myOutputSideGrp);
911  break;
912  case 36:
913  coerceValue(value, mySideGrp);
914  break;
915  case 37:
916  coerceValue(value, myOutputFrontSeamGrp);
917  break;
918  case 38:
919  coerceValue(value, myFrontSeamGrp);
920  break;
921  case 39:
922  coerceValue(value, myOutputBackSeamGrp);
923  break;
924  case 40:
925  coerceValue(value, myBackSeamGrp);
926  break;
927  case 41:
928  coerceValue(value, myPreserveGroups);
929  break;
930  case 42:
931  coerceValue(value, myCopyEdgeGroups);
932  break;
933  case 43:
934  coerceValue(value, myCopyPointGroups);
935  break;
936  case 44:
937  coerceValue(value, myCopyPrimitiveGroups);
938  break;
939  case 45:
940  coerceValue(value, myLimitInset);
941  break;
942  case 46:
943  coerceValue(value, myCommonLimit);
944  break;
945  case 47:
946  coerceValue(value, myAddVertexNormals);
947  break;
948  case 48:
949  coerceValue(value, myCuspAngle);
950  break;
951  case 49:
952  coerceValue(value, myCuspFront);
953  break;
954  case 50:
955  coerceValue(value, myCuspBack);
956  break;
957  case 51:
958  coerceValue(value, myGenUVs);
959  break;
960  case 52:
961  coerceValue(value, myUVStyle);
962  break;
963  case 53:
964  coerceValue(value, myUVScaling);
965  break;
966  case 54:
967  coerceValue(value, myFrontMagnitude);
968  break;
969  case 55:
970  coerceValue(value, myBackMagnitude);
971  break;
972  case 56:
973  coerceValue(value, myFrontStiffness);
974  break;
975  case 57:
976  coerceValue(value, myBackStiffness);
977  break;
978  case 58:
979  coerceValue(value, myInterpolation);
980  break;
981  case 59:
982  coerceValue(value, mySpacing);
983  break;
984  case 60:
985  coerceValue(value, myReverseSpineDirection);
986  break;
987  case 61:
988  coerceValue(value, myAxialRotation);
989  break;
990  case 62:
991  coerceValue(value, myFrontBlend);
992  break;
993  case 63:
994  coerceValue(value, myBackBlend);
995  break;
996  case 64:
997  coerceValue(value, myThicknessScale);
998  break;
999  case 65:
1000  coerceValue(value, myUseThicknessAttrib);
1001  break;
1002  case 66:
1003  coerceValue(value, myThicknessAttrib);
1004  break;
1005  case 67:
1006  coerceValue(value, myUseThicknessRamp);
1007  break;
1008  case 68:
1009  coerceValue(value, myThicknessRamp);
1010  break;
1011  case 69:
1012  coerceValue(value, myUseTwistAttrib);
1013  break;
1014  case 70:
1015  coerceValue(value, myTwistAttrib);
1016  break;
1017  case 71:
1018  coerceValue(value, myUseTwistRamp);
1019  break;
1020  case 72:
1021  coerceValue(value, myTwistRamp);
1022  break;
1023  case 73:
1024  coerceValue(value, myTwistScale);
1025  break;
1026  case 74:
1027  coerceValue(value, myUseLocalZScaleAttrib);
1028  break;
1029  case 75:
1030  coerceValue(value, myLocalZScaleAttrib);
1031  break;
1032  case 76:
1033  coerceValue(value, myUseLocalInsetScaleAttrib);
1034  break;
1035  case 77:
1036  coerceValue(value, myLocalInsetScaleAttrib);
1037  break;
1038  case 78:
1039  coerceValue(value, myUseLocalTwistScaleAttrib);
1040  break;
1041  case 79:
1042  coerceValue(value, myLocalTwistScaleAttrib);
1043  break;
1044  case 80:
1045  coerceValue(value, myUseLocalDivScaleAttrib);
1046  break;
1047  case 81:
1048  coerceValue(value, myLocalDivScaleAttrib);
1049  break;
1050  case 82:
1051  coerceValue(value, myUseLocalXAttrib);
1052  break;
1053  case 83:
1054  coerceValue(value, myLocalXAttrib);
1055  break;
1056  case 84:
1057  coerceValue(value, myUseLocalZAttrib);
1058  break;
1059  case 85:
1060  coerceValue(value, myLocalZAttrib);
1061  break;
1062  case 86:
1063  coerceValue(value, myUseLocalCtrAttrib);
1064  break;
1065  case 87:
1066  coerceValue(value, myLocalCtrAttrib);
1067  break;
1068 
1069  }
1070  }
1071 
1072  bool isParmColorRamp(exint idx) const override
1073  {
1074  switch (idx)
1075  {
1076 
1077  }
1078  return false;
1079  }
1080 
1081  void getNestParmValue(TempIndex idx, TempIndex instance, exint &value) const override
1082  { doGetParmValue(idx, instance, value); }
1083  void getNestParmValue(TempIndex idx, TempIndex instance, fpreal &value) const override
1084  { doGetParmValue(idx, instance, value); }
1085  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector2D &value) const override
1086  { doGetParmValue(idx, instance, value); }
1087  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector3D &value) const override
1088  { doGetParmValue(idx, instance, value); }
1089  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector4D &value) const override
1090  { doGetParmValue(idx, instance, value); }
1091  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix2D &value) const override
1092  { doGetParmValue(idx, instance, value); }
1093  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
1094  { doGetParmValue(idx, instance, value); }
1095  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix4D &value) const override
1096  { doGetParmValue(idx, instance, value); }
1097  void getNestParmValue(TempIndex idx, TempIndex instance, UT_StringHolder &value) const override
1098  { doGetParmValue(idx, instance, value); }
1099  void getNestParmValue(TempIndex idx, TempIndex instance, UT_SharedPtr<UT_Ramp> &value) const override
1100  { doGetParmValue(idx, instance, value); }
1101  void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
1102  { doGetParmValue(idx, instance, value); }
1103 
1104  template <typename T>
1105  void
1106  doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
1107  {
1108  if (idx.size() < 1)
1109  return;
1110  UT_ASSERT(idx.size() == instance.size()+1);
1111  if (idx.size() != instance.size()+1)
1112  return;
1113  switch (idx[0])
1114  {
1115  case 0:
1116  coerceValue(myGroup, ( ( value ) ));
1117  break;
1118  case 1:
1119  coerceValue(mySplitType, clampMinValue(0, clampMaxValue(1, value ) ));
1120  break;
1121  case 2:
1122  coerceValue(myUseSplitGroup, ( ( value ) ));
1123  break;
1124  case 3:
1125  coerceValue(mySplitGroup, ( ( value ) ));
1126  break;
1127  case 4:
1128  coerceValue(myExtrusionMode, clampMinValue(0, clampMaxValue(1, value ) ));
1129  break;
1130  case 5:
1131  coerceValue(myPtNormalSrc, clampMinValue(0, clampMaxValue(2, value ) ));
1132  break;
1133  case 6:
1134  coerceValue(myPtNormalAttrib, ( ( value ) ));
1135  break;
1136  case 7:
1137  coerceValue(myDist, ( ( value ) ));
1138  break;
1139  case 8:
1140  coerceValue(myInset, ( ( value ) ));
1141  break;
1142  case 9:
1143  coerceValue(myTwist, ( ( value ) ));
1144  break;
1145  case 10:
1146  coerceValue(myDivs, clampMinValue(1, ( value ) ));
1147  break;
1148  case 11:
1149  coerceValue(mySpineType, clampMinValue(0, clampMaxValue(2, value ) ));
1150  break;
1151  case 12:
1152  coerceValue(myXformFront, ( ( value ) ));
1153  break;
1154  case 13:
1155  coerceValue(myXformSpace, clampMinValue(0, clampMaxValue(1, value ) ));
1156  break;
1157  case 14:
1158  coerceValue(myXformOrder, clampMinValue(0, clampMaxValue(5, value ) ));
1159  break;
1160  case 15:
1161  coerceValue(myRotateOrder, clampMinValue(0, clampMaxValue(5, value ) ));
1162  break;
1163  case 16:
1164  coerceValue(myTranslate, ( ( value ) ));
1165  break;
1166  case 17:
1167  coerceValue(myRotate, ( ( value ) ));
1168  break;
1169  case 18:
1170  coerceValue(myScale, ( ( value ) ));
1171  break;
1172  case 19:
1173  coerceValue(myShear, ( ( value ) ));
1174  break;
1175  case 20:
1176  coerceValue(myPivot, ( ( value ) ));
1177  break;
1178  case 21:
1179  coerceValue(myPivotRotate, ( ( value ) ));
1180  break;
1181  case 22:
1182  coerceValue(myPreXformOrder, clampMinValue(0, clampMaxValue(5, value ) ));
1183  break;
1184  case 23:
1185  coerceValue(myPreXformRotateOrder, clampMinValue(0, clampMaxValue(5, value ) ));
1186  break;
1187  case 24:
1188  coerceValue(myPreXformTranslate, ( ( value ) ));
1189  break;
1190  case 25:
1191  coerceValue(myPreXformRotate, ( ( value ) ));
1192  break;
1193  case 26:
1194  coerceValue(myPreXformScale, ( ( value ) ));
1195  break;
1196  case 27:
1197  coerceValue(myPreXformShear, ( ( value ) ));
1198  break;
1199  case 28:
1200  coerceValue(myOutputFront, ( ( value ) ));
1201  break;
1202  case 29:
1203  coerceValue(myOutputFrontGrp, ( ( value ) ));
1204  break;
1205  case 30:
1206  coerceValue(myFrontGrp, ( ( value ) ));
1207  break;
1208  case 31:
1209  coerceValue(myOutputBack, ( ( value ) ));
1210  break;
1211  case 32:
1212  coerceValue(myOutputBackGrp, ( ( value ) ));
1213  break;
1214  case 33:
1215  coerceValue(myBackGrp, ( ( value ) ));
1216  break;
1217  case 34:
1218  coerceValue(myOutputSide, ( ( value ) ));
1219  break;
1220  case 35:
1221  coerceValue(myOutputSideGrp, ( ( value ) ));
1222  break;
1223  case 36:
1224  coerceValue(mySideGrp, ( ( value ) ));
1225  break;
1226  case 37:
1227  coerceValue(myOutputFrontSeamGrp, ( ( value ) ));
1228  break;
1229  case 38:
1230  coerceValue(myFrontSeamGrp, ( ( value ) ));
1231  break;
1232  case 39:
1233  coerceValue(myOutputBackSeamGrp, ( ( value ) ));
1234  break;
1235  case 40:
1236  coerceValue(myBackSeamGrp, ( ( value ) ));
1237  break;
1238  case 41:
1239  coerceValue(myPreserveGroups, ( ( value ) ));
1240  break;
1241  case 42:
1242  coerceValue(myCopyEdgeGroups, ( ( value ) ));
1243  break;
1244  case 43:
1245  coerceValue(myCopyPointGroups, ( ( value ) ));
1246  break;
1247  case 44:
1248  coerceValue(myCopyPrimitiveGroups, ( ( value ) ));
1249  break;
1250  case 45:
1251  coerceValue(myLimitInset, ( ( value ) ));
1252  break;
1253  case 46:
1254  coerceValue(myCommonLimit, ( ( value ) ));
1255  break;
1256  case 47:
1257  coerceValue(myAddVertexNormals, ( ( value ) ));
1258  break;
1259  case 48:
1260  coerceValue(myCuspAngle, clampMinValue(0, clampMaxValue(180, value ) ));
1261  break;
1262  case 49:
1263  coerceValue(myCuspFront, ( ( value ) ));
1264  break;
1265  case 50:
1266  coerceValue(myCuspBack, ( ( value ) ));
1267  break;
1268  case 51:
1269  coerceValue(myGenUVs, ( ( value ) ));
1270  break;
1271  case 52:
1272  coerceValue(myUVStyle, clampMinValue(0, clampMaxValue(2, value ) ));
1273  break;
1274  case 53:
1275  coerceValue(myUVScaling, clampMinValue(0, clampMaxValue(2, value ) ));
1276  break;
1277  case 54:
1278  coerceValue(myFrontMagnitude, clampMinValue(0.0001, ( value ) ));
1279  break;
1280  case 55:
1281  coerceValue(myBackMagnitude, clampMinValue(0.0001, ( value ) ));
1282  break;
1283  case 56:
1284  coerceValue(myFrontStiffness, clampMinValue(0, clampMaxValue(1, value ) ));
1285  break;
1286  case 57:
1287  coerceValue(myBackStiffness, clampMinValue(0, clampMaxValue(1, value ) ));
1288  break;
1289  case 58:
1290  coerceValue(myInterpolation, clampMinValue(0, clampMaxValue(1, value ) ));
1291  break;
1292  case 59:
1293  coerceValue(mySpacing, clampMinValue(0, clampMaxValue(1, value ) ));
1294  break;
1295  case 60:
1296  coerceValue(myReverseSpineDirection, ( ( value ) ));
1297  break;
1298  case 61:
1299  coerceValue(myAxialRotation, clampMinValue(0, clampMaxValue(360, value ) ));
1300  break;
1301  case 62:
1302  coerceValue(myFrontBlend, clampMinValue(0, clampMaxValue(1, value ) ));
1303  break;
1304  case 63:
1305  coerceValue(myBackBlend, clampMinValue(0, clampMaxValue(1, value ) ));
1306  break;
1307  case 64:
1308  coerceValue(myThicknessScale, ( ( value ) ));
1309  break;
1310  case 65:
1311  coerceValue(myUseThicknessAttrib, ( ( value ) ));
1312  break;
1313  case 66:
1314  coerceValue(myThicknessAttrib, ( ( value ) ));
1315  break;
1316  case 67:
1317  coerceValue(myUseThicknessRamp, ( ( value ) ));
1318  break;
1319  case 68:
1320  coerceValue(myThicknessRamp, clampMinValue(1, ( value ) ));
1321  break;
1322  case 69:
1323  coerceValue(myUseTwistAttrib, ( ( value ) ));
1324  break;
1325  case 70:
1326  coerceValue(myTwistAttrib, ( ( value ) ));
1327  break;
1328  case 71:
1329  coerceValue(myUseTwistRamp, ( ( value ) ));
1330  break;
1331  case 72:
1332  coerceValue(myTwistRamp, clampMinValue(1, ( value ) ));
1333  break;
1334  case 73:
1335  coerceValue(myTwistScale, ( ( value ) ));
1336  break;
1337  case 74:
1338  coerceValue(myUseLocalZScaleAttrib, ( ( value ) ));
1339  break;
1340  case 75:
1341  coerceValue(myLocalZScaleAttrib, ( ( value ) ));
1342  break;
1343  case 76:
1344  coerceValue(myUseLocalInsetScaleAttrib, ( ( value ) ));
1345  break;
1346  case 77:
1347  coerceValue(myLocalInsetScaleAttrib, ( ( value ) ));
1348  break;
1349  case 78:
1350  coerceValue(myUseLocalTwistScaleAttrib, ( ( value ) ));
1351  break;
1352  case 79:
1353  coerceValue(myLocalTwistScaleAttrib, ( ( value ) ));
1354  break;
1355  case 80:
1356  coerceValue(myUseLocalDivScaleAttrib, ( ( value ) ));
1357  break;
1358  case 81:
1359  coerceValue(myLocalDivScaleAttrib, ( ( value ) ));
1360  break;
1361  case 82:
1362  coerceValue(myUseLocalXAttrib, ( ( value ) ));
1363  break;
1364  case 83:
1365  coerceValue(myLocalXAttrib, ( ( value ) ));
1366  break;
1367  case 84:
1368  coerceValue(myUseLocalZAttrib, ( ( value ) ));
1369  break;
1370  case 85:
1371  coerceValue(myLocalZAttrib, ( ( value ) ));
1372  break;
1373  case 86:
1374  coerceValue(myUseLocalCtrAttrib, ( ( value ) ));
1375  break;
1376  case 87:
1377  coerceValue(myLocalCtrAttrib, ( ( value ) ));
1378  break;
1379 
1380  }
1381  }
1382 
1383  void setNestParmValue(TempIndex idx, TempIndex instance, const exint &value) override
1384  { doSetParmValue(idx, instance, value); }
1385  void setNestParmValue(TempIndex idx, TempIndex instance, const fpreal &value) override
1386  { doSetParmValue(idx, instance, value); }
1387  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector2D &value) override
1388  { doSetParmValue(idx, instance, value); }
1389  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector3D &value) override
1390  { doSetParmValue(idx, instance, value); }
1391  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector4D &value) override
1392  { doSetParmValue(idx, instance, value); }
1393  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix2D &value) override
1394  { doSetParmValue(idx, instance, value); }
1395  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix3D &value) override
1396  { doSetParmValue(idx, instance, value); }
1397  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix4D &value) override
1398  { doSetParmValue(idx, instance, value); }
1399  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_StringHolder &value) override
1400  { doSetParmValue(idx, instance, value); }
1401  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_SharedPtr<UT_Ramp> &value) override
1402  { doSetParmValue(idx, instance, value); }
1403  void setNestParmValue(TempIndex idx, TempIndex instance, const PRM_DataItemHandle &value) override
1404  { doSetParmValue(idx, instance, value); }
1405 
1406  exint getNestNumParms(TempIndex idx) const override
1407  {
1408  if (idx.size() == 0)
1409  return 88;
1410  switch (idx[0])
1411  {
1412 
1413  }
1414  // Invalid
1415  return 0;
1416  }
1417 
1418  const char *getNestParmName(TempIndex fieldnum) const override
1419  {
1420  if (fieldnum.size() < 1)
1421  return 0;
1422  switch (fieldnum[0])
1423  {
1424  case 0:
1425  return "group";
1426  case 1:
1427  return "splittype";
1428  case 2:
1429  return "usesplitgroup";
1430  case 3:
1431  return "splitgroup";
1432  case 4:
1433  return "extrusionmode";
1434  case 5:
1435  return "ptnormalsrc";
1436  case 6:
1437  return "ptnormalattrib";
1438  case 7:
1439  return "dist";
1440  case 8:
1441  return "inset";
1442  case 9:
1443  return "twist";
1444  case 10:
1445  return "divs";
1446  case 11:
1447  return "spinetype";
1448  case 12:
1449  return "xformfront";
1450  case 13:
1451  return "xformspace";
1452  case 14:
1453  return "rst";
1454  case 15:
1455  return "xyz";
1456  case 16:
1457  return "translate";
1458  case 17:
1459  return "rotate";
1460  case 18:
1461  return "scale";
1462  case 19:
1463  return "shear";
1464  case 20:
1465  return "pivot";
1466  case 21:
1467  return "pivotrotate";
1468  case 22:
1469  return "prexform_rst";
1470  case 23:
1471  return "prexform_xyz";
1472  case 24:
1473  return "prexform_translate";
1474  case 25:
1475  return "prexform_rotate";
1476  case 26:
1477  return "prexform_scale";
1478  case 27:
1479  return "prexform_shear";
1480  case 28:
1481  return "outputfront";
1482  case 29:
1483  return "outputfrontgrp";
1484  case 30:
1485  return "frontgrp";
1486  case 31:
1487  return "outputback";
1488  case 32:
1489  return "outputbackgrp";
1490  case 33:
1491  return "backgrp";
1492  case 34:
1493  return "outputside";
1494  case 35:
1495  return "outputsidegrp";
1496  case 36:
1497  return "sidegrp";
1498  case 37:
1499  return "outputfrontseamgrp";
1500  case 38:
1501  return "frontseamgrp";
1502  case 39:
1503  return "outputbackseamgrp";
1504  case 40:
1505  return "backseamgrp";
1506  case 41:
1507  return "preservegroups";
1508  case 42:
1509  return "copyedgegroups";
1510  case 43:
1511  return "copypointgroups";
1512  case 44:
1513  return "copyprimitivegroups";
1514  case 45:
1515  return "limitinset";
1516  case 46:
1517  return "commonlimit";
1518  case 47:
1519  return "addvertexnomrals";
1520  case 48:
1521  return "cuspangle";
1522  case 49:
1523  return "cuspfront";
1524  case 50:
1525  return "cuspback";
1526  case 51:
1527  return "genuvs";
1528  case 52:
1529  return "uvstyle";
1530  case 53:
1531  return "uvscaling";
1532  case 54:
1533  return "frontmagnitude";
1534  case 55:
1535  return "backmagnitude";
1536  case 56:
1537  return "frontstiffness";
1538  case 57:
1539  return "backstiffness";
1540  case 58:
1541  return "interpolation";
1542  case 59:
1543  return "spacing";
1544  case 60:
1545  return "reversespinedirection";
1546  case 61:
1547  return "axialrotation";
1548  case 62:
1549  return "frontblend";
1550  case 63:
1551  return "backblend";
1552  case 64:
1553  return "thicknessscale";
1554  case 65:
1555  return "usethicknessattrib";
1556  case 66:
1557  return "thicknessattrib";
1558  case 67:
1559  return "usethicknessramp";
1560  case 68:
1561  return "thicknessramp";
1562  case 69:
1563  return "usetwistattrib";
1564  case 70:
1565  return "twistattrib";
1566  case 71:
1567  return "usetwistramp";
1568  case 72:
1569  return "twistramp";
1570  case 73:
1571  return "twistscale";
1572  case 74:
1573  return "uselocalzscaleattrib";
1574  case 75:
1575  return "localzscaleattrib";
1576  case 76:
1577  return "uselocalinsetscaleattrib";
1578  case 77:
1579  return "localinsetscaleattrib";
1580  case 78:
1581  return "uselocaltwistattrib";
1582  case 79:
1583  return "localtwistscaleattrib";
1584  case 80:
1585  return "uselocaldivsattrib";
1586  case 81:
1587  return "locadivscaleattrib";
1588  case 82:
1589  return "uselocalxattrib";
1590  case 83:
1591  return "localxattrib";
1592  case 84:
1593  return "uselocalzattirb";
1594  case 85:
1595  return "localzattirb";
1596  case 86:
1597  return "uselocalctrattrib";
1598  case 87:
1599  return "localctrattrib";
1600 
1601  }
1602  return 0;
1603  }
1604 
1605  ParmType getNestParmType(TempIndex fieldnum) const override
1606  {
1607  if (fieldnum.size() < 1)
1608  return PARM_UNSUPPORTED;
1609  switch (fieldnum[0])
1610  {
1611  case 0:
1612  return PARM_STRING;
1613  case 1:
1614  return PARM_INTEGER;
1615  case 2:
1616  return PARM_INTEGER;
1617  case 3:
1618  return PARM_STRING;
1619  case 4:
1620  return PARM_INTEGER;
1621  case 5:
1622  return PARM_INTEGER;
1623  case 6:
1624  return PARM_STRING;
1625  case 7:
1626  return PARM_FLOAT;
1627  case 8:
1628  return PARM_FLOAT;
1629  case 9:
1630  return PARM_FLOAT;
1631  case 10:
1632  return PARM_INTEGER;
1633  case 11:
1634  return PARM_INTEGER;
1635  case 12:
1636  return PARM_INTEGER;
1637  case 13:
1638  return PARM_INTEGER;
1639  case 14:
1640  return PARM_INTEGER;
1641  case 15:
1642  return PARM_INTEGER;
1643  case 16:
1644  return PARM_VECTOR3;
1645  case 17:
1646  return PARM_VECTOR3;
1647  case 18:
1648  return PARM_VECTOR3;
1649  case 19:
1650  return PARM_VECTOR3;
1651  case 20:
1652  return PARM_VECTOR3;
1653  case 21:
1654  return PARM_VECTOR3;
1655  case 22:
1656  return PARM_INTEGER;
1657  case 23:
1658  return PARM_INTEGER;
1659  case 24:
1660  return PARM_VECTOR3;
1661  case 25:
1662  return PARM_VECTOR3;
1663  case 26:
1664  return PARM_VECTOR3;
1665  case 27:
1666  return PARM_VECTOR3;
1667  case 28:
1668  return PARM_INTEGER;
1669  case 29:
1670  return PARM_INTEGER;
1671  case 30:
1672  return PARM_STRING;
1673  case 31:
1674  return PARM_INTEGER;
1675  case 32:
1676  return PARM_INTEGER;
1677  case 33:
1678  return PARM_STRING;
1679  case 34:
1680  return PARM_INTEGER;
1681  case 35:
1682  return PARM_INTEGER;
1683  case 36:
1684  return PARM_STRING;
1685  case 37:
1686  return PARM_INTEGER;
1687  case 38:
1688  return PARM_STRING;
1689  case 39:
1690  return PARM_INTEGER;
1691  case 40:
1692  return PARM_STRING;
1693  case 41:
1694  return PARM_INTEGER;
1695  case 42:
1696  return PARM_INTEGER;
1697  case 43:
1698  return PARM_INTEGER;
1699  case 44:
1700  return PARM_INTEGER;
1701  case 45:
1702  return PARM_INTEGER;
1703  case 46:
1704  return PARM_INTEGER;
1705  case 47:
1706  return PARM_INTEGER;
1707  case 48:
1708  return PARM_FLOAT;
1709  case 49:
1710  return PARM_INTEGER;
1711  case 50:
1712  return PARM_INTEGER;
1713  case 51:
1714  return PARM_INTEGER;
1715  case 52:
1716  return PARM_INTEGER;
1717  case 53:
1718  return PARM_INTEGER;
1719  case 54:
1720  return PARM_FLOAT;
1721  case 55:
1722  return PARM_FLOAT;
1723  case 56:
1724  return PARM_FLOAT;
1725  case 57:
1726  return PARM_FLOAT;
1727  case 58:
1728  return PARM_INTEGER;
1729  case 59:
1730  return PARM_INTEGER;
1731  case 60:
1732  return PARM_INTEGER;
1733  case 61:
1734  return PARM_FLOAT;
1735  case 62:
1736  return PARM_FLOAT;
1737  case 63:
1738  return PARM_FLOAT;
1739  case 64:
1740  return PARM_FLOAT;
1741  case 65:
1742  return PARM_INTEGER;
1743  case 66:
1744  return PARM_STRING;
1745  case 67:
1746  return PARM_INTEGER;
1747  case 68:
1748  return PARM_RAMP;
1749  case 69:
1750  return PARM_INTEGER;
1751  case 70:
1752  return PARM_STRING;
1753  case 71:
1754  return PARM_INTEGER;
1755  case 72:
1756  return PARM_RAMP;
1757  case 73:
1758  return PARM_FLOAT;
1759  case 74:
1760  return PARM_INTEGER;
1761  case 75:
1762  return PARM_STRING;
1763  case 76:
1764  return PARM_INTEGER;
1765  case 77:
1766  return PARM_STRING;
1767  case 78:
1768  return PARM_INTEGER;
1769  case 79:
1770  return PARM_STRING;
1771  case 80:
1772  return PARM_INTEGER;
1773  case 81:
1774  return PARM_STRING;
1775  case 82:
1776  return PARM_INTEGER;
1777  case 83:
1778  return PARM_STRING;
1779  case 84:
1780  return PARM_INTEGER;
1781  case 85:
1782  return PARM_STRING;
1783  case 86:
1784  return PARM_INTEGER;
1785  case 87:
1786  return PARM_STRING;
1787 
1788  }
1789  return PARM_UNSUPPORTED;
1790  }
1791 
1792  // Boiler plate to load individual types.
1793  static void loadData(UT_IStream &is, int64 &v)
1794  { is.bread(&v, 1); }
1795  static void loadData(UT_IStream &is, bool &v)
1796  { int64 iv; is.bread(&iv, 1); v = iv; }
1797  static void loadData(UT_IStream &is, fpreal64 &v)
1798  { is.bread<fpreal64>(&v, 1); }
1799  static void loadData(UT_IStream &is, UT_Vector2D &v)
1800  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1); }
1801  static void loadData(UT_IStream &is, UT_Vector3D &v)
1802  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
1803  is.bread<fpreal64>(&v.z(), 1); }
1804  static void loadData(UT_IStream &is, UT_Vector4D &v)
1805  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
1806  is.bread<fpreal64>(&v.z(), 1); is.bread<fpreal64>(&v.w(), 1); }
1807  static void loadData(UT_IStream &is, UT_Matrix2D &v)
1808  { for (int r = 0; r < 2; r++) for (int c = 0; c < 2; c++) is.bread<fpreal64>(&v(r, c), 1); }
1809  static void loadData(UT_IStream &is, UT_Matrix3D &v)
1810  { for (int r = 0; r < 3; r++) for (int c = 0; c < 3; c++) is.bread<fpreal64>(&v(r, c), 1); }
1811  static void loadData(UT_IStream &is, UT_Matrix4D &v)
1812  { for (int r = 0; r < 4; r++) for (int c = 0; c < 4; c++) is.bread<fpreal64>(&v(r, c), 1); }
1813  static void loadData(UT_IStream &is, UT_Vector2I &v)
1814  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1); }
1815  static void loadData(UT_IStream &is, UT_Vector3I &v)
1816  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
1817  is.bread<int64>(&v.z(), 1); }
1818  static void loadData(UT_IStream &is, UT_Vector4I &v)
1819  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
1820  is.bread<int64>(&v.z(), 1); is.bread<int64>(&v.w(), 1); }
1822  { is.bread(v); }
1824  { UT_StringHolder rampdata;
1825  loadData(is, rampdata);
1826  if (rampdata.isstring())
1827  {
1828  v.reset(new UT_Ramp());
1829  UT_IStream istr((const char *) rampdata, rampdata.length(), UT_ISTREAM_ASCII);
1830  v->load(istr);
1831  }
1832  else v.reset();
1833  }
1836  loadData(is, data);
1837  if (data.isstring())
1838  {
1839  // Find the data type.
1840  const char *colon = UT_StringWrap(data).findChar(':');
1841  if (colon)
1842  {
1843  int typelen = colon - data.buffer();
1845  type.strncpy(data.buffer(), typelen);
1846  UT_IStream istr(((const char *) data) + typelen + 1, data.length() - (typelen + 1), UT_ISTREAM_BINARY);
1847 
1848  v = PRM_DataFactory::parseBinary(type.buffer(), istr);
1849  }
1850  }
1851  else v.reset();
1852  }
1853 
1854  static void saveData(std::ostream &os, int64 v)
1855  { UTwrite(os, &v); }
1856  static void saveData(std::ostream &os, bool v)
1857  { int64 iv = v; UTwrite(os, &iv); }
1858  static void saveData(std::ostream &os, fpreal64 v)
1859  { UTwrite<fpreal64>(os, &v); }
1860  static void saveData(std::ostream &os, UT_Vector2D v)
1861  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y()); }
1862  static void saveData(std::ostream &os, UT_Vector3D v)
1863  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
1864  UTwrite<fpreal64>(os, &v.z()); }
1865  static void saveData(std::ostream &os, UT_Vector4D v)
1866  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
1867  UTwrite<fpreal64>(os, &v.z()); UTwrite<fpreal64>(os, &v.w()); }
1868  static void saveData(std::ostream &os, UT_Matrix2D v)
1870  static void saveData(std::ostream &os, UT_Matrix3D v)
1872  static void saveData(std::ostream &os, UT_Matrix4D v)
1874  static void saveData(std::ostream &os, UT_StringHolder s)
1875  { UT_StringWrap(s).saveBinary(os); }
1876  static void saveData(std::ostream &os, UT_SharedPtr<UT_Ramp> s)
1878  UT_OStringStream ostr;
1879  if (s) s->save(ostr);
1880  result = ostr.str();
1881  saveData(os, result);
1882  }
1883  static void saveData(std::ostream &os, PRM_DataItemHandle s)
1885  UT_OStringStream ostr;
1886  if (s)
1887  {
1888  ostr << s->getDataTypeToken();
1889  ostr << ":";
1890  s->saveBinary(ostr);
1891  }
1892  result = ostr.str();
1893  saveData(os, result);
1894  }
1895 
1896 
1897  void save(std::ostream &os) const
1898  {
1899  int32 v = version();
1900  UTwrite(os, &v);
1901  saveData(os, myGroup);
1902  saveData(os, mySplitType);
1903  saveData(os, myUseSplitGroup);
1904  saveData(os, mySplitGroup);
1905  saveData(os, myExtrusionMode);
1906  saveData(os, myPtNormalSrc);
1907  saveData(os, myPtNormalAttrib);
1908  saveData(os, myDist);
1909  saveData(os, myInset);
1910  saveData(os, myTwist);
1911  saveData(os, myDivs);
1912  saveData(os, mySpineType);
1913  saveData(os, myXformFront);
1914  saveData(os, myXformSpace);
1915  saveData(os, myXformOrder);
1916  saveData(os, myRotateOrder);
1917  saveData(os, myTranslate);
1918  saveData(os, myRotate);
1919  saveData(os, myScale);
1920  saveData(os, myShear);
1921  saveData(os, myPivot);
1922  saveData(os, myPivotRotate);
1923  saveData(os, myPreXformOrder);
1924  saveData(os, myPreXformRotateOrder);
1925  saveData(os, myPreXformTranslate);
1926  saveData(os, myPreXformRotate);
1927  saveData(os, myPreXformScale);
1928  saveData(os, myPreXformShear);
1929  saveData(os, myOutputFront);
1930  saveData(os, myOutputFrontGrp);
1931  saveData(os, myFrontGrp);
1932  saveData(os, myOutputBack);
1933  saveData(os, myOutputBackGrp);
1934  saveData(os, myBackGrp);
1935  saveData(os, myOutputSide);
1936  saveData(os, myOutputSideGrp);
1937  saveData(os, mySideGrp);
1938  saveData(os, myOutputFrontSeamGrp);
1939  saveData(os, myFrontSeamGrp);
1940  saveData(os, myOutputBackSeamGrp);
1941  saveData(os, myBackSeamGrp);
1942  saveData(os, myPreserveGroups);
1943  saveData(os, myCopyEdgeGroups);
1944  saveData(os, myCopyPointGroups);
1945  saveData(os, myCopyPrimitiveGroups);
1946  saveData(os, myLimitInset);
1947  saveData(os, myCommonLimit);
1948  saveData(os, myAddVertexNormals);
1949  saveData(os, myCuspAngle);
1950  saveData(os, myCuspFront);
1951  saveData(os, myCuspBack);
1952  saveData(os, myGenUVs);
1953  saveData(os, myUVStyle);
1954  saveData(os, myUVScaling);
1955  saveData(os, myFrontMagnitude);
1956  saveData(os, myBackMagnitude);
1957  saveData(os, myFrontStiffness);
1958  saveData(os, myBackStiffness);
1959  saveData(os, myInterpolation);
1960  saveData(os, mySpacing);
1961  saveData(os, myReverseSpineDirection);
1962  saveData(os, myAxialRotation);
1963  saveData(os, myFrontBlend);
1964  saveData(os, myBackBlend);
1965  saveData(os, myThicknessScale);
1966  saveData(os, myUseThicknessAttrib);
1967  saveData(os, myThicknessAttrib);
1968  saveData(os, myUseThicknessRamp);
1969  saveData(os, myThicknessRamp);
1970  saveData(os, myUseTwistAttrib);
1971  saveData(os, myTwistAttrib);
1972  saveData(os, myUseTwistRamp);
1973  saveData(os, myTwistRamp);
1974  saveData(os, myTwistScale);
1975  saveData(os, myUseLocalZScaleAttrib);
1976  saveData(os, myLocalZScaleAttrib);
1977  saveData(os, myUseLocalInsetScaleAttrib);
1978  saveData(os, myLocalInsetScaleAttrib);
1979  saveData(os, myUseLocalTwistScaleAttrib);
1980  saveData(os, myLocalTwistScaleAttrib);
1981  saveData(os, myUseLocalDivScaleAttrib);
1982  saveData(os, myLocalDivScaleAttrib);
1983  saveData(os, myUseLocalXAttrib);
1984  saveData(os, myLocalXAttrib);
1985  saveData(os, myUseLocalZAttrib);
1986  saveData(os, myLocalZAttrib);
1987  saveData(os, myUseLocalCtrAttrib);
1988  saveData(os, myLocalCtrAttrib);
1989 
1990  }
1991 
1992  bool load(UT_IStream &is)
1993  {
1994  int32 v;
1995  is.bread(&v, 1);
1996  if (version() != v)
1997  {
1998  // Fail incompatible versions
1999  return false;
2000  }
2001  loadData(is, myGroup);
2002  loadData(is, mySplitType);
2003  loadData(is, myUseSplitGroup);
2004  loadData(is, mySplitGroup);
2005  loadData(is, myExtrusionMode);
2006  loadData(is, myPtNormalSrc);
2007  loadData(is, myPtNormalAttrib);
2008  loadData(is, myDist);
2009  loadData(is, myInset);
2010  loadData(is, myTwist);
2011  loadData(is, myDivs);
2012  loadData(is, mySpineType);
2013  loadData(is, myXformFront);
2014  loadData(is, myXformSpace);
2015  loadData(is, myXformOrder);
2016  loadData(is, myRotateOrder);
2017  loadData(is, myTranslate);
2018  loadData(is, myRotate);
2019  loadData(is, myScale);
2020  loadData(is, myShear);
2021  loadData(is, myPivot);
2022  loadData(is, myPivotRotate);
2023  loadData(is, myPreXformOrder);
2024  loadData(is, myPreXformRotateOrder);
2025  loadData(is, myPreXformTranslate);
2026  loadData(is, myPreXformRotate);
2027  loadData(is, myPreXformScale);
2028  loadData(is, myPreXformShear);
2029  loadData(is, myOutputFront);
2030  loadData(is, myOutputFrontGrp);
2031  loadData(is, myFrontGrp);
2032  loadData(is, myOutputBack);
2033  loadData(is, myOutputBackGrp);
2034  loadData(is, myBackGrp);
2035  loadData(is, myOutputSide);
2036  loadData(is, myOutputSideGrp);
2037  loadData(is, mySideGrp);
2038  loadData(is, myOutputFrontSeamGrp);
2039  loadData(is, myFrontSeamGrp);
2040  loadData(is, myOutputBackSeamGrp);
2041  loadData(is, myBackSeamGrp);
2042  loadData(is, myPreserveGroups);
2043  loadData(is, myCopyEdgeGroups);
2044  loadData(is, myCopyPointGroups);
2045  loadData(is, myCopyPrimitiveGroups);
2046  loadData(is, myLimitInset);
2047  loadData(is, myCommonLimit);
2048  loadData(is, myAddVertexNormals);
2049  loadData(is, myCuspAngle);
2050  loadData(is, myCuspFront);
2051  loadData(is, myCuspBack);
2052  loadData(is, myGenUVs);
2053  loadData(is, myUVStyle);
2054  loadData(is, myUVScaling);
2055  loadData(is, myFrontMagnitude);
2056  loadData(is, myBackMagnitude);
2057  loadData(is, myFrontStiffness);
2058  loadData(is, myBackStiffness);
2059  loadData(is, myInterpolation);
2060  loadData(is, mySpacing);
2061  loadData(is, myReverseSpineDirection);
2062  loadData(is, myAxialRotation);
2063  loadData(is, myFrontBlend);
2064  loadData(is, myBackBlend);
2065  loadData(is, myThicknessScale);
2066  loadData(is, myUseThicknessAttrib);
2067  loadData(is, myThicknessAttrib);
2068  loadData(is, myUseThicknessRamp);
2069  loadData(is, myThicknessRamp);
2070  loadData(is, myUseTwistAttrib);
2071  loadData(is, myTwistAttrib);
2072  loadData(is, myUseTwistRamp);
2073  loadData(is, myTwistRamp);
2074  loadData(is, myTwistScale);
2075  loadData(is, myUseLocalZScaleAttrib);
2076  loadData(is, myLocalZScaleAttrib);
2077  loadData(is, myUseLocalInsetScaleAttrib);
2078  loadData(is, myLocalInsetScaleAttrib);
2079  loadData(is, myUseLocalTwistScaleAttrib);
2080  loadData(is, myLocalTwistScaleAttrib);
2081  loadData(is, myUseLocalDivScaleAttrib);
2082  loadData(is, myLocalDivScaleAttrib);
2083  loadData(is, myUseLocalXAttrib);
2084  loadData(is, myLocalXAttrib);
2085  loadData(is, myUseLocalZAttrib);
2086  loadData(is, myLocalZAttrib);
2087  loadData(is, myUseLocalCtrAttrib);
2088  loadData(is, myLocalCtrAttrib);
2089 
2090  return true;
2091  }
2092 
2093  const UT_StringHolder & getGroup() const { return myGroup; }
2094  void setGroup(const UT_StringHolder & val) { myGroup = val; }
2096  {
2097  SOP_Node *thissop = cookparms.getNode();
2098  if (!thissop) return getGroup();
2100  OP_Utils::evalOpParm(result, thissop, "group", cookparms.getCookTime(), 0);
2101  return result;
2102  }
2103  SplitType getSplitType() const { return SplitType(mySplitType); }
2104  void setSplitType(SplitType val) { mySplitType = int64(val); }
2106  {
2107  SOP_Node *thissop = cookparms.getNode();
2108  if (!thissop) return getSplitType();
2109  int64 result;
2110  OP_Utils::evalOpParm(result, thissop, "splittype", cookparms.getCookTime(), 0);
2111  return SplitType(result);
2112  }
2113  bool getUseSplitGroup() const { return myUseSplitGroup; }
2114  void setUseSplitGroup(bool val) { myUseSplitGroup = val; }
2115  bool opUseSplitGroup(const SOP_NodeVerb::CookParms &cookparms) const
2116  {
2117  SOP_Node *thissop = cookparms.getNode();
2118  if (!thissop) return getUseSplitGroup();
2119  bool result;
2120  OP_Utils::evalOpParm(result, thissop, "usesplitgroup", cookparms.getCookTime(), 0);
2121  return result;
2122  }
2123  const UT_StringHolder & getSplitGroup() const { return mySplitGroup; }
2124  void setSplitGroup(const UT_StringHolder & val) { mySplitGroup = val; }
2126  {
2127  SOP_Node *thissop = cookparms.getNode();
2128  if (!thissop) return getSplitGroup();
2130  OP_Utils::evalOpParm(result, thissop, "splitgroup", cookparms.getCookTime(), 0);
2131  return result;
2132  }
2133  ExtrusionMode getExtrusionMode() const { return ExtrusionMode(myExtrusionMode); }
2134  void setExtrusionMode(ExtrusionMode val) { myExtrusionMode = int64(val); }
2136  {
2137  SOP_Node *thissop = cookparms.getNode();
2138  if (!thissop) return getExtrusionMode();
2139  int64 result;
2140  OP_Utils::evalOpParm(result, thissop, "extrusionmode", cookparms.getCookTime(), 0);
2141  return ExtrusionMode(result);
2142  }
2143  PtNormalSrc getPtNormalSrc() const { return PtNormalSrc(myPtNormalSrc); }
2144  void setPtNormalSrc(PtNormalSrc val) { myPtNormalSrc = int64(val); }
2146  {
2147  SOP_Node *thissop = cookparms.getNode();
2148  if (!thissop) return getPtNormalSrc();
2149  int64 result;
2150  OP_Utils::evalOpParm(result, thissop, "ptnormalsrc", cookparms.getCookTime(), 0);
2151  return PtNormalSrc(result);
2152  }
2153  const UT_StringHolder & getPtNormalAttrib() const { return myPtNormalAttrib; }
2154  void setPtNormalAttrib(const UT_StringHolder & val) { myPtNormalAttrib = val; }
2156  {
2157  SOP_Node *thissop = cookparms.getNode();
2158  if (!thissop) return getPtNormalAttrib();
2160  OP_Utils::evalOpParm(result, thissop, "ptnormalattrib", cookparms.getCookTime(), 0);
2161  return result;
2162  }
2163  fpreal64 getDist() const { return myDist; }
2164  void setDist(fpreal64 val) { myDist = val; }
2165  fpreal64 opDist(const SOP_NodeVerb::CookParms &cookparms) const
2166  {
2167  SOP_Node *thissop = cookparms.getNode();
2168  if (!thissop) return getDist();
2169  fpreal64 result;
2170  OP_Utils::evalOpParm(result, thissop, "dist", cookparms.getCookTime(), 0);
2171  return result;
2172  }
2173  fpreal64 getInset() const { return myInset; }
2174  void setInset(fpreal64 val) { myInset = val; }
2175  fpreal64 opInset(const SOP_NodeVerb::CookParms &cookparms) const
2176  {
2177  SOP_Node *thissop = cookparms.getNode();
2178  if (!thissop) return getInset();
2179  fpreal64 result;
2180  OP_Utils::evalOpParm(result, thissop, "inset", cookparms.getCookTime(), 0);
2181  return result;
2182  }
2183  fpreal64 getTwist() const { return myTwist; }
2184  void setTwist(fpreal64 val) { myTwist = val; }
2185  fpreal64 opTwist(const SOP_NodeVerb::CookParms &cookparms) const
2186  {
2187  SOP_Node *thissop = cookparms.getNode();
2188  if (!thissop) return getTwist();
2189  fpreal64 result;
2190  OP_Utils::evalOpParm(result, thissop, "twist", cookparms.getCookTime(), 0);
2191  return result;
2192  }
2193  int64 getDivs() const { return myDivs; }
2194  void setDivs(int64 val) { myDivs = val; }
2195  int64 opDivs(const SOP_NodeVerb::CookParms &cookparms) const
2196  {
2197  SOP_Node *thissop = cookparms.getNode();
2198  if (!thissop) return getDivs();
2199  int64 result;
2200  OP_Utils::evalOpParm(result, thissop, "divs", cookparms.getCookTime(), 0);
2201  return result;
2202  }
2203  SpineType getSpineType() const { return SpineType(mySpineType); }
2204  void setSpineType(SpineType val) { mySpineType = int64(val); }
2206  {
2207  SOP_Node *thissop = cookparms.getNode();
2208  if (!thissop) return getSpineType();
2209  int64 result;
2210  OP_Utils::evalOpParm(result, thissop, "spinetype", cookparms.getCookTime(), 0);
2211  return SpineType(result);
2212  }
2213  bool getXformFront() const { return myXformFront; }
2214  void setXformFront(bool val) { myXformFront = val; }
2215  bool opXformFront(const SOP_NodeVerb::CookParms &cookparms) const
2216  {
2217  SOP_Node *thissop = cookparms.getNode();
2218  if (!thissop) return getXformFront();
2219  bool result;
2220  OP_Utils::evalOpParm(result, thissop, "xformfront", cookparms.getCookTime(), 0);
2221  return result;
2222  }
2223  XformSpace getXformSpace() const { return XformSpace(myXformSpace); }
2224  void setXformSpace(XformSpace val) { myXformSpace = int64(val); }
2226  {
2227  SOP_Node *thissop = cookparms.getNode();
2228  if (!thissop) return getXformSpace();
2229  int64 result;
2230  OP_Utils::evalOpParm(result, thissop, "xformspace", cookparms.getCookTime(), 0);
2231  return XformSpace(result);
2232  }
2233  XformOrder getXformOrder() const { return XformOrder(myXformOrder); }
2234  void setXformOrder(XformOrder val) { myXformOrder = int64(val); }
2236  {
2237  SOP_Node *thissop = cookparms.getNode();
2238  if (!thissop) return getXformOrder();
2239  int64 result;
2240  OP_Utils::evalOpParm(result, thissop, "rst", cookparms.getCookTime(), 0);
2241  return XformOrder(result);
2242  }
2243  RotateOrder getRotateOrder() const { return RotateOrder(myRotateOrder); }
2244  void setRotateOrder(RotateOrder val) { myRotateOrder = int64(val); }
2246  {
2247  SOP_Node *thissop = cookparms.getNode();
2248  if (!thissop) return getRotateOrder();
2249  int64 result;
2250  OP_Utils::evalOpParm(result, thissop, "xyz", cookparms.getCookTime(), 0);
2251  return RotateOrder(result);
2252  }
2253  UT_Vector3D getTranslate() const { return myTranslate; }
2254  void setTranslate(UT_Vector3D val) { myTranslate = val; }
2256  {
2257  SOP_Node *thissop = cookparms.getNode();
2258  if (!thissop) return getTranslate();
2260  OP_Utils::evalOpParm(result, thissop, "translate", cookparms.getCookTime(), 0);
2261  return result;
2262  }
2263  UT_Vector3D getRotate() const { return myRotate; }
2264  void setRotate(UT_Vector3D val) { myRotate = val; }
2266  {
2267  SOP_Node *thissop = cookparms.getNode();
2268  if (!thissop) return getRotate();
2270  OP_Utils::evalOpParm(result, thissop, "rotate", cookparms.getCookTime(), 0);
2271  return result;
2272  }
2273  UT_Vector3D getScale() const { return myScale; }
2274  void setScale(UT_Vector3D val) { myScale = val; }
2276  {
2277  SOP_Node *thissop = cookparms.getNode();
2278  if (!thissop) return getScale();
2280  OP_Utils::evalOpParm(result, thissop, "scale", cookparms.getCookTime(), 0);
2281  return result;
2282  }
2283  UT_Vector3D getShear() const { return myShear; }
2284  void setShear(UT_Vector3D val) { myShear = val; }
2286  {
2287  SOP_Node *thissop = cookparms.getNode();
2288  if (!thissop) return getShear();
2290  OP_Utils::evalOpParm(result, thissop, "shear", cookparms.getCookTime(), 0);
2291  return result;
2292  }
2293  UT_Vector3D getPivot() const { return myPivot; }
2294  void setPivot(UT_Vector3D val) { myPivot = val; }
2296  {
2297  SOP_Node *thissop = cookparms.getNode();
2298  if (!thissop) return getPivot();
2300  OP_Utils::evalOpParm(result, thissop, "pivot", cookparms.getCookTime(), 0);
2301  return result;
2302  }
2303  UT_Vector3D getPivotRotate() const { return myPivotRotate; }
2304  void setPivotRotate(UT_Vector3D val) { myPivotRotate = val; }
2306  {
2307  SOP_Node *thissop = cookparms.getNode();
2308  if (!thissop) return getPivotRotate();
2310  OP_Utils::evalOpParm(result, thissop, "pivotrotate", cookparms.getCookTime(), 0);
2311  return result;
2312  }
2313  PreXformOrder getPreXformOrder() const { return PreXformOrder(myPreXformOrder); }
2314  void setPreXformOrder(PreXformOrder val) { myPreXformOrder = int64(val); }
2316  {
2317  SOP_Node *thissop = cookparms.getNode();
2318  if (!thissop) return getPreXformOrder();
2319  int64 result;
2320  OP_Utils::evalOpParm(result, thissop, "prexform_rst", cookparms.getCookTime(), 0);
2321  return PreXformOrder(result);
2322  }
2323  PreXformRotateOrder getPreXformRotateOrder() const { return PreXformRotateOrder(myPreXformRotateOrder); }
2324  void setPreXformRotateOrder(PreXformRotateOrder val) { myPreXformRotateOrder = int64(val); }
2326  {
2327  SOP_Node *thissop = cookparms.getNode();
2328  if (!thissop) return getPreXformRotateOrder();
2329  int64 result;
2330  OP_Utils::evalOpParm(result, thissop, "prexform_xyz", cookparms.getCookTime(), 0);
2331  return PreXformRotateOrder(result);
2332  }
2333  UT_Vector3D getPreXformTranslate() const { return myPreXformTranslate; }
2334  void setPreXformTranslate(UT_Vector3D val) { myPreXformTranslate = val; }
2336  {
2337  SOP_Node *thissop = cookparms.getNode();
2338  if (!thissop) return getPreXformTranslate();
2340  OP_Utils::evalOpParm(result, thissop, "prexform_translate", cookparms.getCookTime(), 0);
2341  return result;
2342  }
2343  UT_Vector3D getPreXformRotate() const { return myPreXformRotate; }
2344  void setPreXformRotate(UT_Vector3D val) { myPreXformRotate = val; }
2346  {
2347  SOP_Node *thissop = cookparms.getNode();
2348  if (!thissop) return getPreXformRotate();
2350  OP_Utils::evalOpParm(result, thissop, "prexform_rotate", cookparms.getCookTime(), 0);
2351  return result;
2352  }
2353  UT_Vector3D getPreXformScale() const { return myPreXformScale; }
2354  void setPreXformScale(UT_Vector3D val) { myPreXformScale = val; }
2356  {
2357  SOP_Node *thissop = cookparms.getNode();
2358  if (!thissop) return getPreXformScale();
2360  OP_Utils::evalOpParm(result, thissop, "prexform_scale", cookparms.getCookTime(), 0);
2361  return result;
2362  }
2363  UT_Vector3D getPreXformShear() const { return myPreXformShear; }
2364  void setPreXformShear(UT_Vector3D val) { myPreXformShear = val; }
2366  {
2367  SOP_Node *thissop = cookparms.getNode();
2368  if (!thissop) return getPreXformShear();
2370  OP_Utils::evalOpParm(result, thissop, "prexform_shear", cookparms.getCookTime(), 0);
2371  return result;
2372  }
2373  bool getOutputFront() const { return myOutputFront; }
2374  void setOutputFront(bool val) { myOutputFront = val; }
2375  bool opOutputFront(const SOP_NodeVerb::CookParms &cookparms) const
2376  {
2377  SOP_Node *thissop = cookparms.getNode();
2378  if (!thissop) return getOutputFront();
2379  bool result;
2380  OP_Utils::evalOpParm(result, thissop, "outputfront", cookparms.getCookTime(), 0);
2381  return result;
2382  }
2383  bool getOutputFrontGrp() const { return myOutputFrontGrp; }
2384  void setOutputFrontGrp(bool val) { myOutputFrontGrp = val; }
2385  bool opOutputFrontGrp(const SOP_NodeVerb::CookParms &cookparms) const
2386  {
2387  SOP_Node *thissop = cookparms.getNode();
2388  if (!thissop) return getOutputFrontGrp();
2389  bool result;
2390  OP_Utils::evalOpParm(result, thissop, "outputfrontgrp", cookparms.getCookTime(), 0);
2391  return result;
2392  }
2393  const UT_StringHolder & getFrontGrp() const { return myFrontGrp; }
2394  void setFrontGrp(const UT_StringHolder & val) { myFrontGrp = val; }
2396  {
2397  SOP_Node *thissop = cookparms.getNode();
2398  if (!thissop) return getFrontGrp();
2400  OP_Utils::evalOpParm(result, thissop, "frontgrp", cookparms.getCookTime(), 0);
2401  return result;
2402  }
2403  bool getOutputBack() const { return myOutputBack; }
2404  void setOutputBack(bool val) { myOutputBack = val; }
2405  bool opOutputBack(const SOP_NodeVerb::CookParms &cookparms) const
2406  {
2407  SOP_Node *thissop = cookparms.getNode();
2408  if (!thissop) return getOutputBack();
2409  bool result;
2410  OP_Utils::evalOpParm(result, thissop, "outputback", cookparms.getCookTime(), 0);
2411  return result;
2412  }
2413  bool getOutputBackGrp() const { return myOutputBackGrp; }
2414  void setOutputBackGrp(bool val) { myOutputBackGrp = val; }
2415  bool opOutputBackGrp(const SOP_NodeVerb::CookParms &cookparms) const
2416  {
2417  SOP_Node *thissop = cookparms.getNode();
2418  if (!thissop) return getOutputBackGrp();
2419  bool result;
2420  OP_Utils::evalOpParm(result, thissop, "outputbackgrp", cookparms.getCookTime(), 0);
2421  return result;
2422  }
2423  const UT_StringHolder & getBackGrp() const { return myBackGrp; }
2424  void setBackGrp(const UT_StringHolder & val) { myBackGrp = val; }
2426  {
2427  SOP_Node *thissop = cookparms.getNode();
2428  if (!thissop) return getBackGrp();
2430  OP_Utils::evalOpParm(result, thissop, "backgrp", cookparms.getCookTime(), 0);
2431  return result;
2432  }
2433  bool getOutputSide() const { return myOutputSide; }
2434  void setOutputSide(bool val) { myOutputSide = val; }
2435  bool opOutputSide(const SOP_NodeVerb::CookParms &cookparms) const
2436  {
2437  SOP_Node *thissop = cookparms.getNode();
2438  if (!thissop) return getOutputSide();
2439  bool result;
2440  OP_Utils::evalOpParm(result, thissop, "outputside", cookparms.getCookTime(), 0);
2441  return result;
2442  }
2443  bool getOutputSideGrp() const { return myOutputSideGrp; }
2444  void setOutputSideGrp(bool val) { myOutputSideGrp = val; }
2445  bool opOutputSideGrp(const SOP_NodeVerb::CookParms &cookparms) const
2446  {
2447  SOP_Node *thissop = cookparms.getNode();
2448  if (!thissop) return getOutputSideGrp();
2449  bool result;
2450  OP_Utils::evalOpParm(result, thissop, "outputsidegrp", cookparms.getCookTime(), 0);
2451  return result;
2452  }
2453  const UT_StringHolder & getSideGrp() const { return mySideGrp; }
2454  void setSideGrp(const UT_StringHolder & val) { mySideGrp = val; }
2456  {
2457  SOP_Node *thissop = cookparms.getNode();
2458  if (!thissop) return getSideGrp();
2460  OP_Utils::evalOpParm(result, thissop, "sidegrp", cookparms.getCookTime(), 0);
2461  return result;
2462  }
2463  bool getOutputFrontSeamGrp() const { return myOutputFrontSeamGrp; }
2464  void setOutputFrontSeamGrp(bool val) { myOutputFrontSeamGrp = val; }
2465  bool opOutputFrontSeamGrp(const SOP_NodeVerb::CookParms &cookparms) const
2466  {
2467  SOP_Node *thissop = cookparms.getNode();
2468  if (!thissop) return getOutputFrontSeamGrp();
2469  bool result;
2470  OP_Utils::evalOpParm(result, thissop, "outputfrontseamgrp", cookparms.getCookTime(), 0);
2471  return result;
2472  }
2473  const UT_StringHolder & getFrontSeamGrp() const { return myFrontSeamGrp; }
2474  void setFrontSeamGrp(const UT_StringHolder & val) { myFrontSeamGrp = val; }
2476  {
2477  SOP_Node *thissop = cookparms.getNode();
2478  if (!thissop) return getFrontSeamGrp();
2480  OP_Utils::evalOpParm(result, thissop, "frontseamgrp", cookparms.getCookTime(), 0);
2481  return result;
2482  }
2483  bool getOutputBackSeamGrp() const { return myOutputBackSeamGrp; }
2484  void setOutputBackSeamGrp(bool val) { myOutputBackSeamGrp = val; }
2485  bool opOutputBackSeamGrp(const SOP_NodeVerb::CookParms &cookparms) const
2486  {
2487  SOP_Node *thissop = cookparms.getNode();
2488  if (!thissop) return getOutputBackSeamGrp();
2489  bool result;
2490  OP_Utils::evalOpParm(result, thissop, "outputbackseamgrp", cookparms.getCookTime(), 0);
2491  return result;
2492  }
2493  const UT_StringHolder & getBackSeamGrp() const { return myBackSeamGrp; }
2494  void setBackSeamGrp(const UT_StringHolder & val) { myBackSeamGrp = val; }
2496  {
2497  SOP_Node *thissop = cookparms.getNode();
2498  if (!thissop) return getBackSeamGrp();
2500  OP_Utils::evalOpParm(result, thissop, "backseamgrp", cookparms.getCookTime(), 0);
2501  return result;
2502  }
2503  bool getPreserveGroups() const { return myPreserveGroups; }
2504  void setPreserveGroups(bool val) { myPreserveGroups = val; }
2505  bool opPreserveGroups(const SOP_NodeVerb::CookParms &cookparms) const
2506  {
2507  SOP_Node *thissop = cookparms.getNode();
2508  if (!thissop) return getPreserveGroups();
2509  bool result;
2510  OP_Utils::evalOpParm(result, thissop, "preservegroups", cookparms.getCookTime(), 0);
2511  return result;
2512  }
2513  bool getCopyEdgeGroups() const { return myCopyEdgeGroups; }
2514  void setCopyEdgeGroups(bool val) { myCopyEdgeGroups = val; }
2515  bool opCopyEdgeGroups(const SOP_NodeVerb::CookParms &cookparms) const
2516  {
2517  SOP_Node *thissop = cookparms.getNode();
2518  if (!thissop) return getCopyEdgeGroups();
2519  bool result;
2520  OP_Utils::evalOpParm(result, thissop, "copyedgegroups", cookparms.getCookTime(), 0);
2521  return result;
2522  }
2523  bool getCopyPointGroups() const { return myCopyPointGroups; }
2524  void setCopyPointGroups(bool val) { myCopyPointGroups = val; }
2525  bool opCopyPointGroups(const SOP_NodeVerb::CookParms &cookparms) const
2526  {
2527  SOP_Node *thissop = cookparms.getNode();
2528  if (!thissop) return getCopyPointGroups();
2529  bool result;
2530  OP_Utils::evalOpParm(result, thissop, "copypointgroups", cookparms.getCookTime(), 0);
2531  return result;
2532  }
2533  bool getCopyPrimitiveGroups() const { return myCopyPrimitiveGroups; }
2534  void setCopyPrimitiveGroups(bool val) { myCopyPrimitiveGroups = val; }
2535  bool opCopyPrimitiveGroups(const SOP_NodeVerb::CookParms &cookparms) const
2536  {
2537  SOP_Node *thissop = cookparms.getNode();
2538  if (!thissop) return getCopyPrimitiveGroups();
2539  bool result;
2540  OP_Utils::evalOpParm(result, thissop, "copyprimitivegroups", cookparms.getCookTime(), 0);
2541  return result;
2542  }
2543  bool getLimitInset() const { return myLimitInset; }
2544  void setLimitInset(bool val) { myLimitInset = val; }
2545  bool opLimitInset(const SOP_NodeVerb::CookParms &cookparms) const
2546  {
2547  SOP_Node *thissop = cookparms.getNode();
2548  if (!thissop) return getLimitInset();
2549  bool result;
2550  OP_Utils::evalOpParm(result, thissop, "limitinset", cookparms.getCookTime(), 0);
2551  return result;
2552  }
2553  bool getCommonLimit() const { return myCommonLimit; }
2554  void setCommonLimit(bool val) { myCommonLimit = val; }
2555  bool opCommonLimit(const SOP_NodeVerb::CookParms &cookparms) const
2556  {
2557  SOP_Node *thissop = cookparms.getNode();
2558  if (!thissop) return getCommonLimit();
2559  bool result;
2560  OP_Utils::evalOpParm(result, thissop, "commonlimit", cookparms.getCookTime(), 0);
2561  return result;
2562  }
2563  bool getAddVertexNormals() const { return myAddVertexNormals; }
2564  void setAddVertexNormals(bool val) { myAddVertexNormals = val; }
2565  bool opAddVertexNormals(const SOP_NodeVerb::CookParms &cookparms) const
2566  {
2567  SOP_Node *thissop = cookparms.getNode();
2568  if (!thissop) return getAddVertexNormals();
2569  bool result;
2570  OP_Utils::evalOpParm(result, thissop, "addvertexnomrals", cookparms.getCookTime(), 0);
2571  return result;
2572  }
2573  fpreal64 getCuspAngle() const { return myCuspAngle; }
2574  void setCuspAngle(fpreal64 val) { myCuspAngle = val; }
2576  {
2577  SOP_Node *thissop = cookparms.getNode();
2578  if (!thissop) return getCuspAngle();
2579  fpreal64 result;
2580  OP_Utils::evalOpParm(result, thissop, "cuspangle", cookparms.getCookTime(), 0);
2581  return result;
2582  }
2583  bool getCuspFront() const { return myCuspFront; }
2584  void setCuspFront(bool val) { myCuspFront = val; }
2585  bool opCuspFront(const SOP_NodeVerb::CookParms &cookparms) const
2586  {
2587  SOP_Node *thissop = cookparms.getNode();
2588  if (!thissop) return getCuspFront();
2589  bool result;
2590  OP_Utils::evalOpParm(result, thissop, "cuspfront", cookparms.getCookTime(), 0);
2591  return result;
2592  }
2593  bool getCuspBack() const { return myCuspBack; }
2594  void setCuspBack(bool val) { myCuspBack = val; }
2595  bool opCuspBack(const SOP_NodeVerb::CookParms &cookparms) const
2596  {
2597  SOP_Node *thissop = cookparms.getNode();
2598  if (!thissop) return getCuspBack();
2599  bool result;
2600  OP_Utils::evalOpParm(result, thissop, "cuspback", cookparms.getCookTime(), 0);
2601  return result;
2602  }
2603  bool getGenUVs() const { return myGenUVs; }
2604  void setGenUVs(bool val) { myGenUVs = val; }
2605  bool opGenUVs(const SOP_NodeVerb::CookParms &cookparms) const
2606  {
2607  SOP_Node *thissop = cookparms.getNode();
2608  if (!thissop) return getGenUVs();
2609  bool result;
2610  OP_Utils::evalOpParm(result, thissop, "genuvs", cookparms.getCookTime(), 0);
2611  return result;
2612  }
2613  UVStyle getUVStyle() const { return UVStyle(myUVStyle); }
2614  void setUVStyle(UVStyle val) { myUVStyle = int64(val); }
2616  {
2617  SOP_Node *thissop = cookparms.getNode();
2618  if (!thissop) return getUVStyle();
2619  int64 result;
2620  OP_Utils::evalOpParm(result, thissop, "uvstyle", cookparms.getCookTime(), 0);
2621  return UVStyle(result);
2622  }
2623  UVScaling getUVScaling() const { return UVScaling(myUVScaling); }
2624  void setUVScaling(UVScaling val) { myUVScaling = int64(val); }
2626  {
2627  SOP_Node *thissop = cookparms.getNode();
2628  if (!thissop) return getUVScaling();
2629  int64 result;
2630  OP_Utils::evalOpParm(result, thissop, "uvscaling", cookparms.getCookTime(), 0);
2631  return UVScaling(result);
2632  }
2633  fpreal64 getFrontMagnitude() const { return myFrontMagnitude; }
2634  void setFrontMagnitude(fpreal64 val) { myFrontMagnitude = val; }
2636  {
2637  SOP_Node *thissop = cookparms.getNode();
2638  if (!thissop) return getFrontMagnitude();
2639  fpreal64 result;
2640  OP_Utils::evalOpParm(result, thissop, "frontmagnitude", cookparms.getCookTime(), 0);
2641  return result;
2642  }
2643  fpreal64 getBackMagnitude() const { return myBackMagnitude; }
2644  void setBackMagnitude(fpreal64 val) { myBackMagnitude = val; }
2646  {
2647  SOP_Node *thissop = cookparms.getNode();
2648  if (!thissop) return getBackMagnitude();
2649  fpreal64 result;
2650  OP_Utils::evalOpParm(result, thissop, "backmagnitude", cookparms.getCookTime(), 0);
2651  return result;
2652  }
2653  fpreal64 getFrontStiffness() const { return myFrontStiffness; }
2654  void setFrontStiffness(fpreal64 val) { myFrontStiffness = val; }
2656  {
2657  SOP_Node *thissop = cookparms.getNode();
2658  if (!thissop) return getFrontStiffness();
2659  fpreal64 result;
2660  OP_Utils::evalOpParm(result, thissop, "frontstiffness", cookparms.getCookTime(), 0);
2661  return result;
2662  }
2663  fpreal64 getBackStiffness() const { return myBackStiffness; }
2664  void setBackStiffness(fpreal64 val) { myBackStiffness = val; }
2666  {
2667  SOP_Node *thissop = cookparms.getNode();
2668  if (!thissop) return getBackStiffness();
2669  fpreal64 result;
2670  OP_Utils::evalOpParm(result, thissop, "backstiffness", cookparms.getCookTime(), 0);
2671  return result;
2672  }
2673  Interpolation getInterpolation() const { return Interpolation(myInterpolation); }
2674  void setInterpolation(Interpolation val) { myInterpolation = int64(val); }
2676  {
2677  SOP_Node *thissop = cookparms.getNode();
2678  if (!thissop) return getInterpolation();
2679  int64 result;
2680  OP_Utils::evalOpParm(result, thissop, "interpolation", cookparms.getCookTime(), 0);
2681  return Interpolation(result);
2682  }
2683  Spacing getSpacing() const { return Spacing(mySpacing); }
2684  void setSpacing(Spacing val) { mySpacing = int64(val); }
2686  {
2687  SOP_Node *thissop = cookparms.getNode();
2688  if (!thissop) return getSpacing();
2689  int64 result;
2690  OP_Utils::evalOpParm(result, thissop, "spacing", cookparms.getCookTime(), 0);
2691  return Spacing(result);
2692  }
2693  bool getReverseSpineDirection() const { return myReverseSpineDirection; }
2694  void setReverseSpineDirection(bool val) { myReverseSpineDirection = val; }
2696  {
2697  SOP_Node *thissop = cookparms.getNode();
2698  if (!thissop) return getReverseSpineDirection();
2699  bool result;
2700  OP_Utils::evalOpParm(result, thissop, "reversespinedirection", cookparms.getCookTime(), 0);
2701  return result;
2702  }
2703  fpreal64 getAxialRotation() const { return myAxialRotation; }
2704  void setAxialRotation(fpreal64 val) { myAxialRotation = val; }
2706  {
2707  SOP_Node *thissop = cookparms.getNode();
2708  if (!thissop) return getAxialRotation();
2709  fpreal64 result;
2710  OP_Utils::evalOpParm(result, thissop, "axialrotation", cookparms.getCookTime(), 0);
2711  return result;
2712  }
2713  fpreal64 getFrontBlend() const { return myFrontBlend; }
2714  void setFrontBlend(fpreal64 val) { myFrontBlend = val; }
2716  {
2717  SOP_Node *thissop = cookparms.getNode();
2718  if (!thissop) return getFrontBlend();
2719  fpreal64 result;
2720  OP_Utils::evalOpParm(result, thissop, "frontblend", cookparms.getCookTime(), 0);
2721  return result;
2722  }
2723  fpreal64 getBackBlend() const { return myBackBlend; }
2724  void setBackBlend(fpreal64 val) { myBackBlend = val; }
2726  {
2727  SOP_Node *thissop = cookparms.getNode();
2728  if (!thissop) return getBackBlend();
2729  fpreal64 result;
2730  OP_Utils::evalOpParm(result, thissop, "backblend", cookparms.getCookTime(), 0);
2731  return result;
2732  }
2733  fpreal64 getThicknessScale() const { return myThicknessScale; }
2734  void setThicknessScale(fpreal64 val) { myThicknessScale = val; }
2736  {
2737  SOP_Node *thissop = cookparms.getNode();
2738  if (!thissop) return getThicknessScale();
2739  fpreal64 result;
2740  OP_Utils::evalOpParm(result, thissop, "thicknessscale", cookparms.getCookTime(), 0);
2741  return result;
2742  }
2743  bool getUseThicknessAttrib() const { return myUseThicknessAttrib; }
2744  void setUseThicknessAttrib(bool val) { myUseThicknessAttrib = val; }
2745  bool opUseThicknessAttrib(const SOP_NodeVerb::CookParms &cookparms) const
2746  {
2747  SOP_Node *thissop = cookparms.getNode();
2748  if (!thissop) return getUseThicknessAttrib();
2749  bool result;
2750  OP_Utils::evalOpParm(result, thissop, "usethicknessattrib", cookparms.getCookTime(), 0);
2751  return result;
2752  }
2753  const UT_StringHolder & getThicknessAttrib() const { return myThicknessAttrib; }
2754  void setThicknessAttrib(const UT_StringHolder & val) { myThicknessAttrib = val; }
2756  {
2757  SOP_Node *thissop = cookparms.getNode();
2758  if (!thissop) return getThicknessAttrib();
2760  OP_Utils::evalOpParm(result, thissop, "thicknessattrib", cookparms.getCookTime(), 0);
2761  return result;
2762  }
2763  bool getUseThicknessRamp() const { return myUseThicknessRamp; }
2764  void setUseThicknessRamp(bool val) { myUseThicknessRamp = val; }
2765  bool opUseThicknessRamp(const SOP_NodeVerb::CookParms &cookparms) const
2766  {
2767  SOP_Node *thissop = cookparms.getNode();
2768  if (!thissop) return getUseThicknessRamp();
2769  bool result;
2770  OP_Utils::evalOpParm(result, thissop, "usethicknessramp", cookparms.getCookTime(), 0);
2771  return result;
2772  }
2773  UT_SharedPtr<UT_Ramp> getThicknessRamp() const { return myThicknessRamp; }
2774  void setThicknessRamp(UT_SharedPtr<UT_Ramp> val) { myThicknessRamp = val; }
2776  {
2777  SOP_Node *thissop = cookparms.getNode();
2778  if (!thissop) return getThicknessRamp();
2780  OP_Utils::evalOpParm(result, thissop, "thicknessramp", cookparms.getCookTime(), 0);
2781  return result;
2782  }
2783  bool getUseTwistAttrib() const { return myUseTwistAttrib; }
2784  void setUseTwistAttrib(bool val) { myUseTwistAttrib = val; }
2785  bool opUseTwistAttrib(const SOP_NodeVerb::CookParms &cookparms) const
2786  {
2787  SOP_Node *thissop = cookparms.getNode();
2788  if (!thissop) return getUseTwistAttrib();
2789  bool result;
2790  OP_Utils::evalOpParm(result, thissop, "usetwistattrib", cookparms.getCookTime(), 0);
2791  return result;
2792  }
2793  const UT_StringHolder & getTwistAttrib() const { return myTwistAttrib; }
2794  void setTwistAttrib(const UT_StringHolder & val) { myTwistAttrib = val; }
2796  {
2797  SOP_Node *thissop = cookparms.getNode();
2798  if (!thissop) return getTwistAttrib();
2800  OP_Utils::evalOpParm(result, thissop, "twistattrib", cookparms.getCookTime(), 0);
2801  return result;
2802  }
2803  bool getUseTwistRamp() const { return myUseTwistRamp; }
2804  void setUseTwistRamp(bool val) { myUseTwistRamp = val; }
2805  bool opUseTwistRamp(const SOP_NodeVerb::CookParms &cookparms) const
2806  {
2807  SOP_Node *thissop = cookparms.getNode();
2808  if (!thissop) return getUseTwistRamp();
2809  bool result;
2810  OP_Utils::evalOpParm(result, thissop, "usetwistramp", cookparms.getCookTime(), 0);
2811  return result;
2812  }
2813  UT_SharedPtr<UT_Ramp> getTwistRamp() const { return myTwistRamp; }
2814  void setTwistRamp(UT_SharedPtr<UT_Ramp> val) { myTwistRamp = val; }
2816  {
2817  SOP_Node *thissop = cookparms.getNode();
2818  if (!thissop) return getTwistRamp();
2820  OP_Utils::evalOpParm(result, thissop, "twistramp", cookparms.getCookTime(), 0);
2821  return result;
2822  }
2823  fpreal64 getTwistScale() const { return myTwistScale; }
2824  void setTwistScale(fpreal64 val) { myTwistScale = val; }
2826  {
2827  SOP_Node *thissop = cookparms.getNode();
2828  if (!thissop) return getTwistScale();
2829  fpreal64 result;
2830  OP_Utils::evalOpParm(result, thissop, "twistscale", cookparms.getCookTime(), 0);
2831  return result;
2832  }
2833  bool getUseLocalZScaleAttrib() const { return myUseLocalZScaleAttrib; }
2834  void setUseLocalZScaleAttrib(bool val) { myUseLocalZScaleAttrib = val; }
2836  {
2837  SOP_Node *thissop = cookparms.getNode();
2838  if (!thissop) return getUseLocalZScaleAttrib();
2839  bool result;
2840  OP_Utils::evalOpParm(result, thissop, "uselocalzscaleattrib", cookparms.getCookTime(), 0);
2841  return result;
2842  }
2843  const UT_StringHolder & getLocalZScaleAttrib() const { return myLocalZScaleAttrib; }
2844  void setLocalZScaleAttrib(const UT_StringHolder & val) { myLocalZScaleAttrib = val; }
2846  {
2847  SOP_Node *thissop = cookparms.getNode();
2848  if (!thissop) return getLocalZScaleAttrib();
2850  OP_Utils::evalOpParm(result, thissop, "localzscaleattrib", cookparms.getCookTime(), 0);
2851  return result;
2852  }
2853  bool getUseLocalInsetScaleAttrib() const { return myUseLocalInsetScaleAttrib; }
2854  void setUseLocalInsetScaleAttrib(bool val) { myUseLocalInsetScaleAttrib = val; }
2856  {
2857  SOP_Node *thissop = cookparms.getNode();
2858  if (!thissop) return getUseLocalInsetScaleAttrib();
2859  bool result;
2860  OP_Utils::evalOpParm(result, thissop, "uselocalinsetscaleattrib", cookparms.getCookTime(), 0);
2861  return result;
2862  }
2863  const UT_StringHolder & getLocalInsetScaleAttrib() const { return myLocalInsetScaleAttrib; }
2864  void setLocalInsetScaleAttrib(const UT_StringHolder & val) { myLocalInsetScaleAttrib = val; }
2866  {
2867  SOP_Node *thissop = cookparms.getNode();
2868  if (!thissop) return getLocalInsetScaleAttrib();
2870  OP_Utils::evalOpParm(result, thissop, "localinsetscaleattrib", cookparms.getCookTime(), 0);
2871  return result;
2872  }
2873  bool getUseLocalTwistScaleAttrib() const { return myUseLocalTwistScaleAttrib; }
2874  void setUseLocalTwistScaleAttrib(bool val) { myUseLocalTwistScaleAttrib = val; }
2876  {
2877  SOP_Node *thissop = cookparms.getNode();
2878  if (!thissop) return getUseLocalTwistScaleAttrib();
2879  bool result;
2880  OP_Utils::evalOpParm(result, thissop, "uselocaltwistattrib", cookparms.getCookTime(), 0);
2881  return result;
2882  }
2883  const UT_StringHolder & getLocalTwistScaleAttrib() const { return myLocalTwistScaleAttrib; }
2884  void setLocalTwistScaleAttrib(const UT_StringHolder & val) { myLocalTwistScaleAttrib = val; }
2886  {
2887  SOP_Node *thissop = cookparms.getNode();
2888  if (!thissop) return getLocalTwistScaleAttrib();
2890  OP_Utils::evalOpParm(result, thissop, "localtwistscaleattrib", cookparms.getCookTime(), 0);
2891  return result;
2892  }
2893  bool getUseLocalDivScaleAttrib() const { return myUseLocalDivScaleAttrib; }
2894  void setUseLocalDivScaleAttrib(bool val) { myUseLocalDivScaleAttrib = val; }
2896  {
2897  SOP_Node *thissop = cookparms.getNode();
2898  if (!thissop) return getUseLocalDivScaleAttrib();
2899  bool result;
2900  OP_Utils::evalOpParm(result, thissop, "uselocaldivsattrib", cookparms.getCookTime(), 0);
2901  return result;
2902  }
2903  const UT_StringHolder & getLocalDivScaleAttrib() const { return myLocalDivScaleAttrib; }
2904  void setLocalDivScaleAttrib(const UT_StringHolder & val) { myLocalDivScaleAttrib = val; }
2906  {
2907  SOP_Node *thissop = cookparms.getNode();
2908  if (!thissop) return getLocalDivScaleAttrib();
2910  OP_Utils::evalOpParm(result, thissop, "locadivscaleattrib", cookparms.getCookTime(), 0);
2911  return result;
2912  }
2913  bool getUseLocalXAttrib() const { return myUseLocalXAttrib; }
2914  void setUseLocalXAttrib(bool val) { myUseLocalXAttrib = val; }
2915  bool opUseLocalXAttrib(const SOP_NodeVerb::CookParms &cookparms) const
2916  {
2917  SOP_Node *thissop = cookparms.getNode();
2918  if (!thissop) return getUseLocalXAttrib();
2919  bool result;
2920  OP_Utils::evalOpParm(result, thissop, "uselocalxattrib", cookparms.getCookTime(), 0);
2921  return result;
2922  }
2923  const UT_StringHolder & getLocalXAttrib() const { return myLocalXAttrib; }
2924  void setLocalXAttrib(const UT_StringHolder & val) { myLocalXAttrib = val; }
2926  {
2927  SOP_Node *thissop = cookparms.getNode();
2928  if (!thissop) return getLocalXAttrib();
2930  OP_Utils::evalOpParm(result, thissop, "localxattrib", cookparms.getCookTime(), 0);
2931  return result;
2932  }
2933  bool getUseLocalZAttrib() const { return myUseLocalZAttrib; }
2934  void setUseLocalZAttrib(bool val) { myUseLocalZAttrib = val; }
2935  bool opUseLocalZAttrib(const SOP_NodeVerb::CookParms &cookparms) const
2936  {
2937  SOP_Node *thissop = cookparms.getNode();
2938  if (!thissop) return getUseLocalZAttrib();
2939  bool result;
2940  OP_Utils::evalOpParm(result, thissop, "uselocalzattirb", cookparms.getCookTime(), 0);
2941  return result;
2942  }
2943  const UT_StringHolder & getLocalZAttrib() const { return myLocalZAttrib; }
2944  void setLocalZAttrib(const UT_StringHolder & val) { myLocalZAttrib = val; }
2946  {
2947  SOP_Node *thissop = cookparms.getNode();
2948  if (!thissop) return getLocalZAttrib();
2950  OP_Utils::evalOpParm(result, thissop, "localzattirb", cookparms.getCookTime(), 0);
2951  return result;
2952  }
2953  bool getUseLocalCtrAttrib() const { return myUseLocalCtrAttrib; }
2954  void setUseLocalCtrAttrib(bool val) { myUseLocalCtrAttrib = val; }
2955  bool opUseLocalCtrAttrib(const SOP_NodeVerb::CookParms &cookparms) const
2956  {
2957  SOP_Node *thissop = cookparms.getNode();
2958  if (!thissop) return getUseLocalCtrAttrib();
2959  bool result;
2960  OP_Utils::evalOpParm(result, thissop, "uselocalctrattrib", cookparms.getCookTime(), 0);
2961  return result;
2962  }
2963  const UT_StringHolder & getLocalCtrAttrib() const { return myLocalCtrAttrib; }
2964  void setLocalCtrAttrib(const UT_StringHolder & val) { myLocalCtrAttrib = val; }
2966  {
2967  SOP_Node *thissop = cookparms.getNode();
2968  if (!thissop) return getLocalCtrAttrib();
2970  OP_Utils::evalOpParm(result, thissop, "localctrattrib", cookparms.getCookTime(), 0);
2971  return result;
2972  }
2973 
2974 private:
2975  UT_StringHolder myGroup;
2976  int64 mySplitType;
2977  bool myUseSplitGroup;
2978  UT_StringHolder mySplitGroup;
2979  int64 myExtrusionMode;
2980  int64 myPtNormalSrc;
2981  UT_StringHolder myPtNormalAttrib;
2982  fpreal64 myDist;
2983  fpreal64 myInset;
2984  fpreal64 myTwist;
2985  int64 myDivs;
2986  int64 mySpineType;
2987  bool myXformFront;
2988  int64 myXformSpace;
2989  int64 myXformOrder;
2990  int64 myRotateOrder;
2991  UT_Vector3D myTranslate;
2992  UT_Vector3D myRotate;
2993  UT_Vector3D myScale;
2994  UT_Vector3D myShear;
2995  UT_Vector3D myPivot;
2996  UT_Vector3D myPivotRotate;
2997  int64 myPreXformOrder;
2998  int64 myPreXformRotateOrder;
2999  UT_Vector3D myPreXformTranslate;
3000  UT_Vector3D myPreXformRotate;
3001  UT_Vector3D myPreXformScale;
3002  UT_Vector3D myPreXformShear;
3003  bool myOutputFront;
3004  bool myOutputFrontGrp;
3005  UT_StringHolder myFrontGrp;
3006  bool myOutputBack;
3007  bool myOutputBackGrp;
3008  UT_StringHolder myBackGrp;
3009  bool myOutputSide;
3010  bool myOutputSideGrp;
3011  UT_StringHolder mySideGrp;
3012  bool myOutputFrontSeamGrp;
3013  UT_StringHolder myFrontSeamGrp;
3014  bool myOutputBackSeamGrp;
3015  UT_StringHolder myBackSeamGrp;
3016  bool myPreserveGroups;
3017  bool myCopyEdgeGroups;
3018  bool myCopyPointGroups;
3019  bool myCopyPrimitiveGroups;
3020  bool myLimitInset;
3021  bool myCommonLimit;
3022  bool myAddVertexNormals;
3023  fpreal64 myCuspAngle;
3024  bool myCuspFront;
3025  bool myCuspBack;
3026  bool myGenUVs;
3027  int64 myUVStyle;
3028  int64 myUVScaling;
3029  fpreal64 myFrontMagnitude;
3030  fpreal64 myBackMagnitude;
3031  fpreal64 myFrontStiffness;
3032  fpreal64 myBackStiffness;
3033  int64 myInterpolation;
3034  int64 mySpacing;
3035  bool myReverseSpineDirection;
3036  fpreal64 myAxialRotation;
3037  fpreal64 myFrontBlend;
3038  fpreal64 myBackBlend;
3039  fpreal64 myThicknessScale;
3040  bool myUseThicknessAttrib;
3041  UT_StringHolder myThicknessAttrib;
3042  bool myUseThicknessRamp;
3043  UT_SharedPtr<UT_Ramp> myThicknessRamp;
3044  bool myUseTwistAttrib;
3045  UT_StringHolder myTwistAttrib;
3046  bool myUseTwistRamp;
3047  UT_SharedPtr<UT_Ramp> myTwistRamp;
3048  fpreal64 myTwistScale;
3049  bool myUseLocalZScaleAttrib;
3050  UT_StringHolder myLocalZScaleAttrib;
3051  bool myUseLocalInsetScaleAttrib;
3052  UT_StringHolder myLocalInsetScaleAttrib;
3053  bool myUseLocalTwistScaleAttrib;
3054  UT_StringHolder myLocalTwistScaleAttrib;
3055  bool myUseLocalDivScaleAttrib;
3056  UT_StringHolder myLocalDivScaleAttrib;
3057  bool myUseLocalXAttrib;
3058  UT_StringHolder myLocalXAttrib;
3059  bool myUseLocalZAttrib;
3060  UT_StringHolder myLocalZAttrib;
3061  bool myUseLocalCtrAttrib;
3062  UT_StringHolder myLocalCtrAttrib;
3063 
3064 };
bool opUseLocalTwistScaleAttrib(const SOP_NodeVerb::CookParms &cookparms) const
virtual NodeIdx getInput(NodeIdx idx, OP_InputIdx input, bool markused=false) const =0
UT_StringHolder opSplitGroup(const SOP_NodeVerb::CookParms &cookparms) const
type
Definition: core.h:556
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix4D &value) const override
void setPreXformRotate(UT_Vector3D val)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector3D &value) const override
void getNestParmValue(TempIndex idx, TempIndex instance, UT_SharedPtr< UT_Ramp > &value) const override
bool opOutputBackSeamGrp(const SOP_NodeVerb::CookParms &cookparms) const
void setPivotRotate(UT_Vector3D val)
static void saveData(std::ostream &os, UT_Matrix4D v)
void setThicknessRamp(UT_SharedPtr< UT_Ramp > val)
int64 opDivs(const SOP_NodeVerb::CookParms &cookparms) const
bool opCommonLimit(const SOP_NodeVerb::CookParms &cookparms) const
int int32
Definition: SYS_Types.h:39
SOP_Node * getNode() const
Definition: SOP_NodeVerb.h:403
void setBackGrp(const UT_StringHolder &val)
UT_StringHolder opLocalZAttrib(const SOP_NodeVerb::CookParms &cookparms) const
void setGroup(const UT_StringHolder &val)
UT_StringHolder opLocalZScaleAttrib(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getSideGrp() const
UT_Vector3D opPreXformShear(const SOP_NodeVerb::CookParms &cookparms) const
static UT_SharedPtr< UT_Ramp > buildFromDefault(const char *def)
Returns a ramp constructed from the canonical default strings.
UT_SharedPtr< UT_Ramp > getThicknessRamp() const
const UT_StringHolder & getSplitGroup() const
static void saveData(std::ostream &os, PRM_DataItemHandle s)
UT_Vector3D getPreXformTranslate() const
void setLocalInsetScaleAttrib(const UT_StringHolder &val)
bool opOutputBack(const SOP_NodeVerb::CookParms &cookparms) const
GLboolean * data
Definition: glcorearb.h:131
GT_API const UT_StringHolder time
UT_Vector3D opScale(const SOP_NodeVerb::CookParms &cookparms) const
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector4.h:495
const GLdouble * v
Definition: glcorearb.h:837
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector3D &value) override
fpreal getTime() const
Definition: OP_Context.h:63
UT_StringHolder opTwistAttrib(const SOP_NodeVerb::CookParms &cookparms) const
ExtrusionMode opExtrusionMode(const SOP_NodeVerb::CookParms &cookparms) const
static void saveData(std::ostream &os, UT_Matrix2D v)
GLsizei const GLfloat * value
Definition: glcorearb.h:824
static void loadData(UT_IStream &is, int64 &v)
static void loadData(UT_IStream &is, UT_Matrix4D &v)
UT_StringHolder opPtNormalAttrib(const SOP_NodeVerb::CookParms &cookparms) const
const OP_Context & context() const
Definition: OP_NodeParms.h:105
fpreal64 opBackMagnitude(const SOP_NodeVerb::CookParms &cookparms) const
constexpr SYS_FORCE_INLINE T & z() noexcept
Definition: UT_Vector3.h:669
int64 exint
Definition: SYS_Types.h:125
SYS_FORCE_INLINE const char * buffer() const
const UT_StringHolder & getPtNormalAttrib() const
GLdouble s
Definition: glad.h:3009
SYS_FORCE_INLINE UT_StringHolder getToken(SplitType enum_value)
const UT_StringHolder & getBackSeamGrp() const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector2D &value) const override
bool opAddVertexNormals(const SOP_NodeVerb::CookParms &cookparms) const
bool opCopyPointGroups(const SOP_NodeVerb::CookParms &cookparms) const
void setLocalZAttrib(const UT_StringHolder &val)
void setLocalZScaleAttrib(const UT_StringHolder &val)
UT_SharedPtr< UT_Ramp > opThicknessRamp(const SOP_NodeVerb::CookParms &cookparms) const
An output stream object that owns its own string buffer storage.
fpreal64 opInset(const SOP_NodeVerb::CookParms &cookparms) const
bool opOutputFrontGrp(const SOP_NodeVerb::CookParms &cookparms) const
void doGetParmValue(TempIndex idx, TempIndex instance, T &value) const
bool opUseLocalInsetScaleAttrib(const SOP_NodeVerb::CookParms &cookparms) const
bool opUseThicknessRamp(const SOP_NodeVerb::CookParms &cookparms) const
**But if you need a result
Definition: thread.h:622
bool opUseLocalDivScaleAttrib(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 opDist(const SOP_NodeVerb::CookParms &cookparms) const
void setNestParmValue(TempIndex idx, TempIndex instance, const PRM_DataItemHandle &value) override
bool opOutputFrontSeamGrp(const SOP_NodeVerb::CookParms &cookparms) const
static void saveData(std::ostream &os, bool v)
fpreal64 opFrontStiffness(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, fpreal64 &v)
bool opUseLocalZScaleAttrib(const SOP_NodeVerb::CookParms &cookparms) const
exint nodeIdx() const
Definition: OP_NodeParms.h:103
static PRM_DataItemHandle parseBinary(const char *type, UT_IStream &is)
void copyFrom(const OP_NodeParms *src) override
const UT_WorkBuffer & str()
Returns a read-only reference to the underlying UT_WorkBuffer.
UVScaling opUVScaling(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opFrontSeamGrp(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 opFrontBlend(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getLocalZAttrib() const
void setSplitGroup(const UT_StringHolder &val)
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector4.h:493
bool opCopyPrimitiveGroups(const SOP_NodeVerb::CookParms &cookparms) const
void setInterpolation(Interpolation val)
static void loadData(UT_IStream &is, UT_Vector2I &v)
UT_StringHolder opThicknessAttrib(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opFrontGrp(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getBackGrp() const
static void loadData(UT_IStream &is, UT_Vector2D &v)
const UT_StringHolder & getGroup() const
const UT_StringHolder & getTwistAttrib() const
double fpreal64
Definition: SYS_Types.h:201
UT_SharedPtr< const PRM_DataItem > PRM_DataItemHandle
Definition: APEX_Include.h:55
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector2.h:426
bool operator==(const BaseDimensions< T > &a, const BaseDimensions< Y > &b)
Definition: Dimensions.h:137
void buildFromOp(const OP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
const UT_StringHolder & getThicknessAttrib() const
UT_Vector3D opPreXformRotate(const SOP_NodeVerb::CookParms &cookparms) const
void setRotateOrder(RotateOrder val)
const UT_StringHolder & getLocalCtrAttrib() const
static void loadData(UT_IStream &is, UT_Vector3D &v)
UT_StringHolder opLocalTwistScaleAttrib(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, UT_StringHolder &v)
UT_Vector3D opPreXformScale(const SOP_NodeVerb::CookParms &cookparms) const
PreXformRotateOrder opPreXformRotateOrder(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getLocalDivScaleAttrib() const
exint length() const
PtNormalSrc opPtNormalSrc(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, UT_SharedPtr< UT_Ramp > &v)
bool opUseLocalZAttrib(const SOP_NodeVerb::CookParms &cookparms) const
static void saveData(std::ostream &os, UT_SharedPtr< UT_Ramp > s)
bool opOutputBackGrp(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
bool opGenUVs(const SOP_NodeVerb::CookParms &cookparms) const
void setTwistAttrib(const UT_StringHolder &val)
SpineType opSpineType(const SOP_NodeVerb::CookParms &cookparms) const
constexpr SYS_FORCE_INLINE T & z() noexcept
Definition: UT_Vector4.h:497
void setBackSeamGrp(const UT_StringHolder &val)
bool opOutputSideGrp(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, PRM_DataItemHandle &v)
bool opReverseSpineDirection(const SOP_NodeVerb::CookParms &cookparms) const
PreXformOrder opPreXformOrder(const SOP_NodeVerb::CookParms &cookparms) const
void loadFromOpSubclass(const LoadParms &loadparms) override
UT_Vector3D getPreXformRotate() const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix3D &value) override
UT_StringHolder opBackSeamGrp(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opLocalInsetScaleAttrib(const SOP_NodeVerb::CookParms &cookparms) const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector4D &value) override
const OP_GraphProxy * graph() const
Definition: OP_NodeParms.h:102
#define SYS_FORCE_INLINE
Definition: SYS_Inline.h:45
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_SharedPtr< UT_Ramp > &value) override
fpreal64 opCuspAngle(const SOP_NodeVerb::CookParms &cookparms) const
UT_Vector3D opShear(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 opBackBlend(const SOP_NodeVerb::CookParms &cookparms) const
bool opPreserveGroups(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getLocalZScaleAttrib() const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix4D &value) override
void setPreXformTranslate(UT_Vector3D val)
static void saveData(std::ostream &os, UT_Matrix3D v)
bool opCuspBack(const SOP_NodeVerb::CookParms &cookparms) const
bool operator!=(const SOP_PolyExtrude_2_0Parms &src) const
bool opUseSplitGroup(const SOP_NodeVerb::CookParms &cookparms) const
void setPreXformScale(UT_Vector3D val)
fpreal64 opFrontMagnitude(const SOP_NodeVerb::CookParms &cookparms) const
bool opUseTwistAttrib(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 opAxialRotation(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, UT_Vector3I &v)
void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
void setSideGrp(const UT_StringHolder &val)
long long int64
Definition: SYS_Types.h:116
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector4D &value) const override
bool opUseLocalXAttrib(const SOP_NodeVerb::CookParms &cookparms) const
UT_Vector3T< fpreal64 > UT_Vector3D
static void saveData(std::ostream &os, UT_Vector3D v)
PreXformRotateOrder getPreXformRotateOrder() const
RotateOrder opRotateOrder(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getLocalXAttrib() const
bool opLimitInset(const SOP_NodeVerb::CookParms &cookparms) const
void setFrontSeamGrp(const UT_StringHolder &val)
UT_StringHolder opLocalXAttrib(const SOP_NodeVerb::CookParms &cookparms) const
virtual void evalOpParm(int64 &v, NodeIdx node, const char *parmname, fpreal time, DEP_MicroNode *depnode) const =0
bool opCopyEdgeGroups(const SOP_NodeVerb::CookParms &cookparms) const
void setThicknessAttrib(const UT_StringHolder &val)
UVStyle opUVStyle(const SOP_NodeVerb::CookParms &cookparms) const
void saveBinary(std::ostream &os) const
Save string to binary stream.
Definition: UT_String.h:306
UT_Vector3D opPivot(const SOP_NodeVerb::CookParms &cookparms) const
bool opOutputSide(const SOP_NodeVerb::CookParms &cookparms) const
XformOrder opXformOrder(const SOP_NodeVerb::CookParms &cookparms) const
GT_API const UT_StringHolder version
UT_StringHolder opSideGrp(const SOP_NodeVerb::CookParms &cookparms) const
void setTwistRamp(UT_SharedPtr< UT_Ramp > val)
XformSpace opXformSpace(const SOP_NodeVerb::CookParms &cookparms) const
bool opXformFront(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, UT_Vector4I &v)
static void loadData(UT_IStream &is, UT_Matrix3D &v)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_StringHolder &value) const override
void setExtrusionMode(ExtrusionMode val)
UT_StringHolder opBackGrp(const SOP_NodeVerb::CookParms &cookparms) const
void doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
const char * getNestParmName(TempIndex fieldnum) const override
UT_Vector3D opPivotRotate(const SOP_NodeVerb::CookParms &cookparms) const
exint getNestNumParms(TempIndex idx) const override
bool opOutputFront(const SOP_NodeVerb::CookParms &cookparms) const
void setPtNormalSrc(PtNormalSrc val)
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector2D &value) override
const UT_StringHolder & getFrontSeamGrp() const
static void loadData(UT_IStream &is, UT_Vector4D &v)
void setLocalCtrAttrib(const UT_StringHolder &val)
fpreal64 opThicknessScale(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opLocalDivScaleAttrib(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 fpreal
Definition: SYS_Types.h:283
DEP_MicroNode * depnode() const
Definition: OP_NodeParms.h:107
UT_Vector3D opRotate(const SOP_NodeVerb::CookParms &cookparms) const
bool opUseTwistRamp(const SOP_NodeVerb::CookParms &cookparms) const
LeafData & operator=(const LeafData &)=delete
UT_SharedPtr< UT_Ramp > getTwistRamp() const
Utility class for containing a color ramp.
Definition: UT_Ramp.h:96
UT_Vector3D opTranslate(const SOP_NodeVerb::CookParms &cookparms) const
UT_Vector3D opPreXformTranslate(const SOP_NodeVerb::CookParms &cookparms) const
bool isParmColorRamp(exint idx) const override
constexpr SYS_FORCE_INLINE T & w() noexcept
Definition: UT_Vector4.h:499
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_StringHolder &value) override
void setLocalXAttrib(const UT_StringHolder &val)
static void saveData(std::ostream &os, int64 v)
UT_SharedPtr< UT_Ramp > opTwistRamp(const SOP_NodeVerb::CookParms &cookparms) const
void setNestParmValue(TempIndex idx, TempIndex instance, const exint &value) override
GLuint GLfloat * val
Definition: glcorearb.h:1608
virtual UT_StringHolder baseGetSignature() const
Definition: OP_NodeParms.h:302
Vec3< typename MatType::value_type > getScale(const MatType &mat)
Return a Vec3 representing the lengths of the passed matrix's upper 3×3's rows.
Definition: Mat.h:633
void setLocalTwistScaleAttrib(const UT_StringHolder &val)
UT_StringHolder opGroup(const SOP_NodeVerb::CookParms &cookparms) const
#define SOP_API
Definition: SOP_API.h:10
void setPreXformShear(UT_Vector3D val)
fpreal64 opBackStiffness(const SOP_NodeVerb::CookParms &cookparms) const
void setPreXformOrder(PreXformOrder val)
void getNestParmValue(TempIndex idx, TempIndex instance, fpreal &value) const override
fpreal64 opTwistScale(const SOP_NodeVerb::CookParms &cookparms) const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix2D &value) const override
Interpolation getInterpolation() const
static void loadData(UT_IStream &is, bool &v)
SplitType opSplitType(const SOP_NodeVerb::CookParms &cookparms) const
fpreal getCookTime() const
Definition: SOP_NodeVerb.h:432
void setLocalDivScaleAttrib(const UT_StringHolder &val)
void save(std::ostream &os) const
static void loadData(UT_IStream &is, UT_Matrix2D &v)
UT_StringHolder opLocalCtrAttrib(const SOP_NodeVerb::CookParms &cookparms) const
const char * findChar(int c) const
Definition: UT_String.h:1421
#define UT_ASSERT(ZZ)
Definition: UT_Assert.h:165
fpreal64 opTwist(const SOP_NodeVerb::CookParms &cookparms) const
bool operator==(const SOP_PolyExtrude_2_0Parms &src) const
Spacing opSpacing(const SOP_NodeVerb::CookParms &cookparms) const
bool opUseLocalCtrAttrib(const SOP_NodeVerb::CookParms &cookparms) const
void getNestParmValue(TempIndex idx, TempIndex instance, exint &value) const override
GLboolean r
Definition: glcorearb.h:1222
bool opUseThicknessAttrib(const SOP_NodeVerb::CookParms &cookparms) const
exint bread(uint8 *buffer, exint asize=1)
void setFrontGrp(const UT_StringHolder &val)
PreXformOrder getPreXformOrder() const
ParmType getNestParmType(TempIndex fieldnum) const override
bool opCuspFront(const SOP_NodeVerb::CookParms &cookparms) const
void setPtNormalAttrib(const UT_StringHolder &val)
const UT_StringHolder & getLocalTwistScaleAttrib() const
void setNestParmValue(TempIndex idx, TempIndex instance, const fpreal &value) override
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector3.h:667
Interpolation opInterpolation(const SOP_NodeVerb::CookParms &cookparms) const
static void saveData(std::ostream &os, UT_Vector4D v)
ExtrusionMode getExtrusionMode() const
static void saveData(std::ostream &os, fpreal64 v)
virtual bool isDirect() const =0
Direct proxies mirror actual nodes:
static void saveData(std::ostream &os, UT_StringHolder s)
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector2.h:428
SYS_FORCE_INLINE bool isstring() const
void setPreXformRotateOrder(PreXformRotateOrder val)
static void saveData(std::ostream &os, UT_Vector2D v)
SYS_FORCE_INLINE void strncpy(const char *src, exint maxlen)
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix2D &value) override
const UT_StringHolder & getLocalInsetScaleAttrib() const
GLenum src
Definition: glcorearb.h:1793
const UT_StringHolder & getFrontGrp() const
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector3.h:665