HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
SOP_CurveFrame.proto.h
Go to the documentation of this file.
1 /* Automagically Generated by generate_proto.py
2  * Do not Edit
3  */
4 #pragma once
5 
6 #include <SOP/SOP_API.h>
7 #include <SOP/SOP_NodeVerb.h>
8 #include <SOP/SOP_GraphProxy.h>
9 
10 #include <OP/OP_Utils.h>
11 #include <PRM/PRM_Parm.h>
12 #include <UT/UT_IStream.h>
13 #include <UT/UT_NTStreamUtil.h>
14 #include <UT/UT_Ramp.h>
15 #include <UT/UT_SharedPtr.h>
16 #include <UT/UT_StringHolder.h>
17 #include <UT/UT_StringStream.h>
18 #include <UT/UT_VectorTypes.h>
19 #include <UT/UT_EnvControl.h>
20 #include <SYS/SYS_Types.h>
21 
22 class DEP_MicroNode;
23 namespace SOP_CurveFrameEnums
24 {
25  enum class TangentType
26  {
27  AVGDIR = 0,
28  DIFF,
29  PREV,
30  NEXT,
31  NONE
32  };
33 
35  getToken(TangentType enum_value)
36  {
37  using namespace UT::Literal;
38  switch (enum_value) {
39  case TangentType::AVGDIR: return "avgdir"_sh;
40  case TangentType::DIFF: return "diff"_sh;
41  case TangentType::PREV: return "prev"_sh;
42  case TangentType::NEXT: return "next"_sh;
43  case TangentType::NONE: return "none"_sh;
44  default: UT_ASSERT(false); return ""_sh;
45  }
46  }
47 
48  enum class UpVectorType
49  {
50  NORMAL = 0,
51  X,
52  Y,
53  Z,
54  ATTRIB,
55  CUSTOM
56  };
57 
59  getToken(UpVectorType enum_value)
60  {
61  using namespace UT::Literal;
62  switch (enum_value) {
63  case UpVectorType::NORMAL: return "normal"_sh;
64  case UpVectorType::X: return "x"_sh;
65  case UpVectorType::Y: return "y"_sh;
66  case UpVectorType::Z: return "z"_sh;
67  case UpVectorType::ATTRIB: return "attrib"_sh;
68  case UpVectorType::CUSTOM: return "custom"_sh;
69  default: UT_ASSERT(false); return ""_sh;
70  }
71  }
72 
74  {
75  NOSCALING = 0,
76  BYATTRIB
77  };
78 
81  {
82  using namespace UT::Literal;
83  switch (enum_value) {
84  case EnableCurvatureScaleAttrib::NOSCALING: return "noscaling"_sh;
85  case EnableCurvatureScaleAttrib::BYATTRIB: return "byattrib"_sh;
86  default: UT_ASSERT(false); return ""_sh;
87  }
88  }
89 
90  enum class ROrd
91  {
92  XYZ = 0,
93  XZY,
94  YXZ,
95  YZX,
96  ZXY,
97  ZYX
98  };
99 
101  getToken(ROrd enum_value)
102  {
103  using namespace UT::Literal;
104  switch (enum_value) {
105  case ROrd::XYZ: return "xyz"_sh;
106  case ROrd::XZY: return "xzy"_sh;
107  case ROrd::YXZ: return "yxz"_sh;
108  case ROrd::YZX: return "yzx"_sh;
109  case ROrd::ZXY: return "zxy"_sh;
110  case ROrd::ZYX: return "zyx"_sh;
111  default: UT_ASSERT(false); return ""_sh;
112  }
113  }
114 
115  enum class RollPer
116  {
117  EDGE = 0,
118  DISTANCE,
119  ATTRIB,
120  FULLEDGES,
122  };
123 
125  getToken(RollPer enum_value)
126  {
127  using namespace UT::Literal;
128  switch (enum_value) {
129  case RollPer::EDGE: return "edge"_sh;
130  case RollPer::DISTANCE: return "distance"_sh;
131  case RollPer::ATTRIB: return "attrib"_sh;
132  case RollPer::FULLEDGES: return "fulledges"_sh;
133  case RollPer::FULLDISTANCE: return "fulldistance"_sh;
134  default: UT_ASSERT(false); return ""_sh;
135  }
136  }
137 
138  enum class YawPer
139  {
140  EDGE = 0,
141  DISTANCE,
142  ATTRIB,
143  FULLEDGES,
145  };
146 
148  getToken(YawPer enum_value)
149  {
150  using namespace UT::Literal;
151  switch (enum_value) {
152  case YawPer::EDGE: return "edge"_sh;
153  case YawPer::DISTANCE: return "distance"_sh;
154  case YawPer::ATTRIB: return "attrib"_sh;
155  case YawPer::FULLEDGES: return "fulledges"_sh;
156  case YawPer::FULLDISTANCE: return "fulldistance"_sh;
157  default: UT_ASSERT(false); return ""_sh;
158  }
159  }
160 
161  enum class PitchPer
162  {
163  EDGE = 0,
164  DISTANCE,
165  ATTRIB,
166  FULLEDGES,
168  };
169 
171  getToken(PitchPer enum_value)
172  {
173  using namespace UT::Literal;
174  switch (enum_value) {
175  case PitchPer::EDGE: return "edge"_sh;
176  case PitchPer::DISTANCE: return "distance"_sh;
177  case PitchPer::ATTRIB: return "attrib"_sh;
178  case PitchPer::FULLEDGES: return "fulledges"_sh;
179  case PitchPer::FULLDISTANCE: return "fulldistance"_sh;
180  default: UT_ASSERT(false); return ""_sh;
181  }
182  }
183 
184  enum class Class
185  {
186  POINT = 0,
187  VERTEX
188  };
189 
191  getToken(Class enum_value)
192  {
193  using namespace UT::Literal;
194  switch (enum_value) {
195  case Class::POINT: return "point"_sh;
196  case Class::VERTEX: return "vertex"_sh;
197  default: UT_ASSERT(false); return ""_sh;
198  }
199  }
200 
201 }
202 
203 
205 {
206 public:
207  static int version() { return 1; }
208 
210  {
211  myCurveGroup = ""_UTsh;
212  myTangentType = 0;
213  myContinuousClosed = true;
214  myExtrapolateEndTangents = false;
215  myTransformByAttribs = false;
216  myUpVectorType = 0;
217  myUpVectorAtStart = true;
218  myUseEndUpVector = false;
219  myUpVectorAttrib = "target_up"_UTsh;
220  myEndUpVectorAttrib = "target_up_end"_UTsh;
221  myUpVector = UT_Vector3D(0,1,0);
222  myEndUpVector = UT_Vector3D(0,1,0);
223  myAdjustUpCurvature = false;
224  myCurvatureScale = 1;
225  myEnableCurvatureScaleAttrib = 0;
226  myCurvatureScaleAttrib = "speed"_UTsh;
227  myEnableCurvatureAttrib = false;
228  myCurvatureAttrib = "curvature"_UTsh;
229  myROrd = 0;
230  myApplyRoll = false;
231  myRoll = 0;
232  myRollPer = 4;
233  myFullTwists = 0;
234  myIncRoll = 0;
235  myRollAttrib = "roll"_UTsh;
236  myApplyYaw = false;
237  myYaw = 0;
238  myYawPer = 4;
239  myIncYaw = 0;
240  myYawAttrib = "yaw"_UTsh;
241  myApplyPitch = false;
242  myPitch = 0;
243  myPitchPer = 4;
244  myIncPitch = 0;
245  myPitchAttrib = "pitch"_UTsh;
246  myNormalize = true;
247  myScale = 1;
248  myStretchAroundTurns = false;
249  myMaxStretchAroundTurns = 10;
250  myClass = 0;
251  myOutputXAxis = false;
252  myXAxisName = "out"_UTsh;
253  myOutputYAxis = true;
254  myYAxisName = "up"_UTsh;
255  myOutputZAxis = true;
256  myZAxisName = "N"_UTsh;
257  myOutputTranslation = false;
258  myTranslationName = "P"_UTsh;
259  myOutputQuaternion = false;
260  myQuaternionName = "orient"_UTsh;
261  myOutputTransform3 = false;
262  myTransform3Name = "transform"_UTsh;
263  myOutputTransform4 = false;
264  myTransform4Name = "transform"_UTsh;
265 
266  }
267 
268  explicit SOP_CurveFrameParms(const SOP_CurveFrameParms &) = default;
270  SOP_CurveFrameParms(SOP_CurveFrameParms &&) noexcept = default;
271  SOP_CurveFrameParms &operator=(SOP_CurveFrameParms &&) noexcept = default;
272 
273  ~SOP_CurveFrameParms() override {}
274 
275  bool operator==(const SOP_CurveFrameParms &src) const
276  {
277  if (myCurveGroup != src.myCurveGroup) return false;
278  if (myTangentType != src.myTangentType) return false;
279  if (myContinuousClosed != src.myContinuousClosed) return false;
280  if (myExtrapolateEndTangents != src.myExtrapolateEndTangents) return false;
281  if (myTransformByAttribs != src.myTransformByAttribs) return false;
282  if (myUpVectorType != src.myUpVectorType) return false;
283  if (myUpVectorAtStart != src.myUpVectorAtStart) return false;
284  if (myUseEndUpVector != src.myUseEndUpVector) return false;
285  if (myUpVectorAttrib != src.myUpVectorAttrib) return false;
286  if (myEndUpVectorAttrib != src.myEndUpVectorAttrib) return false;
287  if (myUpVector != src.myUpVector) return false;
288  if (myEndUpVector != src.myEndUpVector) return false;
289  if (myAdjustUpCurvature != src.myAdjustUpCurvature) return false;
290  if (myCurvatureScale != src.myCurvatureScale) return false;
291  if (myEnableCurvatureScaleAttrib != src.myEnableCurvatureScaleAttrib) return false;
292  if (myCurvatureScaleAttrib != src.myCurvatureScaleAttrib) return false;
293  if (myEnableCurvatureAttrib != src.myEnableCurvatureAttrib) return false;
294  if (myCurvatureAttrib != src.myCurvatureAttrib) return false;
295  if (myROrd != src.myROrd) return false;
296  if (myApplyRoll != src.myApplyRoll) return false;
297  if (myRoll != src.myRoll) return false;
298  if (myRollPer != src.myRollPer) return false;
299  if (myFullTwists != src.myFullTwists) return false;
300  if (myIncRoll != src.myIncRoll) return false;
301  if (myRollAttrib != src.myRollAttrib) return false;
302  if (myApplyYaw != src.myApplyYaw) return false;
303  if (myYaw != src.myYaw) return false;
304  if (myYawPer != src.myYawPer) return false;
305  if (myIncYaw != src.myIncYaw) return false;
306  if (myYawAttrib != src.myYawAttrib) return false;
307  if (myApplyPitch != src.myApplyPitch) return false;
308  if (myPitch != src.myPitch) return false;
309  if (myPitchPer != src.myPitchPer) return false;
310  if (myIncPitch != src.myIncPitch) return false;
311  if (myPitchAttrib != src.myPitchAttrib) return false;
312  if (myNormalize != src.myNormalize) return false;
313  if (myScale != src.myScale) return false;
314  if (myStretchAroundTurns != src.myStretchAroundTurns) return false;
315  if (myMaxStretchAroundTurns != src.myMaxStretchAroundTurns) return false;
316  if (myClass != src.myClass) return false;
317  if (myOutputXAxis != src.myOutputXAxis) return false;
318  if (myXAxisName != src.myXAxisName) return false;
319  if (myOutputYAxis != src.myOutputYAxis) return false;
320  if (myYAxisName != src.myYAxisName) return false;
321  if (myOutputZAxis != src.myOutputZAxis) return false;
322  if (myZAxisName != src.myZAxisName) return false;
323  if (myOutputTranslation != src.myOutputTranslation) return false;
324  if (myTranslationName != src.myTranslationName) return false;
325  if (myOutputQuaternion != src.myOutputQuaternion) return false;
326  if (myQuaternionName != src.myQuaternionName) return false;
327  if (myOutputTransform3 != src.myOutputTransform3) return false;
328  if (myTransform3Name != src.myTransform3Name) return false;
329  if (myOutputTransform4 != src.myOutputTransform4) return false;
330  if (myTransform4Name != src.myTransform4Name) return false;
331 
332  return true;
333  }
334  bool operator!=(const SOP_CurveFrameParms &src) const
335  {
336  return !operator==(src);
337  }
346 
347 
348 
349  void buildFromOp(const OP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
350  {
351  myCurveGroup = ""_UTsh;
352  if (true)
353  graph->evalOpParm(myCurveGroup, nodeidx, "group", time, 0);
354  myTangentType = 0;
355  if (true)
356  graph->evalOpParm(myTangentType, nodeidx, "tangenttype", time, 0);
357  myContinuousClosed = true;
358  if (true && ( (true&&!(((int64(getTangentType())==4)))) ) )
359  graph->evalOpParm(myContinuousClosed, nodeidx, "continuousclosed", time, 0);
360  myExtrapolateEndTangents = false;
361  if (true && ( (true&&!(((int64(getTangentType())==4)))) ) )
362  graph->evalOpParm(myExtrapolateEndTangents, nodeidx, "extrapolateendtangents", time, 0);
363  myTransformByAttribs = false;
364  if (true)
365  graph->evalOpParm(myTransformByAttribs, nodeidx, "transformbyattribs", time, 0);
366  myUpVectorType = 0;
367  if (true && ( (true&&!(((int64(getTangentType())==4)))) ) )
368  graph->evalOpParm(myUpVectorType, nodeidx, "upvectortype", time, 0);
369  myUpVectorAtStart = true;
370  if (true && ( (true&&!(((int64(getTangentType())==4)))) ) )
371  graph->evalOpParm(myUpVectorAtStart, nodeidx, "upvectoratstart", time, 0);
372  myUseEndUpVector = false;
373  if (true && ( (true&&!(((int64(getTangentType())==4))||((getUpVectorAtStart()==0)))) ) )
374  graph->evalOpParm(myUseEndUpVector, nodeidx, "useendupvector", time, 0);
375  myUpVectorAttrib = "target_up"_UTsh;
376  if (true && ( (true&&!(((int64(getTangentType())==4))||((int64(getUpVectorType())!=4))||((int64(getTangentType())==4))||((int64(getUpVectorType())!=4)))) ) )
377  graph->evalOpParm(myUpVectorAttrib, nodeidx, "upvectorattrib", time, 0);
378  myEndUpVectorAttrib = "target_up_end"_UTsh;
379  if (true && ( (true&&!(((int64(getTangentType())==4))||((int64(getUpVectorType())!=4))||((getUseEndUpVector()==0))||((getUpVectorAtStart()==0))||((int64(getTangentType())==4))||((int64(getUpVectorType())!=4))||((getUseEndUpVector()==0))||((getUpVectorAtStart()==0)))) ) )
380  graph->evalOpParm(myEndUpVectorAttrib, nodeidx, "endupvectorattrib", time, 0);
381  myUpVector = UT_Vector3D(0,1,0);
382  if (true && ( (true&&!(((int64(getTangentType())==4))||((int64(getUpVectorType())!=5))||((int64(getTangentType())==4))||((int64(getUpVectorType())!=5)))) ) )
383  graph->evalOpParm(myUpVector, nodeidx, "upvector", time, 0);
384  myEndUpVector = UT_Vector3D(0,1,0);
385  if (true && ( (true&&!(((int64(getTangentType())==4))||((int64(getUpVectorType())!=5))||((getUseEndUpVector()==0))||((getUpVectorAtStart()==0))||((int64(getTangentType())==4))||((int64(getUpVectorType())!=5))||((getUseEndUpVector()==0))||((getUpVectorAtStart()==0)))) ) )
386  graph->evalOpParm(myEndUpVector, nodeidx, "endupvector", time, 0);
387  myAdjustUpCurvature = false;
388  if (true)
389  graph->evalOpParm(myAdjustUpCurvature, nodeidx, "adjustupcurvature", time, 0);
390  myCurvatureScale = 1;
391  if (true && ( (true&&!(((getAdjustUpCurvature()==0)))) ) )
392  graph->evalOpParm(myCurvatureScale, nodeidx, "curvaturescale", time, 0);
393  myEnableCurvatureScaleAttrib = 0;
394  if (true && ( (true&&!(((getAdjustUpCurvature()==0)))) ) )
395  graph->evalOpParm(myEnableCurvatureScaleAttrib, nodeidx, "enablecurvaturescaleattrib", time, 0);
396  myCurvatureScaleAttrib = "speed"_UTsh;
397  if (true && ( (true&&!(((getAdjustUpCurvature()==0))||((int64(getEnableCurvatureScaleAttrib())==0)))) ) )
398  graph->evalOpParm(myCurvatureScaleAttrib, nodeidx, "curvaturescaleattrib", time, 0);
399  myEnableCurvatureAttrib = false;
400  if (true && ( (true&&!(((getAdjustUpCurvature()==0)))) ) )
401  graph->evalOpParm(myEnableCurvatureAttrib, nodeidx, "enablecurvatureattrib", time, 0);
402  myCurvatureAttrib = "curvature"_UTsh;
403  if (true && ( (true&&!(((getAdjustUpCurvature()==0))||((getEnableCurvatureAttrib()==0)))) ) )
404  graph->evalOpParm(myCurvatureAttrib, nodeidx, "curvatureattrib", time, 0);
405  myROrd = 0;
406  if (true)
407  graph->evalOpParm(myROrd, nodeidx, "rOrd", time, 0);
408  myApplyRoll = false;
409  if (true)
410  graph->evalOpParm(myApplyRoll, nodeidx, "applyroll", time, 0);
411  myRoll = 0;
412  if (true && ( (true&&!(((getApplyRoll()==0)))) ) )
413  graph->evalOpParm(myRoll, nodeidx, "roll", time, 0);
414  myRollPer = 4;
415  if (true && ( (true&&!(((getApplyRoll()==0)))) ) )
416  graph->evalOpParm(myRollPer, nodeidx, "rollper", time, 0);
417  myFullTwists = 0;
418  if (true && ( (true&&!(((getApplyRoll()==0)))) ) )
419  graph->evalOpParm(myFullTwists, nodeidx, "fulltwists", time, 0);
420  myIncRoll = 0;
421  if (true && ( (true&&!(((getApplyRoll()==0)))) ) )
422  graph->evalOpParm(myIncRoll, nodeidx, "incroll", time, 0);
423  myRollAttrib = "roll"_UTsh;
424  if (true && ( (true&&!(((getApplyRoll()==0))||((getApplyRoll()==1)&&(int64(getRollPer())!=2))||((getApplyRoll()==0))||((getApplyRoll()==1)&&(int64(getRollPer())!=2)))) ) )
425  graph->evalOpParm(myRollAttrib, nodeidx, "rollattrib", time, 0);
426  myApplyYaw = false;
427  if (true)
428  graph->evalOpParm(myApplyYaw, nodeidx, "applyyaw", time, 0);
429  myYaw = 0;
430  if (true && ( (true&&!(((getApplyYaw()==0)))) ) )
431  graph->evalOpParm(myYaw, nodeidx, "yaw", time, 0);
432  myYawPer = 4;
433  if (true && ( (true&&!(((getApplyYaw()==0)))) ) )
434  graph->evalOpParm(myYawPer, nodeidx, "yawper", time, 0);
435  myIncYaw = 0;
436  if (true && ( (true&&!(((getApplyYaw()==0)))) ) )
437  graph->evalOpParm(myIncYaw, nodeidx, "incyaw", time, 0);
438  myYawAttrib = "yaw"_UTsh;
439  if (true && ( (true&&!(((getApplyYaw()==0))||((getApplyYaw()==1)&&(int64(getYawPer())!=2))||((getApplyYaw()==0))||((getApplyYaw()==1)&&(int64(getYawPer())!=2)))) ) )
440  graph->evalOpParm(myYawAttrib, nodeidx, "yawattrib", time, 0);
441  myApplyPitch = false;
442  if (true)
443  graph->evalOpParm(myApplyPitch, nodeidx, "applypitch", time, 0);
444  myPitch = 0;
445  if (true && ( (true&&!(((getApplyPitch()==0)))) ) )
446  graph->evalOpParm(myPitch, nodeidx, "pitch", time, 0);
447  myPitchPer = 4;
448  if (true && ( (true&&!(((getApplyPitch()==0)))) ) )
449  graph->evalOpParm(myPitchPer, nodeidx, "pitchper", time, 0);
450  myIncPitch = 0;
451  if (true && ( (true&&!(((getApplyPitch()==0)))) ) )
452  graph->evalOpParm(myIncPitch, nodeidx, "incpitch", time, 0);
453  myPitchAttrib = "pitch"_UTsh;
454  if (true && ( (true&&!(((getApplyPitch()==0))||((getApplyPitch()==1)&&(int64(getPitchPer())!=2))||((getApplyPitch()==0))||((getApplyPitch()==1)&&(int64(getPitchPer())!=2)))) ) )
455  graph->evalOpParm(myPitchAttrib, nodeidx, "pitchattrib", time, 0);
456  myNormalize = true;
457  if (true)
458  graph->evalOpParm(myNormalize, nodeidx, "normalize", time, 0);
459  myScale = 1;
460  if (true)
461  graph->evalOpParm(myScale, nodeidx, "scale", time, 0);
462  myStretchAroundTurns = false;
463  if (true)
464  graph->evalOpParm(myStretchAroundTurns, nodeidx, "stretcharoundturns", time, 0);
465  myMaxStretchAroundTurns = 10;
466  if (true && ( (true&&!(((getStretchAroundTurns()==0)))) ) )
467  graph->evalOpParm(myMaxStretchAroundTurns, nodeidx, "maxstretcharoundturns", time, 0);
468  myClass = 0;
469  if (true)
470  graph->evalOpParm(myClass, nodeidx, "class", time, 0);
471  myOutputXAxis = false;
472  if (true)
473  graph->evalOpParm(myOutputXAxis, nodeidx, "outputxaxis", time, 0);
474  myXAxisName = "out"_UTsh;
475  if (true && ( (true&&!(((getOutputXAxis()==0)))) ) )
476  graph->evalOpParm(myXAxisName, nodeidx, "xaxisname", time, 0);
477  myOutputYAxis = true;
478  if (true)
479  graph->evalOpParm(myOutputYAxis, nodeidx, "outputyaxis", time, 0);
480  myYAxisName = "up"_UTsh;
481  if (true && ( (true&&!(((getOutputYAxis()==0)))) ) )
482  graph->evalOpParm(myYAxisName, nodeidx, "yaxisname", time, 0);
483  myOutputZAxis = true;
484  if (true)
485  graph->evalOpParm(myOutputZAxis, nodeidx, "outputzaxis", time, 0);
486  myZAxisName = "N"_UTsh;
487  if (true && ( (true&&!(((getOutputZAxis()==0)))) ) )
488  graph->evalOpParm(myZAxisName, nodeidx, "zaxisname", time, 0);
489  myOutputTranslation = false;
490  if (true)
491  graph->evalOpParm(myOutputTranslation, nodeidx, "outputtranslation", time, 0);
492  myTranslationName = "P"_UTsh;
493  if (true && ( (true&&!(((getOutputTranslation()==0)))) ) )
494  graph->evalOpParm(myTranslationName, nodeidx, "translationname", time, 0);
495  myOutputQuaternion = false;
496  if (true)
497  graph->evalOpParm(myOutputQuaternion, nodeidx, "outputquaternion", time, 0);
498  myQuaternionName = "orient"_UTsh;
499  if (true && ( (true&&!(((getOutputQuaternion()==0)))) ) )
500  graph->evalOpParm(myQuaternionName, nodeidx, "quaternionname", time, 0);
501  myOutputTransform3 = false;
502  if (true)
503  graph->evalOpParm(myOutputTransform3, nodeidx, "outputtransform3", time, 0);
504  myTransform3Name = "transform"_UTsh;
505  if (true && ( (true&&!(((getOutputTransform3()==0)))) ) )
506  graph->evalOpParm(myTransform3Name, nodeidx, "transform3name", time, 0);
507  myOutputTransform4 = false;
508  if (true)
509  graph->evalOpParm(myOutputTransform4, nodeidx, "outputtransform4", time, 0);
510  myTransform4Name = "transform"_UTsh;
511  if (true && ( (true&&!(((getOutputTransform4()==0)))) ) )
512  graph->evalOpParm(myTransform4Name, nodeidx, "transform4name", time, 0);
513 
514  }
515 
516 
517  void loadFromOpSubclass(const LoadParms &loadparms) override
518  {
519  buildFromOp(loadparms.graph(), loadparms.nodeIdx(), loadparms.context().getTime(), loadparms.depnode());
520  }
521 
522 
523  void copyFrom(const OP_NodeParms *src) override
524  {
525  *this = *((const SOP_CurveFrameParms *)src);
526  }
527 
528  template <typename T>
529  void
530  doGetParmValue(TempIndex idx, TempIndex instance, T &value) const
531  {
532  if (idx.size() < 1)
533  return;
534  UT_ASSERT(idx.size() == instance.size()+1);
535  if (idx.size() != instance.size()+1)
536  return;
537  switch (idx[0])
538  {
539  case 0:
540  coerceValue(value, myCurveGroup);
541  break;
542  case 1:
543  coerceValue(value, myTangentType);
544  break;
545  case 2:
546  coerceValue(value, myContinuousClosed);
547  break;
548  case 3:
549  coerceValue(value, myExtrapolateEndTangents);
550  break;
551  case 4:
552  coerceValue(value, myTransformByAttribs);
553  break;
554  case 5:
555  coerceValue(value, myUpVectorType);
556  break;
557  case 6:
558  coerceValue(value, myUpVectorAtStart);
559  break;
560  case 7:
561  coerceValue(value, myUseEndUpVector);
562  break;
563  case 8:
564  coerceValue(value, myUpVectorAttrib);
565  break;
566  case 9:
567  coerceValue(value, myEndUpVectorAttrib);
568  break;
569  case 10:
570  coerceValue(value, myUpVector);
571  break;
572  case 11:
573  coerceValue(value, myEndUpVector);
574  break;
575  case 12:
576  coerceValue(value, myAdjustUpCurvature);
577  break;
578  case 13:
579  coerceValue(value, myCurvatureScale);
580  break;
581  case 14:
582  coerceValue(value, myEnableCurvatureScaleAttrib);
583  break;
584  case 15:
585  coerceValue(value, myCurvatureScaleAttrib);
586  break;
587  case 16:
588  coerceValue(value, myEnableCurvatureAttrib);
589  break;
590  case 17:
591  coerceValue(value, myCurvatureAttrib);
592  break;
593  case 18:
594  coerceValue(value, myROrd);
595  break;
596  case 19:
597  coerceValue(value, myApplyRoll);
598  break;
599  case 20:
600  coerceValue(value, myRoll);
601  break;
602  case 21:
603  coerceValue(value, myRollPer);
604  break;
605  case 22:
606  coerceValue(value, myFullTwists);
607  break;
608  case 23:
609  coerceValue(value, myIncRoll);
610  break;
611  case 24:
612  coerceValue(value, myRollAttrib);
613  break;
614  case 25:
615  coerceValue(value, myApplyYaw);
616  break;
617  case 26:
618  coerceValue(value, myYaw);
619  break;
620  case 27:
621  coerceValue(value, myYawPer);
622  break;
623  case 28:
624  coerceValue(value, myIncYaw);
625  break;
626  case 29:
627  coerceValue(value, myYawAttrib);
628  break;
629  case 30:
630  coerceValue(value, myApplyPitch);
631  break;
632  case 31:
633  coerceValue(value, myPitch);
634  break;
635  case 32:
636  coerceValue(value, myPitchPer);
637  break;
638  case 33:
639  coerceValue(value, myIncPitch);
640  break;
641  case 34:
642  coerceValue(value, myPitchAttrib);
643  break;
644  case 35:
645  coerceValue(value, myNormalize);
646  break;
647  case 36:
648  coerceValue(value, myScale);
649  break;
650  case 37:
651  coerceValue(value, myStretchAroundTurns);
652  break;
653  case 38:
654  coerceValue(value, myMaxStretchAroundTurns);
655  break;
656  case 39:
657  coerceValue(value, myClass);
658  break;
659  case 40:
660  coerceValue(value, myOutputXAxis);
661  break;
662  case 41:
663  coerceValue(value, myXAxisName);
664  break;
665  case 42:
666  coerceValue(value, myOutputYAxis);
667  break;
668  case 43:
669  coerceValue(value, myYAxisName);
670  break;
671  case 44:
672  coerceValue(value, myOutputZAxis);
673  break;
674  case 45:
675  coerceValue(value, myZAxisName);
676  break;
677  case 46:
678  coerceValue(value, myOutputTranslation);
679  break;
680  case 47:
681  coerceValue(value, myTranslationName);
682  break;
683  case 48:
684  coerceValue(value, myOutputQuaternion);
685  break;
686  case 49:
687  coerceValue(value, myQuaternionName);
688  break;
689  case 50:
690  coerceValue(value, myOutputTransform3);
691  break;
692  case 51:
693  coerceValue(value, myTransform3Name);
694  break;
695  case 52:
696  coerceValue(value, myOutputTransform4);
697  break;
698  case 53:
699  coerceValue(value, myTransform4Name);
700  break;
701 
702  }
703  }
704 
705  bool isParmColorRamp(exint idx) const override
706  {
707  switch (idx)
708  {
709 
710  }
711  return false;
712  }
713 
714  void getNestParmValue(TempIndex idx, TempIndex instance, exint &value) const override
715  { doGetParmValue(idx, instance, value); }
716  void getNestParmValue(TempIndex idx, TempIndex instance, fpreal &value) const override
717  { doGetParmValue(idx, instance, value); }
718  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector2D &value) const override
719  { doGetParmValue(idx, instance, value); }
720  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector3D &value) const override
721  { doGetParmValue(idx, instance, value); }
722  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector4D &value) const override
723  { doGetParmValue(idx, instance, value); }
724  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix2D &value) const override
725  { doGetParmValue(idx, instance, value); }
726  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
727  { doGetParmValue(idx, instance, value); }
728  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix4D &value) const override
729  { doGetParmValue(idx, instance, value); }
730  void getNestParmValue(TempIndex idx, TempIndex instance, UT_StringHolder &value) const override
731  { doGetParmValue(idx, instance, value); }
732  void getNestParmValue(TempIndex idx, TempIndex instance, UT_SharedPtr<UT_Ramp> &value) const override
733  { doGetParmValue(idx, instance, value); }
734  void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
735  { doGetParmValue(idx, instance, value); }
736 
737  template <typename T>
738  void
739  doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
740  {
741  if (idx.size() < 1)
742  return;
743  UT_ASSERT(idx.size() == instance.size()+1);
744  if (idx.size() != instance.size()+1)
745  return;
746  switch (idx[0])
747  {
748  case 0:
749  coerceValue(myCurveGroup, ( ( value ) ));
750  break;
751  case 1:
752  coerceValue(myTangentType, clampMinValue(0, clampMaxValue(4, value ) ));
753  break;
754  case 2:
755  coerceValue(myContinuousClosed, ( ( value ) ));
756  break;
757  case 3:
758  coerceValue(myExtrapolateEndTangents, ( ( value ) ));
759  break;
760  case 4:
761  coerceValue(myTransformByAttribs, ( ( value ) ));
762  break;
763  case 5:
764  coerceValue(myUpVectorType, clampMinValue(0, clampMaxValue(5, value ) ));
765  break;
766  case 6:
767  coerceValue(myUpVectorAtStart, ( ( value ) ));
768  break;
769  case 7:
770  coerceValue(myUseEndUpVector, ( ( value ) ));
771  break;
772  case 8:
773  coerceValue(myUpVectorAttrib, ( ( value ) ));
774  break;
775  case 9:
776  coerceValue(myEndUpVectorAttrib, ( ( value ) ));
777  break;
778  case 10:
779  coerceValue(myUpVector, ( ( value ) ));
780  break;
781  case 11:
782  coerceValue(myEndUpVector, ( ( value ) ));
783  break;
784  case 12:
785  coerceValue(myAdjustUpCurvature, ( ( value ) ));
786  break;
787  case 13:
788  coerceValue(myCurvatureScale, ( ( value ) ));
789  break;
790  case 14:
791  coerceValue(myEnableCurvatureScaleAttrib, clampMinValue(0, clampMaxValue(1, value ) ));
792  break;
793  case 15:
794  coerceValue(myCurvatureScaleAttrib, ( ( value ) ));
795  break;
796  case 16:
797  coerceValue(myEnableCurvatureAttrib, ( ( value ) ));
798  break;
799  case 17:
800  coerceValue(myCurvatureAttrib, ( ( value ) ));
801  break;
802  case 18:
803  coerceValue(myROrd, clampMinValue(0, clampMaxValue(5, value ) ));
804  break;
805  case 19:
806  coerceValue(myApplyRoll, ( ( value ) ));
807  break;
808  case 20:
809  coerceValue(myRoll, ( ( value ) ));
810  break;
811  case 21:
812  coerceValue(myRollPer, clampMinValue(0, clampMaxValue(4, value ) ));
813  break;
814  case 22:
815  coerceValue(myFullTwists, ( ( value ) ));
816  break;
817  case 23:
818  coerceValue(myIncRoll, ( ( value ) ));
819  break;
820  case 24:
821  coerceValue(myRollAttrib, ( ( value ) ));
822  break;
823  case 25:
824  coerceValue(myApplyYaw, ( ( value ) ));
825  break;
826  case 26:
827  coerceValue(myYaw, ( ( value ) ));
828  break;
829  case 27:
830  coerceValue(myYawPer, clampMinValue(0, clampMaxValue(4, value ) ));
831  break;
832  case 28:
833  coerceValue(myIncYaw, ( ( value ) ));
834  break;
835  case 29:
836  coerceValue(myYawAttrib, ( ( value ) ));
837  break;
838  case 30:
839  coerceValue(myApplyPitch, ( ( value ) ));
840  break;
841  case 31:
842  coerceValue(myPitch, ( ( value ) ));
843  break;
844  case 32:
845  coerceValue(myPitchPer, clampMinValue(0, clampMaxValue(4, value ) ));
846  break;
847  case 33:
848  coerceValue(myIncPitch, ( ( value ) ));
849  break;
850  case 34:
851  coerceValue(myPitchAttrib, ( ( value ) ));
852  break;
853  case 35:
854  coerceValue(myNormalize, ( ( value ) ));
855  break;
856  case 36:
857  coerceValue(myScale, ( ( value ) ));
858  break;
859  case 37:
860  coerceValue(myStretchAroundTurns, ( ( value ) ));
861  break;
862  case 38:
863  coerceValue(myMaxStretchAroundTurns, clampMinValue(1, ( value ) ));
864  break;
865  case 39:
866  coerceValue(myClass, clampMinValue(0, clampMaxValue(1, value ) ));
867  break;
868  case 40:
869  coerceValue(myOutputXAxis, ( ( value ) ));
870  break;
871  case 41:
872  coerceValue(myXAxisName, ( ( value ) ));
873  break;
874  case 42:
875  coerceValue(myOutputYAxis, ( ( value ) ));
876  break;
877  case 43:
878  coerceValue(myYAxisName, ( ( value ) ));
879  break;
880  case 44:
881  coerceValue(myOutputZAxis, ( ( value ) ));
882  break;
883  case 45:
884  coerceValue(myZAxisName, ( ( value ) ));
885  break;
886  case 46:
887  coerceValue(myOutputTranslation, ( ( value ) ));
888  break;
889  case 47:
890  coerceValue(myTranslationName, ( ( value ) ));
891  break;
892  case 48:
893  coerceValue(myOutputQuaternion, ( ( value ) ));
894  break;
895  case 49:
896  coerceValue(myQuaternionName, ( ( value ) ));
897  break;
898  case 50:
899  coerceValue(myOutputTransform3, ( ( value ) ));
900  break;
901  case 51:
902  coerceValue(myTransform3Name, ( ( value ) ));
903  break;
904  case 52:
905  coerceValue(myOutputTransform4, ( ( value ) ));
906  break;
907  case 53:
908  coerceValue(myTransform4Name, ( ( value ) ));
909  break;
910 
911  }
912  }
913 
914  void setNestParmValue(TempIndex idx, TempIndex instance, const exint &value) override
915  { doSetParmValue(idx, instance, value); }
916  void setNestParmValue(TempIndex idx, TempIndex instance, const fpreal &value) override
917  { doSetParmValue(idx, instance, value); }
918  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector2D &value) override
919  { doSetParmValue(idx, instance, value); }
920  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector3D &value) override
921  { doSetParmValue(idx, instance, value); }
922  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector4D &value) override
923  { doSetParmValue(idx, instance, value); }
924  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix2D &value) override
925  { doSetParmValue(idx, instance, value); }
926  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix3D &value) override
927  { doSetParmValue(idx, instance, value); }
928  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix4D &value) override
929  { doSetParmValue(idx, instance, value); }
930  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_StringHolder &value) override
931  { doSetParmValue(idx, instance, value); }
932  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_SharedPtr<UT_Ramp> &value) override
933  { doSetParmValue(idx, instance, value); }
934  void setNestParmValue(TempIndex idx, TempIndex instance, const PRM_DataItemHandle &value) override
935  { doSetParmValue(idx, instance, value); }
936 
937  exint getNestNumParms(TempIndex idx) const override
938  {
939  if (idx.size() == 0)
940  return 54;
941  switch (idx[0])
942  {
943 
944  }
945  // Invalid
946  return 0;
947  }
948 
949  const char *getNestParmName(TempIndex fieldnum) const override
950  {
951  if (fieldnum.size() < 1)
952  return 0;
953  switch (fieldnum[0])
954  {
955  case 0:
956  return "group";
957  case 1:
958  return "tangenttype";
959  case 2:
960  return "continuousclosed";
961  case 3:
962  return "extrapolateendtangents";
963  case 4:
964  return "transformbyattribs";
965  case 5:
966  return "upvectortype";
967  case 6:
968  return "upvectoratstart";
969  case 7:
970  return "useendupvector";
971  case 8:
972  return "upvectorattrib";
973  case 9:
974  return "endupvectorattrib";
975  case 10:
976  return "upvector";
977  case 11:
978  return "endupvector";
979  case 12:
980  return "adjustupcurvature";
981  case 13:
982  return "curvaturescale";
983  case 14:
984  return "enablecurvaturescaleattrib";
985  case 15:
986  return "curvaturescaleattrib";
987  case 16:
988  return "enablecurvatureattrib";
989  case 17:
990  return "curvatureattrib";
991  case 18:
992  return "rOrd";
993  case 19:
994  return "applyroll";
995  case 20:
996  return "roll";
997  case 21:
998  return "rollper";
999  case 22:
1000  return "fulltwists";
1001  case 23:
1002  return "incroll";
1003  case 24:
1004  return "rollattrib";
1005  case 25:
1006  return "applyyaw";
1007  case 26:
1008  return "yaw";
1009  case 27:
1010  return "yawper";
1011  case 28:
1012  return "incyaw";
1013  case 29:
1014  return "yawattrib";
1015  case 30:
1016  return "applypitch";
1017  case 31:
1018  return "pitch";
1019  case 32:
1020  return "pitchper";
1021  case 33:
1022  return "incpitch";
1023  case 34:
1024  return "pitchattrib";
1025  case 35:
1026  return "normalize";
1027  case 36:
1028  return "scale";
1029  case 37:
1030  return "stretcharoundturns";
1031  case 38:
1032  return "maxstretcharoundturns";
1033  case 39:
1034  return "class";
1035  case 40:
1036  return "outputxaxis";
1037  case 41:
1038  return "xaxisname";
1039  case 42:
1040  return "outputyaxis";
1041  case 43:
1042  return "yaxisname";
1043  case 44:
1044  return "outputzaxis";
1045  case 45:
1046  return "zaxisname";
1047  case 46:
1048  return "outputtranslation";
1049  case 47:
1050  return "translationname";
1051  case 48:
1052  return "outputquaternion";
1053  case 49:
1054  return "quaternionname";
1055  case 50:
1056  return "outputtransform3";
1057  case 51:
1058  return "transform3name";
1059  case 52:
1060  return "outputtransform4";
1061  case 53:
1062  return "transform4name";
1063 
1064  }
1065  return 0;
1066  }
1067 
1068  ParmType getNestParmType(TempIndex fieldnum) const override
1069  {
1070  if (fieldnum.size() < 1)
1071  return PARM_UNSUPPORTED;
1072  switch (fieldnum[0])
1073  {
1074  case 0:
1075  return PARM_STRING;
1076  case 1:
1077  return PARM_INTEGER;
1078  case 2:
1079  return PARM_INTEGER;
1080  case 3:
1081  return PARM_INTEGER;
1082  case 4:
1083  return PARM_INTEGER;
1084  case 5:
1085  return PARM_INTEGER;
1086  case 6:
1087  return PARM_INTEGER;
1088  case 7:
1089  return PARM_INTEGER;
1090  case 8:
1091  return PARM_STRING;
1092  case 9:
1093  return PARM_STRING;
1094  case 10:
1095  return PARM_VECTOR3;
1096  case 11:
1097  return PARM_VECTOR3;
1098  case 12:
1099  return PARM_INTEGER;
1100  case 13:
1101  return PARM_FLOAT;
1102  case 14:
1103  return PARM_INTEGER;
1104  case 15:
1105  return PARM_STRING;
1106  case 16:
1107  return PARM_INTEGER;
1108  case 17:
1109  return PARM_STRING;
1110  case 18:
1111  return PARM_INTEGER;
1112  case 19:
1113  return PARM_INTEGER;
1114  case 20:
1115  return PARM_FLOAT;
1116  case 21:
1117  return PARM_INTEGER;
1118  case 22:
1119  return PARM_INTEGER;
1120  case 23:
1121  return PARM_FLOAT;
1122  case 24:
1123  return PARM_STRING;
1124  case 25:
1125  return PARM_INTEGER;
1126  case 26:
1127  return PARM_FLOAT;
1128  case 27:
1129  return PARM_INTEGER;
1130  case 28:
1131  return PARM_FLOAT;
1132  case 29:
1133  return PARM_STRING;
1134  case 30:
1135  return PARM_INTEGER;
1136  case 31:
1137  return PARM_FLOAT;
1138  case 32:
1139  return PARM_INTEGER;
1140  case 33:
1141  return PARM_FLOAT;
1142  case 34:
1143  return PARM_STRING;
1144  case 35:
1145  return PARM_INTEGER;
1146  case 36:
1147  return PARM_FLOAT;
1148  case 37:
1149  return PARM_INTEGER;
1150  case 38:
1151  return PARM_FLOAT;
1152  case 39:
1153  return PARM_INTEGER;
1154  case 40:
1155  return PARM_INTEGER;
1156  case 41:
1157  return PARM_STRING;
1158  case 42:
1159  return PARM_INTEGER;
1160  case 43:
1161  return PARM_STRING;
1162  case 44:
1163  return PARM_INTEGER;
1164  case 45:
1165  return PARM_STRING;
1166  case 46:
1167  return PARM_INTEGER;
1168  case 47:
1169  return PARM_STRING;
1170  case 48:
1171  return PARM_INTEGER;
1172  case 49:
1173  return PARM_STRING;
1174  case 50:
1175  return PARM_INTEGER;
1176  case 51:
1177  return PARM_STRING;
1178  case 52:
1179  return PARM_INTEGER;
1180  case 53:
1181  return PARM_STRING;
1182 
1183  }
1184  return PARM_UNSUPPORTED;
1185  }
1186 
1187  // Boiler plate to load individual types.
1188  static void loadData(UT_IStream &is, int64 &v)
1189  { is.bread(&v, 1); }
1190  static void loadData(UT_IStream &is, bool &v)
1191  { int64 iv; is.bread(&iv, 1); v = iv; }
1192  static void loadData(UT_IStream &is, fpreal64 &v)
1193  { is.bread<fpreal64>(&v, 1); }
1194  static void loadData(UT_IStream &is, UT_Vector2D &v)
1195  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1); }
1196  static void loadData(UT_IStream &is, UT_Vector3D &v)
1197  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
1198  is.bread<fpreal64>(&v.z(), 1); }
1199  static void loadData(UT_IStream &is, UT_Vector4D &v)
1200  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
1201  is.bread<fpreal64>(&v.z(), 1); is.bread<fpreal64>(&v.w(), 1); }
1202  static void loadData(UT_IStream &is, UT_Matrix2D &v)
1203  { for (int r = 0; r < 2; r++) for (int c = 0; c < 2; c++) is.bread<fpreal64>(&v(r, c), 1); }
1204  static void loadData(UT_IStream &is, UT_Matrix3D &v)
1205  { for (int r = 0; r < 3; r++) for (int c = 0; c < 3; c++) is.bread<fpreal64>(&v(r, c), 1); }
1206  static void loadData(UT_IStream &is, UT_Matrix4D &v)
1207  { for (int r = 0; r < 4; r++) for (int c = 0; c < 4; c++) is.bread<fpreal64>(&v(r, c), 1); }
1208  static void loadData(UT_IStream &is, UT_Vector2I &v)
1209  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1); }
1210  static void loadData(UT_IStream &is, UT_Vector3I &v)
1211  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
1212  is.bread<int64>(&v.z(), 1); }
1213  static void loadData(UT_IStream &is, UT_Vector4I &v)
1214  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
1215  is.bread<int64>(&v.z(), 1); is.bread<int64>(&v.w(), 1); }
1217  { is.bread(v); }
1219  { UT_StringHolder rampdata;
1220  loadData(is, rampdata);
1221  if (rampdata.isstring())
1222  {
1223  v.reset(new UT_Ramp());
1224  UT_IStream istr((const char *) rampdata, rampdata.length(), UT_ISTREAM_ASCII);
1225  v->load(istr);
1226  }
1227  else v.reset();
1228  }
1231  loadData(is, data);
1232  if (data.isstring())
1233  {
1234  // Find the data type.
1235  const char *colon = UT_StringWrap(data).findChar(':');
1236  if (colon)
1237  {
1238  int typelen = colon - data.buffer();
1240  type.strncpy(data.buffer(), typelen);
1241  UT_IStream istr(((const char *) data) + typelen + 1, data.length() - (typelen + 1), UT_ISTREAM_BINARY);
1242 
1243  v = PRM_DataFactory::parseBinary(type.buffer(), istr);
1244  }
1245  }
1246  else v.reset();
1247  }
1248 
1249  static void saveData(std::ostream &os, int64 v)
1250  { UTwrite(os, &v); }
1251  static void saveData(std::ostream &os, bool v)
1252  { int64 iv = v; UTwrite(os, &iv); }
1253  static void saveData(std::ostream &os, fpreal64 v)
1254  { UTwrite<fpreal64>(os, &v); }
1255  static void saveData(std::ostream &os, UT_Vector2D v)
1256  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y()); }
1257  static void saveData(std::ostream &os, UT_Vector3D v)
1258  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
1259  UTwrite<fpreal64>(os, &v.z()); }
1260  static void saveData(std::ostream &os, UT_Vector4D v)
1261  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
1262  UTwrite<fpreal64>(os, &v.z()); UTwrite<fpreal64>(os, &v.w()); }
1263  static void saveData(std::ostream &os, UT_Matrix2D v)
1265  static void saveData(std::ostream &os, UT_Matrix3D v)
1267  static void saveData(std::ostream &os, UT_Matrix4D v)
1269  static void saveData(std::ostream &os, UT_StringHolder s)
1270  { UT_StringWrap(s).saveBinary(os); }
1271  static void saveData(std::ostream &os, UT_SharedPtr<UT_Ramp> s)
1273  UT_OStringStream ostr;
1274  if (s) s->save(ostr);
1275  result = ostr.str();
1276  saveData(os, result);
1277  }
1278  static void saveData(std::ostream &os, PRM_DataItemHandle s)
1280  UT_OStringStream ostr;
1281  if (s)
1282  {
1283  ostr << s->getDataTypeToken();
1284  ostr << ":";
1285  s->saveBinary(ostr);
1286  }
1287  result = ostr.str();
1288  saveData(os, result);
1289  }
1290 
1291 
1292  void save(std::ostream &os) const
1293  {
1294  int32 v = version();
1295  UTwrite(os, &v);
1296  saveData(os, myCurveGroup);
1297  saveData(os, myTangentType);
1298  saveData(os, myContinuousClosed);
1299  saveData(os, myExtrapolateEndTangents);
1300  saveData(os, myTransformByAttribs);
1301  saveData(os, myUpVectorType);
1302  saveData(os, myUpVectorAtStart);
1303  saveData(os, myUseEndUpVector);
1304  saveData(os, myUpVectorAttrib);
1305  saveData(os, myEndUpVectorAttrib);
1306  saveData(os, myUpVector);
1307  saveData(os, myEndUpVector);
1308  saveData(os, myAdjustUpCurvature);
1309  saveData(os, myCurvatureScale);
1310  saveData(os, myEnableCurvatureScaleAttrib);
1311  saveData(os, myCurvatureScaleAttrib);
1312  saveData(os, myEnableCurvatureAttrib);
1313  saveData(os, myCurvatureAttrib);
1314  saveData(os, myROrd);
1315  saveData(os, myApplyRoll);
1316  saveData(os, myRoll);
1317  saveData(os, myRollPer);
1318  saveData(os, myFullTwists);
1319  saveData(os, myIncRoll);
1320  saveData(os, myRollAttrib);
1321  saveData(os, myApplyYaw);
1322  saveData(os, myYaw);
1323  saveData(os, myYawPer);
1324  saveData(os, myIncYaw);
1325  saveData(os, myYawAttrib);
1326  saveData(os, myApplyPitch);
1327  saveData(os, myPitch);
1328  saveData(os, myPitchPer);
1329  saveData(os, myIncPitch);
1330  saveData(os, myPitchAttrib);
1331  saveData(os, myNormalize);
1332  saveData(os, myScale);
1333  saveData(os, myStretchAroundTurns);
1334  saveData(os, myMaxStretchAroundTurns);
1335  saveData(os, myClass);
1336  saveData(os, myOutputXAxis);
1337  saveData(os, myXAxisName);
1338  saveData(os, myOutputYAxis);
1339  saveData(os, myYAxisName);
1340  saveData(os, myOutputZAxis);
1341  saveData(os, myZAxisName);
1342  saveData(os, myOutputTranslation);
1343  saveData(os, myTranslationName);
1344  saveData(os, myOutputQuaternion);
1345  saveData(os, myQuaternionName);
1346  saveData(os, myOutputTransform3);
1347  saveData(os, myTransform3Name);
1348  saveData(os, myOutputTransform4);
1349  saveData(os, myTransform4Name);
1350 
1351  }
1352 
1353  bool load(UT_IStream &is)
1354  {
1355  int32 v;
1356  is.bread(&v, 1);
1357  if (version() != v)
1358  {
1359  // Fail incompatible versions
1360  return false;
1361  }
1362  loadData(is, myCurveGroup);
1363  loadData(is, myTangentType);
1364  loadData(is, myContinuousClosed);
1365  loadData(is, myExtrapolateEndTangents);
1366  loadData(is, myTransformByAttribs);
1367  loadData(is, myUpVectorType);
1368  loadData(is, myUpVectorAtStart);
1369  loadData(is, myUseEndUpVector);
1370  loadData(is, myUpVectorAttrib);
1371  loadData(is, myEndUpVectorAttrib);
1372  loadData(is, myUpVector);
1373  loadData(is, myEndUpVector);
1374  loadData(is, myAdjustUpCurvature);
1375  loadData(is, myCurvatureScale);
1376  loadData(is, myEnableCurvatureScaleAttrib);
1377  loadData(is, myCurvatureScaleAttrib);
1378  loadData(is, myEnableCurvatureAttrib);
1379  loadData(is, myCurvatureAttrib);
1380  loadData(is, myROrd);
1381  loadData(is, myApplyRoll);
1382  loadData(is, myRoll);
1383  loadData(is, myRollPer);
1384  loadData(is, myFullTwists);
1385  loadData(is, myIncRoll);
1386  loadData(is, myRollAttrib);
1387  loadData(is, myApplyYaw);
1388  loadData(is, myYaw);
1389  loadData(is, myYawPer);
1390  loadData(is, myIncYaw);
1391  loadData(is, myYawAttrib);
1392  loadData(is, myApplyPitch);
1393  loadData(is, myPitch);
1394  loadData(is, myPitchPer);
1395  loadData(is, myIncPitch);
1396  loadData(is, myPitchAttrib);
1397  loadData(is, myNormalize);
1398  loadData(is, myScale);
1399  loadData(is, myStretchAroundTurns);
1400  loadData(is, myMaxStretchAroundTurns);
1401  loadData(is, myClass);
1402  loadData(is, myOutputXAxis);
1403  loadData(is, myXAxisName);
1404  loadData(is, myOutputYAxis);
1405  loadData(is, myYAxisName);
1406  loadData(is, myOutputZAxis);
1407  loadData(is, myZAxisName);
1408  loadData(is, myOutputTranslation);
1409  loadData(is, myTranslationName);
1410  loadData(is, myOutputQuaternion);
1411  loadData(is, myQuaternionName);
1412  loadData(is, myOutputTransform3);
1413  loadData(is, myTransform3Name);
1414  loadData(is, myOutputTransform4);
1415  loadData(is, myTransform4Name);
1416 
1417  return true;
1418  }
1419 
1420  const UT_StringHolder & getCurveGroup() const { return myCurveGroup; }
1421  void setCurveGroup(const UT_StringHolder & val) { myCurveGroup = val; }
1423  {
1424  SOP_Node *thissop = cookparms.getNode();
1425  if (!thissop) return getCurveGroup();
1427  OP_Utils::evalOpParm(result, thissop, "group", cookparms.getCookTime(), 0);
1428  return result;
1429  }
1430  TangentType getTangentType() const { return TangentType(myTangentType); }
1431  void setTangentType(TangentType val) { myTangentType = int64(val); }
1433  {
1434  SOP_Node *thissop = cookparms.getNode();
1435  if (!thissop) return getTangentType();
1436  int64 result;
1437  OP_Utils::evalOpParm(result, thissop, "tangenttype", cookparms.getCookTime(), 0);
1438  return TangentType(result);
1439  }
1440  bool getContinuousClosed() const { return myContinuousClosed; }
1441  void setContinuousClosed(bool val) { myContinuousClosed = val; }
1442  bool opContinuousClosed(const SOP_NodeVerb::CookParms &cookparms) const
1443  {
1444  SOP_Node *thissop = cookparms.getNode();
1445  if (!thissop) return getContinuousClosed();
1446  bool result;
1447  OP_Utils::evalOpParm(result, thissop, "continuousclosed", cookparms.getCookTime(), 0);
1448  return result;
1449  }
1450  bool getExtrapolateEndTangents() const { return myExtrapolateEndTangents; }
1451  void setExtrapolateEndTangents(bool val) { myExtrapolateEndTangents = val; }
1453  {
1454  SOP_Node *thissop = cookparms.getNode();
1455  if (!thissop) return getExtrapolateEndTangents();
1456  bool result;
1457  OP_Utils::evalOpParm(result, thissop, "extrapolateendtangents", cookparms.getCookTime(), 0);
1458  return result;
1459  }
1460  bool getTransformByAttribs() const { return myTransformByAttribs; }
1461  void setTransformByAttribs(bool val) { myTransformByAttribs = val; }
1462  bool opTransformByAttribs(const SOP_NodeVerb::CookParms &cookparms) const
1463  {
1464  SOP_Node *thissop = cookparms.getNode();
1465  if (!thissop) return getTransformByAttribs();
1466  bool result;
1467  OP_Utils::evalOpParm(result, thissop, "transformbyattribs", cookparms.getCookTime(), 0);
1468  return result;
1469  }
1470  UpVectorType getUpVectorType() const { return UpVectorType(myUpVectorType); }
1471  void setUpVectorType(UpVectorType val) { myUpVectorType = int64(val); }
1473  {
1474  SOP_Node *thissop = cookparms.getNode();
1475  if (!thissop) return getUpVectorType();
1476  int64 result;
1477  OP_Utils::evalOpParm(result, thissop, "upvectortype", cookparms.getCookTime(), 0);
1478  return UpVectorType(result);
1479  }
1480  bool getUpVectorAtStart() const { return myUpVectorAtStart; }
1481  void setUpVectorAtStart(bool val) { myUpVectorAtStart = val; }
1482  bool opUpVectorAtStart(const SOP_NodeVerb::CookParms &cookparms) const
1483  {
1484  SOP_Node *thissop = cookparms.getNode();
1485  if (!thissop) return getUpVectorAtStart();
1486  bool result;
1487  OP_Utils::evalOpParm(result, thissop, "upvectoratstart", cookparms.getCookTime(), 0);
1488  return result;
1489  }
1490  bool getUseEndUpVector() const { return myUseEndUpVector; }
1491  void setUseEndUpVector(bool val) { myUseEndUpVector = val; }
1492  bool opUseEndUpVector(const SOP_NodeVerb::CookParms &cookparms) const
1493  {
1494  SOP_Node *thissop = cookparms.getNode();
1495  if (!thissop) return getUseEndUpVector();
1496  bool result;
1497  OP_Utils::evalOpParm(result, thissop, "useendupvector", cookparms.getCookTime(), 0);
1498  return result;
1499  }
1500  const UT_StringHolder & getUpVectorAttrib() const { return myUpVectorAttrib; }
1501  void setUpVectorAttrib(const UT_StringHolder & val) { myUpVectorAttrib = val; }
1503  {
1504  SOP_Node *thissop = cookparms.getNode();
1505  if (!thissop) return getUpVectorAttrib();
1507  OP_Utils::evalOpParm(result, thissop, "upvectorattrib", cookparms.getCookTime(), 0);
1508  return result;
1509  }
1510  const UT_StringHolder & getEndUpVectorAttrib() const { return myEndUpVectorAttrib; }
1511  void setEndUpVectorAttrib(const UT_StringHolder & val) { myEndUpVectorAttrib = val; }
1513  {
1514  SOP_Node *thissop = cookparms.getNode();
1515  if (!thissop) return getEndUpVectorAttrib();
1517  OP_Utils::evalOpParm(result, thissop, "endupvectorattrib", cookparms.getCookTime(), 0);
1518  return result;
1519  }
1520  UT_Vector3D getUpVector() const { return myUpVector; }
1521  void setUpVector(UT_Vector3D val) { myUpVector = val; }
1523  {
1524  SOP_Node *thissop = cookparms.getNode();
1525  if (!thissop) return getUpVector();
1527  OP_Utils::evalOpParm(result, thissop, "upvector", cookparms.getCookTime(), 0);
1528  return result;
1529  }
1530  UT_Vector3D getEndUpVector() const { return myEndUpVector; }
1531  void setEndUpVector(UT_Vector3D val) { myEndUpVector = val; }
1533  {
1534  SOP_Node *thissop = cookparms.getNode();
1535  if (!thissop) return getEndUpVector();
1537  OP_Utils::evalOpParm(result, thissop, "endupvector", cookparms.getCookTime(), 0);
1538  return result;
1539  }
1540  bool getAdjustUpCurvature() const { return myAdjustUpCurvature; }
1541  void setAdjustUpCurvature(bool val) { myAdjustUpCurvature = val; }
1542  bool opAdjustUpCurvature(const SOP_NodeVerb::CookParms &cookparms) const
1543  {
1544  SOP_Node *thissop = cookparms.getNode();
1545  if (!thissop) return getAdjustUpCurvature();
1546  bool result;
1547  OP_Utils::evalOpParm(result, thissop, "adjustupcurvature", cookparms.getCookTime(), 0);
1548  return result;
1549  }
1550  fpreal64 getCurvatureScale() const { return myCurvatureScale; }
1551  void setCurvatureScale(fpreal64 val) { myCurvatureScale = val; }
1553  {
1554  SOP_Node *thissop = cookparms.getNode();
1555  if (!thissop) return getCurvatureScale();
1556  fpreal64 result;
1557  OP_Utils::evalOpParm(result, thissop, "curvaturescale", cookparms.getCookTime(), 0);
1558  return result;
1559  }
1561  void setEnableCurvatureScaleAttrib(EnableCurvatureScaleAttrib val) { myEnableCurvatureScaleAttrib = int64(val); }
1563  {
1564  SOP_Node *thissop = cookparms.getNode();
1565  if (!thissop) return getEnableCurvatureScaleAttrib();
1566  int64 result;
1567  OP_Utils::evalOpParm(result, thissop, "enablecurvaturescaleattrib", cookparms.getCookTime(), 0);
1568  return EnableCurvatureScaleAttrib(result);
1569  }
1570  const UT_StringHolder & getCurvatureScaleAttrib() const { return myCurvatureScaleAttrib; }
1571  void setCurvatureScaleAttrib(const UT_StringHolder & val) { myCurvatureScaleAttrib = val; }
1573  {
1574  SOP_Node *thissop = cookparms.getNode();
1575  if (!thissop) return getCurvatureScaleAttrib();
1577  OP_Utils::evalOpParm(result, thissop, "curvaturescaleattrib", cookparms.getCookTime(), 0);
1578  return result;
1579  }
1580  bool getEnableCurvatureAttrib() const { return myEnableCurvatureAttrib; }
1581  void setEnableCurvatureAttrib(bool val) { myEnableCurvatureAttrib = val; }
1583  {
1584  SOP_Node *thissop = cookparms.getNode();
1585  if (!thissop) return getEnableCurvatureAttrib();
1586  bool result;
1587  OP_Utils::evalOpParm(result, thissop, "enablecurvatureattrib", cookparms.getCookTime(), 0);
1588  return result;
1589  }
1590  const UT_StringHolder & getCurvatureAttrib() const { return myCurvatureAttrib; }
1591  void setCurvatureAttrib(const UT_StringHolder & val) { myCurvatureAttrib = val; }
1593  {
1594  SOP_Node *thissop = cookparms.getNode();
1595  if (!thissop) return getCurvatureAttrib();
1597  OP_Utils::evalOpParm(result, thissop, "curvatureattrib", cookparms.getCookTime(), 0);
1598  return result;
1599  }
1600  ROrd getROrd() const { return ROrd(myROrd); }
1601  void setROrd(ROrd val) { myROrd = int64(val); }
1602  ROrd opROrd(const SOP_NodeVerb::CookParms &cookparms) const
1603  {
1604  SOP_Node *thissop = cookparms.getNode();
1605  if (!thissop) return getROrd();
1606  int64 result;
1607  OP_Utils::evalOpParm(result, thissop, "rOrd", cookparms.getCookTime(), 0);
1608  return ROrd(result);
1609  }
1610  bool getApplyRoll() const { return myApplyRoll; }
1611  void setApplyRoll(bool val) { myApplyRoll = val; }
1612  bool opApplyRoll(const SOP_NodeVerb::CookParms &cookparms) const
1613  {
1614  SOP_Node *thissop = cookparms.getNode();
1615  if (!thissop) return getApplyRoll();
1616  bool result;
1617  OP_Utils::evalOpParm(result, thissop, "applyroll", cookparms.getCookTime(), 0);
1618  return result;
1619  }
1620  fpreal64 getRoll() const { return myRoll; }
1621  void setRoll(fpreal64 val) { myRoll = val; }
1622  fpreal64 opRoll(const SOP_NodeVerb::CookParms &cookparms) const
1623  {
1624  SOP_Node *thissop = cookparms.getNode();
1625  if (!thissop) return getRoll();
1626  fpreal64 result;
1627  OP_Utils::evalOpParm(result, thissop, "roll", cookparms.getCookTime(), 0);
1628  return result;
1629  }
1630  RollPer getRollPer() const { return RollPer(myRollPer); }
1631  void setRollPer(RollPer val) { myRollPer = int64(val); }
1633  {
1634  SOP_Node *thissop = cookparms.getNode();
1635  if (!thissop) return getRollPer();
1636  int64 result;
1637  OP_Utils::evalOpParm(result, thissop, "rollper", cookparms.getCookTime(), 0);
1638  return RollPer(result);
1639  }
1640  int64 getFullTwists() const { return myFullTwists; }
1641  void setFullTwists(int64 val) { myFullTwists = val; }
1643  {
1644  SOP_Node *thissop = cookparms.getNode();
1645  if (!thissop) return getFullTwists();
1646  int64 result;
1647  OP_Utils::evalOpParm(result, thissop, "fulltwists", cookparms.getCookTime(), 0);
1648  return result;
1649  }
1650  fpreal64 getIncRoll() const { return myIncRoll; }
1651  void setIncRoll(fpreal64 val) { myIncRoll = val; }
1653  {
1654  SOP_Node *thissop = cookparms.getNode();
1655  if (!thissop) return getIncRoll();
1656  fpreal64 result;
1657  OP_Utils::evalOpParm(result, thissop, "incroll", cookparms.getCookTime(), 0);
1658  return result;
1659  }
1660  const UT_StringHolder & getRollAttrib() const { return myRollAttrib; }
1661  void setRollAttrib(const UT_StringHolder & val) { myRollAttrib = val; }
1663  {
1664  SOP_Node *thissop = cookparms.getNode();
1665  if (!thissop) return getRollAttrib();
1667  OP_Utils::evalOpParm(result, thissop, "rollattrib", cookparms.getCookTime(), 0);
1668  return result;
1669  }
1670  bool getApplyYaw() const { return myApplyYaw; }
1671  void setApplyYaw(bool val) { myApplyYaw = val; }
1672  bool opApplyYaw(const SOP_NodeVerb::CookParms &cookparms) const
1673  {
1674  SOP_Node *thissop = cookparms.getNode();
1675  if (!thissop) return getApplyYaw();
1676  bool result;
1677  OP_Utils::evalOpParm(result, thissop, "applyyaw", cookparms.getCookTime(), 0);
1678  return result;
1679  }
1680  fpreal64 getYaw() const { return myYaw; }
1681  void setYaw(fpreal64 val) { myYaw = val; }
1682  fpreal64 opYaw(const SOP_NodeVerb::CookParms &cookparms) const
1683  {
1684  SOP_Node *thissop = cookparms.getNode();
1685  if (!thissop) return getYaw();
1686  fpreal64 result;
1687  OP_Utils::evalOpParm(result, thissop, "yaw", cookparms.getCookTime(), 0);
1688  return result;
1689  }
1690  YawPer getYawPer() const { return YawPer(myYawPer); }
1691  void setYawPer(YawPer val) { myYawPer = int64(val); }
1692  YawPer opYawPer(const SOP_NodeVerb::CookParms &cookparms) const
1693  {
1694  SOP_Node *thissop = cookparms.getNode();
1695  if (!thissop) return getYawPer();
1696  int64 result;
1697  OP_Utils::evalOpParm(result, thissop, "yawper", cookparms.getCookTime(), 0);
1698  return YawPer(result);
1699  }
1700  fpreal64 getIncYaw() const { return myIncYaw; }
1701  void setIncYaw(fpreal64 val) { myIncYaw = val; }
1703  {
1704  SOP_Node *thissop = cookparms.getNode();
1705  if (!thissop) return getIncYaw();
1706  fpreal64 result;
1707  OP_Utils::evalOpParm(result, thissop, "incyaw", cookparms.getCookTime(), 0);
1708  return result;
1709  }
1710  const UT_StringHolder & getYawAttrib() const { return myYawAttrib; }
1711  void setYawAttrib(const UT_StringHolder & val) { myYawAttrib = val; }
1713  {
1714  SOP_Node *thissop = cookparms.getNode();
1715  if (!thissop) return getYawAttrib();
1717  OP_Utils::evalOpParm(result, thissop, "yawattrib", cookparms.getCookTime(), 0);
1718  return result;
1719  }
1720  bool getApplyPitch() const { return myApplyPitch; }
1721  void setApplyPitch(bool val) { myApplyPitch = val; }
1722  bool opApplyPitch(const SOP_NodeVerb::CookParms &cookparms) const
1723  {
1724  SOP_Node *thissop = cookparms.getNode();
1725  if (!thissop) return getApplyPitch();
1726  bool result;
1727  OP_Utils::evalOpParm(result, thissop, "applypitch", cookparms.getCookTime(), 0);
1728  return result;
1729  }
1730  fpreal64 getPitch() const { return myPitch; }
1731  void setPitch(fpreal64 val) { myPitch = val; }
1732  fpreal64 opPitch(const SOP_NodeVerb::CookParms &cookparms) const
1733  {
1734  SOP_Node *thissop = cookparms.getNode();
1735  if (!thissop) return getPitch();
1736  fpreal64 result;
1737  OP_Utils::evalOpParm(result, thissop, "pitch", cookparms.getCookTime(), 0);
1738  return result;
1739  }
1740  PitchPer getPitchPer() const { return PitchPer(myPitchPer); }
1741  void setPitchPer(PitchPer val) { myPitchPer = int64(val); }
1743  {
1744  SOP_Node *thissop = cookparms.getNode();
1745  if (!thissop) return getPitchPer();
1746  int64 result;
1747  OP_Utils::evalOpParm(result, thissop, "pitchper", cookparms.getCookTime(), 0);
1748  return PitchPer(result);
1749  }
1750  fpreal64 getIncPitch() const { return myIncPitch; }
1751  void setIncPitch(fpreal64 val) { myIncPitch = val; }
1753  {
1754  SOP_Node *thissop = cookparms.getNode();
1755  if (!thissop) return getIncPitch();
1756  fpreal64 result;
1757  OP_Utils::evalOpParm(result, thissop, "incpitch", cookparms.getCookTime(), 0);
1758  return result;
1759  }
1760  const UT_StringHolder & getPitchAttrib() const { return myPitchAttrib; }
1761  void setPitchAttrib(const UT_StringHolder & val) { myPitchAttrib = val; }
1763  {
1764  SOP_Node *thissop = cookparms.getNode();
1765  if (!thissop) return getPitchAttrib();
1767  OP_Utils::evalOpParm(result, thissop, "pitchattrib", cookparms.getCookTime(), 0);
1768  return result;
1769  }
1770  bool getNormalize() const { return myNormalize; }
1771  void setNormalize(bool val) { myNormalize = val; }
1772  bool opNormalize(const SOP_NodeVerb::CookParms &cookparms) const
1773  {
1774  SOP_Node *thissop = cookparms.getNode();
1775  if (!thissop) return getNormalize();
1776  bool result;
1777  OP_Utils::evalOpParm(result, thissop, "normalize", cookparms.getCookTime(), 0);
1778  return result;
1779  }
1780  fpreal64 getScale() const { return myScale; }
1781  void setScale(fpreal64 val) { myScale = val; }
1782  fpreal64 opScale(const SOP_NodeVerb::CookParms &cookparms) const
1783  {
1784  SOP_Node *thissop = cookparms.getNode();
1785  if (!thissop) return getScale();
1786  fpreal64 result;
1787  OP_Utils::evalOpParm(result, thissop, "scale", cookparms.getCookTime(), 0);
1788  return result;
1789  }
1790  bool getStretchAroundTurns() const { return myStretchAroundTurns; }
1791  void setStretchAroundTurns(bool val) { myStretchAroundTurns = val; }
1792  bool opStretchAroundTurns(const SOP_NodeVerb::CookParms &cookparms) const
1793  {
1794  SOP_Node *thissop = cookparms.getNode();
1795  if (!thissop) return getStretchAroundTurns();
1796  bool result;
1797  OP_Utils::evalOpParm(result, thissop, "stretcharoundturns", cookparms.getCookTime(), 0);
1798  return result;
1799  }
1800  fpreal64 getMaxStretchAroundTurns() const { return myMaxStretchAroundTurns; }
1801  void setMaxStretchAroundTurns(fpreal64 val) { myMaxStretchAroundTurns = val; }
1803  {
1804  SOP_Node *thissop = cookparms.getNode();
1805  if (!thissop) return getMaxStretchAroundTurns();
1806  fpreal64 result;
1807  OP_Utils::evalOpParm(result, thissop, "maxstretcharoundturns", cookparms.getCookTime(), 0);
1808  return result;
1809  }
1810  Class getClass() const { return Class(myClass); }
1811  void setClass(Class val) { myClass = int64(val); }
1812  Class opClass(const SOP_NodeVerb::CookParms &cookparms) const
1813  {
1814  SOP_Node *thissop = cookparms.getNode();
1815  if (!thissop) return getClass();
1816  int64 result;
1817  OP_Utils::evalOpParm(result, thissop, "class", cookparms.getCookTime(), 0);
1818  return Class(result);
1819  }
1820  bool getOutputXAxis() const { return myOutputXAxis; }
1821  void setOutputXAxis(bool val) { myOutputXAxis = val; }
1822  bool opOutputXAxis(const SOP_NodeVerb::CookParms &cookparms) const
1823  {
1824  SOP_Node *thissop = cookparms.getNode();
1825  if (!thissop) return getOutputXAxis();
1826  bool result;
1827  OP_Utils::evalOpParm(result, thissop, "outputxaxis", cookparms.getCookTime(), 0);
1828  return result;
1829  }
1830  const UT_StringHolder & getXAxisName() const { return myXAxisName; }
1831  void setXAxisName(const UT_StringHolder & val) { myXAxisName = val; }
1833  {
1834  SOP_Node *thissop = cookparms.getNode();
1835  if (!thissop) return getXAxisName();
1837  OP_Utils::evalOpParm(result, thissop, "xaxisname", cookparms.getCookTime(), 0);
1838  return result;
1839  }
1840  bool getOutputYAxis() const { return myOutputYAxis; }
1841  void setOutputYAxis(bool val) { myOutputYAxis = val; }
1842  bool opOutputYAxis(const SOP_NodeVerb::CookParms &cookparms) const
1843  {
1844  SOP_Node *thissop = cookparms.getNode();
1845  if (!thissop) return getOutputYAxis();
1846  bool result;
1847  OP_Utils::evalOpParm(result, thissop, "outputyaxis", cookparms.getCookTime(), 0);
1848  return result;
1849  }
1850  const UT_StringHolder & getYAxisName() const { return myYAxisName; }
1851  void setYAxisName(const UT_StringHolder & val) { myYAxisName = val; }
1853  {
1854  SOP_Node *thissop = cookparms.getNode();
1855  if (!thissop) return getYAxisName();
1857  OP_Utils::evalOpParm(result, thissop, "yaxisname", cookparms.getCookTime(), 0);
1858  return result;
1859  }
1860  bool getOutputZAxis() const { return myOutputZAxis; }
1861  void setOutputZAxis(bool val) { myOutputZAxis = val; }
1862  bool opOutputZAxis(const SOP_NodeVerb::CookParms &cookparms) const
1863  {
1864  SOP_Node *thissop = cookparms.getNode();
1865  if (!thissop) return getOutputZAxis();
1866  bool result;
1867  OP_Utils::evalOpParm(result, thissop, "outputzaxis", cookparms.getCookTime(), 0);
1868  return result;
1869  }
1870  const UT_StringHolder & getZAxisName() const { return myZAxisName; }
1871  void setZAxisName(const UT_StringHolder & val) { myZAxisName = val; }
1873  {
1874  SOP_Node *thissop = cookparms.getNode();
1875  if (!thissop) return getZAxisName();
1877  OP_Utils::evalOpParm(result, thissop, "zaxisname", cookparms.getCookTime(), 0);
1878  return result;
1879  }
1880  bool getOutputTranslation() const { return myOutputTranslation; }
1881  void setOutputTranslation(bool val) { myOutputTranslation = val; }
1882  bool opOutputTranslation(const SOP_NodeVerb::CookParms &cookparms) const
1883  {
1884  SOP_Node *thissop = cookparms.getNode();
1885  if (!thissop) return getOutputTranslation();
1886  bool result;
1887  OP_Utils::evalOpParm(result, thissop, "outputtranslation", cookparms.getCookTime(), 0);
1888  return result;
1889  }
1890  const UT_StringHolder & getTranslationName() const { return myTranslationName; }
1891  void setTranslationName(const UT_StringHolder & val) { myTranslationName = val; }
1893  {
1894  SOP_Node *thissop = cookparms.getNode();
1895  if (!thissop) return getTranslationName();
1897  OP_Utils::evalOpParm(result, thissop, "translationname", cookparms.getCookTime(), 0);
1898  return result;
1899  }
1900  bool getOutputQuaternion() const { return myOutputQuaternion; }
1901  void setOutputQuaternion(bool val) { myOutputQuaternion = val; }
1902  bool opOutputQuaternion(const SOP_NodeVerb::CookParms &cookparms) const
1903  {
1904  SOP_Node *thissop = cookparms.getNode();
1905  if (!thissop) return getOutputQuaternion();
1906  bool result;
1907  OP_Utils::evalOpParm(result, thissop, "outputquaternion", cookparms.getCookTime(), 0);
1908  return result;
1909  }
1910  const UT_StringHolder & getQuaternionName() const { return myQuaternionName; }
1911  void setQuaternionName(const UT_StringHolder & val) { myQuaternionName = val; }
1913  {
1914  SOP_Node *thissop = cookparms.getNode();
1915  if (!thissop) return getQuaternionName();
1917  OP_Utils::evalOpParm(result, thissop, "quaternionname", cookparms.getCookTime(), 0);
1918  return result;
1919  }
1920  bool getOutputTransform3() const { return myOutputTransform3; }
1921  void setOutputTransform3(bool val) { myOutputTransform3 = val; }
1922  bool opOutputTransform3(const SOP_NodeVerb::CookParms &cookparms) const
1923  {
1924  SOP_Node *thissop = cookparms.getNode();
1925  if (!thissop) return getOutputTransform3();
1926  bool result;
1927  OP_Utils::evalOpParm(result, thissop, "outputtransform3", cookparms.getCookTime(), 0);
1928  return result;
1929  }
1930  const UT_StringHolder & getTransform3Name() const { return myTransform3Name; }
1931  void setTransform3Name(const UT_StringHolder & val) { myTransform3Name = val; }
1933  {
1934  SOP_Node *thissop = cookparms.getNode();
1935  if (!thissop) return getTransform3Name();
1937  OP_Utils::evalOpParm(result, thissop, "transform3name", cookparms.getCookTime(), 0);
1938  return result;
1939  }
1940  bool getOutputTransform4() const { return myOutputTransform4; }
1941  void setOutputTransform4(bool val) { myOutputTransform4 = val; }
1942  bool opOutputTransform4(const SOP_NodeVerb::CookParms &cookparms) const
1943  {
1944  SOP_Node *thissop = cookparms.getNode();
1945  if (!thissop) return getOutputTransform4();
1946  bool result;
1947  OP_Utils::evalOpParm(result, thissop, "outputtransform4", cookparms.getCookTime(), 0);
1948  return result;
1949  }
1950  const UT_StringHolder & getTransform4Name() const { return myTransform4Name; }
1951  void setTransform4Name(const UT_StringHolder & val) { myTransform4Name = val; }
1953  {
1954  SOP_Node *thissop = cookparms.getNode();
1955  if (!thissop) return getTransform4Name();
1957  OP_Utils::evalOpParm(result, thissop, "transform4name", cookparms.getCookTime(), 0);
1958  return result;
1959  }
1960 
1961 private:
1962  UT_StringHolder myCurveGroup;
1963  int64 myTangentType;
1964  bool myContinuousClosed;
1965  bool myExtrapolateEndTangents;
1966  bool myTransformByAttribs;
1967  int64 myUpVectorType;
1968  bool myUpVectorAtStart;
1969  bool myUseEndUpVector;
1970  UT_StringHolder myUpVectorAttrib;
1971  UT_StringHolder myEndUpVectorAttrib;
1972  UT_Vector3D myUpVector;
1973  UT_Vector3D myEndUpVector;
1974  bool myAdjustUpCurvature;
1975  fpreal64 myCurvatureScale;
1976  int64 myEnableCurvatureScaleAttrib;
1977  UT_StringHolder myCurvatureScaleAttrib;
1978  bool myEnableCurvatureAttrib;
1979  UT_StringHolder myCurvatureAttrib;
1980  int64 myROrd;
1981  bool myApplyRoll;
1982  fpreal64 myRoll;
1983  int64 myRollPer;
1984  int64 myFullTwists;
1985  fpreal64 myIncRoll;
1986  UT_StringHolder myRollAttrib;
1987  bool myApplyYaw;
1988  fpreal64 myYaw;
1989  int64 myYawPer;
1990  fpreal64 myIncYaw;
1991  UT_StringHolder myYawAttrib;
1992  bool myApplyPitch;
1993  fpreal64 myPitch;
1994  int64 myPitchPer;
1995  fpreal64 myIncPitch;
1996  UT_StringHolder myPitchAttrib;
1997  bool myNormalize;
1998  fpreal64 myScale;
1999  bool myStretchAroundTurns;
2000  fpreal64 myMaxStretchAroundTurns;
2001  int64 myClass;
2002  bool myOutputXAxis;
2003  UT_StringHolder myXAxisName;
2004  bool myOutputYAxis;
2005  UT_StringHolder myYAxisName;
2006  bool myOutputZAxis;
2007  UT_StringHolder myZAxisName;
2008  bool myOutputTranslation;
2009  UT_StringHolder myTranslationName;
2010  bool myOutputQuaternion;
2011  UT_StringHolder myQuaternionName;
2012  bool myOutputTransform3;
2013  UT_StringHolder myTransform3Name;
2014  bool myOutputTransform4;
2015  UT_StringHolder myTransform4Name;
2016 
2017 };
void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
static void loadData(UT_IStream &is, UT_Matrix3D &v)
void getNestParmValue(TempIndex idx, TempIndex instance, exint &value) const override
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_StringHolder &value) override
bool opOutputTranslation(const SOP_NodeVerb::CookParms &cookparms) const
void setStretchAroundTurns(bool val)
void setTranslationName(const UT_StringHolder &val)
void setCurvatureScaleAttrib(const UT_StringHolder &val)
TangentType opTangentType(const SOP_NodeVerb::CookParms &cookparms) const
void doGetParmValue(TempIndex idx, TempIndex instance, T &value) const
void setOutputTransform3(bool val)
fpreal64 opIncPitch(const SOP_NodeVerb::CookParms &cookparms) const
void setContinuousClosed(bool val)
void setEnableCurvatureScaleAttrib(EnableCurvatureScaleAttrib val)
static void saveData(std::ostream &os, UT_Matrix2D v)
UpVectorType opUpVectorType(const SOP_NodeVerb::CookParms &cookparms) const
void setOutputTransform4(bool val)
const UT_StringHolder & getQuaternionName() const
int int32
Definition: SYS_Types.h:39
SOP_Node * getNode() const
Definition: SOP_NodeVerb.h:347
void getNestParmValue(TempIndex idx, TempIndex instance, fpreal &value) const override
bool opOutputTransform4(const SOP_NodeVerb::CookParms &cookparms) const
bool opExtrapolateEndTangents(const SOP_NodeVerb::CookParms &cookparms) const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
const char * getNestParmName(TempIndex fieldnum) const override
void getNestParmValue(TempIndex idx, TempIndex instance, UT_SharedPtr< UT_Ramp > &value) const override
Class opClass(const SOP_NodeVerb::CookParms &cookparms) const
void setUpVectorAtStart(bool val)
void doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
UT_Vector3D opUpVector(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, UT_Vector2I &v)
const UT_StringHolder & getYawAttrib() const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector4D &value) override
bool getOutputTransform3() const
void setExtrapolateEndTangents(bool val)
const UT_StringHolder & getTransform4Name() const
exint bread(int32 *buffer, exint asize=1)
GLboolean * data
Definition: glcorearb.h:131
static void loadData(UT_IStream &is, UT_Vector4D &v)
GT_API const UT_StringHolder time
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector4.h:493
UT_Vector3D getEndUpVector() const
const GLdouble * v
Definition: glcorearb.h:837
fpreal getTime() const
Definition: OP_Context.h:62
void setTransform3Name(const UT_StringHolder &val)
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector2D &value) override
void setNestParmValue(TempIndex idx, TempIndex instance, const PRM_DataItemHandle &value) override
bool opOutputTransform3(const SOP_NodeVerb::CookParms &cookparms) const
UT_Vector3D getUpVector() const
const OP_Context & context() const
Definition: OP_NodeParms.h:97
fpreal64 opRoll(const SOP_NodeVerb::CookParms &cookparms) const
void setRoll(fpreal64 val)
static void loadData(UT_IStream &is, fpreal64 &v)
fpreal64 opIncYaw(const SOP_NodeVerb::CookParms &cookparms) const
constexpr SYS_FORCE_INLINE T & z() noexcept
Definition: UT_Vector3.h:667
int64 exint
Definition: SYS_Types.h:125
const UT_StringHolder & getYAxisName() const
bool opUpVectorAtStart(const SOP_NodeVerb::CookParms &cookparms) const
SYS_FORCE_INLINE const char * buffer() const
GLdouble s
Definition: glad.h:3009
void setXAxisName(const UT_StringHolder &val)
An output stream object that owns its own string buffer storage.
bool getTransformByAttribs() const
void setTransform4Name(const UT_StringHolder &val)
const UT_StringHolder & getRollAttrib() const
void setEndUpVectorAttrib(const UT_StringHolder &val)
**But if you need a result
Definition: thread.h:613
void setOutputTranslation(bool val)
static void loadData(UT_IStream &is, UT_Vector4I &v)
void setUpVectorType(UpVectorType val)
bool operator==(const SOP_CurveFrameParms &src) const
static void saveData(std::ostream &os, PRM_DataItemHandle s)
static void loadData(UT_IStream &is, UT_Matrix2D &v)
static void saveData(std::ostream &os, UT_StringHolder s)
UT_StringHolder opTransform4Name(const SOP_NodeVerb::CookParms &cookparms) const
exint nodeIdx() const
Definition: OP_NodeParms.h:95
static PRM_DataItemHandle parseBinary(const char *type, UT_IStream &is)
const UT_WorkBuffer & str()
Returns a read-only reference to the underlying UT_WorkBuffer.
static void saveData(std::ostream &os, UT_Vector3D v)
void save(std::ostream &os) const
const UT_StringHolder & getTranslationName() const
void setYawPer(YawPer val)
const UT_StringHolder & getUpVectorAttrib() const
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector4.h:491
void setUpVector(UT_Vector3D val)
bool load(UT_IStream &is)
void setEndUpVector(UT_Vector3D val)
void setIncPitch(fpreal64 val)
bool opOutputQuaternion(const SOP_NodeVerb::CookParms &cookparms) const
static void saveData(std::ostream &os, UT_SharedPtr< UT_Ramp > s)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector3D &value) const override
double fpreal64
Definition: SYS_Types.h:201
void setPitchPer(PitchPer val)
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector2.h:423
PitchPer getPitchPer() const
static void saveData(std::ostream &os, UT_Vector4D v)
static void saveData(std::ostream &os, bool v)
bool operator==(const BaseDimensions< T > &a, const BaseDimensions< Y > &b)
Definition: Dimensions.h:137
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix4D &value) override
ParmType getNestParmType(TempIndex fieldnum) const override
void setZAxisName(const UT_StringHolder &val)
bool getOutputQuaternion() const
bool getUpVectorAtStart() const
EnableCurvatureScaleAttrib getEnableCurvatureScaleAttrib() const
fpreal64 opCurvatureScale(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 getIncYaw() const
UT_StringHolder opCurvatureAttrib(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 opYaw(const SOP_NodeVerb::CookParms &cookparms) const
UpVectorType getUpVectorType() const
bool getContinuousClosed() const
exint length() const
void setCurveGroup(const UT_StringHolder &val)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_StringHolder &value) const override
bool opStretchAroundTurns(const SOP_NodeVerb::CookParms &cookparms) const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector2D &value) 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
bool opAdjustUpCurvature(const SOP_NodeVerb::CookParms &cookparms) const
constexpr SYS_FORCE_INLINE T & z() noexcept
Definition: UT_Vector4.h:495
bool isParmColorRamp(exint idx) const override
EnableCurvatureScaleAttrib opEnableCurvatureScaleAttrib(const SOP_NodeVerb::CookParms &cookparms) const
const OP_GraphProxy * graph() const
Definition: OP_NodeParms.h:94
fpreal64 getIncRoll() const
#define SYS_FORCE_INLINE
Definition: SYS_Inline.h:45
UT_StringHolder opTransform3Name(const SOP_NodeVerb::CookParms &cookparms) const
void setCurvatureScale(fpreal64 val)
static void loadData(UT_IStream &is, bool &v)
void setCurvatureAttrib(const UT_StringHolder &val)
UT_StringHolder opCurvatureScaleAttrib(const SOP_NodeVerb::CookParms &cookparms) const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_SharedPtr< UT_Ramp > &value) override
static void saveData(std::ostream &os, UT_Matrix4D v)
void setPitchAttrib(const UT_StringHolder &val)
const UT_StringHolder & getZAxisName() const
void setYawAttrib(const UT_StringHolder &val)
RollPer opRollPer(const SOP_NodeVerb::CookParms &cookparms) const
long long int64
Definition: SYS_Types.h:116
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix3D &value) override
TangentType getTangentType() const
bool getEnableCurvatureAttrib() const
static void loadData(UT_IStream &is, PRM_DataItemHandle &v)
UT_Vector3T< fpreal64 > UT_Vector3D
static void saveData(std::ostream &os, fpreal64 v)
UT_Vector3D opEndUpVector(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opEndUpVectorAttrib(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getCurveGroup() const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector3D &value) override
UT_StringHolder opRollAttrib(const SOP_NodeVerb::CookParms &cookparms) const
void setOutputQuaternion(bool val)
bool opApplyRoll(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, UT_Vector3I &v)
virtual void evalOpParm(int64 &v, NodeIdx node, const char *parmname, fpreal time, DEP_MicroNode *depnode) const =0
void setIncYaw(fpreal64 val)
bool opApplyYaw(const SOP_NodeVerb::CookParms &cookparms) const
bool opUseEndUpVector(const SOP_NodeVerb::CookParms &cookparms) const
void setUpVectorAttrib(const UT_StringHolder &val)
fpreal64 getScale() const
UT_StringHolder opUpVectorAttrib(const SOP_NodeVerb::CookParms &cookparms) const
void saveBinary(std::ostream &os) const
Save string to binary stream.
Definition: UT_String.h:296
RollPer getRollPer() const
UT_StringHolder opPitchAttrib(const SOP_NodeVerb::CookParms &cookparms) const
bool opNormalize(const SOP_NodeVerb::CookParms &cookparms) const
GT_API const UT_StringHolder version
SYS_FORCE_INLINE UT_StringHolder getToken(TangentType enum_value)
UT_StringHolder opZAxisName(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opQuaternionName(const SOP_NodeVerb::CookParms &cookparms) const
PitchPer opPitchPer(const SOP_NodeVerb::CookParms &cookparms) const
void setTangentType(TangentType val)
fpreal64 getIncPitch() const
fpreal64 getPitch() const
fpreal64 getMaxStretchAroundTurns() const
void setScale(fpreal64 val)
fpreal64 getCurvatureScale() const
void setRollAttrib(const UT_StringHolder &val)
bool opTransformByAttribs(const SOP_NodeVerb::CookParms &cookparms) const
static void saveData(std::ostream &os, UT_Vector2D v)
exint getNestNumParms(TempIndex idx) const override
const UT_StringHolder & getPitchAttrib() const
const UT_StringHolder & getXAxisName() const
YawPer opYawPer(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, UT_Matrix4D &v)
void setNestParmValue(TempIndex idx, TempIndex instance, const fpreal &value) override
fpreal64 fpreal
Definition: SYS_Types.h:277
DEP_MicroNode * depnode() const
Definition: OP_NodeParms.h:99
LeafData & operator=(const LeafData &)=delete
Utility class for containing a color ramp.
Definition: UT_Ramp.h:92
void buildFromOp(const OP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
bool getOutputTransform4() const
UT_StringHolder opXAxisName(const SOP_NodeVerb::CookParms &cookparms) const
void setUseEndUpVector(bool val)
bool opOutputXAxis(const SOP_NodeVerb::CookParms &cookparms) const
constexpr SYS_FORCE_INLINE T & w() noexcept
Definition: UT_Vector4.h:497
void setTransformByAttribs(bool val)
fpreal64 getRoll() const
const UT_StringHolder & getCurvatureScaleAttrib() const
GLuint GLfloat * val
Definition: glcorearb.h:1608
UT_StringHolder opTranslationName(const SOP_NodeVerb::CookParms &cookparms) const
ROrd opROrd(const SOP_NodeVerb::CookParms &cookparms) const
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
#define SOP_API
Definition: SOP_API.h:10
void setNestParmValue(TempIndex idx, TempIndex instance, const exint &value) override
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix2D &value) override
bool getOutputTranslation() const
fpreal getCookTime() const
Definition: SOP_NodeVerb.h:361
bool opOutputYAxis(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, UT_StringHolder &v)
static void loadData(UT_IStream &is, UT_Vector2D &v)
const UT_StringHolder & getCurvatureAttrib() const
static void saveData(std::ostream &os, UT_Matrix3D v)
int64 opFullTwists(const SOP_NodeVerb::CookParms &cookparms) const
static void saveData(std::ostream &os, int64 v)
const char * findChar(int c) const
Definition: UT_String.h:1395
#define UT_ASSERT(ZZ)
Definition: UT_Assert.h:156
Definition: core.h:1131
bool operator!=(const SOP_CurveFrameParms &src) const
UT_StringHolder opYAxisName(const SOP_NodeVerb::CookParms &cookparms) const
void setAdjustUpCurvature(bool val)
GLboolean r
Definition: glcorearb.h:1222
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix4D &value) const override
const UT_StringHolder & getEndUpVectorAttrib() const
void copyFrom(const OP_NodeParms *src) override
bool opContinuousClosed(const SOP_NodeVerb::CookParms &cookparms) const
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector3.h:665
bool getAdjustUpCurvature() const
fpreal64 getYaw() const
static void loadData(UT_IStream &is, int64 &v)
void setEnableCurvatureAttrib(bool val)
bool getStretchAroundTurns() const
type
Definition: core.h:1059
static void loadData(UT_IStream &is, UT_Vector3D &v)
void setRollPer(RollPer val)
bool opEnableCurvatureAttrib(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opYawAttrib(const SOP_NodeVerb::CookParms &cookparms) const
bool opApplyPitch(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opCurveGroup(const SOP_NodeVerb::CookParms &cookparms) const
UT_SharedPtr< const PRM_DataItem > PRM_DataItemHandle
Definition: PRM_Parm.h:97
fpreal64 opMaxStretchAroundTurns(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 opScale(const SOP_NodeVerb::CookParms &cookparms) const
void loadFromOpSubclass(const LoadParms &loadparms) override
bool opOutputZAxis(const SOP_NodeVerb::CookParms &cookparms) const
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector2.h:425
SYS_FORCE_INLINE bool isstring() const
void setQuaternionName(const UT_StringHolder &val)
void setFullTwists(int64 val)
fpreal64 opPitch(const SOP_NodeVerb::CookParms &cookparms) const
void setYaw(fpreal64 val)
void setPitch(fpreal64 val)
void setYAxisName(const UT_StringHolder &val)
SYS_FORCE_INLINE void strncpy(const char *src, exint maxlen)
const UT_StringHolder & getTransform3Name() const
bool getExtrapolateEndTangents() const
static void loadData(UT_IStream &is, UT_SharedPtr< UT_Ramp > &v)
void setIncRoll(fpreal64 val)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix2D &value) const override
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector4D &value) const override
GLenum src
Definition: glcorearb.h:1793
void setMaxStretchAroundTurns(fpreal64 val)
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector3.h:663
fpreal64 opIncRoll(const SOP_NodeVerb::CookParms &cookparms) const