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