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 <OP/OP_GraphProxy.h>
9 
10 #include <OP/OP_Utils.h>
11 #include <PRM/PRM_Parm.h>
12 #include <UT/UT_IStream.h>
13 #include <UT/UT_NTStreamUtil.h>
14 #include <UT/UT_Ramp.h>
15 #include <UT/UT_SharedPtr.h>
16 #include <UT/UT_StringHolder.h>
17 #include <UT/UT_StringStream.h>
18 #include <UT/UT_VectorTypes.h>
19 #include <UT/UT_EnvControl.h>
20 #include <SYS/SYS_Types.h>
21 
22 class DEP_MicroNode;
23 namespace SOP_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 
333  if (baseGetSignature() != src.baseGetSignature()) return false;
334 
335  return true;
336  }
337  bool operator!=(const SOP_CurveFrameParms &src) const
338  {
339  return !operator==(src);
340  }
349 
350 
351 
352  void buildFromOp(const OP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
353  {
354  myCurveGroup = ""_UTsh;
355  if (true)
356  graph->evalOpParm(myCurveGroup, nodeidx, "group", time, graph->isDirect()?nullptr:depnode);
357  myTangentType = 0;
358  if (true)
359  graph->evalOpParm(myTangentType, nodeidx, "tangenttype", time, graph->isDirect()?nullptr:depnode);
360  myContinuousClosed = true;
361  if (true && ( (true&&!(((int64(getTangentType())==4)))) ) )
362  graph->evalOpParm(myContinuousClosed, nodeidx, "continuousclosed", time, graph->isDirect()?nullptr:depnode);
363  myExtrapolateEndTangents = false;
364  if (true && ( (true&&!(((int64(getTangentType())==4)))) ) )
365  graph->evalOpParm(myExtrapolateEndTangents, nodeidx, "extrapolateendtangents", time, graph->isDirect()?nullptr:depnode);
366  myTransformByAttribs = false;
367  if (true)
368  graph->evalOpParm(myTransformByAttribs, nodeidx, "transformbyattribs", time, graph->isDirect()?nullptr:depnode);
369  myUpVectorType = 0;
370  if (true && ( (true&&!(((int64(getTangentType())==4)))) ) )
371  graph->evalOpParm(myUpVectorType, nodeidx, "upvectortype", time, graph->isDirect()?nullptr:depnode);
372  myUpVectorAtStart = true;
373  if (true && ( (true&&!(((int64(getTangentType())==4)))) ) )
374  graph->evalOpParm(myUpVectorAtStart, nodeidx, "upvectoratstart", time, graph->isDirect()?nullptr:depnode);
375  myUseEndUpVector = false;
376  if (true && ( (true&&!(((int64(getTangentType())==4))||((getUpVectorAtStart()==0)))) ) )
377  graph->evalOpParm(myUseEndUpVector, nodeidx, "useendupvector", time, graph->isDirect()?nullptr:depnode);
378  myUpVectorAttrib = "target_up"_UTsh;
379  if (true && ( (true&&!(((int64(getTangentType())==4))||((int64(getUpVectorType())!=4))||((int64(getTangentType())==4))||((int64(getUpVectorType())!=4)))) ) )
380  graph->evalOpParm(myUpVectorAttrib, nodeidx, "upvectorattrib", time, graph->isDirect()?nullptr:depnode);
381  myEndUpVectorAttrib = "target_up_end"_UTsh;
382  if (true && ( (true&&!(((int64(getTangentType())==4))||((int64(getUpVectorType())!=4))||((getUseEndUpVector()==0))||((getUpVectorAtStart()==0))||((int64(getTangentType())==4))||((int64(getUpVectorType())!=4))||((getUseEndUpVector()==0))||((getUpVectorAtStart()==0)))) ) )
383  graph->evalOpParm(myEndUpVectorAttrib, nodeidx, "endupvectorattrib", time, graph->isDirect()?nullptr:depnode);
384  myUpVector = UT_Vector3D(0,1,0);
385  if (true && ( (true&&!(((int64(getTangentType())==4))||((int64(getUpVectorType())!=5))||((int64(getTangentType())==4))||((int64(getUpVectorType())!=5)))) ) )
386  graph->evalOpParm(myUpVector, nodeidx, "upvector", time, graph->isDirect()?nullptr:depnode);
387  myEndUpVector = UT_Vector3D(0,1,0);
388  if (true && ( (true&&!(((int64(getTangentType())==4))||((int64(getUpVectorType())!=5))||((getUseEndUpVector()==0))||((getUpVectorAtStart()==0))||((int64(getTangentType())==4))||((int64(getUpVectorType())!=5))||((getUseEndUpVector()==0))||((getUpVectorAtStart()==0)))) ) )
389  graph->evalOpParm(myEndUpVector, nodeidx, "endupvector", time, graph->isDirect()?nullptr:depnode);
390  myAdjustUpCurvature = false;
391  if (true)
392  graph->evalOpParm(myAdjustUpCurvature, nodeidx, "adjustupcurvature", time, graph->isDirect()?nullptr:depnode);
393  myCurvatureScale = 1;
394  if (true && ( (true&&!(((getAdjustUpCurvature()==0)))) ) )
395  graph->evalOpParm(myCurvatureScale, nodeidx, "curvaturescale", time, graph->isDirect()?nullptr:depnode);
396  myEnableCurvatureScaleAttrib = 0;
397  if (true && ( (true&&!(((getAdjustUpCurvature()==0)))) ) )
398  graph->evalOpParm(myEnableCurvatureScaleAttrib, nodeidx, "enablecurvaturescaleattrib", time, graph->isDirect()?nullptr:depnode);
399  myCurvatureScaleAttrib = "speed"_UTsh;
400  if (true && ( (true&&!(((getAdjustUpCurvature()==0))||((int64(getEnableCurvatureScaleAttrib())==0)))) ) )
401  graph->evalOpParm(myCurvatureScaleAttrib, nodeidx, "curvaturescaleattrib", time, graph->isDirect()?nullptr:depnode);
402  myEnableCurvatureAttrib = false;
403  if (true && ( (true&&!(((getAdjustUpCurvature()==0)))) ) )
404  graph->evalOpParm(myEnableCurvatureAttrib, nodeidx, "enablecurvatureattrib", time, graph->isDirect()?nullptr:depnode);
405  myCurvatureAttrib = "curvature"_UTsh;
406  if (true && ( (true&&!(((getAdjustUpCurvature()==0))||((getEnableCurvatureAttrib()==0)))) ) )
407  graph->evalOpParm(myCurvatureAttrib, nodeidx, "curvatureattrib", time, graph->isDirect()?nullptr:depnode);
408  myROrd = 0;
409  if (true)
410  graph->evalOpParm(myROrd, nodeidx, "rOrd", time, graph->isDirect()?nullptr:depnode);
411  myApplyRoll = false;
412  if (true)
413  graph->evalOpParm(myApplyRoll, nodeidx, "applyroll", time, graph->isDirect()?nullptr:depnode);
414  myRoll = 0;
415  if (true && ( (true&&!(((getApplyRoll()==0)))) ) )
416  graph->evalOpParm(myRoll, nodeidx, "roll", time, graph->isDirect()?nullptr:depnode);
417  myRollPer = 4;
418  if (true && ( (true&&!(((getApplyRoll()==0)))) ) )
419  graph->evalOpParm(myRollPer, nodeidx, "rollper", time, graph->isDirect()?nullptr:depnode);
420  myFullTwists = 0;
421  if (true && ( (true&&!(((getApplyRoll()==0)))) ) )
422  graph->evalOpParm(myFullTwists, nodeidx, "fulltwists", time, graph->isDirect()?nullptr:depnode);
423  myIncRoll = 0;
424  if (true && ( (true&&!(((getApplyRoll()==0)))) ) )
425  graph->evalOpParm(myIncRoll, nodeidx, "incroll", time, graph->isDirect()?nullptr:depnode);
426  myRollAttrib = "roll"_UTsh;
427  if (true && ( (true&&!(((getApplyRoll()==0))||((getApplyRoll()==1)&&(int64(getRollPer())!=2))||((getApplyRoll()==0))||((getApplyRoll()==1)&&(int64(getRollPer())!=2)))) ) )
428  graph->evalOpParm(myRollAttrib, nodeidx, "rollattrib", time, graph->isDirect()?nullptr:depnode);
429  myApplyYaw = false;
430  if (true)
431  graph->evalOpParm(myApplyYaw, nodeidx, "applyyaw", time, graph->isDirect()?nullptr:depnode);
432  myYaw = 0;
433  if (true && ( (true&&!(((getApplyYaw()==0)))) ) )
434  graph->evalOpParm(myYaw, nodeidx, "yaw", time, graph->isDirect()?nullptr:depnode);
435  myYawPer = 4;
436  if (true && ( (true&&!(((getApplyYaw()==0)))) ) )
437  graph->evalOpParm(myYawPer, nodeidx, "yawper", time, graph->isDirect()?nullptr:depnode);
438  myIncYaw = 0;
439  if (true && ( (true&&!(((getApplyYaw()==0)))) ) )
440  graph->evalOpParm(myIncYaw, nodeidx, "incyaw", time, graph->isDirect()?nullptr:depnode);
441  myYawAttrib = "yaw"_UTsh;
442  if (true && ( (true&&!(((getApplyYaw()==0))||((getApplyYaw()==1)&&(int64(getYawPer())!=2))||((getApplyYaw()==0))||((getApplyYaw()==1)&&(int64(getYawPer())!=2)))) ) )
443  graph->evalOpParm(myYawAttrib, nodeidx, "yawattrib", time, graph->isDirect()?nullptr:depnode);
444  myApplyPitch = false;
445  if (true)
446  graph->evalOpParm(myApplyPitch, nodeidx, "applypitch", time, graph->isDirect()?nullptr:depnode);
447  myPitch = 0;
448  if (true && ( (true&&!(((getApplyPitch()==0)))) ) )
449  graph->evalOpParm(myPitch, nodeidx, "pitch", time, graph->isDirect()?nullptr:depnode);
450  myPitchPer = 4;
451  if (true && ( (true&&!(((getApplyPitch()==0)))) ) )
452  graph->evalOpParm(myPitchPer, nodeidx, "pitchper", time, graph->isDirect()?nullptr:depnode);
453  myIncPitch = 0;
454  if (true && ( (true&&!(((getApplyPitch()==0)))) ) )
455  graph->evalOpParm(myIncPitch, nodeidx, "incpitch", time, graph->isDirect()?nullptr:depnode);
456  myPitchAttrib = "pitch"_UTsh;
457  if (true && ( (true&&!(((getApplyPitch()==0))||((getApplyPitch()==1)&&(int64(getPitchPer())!=2))||((getApplyPitch()==0))||((getApplyPitch()==1)&&(int64(getPitchPer())!=2)))) ) )
458  graph->evalOpParm(myPitchAttrib, nodeidx, "pitchattrib", time, graph->isDirect()?nullptr:depnode);
459  myNormalize = true;
460  if (true)
461  graph->evalOpParm(myNormalize, nodeidx, "normalize", time, graph->isDirect()?nullptr:depnode);
462  myScale = 1;
463  if (true)
464  graph->evalOpParm(myScale, nodeidx, "scale", time, graph->isDirect()?nullptr:depnode);
465  myStretchAroundTurns = false;
466  if (true)
467  graph->evalOpParm(myStretchAroundTurns, nodeidx, "stretcharoundturns", time, graph->isDirect()?nullptr:depnode);
468  myMaxStretchAroundTurns = 10;
469  if (true && ( (true&&!(((getStretchAroundTurns()==0)))) ) )
470  graph->evalOpParm(myMaxStretchAroundTurns, nodeidx, "maxstretcharoundturns", time, graph->isDirect()?nullptr:depnode);
471  myClass = 0;
472  if (true)
473  graph->evalOpParm(myClass, nodeidx, "class", time, graph->isDirect()?nullptr:depnode);
474  myOutputXAxis = false;
475  if (true)
476  graph->evalOpParm(myOutputXAxis, nodeidx, "outputxaxis", time, graph->isDirect()?nullptr:depnode);
477  myXAxisName = "out"_UTsh;
478  if (true && ( (true&&!(((getOutputXAxis()==0)))) ) )
479  graph->evalOpParm(myXAxisName, nodeidx, "xaxisname", time, graph->isDirect()?nullptr:depnode);
480  myOutputYAxis = true;
481  if (true)
482  graph->evalOpParm(myOutputYAxis, nodeidx, "outputyaxis", time, graph->isDirect()?nullptr:depnode);
483  myYAxisName = "up"_UTsh;
484  if (true && ( (true&&!(((getOutputYAxis()==0)))) ) )
485  graph->evalOpParm(myYAxisName, nodeidx, "yaxisname", time, graph->isDirect()?nullptr:depnode);
486  myOutputZAxis = true;
487  if (true)
488  graph->evalOpParm(myOutputZAxis, nodeidx, "outputzaxis", time, graph->isDirect()?nullptr:depnode);
489  myZAxisName = "N"_UTsh;
490  if (true && ( (true&&!(((getOutputZAxis()==0)))) ) )
491  graph->evalOpParm(myZAxisName, nodeidx, "zaxisname", time, graph->isDirect()?nullptr:depnode);
492  myOutputTranslation = false;
493  if (true)
494  graph->evalOpParm(myOutputTranslation, nodeidx, "outputtranslation", time, graph->isDirect()?nullptr:depnode);
495  myTranslationName = "P"_UTsh;
496  if (true && ( (true&&!(((getOutputTranslation()==0)))) ) )
497  graph->evalOpParm(myTranslationName, nodeidx, "translationname", time, graph->isDirect()?nullptr:depnode);
498  myOutputQuaternion = false;
499  if (true)
500  graph->evalOpParm(myOutputQuaternion, nodeidx, "outputquaternion", time, graph->isDirect()?nullptr:depnode);
501  myQuaternionName = "orient"_UTsh;
502  if (true && ( (true&&!(((getOutputQuaternion()==0)))) ) )
503  graph->evalOpParm(myQuaternionName, nodeidx, "quaternionname", time, graph->isDirect()?nullptr:depnode);
504  myOutputTransform3 = false;
505  if (true)
506  graph->evalOpParm(myOutputTransform3, nodeidx, "outputtransform3", time, graph->isDirect()?nullptr:depnode);
507  myTransform3Name = "transform"_UTsh;
508  if (true && ( (true&&!(((getOutputTransform3()==0)))) ) )
509  graph->evalOpParm(myTransform3Name, nodeidx, "transform3name", time, graph->isDirect()?nullptr:depnode);
510  myOutputTransform4 = false;
511  if (true)
512  graph->evalOpParm(myOutputTransform4, nodeidx, "outputtransform4", time, graph->isDirect()?nullptr:depnode);
513  myTransform4Name = "transform"_UTsh;
514  if (true && ( (true&&!(((getOutputTransform4()==0)))) ) )
515  graph->evalOpParm(myTransform4Name, nodeidx, "transform4name", time, graph->isDirect()?nullptr:depnode);
516 
517  }
518 
519 
520  void loadFromOpSubclass(const LoadParms &loadparms) override
521  {
522  buildFromOp(loadparms.graph(), loadparms.nodeIdx(), loadparms.context().getTime(), loadparms.depnode());
523  }
524 
525 
526  void copyFrom(const OP_NodeParms *src) override
527  {
528  *this = *((const SOP_CurveFrameParms *)src);
529  }
530 
531  template <typename T>
532  void
533  doGetParmValue(TempIndex idx, TempIndex instance, T &value) const
534  {
535  if (idx.size() < 1)
536  return;
537  UT_ASSERT(idx.size() == instance.size()+1);
538  if (idx.size() != instance.size()+1)
539  return;
540  switch (idx[0])
541  {
542  case 0:
543  coerceValue(value, myCurveGroup);
544  break;
545  case 1:
546  coerceValue(value, myTangentType);
547  break;
548  case 2:
549  coerceValue(value, myContinuousClosed);
550  break;
551  case 3:
552  coerceValue(value, myExtrapolateEndTangents);
553  break;
554  case 4:
555  coerceValue(value, myTransformByAttribs);
556  break;
557  case 5:
558  coerceValue(value, myUpVectorType);
559  break;
560  case 6:
561  coerceValue(value, myUpVectorAtStart);
562  break;
563  case 7:
564  coerceValue(value, myUseEndUpVector);
565  break;
566  case 8:
567  coerceValue(value, myUpVectorAttrib);
568  break;
569  case 9:
570  coerceValue(value, myEndUpVectorAttrib);
571  break;
572  case 10:
573  coerceValue(value, myUpVector);
574  break;
575  case 11:
576  coerceValue(value, myEndUpVector);
577  break;
578  case 12:
579  coerceValue(value, myAdjustUpCurvature);
580  break;
581  case 13:
582  coerceValue(value, myCurvatureScale);
583  break;
584  case 14:
585  coerceValue(value, myEnableCurvatureScaleAttrib);
586  break;
587  case 15:
588  coerceValue(value, myCurvatureScaleAttrib);
589  break;
590  case 16:
591  coerceValue(value, myEnableCurvatureAttrib);
592  break;
593  case 17:
594  coerceValue(value, myCurvatureAttrib);
595  break;
596  case 18:
597  coerceValue(value, myROrd);
598  break;
599  case 19:
600  coerceValue(value, myApplyRoll);
601  break;
602  case 20:
603  coerceValue(value, myRoll);
604  break;
605  case 21:
606  coerceValue(value, myRollPer);
607  break;
608  case 22:
609  coerceValue(value, myFullTwists);
610  break;
611  case 23:
612  coerceValue(value, myIncRoll);
613  break;
614  case 24:
615  coerceValue(value, myRollAttrib);
616  break;
617  case 25:
618  coerceValue(value, myApplyYaw);
619  break;
620  case 26:
621  coerceValue(value, myYaw);
622  break;
623  case 27:
624  coerceValue(value, myYawPer);
625  break;
626  case 28:
627  coerceValue(value, myIncYaw);
628  break;
629  case 29:
630  coerceValue(value, myYawAttrib);
631  break;
632  case 30:
633  coerceValue(value, myApplyPitch);
634  break;
635  case 31:
636  coerceValue(value, myPitch);
637  break;
638  case 32:
639  coerceValue(value, myPitchPer);
640  break;
641  case 33:
642  coerceValue(value, myIncPitch);
643  break;
644  case 34:
645  coerceValue(value, myPitchAttrib);
646  break;
647  case 35:
648  coerceValue(value, myNormalize);
649  break;
650  case 36:
651  coerceValue(value, myScale);
652  break;
653  case 37:
654  coerceValue(value, myStretchAroundTurns);
655  break;
656  case 38:
657  coerceValue(value, myMaxStretchAroundTurns);
658  break;
659  case 39:
660  coerceValue(value, myClass);
661  break;
662  case 40:
663  coerceValue(value, myOutputXAxis);
664  break;
665  case 41:
666  coerceValue(value, myXAxisName);
667  break;
668  case 42:
669  coerceValue(value, myOutputYAxis);
670  break;
671  case 43:
672  coerceValue(value, myYAxisName);
673  break;
674  case 44:
675  coerceValue(value, myOutputZAxis);
676  break;
677  case 45:
678  coerceValue(value, myZAxisName);
679  break;
680  case 46:
681  coerceValue(value, myOutputTranslation);
682  break;
683  case 47:
684  coerceValue(value, myTranslationName);
685  break;
686  case 48:
687  coerceValue(value, myOutputQuaternion);
688  break;
689  case 49:
690  coerceValue(value, myQuaternionName);
691  break;
692  case 50:
693  coerceValue(value, myOutputTransform3);
694  break;
695  case 51:
696  coerceValue(value, myTransform3Name);
697  break;
698  case 52:
699  coerceValue(value, myOutputTransform4);
700  break;
701  case 53:
702  coerceValue(value, myTransform4Name);
703  break;
704 
705  }
706  }
707 
708  bool isParmColorRamp(exint idx) const override
709  {
710  switch (idx)
711  {
712 
713  }
714  return false;
715  }
716 
717  void getNestParmValue(TempIndex idx, TempIndex instance, exint &value) const override
718  { doGetParmValue(idx, instance, value); }
719  void getNestParmValue(TempIndex idx, TempIndex instance, fpreal &value) const override
720  { doGetParmValue(idx, instance, value); }
721  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector2D &value) const override
722  { doGetParmValue(idx, instance, value); }
723  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector3D &value) const override
724  { doGetParmValue(idx, instance, value); }
725  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector4D &value) const override
726  { doGetParmValue(idx, instance, value); }
727  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix2D &value) const override
728  { doGetParmValue(idx, instance, value); }
729  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
730  { doGetParmValue(idx, instance, value); }
731  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix4D &value) const override
732  { doGetParmValue(idx, instance, value); }
733  void getNestParmValue(TempIndex idx, TempIndex instance, UT_StringHolder &value) const override
734  { doGetParmValue(idx, instance, value); }
735  void getNestParmValue(TempIndex idx, TempIndex instance, UT_SharedPtr<UT_Ramp> &value) const override
736  { doGetParmValue(idx, instance, value); }
737  void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
738  { doGetParmValue(idx, instance, value); }
739 
740  template <typename T>
741  void
742  doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
743  {
744  if (idx.size() < 1)
745  return;
746  UT_ASSERT(idx.size() == instance.size()+1);
747  if (idx.size() != instance.size()+1)
748  return;
749  switch (idx[0])
750  {
751  case 0:
752  coerceValue(myCurveGroup, ( ( value ) ));
753  break;
754  case 1:
755  coerceValue(myTangentType, clampMinValue(0, clampMaxValue(4, value ) ));
756  break;
757  case 2:
758  coerceValue(myContinuousClosed, ( ( value ) ));
759  break;
760  case 3:
761  coerceValue(myExtrapolateEndTangents, ( ( value ) ));
762  break;
763  case 4:
764  coerceValue(myTransformByAttribs, ( ( value ) ));
765  break;
766  case 5:
767  coerceValue(myUpVectorType, clampMinValue(0, clampMaxValue(5, value ) ));
768  break;
769  case 6:
770  coerceValue(myUpVectorAtStart, ( ( value ) ));
771  break;
772  case 7:
773  coerceValue(myUseEndUpVector, ( ( value ) ));
774  break;
775  case 8:
776  coerceValue(myUpVectorAttrib, ( ( value ) ));
777  break;
778  case 9:
779  coerceValue(myEndUpVectorAttrib, ( ( value ) ));
780  break;
781  case 10:
782  coerceValue(myUpVector, ( ( value ) ));
783  break;
784  case 11:
785  coerceValue(myEndUpVector, ( ( value ) ));
786  break;
787  case 12:
788  coerceValue(myAdjustUpCurvature, ( ( value ) ));
789  break;
790  case 13:
791  coerceValue(myCurvatureScale, ( ( value ) ));
792  break;
793  case 14:
794  coerceValue(myEnableCurvatureScaleAttrib, clampMinValue(0, clampMaxValue(1, value ) ));
795  break;
796  case 15:
797  coerceValue(myCurvatureScaleAttrib, ( ( value ) ));
798  break;
799  case 16:
800  coerceValue(myEnableCurvatureAttrib, ( ( value ) ));
801  break;
802  case 17:
803  coerceValue(myCurvatureAttrib, ( ( value ) ));
804  break;
805  case 18:
806  coerceValue(myROrd, clampMinValue(0, clampMaxValue(5, value ) ));
807  break;
808  case 19:
809  coerceValue(myApplyRoll, ( ( value ) ));
810  break;
811  case 20:
812  coerceValue(myRoll, ( ( value ) ));
813  break;
814  case 21:
815  coerceValue(myRollPer, clampMinValue(0, clampMaxValue(4, value ) ));
816  break;
817  case 22:
818  coerceValue(myFullTwists, ( ( value ) ));
819  break;
820  case 23:
821  coerceValue(myIncRoll, ( ( value ) ));
822  break;
823  case 24:
824  coerceValue(myRollAttrib, ( ( value ) ));
825  break;
826  case 25:
827  coerceValue(myApplyYaw, ( ( value ) ));
828  break;
829  case 26:
830  coerceValue(myYaw, ( ( value ) ));
831  break;
832  case 27:
833  coerceValue(myYawPer, clampMinValue(0, clampMaxValue(4, value ) ));
834  break;
835  case 28:
836  coerceValue(myIncYaw, ( ( value ) ));
837  break;
838  case 29:
839  coerceValue(myYawAttrib, ( ( value ) ));
840  break;
841  case 30:
842  coerceValue(myApplyPitch, ( ( value ) ));
843  break;
844  case 31:
845  coerceValue(myPitch, ( ( value ) ));
846  break;
847  case 32:
848  coerceValue(myPitchPer, clampMinValue(0, clampMaxValue(4, value ) ));
849  break;
850  case 33:
851  coerceValue(myIncPitch, ( ( value ) ));
852  break;
853  case 34:
854  coerceValue(myPitchAttrib, ( ( value ) ));
855  break;
856  case 35:
857  coerceValue(myNormalize, ( ( value ) ));
858  break;
859  case 36:
860  coerceValue(myScale, ( ( value ) ));
861  break;
862  case 37:
863  coerceValue(myStretchAroundTurns, ( ( value ) ));
864  break;
865  case 38:
866  coerceValue(myMaxStretchAroundTurns, clampMinValue(1, ( value ) ));
867  break;
868  case 39:
869  coerceValue(myClass, clampMinValue(0, clampMaxValue(1, value ) ));
870  break;
871  case 40:
872  coerceValue(myOutputXAxis, ( ( value ) ));
873  break;
874  case 41:
875  coerceValue(myXAxisName, ( ( value ) ));
876  break;
877  case 42:
878  coerceValue(myOutputYAxis, ( ( value ) ));
879  break;
880  case 43:
881  coerceValue(myYAxisName, ( ( value ) ));
882  break;
883  case 44:
884  coerceValue(myOutputZAxis, ( ( value ) ));
885  break;
886  case 45:
887  coerceValue(myZAxisName, ( ( value ) ));
888  break;
889  case 46:
890  coerceValue(myOutputTranslation, ( ( value ) ));
891  break;
892  case 47:
893  coerceValue(myTranslationName, ( ( value ) ));
894  break;
895  case 48:
896  coerceValue(myOutputQuaternion, ( ( value ) ));
897  break;
898  case 49:
899  coerceValue(myQuaternionName, ( ( value ) ));
900  break;
901  case 50:
902  coerceValue(myOutputTransform3, ( ( value ) ));
903  break;
904  case 51:
905  coerceValue(myTransform3Name, ( ( value ) ));
906  break;
907  case 52:
908  coerceValue(myOutputTransform4, ( ( value ) ));
909  break;
910  case 53:
911  coerceValue(myTransform4Name, ( ( value ) ));
912  break;
913 
914  }
915  }
916 
917  void setNestParmValue(TempIndex idx, TempIndex instance, const exint &value) override
918  { doSetParmValue(idx, instance, value); }
919  void setNestParmValue(TempIndex idx, TempIndex instance, const fpreal &value) override
920  { doSetParmValue(idx, instance, value); }
921  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector2D &value) override
922  { doSetParmValue(idx, instance, value); }
923  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector3D &value) override
924  { doSetParmValue(idx, instance, value); }
925  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector4D &value) override
926  { doSetParmValue(idx, instance, value); }
927  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix2D &value) override
928  { doSetParmValue(idx, instance, value); }
929  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix3D &value) override
930  { doSetParmValue(idx, instance, value); }
931  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix4D &value) override
932  { doSetParmValue(idx, instance, value); }
933  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_StringHolder &value) override
934  { doSetParmValue(idx, instance, value); }
935  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_SharedPtr<UT_Ramp> &value) override
936  { doSetParmValue(idx, instance, value); }
937  void setNestParmValue(TempIndex idx, TempIndex instance, const PRM_DataItemHandle &value) override
938  { doSetParmValue(idx, instance, value); }
939 
940  exint getNestNumParms(TempIndex idx) const override
941  {
942  if (idx.size() == 0)
943  return 54;
944  switch (idx[0])
945  {
946 
947  }
948  // Invalid
949  return 0;
950  }
951 
952  const char *getNestParmName(TempIndex fieldnum) const override
953  {
954  if (fieldnum.size() < 1)
955  return 0;
956  switch (fieldnum[0])
957  {
958  case 0:
959  return "group";
960  case 1:
961  return "tangenttype";
962  case 2:
963  return "continuousclosed";
964  case 3:
965  return "extrapolateendtangents";
966  case 4:
967  return "transformbyattribs";
968  case 5:
969  return "upvectortype";
970  case 6:
971  return "upvectoratstart";
972  case 7:
973  return "useendupvector";
974  case 8:
975  return "upvectorattrib";
976  case 9:
977  return "endupvectorattrib";
978  case 10:
979  return "upvector";
980  case 11:
981  return "endupvector";
982  case 12:
983  return "adjustupcurvature";
984  case 13:
985  return "curvaturescale";
986  case 14:
987  return "enablecurvaturescaleattrib";
988  case 15:
989  return "curvaturescaleattrib";
990  case 16:
991  return "enablecurvatureattrib";
992  case 17:
993  return "curvatureattrib";
994  case 18:
995  return "rOrd";
996  case 19:
997  return "applyroll";
998  case 20:
999  return "roll";
1000  case 21:
1001  return "rollper";
1002  case 22:
1003  return "fulltwists";
1004  case 23:
1005  return "incroll";
1006  case 24:
1007  return "rollattrib";
1008  case 25:
1009  return "applyyaw";
1010  case 26:
1011  return "yaw";
1012  case 27:
1013  return "yawper";
1014  case 28:
1015  return "incyaw";
1016  case 29:
1017  return "yawattrib";
1018  case 30:
1019  return "applypitch";
1020  case 31:
1021  return "pitch";
1022  case 32:
1023  return "pitchper";
1024  case 33:
1025  return "incpitch";
1026  case 34:
1027  return "pitchattrib";
1028  case 35:
1029  return "normalize";
1030  case 36:
1031  return "scale";
1032  case 37:
1033  return "stretcharoundturns";
1034  case 38:
1035  return "maxstretcharoundturns";
1036  case 39:
1037  return "class";
1038  case 40:
1039  return "outputxaxis";
1040  case 41:
1041  return "xaxisname";
1042  case 42:
1043  return "outputyaxis";
1044  case 43:
1045  return "yaxisname";
1046  case 44:
1047  return "outputzaxis";
1048  case 45:
1049  return "zaxisname";
1050  case 46:
1051  return "outputtranslation";
1052  case 47:
1053  return "translationname";
1054  case 48:
1055  return "outputquaternion";
1056  case 49:
1057  return "quaternionname";
1058  case 50:
1059  return "outputtransform3";
1060  case 51:
1061  return "transform3name";
1062  case 52:
1063  return "outputtransform4";
1064  case 53:
1065  return "transform4name";
1066 
1067  }
1068  return 0;
1069  }
1070 
1071  ParmType getNestParmType(TempIndex fieldnum) const override
1072  {
1073  if (fieldnum.size() < 1)
1074  return PARM_UNSUPPORTED;
1075  switch (fieldnum[0])
1076  {
1077  case 0:
1078  return PARM_STRING;
1079  case 1:
1080  return PARM_INTEGER;
1081  case 2:
1082  return PARM_INTEGER;
1083  case 3:
1084  return PARM_INTEGER;
1085  case 4:
1086  return PARM_INTEGER;
1087  case 5:
1088  return PARM_INTEGER;
1089  case 6:
1090  return PARM_INTEGER;
1091  case 7:
1092  return PARM_INTEGER;
1093  case 8:
1094  return PARM_STRING;
1095  case 9:
1096  return PARM_STRING;
1097  case 10:
1098  return PARM_VECTOR3;
1099  case 11:
1100  return PARM_VECTOR3;
1101  case 12:
1102  return PARM_INTEGER;
1103  case 13:
1104  return PARM_FLOAT;
1105  case 14:
1106  return PARM_INTEGER;
1107  case 15:
1108  return PARM_STRING;
1109  case 16:
1110  return PARM_INTEGER;
1111  case 17:
1112  return PARM_STRING;
1113  case 18:
1114  return PARM_INTEGER;
1115  case 19:
1116  return PARM_INTEGER;
1117  case 20:
1118  return PARM_FLOAT;
1119  case 21:
1120  return PARM_INTEGER;
1121  case 22:
1122  return PARM_INTEGER;
1123  case 23:
1124  return PARM_FLOAT;
1125  case 24:
1126  return PARM_STRING;
1127  case 25:
1128  return PARM_INTEGER;
1129  case 26:
1130  return PARM_FLOAT;
1131  case 27:
1132  return PARM_INTEGER;
1133  case 28:
1134  return PARM_FLOAT;
1135  case 29:
1136  return PARM_STRING;
1137  case 30:
1138  return PARM_INTEGER;
1139  case 31:
1140  return PARM_FLOAT;
1141  case 32:
1142  return PARM_INTEGER;
1143  case 33:
1144  return PARM_FLOAT;
1145  case 34:
1146  return PARM_STRING;
1147  case 35:
1148  return PARM_INTEGER;
1149  case 36:
1150  return PARM_FLOAT;
1151  case 37:
1152  return PARM_INTEGER;
1153  case 38:
1154  return PARM_FLOAT;
1155  case 39:
1156  return PARM_INTEGER;
1157  case 40:
1158  return PARM_INTEGER;
1159  case 41:
1160  return PARM_STRING;
1161  case 42:
1162  return PARM_INTEGER;
1163  case 43:
1164  return PARM_STRING;
1165  case 44:
1166  return PARM_INTEGER;
1167  case 45:
1168  return PARM_STRING;
1169  case 46:
1170  return PARM_INTEGER;
1171  case 47:
1172  return PARM_STRING;
1173  case 48:
1174  return PARM_INTEGER;
1175  case 49:
1176  return PARM_STRING;
1177  case 50:
1178  return PARM_INTEGER;
1179  case 51:
1180  return PARM_STRING;
1181  case 52:
1182  return PARM_INTEGER;
1183  case 53:
1184  return PARM_STRING;
1185 
1186  }
1187  return PARM_UNSUPPORTED;
1188  }
1189 
1190  // Boiler plate to load individual types.
1191  static void loadData(UT_IStream &is, int64 &v)
1192  { is.bread(&v, 1); }
1193  static void loadData(UT_IStream &is, bool &v)
1194  { int64 iv; is.bread(&iv, 1); v = iv; }
1195  static void loadData(UT_IStream &is, fpreal64 &v)
1196  { is.bread<fpreal64>(&v, 1); }
1197  static void loadData(UT_IStream &is, UT_Vector2D &v)
1198  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1); }
1199  static void loadData(UT_IStream &is, UT_Vector3D &v)
1200  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
1201  is.bread<fpreal64>(&v.z(), 1); }
1202  static void loadData(UT_IStream &is, UT_Vector4D &v)
1203  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
1204  is.bread<fpreal64>(&v.z(), 1); is.bread<fpreal64>(&v.w(), 1); }
1205  static void loadData(UT_IStream &is, UT_Matrix2D &v)
1206  { for (int r = 0; r < 2; r++) for (int c = 0; c < 2; c++) is.bread<fpreal64>(&v(r, c), 1); }
1207  static void loadData(UT_IStream &is, UT_Matrix3D &v)
1208  { for (int r = 0; r < 3; r++) for (int c = 0; c < 3; c++) is.bread<fpreal64>(&v(r, c), 1); }
1209  static void loadData(UT_IStream &is, UT_Matrix4D &v)
1210  { for (int r = 0; r < 4; r++) for (int c = 0; c < 4; c++) is.bread<fpreal64>(&v(r, c), 1); }
1211  static void loadData(UT_IStream &is, UT_Vector2I &v)
1212  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1); }
1213  static void loadData(UT_IStream &is, UT_Vector3I &v)
1214  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
1215  is.bread<int64>(&v.z(), 1); }
1216  static void loadData(UT_IStream &is, UT_Vector4I &v)
1217  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
1218  is.bread<int64>(&v.z(), 1); is.bread<int64>(&v.w(), 1); }
1220  { is.bread(v); }
1222  { UT_StringHolder rampdata;
1223  loadData(is, rampdata);
1224  if (rampdata.isstring())
1225  {
1226  v.reset(new UT_Ramp());
1227  UT_IStream istr((const char *) rampdata, rampdata.length(), UT_ISTREAM_ASCII);
1228  v->load(istr);
1229  }
1230  else v.reset();
1231  }
1234  loadData(is, data);
1235  if (data.isstring())
1236  {
1237  // Find the data type.
1238  const char *colon = UT_StringWrap(data).findChar(':');
1239  if (colon)
1240  {
1241  int typelen = colon - data.buffer();
1243  type.strncpy(data.buffer(), typelen);
1244  UT_IStream istr(((const char *) data) + typelen + 1, data.length() - (typelen + 1), UT_ISTREAM_BINARY);
1245 
1246  v = PRM_DataFactory::parseBinary(type.buffer(), istr);
1247  }
1248  }
1249  else v.reset();
1250  }
1251 
1252  static void saveData(std::ostream &os, int64 v)
1253  { UTwrite(os, &v); }
1254  static void saveData(std::ostream &os, bool v)
1255  { int64 iv = v; UTwrite(os, &iv); }
1256  static void saveData(std::ostream &os, fpreal64 v)
1257  { UTwrite<fpreal64>(os, &v); }
1258  static void saveData(std::ostream &os, UT_Vector2D v)
1259  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y()); }
1260  static void saveData(std::ostream &os, UT_Vector3D v)
1261  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
1262  UTwrite<fpreal64>(os, &v.z()); }
1263  static void saveData(std::ostream &os, UT_Vector4D v)
1264  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
1265  UTwrite<fpreal64>(os, &v.z()); UTwrite<fpreal64>(os, &v.w()); }
1266  static void saveData(std::ostream &os, UT_Matrix2D v)
1268  static void saveData(std::ostream &os, UT_Matrix3D v)
1270  static void saveData(std::ostream &os, UT_Matrix4D v)
1272  static void saveData(std::ostream &os, UT_StringHolder s)
1273  { UT_StringWrap(s).saveBinary(os); }
1274  static void saveData(std::ostream &os, UT_SharedPtr<UT_Ramp> s)
1276  UT_OStringStream ostr;
1277  if (s) s->save(ostr);
1278  result = ostr.str();
1279  saveData(os, result);
1280  }
1281  static void saveData(std::ostream &os, PRM_DataItemHandle s)
1283  UT_OStringStream ostr;
1284  if (s)
1285  {
1286  ostr << s->getDataTypeToken();
1287  ostr << ":";
1288  s->saveBinary(ostr);
1289  }
1290  result = ostr.str();
1291  saveData(os, result);
1292  }
1293 
1294 
1295  void save(std::ostream &os) const
1296  {
1297  int32 v = version();
1298  UTwrite(os, &v);
1299  saveData(os, myCurveGroup);
1300  saveData(os, myTangentType);
1301  saveData(os, myContinuousClosed);
1302  saveData(os, myExtrapolateEndTangents);
1303  saveData(os, myTransformByAttribs);
1304  saveData(os, myUpVectorType);
1305  saveData(os, myUpVectorAtStart);
1306  saveData(os, myUseEndUpVector);
1307  saveData(os, myUpVectorAttrib);
1308  saveData(os, myEndUpVectorAttrib);
1309  saveData(os, myUpVector);
1310  saveData(os, myEndUpVector);
1311  saveData(os, myAdjustUpCurvature);
1312  saveData(os, myCurvatureScale);
1313  saveData(os, myEnableCurvatureScaleAttrib);
1314  saveData(os, myCurvatureScaleAttrib);
1315  saveData(os, myEnableCurvatureAttrib);
1316  saveData(os, myCurvatureAttrib);
1317  saveData(os, myROrd);
1318  saveData(os, myApplyRoll);
1319  saveData(os, myRoll);
1320  saveData(os, myRollPer);
1321  saveData(os, myFullTwists);
1322  saveData(os, myIncRoll);
1323  saveData(os, myRollAttrib);
1324  saveData(os, myApplyYaw);
1325  saveData(os, myYaw);
1326  saveData(os, myYawPer);
1327  saveData(os, myIncYaw);
1328  saveData(os, myYawAttrib);
1329  saveData(os, myApplyPitch);
1330  saveData(os, myPitch);
1331  saveData(os, myPitchPer);
1332  saveData(os, myIncPitch);
1333  saveData(os, myPitchAttrib);
1334  saveData(os, myNormalize);
1335  saveData(os, myScale);
1336  saveData(os, myStretchAroundTurns);
1337  saveData(os, myMaxStretchAroundTurns);
1338  saveData(os, myClass);
1339  saveData(os, myOutputXAxis);
1340  saveData(os, myXAxisName);
1341  saveData(os, myOutputYAxis);
1342  saveData(os, myYAxisName);
1343  saveData(os, myOutputZAxis);
1344  saveData(os, myZAxisName);
1345  saveData(os, myOutputTranslation);
1346  saveData(os, myTranslationName);
1347  saveData(os, myOutputQuaternion);
1348  saveData(os, myQuaternionName);
1349  saveData(os, myOutputTransform3);
1350  saveData(os, myTransform3Name);
1351  saveData(os, myOutputTransform4);
1352  saveData(os, myTransform4Name);
1353 
1354  }
1355 
1356  bool load(UT_IStream &is)
1357  {
1358  int32 v;
1359  is.bread(&v, 1);
1360  if (version() != v)
1361  {
1362  // Fail incompatible versions
1363  return false;
1364  }
1365  loadData(is, myCurveGroup);
1366  loadData(is, myTangentType);
1367  loadData(is, myContinuousClosed);
1368  loadData(is, myExtrapolateEndTangents);
1369  loadData(is, myTransformByAttribs);
1370  loadData(is, myUpVectorType);
1371  loadData(is, myUpVectorAtStart);
1372  loadData(is, myUseEndUpVector);
1373  loadData(is, myUpVectorAttrib);
1374  loadData(is, myEndUpVectorAttrib);
1375  loadData(is, myUpVector);
1376  loadData(is, myEndUpVector);
1377  loadData(is, myAdjustUpCurvature);
1378  loadData(is, myCurvatureScale);
1379  loadData(is, myEnableCurvatureScaleAttrib);
1380  loadData(is, myCurvatureScaleAttrib);
1381  loadData(is, myEnableCurvatureAttrib);
1382  loadData(is, myCurvatureAttrib);
1383  loadData(is, myROrd);
1384  loadData(is, myApplyRoll);
1385  loadData(is, myRoll);
1386  loadData(is, myRollPer);
1387  loadData(is, myFullTwists);
1388  loadData(is, myIncRoll);
1389  loadData(is, myRollAttrib);
1390  loadData(is, myApplyYaw);
1391  loadData(is, myYaw);
1392  loadData(is, myYawPer);
1393  loadData(is, myIncYaw);
1394  loadData(is, myYawAttrib);
1395  loadData(is, myApplyPitch);
1396  loadData(is, myPitch);
1397  loadData(is, myPitchPer);
1398  loadData(is, myIncPitch);
1399  loadData(is, myPitchAttrib);
1400  loadData(is, myNormalize);
1401  loadData(is, myScale);
1402  loadData(is, myStretchAroundTurns);
1403  loadData(is, myMaxStretchAroundTurns);
1404  loadData(is, myClass);
1405  loadData(is, myOutputXAxis);
1406  loadData(is, myXAxisName);
1407  loadData(is, myOutputYAxis);
1408  loadData(is, myYAxisName);
1409  loadData(is, myOutputZAxis);
1410  loadData(is, myZAxisName);
1411  loadData(is, myOutputTranslation);
1412  loadData(is, myTranslationName);
1413  loadData(is, myOutputQuaternion);
1414  loadData(is, myQuaternionName);
1415  loadData(is, myOutputTransform3);
1416  loadData(is, myTransform3Name);
1417  loadData(is, myOutputTransform4);
1418  loadData(is, myTransform4Name);
1419 
1420  return true;
1421  }
1422 
1423  const UT_StringHolder & getCurveGroup() const { return myCurveGroup; }
1424  void setCurveGroup(const UT_StringHolder & val) { myCurveGroup = val; }
1426  {
1427  SOP_Node *thissop = cookparms.getNode();
1428  if (!thissop) return getCurveGroup();
1430  OP_Utils::evalOpParm(result, thissop, "group", cookparms.getCookTime(), 0);
1431  return result;
1432  }
1433  TangentType getTangentType() const { return TangentType(myTangentType); }
1434  void setTangentType(TangentType val) { myTangentType = int64(val); }
1436  {
1437  SOP_Node *thissop = cookparms.getNode();
1438  if (!thissop) return getTangentType();
1439  int64 result;
1440  OP_Utils::evalOpParm(result, thissop, "tangenttype", cookparms.getCookTime(), 0);
1441  return TangentType(result);
1442  }
1443  bool getContinuousClosed() const { return myContinuousClosed; }
1444  void setContinuousClosed(bool val) { myContinuousClosed = val; }
1445  bool opContinuousClosed(const SOP_NodeVerb::CookParms &cookparms) const
1446  {
1447  SOP_Node *thissop = cookparms.getNode();
1448  if (!thissop) return getContinuousClosed();
1449  bool result;
1450  OP_Utils::evalOpParm(result, thissop, "continuousclosed", cookparms.getCookTime(), 0);
1451  return result;
1452  }
1453  bool getExtrapolateEndTangents() const { return myExtrapolateEndTangents; }
1454  void setExtrapolateEndTangents(bool val) { myExtrapolateEndTangents = val; }
1456  {
1457  SOP_Node *thissop = cookparms.getNode();
1458  if (!thissop) return getExtrapolateEndTangents();
1459  bool result;
1460  OP_Utils::evalOpParm(result, thissop, "extrapolateendtangents", cookparms.getCookTime(), 0);
1461  return result;
1462  }
1463  bool getTransformByAttribs() const { return myTransformByAttribs; }
1464  void setTransformByAttribs(bool val) { myTransformByAttribs = val; }
1465  bool opTransformByAttribs(const SOP_NodeVerb::CookParms &cookparms) const
1466  {
1467  SOP_Node *thissop = cookparms.getNode();
1468  if (!thissop) return getTransformByAttribs();
1469  bool result;
1470  OP_Utils::evalOpParm(result, thissop, "transformbyattribs", cookparms.getCookTime(), 0);
1471  return result;
1472  }
1473  UpVectorType getUpVectorType() const { return UpVectorType(myUpVectorType); }
1474  void setUpVectorType(UpVectorType val) { myUpVectorType = int64(val); }
1476  {
1477  SOP_Node *thissop = cookparms.getNode();
1478  if (!thissop) return getUpVectorType();
1479  int64 result;
1480  OP_Utils::evalOpParm(result, thissop, "upvectortype", cookparms.getCookTime(), 0);
1481  return UpVectorType(result);
1482  }
1483  bool getUpVectorAtStart() const { return myUpVectorAtStart; }
1484  void setUpVectorAtStart(bool val) { myUpVectorAtStart = val; }
1485  bool opUpVectorAtStart(const SOP_NodeVerb::CookParms &cookparms) const
1486  {
1487  SOP_Node *thissop = cookparms.getNode();
1488  if (!thissop) return getUpVectorAtStart();
1489  bool result;
1490  OP_Utils::evalOpParm(result, thissop, "upvectoratstart", cookparms.getCookTime(), 0);
1491  return result;
1492  }
1493  bool getUseEndUpVector() const { return myUseEndUpVector; }
1494  void setUseEndUpVector(bool val) { myUseEndUpVector = val; }
1495  bool opUseEndUpVector(const SOP_NodeVerb::CookParms &cookparms) const
1496  {
1497  SOP_Node *thissop = cookparms.getNode();
1498  if (!thissop) return getUseEndUpVector();
1499  bool result;
1500  OP_Utils::evalOpParm(result, thissop, "useendupvector", cookparms.getCookTime(), 0);
1501  return result;
1502  }
1503  const UT_StringHolder & getUpVectorAttrib() const { return myUpVectorAttrib; }
1504  void setUpVectorAttrib(const UT_StringHolder & val) { myUpVectorAttrib = val; }
1506  {
1507  SOP_Node *thissop = cookparms.getNode();
1508  if (!thissop) return getUpVectorAttrib();
1510  OP_Utils::evalOpParm(result, thissop, "upvectorattrib", cookparms.getCookTime(), 0);
1511  return result;
1512  }
1513  const UT_StringHolder & getEndUpVectorAttrib() const { return myEndUpVectorAttrib; }
1514  void setEndUpVectorAttrib(const UT_StringHolder & val) { myEndUpVectorAttrib = val; }
1516  {
1517  SOP_Node *thissop = cookparms.getNode();
1518  if (!thissop) return getEndUpVectorAttrib();
1520  OP_Utils::evalOpParm(result, thissop, "endupvectorattrib", cookparms.getCookTime(), 0);
1521  return result;
1522  }
1523  UT_Vector3D getUpVector() const { return myUpVector; }
1524  void setUpVector(UT_Vector3D val) { myUpVector = val; }
1526  {
1527  SOP_Node *thissop = cookparms.getNode();
1528  if (!thissop) return getUpVector();
1530  OP_Utils::evalOpParm(result, thissop, "upvector", cookparms.getCookTime(), 0);
1531  return result;
1532  }
1533  UT_Vector3D getEndUpVector() const { return myEndUpVector; }
1534  void setEndUpVector(UT_Vector3D val) { myEndUpVector = val; }
1536  {
1537  SOP_Node *thissop = cookparms.getNode();
1538  if (!thissop) return getEndUpVector();
1540  OP_Utils::evalOpParm(result, thissop, "endupvector", cookparms.getCookTime(), 0);
1541  return result;
1542  }
1543  bool getAdjustUpCurvature() const { return myAdjustUpCurvature; }
1544  void setAdjustUpCurvature(bool val) { myAdjustUpCurvature = val; }
1545  bool opAdjustUpCurvature(const SOP_NodeVerb::CookParms &cookparms) const
1546  {
1547  SOP_Node *thissop = cookparms.getNode();
1548  if (!thissop) return getAdjustUpCurvature();
1549  bool result;
1550  OP_Utils::evalOpParm(result, thissop, "adjustupcurvature", cookparms.getCookTime(), 0);
1551  return result;
1552  }
1553  fpreal64 getCurvatureScale() const { return myCurvatureScale; }
1554  void setCurvatureScale(fpreal64 val) { myCurvatureScale = val; }
1556  {
1557  SOP_Node *thissop = cookparms.getNode();
1558  if (!thissop) return getCurvatureScale();
1559  fpreal64 result;
1560  OP_Utils::evalOpParm(result, thissop, "curvaturescale", cookparms.getCookTime(), 0);
1561  return result;
1562  }
1564  void setEnableCurvatureScaleAttrib(EnableCurvatureScaleAttrib val) { myEnableCurvatureScaleAttrib = int64(val); }
1566  {
1567  SOP_Node *thissop = cookparms.getNode();
1568  if (!thissop) return getEnableCurvatureScaleAttrib();
1569  int64 result;
1570  OP_Utils::evalOpParm(result, thissop, "enablecurvaturescaleattrib", cookparms.getCookTime(), 0);
1571  return EnableCurvatureScaleAttrib(result);
1572  }
1573  const UT_StringHolder & getCurvatureScaleAttrib() const { return myCurvatureScaleAttrib; }
1574  void setCurvatureScaleAttrib(const UT_StringHolder & val) { myCurvatureScaleAttrib = val; }
1576  {
1577  SOP_Node *thissop = cookparms.getNode();
1578  if (!thissop) return getCurvatureScaleAttrib();
1580  OP_Utils::evalOpParm(result, thissop, "curvaturescaleattrib", cookparms.getCookTime(), 0);
1581  return result;
1582  }
1583  bool getEnableCurvatureAttrib() const { return myEnableCurvatureAttrib; }
1584  void setEnableCurvatureAttrib(bool val) { myEnableCurvatureAttrib = val; }
1586  {
1587  SOP_Node *thissop = cookparms.getNode();
1588  if (!thissop) return getEnableCurvatureAttrib();
1589  bool result;
1590  OP_Utils::evalOpParm(result, thissop, "enablecurvatureattrib", cookparms.getCookTime(), 0);
1591  return result;
1592  }
1593  const UT_StringHolder & getCurvatureAttrib() const { return myCurvatureAttrib; }
1594  void setCurvatureAttrib(const UT_StringHolder & val) { myCurvatureAttrib = val; }
1596  {
1597  SOP_Node *thissop = cookparms.getNode();
1598  if (!thissop) return getCurvatureAttrib();
1600  OP_Utils::evalOpParm(result, thissop, "curvatureattrib", cookparms.getCookTime(), 0);
1601  return result;
1602  }
1603  ROrd getROrd() const { return ROrd(myROrd); }
1604  void setROrd(ROrd val) { myROrd = int64(val); }
1605  ROrd opROrd(const SOP_NodeVerb::CookParms &cookparms) const
1606  {
1607  SOP_Node *thissop = cookparms.getNode();
1608  if (!thissop) return getROrd();
1609  int64 result;
1610  OP_Utils::evalOpParm(result, thissop, "rOrd", cookparms.getCookTime(), 0);
1611  return ROrd(result);
1612  }
1613  bool getApplyRoll() const { return myApplyRoll; }
1614  void setApplyRoll(bool val) { myApplyRoll = val; }
1615  bool opApplyRoll(const SOP_NodeVerb::CookParms &cookparms) const
1616  {
1617  SOP_Node *thissop = cookparms.getNode();
1618  if (!thissop) return getApplyRoll();
1619  bool result;
1620  OP_Utils::evalOpParm(result, thissop, "applyroll", cookparms.getCookTime(), 0);
1621  return result;
1622  }
1623  fpreal64 getRoll() const { return myRoll; }
1624  void setRoll(fpreal64 val) { myRoll = val; }
1625  fpreal64 opRoll(const SOP_NodeVerb::CookParms &cookparms) const
1626  {
1627  SOP_Node *thissop = cookparms.getNode();
1628  if (!thissop) return getRoll();
1629  fpreal64 result;
1630  OP_Utils::evalOpParm(result, thissop, "roll", cookparms.getCookTime(), 0);
1631  return result;
1632  }
1633  RollPer getRollPer() const { return RollPer(myRollPer); }
1634  void setRollPer(RollPer val) { myRollPer = int64(val); }
1636  {
1637  SOP_Node *thissop = cookparms.getNode();
1638  if (!thissop) return getRollPer();
1639  int64 result;
1640  OP_Utils::evalOpParm(result, thissop, "rollper", cookparms.getCookTime(), 0);
1641  return RollPer(result);
1642  }
1643  int64 getFullTwists() const { return myFullTwists; }
1644  void setFullTwists(int64 val) { myFullTwists = val; }
1646  {
1647  SOP_Node *thissop = cookparms.getNode();
1648  if (!thissop) return getFullTwists();
1649  int64 result;
1650  OP_Utils::evalOpParm(result, thissop, "fulltwists", cookparms.getCookTime(), 0);
1651  return result;
1652  }
1653  fpreal64 getIncRoll() const { return myIncRoll; }
1654  void setIncRoll(fpreal64 val) { myIncRoll = val; }
1656  {
1657  SOP_Node *thissop = cookparms.getNode();
1658  if (!thissop) return getIncRoll();
1659  fpreal64 result;
1660  OP_Utils::evalOpParm(result, thissop, "incroll", cookparms.getCookTime(), 0);
1661  return result;
1662  }
1663  const UT_StringHolder & getRollAttrib() const { return myRollAttrib; }
1664  void setRollAttrib(const UT_StringHolder & val) { myRollAttrib = val; }
1666  {
1667  SOP_Node *thissop = cookparms.getNode();
1668  if (!thissop) return getRollAttrib();
1670  OP_Utils::evalOpParm(result, thissop, "rollattrib", cookparms.getCookTime(), 0);
1671  return result;
1672  }
1673  bool getApplyYaw() const { return myApplyYaw; }
1674  void setApplyYaw(bool val) { myApplyYaw = val; }
1675  bool opApplyYaw(const SOP_NodeVerb::CookParms &cookparms) const
1676  {
1677  SOP_Node *thissop = cookparms.getNode();
1678  if (!thissop) return getApplyYaw();
1679  bool result;
1680  OP_Utils::evalOpParm(result, thissop, "applyyaw", cookparms.getCookTime(), 0);
1681  return result;
1682  }
1683  fpreal64 getYaw() const { return myYaw; }
1684  void setYaw(fpreal64 val) { myYaw = val; }
1685  fpreal64 opYaw(const SOP_NodeVerb::CookParms &cookparms) const
1686  {
1687  SOP_Node *thissop = cookparms.getNode();
1688  if (!thissop) return getYaw();
1689  fpreal64 result;
1690  OP_Utils::evalOpParm(result, thissop, "yaw", cookparms.getCookTime(), 0);
1691  return result;
1692  }
1693  YawPer getYawPer() const { return YawPer(myYawPer); }
1694  void setYawPer(YawPer val) { myYawPer = int64(val); }
1695  YawPer opYawPer(const SOP_NodeVerb::CookParms &cookparms) const
1696  {
1697  SOP_Node *thissop = cookparms.getNode();
1698  if (!thissop) return getYawPer();
1699  int64 result;
1700  OP_Utils::evalOpParm(result, thissop, "yawper", cookparms.getCookTime(), 0);
1701  return YawPer(result);
1702  }
1703  fpreal64 getIncYaw() const { return myIncYaw; }
1704  void setIncYaw(fpreal64 val) { myIncYaw = val; }
1706  {
1707  SOP_Node *thissop = cookparms.getNode();
1708  if (!thissop) return getIncYaw();
1709  fpreal64 result;
1710  OP_Utils::evalOpParm(result, thissop, "incyaw", cookparms.getCookTime(), 0);
1711  return result;
1712  }
1713  const UT_StringHolder & getYawAttrib() const { return myYawAttrib; }
1714  void setYawAttrib(const UT_StringHolder & val) { myYawAttrib = val; }
1716  {
1717  SOP_Node *thissop = cookparms.getNode();
1718  if (!thissop) return getYawAttrib();
1720  OP_Utils::evalOpParm(result, thissop, "yawattrib", cookparms.getCookTime(), 0);
1721  return result;
1722  }
1723  bool getApplyPitch() const { return myApplyPitch; }
1724  void setApplyPitch(bool val) { myApplyPitch = val; }
1725  bool opApplyPitch(const SOP_NodeVerb::CookParms &cookparms) const
1726  {
1727  SOP_Node *thissop = cookparms.getNode();
1728  if (!thissop) return getApplyPitch();
1729  bool result;
1730  OP_Utils::evalOpParm(result, thissop, "applypitch", cookparms.getCookTime(), 0);
1731  return result;
1732  }
1733  fpreal64 getPitch() const { return myPitch; }
1734  void setPitch(fpreal64 val) { myPitch = val; }
1735  fpreal64 opPitch(const SOP_NodeVerb::CookParms &cookparms) const
1736  {
1737  SOP_Node *thissop = cookparms.getNode();
1738  if (!thissop) return getPitch();
1739  fpreal64 result;
1740  OP_Utils::evalOpParm(result, thissop, "pitch", cookparms.getCookTime(), 0);
1741  return result;
1742  }
1743  PitchPer getPitchPer() const { return PitchPer(myPitchPer); }
1744  void setPitchPer(PitchPer val) { myPitchPer = int64(val); }
1746  {
1747  SOP_Node *thissop = cookparms.getNode();
1748  if (!thissop) return getPitchPer();
1749  int64 result;
1750  OP_Utils::evalOpParm(result, thissop, "pitchper", cookparms.getCookTime(), 0);
1751  return PitchPer(result);
1752  }
1753  fpreal64 getIncPitch() const { return myIncPitch; }
1754  void setIncPitch(fpreal64 val) { myIncPitch = val; }
1756  {
1757  SOP_Node *thissop = cookparms.getNode();
1758  if (!thissop) return getIncPitch();
1759  fpreal64 result;
1760  OP_Utils::evalOpParm(result, thissop, "incpitch", cookparms.getCookTime(), 0);
1761  return result;
1762  }
1763  const UT_StringHolder & getPitchAttrib() const { return myPitchAttrib; }
1764  void setPitchAttrib(const UT_StringHolder & val) { myPitchAttrib = val; }
1766  {
1767  SOP_Node *thissop = cookparms.getNode();
1768  if (!thissop) return getPitchAttrib();
1770  OP_Utils::evalOpParm(result, thissop, "pitchattrib", cookparms.getCookTime(), 0);
1771  return result;
1772  }
1773  bool getNormalize() const { return myNormalize; }
1774  void setNormalize(bool val) { myNormalize = val; }
1775  bool opNormalize(const SOP_NodeVerb::CookParms &cookparms) const
1776  {
1777  SOP_Node *thissop = cookparms.getNode();
1778  if (!thissop) return getNormalize();
1779  bool result;
1780  OP_Utils::evalOpParm(result, thissop, "normalize", cookparms.getCookTime(), 0);
1781  return result;
1782  }
1783  fpreal64 getScale() const { return myScale; }
1784  void setScale(fpreal64 val) { myScale = val; }
1785  fpreal64 opScale(const SOP_NodeVerb::CookParms &cookparms) const
1786  {
1787  SOP_Node *thissop = cookparms.getNode();
1788  if (!thissop) return getScale();
1789  fpreal64 result;
1790  OP_Utils::evalOpParm(result, thissop, "scale", cookparms.getCookTime(), 0);
1791  return result;
1792  }
1793  bool getStretchAroundTurns() const { return myStretchAroundTurns; }
1794  void setStretchAroundTurns(bool val) { myStretchAroundTurns = val; }
1795  bool opStretchAroundTurns(const SOP_NodeVerb::CookParms &cookparms) const
1796  {
1797  SOP_Node *thissop = cookparms.getNode();
1798  if (!thissop) return getStretchAroundTurns();
1799  bool result;
1800  OP_Utils::evalOpParm(result, thissop, "stretcharoundturns", cookparms.getCookTime(), 0);
1801  return result;
1802  }
1803  fpreal64 getMaxStretchAroundTurns() const { return myMaxStretchAroundTurns; }
1804  void setMaxStretchAroundTurns(fpreal64 val) { myMaxStretchAroundTurns = val; }
1806  {
1807  SOP_Node *thissop = cookparms.getNode();
1808  if (!thissop) return getMaxStretchAroundTurns();
1809  fpreal64 result;
1810  OP_Utils::evalOpParm(result, thissop, "maxstretcharoundturns", cookparms.getCookTime(), 0);
1811  return result;
1812  }
1813  Class getClass() const { return Class(myClass); }
1814  void setClass(Class val) { myClass = int64(val); }
1815  Class opClass(const SOP_NodeVerb::CookParms &cookparms) const
1816  {
1817  SOP_Node *thissop = cookparms.getNode();
1818  if (!thissop) return getClass();
1819  int64 result;
1820  OP_Utils::evalOpParm(result, thissop, "class", cookparms.getCookTime(), 0);
1821  return Class(result);
1822  }
1823  bool getOutputXAxis() const { return myOutputXAxis; }
1824  void setOutputXAxis(bool val) { myOutputXAxis = val; }
1825  bool opOutputXAxis(const SOP_NodeVerb::CookParms &cookparms) const
1826  {
1827  SOP_Node *thissop = cookparms.getNode();
1828  if (!thissop) return getOutputXAxis();
1829  bool result;
1830  OP_Utils::evalOpParm(result, thissop, "outputxaxis", cookparms.getCookTime(), 0);
1831  return result;
1832  }
1833  const UT_StringHolder & getXAxisName() const { return myXAxisName; }
1834  void setXAxisName(const UT_StringHolder & val) { myXAxisName = val; }
1836  {
1837  SOP_Node *thissop = cookparms.getNode();
1838  if (!thissop) return getXAxisName();
1840  OP_Utils::evalOpParm(result, thissop, "xaxisname", cookparms.getCookTime(), 0);
1841  return result;
1842  }
1843  bool getOutputYAxis() const { return myOutputYAxis; }
1844  void setOutputYAxis(bool val) { myOutputYAxis = val; }
1845  bool opOutputYAxis(const SOP_NodeVerb::CookParms &cookparms) const
1846  {
1847  SOP_Node *thissop = cookparms.getNode();
1848  if (!thissop) return getOutputYAxis();
1849  bool result;
1850  OP_Utils::evalOpParm(result, thissop, "outputyaxis", cookparms.getCookTime(), 0);
1851  return result;
1852  }
1853  const UT_StringHolder & getYAxisName() const { return myYAxisName; }
1854  void setYAxisName(const UT_StringHolder & val) { myYAxisName = val; }
1856  {
1857  SOP_Node *thissop = cookparms.getNode();
1858  if (!thissop) return getYAxisName();
1860  OP_Utils::evalOpParm(result, thissop, "yaxisname", cookparms.getCookTime(), 0);
1861  return result;
1862  }
1863  bool getOutputZAxis() const { return myOutputZAxis; }
1864  void setOutputZAxis(bool val) { myOutputZAxis = val; }
1865  bool opOutputZAxis(const SOP_NodeVerb::CookParms &cookparms) const
1866  {
1867  SOP_Node *thissop = cookparms.getNode();
1868  if (!thissop) return getOutputZAxis();
1869  bool result;
1870  OP_Utils::evalOpParm(result, thissop, "outputzaxis", cookparms.getCookTime(), 0);
1871  return result;
1872  }
1873  const UT_StringHolder & getZAxisName() const { return myZAxisName; }
1874  void setZAxisName(const UT_StringHolder & val) { myZAxisName = val; }
1876  {
1877  SOP_Node *thissop = cookparms.getNode();
1878  if (!thissop) return getZAxisName();
1880  OP_Utils::evalOpParm(result, thissop, "zaxisname", cookparms.getCookTime(), 0);
1881  return result;
1882  }
1883  bool getOutputTranslation() const { return myOutputTranslation; }
1884  void setOutputTranslation(bool val) { myOutputTranslation = val; }
1885  bool opOutputTranslation(const SOP_NodeVerb::CookParms &cookparms) const
1886  {
1887  SOP_Node *thissop = cookparms.getNode();
1888  if (!thissop) return getOutputTranslation();
1889  bool result;
1890  OP_Utils::evalOpParm(result, thissop, "outputtranslation", cookparms.getCookTime(), 0);
1891  return result;
1892  }
1893  const UT_StringHolder & getTranslationName() const { return myTranslationName; }
1894  void setTranslationName(const UT_StringHolder & val) { myTranslationName = val; }
1896  {
1897  SOP_Node *thissop = cookparms.getNode();
1898  if (!thissop) return getTranslationName();
1900  OP_Utils::evalOpParm(result, thissop, "translationname", cookparms.getCookTime(), 0);
1901  return result;
1902  }
1903  bool getOutputQuaternion() const { return myOutputQuaternion; }
1904  void setOutputQuaternion(bool val) { myOutputQuaternion = val; }
1905  bool opOutputQuaternion(const SOP_NodeVerb::CookParms &cookparms) const
1906  {
1907  SOP_Node *thissop = cookparms.getNode();
1908  if (!thissop) return getOutputQuaternion();
1909  bool result;
1910  OP_Utils::evalOpParm(result, thissop, "outputquaternion", cookparms.getCookTime(), 0);
1911  return result;
1912  }
1913  const UT_StringHolder & getQuaternionName() const { return myQuaternionName; }
1914  void setQuaternionName(const UT_StringHolder & val) { myQuaternionName = val; }
1916  {
1917  SOP_Node *thissop = cookparms.getNode();
1918  if (!thissop) return getQuaternionName();
1920  OP_Utils::evalOpParm(result, thissop, "quaternionname", cookparms.getCookTime(), 0);
1921  return result;
1922  }
1923  bool getOutputTransform3() const { return myOutputTransform3; }
1924  void setOutputTransform3(bool val) { myOutputTransform3 = val; }
1925  bool opOutputTransform3(const SOP_NodeVerb::CookParms &cookparms) const
1926  {
1927  SOP_Node *thissop = cookparms.getNode();
1928  if (!thissop) return getOutputTransform3();
1929  bool result;
1930  OP_Utils::evalOpParm(result, thissop, "outputtransform3", cookparms.getCookTime(), 0);
1931  return result;
1932  }
1933  const UT_StringHolder & getTransform3Name() const { return myTransform3Name; }
1934  void setTransform3Name(const UT_StringHolder & val) { myTransform3Name = val; }
1936  {
1937  SOP_Node *thissop = cookparms.getNode();
1938  if (!thissop) return getTransform3Name();
1940  OP_Utils::evalOpParm(result, thissop, "transform3name", cookparms.getCookTime(), 0);
1941  return result;
1942  }
1943  bool getOutputTransform4() const { return myOutputTransform4; }
1944  void setOutputTransform4(bool val) { myOutputTransform4 = val; }
1945  bool opOutputTransform4(const SOP_NodeVerb::CookParms &cookparms) const
1946  {
1947  SOP_Node *thissop = cookparms.getNode();
1948  if (!thissop) return getOutputTransform4();
1949  bool result;
1950  OP_Utils::evalOpParm(result, thissop, "outputtransform4", cookparms.getCookTime(), 0);
1951  return result;
1952  }
1953  const UT_StringHolder & getTransform4Name() const { return myTransform4Name; }
1954  void setTransform4Name(const UT_StringHolder & val) { myTransform4Name = val; }
1956  {
1957  SOP_Node *thissop = cookparms.getNode();
1958  if (!thissop) return getTransform4Name();
1960  OP_Utils::evalOpParm(result, thissop, "transform4name", cookparms.getCookTime(), 0);
1961  return result;
1962  }
1963 
1964 private:
1965  UT_StringHolder myCurveGroup;
1966  int64 myTangentType;
1967  bool myContinuousClosed;
1968  bool myExtrapolateEndTangents;
1969  bool myTransformByAttribs;
1970  int64 myUpVectorType;
1971  bool myUpVectorAtStart;
1972  bool myUseEndUpVector;
1973  UT_StringHolder myUpVectorAttrib;
1974  UT_StringHolder myEndUpVectorAttrib;
1975  UT_Vector3D myUpVector;
1976  UT_Vector3D myEndUpVector;
1977  bool myAdjustUpCurvature;
1978  fpreal64 myCurvatureScale;
1979  int64 myEnableCurvatureScaleAttrib;
1980  UT_StringHolder myCurvatureScaleAttrib;
1981  bool myEnableCurvatureAttrib;
1982  UT_StringHolder myCurvatureAttrib;
1983  int64 myROrd;
1984  bool myApplyRoll;
1985  fpreal64 myRoll;
1986  int64 myRollPer;
1987  int64 myFullTwists;
1988  fpreal64 myIncRoll;
1989  UT_StringHolder myRollAttrib;
1990  bool myApplyYaw;
1991  fpreal64 myYaw;
1992  int64 myYawPer;
1993  fpreal64 myIncYaw;
1994  UT_StringHolder myYawAttrib;
1995  bool myApplyPitch;
1996  fpreal64 myPitch;
1997  int64 myPitchPer;
1998  fpreal64 myIncPitch;
1999  UT_StringHolder myPitchAttrib;
2000  bool myNormalize;
2001  fpreal64 myScale;
2002  bool myStretchAroundTurns;
2003  fpreal64 myMaxStretchAroundTurns;
2004  int64 myClass;
2005  bool myOutputXAxis;
2006  UT_StringHolder myXAxisName;
2007  bool myOutputYAxis;
2008  UT_StringHolder myYAxisName;
2009  bool myOutputZAxis;
2010  UT_StringHolder myZAxisName;
2011  bool myOutputTranslation;
2012  UT_StringHolder myTranslationName;
2013  bool myOutputQuaternion;
2014  UT_StringHolder myQuaternionName;
2015  bool myOutputTransform3;
2016  UT_StringHolder myTransform3Name;
2017  bool myOutputTransform4;
2018  UT_StringHolder myTransform4Name;
2019 
2020 };
void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
static void loadData(UT_IStream &is, UT_Matrix3D &v)
type
Definition: core.h:556
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:63
GLsizei const GLfloat * value
Definition: glcorearb.h:824
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:622
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
UT_SharedPtr< const PRM_DataItem > PRM_DataItemHandle
Definition: APEX_Include.h:55
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:303
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:278
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:96
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
virtual UT_StringHolder baseGetSignature() const
Definition: OP_NodeParms.h:294
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:372
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:1401
#define UT_ASSERT(ZZ)
Definition: UT_Assert.h:156
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
static void loadData(UT_IStream &is, UT_Vector3D &v)
void setRollPer(RollPer val)
virtual bool isDirect() const =0
Direct proxies mirror actual nodes:
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
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