HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
SOP_Sweep-2.0.proto.h
Go to the documentation of this file.
1 /* Automagically Generated by generate_proto.py
2  * Do not Edit
3  */
4 #pragma once
5 
6 #include <SOP/SOP_API.h>
7 #include <SOP/SOP_NodeVerb.h>
8 #include <SOP/SOP_GraphProxy.h>
9 
10 #include <OP/OP_Utils.h>
11 #include <PRM/PRM_Parm.h>
12 #include <UT/UT_IStream.h>
13 #include <UT/UT_NTStreamUtil.h>
14 #include <UT/UT_Ramp.h>
15 #include <UT/UT_SharedPtr.h>
16 #include <UT/UT_StringHolder.h>
17 #include <UT/UT_StringStream.h>
18 #include <UT/UT_VectorTypes.h>
19 #include <UT/UT_EnvControl.h>
20 #include <SYS/SYS_Types.h>
21 
22 class DEP_MicroNode;
23 namespace SOP_Sweep_2_0Enums
24 {
25  enum class SurfaceShape
26  {
27  INPUT = 0,
28  TUBE,
29  SQUARE,
30  RIBBON
31  };
32 
34  getToken(SurfaceShape enum_value)
35  {
36  using namespace UT::Literal;
37  switch (enum_value) {
38  case SurfaceShape::INPUT: return "input"_sh;
39  case SurfaceShape::TUBE: return "tube"_sh;
40  case SurfaceShape::SQUARE: return "square"_sh;
41  case SurfaceShape::RIBBON: return "ribbon"_sh;
42  default: UT_ASSERT(false); return ""_sh;
43  }
44  }
45 
46  enum class SurfaceType
47  {
48  POINTS = 0,
49  ROWS,
50  COLS,
51  ROWCOL,
52  TRIS,
53  QUADS,
54  ALTTRIS,
55  REVTRIS
56  };
57 
59  getToken(SurfaceType enum_value)
60  {
61  using namespace UT::Literal;
62  switch (enum_value) {
63  case SurfaceType::POINTS: return "points"_sh;
64  case SurfaceType::ROWS: return "rows"_sh;
65  case SurfaceType::COLS: return "cols"_sh;
66  case SurfaceType::ROWCOL: return "rowcol"_sh;
67  case SurfaceType::TRIS: return "tris"_sh;
68  case SurfaceType::QUADS: return "quads"_sh;
69  case SurfaceType::ALTTRIS: return "alttris"_sh;
70  case SurfaceType::REVTRIS: return "revtris"_sh;
71  default: UT_ASSERT(false); return ""_sh;
72  }
73  }
74 
75  enum class EndCapType
76  {
77  NONE = 0,
78  SINGLE,
79  GRID,
81  };
82 
84  getToken(EndCapType enum_value)
85  {
86  using namespace UT::Literal;
87  switch (enum_value) {
88  case EndCapType::NONE: return "none"_sh;
89  case EndCapType::SINGLE: return "single"_sh;
90  case EndCapType::GRID: return "grid"_sh;
91  case EndCapType::SIDESINGLE: return "sidesingle"_sh;
92  default: UT_ASSERT(false); return ""_sh;
93  }
94  }
95 
96  enum class ROrd
97  {
98  XYZ = 0,
99  XZY,
100  YXZ,
101  YZX,
102  ZXY,
103  ZYX
104  };
105 
107  getToken(ROrd enum_value)
108  {
109  using namespace UT::Literal;
110  switch (enum_value) {
111  case ROrd::XYZ: return "xyz"_sh;
112  case ROrd::XZY: return "xzy"_sh;
113  case ROrd::YXZ: return "yxz"_sh;
114  case ROrd::YZX: return "yzx"_sh;
115  case ROrd::ZXY: return "zxy"_sh;
116  case ROrd::ZYX: return "zyx"_sh;
117  default: UT_ASSERT(false); return ""_sh;
118  }
119  }
120 
121  enum class RollPer
122  {
123  EDGE = 0,
124  DISTANCE,
125  ATTRIB,
126  FULLEDGES,
128  };
129 
131  getToken(RollPer enum_value)
132  {
133  using namespace UT::Literal;
134  switch (enum_value) {
135  case RollPer::EDGE: return "edge"_sh;
136  case RollPer::DISTANCE: return "distance"_sh;
137  case RollPer::ATTRIB: return "attrib"_sh;
138  case RollPer::FULLEDGES: return "fulledges"_sh;
139  case RollPer::FULLDISTANCE: return "fulldistance"_sh;
140  default: UT_ASSERT(false); return ""_sh;
141  }
142  }
143 
144  enum class YawPer
145  {
146  EDGE = 0,
147  DISTANCE,
148  ATTRIB,
149  FULLEDGES,
151  };
152 
154  getToken(YawPer enum_value)
155  {
156  using namespace UT::Literal;
157  switch (enum_value) {
158  case YawPer::EDGE: return "edge"_sh;
159  case YawPer::DISTANCE: return "distance"_sh;
160  case YawPer::ATTRIB: return "attrib"_sh;
161  case YawPer::FULLEDGES: return "fulledges"_sh;
162  case YawPer::FULLDISTANCE: return "fulldistance"_sh;
163  default: UT_ASSERT(false); return ""_sh;
164  }
165  }
166 
167  enum class PitchPer
168  {
169  EDGE = 0,
170  DISTANCE,
171  ATTRIB,
172  FULLEDGES,
174  };
175 
177  getToken(PitchPer enum_value)
178  {
179  using namespace UT::Literal;
180  switch (enum_value) {
181  case PitchPer::EDGE: return "edge"_sh;
182  case PitchPer::DISTANCE: return "distance"_sh;
183  case PitchPer::ATTRIB: return "attrib"_sh;
184  case PitchPer::FULLEDGES: return "fulledges"_sh;
185  case PitchPer::FULLDISTANCE: return "fulldistance"_sh;
186  default: UT_ASSERT(false); return ""_sh;
187  }
188  }
189 
190  enum class CopyOrder
191  {
192  ALL = 0,
193  EACH,
194  CYCLEVTX,
195  CYCLEPR,
196  ATTRIB
197  };
198 
200  getToken(CopyOrder enum_value)
201  {
202  using namespace UT::Literal;
203  switch (enum_value) {
204  case CopyOrder::ALL: return "all"_sh;
205  case CopyOrder::EACH: return "each"_sh;
206  case CopyOrder::CYCLEVTX: return "cyclevtx"_sh;
207  case CopyOrder::CYCLEPR: return "cyclepr"_sh;
208  case CopyOrder::ATTRIB: return "attrib"_sh;
209  default: UT_ASSERT(false); return ""_sh;
210  }
211  }
212 
213  enum class PrimType
214  {
215  AUTO = 0,
216  POLY,
217  MESH,
218  NURBS,
219  BEZIER,
220  POLYSOUP
221  };
222 
224  getToken(PrimType enum_value)
225  {
226  using namespace UT::Literal;
227  switch (enum_value) {
228  case PrimType::AUTO: return "auto"_sh;
229  case PrimType::POLY: return "poly"_sh;
230  case PrimType::MESH: return "mesh"_sh;
231  case PrimType::NURBS: return "nurbs"_sh;
232  case PrimType::BEZIER: return "bezier"_sh;
233  case PrimType::POLYSOUP: return "polysoup"_sh;
234  default: UT_ASSERT(false); return ""_sh;
235  }
236  }
237 
238  enum class UpVectorType
239  {
240  NORMAL = 0,
241  X,
242  Y,
243  Z,
244  ATTRIB,
245  CUSTOM
246  };
247 
249  getToken(UpVectorType enum_value)
250  {
251  using namespace UT::Literal;
252  switch (enum_value) {
253  case UpVectorType::NORMAL: return "normal"_sh;
254  case UpVectorType::X: return "x"_sh;
255  case UpVectorType::Y: return "y"_sh;
256  case UpVectorType::Z: return "z"_sh;
257  case UpVectorType::ATTRIB: return "attrib"_sh;
258  case UpVectorType::CUSTOM: return "custom"_sh;
259  default: UT_ASSERT(false); return ""_sh;
260  }
261  }
262 
263  enum class TangentType
264  {
265  AVGDIR = 0,
266  DIFF,
267  PREV,
268  NEXT,
269  NONE
270  };
271 
273  getToken(TangentType enum_value)
274  {
275  using namespace UT::Literal;
276  switch (enum_value) {
277  case TangentType::AVGDIR: return "avgdir"_sh;
278  case TangentType::DIFF: return "diff"_sh;
279  case TangentType::PREV: return "prev"_sh;
280  case TangentType::NEXT: return "next"_sh;
281  case TangentType::NONE: return "none"_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  myCurveGroup = ""_UTsh;
297  myCrossSectionGroup = ""_UTsh;
298  mySurfaceShape = 0;
299  mySurfaceType = 5;
300  myScale = 1;
301  myCols = 8;
302  myRadius = 0.1;
303  myWidth = 0.2;
304  myReverseCrossSections = false;
305  myStretchAroundTurns = true;
306  myMaxStretchAroundTurns = 10;
307  myEndCapType = 0;
308  myCapDivs = 3;
309  myTriangularPoles = false;
310  myCapScale = 1;
311  myCapRoundness = 1;
312  myAddEndCapsGroup = false;
313  myEndCapsGroup = "endcaps"_UTsh;
314  myApplyScale = false;
315  myScaleRamp = UT_SharedPtr<UT_Ramp>(0);
316  myROrd = 0;
317  myApplyRoll = true;
318  myRoll = 0;
319  myFullTwists = 0;
320  myIncRoll = 0;
321  myRollPer = 4;
322  myRollAttrib = "roll"_UTsh;
323  myApplyYaw = false;
324  myYaw = 0;
325  myIncYaw = 0;
326  myYawPer = 4;
327  myYawAttrib = "yaw"_UTsh;
328  myApplyPitch = false;
329  myPitch = 0;
330  myIncPitch = 0;
331  myPitchPer = 4;
332  myPitchAttrib = "pitch"_UTsh;
333  myCopyOrder = 1;
334  myCrossSectionAttrib = "variant"_UTsh;
335  myPrimType = 0;
336  myUnrollClosedRowCol = false;
337  mySwapRowCol = false;
338  myCloseIfNoCurveInput = false;
339  myTangentType = 0;
340  myContinuousClosed = true;
341  myExtrapolateEndTangents = false;
342  myTransformByAttribs = true;
343  myComputeUVs = false;
344  myOverrideExistingUVs = false;
345  myLengthWeightedUVs = true;
346  myNormalizeU = true;
347  myNormalizeV = false;
348  myFlipU = true;
349  myUVScale = UT_Vector2D(1,1);
350  myUseMeshEdgeLengths = true;
351  myPropScalePerCurve = true;
352  myWrapU = true;
353  myWrapV = true;
354  myAttribsFromBackbone = "* ^P ^N ^up ^pscale ^scale ^orient ^rot ^pivot ^trans ^transform"_UTsh;
355  myAttribsFromCrossSection = "*"_UTsh;
356  myAddPointRow = false;
357  myPtRowAttrib = "ptrow"_UTsh;
358  myAddPointCol = false;
359  myPtColAttrib = "ptcol"_UTsh;
360  myAddPrimRow = false;
361  myPrimRowAttrib = "primrow"_UTsh;
362  myAddPrimCol = false;
363  myPrimColAttrib = "primcol"_UTsh;
364  myAddCrossSectionNum = false;
365  myCrossSectionNumAttrib = "crossnum"_UTsh;
366  myAddCurveNum = false;
367  myCurveNumAttrib = "curvenum"_UTsh;
368  myUpVectorType = 0;
369  myUpVectorAtStart = true;
370  myUseEndUpVector = false;
371  myUpVectorAttrib = "start_up"_UTsh;
372  myEndUpVectorAttrib = "end_up"_UTsh;
373  myUpVector = UT_Vector3D(0,1,0);
374  myEndUpVector = UT_Vector3D(0,1,0);
375 
376  }
377 
378  explicit SOP_Sweep_2_0Parms(const SOP_Sweep_2_0Parms &) = default;
379  SOP_Sweep_2_0Parms &operator=(const SOP_Sweep_2_0Parms &) = default;
380  SOP_Sweep_2_0Parms(SOP_Sweep_2_0Parms &&) noexcept = default;
381  SOP_Sweep_2_0Parms &operator=(SOP_Sweep_2_0Parms &&) noexcept = default;
382 
383  ~SOP_Sweep_2_0Parms() override {}
384 
385  bool operator==(const SOP_Sweep_2_0Parms &src) const
386  {
387  if (myCurveGroup != src.myCurveGroup) return false;
388  if (myCrossSectionGroup != src.myCrossSectionGroup) return false;
389  if (mySurfaceShape != src.mySurfaceShape) return false;
390  if (mySurfaceType != src.mySurfaceType) return false;
391  if (myScale != src.myScale) return false;
392  if (myCols != src.myCols) return false;
393  if (myRadius != src.myRadius) return false;
394  if (myWidth != src.myWidth) return false;
395  if (myReverseCrossSections != src.myReverseCrossSections) return false;
396  if (myStretchAroundTurns != src.myStretchAroundTurns) return false;
397  if (myMaxStretchAroundTurns != src.myMaxStretchAroundTurns) return false;
398  if (myEndCapType != src.myEndCapType) return false;
399  if (myCapDivs != src.myCapDivs) return false;
400  if (myTriangularPoles != src.myTriangularPoles) return false;
401  if (myCapScale != src.myCapScale) return false;
402  if (myCapRoundness != src.myCapRoundness) return false;
403  if (myAddEndCapsGroup != src.myAddEndCapsGroup) return false;
404  if (myEndCapsGroup != src.myEndCapsGroup) return false;
405  if (myApplyScale != src.myApplyScale) return false;
406  if (myScaleRamp != src.myScaleRamp)
407  { if (!myScaleRamp || !src.myScaleRamp || !(*myScaleRamp == *src.myScaleRamp)) return false; }
408  if (myROrd != src.myROrd) return false;
409  if (myApplyRoll != src.myApplyRoll) return false;
410  if (myRoll != src.myRoll) return false;
411  if (myFullTwists != src.myFullTwists) return false;
412  if (myIncRoll != src.myIncRoll) return false;
413  if (myRollPer != src.myRollPer) return false;
414  if (myRollAttrib != src.myRollAttrib) return false;
415  if (myApplyYaw != src.myApplyYaw) return false;
416  if (myYaw != src.myYaw) return false;
417  if (myIncYaw != src.myIncYaw) return false;
418  if (myYawPer != src.myYawPer) return false;
419  if (myYawAttrib != src.myYawAttrib) return false;
420  if (myApplyPitch != src.myApplyPitch) return false;
421  if (myPitch != src.myPitch) return false;
422  if (myIncPitch != src.myIncPitch) return false;
423  if (myPitchPer != src.myPitchPer) return false;
424  if (myPitchAttrib != src.myPitchAttrib) return false;
425  if (myCopyOrder != src.myCopyOrder) return false;
426  if (myCrossSectionAttrib != src.myCrossSectionAttrib) return false;
427  if (myPrimType != src.myPrimType) return false;
428  if (myUnrollClosedRowCol != src.myUnrollClosedRowCol) return false;
429  if (mySwapRowCol != src.mySwapRowCol) return false;
430  if (myCloseIfNoCurveInput != src.myCloseIfNoCurveInput) return false;
431  if (myTangentType != src.myTangentType) return false;
432  if (myContinuousClosed != src.myContinuousClosed) return false;
433  if (myExtrapolateEndTangents != src.myExtrapolateEndTangents) return false;
434  if (myTransformByAttribs != src.myTransformByAttribs) return false;
435  if (myComputeUVs != src.myComputeUVs) return false;
436  if (myOverrideExistingUVs != src.myOverrideExistingUVs) return false;
437  if (myLengthWeightedUVs != src.myLengthWeightedUVs) return false;
438  if (myNormalizeU != src.myNormalizeU) return false;
439  if (myNormalizeV != src.myNormalizeV) return false;
440  if (myFlipU != src.myFlipU) return false;
441  if (myUVScale != src.myUVScale) return false;
442  if (myUseMeshEdgeLengths != src.myUseMeshEdgeLengths) return false;
443  if (myPropScalePerCurve != src.myPropScalePerCurve) return false;
444  if (myWrapU != src.myWrapU) return false;
445  if (myWrapV != src.myWrapV) return false;
446  if (myAttribsFromBackbone != src.myAttribsFromBackbone) return false;
447  if (myAttribsFromCrossSection != src.myAttribsFromCrossSection) return false;
448  if (myAddPointRow != src.myAddPointRow) return false;
449  if (myPtRowAttrib != src.myPtRowAttrib) return false;
450  if (myAddPointCol != src.myAddPointCol) return false;
451  if (myPtColAttrib != src.myPtColAttrib) return false;
452  if (myAddPrimRow != src.myAddPrimRow) return false;
453  if (myPrimRowAttrib != src.myPrimRowAttrib) return false;
454  if (myAddPrimCol != src.myAddPrimCol) return false;
455  if (myPrimColAttrib != src.myPrimColAttrib) return false;
456  if (myAddCrossSectionNum != src.myAddCrossSectionNum) return false;
457  if (myCrossSectionNumAttrib != src.myCrossSectionNumAttrib) return false;
458  if (myAddCurveNum != src.myAddCurveNum) return false;
459  if (myCurveNumAttrib != src.myCurveNumAttrib) return false;
460  if (myUpVectorType != src.myUpVectorType) return false;
461  if (myUpVectorAtStart != src.myUpVectorAtStart) return false;
462  if (myUseEndUpVector != src.myUseEndUpVector) return false;
463  if (myUpVectorAttrib != src.myUpVectorAttrib) return false;
464  if (myEndUpVectorAttrib != src.myEndUpVectorAttrib) return false;
465  if (myUpVector != src.myUpVector) return false;
466  if (myEndUpVector != src.myEndUpVector) return false;
467 
468  return true;
469  }
470  bool operator!=(const SOP_Sweep_2_0Parms &src) const
471  {
472  return !operator==(src);
473  }
485 
486 
487 
488  void buildFromOp(const OP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
489  {
490  myCurveGroup = ""_UTsh;
491  if (true)
492  graph->evalOpParm(myCurveGroup, nodeidx, "curvegroup", time, 0);
493  myCrossSectionGroup = ""_UTsh;
494  if (true)
495  graph->evalOpParm(myCrossSectionGroup, nodeidx, "crosssectiongroup", time, 0);
496  mySurfaceShape = 0;
497  if (true)
498  graph->evalOpParm(mySurfaceShape, nodeidx, "surfaceshape", time, 0);
499  mySurfaceType = 5;
500  if (true)
501  graph->evalOpParm(mySurfaceType, nodeidx, "surfacetype", time, 0);
502  myScale = 1;
503  if (true && ( (true&&!(((int64(getSurfaceShape())!=0))||((int64(getSurfaceShape())!=0)))) ) )
504  graph->evalOpParm(myScale, nodeidx, "scale", time, 0);
505  myCols = 8;
506  if (true && ( (true&&!(((int64(getSurfaceShape())==0))||((int64(getSurfaceShape())==0)))) ) )
507  graph->evalOpParm(myCols, nodeidx, "cols", time, 0);
508  myRadius = 0.1;
509  if (true && ( (true&&!(((int64(getSurfaceShape())!=1))||((int64(getSurfaceShape())!=1)))) ) )
510  graph->evalOpParm(myRadius, nodeidx, "radius", time, 0);
511  myWidth = 0.2;
512  if (true && ( (true&&!(((int64(getSurfaceShape())!=3)&&(int64(getSurfaceShape())!=2))||((int64(getSurfaceShape())!=3)&&(int64(getSurfaceShape())!=2)))) ) )
513  graph->evalOpParm(myWidth, nodeidx, "width", time, 0);
514  myReverseCrossSections = false;
515  if (true)
516  graph->evalOpParm(myReverseCrossSections, nodeidx, "reversecrosssections", time, 0);
517  myStretchAroundTurns = true;
518  if (true)
519  graph->evalOpParm(myStretchAroundTurns, nodeidx, "stretcharoundturns", time, 0);
520  myMaxStretchAroundTurns = 10;
521  if (true && ( (true&&!(((getStretchAroundTurns()==0)))) ) )
522  graph->evalOpParm(myMaxStretchAroundTurns, nodeidx, "maxstretcharoundturns", time, 0);
523  myEndCapType = 0;
524  if (true)
525  graph->evalOpParm(myEndCapType, nodeidx, "endcaptype", time, 0);
526  myCapDivs = 3;
527  if (true && ( (true&&!(((int64(getEndCapType())==0))||((int64(getEndCapType())==1))||((int64(getEndCapType())==3))||((int64(getEndCapType())==0))||((int64(getEndCapType())==1))||((int64(getEndCapType())==3)))) ) )
528  graph->evalOpParm(myCapDivs, nodeidx, "capdivs", time, 0);
529  myTriangularPoles = false;
530  if (true && ( (true&&!(((int64(getEndCapType())==0))||((int64(getEndCapType())==1))||((int64(getEndCapType())==3))||((int64(getEndCapType())==0))||((int64(getEndCapType())==1))||((int64(getEndCapType())==3)))) ) )
531  graph->evalOpParm(myTriangularPoles, nodeidx, "triangularpoles", time, 0);
532  myCapScale = 1;
533  if (true && ( (true&&!(((int64(getEndCapType())==0))||((int64(getEndCapType())==1))||((int64(getEndCapType())==3))||((int64(getEndCapType())==0))||((int64(getEndCapType())==1))||((int64(getEndCapType())==3)))) ) )
534  graph->evalOpParm(myCapScale, nodeidx, "capscale", time, 0);
535  myCapRoundness = 1;
536  if (true && ( (true&&!(((int64(getEndCapType())==0))||((int64(getEndCapType())==1))||((int64(getEndCapType())==3))||((int64(getEndCapType())==0))||((int64(getEndCapType())==1))||((int64(getEndCapType())==3)))) ) )
537  graph->evalOpParm(myCapRoundness, nodeidx, "caproundness", time, 0);
538  myAddEndCapsGroup = false;
539  if (true)
540  graph->evalOpParm(myAddEndCapsGroup, nodeidx, "addendcapsgroup", time, 0);
541  myEndCapsGroup = "endcaps"_UTsh;
542  if (true && ( (true&&!(((getAddEndCapsGroup()==0)))) ) )
543  graph->evalOpParm(myEndCapsGroup, nodeidx, "endcapsgroup", time, 0);
544  myApplyScale = false;
545  if (true)
546  graph->evalOpParm(myApplyScale, nodeidx, "applyscale", time, 0);
547  myScaleRamp = UT_SharedPtr<UT_Ramp>(0);
548  if (true && ( (true&&!(((getApplyScale()==0)))) ) )
549  graph->evalOpParm(myScaleRamp, nodeidx, "scaleramp", time, 0);
550  myROrd = 0;
551  if (true)
552  graph->evalOpParm(myROrd, nodeidx, "rOrd", time, 0);
553  myApplyRoll = true;
554  if (true)
555  graph->evalOpParm(myApplyRoll, nodeidx, "applyroll", time, 0);
556  myRoll = 0;
557  if (true && ( (true&&!(((getApplyRoll()==0)))) ) )
558  graph->evalOpParm(myRoll, nodeidx, "roll", time, 0);
559  myFullTwists = 0;
560  if (true && ( (true&&!(((getApplyRoll()==0)))) ) )
561  graph->evalOpParm(myFullTwists, nodeidx, "fulltwists", time, 0);
562  myIncRoll = 0;
563  if (true && ( (true&&!(((getApplyRoll()==0)))) ) )
564  graph->evalOpParm(myIncRoll, nodeidx, "incroll", time, 0);
565  myRollPer = 4;
566  if (true && ( (true&&!(((getApplyRoll()==0)))) ) )
567  graph->evalOpParm(myRollPer, nodeidx, "rollper", time, 0);
568  myRollAttrib = "roll"_UTsh;
569  if (true && ( (true&&!(((getApplyRoll()==0))||((getApplyRoll()==1)&&(int64(getRollPer())!=2))||((getApplyRoll()==0))||((getApplyRoll()==1)&&(int64(getRollPer())!=2)))) ) )
570  graph->evalOpParm(myRollAttrib, nodeidx, "rollattrib", time, 0);
571  myApplyYaw = false;
572  if (true)
573  graph->evalOpParm(myApplyYaw, nodeidx, "applyyaw", time, 0);
574  myYaw = 0;
575  if (true && ( (true&&!(((getApplyYaw()==0)))) ) )
576  graph->evalOpParm(myYaw, nodeidx, "yaw", time, 0);
577  myIncYaw = 0;
578  if (true && ( (true&&!(((getApplyYaw()==0)))) ) )
579  graph->evalOpParm(myIncYaw, nodeidx, "incyaw", time, 0);
580  myYawPer = 4;
581  if (true && ( (true&&!(((getApplyYaw()==0)))) ) )
582  graph->evalOpParm(myYawPer, nodeidx, "yawper", time, 0);
583  myYawAttrib = "yaw"_UTsh;
584  if (true && ( (true&&!(((getApplyYaw()==0))||((getApplyYaw()==1)&&(int64(getYawPer())!=2))||((getApplyYaw()==0))||((getApplyYaw()==1)&&(int64(getYawPer())!=2)))) ) )
585  graph->evalOpParm(myYawAttrib, nodeidx, "yawattrib", time, 0);
586  myApplyPitch = false;
587  if (true)
588  graph->evalOpParm(myApplyPitch, nodeidx, "applypitch", time, 0);
589  myPitch = 0;
590  if (true && ( (true&&!(((getApplyPitch()==0)))) ) )
591  graph->evalOpParm(myPitch, nodeidx, "pitch", time, 0);
592  myIncPitch = 0;
593  if (true && ( (true&&!(((getApplyPitch()==0)))) ) )
594  graph->evalOpParm(myIncPitch, nodeidx, "incpitch", time, 0);
595  myPitchPer = 4;
596  if (true && ( (true&&!(((getApplyPitch()==0)))) ) )
597  graph->evalOpParm(myPitchPer, nodeidx, "pitchper", time, 0);
598  myPitchAttrib = "pitch"_UTsh;
599  if (true && ( (true&&!(((getApplyPitch()==0))||((getApplyPitch()==1)&&(int64(getPitchPer())!=2))||((getApplyPitch()==0))||((getApplyPitch()==1)&&(int64(getPitchPer())!=2)))) ) )
600  graph->evalOpParm(myPitchAttrib, nodeidx, "pitchattrib", time, 0);
601  myCopyOrder = 1;
602  if (true && ( (true&&!(((int64(getSurfaceShape())!=0)))) ) )
603  graph->evalOpParm(myCopyOrder, nodeidx, "copyorder", time, 0);
604  myCrossSectionAttrib = "variant"_UTsh;
605  if (true && ( (true&&!(((int64(getSurfaceShape())!=0))||((int64(getCopyOrder())!=4))||((int64(getSurfaceShape())!=0))||((int64(getCopyOrder())!=4)))) ) )
606  graph->evalOpParm(myCrossSectionAttrib, nodeidx, "crosssectionattrib", time, 0);
607  myPrimType = 0;
608  if (true && ( (true&&!(((int64(getSurfaceType())==0)))) ) )
609  graph->evalOpParm(myPrimType, nodeidx, "primtype", time, 0);
610  myUnrollClosedRowCol = false;
611  if (true && ( (true&&!(((int64(getSurfaceType())==0)))) ) )
612  graph->evalOpParm(myUnrollClosedRowCol, nodeidx, "unrollclosedrowcol", time, 0);
613  mySwapRowCol = false;
614  if (true)
615  graph->evalOpParm(mySwapRowCol, nodeidx, "swaprowcol", time, 0);
616  myCloseIfNoCurveInput = false;
617  if (true && ( (true&&!(((int64(getSurfaceType())==0))||((int64(getSurfaceType())==1))||(((graph->getInput(nodeidx,0)>=0)!=0)))) ) )
618  graph->evalOpParm(myCloseIfNoCurveInput, nodeidx, "closeifnocurveinput", time, 0);
619  myTangentType = 0;
620  if (true)
621  graph->evalOpParm(myTangentType, nodeidx, "tangenttype", time, 0);
622  myContinuousClosed = true;
623  if (true && ( (true&&!(((int64(getTangentType())==4)))) ) )
624  graph->evalOpParm(myContinuousClosed, nodeidx, "continuousclosed", time, 0);
625  myExtrapolateEndTangents = false;
626  if (true && ( (true&&!(((int64(getTangentType())==4)))) ) )
627  graph->evalOpParm(myExtrapolateEndTangents, nodeidx, "extrapolateendtangents", time, 0);
628  myTransformByAttribs = true;
629  if (true)
630  graph->evalOpParm(myTransformByAttribs, nodeidx, "transformbyattribs", time, 0);
631  myComputeUVs = false;
632  if (true)
633  graph->evalOpParm(myComputeUVs, nodeidx, "computeuvs", time, 0);
634  myOverrideExistingUVs = false;
635  if (true && ( (true&&!(((getComputeUVs()==0)))) ) )
636  graph->evalOpParm(myOverrideExistingUVs, nodeidx, "overrideexistinguvs", time, 0);
637  myLengthWeightedUVs = true;
638  if (true && ( (true&&!(((getComputeUVs()==0)))) ) )
639  graph->evalOpParm(myLengthWeightedUVs, nodeidx, "lengthweighteduvs", time, 0);
640  myNormalizeU = true;
641  if (true && ( (true&&!(((getComputeUVs()==0))||((getLengthWeightedUVs()==0)))) ) )
642  graph->evalOpParm(myNormalizeU, nodeidx, "normalizeu", time, 0);
643  myNormalizeV = false;
644  if (true && ( (true&&!(((getComputeUVs()==0))||((getLengthWeightedUVs()==0)))) ) )
645  graph->evalOpParm(myNormalizeV, nodeidx, "normalizev", time, 0);
646  myFlipU = true;
647  if (true && ( (true&&!(((getComputeUVs()==0)))) ) )
648  graph->evalOpParm(myFlipU, nodeidx, "flipu", time, 0);
649  myUVScale = UT_Vector2D(1,1);
650  if (true && ( (true&&!(((getComputeUVs()==0)))) ) )
651  graph->evalOpParm(myUVScale, nodeidx, "uvscale", time, 0);
652  myUseMeshEdgeLengths = true;
653  if (true && ( (true&&!(((getComputeUVs()==0))||((getLengthWeightedUVs()==0)))) ) )
654  graph->evalOpParm(myUseMeshEdgeLengths, nodeidx, "usemeshedgelengths", time, 0);
655  myPropScalePerCurve = true;
656  if (true && ( (true&&!(((getComputeUVs()==0))||((getLengthWeightedUVs()==0))||((getNormalizeU()!=1))||((getNormalizeV()!=0)))) ) )
657  graph->evalOpParm(myPropScalePerCurve, nodeidx, "propscalepercurve", time, 0);
658  myWrapU = true;
659  if (true && ( (true&&!(((getComputeUVs()==0))||((getLengthWeightedUVs()==0))||((getNormalizeU()==1)))) ) )
660  graph->evalOpParm(myWrapU, nodeidx, "wrapu", time, 0);
661  myWrapV = true;
662  if (true && ( (true&&!(((getComputeUVs()==0))||((getLengthWeightedUVs()==0))||((getNormalizeV()==1)))) ) )
663  graph->evalOpParm(myWrapV, nodeidx, "wrapv", time, 0);
664  myAttribsFromBackbone = "* ^P ^N ^up ^pscale ^scale ^orient ^rot ^pivot ^trans ^transform"_UTsh;
665  if (true)
666  graph->evalOpParm(myAttribsFromBackbone, nodeidx, "attribsfrombackbone", time, 0);
667  myAttribsFromCrossSection = "*"_UTsh;
668  if (true)
669  graph->evalOpParm(myAttribsFromCrossSection, nodeidx, "attribsfromcrosssection", time, 0);
670  myAddPointRow = false;
671  if (true)
672  graph->evalOpParm(myAddPointRow, nodeidx, "addptrow", time, 0);
673  myPtRowAttrib = "ptrow"_UTsh;
674  if (true && ( (true&&!(((getAddPointRow()==0)))) ) )
675  graph->evalOpParm(myPtRowAttrib, nodeidx, "ptrowattrib", time, 0);
676  myAddPointCol = false;
677  if (true)
678  graph->evalOpParm(myAddPointCol, nodeidx, "addptcol", time, 0);
679  myPtColAttrib = "ptcol"_UTsh;
680  if (true && ( (true&&!(((getAddPointCol()==0)))) ) )
681  graph->evalOpParm(myPtColAttrib, nodeidx, "ptcolattrib", time, 0);
682  myAddPrimRow = false;
683  if (true)
684  graph->evalOpParm(myAddPrimRow, nodeidx, "addprimrow", time, 0);
685  myPrimRowAttrib = "primrow"_UTsh;
686  if (true && ( (true&&!(((getAddPrimRow()==0)))) ) )
687  graph->evalOpParm(myPrimRowAttrib, nodeidx, "primrowattrib", time, 0);
688  myAddPrimCol = false;
689  if (true)
690  graph->evalOpParm(myAddPrimCol, nodeidx, "addprimcol", time, 0);
691  myPrimColAttrib = "primcol"_UTsh;
692  if (true && ( (true&&!(((getAddPrimCol()==0)))) ) )
693  graph->evalOpParm(myPrimColAttrib, nodeidx, "primcolattrib", time, 0);
694  myAddCrossSectionNum = false;
695  if (true)
696  graph->evalOpParm(myAddCrossSectionNum, nodeidx, "addcrosssectionnum", time, 0);
697  myCrossSectionNumAttrib = "crossnum"_UTsh;
698  if (true && ( (true&&!(((getAddCrossSectionNum()==0)))) ) )
699  graph->evalOpParm(myCrossSectionNumAttrib, nodeidx, "crosssectionnumattrib", time, 0);
700  myAddCurveNum = false;
701  if (true)
702  graph->evalOpParm(myAddCurveNum, nodeidx, "addcurvenum", time, 0);
703  myCurveNumAttrib = "curvenum"_UTsh;
704  if (true && ( (true&&!(((getAddCurveNum()==0)))) ) )
705  graph->evalOpParm(myCurveNumAttrib, nodeidx, "curvenumattrib", time, 0);
706  myUpVectorType = 0;
707  if (true && ( (true&&!(((int64(getTangentType())==4)))) ) )
708  graph->evalOpParm(myUpVectorType, nodeidx, "upvectortype", time, 0);
709  myUpVectorAtStart = true;
710  if (true && ( (true&&!(((int64(getTangentType())==4)))) ) )
711  graph->evalOpParm(myUpVectorAtStart, nodeidx, "upvectoratstart", time, 0);
712  myUseEndUpVector = false;
713  if (true && ( (true&&!(((int64(getTangentType())==4))||((getUpVectorAtStart()==0)))) ) )
714  graph->evalOpParm(myUseEndUpVector, nodeidx, "useendupvector", time, 0);
715  myUpVectorAttrib = "start_up"_UTsh;
716  if (true && ( (true&&!(((int64(getTangentType())==4))||((int64(getUpVectorType())!=4))||((int64(getTangentType())==4))||((int64(getUpVectorType())!=4)))) ) )
717  graph->evalOpParm(myUpVectorAttrib, nodeidx, "upvectorattrib", time, 0);
718  myEndUpVectorAttrib = "end_up"_UTsh;
719  if (true && ( (true&&!(((int64(getTangentType())==4))||((int64(getUpVectorType())!=4))||((getUseEndUpVector()==0))||((getUpVectorAtStart()==0))||((int64(getTangentType())==4))||((int64(getUpVectorType())!=4))||((getUseEndUpVector()==0))||((getUpVectorAtStart()==0)))) ) )
720  graph->evalOpParm(myEndUpVectorAttrib, nodeidx, "endupvectorattrib", time, 0);
721  myUpVector = UT_Vector3D(0,1,0);
722  if (true && ( (true&&!(((int64(getTangentType())==4))||((int64(getUpVectorType())!=5))||((int64(getTangentType())==4))||((int64(getUpVectorType())!=5)))) ) )
723  graph->evalOpParm(myUpVector, nodeidx, "upvector", time, 0);
724  myEndUpVector = UT_Vector3D(0,1,0);
725  if (true && ( (true&&!(((int64(getTangentType())==4))||((int64(getUpVectorType())!=5))||((getUseEndUpVector()==0))||((getUpVectorAtStart()==0))||((int64(getTangentType())==4))||((int64(getUpVectorType())!=5))||((getUseEndUpVector()==0))||((getUpVectorAtStart()==0)))) ) )
726  graph->evalOpParm(myEndUpVector, nodeidx, "endupvector", time, 0);
727 
728  }
729 
730 
731  void loadFromOpSubclass(const LoadParms &loadparms) override
732  {
733  buildFromOp(loadparms.graph(), loadparms.nodeIdx(), loadparms.context().getTime(), loadparms.depnode());
734  }
735 
736 
737  void copyFrom(const OP_NodeParms *src) override
738  {
739  *this = *((const SOP_Sweep_2_0Parms *)src);
740  }
741 
742  template <typename T>
743  void
744  doGetParmValue(TempIndex idx, TempIndex instance, T &value) const
745  {
746  if (idx.size() < 1)
747  return;
748  UT_ASSERT(idx.size() == instance.size()+1);
749  if (idx.size() != instance.size()+1)
750  return;
751  switch (idx[0])
752  {
753  case 0:
754  coerceValue(value, myCurveGroup);
755  break;
756  case 1:
757  coerceValue(value, myCrossSectionGroup);
758  break;
759  case 2:
760  coerceValue(value, mySurfaceShape);
761  break;
762  case 3:
763  coerceValue(value, mySurfaceType);
764  break;
765  case 4:
766  coerceValue(value, myScale);
767  break;
768  case 5:
769  coerceValue(value, myCols);
770  break;
771  case 6:
772  coerceValue(value, myRadius);
773  break;
774  case 7:
775  coerceValue(value, myWidth);
776  break;
777  case 8:
778  coerceValue(value, myReverseCrossSections);
779  break;
780  case 9:
781  coerceValue(value, myStretchAroundTurns);
782  break;
783  case 10:
784  coerceValue(value, myMaxStretchAroundTurns);
785  break;
786  case 11:
787  coerceValue(value, myEndCapType);
788  break;
789  case 12:
790  coerceValue(value, myCapDivs);
791  break;
792  case 13:
793  coerceValue(value, myTriangularPoles);
794  break;
795  case 14:
796  coerceValue(value, myCapScale);
797  break;
798  case 15:
799  coerceValue(value, myCapRoundness);
800  break;
801  case 16:
802  coerceValue(value, myAddEndCapsGroup);
803  break;
804  case 17:
805  coerceValue(value, myEndCapsGroup);
806  break;
807  case 18:
808  coerceValue(value, myApplyScale);
809  break;
810  case 19:
811  coerceValue(value, myScaleRamp);
812  break;
813  case 20:
814  coerceValue(value, myROrd);
815  break;
816  case 21:
817  coerceValue(value, myApplyRoll);
818  break;
819  case 22:
820  coerceValue(value, myRoll);
821  break;
822  case 23:
823  coerceValue(value, myFullTwists);
824  break;
825  case 24:
826  coerceValue(value, myIncRoll);
827  break;
828  case 25:
829  coerceValue(value, myRollPer);
830  break;
831  case 26:
832  coerceValue(value, myRollAttrib);
833  break;
834  case 27:
835  coerceValue(value, myApplyYaw);
836  break;
837  case 28:
838  coerceValue(value, myYaw);
839  break;
840  case 29:
841  coerceValue(value, myIncYaw);
842  break;
843  case 30:
844  coerceValue(value, myYawPer);
845  break;
846  case 31:
847  coerceValue(value, myYawAttrib);
848  break;
849  case 32:
850  coerceValue(value, myApplyPitch);
851  break;
852  case 33:
853  coerceValue(value, myPitch);
854  break;
855  case 34:
856  coerceValue(value, myIncPitch);
857  break;
858  case 35:
859  coerceValue(value, myPitchPer);
860  break;
861  case 36:
862  coerceValue(value, myPitchAttrib);
863  break;
864  case 37:
865  coerceValue(value, myCopyOrder);
866  break;
867  case 38:
868  coerceValue(value, myCrossSectionAttrib);
869  break;
870  case 39:
871  coerceValue(value, myPrimType);
872  break;
873  case 40:
874  coerceValue(value, myUnrollClosedRowCol);
875  break;
876  case 41:
877  coerceValue(value, mySwapRowCol);
878  break;
879  case 42:
880  coerceValue(value, myCloseIfNoCurveInput);
881  break;
882  case 43:
883  coerceValue(value, myTangentType);
884  break;
885  case 44:
886  coerceValue(value, myContinuousClosed);
887  break;
888  case 45:
889  coerceValue(value, myExtrapolateEndTangents);
890  break;
891  case 46:
892  coerceValue(value, myTransformByAttribs);
893  break;
894  case 47:
895  coerceValue(value, myComputeUVs);
896  break;
897  case 48:
898  coerceValue(value, myOverrideExistingUVs);
899  break;
900  case 49:
901  coerceValue(value, myLengthWeightedUVs);
902  break;
903  case 50:
904  coerceValue(value, myNormalizeU);
905  break;
906  case 51:
907  coerceValue(value, myNormalizeV);
908  break;
909  case 52:
910  coerceValue(value, myFlipU);
911  break;
912  case 53:
913  coerceValue(value, myUVScale);
914  break;
915  case 54:
916  coerceValue(value, myUseMeshEdgeLengths);
917  break;
918  case 55:
919  coerceValue(value, myPropScalePerCurve);
920  break;
921  case 56:
922  coerceValue(value, myWrapU);
923  break;
924  case 57:
925  coerceValue(value, myWrapV);
926  break;
927  case 58:
928  coerceValue(value, myAttribsFromBackbone);
929  break;
930  case 59:
931  coerceValue(value, myAttribsFromCrossSection);
932  break;
933  case 60:
934  coerceValue(value, myAddPointRow);
935  break;
936  case 61:
937  coerceValue(value, myPtRowAttrib);
938  break;
939  case 62:
940  coerceValue(value, myAddPointCol);
941  break;
942  case 63:
943  coerceValue(value, myPtColAttrib);
944  break;
945  case 64:
946  coerceValue(value, myAddPrimRow);
947  break;
948  case 65:
949  coerceValue(value, myPrimRowAttrib);
950  break;
951  case 66:
952  coerceValue(value, myAddPrimCol);
953  break;
954  case 67:
955  coerceValue(value, myPrimColAttrib);
956  break;
957  case 68:
958  coerceValue(value, myAddCrossSectionNum);
959  break;
960  case 69:
961  coerceValue(value, myCrossSectionNumAttrib);
962  break;
963  case 70:
964  coerceValue(value, myAddCurveNum);
965  break;
966  case 71:
967  coerceValue(value, myCurveNumAttrib);
968  break;
969  case 72:
970  coerceValue(value, myUpVectorType);
971  break;
972  case 73:
973  coerceValue(value, myUpVectorAtStart);
974  break;
975  case 74:
976  coerceValue(value, myUseEndUpVector);
977  break;
978  case 75:
979  coerceValue(value, myUpVectorAttrib);
980  break;
981  case 76:
982  coerceValue(value, myEndUpVectorAttrib);
983  break;
984  case 77:
985  coerceValue(value, myUpVector);
986  break;
987  case 78:
988  coerceValue(value, myEndUpVector);
989  break;
990 
991  }
992  }
993 
994  bool isParmColorRamp(exint idx) const override
995  {
996  switch (idx)
997  {
998 
999  }
1000  return false;
1001  }
1002 
1003  void getNestParmValue(TempIndex idx, TempIndex instance, exint &value) const override
1004  { doGetParmValue(idx, instance, value); }
1005  void getNestParmValue(TempIndex idx, TempIndex instance, fpreal &value) const override
1006  { doGetParmValue(idx, instance, value); }
1007  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector2D &value) const override
1008  { doGetParmValue(idx, instance, value); }
1009  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector3D &value) const override
1010  { doGetParmValue(idx, instance, value); }
1011  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector4D &value) const override
1012  { doGetParmValue(idx, instance, value); }
1013  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix2D &value) const override
1014  { doGetParmValue(idx, instance, value); }
1015  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
1016  { doGetParmValue(idx, instance, value); }
1017  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix4D &value) const override
1018  { doGetParmValue(idx, instance, value); }
1019  void getNestParmValue(TempIndex idx, TempIndex instance, UT_StringHolder &value) const override
1020  { doGetParmValue(idx, instance, value); }
1021  void getNestParmValue(TempIndex idx, TempIndex instance, UT_SharedPtr<UT_Ramp> &value) const override
1022  { doGetParmValue(idx, instance, value); }
1023  void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
1024  { doGetParmValue(idx, instance, value); }
1025 
1026  template <typename T>
1027  void
1028  doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
1029  {
1030  if (idx.size() < 1)
1031  return;
1032  UT_ASSERT(idx.size() == instance.size()+1);
1033  if (idx.size() != instance.size()+1)
1034  return;
1035  switch (idx[0])
1036  {
1037  case 0:
1038  coerceValue(myCurveGroup, ( ( value ) ));
1039  break;
1040  case 1:
1041  coerceValue(myCrossSectionGroup, ( ( value ) ));
1042  break;
1043  case 2:
1044  coerceValue(mySurfaceShape, clampMinValue(0, clampMaxValue(3, value ) ));
1045  break;
1046  case 3:
1047  coerceValue(mySurfaceType, clampMinValue(0, clampMaxValue(7, value ) ));
1048  break;
1049  case 4:
1050  coerceValue(myScale, ( ( value ) ));
1051  break;
1052  case 5:
1053  coerceValue(myCols, clampMinValue(1, ( value ) ));
1054  break;
1055  case 6:
1056  coerceValue(myRadius, ( ( value ) ));
1057  break;
1058  case 7:
1059  coerceValue(myWidth, ( ( value ) ));
1060  break;
1061  case 8:
1062  coerceValue(myReverseCrossSections, ( ( value ) ));
1063  break;
1064  case 9:
1065  coerceValue(myStretchAroundTurns, ( ( value ) ));
1066  break;
1067  case 10:
1068  coerceValue(myMaxStretchAroundTurns, clampMinValue(1, ( value ) ));
1069  break;
1070  case 11:
1071  coerceValue(myEndCapType, clampMinValue(0, clampMaxValue(3, value ) ));
1072  break;
1073  case 12:
1074  coerceValue(myCapDivs, clampMinValue(1, ( value ) ));
1075  break;
1076  case 13:
1077  coerceValue(myTriangularPoles, ( ( value ) ));
1078  break;
1079  case 14:
1080  coerceValue(myCapScale, ( ( value ) ));
1081  break;
1082  case 15:
1083  coerceValue(myCapRoundness, ( ( value ) ));
1084  break;
1085  case 16:
1086  coerceValue(myAddEndCapsGroup, ( ( value ) ));
1087  break;
1088  case 17:
1089  coerceValue(myEndCapsGroup, ( ( value ) ));
1090  break;
1091  case 18:
1092  coerceValue(myApplyScale, ( ( value ) ));
1093  break;
1094  case 19:
1095  coerceValue(myScaleRamp, clampMinValue(0, ( value ) ));
1096  break;
1097  case 20:
1098  coerceValue(myROrd, clampMinValue(0, clampMaxValue(5, value ) ));
1099  break;
1100  case 21:
1101  coerceValue(myApplyRoll, ( ( value ) ));
1102  break;
1103  case 22:
1104  coerceValue(myRoll, ( ( value ) ));
1105  break;
1106  case 23:
1107  coerceValue(myFullTwists, ( ( value ) ));
1108  break;
1109  case 24:
1110  coerceValue(myIncRoll, ( ( value ) ));
1111  break;
1112  case 25:
1113  coerceValue(myRollPer, clampMinValue(0, clampMaxValue(4, value ) ));
1114  break;
1115  case 26:
1116  coerceValue(myRollAttrib, ( ( value ) ));
1117  break;
1118  case 27:
1119  coerceValue(myApplyYaw, ( ( value ) ));
1120  break;
1121  case 28:
1122  coerceValue(myYaw, ( ( value ) ));
1123  break;
1124  case 29:
1125  coerceValue(myIncYaw, ( ( value ) ));
1126  break;
1127  case 30:
1128  coerceValue(myYawPer, clampMinValue(0, clampMaxValue(4, value ) ));
1129  break;
1130  case 31:
1131  coerceValue(myYawAttrib, ( ( value ) ));
1132  break;
1133  case 32:
1134  coerceValue(myApplyPitch, ( ( value ) ));
1135  break;
1136  case 33:
1137  coerceValue(myPitch, ( ( value ) ));
1138  break;
1139  case 34:
1140  coerceValue(myIncPitch, ( ( value ) ));
1141  break;
1142  case 35:
1143  coerceValue(myPitchPer, clampMinValue(0, clampMaxValue(4, value ) ));
1144  break;
1145  case 36:
1146  coerceValue(myPitchAttrib, ( ( value ) ));
1147  break;
1148  case 37:
1149  coerceValue(myCopyOrder, clampMinValue(0, clampMaxValue(4, value ) ));
1150  break;
1151  case 38:
1152  coerceValue(myCrossSectionAttrib, ( ( value ) ));
1153  break;
1154  case 39:
1155  coerceValue(myPrimType, clampMinValue(0, clampMaxValue(5, value ) ));
1156  break;
1157  case 40:
1158  coerceValue(myUnrollClosedRowCol, ( ( value ) ));
1159  break;
1160  case 41:
1161  coerceValue(mySwapRowCol, ( ( value ) ));
1162  break;
1163  case 42:
1164  coerceValue(myCloseIfNoCurveInput, ( ( value ) ));
1165  break;
1166  case 43:
1167  coerceValue(myTangentType, clampMinValue(0, clampMaxValue(4, value ) ));
1168  break;
1169  case 44:
1170  coerceValue(myContinuousClosed, ( ( value ) ));
1171  break;
1172  case 45:
1173  coerceValue(myExtrapolateEndTangents, ( ( value ) ));
1174  break;
1175  case 46:
1176  coerceValue(myTransformByAttribs, ( ( value ) ));
1177  break;
1178  case 47:
1179  coerceValue(myComputeUVs, ( ( value ) ));
1180  break;
1181  case 48:
1182  coerceValue(myOverrideExistingUVs, ( ( value ) ));
1183  break;
1184  case 49:
1185  coerceValue(myLengthWeightedUVs, ( ( value ) ));
1186  break;
1187  case 50:
1188  coerceValue(myNormalizeU, ( ( value ) ));
1189  break;
1190  case 51:
1191  coerceValue(myNormalizeV, ( ( value ) ));
1192  break;
1193  case 52:
1194  coerceValue(myFlipU, ( ( value ) ));
1195  break;
1196  case 53:
1197  coerceValue(myUVScale, ( ( value ) ));
1198  break;
1199  case 54:
1200  coerceValue(myUseMeshEdgeLengths, ( ( value ) ));
1201  break;
1202  case 55:
1203  coerceValue(myPropScalePerCurve, ( ( value ) ));
1204  break;
1205  case 56:
1206  coerceValue(myWrapU, ( ( value ) ));
1207  break;
1208  case 57:
1209  coerceValue(myWrapV, ( ( value ) ));
1210  break;
1211  case 58:
1212  coerceValue(myAttribsFromBackbone, ( ( value ) ));
1213  break;
1214  case 59:
1215  coerceValue(myAttribsFromCrossSection, ( ( value ) ));
1216  break;
1217  case 60:
1218  coerceValue(myAddPointRow, ( ( value ) ));
1219  break;
1220  case 61:
1221  coerceValue(myPtRowAttrib, ( ( value ) ));
1222  break;
1223  case 62:
1224  coerceValue(myAddPointCol, ( ( value ) ));
1225  break;
1226  case 63:
1227  coerceValue(myPtColAttrib, ( ( value ) ));
1228  break;
1229  case 64:
1230  coerceValue(myAddPrimRow, ( ( value ) ));
1231  break;
1232  case 65:
1233  coerceValue(myPrimRowAttrib, ( ( value ) ));
1234  break;
1235  case 66:
1236  coerceValue(myAddPrimCol, ( ( value ) ));
1237  break;
1238  case 67:
1239  coerceValue(myPrimColAttrib, ( ( value ) ));
1240  break;
1241  case 68:
1242  coerceValue(myAddCrossSectionNum, ( ( value ) ));
1243  break;
1244  case 69:
1245  coerceValue(myCrossSectionNumAttrib, ( ( value ) ));
1246  break;
1247  case 70:
1248  coerceValue(myAddCurveNum, ( ( value ) ));
1249  break;
1250  case 71:
1251  coerceValue(myCurveNumAttrib, ( ( value ) ));
1252  break;
1253  case 72:
1254  coerceValue(myUpVectorType, clampMinValue(0, clampMaxValue(5, value ) ));
1255  break;
1256  case 73:
1257  coerceValue(myUpVectorAtStart, ( ( value ) ));
1258  break;
1259  case 74:
1260  coerceValue(myUseEndUpVector, ( ( value ) ));
1261  break;
1262  case 75:
1263  coerceValue(myUpVectorAttrib, ( ( value ) ));
1264  break;
1265  case 76:
1266  coerceValue(myEndUpVectorAttrib, ( ( value ) ));
1267  break;
1268  case 77:
1269  coerceValue(myUpVector, ( ( value ) ));
1270  break;
1271  case 78:
1272  coerceValue(myEndUpVector, ( ( value ) ));
1273  break;
1274 
1275  }
1276  }
1277 
1278  void setNestParmValue(TempIndex idx, TempIndex instance, const exint &value) override
1279  { doSetParmValue(idx, instance, value); }
1280  void setNestParmValue(TempIndex idx, TempIndex instance, const fpreal &value) override
1281  { doSetParmValue(idx, instance, value); }
1282  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector2D &value) override
1283  { doSetParmValue(idx, instance, value); }
1284  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector3D &value) override
1285  { doSetParmValue(idx, instance, value); }
1286  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector4D &value) override
1287  { doSetParmValue(idx, instance, value); }
1288  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix2D &value) override
1289  { doSetParmValue(idx, instance, value); }
1290  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix3D &value) override
1291  { doSetParmValue(idx, instance, value); }
1292  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix4D &value) override
1293  { doSetParmValue(idx, instance, value); }
1294  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_StringHolder &value) override
1295  { doSetParmValue(idx, instance, value); }
1296  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_SharedPtr<UT_Ramp> &value) override
1297  { doSetParmValue(idx, instance, value); }
1298  void setNestParmValue(TempIndex idx, TempIndex instance, const PRM_DataItemHandle &value) override
1299  { doSetParmValue(idx, instance, value); }
1300 
1301  exint getNestNumParms(TempIndex idx) const override
1302  {
1303  if (idx.size() == 0)
1304  return 79;
1305  switch (idx[0])
1306  {
1307 
1308  }
1309  // Invalid
1310  return 0;
1311  }
1312 
1313  const char *getNestParmName(TempIndex fieldnum) const override
1314  {
1315  if (fieldnum.size() < 1)
1316  return 0;
1317  switch (fieldnum[0])
1318  {
1319  case 0:
1320  return "curvegroup";
1321  case 1:
1322  return "crosssectiongroup";
1323  case 2:
1324  return "surfaceshape";
1325  case 3:
1326  return "surfacetype";
1327  case 4:
1328  return "scale";
1329  case 5:
1330  return "cols";
1331  case 6:
1332  return "radius";
1333  case 7:
1334  return "width";
1335  case 8:
1336  return "reversecrosssections";
1337  case 9:
1338  return "stretcharoundturns";
1339  case 10:
1340  return "maxstretcharoundturns";
1341  case 11:
1342  return "endcaptype";
1343  case 12:
1344  return "capdivs";
1345  case 13:
1346  return "triangularpoles";
1347  case 14:
1348  return "capscale";
1349  case 15:
1350  return "caproundness";
1351  case 16:
1352  return "addendcapsgroup";
1353  case 17:
1354  return "endcapsgroup";
1355  case 18:
1356  return "applyscale";
1357  case 19:
1358  return "scaleramp";
1359  case 20:
1360  return "rOrd";
1361  case 21:
1362  return "applyroll";
1363  case 22:
1364  return "roll";
1365  case 23:
1366  return "fulltwists";
1367  case 24:
1368  return "incroll";
1369  case 25:
1370  return "rollper";
1371  case 26:
1372  return "rollattrib";
1373  case 27:
1374  return "applyyaw";
1375  case 28:
1376  return "yaw";
1377  case 29:
1378  return "incyaw";
1379  case 30:
1380  return "yawper";
1381  case 31:
1382  return "yawattrib";
1383  case 32:
1384  return "applypitch";
1385  case 33:
1386  return "pitch";
1387  case 34:
1388  return "incpitch";
1389  case 35:
1390  return "pitchper";
1391  case 36:
1392  return "pitchattrib";
1393  case 37:
1394  return "copyorder";
1395  case 38:
1396  return "crosssectionattrib";
1397  case 39:
1398  return "primtype";
1399  case 40:
1400  return "unrollclosedrowcol";
1401  case 41:
1402  return "swaprowcol";
1403  case 42:
1404  return "closeifnocurveinput";
1405  case 43:
1406  return "tangenttype";
1407  case 44:
1408  return "continuousclosed";
1409  case 45:
1410  return "extrapolateendtangents";
1411  case 46:
1412  return "transformbyattribs";
1413  case 47:
1414  return "computeuvs";
1415  case 48:
1416  return "overrideexistinguvs";
1417  case 49:
1418  return "lengthweighteduvs";
1419  case 50:
1420  return "normalizeu";
1421  case 51:
1422  return "normalizev";
1423  case 52:
1424  return "flipu";
1425  case 53:
1426  return "uvscale";
1427  case 54:
1428  return "usemeshedgelengths";
1429  case 55:
1430  return "propscalepercurve";
1431  case 56:
1432  return "wrapu";
1433  case 57:
1434  return "wrapv";
1435  case 58:
1436  return "attribsfrombackbone";
1437  case 59:
1438  return "attribsfromcrosssection";
1439  case 60:
1440  return "addptrow";
1441  case 61:
1442  return "ptrowattrib";
1443  case 62:
1444  return "addptcol";
1445  case 63:
1446  return "ptcolattrib";
1447  case 64:
1448  return "addprimrow";
1449  case 65:
1450  return "primrowattrib";
1451  case 66:
1452  return "addprimcol";
1453  case 67:
1454  return "primcolattrib";
1455  case 68:
1456  return "addcrosssectionnum";
1457  case 69:
1458  return "crosssectionnumattrib";
1459  case 70:
1460  return "addcurvenum";
1461  case 71:
1462  return "curvenumattrib";
1463  case 72:
1464  return "upvectortype";
1465  case 73:
1466  return "upvectoratstart";
1467  case 74:
1468  return "useendupvector";
1469  case 75:
1470  return "upvectorattrib";
1471  case 76:
1472  return "endupvectorattrib";
1473  case 77:
1474  return "upvector";
1475  case 78:
1476  return "endupvector";
1477 
1478  }
1479  return 0;
1480  }
1481 
1482  ParmType getNestParmType(TempIndex fieldnum) const override
1483  {
1484  if (fieldnum.size() < 1)
1485  return PARM_UNSUPPORTED;
1486  switch (fieldnum[0])
1487  {
1488  case 0:
1489  return PARM_STRING;
1490  case 1:
1491  return PARM_STRING;
1492  case 2:
1493  return PARM_INTEGER;
1494  case 3:
1495  return PARM_INTEGER;
1496  case 4:
1497  return PARM_FLOAT;
1498  case 5:
1499  return PARM_INTEGER;
1500  case 6:
1501  return PARM_FLOAT;
1502  case 7:
1503  return PARM_FLOAT;
1504  case 8:
1505  return PARM_INTEGER;
1506  case 9:
1507  return PARM_INTEGER;
1508  case 10:
1509  return PARM_FLOAT;
1510  case 11:
1511  return PARM_INTEGER;
1512  case 12:
1513  return PARM_INTEGER;
1514  case 13:
1515  return PARM_INTEGER;
1516  case 14:
1517  return PARM_FLOAT;
1518  case 15:
1519  return PARM_FLOAT;
1520  case 16:
1521  return PARM_INTEGER;
1522  case 17:
1523  return PARM_STRING;
1524  case 18:
1525  return PARM_INTEGER;
1526  case 19:
1527  return PARM_RAMP;
1528  case 20:
1529  return PARM_INTEGER;
1530  case 21:
1531  return PARM_INTEGER;
1532  case 22:
1533  return PARM_FLOAT;
1534  case 23:
1535  return PARM_INTEGER;
1536  case 24:
1537  return PARM_FLOAT;
1538  case 25:
1539  return PARM_INTEGER;
1540  case 26:
1541  return PARM_STRING;
1542  case 27:
1543  return PARM_INTEGER;
1544  case 28:
1545  return PARM_FLOAT;
1546  case 29:
1547  return PARM_FLOAT;
1548  case 30:
1549  return PARM_INTEGER;
1550  case 31:
1551  return PARM_STRING;
1552  case 32:
1553  return PARM_INTEGER;
1554  case 33:
1555  return PARM_FLOAT;
1556  case 34:
1557  return PARM_FLOAT;
1558  case 35:
1559  return PARM_INTEGER;
1560  case 36:
1561  return PARM_STRING;
1562  case 37:
1563  return PARM_INTEGER;
1564  case 38:
1565  return PARM_STRING;
1566  case 39:
1567  return PARM_INTEGER;
1568  case 40:
1569  return PARM_INTEGER;
1570  case 41:
1571  return PARM_INTEGER;
1572  case 42:
1573  return PARM_INTEGER;
1574  case 43:
1575  return PARM_INTEGER;
1576  case 44:
1577  return PARM_INTEGER;
1578  case 45:
1579  return PARM_INTEGER;
1580  case 46:
1581  return PARM_INTEGER;
1582  case 47:
1583  return PARM_INTEGER;
1584  case 48:
1585  return PARM_INTEGER;
1586  case 49:
1587  return PARM_INTEGER;
1588  case 50:
1589  return PARM_INTEGER;
1590  case 51:
1591  return PARM_INTEGER;
1592  case 52:
1593  return PARM_INTEGER;
1594  case 53:
1595  return PARM_VECTOR2;
1596  case 54:
1597  return PARM_INTEGER;
1598  case 55:
1599  return PARM_INTEGER;
1600  case 56:
1601  return PARM_INTEGER;
1602  case 57:
1603  return PARM_INTEGER;
1604  case 58:
1605  return PARM_STRING;
1606  case 59:
1607  return PARM_STRING;
1608  case 60:
1609  return PARM_INTEGER;
1610  case 61:
1611  return PARM_STRING;
1612  case 62:
1613  return PARM_INTEGER;
1614  case 63:
1615  return PARM_STRING;
1616  case 64:
1617  return PARM_INTEGER;
1618  case 65:
1619  return PARM_STRING;
1620  case 66:
1621  return PARM_INTEGER;
1622  case 67:
1623  return PARM_STRING;
1624  case 68:
1625  return PARM_INTEGER;
1626  case 69:
1627  return PARM_STRING;
1628  case 70:
1629  return PARM_INTEGER;
1630  case 71:
1631  return PARM_STRING;
1632  case 72:
1633  return PARM_INTEGER;
1634  case 73:
1635  return PARM_INTEGER;
1636  case 74:
1637  return PARM_INTEGER;
1638  case 75:
1639  return PARM_STRING;
1640  case 76:
1641  return PARM_STRING;
1642  case 77:
1643  return PARM_VECTOR3;
1644  case 78:
1645  return PARM_VECTOR3;
1646 
1647  }
1648  return PARM_UNSUPPORTED;
1649  }
1650 
1651  // Boiler plate to load individual types.
1652  static void loadData(UT_IStream &is, int64 &v)
1653  { is.bread(&v, 1); }
1654  static void loadData(UT_IStream &is, bool &v)
1655  { int64 iv; is.bread(&iv, 1); v = iv; }
1656  static void loadData(UT_IStream &is, fpreal64 &v)
1657  { is.bread<fpreal64>(&v, 1); }
1658  static void loadData(UT_IStream &is, UT_Vector2D &v)
1659  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1); }
1660  static void loadData(UT_IStream &is, UT_Vector3D &v)
1661  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
1662  is.bread<fpreal64>(&v.z(), 1); }
1663  static void loadData(UT_IStream &is, UT_Vector4D &v)
1664  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
1665  is.bread<fpreal64>(&v.z(), 1); is.bread<fpreal64>(&v.w(), 1); }
1666  static void loadData(UT_IStream &is, UT_Matrix2D &v)
1667  { for (int r = 0; r < 2; r++) for (int c = 0; c < 2; c++) is.bread<fpreal64>(&v(r, c), 1); }
1668  static void loadData(UT_IStream &is, UT_Matrix3D &v)
1669  { for (int r = 0; r < 3; r++) for (int c = 0; c < 3; c++) is.bread<fpreal64>(&v(r, c), 1); }
1670  static void loadData(UT_IStream &is, UT_Matrix4D &v)
1671  { for (int r = 0; r < 4; r++) for (int c = 0; c < 4; c++) is.bread<fpreal64>(&v(r, c), 1); }
1672  static void loadData(UT_IStream &is, UT_Vector2I &v)
1673  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1); }
1674  static void loadData(UT_IStream &is, UT_Vector3I &v)
1675  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
1676  is.bread<int64>(&v.z(), 1); }
1677  static void loadData(UT_IStream &is, UT_Vector4I &v)
1678  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
1679  is.bread<int64>(&v.z(), 1); is.bread<int64>(&v.w(), 1); }
1681  { is.bread(v); }
1683  { UT_StringHolder rampdata;
1684  loadData(is, rampdata);
1685  if (rampdata.isstring())
1686  {
1687  v.reset(new UT_Ramp());
1688  UT_IStream istr((const char *) rampdata, rampdata.length(), UT_ISTREAM_ASCII);
1689  v->load(istr);
1690  }
1691  else v.reset();
1692  }
1695  loadData(is, data);
1696  if (data.isstring())
1697  {
1698  // Find the data type.
1699  const char *colon = UT_StringWrap(data).findChar(':');
1700  if (colon)
1701  {
1702  int typelen = colon - data.buffer();
1704  type.strncpy(data.buffer(), typelen);
1705  UT_IStream istr(((const char *) data) + typelen + 1, data.length() - (typelen + 1), UT_ISTREAM_BINARY);
1706 
1707  v = PRM_DataFactory::parseBinary(type.buffer(), istr);
1708  }
1709  }
1710  else v.reset();
1711  }
1712 
1713  static void saveData(std::ostream &os, int64 v)
1714  { UTwrite(os, &v); }
1715  static void saveData(std::ostream &os, bool v)
1716  { int64 iv = v; UTwrite(os, &iv); }
1717  static void saveData(std::ostream &os, fpreal64 v)
1718  { UTwrite<fpreal64>(os, &v); }
1719  static void saveData(std::ostream &os, UT_Vector2D v)
1720  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y()); }
1721  static void saveData(std::ostream &os, UT_Vector3D v)
1722  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
1723  UTwrite<fpreal64>(os, &v.z()); }
1724  static void saveData(std::ostream &os, UT_Vector4D v)
1725  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
1726  UTwrite<fpreal64>(os, &v.z()); UTwrite<fpreal64>(os, &v.w()); }
1727  static void saveData(std::ostream &os, UT_Matrix2D v)
1729  static void saveData(std::ostream &os, UT_Matrix3D v)
1731  static void saveData(std::ostream &os, UT_Matrix4D v)
1733  static void saveData(std::ostream &os, UT_StringHolder s)
1734  { UT_StringWrap(s).saveBinary(os); }
1735  static void saveData(std::ostream &os, UT_SharedPtr<UT_Ramp> s)
1737  UT_OStringStream ostr;
1738  if (s) s->save(ostr);
1739  result = ostr.str();
1740  saveData(os, result);
1741  }
1742  static void saveData(std::ostream &os, PRM_DataItemHandle s)
1744  UT_OStringStream ostr;
1745  if (s)
1746  {
1747  ostr << s->getDataTypeToken();
1748  ostr << ":";
1749  s->saveBinary(ostr);
1750  }
1751  result = ostr.str();
1752  saveData(os, result);
1753  }
1754 
1755 
1756  void save(std::ostream &os) const
1757  {
1758  int32 v = version();
1759  UTwrite(os, &v);
1760  saveData(os, myCurveGroup);
1761  saveData(os, myCrossSectionGroup);
1762  saveData(os, mySurfaceShape);
1763  saveData(os, mySurfaceType);
1764  saveData(os, myScale);
1765  saveData(os, myCols);
1766  saveData(os, myRadius);
1767  saveData(os, myWidth);
1768  saveData(os, myReverseCrossSections);
1769  saveData(os, myStretchAroundTurns);
1770  saveData(os, myMaxStretchAroundTurns);
1771  saveData(os, myEndCapType);
1772  saveData(os, myCapDivs);
1773  saveData(os, myTriangularPoles);
1774  saveData(os, myCapScale);
1775  saveData(os, myCapRoundness);
1776  saveData(os, myAddEndCapsGroup);
1777  saveData(os, myEndCapsGroup);
1778  saveData(os, myApplyScale);
1779  saveData(os, myScaleRamp);
1780  saveData(os, myROrd);
1781  saveData(os, myApplyRoll);
1782  saveData(os, myRoll);
1783  saveData(os, myFullTwists);
1784  saveData(os, myIncRoll);
1785  saveData(os, myRollPer);
1786  saveData(os, myRollAttrib);
1787  saveData(os, myApplyYaw);
1788  saveData(os, myYaw);
1789  saveData(os, myIncYaw);
1790  saveData(os, myYawPer);
1791  saveData(os, myYawAttrib);
1792  saveData(os, myApplyPitch);
1793  saveData(os, myPitch);
1794  saveData(os, myIncPitch);
1795  saveData(os, myPitchPer);
1796  saveData(os, myPitchAttrib);
1797  saveData(os, myCopyOrder);
1798  saveData(os, myCrossSectionAttrib);
1799  saveData(os, myPrimType);
1800  saveData(os, myUnrollClosedRowCol);
1801  saveData(os, mySwapRowCol);
1802  saveData(os, myCloseIfNoCurveInput);
1803  saveData(os, myTangentType);
1804  saveData(os, myContinuousClosed);
1805  saveData(os, myExtrapolateEndTangents);
1806  saveData(os, myTransformByAttribs);
1807  saveData(os, myComputeUVs);
1808  saveData(os, myOverrideExistingUVs);
1809  saveData(os, myLengthWeightedUVs);
1810  saveData(os, myNormalizeU);
1811  saveData(os, myNormalizeV);
1812  saveData(os, myFlipU);
1813  saveData(os, myUVScale);
1814  saveData(os, myUseMeshEdgeLengths);
1815  saveData(os, myPropScalePerCurve);
1816  saveData(os, myWrapU);
1817  saveData(os, myWrapV);
1818  saveData(os, myAttribsFromBackbone);
1819  saveData(os, myAttribsFromCrossSection);
1820  saveData(os, myAddPointRow);
1821  saveData(os, myPtRowAttrib);
1822  saveData(os, myAddPointCol);
1823  saveData(os, myPtColAttrib);
1824  saveData(os, myAddPrimRow);
1825  saveData(os, myPrimRowAttrib);
1826  saveData(os, myAddPrimCol);
1827  saveData(os, myPrimColAttrib);
1828  saveData(os, myAddCrossSectionNum);
1829  saveData(os, myCrossSectionNumAttrib);
1830  saveData(os, myAddCurveNum);
1831  saveData(os, myCurveNumAttrib);
1832  saveData(os, myUpVectorType);
1833  saveData(os, myUpVectorAtStart);
1834  saveData(os, myUseEndUpVector);
1835  saveData(os, myUpVectorAttrib);
1836  saveData(os, myEndUpVectorAttrib);
1837  saveData(os, myUpVector);
1838  saveData(os, myEndUpVector);
1839 
1840  }
1841 
1842  bool load(UT_IStream &is)
1843  {
1844  int32 v;
1845  is.bread(&v, 1);
1846  if (version() != v)
1847  {
1848  // Fail incompatible versions
1849  return false;
1850  }
1851  loadData(is, myCurveGroup);
1852  loadData(is, myCrossSectionGroup);
1853  loadData(is, mySurfaceShape);
1854  loadData(is, mySurfaceType);
1855  loadData(is, myScale);
1856  loadData(is, myCols);
1857  loadData(is, myRadius);
1858  loadData(is, myWidth);
1859  loadData(is, myReverseCrossSections);
1860  loadData(is, myStretchAroundTurns);
1861  loadData(is, myMaxStretchAroundTurns);
1862  loadData(is, myEndCapType);
1863  loadData(is, myCapDivs);
1864  loadData(is, myTriangularPoles);
1865  loadData(is, myCapScale);
1866  loadData(is, myCapRoundness);
1867  loadData(is, myAddEndCapsGroup);
1868  loadData(is, myEndCapsGroup);
1869  loadData(is, myApplyScale);
1870  loadData(is, myScaleRamp);
1871  loadData(is, myROrd);
1872  loadData(is, myApplyRoll);
1873  loadData(is, myRoll);
1874  loadData(is, myFullTwists);
1875  loadData(is, myIncRoll);
1876  loadData(is, myRollPer);
1877  loadData(is, myRollAttrib);
1878  loadData(is, myApplyYaw);
1879  loadData(is, myYaw);
1880  loadData(is, myIncYaw);
1881  loadData(is, myYawPer);
1882  loadData(is, myYawAttrib);
1883  loadData(is, myApplyPitch);
1884  loadData(is, myPitch);
1885  loadData(is, myIncPitch);
1886  loadData(is, myPitchPer);
1887  loadData(is, myPitchAttrib);
1888  loadData(is, myCopyOrder);
1889  loadData(is, myCrossSectionAttrib);
1890  loadData(is, myPrimType);
1891  loadData(is, myUnrollClosedRowCol);
1892  loadData(is, mySwapRowCol);
1893  loadData(is, myCloseIfNoCurveInput);
1894  loadData(is, myTangentType);
1895  loadData(is, myContinuousClosed);
1896  loadData(is, myExtrapolateEndTangents);
1897  loadData(is, myTransformByAttribs);
1898  loadData(is, myComputeUVs);
1899  loadData(is, myOverrideExistingUVs);
1900  loadData(is, myLengthWeightedUVs);
1901  loadData(is, myNormalizeU);
1902  loadData(is, myNormalizeV);
1903  loadData(is, myFlipU);
1904  loadData(is, myUVScale);
1905  loadData(is, myUseMeshEdgeLengths);
1906  loadData(is, myPropScalePerCurve);
1907  loadData(is, myWrapU);
1908  loadData(is, myWrapV);
1909  loadData(is, myAttribsFromBackbone);
1910  loadData(is, myAttribsFromCrossSection);
1911  loadData(is, myAddPointRow);
1912  loadData(is, myPtRowAttrib);
1913  loadData(is, myAddPointCol);
1914  loadData(is, myPtColAttrib);
1915  loadData(is, myAddPrimRow);
1916  loadData(is, myPrimRowAttrib);
1917  loadData(is, myAddPrimCol);
1918  loadData(is, myPrimColAttrib);
1919  loadData(is, myAddCrossSectionNum);
1920  loadData(is, myCrossSectionNumAttrib);
1921  loadData(is, myAddCurveNum);
1922  loadData(is, myCurveNumAttrib);
1923  loadData(is, myUpVectorType);
1924  loadData(is, myUpVectorAtStart);
1925  loadData(is, myUseEndUpVector);
1926  loadData(is, myUpVectorAttrib);
1927  loadData(is, myEndUpVectorAttrib);
1928  loadData(is, myUpVector);
1929  loadData(is, myEndUpVector);
1930 
1931  return true;
1932  }
1933 
1934  const UT_StringHolder & getCurveGroup() const { return myCurveGroup; }
1935  void setCurveGroup(const UT_StringHolder & val) { myCurveGroup = val; }
1937  {
1938  SOP_Node *thissop = cookparms.getNode();
1939  if (!thissop) return getCurveGroup();
1941  OP_Utils::evalOpParm(result, thissop, "curvegroup", cookparms.getCookTime(), 0);
1942  return result;
1943  }
1944  const UT_StringHolder & getCrossSectionGroup() const { return myCrossSectionGroup; }
1945  void setCrossSectionGroup(const UT_StringHolder & val) { myCrossSectionGroup = val; }
1947  {
1948  SOP_Node *thissop = cookparms.getNode();
1949  if (!thissop) return getCrossSectionGroup();
1951  OP_Utils::evalOpParm(result, thissop, "crosssectiongroup", cookparms.getCookTime(), 0);
1952  return result;
1953  }
1954  SurfaceShape getSurfaceShape() const { return SurfaceShape(mySurfaceShape); }
1955  void setSurfaceShape(SurfaceShape val) { mySurfaceShape = int64(val); }
1957  {
1958  SOP_Node *thissop = cookparms.getNode();
1959  if (!thissop) return getSurfaceShape();
1960  int64 result;
1961  OP_Utils::evalOpParm(result, thissop, "surfaceshape", cookparms.getCookTime(), 0);
1962  return SurfaceShape(result);
1963  }
1964  SurfaceType getSurfaceType() const { return SurfaceType(mySurfaceType); }
1965  void setSurfaceType(SurfaceType val) { mySurfaceType = int64(val); }
1967  {
1968  SOP_Node *thissop = cookparms.getNode();
1969  if (!thissop) return getSurfaceType();
1970  int64 result;
1971  OP_Utils::evalOpParm(result, thissop, "surfacetype", cookparms.getCookTime(), 0);
1972  return SurfaceType(result);
1973  }
1974  fpreal64 getScale() const { return myScale; }
1975  void setScale(fpreal64 val) { myScale = val; }
1976  fpreal64 opScale(const SOP_NodeVerb::CookParms &cookparms) const
1977  {
1978  SOP_Node *thissop = cookparms.getNode();
1979  if (!thissop) return getScale();
1980  fpreal64 result;
1981  OP_Utils::evalOpParm(result, thissop, "scale", cookparms.getCookTime(), 0);
1982  return result;
1983  }
1984  int64 getCols() const { return myCols; }
1985  void setCols(int64 val) { myCols = val; }
1986  int64 opCols(const SOP_NodeVerb::CookParms &cookparms) const
1987  {
1988  SOP_Node *thissop = cookparms.getNode();
1989  if (!thissop) return getCols();
1990  int64 result;
1991  OP_Utils::evalOpParm(result, thissop, "cols", cookparms.getCookTime(), 0);
1992  return result;
1993  }
1994  fpreal64 getRadius() const { return myRadius; }
1995  void setRadius(fpreal64 val) { myRadius = val; }
1997  {
1998  SOP_Node *thissop = cookparms.getNode();
1999  if (!thissop) return getRadius();
2000  fpreal64 result;
2001  OP_Utils::evalOpParm(result, thissop, "radius", cookparms.getCookTime(), 0);
2002  return result;
2003  }
2004  fpreal64 getWidth() const { return myWidth; }
2005  void setWidth(fpreal64 val) { myWidth = val; }
2006  fpreal64 opWidth(const SOP_NodeVerb::CookParms &cookparms) const
2007  {
2008  SOP_Node *thissop = cookparms.getNode();
2009  if (!thissop) return getWidth();
2010  fpreal64 result;
2011  OP_Utils::evalOpParm(result, thissop, "width", cookparms.getCookTime(), 0);
2012  return result;
2013  }
2014  bool getReverseCrossSections() const { return myReverseCrossSections; }
2015  void setReverseCrossSections(bool val) { myReverseCrossSections = val; }
2017  {
2018  SOP_Node *thissop = cookparms.getNode();
2019  if (!thissop) return getReverseCrossSections();
2020  bool result;
2021  OP_Utils::evalOpParm(result, thissop, "reversecrosssections", cookparms.getCookTime(), 0);
2022  return result;
2023  }
2024  bool getStretchAroundTurns() const { return myStretchAroundTurns; }
2025  void setStretchAroundTurns(bool val) { myStretchAroundTurns = val; }
2026  bool opStretchAroundTurns(const SOP_NodeVerb::CookParms &cookparms) const
2027  {
2028  SOP_Node *thissop = cookparms.getNode();
2029  if (!thissop) return getStretchAroundTurns();
2030  bool result;
2031  OP_Utils::evalOpParm(result, thissop, "stretcharoundturns", cookparms.getCookTime(), 0);
2032  return result;
2033  }
2034  fpreal64 getMaxStretchAroundTurns() const { return myMaxStretchAroundTurns; }
2035  void setMaxStretchAroundTurns(fpreal64 val) { myMaxStretchAroundTurns = val; }
2037  {
2038  SOP_Node *thissop = cookparms.getNode();
2039  if (!thissop) return getMaxStretchAroundTurns();
2040  fpreal64 result;
2041  OP_Utils::evalOpParm(result, thissop, "maxstretcharoundturns", cookparms.getCookTime(), 0);
2042  return result;
2043  }
2044  EndCapType getEndCapType() const { return EndCapType(myEndCapType); }
2045  void setEndCapType(EndCapType val) { myEndCapType = int64(val); }
2047  {
2048  SOP_Node *thissop = cookparms.getNode();
2049  if (!thissop) return getEndCapType();
2050  int64 result;
2051  OP_Utils::evalOpParm(result, thissop, "endcaptype", cookparms.getCookTime(), 0);
2052  return EndCapType(result);
2053  }
2054  int64 getCapDivs() const { return myCapDivs; }
2055  void setCapDivs(int64 val) { myCapDivs = val; }
2056  int64 opCapDivs(const SOP_NodeVerb::CookParms &cookparms) const
2057  {
2058  SOP_Node *thissop = cookparms.getNode();
2059  if (!thissop) return getCapDivs();
2060  int64 result;
2061  OP_Utils::evalOpParm(result, thissop, "capdivs", cookparms.getCookTime(), 0);
2062  return result;
2063  }
2064  bool getTriangularPoles() const { return myTriangularPoles; }
2065  void setTriangularPoles(bool val) { myTriangularPoles = val; }
2066  bool opTriangularPoles(const SOP_NodeVerb::CookParms &cookparms) const
2067  {
2068  SOP_Node *thissop = cookparms.getNode();
2069  if (!thissop) return getTriangularPoles();
2070  bool result;
2071  OP_Utils::evalOpParm(result, thissop, "triangularpoles", cookparms.getCookTime(), 0);
2072  return result;
2073  }
2074  fpreal64 getCapScale() const { return myCapScale; }
2075  void setCapScale(fpreal64 val) { myCapScale = val; }
2077  {
2078  SOP_Node *thissop = cookparms.getNode();
2079  if (!thissop) return getCapScale();
2080  fpreal64 result;
2081  OP_Utils::evalOpParm(result, thissop, "capscale", cookparms.getCookTime(), 0);
2082  return result;
2083  }
2084  fpreal64 getCapRoundness() const { return myCapRoundness; }
2085  void setCapRoundness(fpreal64 val) { myCapRoundness = val; }
2087  {
2088  SOP_Node *thissop = cookparms.getNode();
2089  if (!thissop) return getCapRoundness();
2090  fpreal64 result;
2091  OP_Utils::evalOpParm(result, thissop, "caproundness", cookparms.getCookTime(), 0);
2092  return result;
2093  }
2094  bool getAddEndCapsGroup() const { return myAddEndCapsGroup; }
2095  void setAddEndCapsGroup(bool val) { myAddEndCapsGroup = val; }
2096  bool opAddEndCapsGroup(const SOP_NodeVerb::CookParms &cookparms) const
2097  {
2098  SOP_Node *thissop = cookparms.getNode();
2099  if (!thissop) return getAddEndCapsGroup();
2100  bool result;
2101  OP_Utils::evalOpParm(result, thissop, "addendcapsgroup", cookparms.getCookTime(), 0);
2102  return result;
2103  }
2104  const UT_StringHolder & getEndCapsGroup() const { return myEndCapsGroup; }
2105  void setEndCapsGroup(const UT_StringHolder & val) { myEndCapsGroup = val; }
2107  {
2108  SOP_Node *thissop = cookparms.getNode();
2109  if (!thissop) return getEndCapsGroup();
2111  OP_Utils::evalOpParm(result, thissop, "endcapsgroup", cookparms.getCookTime(), 0);
2112  return result;
2113  }
2114  bool getApplyScale() const { return myApplyScale; }
2115  void setApplyScale(bool val) { myApplyScale = val; }
2116  bool opApplyScale(const SOP_NodeVerb::CookParms &cookparms) const
2117  {
2118  SOP_Node *thissop = cookparms.getNode();
2119  if (!thissop) return getApplyScale();
2120  bool result;
2121  OP_Utils::evalOpParm(result, thissop, "applyscale", cookparms.getCookTime(), 0);
2122  return result;
2123  }
2124  UT_SharedPtr<UT_Ramp> getScaleRamp() const { return myScaleRamp; }
2125  void setScaleRamp(UT_SharedPtr<UT_Ramp> val) { myScaleRamp = val; }
2127  {
2128  SOP_Node *thissop = cookparms.getNode();
2129  if (!thissop) return getScaleRamp();
2131  OP_Utils::evalOpParm(result, thissop, "scaleramp", cookparms.getCookTime(), 0);
2132  return result;
2133  }
2134  ROrd getROrd() const { return ROrd(myROrd); }
2135  void setROrd(ROrd val) { myROrd = int64(val); }
2136  ROrd opROrd(const SOP_NodeVerb::CookParms &cookparms) const
2137  {
2138  SOP_Node *thissop = cookparms.getNode();
2139  if (!thissop) return getROrd();
2140  int64 result;
2141  OP_Utils::evalOpParm(result, thissop, "rOrd", cookparms.getCookTime(), 0);
2142  return ROrd(result);
2143  }
2144  bool getApplyRoll() const { return myApplyRoll; }
2145  void setApplyRoll(bool val) { myApplyRoll = val; }
2146  bool opApplyRoll(const SOP_NodeVerb::CookParms &cookparms) const
2147  {
2148  SOP_Node *thissop = cookparms.getNode();
2149  if (!thissop) return getApplyRoll();
2150  bool result;
2151  OP_Utils::evalOpParm(result, thissop, "applyroll", cookparms.getCookTime(), 0);
2152  return result;
2153  }
2154  fpreal64 getRoll() const { return myRoll; }
2155  void setRoll(fpreal64 val) { myRoll = val; }
2156  fpreal64 opRoll(const SOP_NodeVerb::CookParms &cookparms) const
2157  {
2158  SOP_Node *thissop = cookparms.getNode();
2159  if (!thissop) return getRoll();
2160  fpreal64 result;
2161  OP_Utils::evalOpParm(result, thissop, "roll", cookparms.getCookTime(), 0);
2162  return result;
2163  }
2164  int64 getFullTwists() const { return myFullTwists; }
2165  void setFullTwists(int64 val) { myFullTwists = val; }
2167  {
2168  SOP_Node *thissop = cookparms.getNode();
2169  if (!thissop) return getFullTwists();
2170  int64 result;
2171  OP_Utils::evalOpParm(result, thissop, "fulltwists", cookparms.getCookTime(), 0);
2172  return result;
2173  }
2174  fpreal64 getIncRoll() const { return myIncRoll; }
2175  void setIncRoll(fpreal64 val) { myIncRoll = val; }
2177  {
2178  SOP_Node *thissop = cookparms.getNode();
2179  if (!thissop) return getIncRoll();
2180  fpreal64 result;
2181  OP_Utils::evalOpParm(result, thissop, "incroll", cookparms.getCookTime(), 0);
2182  return result;
2183  }
2184  RollPer getRollPer() const { return RollPer(myRollPer); }
2185  void setRollPer(RollPer val) { myRollPer = int64(val); }
2187  {
2188  SOP_Node *thissop = cookparms.getNode();
2189  if (!thissop) return getRollPer();
2190  int64 result;
2191  OP_Utils::evalOpParm(result, thissop, "rollper", cookparms.getCookTime(), 0);
2192  return RollPer(result);
2193  }
2194  const UT_StringHolder & getRollAttrib() const { return myRollAttrib; }
2195  void setRollAttrib(const UT_StringHolder & val) { myRollAttrib = val; }
2197  {
2198  SOP_Node *thissop = cookparms.getNode();
2199  if (!thissop) return getRollAttrib();
2201  OP_Utils::evalOpParm(result, thissop, "rollattrib", cookparms.getCookTime(), 0);
2202  return result;
2203  }
2204  bool getApplyYaw() const { return myApplyYaw; }
2205  void setApplyYaw(bool val) { myApplyYaw = val; }
2206  bool opApplyYaw(const SOP_NodeVerb::CookParms &cookparms) const
2207  {
2208  SOP_Node *thissop = cookparms.getNode();
2209  if (!thissop) return getApplyYaw();
2210  bool result;
2211  OP_Utils::evalOpParm(result, thissop, "applyyaw", cookparms.getCookTime(), 0);
2212  return result;
2213  }
2214  fpreal64 getYaw() const { return myYaw; }
2215  void setYaw(fpreal64 val) { myYaw = val; }
2216  fpreal64 opYaw(const SOP_NodeVerb::CookParms &cookparms) const
2217  {
2218  SOP_Node *thissop = cookparms.getNode();
2219  if (!thissop) return getYaw();
2220  fpreal64 result;
2221  OP_Utils::evalOpParm(result, thissop, "yaw", cookparms.getCookTime(), 0);
2222  return result;
2223  }
2224  fpreal64 getIncYaw() const { return myIncYaw; }
2225  void setIncYaw(fpreal64 val) { myIncYaw = val; }
2227  {
2228  SOP_Node *thissop = cookparms.getNode();
2229  if (!thissop) return getIncYaw();
2230  fpreal64 result;
2231  OP_Utils::evalOpParm(result, thissop, "incyaw", cookparms.getCookTime(), 0);
2232  return result;
2233  }
2234  YawPer getYawPer() const { return YawPer(myYawPer); }
2235  void setYawPer(YawPer val) { myYawPer = int64(val); }
2236  YawPer opYawPer(const SOP_NodeVerb::CookParms &cookparms) const
2237  {
2238  SOP_Node *thissop = cookparms.getNode();
2239  if (!thissop) return getYawPer();
2240  int64 result;
2241  OP_Utils::evalOpParm(result, thissop, "yawper", cookparms.getCookTime(), 0);
2242  return YawPer(result);
2243  }
2244  const UT_StringHolder & getYawAttrib() const { return myYawAttrib; }
2245  void setYawAttrib(const UT_StringHolder & val) { myYawAttrib = val; }
2247  {
2248  SOP_Node *thissop = cookparms.getNode();
2249  if (!thissop) return getYawAttrib();
2251  OP_Utils::evalOpParm(result, thissop, "yawattrib", cookparms.getCookTime(), 0);
2252  return result;
2253  }
2254  bool getApplyPitch() const { return myApplyPitch; }
2255  void setApplyPitch(bool val) { myApplyPitch = val; }
2256  bool opApplyPitch(const SOP_NodeVerb::CookParms &cookparms) const
2257  {
2258  SOP_Node *thissop = cookparms.getNode();
2259  if (!thissop) return getApplyPitch();
2260  bool result;
2261  OP_Utils::evalOpParm(result, thissop, "applypitch", cookparms.getCookTime(), 0);
2262  return result;
2263  }
2264  fpreal64 getPitch() const { return myPitch; }
2265  void setPitch(fpreal64 val) { myPitch = val; }
2266  fpreal64 opPitch(const SOP_NodeVerb::CookParms &cookparms) const
2267  {
2268  SOP_Node *thissop = cookparms.getNode();
2269  if (!thissop) return getPitch();
2270  fpreal64 result;
2271  OP_Utils::evalOpParm(result, thissop, "pitch", cookparms.getCookTime(), 0);
2272  return result;
2273  }
2274  fpreal64 getIncPitch() const { return myIncPitch; }
2275  void setIncPitch(fpreal64 val) { myIncPitch = val; }
2277  {
2278  SOP_Node *thissop = cookparms.getNode();
2279  if (!thissop) return getIncPitch();
2280  fpreal64 result;
2281  OP_Utils::evalOpParm(result, thissop, "incpitch", cookparms.getCookTime(), 0);
2282  return result;
2283  }
2284  PitchPer getPitchPer() const { return PitchPer(myPitchPer); }
2285  void setPitchPer(PitchPer val) { myPitchPer = int64(val); }
2287  {
2288  SOP_Node *thissop = cookparms.getNode();
2289  if (!thissop) return getPitchPer();
2290  int64 result;
2291  OP_Utils::evalOpParm(result, thissop, "pitchper", cookparms.getCookTime(), 0);
2292  return PitchPer(result);
2293  }
2294  const UT_StringHolder & getPitchAttrib() const { return myPitchAttrib; }
2295  void setPitchAttrib(const UT_StringHolder & val) { myPitchAttrib = val; }
2297  {
2298  SOP_Node *thissop = cookparms.getNode();
2299  if (!thissop) return getPitchAttrib();
2301  OP_Utils::evalOpParm(result, thissop, "pitchattrib", cookparms.getCookTime(), 0);
2302  return result;
2303  }
2304  CopyOrder getCopyOrder() const { return CopyOrder(myCopyOrder); }
2305  void setCopyOrder(CopyOrder val) { myCopyOrder = int64(val); }
2307  {
2308  SOP_Node *thissop = cookparms.getNode();
2309  if (!thissop) return getCopyOrder();
2310  int64 result;
2311  OP_Utils::evalOpParm(result, thissop, "copyorder", cookparms.getCookTime(), 0);
2312  return CopyOrder(result);
2313  }
2314  const UT_StringHolder & getCrossSectionAttrib() const { return myCrossSectionAttrib; }
2315  void setCrossSectionAttrib(const UT_StringHolder & val) { myCrossSectionAttrib = val; }
2317  {
2318  SOP_Node *thissop = cookparms.getNode();
2319  if (!thissop) return getCrossSectionAttrib();
2321  OP_Utils::evalOpParm(result, thissop, "crosssectionattrib", cookparms.getCookTime(), 0);
2322  return result;
2323  }
2324  PrimType getPrimType() const { return PrimType(myPrimType); }
2325  void setPrimType(PrimType val) { myPrimType = int64(val); }
2327  {
2328  SOP_Node *thissop = cookparms.getNode();
2329  if (!thissop) return getPrimType();
2330  int64 result;
2331  OP_Utils::evalOpParm(result, thissop, "primtype", cookparms.getCookTime(), 0);
2332  return PrimType(result);
2333  }
2334  bool getUnrollClosedRowCol() const { return myUnrollClosedRowCol; }
2335  void setUnrollClosedRowCol(bool val) { myUnrollClosedRowCol = val; }
2336  bool opUnrollClosedRowCol(const SOP_NodeVerb::CookParms &cookparms) const
2337  {
2338  SOP_Node *thissop = cookparms.getNode();
2339  if (!thissop) return getUnrollClosedRowCol();
2340  bool result;
2341  OP_Utils::evalOpParm(result, thissop, "unrollclosedrowcol", cookparms.getCookTime(), 0);
2342  return result;
2343  }
2344  bool getSwapRowCol() const { return mySwapRowCol; }
2345  void setSwapRowCol(bool val) { mySwapRowCol = val; }
2346  bool opSwapRowCol(const SOP_NodeVerb::CookParms &cookparms) const
2347  {
2348  SOP_Node *thissop = cookparms.getNode();
2349  if (!thissop) return getSwapRowCol();
2350  bool result;
2351  OP_Utils::evalOpParm(result, thissop, "swaprowcol", cookparms.getCookTime(), 0);
2352  return result;
2353  }
2354  bool getCloseIfNoCurveInput() const { return myCloseIfNoCurveInput; }
2355  void setCloseIfNoCurveInput(bool val) { myCloseIfNoCurveInput = val; }
2356  bool opCloseIfNoCurveInput(const SOP_NodeVerb::CookParms &cookparms) const
2357  {
2358  SOP_Node *thissop = cookparms.getNode();
2359  if (!thissop) return getCloseIfNoCurveInput();
2360  bool result;
2361  OP_Utils::evalOpParm(result, thissop, "closeifnocurveinput", cookparms.getCookTime(), 0);
2362  return result;
2363  }
2364  TangentType getTangentType() const { return TangentType(myTangentType); }
2365  void setTangentType(TangentType val) { myTangentType = int64(val); }
2367  {
2368  SOP_Node *thissop = cookparms.getNode();
2369  if (!thissop) return getTangentType();
2370  int64 result;
2371  OP_Utils::evalOpParm(result, thissop, "tangenttype", cookparms.getCookTime(), 0);
2372  return TangentType(result);
2373  }
2374  bool getContinuousClosed() const { return myContinuousClosed; }
2375  void setContinuousClosed(bool val) { myContinuousClosed = val; }
2376  bool opContinuousClosed(const SOP_NodeVerb::CookParms &cookparms) const
2377  {
2378  SOP_Node *thissop = cookparms.getNode();
2379  if (!thissop) return getContinuousClosed();
2380  bool result;
2381  OP_Utils::evalOpParm(result, thissop, "continuousclosed", cookparms.getCookTime(), 0);
2382  return result;
2383  }
2384  bool getExtrapolateEndTangents() const { return myExtrapolateEndTangents; }
2385  void setExtrapolateEndTangents(bool val) { myExtrapolateEndTangents = val; }
2387  {
2388  SOP_Node *thissop = cookparms.getNode();
2389  if (!thissop) return getExtrapolateEndTangents();
2390  bool result;
2391  OP_Utils::evalOpParm(result, thissop, "extrapolateendtangents", cookparms.getCookTime(), 0);
2392  return result;
2393  }
2394  bool getTransformByAttribs() const { return myTransformByAttribs; }
2395  void setTransformByAttribs(bool val) { myTransformByAttribs = val; }
2396  bool opTransformByAttribs(const SOP_NodeVerb::CookParms &cookparms) const
2397  {
2398  SOP_Node *thissop = cookparms.getNode();
2399  if (!thissop) return getTransformByAttribs();
2400  bool result;
2401  OP_Utils::evalOpParm(result, thissop, "transformbyattribs", cookparms.getCookTime(), 0);
2402  return result;
2403  }
2404  bool getComputeUVs() const { return myComputeUVs; }
2405  void setComputeUVs(bool val) { myComputeUVs = val; }
2406  bool opComputeUVs(const SOP_NodeVerb::CookParms &cookparms) const
2407  {
2408  SOP_Node *thissop = cookparms.getNode();
2409  if (!thissop) return getComputeUVs();
2410  bool result;
2411  OP_Utils::evalOpParm(result, thissop, "computeuvs", cookparms.getCookTime(), 0);
2412  return result;
2413  }
2414  bool getOverrideExistingUVs() const { return myOverrideExistingUVs; }
2415  void setOverrideExistingUVs(bool val) { myOverrideExistingUVs = val; }
2416  bool opOverrideExistingUVs(const SOP_NodeVerb::CookParms &cookparms) const
2417  {
2418  SOP_Node *thissop = cookparms.getNode();
2419  if (!thissop) return getOverrideExistingUVs();
2420  bool result;
2421  OP_Utils::evalOpParm(result, thissop, "overrideexistinguvs", cookparms.getCookTime(), 0);
2422  return result;
2423  }
2424  bool getLengthWeightedUVs() const { return myLengthWeightedUVs; }
2425  void setLengthWeightedUVs(bool val) { myLengthWeightedUVs = val; }
2426  bool opLengthWeightedUVs(const SOP_NodeVerb::CookParms &cookparms) const
2427  {
2428  SOP_Node *thissop = cookparms.getNode();
2429  if (!thissop) return getLengthWeightedUVs();
2430  bool result;
2431  OP_Utils::evalOpParm(result, thissop, "lengthweighteduvs", cookparms.getCookTime(), 0);
2432  return result;
2433  }
2434  bool getNormalizeU() const { return myNormalizeU; }
2435  void setNormalizeU(bool val) { myNormalizeU = val; }
2436  bool opNormalizeU(const SOP_NodeVerb::CookParms &cookparms) const
2437  {
2438  SOP_Node *thissop = cookparms.getNode();
2439  if (!thissop) return getNormalizeU();
2440  bool result;
2441  OP_Utils::evalOpParm(result, thissop, "normalizeu", cookparms.getCookTime(), 0);
2442  return result;
2443  }
2444  bool getNormalizeV() const { return myNormalizeV; }
2445  void setNormalizeV(bool val) { myNormalizeV = val; }
2446  bool opNormalizeV(const SOP_NodeVerb::CookParms &cookparms) const
2447  {
2448  SOP_Node *thissop = cookparms.getNode();
2449  if (!thissop) return getNormalizeV();
2450  bool result;
2451  OP_Utils::evalOpParm(result, thissop, "normalizev", cookparms.getCookTime(), 0);
2452  return result;
2453  }
2454  bool getFlipU() const { return myFlipU; }
2455  void setFlipU(bool val) { myFlipU = val; }
2456  bool opFlipU(const SOP_NodeVerb::CookParms &cookparms) const
2457  {
2458  SOP_Node *thissop = cookparms.getNode();
2459  if (!thissop) return getFlipU();
2460  bool result;
2461  OP_Utils::evalOpParm(result, thissop, "flipu", cookparms.getCookTime(), 0);
2462  return result;
2463  }
2464  UT_Vector2D getUVScale() const { return myUVScale; }
2465  void setUVScale(UT_Vector2D val) { myUVScale = val; }
2467  {
2468  SOP_Node *thissop = cookparms.getNode();
2469  if (!thissop) return getUVScale();
2471  OP_Utils::evalOpParm(result, thissop, "uvscale", cookparms.getCookTime(), 0);
2472  return result;
2473  }
2474  bool getUseMeshEdgeLengths() const { return myUseMeshEdgeLengths; }
2475  void setUseMeshEdgeLengths(bool val) { myUseMeshEdgeLengths = val; }
2476  bool opUseMeshEdgeLengths(const SOP_NodeVerb::CookParms &cookparms) const
2477  {
2478  SOP_Node *thissop = cookparms.getNode();
2479  if (!thissop) return getUseMeshEdgeLengths();
2480  bool result;
2481  OP_Utils::evalOpParm(result, thissop, "usemeshedgelengths", cookparms.getCookTime(), 0);
2482  return result;
2483  }
2484  bool getPropScalePerCurve() const { return myPropScalePerCurve; }
2485  void setPropScalePerCurve(bool val) { myPropScalePerCurve = val; }
2486  bool opPropScalePerCurve(const SOP_NodeVerb::CookParms &cookparms) const
2487  {
2488  SOP_Node *thissop = cookparms.getNode();
2489  if (!thissop) return getPropScalePerCurve();
2490  bool result;
2491  OP_Utils::evalOpParm(result, thissop, "propscalepercurve", cookparms.getCookTime(), 0);
2492  return result;
2493  }
2494  bool getWrapU() const { return myWrapU; }
2495  void setWrapU(bool val) { myWrapU = val; }
2496  bool opWrapU(const SOP_NodeVerb::CookParms &cookparms) const
2497  {
2498  SOP_Node *thissop = cookparms.getNode();
2499  if (!thissop) return getWrapU();
2500  bool result;
2501  OP_Utils::evalOpParm(result, thissop, "wrapu", cookparms.getCookTime(), 0);
2502  return result;
2503  }
2504  bool getWrapV() const { return myWrapV; }
2505  void setWrapV(bool val) { myWrapV = val; }
2506  bool opWrapV(const SOP_NodeVerb::CookParms &cookparms) const
2507  {
2508  SOP_Node *thissop = cookparms.getNode();
2509  if (!thissop) return getWrapV();
2510  bool result;
2511  OP_Utils::evalOpParm(result, thissop, "wrapv", cookparms.getCookTime(), 0);
2512  return result;
2513  }
2514  const UT_StringHolder & getAttribsFromBackbone() const { return myAttribsFromBackbone; }
2515  void setAttribsFromBackbone(const UT_StringHolder & val) { myAttribsFromBackbone = val; }
2517  {
2518  SOP_Node *thissop = cookparms.getNode();
2519  if (!thissop) return getAttribsFromBackbone();
2521  OP_Utils::evalOpParm(result, thissop, "attribsfrombackbone", cookparms.getCookTime(), 0);
2522  return result;
2523  }
2524  const UT_StringHolder & getAttribsFromCrossSection() const { return myAttribsFromCrossSection; }
2525  void setAttribsFromCrossSection(const UT_StringHolder & val) { myAttribsFromCrossSection = val; }
2527  {
2528  SOP_Node *thissop = cookparms.getNode();
2529  if (!thissop) return getAttribsFromCrossSection();
2531  OP_Utils::evalOpParm(result, thissop, "attribsfromcrosssection", cookparms.getCookTime(), 0);
2532  return result;
2533  }
2534  bool getAddPointRow() const { return myAddPointRow; }
2535  void setAddPointRow(bool val) { myAddPointRow = val; }
2536  bool opAddPointRow(const SOP_NodeVerb::CookParms &cookparms) const
2537  {
2538  SOP_Node *thissop = cookparms.getNode();
2539  if (!thissop) return getAddPointRow();
2540  bool result;
2541  OP_Utils::evalOpParm(result, thissop, "addptrow", cookparms.getCookTime(), 0);
2542  return result;
2543  }
2544  const UT_StringHolder & getPtRowAttrib() const { return myPtRowAttrib; }
2545  void setPtRowAttrib(const UT_StringHolder & val) { myPtRowAttrib = val; }
2547  {
2548  SOP_Node *thissop = cookparms.getNode();
2549  if (!thissop) return getPtRowAttrib();
2551  OP_Utils::evalOpParm(result, thissop, "ptrowattrib", cookparms.getCookTime(), 0);
2552  return result;
2553  }
2554  bool getAddPointCol() const { return myAddPointCol; }
2555  void setAddPointCol(bool val) { myAddPointCol = val; }
2556  bool opAddPointCol(const SOP_NodeVerb::CookParms &cookparms) const
2557  {
2558  SOP_Node *thissop = cookparms.getNode();
2559  if (!thissop) return getAddPointCol();
2560  bool result;
2561  OP_Utils::evalOpParm(result, thissop, "addptcol", cookparms.getCookTime(), 0);
2562  return result;
2563  }
2564  const UT_StringHolder & getPtColAttrib() const { return myPtColAttrib; }
2565  void setPtColAttrib(const UT_StringHolder & val) { myPtColAttrib = val; }
2567  {
2568  SOP_Node *thissop = cookparms.getNode();
2569  if (!thissop) return getPtColAttrib();
2571  OP_Utils::evalOpParm(result, thissop, "ptcolattrib", cookparms.getCookTime(), 0);
2572  return result;
2573  }
2574  bool getAddPrimRow() const { return myAddPrimRow; }
2575  void setAddPrimRow(bool val) { myAddPrimRow = val; }
2576  bool opAddPrimRow(const SOP_NodeVerb::CookParms &cookparms) const
2577  {
2578  SOP_Node *thissop = cookparms.getNode();
2579  if (!thissop) return getAddPrimRow();
2580  bool result;
2581  OP_Utils::evalOpParm(result, thissop, "addprimrow", cookparms.getCookTime(), 0);
2582  return result;
2583  }
2584  const UT_StringHolder & getPrimRowAttrib() const { return myPrimRowAttrib; }
2585  void setPrimRowAttrib(const UT_StringHolder & val) { myPrimRowAttrib = val; }
2587  {
2588  SOP_Node *thissop = cookparms.getNode();
2589  if (!thissop) return getPrimRowAttrib();
2591  OP_Utils::evalOpParm(result, thissop, "primrowattrib", cookparms.getCookTime(), 0);
2592  return result;
2593  }
2594  bool getAddPrimCol() const { return myAddPrimCol; }
2595  void setAddPrimCol(bool val) { myAddPrimCol = val; }
2596  bool opAddPrimCol(const SOP_NodeVerb::CookParms &cookparms) const
2597  {
2598  SOP_Node *thissop = cookparms.getNode();
2599  if (!thissop) return getAddPrimCol();
2600  bool result;
2601  OP_Utils::evalOpParm(result, thissop, "addprimcol", cookparms.getCookTime(), 0);
2602  return result;
2603  }
2604  const UT_StringHolder & getPrimColAttrib() const { return myPrimColAttrib; }
2605  void setPrimColAttrib(const UT_StringHolder & val) { myPrimColAttrib = val; }
2607  {
2608  SOP_Node *thissop = cookparms.getNode();
2609  if (!thissop) return getPrimColAttrib();
2611  OP_Utils::evalOpParm(result, thissop, "primcolattrib", cookparms.getCookTime(), 0);
2612  return result;
2613  }
2614  bool getAddCrossSectionNum() const { return myAddCrossSectionNum; }
2615  void setAddCrossSectionNum(bool val) { myAddCrossSectionNum = val; }
2616  bool opAddCrossSectionNum(const SOP_NodeVerb::CookParms &cookparms) const
2617  {
2618  SOP_Node *thissop = cookparms.getNode();
2619  if (!thissop) return getAddCrossSectionNum();
2620  bool result;
2621  OP_Utils::evalOpParm(result, thissop, "addcrosssectionnum", cookparms.getCookTime(), 0);
2622  return result;
2623  }
2624  const UT_StringHolder & getCrossSectionNumAttrib() const { return myCrossSectionNumAttrib; }
2625  void setCrossSectionNumAttrib(const UT_StringHolder & val) { myCrossSectionNumAttrib = val; }
2627  {
2628  SOP_Node *thissop = cookparms.getNode();
2629  if (!thissop) return getCrossSectionNumAttrib();
2631  OP_Utils::evalOpParm(result, thissop, "crosssectionnumattrib", cookparms.getCookTime(), 0);
2632  return result;
2633  }
2634  bool getAddCurveNum() const { return myAddCurveNum; }
2635  void setAddCurveNum(bool val) { myAddCurveNum = val; }
2636  bool opAddCurveNum(const SOP_NodeVerb::CookParms &cookparms) const
2637  {
2638  SOP_Node *thissop = cookparms.getNode();
2639  if (!thissop) return getAddCurveNum();
2640  bool result;
2641  OP_Utils::evalOpParm(result, thissop, "addcurvenum", cookparms.getCookTime(), 0);
2642  return result;
2643  }
2644  const UT_StringHolder & getCurveNumAttrib() const { return myCurveNumAttrib; }
2645  void setCurveNumAttrib(const UT_StringHolder & val) { myCurveNumAttrib = val; }
2647  {
2648  SOP_Node *thissop = cookparms.getNode();
2649  if (!thissop) return getCurveNumAttrib();
2651  OP_Utils::evalOpParm(result, thissop, "curvenumattrib", cookparms.getCookTime(), 0);
2652  return result;
2653  }
2654  UpVectorType getUpVectorType() const { return UpVectorType(myUpVectorType); }
2655  void setUpVectorType(UpVectorType val) { myUpVectorType = int64(val); }
2657  {
2658  SOP_Node *thissop = cookparms.getNode();
2659  if (!thissop) return getUpVectorType();
2660  int64 result;
2661  OP_Utils::evalOpParm(result, thissop, "upvectortype", cookparms.getCookTime(), 0);
2662  return UpVectorType(result);
2663  }
2664  bool getUpVectorAtStart() const { return myUpVectorAtStart; }
2665  void setUpVectorAtStart(bool val) { myUpVectorAtStart = val; }
2666  bool opUpVectorAtStart(const SOP_NodeVerb::CookParms &cookparms) const
2667  {
2668  SOP_Node *thissop = cookparms.getNode();
2669  if (!thissop) return getUpVectorAtStart();
2670  bool result;
2671  OP_Utils::evalOpParm(result, thissop, "upvectoratstart", cookparms.getCookTime(), 0);
2672  return result;
2673  }
2674  bool getUseEndUpVector() const { return myUseEndUpVector; }
2675  void setUseEndUpVector(bool val) { myUseEndUpVector = val; }
2676  bool opUseEndUpVector(const SOP_NodeVerb::CookParms &cookparms) const
2677  {
2678  SOP_Node *thissop = cookparms.getNode();
2679  if (!thissop) return getUseEndUpVector();
2680  bool result;
2681  OP_Utils::evalOpParm(result, thissop, "useendupvector", cookparms.getCookTime(), 0);
2682  return result;
2683  }
2684  const UT_StringHolder & getUpVectorAttrib() const { return myUpVectorAttrib; }
2685  void setUpVectorAttrib(const UT_StringHolder & val) { myUpVectorAttrib = val; }
2687  {
2688  SOP_Node *thissop = cookparms.getNode();
2689  if (!thissop) return getUpVectorAttrib();
2691  OP_Utils::evalOpParm(result, thissop, "upvectorattrib", cookparms.getCookTime(), 0);
2692  return result;
2693  }
2694  const UT_StringHolder & getEndUpVectorAttrib() const { return myEndUpVectorAttrib; }
2695  void setEndUpVectorAttrib(const UT_StringHolder & val) { myEndUpVectorAttrib = val; }
2697  {
2698  SOP_Node *thissop = cookparms.getNode();
2699  if (!thissop) return getEndUpVectorAttrib();
2701  OP_Utils::evalOpParm(result, thissop, "endupvectorattrib", cookparms.getCookTime(), 0);
2702  return result;
2703  }
2704  UT_Vector3D getUpVector() const { return myUpVector; }
2705  void setUpVector(UT_Vector3D val) { myUpVector = val; }
2707  {
2708  SOP_Node *thissop = cookparms.getNode();
2709  if (!thissop) return getUpVector();
2711  OP_Utils::evalOpParm(result, thissop, "upvector", cookparms.getCookTime(), 0);
2712  return result;
2713  }
2714  UT_Vector3D getEndUpVector() const { return myEndUpVector; }
2715  void setEndUpVector(UT_Vector3D val) { myEndUpVector = val; }
2717  {
2718  SOP_Node *thissop = cookparms.getNode();
2719  if (!thissop) return getEndUpVector();
2721  OP_Utils::evalOpParm(result, thissop, "endupvector", cookparms.getCookTime(), 0);
2722  return result;
2723  }
2724 
2725 private:
2726  UT_StringHolder myCurveGroup;
2727  UT_StringHolder myCrossSectionGroup;
2728  int64 mySurfaceShape;
2729  int64 mySurfaceType;
2730  fpreal64 myScale;
2731  int64 myCols;
2732  fpreal64 myRadius;
2733  fpreal64 myWidth;
2734  bool myReverseCrossSections;
2735  bool myStretchAroundTurns;
2736  fpreal64 myMaxStretchAroundTurns;
2737  int64 myEndCapType;
2738  int64 myCapDivs;
2739  bool myTriangularPoles;
2740  fpreal64 myCapScale;
2741  fpreal64 myCapRoundness;
2742  bool myAddEndCapsGroup;
2743  UT_StringHolder myEndCapsGroup;
2744  bool myApplyScale;
2745  UT_SharedPtr<UT_Ramp> myScaleRamp;
2746  int64 myROrd;
2747  bool myApplyRoll;
2748  fpreal64 myRoll;
2749  int64 myFullTwists;
2750  fpreal64 myIncRoll;
2751  int64 myRollPer;
2752  UT_StringHolder myRollAttrib;
2753  bool myApplyYaw;
2754  fpreal64 myYaw;
2755  fpreal64 myIncYaw;
2756  int64 myYawPer;
2757  UT_StringHolder myYawAttrib;
2758  bool myApplyPitch;
2759  fpreal64 myPitch;
2760  fpreal64 myIncPitch;
2761  int64 myPitchPer;
2762  UT_StringHolder myPitchAttrib;
2763  int64 myCopyOrder;
2764  UT_StringHolder myCrossSectionAttrib;
2765  int64 myPrimType;
2766  bool myUnrollClosedRowCol;
2767  bool mySwapRowCol;
2768  bool myCloseIfNoCurveInput;
2769  int64 myTangentType;
2770  bool myContinuousClosed;
2771  bool myExtrapolateEndTangents;
2772  bool myTransformByAttribs;
2773  bool myComputeUVs;
2774  bool myOverrideExistingUVs;
2775  bool myLengthWeightedUVs;
2776  bool myNormalizeU;
2777  bool myNormalizeV;
2778  bool myFlipU;
2779  UT_Vector2D myUVScale;
2780  bool myUseMeshEdgeLengths;
2781  bool myPropScalePerCurve;
2782  bool myWrapU;
2783  bool myWrapV;
2784  UT_StringHolder myAttribsFromBackbone;
2785  UT_StringHolder myAttribsFromCrossSection;
2786  bool myAddPointRow;
2787  UT_StringHolder myPtRowAttrib;
2788  bool myAddPointCol;
2789  UT_StringHolder myPtColAttrib;
2790  bool myAddPrimRow;
2791  UT_StringHolder myPrimRowAttrib;
2792  bool myAddPrimCol;
2793  UT_StringHolder myPrimColAttrib;
2794  bool myAddCrossSectionNum;
2795  UT_StringHolder myCrossSectionNumAttrib;
2796  bool myAddCurveNum;
2797  UT_StringHolder myCurveNumAttrib;
2798  int64 myUpVectorType;
2799  bool myUpVectorAtStart;
2800  bool myUseEndUpVector;
2801  UT_StringHolder myUpVectorAttrib;
2802  UT_StringHolder myEndUpVectorAttrib;
2803  UT_Vector3D myUpVector;
2804  UT_Vector3D myEndUpVector;
2805 
2806 };
const UT_StringHolder & getPitchAttrib() const
void setPropScalePerCurve(bool val)
fpreal64 getPitch() const
bool getPropScalePerCurve() const
void setComputeUVs(bool val)
bool getTransformByAttribs() const
bool getStretchAroundTurns() const
fpreal64 getRadius() const
fpreal64 getScale() const
const UT_StringHolder & getEndUpVectorAttrib() const
void setWidth(fpreal64 val)
UpVectorType getUpVectorType() const
static void loadData(UT_IStream &is, UT_Vector4I &v)
bool opAddPointCol(const SOP_NodeVerb::CookParms &cookparms) const
YawPer opYawPer(const SOP_NodeVerb::CookParms &cookparms) const
bool opPropScalePerCurve(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 getIncPitch() const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_SharedPtr< UT_Ramp > &value) override
bool getOverrideExistingUVs() const
int int32
Definition: SYS_Types.h:39
SOP_Node * getNode() const
Definition: SOP_NodeVerb.h:347
bool opNormalizeU(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getPtColAttrib() const
void setPitch(fpreal64 val)
void setAddPrimCol(bool val)
static void saveData(std::ostream &os, UT_Vector4D v)
void setRadius(fpreal64 val)
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_StringHolder &value) override
bool opUnrollClosedRowCol(const SOP_NodeVerb::CookParms &cookparms) const
void setCrossSectionNumAttrib(const UT_StringHolder &val)
void setPtRowAttrib(const UT_StringHolder &val)
bool getUseEndUpVector() const
const UT_StringHolder & getCurveNumAttrib() const
void setTransformByAttribs(bool val)
fpreal64 opWidth(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getEndCapsGroup() const
fpreal64 opRoll(const SOP_NodeVerb::CookParms &cookparms) const
static void saveData(std::ostream &os, UT_Matrix4D v)
static void loadData(UT_IStream &is, PRM_DataItemHandle &v)
exint bread(int32 *buffer, exint asize=1)
GLboolean * data
Definition: glcorearb.h:131
PrimType opPrimType(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opCurveGroup(const SOP_NodeVerb::CookParms &cookparms) const
GT_API const UT_StringHolder time
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector4.h:493
fpreal64 opIncPitch(const SOP_NodeVerb::CookParms &cookparms) const
void setUpVectorAtStart(bool val)
const GLdouble * v
Definition: glcorearb.h:837
bool getUnrollClosedRowCol() const
void setPrimColAttrib(const UT_StringHolder &val)
fpreal getTime() const
Definition: OP_Context.h:62
UT_Vector2T< fpreal64 > UT_Vector2D
fpreal64 getWidth() const
UT_StringHolder opPrimColAttrib(const SOP_NodeVerb::CookParms &cookparms) const
UpVectorType opUpVectorType(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 opRadius(const SOP_NodeVerb::CookParms &cookparms) const
exint getNestNumParms(TempIndex idx) const override
bool opApplyYaw(const SOP_NodeVerb::CookParms &cookparms) const
bool opAddPrimRow(const SOP_NodeVerb::CookParms &cookparms) const
bool opWrapV(const SOP_NodeVerb::CookParms &cookparms) const
void setRoll(fpreal64 val)
bool opComputeUVs(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opAttribsFromBackbone(const SOP_NodeVerb::CookParms &cookparms) const
bool opUseEndUpVector(const SOP_NodeVerb::CookParms &cookparms) const
void setYaw(fpreal64 val)
const OP_Context & context() const
Definition: OP_NodeParms.h:97
constexpr SYS_FORCE_INLINE T & z() noexcept
Definition: UT_Vector3.h:667
int64 exint
Definition: SYS_Types.h:125
void setEndCapsGroup(const UT_StringHolder &val)
SYS_FORCE_INLINE const char * buffer() const
void setEndUpVectorAttrib(const UT_StringHolder &val)
void setTriangularPoles(bool val)
GLdouble s
Definition: glad.h:3009
void setPrimRowAttrib(const UT_StringHolder &val)
void setCloseIfNoCurveInput(bool val)
void setAddCurveNum(bool val)
UT_Vector3D getEndUpVector() const
An output stream object that owns its own string buffer storage.
static void saveData(std::ostream &os, fpreal64 v)
static void saveData(std::ostream &os, PRM_DataItemHandle s)
bool getUpVectorAtStart() const
UT_StringHolder opUpVectorAttrib(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, UT_Matrix3D &v)
const UT_StringHolder & getCurveGroup() const
void setUpVectorType(UpVectorType val)
bool getAddPointCol() const
**But if you need a result
Definition: thread.h:613
void setOverrideExistingUVs(bool val)
void setAddPointRow(bool val)
static void loadData(UT_IStream &is, int64 &v)
static void saveData(std::ostream &os, bool v)
static void loadData(UT_IStream &is, UT_Vector2D &v)
void setSurfaceShape(SurfaceShape val)
ROrd opROrd(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 opIncYaw(const SOP_NodeVerb::CookParms &cookparms) const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
bool opCloseIfNoCurveInput(const SOP_NodeVerb::CookParms &cookparms) const
exint nodeIdx() const
Definition: OP_NodeParms.h:95
static PRM_DataItemHandle parseBinary(const char *type, UT_IStream &is)
bool getContinuousClosed() const
const UT_WorkBuffer & str()
Returns a read-only reference to the underlying UT_WorkBuffer.
const UT_StringHolder & getCrossSectionGroup() const
const UT_StringHolder & getRollAttrib() const
void setCapDivs(int64 val)
static void loadData(UT_IStream &is, fpreal64 &v)
const UT_StringHolder & getYawAttrib() const
void setPtColAttrib(const UT_StringHolder &val)
UT_StringHolder opCrossSectionAttrib(const SOP_NodeVerb::CookParms &cookparms) const
virtual NodeIdx getInput(NodeIdx idx, int input, bool markused=false) const =0
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector4.h:491
fpreal64 opIncRoll(const SOP_NodeVerb::CookParms &cookparms) const
bool opLengthWeightedUVs(const SOP_NodeVerb::CookParms &cookparms) const
ParmType getNestParmType(TempIndex fieldnum) const override
void setMaxStretchAroundTurns(fpreal64 val)
bool getTriangularPoles() const
bool getAddCurveNum() const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector3D &value) override
void setUpVectorAttrib(const UT_StringHolder &val)
bool opSwapRowCol(const SOP_NodeVerb::CookParms &cookparms) const
double fpreal64
Definition: SYS_Types.h:201
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector2.h:423
PrimType getPrimType() const
void setCrossSectionGroup(const UT_StringHolder &val)
void setAttribsFromCrossSection(const UT_StringHolder &val)
bool getUseMeshEdgeLengths() const
bool operator==(const BaseDimensions< T > &a, const BaseDimensions< Y > &b)
Definition: Dimensions.h:137
void setApplyYaw(bool val)
void setAddCrossSectionNum(bool val)
PitchPer opPitchPer(const SOP_NodeVerb::CookParms &cookparms) const
void loadFromOpSubclass(const LoadParms &loadparms) override
void setAddPointCol(bool val)
bool opAddCurveNum(const SOP_NodeVerb::CookParms &cookparms) const
SYS_FORCE_INLINE UT_StringHolder getToken(SurfaceShape enum_value)
bool getExtrapolateEndTangents() const
static void loadData(UT_IStream &is, UT_Vector3I &v)
UT_SharedPtr< UT_Ramp > opScaleRamp(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 getCapRoundness() const
SurfaceType getSurfaceType() const
void save(std::ostream &os) const
static void loadData(UT_IStream &is, UT_Matrix2D &v)
bool opNormalizeV(const SOP_NodeVerb::CookParms &cookparms) const
void setRollAttrib(const UT_StringHolder &val)
SurfaceShape getSurfaceShape() const
exint length() const
fpreal64 getMaxStretchAroundTurns() const
UT_StringHolder opCurveNumAttrib(const SOP_NodeVerb::CookParms &cookparms) const
void doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
void setFullTwists(int64 val)
const char * getNestParmName(TempIndex fieldnum) const override
SYS_FORCE_INLINE const char * buffer() const
std::shared_ptr< T > UT_SharedPtr
Wrapper around std::shared_ptr.
Definition: UT_SharedPtr.h:36
const UT_StringHolder & getPtRowAttrib() const
constexpr SYS_FORCE_INLINE T & z() noexcept
Definition: UT_Vector4.h:495
void setStretchAroundTurns(bool val)
void setCapRoundness(fpreal64 val)
static void loadData(UT_IStream &is, UT_StringHolder &v)
void getNestParmValue(TempIndex idx, TempIndex instance, fpreal &value) const override
void setUpVector(UT_Vector3D val)
void setAddPrimRow(bool val)
void copyFrom(const OP_NodeParms *src) override
fpreal64 opCapScale(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, UT_SharedPtr< UT_Ramp > &v)
const OP_GraphProxy * graph() const
Definition: OP_NodeParms.h:94
int64 opCols(const SOP_NodeVerb::CookParms &cookparms) const
bool opAddPrimCol(const SOP_NodeVerb::CookParms &cookparms) const
#define SYS_FORCE_INLINE
Definition: SYS_Inline.h:45
fpreal64 opScale(const SOP_NodeVerb::CookParms &cookparms) const
void setReverseCrossSections(bool val)
void setApplyRoll(bool val)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_StringHolder &value) const override
bool getAddEndCapsGroup() const
bool load(UT_IStream &is)
void setPitchAttrib(const UT_StringHolder &val)
void setNormalizeV(bool val)
UT_StringHolder opEndCapsGroup(const SOP_NodeVerb::CookParms &cookparms) const
EndCapType getEndCapType() const
void setScaleRamp(UT_SharedPtr< UT_Ramp > val)
fpreal64 getYaw() const
void setScale(fpreal64 val)
long long int64
Definition: SYS_Types.h:116
void setCapScale(fpreal64 val)
void setAddEndCapsGroup(bool val)
void setPrimType(PrimType val)
void setIncPitch(fpreal64 val)
UT_Vector3T< fpreal64 > UT_Vector3D
UT_StringHolder opPitchAttrib(const SOP_NodeVerb::CookParms &cookparms) const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix4D &value) override
void setEndCapType(EndCapType val)
void setCrossSectionAttrib(const UT_StringHolder &val)
fpreal64 getIncYaw() const
static void loadData(UT_IStream &is, bool &v)
fpreal64 getCapScale() const
virtual void evalOpParm(int64 &v, NodeIdx node, const char *parmname, fpreal time, DEP_MicroNode *depnode) const =0
void setUseMeshEdgeLengths(bool val)
void setYawAttrib(const UT_StringHolder &val)
void setYawPer(YawPer val)
TangentType opTangentType(const SOP_NodeVerb::CookParms &cookparms) const
bool getReverseCrossSections() const
bool opAddPointRow(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, UT_Vector3D &v)
void saveBinary(std::ostream &os) const
Save string to binary stream.
Definition: UT_String.h:296
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector2D &value) override
bool isParmColorRamp(exint idx) const override
bool getAddPointRow() const
bool getCloseIfNoCurveInput() const
const UT_StringHolder & getPrimColAttrib() const
GT_API const UT_StringHolder version
void getNestParmValue(TempIndex idx, TempIndex instance, UT_SharedPtr< UT_Ramp > &value) const override
void setLengthWeightedUVs(bool val)
bool opOverrideExistingUVs(const SOP_NodeVerb::CookParms &cookparms) const
void setIncYaw(fpreal64 val)
static void saveData(std::ostream &os, UT_Vector2D v)
const UT_StringHolder & getAttribsFromBackbone() const
void setUnrollClosedRowCol(bool val)
bool opUpVectorAtStart(const SOP_NodeVerb::CookParms &cookparms) const
static void saveData(std::ostream &os, UT_Matrix3D v)
void setRollPer(RollPer val)
bool opWrapU(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 getRoll() const
void setPitchPer(PitchPer val)
UT_StringHolder opEndUpVectorAttrib(const SOP_NodeVerb::CookParms &cookparms) const
void setUVScale(UT_Vector2D val)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector3D &value) const override
bool opApplyPitch(const SOP_NodeVerb::CookParms &cookparms) const
bool operator==(const SOP_Sweep_2_0Parms &src) const
void setCurveGroup(const UT_StringHolder &val)
bool opAddEndCapsGroup(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opPrimRowAttrib(const SOP_NodeVerb::CookParms &cookparms) const
void setNestParmValue(TempIndex idx, TempIndex instance, const fpreal &value) override
void getNestParmValue(TempIndex idx, TempIndex instance, exint &value) const override
fpreal64 fpreal
Definition: SYS_Types.h:277
void doGetParmValue(TempIndex idx, TempIndex instance, T &value) const
fpreal64 opPitch(const SOP_NodeVerb::CookParms &cookparms) const
DEP_MicroNode * depnode() const
Definition: OP_NodeParms.h:99
UT_Vector3D opEndUpVector(const SOP_NodeVerb::CookParms &cookparms) const
void setTangentType(TangentType val)
bool getLengthWeightedUVs() const
LeafData & operator=(const LeafData &)=delete
void setApplyPitch(bool val)
YawPer getYawPer() const
UT_StringHolder opCrossSectionNumAttrib(const SOP_NodeVerb::CookParms &cookparms) const
Utility class for containing a color ramp.
Definition: UT_Ramp.h:92
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector4D &value) override
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector2D &value) const override
void setAttribsFromBackbone(const UT_StringHolder &val)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix2D &value) const override
static void loadData(UT_IStream &is, UT_Vector2I &v)
void setCopyOrder(CopyOrder val)
const UT_StringHolder & getCrossSectionAttrib() const
bool opApplyRoll(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getAttribsFromCrossSection() const
constexpr SYS_FORCE_INLINE T & w() noexcept
Definition: UT_Vector4.h:497
static void loadData(UT_IStream &is, UT_Vector4D &v)
int64 opCapDivs(const SOP_NodeVerb::CookParms &cookparms) const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix2D &value) override
GLuint GLfloat * val
Definition: glcorearb.h:1608
void setExtrapolateEndTangents(bool val)
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
bool opReverseCrossSections(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 opCapRoundness(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opYawAttrib(const SOP_NodeVerb::CookParms &cookparms) const
void setNestParmValue(TempIndex idx, TempIndex instance, const PRM_DataItemHandle &value) override
#define SOP_API
Definition: SOP_API.h:10
UT_StringHolder opPtColAttrib(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opPtRowAttrib(const SOP_NodeVerb::CookParms &cookparms) const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector4D &value) const override
fpreal64 opYaw(const SOP_NodeVerb::CookParms &cookparms) const
bool opUseMeshEdgeLengths(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 opMaxStretchAroundTurns(const SOP_NodeVerb::CookParms &cookparms) const
bool opTriangularPoles(const SOP_NodeVerb::CookParms &cookparms) const
bool opStretchAroundTurns(const SOP_NodeVerb::CookParms &cookparms) const
static void saveData(std::ostream &os, UT_Vector3D v)
fpreal getCookTime() const
Definition: SOP_NodeVerb.h:361
void setCurveNumAttrib(const UT_StringHolder &val)
void setNestParmValue(TempIndex idx, TempIndex instance, const exint &value) override
void setApplyScale(bool val)
UT_StringHolder opCrossSectionGroup(const SOP_NodeVerb::CookParms &cookparms) const
void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
void buildFromOp(const OP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
bool opFlipU(const SOP_NodeVerb::CookParms &cookparms) const
const char * findChar(int c) const
Definition: UT_String.h:1395
#define UT_ASSERT(ZZ)
Definition: UT_Assert.h:156
Definition: core.h:1131
static void loadData(UT_IStream &is, UT_Matrix4D &v)
UT_SharedPtr< UT_Ramp > getScaleRamp() const
const UT_StringHolder & getCrossSectionNumAttrib() const
void setSurfaceType(SurfaceType val)
void setNormalizeU(bool val)
GLboolean r
Definition: glcorearb.h:1222
int64 getFullTwists() const
PitchPer getPitchPer() const
RollPer getRollPer() const
fpreal64 getIncRoll() const
EndCapType opEndCapType(const SOP_NodeVerb::CookParms &cookparms) const
void setEndUpVector(UT_Vector3D val)
void setSwapRowCol(bool val)
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector3.h:665
void setUseEndUpVector(bool val)
bool opApplyScale(const SOP_NodeVerb::CookParms &cookparms) const
CopyOrder opCopyOrder(const SOP_NodeVerb::CookParms &cookparms) const
type
Definition: core.h:1059
UT_Vector2D getUVScale() const
void setIncRoll(fpreal64 val)
const UT_StringHolder & getPrimRowAttrib() const
UT_Vector3D getUpVector() const
CopyOrder getCopyOrder() const
static void saveData(std::ostream &os, UT_Matrix2D v)
bool opAddCrossSectionNum(const SOP_NodeVerb::CookParms &cookparms) const
int64 opFullTwists(const SOP_NodeVerb::CookParms &cookparms) const
UT_Vector3D opUpVector(const SOP_NodeVerb::CookParms &cookparms) const
GEO_API int getPrimType(const TypeMask &mask)
UT_StringHolder opAttribsFromCrossSection(const SOP_NodeVerb::CookParms &cookparms) const
bool getAddCrossSectionNum() const
UT_StringHolder opRollAttrib(const SOP_NodeVerb::CookParms &cookparms) const
UT_SharedPtr< const PRM_DataItem > PRM_DataItemHandle
Definition: PRM_Parm.h:97
SurfaceType opSurfaceType(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getUpVectorAttrib() const
static void saveData(std::ostream &os, UT_SharedPtr< UT_Ramp > s)
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix3D &value) override
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector2.h:425
SYS_FORCE_INLINE bool isstring() const
bool opExtrapolateEndTangents(const SOP_NodeVerb::CookParms &cookparms) const
UT_Vector2D opUVScale(const SOP_NodeVerb::CookParms &cookparms) const
SYS_FORCE_INLINE void strncpy(const char *src, exint maxlen)
TangentType getTangentType() const
SurfaceShape opSurfaceShape(const SOP_NodeVerb::CookParms &cookparms) const
static void saveData(std::ostream &os, UT_StringHolder s)
bool opTransformByAttribs(const SOP_NodeVerb::CookParms &cookparms) const
bool operator!=(const SOP_Sweep_2_0Parms &src) const
GLenum src
Definition: glcorearb.h:1793
static void saveData(std::ostream &os, int64 v)
RollPer opRollPer(const SOP_NodeVerb::CookParms &cookparms) const
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector3.h:663
void setContinuousClosed(bool val)
bool opContinuousClosed(const SOP_NodeVerb::CookParms &cookparms) const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix4D &value) const override