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 <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_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  myAnisotropyWeight = 0.;
164  myAnisotropyMask = ""_UTsh;
165  myAnisotropyCurvature = true;
166  myAnisotropyCurvatureWeight = 1;
167  myAnisotropyCurvatureMask = ""_UTsh;
168  myAnisotropyGuide = true;
169  myAnisotropyGuideWeight = 1;
170  myAnisotropyGuideMask = ""_UTsh;
171  myAnisotropyGuideAttrib = ""_UTsh;
172  myAnisotropySizing = true;
173  myAnisotropySizingWeight = 1;
174  myAnisotropySizingMask = ""_UTsh;
175  myAnisotropySizingAttrib = ""_UTsh;
176  myFieldAttrib = "field"_UTsh;
177  myNormalizeField = true;
178  myOutputMode = 0;
179  myUseSingularGroup = false;
180  mySingularGroup = "singular"_UTsh;
181  myUsePositiveSingularGroup = false;
182  myPositiveSingularGroup = "positive_singular"_UTsh;
183  myUseNegativeSingularGroup = false;
184  myNegativeSingularGroup = "negative_singular"_UTsh;
185  myUseDiscontinuitiesGroup = false;
186  myDiscontinuities = "discontinuities"_UTsh;
187  myShowField = true;
188  myFieldscalemode = 0;
189  myFieldscale = 1;
190  myShowSingularities = true;
191  myShowGuides = false;
192  myGuidescalemode = 0;
193  myGuidescale = 1;
194  myShowAnisotropy = false;
195  myAnisotropyscale = 1;
196 
197  }
198 
199  explicit SOP_TangentFieldParms(const SOP_TangentFieldParms &) = default;
201  SOP_TangentFieldParms(SOP_TangentFieldParms &&) noexcept = default;
202  SOP_TangentFieldParms &operator=(SOP_TangentFieldParms &&) noexcept = default;
203 
204  ~SOP_TangentFieldParms() override {}
205 
207  {
208  if (myGroup != src.myGroup) return false;
209  if (myCarrier != src.myCarrier) return false;
210  if (myDirections != src.myDirections) return false;
211  if (myRotation != src.myRotation) return false;
212  if (myGlobalWeight != src.myGlobalWeight) return false;
213  if (myGlobalMask != src.myGlobalMask) return false;
214  if (myCurvature != src.myCurvature) return false;
215  if (myLocalCurvatureWeight != src.myLocalCurvatureWeight) return false;
216  if (myCurvatureMaskAttrib != src.myCurvatureMaskAttrib) return false;
217  if (myCurvatureRotation != src.myCurvatureRotation) return false;
218  if (myBoundary != src.myBoundary) return false;
219  if (myBoundaryMode != src.myBoundaryMode) return false;
220  if (myLocalBoundaryWeight != src.myLocalBoundaryWeight) return false;
221  if (myBoundaryMaskAttrib != src.myBoundaryMaskAttrib) return false;
222  if (myBoundaryRotation != src.myBoundaryRotation) return false;
223  if (myGuide != src.myGuide) return false;
224  if (myGuideMode != src.myGuideMode) return false;
225  if (myLocalGuideWeight != src.myLocalGuideWeight) return false;
226  if (myGuideMaskAttrib != src.myGuideMaskAttrib) return false;
227  if (myGuideAttrib != src.myGuideAttrib) return false;
228  if (myAnisotropyWeight != src.myAnisotropyWeight) return false;
229  if (myAnisotropyMask != src.myAnisotropyMask) return false;
230  if (myAnisotropyCurvature != src.myAnisotropyCurvature) return false;
231  if (myAnisotropyCurvatureWeight != src.myAnisotropyCurvatureWeight) return false;
232  if (myAnisotropyCurvatureMask != src.myAnisotropyCurvatureMask) return false;
233  if (myAnisotropyGuide != src.myAnisotropyGuide) return false;
234  if (myAnisotropyGuideWeight != src.myAnisotropyGuideWeight) return false;
235  if (myAnisotropyGuideMask != src.myAnisotropyGuideMask) return false;
236  if (myAnisotropyGuideAttrib != src.myAnisotropyGuideAttrib) return false;
237  if (myAnisotropySizing != src.myAnisotropySizing) return false;
238  if (myAnisotropySizingWeight != src.myAnisotropySizingWeight) return false;
239  if (myAnisotropySizingMask != src.myAnisotropySizingMask) return false;
240  if (myAnisotropySizingAttrib != src.myAnisotropySizingAttrib) return false;
241  if (myFieldAttrib != src.myFieldAttrib) return false;
242  if (myNormalizeField != src.myNormalizeField) return false;
243  if (myOutputMode != src.myOutputMode) return false;
244  if (myUseSingularGroup != src.myUseSingularGroup) return false;
245  if (mySingularGroup != src.mySingularGroup) return false;
246  if (myUsePositiveSingularGroup != src.myUsePositiveSingularGroup) return false;
247  if (myPositiveSingularGroup != src.myPositiveSingularGroup) return false;
248  if (myUseNegativeSingularGroup != src.myUseNegativeSingularGroup) return false;
249  if (myNegativeSingularGroup != src.myNegativeSingularGroup) return false;
250  if (myUseDiscontinuitiesGroup != src.myUseDiscontinuitiesGroup) return false;
251  if (myDiscontinuities != src.myDiscontinuities) return false;
252  if (myShowField != src.myShowField) return false;
253  if (myFieldscalemode != src.myFieldscalemode) return false;
254  if (myFieldscale != src.myFieldscale) return false;
255  if (myShowSingularities != src.myShowSingularities) return false;
256  if (myShowGuides != src.myShowGuides) return false;
257  if (myGuidescalemode != src.myGuidescalemode) return false;
258  if (myGuidescale != src.myGuidescale) return false;
259  if (myShowAnisotropy != src.myShowAnisotropy) return false;
260  if (myAnisotropyscale != src.myAnisotropyscale) return false;
261 
262 
263  if (baseGetSignature() != src.baseGetSignature()) return false;
264 
265  return true;
266  }
268  {
269  return !operator==(src);
270  }
277 
278 
279 
280  void buildFromOp(const OP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
281  {
282  myGroup = ""_UTsh;
283  if (true)
284  graph->evalOpParm(myGroup, nodeidx, "group", time, graph->isDirect()?nullptr:depnode);
285  myCarrier = 0;
286  if (true)
287  graph->evalOpParm(myCarrier, nodeidx, "carrier", time, graph->isDirect()?nullptr:depnode);
288  myDirections = 4;
289  if (true)
290  graph->evalOpParm(myDirections, nodeidx, "directions", time, graph->isDirect()?nullptr:depnode);
291  myRotation = 0;
292  if (true)
293  graph->evalOpParm(myRotation, nodeidx, "rotation", time, graph->isDirect()?nullptr:depnode);
294  myGlobalWeight = 0.1;
295  if (true)
296  graph->evalOpParm(myGlobalWeight, nodeidx, "globalweight", time, graph->isDirect()?nullptr:depnode);
297  myGlobalMask = ""_UTsh;
298  if (true)
299  graph->evalOpParm(myGlobalMask, nodeidx, "globalmask", time, graph->isDirect()?nullptr:depnode);
300  myCurvature = true;
301  if (true && ( (true&&!(((int64(getDirections())==1)))) ) )
302  graph->evalOpParm(myCurvature, nodeidx, "curvature", time, graph->isDirect()?nullptr:depnode);
303  myLocalCurvatureWeight = 1;
304  if (true && ( (true&&!(((getCurvature()==0))||((int64(getDirections())==1)))) ) )
305  graph->evalOpParm(myLocalCurvatureWeight, nodeidx, "localcurvatureweight", time, graph->isDirect()?nullptr:depnode);
306  myCurvatureMaskAttrib = ""_UTsh;
307  if (true && ( (true&&!(((getCurvature()==0))||((int64(getDirections())==1)))) ) )
308  graph->evalOpParm(myCurvatureMaskAttrib, nodeidx, "curvaturemaskattrib", time, graph->isDirect()?nullptr:depnode);
309  myCurvatureRotation = 0;
310  if (true && ( (true&&!(((getCurvature()==0))||((int64(getDirections())==1)))) ) )
311  graph->evalOpParm(myCurvatureRotation, nodeidx, "curvaturerotation", time, graph->isDirect()?nullptr:depnode);
312  myBoundary = true;
313  if (true)
314  graph->evalOpParm(myBoundary, nodeidx, "boundary", time, graph->isDirect()?nullptr:depnode);
315  myBoundaryMode = 0;
316  if (true && ( (true&&!(((getBoundary()==0)))) ) )
317  graph->evalOpParm(myBoundaryMode, nodeidx, "boundarymode", time, graph->isDirect()?nullptr:depnode);
318  myLocalBoundaryWeight = 1;
319  if (true && ( (true&&!(((getBoundary()==0)))) ) )
320  graph->evalOpParm(myLocalBoundaryWeight, nodeidx, "localboundaryweight", time, graph->isDirect()?nullptr:depnode);
321  myBoundaryMaskAttrib = ""_UTsh;
322  if (true && ( (true&&!(((getBoundary()==0)))) ) )
323  graph->evalOpParm(myBoundaryMaskAttrib, nodeidx, "boundarymaskattrib", time, graph->isDirect()?nullptr:depnode);
324  myBoundaryRotation = 0;
325  if (true && ( (true&&!(((getBoundary()==0)))) ) )
326  graph->evalOpParm(myBoundaryRotation, nodeidx, "boundaryrotation", time, graph->isDirect()?nullptr:depnode);
327  myGuide = true;
328  if (true)
329  graph->evalOpParm(myGuide, nodeidx, "guide", time, graph->isDirect()?nullptr:depnode);
330  myGuideMode = 0;
331  if (true && ( (true&&!(((getGuide()==0)))) ) )
332  graph->evalOpParm(myGuideMode, nodeidx, "guidemode", time, graph->isDirect()?nullptr:depnode);
333  myLocalGuideWeight = 1;
334  if (true && ( (true&&!(((getGuide()==0)))) ) )
335  graph->evalOpParm(myLocalGuideWeight, nodeidx, "localguideweight", time, graph->isDirect()?nullptr:depnode);
336  myGuideMaskAttrib = ""_UTsh;
337  if (true && ( (true&&!(((getGuide()==0)))) ) )
338  graph->evalOpParm(myGuideMaskAttrib, nodeidx, "guidemaskattrib", time, graph->isDirect()?nullptr:depnode);
339  myGuideAttrib = ""_UTsh;
340  if (true && ( (true&&!(((getGuide()==0)))) ) )
341  graph->evalOpParm(myGuideAttrib, nodeidx, "guideattrib", time, graph->isDirect()?nullptr:depnode);
342  myAnisotropyWeight = 0.;
343  if (true && ( (true&&!(((int64(getDirections())!=4))||((int64(getCarrier())!=1)))) ) )
344  graph->evalOpParm(myAnisotropyWeight, nodeidx, "anisotropyweight", time, graph->isDirect()?nullptr:depnode);
345  myAnisotropyMask = ""_UTsh;
346  if (true && ( (true&&!(((int64(getDirections())!=4))||((int64(getCarrier())!=1)))) ) )
347  graph->evalOpParm(myAnisotropyMask, nodeidx, "anisotropymask", time, graph->isDirect()?nullptr:depnode);
348  myAnisotropyCurvature = true;
349  if (true && ( (true&&!(((int64(getDirections())!=4))||((int64(getCarrier())!=1)))) ) )
350  graph->evalOpParm(myAnisotropyCurvature, nodeidx, "anisotropycurvature", time, graph->isDirect()?nullptr:depnode);
351  myAnisotropyCurvatureWeight = 1;
352  if (true && ( (true&&!(((getAnisotropyCurvature()==0))||((int64(getDirections())!=4))||((int64(getCarrier())!=1)))) ) )
353  graph->evalOpParm(myAnisotropyCurvatureWeight, nodeidx, "anisotropycurvatureweight", time, graph->isDirect()?nullptr:depnode);
354  myAnisotropyCurvatureMask = ""_UTsh;
355  if (true && ( (true&&!(((getAnisotropyCurvature()==0))||((int64(getDirections())!=4))||((int64(getCarrier())!=1)))) ) )
356  graph->evalOpParm(myAnisotropyCurvatureMask, nodeidx, "anisotropycurvaturemask", time, graph->isDirect()?nullptr:depnode);
357  myAnisotropyGuide = true;
358  if (true && ( (true&&!(((int64(getDirections())!=4))||((int64(getCarrier())!=1)))) ) )
359  graph->evalOpParm(myAnisotropyGuide, nodeidx, "anisotropyguide", time, graph->isDirect()?nullptr:depnode);
360  myAnisotropyGuideWeight = 1;
361  if (true && ( (true&&!(((getAnisotropyGuide()==0))||((int64(getDirections())!=4))||((int64(getCarrier())!=1)))) ) )
362  graph->evalOpParm(myAnisotropyGuideWeight, nodeidx, "anisotropyguideweight", time, graph->isDirect()?nullptr:depnode);
363  myAnisotropyGuideMask = ""_UTsh;
364  if (true && ( (true&&!(((getAnisotropyGuide()==0))||((int64(getDirections())!=4))||((int64(getCarrier())!=1)))) ) )
365  graph->evalOpParm(myAnisotropyGuideMask, nodeidx, "anisotropyguidemask", time, graph->isDirect()?nullptr:depnode);
366  myAnisotropyGuideAttrib = ""_UTsh;
367  if (true && ( (true&&!(((getAnisotropyGuide()==0))||((int64(getDirections())!=4))||((int64(getCarrier())!=1)))) ) )
368  graph->evalOpParm(myAnisotropyGuideAttrib, nodeidx, "anisotropyguideattrib", time, graph->isDirect()?nullptr:depnode);
369  myAnisotropySizing = true;
370  if (true && ( (true&&!(((int64(getDirections())!=4))||((int64(getCarrier())!=1)))) ) )
371  graph->evalOpParm(myAnisotropySizing, nodeidx, "anisotropysizing", time, graph->isDirect()?nullptr:depnode);
372  myAnisotropySizingWeight = 1;
373  if (true && ( (true&&!(((getAnisotropySizing()==0))||((int64(getDirections())!=4))||((int64(getCarrier())!=1)))) ) )
374  graph->evalOpParm(myAnisotropySizingWeight, nodeidx, "anisotropysizingweight", time, graph->isDirect()?nullptr:depnode);
375  myAnisotropySizingMask = ""_UTsh;
376  if (true && ( (true&&!(((getAnisotropySizing()==0))||((int64(getDirections())!=4))||((int64(getCarrier())!=1)))) ) )
377  graph->evalOpParm(myAnisotropySizingMask, nodeidx, "anisotropysizingmask", time, graph->isDirect()?nullptr:depnode);
378  myAnisotropySizingAttrib = ""_UTsh;
379  if (true && ( (true&&!(((getAnisotropySizing()==0))||((int64(getDirections())!=4))||((int64(getCarrier())!=1)))) ) )
380  graph->evalOpParm(myAnisotropySizingAttrib, nodeidx, "anisotropysizingattrib", time, graph->isDirect()?nullptr:depnode);
381  myFieldAttrib = "field"_UTsh;
382  if (true)
383  graph->evalOpParm(myFieldAttrib, nodeidx, "fieldattrib", time, graph->isDirect()?nullptr:depnode);
384  myNormalizeField = true;
385  if (true)
386  graph->evalOpParm(myNormalizeField, nodeidx, "normalizefield", time, graph->isDirect()?nullptr:depnode);
387  myOutputMode = 0;
388  if (true && ( (true&&!(((int64(getDirections())==1)))) ) )
389  graph->evalOpParm(myOutputMode, nodeidx, "outputmode", time, graph->isDirect()?nullptr:depnode);
390  myUseSingularGroup = false;
391  if (true)
392  graph->evalOpParm(myUseSingularGroup, nodeidx, "usesingulargroup", time, graph->isDirect()?nullptr:depnode);
393  mySingularGroup = "singular"_UTsh;
394  if (true && ( (true&&!(((getUseSingularGroup()==0)))) ) )
395  graph->evalOpParm(mySingularGroup, nodeidx, "singulargroup", time, graph->isDirect()?nullptr:depnode);
396  myUsePositiveSingularGroup = false;
397  if (true)
398  graph->evalOpParm(myUsePositiveSingularGroup, nodeidx, "usepositivesingulargroup", time, graph->isDirect()?nullptr:depnode);
399  myPositiveSingularGroup = "positive_singular"_UTsh;
400  if (true && ( (true&&!(((getUsePositiveSingularGroup()==0)))) ) )
401  graph->evalOpParm(myPositiveSingularGroup, nodeidx, "positivesingulargroup", time, graph->isDirect()?nullptr:depnode);
402  myUseNegativeSingularGroup = false;
403  if (true)
404  graph->evalOpParm(myUseNegativeSingularGroup, nodeidx, "usenegativesingulargroup", time, graph->isDirect()?nullptr:depnode);
405  myNegativeSingularGroup = "negative_singular"_UTsh;
406  if (true && ( (true&&!(((getUseNegativeSingularGroup()==0)))) ) )
407  graph->evalOpParm(myNegativeSingularGroup, nodeidx, "negativesingulargroup", time, graph->isDirect()?nullptr:depnode);
408  myUseDiscontinuitiesGroup = false;
409  if (true)
410  graph->evalOpParm(myUseDiscontinuitiesGroup, nodeidx, "usediscontinuitiesgroup", time, graph->isDirect()?nullptr:depnode);
411  myDiscontinuities = "discontinuities"_UTsh;
412  if (true && ( (true&&!(((getUseDiscontinuitiesGroup()==0)))) ) )
413  graph->evalOpParm(myDiscontinuities, nodeidx, "discontinuities", time, graph->isDirect()?nullptr:depnode);
414  myShowField = true;
415  if (true)
416  graph->evalOpParm(myShowField, nodeidx, "showfield", time, graph->isDirect()?nullptr:depnode);
417  myFieldscalemode = 0;
418  if (true && ( (true&&!(((getShowField()==0)))) ) )
419  graph->evalOpParm(myFieldscalemode, nodeidx, "fieldscalemode", time, graph->isDirect()?nullptr:depnode);
420  myFieldscale = 1;
421  if (true && ( (true&&!(((int64(getFieldscalemode())==1))||((getShowField()==0)))) ) )
422  graph->evalOpParm(myFieldscale, nodeidx, "fieldscale", time, graph->isDirect()?nullptr:depnode);
423  myShowSingularities = true;
424  if (true)
425  graph->evalOpParm(myShowSingularities, nodeidx, "showsingularities", time, graph->isDirect()?nullptr:depnode);
426  myShowGuides = false;
427  if (true)
428  graph->evalOpParm(myShowGuides, nodeidx, "showguides", time, graph->isDirect()?nullptr:depnode);
429  myGuidescalemode = 0;
430  if (true && ( (true&&!(((getShowGuides()==0)))) ) )
431  graph->evalOpParm(myGuidescalemode, nodeidx, "guidescalemode", time, graph->isDirect()?nullptr:depnode);
432  myGuidescale = 1;
433  if (true && ( (true&&!(((getShowGuides()==0))||((int64(getGuidescalemode())==1)))) ) )
434  graph->evalOpParm(myGuidescale, nodeidx, "guidescale", time, graph->isDirect()?nullptr:depnode);
435  myShowAnisotropy = false;
436  if (true)
437  graph->evalOpParm(myShowAnisotropy, nodeidx, "showanisotropy", time, graph->isDirect()?nullptr:depnode);
438  myAnisotropyscale = 1;
439  if (true && ( (true&&!(((getShowAnisotropy()==0)))) ) )
440  graph->evalOpParm(myAnisotropyscale, nodeidx, "anisotropyscale", time, graph->isDirect()?nullptr:depnode);
441 
442  }
443 
444 
445  void loadFromOpSubclass(const LoadParms &loadparms) override
446  {
447  buildFromOp(loadparms.graph(), loadparms.nodeIdx(), loadparms.context().getTime(), loadparms.depnode());
448  }
449 
450 
451  void copyFrom(const OP_NodeParms *src) override
452  {
453  *this = *((const SOP_TangentFieldParms *)src);
454  }
455 
456  template <typename T>
457  void
458  doGetParmValue(TempIndex idx, TempIndex instance, T &value) const
459  {
460  if (idx.size() < 1)
461  return;
462  UT_ASSERT(idx.size() == instance.size()+1);
463  if (idx.size() != instance.size()+1)
464  return;
465  switch (idx[0])
466  {
467  case 0:
468  coerceValue(value, myGroup);
469  break;
470  case 1:
471  coerceValue(value, myCarrier);
472  break;
473  case 2:
474  coerceValue(value, myDirections);
475  break;
476  case 3:
477  coerceValue(value, myRotation);
478  break;
479  case 4:
480  coerceValue(value, myGlobalWeight);
481  break;
482  case 5:
483  coerceValue(value, myGlobalMask);
484  break;
485  case 6:
486  coerceValue(value, myCurvature);
487  break;
488  case 7:
489  coerceValue(value, myLocalCurvatureWeight);
490  break;
491  case 8:
492  coerceValue(value, myCurvatureMaskAttrib);
493  break;
494  case 9:
495  coerceValue(value, myCurvatureRotation);
496  break;
497  case 10:
498  coerceValue(value, myBoundary);
499  break;
500  case 11:
501  coerceValue(value, myBoundaryMode);
502  break;
503  case 12:
504  coerceValue(value, myLocalBoundaryWeight);
505  break;
506  case 13:
507  coerceValue(value, myBoundaryMaskAttrib);
508  break;
509  case 14:
510  coerceValue(value, myBoundaryRotation);
511  break;
512  case 15:
513  coerceValue(value, myGuide);
514  break;
515  case 16:
516  coerceValue(value, myGuideMode);
517  break;
518  case 17:
519  coerceValue(value, myLocalGuideWeight);
520  break;
521  case 18:
522  coerceValue(value, myGuideMaskAttrib);
523  break;
524  case 19:
525  coerceValue(value, myGuideAttrib);
526  break;
527  case 20:
528  coerceValue(value, myAnisotropyWeight);
529  break;
530  case 21:
531  coerceValue(value, myAnisotropyMask);
532  break;
533  case 22:
534  coerceValue(value, myAnisotropyCurvature);
535  break;
536  case 23:
537  coerceValue(value, myAnisotropyCurvatureWeight);
538  break;
539  case 24:
540  coerceValue(value, myAnisotropyCurvatureMask);
541  break;
542  case 25:
543  coerceValue(value, myAnisotropyGuide);
544  break;
545  case 26:
546  coerceValue(value, myAnisotropyGuideWeight);
547  break;
548  case 27:
549  coerceValue(value, myAnisotropyGuideMask);
550  break;
551  case 28:
552  coerceValue(value, myAnisotropyGuideAttrib);
553  break;
554  case 29:
555  coerceValue(value, myAnisotropySizing);
556  break;
557  case 30:
558  coerceValue(value, myAnisotropySizingWeight);
559  break;
560  case 31:
561  coerceValue(value, myAnisotropySizingMask);
562  break;
563  case 32:
564  coerceValue(value, myAnisotropySizingAttrib);
565  break;
566  case 33:
567  coerceValue(value, myFieldAttrib);
568  break;
569  case 34:
570  coerceValue(value, myNormalizeField);
571  break;
572  case 35:
573  coerceValue(value, myOutputMode);
574  break;
575  case 36:
576  coerceValue(value, myUseSingularGroup);
577  break;
578  case 37:
579  coerceValue(value, mySingularGroup);
580  break;
581  case 38:
582  coerceValue(value, myUsePositiveSingularGroup);
583  break;
584  case 39:
585  coerceValue(value, myPositiveSingularGroup);
586  break;
587  case 40:
588  coerceValue(value, myUseNegativeSingularGroup);
589  break;
590  case 41:
591  coerceValue(value, myNegativeSingularGroup);
592  break;
593  case 42:
594  coerceValue(value, myUseDiscontinuitiesGroup);
595  break;
596  case 43:
597  coerceValue(value, myDiscontinuities);
598  break;
599  case 44:
600  coerceValue(value, myShowField);
601  break;
602  case 45:
603  coerceValue(value, myFieldscalemode);
604  break;
605  case 46:
606  coerceValue(value, myFieldscale);
607  break;
608  case 47:
609  coerceValue(value, myShowSingularities);
610  break;
611  case 48:
612  coerceValue(value, myShowGuides);
613  break;
614  case 49:
615  coerceValue(value, myGuidescalemode);
616  break;
617  case 50:
618  coerceValue(value, myGuidescale);
619  break;
620  case 51:
621  coerceValue(value, myShowAnisotropy);
622  break;
623  case 52:
624  coerceValue(value, myAnisotropyscale);
625  break;
626 
627  }
628  }
629 
630  bool isParmColorRamp(exint idx) const override
631  {
632  switch (idx)
633  {
634 
635  }
636  return false;
637  }
638 
639  void getNestParmValue(TempIndex idx, TempIndex instance, exint &value) const override
640  { doGetParmValue(idx, instance, value); }
641  void getNestParmValue(TempIndex idx, TempIndex instance, fpreal &value) const override
642  { doGetParmValue(idx, instance, value); }
643  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector2D &value) const override
644  { doGetParmValue(idx, instance, value); }
645  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector3D &value) const override
646  { doGetParmValue(idx, instance, value); }
647  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector4D &value) const override
648  { doGetParmValue(idx, instance, value); }
649  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix2D &value) const override
650  { doGetParmValue(idx, instance, value); }
651  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
652  { doGetParmValue(idx, instance, value); }
653  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix4D &value) const override
654  { doGetParmValue(idx, instance, value); }
655  void getNestParmValue(TempIndex idx, TempIndex instance, UT_StringHolder &value) const override
656  { doGetParmValue(idx, instance, value); }
657  void getNestParmValue(TempIndex idx, TempIndex instance, UT_SharedPtr<UT_Ramp> &value) const override
658  { doGetParmValue(idx, instance, value); }
659  void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
660  { doGetParmValue(idx, instance, value); }
661 
662  template <typename T>
663  void
664  doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
665  {
666  if (idx.size() < 1)
667  return;
668  UT_ASSERT(idx.size() == instance.size()+1);
669  if (idx.size() != instance.size()+1)
670  return;
671  switch (idx[0])
672  {
673  case 0:
674  coerceValue(myGroup, ( ( value ) ));
675  break;
676  case 1:
677  coerceValue(myCarrier, clampMinValue(0, clampMaxValue(1, value ) ));
678  break;
679  case 2:
680  coerceValue(myDirections, ( clampMaxValue(8, value ) ));
681  break;
682  case 3:
683  coerceValue(myRotation, ( ( value ) ));
684  break;
685  case 4:
686  coerceValue(myGlobalWeight, clampMinValue(0, ( value ) ));
687  break;
688  case 5:
689  coerceValue(myGlobalMask, ( ( value ) ));
690  break;
691  case 6:
692  coerceValue(myCurvature, ( ( value ) ));
693  break;
694  case 7:
695  coerceValue(myLocalCurvatureWeight, clampMinValue(0, ( value ) ));
696  break;
697  case 8:
698  coerceValue(myCurvatureMaskAttrib, ( ( value ) ));
699  break;
700  case 9:
701  coerceValue(myCurvatureRotation, ( ( value ) ));
702  break;
703  case 10:
704  coerceValue(myBoundary, ( ( value ) ));
705  break;
706  case 11:
707  coerceValue(myBoundaryMode, clampMinValue(0, clampMaxValue(1, value ) ));
708  break;
709  case 12:
710  coerceValue(myLocalBoundaryWeight, clampMinValue(0, ( value ) ));
711  break;
712  case 13:
713  coerceValue(myBoundaryMaskAttrib, ( ( value ) ));
714  break;
715  case 14:
716  coerceValue(myBoundaryRotation, ( ( value ) ));
717  break;
718  case 15:
719  coerceValue(myGuide, ( ( value ) ));
720  break;
721  case 16:
722  coerceValue(myGuideMode, clampMinValue(0, clampMaxValue(1, value ) ));
723  break;
724  case 17:
725  coerceValue(myLocalGuideWeight, clampMinValue(0, ( value ) ));
726  break;
727  case 18:
728  coerceValue(myGuideMaskAttrib, ( ( value ) ));
729  break;
730  case 19:
731  coerceValue(myGuideAttrib, ( ( value ) ));
732  break;
733  case 20:
734  coerceValue(myAnisotropyWeight, clampMinValue(0, ( value ) ));
735  break;
736  case 21:
737  coerceValue(myAnisotropyMask, ( ( value ) ));
738  break;
739  case 22:
740  coerceValue(myAnisotropyCurvature, ( ( value ) ));
741  break;
742  case 23:
743  coerceValue(myAnisotropyCurvatureWeight, clampMinValue(0, ( value ) ));
744  break;
745  case 24:
746  coerceValue(myAnisotropyCurvatureMask, ( ( value ) ));
747  break;
748  case 25:
749  coerceValue(myAnisotropyGuide, ( ( value ) ));
750  break;
751  case 26:
752  coerceValue(myAnisotropyGuideWeight, clampMinValue(0, ( value ) ));
753  break;
754  case 27:
755  coerceValue(myAnisotropyGuideMask, ( ( value ) ));
756  break;
757  case 28:
758  coerceValue(myAnisotropyGuideAttrib, ( ( value ) ));
759  break;
760  case 29:
761  coerceValue(myAnisotropySizing, ( ( value ) ));
762  break;
763  case 30:
764  coerceValue(myAnisotropySizingWeight, clampMinValue(0, ( value ) ));
765  break;
766  case 31:
767  coerceValue(myAnisotropySizingMask, ( ( value ) ));
768  break;
769  case 32:
770  coerceValue(myAnisotropySizingAttrib, ( ( value ) ));
771  break;
772  case 33:
773  coerceValue(myFieldAttrib, ( ( value ) ));
774  break;
775  case 34:
776  coerceValue(myNormalizeField, ( ( value ) ));
777  break;
778  case 35:
779  coerceValue(myOutputMode, clampMinValue(0, clampMaxValue(2, value ) ));
780  break;
781  case 36:
782  coerceValue(myUseSingularGroup, ( ( value ) ));
783  break;
784  case 37:
785  coerceValue(mySingularGroup, ( ( value ) ));
786  break;
787  case 38:
788  coerceValue(myUsePositiveSingularGroup, ( ( value ) ));
789  break;
790  case 39:
791  coerceValue(myPositiveSingularGroup, ( ( value ) ));
792  break;
793  case 40:
794  coerceValue(myUseNegativeSingularGroup, ( ( value ) ));
795  break;
796  case 41:
797  coerceValue(myNegativeSingularGroup, ( ( value ) ));
798  break;
799  case 42:
800  coerceValue(myUseDiscontinuitiesGroup, ( ( value ) ));
801  break;
802  case 43:
803  coerceValue(myDiscontinuities, ( ( value ) ));
804  break;
805  case 44:
806  coerceValue(myShowField, ( ( value ) ));
807  break;
808  case 45:
809  coerceValue(myFieldscalemode, clampMinValue(0, clampMaxValue(2, value ) ));
810  break;
811  case 46:
812  coerceValue(myFieldscale, clampMinValue(0, ( value ) ));
813  break;
814  case 47:
815  coerceValue(myShowSingularities, ( ( value ) ));
816  break;
817  case 48:
818  coerceValue(myShowGuides, ( ( value ) ));
819  break;
820  case 49:
821  coerceValue(myGuidescalemode, clampMinValue(0, clampMaxValue(2, value ) ));
822  break;
823  case 50:
824  coerceValue(myGuidescale, clampMinValue(0, ( value ) ));
825  break;
826  case 51:
827  coerceValue(myShowAnisotropy, ( ( value ) ));
828  break;
829  case 52:
830  coerceValue(myAnisotropyscale, clampMinValue(0, ( value ) ));
831  break;
832 
833  }
834  }
835 
836  void setNestParmValue(TempIndex idx, TempIndex instance, const exint &value) override
837  { doSetParmValue(idx, instance, value); }
838  void setNestParmValue(TempIndex idx, TempIndex instance, const fpreal &value) override
839  { doSetParmValue(idx, instance, value); }
840  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector2D &value) override
841  { doSetParmValue(idx, instance, value); }
842  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector3D &value) override
843  { doSetParmValue(idx, instance, value); }
844  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector4D &value) override
845  { doSetParmValue(idx, instance, value); }
846  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix2D &value) override
847  { doSetParmValue(idx, instance, value); }
848  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix3D &value) override
849  { doSetParmValue(idx, instance, value); }
850  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix4D &value) override
851  { doSetParmValue(idx, instance, value); }
852  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_StringHolder &value) override
853  { doSetParmValue(idx, instance, value); }
854  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_SharedPtr<UT_Ramp> &value) override
855  { doSetParmValue(idx, instance, value); }
856  void setNestParmValue(TempIndex idx, TempIndex instance, const PRM_DataItemHandle &value) override
857  { doSetParmValue(idx, instance, value); }
858 
859  exint getNestNumParms(TempIndex idx) const override
860  {
861  if (idx.size() == 0)
862  return 53;
863  switch (idx[0])
864  {
865 
866  }
867  // Invalid
868  return 0;
869  }
870 
871  const char *getNestParmName(TempIndex fieldnum) const override
872  {
873  if (fieldnum.size() < 1)
874  return 0;
875  switch (fieldnum[0])
876  {
877  case 0:
878  return "group";
879  case 1:
880  return "carrier";
881  case 2:
882  return "directions";
883  case 3:
884  return "rotation";
885  case 4:
886  return "globalweight";
887  case 5:
888  return "globalmask";
889  case 6:
890  return "curvature";
891  case 7:
892  return "localcurvatureweight";
893  case 8:
894  return "curvaturemaskattrib";
895  case 9:
896  return "curvaturerotation";
897  case 10:
898  return "boundary";
899  case 11:
900  return "boundarymode";
901  case 12:
902  return "localboundaryweight";
903  case 13:
904  return "boundarymaskattrib";
905  case 14:
906  return "boundaryrotation";
907  case 15:
908  return "guide";
909  case 16:
910  return "guidemode";
911  case 17:
912  return "localguideweight";
913  case 18:
914  return "guidemaskattrib";
915  case 19:
916  return "guideattrib";
917  case 20:
918  return "anisotropyweight";
919  case 21:
920  return "anisotropymask";
921  case 22:
922  return "anisotropycurvature";
923  case 23:
924  return "anisotropycurvatureweight";
925  case 24:
926  return "anisotropycurvaturemask";
927  case 25:
928  return "anisotropyguide";
929  case 26:
930  return "anisotropyguideweight";
931  case 27:
932  return "anisotropyguidemask";
933  case 28:
934  return "anisotropyguideattrib";
935  case 29:
936  return "anisotropysizing";
937  case 30:
938  return "anisotropysizingweight";
939  case 31:
940  return "anisotropysizingmask";
941  case 32:
942  return "anisotropysizingattrib";
943  case 33:
944  return "fieldattrib";
945  case 34:
946  return "normalizefield";
947  case 35:
948  return "outputmode";
949  case 36:
950  return "usesingulargroup";
951  case 37:
952  return "singulargroup";
953  case 38:
954  return "usepositivesingulargroup";
955  case 39:
956  return "positivesingulargroup";
957  case 40:
958  return "usenegativesingulargroup";
959  case 41:
960  return "negativesingulargroup";
961  case 42:
962  return "usediscontinuitiesgroup";
963  case 43:
964  return "discontinuities";
965  case 44:
966  return "showfield";
967  case 45:
968  return "fieldscalemode";
969  case 46:
970  return "fieldscale";
971  case 47:
972  return "showsingularities";
973  case 48:
974  return "showguides";
975  case 49:
976  return "guidescalemode";
977  case 50:
978  return "guidescale";
979  case 51:
980  return "showanisotropy";
981  case 52:
982  return "anisotropyscale";
983 
984  }
985  return 0;
986  }
987 
988  ParmType getNestParmType(TempIndex fieldnum) const override
989  {
990  if (fieldnum.size() < 1)
991  return PARM_UNSUPPORTED;
992  switch (fieldnum[0])
993  {
994  case 0:
995  return PARM_STRING;
996  case 1:
997  return PARM_INTEGER;
998  case 2:
999  return PARM_INTEGER;
1000  case 3:
1001  return PARM_FLOAT;
1002  case 4:
1003  return PARM_FLOAT;
1004  case 5:
1005  return PARM_STRING;
1006  case 6:
1007  return PARM_INTEGER;
1008  case 7:
1009  return PARM_FLOAT;
1010  case 8:
1011  return PARM_STRING;
1012  case 9:
1013  return PARM_FLOAT;
1014  case 10:
1015  return PARM_INTEGER;
1016  case 11:
1017  return PARM_INTEGER;
1018  case 12:
1019  return PARM_FLOAT;
1020  case 13:
1021  return PARM_STRING;
1022  case 14:
1023  return PARM_FLOAT;
1024  case 15:
1025  return PARM_INTEGER;
1026  case 16:
1027  return PARM_INTEGER;
1028  case 17:
1029  return PARM_FLOAT;
1030  case 18:
1031  return PARM_STRING;
1032  case 19:
1033  return PARM_STRING;
1034  case 20:
1035  return PARM_FLOAT;
1036  case 21:
1037  return PARM_STRING;
1038  case 22:
1039  return PARM_INTEGER;
1040  case 23:
1041  return PARM_FLOAT;
1042  case 24:
1043  return PARM_STRING;
1044  case 25:
1045  return PARM_INTEGER;
1046  case 26:
1047  return PARM_FLOAT;
1048  case 27:
1049  return PARM_STRING;
1050  case 28:
1051  return PARM_STRING;
1052  case 29:
1053  return PARM_INTEGER;
1054  case 30:
1055  return PARM_FLOAT;
1056  case 31:
1057  return PARM_STRING;
1058  case 32:
1059  return PARM_STRING;
1060  case 33:
1061  return PARM_STRING;
1062  case 34:
1063  return PARM_INTEGER;
1064  case 35:
1065  return PARM_INTEGER;
1066  case 36:
1067  return PARM_INTEGER;
1068  case 37:
1069  return PARM_STRING;
1070  case 38:
1071  return PARM_INTEGER;
1072  case 39:
1073  return PARM_STRING;
1074  case 40:
1075  return PARM_INTEGER;
1076  case 41:
1077  return PARM_STRING;
1078  case 42:
1079  return PARM_INTEGER;
1080  case 43:
1081  return PARM_STRING;
1082  case 44:
1083  return PARM_INTEGER;
1084  case 45:
1085  return PARM_INTEGER;
1086  case 46:
1087  return PARM_FLOAT;
1088  case 47:
1089  return PARM_INTEGER;
1090  case 48:
1091  return PARM_INTEGER;
1092  case 49:
1093  return PARM_INTEGER;
1094  case 50:
1095  return PARM_FLOAT;
1096  case 51:
1097  return PARM_INTEGER;
1098  case 52:
1099  return PARM_FLOAT;
1100 
1101  }
1102  return PARM_UNSUPPORTED;
1103  }
1104 
1105  // Boiler plate to load individual types.
1106  static void loadData(UT_IStream &is, int64 &v)
1107  { is.bread(&v, 1); }
1108  static void loadData(UT_IStream &is, bool &v)
1109  { int64 iv; is.bread(&iv, 1); v = iv; }
1110  static void loadData(UT_IStream &is, fpreal64 &v)
1111  { is.bread<fpreal64>(&v, 1); }
1112  static void loadData(UT_IStream &is, UT_Vector2D &v)
1113  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1); }
1114  static void loadData(UT_IStream &is, UT_Vector3D &v)
1115  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
1116  is.bread<fpreal64>(&v.z(), 1); }
1117  static void loadData(UT_IStream &is, UT_Vector4D &v)
1118  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
1119  is.bread<fpreal64>(&v.z(), 1); is.bread<fpreal64>(&v.w(), 1); }
1120  static void loadData(UT_IStream &is, UT_Matrix2D &v)
1121  { for (int r = 0; r < 2; r++) for (int c = 0; c < 2; c++) is.bread<fpreal64>(&v(r, c), 1); }
1122  static void loadData(UT_IStream &is, UT_Matrix3D &v)
1123  { for (int r = 0; r < 3; r++) for (int c = 0; c < 3; c++) is.bread<fpreal64>(&v(r, c), 1); }
1124  static void loadData(UT_IStream &is, UT_Matrix4D &v)
1125  { for (int r = 0; r < 4; r++) for (int c = 0; c < 4; c++) is.bread<fpreal64>(&v(r, c), 1); }
1126  static void loadData(UT_IStream &is, UT_Vector2I &v)
1127  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1); }
1128  static void loadData(UT_IStream &is, UT_Vector3I &v)
1129  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
1130  is.bread<int64>(&v.z(), 1); }
1131  static void loadData(UT_IStream &is, UT_Vector4I &v)
1132  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
1133  is.bread<int64>(&v.z(), 1); is.bread<int64>(&v.w(), 1); }
1135  { is.bread(v); }
1137  { UT_StringHolder rampdata;
1138  loadData(is, rampdata);
1139  if (rampdata.isstring())
1140  {
1141  v.reset(new UT_Ramp());
1142  UT_IStream istr((const char *) rampdata, rampdata.length(), UT_ISTREAM_ASCII);
1143  v->load(istr);
1144  }
1145  else v.reset();
1146  }
1149  loadData(is, data);
1150  if (data.isstring())
1151  {
1152  // Find the data type.
1153  const char *colon = UT_StringWrap(data).findChar(':');
1154  if (colon)
1155  {
1156  int typelen = colon - data.buffer();
1158  type.strncpy(data.buffer(), typelen);
1159  UT_IStream istr(((const char *) data) + typelen + 1, data.length() - (typelen + 1), UT_ISTREAM_BINARY);
1160 
1161  v = PRM_DataFactory::parseBinary(type.buffer(), istr);
1162  }
1163  }
1164  else v.reset();
1165  }
1166 
1167  static void saveData(std::ostream &os, int64 v)
1168  { UTwrite(os, &v); }
1169  static void saveData(std::ostream &os, bool v)
1170  { int64 iv = v; UTwrite(os, &iv); }
1171  static void saveData(std::ostream &os, fpreal64 v)
1172  { UTwrite<fpreal64>(os, &v); }
1173  static void saveData(std::ostream &os, UT_Vector2D v)
1174  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y()); }
1175  static void saveData(std::ostream &os, UT_Vector3D v)
1176  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
1177  UTwrite<fpreal64>(os, &v.z()); }
1178  static void saveData(std::ostream &os, UT_Vector4D v)
1179  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
1180  UTwrite<fpreal64>(os, &v.z()); UTwrite<fpreal64>(os, &v.w()); }
1181  static void saveData(std::ostream &os, UT_Matrix2D v)
1183  static void saveData(std::ostream &os, UT_Matrix3D v)
1185  static void saveData(std::ostream &os, UT_Matrix4D v)
1187  static void saveData(std::ostream &os, UT_StringHolder s)
1188  { UT_StringWrap(s).saveBinary(os); }
1189  static void saveData(std::ostream &os, UT_SharedPtr<UT_Ramp> s)
1191  UT_OStringStream ostr;
1192  if (s) s->save(ostr);
1193  result = ostr.str();
1194  saveData(os, result);
1195  }
1196  static void saveData(std::ostream &os, PRM_DataItemHandle s)
1198  UT_OStringStream ostr;
1199  if (s)
1200  {
1201  ostr << s->getDataTypeToken();
1202  ostr << ":";
1203  s->saveBinary(ostr);
1204  }
1205  result = ostr.str();
1206  saveData(os, result);
1207  }
1208 
1209 
1210  void save(std::ostream &os) const
1211  {
1212  int32 v = version();
1213  UTwrite(os, &v);
1214  saveData(os, myGroup);
1215  saveData(os, myCarrier);
1216  saveData(os, myDirections);
1217  saveData(os, myRotation);
1218  saveData(os, myGlobalWeight);
1219  saveData(os, myGlobalMask);
1220  saveData(os, myCurvature);
1221  saveData(os, myLocalCurvatureWeight);
1222  saveData(os, myCurvatureMaskAttrib);
1223  saveData(os, myCurvatureRotation);
1224  saveData(os, myBoundary);
1225  saveData(os, myBoundaryMode);
1226  saveData(os, myLocalBoundaryWeight);
1227  saveData(os, myBoundaryMaskAttrib);
1228  saveData(os, myBoundaryRotation);
1229  saveData(os, myGuide);
1230  saveData(os, myGuideMode);
1231  saveData(os, myLocalGuideWeight);
1232  saveData(os, myGuideMaskAttrib);
1233  saveData(os, myGuideAttrib);
1234  saveData(os, myAnisotropyWeight);
1235  saveData(os, myAnisotropyMask);
1236  saveData(os, myAnisotropyCurvature);
1237  saveData(os, myAnisotropyCurvatureWeight);
1238  saveData(os, myAnisotropyCurvatureMask);
1239  saveData(os, myAnisotropyGuide);
1240  saveData(os, myAnisotropyGuideWeight);
1241  saveData(os, myAnisotropyGuideMask);
1242  saveData(os, myAnisotropyGuideAttrib);
1243  saveData(os, myAnisotropySizing);
1244  saveData(os, myAnisotropySizingWeight);
1245  saveData(os, myAnisotropySizingMask);
1246  saveData(os, myAnisotropySizingAttrib);
1247  saveData(os, myFieldAttrib);
1248  saveData(os, myNormalizeField);
1249  saveData(os, myOutputMode);
1250  saveData(os, myUseSingularGroup);
1251  saveData(os, mySingularGroup);
1252  saveData(os, myUsePositiveSingularGroup);
1253  saveData(os, myPositiveSingularGroup);
1254  saveData(os, myUseNegativeSingularGroup);
1255  saveData(os, myNegativeSingularGroup);
1256  saveData(os, myUseDiscontinuitiesGroup);
1257  saveData(os, myDiscontinuities);
1258  saveData(os, myShowField);
1259  saveData(os, myFieldscalemode);
1260  saveData(os, myFieldscale);
1261  saveData(os, myShowSingularities);
1262  saveData(os, myShowGuides);
1263  saveData(os, myGuidescalemode);
1264  saveData(os, myGuidescale);
1265  saveData(os, myShowAnisotropy);
1266  saveData(os, myAnisotropyscale);
1267 
1268  }
1269 
1270  bool load(UT_IStream &is)
1271  {
1272  int32 v;
1273  is.bread(&v, 1);
1274  if (version() != v)
1275  {
1276  // Fail incompatible versions
1277  return false;
1278  }
1279  loadData(is, myGroup);
1280  loadData(is, myCarrier);
1281  loadData(is, myDirections);
1282  loadData(is, myRotation);
1283  loadData(is, myGlobalWeight);
1284  loadData(is, myGlobalMask);
1285  loadData(is, myCurvature);
1286  loadData(is, myLocalCurvatureWeight);
1287  loadData(is, myCurvatureMaskAttrib);
1288  loadData(is, myCurvatureRotation);
1289  loadData(is, myBoundary);
1290  loadData(is, myBoundaryMode);
1291  loadData(is, myLocalBoundaryWeight);
1292  loadData(is, myBoundaryMaskAttrib);
1293  loadData(is, myBoundaryRotation);
1294  loadData(is, myGuide);
1295  loadData(is, myGuideMode);
1296  loadData(is, myLocalGuideWeight);
1297  loadData(is, myGuideMaskAttrib);
1298  loadData(is, myGuideAttrib);
1299  loadData(is, myAnisotropyWeight);
1300  loadData(is, myAnisotropyMask);
1301  loadData(is, myAnisotropyCurvature);
1302  loadData(is, myAnisotropyCurvatureWeight);
1303  loadData(is, myAnisotropyCurvatureMask);
1304  loadData(is, myAnisotropyGuide);
1305  loadData(is, myAnisotropyGuideWeight);
1306  loadData(is, myAnisotropyGuideMask);
1307  loadData(is, myAnisotropyGuideAttrib);
1308  loadData(is, myAnisotropySizing);
1309  loadData(is, myAnisotropySizingWeight);
1310  loadData(is, myAnisotropySizingMask);
1311  loadData(is, myAnisotropySizingAttrib);
1312  loadData(is, myFieldAttrib);
1313  loadData(is, myNormalizeField);
1314  loadData(is, myOutputMode);
1315  loadData(is, myUseSingularGroup);
1316  loadData(is, mySingularGroup);
1317  loadData(is, myUsePositiveSingularGroup);
1318  loadData(is, myPositiveSingularGroup);
1319  loadData(is, myUseNegativeSingularGroup);
1320  loadData(is, myNegativeSingularGroup);
1321  loadData(is, myUseDiscontinuitiesGroup);
1322  loadData(is, myDiscontinuities);
1323  loadData(is, myShowField);
1324  loadData(is, myFieldscalemode);
1325  loadData(is, myFieldscale);
1326  loadData(is, myShowSingularities);
1327  loadData(is, myShowGuides);
1328  loadData(is, myGuidescalemode);
1329  loadData(is, myGuidescale);
1330  loadData(is, myShowAnisotropy);
1331  loadData(is, myAnisotropyscale);
1332 
1333  return true;
1334  }
1335 
1336  const UT_StringHolder & getGroup() const { return myGroup; }
1337  void setGroup(const UT_StringHolder & val) { myGroup = val; }
1339  {
1340  SOP_Node *thissop = cookparms.getNode();
1341  if (!thissop) return getGroup();
1343  OP_Utils::evalOpParm(result, thissop, "group", cookparms.getCookTime(), 0);
1344  return result;
1345  }
1346  Carrier getCarrier() const { return Carrier(myCarrier); }
1347  void setCarrier(Carrier val) { myCarrier = int64(val); }
1349  {
1350  SOP_Node *thissop = cookparms.getNode();
1351  if (!thissop) return getCarrier();
1352  int64 result;
1353  OP_Utils::evalOpParm(result, thissop, "carrier", cookparms.getCookTime(), 0);
1354  return Carrier(result);
1355  }
1356  int64 getDirections() const { return myDirections; }
1357  void setDirections(int64 val) { myDirections = val; }
1359  {
1360  SOP_Node *thissop = cookparms.getNode();
1361  if (!thissop) return getDirections();
1362  int64 result;
1363  OP_Utils::evalOpParm(result, thissop, "directions", cookparms.getCookTime(), 0);
1364  return result;
1365  }
1366  fpreal64 getRotation() const { return myRotation; }
1367  void setRotation(fpreal64 val) { myRotation = val; }
1369  {
1370  SOP_Node *thissop = cookparms.getNode();
1371  if (!thissop) return getRotation();
1372  fpreal64 result;
1373  OP_Utils::evalOpParm(result, thissop, "rotation", cookparms.getCookTime(), 0);
1374  return result;
1375  }
1376  fpreal64 getGlobalWeight() const { return myGlobalWeight; }
1377  void setGlobalWeight(fpreal64 val) { myGlobalWeight = val; }
1379  {
1380  SOP_Node *thissop = cookparms.getNode();
1381  if (!thissop) return getGlobalWeight();
1382  fpreal64 result;
1383  OP_Utils::evalOpParm(result, thissop, "globalweight", cookparms.getCookTime(), 0);
1384  return result;
1385  }
1386  const UT_StringHolder & getGlobalMask() const { return myGlobalMask; }
1387  void setGlobalMask(const UT_StringHolder & val) { myGlobalMask = val; }
1389  {
1390  SOP_Node *thissop = cookparms.getNode();
1391  if (!thissop) return getGlobalMask();
1393  OP_Utils::evalOpParm(result, thissop, "globalmask", cookparms.getCookTime(), 0);
1394  return result;
1395  }
1396  bool getCurvature() const { return myCurvature; }
1397  void setCurvature(bool val) { myCurvature = val; }
1398  bool opCurvature(const SOP_NodeVerb::CookParms &cookparms) const
1399  {
1400  SOP_Node *thissop = cookparms.getNode();
1401  if (!thissop) return getCurvature();
1402  bool result;
1403  OP_Utils::evalOpParm(result, thissop, "curvature", cookparms.getCookTime(), 0);
1404  return result;
1405  }
1406  fpreal64 getLocalCurvatureWeight() const { return myLocalCurvatureWeight; }
1407  void setLocalCurvatureWeight(fpreal64 val) { myLocalCurvatureWeight = val; }
1409  {
1410  SOP_Node *thissop = cookparms.getNode();
1411  if (!thissop) return getLocalCurvatureWeight();
1412  fpreal64 result;
1413  OP_Utils::evalOpParm(result, thissop, "localcurvatureweight", cookparms.getCookTime(), 0);
1414  return result;
1415  }
1416  const UT_StringHolder & getCurvatureMaskAttrib() const { return myCurvatureMaskAttrib; }
1417  void setCurvatureMaskAttrib(const UT_StringHolder & val) { myCurvatureMaskAttrib = val; }
1419  {
1420  SOP_Node *thissop = cookparms.getNode();
1421  if (!thissop) return getCurvatureMaskAttrib();
1423  OP_Utils::evalOpParm(result, thissop, "curvaturemaskattrib", cookparms.getCookTime(), 0);
1424  return result;
1425  }
1426  fpreal64 getCurvatureRotation() const { return myCurvatureRotation; }
1427  void setCurvatureRotation(fpreal64 val) { myCurvatureRotation = val; }
1429  {
1430  SOP_Node *thissop = cookparms.getNode();
1431  if (!thissop) return getCurvatureRotation();
1432  fpreal64 result;
1433  OP_Utils::evalOpParm(result, thissop, "curvaturerotation", cookparms.getCookTime(), 0);
1434  return result;
1435  }
1436  bool getBoundary() const { return myBoundary; }
1437  void setBoundary(bool val) { myBoundary = val; }
1438  bool opBoundary(const SOP_NodeVerb::CookParms &cookparms) const
1439  {
1440  SOP_Node *thissop = cookparms.getNode();
1441  if (!thissop) return getBoundary();
1442  bool result;
1443  OP_Utils::evalOpParm(result, thissop, "boundary", cookparms.getCookTime(), 0);
1444  return result;
1445  }
1446  BoundaryMode getBoundaryMode() const { return BoundaryMode(myBoundaryMode); }
1447  void setBoundaryMode(BoundaryMode val) { myBoundaryMode = int64(val); }
1449  {
1450  SOP_Node *thissop = cookparms.getNode();
1451  if (!thissop) return getBoundaryMode();
1452  int64 result;
1453  OP_Utils::evalOpParm(result, thissop, "boundarymode", cookparms.getCookTime(), 0);
1454  return BoundaryMode(result);
1455  }
1456  fpreal64 getLocalBoundaryWeight() const { return myLocalBoundaryWeight; }
1457  void setLocalBoundaryWeight(fpreal64 val) { myLocalBoundaryWeight = val; }
1459  {
1460  SOP_Node *thissop = cookparms.getNode();
1461  if (!thissop) return getLocalBoundaryWeight();
1462  fpreal64 result;
1463  OP_Utils::evalOpParm(result, thissop, "localboundaryweight", cookparms.getCookTime(), 0);
1464  return result;
1465  }
1466  const UT_StringHolder & getBoundaryMaskAttrib() const { return myBoundaryMaskAttrib; }
1467  void setBoundaryMaskAttrib(const UT_StringHolder & val) { myBoundaryMaskAttrib = val; }
1469  {
1470  SOP_Node *thissop = cookparms.getNode();
1471  if (!thissop) return getBoundaryMaskAttrib();
1473  OP_Utils::evalOpParm(result, thissop, "boundarymaskattrib", cookparms.getCookTime(), 0);
1474  return result;
1475  }
1476  fpreal64 getBoundaryRotation() const { return myBoundaryRotation; }
1477  void setBoundaryRotation(fpreal64 val) { myBoundaryRotation = val; }
1479  {
1480  SOP_Node *thissop = cookparms.getNode();
1481  if (!thissop) return getBoundaryRotation();
1482  fpreal64 result;
1483  OP_Utils::evalOpParm(result, thissop, "boundaryrotation", cookparms.getCookTime(), 0);
1484  return result;
1485  }
1486  bool getGuide() const { return myGuide; }
1487  void setGuide(bool val) { myGuide = val; }
1488  bool opGuide(const SOP_NodeVerb::CookParms &cookparms) const
1489  {
1490  SOP_Node *thissop = cookparms.getNode();
1491  if (!thissop) return getGuide();
1492  bool result;
1493  OP_Utils::evalOpParm(result, thissop, "guide", cookparms.getCookTime(), 0);
1494  return result;
1495  }
1496  GuideMode getGuideMode() const { return GuideMode(myGuideMode); }
1497  void setGuideMode(GuideMode val) { myGuideMode = int64(val); }
1499  {
1500  SOP_Node *thissop = cookparms.getNode();
1501  if (!thissop) return getGuideMode();
1502  int64 result;
1503  OP_Utils::evalOpParm(result, thissop, "guidemode", cookparms.getCookTime(), 0);
1504  return GuideMode(result);
1505  }
1506  fpreal64 getLocalGuideWeight() const { return myLocalGuideWeight; }
1507  void setLocalGuideWeight(fpreal64 val) { myLocalGuideWeight = val; }
1509  {
1510  SOP_Node *thissop = cookparms.getNode();
1511  if (!thissop) return getLocalGuideWeight();
1512  fpreal64 result;
1513  OP_Utils::evalOpParm(result, thissop, "localguideweight", cookparms.getCookTime(), 0);
1514  return result;
1515  }
1516  const UT_StringHolder & getGuideMaskAttrib() const { return myGuideMaskAttrib; }
1517  void setGuideMaskAttrib(const UT_StringHolder & val) { myGuideMaskAttrib = val; }
1519  {
1520  SOP_Node *thissop = cookparms.getNode();
1521  if (!thissop) return getGuideMaskAttrib();
1523  OP_Utils::evalOpParm(result, thissop, "guidemaskattrib", cookparms.getCookTime(), 0);
1524  return result;
1525  }
1526  const UT_StringHolder & getGuideAttrib() const { return myGuideAttrib; }
1527  void setGuideAttrib(const UT_StringHolder & val) { myGuideAttrib = val; }
1529  {
1530  SOP_Node *thissop = cookparms.getNode();
1531  if (!thissop) return getGuideAttrib();
1533  OP_Utils::evalOpParm(result, thissop, "guideattrib", cookparms.getCookTime(), 0);
1534  return result;
1535  }
1536  fpreal64 getAnisotropyWeight() const { return myAnisotropyWeight; }
1537  void setAnisotropyWeight(fpreal64 val) { myAnisotropyWeight = val; }
1539  {
1540  SOP_Node *thissop = cookparms.getNode();
1541  if (!thissop) return getAnisotropyWeight();
1542  fpreal64 result;
1543  OP_Utils::evalOpParm(result, thissop, "anisotropyweight", cookparms.getCookTime(), 0);
1544  return result;
1545  }
1546  const UT_StringHolder & getAnisotropyMask() const { return myAnisotropyMask; }
1547  void setAnisotropyMask(const UT_StringHolder & val) { myAnisotropyMask = val; }
1549  {
1550  SOP_Node *thissop = cookparms.getNode();
1551  if (!thissop) return getAnisotropyMask();
1553  OP_Utils::evalOpParm(result, thissop, "anisotropymask", cookparms.getCookTime(), 0);
1554  return result;
1555  }
1556  bool getAnisotropyCurvature() const { return myAnisotropyCurvature; }
1557  void setAnisotropyCurvature(bool val) { myAnisotropyCurvature = val; }
1558  bool opAnisotropyCurvature(const SOP_NodeVerb::CookParms &cookparms) const
1559  {
1560  SOP_Node *thissop = cookparms.getNode();
1561  if (!thissop) return getAnisotropyCurvature();
1562  bool result;
1563  OP_Utils::evalOpParm(result, thissop, "anisotropycurvature", cookparms.getCookTime(), 0);
1564  return result;
1565  }
1566  fpreal64 getAnisotropyCurvatureWeight() const { return myAnisotropyCurvatureWeight; }
1567  void setAnisotropyCurvatureWeight(fpreal64 val) { myAnisotropyCurvatureWeight = val; }
1569  {
1570  SOP_Node *thissop = cookparms.getNode();
1571  if (!thissop) return getAnisotropyCurvatureWeight();
1572  fpreal64 result;
1573  OP_Utils::evalOpParm(result, thissop, "anisotropycurvatureweight", cookparms.getCookTime(), 0);
1574  return result;
1575  }
1576  const UT_StringHolder & getAnisotropyCurvatureMask() const { return myAnisotropyCurvatureMask; }
1577  void setAnisotropyCurvatureMask(const UT_StringHolder & val) { myAnisotropyCurvatureMask = val; }
1579  {
1580  SOP_Node *thissop = cookparms.getNode();
1581  if (!thissop) return getAnisotropyCurvatureMask();
1583  OP_Utils::evalOpParm(result, thissop, "anisotropycurvaturemask", cookparms.getCookTime(), 0);
1584  return result;
1585  }
1586  bool getAnisotropyGuide() const { return myAnisotropyGuide; }
1587  void setAnisotropyGuide(bool val) { myAnisotropyGuide = val; }
1588  bool opAnisotropyGuide(const SOP_NodeVerb::CookParms &cookparms) const
1589  {
1590  SOP_Node *thissop = cookparms.getNode();
1591  if (!thissop) return getAnisotropyGuide();
1592  bool result;
1593  OP_Utils::evalOpParm(result, thissop, "anisotropyguide", cookparms.getCookTime(), 0);
1594  return result;
1595  }
1596  fpreal64 getAnisotropyGuideWeight() const { return myAnisotropyGuideWeight; }
1597  void setAnisotropyGuideWeight(fpreal64 val) { myAnisotropyGuideWeight = val; }
1599  {
1600  SOP_Node *thissop = cookparms.getNode();
1601  if (!thissop) return getAnisotropyGuideWeight();
1602  fpreal64 result;
1603  OP_Utils::evalOpParm(result, thissop, "anisotropyguideweight", cookparms.getCookTime(), 0);
1604  return result;
1605  }
1606  const UT_StringHolder & getAnisotropyGuideMask() const { return myAnisotropyGuideMask; }
1607  void setAnisotropyGuideMask(const UT_StringHolder & val) { myAnisotropyGuideMask = val; }
1609  {
1610  SOP_Node *thissop = cookparms.getNode();
1611  if (!thissop) return getAnisotropyGuideMask();
1613  OP_Utils::evalOpParm(result, thissop, "anisotropyguidemask", cookparms.getCookTime(), 0);
1614  return result;
1615  }
1616  const UT_StringHolder & getAnisotropyGuideAttrib() const { return myAnisotropyGuideAttrib; }
1617  void setAnisotropyGuideAttrib(const UT_StringHolder & val) { myAnisotropyGuideAttrib = val; }
1619  {
1620  SOP_Node *thissop = cookparms.getNode();
1621  if (!thissop) return getAnisotropyGuideAttrib();
1623  OP_Utils::evalOpParm(result, thissop, "anisotropyguideattrib", cookparms.getCookTime(), 0);
1624  return result;
1625  }
1626  bool getAnisotropySizing() const { return myAnisotropySizing; }
1627  void setAnisotropySizing(bool val) { myAnisotropySizing = val; }
1628  bool opAnisotropySizing(const SOP_NodeVerb::CookParms &cookparms) const
1629  {
1630  SOP_Node *thissop = cookparms.getNode();
1631  if (!thissop) return getAnisotropySizing();
1632  bool result;
1633  OP_Utils::evalOpParm(result, thissop, "anisotropysizing", cookparms.getCookTime(), 0);
1634  return result;
1635  }
1636  fpreal64 getAnisotropySizingWeight() const { return myAnisotropySizingWeight; }
1637  void setAnisotropySizingWeight(fpreal64 val) { myAnisotropySizingWeight = val; }
1639  {
1640  SOP_Node *thissop = cookparms.getNode();
1641  if (!thissop) return getAnisotropySizingWeight();
1642  fpreal64 result;
1643  OP_Utils::evalOpParm(result, thissop, "anisotropysizingweight", cookparms.getCookTime(), 0);
1644  return result;
1645  }
1646  const UT_StringHolder & getAnisotropySizingMask() const { return myAnisotropySizingMask; }
1647  void setAnisotropySizingMask(const UT_StringHolder & val) { myAnisotropySizingMask = val; }
1649  {
1650  SOP_Node *thissop = cookparms.getNode();
1651  if (!thissop) return getAnisotropySizingMask();
1653  OP_Utils::evalOpParm(result, thissop, "anisotropysizingmask", cookparms.getCookTime(), 0);
1654  return result;
1655  }
1656  const UT_StringHolder & getAnisotropySizingAttrib() const { return myAnisotropySizingAttrib; }
1657  void setAnisotropySizingAttrib(const UT_StringHolder & val) { myAnisotropySizingAttrib = val; }
1659  {
1660  SOP_Node *thissop = cookparms.getNode();
1661  if (!thissop) return getAnisotropySizingAttrib();
1663  OP_Utils::evalOpParm(result, thissop, "anisotropysizingattrib", cookparms.getCookTime(), 0);
1664  return result;
1665  }
1666  const UT_StringHolder & getFieldAttrib() const { return myFieldAttrib; }
1667  void setFieldAttrib(const UT_StringHolder & val) { myFieldAttrib = val; }
1669  {
1670  SOP_Node *thissop = cookparms.getNode();
1671  if (!thissop) return getFieldAttrib();
1673  OP_Utils::evalOpParm(result, thissop, "fieldattrib", cookparms.getCookTime(), 0);
1674  return result;
1675  }
1676  bool getNormalizeField() const { return myNormalizeField; }
1677  void setNormalizeField(bool val) { myNormalizeField = val; }
1678  bool opNormalizeField(const SOP_NodeVerb::CookParms &cookparms) const
1679  {
1680  SOP_Node *thissop = cookparms.getNode();
1681  if (!thissop) return getNormalizeField();
1682  bool result;
1683  OP_Utils::evalOpParm(result, thissop, "normalizefield", cookparms.getCookTime(), 0);
1684  return result;
1685  }
1686  OutputMode getOutputMode() const { return OutputMode(myOutputMode); }
1687  void setOutputMode(OutputMode val) { myOutputMode = int64(val); }
1689  {
1690  SOP_Node *thissop = cookparms.getNode();
1691  if (!thissop) return getOutputMode();
1692  int64 result;
1693  OP_Utils::evalOpParm(result, thissop, "outputmode", cookparms.getCookTime(), 0);
1694  return OutputMode(result);
1695  }
1696  bool getUseSingularGroup() const { return myUseSingularGroup; }
1697  void setUseSingularGroup(bool val) { myUseSingularGroup = val; }
1698  bool opUseSingularGroup(const SOP_NodeVerb::CookParms &cookparms) const
1699  {
1700  SOP_Node *thissop = cookparms.getNode();
1701  if (!thissop) return getUseSingularGroup();
1702  bool result;
1703  OP_Utils::evalOpParm(result, thissop, "usesingulargroup", cookparms.getCookTime(), 0);
1704  return result;
1705  }
1706  const UT_StringHolder & getSingularGroup() const { return mySingularGroup; }
1707  void setSingularGroup(const UT_StringHolder & val) { mySingularGroup = val; }
1709  {
1710  SOP_Node *thissop = cookparms.getNode();
1711  if (!thissop) return getSingularGroup();
1713  OP_Utils::evalOpParm(result, thissop, "singulargroup", cookparms.getCookTime(), 0);
1714  return result;
1715  }
1716  bool getUsePositiveSingularGroup() const { return myUsePositiveSingularGroup; }
1717  void setUsePositiveSingularGroup(bool val) { myUsePositiveSingularGroup = val; }
1719  {
1720  SOP_Node *thissop = cookparms.getNode();
1721  if (!thissop) return getUsePositiveSingularGroup();
1722  bool result;
1723  OP_Utils::evalOpParm(result, thissop, "usepositivesingulargroup", cookparms.getCookTime(), 0);
1724  return result;
1725  }
1726  const UT_StringHolder & getPositiveSingularGroup() const { return myPositiveSingularGroup; }
1727  void setPositiveSingularGroup(const UT_StringHolder & val) { myPositiveSingularGroup = val; }
1729  {
1730  SOP_Node *thissop = cookparms.getNode();
1731  if (!thissop) return getPositiveSingularGroup();
1733  OP_Utils::evalOpParm(result, thissop, "positivesingulargroup", cookparms.getCookTime(), 0);
1734  return result;
1735  }
1736  bool getUseNegativeSingularGroup() const { return myUseNegativeSingularGroup; }
1737  void setUseNegativeSingularGroup(bool val) { myUseNegativeSingularGroup = val; }
1739  {
1740  SOP_Node *thissop = cookparms.getNode();
1741  if (!thissop) return getUseNegativeSingularGroup();
1742  bool result;
1743  OP_Utils::evalOpParm(result, thissop, "usenegativesingulargroup", cookparms.getCookTime(), 0);
1744  return result;
1745  }
1746  const UT_StringHolder & getNegativeSingularGroup() const { return myNegativeSingularGroup; }
1747  void setNegativeSingularGroup(const UT_StringHolder & val) { myNegativeSingularGroup = val; }
1749  {
1750  SOP_Node *thissop = cookparms.getNode();
1751  if (!thissop) return getNegativeSingularGroup();
1753  OP_Utils::evalOpParm(result, thissop, "negativesingulargroup", cookparms.getCookTime(), 0);
1754  return result;
1755  }
1756  bool getUseDiscontinuitiesGroup() const { return myUseDiscontinuitiesGroup; }
1757  void setUseDiscontinuitiesGroup(bool val) { myUseDiscontinuitiesGroup = val; }
1759  {
1760  SOP_Node *thissop = cookparms.getNode();
1761  if (!thissop) return getUseDiscontinuitiesGroup();
1762  bool result;
1763  OP_Utils::evalOpParm(result, thissop, "usediscontinuitiesgroup", cookparms.getCookTime(), 0);
1764  return result;
1765  }
1766  const UT_StringHolder & getDiscontinuities() const { return myDiscontinuities; }
1767  void setDiscontinuities(const UT_StringHolder & val) { myDiscontinuities = val; }
1769  {
1770  SOP_Node *thissop = cookparms.getNode();
1771  if (!thissop) return getDiscontinuities();
1773  OP_Utils::evalOpParm(result, thissop, "discontinuities", cookparms.getCookTime(), 0);
1774  return result;
1775  }
1776  bool getShowField() const { return myShowField; }
1777  void setShowField(bool val) { myShowField = val; }
1778  bool opShowField(const SOP_NodeVerb::CookParms &cookparms) const
1779  {
1780  SOP_Node *thissop = cookparms.getNode();
1781  if (!thissop) return getShowField();
1782  bool result;
1783  OP_Utils::evalOpParm(result, thissop, "showfield", cookparms.getCookTime(), 0);
1784  return result;
1785  }
1786  Fieldscalemode getFieldscalemode() const { return Fieldscalemode(myFieldscalemode); }
1787  void setFieldscalemode(Fieldscalemode val) { myFieldscalemode = int64(val); }
1789  {
1790  SOP_Node *thissop = cookparms.getNode();
1791  if (!thissop) return getFieldscalemode();
1792  int64 result;
1793  OP_Utils::evalOpParm(result, thissop, "fieldscalemode", cookparms.getCookTime(), 0);
1794  return Fieldscalemode(result);
1795  }
1796  fpreal64 getFieldscale() const { return myFieldscale; }
1797  void setFieldscale(fpreal64 val) { myFieldscale = val; }
1799  {
1800  SOP_Node *thissop = cookparms.getNode();
1801  if (!thissop) return getFieldscale();
1802  fpreal64 result;
1803  OP_Utils::evalOpParm(result, thissop, "fieldscale", cookparms.getCookTime(), 0);
1804  return result;
1805  }
1806  bool getShowSingularities() const { return myShowSingularities; }
1807  void setShowSingularities(bool val) { myShowSingularities = val; }
1808  bool opShowSingularities(const SOP_NodeVerb::CookParms &cookparms) const
1809  {
1810  SOP_Node *thissop = cookparms.getNode();
1811  if (!thissop) return getShowSingularities();
1812  bool result;
1813  OP_Utils::evalOpParm(result, thissop, "showsingularities", cookparms.getCookTime(), 0);
1814  return result;
1815  }
1816  bool getShowGuides() const { return myShowGuides; }
1817  void setShowGuides(bool val) { myShowGuides = val; }
1818  bool opShowGuides(const SOP_NodeVerb::CookParms &cookparms) const
1819  {
1820  SOP_Node *thissop = cookparms.getNode();
1821  if (!thissop) return getShowGuides();
1822  bool result;
1823  OP_Utils::evalOpParm(result, thissop, "showguides", cookparms.getCookTime(), 0);
1824  return result;
1825  }
1826  Guidescalemode getGuidescalemode() const { return Guidescalemode(myGuidescalemode); }
1827  void setGuidescalemode(Guidescalemode val) { myGuidescalemode = int64(val); }
1829  {
1830  SOP_Node *thissop = cookparms.getNode();
1831  if (!thissop) return getGuidescalemode();
1832  int64 result;
1833  OP_Utils::evalOpParm(result, thissop, "guidescalemode", cookparms.getCookTime(), 0);
1834  return Guidescalemode(result);
1835  }
1836  fpreal64 getGuidescale() const { return myGuidescale; }
1837  void setGuidescale(fpreal64 val) { myGuidescale = val; }
1839  {
1840  SOP_Node *thissop = cookparms.getNode();
1841  if (!thissop) return getGuidescale();
1842  fpreal64 result;
1843  OP_Utils::evalOpParm(result, thissop, "guidescale", cookparms.getCookTime(), 0);
1844  return result;
1845  }
1846  bool getShowAnisotropy() const { return myShowAnisotropy; }
1847  void setShowAnisotropy(bool val) { myShowAnisotropy = val; }
1848  bool opShowAnisotropy(const SOP_NodeVerb::CookParms &cookparms) const
1849  {
1850  SOP_Node *thissop = cookparms.getNode();
1851  if (!thissop) return getShowAnisotropy();
1852  bool result;
1853  OP_Utils::evalOpParm(result, thissop, "showanisotropy", cookparms.getCookTime(), 0);
1854  return result;
1855  }
1856  fpreal64 getAnisotropyscale() const { return myAnisotropyscale; }
1857  void setAnisotropyscale(fpreal64 val) { myAnisotropyscale = val; }
1859  {
1860  SOP_Node *thissop = cookparms.getNode();
1861  if (!thissop) return getAnisotropyscale();
1862  fpreal64 result;
1863  OP_Utils::evalOpParm(result, thissop, "anisotropyscale", cookparms.getCookTime(), 0);
1864  return result;
1865  }
1866 
1867 private:
1868  UT_StringHolder myGroup;
1869  int64 myCarrier;
1870  int64 myDirections;
1871  fpreal64 myRotation;
1872  fpreal64 myGlobalWeight;
1873  UT_StringHolder myGlobalMask;
1874  bool myCurvature;
1875  fpreal64 myLocalCurvatureWeight;
1876  UT_StringHolder myCurvatureMaskAttrib;
1877  fpreal64 myCurvatureRotation;
1878  bool myBoundary;
1879  int64 myBoundaryMode;
1880  fpreal64 myLocalBoundaryWeight;
1881  UT_StringHolder myBoundaryMaskAttrib;
1882  fpreal64 myBoundaryRotation;
1883  bool myGuide;
1884  int64 myGuideMode;
1885  fpreal64 myLocalGuideWeight;
1886  UT_StringHolder myGuideMaskAttrib;
1887  UT_StringHolder myGuideAttrib;
1888  fpreal64 myAnisotropyWeight;
1889  UT_StringHolder myAnisotropyMask;
1890  bool myAnisotropyCurvature;
1891  fpreal64 myAnisotropyCurvatureWeight;
1892  UT_StringHolder myAnisotropyCurvatureMask;
1893  bool myAnisotropyGuide;
1894  fpreal64 myAnisotropyGuideWeight;
1895  UT_StringHolder myAnisotropyGuideMask;
1896  UT_StringHolder myAnisotropyGuideAttrib;
1897  bool myAnisotropySizing;
1898  fpreal64 myAnisotropySizingWeight;
1899  UT_StringHolder myAnisotropySizingMask;
1900  UT_StringHolder myAnisotropySizingAttrib;
1901  UT_StringHolder myFieldAttrib;
1902  bool myNormalizeField;
1903  int64 myOutputMode;
1904  bool myUseSingularGroup;
1905  UT_StringHolder mySingularGroup;
1906  bool myUsePositiveSingularGroup;
1907  UT_StringHolder myPositiveSingularGroup;
1908  bool myUseNegativeSingularGroup;
1909  UT_StringHolder myNegativeSingularGroup;
1910  bool myUseDiscontinuitiesGroup;
1911  UT_StringHolder myDiscontinuities;
1912  bool myShowField;
1913  int64 myFieldscalemode;
1914  fpreal64 myFieldscale;
1915  bool myShowSingularities;
1916  bool myShowGuides;
1917  int64 myGuidescalemode;
1918  fpreal64 myGuidescale;
1919  bool myShowAnisotropy;
1920  fpreal64 myAnisotropyscale;
1921 
1922 };
void setCurvatureMaskAttrib(const UT_StringHolder &val)
UT_StringHolder opGroup(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, UT_Vector2D &v)
type
Definition: core.h:556
void setAnisotropySizingWeight(fpreal64 val)
void setGuideMaskAttrib(const UT_StringHolder &val)
void setAnisotropyCurvatureMask(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 & getAnisotropyCurvatureMask() const
const UT_StringHolder & getNegativeSingularGroup() const
fpreal64 opAnisotropyGuideWeight(const SOP_NodeVerb::CookParms &cookparms) 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
UT_StringHolder opAnisotropySizingMask(const SOP_NodeVerb::CookParms &cookparms) const
void setFieldscale(fpreal64 val)
fpreal getTime() const
Definition: OP_Context.h:63
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)
GLsizei const GLfloat * value
Definition: glcorearb.h:824
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
const UT_StringHolder & getAnisotropyGuideMask() const
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:622
void setOutputMode(OutputMode val)
fpreal64 opAnisotropyCurvatureWeight(const SOP_NodeVerb::CookParms &cookparms) const
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
void setAnisotropyCurvatureWeight(fpreal64 val)
const UT_WorkBuffer & str()
Returns a read-only reference to the underlying UT_WorkBuffer.
static void saveData(std::ostream &os, UT_Matrix4D v)
fpreal64 opAnisotropyscale(const SOP_NodeVerb::CookParms &cookparms) const
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 setAnisotropyGuideWeight(fpreal64 val)
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
UT_SharedPtr< const PRM_DataItem > PRM_DataItemHandle
Definition: APEX_Include.h:55
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector2.h:423
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_StringHolder &value) override
bool opAnisotropySizing(const SOP_NodeVerb::CookParms &cookparms) const
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)
fpreal64 getAnisotropyscale() const
void setAnisotropyscale(fpreal64 val)
void setAnisotropyGuideAttrib(const UT_StringHolder &val)
fpreal64 opAnisotropySizingWeight(const SOP_NodeVerb::CookParms &cookparms) const
static void saveData(std::ostream &os, UT_Vector4D v)
fpreal64 getAnisotropyCurvatureWeight() const
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
UT_StringHolder opAnisotropyGuideMask(const SOP_NodeVerb::CookParms &cookparms) const
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
const UT_StringHolder & getAnisotropyMask() const
void setGuideMode(GuideMode val)
const OP_GraphProxy * graph() const
Definition: OP_NodeParms.h:94
bool opAnisotropyCurvature(const SOP_NodeVerb::CookParms &cookparms) const
bool opUsePositiveSingularGroup(const SOP_NodeVerb::CookParms &cookparms) const
#define SYS_FORCE_INLINE
Definition: SYS_Inline.h:45
UT_StringHolder opAnisotropyCurvatureMask(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getBoundaryMaskAttrib() const
void setGuidescalemode(Guidescalemode val)
fpreal64 getBoundaryRotation() const
static void saveData(std::ostream &os, PRM_DataItemHandle s)
const UT_StringHolder & getAnisotropyGuideAttrib() const
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 setAnisotropySizingAttrib(const UT_StringHolder &val)
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)
fpreal64 getAnisotropyGuideWeight() const
fpreal64 opAnisotropyWeight(const SOP_NodeVerb::CookParms &cookparms) const
bool opUseDiscontinuitiesGroup(const SOP_NodeVerb::CookParms &cookparms) const
void saveBinary(std::ostream &os) const
Save string to binary stream.
Definition: UT_String.h:303
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
bool opAnisotropyGuide(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 opGuidescale(const SOP_NodeVerb::CookParms &cookparms) const
GuideMode getGuideMode() const
UT_StringHolder opAnisotropySizingAttrib(const SOP_NodeVerb::CookParms &cookparms) const
Fieldscalemode getFieldscalemode() const
UT_StringHolder opGuideAttrib(const SOP_NodeVerb::CookParms &cookparms) const
void setPositiveSingularGroup(const UT_StringHolder &val)
bool opShowAnisotropy(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 fpreal
Definition: SYS_Types.h:278
void setAnisotropySizingMask(const UT_StringHolder &val)
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
void setAnisotropyWeight(fpreal64 val)
Utility class for containing a color ramp.
Definition: UT_Ramp.h:96
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
virtual UT_StringHolder baseGetSignature() const
Definition: OP_NodeParms.h:294
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:372
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
fpreal64 getAnisotropyWeight() const
const char * findChar(int c) const
Definition: UT_String.h:1401
#define UT_ASSERT(ZZ)
Definition: UT_Assert.h:156
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 setAnisotropyMask(const UT_StringHolder &val)
UT_StringHolder opAnisotropyGuideAttrib(const SOP_NodeVerb::CookParms &cookparms) const
void save(std::ostream &os) const
exint getNestNumParms(TempIndex idx) const override
int64 opDirections(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opAnisotropyMask(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)
const UT_StringHolder & getSingularGroup() const
bool opGuide(const SOP_NodeVerb::CookParms &cookparms) const
void setGlobalMask(const UT_StringHolder &val)
const UT_StringHolder & getAnisotropySizingMask() const
virtual bool isDirect() const =0
Direct proxies mirror actual nodes:
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)
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector2.h:425
fpreal64 getAnisotropySizingWeight() const
void setGroup(const UT_StringHolder &val)
SYS_FORCE_INLINE bool isstring() const
GuideMode opGuideMode(const SOP_NodeVerb::CookParms &cookparms) const
void setAnisotropyGuideMask(const UT_StringHolder &val)
void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
SYS_FORCE_INLINE void strncpy(const char *src, exint maxlen)
const UT_StringHolder & getAnisotropySizingAttrib() const
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