HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
SOP_GuideGroomCore.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_GuideGroomCoreEnums
24 {
25  enum class Grouptype
26  {
27  GUESS = 0,
29  EDGES,
30  POINTS,
31  PRIMS
32  };
33 
35  getToken(Grouptype enum_value)
36  {
37  using namespace UT::Literal;
38  switch (enum_value) {
39  case Grouptype::GUESS: return "guess"_sh;
40  case Grouptype::BREAKPOINTS: return "breakpoints"_sh;
41  case Grouptype::EDGES: return "edges"_sh;
42  case Grouptype::POINTS: return "points"_sh;
43  case Grouptype::PRIMS: return "prims"_sh;
44  default: UT_ASSERT(false); return ""_sh;
45  }
46  }
47 
48  enum class Tool
49  {
50  DRAW = 0,
51  PLANT,
52  DELETE,
53  CULL,
54  CUT,
55  BRUSH,
56  SCULPT,
57  SCULPTPHYS,
58  STRAIGHTEN,
59  LIFT,
61  SMOOTH,
62  ORIENT,
64  MOVE,
65  RELAX,
66  CLUMP,
67  BLUR,
69  PAINTMASK,
70  PAINTGROUP,
71  EDIT,
72  RESAMPLE,
73  TWIST,
74  MIRROR
75  };
76 
78  getToken(Tool enum_value)
79  {
80  using namespace UT::Literal;
81  switch (enum_value) {
82  case Tool::DRAW: return "draw"_sh;
83  case Tool::PLANT: return "plant"_sh;
84  case Tool::DELETE: return "delete"_sh;
85  case Tool::CULL: return "cull"_sh;
86  case Tool::CUT: return "cut"_sh;
87  case Tool::BRUSH: return "brush"_sh;
88  case Tool::SCULPT: return "sculpt"_sh;
89  case Tool::SCULPTPHYS: return "sculptphys"_sh;
90  case Tool::STRAIGHTEN: return "straighten"_sh;
91  case Tool::LIFT: return "lift"_sh;
92  case Tool::ADJUSTLENGTH: return "adjustlength"_sh;
93  case Tool::SMOOTH: return "smooth"_sh;
94  case Tool::ORIENT: return "orient"_sh;
95  case Tool::PAINTTEMPLATE: return "painttemplate"_sh;
96  case Tool::MOVE: return "move"_sh;
97  case Tool::RELAX: return "relax"_sh;
98  case Tool::CLUMP: return "clump"_sh;
99  case Tool::BLUR: return "blur"_sh;
100  case Tool::DEINTERSECT: return "deintersect"_sh;
101  case Tool::PAINTMASK: return "paintmask"_sh;
102  case Tool::PAINTGROUP: return "paintgroup"_sh;
103  case Tool::EDIT: return "edit"_sh;
104  case Tool::RESAMPLE: return "resample"_sh;
105  case Tool::TWIST: return "twist"_sh;
106  case Tool::MIRROR: return "mirror"_sh;
107  default: UT_ASSERT(false); return ""_sh;
108  }
109  }
110 
111  enum class Liftmode
112  {
113  ADDSUB = 0,
114  SET
115  };
116 
118  getToken(Liftmode enum_value)
119  {
120  using namespace UT::Literal;
121  switch (enum_value) {
122  case Liftmode::ADDSUB: return "addsub"_sh;
123  case Liftmode::SET: return "set"_sh;
124  default: UT_ASSERT(false); return ""_sh;
125  }
126  }
127 
128  enum class Adjustlengthmode
129  {
130  ADDSUB = 0,
131  SET
132  };
133 
136  {
137  using namespace UT::Literal;
138  switch (enum_value) {
139  case Adjustlengthmode::ADDSUB: return "addsub"_sh;
140  case Adjustlengthmode::SET: return "set"_sh;
141  default: UT_ASSERT(false); return ""_sh;
142  }
143  }
144 
146  {
147  CUTEXTEND = 0,
148  SCALE
149  };
150 
153  {
154  using namespace UT::Literal;
155  switch (enum_value) {
156  case Adjustlengthmethod::CUTEXTEND: return "cutextend"_sh;
157  case Adjustlengthmethod::SCALE: return "scale"_sh;
158  default: UT_ASSERT(false); return ""_sh;
159  }
160  }
161 
162  enum class Cutmode
163  {
164  REDISTRIBUTE = 0,
165  DELETE
166  };
167 
169  getToken(Cutmode enum_value)
170  {
171  using namespace UT::Literal;
172  switch (enum_value) {
173  case Cutmode::REDISTRIBUTE: return "redistribute"_sh;
174  case Cutmode::DELETE: return "delete"_sh;
175  default: UT_ASSERT(false); return ""_sh;
176  }
177  }
178 
179  enum class Plantmode
180  {
181  SINGLE = 0,
182  SCATTER
183  };
184 
186  getToken(Plantmode enum_value)
187  {
188  using namespace UT::Literal;
189  switch (enum_value) {
190  case Plantmode::SINGLE: return "single"_sh;
191  case Plantmode::SCATTER: return "scatter"_sh;
192  default: UT_ASSERT(false); return ""_sh;
193  }
194  }
195 
197  {
198  NONE = 0,
201  };
202 
205  {
206  using namespace UT::Literal;
207  switch (enum_value) {
208  case Planttemplatesource::NONE: return "none"_sh;
209  case Planttemplatesource::ACTIVETEMPLATE: return "activetemplate"_sh;
210  case Planttemplatesource::INTERPOLATEGUIDES: return "interpolateguides"_sh;
211  default: UT_ASSERT(false); return ""_sh;
212  }
213  }
214 
216  {
217  NONE = 0,
220  };
221 
224  {
225  using namespace UT::Literal;
226  switch (enum_value) {
227  case Drawtemplatesource::NONE: return "none"_sh;
228  case Drawtemplatesource::ACTIVETEMPLATE: return "activetemplate"_sh;
229  case Drawtemplatesource::INTERPOLATEGUIDES: return "interpolateguides"_sh;
230  default: UT_ASSERT(false); return ""_sh;
231  }
232  }
233 
234  enum class Drawcurvetype
235  {
236  GUIDE = 0,
237  PARTLINE
238  };
239 
241  getToken(Drawcurvetype enum_value)
242  {
243  using namespace UT::Literal;
244  switch (enum_value) {
245  case Drawcurvetype::GUIDE: return "guide"_sh;
246  case Drawcurvetype::PARTLINE: return "partline"_sh;
247  default: UT_ASSERT(false); return ""_sh;
248  }
249  }
250 
251  enum class Drawsegmode
252  {
253  FIXED = 0,
254  ADAPTIVE
255  };
256 
258  getToken(Drawsegmode enum_value)
259  {
260  using namespace UT::Literal;
261  switch (enum_value) {
262  case Drawsegmode::FIXED: return "fixed"_sh;
263  case Drawsegmode::ADAPTIVE: return "adaptive"_sh;
264  default: UT_ASSERT(false); return ""_sh;
265  }
266  }
267 
268  enum class Orientbrushupmode
269  {
270  CAM = 0,
271  SKINUPVEC,
272  ROTATE,
273  ALIGN
274  };
275 
278  {
279  using namespace UT::Literal;
280  switch (enum_value) {
281  case Orientbrushupmode::CAM: return "cam"_sh;
282  case Orientbrushupmode::SKINUPVEC: return "skinupvec"_sh;
283  case Orientbrushupmode::ROTATE: return "rotate"_sh;
284  case Orientbrushupmode::ALIGN: return "align"_sh;
285  default: UT_ASSERT(false); return ""_sh;
286  }
287  }
288 
289  enum class Editsoftmode
290  {
291  ENDPOINTS = 0,
292  CURVEFRAC,
293  ABSDIST
294  };
295 
297  getToken(Editsoftmode enum_value)
298  {
299  using namespace UT::Literal;
300  switch (enum_value) {
301  case Editsoftmode::ENDPOINTS: return "endpoints"_sh;
302  case Editsoftmode::CURVEFRAC: return "curvefrac"_sh;
303  case Editsoftmode::ABSDIST: return "absdist"_sh;
304  default: UT_ASSERT(false); return ""_sh;
305  }
306  }
307 
308  enum class Resamplesegmode
309  {
310  FIXED = 0,
311  ADAPTIVE,
312  ADD,
313  REMOVE
314  };
315 
318  {
319  using namespace UT::Literal;
320  switch (enum_value) {
321  case Resamplesegmode::FIXED: return "fixed"_sh;
322  case Resamplesegmode::ADAPTIVE: return "adaptive"_sh;
323  case Resamplesegmode::ADD: return "add"_sh;
324  case Resamplesegmode::REMOVE: return "remove"_sh;
325  default: UT_ASSERT(false); return ""_sh;
326  }
327  }
328 
329  enum class Xord
330  {
331  SRT = 0,
332  STR,
333  RST,
334  RTS,
335  TSR,
336  TRS
337  };
338 
340  getToken(Xord enum_value)
341  {
342  using namespace UT::Literal;
343  switch (enum_value) {
344  case Xord::SRT: return "srt"_sh;
345  case Xord::STR: return "str"_sh;
346  case Xord::RST: return "rst"_sh;
347  case Xord::RTS: return "rts"_sh;
348  case Xord::TSR: return "tsr"_sh;
349  case Xord::TRS: return "trs"_sh;
350  default: UT_ASSERT(false); return ""_sh;
351  }
352  }
353 
354  enum class Rord
355  {
356  XYZ = 0,
357  XZY,
358  YXZ,
359  YZX,
360  ZXY,
361  ZYX
362  };
363 
365  getToken(Rord enum_value)
366  {
367  using namespace UT::Literal;
368  switch (enum_value) {
369  case Rord::XYZ: return "xyz"_sh;
370  case Rord::XZY: return "xzy"_sh;
371  case Rord::YXZ: return "yxz"_sh;
372  case Rord::YZX: return "yzx"_sh;
373  case Rord::ZXY: return "zxy"_sh;
374  case Rord::ZYX: return "zyx"_sh;
375  default: UT_ASSERT(false); return ""_sh;
376  }
377  }
378 
379  enum class Button
380  {
381  NONE = 0,
382  LEFT,
383  MIDDLE
384  };
385 
387  getToken(Button enum_value)
388  {
389  using namespace UT::Literal;
390  switch (enum_value) {
391  case Button::NONE: return "none"_sh;
392  case Button::LEFT: return "left"_sh;
393  case Button::MIDDLE: return "middle"_sh;
394  default: UT_ASSERT(false); return ""_sh;
395  }
396  }
397 
398 }
399 
400 
402 {
403 public:
404  static int version() { return 1; }
406  {
410 
411 
413  {
414  groupcolor = UT_Vector3D(1,1,1);
415  groupname = ""_UTsh;
416  groupoptions = 0;
417 
418  }
419 
420  bool operator==(const Folder_grouplist &src) const
421  {
422  if (groupcolor != src.groupcolor) return false;
423  if (groupname != src.groupname) return false;
424  if (groupoptions != src.groupoptions) return false;
425 
426  return true;
427  }
428  bool operator!=(const Folder_grouplist &src) const
429  {
430  return !operator==(src);
431  }
432 
433  };
434 
436  {
438 
439  buf.strcat("[ ");
440  for (int i = 0; i < list.entries(); i++)
441  {
442  if (i)
443  buf.strcat(", ");
444  buf.strcat("( ");
445  buf.append("");
446  buf.appendSprintf("(%f, %f, %f)", list(i).groupcolor.x(), list(i).groupcolor.y(), list(i).groupcolor.z());
447  buf.append(", ");
448  { UT_String tmp; tmp = UT_StringWrap(list(i).groupname).makeQuotedString('"'); buf.strcat(tmp); }
449  buf.append(", ");
450  buf.appendSprintf("%d", (int) list(i).groupoptions);
451 
452  buf.strcat(" )");
453  }
454  buf.strcat(" ]");
455 
457  return result;
458  }
459 
461  {
462  myStashnode = ".."_UTsh;
463  myGroup = ""_UTsh;
464  myGrouptype = 0;
465  myUsemask = true;
466  myMirrorbrush = false;
467  myMirror = false;
468  myMirrorgroup = ""_UTsh;
469  myMirrororigin = UT_Vector3D(0,0,0);
470  myMirrordir = UT_Vector3D(1,0,0);
471  myTool = 5;
472  myRaybias = 0.0001;
473  myStrandmode = false;
474  myCollidewithskin = true;
475  myCreateorient = false;
476  myOrientname = "orient"_UTsh;
477  myOrientup = UT_Vector3D(0,1,0);
478  myOrientupattrib = "tangent"_UTsh;
479  myOrientupattribflip = false;
480  myTemplatesourcegroup = ""_UTsh;
481  myWidthoverride = true;
482  myWidth = 0.001;
483  myBrushsurface = false;
484  myUsepartinglines = true;
485  myScreenradius = 0;
486  myObjectradius = 0;
487  mySoft = 0;
488  mySpacing = 0;
489  myDensity = 1000;
490  myBrushmaintainlength = 0;
491  myBrushsnaptosurface = false;
492  myBrushbend = 0;
493  myBrushbendfalloff = 0;
494  myLiftmode = 0;
495  myLiftangle = 45;
496  myAdjustlengthmode = 0;
497  myAdjustlengthvalue = 0.1;
498  myAdjustlengthlength = 0.1;
499  myAdjustlengthmethod = 1;
500  myMoverotatewithskin = false;
501  mySculptdoconstrain = true;
502  mySculptlockroot = true;
503  mySculptmaintainevensegments = false;
504  mySmoothtargetsmoothness = 0.5;
505  mySmoothposition = true;
506  mySmoothorient = true;
507  myBlurinskinspace = false;
508  myBlurperpoint = false;
509  myBlurshape = false;
510  myBlurlength = false;
511  myBlurorient = false;
512  myCutmode = 0;
513  myClumpperpoint = false;
514  myPlantmode = 1;
515  myPlantinterpolateguides = true;
516  myPlantinterpolaterelskin = true;
517  myPlantinterpolateorient = true;
518  myPlanttemplatesource = 1;
519  myPlantlength = 0.01;
520  myPlantsegcount = 8;
521  myDrawonskin = false;
522  myDrawinterpolateorient = false;
523  myDrawtemplatesource = 1;
524  myDrawlimitlength = false;
525  myDrawcurvetype = 0;
526  myDrawsegmode = 0;
527  myDrawsegcount = 8;
528  myDrawseglength = 0.05;
529  myOrientbrushupmode = 0;
530  myOrientbrushperpoint = false;
531  myPainttemplateallowblending = false;
532  myEditactiveprim = 0;
533  myEditsoft = true;
534  myEditsoftmode = 1;
535  myEditcurvefrac = 1;
536  myEditcurvedist = 1;
537  myResamplesegmode = 0;
538  myResamplesegcount = 8;
539  myResampleseglength = 0.05;
540  myTwistangle = 45;
541  myCurvemaskramp = UT_SharedPtr<UT_Ramp>(0);
542  myGroom = PRM_DataItemHandle(0);
543  myStrands = PRM_DataItemHandle(0);
544  myStrokes = PRM_DataItemHandle(0);
545  myPreviewutil = true;
546  myPaintmaskpoints = false;
547  myGroupnewprims = false;
548  myNamenewprims = true;
549  myActivegroup = ""_UTsh;
550  myNameattrib = ""_UTsh;
551  myActivename = ""_UTsh;
552  myOverridecolor = false;
553  myColorbyname = false;
554  myDefaultcolor = UT_Vector3D(1,1,1);
555  myTemplatecolor = UT_Vector3D(0.1,0.1,0.1);
556  myColorseed = 0;
557  myXord = 0;
558  myRord = 0;
559  myT = UT_Vector3D(0,0,0);
560  myR = UT_Vector3D(0,0,0);
561  myS = UT_Vector3D(1,1,1);
562  myShear = UT_Vector3D(0,0,0);
563  myScale = 1;
564  myP = UT_Vector3D(0,0,0);
565  myPr = UT_Vector3D(0,0,0);
566  myCamxform0 = 0;
567  myCamxform1 = 0;
568  myCamxform2 = 0;
569  myCamxform3 = 0;
570  myCampos = 0;
571  myCursorpos = 0;
572  myCursordisplace = 0;
573  myRaypos = 0;
574  myRaydir = 0;
575  myStrengthscale = 0;
576  myButton = 0;
577  myShiftkey = false;
578  myCtrlkey = false;
579 
580  }
581 
582  explicit SOP_GuideGroomCoreParms(const SOP_GuideGroomCoreParms &) = default;
584  SOP_GuideGroomCoreParms(SOP_GuideGroomCoreParms &&) noexcept = default;
585  SOP_GuideGroomCoreParms &operator=(SOP_GuideGroomCoreParms &&) noexcept = default;
586 
587  ~SOP_GuideGroomCoreParms() override {}
588 
590  {
591  if (myStashnode != src.myStashnode) return false;
592  if (myGroup != src.myGroup) return false;
593  if (myGrouptype != src.myGrouptype) return false;
594  if (myUsemask != src.myUsemask) return false;
595  if (myMirrorbrush != src.myMirrorbrush) return false;
596  if (myMirror != src.myMirror) return false;
597  if (myMirrorgroup != src.myMirrorgroup) return false;
598  if (myMirrororigin != src.myMirrororigin) return false;
599  if (myMirrordir != src.myMirrordir) return false;
600  if (myTool != src.myTool) return false;
601  if (myRaybias != src.myRaybias) return false;
602  if (myStrandmode != src.myStrandmode) return false;
603  if (myCollidewithskin != src.myCollidewithskin) return false;
604  if (myCreateorient != src.myCreateorient) return false;
605  if (myOrientname != src.myOrientname) return false;
606  if (myOrientup != src.myOrientup) return false;
607  if (myOrientupattrib != src.myOrientupattrib) return false;
608  if (myOrientupattribflip != src.myOrientupattribflip) return false;
609  if (myTemplatesourcegroup != src.myTemplatesourcegroup) return false;
610  if (myWidthoverride != src.myWidthoverride) return false;
611  if (myWidth != src.myWidth) return false;
612  if (myBrushsurface != src.myBrushsurface) return false;
613  if (myUsepartinglines != src.myUsepartinglines) return false;
614  if (myScreenradius != src.myScreenradius) return false;
615  if (myObjectradius != src.myObjectradius) return false;
616  if (mySoft != src.mySoft) return false;
617  if (mySpacing != src.mySpacing) return false;
618  if (myDensity != src.myDensity) return false;
619  if (myBrushmaintainlength != src.myBrushmaintainlength) return false;
620  if (myBrushsnaptosurface != src.myBrushsnaptosurface) return false;
621  if (myBrushbend != src.myBrushbend) return false;
622  if (myBrushbendfalloff != src.myBrushbendfalloff) return false;
623  if (myLiftmode != src.myLiftmode) return false;
624  if (myLiftangle != src.myLiftangle) return false;
625  if (myAdjustlengthmode != src.myAdjustlengthmode) return false;
626  if (myAdjustlengthvalue != src.myAdjustlengthvalue) return false;
627  if (myAdjustlengthlength != src.myAdjustlengthlength) return false;
628  if (myAdjustlengthmethod != src.myAdjustlengthmethod) return false;
629  if (myMoverotatewithskin != src.myMoverotatewithskin) return false;
630  if (mySculptdoconstrain != src.mySculptdoconstrain) return false;
631  if (mySculptlockroot != src.mySculptlockroot) return false;
632  if (mySculptmaintainevensegments != src.mySculptmaintainevensegments) return false;
633  if (mySmoothtargetsmoothness != src.mySmoothtargetsmoothness) return false;
634  if (mySmoothposition != src.mySmoothposition) return false;
635  if (mySmoothorient != src.mySmoothorient) return false;
636  if (myBlurinskinspace != src.myBlurinskinspace) return false;
637  if (myBlurperpoint != src.myBlurperpoint) return false;
638  if (myBlurshape != src.myBlurshape) return false;
639  if (myBlurlength != src.myBlurlength) return false;
640  if (myBlurorient != src.myBlurorient) return false;
641  if (myCutmode != src.myCutmode) return false;
642  if (myClumpperpoint != src.myClumpperpoint) return false;
643  if (myPlantmode != src.myPlantmode) return false;
644  if (myPlantinterpolateguides != src.myPlantinterpolateguides) return false;
645  if (myPlantinterpolaterelskin != src.myPlantinterpolaterelskin) return false;
646  if (myPlantinterpolateorient != src.myPlantinterpolateorient) return false;
647  if (myPlanttemplatesource != src.myPlanttemplatesource) return false;
648  if (myPlantlength != src.myPlantlength) return false;
649  if (myPlantsegcount != src.myPlantsegcount) return false;
650  if (myDrawonskin != src.myDrawonskin) return false;
651  if (myDrawinterpolateorient != src.myDrawinterpolateorient) return false;
652  if (myDrawtemplatesource != src.myDrawtemplatesource) return false;
653  if (myDrawlimitlength != src.myDrawlimitlength) return false;
654  if (myDrawcurvetype != src.myDrawcurvetype) return false;
655  if (myDrawsegmode != src.myDrawsegmode) return false;
656  if (myDrawsegcount != src.myDrawsegcount) return false;
657  if (myDrawseglength != src.myDrawseglength) return false;
658  if (myOrientbrushupmode != src.myOrientbrushupmode) return false;
659  if (myOrientbrushperpoint != src.myOrientbrushperpoint) return false;
660  if (myPainttemplateallowblending != src.myPainttemplateallowblending) return false;
661  if (myEditactiveprim != src.myEditactiveprim) return false;
662  if (myEditsoft != src.myEditsoft) return false;
663  if (myEditsoftmode != src.myEditsoftmode) return false;
664  if (myEditcurvefrac != src.myEditcurvefrac) return false;
665  if (myEditcurvedist != src.myEditcurvedist) return false;
666  if (myResamplesegmode != src.myResamplesegmode) return false;
667  if (myResamplesegcount != src.myResamplesegcount) return false;
668  if (myResampleseglength != src.myResampleseglength) return false;
669  if (myTwistangle != src.myTwistangle) return false;
670  if (myCurvemaskramp != src.myCurvemaskramp)
671  { if (!myCurvemaskramp || !src.myCurvemaskramp || !(*myCurvemaskramp == *src.myCurvemaskramp)) return false; }
672  if (myGroom != src.myGroom)
673  { /* no == on PRM_DataItem */ return false; }
674  if (myStrands != src.myStrands)
675  { /* no == on PRM_DataItem */ return false; }
676  if (myStrokes != src.myStrokes)
677  { /* no == on PRM_DataItem */ return false; }
678  if (myPreviewutil != src.myPreviewutil) return false;
679  if (myPaintmaskpoints != src.myPaintmaskpoints) return false;
680  if (myGroupnewprims != src.myGroupnewprims) return false;
681  if (myNamenewprims != src.myNamenewprims) return false;
682  if (myActivegroup != src.myActivegroup) return false;
683  if (myNameattrib != src.myNameattrib) return false;
684  if (myActivename != src.myActivename) return false;
685  if (myOverridecolor != src.myOverridecolor) return false;
686  if (myColorbyname != src.myColorbyname) return false;
687  if (myDefaultcolor != src.myDefaultcolor) return false;
688  if (myTemplatecolor != src.myTemplatecolor) return false;
689  if (myColorseed != src.myColorseed) return false;
690  if (myFolder_grouplist != src.myFolder_grouplist) return false;
691  if (myXord != src.myXord) return false;
692  if (myRord != src.myRord) return false;
693  if (myT != src.myT) return false;
694  if (myR != src.myR) return false;
695  if (myS != src.myS) return false;
696  if (myShear != src.myShear) return false;
697  if (myScale != src.myScale) return false;
698  if (myP != src.myP) return false;
699  if (myPr != src.myPr) return false;
700  if (myCamxform0 != src.myCamxform0) return false;
701  if (myCamxform1 != src.myCamxform1) return false;
702  if (myCamxform2 != src.myCamxform2) return false;
703  if (myCamxform3 != src.myCamxform3) return false;
704  if (myCampos != src.myCampos) return false;
705  if (myCursorpos != src.myCursorpos) return false;
706  if (myCursordisplace != src.myCursordisplace) return false;
707  if (myRaypos != src.myRaypos) return false;
708  if (myRaydir != src.myRaydir) return false;
709  if (myStrengthscale != src.myStrengthscale) return false;
710  if (myButton != src.myButton) return false;
711  if (myShiftkey != src.myShiftkey) return false;
712  if (myCtrlkey != src.myCtrlkey) return false;
713 
714  return true;
715  }
717  {
718  return !operator==(src);
719  }
737 
738 
739 
740  void buildFromOp(const OP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
741  {
742  myStashnode = ".."_UTsh;
743  if (true)
744  graph->evalOpParm(myStashnode, nodeidx, "stashnode", time, 0);
745  myGroup = ""_UTsh;
746  if (true)
747  graph->evalOpParm(myGroup, nodeidx, "group", time, 0);
748  myGrouptype = 0;
749  if (true)
750  graph->evalOpParm(myGrouptype, nodeidx, "grouptype", time, 0);
751  myUsemask = true;
752  if (true)
753  graph->evalOpParm(myUsemask, nodeidx, "usemask", time, 0);
754  myMirrorbrush = false;
755  if (true)
756  graph->evalOpParm(myMirrorbrush, nodeidx, "mirrorbrush", time, 0);
757  myMirror = false;
758  if (true)
759  graph->evalOpParm(myMirror, nodeidx, "mirror", time, 0);
760  myMirrorgroup = ""_UTsh;
761  if (true)
762  graph->evalOpParm(myMirrorgroup, nodeidx, "mirrorgroup", time, 0);
763  myMirrororigin = UT_Vector3D(0,0,0);
764  if (true)
765  graph->evalOpParm(myMirrororigin, nodeidx, "mirrororigin", time, 0);
766  myMirrordir = UT_Vector3D(1,0,0);
767  if (true)
768  graph->evalOpParm(myMirrordir, nodeidx, "mirrordir", time, 0);
769  myTool = 5;
770  if (true)
771  graph->evalOpParm(myTool, nodeidx, "tool", time, 0);
772  myRaybias = 0.0001;
773  if (true)
774  graph->evalOpParm(myRaybias, nodeidx, "raybias", time, 0);
775  myStrandmode = false;
776  if (true)
777  graph->evalOpParm(myStrandmode, nodeidx, "strandmode", time, 0);
778  myCollidewithskin = true;
779  if (true)
780  graph->evalOpParm(myCollidewithskin, nodeidx, "collidewithskin", time, 0);
781  myCreateorient = false;
782  if (true)
783  graph->evalOpParm(myCreateorient, nodeidx, "createorient", time, 0);
784  myOrientname = "orient"_UTsh;
785  if (true)
786  graph->evalOpParm(myOrientname, nodeidx, "orientname", time, 0);
787  myOrientup = UT_Vector3D(0,1,0);
788  if (true)
789  graph->evalOpParm(myOrientup, nodeidx, "orientup", time, 0);
790  myOrientupattrib = "tangent"_UTsh;
791  if (true)
792  graph->evalOpParm(myOrientupattrib, nodeidx, "orientupattrib", time, 0);
793  myOrientupattribflip = false;
794  if (true)
795  graph->evalOpParm(myOrientupattribflip, nodeidx, "orientupattribflip", time, 0);
796  myTemplatesourcegroup = ""_UTsh;
797  if (true)
798  graph->evalOpParm(myTemplatesourcegroup, nodeidx, "templatesourcegroup", time, 0);
799  myWidthoverride = true;
800  if (true)
801  graph->evalOpParm(myWidthoverride, nodeidx, "widthoverride", time, 0);
802  myWidth = 0.001;
803  if (true)
804  graph->evalOpParm(myWidth, nodeidx, "width", time, 0);
805  myBrushsurface = false;
806  if (true)
807  graph->evalOpParm(myBrushsurface, nodeidx, "brushsurface", time, 0);
808  myUsepartinglines = true;
809  if (true)
810  graph->evalOpParm(myUsepartinglines, nodeidx, "usepartinglines", time, 0);
811  myScreenradius = 0;
812  if (true)
813  graph->evalOpParm(myScreenradius, nodeidx, "screenradius", time, 0);
814  myObjectradius = 0;
815  if (true)
816  graph->evalOpParm(myObjectradius, nodeidx, "objectradius", time, 0);
817  mySoft = 0;
818  if (true)
819  graph->evalOpParm(mySoft, nodeidx, "soft", time, 0);
820  mySpacing = 0;
821  if (true)
822  graph->evalOpParm(mySpacing, nodeidx, "spacing", time, 0);
823  myDensity = 1000;
824  if (true)
825  graph->evalOpParm(myDensity, nodeidx, "density", time, 0);
826  myBrushmaintainlength = 0;
827  if (true)
828  graph->evalOpParm(myBrushmaintainlength, nodeidx, "brushmaintainlength", time, 0);
829  myBrushsnaptosurface = false;
830  if (true)
831  graph->evalOpParm(myBrushsnaptosurface, nodeidx, "brushsnaptosurface", time, 0);
832  myBrushbend = 0;
833  if (true)
834  graph->evalOpParm(myBrushbend, nodeidx, "brushbend", time, 0);
835  myBrushbendfalloff = 0;
836  if (true)
837  graph->evalOpParm(myBrushbendfalloff, nodeidx, "brushbendfalloff", time, 0);
838  myLiftmode = 0;
839  if (true)
840  graph->evalOpParm(myLiftmode, nodeidx, "liftmode", time, 0);
841  myLiftangle = 45;
842  if (true)
843  graph->evalOpParm(myLiftangle, nodeidx, "liftangle", time, 0);
844  myAdjustlengthmode = 0;
845  if (true)
846  graph->evalOpParm(myAdjustlengthmode, nodeidx, "adjustlengthmode", time, 0);
847  myAdjustlengthvalue = 0.1;
848  if (true)
849  graph->evalOpParm(myAdjustlengthvalue, nodeidx, "adjustlengthvalue", time, 0);
850  myAdjustlengthlength = 0.1;
851  if (true)
852  graph->evalOpParm(myAdjustlengthlength, nodeidx, "adjustlengthlength", time, 0);
853  myAdjustlengthmethod = 1;
854  if (true)
855  graph->evalOpParm(myAdjustlengthmethod, nodeidx, "adjustlengthmethod", time, 0);
856  myMoverotatewithskin = false;
857  if (true)
858  graph->evalOpParm(myMoverotatewithskin, nodeidx, "moverotatewithskin", time, 0);
859  mySculptdoconstrain = true;
860  if (true)
861  graph->evalOpParm(mySculptdoconstrain, nodeidx, "sculptdoconstrain", time, 0);
862  mySculptlockroot = true;
863  if (true)
864  graph->evalOpParm(mySculptlockroot, nodeidx, "sculptlockroot", time, 0);
865  mySculptmaintainevensegments = false;
866  if (true)
867  graph->evalOpParm(mySculptmaintainevensegments, nodeidx, "sculptmaintainevensegments", time, 0);
868  mySmoothtargetsmoothness = 0.5;
869  if (true)
870  graph->evalOpParm(mySmoothtargetsmoothness, nodeidx, "smoothtargetsmoothness", time, 0);
871  mySmoothposition = true;
872  if (true)
873  graph->evalOpParm(mySmoothposition, nodeidx, "smoothposition", time, 0);
874  mySmoothorient = true;
875  if (true)
876  graph->evalOpParm(mySmoothorient, nodeidx, "smoothorient", time, 0);
877  myBlurinskinspace = false;
878  if (true)
879  graph->evalOpParm(myBlurinskinspace, nodeidx, "blurinskinspace", time, 0);
880  myBlurperpoint = false;
881  if (true)
882  graph->evalOpParm(myBlurperpoint, nodeidx, "blurperpoint", time, 0);
883  myBlurshape = false;
884  if (true)
885  graph->evalOpParm(myBlurshape, nodeidx, "blurshape", time, 0);
886  myBlurlength = false;
887  if (true)
888  graph->evalOpParm(myBlurlength, nodeidx, "blurlength", time, 0);
889  myBlurorient = false;
890  if (true)
891  graph->evalOpParm(myBlurorient, nodeidx, "blurorient", time, 0);
892  myCutmode = 0;
893  if (true)
894  graph->evalOpParm(myCutmode, nodeidx, "cutmode", time, 0);
895  myClumpperpoint = false;
896  if (true)
897  graph->evalOpParm(myClumpperpoint, nodeidx, "clumpperpoint", time, 0);
898  myPlantmode = 1;
899  if (true)
900  graph->evalOpParm(myPlantmode, nodeidx, "plantmode", time, 0);
901  myPlantinterpolateguides = true;
902  if (true)
903  graph->evalOpParm(myPlantinterpolateguides, nodeidx, "plantinterpolateguides", time, 0);
904  myPlantinterpolaterelskin = true;
905  if (true)
906  graph->evalOpParm(myPlantinterpolaterelskin, nodeidx, "plantinterpolaterelskin", time, 0);
907  myPlantinterpolateorient = true;
908  if (true)
909  graph->evalOpParm(myPlantinterpolateorient, nodeidx, "plantinterpolateorient", time, 0);
910  myPlanttemplatesource = 1;
911  if (true)
912  graph->evalOpParm(myPlanttemplatesource, nodeidx, "planttemplatesource", time, 0);
913  myPlantlength = 0.01;
914  if (true)
915  graph->evalOpParm(myPlantlength, nodeidx, "plantlength", time, 0);
916  myPlantsegcount = 8;
917  if (true)
918  graph->evalOpParm(myPlantsegcount, nodeidx, "plantsegcount", time, 0);
919  myDrawonskin = false;
920  if (true)
921  graph->evalOpParm(myDrawonskin, nodeidx, "drawonskin", time, 0);
922  myDrawinterpolateorient = false;
923  if (true)
924  graph->evalOpParm(myDrawinterpolateorient, nodeidx, "drawinterpolateorient", time, 0);
925  myDrawtemplatesource = 1;
926  if (true)
927  graph->evalOpParm(myDrawtemplatesource, nodeidx, "drawtemplatesource", time, 0);
928  myDrawlimitlength = false;
929  if (true)
930  graph->evalOpParm(myDrawlimitlength, nodeidx, "drawlimitlength", time, 0);
931  myDrawcurvetype = 0;
932  if (true)
933  graph->evalOpParm(myDrawcurvetype, nodeidx, "drawcurvetype", time, 0);
934  myDrawsegmode = 0;
935  if (true)
936  graph->evalOpParm(myDrawsegmode, nodeidx, "drawsegmode", time, 0);
937  myDrawsegcount = 8;
938  if (true)
939  graph->evalOpParm(myDrawsegcount, nodeidx, "drawsegcount", time, 0);
940  myDrawseglength = 0.05;
941  if (true)
942  graph->evalOpParm(myDrawseglength, nodeidx, "drawseglength", time, 0);
943  myOrientbrushupmode = 0;
944  if (true)
945  graph->evalOpParm(myOrientbrushupmode, nodeidx, "orientbrushupmode", time, 0);
946  myOrientbrushperpoint = false;
947  if (true)
948  graph->evalOpParm(myOrientbrushperpoint, nodeidx, "orientbrushperpoint", time, 0);
949  myPainttemplateallowblending = false;
950  if (true)
951  graph->evalOpParm(myPainttemplateallowblending, nodeidx, "painttemplateallowblending", time, 0);
952  myEditactiveprim = 0;
953  if (true)
954  graph->evalOpParm(myEditactiveprim, nodeidx, "editactiveprim", time, 0);
955  myEditsoft = true;
956  if (true)
957  graph->evalOpParm(myEditsoft, nodeidx, "editsoft", time, 0);
958  myEditsoftmode = 1;
959  if (true)
960  graph->evalOpParm(myEditsoftmode, nodeidx, "editsoftmode", time, 0);
961  myEditcurvefrac = 1;
962  if (true)
963  graph->evalOpParm(myEditcurvefrac, nodeidx, "editcurvefrac", time, 0);
964  myEditcurvedist = 1;
965  if (true)
966  graph->evalOpParm(myEditcurvedist, nodeidx, "editcurvedist", time, 0);
967  myResamplesegmode = 0;
968  if (true)
969  graph->evalOpParm(myResamplesegmode, nodeidx, "resamplesegmode", time, 0);
970  myResamplesegcount = 8;
971  if (true)
972  graph->evalOpParm(myResamplesegcount, nodeidx, "resamplesegcount", time, 0);
973  myResampleseglength = 0.05;
974  if (true)
975  graph->evalOpParm(myResampleseglength, nodeidx, "resampleseglength", time, 0);
976  myTwistangle = 45;
977  if (true)
978  graph->evalOpParm(myTwistangle, nodeidx, "twistangle", time, 0);
979  myCurvemaskramp = UT_SharedPtr<UT_Ramp>(0);
980  if (true)
981  graph->evalOpParm(myCurvemaskramp, nodeidx, "curvemaskramp", time, 0);
982  myGroom = PRM_DataItemHandle(0);
983  if (true)
984  graph->evalOpParm(myGroom, nodeidx, "groom", time, 0);
985  myStrands = PRM_DataItemHandle(0);
986  if (true)
987  graph->evalOpParm(myStrands, nodeidx, "strands", time, 0);
988  myStrokes = PRM_DataItemHandle(0);
989  if (true)
990  graph->evalOpParm(myStrokes, nodeidx, "strokes", time, 0);
991  myPreviewutil = true;
992  if (true)
993  graph->evalOpParm(myPreviewutil, nodeidx, "previewutil", time, 0);
994  myPaintmaskpoints = false;
995  if (true)
996  graph->evalOpParm(myPaintmaskpoints, nodeidx, "paintmaskpoints", time, 0);
997  myGroupnewprims = false;
998  if (true)
999  graph->evalOpParm(myGroupnewprims, nodeidx, "groupnewprims", time, 0);
1000  myNamenewprims = true;
1001  if (true)
1002  graph->evalOpParm(myNamenewprims, nodeidx, "namenewprims", time, 0);
1003  myActivegroup = ""_UTsh;
1004  if (true)
1005  graph->evalOpParm(myActivegroup, nodeidx, "activegroup", time, 0);
1006  myNameattrib = ""_UTsh;
1007  if (true)
1008  graph->evalOpParm(myNameattrib, nodeidx, "nameattrib", time, 0);
1009  myActivename = ""_UTsh;
1010  if (true)
1011  graph->evalOpParm(myActivename, nodeidx, "activename", time, 0);
1012  myOverridecolor = false;
1013  if (true)
1014  graph->evalOpParm(myOverridecolor, nodeidx, "overridecolor", time, 0);
1015  myColorbyname = false;
1016  if (true)
1017  graph->evalOpParm(myColorbyname, nodeidx, "colorbyname", time, 0);
1018  myDefaultcolor = UT_Vector3D(1,1,1);
1019  if (true)
1020  graph->evalOpParm(myDefaultcolor, nodeidx, "defaultcolor", time, 0);
1021  myTemplatecolor = UT_Vector3D(0.1,0.1,0.1);
1022  if (true)
1023  graph->evalOpParm(myTemplatecolor, nodeidx, "templatecolor", time, 0);
1024  myColorseed = 0;
1025  if (true)
1026  graph->evalOpParm(myColorseed, nodeidx, "colorseed", time, 0);
1027  if (true)
1028  {
1029  int64 length = 0;
1030  graph->evalOpParm(length, nodeidx, "folder_grouplist", time, 0);
1031  if (length < 0) length = 0;
1032  myFolder_grouplist.setSize(length);
1033  for (exint i = 0; i < length; i++)
1034  {
1035  int parmidx[1];
1036  int offsets[1];
1037  parmidx[0] = i+0;
1038  offsets[0] = 0;
1039  auto && _curentry = myFolder_grouplist(i);
1040  (void) _curentry;
1041  _curentry.groupcolor = UT_Vector3D(1,1,1);
1042  if (true)
1043  graph->evalOpParmInst(_curentry.groupcolor, nodeidx, "groupcolor#", parmidx, offsets, time, 0, 2-1);
1044  _curentry.groupname = ""_UTsh;
1045  if (true)
1046  graph->evalOpParmInst(_curentry.groupname, nodeidx, "groupname#", parmidx, offsets, time, 0, 2-1);
1047  _curentry.groupoptions = 0;
1048  if (true)
1049  graph->evalOpParmInst(_curentry.groupoptions, nodeidx, "groupoptions#", parmidx, offsets, time, 0, 2-1);
1050 
1051  }
1052  }
1053  else
1054  myFolder_grouplist.clear();
1055  myXord = 0;
1056  if (true)
1057  graph->evalOpParm(myXord, nodeidx, "xOrd", time, 0);
1058  myRord = 0;
1059  if (true)
1060  graph->evalOpParm(myRord, nodeidx, "rOrd", time, 0);
1061  myT = UT_Vector3D(0,0,0);
1062  if (true)
1063  graph->evalOpParm(myT, nodeidx, "t", time, 0);
1064  myR = UT_Vector3D(0,0,0);
1065  if (true)
1066  graph->evalOpParm(myR, nodeidx, "r", time, 0);
1067  myS = UT_Vector3D(1,1,1);
1068  if (true)
1069  graph->evalOpParm(myS, nodeidx, "s", time, 0);
1070  myShear = UT_Vector3D(0,0,0);
1071  if (true)
1072  graph->evalOpParm(myShear, nodeidx, "shear", time, 0);
1073  myScale = 1;
1074  if (true)
1075  graph->evalOpParm(myScale, nodeidx, "scale", time, 0);
1076  myP = UT_Vector3D(0,0,0);
1077  if (true)
1078  graph->evalOpParm(myP, nodeidx, "p", time, 0);
1079  myPr = UT_Vector3D(0,0,0);
1080  if (true)
1081  graph->evalOpParm(myPr, nodeidx, "pr", time, 0);
1082  myCamxform0 = 0;
1083  if (true)
1084  graph->evalOpParm(myCamxform0, nodeidx, "camxform0", time, 0);
1085  myCamxform1 = 0;
1086  if (true)
1087  graph->evalOpParm(myCamxform1, nodeidx, "camxform1", time, 0);
1088  myCamxform2 = 0;
1089  if (true)
1090  graph->evalOpParm(myCamxform2, nodeidx, "camxform2", time, 0);
1091  myCamxform3 = 0;
1092  if (true)
1093  graph->evalOpParm(myCamxform3, nodeidx, "camxform3", time, 0);
1094  myCampos = 0;
1095  if (true)
1096  graph->evalOpParm(myCampos, nodeidx, "campos", time, 0);
1097  myCursorpos = 0;
1098  if (true)
1099  graph->evalOpParm(myCursorpos, nodeidx, "cursorpos", time, 0);
1100  myCursordisplace = 0;
1101  if (true)
1102  graph->evalOpParm(myCursordisplace, nodeidx, "cursordisplace", time, 0);
1103  myRaypos = 0;
1104  if (true)
1105  graph->evalOpParm(myRaypos, nodeidx, "raypos", time, 0);
1106  myRaydir = 0;
1107  if (true)
1108  graph->evalOpParm(myRaydir, nodeidx, "raydir", time, 0);
1109  myStrengthscale = 0;
1110  if (true)
1111  graph->evalOpParm(myStrengthscale, nodeidx, "strengthscale", time, 0);
1112  myButton = 0;
1113  if (true)
1114  graph->evalOpParm(myButton, nodeidx, "button", time, 0);
1115  myShiftkey = false;
1116  if (true)
1117  graph->evalOpParm(myShiftkey, nodeidx, "shiftkey", time, 0);
1118  myCtrlkey = false;
1119  if (true)
1120  graph->evalOpParm(myCtrlkey, nodeidx, "ctrlkey", time, 0);
1121 
1122  }
1123 
1124 
1125  void loadFromOpSubclass(const LoadParms &loadparms) override
1126  {
1127  buildFromOp(loadparms.graph(), loadparms.nodeIdx(), loadparms.context().getTime(), loadparms.depnode());
1128  }
1129 
1130 
1131  void copyFrom(const OP_NodeParms *src) override
1132  {
1133  *this = *((const SOP_GuideGroomCoreParms *)src);
1134  }
1135 
1136  template <typename T>
1137  void
1138  doGetParmValue(TempIndex idx, TempIndex instance, T &value) const
1139  {
1140  if (idx.size() < 1)
1141  return;
1142  UT_ASSERT(idx.size() == instance.size()+1);
1143  if (idx.size() != instance.size()+1)
1144  return;
1145  switch (idx[0])
1146  {
1147  case 0:
1148  coerceValue(value, myStashnode);
1149  break;
1150  case 1:
1151  coerceValue(value, myGroup);
1152  break;
1153  case 2:
1154  coerceValue(value, myGrouptype);
1155  break;
1156  case 3:
1157  coerceValue(value, myUsemask);
1158  break;
1159  case 4:
1160  coerceValue(value, myMirrorbrush);
1161  break;
1162  case 5:
1163  coerceValue(value, myMirror);
1164  break;
1165  case 6:
1166  coerceValue(value, myMirrorgroup);
1167  break;
1168  case 7:
1169  coerceValue(value, myMirrororigin);
1170  break;
1171  case 8:
1172  coerceValue(value, myMirrordir);
1173  break;
1174  case 9:
1175  coerceValue(value, myTool);
1176  break;
1177  case 10:
1178  coerceValue(value, myRaybias);
1179  break;
1180  case 11:
1181  coerceValue(value, myStrandmode);
1182  break;
1183  case 12:
1184  coerceValue(value, myCollidewithskin);
1185  break;
1186  case 13:
1187  coerceValue(value, myCreateorient);
1188  break;
1189  case 14:
1190  coerceValue(value, myOrientname);
1191  break;
1192  case 15:
1193  coerceValue(value, myOrientup);
1194  break;
1195  case 16:
1196  coerceValue(value, myOrientupattrib);
1197  break;
1198  case 17:
1199  coerceValue(value, myOrientupattribflip);
1200  break;
1201  case 18:
1202  coerceValue(value, myTemplatesourcegroup);
1203  break;
1204  case 19:
1205  coerceValue(value, myWidthoverride);
1206  break;
1207  case 20:
1208  coerceValue(value, myWidth);
1209  break;
1210  case 21:
1211  coerceValue(value, myBrushsurface);
1212  break;
1213  case 22:
1214  coerceValue(value, myUsepartinglines);
1215  break;
1216  case 23:
1217  coerceValue(value, myScreenradius);
1218  break;
1219  case 24:
1220  coerceValue(value, myObjectradius);
1221  break;
1222  case 25:
1223  coerceValue(value, mySoft);
1224  break;
1225  case 26:
1226  coerceValue(value, mySpacing);
1227  break;
1228  case 27:
1229  coerceValue(value, myDensity);
1230  break;
1231  case 28:
1232  coerceValue(value, myBrushmaintainlength);
1233  break;
1234  case 29:
1235  coerceValue(value, myBrushsnaptosurface);
1236  break;
1237  case 30:
1238  coerceValue(value, myBrushbend);
1239  break;
1240  case 31:
1241  coerceValue(value, myBrushbendfalloff);
1242  break;
1243  case 32:
1244  coerceValue(value, myLiftmode);
1245  break;
1246  case 33:
1247  coerceValue(value, myLiftangle);
1248  break;
1249  case 34:
1250  coerceValue(value, myAdjustlengthmode);
1251  break;
1252  case 35:
1253  coerceValue(value, myAdjustlengthvalue);
1254  break;
1255  case 36:
1256  coerceValue(value, myAdjustlengthlength);
1257  break;
1258  case 37:
1259  coerceValue(value, myAdjustlengthmethod);
1260  break;
1261  case 38:
1262  coerceValue(value, myMoverotatewithskin);
1263  break;
1264  case 39:
1265  coerceValue(value, mySculptdoconstrain);
1266  break;
1267  case 40:
1268  coerceValue(value, mySculptlockroot);
1269  break;
1270  case 41:
1271  coerceValue(value, mySculptmaintainevensegments);
1272  break;
1273  case 42:
1274  coerceValue(value, mySmoothtargetsmoothness);
1275  break;
1276  case 43:
1277  coerceValue(value, mySmoothposition);
1278  break;
1279  case 44:
1280  coerceValue(value, mySmoothorient);
1281  break;
1282  case 45:
1283  coerceValue(value, myBlurinskinspace);
1284  break;
1285  case 46:
1286  coerceValue(value, myBlurperpoint);
1287  break;
1288  case 47:
1289  coerceValue(value, myBlurshape);
1290  break;
1291  case 48:
1292  coerceValue(value, myBlurlength);
1293  break;
1294  case 49:
1295  coerceValue(value, myBlurorient);
1296  break;
1297  case 50:
1298  coerceValue(value, myCutmode);
1299  break;
1300  case 51:
1301  coerceValue(value, myClumpperpoint);
1302  break;
1303  case 52:
1304  coerceValue(value, myPlantmode);
1305  break;
1306  case 53:
1307  coerceValue(value, myPlantinterpolateguides);
1308  break;
1309  case 54:
1310  coerceValue(value, myPlantinterpolaterelskin);
1311  break;
1312  case 55:
1313  coerceValue(value, myPlantinterpolateorient);
1314  break;
1315  case 56:
1316  coerceValue(value, myPlanttemplatesource);
1317  break;
1318  case 57:
1319  coerceValue(value, myPlantlength);
1320  break;
1321  case 58:
1322  coerceValue(value, myPlantsegcount);
1323  break;
1324  case 59:
1325  coerceValue(value, myDrawonskin);
1326  break;
1327  case 60:
1328  coerceValue(value, myDrawinterpolateorient);
1329  break;
1330  case 61:
1331  coerceValue(value, myDrawtemplatesource);
1332  break;
1333  case 62:
1334  coerceValue(value, myDrawlimitlength);
1335  break;
1336  case 63:
1337  coerceValue(value, myDrawcurvetype);
1338  break;
1339  case 64:
1340  coerceValue(value, myDrawsegmode);
1341  break;
1342  case 65:
1343  coerceValue(value, myDrawsegcount);
1344  break;
1345  case 66:
1346  coerceValue(value, myDrawseglength);
1347  break;
1348  case 67:
1349  coerceValue(value, myOrientbrushupmode);
1350  break;
1351  case 68:
1352  coerceValue(value, myOrientbrushperpoint);
1353  break;
1354  case 69:
1355  coerceValue(value, myPainttemplateallowblending);
1356  break;
1357  case 70:
1358  coerceValue(value, myEditactiveprim);
1359  break;
1360  case 71:
1361  coerceValue(value, myEditsoft);
1362  break;
1363  case 72:
1364  coerceValue(value, myEditsoftmode);
1365  break;
1366  case 73:
1367  coerceValue(value, myEditcurvefrac);
1368  break;
1369  case 74:
1370  coerceValue(value, myEditcurvedist);
1371  break;
1372  case 75:
1373  coerceValue(value, myResamplesegmode);
1374  break;
1375  case 76:
1376  coerceValue(value, myResamplesegcount);
1377  break;
1378  case 77:
1379  coerceValue(value, myResampleseglength);
1380  break;
1381  case 78:
1382  coerceValue(value, myTwistangle);
1383  break;
1384  case 79:
1385  coerceValue(value, myCurvemaskramp);
1386  break;
1387  case 80:
1388  coerceValue(value, myGroom);
1389  break;
1390  case 81:
1391  coerceValue(value, myStrands);
1392  break;
1393  case 82:
1394  coerceValue(value, myStrokes);
1395  break;
1396  case 83:
1397  coerceValue(value, myPreviewutil);
1398  break;
1399  case 84:
1400  coerceValue(value, myPaintmaskpoints);
1401  break;
1402  case 85:
1403  coerceValue(value, myGroupnewprims);
1404  break;
1405  case 86:
1406  coerceValue(value, myNamenewprims);
1407  break;
1408  case 87:
1409  coerceValue(value, myActivegroup);
1410  break;
1411  case 88:
1412  coerceValue(value, myNameattrib);
1413  break;
1414  case 89:
1415  coerceValue(value, myActivename);
1416  break;
1417  case 90:
1418  coerceValue(value, myOverridecolor);
1419  break;
1420  case 91:
1421  coerceValue(value, myColorbyname);
1422  break;
1423  case 92:
1424  coerceValue(value, myDefaultcolor);
1425  break;
1426  case 93:
1427  coerceValue(value, myTemplatecolor);
1428  break;
1429  case 94:
1430  coerceValue(value, myColorseed);
1431  break;
1432  case 95:
1433  if (idx.size() == 1)
1434  coerceValue(value, myFolder_grouplist.entries());
1435  else if (instance[0] < myFolder_grouplist.entries())
1436  {
1437  auto && _data = myFolder_grouplist(instance[0]);
1438  switch (idx[1])
1439  {
1440  case 0:
1441  coerceValue(value, _data.groupcolor);
1442  break;
1443  case 1:
1444  coerceValue(value, _data.groupname);
1445  break;
1446  case 2:
1447  coerceValue(value, _data.groupoptions);
1448  break;
1449 
1450  }
1451  }
1452  break;
1453  case 96:
1454  coerceValue(value, myXord);
1455  break;
1456  case 97:
1457  coerceValue(value, myRord);
1458  break;
1459  case 98:
1460  coerceValue(value, myT);
1461  break;
1462  case 99:
1463  coerceValue(value, myR);
1464  break;
1465  case 100:
1466  coerceValue(value, myS);
1467  break;
1468  case 101:
1469  coerceValue(value, myShear);
1470  break;
1471  case 102:
1472  coerceValue(value, myScale);
1473  break;
1474  case 103:
1475  coerceValue(value, myP);
1476  break;
1477  case 104:
1478  coerceValue(value, myPr);
1479  break;
1480  case 105:
1481  coerceValue(value, myCamxform0);
1482  break;
1483  case 106:
1484  coerceValue(value, myCamxform1);
1485  break;
1486  case 107:
1487  coerceValue(value, myCamxform2);
1488  break;
1489  case 108:
1490  coerceValue(value, myCamxform3);
1491  break;
1492  case 109:
1493  coerceValue(value, myCampos);
1494  break;
1495  case 110:
1496  coerceValue(value, myCursorpos);
1497  break;
1498  case 111:
1499  coerceValue(value, myCursordisplace);
1500  break;
1501  case 112:
1502  coerceValue(value, myRaypos);
1503  break;
1504  case 113:
1505  coerceValue(value, myRaydir);
1506  break;
1507  case 114:
1508  coerceValue(value, myStrengthscale);
1509  break;
1510  case 115:
1511  coerceValue(value, myButton);
1512  break;
1513  case 116:
1514  coerceValue(value, myShiftkey);
1515  break;
1516  case 117:
1517  coerceValue(value, myCtrlkey);
1518  break;
1519 
1520  }
1521  }
1522 
1523  bool isParmColorRamp(exint idx) const override
1524  {
1525  switch (idx)
1526  {
1527 
1528  }
1529  return false;
1530  }
1531 
1532  void getNestParmValue(TempIndex idx, TempIndex instance, exint &value) const override
1533  { doGetParmValue(idx, instance, value); }
1534  void getNestParmValue(TempIndex idx, TempIndex instance, fpreal &value) const override
1535  { doGetParmValue(idx, instance, value); }
1536  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector2D &value) const override
1537  { doGetParmValue(idx, instance, value); }
1538  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector3D &value) const override
1539  { doGetParmValue(idx, instance, value); }
1540  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector4D &value) const override
1541  { doGetParmValue(idx, instance, value); }
1542  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix2D &value) const override
1543  { doGetParmValue(idx, instance, value); }
1544  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
1545  { doGetParmValue(idx, instance, value); }
1546  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix4D &value) const override
1547  { doGetParmValue(idx, instance, value); }
1548  void getNestParmValue(TempIndex idx, TempIndex instance, UT_StringHolder &value) const override
1549  { doGetParmValue(idx, instance, value); }
1550  void getNestParmValue(TempIndex idx, TempIndex instance, UT_SharedPtr<UT_Ramp> &value) const override
1551  { doGetParmValue(idx, instance, value); }
1552  void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
1553  { doGetParmValue(idx, instance, value); }
1554 
1555  template <typename T>
1556  void
1557  doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
1558  {
1559  if (idx.size() < 1)
1560  return;
1561  UT_ASSERT(idx.size() == instance.size()+1);
1562  if (idx.size() != instance.size()+1)
1563  return;
1564  switch (idx[0])
1565  {
1566  case 0:
1567  coerceValue(myStashnode, ( ( value ) ));
1568  break;
1569  case 1:
1570  coerceValue(myGroup, ( ( value ) ));
1571  break;
1572  case 2:
1573  coerceValue(myGrouptype, clampMinValue(0, clampMaxValue(4, value ) ));
1574  break;
1575  case 3:
1576  coerceValue(myUsemask, ( ( value ) ));
1577  break;
1578  case 4:
1579  coerceValue(myMirrorbrush, ( ( value ) ));
1580  break;
1581  case 5:
1582  coerceValue(myMirror, ( ( value ) ));
1583  break;
1584  case 6:
1585  coerceValue(myMirrorgroup, ( ( value ) ));
1586  break;
1587  case 7:
1588  coerceValue(myMirrororigin, ( ( value ) ));
1589  break;
1590  case 8:
1591  coerceValue(myMirrordir, ( ( value ) ));
1592  break;
1593  case 9:
1594  coerceValue(myTool, clampMinValue(0, clampMaxValue(24, value ) ));
1595  break;
1596  case 10:
1597  coerceValue(myRaybias, ( ( value ) ));
1598  break;
1599  case 11:
1600  coerceValue(myStrandmode, ( ( value ) ));
1601  break;
1602  case 12:
1603  coerceValue(myCollidewithskin, ( ( value ) ));
1604  break;
1605  case 13:
1606  coerceValue(myCreateorient, ( ( value ) ));
1607  break;
1608  case 14:
1609  coerceValue(myOrientname, ( ( value ) ));
1610  break;
1611  case 15:
1612  coerceValue(myOrientup, ( ( value ) ));
1613  break;
1614  case 16:
1615  coerceValue(myOrientupattrib, ( ( value ) ));
1616  break;
1617  case 17:
1618  coerceValue(myOrientupattribflip, ( ( value ) ));
1619  break;
1620  case 18:
1621  coerceValue(myTemplatesourcegroup, ( ( value ) ));
1622  break;
1623  case 19:
1624  coerceValue(myWidthoverride, ( ( value ) ));
1625  break;
1626  case 20:
1627  coerceValue(myWidth, ( ( value ) ));
1628  break;
1629  case 21:
1630  coerceValue(myBrushsurface, ( ( value ) ));
1631  break;
1632  case 22:
1633  coerceValue(myUsepartinglines, ( ( value ) ));
1634  break;
1635  case 23:
1636  coerceValue(myScreenradius, ( ( value ) ));
1637  break;
1638  case 24:
1639  coerceValue(myObjectradius, ( ( value ) ));
1640  break;
1641  case 25:
1642  coerceValue(mySoft, ( ( value ) ));
1643  break;
1644  case 26:
1645  coerceValue(mySpacing, ( ( value ) ));
1646  break;
1647  case 27:
1648  coerceValue(myDensity, ( ( value ) ));
1649  break;
1650  case 28:
1651  coerceValue(myBrushmaintainlength, ( ( value ) ));
1652  break;
1653  case 29:
1654  coerceValue(myBrushsnaptosurface, ( ( value ) ));
1655  break;
1656  case 30:
1657  coerceValue(myBrushbend, ( ( value ) ));
1658  break;
1659  case 31:
1660  coerceValue(myBrushbendfalloff, ( ( value ) ));
1661  break;
1662  case 32:
1663  coerceValue(myLiftmode, clampMinValue(0, clampMaxValue(1, value ) ));
1664  break;
1665  case 33:
1666  coerceValue(myLiftangle, ( ( value ) ));
1667  break;
1668  case 34:
1669  coerceValue(myAdjustlengthmode, clampMinValue(0, clampMaxValue(1, value ) ));
1670  break;
1671  case 35:
1672  coerceValue(myAdjustlengthvalue, ( ( value ) ));
1673  break;
1674  case 36:
1675  coerceValue(myAdjustlengthlength, ( ( value ) ));
1676  break;
1677  case 37:
1678  coerceValue(myAdjustlengthmethod, clampMinValue(0, clampMaxValue(1, value ) ));
1679  break;
1680  case 38:
1681  coerceValue(myMoverotatewithskin, ( ( value ) ));
1682  break;
1683  case 39:
1684  coerceValue(mySculptdoconstrain, ( ( value ) ));
1685  break;
1686  case 40:
1687  coerceValue(mySculptlockroot, ( ( value ) ));
1688  break;
1689  case 41:
1690  coerceValue(mySculptmaintainevensegments, ( ( value ) ));
1691  break;
1692  case 42:
1693  coerceValue(mySmoothtargetsmoothness, ( ( value ) ));
1694  break;
1695  case 43:
1696  coerceValue(mySmoothposition, ( ( value ) ));
1697  break;
1698  case 44:
1699  coerceValue(mySmoothorient, ( ( value ) ));
1700  break;
1701  case 45:
1702  coerceValue(myBlurinskinspace, ( ( value ) ));
1703  break;
1704  case 46:
1705  coerceValue(myBlurperpoint, ( ( value ) ));
1706  break;
1707  case 47:
1708  coerceValue(myBlurshape, ( ( value ) ));
1709  break;
1710  case 48:
1711  coerceValue(myBlurlength, ( ( value ) ));
1712  break;
1713  case 49:
1714  coerceValue(myBlurorient, ( ( value ) ));
1715  break;
1716  case 50:
1717  coerceValue(myCutmode, clampMinValue(0, clampMaxValue(1, value ) ));
1718  break;
1719  case 51:
1720  coerceValue(myClumpperpoint, ( ( value ) ));
1721  break;
1722  case 52:
1723  coerceValue(myPlantmode, clampMinValue(0, clampMaxValue(1, value ) ));
1724  break;
1725  case 53:
1726  coerceValue(myPlantinterpolateguides, ( ( value ) ));
1727  break;
1728  case 54:
1729  coerceValue(myPlantinterpolaterelskin, ( ( value ) ));
1730  break;
1731  case 55:
1732  coerceValue(myPlantinterpolateorient, ( ( value ) ));
1733  break;
1734  case 56:
1735  coerceValue(myPlanttemplatesource, clampMinValue(0, clampMaxValue(2, value ) ));
1736  break;
1737  case 57:
1738  coerceValue(myPlantlength, ( ( value ) ));
1739  break;
1740  case 58:
1741  coerceValue(myPlantsegcount, ( ( value ) ));
1742  break;
1743  case 59:
1744  coerceValue(myDrawonskin, ( ( value ) ));
1745  break;
1746  case 60:
1747  coerceValue(myDrawinterpolateorient, ( ( value ) ));
1748  break;
1749  case 61:
1750  coerceValue(myDrawtemplatesource, clampMinValue(0, clampMaxValue(2, value ) ));
1751  break;
1752  case 62:
1753  coerceValue(myDrawlimitlength, ( ( value ) ));
1754  break;
1755  case 63:
1756  coerceValue(myDrawcurvetype, clampMinValue(0, clampMaxValue(1, value ) ));
1757  break;
1758  case 64:
1759  coerceValue(myDrawsegmode, clampMinValue(0, clampMaxValue(1, value ) ));
1760  break;
1761  case 65:
1762  coerceValue(myDrawsegcount, ( ( value ) ));
1763  break;
1764  case 66:
1765  coerceValue(myDrawseglength, ( ( value ) ));
1766  break;
1767  case 67:
1768  coerceValue(myOrientbrushupmode, clampMinValue(0, clampMaxValue(3, value ) ));
1769  break;
1770  case 68:
1771  coerceValue(myOrientbrushperpoint, ( ( value ) ));
1772  break;
1773  case 69:
1774  coerceValue(myPainttemplateallowblending, ( ( value ) ));
1775  break;
1776  case 70:
1777  coerceValue(myEditactiveprim, ( ( value ) ));
1778  break;
1779  case 71:
1780  coerceValue(myEditsoft, ( ( value ) ));
1781  break;
1782  case 72:
1783  coerceValue(myEditsoftmode, clampMinValue(0, clampMaxValue(2, value ) ));
1784  break;
1785  case 73:
1786  coerceValue(myEditcurvefrac, ( ( value ) ));
1787  break;
1788  case 74:
1789  coerceValue(myEditcurvedist, ( ( value ) ));
1790  break;
1791  case 75:
1792  coerceValue(myResamplesegmode, clampMinValue(0, clampMaxValue(3, value ) ));
1793  break;
1794  case 76:
1795  coerceValue(myResamplesegcount, ( ( value ) ));
1796  break;
1797  case 77:
1798  coerceValue(myResampleseglength, ( ( value ) ));
1799  break;
1800  case 78:
1801  coerceValue(myTwistangle, ( ( value ) ));
1802  break;
1803  case 79:
1804  coerceValue(myCurvemaskramp, clampMinValue(0, ( value ) ));
1805  break;
1806  case 80:
1807  coerceValue(myGroom, ( ( value ) ));
1808  break;
1809  case 81:
1810  coerceValue(myStrands, ( ( value ) ));
1811  break;
1812  case 82:
1813  coerceValue(myStrokes, ( ( value ) ));
1814  break;
1815  case 83:
1816  coerceValue(myPreviewutil, ( ( value ) ));
1817  break;
1818  case 84:
1819  coerceValue(myPaintmaskpoints, ( ( value ) ));
1820  break;
1821  case 85:
1822  coerceValue(myGroupnewprims, ( ( value ) ));
1823  break;
1824  case 86:
1825  coerceValue(myNamenewprims, ( ( value ) ));
1826  break;
1827  case 87:
1828  coerceValue(myActivegroup, ( ( value ) ));
1829  break;
1830  case 88:
1831  coerceValue(myNameattrib, ( ( value ) ));
1832  break;
1833  case 89:
1834  coerceValue(myActivename, ( ( value ) ));
1835  break;
1836  case 90:
1837  coerceValue(myOverridecolor, ( ( value ) ));
1838  break;
1839  case 91:
1840  coerceValue(myColorbyname, ( ( value ) ));
1841  break;
1842  case 92:
1843  coerceValue(myDefaultcolor, ( ( value ) ));
1844  break;
1845  case 93:
1846  coerceValue(myTemplatecolor, ( ( value ) ));
1847  break;
1848  case 94:
1849  coerceValue(myColorseed, ( ( value ) ));
1850  break;
1851  case 95:
1852  if (idx.size() == 1)
1853  {
1854  exint newsize;
1855  coerceValue(newsize, value);
1856  if (newsize < 0) newsize = 0;
1857  myFolder_grouplist.setSize(newsize);
1858  }
1859  else
1860  {
1861  if (instance[0] < 0)
1862  return;
1863  myFolder_grouplist.setSizeIfNeeded(instance[0]+1);
1864  auto && _data = myFolder_grouplist(instance[0]);
1865  switch (idx[1])
1866  {
1867  case 0:
1868  coerceValue(_data.groupcolor, value);
1869  break;
1870  case 1:
1871  coerceValue(_data.groupname, value);
1872  break;
1873  case 2:
1874  coerceValue(_data.groupoptions, value);
1875  break;
1876 
1877  }
1878  }
1879  break;
1880  case 96:
1881  coerceValue(myXord, clampMinValue(0, clampMaxValue(5, value ) ));
1882  break;
1883  case 97:
1884  coerceValue(myRord, clampMinValue(0, clampMaxValue(5, value ) ));
1885  break;
1886  case 98:
1887  coerceValue(myT, ( ( value ) ));
1888  break;
1889  case 99:
1890  coerceValue(myR, ( ( value ) ));
1891  break;
1892  case 100:
1893  coerceValue(myS, ( ( value ) ));
1894  break;
1895  case 101:
1896  coerceValue(myShear, ( ( value ) ));
1897  break;
1898  case 102:
1899  coerceValue(myScale, ( ( value ) ));
1900  break;
1901  case 103:
1902  coerceValue(myP, ( ( value ) ));
1903  break;
1904  case 104:
1905  coerceValue(myPr, ( ( value ) ));
1906  break;
1907  case 105:
1908  coerceValue(myCamxform0, ( ( value ) ));
1909  break;
1910  case 106:
1911  coerceValue(myCamxform1, ( ( value ) ));
1912  break;
1913  case 107:
1914  coerceValue(myCamxform2, ( ( value ) ));
1915  break;
1916  case 108:
1917  coerceValue(myCamxform3, ( ( value ) ));
1918  break;
1919  case 109:
1920  coerceValue(myCampos, ( ( value ) ));
1921  break;
1922  case 110:
1923  coerceValue(myCursorpos, ( ( value ) ));
1924  break;
1925  case 111:
1926  coerceValue(myCursordisplace, ( ( value ) ));
1927  break;
1928  case 112:
1929  coerceValue(myRaypos, ( ( value ) ));
1930  break;
1931  case 113:
1932  coerceValue(myRaydir, ( ( value ) ));
1933  break;
1934  case 114:
1935  coerceValue(myStrengthscale, ( ( value ) ));
1936  break;
1937  case 115:
1938  coerceValue(myButton, clampMinValue(0, clampMaxValue(2, value ) ));
1939  break;
1940  case 116:
1941  coerceValue(myShiftkey, ( ( value ) ));
1942  break;
1943  case 117:
1944  coerceValue(myCtrlkey, ( ( value ) ));
1945  break;
1946 
1947  }
1948  }
1949 
1950  void setNestParmValue(TempIndex idx, TempIndex instance, const exint &value) override
1951  { doSetParmValue(idx, instance, value); }
1952  void setNestParmValue(TempIndex idx, TempIndex instance, const fpreal &value) override
1953  { doSetParmValue(idx, instance, value); }
1954  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector2D &value) override
1955  { doSetParmValue(idx, instance, value); }
1956  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector3D &value) override
1957  { doSetParmValue(idx, instance, value); }
1958  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector4D &value) override
1959  { doSetParmValue(idx, instance, value); }
1960  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix2D &value) override
1961  { doSetParmValue(idx, instance, value); }
1962  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix3D &value) override
1963  { doSetParmValue(idx, instance, value); }
1964  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix4D &value) override
1965  { doSetParmValue(idx, instance, value); }
1966  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_StringHolder &value) override
1967  { doSetParmValue(idx, instance, value); }
1968  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_SharedPtr<UT_Ramp> &value) override
1969  { doSetParmValue(idx, instance, value); }
1970  void setNestParmValue(TempIndex idx, TempIndex instance, const PRM_DataItemHandle &value) override
1971  { doSetParmValue(idx, instance, value); }
1972 
1973  exint getNestNumParms(TempIndex idx) const override
1974  {
1975  if (idx.size() == 0)
1976  return 118;
1977  switch (idx[0])
1978  {
1979  case 95:
1980  return 3;
1981 
1982  }
1983  // Invalid
1984  return 0;
1985  }
1986 
1987  const char *getNestParmName(TempIndex fieldnum) const override
1988  {
1989  if (fieldnum.size() < 1)
1990  return 0;
1991  switch (fieldnum[0])
1992  {
1993  case 0:
1994  return "stashnode";
1995  case 1:
1996  return "group";
1997  case 2:
1998  return "grouptype";
1999  case 3:
2000  return "usemask";
2001  case 4:
2002  return "mirrorbrush";
2003  case 5:
2004  return "mirror";
2005  case 6:
2006  return "mirrorgroup";
2007  case 7:
2008  return "mirrororigin";
2009  case 8:
2010  return "mirrordir";
2011  case 9:
2012  return "tool";
2013  case 10:
2014  return "raybias";
2015  case 11:
2016  return "strandmode";
2017  case 12:
2018  return "collidewithskin";
2019  case 13:
2020  return "createorient";
2021  case 14:
2022  return "orientname";
2023  case 15:
2024  return "orientup";
2025  case 16:
2026  return "orientupattrib";
2027  case 17:
2028  return "orientupattribflip";
2029  case 18:
2030  return "templatesourcegroup";
2031  case 19:
2032  return "widthoverride";
2033  case 20:
2034  return "width";
2035  case 21:
2036  return "brushsurface";
2037  case 22:
2038  return "usepartinglines";
2039  case 23:
2040  return "screenradius";
2041  case 24:
2042  return "objectradius";
2043  case 25:
2044  return "soft";
2045  case 26:
2046  return "spacing";
2047  case 27:
2048  return "density";
2049  case 28:
2050  return "brushmaintainlength";
2051  case 29:
2052  return "brushsnaptosurface";
2053  case 30:
2054  return "brushbend";
2055  case 31:
2056  return "brushbendfalloff";
2057  case 32:
2058  return "liftmode";
2059  case 33:
2060  return "liftangle";
2061  case 34:
2062  return "adjustlengthmode";
2063  case 35:
2064  return "adjustlengthvalue";
2065  case 36:
2066  return "adjustlengthlength";
2067  case 37:
2068  return "adjustlengthmethod";
2069  case 38:
2070  return "moverotatewithskin";
2071  case 39:
2072  return "sculptdoconstrain";
2073  case 40:
2074  return "sculptlockroot";
2075  case 41:
2076  return "sculptmaintainevensegments";
2077  case 42:
2078  return "smoothtargetsmoothness";
2079  case 43:
2080  return "smoothposition";
2081  case 44:
2082  return "smoothorient";
2083  case 45:
2084  return "blurinskinspace";
2085  case 46:
2086  return "blurperpoint";
2087  case 47:
2088  return "blurshape";
2089  case 48:
2090  return "blurlength";
2091  case 49:
2092  return "blurorient";
2093  case 50:
2094  return "cutmode";
2095  case 51:
2096  return "clumpperpoint";
2097  case 52:
2098  return "plantmode";
2099  case 53:
2100  return "plantinterpolateguides";
2101  case 54:
2102  return "plantinterpolaterelskin";
2103  case 55:
2104  return "plantinterpolateorient";
2105  case 56:
2106  return "planttemplatesource";
2107  case 57:
2108  return "plantlength";
2109  case 58:
2110  return "plantsegcount";
2111  case 59:
2112  return "drawonskin";
2113  case 60:
2114  return "drawinterpolateorient";
2115  case 61:
2116  return "drawtemplatesource";
2117  case 62:
2118  return "drawlimitlength";
2119  case 63:
2120  return "drawcurvetype";
2121  case 64:
2122  return "drawsegmode";
2123  case 65:
2124  return "drawsegcount";
2125  case 66:
2126  return "drawseglength";
2127  case 67:
2128  return "orientbrushupmode";
2129  case 68:
2130  return "orientbrushperpoint";
2131  case 69:
2132  return "painttemplateallowblending";
2133  case 70:
2134  return "editactiveprim";
2135  case 71:
2136  return "editsoft";
2137  case 72:
2138  return "editsoftmode";
2139  case 73:
2140  return "editcurvefrac";
2141  case 74:
2142  return "editcurvedist";
2143  case 75:
2144  return "resamplesegmode";
2145  case 76:
2146  return "resamplesegcount";
2147  case 77:
2148  return "resampleseglength";
2149  case 78:
2150  return "twistangle";
2151  case 79:
2152  return "curvemaskramp";
2153  case 80:
2154  return "groom";
2155  case 81:
2156  return "strands";
2157  case 82:
2158  return "strokes";
2159  case 83:
2160  return "previewutil";
2161  case 84:
2162  return "paintmaskpoints";
2163  case 85:
2164  return "groupnewprims";
2165  case 86:
2166  return "namenewprims";
2167  case 87:
2168  return "activegroup";
2169  case 88:
2170  return "nameattrib";
2171  case 89:
2172  return "activename";
2173  case 90:
2174  return "overridecolor";
2175  case 91:
2176  return "colorbyname";
2177  case 92:
2178  return "defaultcolor";
2179  case 93:
2180  return "templatecolor";
2181  case 94:
2182  return "colorseed";
2183  case 95:
2184  if (fieldnum.size() == 1)
2185  return "folder_grouplist";
2186  switch (fieldnum[1])
2187  {
2188  case 0:
2189  return "groupcolor#";
2190  case 1:
2191  return "groupname#";
2192  case 2:
2193  return "groupoptions#";
2194 
2195  }
2196  return 0;
2197  case 96:
2198  return "xOrd";
2199  case 97:
2200  return "rOrd";
2201  case 98:
2202  return "t";
2203  case 99:
2204  return "r";
2205  case 100:
2206  return "s";
2207  case 101:
2208  return "shear";
2209  case 102:
2210  return "scale";
2211  case 103:
2212  return "p";
2213  case 104:
2214  return "pr";
2215  case 105:
2216  return "camxform0";
2217  case 106:
2218  return "camxform1";
2219  case 107:
2220  return "camxform2";
2221  case 108:
2222  return "camxform3";
2223  case 109:
2224  return "campos";
2225  case 110:
2226  return "cursorpos";
2227  case 111:
2228  return "cursordisplace";
2229  case 112:
2230  return "raypos";
2231  case 113:
2232  return "raydir";
2233  case 114:
2234  return "strengthscale";
2235  case 115:
2236  return "button";
2237  case 116:
2238  return "shiftkey";
2239  case 117:
2240  return "ctrlkey";
2241 
2242  }
2243  return 0;
2244  }
2245 
2246  ParmType getNestParmType(TempIndex fieldnum) const override
2247  {
2248  if (fieldnum.size() < 1)
2249  return PARM_UNSUPPORTED;
2250  switch (fieldnum[0])
2251  {
2252  case 0:
2253  return PARM_STRING;
2254  case 1:
2255  return PARM_STRING;
2256  case 2:
2257  return PARM_INTEGER;
2258  case 3:
2259  return PARM_INTEGER;
2260  case 4:
2261  return PARM_INTEGER;
2262  case 5:
2263  return PARM_INTEGER;
2264  case 6:
2265  return PARM_STRING;
2266  case 7:
2267  return PARM_VECTOR3;
2268  case 8:
2269  return PARM_VECTOR3;
2270  case 9:
2271  return PARM_INTEGER;
2272  case 10:
2273  return PARM_FLOAT;
2274  case 11:
2275  return PARM_INTEGER;
2276  case 12:
2277  return PARM_INTEGER;
2278  case 13:
2279  return PARM_INTEGER;
2280  case 14:
2281  return PARM_STRING;
2282  case 15:
2283  return PARM_VECTOR3;
2284  case 16:
2285  return PARM_STRING;
2286  case 17:
2287  return PARM_INTEGER;
2288  case 18:
2289  return PARM_STRING;
2290  case 19:
2291  return PARM_INTEGER;
2292  case 20:
2293  return PARM_FLOAT;
2294  case 21:
2295  return PARM_INTEGER;
2296  case 22:
2297  return PARM_INTEGER;
2298  case 23:
2299  return PARM_FLOAT;
2300  case 24:
2301  return PARM_FLOAT;
2302  case 25:
2303  return PARM_FLOAT;
2304  case 26:
2305  return PARM_FLOAT;
2306  case 27:
2307  return PARM_FLOAT;
2308  case 28:
2309  return PARM_FLOAT;
2310  case 29:
2311  return PARM_INTEGER;
2312  case 30:
2313  return PARM_FLOAT;
2314  case 31:
2315  return PARM_FLOAT;
2316  case 32:
2317  return PARM_INTEGER;
2318  case 33:
2319  return PARM_FLOAT;
2320  case 34:
2321  return PARM_INTEGER;
2322  case 35:
2323  return PARM_FLOAT;
2324  case 36:
2325  return PARM_FLOAT;
2326  case 37:
2327  return PARM_INTEGER;
2328  case 38:
2329  return PARM_INTEGER;
2330  case 39:
2331  return PARM_INTEGER;
2332  case 40:
2333  return PARM_INTEGER;
2334  case 41:
2335  return PARM_INTEGER;
2336  case 42:
2337  return PARM_FLOAT;
2338  case 43:
2339  return PARM_INTEGER;
2340  case 44:
2341  return PARM_INTEGER;
2342  case 45:
2343  return PARM_INTEGER;
2344  case 46:
2345  return PARM_INTEGER;
2346  case 47:
2347  return PARM_INTEGER;
2348  case 48:
2349  return PARM_INTEGER;
2350  case 49:
2351  return PARM_INTEGER;
2352  case 50:
2353  return PARM_INTEGER;
2354  case 51:
2355  return PARM_INTEGER;
2356  case 52:
2357  return PARM_INTEGER;
2358  case 53:
2359  return PARM_INTEGER;
2360  case 54:
2361  return PARM_INTEGER;
2362  case 55:
2363  return PARM_INTEGER;
2364  case 56:
2365  return PARM_INTEGER;
2366  case 57:
2367  return PARM_FLOAT;
2368  case 58:
2369  return PARM_INTEGER;
2370  case 59:
2371  return PARM_INTEGER;
2372  case 60:
2373  return PARM_INTEGER;
2374  case 61:
2375  return PARM_INTEGER;
2376  case 62:
2377  return PARM_INTEGER;
2378  case 63:
2379  return PARM_INTEGER;
2380  case 64:
2381  return PARM_INTEGER;
2382  case 65:
2383  return PARM_INTEGER;
2384  case 66:
2385  return PARM_FLOAT;
2386  case 67:
2387  return PARM_INTEGER;
2388  case 68:
2389  return PARM_INTEGER;
2390  case 69:
2391  return PARM_INTEGER;
2392  case 70:
2393  return PARM_INTEGER;
2394  case 71:
2395  return PARM_INTEGER;
2396  case 72:
2397  return PARM_INTEGER;
2398  case 73:
2399  return PARM_FLOAT;
2400  case 74:
2401  return PARM_FLOAT;
2402  case 75:
2403  return PARM_INTEGER;
2404  case 76:
2405  return PARM_INTEGER;
2406  case 77:
2407  return PARM_FLOAT;
2408  case 78:
2409  return PARM_FLOAT;
2410  case 79:
2411  return PARM_RAMP;
2412  case 80:
2413  return PARM_DATA;
2414  case 81:
2415  return PARM_DATA;
2416  case 82:
2417  return PARM_DATA;
2418  case 83:
2419  return PARM_INTEGER;
2420  case 84:
2421  return PARM_INTEGER;
2422  case 85:
2423  return PARM_INTEGER;
2424  case 86:
2425  return PARM_INTEGER;
2426  case 87:
2427  return PARM_STRING;
2428  case 88:
2429  return PARM_STRING;
2430  case 89:
2431  return PARM_STRING;
2432  case 90:
2433  return PARM_INTEGER;
2434  case 91:
2435  return PARM_INTEGER;
2436  case 92:
2437  return PARM_VECTOR3;
2438  case 93:
2439  return PARM_VECTOR3;
2440  case 94:
2441  return PARM_INTEGER;
2442  case 95:
2443  if (fieldnum.size() == 1)
2444  return PARM_MULTIPARM;
2445  switch (fieldnum[1])
2446  {
2447  case 0:
2448  return PARM_VECTOR3;
2449  case 1:
2450  return PARM_STRING;
2451  case 2:
2452  return PARM_INTEGER;
2453 
2454  }
2455  return PARM_UNSUPPORTED;
2456  case 96:
2457  return PARM_INTEGER;
2458  case 97:
2459  return PARM_INTEGER;
2460  case 98:
2461  return PARM_VECTOR3;
2462  case 99:
2463  return PARM_VECTOR3;
2464  case 100:
2465  return PARM_VECTOR3;
2466  case 101:
2467  return PARM_VECTOR3;
2468  case 102:
2469  return PARM_FLOAT;
2470  case 103:
2471  return PARM_VECTOR3;
2472  case 104:
2473  return PARM_VECTOR3;
2474  case 105:
2475  return PARM_VECTOR4;
2476  case 106:
2477  return PARM_VECTOR4;
2478  case 107:
2479  return PARM_VECTOR4;
2480  case 108:
2481  return PARM_VECTOR4;
2482  case 109:
2483  return PARM_VECTOR3;
2484  case 110:
2485  return PARM_VECTOR2;
2486  case 111:
2487  return PARM_VECTOR3;
2488  case 112:
2489  return PARM_VECTOR3;
2490  case 113:
2491  return PARM_VECTOR3;
2492  case 114:
2493  return PARM_FLOAT;
2494  case 115:
2495  return PARM_INTEGER;
2496  case 116:
2497  return PARM_INTEGER;
2498  case 117:
2499  return PARM_INTEGER;
2500 
2501  }
2502  return PARM_UNSUPPORTED;
2503  }
2504 
2505  // Boiler plate to load individual types.
2506  static void loadData(UT_IStream &is, int64 &v)
2507  { is.bread(&v, 1); }
2508  static void loadData(UT_IStream &is, bool &v)
2509  { int64 iv; is.bread(&iv, 1); v = iv; }
2510  static void loadData(UT_IStream &is, fpreal64 &v)
2511  { is.bread<fpreal64>(&v, 1); }
2512  static void loadData(UT_IStream &is, UT_Vector2D &v)
2513  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1); }
2514  static void loadData(UT_IStream &is, UT_Vector3D &v)
2515  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
2516  is.bread<fpreal64>(&v.z(), 1); }
2517  static void loadData(UT_IStream &is, UT_Vector4D &v)
2518  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
2519  is.bread<fpreal64>(&v.z(), 1); is.bread<fpreal64>(&v.w(), 1); }
2520  static void loadData(UT_IStream &is, UT_Matrix2D &v)
2521  { for (int r = 0; r < 2; r++) for (int c = 0; c < 2; c++) is.bread<fpreal64>(&v(r, c), 1); }
2522  static void loadData(UT_IStream &is, UT_Matrix3D &v)
2523  { for (int r = 0; r < 3; r++) for (int c = 0; c < 3; c++) is.bread<fpreal64>(&v(r, c), 1); }
2524  static void loadData(UT_IStream &is, UT_Matrix4D &v)
2525  { for (int r = 0; r < 4; r++) for (int c = 0; c < 4; c++) is.bread<fpreal64>(&v(r, c), 1); }
2526  static void loadData(UT_IStream &is, UT_Vector2I &v)
2527  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1); }
2528  static void loadData(UT_IStream &is, UT_Vector3I &v)
2529  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
2530  is.bread<int64>(&v.z(), 1); }
2531  static void loadData(UT_IStream &is, UT_Vector4I &v)
2532  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
2533  is.bread<int64>(&v.z(), 1); is.bread<int64>(&v.w(), 1); }
2535  { is.bread(v); }
2537  { UT_StringHolder rampdata;
2538  loadData(is, rampdata);
2539  if (rampdata.isstring())
2540  {
2541  v.reset(new UT_Ramp());
2542  UT_IStream istr((const char *) rampdata, rampdata.length(), UT_ISTREAM_ASCII);
2543  v->load(istr);
2544  }
2545  else v.reset();
2546  }
2549  loadData(is, data);
2550  if (data.isstring())
2551  {
2552  // Find the data type.
2553  const char *colon = UT_StringWrap(data).findChar(':');
2554  if (colon)
2555  {
2556  int typelen = colon - data.buffer();
2558  type.strncpy(data.buffer(), typelen);
2559  UT_IStream istr(((const char *) data) + typelen + 1, data.length() - (typelen + 1), UT_ISTREAM_BINARY);
2560 
2561  v = PRM_DataFactory::parseBinary(type.buffer(), istr);
2562  }
2563  }
2564  else v.reset();
2565  }
2566 
2567  static void saveData(std::ostream &os, int64 v)
2568  { UTwrite(os, &v); }
2569  static void saveData(std::ostream &os, bool v)
2570  { int64 iv = v; UTwrite(os, &iv); }
2571  static void saveData(std::ostream &os, fpreal64 v)
2572  { UTwrite<fpreal64>(os, &v); }
2573  static void saveData(std::ostream &os, UT_Vector2D v)
2574  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y()); }
2575  static void saveData(std::ostream &os, UT_Vector3D v)
2576  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
2577  UTwrite<fpreal64>(os, &v.z()); }
2578  static void saveData(std::ostream &os, UT_Vector4D v)
2579  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
2580  UTwrite<fpreal64>(os, &v.z()); UTwrite<fpreal64>(os, &v.w()); }
2581  static void saveData(std::ostream &os, UT_Matrix2D v)
2583  static void saveData(std::ostream &os, UT_Matrix3D v)
2585  static void saveData(std::ostream &os, UT_Matrix4D v)
2587  static void saveData(std::ostream &os, UT_StringHolder s)
2588  { UT_StringWrap(s).saveBinary(os); }
2589  static void saveData(std::ostream &os, UT_SharedPtr<UT_Ramp> s)
2591  UT_OStringStream ostr;
2592  if (s) s->save(ostr);
2593  result = ostr.str();
2594  saveData(os, result);
2595  }
2596  static void saveData(std::ostream &os, PRM_DataItemHandle s)
2598  UT_OStringStream ostr;
2599  if (s)
2600  {
2601  ostr << s->getDataTypeToken();
2602  ostr << ":";
2603  s->saveBinary(ostr);
2604  }
2605  result = ostr.str();
2606  saveData(os, result);
2607  }
2608 
2609 
2610  void save(std::ostream &os) const
2611  {
2612  int32 v = version();
2613  UTwrite(os, &v);
2614  saveData(os, myStashnode);
2615  saveData(os, myGroup);
2616  saveData(os, myGrouptype);
2617  saveData(os, myUsemask);
2618  saveData(os, myMirrorbrush);
2619  saveData(os, myMirror);
2620  saveData(os, myMirrorgroup);
2621  saveData(os, myMirrororigin);
2622  saveData(os, myMirrordir);
2623  saveData(os, myTool);
2624  saveData(os, myRaybias);
2625  saveData(os, myStrandmode);
2626  saveData(os, myCollidewithskin);
2627  saveData(os, myCreateorient);
2628  saveData(os, myOrientname);
2629  saveData(os, myOrientup);
2630  saveData(os, myOrientupattrib);
2631  saveData(os, myOrientupattribflip);
2632  saveData(os, myTemplatesourcegroup);
2633  saveData(os, myWidthoverride);
2634  saveData(os, myWidth);
2635  saveData(os, myBrushsurface);
2636  saveData(os, myUsepartinglines);
2637  saveData(os, myScreenradius);
2638  saveData(os, myObjectradius);
2639  saveData(os, mySoft);
2640  saveData(os, mySpacing);
2641  saveData(os, myDensity);
2642  saveData(os, myBrushmaintainlength);
2643  saveData(os, myBrushsnaptosurface);
2644  saveData(os, myBrushbend);
2645  saveData(os, myBrushbendfalloff);
2646  saveData(os, myLiftmode);
2647  saveData(os, myLiftangle);
2648  saveData(os, myAdjustlengthmode);
2649  saveData(os, myAdjustlengthvalue);
2650  saveData(os, myAdjustlengthlength);
2651  saveData(os, myAdjustlengthmethod);
2652  saveData(os, myMoverotatewithskin);
2653  saveData(os, mySculptdoconstrain);
2654  saveData(os, mySculptlockroot);
2655  saveData(os, mySculptmaintainevensegments);
2656  saveData(os, mySmoothtargetsmoothness);
2657  saveData(os, mySmoothposition);
2658  saveData(os, mySmoothorient);
2659  saveData(os, myBlurinskinspace);
2660  saveData(os, myBlurperpoint);
2661  saveData(os, myBlurshape);
2662  saveData(os, myBlurlength);
2663  saveData(os, myBlurorient);
2664  saveData(os, myCutmode);
2665  saveData(os, myClumpperpoint);
2666  saveData(os, myPlantmode);
2667  saveData(os, myPlantinterpolateguides);
2668  saveData(os, myPlantinterpolaterelskin);
2669  saveData(os, myPlantinterpolateorient);
2670  saveData(os, myPlanttemplatesource);
2671  saveData(os, myPlantlength);
2672  saveData(os, myPlantsegcount);
2673  saveData(os, myDrawonskin);
2674  saveData(os, myDrawinterpolateorient);
2675  saveData(os, myDrawtemplatesource);
2676  saveData(os, myDrawlimitlength);
2677  saveData(os, myDrawcurvetype);
2678  saveData(os, myDrawsegmode);
2679  saveData(os, myDrawsegcount);
2680  saveData(os, myDrawseglength);
2681  saveData(os, myOrientbrushupmode);
2682  saveData(os, myOrientbrushperpoint);
2683  saveData(os, myPainttemplateallowblending);
2684  saveData(os, myEditactiveprim);
2685  saveData(os, myEditsoft);
2686  saveData(os, myEditsoftmode);
2687  saveData(os, myEditcurvefrac);
2688  saveData(os, myEditcurvedist);
2689  saveData(os, myResamplesegmode);
2690  saveData(os, myResamplesegcount);
2691  saveData(os, myResampleseglength);
2692  saveData(os, myTwistangle);
2693  saveData(os, myCurvemaskramp);
2694  saveData(os, myGroom);
2695  saveData(os, myStrands);
2696  saveData(os, myStrokes);
2697  saveData(os, myPreviewutil);
2698  saveData(os, myPaintmaskpoints);
2699  saveData(os, myGroupnewprims);
2700  saveData(os, myNamenewprims);
2701  saveData(os, myActivegroup);
2702  saveData(os, myNameattrib);
2703  saveData(os, myActivename);
2704  saveData(os, myOverridecolor);
2705  saveData(os, myColorbyname);
2706  saveData(os, myDefaultcolor);
2707  saveData(os, myTemplatecolor);
2708  saveData(os, myColorseed);
2709  {
2710  int64 length = myFolder_grouplist.entries();
2711  UTwrite(os, &length);
2712  for (exint i = 0; i < length; i++)
2713  {
2714  auto && _curentry = myFolder_grouplist(i);
2715  (void) _curentry;
2716  saveData(os, _curentry.groupcolor);
2717  saveData(os, _curentry.groupname);
2718  saveData(os, _curentry.groupoptions);
2719 
2720  }
2721  }
2722  saveData(os, myXord);
2723  saveData(os, myRord);
2724  saveData(os, myT);
2725  saveData(os, myR);
2726  saveData(os, myS);
2727  saveData(os, myShear);
2728  saveData(os, myScale);
2729  saveData(os, myP);
2730  saveData(os, myPr);
2731  saveData(os, myCamxform0);
2732  saveData(os, myCamxform1);
2733  saveData(os, myCamxform2);
2734  saveData(os, myCamxform3);
2735  saveData(os, myCampos);
2736  saveData(os, myCursorpos);
2737  saveData(os, myCursordisplace);
2738  saveData(os, myRaypos);
2739  saveData(os, myRaydir);
2740  saveData(os, myStrengthscale);
2741  saveData(os, myButton);
2742  saveData(os, myShiftkey);
2743  saveData(os, myCtrlkey);
2744 
2745  }
2746 
2747  bool load(UT_IStream &is)
2748  {
2749  int32 v;
2750  is.bread(&v, 1);
2751  if (version() != v)
2752  {
2753  // Fail incompatible versions
2754  return false;
2755  }
2756  loadData(is, myStashnode);
2757  loadData(is, myGroup);
2758  loadData(is, myGrouptype);
2759  loadData(is, myUsemask);
2760  loadData(is, myMirrorbrush);
2761  loadData(is, myMirror);
2762  loadData(is, myMirrorgroup);
2763  loadData(is, myMirrororigin);
2764  loadData(is, myMirrordir);
2765  loadData(is, myTool);
2766  loadData(is, myRaybias);
2767  loadData(is, myStrandmode);
2768  loadData(is, myCollidewithskin);
2769  loadData(is, myCreateorient);
2770  loadData(is, myOrientname);
2771  loadData(is, myOrientup);
2772  loadData(is, myOrientupattrib);
2773  loadData(is, myOrientupattribflip);
2774  loadData(is, myTemplatesourcegroup);
2775  loadData(is, myWidthoverride);
2776  loadData(is, myWidth);
2777  loadData(is, myBrushsurface);
2778  loadData(is, myUsepartinglines);
2779  loadData(is, myScreenradius);
2780  loadData(is, myObjectradius);
2781  loadData(is, mySoft);
2782  loadData(is, mySpacing);
2783  loadData(is, myDensity);
2784  loadData(is, myBrushmaintainlength);
2785  loadData(is, myBrushsnaptosurface);
2786  loadData(is, myBrushbend);
2787  loadData(is, myBrushbendfalloff);
2788  loadData(is, myLiftmode);
2789  loadData(is, myLiftangle);
2790  loadData(is, myAdjustlengthmode);
2791  loadData(is, myAdjustlengthvalue);
2792  loadData(is, myAdjustlengthlength);
2793  loadData(is, myAdjustlengthmethod);
2794  loadData(is, myMoverotatewithskin);
2795  loadData(is, mySculptdoconstrain);
2796  loadData(is, mySculptlockroot);
2797  loadData(is, mySculptmaintainevensegments);
2798  loadData(is, mySmoothtargetsmoothness);
2799  loadData(is, mySmoothposition);
2800  loadData(is, mySmoothorient);
2801  loadData(is, myBlurinskinspace);
2802  loadData(is, myBlurperpoint);
2803  loadData(is, myBlurshape);
2804  loadData(is, myBlurlength);
2805  loadData(is, myBlurorient);
2806  loadData(is, myCutmode);
2807  loadData(is, myClumpperpoint);
2808  loadData(is, myPlantmode);
2809  loadData(is, myPlantinterpolateguides);
2810  loadData(is, myPlantinterpolaterelskin);
2811  loadData(is, myPlantinterpolateorient);
2812  loadData(is, myPlanttemplatesource);
2813  loadData(is, myPlantlength);
2814  loadData(is, myPlantsegcount);
2815  loadData(is, myDrawonskin);
2816  loadData(is, myDrawinterpolateorient);
2817  loadData(is, myDrawtemplatesource);
2818  loadData(is, myDrawlimitlength);
2819  loadData(is, myDrawcurvetype);
2820  loadData(is, myDrawsegmode);
2821  loadData(is, myDrawsegcount);
2822  loadData(is, myDrawseglength);
2823  loadData(is, myOrientbrushupmode);
2824  loadData(is, myOrientbrushperpoint);
2825  loadData(is, myPainttemplateallowblending);
2826  loadData(is, myEditactiveprim);
2827  loadData(is, myEditsoft);
2828  loadData(is, myEditsoftmode);
2829  loadData(is, myEditcurvefrac);
2830  loadData(is, myEditcurvedist);
2831  loadData(is, myResamplesegmode);
2832  loadData(is, myResamplesegcount);
2833  loadData(is, myResampleseglength);
2834  loadData(is, myTwistangle);
2835  loadData(is, myCurvemaskramp);
2836  loadData(is, myGroom);
2837  loadData(is, myStrands);
2838  loadData(is, myStrokes);
2839  loadData(is, myPreviewutil);
2840  loadData(is, myPaintmaskpoints);
2841  loadData(is, myGroupnewprims);
2842  loadData(is, myNamenewprims);
2843  loadData(is, myActivegroup);
2844  loadData(is, myNameattrib);
2845  loadData(is, myActivename);
2846  loadData(is, myOverridecolor);
2847  loadData(is, myColorbyname);
2848  loadData(is, myDefaultcolor);
2849  loadData(is, myTemplatecolor);
2850  loadData(is, myColorseed);
2851  {
2852  int64 length;
2853  is.read(&length, 1);
2854  myFolder_grouplist.setSize(length);
2855  for (exint i = 0; i < length; i++)
2856  {
2857  auto && _curentry = myFolder_grouplist(i);
2858  (void) _curentry;
2859  loadData(is, _curentry.groupcolor);
2860  loadData(is, _curentry.groupname);
2861  loadData(is, _curentry.groupoptions);
2862 
2863  }
2864  }
2865  loadData(is, myXord);
2866  loadData(is, myRord);
2867  loadData(is, myT);
2868  loadData(is, myR);
2869  loadData(is, myS);
2870  loadData(is, myShear);
2871  loadData(is, myScale);
2872  loadData(is, myP);
2873  loadData(is, myPr);
2874  loadData(is, myCamxform0);
2875  loadData(is, myCamxform1);
2876  loadData(is, myCamxform2);
2877  loadData(is, myCamxform3);
2878  loadData(is, myCampos);
2879  loadData(is, myCursorpos);
2880  loadData(is, myCursordisplace);
2881  loadData(is, myRaypos);
2882  loadData(is, myRaydir);
2883  loadData(is, myStrengthscale);
2884  loadData(is, myButton);
2885  loadData(is, myShiftkey);
2886  loadData(is, myCtrlkey);
2887 
2888  return true;
2889  }
2890 
2891  const UT_StringHolder & getStashnode() const { return myStashnode; }
2892  void setStashnode(const UT_StringHolder & val) { myStashnode = val; }
2894  {
2895  SOP_Node *thissop = cookparms.getNode();
2896  if (!thissop) return getStashnode();
2898  OP_Utils::evalOpParm(result, thissop, "stashnode", cookparms.getCookTime(), 0);
2899  return result;
2900  }
2901  const UT_StringHolder & getGroup() const { return myGroup; }
2902  void setGroup(const UT_StringHolder & val) { myGroup = val; }
2904  {
2905  SOP_Node *thissop = cookparms.getNode();
2906  if (!thissop) return getGroup();
2908  OP_Utils::evalOpParm(result, thissop, "group", cookparms.getCookTime(), 0);
2909  return result;
2910  }
2911  Grouptype getGrouptype() const { return Grouptype(myGrouptype); }
2912  void setGrouptype(Grouptype val) { myGrouptype = int64(val); }
2914  {
2915  SOP_Node *thissop = cookparms.getNode();
2916  if (!thissop) return getGrouptype();
2917  int64 result;
2918  OP_Utils::evalOpParm(result, thissop, "grouptype", cookparms.getCookTime(), 0);
2919  return Grouptype(result);
2920  }
2921  bool getUsemask() const { return myUsemask; }
2922  void setUsemask(bool val) { myUsemask = val; }
2923  bool opUsemask(const SOP_NodeVerb::CookParms &cookparms) const
2924  {
2925  SOP_Node *thissop = cookparms.getNode();
2926  if (!thissop) return getUsemask();
2927  bool result;
2928  OP_Utils::evalOpParm(result, thissop, "usemask", cookparms.getCookTime(), 0);
2929  return result;
2930  }
2931  bool getMirrorbrush() const { return myMirrorbrush; }
2932  void setMirrorbrush(bool val) { myMirrorbrush = val; }
2933  bool opMirrorbrush(const SOP_NodeVerb::CookParms &cookparms) const
2934  {
2935  SOP_Node *thissop = cookparms.getNode();
2936  if (!thissop) return getMirrorbrush();
2937  bool result;
2938  OP_Utils::evalOpParm(result, thissop, "mirrorbrush", cookparms.getCookTime(), 0);
2939  return result;
2940  }
2941  bool getMirror() const { return myMirror; }
2942  void setMirror(bool val) { myMirror = val; }
2943  bool opMirror(const SOP_NodeVerb::CookParms &cookparms) const
2944  {
2945  SOP_Node *thissop = cookparms.getNode();
2946  if (!thissop) return getMirror();
2947  bool result;
2948  OP_Utils::evalOpParm(result, thissop, "mirror", cookparms.getCookTime(), 0);
2949  return result;
2950  }
2951  const UT_StringHolder & getMirrorgroup() const { return myMirrorgroup; }
2952  void setMirrorgroup(const UT_StringHolder & val) { myMirrorgroup = val; }
2954  {
2955  SOP_Node *thissop = cookparms.getNode();
2956  if (!thissop) return getMirrorgroup();
2958  OP_Utils::evalOpParm(result, thissop, "mirrorgroup", cookparms.getCookTime(), 0);
2959  return result;
2960  }
2961  UT_Vector3D getMirrororigin() const { return myMirrororigin; }
2962  void setMirrororigin(UT_Vector3D val) { myMirrororigin = val; }
2964  {
2965  SOP_Node *thissop = cookparms.getNode();
2966  if (!thissop) return getMirrororigin();
2968  OP_Utils::evalOpParm(result, thissop, "mirrororigin", cookparms.getCookTime(), 0);
2969  return result;
2970  }
2971  UT_Vector3D getMirrordir() const { return myMirrordir; }
2972  void setMirrordir(UT_Vector3D val) { myMirrordir = val; }
2974  {
2975  SOP_Node *thissop = cookparms.getNode();
2976  if (!thissop) return getMirrordir();
2978  OP_Utils::evalOpParm(result, thissop, "mirrordir", cookparms.getCookTime(), 0);
2979  return result;
2980  }
2981  Tool getTool() const { return Tool(myTool); }
2982  void setTool(Tool val) { myTool = int64(val); }
2983  Tool opTool(const SOP_NodeVerb::CookParms &cookparms) const
2984  {
2985  SOP_Node *thissop = cookparms.getNode();
2986  if (!thissop) return getTool();
2987  int64 result;
2988  OP_Utils::evalOpParm(result, thissop, "tool", cookparms.getCookTime(), 0);
2989  return Tool(result);
2990  }
2991  fpreal64 getRaybias() const { return myRaybias; }
2992  void setRaybias(fpreal64 val) { myRaybias = val; }
2994  {
2995  SOP_Node *thissop = cookparms.getNode();
2996  if (!thissop) return getRaybias();
2997  fpreal64 result;
2998  OP_Utils::evalOpParm(result, thissop, "raybias", cookparms.getCookTime(), 0);
2999  return result;
3000  }
3001  bool getStrandmode() const { return myStrandmode; }
3002  void setStrandmode(bool val) { myStrandmode = val; }
3003  bool opStrandmode(const SOP_NodeVerb::CookParms &cookparms) const
3004  {
3005  SOP_Node *thissop = cookparms.getNode();
3006  if (!thissop) return getStrandmode();
3007  bool result;
3008  OP_Utils::evalOpParm(result, thissop, "strandmode", cookparms.getCookTime(), 0);
3009  return result;
3010  }
3011  bool getCollidewithskin() const { return myCollidewithskin; }
3012  void setCollidewithskin(bool val) { myCollidewithskin = val; }
3013  bool opCollidewithskin(const SOP_NodeVerb::CookParms &cookparms) const
3014  {
3015  SOP_Node *thissop = cookparms.getNode();
3016  if (!thissop) return getCollidewithskin();
3017  bool result;
3018  OP_Utils::evalOpParm(result, thissop, "collidewithskin", cookparms.getCookTime(), 0);
3019  return result;
3020  }
3021  bool getCreateorient() const { return myCreateorient; }
3022  void setCreateorient(bool val) { myCreateorient = val; }
3023  bool opCreateorient(const SOP_NodeVerb::CookParms &cookparms) const
3024  {
3025  SOP_Node *thissop = cookparms.getNode();
3026  if (!thissop) return getCreateorient();
3027  bool result;
3028  OP_Utils::evalOpParm(result, thissop, "createorient", cookparms.getCookTime(), 0);
3029  return result;
3030  }
3031  const UT_StringHolder & getOrientname() const { return myOrientname; }
3032  void setOrientname(const UT_StringHolder & val) { myOrientname = val; }
3034  {
3035  SOP_Node *thissop = cookparms.getNode();
3036  if (!thissop) return getOrientname();
3038  OP_Utils::evalOpParm(result, thissop, "orientname", cookparms.getCookTime(), 0);
3039  return result;
3040  }
3041  UT_Vector3D getOrientup() const { return myOrientup; }
3042  void setOrientup(UT_Vector3D val) { myOrientup = val; }
3044  {
3045  SOP_Node *thissop = cookparms.getNode();
3046  if (!thissop) return getOrientup();
3048  OP_Utils::evalOpParm(result, thissop, "orientup", cookparms.getCookTime(), 0);
3049  return result;
3050  }
3051  const UT_StringHolder & getOrientupattrib() const { return myOrientupattrib; }
3052  void setOrientupattrib(const UT_StringHolder & val) { myOrientupattrib = val; }
3054  {
3055  SOP_Node *thissop = cookparms.getNode();
3056  if (!thissop) return getOrientupattrib();
3058  OP_Utils::evalOpParm(result, thissop, "orientupattrib", cookparms.getCookTime(), 0);
3059  return result;
3060  }
3061  bool getOrientupattribflip() const { return myOrientupattribflip; }
3062  void setOrientupattribflip(bool val) { myOrientupattribflip = val; }
3063  bool opOrientupattribflip(const SOP_NodeVerb::CookParms &cookparms) const
3064  {
3065  SOP_Node *thissop = cookparms.getNode();
3066  if (!thissop) return getOrientupattribflip();
3067  bool result;
3068  OP_Utils::evalOpParm(result, thissop, "orientupattribflip", cookparms.getCookTime(), 0);
3069  return result;
3070  }
3071  const UT_StringHolder & getTemplatesourcegroup() const { return myTemplatesourcegroup; }
3072  void setTemplatesourcegroup(const UT_StringHolder & val) { myTemplatesourcegroup = val; }
3074  {
3075  SOP_Node *thissop = cookparms.getNode();
3076  if (!thissop) return getTemplatesourcegroup();
3078  OP_Utils::evalOpParm(result, thissop, "templatesourcegroup", cookparms.getCookTime(), 0);
3079  return result;
3080  }
3081  bool getWidthoverride() const { return myWidthoverride; }
3082  void setWidthoverride(bool val) { myWidthoverride = val; }
3083  bool opWidthoverride(const SOP_NodeVerb::CookParms &cookparms) const
3084  {
3085  SOP_Node *thissop = cookparms.getNode();
3086  if (!thissop) return getWidthoverride();
3087  bool result;
3088  OP_Utils::evalOpParm(result, thissop, "widthoverride", cookparms.getCookTime(), 0);
3089  return result;
3090  }
3091  fpreal64 getWidth() const { return myWidth; }
3092  void setWidth(fpreal64 val) { myWidth = val; }
3093  fpreal64 opWidth(const SOP_NodeVerb::CookParms &cookparms) const
3094  {
3095  SOP_Node *thissop = cookparms.getNode();
3096  if (!thissop) return getWidth();
3097  fpreal64 result;
3098  OP_Utils::evalOpParm(result, thissop, "width", cookparms.getCookTime(), 0);
3099  return result;
3100  }
3101  bool getBrushsurface() const { return myBrushsurface; }
3102  void setBrushsurface(bool val) { myBrushsurface = val; }
3103  bool opBrushsurface(const SOP_NodeVerb::CookParms &cookparms) const
3104  {
3105  SOP_Node *thissop = cookparms.getNode();
3106  if (!thissop) return getBrushsurface();
3107  bool result;
3108  OP_Utils::evalOpParm(result, thissop, "brushsurface", cookparms.getCookTime(), 0);
3109  return result;
3110  }
3111  bool getUsepartinglines() const { return myUsepartinglines; }
3112  void setUsepartinglines(bool val) { myUsepartinglines = val; }
3113  bool opUsepartinglines(const SOP_NodeVerb::CookParms &cookparms) const
3114  {
3115  SOP_Node *thissop = cookparms.getNode();
3116  if (!thissop) return getUsepartinglines();
3117  bool result;
3118  OP_Utils::evalOpParm(result, thissop, "usepartinglines", cookparms.getCookTime(), 0);
3119  return result;
3120  }
3121  fpreal64 getScreenradius() const { return myScreenradius; }
3122  void setScreenradius(fpreal64 val) { myScreenradius = val; }
3124  {
3125  SOP_Node *thissop = cookparms.getNode();
3126  if (!thissop) return getScreenradius();
3127  fpreal64 result;
3128  OP_Utils::evalOpParm(result, thissop, "screenradius", cookparms.getCookTime(), 0);
3129  return result;
3130  }
3131  fpreal64 getObjectradius() const { return myObjectradius; }
3132  void setObjectradius(fpreal64 val) { myObjectradius = val; }
3134  {
3135  SOP_Node *thissop = cookparms.getNode();
3136  if (!thissop) return getObjectradius();
3137  fpreal64 result;
3138  OP_Utils::evalOpParm(result, thissop, "objectradius", cookparms.getCookTime(), 0);
3139  return result;
3140  }
3141  fpreal64 getSoft() const { return mySoft; }
3142  void setSoft(fpreal64 val) { mySoft = val; }
3143  fpreal64 opSoft(const SOP_NodeVerb::CookParms &cookparms) const
3144  {
3145  SOP_Node *thissop = cookparms.getNode();
3146  if (!thissop) return getSoft();
3147  fpreal64 result;
3148  OP_Utils::evalOpParm(result, thissop, "soft", cookparms.getCookTime(), 0);
3149  return result;
3150  }
3151  fpreal64 getSpacing() const { return mySpacing; }
3152  void setSpacing(fpreal64 val) { mySpacing = val; }
3154  {
3155  SOP_Node *thissop = cookparms.getNode();
3156  if (!thissop) return getSpacing();
3157  fpreal64 result;
3158  OP_Utils::evalOpParm(result, thissop, "spacing", cookparms.getCookTime(), 0);
3159  return result;
3160  }
3161  fpreal64 getDensity() const { return myDensity; }
3162  void setDensity(fpreal64 val) { myDensity = val; }
3164  {
3165  SOP_Node *thissop = cookparms.getNode();
3166  if (!thissop) return getDensity();
3167  fpreal64 result;
3168  OP_Utils::evalOpParm(result, thissop, "density", cookparms.getCookTime(), 0);
3169  return result;
3170  }
3171  fpreal64 getBrushmaintainlength() const { return myBrushmaintainlength; }
3172  void setBrushmaintainlength(fpreal64 val) { myBrushmaintainlength = val; }
3174  {
3175  SOP_Node *thissop = cookparms.getNode();
3176  if (!thissop) return getBrushmaintainlength();
3177  fpreal64 result;
3178  OP_Utils::evalOpParm(result, thissop, "brushmaintainlength", cookparms.getCookTime(), 0);
3179  return result;
3180  }
3181  bool getBrushsnaptosurface() const { return myBrushsnaptosurface; }
3182  void setBrushsnaptosurface(bool val) { myBrushsnaptosurface = val; }
3183  bool opBrushsnaptosurface(const SOP_NodeVerb::CookParms &cookparms) const
3184  {
3185  SOP_Node *thissop = cookparms.getNode();
3186  if (!thissop) return getBrushsnaptosurface();
3187  bool result;
3188  OP_Utils::evalOpParm(result, thissop, "brushsnaptosurface", cookparms.getCookTime(), 0);
3189  return result;
3190  }
3191  fpreal64 getBrushbend() const { return myBrushbend; }
3192  void setBrushbend(fpreal64 val) { myBrushbend = val; }
3194  {
3195  SOP_Node *thissop = cookparms.getNode();
3196  if (!thissop) return getBrushbend();
3197  fpreal64 result;
3198  OP_Utils::evalOpParm(result, thissop, "brushbend", cookparms.getCookTime(), 0);
3199  return result;
3200  }
3201  fpreal64 getBrushbendfalloff() const { return myBrushbendfalloff; }
3202  void setBrushbendfalloff(fpreal64 val) { myBrushbendfalloff = val; }
3204  {
3205  SOP_Node *thissop = cookparms.getNode();
3206  if (!thissop) return getBrushbendfalloff();
3207  fpreal64 result;
3208  OP_Utils::evalOpParm(result, thissop, "brushbendfalloff", cookparms.getCookTime(), 0);
3209  return result;
3210  }
3211  Liftmode getLiftmode() const { return Liftmode(myLiftmode); }
3212  void setLiftmode(Liftmode val) { myLiftmode = int64(val); }
3214  {
3215  SOP_Node *thissop = cookparms.getNode();
3216  if (!thissop) return getLiftmode();
3217  int64 result;
3218  OP_Utils::evalOpParm(result, thissop, "liftmode", cookparms.getCookTime(), 0);
3219  return Liftmode(result);
3220  }
3221  fpreal64 getLiftangle() const { return myLiftangle; }
3222  void setLiftangle(fpreal64 val) { myLiftangle = val; }
3224  {
3225  SOP_Node *thissop = cookparms.getNode();
3226  if (!thissop) return getLiftangle();
3227  fpreal64 result;
3228  OP_Utils::evalOpParm(result, thissop, "liftangle", cookparms.getCookTime(), 0);
3229  return result;
3230  }
3231  Adjustlengthmode getAdjustlengthmode() const { return Adjustlengthmode(myAdjustlengthmode); }
3232  void setAdjustlengthmode(Adjustlengthmode val) { myAdjustlengthmode = int64(val); }
3234  {
3235  SOP_Node *thissop = cookparms.getNode();
3236  if (!thissop) return getAdjustlengthmode();
3237  int64 result;
3238  OP_Utils::evalOpParm(result, thissop, "adjustlengthmode", cookparms.getCookTime(), 0);
3239  return Adjustlengthmode(result);
3240  }
3241  fpreal64 getAdjustlengthvalue() const { return myAdjustlengthvalue; }
3242  void setAdjustlengthvalue(fpreal64 val) { myAdjustlengthvalue = val; }
3244  {
3245  SOP_Node *thissop = cookparms.getNode();
3246  if (!thissop) return getAdjustlengthvalue();
3247  fpreal64 result;
3248  OP_Utils::evalOpParm(result, thissop, "adjustlengthvalue", cookparms.getCookTime(), 0);
3249  return result;
3250  }
3251  fpreal64 getAdjustlengthlength() const { return myAdjustlengthlength; }
3252  void setAdjustlengthlength(fpreal64 val) { myAdjustlengthlength = val; }
3254  {
3255  SOP_Node *thissop = cookparms.getNode();
3256  if (!thissop) return getAdjustlengthlength();
3257  fpreal64 result;
3258  OP_Utils::evalOpParm(result, thissop, "adjustlengthlength", cookparms.getCookTime(), 0);
3259  return result;
3260  }
3261  Adjustlengthmethod getAdjustlengthmethod() const { return Adjustlengthmethod(myAdjustlengthmethod); }
3262  void setAdjustlengthmethod(Adjustlengthmethod val) { myAdjustlengthmethod = int64(val); }
3264  {
3265  SOP_Node *thissop = cookparms.getNode();
3266  if (!thissop) return getAdjustlengthmethod();
3267  int64 result;
3268  OP_Utils::evalOpParm(result, thissop, "adjustlengthmethod", cookparms.getCookTime(), 0);
3269  return Adjustlengthmethod(result);
3270  }
3271  bool getMoverotatewithskin() const { return myMoverotatewithskin; }
3272  void setMoverotatewithskin(bool val) { myMoverotatewithskin = val; }
3273  bool opMoverotatewithskin(const SOP_NodeVerb::CookParms &cookparms) const
3274  {
3275  SOP_Node *thissop = cookparms.getNode();
3276  if (!thissop) return getMoverotatewithskin();
3277  bool result;
3278  OP_Utils::evalOpParm(result, thissop, "moverotatewithskin", cookparms.getCookTime(), 0);
3279  return result;
3280  }
3281  bool getSculptdoconstrain() const { return mySculptdoconstrain; }
3282  void setSculptdoconstrain(bool val) { mySculptdoconstrain = val; }
3283  bool opSculptdoconstrain(const SOP_NodeVerb::CookParms &cookparms) const
3284  {
3285  SOP_Node *thissop = cookparms.getNode();
3286  if (!thissop) return getSculptdoconstrain();
3287  bool result;
3288  OP_Utils::evalOpParm(result, thissop, "sculptdoconstrain", cookparms.getCookTime(), 0);
3289  return result;
3290  }
3291  bool getSculptlockroot() const { return mySculptlockroot; }
3292  void setSculptlockroot(bool val) { mySculptlockroot = val; }
3293  bool opSculptlockroot(const SOP_NodeVerb::CookParms &cookparms) const
3294  {
3295  SOP_Node *thissop = cookparms.getNode();
3296  if (!thissop) return getSculptlockroot();
3297  bool result;
3298  OP_Utils::evalOpParm(result, thissop, "sculptlockroot", cookparms.getCookTime(), 0);
3299  return result;
3300  }
3301  bool getSculptmaintainevensegments() const { return mySculptmaintainevensegments; }
3302  void setSculptmaintainevensegments(bool val) { mySculptmaintainevensegments = val; }
3304  {
3305  SOP_Node *thissop = cookparms.getNode();
3306  if (!thissop) return getSculptmaintainevensegments();
3307  bool result;
3308  OP_Utils::evalOpParm(result, thissop, "sculptmaintainevensegments", cookparms.getCookTime(), 0);
3309  return result;
3310  }
3311  fpreal64 getSmoothtargetsmoothness() const { return mySmoothtargetsmoothness; }
3312  void setSmoothtargetsmoothness(fpreal64 val) { mySmoothtargetsmoothness = val; }
3314  {
3315  SOP_Node *thissop = cookparms.getNode();
3316  if (!thissop) return getSmoothtargetsmoothness();
3317  fpreal64 result;
3318  OP_Utils::evalOpParm(result, thissop, "smoothtargetsmoothness", cookparms.getCookTime(), 0);
3319  return result;
3320  }
3321  bool getSmoothposition() const { return mySmoothposition; }
3322  void setSmoothposition(bool val) { mySmoothposition = val; }
3323  bool opSmoothposition(const SOP_NodeVerb::CookParms &cookparms) const
3324  {
3325  SOP_Node *thissop = cookparms.getNode();
3326  if (!thissop) return getSmoothposition();
3327  bool result;
3328  OP_Utils::evalOpParm(result, thissop, "smoothposition", cookparms.getCookTime(), 0);
3329  return result;
3330  }
3331  bool getSmoothorient() const { return mySmoothorient; }
3332  void setSmoothorient(bool val) { mySmoothorient = val; }
3333  bool opSmoothorient(const SOP_NodeVerb::CookParms &cookparms) const
3334  {
3335  SOP_Node *thissop = cookparms.getNode();
3336  if (!thissop) return getSmoothorient();
3337  bool result;
3338  OP_Utils::evalOpParm(result, thissop, "smoothorient", cookparms.getCookTime(), 0);
3339  return result;
3340  }
3341  bool getBlurinskinspace() const { return myBlurinskinspace; }
3342  void setBlurinskinspace(bool val) { myBlurinskinspace = val; }
3343  bool opBlurinskinspace(const SOP_NodeVerb::CookParms &cookparms) const
3344  {
3345  SOP_Node *thissop = cookparms.getNode();
3346  if (!thissop) return getBlurinskinspace();
3347  bool result;
3348  OP_Utils::evalOpParm(result, thissop, "blurinskinspace", cookparms.getCookTime(), 0);
3349  return result;
3350  }
3351  bool getBlurperpoint() const { return myBlurperpoint; }
3352  void setBlurperpoint(bool val) { myBlurperpoint = val; }
3353  bool opBlurperpoint(const SOP_NodeVerb::CookParms &cookparms) const
3354  {
3355  SOP_Node *thissop = cookparms.getNode();
3356  if (!thissop) return getBlurperpoint();
3357  bool result;
3358  OP_Utils::evalOpParm(result, thissop, "blurperpoint", cookparms.getCookTime(), 0);
3359  return result;
3360  }
3361  bool getBlurshape() const { return myBlurshape; }
3362  void setBlurshape(bool val) { myBlurshape = val; }
3363  bool opBlurshape(const SOP_NodeVerb::CookParms &cookparms) const
3364  {
3365  SOP_Node *thissop = cookparms.getNode();
3366  if (!thissop) return getBlurshape();
3367  bool result;
3368  OP_Utils::evalOpParm(result, thissop, "blurshape", cookparms.getCookTime(), 0);
3369  return result;
3370  }
3371  bool getBlurlength() const { return myBlurlength; }
3372  void setBlurlength(bool val) { myBlurlength = val; }
3373  bool opBlurlength(const SOP_NodeVerb::CookParms &cookparms) const
3374  {
3375  SOP_Node *thissop = cookparms.getNode();
3376  if (!thissop) return getBlurlength();
3377  bool result;
3378  OP_Utils::evalOpParm(result, thissop, "blurlength", cookparms.getCookTime(), 0);
3379  return result;
3380  }
3381  bool getBlurorient() const { return myBlurorient; }
3382  void setBlurorient(bool val) { myBlurorient = val; }
3383  bool opBlurorient(const SOP_NodeVerb::CookParms &cookparms) const
3384  {
3385  SOP_Node *thissop = cookparms.getNode();
3386  if (!thissop) return getBlurorient();
3387  bool result;
3388  OP_Utils::evalOpParm(result, thissop, "blurorient", cookparms.getCookTime(), 0);
3389  return result;
3390  }
3391  Cutmode getCutmode() const { return Cutmode(myCutmode); }
3392  void setCutmode(Cutmode val) { myCutmode = int64(val); }
3394  {
3395  SOP_Node *thissop = cookparms.getNode();
3396  if (!thissop) return getCutmode();
3397  int64 result;
3398  OP_Utils::evalOpParm(result, thissop, "cutmode", cookparms.getCookTime(), 0);
3399  return Cutmode(result);
3400  }
3401  bool getClumpperpoint() const { return myClumpperpoint; }
3402  void setClumpperpoint(bool val) { myClumpperpoint = val; }
3403  bool opClumpperpoint(const SOP_NodeVerb::CookParms &cookparms) const
3404  {
3405  SOP_Node *thissop = cookparms.getNode();
3406  if (!thissop) return getClumpperpoint();
3407  bool result;
3408  OP_Utils::evalOpParm(result, thissop, "clumpperpoint", cookparms.getCookTime(), 0);
3409  return result;
3410  }
3411  Plantmode getPlantmode() const { return Plantmode(myPlantmode); }
3412  void setPlantmode(Plantmode val) { myPlantmode = int64(val); }
3414  {
3415  SOP_Node *thissop = cookparms.getNode();
3416  if (!thissop) return getPlantmode();
3417  int64 result;
3418  OP_Utils::evalOpParm(result, thissop, "plantmode", cookparms.getCookTime(), 0);
3419  return Plantmode(result);
3420  }
3421  bool getPlantinterpolateguides() const { return myPlantinterpolateguides; }
3422  void setPlantinterpolateguides(bool val) { myPlantinterpolateguides = val; }
3424  {
3425  SOP_Node *thissop = cookparms.getNode();
3426  if (!thissop) return getPlantinterpolateguides();
3427  bool result;
3428  OP_Utils::evalOpParm(result, thissop, "plantinterpolateguides", cookparms.getCookTime(), 0);
3429  return result;
3430  }
3431  bool getPlantinterpolaterelskin() const { return myPlantinterpolaterelskin; }
3432  void setPlantinterpolaterelskin(bool val) { myPlantinterpolaterelskin = val; }
3434  {
3435  SOP_Node *thissop = cookparms.getNode();
3436  if (!thissop) return getPlantinterpolaterelskin();
3437  bool result;
3438  OP_Utils::evalOpParm(result, thissop, "plantinterpolaterelskin", cookparms.getCookTime(), 0);
3439  return result;
3440  }
3441  bool getPlantinterpolateorient() const { return myPlantinterpolateorient; }
3442  void setPlantinterpolateorient(bool val) { myPlantinterpolateorient = val; }
3444  {
3445  SOP_Node *thissop = cookparms.getNode();
3446  if (!thissop) return getPlantinterpolateorient();
3447  bool result;
3448  OP_Utils::evalOpParm(result, thissop, "plantinterpolateorient", cookparms.getCookTime(), 0);
3449  return result;
3450  }
3451  Planttemplatesource getPlanttemplatesource() const { return Planttemplatesource(myPlanttemplatesource); }
3452  void setPlanttemplatesource(Planttemplatesource val) { myPlanttemplatesource = int64(val); }
3454  {
3455  SOP_Node *thissop = cookparms.getNode();
3456  if (!thissop) return getPlanttemplatesource();
3457  int64 result;
3458  OP_Utils::evalOpParm(result, thissop, "planttemplatesource", cookparms.getCookTime(), 0);
3459  return Planttemplatesource(result);
3460  }
3461  fpreal64 getPlantlength() const { return myPlantlength; }
3462  void setPlantlength(fpreal64 val) { myPlantlength = val; }
3464  {
3465  SOP_Node *thissop = cookparms.getNode();
3466  if (!thissop) return getPlantlength();
3467  fpreal64 result;
3468  OP_Utils::evalOpParm(result, thissop, "plantlength", cookparms.getCookTime(), 0);
3469  return result;
3470  }
3471  int64 getPlantsegcount() const { return myPlantsegcount; }
3472  void setPlantsegcount(int64 val) { myPlantsegcount = val; }
3474  {
3475  SOP_Node *thissop = cookparms.getNode();
3476  if (!thissop) return getPlantsegcount();
3477  int64 result;
3478  OP_Utils::evalOpParm(result, thissop, "plantsegcount", cookparms.getCookTime(), 0);
3479  return result;
3480  }
3481  bool getDrawonskin() const { return myDrawonskin; }
3482  void setDrawonskin(bool val) { myDrawonskin = val; }
3483  bool opDrawonskin(const SOP_NodeVerb::CookParms &cookparms) const
3484  {
3485  SOP_Node *thissop = cookparms.getNode();
3486  if (!thissop) return getDrawonskin();
3487  bool result;
3488  OP_Utils::evalOpParm(result, thissop, "drawonskin", cookparms.getCookTime(), 0);
3489  return result;
3490  }
3491  bool getDrawinterpolateorient() const { return myDrawinterpolateorient; }
3492  void setDrawinterpolateorient(bool val) { myDrawinterpolateorient = val; }
3494  {
3495  SOP_Node *thissop = cookparms.getNode();
3496  if (!thissop) return getDrawinterpolateorient();
3497  bool result;
3498  OP_Utils::evalOpParm(result, thissop, "drawinterpolateorient", cookparms.getCookTime(), 0);
3499  return result;
3500  }
3501  Drawtemplatesource getDrawtemplatesource() const { return Drawtemplatesource(myDrawtemplatesource); }
3502  void setDrawtemplatesource(Drawtemplatesource val) { myDrawtemplatesource = int64(val); }
3504  {
3505  SOP_Node *thissop = cookparms.getNode();
3506  if (!thissop) return getDrawtemplatesource();
3507  int64 result;
3508  OP_Utils::evalOpParm(result, thissop, "drawtemplatesource", cookparms.getCookTime(), 0);
3509  return Drawtemplatesource(result);
3510  }
3511  bool getDrawlimitlength() const { return myDrawlimitlength; }
3512  void setDrawlimitlength(bool val) { myDrawlimitlength = val; }
3513  bool opDrawlimitlength(const SOP_NodeVerb::CookParms &cookparms) const
3514  {
3515  SOP_Node *thissop = cookparms.getNode();
3516  if (!thissop) return getDrawlimitlength();
3517  bool result;
3518  OP_Utils::evalOpParm(result, thissop, "drawlimitlength", cookparms.getCookTime(), 0);
3519  return result;
3520  }
3521  Drawcurvetype getDrawcurvetype() const { return Drawcurvetype(myDrawcurvetype); }
3522  void setDrawcurvetype(Drawcurvetype val) { myDrawcurvetype = int64(val); }
3524  {
3525  SOP_Node *thissop = cookparms.getNode();
3526  if (!thissop) return getDrawcurvetype();
3527  int64 result;
3528  OP_Utils::evalOpParm(result, thissop, "drawcurvetype", cookparms.getCookTime(), 0);
3529  return Drawcurvetype(result);
3530  }
3531  Drawsegmode getDrawsegmode() const { return Drawsegmode(myDrawsegmode); }
3532  void setDrawsegmode(Drawsegmode val) { myDrawsegmode = int64(val); }
3534  {
3535  SOP_Node *thissop = cookparms.getNode();
3536  if (!thissop) return getDrawsegmode();
3537  int64 result;
3538  OP_Utils::evalOpParm(result, thissop, "drawsegmode", cookparms.getCookTime(), 0);
3539  return Drawsegmode(result);
3540  }
3541  int64 getDrawsegcount() const { return myDrawsegcount; }
3542  void setDrawsegcount(int64 val) { myDrawsegcount = val; }
3544  {
3545  SOP_Node *thissop = cookparms.getNode();
3546  if (!thissop) return getDrawsegcount();
3547  int64 result;
3548  OP_Utils::evalOpParm(result, thissop, "drawsegcount", cookparms.getCookTime(), 0);
3549  return result;
3550  }
3551  fpreal64 getDrawseglength() const { return myDrawseglength; }
3552  void setDrawseglength(fpreal64 val) { myDrawseglength = val; }
3554  {
3555  SOP_Node *thissop = cookparms.getNode();
3556  if (!thissop) return getDrawseglength();
3557  fpreal64 result;
3558  OP_Utils::evalOpParm(result, thissop, "drawseglength", cookparms.getCookTime(), 0);
3559  return result;
3560  }
3561  Orientbrushupmode getOrientbrushupmode() const { return Orientbrushupmode(myOrientbrushupmode); }
3562  void setOrientbrushupmode(Orientbrushupmode val) { myOrientbrushupmode = int64(val); }
3564  {
3565  SOP_Node *thissop = cookparms.getNode();
3566  if (!thissop) return getOrientbrushupmode();
3567  int64 result;
3568  OP_Utils::evalOpParm(result, thissop, "orientbrushupmode", cookparms.getCookTime(), 0);
3569  return Orientbrushupmode(result);
3570  }
3571  bool getOrientbrushperpoint() const { return myOrientbrushperpoint; }
3572  void setOrientbrushperpoint(bool val) { myOrientbrushperpoint = val; }
3573  bool opOrientbrushperpoint(const SOP_NodeVerb::CookParms &cookparms) const
3574  {
3575  SOP_Node *thissop = cookparms.getNode();
3576  if (!thissop) return getOrientbrushperpoint();
3577  bool result;
3578  OP_Utils::evalOpParm(result, thissop, "orientbrushperpoint", cookparms.getCookTime(), 0);
3579  return result;
3580  }
3581  bool getPainttemplateallowblending() const { return myPainttemplateallowblending; }
3582  void setPainttemplateallowblending(bool val) { myPainttemplateallowblending = val; }
3584  {
3585  SOP_Node *thissop = cookparms.getNode();
3586  if (!thissop) return getPainttemplateallowblending();
3587  bool result;
3588  OP_Utils::evalOpParm(result, thissop, "painttemplateallowblending", cookparms.getCookTime(), 0);
3589  return result;
3590  }
3591  int64 getEditactiveprim() const { return myEditactiveprim; }
3592  void setEditactiveprim(int64 val) { myEditactiveprim = val; }
3594  {
3595  SOP_Node *thissop = cookparms.getNode();
3596  if (!thissop) return getEditactiveprim();
3597  int64 result;
3598  OP_Utils::evalOpParm(result, thissop, "editactiveprim", cookparms.getCookTime(), 0);
3599  return result;
3600  }
3601  bool getEditsoft() const { return myEditsoft; }
3602  void setEditsoft(bool val) { myEditsoft = val; }
3603  bool opEditsoft(const SOP_NodeVerb::CookParms &cookparms) const
3604  {
3605  SOP_Node *thissop = cookparms.getNode();
3606  if (!thissop) return getEditsoft();
3607  bool result;
3608  OP_Utils::evalOpParm(result, thissop, "editsoft", cookparms.getCookTime(), 0);
3609  return result;
3610  }
3611  Editsoftmode getEditsoftmode() const { return Editsoftmode(myEditsoftmode); }
3612  void setEditsoftmode(Editsoftmode val) { myEditsoftmode = int64(val); }
3614  {
3615  SOP_Node *thissop = cookparms.getNode();
3616  if (!thissop) return getEditsoftmode();
3617  int64 result;
3618  OP_Utils::evalOpParm(result, thissop, "editsoftmode", cookparms.getCookTime(), 0);
3619  return Editsoftmode(result);
3620  }
3621  fpreal64 getEditcurvefrac() const { return myEditcurvefrac; }
3622  void setEditcurvefrac(fpreal64 val) { myEditcurvefrac = val; }
3624  {
3625  SOP_Node *thissop = cookparms.getNode();
3626  if (!thissop) return getEditcurvefrac();
3627  fpreal64 result;
3628  OP_Utils::evalOpParm(result, thissop, "editcurvefrac", cookparms.getCookTime(), 0);
3629  return result;
3630  }
3631  fpreal64 getEditcurvedist() const { return myEditcurvedist; }
3632  void setEditcurvedist(fpreal64 val) { myEditcurvedist = val; }
3634  {
3635  SOP_Node *thissop = cookparms.getNode();
3636  if (!thissop) return getEditcurvedist();
3637  fpreal64 result;
3638  OP_Utils::evalOpParm(result, thissop, "editcurvedist", cookparms.getCookTime(), 0);
3639  return result;
3640  }
3641  Resamplesegmode getResamplesegmode() const { return Resamplesegmode(myResamplesegmode); }
3642  void setResamplesegmode(Resamplesegmode val) { myResamplesegmode = int64(val); }
3644  {
3645  SOP_Node *thissop = cookparms.getNode();
3646  if (!thissop) return getResamplesegmode();
3647  int64 result;
3648  OP_Utils::evalOpParm(result, thissop, "resamplesegmode", cookparms.getCookTime(), 0);
3649  return Resamplesegmode(result);
3650  }
3651  int64 getResamplesegcount() const { return myResamplesegcount; }
3652  void setResamplesegcount(int64 val) { myResamplesegcount = val; }
3654  {
3655  SOP_Node *thissop = cookparms.getNode();
3656  if (!thissop) return getResamplesegcount();
3657  int64 result;
3658  OP_Utils::evalOpParm(result, thissop, "resamplesegcount", cookparms.getCookTime(), 0);
3659  return result;
3660  }
3661  fpreal64 getResampleseglength() const { return myResampleseglength; }
3662  void setResampleseglength(fpreal64 val) { myResampleseglength = val; }
3664  {
3665  SOP_Node *thissop = cookparms.getNode();
3666  if (!thissop) return getResampleseglength();
3667  fpreal64 result;
3668  OP_Utils::evalOpParm(result, thissop, "resampleseglength", cookparms.getCookTime(), 0);
3669  return result;
3670  }
3671  fpreal64 getTwistangle() const { return myTwistangle; }
3672  void setTwistangle(fpreal64 val) { myTwistangle = val; }
3674  {
3675  SOP_Node *thissop = cookparms.getNode();
3676  if (!thissop) return getTwistangle();
3677  fpreal64 result;
3678  OP_Utils::evalOpParm(result, thissop, "twistangle", cookparms.getCookTime(), 0);
3679  return result;
3680  }
3681  UT_SharedPtr<UT_Ramp> getCurvemaskramp() const { return myCurvemaskramp; }
3682  void setCurvemaskramp(UT_SharedPtr<UT_Ramp> val) { myCurvemaskramp = val; }
3684  {
3685  SOP_Node *thissop = cookparms.getNode();
3686  if (!thissop) return getCurvemaskramp();
3688  OP_Utils::evalOpParm(result, thissop, "curvemaskramp", cookparms.getCookTime(), 0);
3689  return result;
3690  }
3691  PRM_DataItemHandle getGroom() const { return myGroom; }
3692  void setGroom(PRM_DataItemHandle val) { myGroom = val; }
3694  {
3695  SOP_Node *thissop = cookparms.getNode();
3696  if (!thissop) return getGroom();
3698  OP_Utils::evalOpParm(result, thissop, "groom", cookparms.getCookTime(), 0);
3699  return result;
3700  }
3701  PRM_DataItemHandle getStrands() const { return myStrands; }
3702  void setStrands(PRM_DataItemHandle val) { myStrands = val; }
3704  {
3705  SOP_Node *thissop = cookparms.getNode();
3706  if (!thissop) return getStrands();
3708  OP_Utils::evalOpParm(result, thissop, "strands", cookparms.getCookTime(), 0);
3709  return result;
3710  }
3711  PRM_DataItemHandle getStrokes() const { return myStrokes; }
3712  void setStrokes(PRM_DataItemHandle val) { myStrokes = val; }
3714  {
3715  SOP_Node *thissop = cookparms.getNode();
3716  if (!thissop) return getStrokes();
3718  OP_Utils::evalOpParm(result, thissop, "strokes", cookparms.getCookTime(), 0);
3719  return result;
3720  }
3721  bool getPreviewutil() const { return myPreviewutil; }
3722  void setPreviewutil(bool val) { myPreviewutil = val; }
3723  bool opPreviewutil(const SOP_NodeVerb::CookParms &cookparms) const
3724  {
3725  SOP_Node *thissop = cookparms.getNode();
3726  if (!thissop) return getPreviewutil();
3727  bool result;
3728  OP_Utils::evalOpParm(result, thissop, "previewutil", cookparms.getCookTime(), 0);
3729  return result;
3730  }
3731  bool getPaintmaskpoints() const { return myPaintmaskpoints; }
3732  void setPaintmaskpoints(bool val) { myPaintmaskpoints = val; }
3733  bool opPaintmaskpoints(const SOP_NodeVerb::CookParms &cookparms) const
3734  {
3735  SOP_Node *thissop = cookparms.getNode();
3736  if (!thissop) return getPaintmaskpoints();
3737  bool result;
3738  OP_Utils::evalOpParm(result, thissop, "paintmaskpoints", cookparms.getCookTime(), 0);
3739  return result;
3740  }
3741  bool getGroupnewprims() const { return myGroupnewprims; }
3742  void setGroupnewprims(bool val) { myGroupnewprims = val; }
3743  bool opGroupnewprims(const SOP_NodeVerb::CookParms &cookparms) const
3744  {
3745  SOP_Node *thissop = cookparms.getNode();
3746  if (!thissop) return getGroupnewprims();
3747  bool result;
3748  OP_Utils::evalOpParm(result, thissop, "groupnewprims", cookparms.getCookTime(), 0);
3749  return result;
3750  }
3751  bool getNamenewprims() const { return myNamenewprims; }
3752  void setNamenewprims(bool val) { myNamenewprims = val; }
3753  bool opNamenewprims(const SOP_NodeVerb::CookParms &cookparms) const
3754  {
3755  SOP_Node *thissop = cookparms.getNode();
3756  if (!thissop) return getNamenewprims();
3757  bool result;
3758  OP_Utils::evalOpParm(result, thissop, "namenewprims", cookparms.getCookTime(), 0);
3759  return result;
3760  }
3761  const UT_StringHolder & getActivegroup() const { return myActivegroup; }
3762  void setActivegroup(const UT_StringHolder & val) { myActivegroup = val; }
3764  {
3765  SOP_Node *thissop = cookparms.getNode();
3766  if (!thissop) return getActivegroup();
3768  OP_Utils::evalOpParm(result, thissop, "activegroup", cookparms.getCookTime(), 0);
3769  return result;
3770  }
3771  const UT_StringHolder & getNameattrib() const { return myNameattrib; }
3772  void setNameattrib(const UT_StringHolder & val) { myNameattrib = val; }
3774  {
3775  SOP_Node *thissop = cookparms.getNode();
3776  if (!thissop) return getNameattrib();
3778  OP_Utils::evalOpParm(result, thissop, "nameattrib", cookparms.getCookTime(), 0);
3779  return result;
3780  }
3781  const UT_StringHolder & getActivename() const { return myActivename; }
3782  void setActivename(const UT_StringHolder & val) { myActivename = val; }
3784  {
3785  SOP_Node *thissop = cookparms.getNode();
3786  if (!thissop) return getActivename();
3788  OP_Utils::evalOpParm(result, thissop, "activename", cookparms.getCookTime(), 0);
3789  return result;
3790  }
3791  bool getOverridecolor() const { return myOverridecolor; }
3792  void setOverridecolor(bool val) { myOverridecolor = val; }
3793  bool opOverridecolor(const SOP_NodeVerb::CookParms &cookparms) const
3794  {
3795  SOP_Node *thissop = cookparms.getNode();
3796  if (!thissop) return getOverridecolor();
3797  bool result;
3798  OP_Utils::evalOpParm(result, thissop, "overridecolor", cookparms.getCookTime(), 0);
3799  return result;
3800  }
3801  bool getColorbyname() const { return myColorbyname; }
3802  void setColorbyname(bool val) { myColorbyname = val; }
3803  bool opColorbyname(const SOP_NodeVerb::CookParms &cookparms) const
3804  {
3805  SOP_Node *thissop = cookparms.getNode();
3806  if (!thissop) return getColorbyname();
3807  bool result;
3808  OP_Utils::evalOpParm(result, thissop, "colorbyname", cookparms.getCookTime(), 0);
3809  return result;
3810  }
3811  UT_Vector3D getDefaultcolor() const { return myDefaultcolor; }
3812  void setDefaultcolor(UT_Vector3D val) { myDefaultcolor = val; }
3814  {
3815  SOP_Node *thissop = cookparms.getNode();
3816  if (!thissop) return getDefaultcolor();
3818  OP_Utils::evalOpParm(result, thissop, "defaultcolor", cookparms.getCookTime(), 0);
3819  return result;
3820  }
3821  UT_Vector3D getTemplatecolor() const { return myTemplatecolor; }
3822  void setTemplatecolor(UT_Vector3D val) { myTemplatecolor = val; }
3824  {
3825  SOP_Node *thissop = cookparms.getNode();
3826  if (!thissop) return getTemplatecolor();
3828  OP_Utils::evalOpParm(result, thissop, "templatecolor", cookparms.getCookTime(), 0);
3829  return result;
3830  }
3831  int64 getColorseed() const { return myColorseed; }
3832  void setColorseed(int64 val) { myColorseed = val; }
3834  {
3835  SOP_Node *thissop = cookparms.getNode();
3836  if (!thissop) return getColorseed();
3837  int64 result;
3838  OP_Utils::evalOpParm(result, thissop, "colorseed", cookparms.getCookTime(), 0);
3839  return result;
3840  }
3841  const UT_Array<Folder_grouplist> &getFolder_grouplist() const { return myFolder_grouplist; }
3842 void setFolder_grouplist(const UT_Array<Folder_grouplist> &val) { myFolder_grouplist = val; }
3844  {
3845  SOP_Node *thissop = cookparms.getNode();
3846  if (!thissop) return getFolder_grouplist().entries();
3847  exint result;
3848  OP_Utils::evalOpParm(result, thissop, "folder_grouplist", cookparms.getCookTime(), 0);
3849  return result;
3850  }
3852  { return opinstFolder_grouplist_groupcolor(cookparms, &_idx); }
3854  {
3855  SOP_Node *thissop = cookparms.getNode();
3856  if (!thissop) return (myFolder_grouplist(_idx[0]).groupcolor);
3857  int _parmidx[2-1];
3858  _parmidx[1-1] = _idx[1-1] + 0;
3859 
3861  OP_Utils::evalOpParmInst(result, thissop, "groupcolor#", _parmidx, cookparms.getCookTime(), 0, 2-1);
3862  return (result);
3863  }
3865  { return opinstFolder_grouplist_groupname(cookparms, &_idx); }
3867  {
3868  SOP_Node *thissop = cookparms.getNode();
3869  if (!thissop) return (myFolder_grouplist(_idx[0]).groupname);
3870  int _parmidx[2-1];
3871  _parmidx[1-1] = _idx[1-1] + 0;
3872 
3874  OP_Utils::evalOpParmInst(result, thissop, "groupname#", _parmidx, cookparms.getCookTime(), 0, 2-1);
3875  return (result);
3876  }
3878  { return opinstFolder_grouplist_groupoptions(cookparms, &_idx); }
3879  int64 opinstFolder_grouplist_groupoptions(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
3880  {
3881  SOP_Node *thissop = cookparms.getNode();
3882  if (!thissop) return (myFolder_grouplist(_idx[0]).groupoptions);
3883  int _parmidx[2-1];
3884  _parmidx[1-1] = _idx[1-1] + 0;
3885 
3886  int64 result;
3887  OP_Utils::evalOpParmInst(result, thissop, "groupoptions#", _parmidx, cookparms.getCookTime(), 0, 2-1);
3888  return (result);
3889  }
3890 
3891  Xord getXord() const { return Xord(myXord); }
3892  void setXord(Xord val) { myXord = int64(val); }
3893  Xord opXord(const SOP_NodeVerb::CookParms &cookparms) const
3894  {
3895  SOP_Node *thissop = cookparms.getNode();
3896  if (!thissop) return getXord();
3897  int64 result;
3898  OP_Utils::evalOpParm(result, thissop, "xOrd", cookparms.getCookTime(), 0);
3899  return Xord(result);
3900  }
3901  Rord getRord() const { return Rord(myRord); }
3902  void setRord(Rord val) { myRord = int64(val); }
3903  Rord opRord(const SOP_NodeVerb::CookParms &cookparms) const
3904  {
3905  SOP_Node *thissop = cookparms.getNode();
3906  if (!thissop) return getRord();
3907  int64 result;
3908  OP_Utils::evalOpParm(result, thissop, "rOrd", cookparms.getCookTime(), 0);
3909  return Rord(result);
3910  }
3911  UT_Vector3D getT() const { return myT; }
3912  void setT(UT_Vector3D val) { myT = val; }
3913  UT_Vector3D opT(const SOP_NodeVerb::CookParms &cookparms) const
3914  {
3915  SOP_Node *thissop = cookparms.getNode();
3916  if (!thissop) return getT();
3918  OP_Utils::evalOpParm(result, thissop, "t", cookparms.getCookTime(), 0);
3919  return result;
3920  }
3921  UT_Vector3D getR() const { return myR; }
3922  void setR(UT_Vector3D val) { myR = val; }
3923  UT_Vector3D opR(const SOP_NodeVerb::CookParms &cookparms) const
3924  {
3925  SOP_Node *thissop = cookparms.getNode();
3926  if (!thissop) return getR();
3928  OP_Utils::evalOpParm(result, thissop, "r", cookparms.getCookTime(), 0);
3929  return result;
3930  }
3931  UT_Vector3D getS() const { return myS; }
3932  void setS(UT_Vector3D val) { myS = val; }
3933  UT_Vector3D opS(const SOP_NodeVerb::CookParms &cookparms) const
3934  {
3935  SOP_Node *thissop = cookparms.getNode();
3936  if (!thissop) return getS();
3938  OP_Utils::evalOpParm(result, thissop, "s", cookparms.getCookTime(), 0);
3939  return result;
3940  }
3941  UT_Vector3D getShear() const { return myShear; }
3942  void setShear(UT_Vector3D val) { myShear = val; }
3944  {
3945  SOP_Node *thissop = cookparms.getNode();
3946  if (!thissop) return getShear();
3948  OP_Utils::evalOpParm(result, thissop, "shear", cookparms.getCookTime(), 0);
3949  return result;
3950  }
3951  fpreal64 getScale() const { return myScale; }
3952  void setScale(fpreal64 val) { myScale = val; }
3953  fpreal64 opScale(const SOP_NodeVerb::CookParms &cookparms) const
3954  {
3955  SOP_Node *thissop = cookparms.getNode();
3956  if (!thissop) return getScale();
3957  fpreal64 result;
3958  OP_Utils::evalOpParm(result, thissop, "scale", cookparms.getCookTime(), 0);
3959  return result;
3960  }
3961  UT_Vector3D getP() const { return myP; }
3962  void setP(UT_Vector3D val) { myP = val; }
3963  UT_Vector3D opP(const SOP_NodeVerb::CookParms &cookparms) const
3964  {
3965  SOP_Node *thissop = cookparms.getNode();
3966  if (!thissop) return getP();
3968  OP_Utils::evalOpParm(result, thissop, "p", cookparms.getCookTime(), 0);
3969  return result;
3970  }
3971  UT_Vector3D getPr() const { return myPr; }
3972  void setPr(UT_Vector3D val) { myPr = val; }
3973  UT_Vector3D opPr(const SOP_NodeVerb::CookParms &cookparms) const
3974  {
3975  SOP_Node *thissop = cookparms.getNode();
3976  if (!thissop) return getPr();
3978  OP_Utils::evalOpParm(result, thissop, "pr", cookparms.getCookTime(), 0);
3979  return result;
3980  }
3981  UT_Vector4D getCamxform0() const { return myCamxform0; }
3982  void setCamxform0(UT_Vector4D val) { myCamxform0 = val; }
3984  {
3985  SOP_Node *thissop = cookparms.getNode();
3986  if (!thissop) return getCamxform0();
3988  OP_Utils::evalOpParm(result, thissop, "camxform0", cookparms.getCookTime(), 0);
3989  return result;
3990  }
3991  UT_Vector4D getCamxform1() const { return myCamxform1; }
3992  void setCamxform1(UT_Vector4D val) { myCamxform1 = val; }
3994  {
3995  SOP_Node *thissop = cookparms.getNode();
3996  if (!thissop) return getCamxform1();
3998  OP_Utils::evalOpParm(result, thissop, "camxform1", cookparms.getCookTime(), 0);
3999  return result;
4000  }
4001  UT_Vector4D getCamxform2() const { return myCamxform2; }
4002  void setCamxform2(UT_Vector4D val) { myCamxform2 = val; }
4004  {
4005  SOP_Node *thissop = cookparms.getNode();
4006  if (!thissop) return getCamxform2();
4008  OP_Utils::evalOpParm(result, thissop, "camxform2", cookparms.getCookTime(), 0);
4009  return result;
4010  }
4011  UT_Vector4D getCamxform3() const { return myCamxform3; }
4012  void setCamxform3(UT_Vector4D val) { myCamxform3 = val; }
4014  {
4015  SOP_Node *thissop = cookparms.getNode();
4016  if (!thissop) return getCamxform3();
4018  OP_Utils::evalOpParm(result, thissop, "camxform3", cookparms.getCookTime(), 0);
4019  return result;
4020  }
4021  UT_Vector3D getCampos() const { return myCampos; }
4022  void setCampos(UT_Vector3D val) { myCampos = val; }
4024  {
4025  SOP_Node *thissop = cookparms.getNode();
4026  if (!thissop) return getCampos();
4028  OP_Utils::evalOpParm(result, thissop, "campos", cookparms.getCookTime(), 0);
4029  return result;
4030  }
4031  UT_Vector2D getCursorpos() const { return myCursorpos; }
4032  void setCursorpos(UT_Vector2D val) { myCursorpos = val; }
4034  {
4035  SOP_Node *thissop = cookparms.getNode();
4036  if (!thissop) return getCursorpos();
4038  OP_Utils::evalOpParm(result, thissop, "cursorpos", cookparms.getCookTime(), 0);
4039  return result;
4040  }
4041  UT_Vector3D getCursordisplace() const { return myCursordisplace; }
4042  void setCursordisplace(UT_Vector3D val) { myCursordisplace = val; }
4044  {
4045  SOP_Node *thissop = cookparms.getNode();
4046  if (!thissop) return getCursordisplace();
4048  OP_Utils::evalOpParm(result, thissop, "cursordisplace", cookparms.getCookTime(), 0);
4049  return result;
4050  }
4051  UT_Vector3D getRaypos() const { return myRaypos; }
4052  void setRaypos(UT_Vector3D val) { myRaypos = val; }
4054  {
4055  SOP_Node *thissop = cookparms.getNode();
4056  if (!thissop) return getRaypos();
4058  OP_Utils::evalOpParm(result, thissop, "raypos", cookparms.getCookTime(), 0);
4059  return result;
4060  }
4061  UT_Vector3D getRaydir() const { return myRaydir; }
4062  void setRaydir(UT_Vector3D val) { myRaydir = val; }
4064  {
4065  SOP_Node *thissop = cookparms.getNode();
4066  if (!thissop) return getRaydir();
4068  OP_Utils::evalOpParm(result, thissop, "raydir", cookparms.getCookTime(), 0);
4069  return result;
4070  }
4071  fpreal64 getStrengthscale() const { return myStrengthscale; }
4072  void setStrengthscale(fpreal64 val) { myStrengthscale = val; }
4074  {
4075  SOP_Node *thissop = cookparms.getNode();
4076  if (!thissop) return getStrengthscale();
4077  fpreal64 result;
4078  OP_Utils::evalOpParm(result, thissop, "strengthscale", cookparms.getCookTime(), 0);
4079  return result;
4080  }
4081  Button getButton() const { return Button(myButton); }
4082  void setButton(Button val) { myButton = int64(val); }
4083  Button opButton(const SOP_NodeVerb::CookParms &cookparms) const
4084  {
4085  SOP_Node *thissop = cookparms.getNode();
4086  if (!thissop) return getButton();
4087  int64 result;
4088  OP_Utils::evalOpParm(result, thissop, "button", cookparms.getCookTime(), 0);
4089  return Button(result);
4090  }
4091  bool getShiftkey() const { return myShiftkey; }
4092  void setShiftkey(bool val) { myShiftkey = val; }
4093  bool opShiftkey(const SOP_NodeVerb::CookParms &cookparms) const
4094  {
4095  SOP_Node *thissop = cookparms.getNode();
4096  if (!thissop) return getShiftkey();
4097  bool result;
4098  OP_Utils::evalOpParm(result, thissop, "shiftkey", cookparms.getCookTime(), 0);
4099  return result;
4100  }
4101  bool getCtrlkey() const { return myCtrlkey; }
4102  void setCtrlkey(bool val) { myCtrlkey = val; }
4103  bool opCtrlkey(const SOP_NodeVerb::CookParms &cookparms) const
4104  {
4105  SOP_Node *thissop = cookparms.getNode();
4106  if (!thissop) return getCtrlkey();
4107  bool result;
4108  OP_Utils::evalOpParm(result, thissop, "ctrlkey", cookparms.getCookTime(), 0);
4109  return result;
4110  }
4111 
4112 private:
4113  UT_StringHolder myStashnode;
4114  UT_StringHolder myGroup;
4115  int64 myGrouptype;
4116  bool myUsemask;
4117  bool myMirrorbrush;
4118  bool myMirror;
4119  UT_StringHolder myMirrorgroup;
4120  UT_Vector3D myMirrororigin;
4121  UT_Vector3D myMirrordir;
4122  int64 myTool;
4123  fpreal64 myRaybias;
4124  bool myStrandmode;
4125  bool myCollidewithskin;
4126  bool myCreateorient;
4127  UT_StringHolder myOrientname;
4128  UT_Vector3D myOrientup;
4129  UT_StringHolder myOrientupattrib;
4130  bool myOrientupattribflip;
4131  UT_StringHolder myTemplatesourcegroup;
4132  bool myWidthoverride;
4133  fpreal64 myWidth;
4134  bool myBrushsurface;
4135  bool myUsepartinglines;
4136  fpreal64 myScreenradius;
4137  fpreal64 myObjectradius;
4138  fpreal64 mySoft;
4139  fpreal64 mySpacing;
4140  fpreal64 myDensity;
4141  fpreal64 myBrushmaintainlength;
4142  bool myBrushsnaptosurface;
4143  fpreal64 myBrushbend;
4144  fpreal64 myBrushbendfalloff;
4145  int64 myLiftmode;
4146  fpreal64 myLiftangle;
4147  int64 myAdjustlengthmode;
4148  fpreal64 myAdjustlengthvalue;
4149  fpreal64 myAdjustlengthlength;
4150  int64 myAdjustlengthmethod;
4151  bool myMoverotatewithskin;
4152  bool mySculptdoconstrain;
4153  bool mySculptlockroot;
4154  bool mySculptmaintainevensegments;
4155  fpreal64 mySmoothtargetsmoothness;
4156  bool mySmoothposition;
4157  bool mySmoothorient;
4158  bool myBlurinskinspace;
4159  bool myBlurperpoint;
4160  bool myBlurshape;
4161  bool myBlurlength;
4162  bool myBlurorient;
4163  int64 myCutmode;
4164  bool myClumpperpoint;
4165  int64 myPlantmode;
4166  bool myPlantinterpolateguides;
4167  bool myPlantinterpolaterelskin;
4168  bool myPlantinterpolateorient;
4169  int64 myPlanttemplatesource;
4170  fpreal64 myPlantlength;
4171  int64 myPlantsegcount;
4172  bool myDrawonskin;
4173  bool myDrawinterpolateorient;
4174  int64 myDrawtemplatesource;
4175  bool myDrawlimitlength;
4176  int64 myDrawcurvetype;
4177  int64 myDrawsegmode;
4178  int64 myDrawsegcount;
4179  fpreal64 myDrawseglength;
4180  int64 myOrientbrushupmode;
4181  bool myOrientbrushperpoint;
4182  bool myPainttemplateallowblending;
4183  int64 myEditactiveprim;
4184  bool myEditsoft;
4185  int64 myEditsoftmode;
4186  fpreal64 myEditcurvefrac;
4187  fpreal64 myEditcurvedist;
4188  int64 myResamplesegmode;
4189  int64 myResamplesegcount;
4190  fpreal64 myResampleseglength;
4191  fpreal64 myTwistangle;
4192  UT_SharedPtr<UT_Ramp> myCurvemaskramp;
4193  PRM_DataItemHandle myGroom;
4194  PRM_DataItemHandle myStrands;
4195  PRM_DataItemHandle myStrokes;
4196  bool myPreviewutil;
4197  bool myPaintmaskpoints;
4198  bool myGroupnewprims;
4199  bool myNamenewprims;
4200  UT_StringHolder myActivegroup;
4201  UT_StringHolder myNameattrib;
4202  UT_StringHolder myActivename;
4203  bool myOverridecolor;
4204  bool myColorbyname;
4205  UT_Vector3D myDefaultcolor;
4206  UT_Vector3D myTemplatecolor;
4207  int64 myColorseed;
4208  UT_Array<Folder_grouplist> myFolder_grouplist;
4209  int64 myXord;
4210  int64 myRord;
4211  UT_Vector3D myT;
4212  UT_Vector3D myR;
4213  UT_Vector3D myS;
4214  UT_Vector3D myShear;
4215  fpreal64 myScale;
4216  UT_Vector3D myP;
4217  UT_Vector3D myPr;
4218  UT_Vector4D myCamxform0;
4219  UT_Vector4D myCamxform1;
4220  UT_Vector4D myCamxform2;
4221  UT_Vector4D myCamxform3;
4222  UT_Vector3D myCampos;
4223  UT_Vector2D myCursorpos;
4224  UT_Vector3D myCursordisplace;
4225  UT_Vector3D myRaypos;
4226  UT_Vector3D myRaydir;
4227  fpreal64 myStrengthscale;
4228  int64 myButton;
4229  bool myShiftkey;
4230  bool myCtrlkey;
4231 
4232 };
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector3D &value) override
UT_Vector4D opCamxform1(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opActivegroup(const SOP_NodeVerb::CookParms &cookparms) const
void setOrientname(const UT_StringHolder &val)
Plantmode opPlantmode(const SOP_NodeVerb::CookParms &cookparms) const
void setActivename(const UT_StringHolder &val)
void setMirrororigin(UT_Vector3D val)
fpreal64 opSoft(const SOP_NodeVerb::CookParms &cookparms) const
void doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glcorearb.h:2540
static void loadData(UT_IStream &is, UT_SharedPtr< UT_Ramp > &v)
UT_StringHolder opStashnode(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, UT_Vector3I &v)
void setActivegroup(const UT_StringHolder &val)
fpreal64 opLiftangle(const SOP_NodeVerb::CookParms &cookparms) const
int int32
Definition: SYS_Types.h:39
SOP_Node * getNode() const
Definition: SOP_NodeVerb.h:347
static void loadData(UT_IStream &is, PRM_DataItemHandle &v)
void setAdjustlengthlength(fpreal64 val)
void setOrientbrushupmode(Orientbrushupmode val)
static void loadData(UT_IStream &is, fpreal64 &v)
bool opColorbyname(const SOP_NodeVerb::CookParms &cookparms) const
void setAdjustlengthmode(Adjustlengthmode val)
bool opPlantinterpolaterelskin(const SOP_NodeVerb::CookParms &cookparms) const
UT_Vector2D opCursorpos(const SOP_NodeVerb::CookParms &cookparms) const
void setBrushmaintainlength(fpreal64 val)
bool opPlantinterpolateorient(const SOP_NodeVerb::CookParms &cookparms) const
void
Definition: png.h:1083
Drawsegmode getDrawsegmode() const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix4D &value) override
exint bread(int32 *buffer, exint asize=1)
GLboolean * data
Definition: glcorearb.h:131
UT_SharedPtr< UT_Ramp > getCurvemaskramp() const
bool opMoverotatewithskin(const SOP_NodeVerb::CookParms &cookparms) const
GT_API const UT_StringHolder time
UT_StringHolder opGroup(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getActivegroup() const
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector4.h:493
bool opCollidewithskin(const SOP_NodeVerb::CookParms &cookparms) const
const GLdouble * v
Definition: glcorearb.h:837
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix2D &value) const override
UT_StringHolder opFolder_grouplist_groupname(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
fpreal getTime() const
Definition: OP_Context.h:62
fpreal64 opBrushbendfalloff(const SOP_NodeVerb::CookParms &cookparms) const
exint getNestNumParms(TempIndex idx) const override
UT_String makeQuotedString(char delimiter='\'', bool escape_nonprinting=false) const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix3D &value) override
const OP_Context & context() const
Definition: OP_NodeParms.h:97
UT_Vector3D getTemplatecolor() const
void setDefaultcolor(UT_Vector3D val)
const char * getNestParmName(TempIndex fieldnum) const override
bool operator!=(const SOP_GuideGroomCoreParms &src) const
UT_StringHolder opNameattrib(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
Drawsegmode opDrawsegmode(const SOP_NodeVerb::CookParms &cookparms) const
void setDrawsegmode(Drawsegmode val)
fpreal64 opObjectradius(const SOP_NodeVerb::CookParms &cookparms) const
static void saveData(std::ostream &os, PRM_DataItemHandle s)
SYS_FORCE_INLINE const char * buffer() const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector2D &value) override
bool opPlantinterpolateguides(const SOP_NodeVerb::CookParms &cookparms) const
int64 opFolder_grouplist_groupoptions(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
static void saveData(std::ostream &os, int64 v)
GLdouble s
Definition: glad.h:3009
static void loadData(UT_IStream &is, UT_Matrix2D &v)
GLuint GLsizei GLsizei * length
Definition: glcorearb.h:795
const UT_StringHolder & getTemplatesourcegroup() const
UT_StringHolder opOrientname(const SOP_NodeVerb::CookParms &cookparms) const
UT_SharedPtr< UT_Ramp > opCurvemaskramp(const SOP_NodeVerb::CookParms &cookparms) const
An output stream object that owns its own string buffer storage.
UT_Vector4D opCamxform2(const SOP_NodeVerb::CookParms &cookparms) const
UT_Vector4D opCamxform0(const SOP_NodeVerb::CookParms &cookparms) const
Planttemplatesource getPlanttemplatesource() const
UT_Vector3D opMirrordir(const SOP_NodeVerb::CookParms &cookparms) const
Button opButton(const SOP_NodeVerb::CookParms &cookparms) const
void save(std::ostream &os) const
void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
UT_Vector3D opOrientup(const SOP_NodeVerb::CookParms &cookparms) const
**But if you need a result
Definition: thread.h:613
fpreal64 opSmoothtargetsmoothness(const SOP_NodeVerb::CookParms &cookparms) const
UT_Vector3D opPr(const SOP_NodeVerb::CookParms &cookparms) const
void setCamxform1(UT_Vector4D val)
fpreal64 opSpacing(const SOP_NodeVerb::CookParms &cookparms) const
void setNestParmValue(TempIndex idx, TempIndex instance, const exint &value) override
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix2D &value) override
exint nodeIdx() const
Definition: OP_NodeParms.h:95
static PRM_DataItemHandle parseBinary(const char *type, UT_IStream &is)
static void loadData(UT_IStream &is, int64 &v)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
const UT_WorkBuffer & str()
Returns a read-only reference to the underlying UT_WorkBuffer.
UT_Vector3D opP(const SOP_NodeVerb::CookParms &cookparms) const
Drawcurvetype getDrawcurvetype() const
void setCurvemaskramp(UT_SharedPtr< UT_Ramp > val)
fpreal64 opDensity(const SOP_NodeVerb::CookParms &cookparms) const
UT_Vector3D getMirrororigin() const
fpreal64 opScreenradius(const SOP_NodeVerb::CookParms &cookparms) const
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector4.h:491
void setOrientupattrib(const UT_StringHolder &val)
bool opDrawinterpolateorient(const SOP_NodeVerb::CookParms &cookparms) const
bool opOverridecolor(const SOP_NodeVerb::CookParms &cookparms) const
ParmType getNestParmType(TempIndex fieldnum) const override
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix4D &value) const override
Adjustlengthmethod getAdjustlengthmethod() const
GLuint GLsizei const GLuint const GLintptr * offsets
Definition: glcorearb.h:2621
bool opBlurorient(const SOP_NodeVerb::CookParms &cookparms) const
Planttemplatesource opPlanttemplatesource(const SOP_NodeVerb::CookParms &cookparms) const
double fpreal64
Definition: SYS_Types.h:201
int64 opPlantsegcount(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, bool &v)
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector2.h:423
static void saveData(std::ostream &os, UT_Vector3D v)
UT_Vector3D opinstFolder_grouplist_groupcolor(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
UT_Vector3D opRaypos(const SOP_NodeVerb::CookParms &cookparms) const
bool operator==(const BaseDimensions< T > &a, const BaseDimensions< Y > &b)
Definition: Dimensions.h:137