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