HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
SOP_PolyExtrude-2.0.proto.h
Go to the documentation of this file.
1 /* Automagically Generated by generate_proto.py
2  * Do not Edit
3  */
4 #pragma once
5 
6 #include <SOP/SOP_API.h>
7 #include <SOP/SOP_NodeVerb.h>
8 #include <SOP/SOP_GraphProxy.h>
9 
10 #include <OP/OP_Utils.h>
11 #include <PRM/PRM_Parm.h>
12 #include <UT/UT_IStream.h>
13 #include <UT/UT_NTStreamUtil.h>
14 #include <UT/UT_Ramp.h>
15 #include <UT/UT_SharedPtr.h>
16 #include <UT/UT_StringHolder.h>
17 #include <UT/UT_StringStream.h>
18 #include <UT/UT_VectorTypes.h>
19 #include <UT/UT_EnvControl.h>
20 #include <SYS/SYS_Types.h>
21 
22 class DEP_MicroNode;
23 namespace SOP_PolyExtrude_2_0Enums
24 {
25  enum class SplitType
26  {
27  ELEMENTS = 0,
29  };
30  enum class ExtrusionMode
31  {
32  PRIMNORMAL = 0,
34  };
35  enum class PtNormalSrc
36  {
37  PRECOMPUTE = 0,
38  EXISTING,
39  ATTRIBUTE
40  };
41  enum class SpineType
42  {
43  STRAIGHT = 0,
44  CURVED,
45  EXTERNAL
46  };
47  enum class XformSpace
48  {
49  LOCAL = 0,
50  GLOBAL
51  };
52  enum class XformOrder
53  {
54  SRT = 0,
55  STR,
56  RST,
57  RTS,
58  TSR,
59  TRS
60  };
61  enum class RotateOrder
62  {
63  XYZ = 0,
64  XZY,
65  YXZ,
66  YZX,
67  ZXY,
68  ZYX
69  };
70  enum class PreXformOrder
71  {
72  SRT = 0,
73  STR,
74  RST,
75  RTS,
76  TSR,
77  TRS
78  };
80  {
81  XYZ = 0,
82  XZY,
83  YXZ,
84  YZX,
85  ZXY,
86  ZYX
87  };
88  enum class UVStyle
89  {
90  UNITSQUARE = 0,
93  };
94  enum class UVScaling
95  {
96  FITUNITSQUARE = 0,
97  MATCH3D,
98  MATCHUV
99  };
100  enum class Interpolation
101  {
102  LINEAR = 0,
104  };
105  enum class Spacing
106  {
107  ARCLENGTHUNIFORM = 0,
109  };
110 }
111 
112 
114 {
115 public:
116  static int version() { return 1; }
117 
119  {
120  myGroup = ""_UTsh;
121  mySplitType = 1;
122  myUseSplitGroup = false;
123  mySplitGroup = ""_UTsh;
124  myExtrusionMode = 0;
125  myPtNormalSrc = 0;
126  myPtNormalAttrib = "N"_UTsh;
127  myDist = 0;
128  myInset = 0;
129  myTwist = 0;
130  myDivs = 1;
131  mySpineType = 0;
132  myXformFront = false;
133  myXformSpace = 0;
134  myXformOrder = 0;
135  myRotateOrder = 0;
136  myTranslate = UT_Vector3D(0,0,0);
137  myRotate = UT_Vector3D(0,0,0);
138  myScale = UT_Vector3D(1,1,1);
139  myShear = UT_Vector3D(0,0,0);
140  myPivot = UT_Vector3D(0,0,0);
141  myPivotRotate = UT_Vector3D(0,0,0);
142  myPreXformOrder = 0;
143  myPreXformRotateOrder = 0;
144  myPreXformTranslate = UT_Vector3D(0,0,0);
145  myPreXformRotate = UT_Vector3D(0,0,0);
146  myPreXformScale = UT_Vector3D(1,1,1);
147  myPreXformShear = UT_Vector3D(0,0,0);
148  myOutputFront = true;
149  myOutputFrontGrp = false;
150  myFrontGrp = "extrudeFront"_UTsh;
151  myOutputBack = false;
152  myOutputBackGrp = false;
153  myBackGrp = "extrudeBack"_UTsh;
154  myOutputSide = true;
155  myOutputSideGrp = false;
156  mySideGrp = "extrudeSide"_UTsh;
157  myOutputFrontSeamGrp = false;
158  myFrontSeamGrp = "extrudeFrontSeam"_UTsh;
159  myOutputBackSeamGrp = false;
160  myBackSeamGrp = "extrudeBackSeam"_UTsh;
161  myPreserveGroups = true;
162  myLimitInset = true;
163  myCommonLimit = true;
164  myAddVertexNormals = false;
165  myCuspAngle = 60;
166  myCuspFront = true;
167  myCuspBack = true;
168  myGenUVs = true;
169  myUVStyle = 2;
170  myUVScaling = 2;
171  myFrontMagnitude = 1;
172  myBackMagnitude = 1;
173  myFrontStiffness = 0;
174  myBackStiffness = 0;
175  myInterpolation = 1;
176  mySpacing = 0;
177  myReverseSpineDirection = false;
178  myAxialRotation = 0;
179  myFrontBlend = 0.1;
180  myBackBlend = 0.1;
181  myThicknessScale = 1;
182  myUseThicknessAttrib = true;
183  myThicknessAttrib = "thickness"_UTsh;
184  myUseThicknessRamp = true;
185  myThicknessRamp = UT_SharedPtr<UT_Ramp>(0);
186  myUseTwistAttrib = true;
187  myTwistAttrib = "twist"_UTsh;
188  myUseTwistRamp = true;
189  myTwistRamp = UT_SharedPtr<UT_Ramp>(0);
190  myTwistScale = 180;
191  myUseLocalZScaleAttrib = false;
192  myLocalZScaleAttrib = "zscale"_UTsh;
193  myUseLocalInsetScaleAttrib = false;
194  myLocalInsetScaleAttrib = "insetscale"_UTsh;
195  myUseLocalTwistScaleAttrib = false;
196  myLocalTwistScaleAttrib = "twistscale"_UTsh;
197  myUseLocalDivScaleAttrib = false;
198  myLocalDivScaleAttrib = "divsscale"_UTsh;
199  myUseLocalXAttrib = false;
200  myLocalXAttrib = "localx"_UTsh;
201  myUseLocalZAttrib = false;
202  myLocalZAttrib = "localz"_UTsh;
203  myUseLocalCtrAttrib = false;
204  myLocalCtrAttrib = "localctr"_UTsh;
205 
206  }
207 
208  explicit SOP_PolyExtrude_2_0Parms(const SOP_PolyExtrude_2_0Parms &) = default;
210  SOP_PolyExtrude_2_0Parms(SOP_PolyExtrude_2_0Parms &&) noexcept = default;
211  SOP_PolyExtrude_2_0Parms &operator=(SOP_PolyExtrude_2_0Parms &&) noexcept = default;
212 
214 
216  {
217  if (myGroup != src.myGroup) return false;
218  if (mySplitType != src.mySplitType) return false;
219  if (myUseSplitGroup != src.myUseSplitGroup) return false;
220  if (mySplitGroup != src.mySplitGroup) return false;
221  if (myExtrusionMode != src.myExtrusionMode) return false;
222  if (myPtNormalSrc != src.myPtNormalSrc) return false;
223  if (myPtNormalAttrib != src.myPtNormalAttrib) return false;
224  if (myDist != src.myDist) return false;
225  if (myInset != src.myInset) return false;
226  if (myTwist != src.myTwist) return false;
227  if (myDivs != src.myDivs) return false;
228  if (mySpineType != src.mySpineType) return false;
229  if (myXformFront != src.myXformFront) return false;
230  if (myXformSpace != src.myXformSpace) return false;
231  if (myXformOrder != src.myXformOrder) return false;
232  if (myRotateOrder != src.myRotateOrder) return false;
233  if (myTranslate != src.myTranslate) return false;
234  if (myRotate != src.myRotate) return false;
235  if (myScale != src.myScale) return false;
236  if (myShear != src.myShear) return false;
237  if (myPivot != src.myPivot) return false;
238  if (myPivotRotate != src.myPivotRotate) return false;
239  if (myPreXformOrder != src.myPreXformOrder) return false;
240  if (myPreXformRotateOrder != src.myPreXformRotateOrder) return false;
241  if (myPreXformTranslate != src.myPreXformTranslate) return false;
242  if (myPreXformRotate != src.myPreXformRotate) return false;
243  if (myPreXformScale != src.myPreXformScale) return false;
244  if (myPreXformShear != src.myPreXformShear) return false;
245  if (myOutputFront != src.myOutputFront) return false;
246  if (myOutputFrontGrp != src.myOutputFrontGrp) return false;
247  if (myFrontGrp != src.myFrontGrp) return false;
248  if (myOutputBack != src.myOutputBack) return false;
249  if (myOutputBackGrp != src.myOutputBackGrp) return false;
250  if (myBackGrp != src.myBackGrp) return false;
251  if (myOutputSide != src.myOutputSide) return false;
252  if (myOutputSideGrp != src.myOutputSideGrp) return false;
253  if (mySideGrp != src.mySideGrp) return false;
254  if (myOutputFrontSeamGrp != src.myOutputFrontSeamGrp) return false;
255  if (myFrontSeamGrp != src.myFrontSeamGrp) return false;
256  if (myOutputBackSeamGrp != src.myOutputBackSeamGrp) return false;
257  if (myBackSeamGrp != src.myBackSeamGrp) return false;
258  if (myPreserveGroups != src.myPreserveGroups) return false;
259  if (myLimitInset != src.myLimitInset) return false;
260  if (myCommonLimit != src.myCommonLimit) return false;
261  if (myAddVertexNormals != src.myAddVertexNormals) return false;
262  if (myCuspAngle != src.myCuspAngle) return false;
263  if (myCuspFront != src.myCuspFront) return false;
264  if (myCuspBack != src.myCuspBack) return false;
265  if (myGenUVs != src.myGenUVs) return false;
266  if (myUVStyle != src.myUVStyle) return false;
267  if (myUVScaling != src.myUVScaling) return false;
268  if (myFrontMagnitude != src.myFrontMagnitude) return false;
269  if (myBackMagnitude != src.myBackMagnitude) return false;
270  if (myFrontStiffness != src.myFrontStiffness) return false;
271  if (myBackStiffness != src.myBackStiffness) return false;
272  if (myInterpolation != src.myInterpolation) return false;
273  if (mySpacing != src.mySpacing) return false;
274  if (myReverseSpineDirection != src.myReverseSpineDirection) return false;
275  if (myAxialRotation != src.myAxialRotation) return false;
276  if (myFrontBlend != src.myFrontBlend) return false;
277  if (myBackBlend != src.myBackBlend) return false;
278  if (myThicknessScale != src.myThicknessScale) return false;
279  if (myUseThicknessAttrib != src.myUseThicknessAttrib) return false;
280  if (myThicknessAttrib != src.myThicknessAttrib) return false;
281  if (myUseThicknessRamp != src.myUseThicknessRamp) return false;
282  if (myThicknessRamp != src.myThicknessRamp)
283  { if (!myThicknessRamp || !src.myThicknessRamp || !(*myThicknessRamp == *src.myThicknessRamp)) return false; }
284  if (myUseTwistAttrib != src.myUseTwistAttrib) return false;
285  if (myTwistAttrib != src.myTwistAttrib) return false;
286  if (myUseTwistRamp != src.myUseTwistRamp) return false;
287  if (myTwistRamp != src.myTwistRamp)
288  { if (!myTwistRamp || !src.myTwistRamp || !(*myTwistRamp == *src.myTwistRamp)) return false; }
289  if (myTwistScale != src.myTwistScale) return false;
290  if (myUseLocalZScaleAttrib != src.myUseLocalZScaleAttrib) return false;
291  if (myLocalZScaleAttrib != src.myLocalZScaleAttrib) return false;
292  if (myUseLocalInsetScaleAttrib != src.myUseLocalInsetScaleAttrib) return false;
293  if (myLocalInsetScaleAttrib != src.myLocalInsetScaleAttrib) return false;
294  if (myUseLocalTwistScaleAttrib != src.myUseLocalTwistScaleAttrib) return false;
295  if (myLocalTwistScaleAttrib != src.myLocalTwistScaleAttrib) return false;
296  if (myUseLocalDivScaleAttrib != src.myUseLocalDivScaleAttrib) return false;
297  if (myLocalDivScaleAttrib != src.myLocalDivScaleAttrib) return false;
298  if (myUseLocalXAttrib != src.myUseLocalXAttrib) return false;
299  if (myLocalXAttrib != src.myLocalXAttrib) return false;
300  if (myUseLocalZAttrib != src.myUseLocalZAttrib) return false;
301  if (myLocalZAttrib != src.myLocalZAttrib) return false;
302  if (myUseLocalCtrAttrib != src.myUseLocalCtrAttrib) return false;
303  if (myLocalCtrAttrib != src.myLocalCtrAttrib) return false;
304 
305  return true;
306  }
308  {
309  return !operator==(src);
310  }
324 
325 
326 
327  void buildFromOp(const OP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
328  {
329  myGroup = ""_UTsh;
330  if (true)
331  graph->evalOpParm(myGroup, nodeidx, "group", time, 0);
332  mySplitType = 1;
333  if (true)
334  graph->evalOpParm(mySplitType, nodeidx, "splittype", time, 0);
335  myUseSplitGroup = false;
336  if (true && ( (true&&!(((int64(getSplitType())!=1)))) ) )
337  graph->evalOpParm(myUseSplitGroup, nodeidx, "usesplitgroup", time, 0);
338  mySplitGroup = ""_UTsh;
339  if (true && ( (true&&!(((int64(getSplitType())!=1))||((getUseSplitGroup()!=1)))) ) )
340  graph->evalOpParm(mySplitGroup, nodeidx, "splitgroup", time, 0);
341  myExtrusionMode = 0;
342  if (true)
343  graph->evalOpParm(myExtrusionMode, nodeidx, "extrusionmode", time, 0);
344  myPtNormalSrc = 0;
345  if (true && ( (true&&!(((int64(getExtrusionMode())!=1)))) ) )
346  graph->evalOpParm(myPtNormalSrc, nodeidx, "ptnormalsrc", time, 0);
347  myPtNormalAttrib = "N"_UTsh;
348  if (true && ( (true&&!(((int64(getExtrusionMode())!=1))||((int64(getPtNormalSrc())!=2)))) ) )
349  graph->evalOpParm(myPtNormalAttrib, nodeidx, "ptnormalattrib", time, 0);
350  myDist = 0;
351  if (true)
352  graph->evalOpParm(myDist, nodeidx, "dist", time, 0);
353  myInset = 0;
354  if (true)
355  graph->evalOpParm(myInset, nodeidx, "inset", time, 0);
356  myTwist = 0;
357  if (true)
358  graph->evalOpParm(myTwist, nodeidx, "twist", time, 0);
359  myDivs = 1;
360  if (true)
361  graph->evalOpParm(myDivs, nodeidx, "divs", time, 0);
362  mySpineType = 0;
363  if (true)
364  graph->evalOpParm(mySpineType, nodeidx, "spinetype", time, 0);
365  myXformFront = false;
366  if (true)
367  graph->evalOpParm(myXformFront, nodeidx, "xformfront", time, 0);
368  myXformSpace = 0;
369  if (true && ( (true&&!(((getXformFront()==0)))) ) )
370  graph->evalOpParm(myXformSpace, nodeidx, "xformspace", time, 0);
371  myXformOrder = 0;
372  if (true && ( (true&&!(((getXformFront()==0)))) ) )
373  graph->evalOpParm(myXformOrder, nodeidx, "rst", time, 0);
374  myRotateOrder = 0;
375  if (true && ( (true&&!(((getXformFront()==0)))) ) )
376  graph->evalOpParm(myRotateOrder, nodeidx, "xyz", time, 0);
377  myTranslate = UT_Vector3D(0,0,0);
378  if (true && ( (true&&!(((getXformFront()==0)))) ) )
379  graph->evalOpParm(myTranslate, nodeidx, "translate", time, 0);
380  myRotate = UT_Vector3D(0,0,0);
381  if (true && ( (true&&!(((getXformFront()==0)))) ) )
382  graph->evalOpParm(myRotate, nodeidx, "rotate", time, 0);
383  myScale = UT_Vector3D(1,1,1);
384  if (true && ( (true&&!(((getXformFront()==0)))) ) )
385  graph->evalOpParm(myScale, nodeidx, "scale", time, 0);
386  myShear = UT_Vector3D(0,0,0);
387  if (true && ( (true&&!(((getXformFront()==0)))) ) )
388  graph->evalOpParm(myShear, nodeidx, "shear", time, 0);
389  myPivot = UT_Vector3D(0,0,0);
390  if (true && ( (true&&!(((getXformFront()==0)))) ) )
391  graph->evalOpParm(myPivot, nodeidx, "pivot", time, 0);
392  myPivotRotate = UT_Vector3D(0,0,0);
393  if (true && ( (true&&!(((getXformFront()==0)))) ) )
394  graph->evalOpParm(myPivotRotate, nodeidx, "pivotrotate", time, 0);
395  myPreXformOrder = 0;
396  if (true && ( (true&&!(((getXformFront()==0)))) ) )
397  graph->evalOpParm(myPreXformOrder, nodeidx, "prexform_rst", time, 0);
398  myPreXformRotateOrder = 0;
399  if (true && ( (true&&!(((getXformFront()==0)))) ) )
400  graph->evalOpParm(myPreXformRotateOrder, nodeidx, "prexform_xyz", time, 0);
401  myPreXformTranslate = UT_Vector3D(0,0,0);
402  if (true && ( (true&&!(((getXformFront()==0)))) ) )
403  graph->evalOpParm(myPreXformTranslate, nodeidx, "prexform_translate", time, 0);
404  myPreXformRotate = UT_Vector3D(0,0,0);
405  if (true && ( (true&&!(((getXformFront()==0)))) ) )
406  graph->evalOpParm(myPreXformRotate, nodeidx, "prexform_rotate", time, 0);
407  myPreXformScale = UT_Vector3D(1,1,1);
408  if (true && ( (true&&!(((getXformFront()==0)))) ) )
409  graph->evalOpParm(myPreXformScale, nodeidx, "prexform_scale", time, 0);
410  myPreXformShear = UT_Vector3D(0,0,0);
411  if (true && ( (true&&!(((getXformFront()==0)))) ) )
412  graph->evalOpParm(myPreXformShear, nodeidx, "prexform_shear", time, 0);
413  myOutputFront = true;
414  if (true)
415  graph->evalOpParm(myOutputFront, nodeidx, "outputfront", time, 0);
416  myOutputFrontGrp = false;
417  if (true)
418  graph->evalOpParm(myOutputFrontGrp, nodeidx, "outputfrontgrp", time, 0);
419  myFrontGrp = "extrudeFront"_UTsh;
420  if (true && ( (true&&!(((getOutputFrontGrp()==0)))) ) )
421  graph->evalOpParm(myFrontGrp, nodeidx, "frontgrp", time, 0);
422  myOutputBack = false;
423  if (true)
424  graph->evalOpParm(myOutputBack, nodeidx, "outputback", time, 0);
425  myOutputBackGrp = false;
426  if (true)
427  graph->evalOpParm(myOutputBackGrp, nodeidx, "outputbackgrp", time, 0);
428  myBackGrp = "extrudeBack"_UTsh;
429  if (true && ( (true&&!(((getOutputBackGrp()==0)))) ) )
430  graph->evalOpParm(myBackGrp, nodeidx, "backgrp", time, 0);
431  myOutputSide = true;
432  if (true)
433  graph->evalOpParm(myOutputSide, nodeidx, "outputside", time, 0);
434  myOutputSideGrp = false;
435  if (true)
436  graph->evalOpParm(myOutputSideGrp, nodeidx, "outputsidegrp", time, 0);
437  mySideGrp = "extrudeSide"_UTsh;
438  if (true && ( (true&&!(((getOutputSideGrp()==0)))) ) )
439  graph->evalOpParm(mySideGrp, nodeidx, "sidegrp", time, 0);
440  myOutputFrontSeamGrp = false;
441  if (true)
442  graph->evalOpParm(myOutputFrontSeamGrp, nodeidx, "outputfrontseamgrp", time, 0);
443  myFrontSeamGrp = "extrudeFrontSeam"_UTsh;
444  if (true && ( (true&&!(((getOutputFrontSeamGrp()==0)))) ) )
445  graph->evalOpParm(myFrontSeamGrp, nodeidx, "frontseamgrp", time, 0);
446  myOutputBackSeamGrp = false;
447  if (true)
448  graph->evalOpParm(myOutputBackSeamGrp, nodeidx, "outputbackseamgrp", time, 0);
449  myBackSeamGrp = "extrudeBackSeam"_UTsh;
450  if (true && ( (true&&!(((getOutputBackSeamGrp()==0)))) ) )
451  graph->evalOpParm(myBackSeamGrp, nodeidx, "backseamgrp", time, 0);
452  myPreserveGroups = true;
453  if (true)
454  graph->evalOpParm(myPreserveGroups, nodeidx, "preservegroups", time, 0);
455  myLimitInset = true;
456  if (true)
457  graph->evalOpParm(myLimitInset, nodeidx, "limitinset", time, 0);
458  myCommonLimit = true;
459  if (true && ( (true&&!(((getLimitInset()==0)))) ) )
460  graph->evalOpParm(myCommonLimit, nodeidx, "commonlimit", time, 0);
461  myAddVertexNormals = false;
462  if (true)
463  graph->evalOpParm(myAddVertexNormals, nodeidx, "addvertexnomrals", time, 0);
464  myCuspAngle = 60;
465  if (true && ( (true&&!(((getAddVertexNormals()==0)))) ) )
466  graph->evalOpParm(myCuspAngle, nodeidx, "cuspangle", time, 0);
467  myCuspFront = true;
468  if (true && ( (true&&!(((getAddVertexNormals()==0)))) ) )
469  graph->evalOpParm(myCuspFront, nodeidx, "cuspfront", time, 0);
470  myCuspBack = true;
471  if (true && ( (true&&!(((getAddVertexNormals()==0)))) ) )
472  graph->evalOpParm(myCuspBack, nodeidx, "cuspback", time, 0);
473  myGenUVs = true;
474  if (true)
475  graph->evalOpParm(myGenUVs, nodeidx, "genuvs", time, 0);
476  myUVStyle = 2;
477  if (true && ( (true&&!(((getGenUVs()==0)))) ) )
478  graph->evalOpParm(myUVStyle, nodeidx, "uvstyle", time, 0);
479  myUVScaling = 2;
480  if (true && ( (true&&!(((getGenUVs()==0)))) ) )
481  graph->evalOpParm(myUVScaling, nodeidx, "uvscaling", time, 0);
482  myFrontMagnitude = 1;
483  if (true && ( (true&&!(((int64(getSpineType())==0)))) ) )
484  graph->evalOpParm(myFrontMagnitude, nodeidx, "frontmagnitude", time, 0);
485  myBackMagnitude = 1;
486  if (true && ( (true&&!(((int64(getSpineType())==0)))) ) )
487  graph->evalOpParm(myBackMagnitude, nodeidx, "backmagnitude", time, 0);
488  myFrontStiffness = 0;
489  if (true && ( (true&&!(((int64(getSpineType())==0)))) ) )
490  graph->evalOpParm(myFrontStiffness, nodeidx, "frontstiffness", time, 0);
491  myBackStiffness = 0;
492  if (true && ( (true&&!(((int64(getSpineType())==0)))) ) )
493  graph->evalOpParm(myBackStiffness, nodeidx, "backstiffness", time, 0);
494  myInterpolation = 1;
495  if (true)
496  graph->evalOpParm(myInterpolation, nodeidx, "interpolation", time, 0);
497  mySpacing = 0;
498  if (true)
499  graph->evalOpParm(mySpacing, nodeidx, "spacing", time, 0);
500  myReverseSpineDirection = false;
501  if (true && ( (true&&!(((int64(getSpineType())!=2))||(((graph->getInput(nodeidx,1)>=0)==0)))) ) )
502  graph->evalOpParm(myReverseSpineDirection, nodeidx, "reversespinedirection", time, 0);
503  myAxialRotation = 0;
504  if (true && ( (true&&!(((int64(getSpineType())!=2))||(((graph->getInput(nodeidx,1)>=0)==0)))) ) )
505  graph->evalOpParm(myAxialRotation, nodeidx, "axialrotation", time, 0);
506  myFrontBlend = 0.1;
507  if (true && ( (true&&!(((int64(getSpineType())!=2))||(((graph->getInput(nodeidx,1)>=0)==0)))) ) )
508  graph->evalOpParm(myFrontBlend, nodeidx, "frontblend", time, 0);
509  myBackBlend = 0.1;
510  if (true && ( (true&&!(((int64(getSpineType())!=2))||(((graph->getInput(nodeidx,1)>=0)==0)))) ) )
511  graph->evalOpParm(myBackBlend, nodeidx, "backblend", time, 0);
512  myThicknessScale = 1;
513  if (true)
514  graph->evalOpParm(myThicknessScale, nodeidx, "thicknessscale", time, 0);
515  myUseThicknessAttrib = true;
516  if (true && ( (true&&!(((int64(getSpineType())!=2))||(((graph->getInput(nodeidx,1)>=0)==0)))) ) )
517  graph->evalOpParm(myUseThicknessAttrib, nodeidx, "usethicknessattrib", time, 0);
518  myThicknessAttrib = "thickness"_UTsh;
519  if (true && ( (true&&!(((int64(getSpineType())!=2))||(((graph->getInput(nodeidx,1)>=0)==0))||((getUseThicknessAttrib()==0)))) ) )
520  graph->evalOpParm(myThicknessAttrib, nodeidx, "thicknessattrib", time, 0);
521  myUseThicknessRamp = true;
522  if (true)
523  graph->evalOpParm(myUseThicknessRamp, nodeidx, "usethicknessramp", time, 0);
524  myThicknessRamp = UT_SharedPtr<UT_Ramp>(0);
525  if (true && ( (true&&!(((getUseThicknessRamp()==0)))) ) )
526  graph->evalOpParm(myThicknessRamp, nodeidx, "thicknessramp", time, 0);
527  myUseTwistAttrib = true;
528  if (true && ( (true&&!(((int64(getSpineType())!=2))||(((graph->getInput(nodeidx,1)>=0)==0)))) ) )
529  graph->evalOpParm(myUseTwistAttrib, nodeidx, "usetwistattrib", time, 0);
530  myTwistAttrib = "twist"_UTsh;
531  if (true && ( (true&&!(((int64(getSpineType())!=2))||(((graph->getInput(nodeidx,1)>=0)==0))||((getUseTwistAttrib()==0)))) ) )
532  graph->evalOpParm(myTwistAttrib, nodeidx, "twistattrib", time, 0);
533  myUseTwistRamp = true;
534  if (true)
535  graph->evalOpParm(myUseTwistRamp, nodeidx, "usetwistramp", time, 0);
536  myTwistRamp = UT_SharedPtr<UT_Ramp>(0);
537  if (true && ( (true&&!(((getUseTwistRamp()==0)))) ) )
538  graph->evalOpParm(myTwistRamp, nodeidx, "twistramp", time, 0);
539  myTwistScale = 180;
540  if (true)
541  graph->evalOpParm(myTwistScale, nodeidx, "twistscale", time, 0);
542  myUseLocalZScaleAttrib = false;
543  if (true)
544  graph->evalOpParm(myUseLocalZScaleAttrib, nodeidx, "uselocalzscaleattrib", time, 0);
545  myLocalZScaleAttrib = "zscale"_UTsh;
546  if (true && ( (true&&!(((getUseLocalZScaleAttrib()==0)))) ) )
547  graph->evalOpParm(myLocalZScaleAttrib, nodeidx, "localzscaleattrib", time, 0);
548  myUseLocalInsetScaleAttrib = false;
549  if (true)
550  graph->evalOpParm(myUseLocalInsetScaleAttrib, nodeidx, "uselocalinsetscaleattrib", time, 0);
551  myLocalInsetScaleAttrib = "insetscale"_UTsh;
552  if (true && ( (true&&!(((getUseLocalInsetScaleAttrib()==0)))) ) )
553  graph->evalOpParm(myLocalInsetScaleAttrib, nodeidx, "localinsetscaleattrib", time, 0);
554  myUseLocalTwistScaleAttrib = false;
555  if (true)
556  graph->evalOpParm(myUseLocalTwistScaleAttrib, nodeidx, "uselocaltwistattrib", time, 0);
557  myLocalTwistScaleAttrib = "twistscale"_UTsh;
558  if (true && ( (true&&!(((getUseLocalTwistScaleAttrib()==0)))) ) )
559  graph->evalOpParm(myLocalTwistScaleAttrib, nodeidx, "localtwistscaleattrib", time, 0);
560  myUseLocalDivScaleAttrib = false;
561  if (true)
562  graph->evalOpParm(myUseLocalDivScaleAttrib, nodeidx, "uselocaldivsattrib", time, 0);
563  myLocalDivScaleAttrib = "divsscale"_UTsh;
564  if (true && ( (true&&!(((getUseLocalDivScaleAttrib()==0)))) ) )
565  graph->evalOpParm(myLocalDivScaleAttrib, nodeidx, "locadivscaleattrib", time, 0);
566  myUseLocalXAttrib = false;
567  if (true)
568  graph->evalOpParm(myUseLocalXAttrib, nodeidx, "uselocalxattrib", time, 0);
569  myLocalXAttrib = "localx"_UTsh;
570  if (true && ( (true&&!(((getUseLocalXAttrib()==0)))) ) )
571  graph->evalOpParm(myLocalXAttrib, nodeidx, "localxattrib", time, 0);
572  myUseLocalZAttrib = false;
573  if (true)
574  graph->evalOpParm(myUseLocalZAttrib, nodeidx, "uselocalzattirb", time, 0);
575  myLocalZAttrib = "localz"_UTsh;
576  if (true && ( (true&&!(((getUseLocalZAttrib()==0)))) ) )
577  graph->evalOpParm(myLocalZAttrib, nodeidx, "localzattirb", time, 0);
578  myUseLocalCtrAttrib = false;
579  if (true)
580  graph->evalOpParm(myUseLocalCtrAttrib, nodeidx, "uselocalctrattrib", time, 0);
581  myLocalCtrAttrib = "localctr"_UTsh;
582  if (true && ( (true&&!(((getUseLocalCtrAttrib()==0)))) ) )
583  graph->evalOpParm(myLocalCtrAttrib, nodeidx, "localctrattrib", time, 0);
584 
585  }
586 
587 
588  void loadFromOpSubclass(const LoadParms &loadparms) override
589  {
590  buildFromOp(loadparms.graph(), loadparms.nodeIdx(), loadparms.context().getTime(), loadparms.depnode());
591  }
592 
593 
594  void copyFrom(const OP_NodeParms *src) override
595  {
596  *this = *((const SOP_PolyExtrude_2_0Parms *)src);
597  }
598 
599  template <typename T>
600  void
601  doGetParmValue(TempIndex idx, TempIndex instance, T &value) const
602  {
603  if (idx.size() < 1)
604  return;
605  UT_ASSERT(idx.size() == instance.size()+1);
606  if (idx.size() != instance.size()+1)
607  return;
608  switch (idx[0])
609  {
610  case 0:
611  coerceValue(value, myGroup);
612  break;
613  case 1:
614  coerceValue(value, mySplitType);
615  break;
616  case 2:
617  coerceValue(value, myUseSplitGroup);
618  break;
619  case 3:
620  coerceValue(value, mySplitGroup);
621  break;
622  case 4:
623  coerceValue(value, myExtrusionMode);
624  break;
625  case 5:
626  coerceValue(value, myPtNormalSrc);
627  break;
628  case 6:
629  coerceValue(value, myPtNormalAttrib);
630  break;
631  case 7:
632  coerceValue(value, myDist);
633  break;
634  case 8:
635  coerceValue(value, myInset);
636  break;
637  case 9:
638  coerceValue(value, myTwist);
639  break;
640  case 10:
641  coerceValue(value, myDivs);
642  break;
643  case 11:
644  coerceValue(value, mySpineType);
645  break;
646  case 12:
647  coerceValue(value, myXformFront);
648  break;
649  case 13:
650  coerceValue(value, myXformSpace);
651  break;
652  case 14:
653  coerceValue(value, myXformOrder);
654  break;
655  case 15:
656  coerceValue(value, myRotateOrder);
657  break;
658  case 16:
659  coerceValue(value, myTranslate);
660  break;
661  case 17:
662  coerceValue(value, myRotate);
663  break;
664  case 18:
665  coerceValue(value, myScale);
666  break;
667  case 19:
668  coerceValue(value, myShear);
669  break;
670  case 20:
671  coerceValue(value, myPivot);
672  break;
673  case 21:
674  coerceValue(value, myPivotRotate);
675  break;
676  case 22:
677  coerceValue(value, myPreXformOrder);
678  break;
679  case 23:
680  coerceValue(value, myPreXformRotateOrder);
681  break;
682  case 24:
683  coerceValue(value, myPreXformTranslate);
684  break;
685  case 25:
686  coerceValue(value, myPreXformRotate);
687  break;
688  case 26:
689  coerceValue(value, myPreXformScale);
690  break;
691  case 27:
692  coerceValue(value, myPreXformShear);
693  break;
694  case 28:
695  coerceValue(value, myOutputFront);
696  break;
697  case 29:
698  coerceValue(value, myOutputFrontGrp);
699  break;
700  case 30:
701  coerceValue(value, myFrontGrp);
702  break;
703  case 31:
704  coerceValue(value, myOutputBack);
705  break;
706  case 32:
707  coerceValue(value, myOutputBackGrp);
708  break;
709  case 33:
710  coerceValue(value, myBackGrp);
711  break;
712  case 34:
713  coerceValue(value, myOutputSide);
714  break;
715  case 35:
716  coerceValue(value, myOutputSideGrp);
717  break;
718  case 36:
719  coerceValue(value, mySideGrp);
720  break;
721  case 37:
722  coerceValue(value, myOutputFrontSeamGrp);
723  break;
724  case 38:
725  coerceValue(value, myFrontSeamGrp);
726  break;
727  case 39:
728  coerceValue(value, myOutputBackSeamGrp);
729  break;
730  case 40:
731  coerceValue(value, myBackSeamGrp);
732  break;
733  case 41:
734  coerceValue(value, myPreserveGroups);
735  break;
736  case 42:
737  coerceValue(value, myLimitInset);
738  break;
739  case 43:
740  coerceValue(value, myCommonLimit);
741  break;
742  case 44:
743  coerceValue(value, myAddVertexNormals);
744  break;
745  case 45:
746  coerceValue(value, myCuspAngle);
747  break;
748  case 46:
749  coerceValue(value, myCuspFront);
750  break;
751  case 47:
752  coerceValue(value, myCuspBack);
753  break;
754  case 48:
755  coerceValue(value, myGenUVs);
756  break;
757  case 49:
758  coerceValue(value, myUVStyle);
759  break;
760  case 50:
761  coerceValue(value, myUVScaling);
762  break;
763  case 51:
764  coerceValue(value, myFrontMagnitude);
765  break;
766  case 52:
767  coerceValue(value, myBackMagnitude);
768  break;
769  case 53:
770  coerceValue(value, myFrontStiffness);
771  break;
772  case 54:
773  coerceValue(value, myBackStiffness);
774  break;
775  case 55:
776  coerceValue(value, myInterpolation);
777  break;
778  case 56:
779  coerceValue(value, mySpacing);
780  break;
781  case 57:
782  coerceValue(value, myReverseSpineDirection);
783  break;
784  case 58:
785  coerceValue(value, myAxialRotation);
786  break;
787  case 59:
788  coerceValue(value, myFrontBlend);
789  break;
790  case 60:
791  coerceValue(value, myBackBlend);
792  break;
793  case 61:
794  coerceValue(value, myThicknessScale);
795  break;
796  case 62:
797  coerceValue(value, myUseThicknessAttrib);
798  break;
799  case 63:
800  coerceValue(value, myThicknessAttrib);
801  break;
802  case 64:
803  coerceValue(value, myUseThicknessRamp);
804  break;
805  case 65:
806  coerceValue(value, myThicknessRamp);
807  break;
808  case 66:
809  coerceValue(value, myUseTwistAttrib);
810  break;
811  case 67:
812  coerceValue(value, myTwistAttrib);
813  break;
814  case 68:
815  coerceValue(value, myUseTwistRamp);
816  break;
817  case 69:
818  coerceValue(value, myTwistRamp);
819  break;
820  case 70:
821  coerceValue(value, myTwistScale);
822  break;
823  case 71:
824  coerceValue(value, myUseLocalZScaleAttrib);
825  break;
826  case 72:
827  coerceValue(value, myLocalZScaleAttrib);
828  break;
829  case 73:
830  coerceValue(value, myUseLocalInsetScaleAttrib);
831  break;
832  case 74:
833  coerceValue(value, myLocalInsetScaleAttrib);
834  break;
835  case 75:
836  coerceValue(value, myUseLocalTwistScaleAttrib);
837  break;
838  case 76:
839  coerceValue(value, myLocalTwistScaleAttrib);
840  break;
841  case 77:
842  coerceValue(value, myUseLocalDivScaleAttrib);
843  break;
844  case 78:
845  coerceValue(value, myLocalDivScaleAttrib);
846  break;
847  case 79:
848  coerceValue(value, myUseLocalXAttrib);
849  break;
850  case 80:
851  coerceValue(value, myLocalXAttrib);
852  break;
853  case 81:
854  coerceValue(value, myUseLocalZAttrib);
855  break;
856  case 82:
857  coerceValue(value, myLocalZAttrib);
858  break;
859  case 83:
860  coerceValue(value, myUseLocalCtrAttrib);
861  break;
862  case 84:
863  coerceValue(value, myLocalCtrAttrib);
864  break;
865 
866  }
867  }
868 
869  bool isParmColorRamp(exint idx) const override
870  {
871  switch (idx)
872  {
873 
874  }
875  return false;
876  }
877 
878  void getNestParmValue(TempIndex idx, TempIndex instance, exint &value) const override
879  { doGetParmValue(idx, instance, value); }
880  void getNestParmValue(TempIndex idx, TempIndex instance, fpreal &value) const override
881  { doGetParmValue(idx, instance, value); }
882  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector2D &value) const override
883  { doGetParmValue(idx, instance, value); }
884  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector3D &value) const override
885  { doGetParmValue(idx, instance, value); }
886  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector4D &value) const override
887  { doGetParmValue(idx, instance, value); }
888  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix2D &value) const override
889  { doGetParmValue(idx, instance, value); }
890  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
891  { doGetParmValue(idx, instance, value); }
892  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix4D &value) const override
893  { doGetParmValue(idx, instance, value); }
894  void getNestParmValue(TempIndex idx, TempIndex instance, UT_StringHolder &value) const override
895  { doGetParmValue(idx, instance, value); }
896  void getNestParmValue(TempIndex idx, TempIndex instance, UT_SharedPtr<UT_Ramp> &value) const override
897  { doGetParmValue(idx, instance, value); }
898  void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
899  { doGetParmValue(idx, instance, value); }
900 
901  template <typename T>
902  void
903  doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
904  {
905  if (idx.size() < 1)
906  return;
907  UT_ASSERT(idx.size() == instance.size()+1);
908  if (idx.size() != instance.size()+1)
909  return;
910  switch (idx[0])
911  {
912  case 0:
913  coerceValue(myGroup, ( ( value ) ));
914  break;
915  case 1:
916  coerceValue(mySplitType, clampMinValue(0, clampMaxValue(1, value ) ));
917  break;
918  case 2:
919  coerceValue(myUseSplitGroup, ( ( value ) ));
920  break;
921  case 3:
922  coerceValue(mySplitGroup, ( ( value ) ));
923  break;
924  case 4:
925  coerceValue(myExtrusionMode, clampMinValue(0, clampMaxValue(1, value ) ));
926  break;
927  case 5:
928  coerceValue(myPtNormalSrc, clampMinValue(0, clampMaxValue(2, value ) ));
929  break;
930  case 6:
931  coerceValue(myPtNormalAttrib, ( ( value ) ));
932  break;
933  case 7:
934  coerceValue(myDist, ( ( value ) ));
935  break;
936  case 8:
937  coerceValue(myInset, ( ( value ) ));
938  break;
939  case 9:
940  coerceValue(myTwist, ( ( value ) ));
941  break;
942  case 10:
943  coerceValue(myDivs, clampMinValue(1, ( value ) ));
944  break;
945  case 11:
946  coerceValue(mySpineType, clampMinValue(0, clampMaxValue(2, value ) ));
947  break;
948  case 12:
949  coerceValue(myXformFront, ( ( value ) ));
950  break;
951  case 13:
952  coerceValue(myXformSpace, clampMinValue(0, clampMaxValue(1, value ) ));
953  break;
954  case 14:
955  coerceValue(myXformOrder, clampMinValue(0, clampMaxValue(5, value ) ));
956  break;
957  case 15:
958  coerceValue(myRotateOrder, clampMinValue(0, clampMaxValue(5, value ) ));
959  break;
960  case 16:
961  coerceValue(myTranslate, ( ( value ) ));
962  break;
963  case 17:
964  coerceValue(myRotate, ( ( value ) ));
965  break;
966  case 18:
967  coerceValue(myScale, ( ( value ) ));
968  break;
969  case 19:
970  coerceValue(myShear, ( ( value ) ));
971  break;
972  case 20:
973  coerceValue(myPivot, ( ( value ) ));
974  break;
975  case 21:
976  coerceValue(myPivotRotate, ( ( value ) ));
977  break;
978  case 22:
979  coerceValue(myPreXformOrder, clampMinValue(0, clampMaxValue(5, value ) ));
980  break;
981  case 23:
982  coerceValue(myPreXformRotateOrder, clampMinValue(0, clampMaxValue(5, value ) ));
983  break;
984  case 24:
985  coerceValue(myPreXformTranslate, ( ( value ) ));
986  break;
987  case 25:
988  coerceValue(myPreXformRotate, ( ( value ) ));
989  break;
990  case 26:
991  coerceValue(myPreXformScale, ( ( value ) ));
992  break;
993  case 27:
994  coerceValue(myPreXformShear, ( ( value ) ));
995  break;
996  case 28:
997  coerceValue(myOutputFront, ( ( value ) ));
998  break;
999  case 29:
1000  coerceValue(myOutputFrontGrp, ( ( value ) ));
1001  break;
1002  case 30:
1003  coerceValue(myFrontGrp, ( ( value ) ));
1004  break;
1005  case 31:
1006  coerceValue(myOutputBack, ( ( value ) ));
1007  break;
1008  case 32:
1009  coerceValue(myOutputBackGrp, ( ( value ) ));
1010  break;
1011  case 33:
1012  coerceValue(myBackGrp, ( ( value ) ));
1013  break;
1014  case 34:
1015  coerceValue(myOutputSide, ( ( value ) ));
1016  break;
1017  case 35:
1018  coerceValue(myOutputSideGrp, ( ( value ) ));
1019  break;
1020  case 36:
1021  coerceValue(mySideGrp, ( ( value ) ));
1022  break;
1023  case 37:
1024  coerceValue(myOutputFrontSeamGrp, ( ( value ) ));
1025  break;
1026  case 38:
1027  coerceValue(myFrontSeamGrp, ( ( value ) ));
1028  break;
1029  case 39:
1030  coerceValue(myOutputBackSeamGrp, ( ( value ) ));
1031  break;
1032  case 40:
1033  coerceValue(myBackSeamGrp, ( ( value ) ));
1034  break;
1035  case 41:
1036  coerceValue(myPreserveGroups, ( ( value ) ));
1037  break;
1038  case 42:
1039  coerceValue(myLimitInset, ( ( value ) ));
1040  break;
1041  case 43:
1042  coerceValue(myCommonLimit, ( ( value ) ));
1043  break;
1044  case 44:
1045  coerceValue(myAddVertexNormals, ( ( value ) ));
1046  break;
1047  case 45:
1048  coerceValue(myCuspAngle, clampMinValue(0, clampMaxValue(180, value ) ));
1049  break;
1050  case 46:
1051  coerceValue(myCuspFront, ( ( value ) ));
1052  break;
1053  case 47:
1054  coerceValue(myCuspBack, ( ( value ) ));
1055  break;
1056  case 48:
1057  coerceValue(myGenUVs, ( ( value ) ));
1058  break;
1059  case 49:
1060  coerceValue(myUVStyle, clampMinValue(0, clampMaxValue(2, value ) ));
1061  break;
1062  case 50:
1063  coerceValue(myUVScaling, clampMinValue(0, clampMaxValue(2, value ) ));
1064  break;
1065  case 51:
1066  coerceValue(myFrontMagnitude, clampMinValue(0.0001, ( value ) ));
1067  break;
1068  case 52:
1069  coerceValue(myBackMagnitude, clampMinValue(0.0001, ( value ) ));
1070  break;
1071  case 53:
1072  coerceValue(myFrontStiffness, clampMinValue(0, clampMaxValue(1, value ) ));
1073  break;
1074  case 54:
1075  coerceValue(myBackStiffness, clampMinValue(0, clampMaxValue(1, value ) ));
1076  break;
1077  case 55:
1078  coerceValue(myInterpolation, clampMinValue(0, clampMaxValue(1, value ) ));
1079  break;
1080  case 56:
1081  coerceValue(mySpacing, clampMinValue(0, clampMaxValue(1, value ) ));
1082  break;
1083  case 57:
1084  coerceValue(myReverseSpineDirection, ( ( value ) ));
1085  break;
1086  case 58:
1087  coerceValue(myAxialRotation, clampMinValue(0, clampMaxValue(360, value ) ));
1088  break;
1089  case 59:
1090  coerceValue(myFrontBlend, clampMinValue(0, clampMaxValue(1, value ) ));
1091  break;
1092  case 60:
1093  coerceValue(myBackBlend, clampMinValue(0, clampMaxValue(1, value ) ));
1094  break;
1095  case 61:
1096  coerceValue(myThicknessScale, ( ( value ) ));
1097  break;
1098  case 62:
1099  coerceValue(myUseThicknessAttrib, ( ( value ) ));
1100  break;
1101  case 63:
1102  coerceValue(myThicknessAttrib, ( ( value ) ));
1103  break;
1104  case 64:
1105  coerceValue(myUseThicknessRamp, ( ( value ) ));
1106  break;
1107  case 65:
1108  coerceValue(myThicknessRamp, clampMinValue(1, ( value ) ));
1109  break;
1110  case 66:
1111  coerceValue(myUseTwistAttrib, ( ( value ) ));
1112  break;
1113  case 67:
1114  coerceValue(myTwistAttrib, ( ( value ) ));
1115  break;
1116  case 68:
1117  coerceValue(myUseTwistRamp, ( ( value ) ));
1118  break;
1119  case 69:
1120  coerceValue(myTwistRamp, clampMinValue(1, ( value ) ));
1121  break;
1122  case 70:
1123  coerceValue(myTwistScale, ( ( value ) ));
1124  break;
1125  case 71:
1126  coerceValue(myUseLocalZScaleAttrib, ( ( value ) ));
1127  break;
1128  case 72:
1129  coerceValue(myLocalZScaleAttrib, ( ( value ) ));
1130  break;
1131  case 73:
1132  coerceValue(myUseLocalInsetScaleAttrib, ( ( value ) ));
1133  break;
1134  case 74:
1135  coerceValue(myLocalInsetScaleAttrib, ( ( value ) ));
1136  break;
1137  case 75:
1138  coerceValue(myUseLocalTwistScaleAttrib, ( ( value ) ));
1139  break;
1140  case 76:
1141  coerceValue(myLocalTwistScaleAttrib, ( ( value ) ));
1142  break;
1143  case 77:
1144  coerceValue(myUseLocalDivScaleAttrib, ( ( value ) ));
1145  break;
1146  case 78:
1147  coerceValue(myLocalDivScaleAttrib, ( ( value ) ));
1148  break;
1149  case 79:
1150  coerceValue(myUseLocalXAttrib, ( ( value ) ));
1151  break;
1152  case 80:
1153  coerceValue(myLocalXAttrib, ( ( value ) ));
1154  break;
1155  case 81:
1156  coerceValue(myUseLocalZAttrib, ( ( value ) ));
1157  break;
1158  case 82:
1159  coerceValue(myLocalZAttrib, ( ( value ) ));
1160  break;
1161  case 83:
1162  coerceValue(myUseLocalCtrAttrib, ( ( value ) ));
1163  break;
1164  case 84:
1165  coerceValue(myLocalCtrAttrib, ( ( value ) ));
1166  break;
1167 
1168  }
1169  }
1170 
1171  void setNestParmValue(TempIndex idx, TempIndex instance, const exint &value) override
1172  { doSetParmValue(idx, instance, value); }
1173  void setNestParmValue(TempIndex idx, TempIndex instance, const fpreal &value) override
1174  { doSetParmValue(idx, instance, value); }
1175  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector2D &value) override
1176  { doSetParmValue(idx, instance, value); }
1177  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector3D &value) override
1178  { doSetParmValue(idx, instance, value); }
1179  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector4D &value) override
1180  { doSetParmValue(idx, instance, value); }
1181  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix2D &value) override
1182  { doSetParmValue(idx, instance, value); }
1183  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix3D &value) override
1184  { doSetParmValue(idx, instance, value); }
1185  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix4D &value) override
1186  { doSetParmValue(idx, instance, value); }
1187  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_StringHolder &value) override
1188  { doSetParmValue(idx, instance, value); }
1189  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_SharedPtr<UT_Ramp> &value) override
1190  { doSetParmValue(idx, instance, value); }
1191  void setNestParmValue(TempIndex idx, TempIndex instance, const PRM_DataItemHandle &value) override
1192  { doSetParmValue(idx, instance, value); }
1193 
1194  exint getNestNumParms(TempIndex idx) const override
1195  {
1196  if (idx.size() == 0)
1197  return 85;
1198  switch (idx[0])
1199  {
1200 
1201  }
1202  // Invalid
1203  return 0;
1204  }
1205 
1206  const char *getNestParmName(TempIndex fieldnum) const override
1207  {
1208  if (fieldnum.size() < 1)
1209  return 0;
1210  switch (fieldnum[0])
1211  {
1212  case 0:
1213  return "group";
1214  case 1:
1215  return "splittype";
1216  case 2:
1217  return "usesplitgroup";
1218  case 3:
1219  return "splitgroup";
1220  case 4:
1221  return "extrusionmode";
1222  case 5:
1223  return "ptnormalsrc";
1224  case 6:
1225  return "ptnormalattrib";
1226  case 7:
1227  return "dist";
1228  case 8:
1229  return "inset";
1230  case 9:
1231  return "twist";
1232  case 10:
1233  return "divs";
1234  case 11:
1235  return "spinetype";
1236  case 12:
1237  return "xformfront";
1238  case 13:
1239  return "xformspace";
1240  case 14:
1241  return "rst";
1242  case 15:
1243  return "xyz";
1244  case 16:
1245  return "translate";
1246  case 17:
1247  return "rotate";
1248  case 18:
1249  return "scale";
1250  case 19:
1251  return "shear";
1252  case 20:
1253  return "pivot";
1254  case 21:
1255  return "pivotrotate";
1256  case 22:
1257  return "prexform_rst";
1258  case 23:
1259  return "prexform_xyz";
1260  case 24:
1261  return "prexform_translate";
1262  case 25:
1263  return "prexform_rotate";
1264  case 26:
1265  return "prexform_scale";
1266  case 27:
1267  return "prexform_shear";
1268  case 28:
1269  return "outputfront";
1270  case 29:
1271  return "outputfrontgrp";
1272  case 30:
1273  return "frontgrp";
1274  case 31:
1275  return "outputback";
1276  case 32:
1277  return "outputbackgrp";
1278  case 33:
1279  return "backgrp";
1280  case 34:
1281  return "outputside";
1282  case 35:
1283  return "outputsidegrp";
1284  case 36:
1285  return "sidegrp";
1286  case 37:
1287  return "outputfrontseamgrp";
1288  case 38:
1289  return "frontseamgrp";
1290  case 39:
1291  return "outputbackseamgrp";
1292  case 40:
1293  return "backseamgrp";
1294  case 41:
1295  return "preservegroups";
1296  case 42:
1297  return "limitinset";
1298  case 43:
1299  return "commonlimit";
1300  case 44:
1301  return "addvertexnomrals";
1302  case 45:
1303  return "cuspangle";
1304  case 46:
1305  return "cuspfront";
1306  case 47:
1307  return "cuspback";
1308  case 48:
1309  return "genuvs";
1310  case 49:
1311  return "uvstyle";
1312  case 50:
1313  return "uvscaling";
1314  case 51:
1315  return "frontmagnitude";
1316  case 52:
1317  return "backmagnitude";
1318  case 53:
1319  return "frontstiffness";
1320  case 54:
1321  return "backstiffness";
1322  case 55:
1323  return "interpolation";
1324  case 56:
1325  return "spacing";
1326  case 57:
1327  return "reversespinedirection";
1328  case 58:
1329  return "axialrotation";
1330  case 59:
1331  return "frontblend";
1332  case 60:
1333  return "backblend";
1334  case 61:
1335  return "thicknessscale";
1336  case 62:
1337  return "usethicknessattrib";
1338  case 63:
1339  return "thicknessattrib";
1340  case 64:
1341  return "usethicknessramp";
1342  case 65:
1343  return "thicknessramp";
1344  case 66:
1345  return "usetwistattrib";
1346  case 67:
1347  return "twistattrib";
1348  case 68:
1349  return "usetwistramp";
1350  case 69:
1351  return "twistramp";
1352  case 70:
1353  return "twistscale";
1354  case 71:
1355  return "uselocalzscaleattrib";
1356  case 72:
1357  return "localzscaleattrib";
1358  case 73:
1359  return "uselocalinsetscaleattrib";
1360  case 74:
1361  return "localinsetscaleattrib";
1362  case 75:
1363  return "uselocaltwistattrib";
1364  case 76:
1365  return "localtwistscaleattrib";
1366  case 77:
1367  return "uselocaldivsattrib";
1368  case 78:
1369  return "locadivscaleattrib";
1370  case 79:
1371  return "uselocalxattrib";
1372  case 80:
1373  return "localxattrib";
1374  case 81:
1375  return "uselocalzattirb";
1376  case 82:
1377  return "localzattirb";
1378  case 83:
1379  return "uselocalctrattrib";
1380  case 84:
1381  return "localctrattrib";
1382 
1383  }
1384  return 0;
1385  }
1386 
1387  ParmType getNestParmType(TempIndex fieldnum) const override
1388  {
1389  if (fieldnum.size() < 1)
1390  return PARM_UNSUPPORTED;
1391  switch (fieldnum[0])
1392  {
1393  case 0:
1394  return PARM_STRING;
1395  case 1:
1396  return PARM_INTEGER;
1397  case 2:
1398  return PARM_INTEGER;
1399  case 3:
1400  return PARM_STRING;
1401  case 4:
1402  return PARM_INTEGER;
1403  case 5:
1404  return PARM_INTEGER;
1405  case 6:
1406  return PARM_STRING;
1407  case 7:
1408  return PARM_FLOAT;
1409  case 8:
1410  return PARM_FLOAT;
1411  case 9:
1412  return PARM_FLOAT;
1413  case 10:
1414  return PARM_INTEGER;
1415  case 11:
1416  return PARM_INTEGER;
1417  case 12:
1418  return PARM_INTEGER;
1419  case 13:
1420  return PARM_INTEGER;
1421  case 14:
1422  return PARM_INTEGER;
1423  case 15:
1424  return PARM_INTEGER;
1425  case 16:
1426  return PARM_VECTOR3;
1427  case 17:
1428  return PARM_VECTOR3;
1429  case 18:
1430  return PARM_VECTOR3;
1431  case 19:
1432  return PARM_VECTOR3;
1433  case 20:
1434  return PARM_VECTOR3;
1435  case 21:
1436  return PARM_VECTOR3;
1437  case 22:
1438  return PARM_INTEGER;
1439  case 23:
1440  return PARM_INTEGER;
1441  case 24:
1442  return PARM_VECTOR3;
1443  case 25:
1444  return PARM_VECTOR3;
1445  case 26:
1446  return PARM_VECTOR3;
1447  case 27:
1448  return PARM_VECTOR3;
1449  case 28:
1450  return PARM_INTEGER;
1451  case 29:
1452  return PARM_INTEGER;
1453  case 30:
1454  return PARM_STRING;
1455  case 31:
1456  return PARM_INTEGER;
1457  case 32:
1458  return PARM_INTEGER;
1459  case 33:
1460  return PARM_STRING;
1461  case 34:
1462  return PARM_INTEGER;
1463  case 35:
1464  return PARM_INTEGER;
1465  case 36:
1466  return PARM_STRING;
1467  case 37:
1468  return PARM_INTEGER;
1469  case 38:
1470  return PARM_STRING;
1471  case 39:
1472  return PARM_INTEGER;
1473  case 40:
1474  return PARM_STRING;
1475  case 41:
1476  return PARM_INTEGER;
1477  case 42:
1478  return PARM_INTEGER;
1479  case 43:
1480  return PARM_INTEGER;
1481  case 44:
1482  return PARM_INTEGER;
1483  case 45:
1484  return PARM_FLOAT;
1485  case 46:
1486  return PARM_INTEGER;
1487  case 47:
1488  return PARM_INTEGER;
1489  case 48:
1490  return PARM_INTEGER;
1491  case 49:
1492  return PARM_INTEGER;
1493  case 50:
1494  return PARM_INTEGER;
1495  case 51:
1496  return PARM_FLOAT;
1497  case 52:
1498  return PARM_FLOAT;
1499  case 53:
1500  return PARM_FLOAT;
1501  case 54:
1502  return PARM_FLOAT;
1503  case 55:
1504  return PARM_INTEGER;
1505  case 56:
1506  return PARM_INTEGER;
1507  case 57:
1508  return PARM_INTEGER;
1509  case 58:
1510  return PARM_FLOAT;
1511  case 59:
1512  return PARM_FLOAT;
1513  case 60:
1514  return PARM_FLOAT;
1515  case 61:
1516  return PARM_FLOAT;
1517  case 62:
1518  return PARM_INTEGER;
1519  case 63:
1520  return PARM_STRING;
1521  case 64:
1522  return PARM_INTEGER;
1523  case 65:
1524  return PARM_RAMP;
1525  case 66:
1526  return PARM_INTEGER;
1527  case 67:
1528  return PARM_STRING;
1529  case 68:
1530  return PARM_INTEGER;
1531  case 69:
1532  return PARM_RAMP;
1533  case 70:
1534  return PARM_FLOAT;
1535  case 71:
1536  return PARM_INTEGER;
1537  case 72:
1538  return PARM_STRING;
1539  case 73:
1540  return PARM_INTEGER;
1541  case 74:
1542  return PARM_STRING;
1543  case 75:
1544  return PARM_INTEGER;
1545  case 76:
1546  return PARM_STRING;
1547  case 77:
1548  return PARM_INTEGER;
1549  case 78:
1550  return PARM_STRING;
1551  case 79:
1552  return PARM_INTEGER;
1553  case 80:
1554  return PARM_STRING;
1555  case 81:
1556  return PARM_INTEGER;
1557  case 82:
1558  return PARM_STRING;
1559  case 83:
1560  return PARM_INTEGER;
1561  case 84:
1562  return PARM_STRING;
1563 
1564  }
1565  return PARM_UNSUPPORTED;
1566  }
1567 
1568  // Boiler plate to load individual types.
1569  static void loadData(UT_IStream &is, int64 &v)
1570  { is.bread(&v, 1); }
1571  static void loadData(UT_IStream &is, bool &v)
1572  { int64 iv; is.bread(&iv, 1); v = iv; }
1573  static void loadData(UT_IStream &is, fpreal64 &v)
1574  { is.bread<fpreal64>(&v, 1); }
1575  static void loadData(UT_IStream &is, UT_Vector2D &v)
1576  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1); }
1577  static void loadData(UT_IStream &is, UT_Vector3D &v)
1578  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
1579  is.bread<fpreal64>(&v.z(), 1); }
1580  static void loadData(UT_IStream &is, UT_Vector4D &v)
1581  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
1582  is.bread<fpreal64>(&v.z(), 1); is.bread<fpreal64>(&v.w(), 1); }
1583  static void loadData(UT_IStream &is, UT_Matrix2D &v)
1584  { for (int r = 0; r < 2; r++) for (int c = 0; c < 2; c++) is.bread<fpreal64>(&v(r, c), 1); }
1585  static void loadData(UT_IStream &is, UT_Matrix3D &v)
1586  { for (int r = 0; r < 3; r++) for (int c = 0; c < 3; c++) is.bread<fpreal64>(&v(r, c), 1); }
1587  static void loadData(UT_IStream &is, UT_Matrix4D &v)
1588  { for (int r = 0; r < 4; r++) for (int c = 0; c < 4; c++) is.bread<fpreal64>(&v(r, c), 1); }
1589  static void loadData(UT_IStream &is, UT_Vector2I &v)
1590  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1); }
1591  static void loadData(UT_IStream &is, UT_Vector3I &v)
1592  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
1593  is.bread<int64>(&v.z(), 1); }
1594  static void loadData(UT_IStream &is, UT_Vector4I &v)
1595  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
1596  is.bread<int64>(&v.z(), 1); is.bread<int64>(&v.w(), 1); }
1598  { is.bread(v); }
1600  { UT_StringHolder rampdata;
1601  loadData(is, rampdata);
1602  if (rampdata.isstring())
1603  {
1604  v.reset(new UT_Ramp());
1605  UT_IStream istr((const char *) rampdata, rampdata.length(), UT_ISTREAM_ASCII);
1606  v->load(istr);
1607  }
1608  else v.reset();
1609  }
1612  loadData(is, data);
1613  if (data.isstring())
1614  {
1615  // Find the data type.
1616  const char *colon = UT_StringWrap(data).findChar(':');
1617  if (colon)
1618  {
1619  int typelen = colon - data.buffer();
1621  type.strncpy(data.buffer(), typelen);
1622  UT_IStream istr(((const char *) data) + typelen + 1, data.length() - (typelen + 1), UT_ISTREAM_BINARY);
1623 
1624  v = PRM_DataFactory::parseBinary(type.buffer(), istr);
1625  }
1626  }
1627  else v.reset();
1628  }
1629 
1630  static void saveData(std::ostream &os, int64 v)
1631  { UTwrite(os, &v); }
1632  static void saveData(std::ostream &os, bool v)
1633  { int64 iv = v; UTwrite(os, &iv); }
1634  static void saveData(std::ostream &os, fpreal64 v)
1635  { UTwrite<fpreal64>(os, &v); }
1636  static void saveData(std::ostream &os, UT_Vector2D v)
1637  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y()); }
1638  static void saveData(std::ostream &os, UT_Vector3D v)
1639  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
1640  UTwrite<fpreal64>(os, &v.z()); }
1641  static void saveData(std::ostream &os, UT_Vector4D v)
1642  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
1643  UTwrite<fpreal64>(os, &v.z()); UTwrite<fpreal64>(os, &v.w()); }
1644  static void saveData(std::ostream &os, UT_Matrix2D v)
1645  { for (int r = 0; r < 2; r++) for (int c = 0; c < 2; c++) UTwrite<fpreal64>(os, &v(r, c)); }
1646  static void saveData(std::ostream &os, UT_Matrix3D v)
1647  { for (int r = 0; r < 3; r++) for (int c = 0; c < 3; c++) UTwrite<fpreal64>(os, &v(r, c)); }
1648  static void saveData(std::ostream &os, UT_Matrix4D v)
1649  { for (int r = 0; r < 4; r++) for (int c = 0; c < 4; c++) UTwrite<fpreal64>(os, &v(r, c)); }
1650  static void saveData(std::ostream &os, UT_StringHolder s)
1651  { UT_StringWrap(s).saveBinary(os); }
1652  static void saveData(std::ostream &os, UT_SharedPtr<UT_Ramp> s)
1654  UT_OStringStream ostr;
1655  if (s) s->save(ostr);
1656  result = ostr.str();
1657  saveData(os, result);
1658  }
1659  static void saveData(std::ostream &os, PRM_DataItemHandle s)
1661  UT_OStringStream ostr;
1662  if (s)
1663  {
1664  ostr << s->getDataTypeToken();
1665  ostr << ":";
1666  s->saveBinary(ostr);
1667  }
1668  result = ostr.str();
1669  saveData(os, result);
1670  }
1671 
1672 
1673  void save(std::ostream &os) const
1674  {
1675  int32 v = version();
1676  UTwrite(os, &v);
1677  saveData(os, myGroup);
1678  saveData(os, mySplitType);
1679  saveData(os, myUseSplitGroup);
1680  saveData(os, mySplitGroup);
1681  saveData(os, myExtrusionMode);
1682  saveData(os, myPtNormalSrc);
1683  saveData(os, myPtNormalAttrib);
1684  saveData(os, myDist);
1685  saveData(os, myInset);
1686  saveData(os, myTwist);
1687  saveData(os, myDivs);
1688  saveData(os, mySpineType);
1689  saveData(os, myXformFront);
1690  saveData(os, myXformSpace);
1691  saveData(os, myXformOrder);
1692  saveData(os, myRotateOrder);
1693  saveData(os, myTranslate);
1694  saveData(os, myRotate);
1695  saveData(os, myScale);
1696  saveData(os, myShear);
1697  saveData(os, myPivot);
1698  saveData(os, myPivotRotate);
1699  saveData(os, myPreXformOrder);
1700  saveData(os, myPreXformRotateOrder);
1701  saveData(os, myPreXformTranslate);
1702  saveData(os, myPreXformRotate);
1703  saveData(os, myPreXformScale);
1704  saveData(os, myPreXformShear);
1705  saveData(os, myOutputFront);
1706  saveData(os, myOutputFrontGrp);
1707  saveData(os, myFrontGrp);
1708  saveData(os, myOutputBack);
1709  saveData(os, myOutputBackGrp);
1710  saveData(os, myBackGrp);
1711  saveData(os, myOutputSide);
1712  saveData(os, myOutputSideGrp);
1713  saveData(os, mySideGrp);
1714  saveData(os, myOutputFrontSeamGrp);
1715  saveData(os, myFrontSeamGrp);
1716  saveData(os, myOutputBackSeamGrp);
1717  saveData(os, myBackSeamGrp);
1718  saveData(os, myPreserveGroups);
1719  saveData(os, myLimitInset);
1720  saveData(os, myCommonLimit);
1721  saveData(os, myAddVertexNormals);
1722  saveData(os, myCuspAngle);
1723  saveData(os, myCuspFront);
1724  saveData(os, myCuspBack);
1725  saveData(os, myGenUVs);
1726  saveData(os, myUVStyle);
1727  saveData(os, myUVScaling);
1728  saveData(os, myFrontMagnitude);
1729  saveData(os, myBackMagnitude);
1730  saveData(os, myFrontStiffness);
1731  saveData(os, myBackStiffness);
1732  saveData(os, myInterpolation);
1733  saveData(os, mySpacing);
1734  saveData(os, myReverseSpineDirection);
1735  saveData(os, myAxialRotation);
1736  saveData(os, myFrontBlend);
1737  saveData(os, myBackBlend);
1738  saveData(os, myThicknessScale);
1739  saveData(os, myUseThicknessAttrib);
1740  saveData(os, myThicknessAttrib);
1741  saveData(os, myUseThicknessRamp);
1742  saveData(os, myThicknessRamp);
1743  saveData(os, myUseTwistAttrib);
1744  saveData(os, myTwistAttrib);
1745  saveData(os, myUseTwistRamp);
1746  saveData(os, myTwistRamp);
1747  saveData(os, myTwistScale);
1748  saveData(os, myUseLocalZScaleAttrib);
1749  saveData(os, myLocalZScaleAttrib);
1750  saveData(os, myUseLocalInsetScaleAttrib);
1751  saveData(os, myLocalInsetScaleAttrib);
1752  saveData(os, myUseLocalTwistScaleAttrib);
1753  saveData(os, myLocalTwistScaleAttrib);
1754  saveData(os, myUseLocalDivScaleAttrib);
1755  saveData(os, myLocalDivScaleAttrib);
1756  saveData(os, myUseLocalXAttrib);
1757  saveData(os, myLocalXAttrib);
1758  saveData(os, myUseLocalZAttrib);
1759  saveData(os, myLocalZAttrib);
1760  saveData(os, myUseLocalCtrAttrib);
1761  saveData(os, myLocalCtrAttrib);
1762 
1763  }
1764 
1765  bool load(UT_IStream &is)
1766  {
1767  int32 v;
1768  is.bread(&v, 1);
1769  if (version() != v)
1770  {
1771  // Fail incompatible versions
1772  return false;
1773  }
1774  loadData(is, myGroup);
1775  loadData(is, mySplitType);
1776  loadData(is, myUseSplitGroup);
1777  loadData(is, mySplitGroup);
1778  loadData(is, myExtrusionMode);
1779  loadData(is, myPtNormalSrc);
1780  loadData(is, myPtNormalAttrib);
1781  loadData(is, myDist);
1782  loadData(is, myInset);
1783  loadData(is, myTwist);
1784  loadData(is, myDivs);
1785  loadData(is, mySpineType);
1786  loadData(is, myXformFront);
1787  loadData(is, myXformSpace);
1788  loadData(is, myXformOrder);
1789  loadData(is, myRotateOrder);
1790  loadData(is, myTranslate);
1791  loadData(is, myRotate);
1792  loadData(is, myScale);
1793  loadData(is, myShear);
1794  loadData(is, myPivot);
1795  loadData(is, myPivotRotate);
1796  loadData(is, myPreXformOrder);
1797  loadData(is, myPreXformRotateOrder);
1798  loadData(is, myPreXformTranslate);
1799  loadData(is, myPreXformRotate);
1800  loadData(is, myPreXformScale);
1801  loadData(is, myPreXformShear);
1802  loadData(is, myOutputFront);
1803  loadData(is, myOutputFrontGrp);
1804  loadData(is, myFrontGrp);
1805  loadData(is, myOutputBack);
1806  loadData(is, myOutputBackGrp);
1807  loadData(is, myBackGrp);
1808  loadData(is, myOutputSide);
1809  loadData(is, myOutputSideGrp);
1810  loadData(is, mySideGrp);
1811  loadData(is, myOutputFrontSeamGrp);
1812  loadData(is, myFrontSeamGrp);
1813  loadData(is, myOutputBackSeamGrp);
1814  loadData(is, myBackSeamGrp);
1815  loadData(is, myPreserveGroups);
1816  loadData(is, myLimitInset);
1817  loadData(is, myCommonLimit);
1818  loadData(is, myAddVertexNormals);
1819  loadData(is, myCuspAngle);
1820  loadData(is, myCuspFront);
1821  loadData(is, myCuspBack);
1822  loadData(is, myGenUVs);
1823  loadData(is, myUVStyle);
1824  loadData(is, myUVScaling);
1825  loadData(is, myFrontMagnitude);
1826  loadData(is, myBackMagnitude);
1827  loadData(is, myFrontStiffness);
1828  loadData(is, myBackStiffness);
1829  loadData(is, myInterpolation);
1830  loadData(is, mySpacing);
1831  loadData(is, myReverseSpineDirection);
1832  loadData(is, myAxialRotation);
1833  loadData(is, myFrontBlend);
1834  loadData(is, myBackBlend);
1835  loadData(is, myThicknessScale);
1836  loadData(is, myUseThicknessAttrib);
1837  loadData(is, myThicknessAttrib);
1838  loadData(is, myUseThicknessRamp);
1839  loadData(is, myThicknessRamp);
1840  loadData(is, myUseTwistAttrib);
1841  loadData(is, myTwistAttrib);
1842  loadData(is, myUseTwistRamp);
1843  loadData(is, myTwistRamp);
1844  loadData(is, myTwistScale);
1845  loadData(is, myUseLocalZScaleAttrib);
1846  loadData(is, myLocalZScaleAttrib);
1847  loadData(is, myUseLocalInsetScaleAttrib);
1848  loadData(is, myLocalInsetScaleAttrib);
1849  loadData(is, myUseLocalTwistScaleAttrib);
1850  loadData(is, myLocalTwistScaleAttrib);
1851  loadData(is, myUseLocalDivScaleAttrib);
1852  loadData(is, myLocalDivScaleAttrib);
1853  loadData(is, myUseLocalXAttrib);
1854  loadData(is, myLocalXAttrib);
1855  loadData(is, myUseLocalZAttrib);
1856  loadData(is, myLocalZAttrib);
1857  loadData(is, myUseLocalCtrAttrib);
1858  loadData(is, myLocalCtrAttrib);
1859 
1860  return true;
1861  }
1862 
1863  const UT_StringHolder & getGroup() const { return myGroup; }
1864  void setGroup(const UT_StringHolder & val) { myGroup = val; }
1866  {
1867  SOP_Node *thissop = cookparms.getNode();
1868  if (!thissop) return getGroup();
1870  OP_Utils::evalOpParm(result, thissop, "group", cookparms.getCookTime(), 0);
1871  return result;
1872  }
1873  SplitType getSplitType() const { return SplitType(mySplitType); }
1874  void setSplitType(SplitType val) { mySplitType = int64(val); }
1876  {
1877  SOP_Node *thissop = cookparms.getNode();
1878  if (!thissop) return getSplitType();
1879  int64 result;
1880  OP_Utils::evalOpParm(result, thissop, "splittype", cookparms.getCookTime(), 0);
1881  return SplitType(result);
1882  }
1883  bool getUseSplitGroup() const { return myUseSplitGroup; }
1884  void setUseSplitGroup(bool val) { myUseSplitGroup = val; }
1885  bool opUseSplitGroup(const SOP_NodeVerb::CookParms &cookparms) const
1886  {
1887  SOP_Node *thissop = cookparms.getNode();
1888  if (!thissop) return getUseSplitGroup();
1889  bool result;
1890  OP_Utils::evalOpParm(result, thissop, "usesplitgroup", cookparms.getCookTime(), 0);
1891  return result;
1892  }
1893  const UT_StringHolder & getSplitGroup() const { return mySplitGroup; }
1894  void setSplitGroup(const UT_StringHolder & val) { mySplitGroup = val; }
1896  {
1897  SOP_Node *thissop = cookparms.getNode();
1898  if (!thissop) return getSplitGroup();
1900  OP_Utils::evalOpParm(result, thissop, "splitgroup", cookparms.getCookTime(), 0);
1901  return result;
1902  }
1903  ExtrusionMode getExtrusionMode() const { return ExtrusionMode(myExtrusionMode); }
1904  void setExtrusionMode(ExtrusionMode val) { myExtrusionMode = int64(val); }
1906  {
1907  SOP_Node *thissop = cookparms.getNode();
1908  if (!thissop) return getExtrusionMode();
1909  int64 result;
1910  OP_Utils::evalOpParm(result, thissop, "extrusionmode", cookparms.getCookTime(), 0);
1911  return ExtrusionMode(result);
1912  }
1913  PtNormalSrc getPtNormalSrc() const { return PtNormalSrc(myPtNormalSrc); }
1914  void setPtNormalSrc(PtNormalSrc val) { myPtNormalSrc = int64(val); }
1916  {
1917  SOP_Node *thissop = cookparms.getNode();
1918  if (!thissop) return getPtNormalSrc();
1919  int64 result;
1920  OP_Utils::evalOpParm(result, thissop, "ptnormalsrc", cookparms.getCookTime(), 0);
1921  return PtNormalSrc(result);
1922  }
1923  const UT_StringHolder & getPtNormalAttrib() const { return myPtNormalAttrib; }
1924  void setPtNormalAttrib(const UT_StringHolder & val) { myPtNormalAttrib = val; }
1926  {
1927  SOP_Node *thissop = cookparms.getNode();
1928  if (!thissop) return getPtNormalAttrib();
1930  OP_Utils::evalOpParm(result, thissop, "ptnormalattrib", cookparms.getCookTime(), 0);
1931  return result;
1932  }
1933  fpreal64 getDist() const { return myDist; }
1934  void setDist(fpreal64 val) { myDist = val; }
1935  fpreal64 opDist(const SOP_NodeVerb::CookParms &cookparms) const
1936  {
1937  SOP_Node *thissop = cookparms.getNode();
1938  if (!thissop) return getDist();
1939  fpreal64 result;
1940  OP_Utils::evalOpParm(result, thissop, "dist", cookparms.getCookTime(), 0);
1941  return result;
1942  }
1943  fpreal64 getInset() const { return myInset; }
1944  void setInset(fpreal64 val) { myInset = val; }
1945  fpreal64 opInset(const SOP_NodeVerb::CookParms &cookparms) const
1946  {
1947  SOP_Node *thissop = cookparms.getNode();
1948  if (!thissop) return getInset();
1949  fpreal64 result;
1950  OP_Utils::evalOpParm(result, thissop, "inset", cookparms.getCookTime(), 0);
1951  return result;
1952  }
1953  fpreal64 getTwist() const { return myTwist; }
1954  void setTwist(fpreal64 val) { myTwist = val; }
1955  fpreal64 opTwist(const SOP_NodeVerb::CookParms &cookparms) const
1956  {
1957  SOP_Node *thissop = cookparms.getNode();
1958  if (!thissop) return getTwist();
1959  fpreal64 result;
1960  OP_Utils::evalOpParm(result, thissop, "twist", cookparms.getCookTime(), 0);
1961  return result;
1962  }
1963  int64 getDivs() const { return myDivs; }
1964  void setDivs(int64 val) { myDivs = val; }
1965  int64 opDivs(const SOP_NodeVerb::CookParms &cookparms) const
1966  {
1967  SOP_Node *thissop = cookparms.getNode();
1968  if (!thissop) return getDivs();
1969  int64 result;
1970  OP_Utils::evalOpParm(result, thissop, "divs", cookparms.getCookTime(), 0);
1971  return result;
1972  }
1973  SpineType getSpineType() const { return SpineType(mySpineType); }
1974  void setSpineType(SpineType val) { mySpineType = int64(val); }
1976  {
1977  SOP_Node *thissop = cookparms.getNode();
1978  if (!thissop) return getSpineType();
1979  int64 result;
1980  OP_Utils::evalOpParm(result, thissop, "spinetype", cookparms.getCookTime(), 0);
1981  return SpineType(result);
1982  }
1983  bool getXformFront() const { return myXformFront; }
1984  void setXformFront(bool val) { myXformFront = val; }
1985  bool opXformFront(const SOP_NodeVerb::CookParms &cookparms) const
1986  {
1987  SOP_Node *thissop = cookparms.getNode();
1988  if (!thissop) return getXformFront();
1989  bool result;
1990  OP_Utils::evalOpParm(result, thissop, "xformfront", cookparms.getCookTime(), 0);
1991  return result;
1992  }
1993  XformSpace getXformSpace() const { return XformSpace(myXformSpace); }
1994  void setXformSpace(XformSpace val) { myXformSpace = int64(val); }
1996  {
1997  SOP_Node *thissop = cookparms.getNode();
1998  if (!thissop) return getXformSpace();
1999  int64 result;
2000  OP_Utils::evalOpParm(result, thissop, "xformspace", cookparms.getCookTime(), 0);
2001  return XformSpace(result);
2002  }
2003  XformOrder getXformOrder() const { return XformOrder(myXformOrder); }
2004  void setXformOrder(XformOrder val) { myXformOrder = int64(val); }
2006  {
2007  SOP_Node *thissop = cookparms.getNode();
2008  if (!thissop) return getXformOrder();
2009  int64 result;
2010  OP_Utils::evalOpParm(result, thissop, "rst", cookparms.getCookTime(), 0);
2011  return XformOrder(result);
2012  }
2013  RotateOrder getRotateOrder() const { return RotateOrder(myRotateOrder); }
2014  void setRotateOrder(RotateOrder val) { myRotateOrder = int64(val); }
2016  {
2017  SOP_Node *thissop = cookparms.getNode();
2018  if (!thissop) return getRotateOrder();
2019  int64 result;
2020  OP_Utils::evalOpParm(result, thissop, "xyz", cookparms.getCookTime(), 0);
2021  return RotateOrder(result);
2022  }
2023  UT_Vector3D getTranslate() const { return myTranslate; }
2024  void setTranslate(UT_Vector3D val) { myTranslate = val; }
2026  {
2027  SOP_Node *thissop = cookparms.getNode();
2028  if (!thissop) return getTranslate();
2030  OP_Utils::evalOpParm(result, thissop, "translate", cookparms.getCookTime(), 0);
2031  return result;
2032  }
2033  UT_Vector3D getRotate() const { return myRotate; }
2034  void setRotate(UT_Vector3D val) { myRotate = val; }
2036  {
2037  SOP_Node *thissop = cookparms.getNode();
2038  if (!thissop) return getRotate();
2040  OP_Utils::evalOpParm(result, thissop, "rotate", cookparms.getCookTime(), 0);
2041  return result;
2042  }
2043  UT_Vector3D getScale() const { return myScale; }
2044  void setScale(UT_Vector3D val) { myScale = val; }
2046  {
2047  SOP_Node *thissop = cookparms.getNode();
2048  if (!thissop) return getScale();
2050  OP_Utils::evalOpParm(result, thissop, "scale", cookparms.getCookTime(), 0);
2051  return result;
2052  }
2053  UT_Vector3D getShear() const { return myShear; }
2054  void setShear(UT_Vector3D val) { myShear = val; }
2056  {
2057  SOP_Node *thissop = cookparms.getNode();
2058  if (!thissop) return getShear();
2060  OP_Utils::evalOpParm(result, thissop, "shear", cookparms.getCookTime(), 0);
2061  return result;
2062  }
2063  UT_Vector3D getPivot() const { return myPivot; }
2064  void setPivot(UT_Vector3D val) { myPivot = val; }
2066  {
2067  SOP_Node *thissop = cookparms.getNode();
2068  if (!thissop) return getPivot();
2070  OP_Utils::evalOpParm(result, thissop, "pivot", cookparms.getCookTime(), 0);
2071  return result;
2072  }
2073  UT_Vector3D getPivotRotate() const { return myPivotRotate; }
2074  void setPivotRotate(UT_Vector3D val) { myPivotRotate = val; }
2076  {
2077  SOP_Node *thissop = cookparms.getNode();
2078  if (!thissop) return getPivotRotate();
2080  OP_Utils::evalOpParm(result, thissop, "pivotrotate", cookparms.getCookTime(), 0);
2081  return result;
2082  }
2083  PreXformOrder getPreXformOrder() const { return PreXformOrder(myPreXformOrder); }
2084  void setPreXformOrder(PreXformOrder val) { myPreXformOrder = int64(val); }
2086  {
2087  SOP_Node *thissop = cookparms.getNode();
2088  if (!thissop) return getPreXformOrder();
2089  int64 result;
2090  OP_Utils::evalOpParm(result, thissop, "prexform_rst", cookparms.getCookTime(), 0);
2091  return PreXformOrder(result);
2092  }
2093  PreXformRotateOrder getPreXformRotateOrder() const { return PreXformRotateOrder(myPreXformRotateOrder); }
2094  void setPreXformRotateOrder(PreXformRotateOrder val) { myPreXformRotateOrder = int64(val); }
2096  {
2097  SOP_Node *thissop = cookparms.getNode();
2098  if (!thissop) return getPreXformRotateOrder();
2099  int64 result;
2100  OP_Utils::evalOpParm(result, thissop, "prexform_xyz", cookparms.getCookTime(), 0);
2101  return PreXformRotateOrder(result);
2102  }
2103  UT_Vector3D getPreXformTranslate() const { return myPreXformTranslate; }
2104  void setPreXformTranslate(UT_Vector3D val) { myPreXformTranslate = val; }
2106  {
2107  SOP_Node *thissop = cookparms.getNode();
2108  if (!thissop) return getPreXformTranslate();
2110  OP_Utils::evalOpParm(result, thissop, "prexform_translate", cookparms.getCookTime(), 0);
2111  return result;
2112  }
2113  UT_Vector3D getPreXformRotate() const { return myPreXformRotate; }
2114  void setPreXformRotate(UT_Vector3D val) { myPreXformRotate = val; }
2116  {
2117  SOP_Node *thissop = cookparms.getNode();
2118  if (!thissop) return getPreXformRotate();
2120  OP_Utils::evalOpParm(result, thissop, "prexform_rotate", cookparms.getCookTime(), 0);
2121  return result;
2122  }
2123  UT_Vector3D getPreXformScale() const { return myPreXformScale; }
2124  void setPreXformScale(UT_Vector3D val) { myPreXformScale = val; }
2126  {
2127  SOP_Node *thissop = cookparms.getNode();
2128  if (!thissop) return getPreXformScale();
2130  OP_Utils::evalOpParm(result, thissop, "prexform_scale", cookparms.getCookTime(), 0);
2131  return result;
2132  }
2133  UT_Vector3D getPreXformShear() const { return myPreXformShear; }
2134  void setPreXformShear(UT_Vector3D val) { myPreXformShear = val; }
2136  {
2137  SOP_Node *thissop = cookparms.getNode();
2138  if (!thissop) return getPreXformShear();
2140  OP_Utils::evalOpParm(result, thissop, "prexform_shear", cookparms.getCookTime(), 0);
2141  return result;
2142  }
2143  bool getOutputFront() const { return myOutputFront; }
2144  void setOutputFront(bool val) { myOutputFront = val; }
2145  bool opOutputFront(const SOP_NodeVerb::CookParms &cookparms) const
2146  {
2147  SOP_Node *thissop = cookparms.getNode();
2148  if (!thissop) return getOutputFront();
2149  bool result;
2150  OP_Utils::evalOpParm(result, thissop, "outputfront", cookparms.getCookTime(), 0);
2151  return result;
2152  }
2153  bool getOutputFrontGrp() const { return myOutputFrontGrp; }
2154  void setOutputFrontGrp(bool val) { myOutputFrontGrp = val; }
2155  bool opOutputFrontGrp(const SOP_NodeVerb::CookParms &cookparms) const
2156  {
2157  SOP_Node *thissop = cookparms.getNode();
2158  if (!thissop) return getOutputFrontGrp();
2159  bool result;
2160  OP_Utils::evalOpParm(result, thissop, "outputfrontgrp", cookparms.getCookTime(), 0);
2161  return result;
2162  }
2163  const UT_StringHolder & getFrontGrp() const { return myFrontGrp; }
2164  void setFrontGrp(const UT_StringHolder & val) { myFrontGrp = val; }
2166  {
2167  SOP_Node *thissop = cookparms.getNode();
2168  if (!thissop) return getFrontGrp();
2170  OP_Utils::evalOpParm(result, thissop, "frontgrp", cookparms.getCookTime(), 0);
2171  return result;
2172  }
2173  bool getOutputBack() const { return myOutputBack; }
2174  void setOutputBack(bool val) { myOutputBack = val; }
2175  bool opOutputBack(const SOP_NodeVerb::CookParms &cookparms) const
2176  {
2177  SOP_Node *thissop = cookparms.getNode();
2178  if (!thissop) return getOutputBack();
2179  bool result;
2180  OP_Utils::evalOpParm(result, thissop, "outputback", cookparms.getCookTime(), 0);
2181  return result;
2182  }
2183  bool getOutputBackGrp() const { return myOutputBackGrp; }
2184  void setOutputBackGrp(bool val) { myOutputBackGrp = val; }
2185  bool opOutputBackGrp(const SOP_NodeVerb::CookParms &cookparms) const
2186  {
2187  SOP_Node *thissop = cookparms.getNode();
2188  if (!thissop) return getOutputBackGrp();
2189  bool result;
2190  OP_Utils::evalOpParm(result, thissop, "outputbackgrp", cookparms.getCookTime(), 0);
2191  return result;
2192  }
2193  const UT_StringHolder & getBackGrp() const { return myBackGrp; }
2194  void setBackGrp(const UT_StringHolder & val) { myBackGrp = val; }
2196  {
2197  SOP_Node *thissop = cookparms.getNode();
2198  if (!thissop) return getBackGrp();
2200  OP_Utils::evalOpParm(result, thissop, "backgrp", cookparms.getCookTime(), 0);
2201  return result;
2202  }
2203  bool getOutputSide() const { return myOutputSide; }
2204  void setOutputSide(bool val) { myOutputSide = val; }
2205  bool opOutputSide(const SOP_NodeVerb::CookParms &cookparms) const
2206  {
2207  SOP_Node *thissop = cookparms.getNode();
2208  if (!thissop) return getOutputSide();
2209  bool result;
2210  OP_Utils::evalOpParm(result, thissop, "outputside", cookparms.getCookTime(), 0);
2211  return result;
2212  }
2213  bool getOutputSideGrp() const { return myOutputSideGrp; }
2214  void setOutputSideGrp(bool val) { myOutputSideGrp = val; }
2215  bool opOutputSideGrp(const SOP_NodeVerb::CookParms &cookparms) const
2216  {
2217  SOP_Node *thissop = cookparms.getNode();
2218  if (!thissop) return getOutputSideGrp();
2219  bool result;
2220  OP_Utils::evalOpParm(result, thissop, "outputsidegrp", cookparms.getCookTime(), 0);
2221  return result;
2222  }
2223  const UT_StringHolder & getSideGrp() const { return mySideGrp; }
2224  void setSideGrp(const UT_StringHolder & val) { mySideGrp = val; }
2226  {
2227  SOP_Node *thissop = cookparms.getNode();
2228  if (!thissop) return getSideGrp();
2230  OP_Utils::evalOpParm(result, thissop, "sidegrp", cookparms.getCookTime(), 0);
2231  return result;
2232  }
2233  bool getOutputFrontSeamGrp() const { return myOutputFrontSeamGrp; }
2234  void setOutputFrontSeamGrp(bool val) { myOutputFrontSeamGrp = val; }
2235  bool opOutputFrontSeamGrp(const SOP_NodeVerb::CookParms &cookparms) const
2236  {
2237  SOP_Node *thissop = cookparms.getNode();
2238  if (!thissop) return getOutputFrontSeamGrp();
2239  bool result;
2240  OP_Utils::evalOpParm(result, thissop, "outputfrontseamgrp", cookparms.getCookTime(), 0);
2241  return result;
2242  }
2243  const UT_StringHolder & getFrontSeamGrp() const { return myFrontSeamGrp; }
2244  void setFrontSeamGrp(const UT_StringHolder & val) { myFrontSeamGrp = val; }
2246  {
2247  SOP_Node *thissop = cookparms.getNode();
2248  if (!thissop) return getFrontSeamGrp();
2250  OP_Utils::evalOpParm(result, thissop, "frontseamgrp", cookparms.getCookTime(), 0);
2251  return result;
2252  }
2253  bool getOutputBackSeamGrp() const { return myOutputBackSeamGrp; }
2254  void setOutputBackSeamGrp(bool val) { myOutputBackSeamGrp = val; }
2255  bool opOutputBackSeamGrp(const SOP_NodeVerb::CookParms &cookparms) const
2256  {
2257  SOP_Node *thissop = cookparms.getNode();
2258  if (!thissop) return getOutputBackSeamGrp();
2259  bool result;
2260  OP_Utils::evalOpParm(result, thissop, "outputbackseamgrp", cookparms.getCookTime(), 0);
2261  return result;
2262  }
2263  const UT_StringHolder & getBackSeamGrp() const { return myBackSeamGrp; }
2264  void setBackSeamGrp(const UT_StringHolder & val) { myBackSeamGrp = val; }
2266  {
2267  SOP_Node *thissop = cookparms.getNode();
2268  if (!thissop) return getBackSeamGrp();
2270  OP_Utils::evalOpParm(result, thissop, "backseamgrp", cookparms.getCookTime(), 0);
2271  return result;
2272  }
2273  bool getPreserveGroups() const { return myPreserveGroups; }
2274  void setPreserveGroups(bool val) { myPreserveGroups = val; }
2275  bool opPreserveGroups(const SOP_NodeVerb::CookParms &cookparms) const
2276  {
2277  SOP_Node *thissop = cookparms.getNode();
2278  if (!thissop) return getPreserveGroups();
2279  bool result;
2280  OP_Utils::evalOpParm(result, thissop, "preservegroups", cookparms.getCookTime(), 0);
2281  return result;
2282  }
2283  bool getLimitInset() const { return myLimitInset; }
2284  void setLimitInset(bool val) { myLimitInset = val; }
2285  bool opLimitInset(const SOP_NodeVerb::CookParms &cookparms) const
2286  {
2287  SOP_Node *thissop = cookparms.getNode();
2288  if (!thissop) return getLimitInset();
2289  bool result;
2290  OP_Utils::evalOpParm(result, thissop, "limitinset", cookparms.getCookTime(), 0);
2291  return result;
2292  }
2293  bool getCommonLimit() const { return myCommonLimit; }
2294  void setCommonLimit(bool val) { myCommonLimit = val; }
2295  bool opCommonLimit(const SOP_NodeVerb::CookParms &cookparms) const
2296  {
2297  SOP_Node *thissop = cookparms.getNode();
2298  if (!thissop) return getCommonLimit();
2299  bool result;
2300  OP_Utils::evalOpParm(result, thissop, "commonlimit", cookparms.getCookTime(), 0);
2301  return result;
2302  }
2303  bool getAddVertexNormals() const { return myAddVertexNormals; }
2304  void setAddVertexNormals(bool val) { myAddVertexNormals = val; }
2305  bool opAddVertexNormals(const SOP_NodeVerb::CookParms &cookparms) const
2306  {
2307  SOP_Node *thissop = cookparms.getNode();
2308  if (!thissop) return getAddVertexNormals();
2309  bool result;
2310  OP_Utils::evalOpParm(result, thissop, "addvertexnomrals", cookparms.getCookTime(), 0);
2311  return result;
2312  }
2313  fpreal64 getCuspAngle() const { return myCuspAngle; }
2314  void setCuspAngle(fpreal64 val) { myCuspAngle = val; }
2316  {
2317  SOP_Node *thissop = cookparms.getNode();
2318  if (!thissop) return getCuspAngle();
2319  fpreal64 result;
2320  OP_Utils::evalOpParm(result, thissop, "cuspangle", cookparms.getCookTime(), 0);
2321  return result;
2322  }
2323  bool getCuspFront() const { return myCuspFront; }
2324  void setCuspFront(bool val) { myCuspFront = val; }
2325  bool opCuspFront(const SOP_NodeVerb::CookParms &cookparms) const
2326  {
2327  SOP_Node *thissop = cookparms.getNode();
2328  if (!thissop) return getCuspFront();
2329  bool result;
2330  OP_Utils::evalOpParm(result, thissop, "cuspfront", cookparms.getCookTime(), 0);
2331  return result;
2332  }
2333  bool getCuspBack() const { return myCuspBack; }
2334  void setCuspBack(bool val) { myCuspBack = val; }
2335  bool opCuspBack(const SOP_NodeVerb::CookParms &cookparms) const
2336  {
2337  SOP_Node *thissop = cookparms.getNode();
2338  if (!thissop) return getCuspBack();
2339  bool result;
2340  OP_Utils::evalOpParm(result, thissop, "cuspback", cookparms.getCookTime(), 0);
2341  return result;
2342  }
2343  bool getGenUVs() const { return myGenUVs; }
2344  void setGenUVs(bool val) { myGenUVs = val; }
2345  bool opGenUVs(const SOP_NodeVerb::CookParms &cookparms) const
2346  {
2347  SOP_Node *thissop = cookparms.getNode();
2348  if (!thissop) return getGenUVs();
2349  bool result;
2350  OP_Utils::evalOpParm(result, thissop, "genuvs", cookparms.getCookTime(), 0);
2351  return result;
2352  }
2353  UVStyle getUVStyle() const { return UVStyle(myUVStyle); }
2354  void setUVStyle(UVStyle val) { myUVStyle = int64(val); }
2356  {
2357  SOP_Node *thissop = cookparms.getNode();
2358  if (!thissop) return getUVStyle();
2359  int64 result;
2360  OP_Utils::evalOpParm(result, thissop, "uvstyle", cookparms.getCookTime(), 0);
2361  return UVStyle(result);
2362  }
2363  UVScaling getUVScaling() const { return UVScaling(myUVScaling); }
2364  void setUVScaling(UVScaling val) { myUVScaling = int64(val); }
2366  {
2367  SOP_Node *thissop = cookparms.getNode();
2368  if (!thissop) return getUVScaling();
2369  int64 result;
2370  OP_Utils::evalOpParm(result, thissop, "uvscaling", cookparms.getCookTime(), 0);
2371  return UVScaling(result);
2372  }
2373  fpreal64 getFrontMagnitude() const { return myFrontMagnitude; }
2374  void setFrontMagnitude(fpreal64 val) { myFrontMagnitude = val; }
2376  {
2377  SOP_Node *thissop = cookparms.getNode();
2378  if (!thissop) return getFrontMagnitude();
2379  fpreal64 result;
2380  OP_Utils::evalOpParm(result, thissop, "frontmagnitude", cookparms.getCookTime(), 0);
2381  return result;
2382  }
2383  fpreal64 getBackMagnitude() const { return myBackMagnitude; }
2384  void setBackMagnitude(fpreal64 val) { myBackMagnitude = val; }
2386  {
2387  SOP_Node *thissop = cookparms.getNode();
2388  if (!thissop) return getBackMagnitude();
2389  fpreal64 result;
2390  OP_Utils::evalOpParm(result, thissop, "backmagnitude", cookparms.getCookTime(), 0);
2391  return result;
2392  }
2393  fpreal64 getFrontStiffness() const { return myFrontStiffness; }
2394  void setFrontStiffness(fpreal64 val) { myFrontStiffness = val; }
2396  {
2397  SOP_Node *thissop = cookparms.getNode();
2398  if (!thissop) return getFrontStiffness();
2399  fpreal64 result;
2400  OP_Utils::evalOpParm(result, thissop, "frontstiffness", cookparms.getCookTime(), 0);
2401  return result;
2402  }
2403  fpreal64 getBackStiffness() const { return myBackStiffness; }
2404  void setBackStiffness(fpreal64 val) { myBackStiffness = val; }
2406  {
2407  SOP_Node *thissop = cookparms.getNode();
2408  if (!thissop) return getBackStiffness();
2409  fpreal64 result;
2410  OP_Utils::evalOpParm(result, thissop, "backstiffness", cookparms.getCookTime(), 0);
2411  return result;
2412  }
2413  Interpolation getInterpolation() const { return Interpolation(myInterpolation); }
2414  void setInterpolation(Interpolation val) { myInterpolation = int64(val); }
2416  {
2417  SOP_Node *thissop = cookparms.getNode();
2418  if (!thissop) return getInterpolation();
2419  int64 result;
2420  OP_Utils::evalOpParm(result, thissop, "interpolation", cookparms.getCookTime(), 0);
2421  return Interpolation(result);
2422  }
2423  Spacing getSpacing() const { return Spacing(mySpacing); }
2424  void setSpacing(Spacing val) { mySpacing = int64(val); }
2426  {
2427  SOP_Node *thissop = cookparms.getNode();
2428  if (!thissop) return getSpacing();
2429  int64 result;
2430  OP_Utils::evalOpParm(result, thissop, "spacing", cookparms.getCookTime(), 0);
2431  return Spacing(result);
2432  }
2433  bool getReverseSpineDirection() const { return myReverseSpineDirection; }
2434  void setReverseSpineDirection(bool val) { myReverseSpineDirection = val; }
2436  {
2437  SOP_Node *thissop = cookparms.getNode();
2438  if (!thissop) return getReverseSpineDirection();
2439  bool result;
2440  OP_Utils::evalOpParm(result, thissop, "reversespinedirection", cookparms.getCookTime(), 0);
2441  return result;
2442  }
2443  fpreal64 getAxialRotation() const { return myAxialRotation; }
2444  void setAxialRotation(fpreal64 val) { myAxialRotation = val; }
2446  {
2447  SOP_Node *thissop = cookparms.getNode();
2448  if (!thissop) return getAxialRotation();
2449  fpreal64 result;
2450  OP_Utils::evalOpParm(result, thissop, "axialrotation", cookparms.getCookTime(), 0);
2451  return result;
2452  }
2453  fpreal64 getFrontBlend() const { return myFrontBlend; }
2454  void setFrontBlend(fpreal64 val) { myFrontBlend = val; }
2456  {
2457  SOP_Node *thissop = cookparms.getNode();
2458  if (!thissop) return getFrontBlend();
2459  fpreal64 result;
2460  OP_Utils::evalOpParm(result, thissop, "frontblend", cookparms.getCookTime(), 0);
2461  return result;
2462  }
2463  fpreal64 getBackBlend() const { return myBackBlend; }
2464  void setBackBlend(fpreal64 val) { myBackBlend = val; }
2466  {
2467  SOP_Node *thissop = cookparms.getNode();
2468  if (!thissop) return getBackBlend();
2469  fpreal64 result;
2470  OP_Utils::evalOpParm(result, thissop, "backblend", cookparms.getCookTime(), 0);
2471  return result;
2472  }
2473  fpreal64 getThicknessScale() const { return myThicknessScale; }
2474  void setThicknessScale(fpreal64 val) { myThicknessScale = val; }
2476  {
2477  SOP_Node *thissop = cookparms.getNode();
2478  if (!thissop) return getThicknessScale();
2479  fpreal64 result;
2480  OP_Utils::evalOpParm(result, thissop, "thicknessscale", cookparms.getCookTime(), 0);
2481  return result;
2482  }
2483  bool getUseThicknessAttrib() const { return myUseThicknessAttrib; }
2484  void setUseThicknessAttrib(bool val) { myUseThicknessAttrib = val; }
2485  bool opUseThicknessAttrib(const SOP_NodeVerb::CookParms &cookparms) const
2486  {
2487  SOP_Node *thissop = cookparms.getNode();
2488  if (!thissop) return getUseThicknessAttrib();
2489  bool result;
2490  OP_Utils::evalOpParm(result, thissop, "usethicknessattrib", cookparms.getCookTime(), 0);
2491  return result;
2492  }
2493  const UT_StringHolder & getThicknessAttrib() const { return myThicknessAttrib; }
2494  void setThicknessAttrib(const UT_StringHolder & val) { myThicknessAttrib = val; }
2496  {
2497  SOP_Node *thissop = cookparms.getNode();
2498  if (!thissop) return getThicknessAttrib();
2500  OP_Utils::evalOpParm(result, thissop, "thicknessattrib", cookparms.getCookTime(), 0);
2501  return result;
2502  }
2503  bool getUseThicknessRamp() const { return myUseThicknessRamp; }
2504  void setUseThicknessRamp(bool val) { myUseThicknessRamp = val; }
2505  bool opUseThicknessRamp(const SOP_NodeVerb::CookParms &cookparms) const
2506  {
2507  SOP_Node *thissop = cookparms.getNode();
2508  if (!thissop) return getUseThicknessRamp();
2509  bool result;
2510  OP_Utils::evalOpParm(result, thissop, "usethicknessramp", cookparms.getCookTime(), 0);
2511  return result;
2512  }
2513  UT_SharedPtr<UT_Ramp> getThicknessRamp() const { return myThicknessRamp; }
2514  void setThicknessRamp(UT_SharedPtr<UT_Ramp> val) { myThicknessRamp = val; }
2516  {
2517  SOP_Node *thissop = cookparms.getNode();
2518  if (!thissop) return getThicknessRamp();
2520  OP_Utils::evalOpParm(result, thissop, "thicknessramp", cookparms.getCookTime(), 0);
2521  return result;
2522  }
2523  bool getUseTwistAttrib() const { return myUseTwistAttrib; }
2524  void setUseTwistAttrib(bool val) { myUseTwistAttrib = val; }
2525  bool opUseTwistAttrib(const SOP_NodeVerb::CookParms &cookparms) const
2526  {
2527  SOP_Node *thissop = cookparms.getNode();
2528  if (!thissop) return getUseTwistAttrib();
2529  bool result;
2530  OP_Utils::evalOpParm(result, thissop, "usetwistattrib", cookparms.getCookTime(), 0);
2531  return result;
2532  }
2533  const UT_StringHolder & getTwistAttrib() const { return myTwistAttrib; }
2534  void setTwistAttrib(const UT_StringHolder & val) { myTwistAttrib = val; }
2536  {
2537  SOP_Node *thissop = cookparms.getNode();
2538  if (!thissop) return getTwistAttrib();
2540  OP_Utils::evalOpParm(result, thissop, "twistattrib", cookparms.getCookTime(), 0);
2541  return result;
2542  }
2543  bool getUseTwistRamp() const { return myUseTwistRamp; }
2544  void setUseTwistRamp(bool val) { myUseTwistRamp = val; }
2545  bool opUseTwistRamp(const SOP_NodeVerb::CookParms &cookparms) const
2546  {
2547  SOP_Node *thissop = cookparms.getNode();
2548  if (!thissop) return getUseTwistRamp();
2549  bool result;
2550  OP_Utils::evalOpParm(result, thissop, "usetwistramp", cookparms.getCookTime(), 0);
2551  return result;
2552  }
2553  UT_SharedPtr<UT_Ramp> getTwistRamp() const { return myTwistRamp; }
2554  void setTwistRamp(UT_SharedPtr<UT_Ramp> val) { myTwistRamp = val; }
2556  {
2557  SOP_Node *thissop = cookparms.getNode();
2558  if (!thissop) return getTwistRamp();
2560  OP_Utils::evalOpParm(result, thissop, "twistramp", cookparms.getCookTime(), 0);
2561  return result;
2562  }
2563  fpreal64 getTwistScale() const { return myTwistScale; }
2564  void setTwistScale(fpreal64 val) { myTwistScale = val; }
2566  {
2567  SOP_Node *thissop = cookparms.getNode();
2568  if (!thissop) return getTwistScale();
2569  fpreal64 result;
2570  OP_Utils::evalOpParm(result, thissop, "twistscale", cookparms.getCookTime(), 0);
2571  return result;
2572  }
2573  bool getUseLocalZScaleAttrib() const { return myUseLocalZScaleAttrib; }
2574  void setUseLocalZScaleAttrib(bool val) { myUseLocalZScaleAttrib = val; }
2576  {
2577  SOP_Node *thissop = cookparms.getNode();
2578  if (!thissop) return getUseLocalZScaleAttrib();
2579  bool result;
2580  OP_Utils::evalOpParm(result, thissop, "uselocalzscaleattrib", cookparms.getCookTime(), 0);
2581  return result;
2582  }
2583  const UT_StringHolder & getLocalZScaleAttrib() const { return myLocalZScaleAttrib; }
2584  void setLocalZScaleAttrib(const UT_StringHolder & val) { myLocalZScaleAttrib = val; }
2586  {
2587  SOP_Node *thissop = cookparms.getNode();
2588  if (!thissop) return getLocalZScaleAttrib();
2590  OP_Utils::evalOpParm(result, thissop, "localzscaleattrib", cookparms.getCookTime(), 0);
2591  return result;
2592  }
2593  bool getUseLocalInsetScaleAttrib() const { return myUseLocalInsetScaleAttrib; }
2594  void setUseLocalInsetScaleAttrib(bool val) { myUseLocalInsetScaleAttrib = val; }
2596  {
2597  SOP_Node *thissop = cookparms.getNode();
2598  if (!thissop) return getUseLocalInsetScaleAttrib();
2599  bool result;
2600  OP_Utils::evalOpParm(result, thissop, "uselocalinsetscaleattrib", cookparms.getCookTime(), 0);
2601  return result;
2602  }
2603  const UT_StringHolder & getLocalInsetScaleAttrib() const { return myLocalInsetScaleAttrib; }
2604  void setLocalInsetScaleAttrib(const UT_StringHolder & val) { myLocalInsetScaleAttrib = val; }
2606  {
2607  SOP_Node *thissop = cookparms.getNode();
2608  if (!thissop) return getLocalInsetScaleAttrib();
2610  OP_Utils::evalOpParm(result, thissop, "localinsetscaleattrib", cookparms.getCookTime(), 0);
2611  return result;
2612  }
2613  bool getUseLocalTwistScaleAttrib() const { return myUseLocalTwistScaleAttrib; }
2614  void setUseLocalTwistScaleAttrib(bool val) { myUseLocalTwistScaleAttrib = val; }
2616  {
2617  SOP_Node *thissop = cookparms.getNode();
2618  if (!thissop) return getUseLocalTwistScaleAttrib();
2619  bool result;
2620  OP_Utils::evalOpParm(result, thissop, "uselocaltwistattrib", cookparms.getCookTime(), 0);
2621  return result;
2622  }
2623  const UT_StringHolder & getLocalTwistScaleAttrib() const { return myLocalTwistScaleAttrib; }
2624  void setLocalTwistScaleAttrib(const UT_StringHolder & val) { myLocalTwistScaleAttrib = val; }
2626  {
2627  SOP_Node *thissop = cookparms.getNode();
2628  if (!thissop) return getLocalTwistScaleAttrib();
2630  OP_Utils::evalOpParm(result, thissop, "localtwistscaleattrib", cookparms.getCookTime(), 0);
2631  return result;
2632  }
2633  bool getUseLocalDivScaleAttrib() const { return myUseLocalDivScaleAttrib; }
2634  void setUseLocalDivScaleAttrib(bool val) { myUseLocalDivScaleAttrib = val; }
2636  {
2637  SOP_Node *thissop = cookparms.getNode();
2638  if (!thissop) return getUseLocalDivScaleAttrib();
2639  bool result;
2640  OP_Utils::evalOpParm(result, thissop, "uselocaldivsattrib", cookparms.getCookTime(), 0);
2641  return result;
2642  }
2643  const UT_StringHolder & getLocalDivScaleAttrib() const { return myLocalDivScaleAttrib; }
2644  void setLocalDivScaleAttrib(const UT_StringHolder & val) { myLocalDivScaleAttrib = val; }
2646  {
2647  SOP_Node *thissop = cookparms.getNode();
2648  if (!thissop) return getLocalDivScaleAttrib();
2650  OP_Utils::evalOpParm(result, thissop, "locadivscaleattrib", cookparms.getCookTime(), 0);
2651  return result;
2652  }
2653  bool getUseLocalXAttrib() const { return myUseLocalXAttrib; }
2654  void setUseLocalXAttrib(bool val) { myUseLocalXAttrib = val; }
2655  bool opUseLocalXAttrib(const SOP_NodeVerb::CookParms &cookparms) const
2656  {
2657  SOP_Node *thissop = cookparms.getNode();
2658  if (!thissop) return getUseLocalXAttrib();
2659  bool result;
2660  OP_Utils::evalOpParm(result, thissop, "uselocalxattrib", cookparms.getCookTime(), 0);
2661  return result;
2662  }
2663  const UT_StringHolder & getLocalXAttrib() const { return myLocalXAttrib; }
2664  void setLocalXAttrib(const UT_StringHolder & val) { myLocalXAttrib = val; }
2666  {
2667  SOP_Node *thissop = cookparms.getNode();
2668  if (!thissop) return getLocalXAttrib();
2670  OP_Utils::evalOpParm(result, thissop, "localxattrib", cookparms.getCookTime(), 0);
2671  return result;
2672  }
2673  bool getUseLocalZAttrib() const { return myUseLocalZAttrib; }
2674  void setUseLocalZAttrib(bool val) { myUseLocalZAttrib = val; }
2675  bool opUseLocalZAttrib(const SOP_NodeVerb::CookParms &cookparms) const
2676  {
2677  SOP_Node *thissop = cookparms.getNode();
2678  if (!thissop) return getUseLocalZAttrib();
2679  bool result;
2680  OP_Utils::evalOpParm(result, thissop, "uselocalzattirb", cookparms.getCookTime(), 0);
2681  return result;
2682  }
2683  const UT_StringHolder & getLocalZAttrib() const { return myLocalZAttrib; }
2684  void setLocalZAttrib(const UT_StringHolder & val) { myLocalZAttrib = val; }
2686  {
2687  SOP_Node *thissop = cookparms.getNode();
2688  if (!thissop) return getLocalZAttrib();
2690  OP_Utils::evalOpParm(result, thissop, "localzattirb", cookparms.getCookTime(), 0);
2691  return result;
2692  }
2693  bool getUseLocalCtrAttrib() const { return myUseLocalCtrAttrib; }
2694  void setUseLocalCtrAttrib(bool val) { myUseLocalCtrAttrib = val; }
2695  bool opUseLocalCtrAttrib(const SOP_NodeVerb::CookParms &cookparms) const
2696  {
2697  SOP_Node *thissop = cookparms.getNode();
2698  if (!thissop) return getUseLocalCtrAttrib();
2699  bool result;
2700  OP_Utils::evalOpParm(result, thissop, "uselocalctrattrib", cookparms.getCookTime(), 0);
2701  return result;
2702  }
2703  const UT_StringHolder & getLocalCtrAttrib() const { return myLocalCtrAttrib; }
2704  void setLocalCtrAttrib(const UT_StringHolder & val) { myLocalCtrAttrib = val; }
2706  {
2707  SOP_Node *thissop = cookparms.getNode();
2708  if (!thissop) return getLocalCtrAttrib();
2710  OP_Utils::evalOpParm(result, thissop, "localctrattrib", cookparms.getCookTime(), 0);
2711  return result;
2712  }
2713 
2714 private:
2715  UT_StringHolder myGroup;
2716  int64 mySplitType;
2717  bool myUseSplitGroup;
2718  UT_StringHolder mySplitGroup;
2719  int64 myExtrusionMode;
2720  int64 myPtNormalSrc;
2721  UT_StringHolder myPtNormalAttrib;
2722  fpreal64 myDist;
2723  fpreal64 myInset;
2724  fpreal64 myTwist;
2725  int64 myDivs;
2726  int64 mySpineType;
2727  bool myXformFront;
2728  int64 myXformSpace;
2729  int64 myXformOrder;
2730  int64 myRotateOrder;
2731  UT_Vector3D myTranslate;
2732  UT_Vector3D myRotate;
2733  UT_Vector3D myScale;
2734  UT_Vector3D myShear;
2735  UT_Vector3D myPivot;
2736  UT_Vector3D myPivotRotate;
2737  int64 myPreXformOrder;
2738  int64 myPreXformRotateOrder;
2739  UT_Vector3D myPreXformTranslate;
2740  UT_Vector3D myPreXformRotate;
2741  UT_Vector3D myPreXformScale;
2742  UT_Vector3D myPreXformShear;
2743  bool myOutputFront;
2744  bool myOutputFrontGrp;
2745  UT_StringHolder myFrontGrp;
2746  bool myOutputBack;
2747  bool myOutputBackGrp;
2748  UT_StringHolder myBackGrp;
2749  bool myOutputSide;
2750  bool myOutputSideGrp;
2751  UT_StringHolder mySideGrp;
2752  bool myOutputFrontSeamGrp;
2753  UT_StringHolder myFrontSeamGrp;
2754  bool myOutputBackSeamGrp;
2755  UT_StringHolder myBackSeamGrp;
2756  bool myPreserveGroups;
2757  bool myLimitInset;
2758  bool myCommonLimit;
2759  bool myAddVertexNormals;
2760  fpreal64 myCuspAngle;
2761  bool myCuspFront;
2762  bool myCuspBack;
2763  bool myGenUVs;
2764  int64 myUVStyle;
2765  int64 myUVScaling;
2766  fpreal64 myFrontMagnitude;
2767  fpreal64 myBackMagnitude;
2768  fpreal64 myFrontStiffness;
2769  fpreal64 myBackStiffness;
2770  int64 myInterpolation;
2771  int64 mySpacing;
2772  bool myReverseSpineDirection;
2773  fpreal64 myAxialRotation;
2774  fpreal64 myFrontBlend;
2775  fpreal64 myBackBlend;
2776  fpreal64 myThicknessScale;
2777  bool myUseThicknessAttrib;
2778  UT_StringHolder myThicknessAttrib;
2779  bool myUseThicknessRamp;
2780  UT_SharedPtr<UT_Ramp> myThicknessRamp;
2781  bool myUseTwistAttrib;
2782  UT_StringHolder myTwistAttrib;
2783  bool myUseTwistRamp;
2784  UT_SharedPtr<UT_Ramp> myTwistRamp;
2785  fpreal64 myTwistScale;
2786  bool myUseLocalZScaleAttrib;
2787  UT_StringHolder myLocalZScaleAttrib;
2788  bool myUseLocalInsetScaleAttrib;
2789  UT_StringHolder myLocalInsetScaleAttrib;
2790  bool myUseLocalTwistScaleAttrib;
2791  UT_StringHolder myLocalTwistScaleAttrib;
2792  bool myUseLocalDivScaleAttrib;
2793  UT_StringHolder myLocalDivScaleAttrib;
2794  bool myUseLocalXAttrib;
2795  UT_StringHolder myLocalXAttrib;
2796  bool myUseLocalZAttrib;
2797  UT_StringHolder myLocalZAttrib;
2798  bool myUseLocalCtrAttrib;
2799  UT_StringHolder myLocalCtrAttrib;
2800 
2801 };
bool opUseLocalTwistScaleAttrib(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opSplitGroup(const SOP_NodeVerb::CookParms &cookparms) const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix4D &value) const override
void setPreXformRotate(UT_Vector3D val)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector3D &value) const override
void getNestParmValue(TempIndex idx, TempIndex instance, UT_SharedPtr< UT_Ramp > &value) const override
bool opOutputBackSeamGrp(const SOP_NodeVerb::CookParms &cookparms) const
void setPivotRotate(UT_Vector3D val)
static void saveData(std::ostream &os, UT_Matrix4D v)
void setThicknessRamp(UT_SharedPtr< UT_Ramp > val)
int64 opDivs(const SOP_NodeVerb::CookParms &cookparms) const
bool opCommonLimit(const SOP_NodeVerb::CookParms &cookparms) const
int int32
Definition: SYS_Types.h:39
SOP_Node * getNode() const
Definition: SOP_NodeVerb.h:347
void setBackGrp(const UT_StringHolder &val)
UT_StringHolder opLocalZAttrib(const SOP_NodeVerb::CookParms &cookparms) const
void setGroup(const UT_StringHolder &val)
UT_StringHolder opLocalZScaleAttrib(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getSideGrp() const
UT_Vector3D opPreXformShear(const SOP_NodeVerb::CookParms &cookparms) const
UT_SharedPtr< UT_Ramp > getThicknessRamp() const
const UT_StringHolder & getSplitGroup() const
static void saveData(std::ostream &os, PRM_DataItemHandle s)
T clampMaxValue(fpreal maxvalue, const T &src) const
Definition: OP_NodeParms.h:315
UT_Vector3D getPreXformTranslate() const
void setLocalInsetScaleAttrib(const UT_StringHolder &val)
exint bread(int32 *buffer, exint asize=1)
bool opOutputBack(const SOP_NodeVerb::CookParms &cookparms) const
GLboolean * data
Definition: glcorearb.h:131
GT_API const UT_StringHolder time
UT_Vector3D opScale(const SOP_NodeVerb::CookParms &cookparms) const
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector4.h:493
const GLdouble * v
Definition: glcorearb.h:837
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector3D &value) override
fpreal getTime() const
Definition: OP_Context.h:62
UT_StringHolder opTwistAttrib(const SOP_NodeVerb::CookParms &cookparms) const
ExtrusionMode opExtrusionMode(const SOP_NodeVerb::CookParms &cookparms) const
static void saveData(std::ostream &os, UT_Matrix2D v)
static void loadData(UT_IStream &is, int64 &v)
static void loadData(UT_IStream &is, UT_Matrix4D &v)
UT_StringHolder opPtNormalAttrib(const SOP_NodeVerb::CookParms &cookparms) const
const OP_Context & context() const
Definition: OP_NodeParms.h:97
fpreal64 opBackMagnitude(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
SYS_FORCE_INLINE const char * buffer() const
const UT_StringHolder & getPtNormalAttrib() const
GLdouble s
Definition: glad.h:3009
const UT_StringHolder & getBackSeamGrp() const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector2D &value) const override
bool opAddVertexNormals(const SOP_NodeVerb::CookParms &cookparms) const
void setLocalZAttrib(const UT_StringHolder &val)
void setLocalZScaleAttrib(const UT_StringHolder &val)
UT_SharedPtr< UT_Ramp > opThicknessRamp(const SOP_NodeVerb::CookParms &cookparms) const
An output stream object that owns its own string buffer storage.
fpreal64 opInset(const SOP_NodeVerb::CookParms &cookparms) const
bool opOutputFrontGrp(const SOP_NodeVerb::CookParms &cookparms) const
void doGetParmValue(TempIndex idx, TempIndex instance, T &value) const
bool opUseLocalInsetScaleAttrib(const SOP_NodeVerb::CookParms &cookparms) const
bool opUseThicknessRamp(const SOP_NodeVerb::CookParms &cookparms) const
**But if you need a result
Definition: thread.h:613
bool opUseLocalDivScaleAttrib(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 opDist(const SOP_NodeVerb::CookParms &cookparms) const
void setNestParmValue(TempIndex idx, TempIndex instance, const PRM_DataItemHandle &value) override
bool opOutputFrontSeamGrp(const SOP_NodeVerb::CookParms &cookparms) const
static void saveData(std::ostream &os, bool v)
T clampMinValue(fpreal minvalue, const T &src) const
Definition: OP_NodeParms.h:308
fpreal64 opFrontStiffness(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, fpreal64 &v)
bool opUseLocalZScaleAttrib(const SOP_NodeVerb::CookParms &cookparms) const
exint nodeIdx() const
Definition: OP_NodeParms.h:95
static PRM_DataItemHandle parseBinary(const char *type, UT_IStream &is)
void copyFrom(const OP_NodeParms *src) override
const UT_WorkBuffer & str()
Returns a read-only reference to the underlying UT_WorkBuffer.
UVScaling opUVScaling(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opFrontSeamGrp(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 opFrontBlend(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getLocalZAttrib() const
void setSplitGroup(const UT_StringHolder &val)
virtual NodeIdx getInput(NodeIdx idx, int input, bool markused=false) const =0
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector4.h:491
void setInterpolation(Interpolation val)
static void loadData(UT_IStream &is, UT_Vector2I &v)
UT_StringHolder opThicknessAttrib(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opFrontGrp(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getBackGrp() const
static void loadData(UT_IStream &is, UT_Vector2D &v)
const UT_StringHolder & getGroup() const
const UT_StringHolder & getTwistAttrib() const
double fpreal64
Definition: SYS_Types.h:201
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector2.h:423
bool operator==(const BaseDimensions< T > &a, const BaseDimensions< Y > &b)
Definition: Dimensions.h:137
void buildFromOp(const OP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
const UT_StringHolder & getThicknessAttrib() const
UT_Vector3D opPreXformRotate(const SOP_NodeVerb::CookParms &cookparms) const
void setRotateOrder(RotateOrder val)
const UT_StringHolder & getLocalCtrAttrib() const
static void loadData(UT_IStream &is, UT_Vector3D &v)
UT_StringHolder opLocalTwistScaleAttrib(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, UT_StringHolder &v)
UT_Vector3D opPreXformScale(const SOP_NodeVerb::CookParms &cookparms) const
PreXformRotateOrder opPreXformRotateOrder(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getLocalDivScaleAttrib() const
exint length() const
PtNormalSrc opPtNormalSrc(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, UT_SharedPtr< UT_Ramp > &v)
bool opUseLocalZAttrib(const SOP_NodeVerb::CookParms &cookparms) const
static void saveData(std::ostream &os, UT_SharedPtr< UT_Ramp > s)
bool opOutputBackGrp(const SOP_NodeVerb::CookParms &cookparms) const
SYS_FORCE_INLINE const char * buffer() const
std::shared_ptr< T > UT_SharedPtr
Wrapper around std::shared_ptr.
Definition: UT_SharedPtr.h:36
bool opGenUVs(const SOP_NodeVerb::CookParms &cookparms) const
void setTwistAttrib(const UT_StringHolder &val)
SpineType opSpineType(const SOP_NodeVerb::CookParms &cookparms) const
constexpr SYS_FORCE_INLINE T & z() noexcept
Definition: UT_Vector4.h:495
void setBackSeamGrp(const UT_StringHolder &val)
bool opOutputSideGrp(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, PRM_DataItemHandle &v)
bool opReverseSpineDirection(const SOP_NodeVerb::CookParms &cookparms) const
PreXformOrder opPreXformOrder(const SOP_NodeVerb::CookParms &cookparms) const
void loadFromOpSubclass(const LoadParms &loadparms) override
UT_Vector3D getPreXformRotate() const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix3D &value) override
UT_StringHolder opBackSeamGrp(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opLocalInsetScaleAttrib(const SOP_NodeVerb::CookParms &cookparms) const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector4D &value) override
const OP_GraphProxy * graph() const
Definition: OP_NodeParms.h:94
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_SharedPtr< UT_Ramp > &value) override
fpreal64 opCuspAngle(const SOP_NodeVerb::CookParms &cookparms) const
UT_Vector3D opShear(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 opBackBlend(const SOP_NodeVerb::CookParms &cookparms) const
bool opPreserveGroups(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getLocalZScaleAttrib() const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix4D &value) override
void setPreXformTranslate(UT_Vector3D val)
static void saveData(std::ostream &os, UT_Matrix3D v)
bool opCuspBack(const SOP_NodeVerb::CookParms &cookparms) const
bool operator!=(const SOP_PolyExtrude_2_0Parms &src) const
bool opUseSplitGroup(const SOP_NodeVerb::CookParms &cookparms) const
void setPreXformScale(UT_Vector3D val)
fpreal64 opFrontMagnitude(const SOP_NodeVerb::CookParms &cookparms) const
bool opUseTwistAttrib(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 opAxialRotation(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, UT_Vector3I &v)
void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
void setSideGrp(const UT_StringHolder &val)
long long int64
Definition: SYS_Types.h:116
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector4D &value) const override
bool opUseLocalXAttrib(const SOP_NodeVerb::CookParms &cookparms) const
UT_Vector3T< fpreal64 > UT_Vector3D
static void saveData(std::ostream &os, UT_Vector3D v)
PreXformRotateOrder getPreXformRotateOrder() const
RotateOrder opRotateOrder(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getLocalXAttrib() const
bool opLimitInset(const SOP_NodeVerb::CookParms &cookparms) const
void setFrontSeamGrp(const UT_StringHolder &val)
UT_StringHolder opLocalXAttrib(const SOP_NodeVerb::CookParms &cookparms) const
virtual void evalOpParm(int64 &v, NodeIdx node, const char *parmname, fpreal time, DEP_MicroNode *depnode) const =0
void setThicknessAttrib(const UT_StringHolder &val)
UVStyle opUVStyle(const SOP_NodeVerb::CookParms &cookparms) const
void saveBinary(std::ostream &os) const
Save string to binary stream.
Definition: UT_String.h:296
UT_Vector3D opPivot(const SOP_NodeVerb::CookParms &cookparms) const
bool opOutputSide(const SOP_NodeVerb::CookParms &cookparms) const
XformOrder opXformOrder(const SOP_NodeVerb::CookParms &cookparms) const
GT_API const UT_StringHolder version
UT_StringHolder opSideGrp(const SOP_NodeVerb::CookParms &cookparms) const
void setTwistRamp(UT_SharedPtr< UT_Ramp > val)
XformSpace opXformSpace(const SOP_NodeVerb::CookParms &cookparms) const
bool opXformFront(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, UT_Vector4I &v)
static void loadData(UT_IStream &is, UT_Matrix3D &v)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_StringHolder &value) const override
void setExtrusionMode(ExtrusionMode val)
UT_StringHolder opBackGrp(const SOP_NodeVerb::CookParms &cookparms) const
void doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
const char * getNestParmName(TempIndex fieldnum) const override
UT_Vector3D opPivotRotate(const SOP_NodeVerb::CookParms &cookparms) const
exint getNestNumParms(TempIndex idx) const override
bool opOutputFront(const SOP_NodeVerb::CookParms &cookparms) const
void setPtNormalSrc(PtNormalSrc val)
void coerceValue(T &result, const S &src) const
Definition: OP_NodeParms.h:301
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector2D &value) override
const UT_StringHolder & getFrontSeamGrp() const
static void loadData(UT_IStream &is, UT_Vector4D &v)
void setLocalCtrAttrib(const UT_StringHolder &val)
fpreal64 opThicknessScale(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opLocalDivScaleAttrib(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 fpreal
Definition: SYS_Types.h:277
DEP_MicroNode * depnode() const
Definition: OP_NodeParms.h:99
UT_Vector3D opRotate(const SOP_NodeVerb::CookParms &cookparms) const
bool opUseTwistRamp(const SOP_NodeVerb::CookParms &cookparms) const
UT_SharedPtr< UT_Ramp > getTwistRamp() const
Utility class for containing a color ramp.
Definition: UT_Ramp.h:88
UT_Vector3D opTranslate(const SOP_NodeVerb::CookParms &cookparms) const
UT_Vector3D opPreXformTranslate(const SOP_NodeVerb::CookParms &cookparms) const
bool isParmColorRamp(exint idx) const override
constexpr SYS_FORCE_INLINE T & w() noexcept
Definition: UT_Vector4.h:497
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_StringHolder &value) override
void setLocalXAttrib(const UT_StringHolder &val)
static void saveData(std::ostream &os, int64 v)
UT_SharedPtr< UT_Ramp > opTwistRamp(const SOP_NodeVerb::CookParms &cookparms) const
void setNestParmValue(TempIndex idx, TempIndex instance, const exint &value) override
GLuint GLfloat * val
Definition: glcorearb.h:1608
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
void setLocalTwistScaleAttrib(const UT_StringHolder &val)
UT_StringHolder opGroup(const SOP_NodeVerb::CookParms &cookparms) const
#define SOP_API
Definition: SOP_API.h:10
void setPreXformShear(UT_Vector3D val)
fpreal64 opBackStiffness(const SOP_NodeVerb::CookParms &cookparms) const
void setPreXformOrder(PreXformOrder val)
void getNestParmValue(TempIndex idx, TempIndex instance, fpreal &value) const override
fpreal64 opTwistScale(const SOP_NodeVerb::CookParms &cookparms) const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix2D &value) const override
Interpolation getInterpolation() const
static void loadData(UT_IStream &is, bool &v)
SplitType opSplitType(const SOP_NodeVerb::CookParms &cookparms) const
fpreal getCookTime() const
Definition: SOP_NodeVerb.h:361
void setLocalDivScaleAttrib(const UT_StringHolder &val)
void save(std::ostream &os) const
static void loadData(UT_IStream &is, UT_Matrix2D &v)
UT_StringHolder opLocalCtrAttrib(const SOP_NodeVerb::CookParms &cookparms) const
const char * findChar(int c) const
Definition: UT_String.h:1385
#define UT_ASSERT(ZZ)
Definition: UT_Assert.h:156
Definition: core.h:1131
fpreal64 opTwist(const SOP_NodeVerb::CookParms &cookparms) const
bool operator==(const SOP_PolyExtrude_2_0Parms &src) const
Spacing opSpacing(const SOP_NodeVerb::CookParms &cookparms) const
bool opUseLocalCtrAttrib(const SOP_NodeVerb::CookParms &cookparms) const
void getNestParmValue(TempIndex idx, TempIndex instance, exint &value) const override
GLboolean r
Definition: glcorearb.h:1222
bool opUseThicknessAttrib(const SOP_NodeVerb::CookParms &cookparms) const
void setFrontGrp(const UT_StringHolder &val)
PreXformOrder getPreXformOrder() const
ParmType getNestParmType(TempIndex fieldnum) const override
bool opCuspFront(const SOP_NodeVerb::CookParms &cookparms) const
void setPtNormalAttrib(const UT_StringHolder &val)
const UT_StringHolder & getLocalTwistScaleAttrib() const
void setNestParmValue(TempIndex idx, TempIndex instance, const fpreal &value) override
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector3.h:665
Interpolation opInterpolation(const SOP_NodeVerb::CookParms &cookparms) const
static void saveData(std::ostream &os, UT_Vector4D v)
ExtrusionMode getExtrusionMode() const
type
Definition: core.h:1059
static void saveData(std::ostream &os, fpreal64 v)
static void saveData(std::ostream &os, UT_StringHolder s)
UT_SharedPtr< const PRM_DataItem > PRM_DataItemHandle
Definition: PRM_Parm.h:89
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector2.h:425
SYS_FORCE_INLINE bool isstring() const
OP_NodeParms & operator=(const OP_NodeParms &)=default
void setPreXformRotateOrder(PreXformRotateOrder val)
static void saveData(std::ostream &os, UT_Vector2D v)
SYS_FORCE_INLINE void strncpy(const char *src, exint maxlen)
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix2D &value) override
const UT_StringHolder & getLocalInsetScaleAttrib() const
GLenum src
Definition: glcorearb.h:1793
const UT_StringHolder & getFrontGrp() const
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector3.h:663