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 <OP/OP_GraphProxy.h>
9 
10 #include <OP/OP_Utils.h>
11 #include <PRM/PRM_Parm.h>
12 #include <UT/UT_IStream.h>
13 #include <UT/UT_NTStreamUtil.h>
14 #include <UT/UT_Ramp.h>
15 #include <UT/UT_SharedPtr.h>
16 #include <UT/UT_StringHolder.h>
17 #include <UT/UT_StringStream.h>
18 #include <UT/UT_VectorTypes.h>
19 #include <UT/UT_EnvControl.h>
20 #include <SYS/SYS_Types.h>
21 
22 class DEP_MicroNode;
23 namespace SOP_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_Ramp::buildFromDefault("1pos ( 0 ) 1value ( 1 ) 1interp ( linear ) 2pos ( 1 ) 2value ( 1 ) 2interp ( linear )");
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 
469  if (baseGetSignature() != src.baseGetSignature()) return false;
470 
471  return true;
472  }
473  bool operator!=(const SOP_Sweep_2_0Parms &src) const
474  {
475  return !operator==(src);
476  }
488 
489 
490 
491  void buildFromOp(const OP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
492  {
493  myCurveGroup = ""_UTsh;
494  if (true)
495  graph->evalOpParm(myCurveGroup, nodeidx, "curvegroup", time, graph->isDirect()?nullptr:depnode);
496  myCrossSectionGroup = ""_UTsh;
497  if (true)
498  graph->evalOpParm(myCrossSectionGroup, nodeidx, "crosssectiongroup", time, graph->isDirect()?nullptr:depnode);
499  mySurfaceShape = 0;
500  if (true)
501  graph->evalOpParm(mySurfaceShape, nodeidx, "surfaceshape", time, graph->isDirect()?nullptr:depnode);
502  mySurfaceType = 5;
503  if (true)
504  graph->evalOpParm(mySurfaceType, nodeidx, "surfacetype", time, graph->isDirect()?nullptr:depnode);
505  myScale = 1;
506  if (true && ( (true&&!(((int64(getSurfaceShape())!=0))||((int64(getSurfaceShape())!=0)))) ) )
507  graph->evalOpParm(myScale, nodeidx, "scale", time, graph->isDirect()?nullptr:depnode);
508  myCols = 8;
509  if (true && ( (true&&!(((int64(getSurfaceShape())==0))||((int64(getSurfaceShape())==0)))) ) )
510  graph->evalOpParm(myCols, nodeidx, "cols", time, graph->isDirect()?nullptr:depnode);
511  myRadius = 0.1;
512  if (true && ( (true&&!(((int64(getSurfaceShape())!=1))||((int64(getSurfaceShape())!=1)))) ) )
513  graph->evalOpParm(myRadius, nodeidx, "radius", time, graph->isDirect()?nullptr:depnode);
514  myWidth = 0.2;
515  if (true && ( (true&&!(((int64(getSurfaceShape())!=3)&&(int64(getSurfaceShape())!=2))||((int64(getSurfaceShape())!=3)&&(int64(getSurfaceShape())!=2)))) ) )
516  graph->evalOpParm(myWidth, nodeidx, "width", time, graph->isDirect()?nullptr:depnode);
517  myReverseCrossSections = false;
518  if (true)
519  graph->evalOpParm(myReverseCrossSections, nodeidx, "reversecrosssections", time, graph->isDirect()?nullptr:depnode);
520  myStretchAroundTurns = true;
521  if (true)
522  graph->evalOpParm(myStretchAroundTurns, nodeidx, "stretcharoundturns", time, graph->isDirect()?nullptr:depnode);
523  myMaxStretchAroundTurns = 10;
524  if (true && ( (true&&!(((getStretchAroundTurns()==0)))) ) )
525  graph->evalOpParm(myMaxStretchAroundTurns, nodeidx, "maxstretcharoundturns", time, graph->isDirect()?nullptr:depnode);
526  myEndCapType = 0;
527  if (true)
528  graph->evalOpParm(myEndCapType, nodeidx, "endcaptype", time, graph->isDirect()?nullptr:depnode);
529  myCapDivs = 3;
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(myCapDivs, nodeidx, "capdivs", time, graph->isDirect()?nullptr:depnode);
532  myTriangularPoles = false;
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(myTriangularPoles, nodeidx, "triangularpoles", time, graph->isDirect()?nullptr:depnode);
535  myCapScale = 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(myCapScale, nodeidx, "capscale", time, graph->isDirect()?nullptr:depnode);
538  myCapRoundness = 1;
539  if (true && ( (true&&!(((int64(getEndCapType())==0))||((int64(getEndCapType())==1))||((int64(getEndCapType())==3))||((int64(getEndCapType())==0))||((int64(getEndCapType())==1))||((int64(getEndCapType())==3)))) ) )
540  graph->evalOpParm(myCapRoundness, nodeidx, "caproundness", time, graph->isDirect()?nullptr:depnode);
541  myAddEndCapsGroup = false;
542  if (true)
543  graph->evalOpParm(myAddEndCapsGroup, nodeidx, "addendcapsgroup", time, graph->isDirect()?nullptr:depnode);
544  myEndCapsGroup = "endcaps"_UTsh;
545  if (true && ( (true&&!(((getAddEndCapsGroup()==0)))) ) )
546  graph->evalOpParm(myEndCapsGroup, nodeidx, "endcapsgroup", time, graph->isDirect()?nullptr:depnode);
547  myApplyScale = false;
548  if (true)
549  graph->evalOpParm(myApplyScale, nodeidx, "applyscale", time, graph->isDirect()?nullptr:depnode);
550  myScaleRamp = UT_Ramp::buildFromDefault("1pos ( 0 ) 1value ( 1 ) 1interp ( linear ) 2pos ( 1 ) 2value ( 1 ) 2interp ( linear )");
551  if (true && ( (true&&!(((getApplyScale()==0)))) ) )
552  graph->evalOpParm(myScaleRamp, nodeidx, "scaleramp", time, graph->isDirect()?nullptr:depnode);
553  myROrd = 0;
554  if (true)
555  graph->evalOpParm(myROrd, nodeidx, "rOrd", time, graph->isDirect()?nullptr:depnode);
556  myApplyRoll = true;
557  if (true)
558  graph->evalOpParm(myApplyRoll, nodeidx, "applyroll", time, graph->isDirect()?nullptr:depnode);
559  myRoll = 0;
560  if (true && ( (true&&!(((getApplyRoll()==0)))) ) )
561  graph->evalOpParm(myRoll, nodeidx, "roll", time, graph->isDirect()?nullptr:depnode);
562  myFullTwists = 0;
563  if (true && ( (true&&!(((getApplyRoll()==0)))) ) )
564  graph->evalOpParm(myFullTwists, nodeidx, "fulltwists", time, graph->isDirect()?nullptr:depnode);
565  myIncRoll = 0;
566  if (true && ( (true&&!(((getApplyRoll()==0)))) ) )
567  graph->evalOpParm(myIncRoll, nodeidx, "incroll", time, graph->isDirect()?nullptr:depnode);
568  myRollPer = 4;
569  if (true && ( (true&&!(((getApplyRoll()==0)))) ) )
570  graph->evalOpParm(myRollPer, nodeidx, "rollper", time, graph->isDirect()?nullptr:depnode);
571  myRollAttrib = "roll"_UTsh;
572  if (true && ( (true&&!(((getApplyRoll()==0))||((getApplyRoll()==1)&&(int64(getRollPer())!=2))||((getApplyRoll()==0))||((getApplyRoll()==1)&&(int64(getRollPer())!=2)))) ) )
573  graph->evalOpParm(myRollAttrib, nodeidx, "rollattrib", time, graph->isDirect()?nullptr:depnode);
574  myApplyYaw = false;
575  if (true)
576  graph->evalOpParm(myApplyYaw, nodeidx, "applyyaw", time, graph->isDirect()?nullptr:depnode);
577  myYaw = 0;
578  if (true && ( (true&&!(((getApplyYaw()==0)))) ) )
579  graph->evalOpParm(myYaw, nodeidx, "yaw", time, graph->isDirect()?nullptr:depnode);
580  myIncYaw = 0;
581  if (true && ( (true&&!(((getApplyYaw()==0)))) ) )
582  graph->evalOpParm(myIncYaw, nodeidx, "incyaw", time, graph->isDirect()?nullptr:depnode);
583  myYawPer = 4;
584  if (true && ( (true&&!(((getApplyYaw()==0)))) ) )
585  graph->evalOpParm(myYawPer, nodeidx, "yawper", time, graph->isDirect()?nullptr:depnode);
586  myYawAttrib = "yaw"_UTsh;
587  if (true && ( (true&&!(((getApplyYaw()==0))||((getApplyYaw()==1)&&(int64(getYawPer())!=2))||((getApplyYaw()==0))||((getApplyYaw()==1)&&(int64(getYawPer())!=2)))) ) )
588  graph->evalOpParm(myYawAttrib, nodeidx, "yawattrib", time, graph->isDirect()?nullptr:depnode);
589  myApplyPitch = false;
590  if (true)
591  graph->evalOpParm(myApplyPitch, nodeidx, "applypitch", time, graph->isDirect()?nullptr:depnode);
592  myPitch = 0;
593  if (true && ( (true&&!(((getApplyPitch()==0)))) ) )
594  graph->evalOpParm(myPitch, nodeidx, "pitch", time, graph->isDirect()?nullptr:depnode);
595  myIncPitch = 0;
596  if (true && ( (true&&!(((getApplyPitch()==0)))) ) )
597  graph->evalOpParm(myIncPitch, nodeidx, "incpitch", time, graph->isDirect()?nullptr:depnode);
598  myPitchPer = 4;
599  if (true && ( (true&&!(((getApplyPitch()==0)))) ) )
600  graph->evalOpParm(myPitchPer, nodeidx, "pitchper", time, graph->isDirect()?nullptr:depnode);
601  myPitchAttrib = "pitch"_UTsh;
602  if (true && ( (true&&!(((getApplyPitch()==0))||((getApplyPitch()==1)&&(int64(getPitchPer())!=2))||((getApplyPitch()==0))||((getApplyPitch()==1)&&(int64(getPitchPer())!=2)))) ) )
603  graph->evalOpParm(myPitchAttrib, nodeidx, "pitchattrib", time, graph->isDirect()?nullptr:depnode);
604  myCopyOrder = 1;
605  if (true && ( (true&&!(((int64(getSurfaceShape())!=0)))) ) )
606  graph->evalOpParm(myCopyOrder, nodeidx, "copyorder", time, graph->isDirect()?nullptr:depnode);
607  myCrossSectionAttrib = "variant"_UTsh;
608  if (true && ( (true&&!(((int64(getSurfaceShape())!=0))||((int64(getCopyOrder())!=4))||((int64(getSurfaceShape())!=0))||((int64(getCopyOrder())!=4)))) ) )
609  graph->evalOpParm(myCrossSectionAttrib, nodeidx, "crosssectionattrib", time, graph->isDirect()?nullptr:depnode);
610  myPrimType = 0;
611  if (true && ( (true&&!(((int64(getSurfaceType())==0)))) ) )
612  graph->evalOpParm(myPrimType, nodeidx, "primtype", time, graph->isDirect()?nullptr:depnode);
613  myUnrollClosedRowCol = false;
614  if (true && ( (true&&!(((int64(getSurfaceType())==0)))) ) )
615  graph->evalOpParm(myUnrollClosedRowCol, nodeidx, "unrollclosedrowcol", time, graph->isDirect()?nullptr:depnode);
616  mySwapRowCol = false;
617  if (true)
618  graph->evalOpParm(mySwapRowCol, nodeidx, "swaprowcol", time, graph->isDirect()?nullptr:depnode);
619  myCloseIfNoCurveInput = false;
620  if (true && ( (true&&!(((int64(getSurfaceType())==0))||((int64(getSurfaceType())==1))||(((graph->getInput(nodeidx,0)>=0)!=0)))) ) )
621  graph->evalOpParm(myCloseIfNoCurveInput, nodeidx, "closeifnocurveinput", time, graph->isDirect()?nullptr:depnode);
622  myTangentType = 0;
623  if (true)
624  graph->evalOpParm(myTangentType, nodeidx, "tangenttype", time, graph->isDirect()?nullptr:depnode);
625  myContinuousClosed = true;
626  if (true && ( (true&&!(((int64(getTangentType())==4)))) ) )
627  graph->evalOpParm(myContinuousClosed, nodeidx, "continuousclosed", time, graph->isDirect()?nullptr:depnode);
628  myExtrapolateEndTangents = false;
629  if (true && ( (true&&!(((int64(getTangentType())==4)))) ) )
630  graph->evalOpParm(myExtrapolateEndTangents, nodeidx, "extrapolateendtangents", time, graph->isDirect()?nullptr:depnode);
631  myTransformByAttribs = true;
632  if (true)
633  graph->evalOpParm(myTransformByAttribs, nodeidx, "transformbyattribs", time, graph->isDirect()?nullptr:depnode);
634  myComputeUVs = false;
635  if (true)
636  graph->evalOpParm(myComputeUVs, nodeidx, "computeuvs", time, graph->isDirect()?nullptr:depnode);
637  myOverrideExistingUVs = false;
638  if (true && ( (true&&!(((getComputeUVs()==0)))) ) )
639  graph->evalOpParm(myOverrideExistingUVs, nodeidx, "overrideexistinguvs", time, graph->isDirect()?nullptr:depnode);
640  myLengthWeightedUVs = true;
641  if (true && ( (true&&!(((getComputeUVs()==0)))) ) )
642  graph->evalOpParm(myLengthWeightedUVs, nodeidx, "lengthweighteduvs", time, graph->isDirect()?nullptr:depnode);
643  myNormalizeU = true;
644  if (true && ( (true&&!(((getComputeUVs()==0))||((getLengthWeightedUVs()==0)))) ) )
645  graph->evalOpParm(myNormalizeU, nodeidx, "normalizeu", time, graph->isDirect()?nullptr:depnode);
646  myNormalizeV = false;
647  if (true && ( (true&&!(((getComputeUVs()==0))||((getLengthWeightedUVs()==0)))) ) )
648  graph->evalOpParm(myNormalizeV, nodeidx, "normalizev", time, graph->isDirect()?nullptr:depnode);
649  myFlipU = true;
650  if (true && ( (true&&!(((getComputeUVs()==0)))) ) )
651  graph->evalOpParm(myFlipU, nodeidx, "flipu", time, graph->isDirect()?nullptr:depnode);
652  myUVScale = UT_Vector2D(1,1);
653  if (true && ( (true&&!(((getComputeUVs()==0)))) ) )
654  graph->evalOpParm(myUVScale, nodeidx, "uvscale", time, graph->isDirect()?nullptr:depnode);
655  myUseMeshEdgeLengths = true;
656  if (true && ( (true&&!(((getComputeUVs()==0))||((getLengthWeightedUVs()==0)))) ) )
657  graph->evalOpParm(myUseMeshEdgeLengths, nodeidx, "usemeshedgelengths", time, graph->isDirect()?nullptr:depnode);
658  myPropScalePerCurve = true;
659  if (true && ( (true&&!(((getComputeUVs()==0))||((getLengthWeightedUVs()==0))||((getNormalizeU()!=1))||((getNormalizeV()!=0)))) ) )
660  graph->evalOpParm(myPropScalePerCurve, nodeidx, "propscalepercurve", time, graph->isDirect()?nullptr:depnode);
661  myWrapU = true;
662  if (true && ( (true&&!(((getComputeUVs()==0))||((getLengthWeightedUVs()==0))||((getNormalizeU()==1)))) ) )
663  graph->evalOpParm(myWrapU, nodeidx, "wrapu", time, graph->isDirect()?nullptr:depnode);
664  myWrapV = true;
665  if (true && ( (true&&!(((getComputeUVs()==0))||((getLengthWeightedUVs()==0))||((getNormalizeV()==1)))) ) )
666  graph->evalOpParm(myWrapV, nodeidx, "wrapv", time, graph->isDirect()?nullptr:depnode);
667  myAttribsFromBackbone = "* ^P ^N ^up ^pscale ^scale ^orient ^rot ^pivot ^trans ^transform"_UTsh;
668  if (true)
669  graph->evalOpParm(myAttribsFromBackbone, nodeidx, "attribsfrombackbone", time, graph->isDirect()?nullptr:depnode);
670  myAttribsFromCrossSection = "*"_UTsh;
671  if (true)
672  graph->evalOpParm(myAttribsFromCrossSection, nodeidx, "attribsfromcrosssection", time, graph->isDirect()?nullptr:depnode);
673  myAddPointRow = false;
674  if (true)
675  graph->evalOpParm(myAddPointRow, nodeidx, "addptrow", time, graph->isDirect()?nullptr:depnode);
676  myPtRowAttrib = "ptrow"_UTsh;
677  if (true && ( (true&&!(((getAddPointRow()==0)))) ) )
678  graph->evalOpParm(myPtRowAttrib, nodeidx, "ptrowattrib", time, graph->isDirect()?nullptr:depnode);
679  myAddPointCol = false;
680  if (true)
681  graph->evalOpParm(myAddPointCol, nodeidx, "addptcol", time, graph->isDirect()?nullptr:depnode);
682  myPtColAttrib = "ptcol"_UTsh;
683  if (true && ( (true&&!(((getAddPointCol()==0)))) ) )
684  graph->evalOpParm(myPtColAttrib, nodeidx, "ptcolattrib", time, graph->isDirect()?nullptr:depnode);
685  myAddPrimRow = false;
686  if (true)
687  graph->evalOpParm(myAddPrimRow, nodeidx, "addprimrow", time, graph->isDirect()?nullptr:depnode);
688  myPrimRowAttrib = "primrow"_UTsh;
689  if (true && ( (true&&!(((getAddPrimRow()==0)))) ) )
690  graph->evalOpParm(myPrimRowAttrib, nodeidx, "primrowattrib", time, graph->isDirect()?nullptr:depnode);
691  myAddPrimCol = false;
692  if (true)
693  graph->evalOpParm(myAddPrimCol, nodeidx, "addprimcol", time, graph->isDirect()?nullptr:depnode);
694  myPrimColAttrib = "primcol"_UTsh;
695  if (true && ( (true&&!(((getAddPrimCol()==0)))) ) )
696  graph->evalOpParm(myPrimColAttrib, nodeidx, "primcolattrib", time, graph->isDirect()?nullptr:depnode);
697  myAddCrossSectionNum = false;
698  if (true)
699  graph->evalOpParm(myAddCrossSectionNum, nodeidx, "addcrosssectionnum", time, graph->isDirect()?nullptr:depnode);
700  myCrossSectionNumAttrib = "crossnum"_UTsh;
701  if (true && ( (true&&!(((getAddCrossSectionNum()==0)))) ) )
702  graph->evalOpParm(myCrossSectionNumAttrib, nodeidx, "crosssectionnumattrib", time, graph->isDirect()?nullptr:depnode);
703  myAddCurveNum = false;
704  if (true)
705  graph->evalOpParm(myAddCurveNum, nodeidx, "addcurvenum", time, graph->isDirect()?nullptr:depnode);
706  myCurveNumAttrib = "curvenum"_UTsh;
707  if (true && ( (true&&!(((getAddCurveNum()==0)))) ) )
708  graph->evalOpParm(myCurveNumAttrib, nodeidx, "curvenumattrib", time, graph->isDirect()?nullptr:depnode);
709  myUpVectorType = 0;
710  if (true && ( (true&&!(((int64(getTangentType())==4)))) ) )
711  graph->evalOpParm(myUpVectorType, nodeidx, "upvectortype", time, graph->isDirect()?nullptr:depnode);
712  myUpVectorAtStart = true;
713  if (true && ( (true&&!(((int64(getTangentType())==4)))) ) )
714  graph->evalOpParm(myUpVectorAtStart, nodeidx, "upvectoratstart", time, graph->isDirect()?nullptr:depnode);
715  myUseEndUpVector = false;
716  if (true && ( (true&&!(((int64(getTangentType())==4))||((getUpVectorAtStart()==0)))) ) )
717  graph->evalOpParm(myUseEndUpVector, nodeidx, "useendupvector", time, graph->isDirect()?nullptr:depnode);
718  myUpVectorAttrib = "start_up"_UTsh;
719  if (true && ( (true&&!(((int64(getTangentType())==4))||((int64(getUpVectorType())!=4))||((int64(getTangentType())==4))||((int64(getUpVectorType())!=4)))) ) )
720  graph->evalOpParm(myUpVectorAttrib, nodeidx, "upvectorattrib", time, graph->isDirect()?nullptr:depnode);
721  myEndUpVectorAttrib = "end_up"_UTsh;
722  if (true && ( (true&&!(((int64(getTangentType())==4))||((int64(getUpVectorType())!=4))||((getUseEndUpVector()==0))||((getUpVectorAtStart()==0))||((int64(getTangentType())==4))||((int64(getUpVectorType())!=4))||((getUseEndUpVector()==0))||((getUpVectorAtStart()==0)))) ) )
723  graph->evalOpParm(myEndUpVectorAttrib, nodeidx, "endupvectorattrib", time, graph->isDirect()?nullptr:depnode);
724  myUpVector = UT_Vector3D(0,1,0);
725  if (true && ( (true&&!(((int64(getTangentType())==4))||((int64(getUpVectorType())!=5))||((int64(getTangentType())==4))||((int64(getUpVectorType())!=5)))) ) )
726  graph->evalOpParm(myUpVector, nodeidx, "upvector", time, graph->isDirect()?nullptr:depnode);
727  myEndUpVector = UT_Vector3D(0,1,0);
728  if (true && ( (true&&!(((int64(getTangentType())==4))||((int64(getUpVectorType())!=5))||((getUseEndUpVector()==0))||((getUpVectorAtStart()==0))||((int64(getTangentType())==4))||((int64(getUpVectorType())!=5))||((getUseEndUpVector()==0))||((getUpVectorAtStart()==0)))) ) )
729  graph->evalOpParm(myEndUpVector, nodeidx, "endupvector", time, graph->isDirect()?nullptr:depnode);
730 
731  }
732 
733 
734  void loadFromOpSubclass(const LoadParms &loadparms) override
735  {
736  buildFromOp(loadparms.graph(), loadparms.nodeIdx(), loadparms.context().getTime(), loadparms.depnode());
737  }
738 
739 
740  void copyFrom(const OP_NodeParms *src) override
741  {
742  *this = *((const SOP_Sweep_2_0Parms *)src);
743  }
744 
745  template <typename T>
746  void
747  doGetParmValue(TempIndex idx, TempIndex instance, T &value) const
748  {
749  if (idx.size() < 1)
750  return;
751  UT_ASSERT(idx.size() == instance.size()+1);
752  if (idx.size() != instance.size()+1)
753  return;
754  switch (idx[0])
755  {
756  case 0:
757  coerceValue(value, myCurveGroup);
758  break;
759  case 1:
760  coerceValue(value, myCrossSectionGroup);
761  break;
762  case 2:
763  coerceValue(value, mySurfaceShape);
764  break;
765  case 3:
766  coerceValue(value, mySurfaceType);
767  break;
768  case 4:
769  coerceValue(value, myScale);
770  break;
771  case 5:
772  coerceValue(value, myCols);
773  break;
774  case 6:
775  coerceValue(value, myRadius);
776  break;
777  case 7:
778  coerceValue(value, myWidth);
779  break;
780  case 8:
781  coerceValue(value, myReverseCrossSections);
782  break;
783  case 9:
784  coerceValue(value, myStretchAroundTurns);
785  break;
786  case 10:
787  coerceValue(value, myMaxStretchAroundTurns);
788  break;
789  case 11:
790  coerceValue(value, myEndCapType);
791  break;
792  case 12:
793  coerceValue(value, myCapDivs);
794  break;
795  case 13:
796  coerceValue(value, myTriangularPoles);
797  break;
798  case 14:
799  coerceValue(value, myCapScale);
800  break;
801  case 15:
802  coerceValue(value, myCapRoundness);
803  break;
804  case 16:
805  coerceValue(value, myAddEndCapsGroup);
806  break;
807  case 17:
808  coerceValue(value, myEndCapsGroup);
809  break;
810  case 18:
811  coerceValue(value, myApplyScale);
812  break;
813  case 19:
814  coerceValue(value, myScaleRamp);
815  break;
816  case 20:
817  coerceValue(value, myROrd);
818  break;
819  case 21:
820  coerceValue(value, myApplyRoll);
821  break;
822  case 22:
823  coerceValue(value, myRoll);
824  break;
825  case 23:
826  coerceValue(value, myFullTwists);
827  break;
828  case 24:
829  coerceValue(value, myIncRoll);
830  break;
831  case 25:
832  coerceValue(value, myRollPer);
833  break;
834  case 26:
835  coerceValue(value, myRollAttrib);
836  break;
837  case 27:
838  coerceValue(value, myApplyYaw);
839  break;
840  case 28:
841  coerceValue(value, myYaw);
842  break;
843  case 29:
844  coerceValue(value, myIncYaw);
845  break;
846  case 30:
847  coerceValue(value, myYawPer);
848  break;
849  case 31:
850  coerceValue(value, myYawAttrib);
851  break;
852  case 32:
853  coerceValue(value, myApplyPitch);
854  break;
855  case 33:
856  coerceValue(value, myPitch);
857  break;
858  case 34:
859  coerceValue(value, myIncPitch);
860  break;
861  case 35:
862  coerceValue(value, myPitchPer);
863  break;
864  case 36:
865  coerceValue(value, myPitchAttrib);
866  break;
867  case 37:
868  coerceValue(value, myCopyOrder);
869  break;
870  case 38:
871  coerceValue(value, myCrossSectionAttrib);
872  break;
873  case 39:
874  coerceValue(value, myPrimType);
875  break;
876  case 40:
877  coerceValue(value, myUnrollClosedRowCol);
878  break;
879  case 41:
880  coerceValue(value, mySwapRowCol);
881  break;
882  case 42:
883  coerceValue(value, myCloseIfNoCurveInput);
884  break;
885  case 43:
886  coerceValue(value, myTangentType);
887  break;
888  case 44:
889  coerceValue(value, myContinuousClosed);
890  break;
891  case 45:
892  coerceValue(value, myExtrapolateEndTangents);
893  break;
894  case 46:
895  coerceValue(value, myTransformByAttribs);
896  break;
897  case 47:
898  coerceValue(value, myComputeUVs);
899  break;
900  case 48:
901  coerceValue(value, myOverrideExistingUVs);
902  break;
903  case 49:
904  coerceValue(value, myLengthWeightedUVs);
905  break;
906  case 50:
907  coerceValue(value, myNormalizeU);
908  break;
909  case 51:
910  coerceValue(value, myNormalizeV);
911  break;
912  case 52:
913  coerceValue(value, myFlipU);
914  break;
915  case 53:
916  coerceValue(value, myUVScale);
917  break;
918  case 54:
919  coerceValue(value, myUseMeshEdgeLengths);
920  break;
921  case 55:
922  coerceValue(value, myPropScalePerCurve);
923  break;
924  case 56:
925  coerceValue(value, myWrapU);
926  break;
927  case 57:
928  coerceValue(value, myWrapV);
929  break;
930  case 58:
931  coerceValue(value, myAttribsFromBackbone);
932  break;
933  case 59:
934  coerceValue(value, myAttribsFromCrossSection);
935  break;
936  case 60:
937  coerceValue(value, myAddPointRow);
938  break;
939  case 61:
940  coerceValue(value, myPtRowAttrib);
941  break;
942  case 62:
943  coerceValue(value, myAddPointCol);
944  break;
945  case 63:
946  coerceValue(value, myPtColAttrib);
947  break;
948  case 64:
949  coerceValue(value, myAddPrimRow);
950  break;
951  case 65:
952  coerceValue(value, myPrimRowAttrib);
953  break;
954  case 66:
955  coerceValue(value, myAddPrimCol);
956  break;
957  case 67:
958  coerceValue(value, myPrimColAttrib);
959  break;
960  case 68:
961  coerceValue(value, myAddCrossSectionNum);
962  break;
963  case 69:
964  coerceValue(value, myCrossSectionNumAttrib);
965  break;
966  case 70:
967  coerceValue(value, myAddCurveNum);
968  break;
969  case 71:
970  coerceValue(value, myCurveNumAttrib);
971  break;
972  case 72:
973  coerceValue(value, myUpVectorType);
974  break;
975  case 73:
976  coerceValue(value, myUpVectorAtStart);
977  break;
978  case 74:
979  coerceValue(value, myUseEndUpVector);
980  break;
981  case 75:
982  coerceValue(value, myUpVectorAttrib);
983  break;
984  case 76:
985  coerceValue(value, myEndUpVectorAttrib);
986  break;
987  case 77:
988  coerceValue(value, myUpVector);
989  break;
990  case 78:
991  coerceValue(value, myEndUpVector);
992  break;
993 
994  }
995  }
996 
997  bool isParmColorRamp(exint idx) const override
998  {
999  switch (idx)
1000  {
1001 
1002  }
1003  return false;
1004  }
1005 
1006  void getNestParmValue(TempIndex idx, TempIndex instance, exint &value) const override
1007  { doGetParmValue(idx, instance, value); }
1008  void getNestParmValue(TempIndex idx, TempIndex instance, fpreal &value) const override
1009  { doGetParmValue(idx, instance, value); }
1010  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector2D &value) const override
1011  { doGetParmValue(idx, instance, value); }
1012  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector3D &value) const override
1013  { doGetParmValue(idx, instance, value); }
1014  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector4D &value) const override
1015  { doGetParmValue(idx, instance, value); }
1016  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix2D &value) const override
1017  { doGetParmValue(idx, instance, value); }
1018  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
1019  { doGetParmValue(idx, instance, value); }
1020  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix4D &value) const override
1021  { doGetParmValue(idx, instance, value); }
1022  void getNestParmValue(TempIndex idx, TempIndex instance, UT_StringHolder &value) const override
1023  { doGetParmValue(idx, instance, value); }
1024  void getNestParmValue(TempIndex idx, TempIndex instance, UT_SharedPtr<UT_Ramp> &value) const override
1025  { doGetParmValue(idx, instance, value); }
1026  void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
1027  { doGetParmValue(idx, instance, value); }
1028 
1029  template <typename T>
1030  void
1031  doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
1032  {
1033  if (idx.size() < 1)
1034  return;
1035  UT_ASSERT(idx.size() == instance.size()+1);
1036  if (idx.size() != instance.size()+1)
1037  return;
1038  switch (idx[0])
1039  {
1040  case 0:
1041  coerceValue(myCurveGroup, ( ( value ) ));
1042  break;
1043  case 1:
1044  coerceValue(myCrossSectionGroup, ( ( value ) ));
1045  break;
1046  case 2:
1047  coerceValue(mySurfaceShape, clampMinValue(0, clampMaxValue(3, value ) ));
1048  break;
1049  case 3:
1050  coerceValue(mySurfaceType, clampMinValue(0, clampMaxValue(7, value ) ));
1051  break;
1052  case 4:
1053  coerceValue(myScale, ( ( value ) ));
1054  break;
1055  case 5:
1056  coerceValue(myCols, clampMinValue(1, ( value ) ));
1057  break;
1058  case 6:
1059  coerceValue(myRadius, ( ( value ) ));
1060  break;
1061  case 7:
1062  coerceValue(myWidth, ( ( value ) ));
1063  break;
1064  case 8:
1065  coerceValue(myReverseCrossSections, ( ( value ) ));
1066  break;
1067  case 9:
1068  coerceValue(myStretchAroundTurns, ( ( value ) ));
1069  break;
1070  case 10:
1071  coerceValue(myMaxStretchAroundTurns, clampMinValue(1, ( value ) ));
1072  break;
1073  case 11:
1074  coerceValue(myEndCapType, clampMinValue(0, clampMaxValue(3, value ) ));
1075  break;
1076  case 12:
1077  coerceValue(myCapDivs, clampMinValue(1, ( value ) ));
1078  break;
1079  case 13:
1080  coerceValue(myTriangularPoles, ( ( value ) ));
1081  break;
1082  case 14:
1083  coerceValue(myCapScale, ( ( value ) ));
1084  break;
1085  case 15:
1086  coerceValue(myCapRoundness, ( ( value ) ));
1087  break;
1088  case 16:
1089  coerceValue(myAddEndCapsGroup, ( ( value ) ));
1090  break;
1091  case 17:
1092  coerceValue(myEndCapsGroup, ( ( value ) ));
1093  break;
1094  case 18:
1095  coerceValue(myApplyScale, ( ( value ) ));
1096  break;
1097  case 19:
1098  coerceValue(myScaleRamp, clampMinValue(0, ( value ) ));
1099  break;
1100  case 20:
1101  coerceValue(myROrd, clampMinValue(0, clampMaxValue(5, value ) ));
1102  break;
1103  case 21:
1104  coerceValue(myApplyRoll, ( ( value ) ));
1105  break;
1106  case 22:
1107  coerceValue(myRoll, ( ( value ) ));
1108  break;
1109  case 23:
1110  coerceValue(myFullTwists, ( ( value ) ));
1111  break;
1112  case 24:
1113  coerceValue(myIncRoll, ( ( value ) ));
1114  break;
1115  case 25:
1116  coerceValue(myRollPer, clampMinValue(0, clampMaxValue(4, value ) ));
1117  break;
1118  case 26:
1119  coerceValue(myRollAttrib, ( ( value ) ));
1120  break;
1121  case 27:
1122  coerceValue(myApplyYaw, ( ( value ) ));
1123  break;
1124  case 28:
1125  coerceValue(myYaw, ( ( value ) ));
1126  break;
1127  case 29:
1128  coerceValue(myIncYaw, ( ( value ) ));
1129  break;
1130  case 30:
1131  coerceValue(myYawPer, clampMinValue(0, clampMaxValue(4, value ) ));
1132  break;
1133  case 31:
1134  coerceValue(myYawAttrib, ( ( value ) ));
1135  break;
1136  case 32:
1137  coerceValue(myApplyPitch, ( ( value ) ));
1138  break;
1139  case 33:
1140  coerceValue(myPitch, ( ( value ) ));
1141  break;
1142  case 34:
1143  coerceValue(myIncPitch, ( ( value ) ));
1144  break;
1145  case 35:
1146  coerceValue(myPitchPer, clampMinValue(0, clampMaxValue(4, value ) ));
1147  break;
1148  case 36:
1149  coerceValue(myPitchAttrib, ( ( value ) ));
1150  break;
1151  case 37:
1152  coerceValue(myCopyOrder, clampMinValue(0, clampMaxValue(4, value ) ));
1153  break;
1154  case 38:
1155  coerceValue(myCrossSectionAttrib, ( ( value ) ));
1156  break;
1157  case 39:
1158  coerceValue(myPrimType, clampMinValue(0, clampMaxValue(5, value ) ));
1159  break;
1160  case 40:
1161  coerceValue(myUnrollClosedRowCol, ( ( value ) ));
1162  break;
1163  case 41:
1164  coerceValue(mySwapRowCol, ( ( value ) ));
1165  break;
1166  case 42:
1167  coerceValue(myCloseIfNoCurveInput, ( ( value ) ));
1168  break;
1169  case 43:
1170  coerceValue(myTangentType, clampMinValue(0, clampMaxValue(4, value ) ));
1171  break;
1172  case 44:
1173  coerceValue(myContinuousClosed, ( ( value ) ));
1174  break;
1175  case 45:
1176  coerceValue(myExtrapolateEndTangents, ( ( value ) ));
1177  break;
1178  case 46:
1179  coerceValue(myTransformByAttribs, ( ( value ) ));
1180  break;
1181  case 47:
1182  coerceValue(myComputeUVs, ( ( value ) ));
1183  break;
1184  case 48:
1185  coerceValue(myOverrideExistingUVs, ( ( value ) ));
1186  break;
1187  case 49:
1188  coerceValue(myLengthWeightedUVs, ( ( value ) ));
1189  break;
1190  case 50:
1191  coerceValue(myNormalizeU, ( ( value ) ));
1192  break;
1193  case 51:
1194  coerceValue(myNormalizeV, ( ( value ) ));
1195  break;
1196  case 52:
1197  coerceValue(myFlipU, ( ( value ) ));
1198  break;
1199  case 53:
1200  coerceValue(myUVScale, ( ( value ) ));
1201  break;
1202  case 54:
1203  coerceValue(myUseMeshEdgeLengths, ( ( value ) ));
1204  break;
1205  case 55:
1206  coerceValue(myPropScalePerCurve, ( ( value ) ));
1207  break;
1208  case 56:
1209  coerceValue(myWrapU, ( ( value ) ));
1210  break;
1211  case 57:
1212  coerceValue(myWrapV, ( ( value ) ));
1213  break;
1214  case 58:
1215  coerceValue(myAttribsFromBackbone, ( ( value ) ));
1216  break;
1217  case 59:
1218  coerceValue(myAttribsFromCrossSection, ( ( value ) ));
1219  break;
1220  case 60:
1221  coerceValue(myAddPointRow, ( ( value ) ));
1222  break;
1223  case 61:
1224  coerceValue(myPtRowAttrib, ( ( value ) ));
1225  break;
1226  case 62:
1227  coerceValue(myAddPointCol, ( ( value ) ));
1228  break;
1229  case 63:
1230  coerceValue(myPtColAttrib, ( ( value ) ));
1231  break;
1232  case 64:
1233  coerceValue(myAddPrimRow, ( ( value ) ));
1234  break;
1235  case 65:
1236  coerceValue(myPrimRowAttrib, ( ( value ) ));
1237  break;
1238  case 66:
1239  coerceValue(myAddPrimCol, ( ( value ) ));
1240  break;
1241  case 67:
1242  coerceValue(myPrimColAttrib, ( ( value ) ));
1243  break;
1244  case 68:
1245  coerceValue(myAddCrossSectionNum, ( ( value ) ));
1246  break;
1247  case 69:
1248  coerceValue(myCrossSectionNumAttrib, ( ( value ) ));
1249  break;
1250  case 70:
1251  coerceValue(myAddCurveNum, ( ( value ) ));
1252  break;
1253  case 71:
1254  coerceValue(myCurveNumAttrib, ( ( value ) ));
1255  break;
1256  case 72:
1257  coerceValue(myUpVectorType, clampMinValue(0, clampMaxValue(5, value ) ));
1258  break;
1259  case 73:
1260  coerceValue(myUpVectorAtStart, ( ( value ) ));
1261  break;
1262  case 74:
1263  coerceValue(myUseEndUpVector, ( ( value ) ));
1264  break;
1265  case 75:
1266  coerceValue(myUpVectorAttrib, ( ( value ) ));
1267  break;
1268  case 76:
1269  coerceValue(myEndUpVectorAttrib, ( ( value ) ));
1270  break;
1271  case 77:
1272  coerceValue(myUpVector, ( ( value ) ));
1273  break;
1274  case 78:
1275  coerceValue(myEndUpVector, ( ( value ) ));
1276  break;
1277 
1278  }
1279  }
1280 
1281  void setNestParmValue(TempIndex idx, TempIndex instance, const exint &value) override
1282  { doSetParmValue(idx, instance, value); }
1283  void setNestParmValue(TempIndex idx, TempIndex instance, const fpreal &value) override
1284  { doSetParmValue(idx, instance, value); }
1285  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector2D &value) override
1286  { doSetParmValue(idx, instance, value); }
1287  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector3D &value) override
1288  { doSetParmValue(idx, instance, value); }
1289  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector4D &value) override
1290  { doSetParmValue(idx, instance, value); }
1291  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix2D &value) override
1292  { doSetParmValue(idx, instance, value); }
1293  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix3D &value) override
1294  { doSetParmValue(idx, instance, value); }
1295  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix4D &value) override
1296  { doSetParmValue(idx, instance, value); }
1297  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_StringHolder &value) override
1298  { doSetParmValue(idx, instance, value); }
1299  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_SharedPtr<UT_Ramp> &value) override
1300  { doSetParmValue(idx, instance, value); }
1301  void setNestParmValue(TempIndex idx, TempIndex instance, const PRM_DataItemHandle &value) override
1302  { doSetParmValue(idx, instance, value); }
1303 
1304  exint getNestNumParms(TempIndex idx) const override
1305  {
1306  if (idx.size() == 0)
1307  return 79;
1308  switch (idx[0])
1309  {
1310 
1311  }
1312  // Invalid
1313  return 0;
1314  }
1315 
1316  const char *getNestParmName(TempIndex fieldnum) const override
1317  {
1318  if (fieldnum.size() < 1)
1319  return 0;
1320  switch (fieldnum[0])
1321  {
1322  case 0:
1323  return "curvegroup";
1324  case 1:
1325  return "crosssectiongroup";
1326  case 2:
1327  return "surfaceshape";
1328  case 3:
1329  return "surfacetype";
1330  case 4:
1331  return "scale";
1332  case 5:
1333  return "cols";
1334  case 6:
1335  return "radius";
1336  case 7:
1337  return "width";
1338  case 8:
1339  return "reversecrosssections";
1340  case 9:
1341  return "stretcharoundturns";
1342  case 10:
1343  return "maxstretcharoundturns";
1344  case 11:
1345  return "endcaptype";
1346  case 12:
1347  return "capdivs";
1348  case 13:
1349  return "triangularpoles";
1350  case 14:
1351  return "capscale";
1352  case 15:
1353  return "caproundness";
1354  case 16:
1355  return "addendcapsgroup";
1356  case 17:
1357  return "endcapsgroup";
1358  case 18:
1359  return "applyscale";
1360  case 19:
1361  return "scaleramp";
1362  case 20:
1363  return "rOrd";
1364  case 21:
1365  return "applyroll";
1366  case 22:
1367  return "roll";
1368  case 23:
1369  return "fulltwists";
1370  case 24:
1371  return "incroll";
1372  case 25:
1373  return "rollper";
1374  case 26:
1375  return "rollattrib";
1376  case 27:
1377  return "applyyaw";
1378  case 28:
1379  return "yaw";
1380  case 29:
1381  return "incyaw";
1382  case 30:
1383  return "yawper";
1384  case 31:
1385  return "yawattrib";
1386  case 32:
1387  return "applypitch";
1388  case 33:
1389  return "pitch";
1390  case 34:
1391  return "incpitch";
1392  case 35:
1393  return "pitchper";
1394  case 36:
1395  return "pitchattrib";
1396  case 37:
1397  return "copyorder";
1398  case 38:
1399  return "crosssectionattrib";
1400  case 39:
1401  return "primtype";
1402  case 40:
1403  return "unrollclosedrowcol";
1404  case 41:
1405  return "swaprowcol";
1406  case 42:
1407  return "closeifnocurveinput";
1408  case 43:
1409  return "tangenttype";
1410  case 44:
1411  return "continuousclosed";
1412  case 45:
1413  return "extrapolateendtangents";
1414  case 46:
1415  return "transformbyattribs";
1416  case 47:
1417  return "computeuvs";
1418  case 48:
1419  return "overrideexistinguvs";
1420  case 49:
1421  return "lengthweighteduvs";
1422  case 50:
1423  return "normalizeu";
1424  case 51:
1425  return "normalizev";
1426  case 52:
1427  return "flipu";
1428  case 53:
1429  return "uvscale";
1430  case 54:
1431  return "usemeshedgelengths";
1432  case 55:
1433  return "propscalepercurve";
1434  case 56:
1435  return "wrapu";
1436  case 57:
1437  return "wrapv";
1438  case 58:
1439  return "attribsfrombackbone";
1440  case 59:
1441  return "attribsfromcrosssection";
1442  case 60:
1443  return "addptrow";
1444  case 61:
1445  return "ptrowattrib";
1446  case 62:
1447  return "addptcol";
1448  case 63:
1449  return "ptcolattrib";
1450  case 64:
1451  return "addprimrow";
1452  case 65:
1453  return "primrowattrib";
1454  case 66:
1455  return "addprimcol";
1456  case 67:
1457  return "primcolattrib";
1458  case 68:
1459  return "addcrosssectionnum";
1460  case 69:
1461  return "crosssectionnumattrib";
1462  case 70:
1463  return "addcurvenum";
1464  case 71:
1465  return "curvenumattrib";
1466  case 72:
1467  return "upvectortype";
1468  case 73:
1469  return "upvectoratstart";
1470  case 74:
1471  return "useendupvector";
1472  case 75:
1473  return "upvectorattrib";
1474  case 76:
1475  return "endupvectorattrib";
1476  case 77:
1477  return "upvector";
1478  case 78:
1479  return "endupvector";
1480 
1481  }
1482  return 0;
1483  }
1484 
1485  ParmType getNestParmType(TempIndex fieldnum) const override
1486  {
1487  if (fieldnum.size() < 1)
1488  return PARM_UNSUPPORTED;
1489  switch (fieldnum[0])
1490  {
1491  case 0:
1492  return PARM_STRING;
1493  case 1:
1494  return PARM_STRING;
1495  case 2:
1496  return PARM_INTEGER;
1497  case 3:
1498  return PARM_INTEGER;
1499  case 4:
1500  return PARM_FLOAT;
1501  case 5:
1502  return PARM_INTEGER;
1503  case 6:
1504  return PARM_FLOAT;
1505  case 7:
1506  return PARM_FLOAT;
1507  case 8:
1508  return PARM_INTEGER;
1509  case 9:
1510  return PARM_INTEGER;
1511  case 10:
1512  return PARM_FLOAT;
1513  case 11:
1514  return PARM_INTEGER;
1515  case 12:
1516  return PARM_INTEGER;
1517  case 13:
1518  return PARM_INTEGER;
1519  case 14:
1520  return PARM_FLOAT;
1521  case 15:
1522  return PARM_FLOAT;
1523  case 16:
1524  return PARM_INTEGER;
1525  case 17:
1526  return PARM_STRING;
1527  case 18:
1528  return PARM_INTEGER;
1529  case 19:
1530  return PARM_RAMP;
1531  case 20:
1532  return PARM_INTEGER;
1533  case 21:
1534  return PARM_INTEGER;
1535  case 22:
1536  return PARM_FLOAT;
1537  case 23:
1538  return PARM_INTEGER;
1539  case 24:
1540  return PARM_FLOAT;
1541  case 25:
1542  return PARM_INTEGER;
1543  case 26:
1544  return PARM_STRING;
1545  case 27:
1546  return PARM_INTEGER;
1547  case 28:
1548  return PARM_FLOAT;
1549  case 29:
1550  return PARM_FLOAT;
1551  case 30:
1552  return PARM_INTEGER;
1553  case 31:
1554  return PARM_STRING;
1555  case 32:
1556  return PARM_INTEGER;
1557  case 33:
1558  return PARM_FLOAT;
1559  case 34:
1560  return PARM_FLOAT;
1561  case 35:
1562  return PARM_INTEGER;
1563  case 36:
1564  return PARM_STRING;
1565  case 37:
1566  return PARM_INTEGER;
1567  case 38:
1568  return PARM_STRING;
1569  case 39:
1570  return PARM_INTEGER;
1571  case 40:
1572  return PARM_INTEGER;
1573  case 41:
1574  return PARM_INTEGER;
1575  case 42:
1576  return PARM_INTEGER;
1577  case 43:
1578  return PARM_INTEGER;
1579  case 44:
1580  return PARM_INTEGER;
1581  case 45:
1582  return PARM_INTEGER;
1583  case 46:
1584  return PARM_INTEGER;
1585  case 47:
1586  return PARM_INTEGER;
1587  case 48:
1588  return PARM_INTEGER;
1589  case 49:
1590  return PARM_INTEGER;
1591  case 50:
1592  return PARM_INTEGER;
1593  case 51:
1594  return PARM_INTEGER;
1595  case 52:
1596  return PARM_INTEGER;
1597  case 53:
1598  return PARM_VECTOR2;
1599  case 54:
1600  return PARM_INTEGER;
1601  case 55:
1602  return PARM_INTEGER;
1603  case 56:
1604  return PARM_INTEGER;
1605  case 57:
1606  return PARM_INTEGER;
1607  case 58:
1608  return PARM_STRING;
1609  case 59:
1610  return PARM_STRING;
1611  case 60:
1612  return PARM_INTEGER;
1613  case 61:
1614  return PARM_STRING;
1615  case 62:
1616  return PARM_INTEGER;
1617  case 63:
1618  return PARM_STRING;
1619  case 64:
1620  return PARM_INTEGER;
1621  case 65:
1622  return PARM_STRING;
1623  case 66:
1624  return PARM_INTEGER;
1625  case 67:
1626  return PARM_STRING;
1627  case 68:
1628  return PARM_INTEGER;
1629  case 69:
1630  return PARM_STRING;
1631  case 70:
1632  return PARM_INTEGER;
1633  case 71:
1634  return PARM_STRING;
1635  case 72:
1636  return PARM_INTEGER;
1637  case 73:
1638  return PARM_INTEGER;
1639  case 74:
1640  return PARM_INTEGER;
1641  case 75:
1642  return PARM_STRING;
1643  case 76:
1644  return PARM_STRING;
1645  case 77:
1646  return PARM_VECTOR3;
1647  case 78:
1648  return PARM_VECTOR3;
1649 
1650  }
1651  return PARM_UNSUPPORTED;
1652  }
1653 
1654  // Boiler plate to load individual types.
1655  static void loadData(UT_IStream &is, int64 &v)
1656  { is.bread(&v, 1); }
1657  static void loadData(UT_IStream &is, bool &v)
1658  { int64 iv; is.bread(&iv, 1); v = iv; }
1659  static void loadData(UT_IStream &is, fpreal64 &v)
1660  { is.bread<fpreal64>(&v, 1); }
1661  static void loadData(UT_IStream &is, UT_Vector2D &v)
1662  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1); }
1663  static void loadData(UT_IStream &is, UT_Vector3D &v)
1664  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
1665  is.bread<fpreal64>(&v.z(), 1); }
1666  static void loadData(UT_IStream &is, UT_Vector4D &v)
1667  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
1668  is.bread<fpreal64>(&v.z(), 1); is.bread<fpreal64>(&v.w(), 1); }
1669  static void loadData(UT_IStream &is, UT_Matrix2D &v)
1670  { for (int r = 0; r < 2; r++) for (int c = 0; c < 2; c++) is.bread<fpreal64>(&v(r, c), 1); }
1671  static void loadData(UT_IStream &is, UT_Matrix3D &v)
1672  { for (int r = 0; r < 3; r++) for (int c = 0; c < 3; c++) is.bread<fpreal64>(&v(r, c), 1); }
1673  static void loadData(UT_IStream &is, UT_Matrix4D &v)
1674  { for (int r = 0; r < 4; r++) for (int c = 0; c < 4; c++) is.bread<fpreal64>(&v(r, c), 1); }
1675  static void loadData(UT_IStream &is, UT_Vector2I &v)
1676  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1); }
1677  static void loadData(UT_IStream &is, UT_Vector3I &v)
1678  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
1679  is.bread<int64>(&v.z(), 1); }
1680  static void loadData(UT_IStream &is, UT_Vector4I &v)
1681  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
1682  is.bread<int64>(&v.z(), 1); is.bread<int64>(&v.w(), 1); }
1684  { is.bread(v); }
1686  { UT_StringHolder rampdata;
1687  loadData(is, rampdata);
1688  if (rampdata.isstring())
1689  {
1690  v.reset(new UT_Ramp());
1691  UT_IStream istr((const char *) rampdata, rampdata.length(), UT_ISTREAM_ASCII);
1692  v->load(istr);
1693  }
1694  else v.reset();
1695  }
1698  loadData(is, data);
1699  if (data.isstring())
1700  {
1701  // Find the data type.
1702  const char *colon = UT_StringWrap(data).findChar(':');
1703  if (colon)
1704  {
1705  int typelen = colon - data.buffer();
1707  type.strncpy(data.buffer(), typelen);
1708  UT_IStream istr(((const char *) data) + typelen + 1, data.length() - (typelen + 1), UT_ISTREAM_BINARY);
1709 
1710  v = PRM_DataFactory::parseBinary(type.buffer(), istr);
1711  }
1712  }
1713  else v.reset();
1714  }
1715 
1716  static void saveData(std::ostream &os, int64 v)
1717  { UTwrite(os, &v); }
1718  static void saveData(std::ostream &os, bool v)
1719  { int64 iv = v; UTwrite(os, &iv); }
1720  static void saveData(std::ostream &os, fpreal64 v)
1721  { UTwrite<fpreal64>(os, &v); }
1722  static void saveData(std::ostream &os, UT_Vector2D v)
1723  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y()); }
1724  static void saveData(std::ostream &os, UT_Vector3D v)
1725  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
1726  UTwrite<fpreal64>(os, &v.z()); }
1727  static void saveData(std::ostream &os, UT_Vector4D v)
1728  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
1729  UTwrite<fpreal64>(os, &v.z()); UTwrite<fpreal64>(os, &v.w()); }
1730  static void saveData(std::ostream &os, UT_Matrix2D v)
1732  static void saveData(std::ostream &os, UT_Matrix3D v)
1734  static void saveData(std::ostream &os, UT_Matrix4D v)
1736  static void saveData(std::ostream &os, UT_StringHolder s)
1737  { UT_StringWrap(s).saveBinary(os); }
1738  static void saveData(std::ostream &os, UT_SharedPtr<UT_Ramp> s)
1740  UT_OStringStream ostr;
1741  if (s) s->save(ostr);
1742  result = ostr.str();
1743  saveData(os, result);
1744  }
1745  static void saveData(std::ostream &os, PRM_DataItemHandle s)
1747  UT_OStringStream ostr;
1748  if (s)
1749  {
1750  ostr << s->getDataTypeToken();
1751  ostr << ":";
1752  s->saveBinary(ostr);
1753  }
1754  result = ostr.str();
1755  saveData(os, result);
1756  }
1757 
1758 
1759  void save(std::ostream &os) const
1760  {
1761  int32 v = version();
1762  UTwrite(os, &v);
1763  saveData(os, myCurveGroup);
1764  saveData(os, myCrossSectionGroup);
1765  saveData(os, mySurfaceShape);
1766  saveData(os, mySurfaceType);
1767  saveData(os, myScale);
1768  saveData(os, myCols);
1769  saveData(os, myRadius);
1770  saveData(os, myWidth);
1771  saveData(os, myReverseCrossSections);
1772  saveData(os, myStretchAroundTurns);
1773  saveData(os, myMaxStretchAroundTurns);
1774  saveData(os, myEndCapType);
1775  saveData(os, myCapDivs);
1776  saveData(os, myTriangularPoles);
1777  saveData(os, myCapScale);
1778  saveData(os, myCapRoundness);
1779  saveData(os, myAddEndCapsGroup);
1780  saveData(os, myEndCapsGroup);
1781  saveData(os, myApplyScale);
1782  saveData(os, myScaleRamp);
1783  saveData(os, myROrd);
1784  saveData(os, myApplyRoll);
1785  saveData(os, myRoll);
1786  saveData(os, myFullTwists);
1787  saveData(os, myIncRoll);
1788  saveData(os, myRollPer);
1789  saveData(os, myRollAttrib);
1790  saveData(os, myApplyYaw);
1791  saveData(os, myYaw);
1792  saveData(os, myIncYaw);
1793  saveData(os, myYawPer);
1794  saveData(os, myYawAttrib);
1795  saveData(os, myApplyPitch);
1796  saveData(os, myPitch);
1797  saveData(os, myIncPitch);
1798  saveData(os, myPitchPer);
1799  saveData(os, myPitchAttrib);
1800  saveData(os, myCopyOrder);
1801  saveData(os, myCrossSectionAttrib);
1802  saveData(os, myPrimType);
1803  saveData(os, myUnrollClosedRowCol);
1804  saveData(os, mySwapRowCol);
1805  saveData(os, myCloseIfNoCurveInput);
1806  saveData(os, myTangentType);
1807  saveData(os, myContinuousClosed);
1808  saveData(os, myExtrapolateEndTangents);
1809  saveData(os, myTransformByAttribs);
1810  saveData(os, myComputeUVs);
1811  saveData(os, myOverrideExistingUVs);
1812  saveData(os, myLengthWeightedUVs);
1813  saveData(os, myNormalizeU);
1814  saveData(os, myNormalizeV);
1815  saveData(os, myFlipU);
1816  saveData(os, myUVScale);
1817  saveData(os, myUseMeshEdgeLengths);
1818  saveData(os, myPropScalePerCurve);
1819  saveData(os, myWrapU);
1820  saveData(os, myWrapV);
1821  saveData(os, myAttribsFromBackbone);
1822  saveData(os, myAttribsFromCrossSection);
1823  saveData(os, myAddPointRow);
1824  saveData(os, myPtRowAttrib);
1825  saveData(os, myAddPointCol);
1826  saveData(os, myPtColAttrib);
1827  saveData(os, myAddPrimRow);
1828  saveData(os, myPrimRowAttrib);
1829  saveData(os, myAddPrimCol);
1830  saveData(os, myPrimColAttrib);
1831  saveData(os, myAddCrossSectionNum);
1832  saveData(os, myCrossSectionNumAttrib);
1833  saveData(os, myAddCurveNum);
1834  saveData(os, myCurveNumAttrib);
1835  saveData(os, myUpVectorType);
1836  saveData(os, myUpVectorAtStart);
1837  saveData(os, myUseEndUpVector);
1838  saveData(os, myUpVectorAttrib);
1839  saveData(os, myEndUpVectorAttrib);
1840  saveData(os, myUpVector);
1841  saveData(os, myEndUpVector);
1842 
1843  }
1844 
1845  bool load(UT_IStream &is)
1846  {
1847  int32 v;
1848  is.bread(&v, 1);
1849  if (version() != v)
1850  {
1851  // Fail incompatible versions
1852  return false;
1853  }
1854  loadData(is, myCurveGroup);
1855  loadData(is, myCrossSectionGroup);
1856  loadData(is, mySurfaceShape);
1857  loadData(is, mySurfaceType);
1858  loadData(is, myScale);
1859  loadData(is, myCols);
1860  loadData(is, myRadius);
1861  loadData(is, myWidth);
1862  loadData(is, myReverseCrossSections);
1863  loadData(is, myStretchAroundTurns);
1864  loadData(is, myMaxStretchAroundTurns);
1865  loadData(is, myEndCapType);
1866  loadData(is, myCapDivs);
1867  loadData(is, myTriangularPoles);
1868  loadData(is, myCapScale);
1869  loadData(is, myCapRoundness);
1870  loadData(is, myAddEndCapsGroup);
1871  loadData(is, myEndCapsGroup);
1872  loadData(is, myApplyScale);
1873  loadData(is, myScaleRamp);
1874  loadData(is, myROrd);
1875  loadData(is, myApplyRoll);
1876  loadData(is, myRoll);
1877  loadData(is, myFullTwists);
1878  loadData(is, myIncRoll);
1879  loadData(is, myRollPer);
1880  loadData(is, myRollAttrib);
1881  loadData(is, myApplyYaw);
1882  loadData(is, myYaw);
1883  loadData(is, myIncYaw);
1884  loadData(is, myYawPer);
1885  loadData(is, myYawAttrib);
1886  loadData(is, myApplyPitch);
1887  loadData(is, myPitch);
1888  loadData(is, myIncPitch);
1889  loadData(is, myPitchPer);
1890  loadData(is, myPitchAttrib);
1891  loadData(is, myCopyOrder);
1892  loadData(is, myCrossSectionAttrib);
1893  loadData(is, myPrimType);
1894  loadData(is, myUnrollClosedRowCol);
1895  loadData(is, mySwapRowCol);
1896  loadData(is, myCloseIfNoCurveInput);
1897  loadData(is, myTangentType);
1898  loadData(is, myContinuousClosed);
1899  loadData(is, myExtrapolateEndTangents);
1900  loadData(is, myTransformByAttribs);
1901  loadData(is, myComputeUVs);
1902  loadData(is, myOverrideExistingUVs);
1903  loadData(is, myLengthWeightedUVs);
1904  loadData(is, myNormalizeU);
1905  loadData(is, myNormalizeV);
1906  loadData(is, myFlipU);
1907  loadData(is, myUVScale);
1908  loadData(is, myUseMeshEdgeLengths);
1909  loadData(is, myPropScalePerCurve);
1910  loadData(is, myWrapU);
1911  loadData(is, myWrapV);
1912  loadData(is, myAttribsFromBackbone);
1913  loadData(is, myAttribsFromCrossSection);
1914  loadData(is, myAddPointRow);
1915  loadData(is, myPtRowAttrib);
1916  loadData(is, myAddPointCol);
1917  loadData(is, myPtColAttrib);
1918  loadData(is, myAddPrimRow);
1919  loadData(is, myPrimRowAttrib);
1920  loadData(is, myAddPrimCol);
1921  loadData(is, myPrimColAttrib);
1922  loadData(is, myAddCrossSectionNum);
1923  loadData(is, myCrossSectionNumAttrib);
1924  loadData(is, myAddCurveNum);
1925  loadData(is, myCurveNumAttrib);
1926  loadData(is, myUpVectorType);
1927  loadData(is, myUpVectorAtStart);
1928  loadData(is, myUseEndUpVector);
1929  loadData(is, myUpVectorAttrib);
1930  loadData(is, myEndUpVectorAttrib);
1931  loadData(is, myUpVector);
1932  loadData(is, myEndUpVector);
1933 
1934  return true;
1935  }
1936 
1937  const UT_StringHolder & getCurveGroup() const { return myCurveGroup; }
1938  void setCurveGroup(const UT_StringHolder & val) { myCurveGroup = val; }
1940  {
1941  SOP_Node *thissop = cookparms.getNode();
1942  if (!thissop) return getCurveGroup();
1944  OP_Utils::evalOpParm(result, thissop, "curvegroup", cookparms.getCookTime(), 0);
1945  return result;
1946  }
1947  const UT_StringHolder & getCrossSectionGroup() const { return myCrossSectionGroup; }
1948  void setCrossSectionGroup(const UT_StringHolder & val) { myCrossSectionGroup = val; }
1950  {
1951  SOP_Node *thissop = cookparms.getNode();
1952  if (!thissop) return getCrossSectionGroup();
1954  OP_Utils::evalOpParm(result, thissop, "crosssectiongroup", cookparms.getCookTime(), 0);
1955  return result;
1956  }
1957  SurfaceShape getSurfaceShape() const { return SurfaceShape(mySurfaceShape); }
1958  void setSurfaceShape(SurfaceShape val) { mySurfaceShape = int64(val); }
1960  {
1961  SOP_Node *thissop = cookparms.getNode();
1962  if (!thissop) return getSurfaceShape();
1963  int64 result;
1964  OP_Utils::evalOpParm(result, thissop, "surfaceshape", cookparms.getCookTime(), 0);
1965  return SurfaceShape(result);
1966  }
1967  SurfaceType getSurfaceType() const { return SurfaceType(mySurfaceType); }
1968  void setSurfaceType(SurfaceType val) { mySurfaceType = int64(val); }
1970  {
1971  SOP_Node *thissop = cookparms.getNode();
1972  if (!thissop) return getSurfaceType();
1973  int64 result;
1974  OP_Utils::evalOpParm(result, thissop, "surfacetype", cookparms.getCookTime(), 0);
1975  return SurfaceType(result);
1976  }
1977  fpreal64 getScale() const { return myScale; }
1978  void setScale(fpreal64 val) { myScale = val; }
1979  fpreal64 opScale(const SOP_NodeVerb::CookParms &cookparms) const
1980  {
1981  SOP_Node *thissop = cookparms.getNode();
1982  if (!thissop) return getScale();
1983  fpreal64 result;
1984  OP_Utils::evalOpParm(result, thissop, "scale", cookparms.getCookTime(), 0);
1985  return result;
1986  }
1987  int64 getCols() const { return myCols; }
1988  void setCols(int64 val) { myCols = val; }
1989  int64 opCols(const SOP_NodeVerb::CookParms &cookparms) const
1990  {
1991  SOP_Node *thissop = cookparms.getNode();
1992  if (!thissop) return getCols();
1993  int64 result;
1994  OP_Utils::evalOpParm(result, thissop, "cols", cookparms.getCookTime(), 0);
1995  return result;
1996  }
1997  fpreal64 getRadius() const { return myRadius; }
1998  void setRadius(fpreal64 val) { myRadius = val; }
2000  {
2001  SOP_Node *thissop = cookparms.getNode();
2002  if (!thissop) return getRadius();
2003  fpreal64 result;
2004  OP_Utils::evalOpParm(result, thissop, "radius", cookparms.getCookTime(), 0);
2005  return result;
2006  }
2007  fpreal64 getWidth() const { return myWidth; }
2008  void setWidth(fpreal64 val) { myWidth = val; }
2009  fpreal64 opWidth(const SOP_NodeVerb::CookParms &cookparms) const
2010  {
2011  SOP_Node *thissop = cookparms.getNode();
2012  if (!thissop) return getWidth();
2013  fpreal64 result;
2014  OP_Utils::evalOpParm(result, thissop, "width", cookparms.getCookTime(), 0);
2015  return result;
2016  }
2017  bool getReverseCrossSections() const { return myReverseCrossSections; }
2018  void setReverseCrossSections(bool val) { myReverseCrossSections = val; }
2020  {
2021  SOP_Node *thissop = cookparms.getNode();
2022  if (!thissop) return getReverseCrossSections();
2023  bool result;
2024  OP_Utils::evalOpParm(result, thissop, "reversecrosssections", cookparms.getCookTime(), 0);
2025  return result;
2026  }
2027  bool getStretchAroundTurns() const { return myStretchAroundTurns; }
2028  void setStretchAroundTurns(bool val) { myStretchAroundTurns = val; }
2029  bool opStretchAroundTurns(const SOP_NodeVerb::CookParms &cookparms) const
2030  {
2031  SOP_Node *thissop = cookparms.getNode();
2032  if (!thissop) return getStretchAroundTurns();
2033  bool result;
2034  OP_Utils::evalOpParm(result, thissop, "stretcharoundturns", cookparms.getCookTime(), 0);
2035  return result;
2036  }
2037  fpreal64 getMaxStretchAroundTurns() const { return myMaxStretchAroundTurns; }
2038  void setMaxStretchAroundTurns(fpreal64 val) { myMaxStretchAroundTurns = val; }
2040  {
2041  SOP_Node *thissop = cookparms.getNode();
2042  if (!thissop) return getMaxStretchAroundTurns();
2043  fpreal64 result;
2044  OP_Utils::evalOpParm(result, thissop, "maxstretcharoundturns", cookparms.getCookTime(), 0);
2045  return result;
2046  }
2047  EndCapType getEndCapType() const { return EndCapType(myEndCapType); }
2048  void setEndCapType(EndCapType val) { myEndCapType = int64(val); }
2050  {
2051  SOP_Node *thissop = cookparms.getNode();
2052  if (!thissop) return getEndCapType();
2053  int64 result;
2054  OP_Utils::evalOpParm(result, thissop, "endcaptype", cookparms.getCookTime(), 0);
2055  return EndCapType(result);
2056  }
2057  int64 getCapDivs() const { return myCapDivs; }
2058  void setCapDivs(int64 val) { myCapDivs = val; }
2059  int64 opCapDivs(const SOP_NodeVerb::CookParms &cookparms) const
2060  {
2061  SOP_Node *thissop = cookparms.getNode();
2062  if (!thissop) return getCapDivs();
2063  int64 result;
2064  OP_Utils::evalOpParm(result, thissop, "capdivs", cookparms.getCookTime(), 0);
2065  return result;
2066  }
2067  bool getTriangularPoles() const { return myTriangularPoles; }
2068  void setTriangularPoles(bool val) { myTriangularPoles = val; }
2069  bool opTriangularPoles(const SOP_NodeVerb::CookParms &cookparms) const
2070  {
2071  SOP_Node *thissop = cookparms.getNode();
2072  if (!thissop) return getTriangularPoles();
2073  bool result;
2074  OP_Utils::evalOpParm(result, thissop, "triangularpoles", cookparms.getCookTime(), 0);
2075  return result;
2076  }
2077  fpreal64 getCapScale() const { return myCapScale; }
2078  void setCapScale(fpreal64 val) { myCapScale = val; }
2080  {
2081  SOP_Node *thissop = cookparms.getNode();
2082  if (!thissop) return getCapScale();
2083  fpreal64 result;
2084  OP_Utils::evalOpParm(result, thissop, "capscale", cookparms.getCookTime(), 0);
2085  return result;
2086  }
2087  fpreal64 getCapRoundness() const { return myCapRoundness; }
2088  void setCapRoundness(fpreal64 val) { myCapRoundness = val; }
2090  {
2091  SOP_Node *thissop = cookparms.getNode();
2092  if (!thissop) return getCapRoundness();
2093  fpreal64 result;
2094  OP_Utils::evalOpParm(result, thissop, "caproundness", cookparms.getCookTime(), 0);
2095  return result;
2096  }
2097  bool getAddEndCapsGroup() const { return myAddEndCapsGroup; }
2098  void setAddEndCapsGroup(bool val) { myAddEndCapsGroup = val; }
2099  bool opAddEndCapsGroup(const SOP_NodeVerb::CookParms &cookparms) const
2100  {
2101  SOP_Node *thissop = cookparms.getNode();
2102  if (!thissop) return getAddEndCapsGroup();
2103  bool result;
2104  OP_Utils::evalOpParm(result, thissop, "addendcapsgroup", cookparms.getCookTime(), 0);
2105  return result;
2106  }
2107  const UT_StringHolder & getEndCapsGroup() const { return myEndCapsGroup; }
2108  void setEndCapsGroup(const UT_StringHolder & val) { myEndCapsGroup = val; }
2110  {
2111  SOP_Node *thissop = cookparms.getNode();
2112  if (!thissop) return getEndCapsGroup();
2114  OP_Utils::evalOpParm(result, thissop, "endcapsgroup", cookparms.getCookTime(), 0);
2115  return result;
2116  }
2117  bool getApplyScale() const { return myApplyScale; }
2118  void setApplyScale(bool val) { myApplyScale = val; }
2119  bool opApplyScale(const SOP_NodeVerb::CookParms &cookparms) const
2120  {
2121  SOP_Node *thissop = cookparms.getNode();
2122  if (!thissop) return getApplyScale();
2123  bool result;
2124  OP_Utils::evalOpParm(result, thissop, "applyscale", cookparms.getCookTime(), 0);
2125  return result;
2126  }
2127  UT_SharedPtr<UT_Ramp> getScaleRamp() const { return myScaleRamp; }
2128  void setScaleRamp(UT_SharedPtr<UT_Ramp> val) { myScaleRamp = val; }
2130  {
2131  SOP_Node *thissop = cookparms.getNode();
2132  if (!thissop) return getScaleRamp();
2134  OP_Utils::evalOpParm(result, thissop, "scaleramp", cookparms.getCookTime(), 0);
2135  return result;
2136  }
2137  ROrd getROrd() const { return ROrd(myROrd); }
2138  void setROrd(ROrd val) { myROrd = int64(val); }
2139  ROrd opROrd(const SOP_NodeVerb::CookParms &cookparms) const
2140  {
2141  SOP_Node *thissop = cookparms.getNode();
2142  if (!thissop) return getROrd();
2143  int64 result;
2144  OP_Utils::evalOpParm(result, thissop, "rOrd", cookparms.getCookTime(), 0);
2145  return ROrd(result);
2146  }
2147  bool getApplyRoll() const { return myApplyRoll; }
2148  void setApplyRoll(bool val) { myApplyRoll = val; }
2149  bool opApplyRoll(const SOP_NodeVerb::CookParms &cookparms) const
2150  {
2151  SOP_Node *thissop = cookparms.getNode();
2152  if (!thissop) return getApplyRoll();
2153  bool result;
2154  OP_Utils::evalOpParm(result, thissop, "applyroll", cookparms.getCookTime(), 0);
2155  return result;
2156  }
2157  fpreal64 getRoll() const { return myRoll; }
2158  void setRoll(fpreal64 val) { myRoll = val; }
2159  fpreal64 opRoll(const SOP_NodeVerb::CookParms &cookparms) const
2160  {
2161  SOP_Node *thissop = cookparms.getNode();
2162  if (!thissop) return getRoll();
2163  fpreal64 result;
2164  OP_Utils::evalOpParm(result, thissop, "roll", cookparms.getCookTime(), 0);
2165  return result;
2166  }
2167  int64 getFullTwists() const { return myFullTwists; }
2168  void setFullTwists(int64 val) { myFullTwists = val; }
2170  {
2171  SOP_Node *thissop = cookparms.getNode();
2172  if (!thissop) return getFullTwists();
2173  int64 result;
2174  OP_Utils::evalOpParm(result, thissop, "fulltwists", cookparms.getCookTime(), 0);
2175  return result;
2176  }
2177  fpreal64 getIncRoll() const { return myIncRoll; }
2178  void setIncRoll(fpreal64 val) { myIncRoll = val; }
2180  {
2181  SOP_Node *thissop = cookparms.getNode();
2182  if (!thissop) return getIncRoll();
2183  fpreal64 result;
2184  OP_Utils::evalOpParm(result, thissop, "incroll", cookparms.getCookTime(), 0);
2185  return result;
2186  }
2187  RollPer getRollPer() const { return RollPer(myRollPer); }
2188  void setRollPer(RollPer val) { myRollPer = int64(val); }
2190  {
2191  SOP_Node *thissop = cookparms.getNode();
2192  if (!thissop) return getRollPer();
2193  int64 result;
2194  OP_Utils::evalOpParm(result, thissop, "rollper", cookparms.getCookTime(), 0);
2195  return RollPer(result);
2196  }
2197  const UT_StringHolder & getRollAttrib() const { return myRollAttrib; }
2198  void setRollAttrib(const UT_StringHolder & val) { myRollAttrib = val; }
2200  {
2201  SOP_Node *thissop = cookparms.getNode();
2202  if (!thissop) return getRollAttrib();
2204  OP_Utils::evalOpParm(result, thissop, "rollattrib", cookparms.getCookTime(), 0);
2205  return result;
2206  }
2207  bool getApplyYaw() const { return myApplyYaw; }
2208  void setApplyYaw(bool val) { myApplyYaw = val; }
2209  bool opApplyYaw(const SOP_NodeVerb::CookParms &cookparms) const
2210  {
2211  SOP_Node *thissop = cookparms.getNode();
2212  if (!thissop) return getApplyYaw();
2213  bool result;
2214  OP_Utils::evalOpParm(result, thissop, "applyyaw", cookparms.getCookTime(), 0);
2215  return result;
2216  }
2217  fpreal64 getYaw() const { return myYaw; }
2218  void setYaw(fpreal64 val) { myYaw = val; }
2219  fpreal64 opYaw(const SOP_NodeVerb::CookParms &cookparms) const
2220  {
2221  SOP_Node *thissop = cookparms.getNode();
2222  if (!thissop) return getYaw();
2223  fpreal64 result;
2224  OP_Utils::evalOpParm(result, thissop, "yaw", cookparms.getCookTime(), 0);
2225  return result;
2226  }
2227  fpreal64 getIncYaw() const { return myIncYaw; }
2228  void setIncYaw(fpreal64 val) { myIncYaw = val; }
2230  {
2231  SOP_Node *thissop = cookparms.getNode();
2232  if (!thissop) return getIncYaw();
2233  fpreal64 result;
2234  OP_Utils::evalOpParm(result, thissop, "incyaw", cookparms.getCookTime(), 0);
2235  return result;
2236  }
2237  YawPer getYawPer() const { return YawPer(myYawPer); }
2238  void setYawPer(YawPer val) { myYawPer = int64(val); }
2239  YawPer opYawPer(const SOP_NodeVerb::CookParms &cookparms) const
2240  {
2241  SOP_Node *thissop = cookparms.getNode();
2242  if (!thissop) return getYawPer();
2243  int64 result;
2244  OP_Utils::evalOpParm(result, thissop, "yawper", cookparms.getCookTime(), 0);
2245  return YawPer(result);
2246  }
2247  const UT_StringHolder & getYawAttrib() const { return myYawAttrib; }
2248  void setYawAttrib(const UT_StringHolder & val) { myYawAttrib = val; }
2250  {
2251  SOP_Node *thissop = cookparms.getNode();
2252  if (!thissop) return getYawAttrib();
2254  OP_Utils::evalOpParm(result, thissop, "yawattrib", cookparms.getCookTime(), 0);
2255  return result;
2256  }
2257  bool getApplyPitch() const { return myApplyPitch; }
2258  void setApplyPitch(bool val) { myApplyPitch = val; }
2259  bool opApplyPitch(const SOP_NodeVerb::CookParms &cookparms) const
2260  {
2261  SOP_Node *thissop = cookparms.getNode();
2262  if (!thissop) return getApplyPitch();
2263  bool result;
2264  OP_Utils::evalOpParm(result, thissop, "applypitch", cookparms.getCookTime(), 0);
2265  return result;
2266  }
2267  fpreal64 getPitch() const { return myPitch; }
2268  void setPitch(fpreal64 val) { myPitch = val; }
2269  fpreal64 opPitch(const SOP_NodeVerb::CookParms &cookparms) const
2270  {
2271  SOP_Node *thissop = cookparms.getNode();
2272  if (!thissop) return getPitch();
2273  fpreal64 result;
2274  OP_Utils::evalOpParm(result, thissop, "pitch", cookparms.getCookTime(), 0);
2275  return result;
2276  }
2277  fpreal64 getIncPitch() const { return myIncPitch; }
2278  void setIncPitch(fpreal64 val) { myIncPitch = val; }
2280  {
2281  SOP_Node *thissop = cookparms.getNode();
2282  if (!thissop) return getIncPitch();
2283  fpreal64 result;
2284  OP_Utils::evalOpParm(result, thissop, "incpitch", cookparms.getCookTime(), 0);
2285  return result;
2286  }
2287  PitchPer getPitchPer() const { return PitchPer(myPitchPer); }
2288  void setPitchPer(PitchPer val) { myPitchPer = int64(val); }
2290  {
2291  SOP_Node *thissop = cookparms.getNode();
2292  if (!thissop) return getPitchPer();
2293  int64 result;
2294  OP_Utils::evalOpParm(result, thissop, "pitchper", cookparms.getCookTime(), 0);
2295  return PitchPer(result);
2296  }
2297  const UT_StringHolder & getPitchAttrib() const { return myPitchAttrib; }
2298  void setPitchAttrib(const UT_StringHolder & val) { myPitchAttrib = val; }
2300  {
2301  SOP_Node *thissop = cookparms.getNode();
2302  if (!thissop) return getPitchAttrib();
2304  OP_Utils::evalOpParm(result, thissop, "pitchattrib", cookparms.getCookTime(), 0);
2305  return result;
2306  }
2307  CopyOrder getCopyOrder() const { return CopyOrder(myCopyOrder); }
2308  void setCopyOrder(CopyOrder val) { myCopyOrder = int64(val); }
2310  {
2311  SOP_Node *thissop = cookparms.getNode();
2312  if (!thissop) return getCopyOrder();
2313  int64 result;
2314  OP_Utils::evalOpParm(result, thissop, "copyorder", cookparms.getCookTime(), 0);
2315  return CopyOrder(result);
2316  }
2317  const UT_StringHolder & getCrossSectionAttrib() const { return myCrossSectionAttrib; }
2318  void setCrossSectionAttrib(const UT_StringHolder & val) { myCrossSectionAttrib = val; }
2320  {
2321  SOP_Node *thissop = cookparms.getNode();
2322  if (!thissop) return getCrossSectionAttrib();
2324  OP_Utils::evalOpParm(result, thissop, "crosssectionattrib", cookparms.getCookTime(), 0);
2325  return result;
2326  }
2327  PrimType getPrimType() const { return PrimType(myPrimType); }
2328  void setPrimType(PrimType val) { myPrimType = int64(val); }
2330  {
2331  SOP_Node *thissop = cookparms.getNode();
2332  if (!thissop) return getPrimType();
2333  int64 result;
2334  OP_Utils::evalOpParm(result, thissop, "primtype", cookparms.getCookTime(), 0);
2335  return PrimType(result);
2336  }
2337  bool getUnrollClosedRowCol() const { return myUnrollClosedRowCol; }
2338  void setUnrollClosedRowCol(bool val) { myUnrollClosedRowCol = val; }
2339  bool opUnrollClosedRowCol(const SOP_NodeVerb::CookParms &cookparms) const
2340  {
2341  SOP_Node *thissop = cookparms.getNode();
2342  if (!thissop) return getUnrollClosedRowCol();
2343  bool result;
2344  OP_Utils::evalOpParm(result, thissop, "unrollclosedrowcol", cookparms.getCookTime(), 0);
2345  return result;
2346  }
2347  bool getSwapRowCol() const { return mySwapRowCol; }
2348  void setSwapRowCol(bool val) { mySwapRowCol = val; }
2349  bool opSwapRowCol(const SOP_NodeVerb::CookParms &cookparms) const
2350  {
2351  SOP_Node *thissop = cookparms.getNode();
2352  if (!thissop) return getSwapRowCol();
2353  bool result;
2354  OP_Utils::evalOpParm(result, thissop, "swaprowcol", cookparms.getCookTime(), 0);
2355  return result;
2356  }
2357  bool getCloseIfNoCurveInput() const { return myCloseIfNoCurveInput; }
2358  void setCloseIfNoCurveInput(bool val) { myCloseIfNoCurveInput = val; }
2359  bool opCloseIfNoCurveInput(const SOP_NodeVerb::CookParms &cookparms) const
2360  {
2361  SOP_Node *thissop = cookparms.getNode();
2362  if (!thissop) return getCloseIfNoCurveInput();
2363  bool result;
2364  OP_Utils::evalOpParm(result, thissop, "closeifnocurveinput", cookparms.getCookTime(), 0);
2365  return result;
2366  }
2367  TangentType getTangentType() const { return TangentType(myTangentType); }
2368  void setTangentType(TangentType val) { myTangentType = int64(val); }
2370  {
2371  SOP_Node *thissop = cookparms.getNode();
2372  if (!thissop) return getTangentType();
2373  int64 result;
2374  OP_Utils::evalOpParm(result, thissop, "tangenttype", cookparms.getCookTime(), 0);
2375  return TangentType(result);
2376  }
2377  bool getContinuousClosed() const { return myContinuousClosed; }
2378  void setContinuousClosed(bool val) { myContinuousClosed = val; }
2379  bool opContinuousClosed(const SOP_NodeVerb::CookParms &cookparms) const
2380  {
2381  SOP_Node *thissop = cookparms.getNode();
2382  if (!thissop) return getContinuousClosed();
2383  bool result;
2384  OP_Utils::evalOpParm(result, thissop, "continuousclosed", cookparms.getCookTime(), 0);
2385  return result;
2386  }
2387  bool getExtrapolateEndTangents() const { return myExtrapolateEndTangents; }
2388  void setExtrapolateEndTangents(bool val) { myExtrapolateEndTangents = val; }
2390  {
2391  SOP_Node *thissop = cookparms.getNode();
2392  if (!thissop) return getExtrapolateEndTangents();
2393  bool result;
2394  OP_Utils::evalOpParm(result, thissop, "extrapolateendtangents", cookparms.getCookTime(), 0);
2395  return result;
2396  }
2397  bool getTransformByAttribs() const { return myTransformByAttribs; }
2398  void setTransformByAttribs(bool val) { myTransformByAttribs = val; }
2399  bool opTransformByAttribs(const SOP_NodeVerb::CookParms &cookparms) const
2400  {
2401  SOP_Node *thissop = cookparms.getNode();
2402  if (!thissop) return getTransformByAttribs();
2403  bool result;
2404  OP_Utils::evalOpParm(result, thissop, "transformbyattribs", cookparms.getCookTime(), 0);
2405  return result;
2406  }
2407  bool getComputeUVs() const { return myComputeUVs; }
2408  void setComputeUVs(bool val) { myComputeUVs = val; }
2409  bool opComputeUVs(const SOP_NodeVerb::CookParms &cookparms) const
2410  {
2411  SOP_Node *thissop = cookparms.getNode();
2412  if (!thissop) return getComputeUVs();
2413  bool result;
2414  OP_Utils::evalOpParm(result, thissop, "computeuvs", cookparms.getCookTime(), 0);
2415  return result;
2416  }
2417  bool getOverrideExistingUVs() const { return myOverrideExistingUVs; }
2418  void setOverrideExistingUVs(bool val) { myOverrideExistingUVs = val; }
2419  bool opOverrideExistingUVs(const SOP_NodeVerb::CookParms &cookparms) const
2420  {
2421  SOP_Node *thissop = cookparms.getNode();
2422  if (!thissop) return getOverrideExistingUVs();
2423  bool result;
2424  OP_Utils::evalOpParm(result, thissop, "overrideexistinguvs", cookparms.getCookTime(), 0);
2425  return result;
2426  }
2427  bool getLengthWeightedUVs() const { return myLengthWeightedUVs; }
2428  void setLengthWeightedUVs(bool val) { myLengthWeightedUVs = val; }
2429  bool opLengthWeightedUVs(const SOP_NodeVerb::CookParms &cookparms) const
2430  {
2431  SOP_Node *thissop = cookparms.getNode();
2432  if (!thissop) return getLengthWeightedUVs();
2433  bool result;
2434  OP_Utils::evalOpParm(result, thissop, "lengthweighteduvs", cookparms.getCookTime(), 0);
2435  return result;
2436  }
2437  bool getNormalizeU() const { return myNormalizeU; }
2438  void setNormalizeU(bool val) { myNormalizeU = val; }
2439  bool opNormalizeU(const SOP_NodeVerb::CookParms &cookparms) const
2440  {
2441  SOP_Node *thissop = cookparms.getNode();
2442  if (!thissop) return getNormalizeU();
2443  bool result;
2444  OP_Utils::evalOpParm(result, thissop, "normalizeu", cookparms.getCookTime(), 0);
2445  return result;
2446  }
2447  bool getNormalizeV() const { return myNormalizeV; }
2448  void setNormalizeV(bool val) { myNormalizeV = val; }
2449  bool opNormalizeV(const SOP_NodeVerb::CookParms &cookparms) const
2450  {
2451  SOP_Node *thissop = cookparms.getNode();
2452  if (!thissop) return getNormalizeV();
2453  bool result;
2454  OP_Utils::evalOpParm(result, thissop, "normalizev", cookparms.getCookTime(), 0);
2455  return result;
2456  }
2457  bool getFlipU() const { return myFlipU; }
2458  void setFlipU(bool val) { myFlipU = val; }
2459  bool opFlipU(const SOP_NodeVerb::CookParms &cookparms) const
2460  {
2461  SOP_Node *thissop = cookparms.getNode();
2462  if (!thissop) return getFlipU();
2463  bool result;
2464  OP_Utils::evalOpParm(result, thissop, "flipu", cookparms.getCookTime(), 0);
2465  return result;
2466  }
2467  UT_Vector2D getUVScale() const { return myUVScale; }
2468  void setUVScale(UT_Vector2D val) { myUVScale = val; }
2470  {
2471  SOP_Node *thissop = cookparms.getNode();
2472  if (!thissop) return getUVScale();
2474  OP_Utils::evalOpParm(result, thissop, "uvscale", cookparms.getCookTime(), 0);
2475  return result;
2476  }
2477  bool getUseMeshEdgeLengths() const { return myUseMeshEdgeLengths; }
2478  void setUseMeshEdgeLengths(bool val) { myUseMeshEdgeLengths = val; }
2479  bool opUseMeshEdgeLengths(const SOP_NodeVerb::CookParms &cookparms) const
2480  {
2481  SOP_Node *thissop = cookparms.getNode();
2482  if (!thissop) return getUseMeshEdgeLengths();
2483  bool result;
2484  OP_Utils::evalOpParm(result, thissop, "usemeshedgelengths", cookparms.getCookTime(), 0);
2485  return result;
2486  }
2487  bool getPropScalePerCurve() const { return myPropScalePerCurve; }
2488  void setPropScalePerCurve(bool val) { myPropScalePerCurve = val; }
2489  bool opPropScalePerCurve(const SOP_NodeVerb::CookParms &cookparms) const
2490  {
2491  SOP_Node *thissop = cookparms.getNode();
2492  if (!thissop) return getPropScalePerCurve();
2493  bool result;
2494  OP_Utils::evalOpParm(result, thissop, "propscalepercurve", cookparms.getCookTime(), 0);
2495  return result;
2496  }
2497  bool getWrapU() const { return myWrapU; }
2498  void setWrapU(bool val) { myWrapU = val; }
2499  bool opWrapU(const SOP_NodeVerb::CookParms &cookparms) const
2500  {
2501  SOP_Node *thissop = cookparms.getNode();
2502  if (!thissop) return getWrapU();
2503  bool result;
2504  OP_Utils::evalOpParm(result, thissop, "wrapu", cookparms.getCookTime(), 0);
2505  return result;
2506  }
2507  bool getWrapV() const { return myWrapV; }
2508  void setWrapV(bool val) { myWrapV = val; }
2509  bool opWrapV(const SOP_NodeVerb::CookParms &cookparms) const
2510  {
2511  SOP_Node *thissop = cookparms.getNode();
2512  if (!thissop) return getWrapV();
2513  bool result;
2514  OP_Utils::evalOpParm(result, thissop, "wrapv", cookparms.getCookTime(), 0);
2515  return result;
2516  }
2517  const UT_StringHolder & getAttribsFromBackbone() const { return myAttribsFromBackbone; }
2518  void setAttribsFromBackbone(const UT_StringHolder & val) { myAttribsFromBackbone = val; }
2520  {
2521  SOP_Node *thissop = cookparms.getNode();
2522  if (!thissop) return getAttribsFromBackbone();
2524  OP_Utils::evalOpParm(result, thissop, "attribsfrombackbone", cookparms.getCookTime(), 0);
2525  return result;
2526  }
2527  const UT_StringHolder & getAttribsFromCrossSection() const { return myAttribsFromCrossSection; }
2528  void setAttribsFromCrossSection(const UT_StringHolder & val) { myAttribsFromCrossSection = val; }
2530  {
2531  SOP_Node *thissop = cookparms.getNode();
2532  if (!thissop) return getAttribsFromCrossSection();
2534  OP_Utils::evalOpParm(result, thissop, "attribsfromcrosssection", cookparms.getCookTime(), 0);
2535  return result;
2536  }
2537  bool getAddPointRow() const { return myAddPointRow; }
2538  void setAddPointRow(bool val) { myAddPointRow = val; }
2539  bool opAddPointRow(const SOP_NodeVerb::CookParms &cookparms) const
2540  {
2541  SOP_Node *thissop = cookparms.getNode();
2542  if (!thissop) return getAddPointRow();
2543  bool result;
2544  OP_Utils::evalOpParm(result, thissop, "addptrow", cookparms.getCookTime(), 0);
2545  return result;
2546  }
2547  const UT_StringHolder & getPtRowAttrib() const { return myPtRowAttrib; }
2548  void setPtRowAttrib(const UT_StringHolder & val) { myPtRowAttrib = val; }
2550  {
2551  SOP_Node *thissop = cookparms.getNode();
2552  if (!thissop) return getPtRowAttrib();
2554  OP_Utils::evalOpParm(result, thissop, "ptrowattrib", cookparms.getCookTime(), 0);
2555  return result;
2556  }
2557  bool getAddPointCol() const { return myAddPointCol; }
2558  void setAddPointCol(bool val) { myAddPointCol = val; }
2559  bool opAddPointCol(const SOP_NodeVerb::CookParms &cookparms) const
2560  {
2561  SOP_Node *thissop = cookparms.getNode();
2562  if (!thissop) return getAddPointCol();
2563  bool result;
2564  OP_Utils::evalOpParm(result, thissop, "addptcol", cookparms.getCookTime(), 0);
2565  return result;
2566  }
2567  const UT_StringHolder & getPtColAttrib() const { return myPtColAttrib; }
2568  void setPtColAttrib(const UT_StringHolder & val) { myPtColAttrib = val; }
2570  {
2571  SOP_Node *thissop = cookparms.getNode();
2572  if (!thissop) return getPtColAttrib();
2574  OP_Utils::evalOpParm(result, thissop, "ptcolattrib", cookparms.getCookTime(), 0);
2575  return result;
2576  }
2577  bool getAddPrimRow() const { return myAddPrimRow; }
2578  void setAddPrimRow(bool val) { myAddPrimRow = val; }
2579  bool opAddPrimRow(const SOP_NodeVerb::CookParms &cookparms) const
2580  {
2581  SOP_Node *thissop = cookparms.getNode();
2582  if (!thissop) return getAddPrimRow();
2583  bool result;
2584  OP_Utils::evalOpParm(result, thissop, "addprimrow", cookparms.getCookTime(), 0);
2585  return result;
2586  }
2587  const UT_StringHolder & getPrimRowAttrib() const { return myPrimRowAttrib; }
2588  void setPrimRowAttrib(const UT_StringHolder & val) { myPrimRowAttrib = val; }
2590  {
2591  SOP_Node *thissop = cookparms.getNode();
2592  if (!thissop) return getPrimRowAttrib();
2594  OP_Utils::evalOpParm(result, thissop, "primrowattrib", cookparms.getCookTime(), 0);
2595  return result;
2596  }
2597  bool getAddPrimCol() const { return myAddPrimCol; }
2598  void setAddPrimCol(bool val) { myAddPrimCol = val; }
2599  bool opAddPrimCol(const SOP_NodeVerb::CookParms &cookparms) const
2600  {
2601  SOP_Node *thissop = cookparms.getNode();
2602  if (!thissop) return getAddPrimCol();
2603  bool result;
2604  OP_Utils::evalOpParm(result, thissop, "addprimcol", cookparms.getCookTime(), 0);
2605  return result;
2606  }
2607  const UT_StringHolder & getPrimColAttrib() const { return myPrimColAttrib; }
2608  void setPrimColAttrib(const UT_StringHolder & val) { myPrimColAttrib = val; }
2610  {
2611  SOP_Node *thissop = cookparms.getNode();
2612  if (!thissop) return getPrimColAttrib();
2614  OP_Utils::evalOpParm(result, thissop, "primcolattrib", cookparms.getCookTime(), 0);
2615  return result;
2616  }
2617  bool getAddCrossSectionNum() const { return myAddCrossSectionNum; }
2618  void setAddCrossSectionNum(bool val) { myAddCrossSectionNum = val; }
2619  bool opAddCrossSectionNum(const SOP_NodeVerb::CookParms &cookparms) const
2620  {
2621  SOP_Node *thissop = cookparms.getNode();
2622  if (!thissop) return getAddCrossSectionNum();
2623  bool result;
2624  OP_Utils::evalOpParm(result, thissop, "addcrosssectionnum", cookparms.getCookTime(), 0);
2625  return result;
2626  }
2627  const UT_StringHolder & getCrossSectionNumAttrib() const { return myCrossSectionNumAttrib; }
2628  void setCrossSectionNumAttrib(const UT_StringHolder & val) { myCrossSectionNumAttrib = val; }
2630  {
2631  SOP_Node *thissop = cookparms.getNode();
2632  if (!thissop) return getCrossSectionNumAttrib();
2634  OP_Utils::evalOpParm(result, thissop, "crosssectionnumattrib", cookparms.getCookTime(), 0);
2635  return result;
2636  }
2637  bool getAddCurveNum() const { return myAddCurveNum; }
2638  void setAddCurveNum(bool val) { myAddCurveNum = val; }
2639  bool opAddCurveNum(const SOP_NodeVerb::CookParms &cookparms) const
2640  {
2641  SOP_Node *thissop = cookparms.getNode();
2642  if (!thissop) return getAddCurveNum();
2643  bool result;
2644  OP_Utils::evalOpParm(result, thissop, "addcurvenum", cookparms.getCookTime(), 0);
2645  return result;
2646  }
2647  const UT_StringHolder & getCurveNumAttrib() const { return myCurveNumAttrib; }
2648  void setCurveNumAttrib(const UT_StringHolder & val) { myCurveNumAttrib = val; }
2650  {
2651  SOP_Node *thissop = cookparms.getNode();
2652  if (!thissop) return getCurveNumAttrib();
2654  OP_Utils::evalOpParm(result, thissop, "curvenumattrib", cookparms.getCookTime(), 0);
2655  return result;
2656  }
2657  UpVectorType getUpVectorType() const { return UpVectorType(myUpVectorType); }
2658  void setUpVectorType(UpVectorType val) { myUpVectorType = int64(val); }
2660  {
2661  SOP_Node *thissop = cookparms.getNode();
2662  if (!thissop) return getUpVectorType();
2663  int64 result;
2664  OP_Utils::evalOpParm(result, thissop, "upvectortype", cookparms.getCookTime(), 0);
2665  return UpVectorType(result);
2666  }
2667  bool getUpVectorAtStart() const { return myUpVectorAtStart; }
2668  void setUpVectorAtStart(bool val) { myUpVectorAtStart = val; }
2669  bool opUpVectorAtStart(const SOP_NodeVerb::CookParms &cookparms) const
2670  {
2671  SOP_Node *thissop = cookparms.getNode();
2672  if (!thissop) return getUpVectorAtStart();
2673  bool result;
2674  OP_Utils::evalOpParm(result, thissop, "upvectoratstart", cookparms.getCookTime(), 0);
2675  return result;
2676  }
2677  bool getUseEndUpVector() const { return myUseEndUpVector; }
2678  void setUseEndUpVector(bool val) { myUseEndUpVector = val; }
2679  bool opUseEndUpVector(const SOP_NodeVerb::CookParms &cookparms) const
2680  {
2681  SOP_Node *thissop = cookparms.getNode();
2682  if (!thissop) return getUseEndUpVector();
2683  bool result;
2684  OP_Utils::evalOpParm(result, thissop, "useendupvector", cookparms.getCookTime(), 0);
2685  return result;
2686  }
2687  const UT_StringHolder & getUpVectorAttrib() const { return myUpVectorAttrib; }
2688  void setUpVectorAttrib(const UT_StringHolder & val) { myUpVectorAttrib = val; }
2690  {
2691  SOP_Node *thissop = cookparms.getNode();
2692  if (!thissop) return getUpVectorAttrib();
2694  OP_Utils::evalOpParm(result, thissop, "upvectorattrib", cookparms.getCookTime(), 0);
2695  return result;
2696  }
2697  const UT_StringHolder & getEndUpVectorAttrib() const { return myEndUpVectorAttrib; }
2698  void setEndUpVectorAttrib(const UT_StringHolder & val) { myEndUpVectorAttrib = val; }
2700  {
2701  SOP_Node *thissop = cookparms.getNode();
2702  if (!thissop) return getEndUpVectorAttrib();
2704  OP_Utils::evalOpParm(result, thissop, "endupvectorattrib", cookparms.getCookTime(), 0);
2705  return result;
2706  }
2707  UT_Vector3D getUpVector() const { return myUpVector; }
2708  void setUpVector(UT_Vector3D val) { myUpVector = val; }
2710  {
2711  SOP_Node *thissop = cookparms.getNode();
2712  if (!thissop) return getUpVector();
2714  OP_Utils::evalOpParm(result, thissop, "upvector", cookparms.getCookTime(), 0);
2715  return result;
2716  }
2717  UT_Vector3D getEndUpVector() const { return myEndUpVector; }
2718  void setEndUpVector(UT_Vector3D val) { myEndUpVector = val; }
2720  {
2721  SOP_Node *thissop = cookparms.getNode();
2722  if (!thissop) return getEndUpVector();
2724  OP_Utils::evalOpParm(result, thissop, "endupvector", cookparms.getCookTime(), 0);
2725  return result;
2726  }
2727 
2728 private:
2729  UT_StringHolder myCurveGroup;
2730  UT_StringHolder myCrossSectionGroup;
2731  int64 mySurfaceShape;
2732  int64 mySurfaceType;
2733  fpreal64 myScale;
2734  int64 myCols;
2735  fpreal64 myRadius;
2736  fpreal64 myWidth;
2737  bool myReverseCrossSections;
2738  bool myStretchAroundTurns;
2739  fpreal64 myMaxStretchAroundTurns;
2740  int64 myEndCapType;
2741  int64 myCapDivs;
2742  bool myTriangularPoles;
2743  fpreal64 myCapScale;
2744  fpreal64 myCapRoundness;
2745  bool myAddEndCapsGroup;
2746  UT_StringHolder myEndCapsGroup;
2747  bool myApplyScale;
2748  UT_SharedPtr<UT_Ramp> myScaleRamp;
2749  int64 myROrd;
2750  bool myApplyRoll;
2751  fpreal64 myRoll;
2752  int64 myFullTwists;
2753  fpreal64 myIncRoll;
2754  int64 myRollPer;
2755  UT_StringHolder myRollAttrib;
2756  bool myApplyYaw;
2757  fpreal64 myYaw;
2758  fpreal64 myIncYaw;
2759  int64 myYawPer;
2760  UT_StringHolder myYawAttrib;
2761  bool myApplyPitch;
2762  fpreal64 myPitch;
2763  fpreal64 myIncPitch;
2764  int64 myPitchPer;
2765  UT_StringHolder myPitchAttrib;
2766  int64 myCopyOrder;
2767  UT_StringHolder myCrossSectionAttrib;
2768  int64 myPrimType;
2769  bool myUnrollClosedRowCol;
2770  bool mySwapRowCol;
2771  bool myCloseIfNoCurveInput;
2772  int64 myTangentType;
2773  bool myContinuousClosed;
2774  bool myExtrapolateEndTangents;
2775  bool myTransformByAttribs;
2776  bool myComputeUVs;
2777  bool myOverrideExistingUVs;
2778  bool myLengthWeightedUVs;
2779  bool myNormalizeU;
2780  bool myNormalizeV;
2781  bool myFlipU;
2782  UT_Vector2D myUVScale;
2783  bool myUseMeshEdgeLengths;
2784  bool myPropScalePerCurve;
2785  bool myWrapU;
2786  bool myWrapV;
2787  UT_StringHolder myAttribsFromBackbone;
2788  UT_StringHolder myAttribsFromCrossSection;
2789  bool myAddPointRow;
2790  UT_StringHolder myPtRowAttrib;
2791  bool myAddPointCol;
2792  UT_StringHolder myPtColAttrib;
2793  bool myAddPrimRow;
2794  UT_StringHolder myPrimRowAttrib;
2795  bool myAddPrimCol;
2796  UT_StringHolder myPrimColAttrib;
2797  bool myAddCrossSectionNum;
2798  UT_StringHolder myCrossSectionNumAttrib;
2799  bool myAddCurveNum;
2800  UT_StringHolder myCurveNumAttrib;
2801  int64 myUpVectorType;
2802  bool myUpVectorAtStart;
2803  bool myUseEndUpVector;
2804  UT_StringHolder myUpVectorAttrib;
2805  UT_StringHolder myEndUpVectorAttrib;
2806  UT_Vector3D myUpVector;
2807  UT_Vector3D myEndUpVector;
2808 
2809 };
virtual NodeIdx getInput(NodeIdx idx, OP_InputIdx input, bool markused=false) const =0
const UT_StringHolder & getPitchAttrib() const
void setPropScalePerCurve(bool val)
fpreal64 getPitch() const
type
Definition: core.h:556
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)
static UT_SharedPtr< UT_Ramp > buildFromDefault(const char *def)
Returns a ramp constructed from the canonical default strings.
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:63
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
GLsizei const GLfloat * value
Definition: glcorearb.h:824
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:622
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
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
UT_SharedPtr< const PRM_DataItem > PRM_DataItemHandle
Definition: APEX_Include.h:55
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:303
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:278
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:96
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
virtual UT_StringHolder baseGetSignature() const
Definition: OP_NodeParms.h:294
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:372
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:1401
#define UT_ASSERT(ZZ)
Definition: UT_Assert.h:156
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
UT_Vector2D getUVScale() const
void setIncRoll(fpreal64 val)
const UT_StringHolder & getPrimRowAttrib() const
virtual bool isDirect() const =0
Direct proxies mirror actual nodes:
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
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