HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
SOP_TangentField.proto.h
Go to the documentation of this file.
1 /* Automagically Generated by generate_proto.py
2  * Do not Edit
3  */
4 #pragma once
5 
6 #include <SOP/SOP_API.h>
7 #include <SOP/SOP_NodeVerb.h>
8 #include <SOP/SOP_GraphProxy.h>
9 
10 #include <OP/OP_Utils.h>
11 #include <PRM/PRM_Parm.h>
12 #include <UT/UT_IStream.h>
13 #include <UT/UT_NTStreamUtil.h>
14 #include <UT/UT_Ramp.h>
15 #include <UT/UT_SharedPtr.h>
16 #include <UT/UT_StringHolder.h>
17 #include <UT/UT_StringStream.h>
18 #include <UT/UT_VectorTypes.h>
19 #include <UT/UT_EnvControl.h>
20 #include <SYS/SYS_Types.h>
21 
22 class DEP_MicroNode;
23 namespace SOP_TangentFieldEnums
24 {
25  enum class Carrier
26  {
27  POINTS = 0,
28  FACES
29  };
30 
32  getToken(Carrier enum_value)
33  {
34  using namespace UT::Literal;
35  switch (enum_value) {
36  case Carrier::POINTS: return "points"_sh;
37  case Carrier::FACES: return "faces"_sh;
38  default: UT_ASSERT(false); return ""_sh;
39  }
40  }
41 
42  enum class BoundaryMode
43  {
44  ADD = 0,
45  OVER
46  };
47 
49  getToken(BoundaryMode enum_value)
50  {
51  using namespace UT::Literal;
52  switch (enum_value) {
53  case BoundaryMode::ADD: return "add"_sh;
54  case BoundaryMode::OVER: return "over"_sh;
55  default: UT_ASSERT(false); return ""_sh;
56  }
57  }
58 
59  enum class GuideMode
60  {
61  ADD = 0,
62  OVER
63  };
64 
66  getToken(GuideMode enum_value)
67  {
68  using namespace UT::Literal;
69  switch (enum_value) {
70  case GuideMode::ADD: return "add"_sh;
71  case GuideMode::OVER: return "over"_sh;
72  default: UT_ASSERT(false); return ""_sh;
73  }
74  }
75 
76  enum class OutputMode
77  {
78  ALL = 0,
79  SYMMETRY,
80  ONE
81  };
82 
84  getToken(OutputMode enum_value)
85  {
86  using namespace UT::Literal;
87  switch (enum_value) {
88  case OutputMode::ALL: return "all"_sh;
89  case OutputMode::SYMMETRY: return "symmetry"_sh;
90  case OutputMode::ONE: return "one"_sh;
91  default: UT_ASSERT(false); return ""_sh;
92  }
93  }
94 
95  enum class Fieldscalemode
96  {
97  PRESCALED = 0,
98  NORMALIZED,
99  NONE
100  };
101 
104  {
105  using namespace UT::Literal;
106  switch (enum_value) {
107  case Fieldscalemode::PRESCALED: return "prescaled"_sh;
108  case Fieldscalemode::NORMALIZED: return "normalized"_sh;
109  case Fieldscalemode::NONE: return "none"_sh;
110  default: UT_ASSERT(false); return ""_sh;
111  }
112  }
113 
114  enum class Guidescalemode
115  {
116  PRESCALED = 0,
117  NORMALIZED,
118  NONE
119  };
120 
123  {
124  using namespace UT::Literal;
125  switch (enum_value) {
126  case Guidescalemode::PRESCALED: return "prescaled"_sh;
127  case Guidescalemode::NORMALIZED: return "normalized"_sh;
128  case Guidescalemode::NONE: return "none"_sh;
129  default: UT_ASSERT(false); return ""_sh;
130  }
131  }
132 
133 }
134 
135 
137 {
138 public:
139  static int version() { return 1; }
140 
142  {
143  myGroup = ""_UTsh;
144  myCarrier = 0;
145  myDirections = 4;
146  myRotation = 0;
147  myGlobalWeight = 0.1;
148  myGlobalMask = ""_UTsh;
149  myCurvature = true;
150  myLocalCurvatureWeight = 1;
151  myCurvatureMaskAttrib = ""_UTsh;
152  myCurvatureRotation = 0;
153  myBoundary = true;
154  myBoundaryMode = 0;
155  myLocalBoundaryWeight = 1;
156  myBoundaryMaskAttrib = ""_UTsh;
157  myBoundaryRotation = 0;
158  myGuide = true;
159  myGuideMode = 0;
160  myLocalGuideWeight = 1;
161  myGuideMaskAttrib = ""_UTsh;
162  myGuideAttrib = ""_UTsh;
163  myFieldAttrib = "field"_UTsh;
164  myNormalizeField = true;
165  myOutputMode = 0;
166  myUseSingularGroup = false;
167  mySingularGroup = "singular"_UTsh;
168  myUsePositiveSingularGroup = false;
169  myPositiveSingularGroup = "positive_singular"_UTsh;
170  myUseNegativeSingularGroup = false;
171  myNegativeSingularGroup = "negative_singular"_UTsh;
172  myUseDiscontinuitiesGroup = false;
173  myDiscontinuities = "discontinuities"_UTsh;
174  myShowField = true;
175  myFieldscalemode = 0;
176  myFieldscale = 1;
177  myShowSingularities = true;
178  myShowGuides = false;
179  myGuidescalemode = 0;
180  myGuidescale = 1;
181 
182  }
183 
184  explicit SOP_TangentFieldParms(const SOP_TangentFieldParms &) = default;
186  SOP_TangentFieldParms(SOP_TangentFieldParms &&) noexcept = default;
187  SOP_TangentFieldParms &operator=(SOP_TangentFieldParms &&) noexcept = default;
188 
189  ~SOP_TangentFieldParms() override {}
190 
192  {
193  if (myGroup != src.myGroup) return false;
194  if (myCarrier != src.myCarrier) return false;
195  if (myDirections != src.myDirections) return false;
196  if (myRotation != src.myRotation) return false;
197  if (myGlobalWeight != src.myGlobalWeight) return false;
198  if (myGlobalMask != src.myGlobalMask) return false;
199  if (myCurvature != src.myCurvature) return false;
200  if (myLocalCurvatureWeight != src.myLocalCurvatureWeight) return false;
201  if (myCurvatureMaskAttrib != src.myCurvatureMaskAttrib) return false;
202  if (myCurvatureRotation != src.myCurvatureRotation) return false;
203  if (myBoundary != src.myBoundary) return false;
204  if (myBoundaryMode != src.myBoundaryMode) return false;
205  if (myLocalBoundaryWeight != src.myLocalBoundaryWeight) return false;
206  if (myBoundaryMaskAttrib != src.myBoundaryMaskAttrib) return false;
207  if (myBoundaryRotation != src.myBoundaryRotation) return false;
208  if (myGuide != src.myGuide) return false;
209  if (myGuideMode != src.myGuideMode) return false;
210  if (myLocalGuideWeight != src.myLocalGuideWeight) return false;
211  if (myGuideMaskAttrib != src.myGuideMaskAttrib) return false;
212  if (myGuideAttrib != src.myGuideAttrib) return false;
213  if (myFieldAttrib != src.myFieldAttrib) return false;
214  if (myNormalizeField != src.myNormalizeField) return false;
215  if (myOutputMode != src.myOutputMode) return false;
216  if (myUseSingularGroup != src.myUseSingularGroup) return false;
217  if (mySingularGroup != src.mySingularGroup) return false;
218  if (myUsePositiveSingularGroup != src.myUsePositiveSingularGroup) return false;
219  if (myPositiveSingularGroup != src.myPositiveSingularGroup) return false;
220  if (myUseNegativeSingularGroup != src.myUseNegativeSingularGroup) return false;
221  if (myNegativeSingularGroup != src.myNegativeSingularGroup) return false;
222  if (myUseDiscontinuitiesGroup != src.myUseDiscontinuitiesGroup) return false;
223  if (myDiscontinuities != src.myDiscontinuities) return false;
224  if (myShowField != src.myShowField) return false;
225  if (myFieldscalemode != src.myFieldscalemode) return false;
226  if (myFieldscale != src.myFieldscale) return false;
227  if (myShowSingularities != src.myShowSingularities) return false;
228  if (myShowGuides != src.myShowGuides) return false;
229  if (myGuidescalemode != src.myGuidescalemode) return false;
230  if (myGuidescale != src.myGuidescale) return false;
231 
232  return true;
233  }
235  {
236  return !operator==(src);
237  }
244 
245 
246 
247  void buildFromOp(const OP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
248  {
249  myGroup = ""_UTsh;
250  if (true)
251  graph->evalOpParm(myGroup, nodeidx, "group", time, 0);
252  myCarrier = 0;
253  if (true)
254  graph->evalOpParm(myCarrier, nodeidx, "carrier", time, 0);
255  myDirections = 4;
256  if (true)
257  graph->evalOpParm(myDirections, nodeidx, "directions", time, 0);
258  myRotation = 0;
259  if (true)
260  graph->evalOpParm(myRotation, nodeidx, "rotation", time, 0);
261  myGlobalWeight = 0.1;
262  if (true)
263  graph->evalOpParm(myGlobalWeight, nodeidx, "globalweight", time, 0);
264  myGlobalMask = ""_UTsh;
265  if (true)
266  graph->evalOpParm(myGlobalMask, nodeidx, "globalmask", time, 0);
267  myCurvature = true;
268  if (true && ( (true&&!(((int64(getDirections())==1)))) ) )
269  graph->evalOpParm(myCurvature, nodeidx, "curvature", time, 0);
270  myLocalCurvatureWeight = 1;
271  if (true && ( (true&&!(((getCurvature()==0))||((int64(getDirections())==1)))) ) )
272  graph->evalOpParm(myLocalCurvatureWeight, nodeidx, "localcurvatureweight", time, 0);
273  myCurvatureMaskAttrib = ""_UTsh;
274  if (true && ( (true&&!(((getCurvature()==0))||((int64(getDirections())==1)))) ) )
275  graph->evalOpParm(myCurvatureMaskAttrib, nodeidx, "curvaturemaskattrib", time, 0);
276  myCurvatureRotation = 0;
277  if (true && ( (true&&!(((getCurvature()==0))||((int64(getDirections())==1)))) ) )
278  graph->evalOpParm(myCurvatureRotation, nodeidx, "curvaturerotation", time, 0);
279  myBoundary = true;
280  if (true)
281  graph->evalOpParm(myBoundary, nodeidx, "boundary", time, 0);
282  myBoundaryMode = 0;
283  if (true && ( (true&&!(((getBoundary()==0)))) ) )
284  graph->evalOpParm(myBoundaryMode, nodeidx, "boundarymode", time, 0);
285  myLocalBoundaryWeight = 1;
286  if (true && ( (true&&!(((getBoundary()==0)))) ) )
287  graph->evalOpParm(myLocalBoundaryWeight, nodeidx, "localboundaryweight", time, 0);
288  myBoundaryMaskAttrib = ""_UTsh;
289  if (true && ( (true&&!(((getBoundary()==0)))) ) )
290  graph->evalOpParm(myBoundaryMaskAttrib, nodeidx, "boundarymaskattrib", time, 0);
291  myBoundaryRotation = 0;
292  if (true && ( (true&&!(((getBoundary()==0)))) ) )
293  graph->evalOpParm(myBoundaryRotation, nodeidx, "boundaryrotation", time, 0);
294  myGuide = true;
295  if (true)
296  graph->evalOpParm(myGuide, nodeidx, "guide", time, 0);
297  myGuideMode = 0;
298  if (true && ( (true&&!(((getGuide()==0)))) ) )
299  graph->evalOpParm(myGuideMode, nodeidx, "guidemode", time, 0);
300  myLocalGuideWeight = 1;
301  if (true && ( (true&&!(((getGuide()==0)))) ) )
302  graph->evalOpParm(myLocalGuideWeight, nodeidx, "localguideweight", time, 0);
303  myGuideMaskAttrib = ""_UTsh;
304  if (true && ( (true&&!(((getGuide()==0)))) ) )
305  graph->evalOpParm(myGuideMaskAttrib, nodeidx, "guidemaskattrib", time, 0);
306  myGuideAttrib = ""_UTsh;
307  if (true && ( (true&&!(((getGuide()==0)))) ) )
308  graph->evalOpParm(myGuideAttrib, nodeidx, "guideattrib", time, 0);
309  myFieldAttrib = "field"_UTsh;
310  if (true)
311  graph->evalOpParm(myFieldAttrib, nodeidx, "fieldattrib", time, 0);
312  myNormalizeField = true;
313  if (true)
314  graph->evalOpParm(myNormalizeField, nodeidx, "normalizefield", time, 0);
315  myOutputMode = 0;
316  if (true && ( (true&&!(((int64(getDirections())==1)))) ) )
317  graph->evalOpParm(myOutputMode, nodeidx, "outputmode", time, 0);
318  myUseSingularGroup = false;
319  if (true)
320  graph->evalOpParm(myUseSingularGroup, nodeidx, "usesingulargroup", time, 0);
321  mySingularGroup = "singular"_UTsh;
322  if (true && ( (true&&!(((getUseSingularGroup()==0)))) ) )
323  graph->evalOpParm(mySingularGroup, nodeidx, "singulargroup", time, 0);
324  myUsePositiveSingularGroup = false;
325  if (true)
326  graph->evalOpParm(myUsePositiveSingularGroup, nodeidx, "usepositivesingulargroup", time, 0);
327  myPositiveSingularGroup = "positive_singular"_UTsh;
328  if (true && ( (true&&!(((getUsePositiveSingularGroup()==0)))) ) )
329  graph->evalOpParm(myPositiveSingularGroup, nodeidx, "positivesingulargroup", time, 0);
330  myUseNegativeSingularGroup = false;
331  if (true)
332  graph->evalOpParm(myUseNegativeSingularGroup, nodeidx, "usenegativesingulargroup", time, 0);
333  myNegativeSingularGroup = "negative_singular"_UTsh;
334  if (true && ( (true&&!(((getUseNegativeSingularGroup()==0)))) ) )
335  graph->evalOpParm(myNegativeSingularGroup, nodeidx, "negativesingulargroup", time, 0);
336  myUseDiscontinuitiesGroup = false;
337  if (true)
338  graph->evalOpParm(myUseDiscontinuitiesGroup, nodeidx, "usediscontinuitiesgroup", time, 0);
339  myDiscontinuities = "discontinuities"_UTsh;
340  if (true && ( (true&&!(((getUseDiscontinuitiesGroup()==0)))) ) )
341  graph->evalOpParm(myDiscontinuities, nodeidx, "discontinuities", time, 0);
342  myShowField = true;
343  if (true)
344  graph->evalOpParm(myShowField, nodeidx, "showfield", time, 0);
345  myFieldscalemode = 0;
346  if (true && ( (true&&!(((getShowField()==0)))) ) )
347  graph->evalOpParm(myFieldscalemode, nodeidx, "fieldscalemode", time, 0);
348  myFieldscale = 1;
349  if (true && ( (true&&!(((int64(getFieldscalemode())==1))||((getShowField()==0)))) ) )
350  graph->evalOpParm(myFieldscale, nodeidx, "fieldscale", time, 0);
351  myShowSingularities = true;
352  if (true)
353  graph->evalOpParm(myShowSingularities, nodeidx, "showsingularities", time, 0);
354  myShowGuides = false;
355  if (true)
356  graph->evalOpParm(myShowGuides, nodeidx, "showguides", time, 0);
357  myGuidescalemode = 0;
358  if (true && ( (true&&!(((getShowGuides()==0)))) ) )
359  graph->evalOpParm(myGuidescalemode, nodeidx, "guidescalemode", time, 0);
360  myGuidescale = 1;
361  if (true && ( (true&&!(((getShowGuides()==0))||((int64(getGuidescalemode())==1)))) ) )
362  graph->evalOpParm(myGuidescale, nodeidx, "guidescale", time, 0);
363 
364  }
365 
366 
367  void loadFromOpSubclass(const LoadParms &loadparms) override
368  {
369  buildFromOp(loadparms.graph(), loadparms.nodeIdx(), loadparms.context().getTime(), loadparms.depnode());
370  }
371 
372 
373  void copyFrom(const OP_NodeParms *src) override
374  {
375  *this = *((const SOP_TangentFieldParms *)src);
376  }
377 
378  template <typename T>
379  void
380  doGetParmValue(TempIndex idx, TempIndex instance, T &value) const
381  {
382  if (idx.size() < 1)
383  return;
384  UT_ASSERT(idx.size() == instance.size()+1);
385  if (idx.size() != instance.size()+1)
386  return;
387  switch (idx[0])
388  {
389  case 0:
390  coerceValue(value, myGroup);
391  break;
392  case 1:
393  coerceValue(value, myCarrier);
394  break;
395  case 2:
396  coerceValue(value, myDirections);
397  break;
398  case 3:
399  coerceValue(value, myRotation);
400  break;
401  case 4:
402  coerceValue(value, myGlobalWeight);
403  break;
404  case 5:
405  coerceValue(value, myGlobalMask);
406  break;
407  case 6:
408  coerceValue(value, myCurvature);
409  break;
410  case 7:
411  coerceValue(value, myLocalCurvatureWeight);
412  break;
413  case 8:
414  coerceValue(value, myCurvatureMaskAttrib);
415  break;
416  case 9:
417  coerceValue(value, myCurvatureRotation);
418  break;
419  case 10:
420  coerceValue(value, myBoundary);
421  break;
422  case 11:
423  coerceValue(value, myBoundaryMode);
424  break;
425  case 12:
426  coerceValue(value, myLocalBoundaryWeight);
427  break;
428  case 13:
429  coerceValue(value, myBoundaryMaskAttrib);
430  break;
431  case 14:
432  coerceValue(value, myBoundaryRotation);
433  break;
434  case 15:
435  coerceValue(value, myGuide);
436  break;
437  case 16:
438  coerceValue(value, myGuideMode);
439  break;
440  case 17:
441  coerceValue(value, myLocalGuideWeight);
442  break;
443  case 18:
444  coerceValue(value, myGuideMaskAttrib);
445  break;
446  case 19:
447  coerceValue(value, myGuideAttrib);
448  break;
449  case 20:
450  coerceValue(value, myFieldAttrib);
451  break;
452  case 21:
453  coerceValue(value, myNormalizeField);
454  break;
455  case 22:
456  coerceValue(value, myOutputMode);
457  break;
458  case 23:
459  coerceValue(value, myUseSingularGroup);
460  break;
461  case 24:
462  coerceValue(value, mySingularGroup);
463  break;
464  case 25:
465  coerceValue(value, myUsePositiveSingularGroup);
466  break;
467  case 26:
468  coerceValue(value, myPositiveSingularGroup);
469  break;
470  case 27:
471  coerceValue(value, myUseNegativeSingularGroup);
472  break;
473  case 28:
474  coerceValue(value, myNegativeSingularGroup);
475  break;
476  case 29:
477  coerceValue(value, myUseDiscontinuitiesGroup);
478  break;
479  case 30:
480  coerceValue(value, myDiscontinuities);
481  break;
482  case 31:
483  coerceValue(value, myShowField);
484  break;
485  case 32:
486  coerceValue(value, myFieldscalemode);
487  break;
488  case 33:
489  coerceValue(value, myFieldscale);
490  break;
491  case 34:
492  coerceValue(value, myShowSingularities);
493  break;
494  case 35:
495  coerceValue(value, myShowGuides);
496  break;
497  case 36:
498  coerceValue(value, myGuidescalemode);
499  break;
500  case 37:
501  coerceValue(value, myGuidescale);
502  break;
503 
504  }
505  }
506 
507  bool isParmColorRamp(exint idx) const override
508  {
509  switch (idx)
510  {
511 
512  }
513  return false;
514  }
515 
516  void getNestParmValue(TempIndex idx, TempIndex instance, exint &value) const override
517  { doGetParmValue(idx, instance, value); }
518  void getNestParmValue(TempIndex idx, TempIndex instance, fpreal &value) const override
519  { doGetParmValue(idx, instance, value); }
520  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector2D &value) const override
521  { doGetParmValue(idx, instance, value); }
522  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector3D &value) const override
523  { doGetParmValue(idx, instance, value); }
524  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector4D &value) const override
525  { doGetParmValue(idx, instance, value); }
526  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix2D &value) const override
527  { doGetParmValue(idx, instance, value); }
528  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
529  { doGetParmValue(idx, instance, value); }
530  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix4D &value) const override
531  { doGetParmValue(idx, instance, value); }
532  void getNestParmValue(TempIndex idx, TempIndex instance, UT_StringHolder &value) const override
533  { doGetParmValue(idx, instance, value); }
534  void getNestParmValue(TempIndex idx, TempIndex instance, UT_SharedPtr<UT_Ramp> &value) const override
535  { doGetParmValue(idx, instance, value); }
536  void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
537  { doGetParmValue(idx, instance, value); }
538 
539  template <typename T>
540  void
541  doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
542  {
543  if (idx.size() < 1)
544  return;
545  UT_ASSERT(idx.size() == instance.size()+1);
546  if (idx.size() != instance.size()+1)
547  return;
548  switch (idx[0])
549  {
550  case 0:
551  coerceValue(myGroup, ( ( value ) ));
552  break;
553  case 1:
554  coerceValue(myCarrier, clampMinValue(0, clampMaxValue(1, value ) ));
555  break;
556  case 2:
557  coerceValue(myDirections, ( clampMaxValue(8, value ) ));
558  break;
559  case 3:
560  coerceValue(myRotation, ( ( value ) ));
561  break;
562  case 4:
563  coerceValue(myGlobalWeight, clampMinValue(0, ( value ) ));
564  break;
565  case 5:
566  coerceValue(myGlobalMask, ( ( value ) ));
567  break;
568  case 6:
569  coerceValue(myCurvature, ( ( value ) ));
570  break;
571  case 7:
572  coerceValue(myLocalCurvatureWeight, clampMinValue(0, ( value ) ));
573  break;
574  case 8:
575  coerceValue(myCurvatureMaskAttrib, ( ( value ) ));
576  break;
577  case 9:
578  coerceValue(myCurvatureRotation, ( ( value ) ));
579  break;
580  case 10:
581  coerceValue(myBoundary, ( ( value ) ));
582  break;
583  case 11:
584  coerceValue(myBoundaryMode, clampMinValue(0, clampMaxValue(1, value ) ));
585  break;
586  case 12:
587  coerceValue(myLocalBoundaryWeight, clampMinValue(0, ( value ) ));
588  break;
589  case 13:
590  coerceValue(myBoundaryMaskAttrib, ( ( value ) ));
591  break;
592  case 14:
593  coerceValue(myBoundaryRotation, ( ( value ) ));
594  break;
595  case 15:
596  coerceValue(myGuide, ( ( value ) ));
597  break;
598  case 16:
599  coerceValue(myGuideMode, clampMinValue(0, clampMaxValue(1, value ) ));
600  break;
601  case 17:
602  coerceValue(myLocalGuideWeight, clampMinValue(0, ( value ) ));
603  break;
604  case 18:
605  coerceValue(myGuideMaskAttrib, ( ( value ) ));
606  break;
607  case 19:
608  coerceValue(myGuideAttrib, ( ( value ) ));
609  break;
610  case 20:
611  coerceValue(myFieldAttrib, ( ( value ) ));
612  break;
613  case 21:
614  coerceValue(myNormalizeField, ( ( value ) ));
615  break;
616  case 22:
617  coerceValue(myOutputMode, clampMinValue(0, clampMaxValue(2, value ) ));
618  break;
619  case 23:
620  coerceValue(myUseSingularGroup, ( ( value ) ));
621  break;
622  case 24:
623  coerceValue(mySingularGroup, ( ( value ) ));
624  break;
625  case 25:
626  coerceValue(myUsePositiveSingularGroup, ( ( value ) ));
627  break;
628  case 26:
629  coerceValue(myPositiveSingularGroup, ( ( value ) ));
630  break;
631  case 27:
632  coerceValue(myUseNegativeSingularGroup, ( ( value ) ));
633  break;
634  case 28:
635  coerceValue(myNegativeSingularGroup, ( ( value ) ));
636  break;
637  case 29:
638  coerceValue(myUseDiscontinuitiesGroup, ( ( value ) ));
639  break;
640  case 30:
641  coerceValue(myDiscontinuities, ( ( value ) ));
642  break;
643  case 31:
644  coerceValue(myShowField, ( ( value ) ));
645  break;
646  case 32:
647  coerceValue(myFieldscalemode, clampMinValue(0, clampMaxValue(2, value ) ));
648  break;
649  case 33:
650  coerceValue(myFieldscale, clampMinValue(0, ( value ) ));
651  break;
652  case 34:
653  coerceValue(myShowSingularities, ( ( value ) ));
654  break;
655  case 35:
656  coerceValue(myShowGuides, ( ( value ) ));
657  break;
658  case 36:
659  coerceValue(myGuidescalemode, clampMinValue(0, clampMaxValue(2, value ) ));
660  break;
661  case 37:
662  coerceValue(myGuidescale, clampMinValue(0, ( value ) ));
663  break;
664 
665  }
666  }
667 
668  void setNestParmValue(TempIndex idx, TempIndex instance, const exint &value) override
669  { doSetParmValue(idx, instance, value); }
670  void setNestParmValue(TempIndex idx, TempIndex instance, const fpreal &value) override
671  { doSetParmValue(idx, instance, value); }
672  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector2D &value) override
673  { doSetParmValue(idx, instance, value); }
674  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector3D &value) override
675  { doSetParmValue(idx, instance, value); }
676  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector4D &value) override
677  { doSetParmValue(idx, instance, value); }
678  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix2D &value) override
679  { doSetParmValue(idx, instance, value); }
680  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix3D &value) override
681  { doSetParmValue(idx, instance, value); }
682  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix4D &value) override
683  { doSetParmValue(idx, instance, value); }
684  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_StringHolder &value) override
685  { doSetParmValue(idx, instance, value); }
686  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_SharedPtr<UT_Ramp> &value) override
687  { doSetParmValue(idx, instance, value); }
688  void setNestParmValue(TempIndex idx, TempIndex instance, const PRM_DataItemHandle &value) override
689  { doSetParmValue(idx, instance, value); }
690 
691  exint getNestNumParms(TempIndex idx) const override
692  {
693  if (idx.size() == 0)
694  return 38;
695  switch (idx[0])
696  {
697 
698  }
699  // Invalid
700  return 0;
701  }
702 
703  const char *getNestParmName(TempIndex fieldnum) const override
704  {
705  if (fieldnum.size() < 1)
706  return 0;
707  switch (fieldnum[0])
708  {
709  case 0:
710  return "group";
711  case 1:
712  return "carrier";
713  case 2:
714  return "directions";
715  case 3:
716  return "rotation";
717  case 4:
718  return "globalweight";
719  case 5:
720  return "globalmask";
721  case 6:
722  return "curvature";
723  case 7:
724  return "localcurvatureweight";
725  case 8:
726  return "curvaturemaskattrib";
727  case 9:
728  return "curvaturerotation";
729  case 10:
730  return "boundary";
731  case 11:
732  return "boundarymode";
733  case 12:
734  return "localboundaryweight";
735  case 13:
736  return "boundarymaskattrib";
737  case 14:
738  return "boundaryrotation";
739  case 15:
740  return "guide";
741  case 16:
742  return "guidemode";
743  case 17:
744  return "localguideweight";
745  case 18:
746  return "guidemaskattrib";
747  case 19:
748  return "guideattrib";
749  case 20:
750  return "fieldattrib";
751  case 21:
752  return "normalizefield";
753  case 22:
754  return "outputmode";
755  case 23:
756  return "usesingulargroup";
757  case 24:
758  return "singulargroup";
759  case 25:
760  return "usepositivesingulargroup";
761  case 26:
762  return "positivesingulargroup";
763  case 27:
764  return "usenegativesingulargroup";
765  case 28:
766  return "negativesingulargroup";
767  case 29:
768  return "usediscontinuitiesgroup";
769  case 30:
770  return "discontinuities";
771  case 31:
772  return "showfield";
773  case 32:
774  return "fieldscalemode";
775  case 33:
776  return "fieldscale";
777  case 34:
778  return "showsingularities";
779  case 35:
780  return "showguides";
781  case 36:
782  return "guidescalemode";
783  case 37:
784  return "guidescale";
785 
786  }
787  return 0;
788  }
789 
790  ParmType getNestParmType(TempIndex fieldnum) const override
791  {
792  if (fieldnum.size() < 1)
793  return PARM_UNSUPPORTED;
794  switch (fieldnum[0])
795  {
796  case 0:
797  return PARM_STRING;
798  case 1:
799  return PARM_INTEGER;
800  case 2:
801  return PARM_INTEGER;
802  case 3:
803  return PARM_FLOAT;
804  case 4:
805  return PARM_FLOAT;
806  case 5:
807  return PARM_STRING;
808  case 6:
809  return PARM_INTEGER;
810  case 7:
811  return PARM_FLOAT;
812  case 8:
813  return PARM_STRING;
814  case 9:
815  return PARM_FLOAT;
816  case 10:
817  return PARM_INTEGER;
818  case 11:
819  return PARM_INTEGER;
820  case 12:
821  return PARM_FLOAT;
822  case 13:
823  return PARM_STRING;
824  case 14:
825  return PARM_FLOAT;
826  case 15:
827  return PARM_INTEGER;
828  case 16:
829  return PARM_INTEGER;
830  case 17:
831  return PARM_FLOAT;
832  case 18:
833  return PARM_STRING;
834  case 19:
835  return PARM_STRING;
836  case 20:
837  return PARM_STRING;
838  case 21:
839  return PARM_INTEGER;
840  case 22:
841  return PARM_INTEGER;
842  case 23:
843  return PARM_INTEGER;
844  case 24:
845  return PARM_STRING;
846  case 25:
847  return PARM_INTEGER;
848  case 26:
849  return PARM_STRING;
850  case 27:
851  return PARM_INTEGER;
852  case 28:
853  return PARM_STRING;
854  case 29:
855  return PARM_INTEGER;
856  case 30:
857  return PARM_STRING;
858  case 31:
859  return PARM_INTEGER;
860  case 32:
861  return PARM_INTEGER;
862  case 33:
863  return PARM_FLOAT;
864  case 34:
865  return PARM_INTEGER;
866  case 35:
867  return PARM_INTEGER;
868  case 36:
869  return PARM_INTEGER;
870  case 37:
871  return PARM_FLOAT;
872 
873  }
874  return PARM_UNSUPPORTED;
875  }
876 
877  // Boiler plate to load individual types.
878  static void loadData(UT_IStream &is, int64 &v)
879  { is.bread(&v, 1); }
880  static void loadData(UT_IStream &is, bool &v)
881  { int64 iv; is.bread(&iv, 1); v = iv; }
882  static void loadData(UT_IStream &is, fpreal64 &v)
883  { is.bread<fpreal64>(&v, 1); }
884  static void loadData(UT_IStream &is, UT_Vector2D &v)
885  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1); }
886  static void loadData(UT_IStream &is, UT_Vector3D &v)
887  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
888  is.bread<fpreal64>(&v.z(), 1); }
889  static void loadData(UT_IStream &is, UT_Vector4D &v)
890  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
891  is.bread<fpreal64>(&v.z(), 1); is.bread<fpreal64>(&v.w(), 1); }
892  static void loadData(UT_IStream &is, UT_Matrix2D &v)
893  { for (int r = 0; r < 2; r++) for (int c = 0; c < 2; c++) is.bread<fpreal64>(&v(r, c), 1); }
894  static void loadData(UT_IStream &is, UT_Matrix3D &v)
895  { for (int r = 0; r < 3; r++) for (int c = 0; c < 3; c++) is.bread<fpreal64>(&v(r, c), 1); }
896  static void loadData(UT_IStream &is, UT_Matrix4D &v)
897  { for (int r = 0; r < 4; r++) for (int c = 0; c < 4; c++) is.bread<fpreal64>(&v(r, c), 1); }
898  static void loadData(UT_IStream &is, UT_Vector2I &v)
899  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1); }
900  static void loadData(UT_IStream &is, UT_Vector3I &v)
901  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
902  is.bread<int64>(&v.z(), 1); }
903  static void loadData(UT_IStream &is, UT_Vector4I &v)
904  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
905  is.bread<int64>(&v.z(), 1); is.bread<int64>(&v.w(), 1); }
907  { is.bread(v); }
909  { UT_StringHolder rampdata;
910  loadData(is, rampdata);
911  if (rampdata.isstring())
912  {
913  v.reset(new UT_Ramp());
914  UT_IStream istr((const char *) rampdata, rampdata.length(), UT_ISTREAM_ASCII);
915  v->load(istr);
916  }
917  else v.reset();
918  }
921  loadData(is, data);
922  if (data.isstring())
923  {
924  // Find the data type.
925  const char *colon = UT_StringWrap(data).findChar(':');
926  if (colon)
927  {
928  int typelen = colon - data.buffer();
930  type.strncpy(data.buffer(), typelen);
931  UT_IStream istr(((const char *) data) + typelen + 1, data.length() - (typelen + 1), UT_ISTREAM_BINARY);
932 
933  v = PRM_DataFactory::parseBinary(type.buffer(), istr);
934  }
935  }
936  else v.reset();
937  }
938 
939  static void saveData(std::ostream &os, int64 v)
940  { UTwrite(os, &v); }
941  static void saveData(std::ostream &os, bool v)
942  { int64 iv = v; UTwrite(os, &iv); }
943  static void saveData(std::ostream &os, fpreal64 v)
944  { UTwrite<fpreal64>(os, &v); }
945  static void saveData(std::ostream &os, UT_Vector2D v)
946  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y()); }
947  static void saveData(std::ostream &os, UT_Vector3D v)
948  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
949  UTwrite<fpreal64>(os, &v.z()); }
950  static void saveData(std::ostream &os, UT_Vector4D v)
951  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
952  UTwrite<fpreal64>(os, &v.z()); UTwrite<fpreal64>(os, &v.w()); }
953  static void saveData(std::ostream &os, UT_Matrix2D v)
955  static void saveData(std::ostream &os, UT_Matrix3D v)
957  static void saveData(std::ostream &os, UT_Matrix4D v)
959  static void saveData(std::ostream &os, UT_StringHolder s)
960  { UT_StringWrap(s).saveBinary(os); }
961  static void saveData(std::ostream &os, UT_SharedPtr<UT_Ramp> s)
963  UT_OStringStream ostr;
964  if (s) s->save(ostr);
965  result = ostr.str();
966  saveData(os, result);
967  }
968  static void saveData(std::ostream &os, PRM_DataItemHandle s)
970  UT_OStringStream ostr;
971  if (s)
972  {
973  ostr << s->getDataTypeToken();
974  ostr << ":";
975  s->saveBinary(ostr);
976  }
977  result = ostr.str();
978  saveData(os, result);
979  }
980 
981 
982  void save(std::ostream &os) const
983  {
984  int32 v = version();
985  UTwrite(os, &v);
986  saveData(os, myGroup);
987  saveData(os, myCarrier);
988  saveData(os, myDirections);
989  saveData(os, myRotation);
990  saveData(os, myGlobalWeight);
991  saveData(os, myGlobalMask);
992  saveData(os, myCurvature);
993  saveData(os, myLocalCurvatureWeight);
994  saveData(os, myCurvatureMaskAttrib);
995  saveData(os, myCurvatureRotation);
996  saveData(os, myBoundary);
997  saveData(os, myBoundaryMode);
998  saveData(os, myLocalBoundaryWeight);
999  saveData(os, myBoundaryMaskAttrib);
1000  saveData(os, myBoundaryRotation);
1001  saveData(os, myGuide);
1002  saveData(os, myGuideMode);
1003  saveData(os, myLocalGuideWeight);
1004  saveData(os, myGuideMaskAttrib);
1005  saveData(os, myGuideAttrib);
1006  saveData(os, myFieldAttrib);
1007  saveData(os, myNormalizeField);
1008  saveData(os, myOutputMode);
1009  saveData(os, myUseSingularGroup);
1010  saveData(os, mySingularGroup);
1011  saveData(os, myUsePositiveSingularGroup);
1012  saveData(os, myPositiveSingularGroup);
1013  saveData(os, myUseNegativeSingularGroup);
1014  saveData(os, myNegativeSingularGroup);
1015  saveData(os, myUseDiscontinuitiesGroup);
1016  saveData(os, myDiscontinuities);
1017  saveData(os, myShowField);
1018  saveData(os, myFieldscalemode);
1019  saveData(os, myFieldscale);
1020  saveData(os, myShowSingularities);
1021  saveData(os, myShowGuides);
1022  saveData(os, myGuidescalemode);
1023  saveData(os, myGuidescale);
1024 
1025  }
1026 
1027  bool load(UT_IStream &is)
1028  {
1029  int32 v;
1030  is.bread(&v, 1);
1031  if (version() != v)
1032  {
1033  // Fail incompatible versions
1034  return false;
1035  }
1036  loadData(is, myGroup);
1037  loadData(is, myCarrier);
1038  loadData(is, myDirections);
1039  loadData(is, myRotation);
1040  loadData(is, myGlobalWeight);
1041  loadData(is, myGlobalMask);
1042  loadData(is, myCurvature);
1043  loadData(is, myLocalCurvatureWeight);
1044  loadData(is, myCurvatureMaskAttrib);
1045  loadData(is, myCurvatureRotation);
1046  loadData(is, myBoundary);
1047  loadData(is, myBoundaryMode);
1048  loadData(is, myLocalBoundaryWeight);
1049  loadData(is, myBoundaryMaskAttrib);
1050  loadData(is, myBoundaryRotation);
1051  loadData(is, myGuide);
1052  loadData(is, myGuideMode);
1053  loadData(is, myLocalGuideWeight);
1054  loadData(is, myGuideMaskAttrib);
1055  loadData(is, myGuideAttrib);
1056  loadData(is, myFieldAttrib);
1057  loadData(is, myNormalizeField);
1058  loadData(is, myOutputMode);
1059  loadData(is, myUseSingularGroup);
1060  loadData(is, mySingularGroup);
1061  loadData(is, myUsePositiveSingularGroup);
1062  loadData(is, myPositiveSingularGroup);
1063  loadData(is, myUseNegativeSingularGroup);
1064  loadData(is, myNegativeSingularGroup);
1065  loadData(is, myUseDiscontinuitiesGroup);
1066  loadData(is, myDiscontinuities);
1067  loadData(is, myShowField);
1068  loadData(is, myFieldscalemode);
1069  loadData(is, myFieldscale);
1070  loadData(is, myShowSingularities);
1071  loadData(is, myShowGuides);
1072  loadData(is, myGuidescalemode);
1073  loadData(is, myGuidescale);
1074 
1075  return true;
1076  }
1077 
1078  const UT_StringHolder & getGroup() const { return myGroup; }
1079  void setGroup(const UT_StringHolder & val) { myGroup = val; }
1081  {
1082  SOP_Node *thissop = cookparms.getNode();
1083  if (!thissop) return getGroup();
1085  OP_Utils::evalOpParm(result, thissop, "group", cookparms.getCookTime(), 0);
1086  return result;
1087  }
1088  Carrier getCarrier() const { return Carrier(myCarrier); }
1089  void setCarrier(Carrier val) { myCarrier = int64(val); }
1091  {
1092  SOP_Node *thissop = cookparms.getNode();
1093  if (!thissop) return getCarrier();
1094  int64 result;
1095  OP_Utils::evalOpParm(result, thissop, "carrier", cookparms.getCookTime(), 0);
1096  return Carrier(result);
1097  }
1098  int64 getDirections() const { return myDirections; }
1099  void setDirections(int64 val) { myDirections = val; }
1101  {
1102  SOP_Node *thissop = cookparms.getNode();
1103  if (!thissop) return getDirections();
1104  int64 result;
1105  OP_Utils::evalOpParm(result, thissop, "directions", cookparms.getCookTime(), 0);
1106  return result;
1107  }
1108  fpreal64 getRotation() const { return myRotation; }
1109  void setRotation(fpreal64 val) { myRotation = val; }
1111  {
1112  SOP_Node *thissop = cookparms.getNode();
1113  if (!thissop) return getRotation();
1114  fpreal64 result;
1115  OP_Utils::evalOpParm(result, thissop, "rotation", cookparms.getCookTime(), 0);
1116  return result;
1117  }
1118  fpreal64 getGlobalWeight() const { return myGlobalWeight; }
1119  void setGlobalWeight(fpreal64 val) { myGlobalWeight = val; }
1121  {
1122  SOP_Node *thissop = cookparms.getNode();
1123  if (!thissop) return getGlobalWeight();
1124  fpreal64 result;
1125  OP_Utils::evalOpParm(result, thissop, "globalweight", cookparms.getCookTime(), 0);
1126  return result;
1127  }
1128  const UT_StringHolder & getGlobalMask() const { return myGlobalMask; }
1129  void setGlobalMask(const UT_StringHolder & val) { myGlobalMask = val; }
1131  {
1132  SOP_Node *thissop = cookparms.getNode();
1133  if (!thissop) return getGlobalMask();
1135  OP_Utils::evalOpParm(result, thissop, "globalmask", cookparms.getCookTime(), 0);
1136  return result;
1137  }
1138  bool getCurvature() const { return myCurvature; }
1139  void setCurvature(bool val) { myCurvature = val; }
1140  bool opCurvature(const SOP_NodeVerb::CookParms &cookparms) const
1141  {
1142  SOP_Node *thissop = cookparms.getNode();
1143  if (!thissop) return getCurvature();
1144  bool result;
1145  OP_Utils::evalOpParm(result, thissop, "curvature", cookparms.getCookTime(), 0);
1146  return result;
1147  }
1148  fpreal64 getLocalCurvatureWeight() const { return myLocalCurvatureWeight; }
1149  void setLocalCurvatureWeight(fpreal64 val) { myLocalCurvatureWeight = val; }
1151  {
1152  SOP_Node *thissop = cookparms.getNode();
1153  if (!thissop) return getLocalCurvatureWeight();
1154  fpreal64 result;
1155  OP_Utils::evalOpParm(result, thissop, "localcurvatureweight", cookparms.getCookTime(), 0);
1156  return result;
1157  }
1158  const UT_StringHolder & getCurvatureMaskAttrib() const { return myCurvatureMaskAttrib; }
1159  void setCurvatureMaskAttrib(const UT_StringHolder & val) { myCurvatureMaskAttrib = val; }
1161  {
1162  SOP_Node *thissop = cookparms.getNode();
1163  if (!thissop) return getCurvatureMaskAttrib();
1165  OP_Utils::evalOpParm(result, thissop, "curvaturemaskattrib", cookparms.getCookTime(), 0);
1166  return result;
1167  }
1168  fpreal64 getCurvatureRotation() const { return myCurvatureRotation; }
1169  void setCurvatureRotation(fpreal64 val) { myCurvatureRotation = val; }
1171  {
1172  SOP_Node *thissop = cookparms.getNode();
1173  if (!thissop) return getCurvatureRotation();
1174  fpreal64 result;
1175  OP_Utils::evalOpParm(result, thissop, "curvaturerotation", cookparms.getCookTime(), 0);
1176  return result;
1177  }
1178  bool getBoundary() const { return myBoundary; }
1179  void setBoundary(bool val) { myBoundary = val; }
1180  bool opBoundary(const SOP_NodeVerb::CookParms &cookparms) const
1181  {
1182  SOP_Node *thissop = cookparms.getNode();
1183  if (!thissop) return getBoundary();
1184  bool result;
1185  OP_Utils::evalOpParm(result, thissop, "boundary", cookparms.getCookTime(), 0);
1186  return result;
1187  }
1188  BoundaryMode getBoundaryMode() const { return BoundaryMode(myBoundaryMode); }
1189  void setBoundaryMode(BoundaryMode val) { myBoundaryMode = int64(val); }
1191  {
1192  SOP_Node *thissop = cookparms.getNode();
1193  if (!thissop) return getBoundaryMode();
1194  int64 result;
1195  OP_Utils::evalOpParm(result, thissop, "boundarymode", cookparms.getCookTime(), 0);
1196  return BoundaryMode(result);
1197  }
1198  fpreal64 getLocalBoundaryWeight() const { return myLocalBoundaryWeight; }
1199  void setLocalBoundaryWeight(fpreal64 val) { myLocalBoundaryWeight = val; }
1201  {
1202  SOP_Node *thissop = cookparms.getNode();
1203  if (!thissop) return getLocalBoundaryWeight();
1204  fpreal64 result;
1205  OP_Utils::evalOpParm(result, thissop, "localboundaryweight", cookparms.getCookTime(), 0);
1206  return result;
1207  }
1208  const UT_StringHolder & getBoundaryMaskAttrib() const { return myBoundaryMaskAttrib; }
1209  void setBoundaryMaskAttrib(const UT_StringHolder & val) { myBoundaryMaskAttrib = val; }
1211  {
1212  SOP_Node *thissop = cookparms.getNode();
1213  if (!thissop) return getBoundaryMaskAttrib();
1215  OP_Utils::evalOpParm(result, thissop, "boundarymaskattrib", cookparms.getCookTime(), 0);
1216  return result;
1217  }
1218  fpreal64 getBoundaryRotation() const { return myBoundaryRotation; }
1219  void setBoundaryRotation(fpreal64 val) { myBoundaryRotation = val; }
1221  {
1222  SOP_Node *thissop = cookparms.getNode();
1223  if (!thissop) return getBoundaryRotation();
1224  fpreal64 result;
1225  OP_Utils::evalOpParm(result, thissop, "boundaryrotation", cookparms.getCookTime(), 0);
1226  return result;
1227  }
1228  bool getGuide() const { return myGuide; }
1229  void setGuide(bool val) { myGuide = val; }
1230  bool opGuide(const SOP_NodeVerb::CookParms &cookparms) const
1231  {
1232  SOP_Node *thissop = cookparms.getNode();
1233  if (!thissop) return getGuide();
1234  bool result;
1235  OP_Utils::evalOpParm(result, thissop, "guide", cookparms.getCookTime(), 0);
1236  return result;
1237  }
1238  GuideMode getGuideMode() const { return GuideMode(myGuideMode); }
1239  void setGuideMode(GuideMode val) { myGuideMode = int64(val); }
1241  {
1242  SOP_Node *thissop = cookparms.getNode();
1243  if (!thissop) return getGuideMode();
1244  int64 result;
1245  OP_Utils::evalOpParm(result, thissop, "guidemode", cookparms.getCookTime(), 0);
1246  return GuideMode(result);
1247  }
1248  fpreal64 getLocalGuideWeight() const { return myLocalGuideWeight; }
1249  void setLocalGuideWeight(fpreal64 val) { myLocalGuideWeight = val; }
1251  {
1252  SOP_Node *thissop = cookparms.getNode();
1253  if (!thissop) return getLocalGuideWeight();
1254  fpreal64 result;
1255  OP_Utils::evalOpParm(result, thissop, "localguideweight", cookparms.getCookTime(), 0);
1256  return result;
1257  }
1258  const UT_StringHolder & getGuideMaskAttrib() const { return myGuideMaskAttrib; }
1259  void setGuideMaskAttrib(const UT_StringHolder & val) { myGuideMaskAttrib = val; }
1261  {
1262  SOP_Node *thissop = cookparms.getNode();
1263  if (!thissop) return getGuideMaskAttrib();
1265  OP_Utils::evalOpParm(result, thissop, "guidemaskattrib", cookparms.getCookTime(), 0);
1266  return result;
1267  }
1268  const UT_StringHolder & getGuideAttrib() const { return myGuideAttrib; }
1269  void setGuideAttrib(const UT_StringHolder & val) { myGuideAttrib = val; }
1271  {
1272  SOP_Node *thissop = cookparms.getNode();
1273  if (!thissop) return getGuideAttrib();
1275  OP_Utils::evalOpParm(result, thissop, "guideattrib", cookparms.getCookTime(), 0);
1276  return result;
1277  }
1278  const UT_StringHolder & getFieldAttrib() const { return myFieldAttrib; }
1279  void setFieldAttrib(const UT_StringHolder & val) { myFieldAttrib = val; }
1281  {
1282  SOP_Node *thissop = cookparms.getNode();
1283  if (!thissop) return getFieldAttrib();
1285  OP_Utils::evalOpParm(result, thissop, "fieldattrib", cookparms.getCookTime(), 0);
1286  return result;
1287  }
1288  bool getNormalizeField() const { return myNormalizeField; }
1289  void setNormalizeField(bool val) { myNormalizeField = val; }
1290  bool opNormalizeField(const SOP_NodeVerb::CookParms &cookparms) const
1291  {
1292  SOP_Node *thissop = cookparms.getNode();
1293  if (!thissop) return getNormalizeField();
1294  bool result;
1295  OP_Utils::evalOpParm(result, thissop, "normalizefield", cookparms.getCookTime(), 0);
1296  return result;
1297  }
1298  OutputMode getOutputMode() const { return OutputMode(myOutputMode); }
1299  void setOutputMode(OutputMode val) { myOutputMode = int64(val); }
1301  {
1302  SOP_Node *thissop = cookparms.getNode();
1303  if (!thissop) return getOutputMode();
1304  int64 result;
1305  OP_Utils::evalOpParm(result, thissop, "outputmode", cookparms.getCookTime(), 0);
1306  return OutputMode(result);
1307  }
1308  bool getUseSingularGroup() const { return myUseSingularGroup; }
1309  void setUseSingularGroup(bool val) { myUseSingularGroup = val; }
1310  bool opUseSingularGroup(const SOP_NodeVerb::CookParms &cookparms) const
1311  {
1312  SOP_Node *thissop = cookparms.getNode();
1313  if (!thissop) return getUseSingularGroup();
1314  bool result;
1315  OP_Utils::evalOpParm(result, thissop, "usesingulargroup", cookparms.getCookTime(), 0);
1316  return result;
1317  }
1318  const UT_StringHolder & getSingularGroup() const { return mySingularGroup; }
1319  void setSingularGroup(const UT_StringHolder & val) { mySingularGroup = val; }
1321  {
1322  SOP_Node *thissop = cookparms.getNode();
1323  if (!thissop) return getSingularGroup();
1325  OP_Utils::evalOpParm(result, thissop, "singulargroup", cookparms.getCookTime(), 0);
1326  return result;
1327  }
1328  bool getUsePositiveSingularGroup() const { return myUsePositiveSingularGroup; }
1329  void setUsePositiveSingularGroup(bool val) { myUsePositiveSingularGroup = val; }
1331  {
1332  SOP_Node *thissop = cookparms.getNode();
1333  if (!thissop) return getUsePositiveSingularGroup();
1334  bool result;
1335  OP_Utils::evalOpParm(result, thissop, "usepositivesingulargroup", cookparms.getCookTime(), 0);
1336  return result;
1337  }
1338  const UT_StringHolder & getPositiveSingularGroup() const { return myPositiveSingularGroup; }
1339  void setPositiveSingularGroup(const UT_StringHolder & val) { myPositiveSingularGroup = val; }
1341  {
1342  SOP_Node *thissop = cookparms.getNode();
1343  if (!thissop) return getPositiveSingularGroup();
1345  OP_Utils::evalOpParm(result, thissop, "positivesingulargroup", cookparms.getCookTime(), 0);
1346  return result;
1347  }
1348  bool getUseNegativeSingularGroup() const { return myUseNegativeSingularGroup; }
1349  void setUseNegativeSingularGroup(bool val) { myUseNegativeSingularGroup = val; }
1351  {
1352  SOP_Node *thissop = cookparms.getNode();
1353  if (!thissop) return getUseNegativeSingularGroup();
1354  bool result;
1355  OP_Utils::evalOpParm(result, thissop, "usenegativesingulargroup", cookparms.getCookTime(), 0);
1356  return result;
1357  }
1358  const UT_StringHolder & getNegativeSingularGroup() const { return myNegativeSingularGroup; }
1359  void setNegativeSingularGroup(const UT_StringHolder & val) { myNegativeSingularGroup = val; }
1361  {
1362  SOP_Node *thissop = cookparms.getNode();
1363  if (!thissop) return getNegativeSingularGroup();
1365  OP_Utils::evalOpParm(result, thissop, "negativesingulargroup", cookparms.getCookTime(), 0);
1366  return result;
1367  }
1368  bool getUseDiscontinuitiesGroup() const { return myUseDiscontinuitiesGroup; }
1369  void setUseDiscontinuitiesGroup(bool val) { myUseDiscontinuitiesGroup = val; }
1371  {
1372  SOP_Node *thissop = cookparms.getNode();
1373  if (!thissop) return getUseDiscontinuitiesGroup();
1374  bool result;
1375  OP_Utils::evalOpParm(result, thissop, "usediscontinuitiesgroup", cookparms.getCookTime(), 0);
1376  return result;
1377  }
1378  const UT_StringHolder & getDiscontinuities() const { return myDiscontinuities; }
1379  void setDiscontinuities(const UT_StringHolder & val) { myDiscontinuities = val; }
1381  {
1382  SOP_Node *thissop = cookparms.getNode();
1383  if (!thissop) return getDiscontinuities();
1385  OP_Utils::evalOpParm(result, thissop, "discontinuities", cookparms.getCookTime(), 0);
1386  return result;
1387  }
1388  bool getShowField() const { return myShowField; }
1389  void setShowField(bool val) { myShowField = val; }
1390  bool opShowField(const SOP_NodeVerb::CookParms &cookparms) const
1391  {
1392  SOP_Node *thissop = cookparms.getNode();
1393  if (!thissop) return getShowField();
1394  bool result;
1395  OP_Utils::evalOpParm(result, thissop, "showfield", cookparms.getCookTime(), 0);
1396  return result;
1397  }
1398  Fieldscalemode getFieldscalemode() const { return Fieldscalemode(myFieldscalemode); }
1399  void setFieldscalemode(Fieldscalemode val) { myFieldscalemode = int64(val); }
1401  {
1402  SOP_Node *thissop = cookparms.getNode();
1403  if (!thissop) return getFieldscalemode();
1404  int64 result;
1405  OP_Utils::evalOpParm(result, thissop, "fieldscalemode", cookparms.getCookTime(), 0);
1406  return Fieldscalemode(result);
1407  }
1408  fpreal64 getFieldscale() const { return myFieldscale; }
1409  void setFieldscale(fpreal64 val) { myFieldscale = val; }
1411  {
1412  SOP_Node *thissop = cookparms.getNode();
1413  if (!thissop) return getFieldscale();
1414  fpreal64 result;
1415  OP_Utils::evalOpParm(result, thissop, "fieldscale", cookparms.getCookTime(), 0);
1416  return result;
1417  }
1418  bool getShowSingularities() const { return myShowSingularities; }
1419  void setShowSingularities(bool val) { myShowSingularities = val; }
1420  bool opShowSingularities(const SOP_NodeVerb::CookParms &cookparms) const
1421  {
1422  SOP_Node *thissop = cookparms.getNode();
1423  if (!thissop) return getShowSingularities();
1424  bool result;
1425  OP_Utils::evalOpParm(result, thissop, "showsingularities", cookparms.getCookTime(), 0);
1426  return result;
1427  }
1428  bool getShowGuides() const { return myShowGuides; }
1429  void setShowGuides(bool val) { myShowGuides = val; }
1430  bool opShowGuides(const SOP_NodeVerb::CookParms &cookparms) const
1431  {
1432  SOP_Node *thissop = cookparms.getNode();
1433  if (!thissop) return getShowGuides();
1434  bool result;
1435  OP_Utils::evalOpParm(result, thissop, "showguides", cookparms.getCookTime(), 0);
1436  return result;
1437  }
1438  Guidescalemode getGuidescalemode() const { return Guidescalemode(myGuidescalemode); }
1439  void setGuidescalemode(Guidescalemode val) { myGuidescalemode = int64(val); }
1441  {
1442  SOP_Node *thissop = cookparms.getNode();
1443  if (!thissop) return getGuidescalemode();
1444  int64 result;
1445  OP_Utils::evalOpParm(result, thissop, "guidescalemode", cookparms.getCookTime(), 0);
1446  return Guidescalemode(result);
1447  }
1448  fpreal64 getGuidescale() const { return myGuidescale; }
1449  void setGuidescale(fpreal64 val) { myGuidescale = val; }
1451  {
1452  SOP_Node *thissop = cookparms.getNode();
1453  if (!thissop) return getGuidescale();
1454  fpreal64 result;
1455  OP_Utils::evalOpParm(result, thissop, "guidescale", cookparms.getCookTime(), 0);
1456  return result;
1457  }
1458 
1459 private:
1460  UT_StringHolder myGroup;
1461  int64 myCarrier;
1462  int64 myDirections;
1463  fpreal64 myRotation;
1464  fpreal64 myGlobalWeight;
1465  UT_StringHolder myGlobalMask;
1466  bool myCurvature;
1467  fpreal64 myLocalCurvatureWeight;
1468  UT_StringHolder myCurvatureMaskAttrib;
1469  fpreal64 myCurvatureRotation;
1470  bool myBoundary;
1471  int64 myBoundaryMode;
1472  fpreal64 myLocalBoundaryWeight;
1473  UT_StringHolder myBoundaryMaskAttrib;
1474  fpreal64 myBoundaryRotation;
1475  bool myGuide;
1476  int64 myGuideMode;
1477  fpreal64 myLocalGuideWeight;
1478  UT_StringHolder myGuideMaskAttrib;
1479  UT_StringHolder myGuideAttrib;
1480  UT_StringHolder myFieldAttrib;
1481  bool myNormalizeField;
1482  int64 myOutputMode;
1483  bool myUseSingularGroup;
1484  UT_StringHolder mySingularGroup;
1485  bool myUsePositiveSingularGroup;
1486  UT_StringHolder myPositiveSingularGroup;
1487  bool myUseNegativeSingularGroup;
1488  UT_StringHolder myNegativeSingularGroup;
1489  bool myUseDiscontinuitiesGroup;
1490  UT_StringHolder myDiscontinuities;
1491  bool myShowField;
1492  int64 myFieldscalemode;
1493  fpreal64 myFieldscale;
1494  bool myShowSingularities;
1495  bool myShowGuides;
1496  int64 myGuidescalemode;
1497  fpreal64 myGuidescale;
1498 
1499 };
void setCurvatureMaskAttrib(const UT_StringHolder &val)
UT_StringHolder opGroup(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, UT_Vector2D &v)
void setGuideMaskAttrib(const UT_StringHolder &val)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector3D &value) const override
UT_StringHolder opCurvatureMaskAttrib(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, UT_Matrix4D &v)
static void loadData(UT_IStream &is, fpreal64 &v)
int int32
Definition: SYS_Types.h:39
Guidescalemode opGuidescalemode(const SOP_NodeVerb::CookParms &cookparms) const
SOP_Node * getNode() const
Definition: SOP_NodeVerb.h:347
bool opShowField(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getFieldAttrib() const
UT_StringHolder opFieldAttrib(const SOP_NodeVerb::CookParms &cookparms) const
bool opNormalizeField(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opGuideMaskAttrib(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getNegativeSingularGroup() const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector4D &value) override
bool opBoundary(const SOP_NodeVerb::CookParms &cookparms) const
void setLocalGuideWeight(fpreal64 val)
void getNestParmValue(TempIndex idx, TempIndex instance, fpreal &value) const override
void doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector2D &value) override
exint bread(int32 *buffer, exint asize=1)
GLboolean * data
Definition: glcorearb.h:131
GT_API const UT_StringHolder time
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector4.h:493
bool operator==(const SOP_TangentFieldParms &src) const
const GLdouble * v
Definition: glcorearb.h:837
bool getUsePositiveSingularGroup() const
bool opUseSingularGroup(const SOP_NodeVerb::CookParms &cookparms) const
void setFieldscale(fpreal64 val)
fpreal getTime() const
Definition: OP_Context.h:62
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector2D &value) const override
const UT_StringHolder & getGuideMaskAttrib() const
static void loadData(UT_IStream &is, UT_Vector4I &v)
static void loadData(UT_IStream &is, int64 &v)
void setFieldAttrib(const UT_StringHolder &val)
void setCurvatureRotation(fpreal64 val)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_SharedPtr< UT_Ramp > &value) const override
const OP_Context & context() const
Definition: OP_NodeParms.h:97
SYS_FORCE_INLINE UT_StringHolder getToken(Carrier enum_value)
constexpr SYS_FORCE_INLINE T & z() noexcept
Definition: UT_Vector3.h:667
int64 exint
Definition: SYS_Types.h:125
SYS_FORCE_INLINE const char * buffer() const
fpreal64 opFieldscale(const SOP_NodeVerb::CookParms &cookparms) const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
GLdouble s
Definition: glad.h:3009
static void loadData(UT_IStream &is, UT_SharedPtr< UT_Ramp > &v)
An output stream object that owns its own string buffer storage.
void getNestParmValue(TempIndex idx, TempIndex instance, UT_StringHolder &value) const override
static void saveData(std::ostream &os, UT_Matrix3D v)
const UT_StringHolder & getGroup() const
BoundaryMode opBoundaryMode(const SOP_NodeVerb::CookParms &cookparms) const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix4D &value) const override
UT_StringHolder opGlobalMask(const SOP_NodeVerb::CookParms &cookparms) const
**But if you need a result
Definition: thread.h:613
void setOutputMode(OutputMode val)
bool opShowSingularities(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 opCurvatureRotation(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getCurvatureMaskAttrib() const
fpreal64 getGlobalWeight() const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix3D &value) override
exint nodeIdx() const
Definition: OP_NodeParms.h:95
static PRM_DataItemHandle parseBinary(const char *type, UT_IStream &is)
UT_StringHolder opDiscontinuities(const SOP_NodeVerb::CookParms &cookparms) const
const UT_WorkBuffer & str()
Returns a read-only reference to the underlying UT_WorkBuffer.
static void saveData(std::ostream &os, UT_Matrix4D v)
ParmType getNestParmType(TempIndex fieldnum) const override
void setFieldscalemode(Fieldscalemode val)
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector4.h:491
void copyFrom(const OP_NodeParms *src) override
void buildFromOp(const OP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
UT_StringHolder opNegativeSingularGroup(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, UT_Vector2I &v)
double fpreal64
Definition: SYS_Types.h:201
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector2.h:423
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_StringHolder &value) override
bool operator==(const BaseDimensions< T > &a, const BaseDimensions< Y > &b)
Definition: Dimensions.h:137
bool opCurvature(const SOP_NodeVerb::CookParms &cookparms) const
void setUseDiscontinuitiesGroup(bool val)
static void saveData(std::ostream &os, UT_Vector4D v)
static void saveData(std::ostream &os, bool v)
UT_StringHolder opPositiveSingularGroup(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getGuideAttrib() const
void setNestParmValue(TempIndex idx, TempIndex instance, const exint &value) override
exint length() const
SYS_FORCE_INLINE const char * buffer() const
std::shared_ptr< T > UT_SharedPtr
Wrapper around std::shared_ptr.
Definition: UT_SharedPtr.h:36
void setGuideAttrib(const UT_StringHolder &val)
bool getUseDiscontinuitiesGroup() const
fpreal64 opLocalGuideWeight(const SOP_NodeVerb::CookParms &cookparms) const
constexpr SYS_FORCE_INLINE T & z() noexcept
Definition: UT_Vector4.h:495
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector4D &value) const override
void setGuideMode(GuideMode val)
const OP_GraphProxy * graph() const
Definition: OP_NodeParms.h:94
bool opUsePositiveSingularGroup(const SOP_NodeVerb::CookParms &cookparms) const
#define SYS_FORCE_INLINE
Definition: SYS_Inline.h:45
const UT_StringHolder & getBoundaryMaskAttrib() const
void setGuidescalemode(Guidescalemode val)
fpreal64 getBoundaryRotation() const
static void saveData(std::ostream &os, PRM_DataItemHandle s)
static void loadData(UT_IStream &is, UT_Vector3I &v)
static void saveData(std::ostream &os, UT_Vector2D v)
static void loadData(UT_IStream &is, UT_Matrix3D &v)
static void saveData(std::ostream &os, int64 v)
long long int64
Definition: SYS_Types.h:116
bool isParmColorRamp(exint idx) const override
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix2D &value) override
void doGetParmValue(TempIndex idx, TempIndex instance, T &value) const
virtual void evalOpParm(int64 &v, NodeIdx node, const char *parmname, fpreal time, DEP_MicroNode *depnode) const =0
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector3D &value) override
BoundaryMode getBoundaryMode() const
void setGuidescale(fpreal64 val)
bool opShowGuides(const SOP_NodeVerb::CookParms &cookparms) const
void getNestParmValue(TempIndex idx, TempIndex instance, exint &value) const override
fpreal64 getLocalGuideWeight() const
void setRotation(fpreal64 val)
bool opUseDiscontinuitiesGroup(const SOP_NodeVerb::CookParms &cookparms) const
void saveBinary(std::ostream &os) const
Save string to binary stream.
Definition: UT_String.h:296
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix2D &value) const override
fpreal64 opGlobalWeight(const SOP_NodeVerb::CookParms &cookparms) const
void loadFromOpSubclass(const LoadParms &loadparms) override
const UT_StringHolder & getPositiveSingularGroup() const
GT_API const UT_StringHolder version
static void saveData(std::ostream &os, UT_Vector3D v)
void setNestParmValue(TempIndex idx, TempIndex instance, const PRM_DataItemHandle &value) override
OutputMode opOutputMode(const SOP_NodeVerb::CookParms &cookparms) const
bool getUseNegativeSingularGroup() const
fpreal64 opBoundaryRotation(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 opGuidescale(const SOP_NodeVerb::CookParms &cookparms) const
GuideMode getGuideMode() const
Fieldscalemode getFieldscalemode() const
UT_StringHolder opGuideAttrib(const SOP_NodeVerb::CookParms &cookparms) const
void setPositiveSingularGroup(const UT_StringHolder &val)
fpreal64 fpreal
Definition: SYS_Types.h:277
DEP_MicroNode * depnode() const
Definition: OP_NodeParms.h:99
bool operator!=(const SOP_TangentFieldParms &src) const
fpreal64 opRotation(const SOP_NodeVerb::CookParms &cookparms) const
LeafData & operator=(const LeafData &)=delete
Utility class for containing a color ramp.
Definition: UT_Ramp.h:92
void setGlobalWeight(fpreal64 val)
fpreal64 opLocalCurvatureWeight(const SOP_NodeVerb::CookParms &cookparms) const
constexpr SYS_FORCE_INLINE T & w() noexcept
Definition: UT_Vector4.h:497
fpreal64 getLocalBoundaryWeight() const
Guidescalemode getGuidescalemode() const
UT_StringHolder opSingularGroup(const SOP_NodeVerb::CookParms &cookparms) const
GLuint GLfloat * val
Definition: glcorearb.h:1608
void setBoundaryMaskAttrib(const UT_StringHolder &val)
void setLocalCurvatureWeight(fpreal64 val)
void setUsePositiveSingularGroup(bool val)
fpreal64 getLocalCurvatureWeight() const
void setLocalBoundaryWeight(fpreal64 val)
#define SOP_API
Definition: SOP_API.h:10
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix4D &value) override
bool opUseNegativeSingularGroup(const SOP_NodeVerb::CookParms &cookparms) const
void setSingularGroup(const UT_StringHolder &val)
static void loadData(UT_IStream &is, UT_Vector3D &v)
fpreal getCookTime() const
Definition: SOP_NodeVerb.h:361
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_SharedPtr< UT_Ramp > &value) override
void setNegativeSingularGroup(const UT_StringHolder &val)
Fieldscalemode opFieldscalemode(const SOP_NodeVerb::CookParms &cookparms) const
static void saveData(std::ostream &os, fpreal64 v)
const char * getNestParmName(TempIndex fieldnum) const override
Carrier opCarrier(const SOP_NodeVerb::CookParms &cookparms) const
const char * findChar(int c) const
Definition: UT_String.h:1395
#define UT_ASSERT(ZZ)
Definition: UT_Assert.h:156
Definition: core.h:1131
static void loadData(UT_IStream &is, bool &v)
void setDiscontinuities(const UT_StringHolder &val)
void setUseNegativeSingularGroup(bool val)
GLboolean r
Definition: glcorearb.h:1222
fpreal64 getCurvatureRotation() const
static void loadData(UT_IStream &is, PRM_DataItemHandle &v)
void save(std::ostream &os) const
exint getNestNumParms(TempIndex idx) const override
int64 opDirections(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, UT_StringHolder &v)
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector3.h:665
OutputMode getOutputMode() const
static void saveData(std::ostream &os, UT_SharedPtr< UT_Ramp > s)
const UT_StringHolder & getGlobalMask() const
UT_StringHolder opBoundaryMaskAttrib(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 opLocalBoundaryWeight(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, UT_Vector4D &v)
type
Definition: core.h:1059
const UT_StringHolder & getSingularGroup() const
bool opGuide(const SOP_NodeVerb::CookParms &cookparms) const
void setGlobalMask(const UT_StringHolder &val)
static void saveData(std::ostream &os, UT_StringHolder s)
void setBoundaryRotation(fpreal64 val)
void setBoundaryMode(BoundaryMode val)
static void loadData(UT_IStream &is, UT_Matrix2D &v)
UT_SharedPtr< const PRM_DataItem > PRM_DataItemHandle
Definition: PRM_Parm.h:97
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector2.h:425
void setGroup(const UT_StringHolder &val)
SYS_FORCE_INLINE bool isstring() const
GuideMode opGuideMode(const SOP_NodeVerb::CookParms &cookparms) const
void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
SYS_FORCE_INLINE void strncpy(const char *src, exint maxlen)
static void saveData(std::ostream &os, UT_Matrix2D v)
const UT_StringHolder & getDiscontinuities() const
GLenum src
Definition: glcorearb.h:1793
void setNestParmValue(TempIndex idx, TempIndex instance, const fpreal &value) override
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector3.h:663