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