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