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