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