HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
SOP_Measure-2.0.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_Measure_2_0Enums
24 {
25  enum class GroupType
26  {
27  POINTS = 0,
28  PRIMS
29  };
30  enum class Measure
31  {
32  PERIMETER = 0,
33  AREA,
34  VOLUME,
35  CENTROID,
36  CURVATURE,
37  GRADIENT,
38  LAPLACIAN,
41  };
42  enum class CurvatureType
43  {
44  GAUSSIAN = 0,
45  MEAN,
46  PRINCIPAL,
48  };
49  enum class PrincipalType
50  {
51  MIN = 0,
52  MAX
53  };
54  enum class PrincipalSign
55  {
56  SIGNED = 0,
57  ABSOLUTE
58  };
59  enum class PrincipalReportAs
60  {
61  SCALAR = 0,
62  DIRECTION,
63  VECTOR
64  };
65  enum class IntegrationMode
66  {
67  COMPONENTWISE = 0,
68  TANGENT,
69  NORMAL
70  };
71  enum class SrcComp
72  {
73  X = 0,
74  Y,
75  Z,
76  XYZ
77  };
78  enum class IntegrationDomain
79  {
80  ELEMENT = 0,
81  PIECE,
83  };
84  enum class WidthScale
85  {
86  UNIT = 0,
87  SD,
88  MAD
89  };
90  enum class CenterType
91  {
92  FIXED = 0,
93  MEAN,
94  MEDIAN
95  };
96 }
97 
98 
100 {
101 public:
102  static int version() { return 1; }
103 
105  {
106  myGroup = ""_UTsh;
107  myGroupType = 1;
108  myMeasure = 1;
109  myCurvatureType = 3;
110  myPrincipalType = 0;
111  myPrincipalSign = 0;
112  myPrincipalReportAs = 0;
113  myUmbilicCutoff = 0;
114  myIntegrationMode = 0;
115  mySrcAttrib = "P"_UTsh;
116  mySrcComp = 0;
117  myScaleNormalize = true;
118  myIntegrationDomain = 0;
119  myRefineToManifold = true;
120  myPieceAttrib = "class"_UTsh;
121  myUseCustomPos = false;
122  myPosAttrib = "P"_UTsh;
123  myUseRangeMin = false;
124  myRangeMin = -1;
125  myUseRangeMax = false;
126  myRangeMax = 1;
127  myUseCenterWidth = true;
128  myWidth = 6;
129  myWidthScale = 2;
130  myCenterType = 2;
131  myFixedCenter = 0;
132  myColorramp = UT_SharedPtr<UT_Ramp>(0);
133  myVectorScale = 1;
134  myAttribName = "area"_UTsh;
135  myUseTotalAttrib = false;
136  myTotalAttribName = "totalarea"_UTsh;
137  myUseRangeGroup = false;
138  myRangeGroup = "inrange"_UTsh;
139  myBakeIntoOutput = false;
140  myUseRemapRange = false;
141  myRemapRange = UT_Vector2D(0,1);
142 
143  }
144 
145  explicit SOP_Measure_2_0Parms(const SOP_Measure_2_0Parms &) = default;
147  SOP_Measure_2_0Parms(SOP_Measure_2_0Parms &&) noexcept = default;
148  SOP_Measure_2_0Parms &operator=(SOP_Measure_2_0Parms &&) noexcept = default;
149 
150  ~SOP_Measure_2_0Parms() override {}
151 
153  {
154  if (myGroup != src.myGroup) return false;
155  if (myGroupType != src.myGroupType) return false;
156  if (myMeasure != src.myMeasure) return false;
157  if (myCurvatureType != src.myCurvatureType) return false;
158  if (myPrincipalType != src.myPrincipalType) return false;
159  if (myPrincipalSign != src.myPrincipalSign) return false;
160  if (myPrincipalReportAs != src.myPrincipalReportAs) return false;
161  if (myUmbilicCutoff != src.myUmbilicCutoff) return false;
162  if (myIntegrationMode != src.myIntegrationMode) return false;
163  if (mySrcAttrib != src.mySrcAttrib) return false;
164  if (mySrcComp != src.mySrcComp) return false;
165  if (myScaleNormalize != src.myScaleNormalize) return false;
166  if (myIntegrationDomain != src.myIntegrationDomain) return false;
167  if (myRefineToManifold != src.myRefineToManifold) return false;
168  if (myPieceAttrib != src.myPieceAttrib) return false;
169  if (myUseCustomPos != src.myUseCustomPos) return false;
170  if (myPosAttrib != src.myPosAttrib) return false;
171  if (myUseRangeMin != src.myUseRangeMin) return false;
172  if (myRangeMin != src.myRangeMin) return false;
173  if (myUseRangeMax != src.myUseRangeMax) return false;
174  if (myRangeMax != src.myRangeMax) return false;
175  if (myUseCenterWidth != src.myUseCenterWidth) return false;
176  if (myWidth != src.myWidth) return false;
177  if (myWidthScale != src.myWidthScale) return false;
178  if (myCenterType != src.myCenterType) return false;
179  if (myFixedCenter != src.myFixedCenter) return false;
180  if (myColorramp != src.myColorramp)
181  { if (!myColorramp || !src.myColorramp || !(*myColorramp == *src.myColorramp)) return false; }
182  if (myVectorScale != src.myVectorScale) return false;
183  if (myAttribName != src.myAttribName) return false;
184  if (myUseTotalAttrib != src.myUseTotalAttrib) return false;
185  if (myTotalAttribName != src.myTotalAttribName) return false;
186  if (myUseRangeGroup != src.myUseRangeGroup) return false;
187  if (myRangeGroup != src.myRangeGroup) return false;
188  if (myBakeIntoOutput != src.myBakeIntoOutput) return false;
189  if (myUseRemapRange != src.myUseRemapRange) return false;
190  if (myRemapRange != src.myRemapRange) return false;
191 
192  return true;
193  }
195  {
196  return !operator==(src);
197  }
209 
210 
211 
212  void buildFromOp(const OP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
213  {
214  myGroup = ""_UTsh;
215  if (true)
216  graph->evalOpParm(myGroup, nodeidx, "group", time, 0);
217  myGroupType = 1;
218  if (true)
219  graph->evalOpParm(myGroupType, nodeidx, "grouptype", time, 0);
220  myMeasure = 1;
221  if (true)
222  graph->evalOpParm(myMeasure, nodeidx, "measure", time, 0);
223  myCurvatureType = 3;
224  if (true && ( (true&&!(((int64(getMeasure())!=4)))) ) )
225  graph->evalOpParm(myCurvatureType, nodeidx, "curvaturetype", time, 0);
226  myPrincipalType = 0;
227  if (true && ( (true&&!(((int64(getMeasure())!=4))||((int64(getCurvatureType())!=2)))) ) )
228  graph->evalOpParm(myPrincipalType, nodeidx, "principaltype", time, 0);
229  myPrincipalSign = 0;
230  if (true && ( (true&&!(((int64(getMeasure())!=4))||((int64(getCurvatureType())!=2)))) ) )
231  graph->evalOpParm(myPrincipalSign, nodeidx, "principalsign", time, 0);
232  myPrincipalReportAs = 0;
233  if (true && ( (true&&!(((int64(getMeasure())!=4))||((int64(getCurvatureType())!=2)))) ) )
234  graph->evalOpParm(myPrincipalReportAs, nodeidx, "principalreportas", time, 0);
235  myUmbilicCutoff = 0;
236  if (true && ( (true&&!(((int64(getMeasure())!=4))||((int64(getCurvatureType())!=2))||((int64(getPrincipalReportAs())==0)))) ) )
237  graph->evalOpParm(myUmbilicCutoff, nodeidx, "umbiliccutoff", time, 0);
238  myIntegrationMode = 0;
239  if (true && ( (true&&!(((int64(getMeasure())!=7)&&(int64(getMeasure())!=8)))) ) )
240  graph->evalOpParm(myIntegrationMode, nodeidx, "integrationmode", time, 0);
241  mySrcAttrib = "P"_UTsh;
242  if (true && ( (true&&!(((int64(getMeasure())==4))||((int64(getMeasure())==2))||((int64(getMeasure())==0))||((int64(getMeasure())==1))||((int64(getMeasure())==3)))) ) )
243  graph->evalOpParm(mySrcAttrib, nodeidx, "srcattrib", time, 0);
244  mySrcComp = 0;
245  if (true && ( (true&&!(((int64(getMeasure())==4))||((int64(getMeasure())==2))||((int64(getMeasure())==0))||((int64(getMeasure())==1))||((int64(getMeasure())==3)))) ) )
246  graph->evalOpParm(mySrcComp, nodeidx, "srccomp", time, 0);
247  myScaleNormalize = true;
248  if (true && ( (true&&!(((int64(getMeasure())!=4)&&(int64(getMeasure())!=5)&&(int64(getMeasure())!=6)&&(int64(getMeasure())!=8))||((int64(getMeasure())==4)&&(int64(getCurvatureType())==0)))) ) )
249  graph->evalOpParm(myScaleNormalize, nodeidx, "scalenormalize", time, 0);
250  myIntegrationDomain = 0;
251  if (true)
252  graph->evalOpParm(myIntegrationDomain, nodeidx, "integrationdomain", time, 0);
253  myRefineToManifold = true;
254  if (true && ( (true&&!(((int64(getIntegrationDomain())!=1)))) ) )
255  graph->evalOpParm(myRefineToManifold, nodeidx, "refinetomanifold", time, 0);
256  myPieceAttrib = "class"_UTsh;
257  if (true && ( (true&&!(((int64(getIntegrationDomain())!=1)))) ) )
258  graph->evalOpParm(myPieceAttrib, nodeidx, "pieceattrib", time, 0);
259  myUseCustomPos = false;
260  if (true)
261  graph->evalOpParm(myUseCustomPos, nodeidx, "usecustompos", time, 0);
262  myPosAttrib = "P"_UTsh;
263  if (true && ( (true&&!(((getUseCustomPos()==0)))) ) )
264  graph->evalOpParm(myPosAttrib, nodeidx, "posattrib", time, 0);
265  myUseRangeMin = false;
266  if (true && ( (true&&!(((int64(getMeasure())==3))||((int64(getMeasure())==4)&&(int64(getPrincipalReportAs())==1)))) ) )
267  graph->evalOpParm(myUseRangeMin, nodeidx, "userangemin", time, 0);
268  myRangeMin = -1;
269  if (true && ( (true&&!(((int64(getMeasure())==3))||((int64(getMeasure())==4)&&(int64(getPrincipalReportAs())==1))||((getUseRangeMin()==0)))) ) )
270  graph->evalOpParm(myRangeMin, nodeidx, "rangemin", time, 0);
271  myUseRangeMax = false;
272  if (true && ( (true&&!(((int64(getMeasure())==3))||((int64(getMeasure())==4)&&(int64(getPrincipalReportAs())==1)))) ) )
273  graph->evalOpParm(myUseRangeMax, nodeidx, "userangemax", time, 0);
274  myRangeMax = 1;
275  if (true && ( (true&&!(((int64(getMeasure())==3))||((int64(getMeasure())==4)&&(int64(getPrincipalReportAs())==1))||((getUseRangeMax()==0)))) ) )
276  graph->evalOpParm(myRangeMax, nodeidx, "rangemax", time, 0);
277  myUseCenterWidth = true;
278  if (true && ( (true&&!(((int64(getMeasure())==3))||((int64(getMeasure())==4)&&(int64(getPrincipalReportAs())==1)))) ) )
279  graph->evalOpParm(myUseCenterWidth, nodeidx, "usecenterwidth", time, 0);
280  myWidth = 6;
281  if (true && ( (true&&!(((int64(getMeasure())==3))||((int64(getMeasure())==4)&&(int64(getPrincipalReportAs())==1))||((getUseCenterWidth()==0)))) ) )
282  graph->evalOpParm(myWidth, nodeidx, "width", time, 0);
283  myWidthScale = 2;
284  if (true && ( (true&&!(((int64(getMeasure())==3))||((int64(getMeasure())==4)&&(int64(getPrincipalReportAs())==1))||((getUseCenterWidth()==0)))) ) )
285  graph->evalOpParm(myWidthScale, nodeidx, "widthscale", time, 0);
286  myCenterType = 2;
287  if (true && ( (true&&!(((int64(getMeasure())==3))||((int64(getMeasure())==4)&&(int64(getPrincipalReportAs())==1))||((getUseCenterWidth()==0)))) ) )
288  graph->evalOpParm(myCenterType, nodeidx, "centertype", time, 0);
289  myFixedCenter = 0;
290  if (true && ( (true&&!(((int64(getCenterType())!=0))||((int64(getMeasure())==3))||((int64(getMeasure())==4)&&(int64(getPrincipalReportAs())==1))||((getUseCenterWidth()==0)))) ) )
291  graph->evalOpParm(myFixedCenter, nodeidx, "fixedcenter", time, 0);
292  myColorramp = UT_SharedPtr<UT_Ramp>(0);
293  if (true && ( (true&&!(((int64(getMeasure())==3))||((int64(getMeasure())==4)&&(int64(getPrincipalReportAs())==1)))) ) )
294  graph->evalOpParm(myColorramp, nodeidx, "colorramp", time, 0);
295  myVectorScale = 1;
296  if (true && ( (true&&!(((int64(getMeasure())==4)&&(int64(getPrincipalReportAs())==0))||((int64(getMeasure())==2))||((int64(getMeasure())==0))||((int64(getMeasure())==1))||((int64(getMeasure())==3))||((int64(getMeasure())==6)&&(int64(getSrcComp())!=3))||((int64(getMeasure())==8)&&(int64(getSrcComp())!=3))||((int64(getMeasure())==7)&&(int64(getSrcComp())!=3)))) ) )
297  graph->evalOpParm(myVectorScale, nodeidx, "vectorscale", time, 0);
298  myAttribName = "area"_UTsh;
299  if (true)
300  graph->evalOpParm(myAttribName, nodeidx, "attribname", time, 0);
301  myUseTotalAttrib = false;
302  if (true)
303  graph->evalOpParm(myUseTotalAttrib, nodeidx, "usetotalattrib", time, 0);
304  myTotalAttribName = "totalarea"_UTsh;
305  if (true && ( (true&&!(((getUseTotalAttrib()==0)))) ) )
306  graph->evalOpParm(myTotalAttribName, nodeidx, "totalattribname", time, 0);
307  myUseRangeGroup = false;
308  if (true && ( (true&&!(((int64(getMeasure())==3))||((int64(getMeasure())==4)&&(int64(getPrincipalReportAs())==1))||((getUseRangeMin()==0)&&(getUseRangeMax()==0)&&(getUseCenterWidth()==0)))) ) )
309  graph->evalOpParm(myUseRangeGroup, nodeidx, "userangegroup", time, 0);
310  myRangeGroup = "inrange"_UTsh;
311  if (true && ( (true&&!(((getUseRangeGroup()==0)))) ) )
312  graph->evalOpParm(myRangeGroup, nodeidx, "rangegroup", time, 0);
313  myBakeIntoOutput = false;
314  if (true && ( (true&&!(((int64(getMeasure())==3))||((int64(getMeasure())==4)&&(int64(getPrincipalReportAs())==1))||((getUseRangeMin()==0)&&(getUseRangeMax()==0)&&(getUseCenterWidth()==0)))) ) )
315  graph->evalOpParm(myBakeIntoOutput, nodeidx, "bakeintooutput", time, 0);
316  myUseRemapRange = false;
317  if (true && ( (true&&!(((getBakeIntoOutput()==0)))) ) )
318  graph->evalOpParm(myUseRemapRange, nodeidx, "useremaprange", time, 0);
319  myRemapRange = UT_Vector2D(0,1);
320  if (true && ( (true&&!(((getBakeIntoOutput()==0))||((getUseRemapRange()==0)))) ) )
321  graph->evalOpParm(myRemapRange, nodeidx, "remaprange", time, 0);
322 
323  }
324 
325 
326  void loadFromOpSubclass(const LoadParms &loadparms) override
327  {
328  buildFromOp(loadparms.graph(), loadparms.nodeIdx(), loadparms.context().getTime(), loadparms.depnode());
329  }
330 
331 
332  void copyFrom(const OP_NodeParms *src) override
333  {
334  *this = *((const SOP_Measure_2_0Parms *)src);
335  }
336 
337  template <typename T>
338  void
339  doGetParmValue(TempIndex idx, TempIndex instance, T &value) const
340  {
341  if (idx.size() < 1)
342  return;
343  UT_ASSERT(idx.size() == instance.size()+1);
344  if (idx.size() != instance.size()+1)
345  return;
346  switch (idx[0])
347  {
348  case 0:
349  coerceValue(value, myGroup);
350  break;
351  case 1:
352  coerceValue(value, myGroupType);
353  break;
354  case 2:
355  coerceValue(value, myMeasure);
356  break;
357  case 3:
358  coerceValue(value, myCurvatureType);
359  break;
360  case 4:
361  coerceValue(value, myPrincipalType);
362  break;
363  case 5:
364  coerceValue(value, myPrincipalSign);
365  break;
366  case 6:
367  coerceValue(value, myPrincipalReportAs);
368  break;
369  case 7:
370  coerceValue(value, myUmbilicCutoff);
371  break;
372  case 8:
373  coerceValue(value, myIntegrationMode);
374  break;
375  case 9:
376  coerceValue(value, mySrcAttrib);
377  break;
378  case 10:
379  coerceValue(value, mySrcComp);
380  break;
381  case 11:
382  coerceValue(value, myScaleNormalize);
383  break;
384  case 12:
385  coerceValue(value, myIntegrationDomain);
386  break;
387  case 13:
388  coerceValue(value, myRefineToManifold);
389  break;
390  case 14:
391  coerceValue(value, myPieceAttrib);
392  break;
393  case 15:
394  coerceValue(value, myUseCustomPos);
395  break;
396  case 16:
397  coerceValue(value, myPosAttrib);
398  break;
399  case 17:
400  coerceValue(value, myUseRangeMin);
401  break;
402  case 18:
403  coerceValue(value, myRangeMin);
404  break;
405  case 19:
406  coerceValue(value, myUseRangeMax);
407  break;
408  case 20:
409  coerceValue(value, myRangeMax);
410  break;
411  case 21:
412  coerceValue(value, myUseCenterWidth);
413  break;
414  case 22:
415  coerceValue(value, myWidth);
416  break;
417  case 23:
418  coerceValue(value, myWidthScale);
419  break;
420  case 24:
421  coerceValue(value, myCenterType);
422  break;
423  case 25:
424  coerceValue(value, myFixedCenter);
425  break;
426  case 26:
427  coerceValue(value, myColorramp);
428  break;
429  case 27:
430  coerceValue(value, myVectorScale);
431  break;
432  case 28:
433  coerceValue(value, myAttribName);
434  break;
435  case 29:
436  coerceValue(value, myUseTotalAttrib);
437  break;
438  case 30:
439  coerceValue(value, myTotalAttribName);
440  break;
441  case 31:
442  coerceValue(value, myUseRangeGroup);
443  break;
444  case 32:
445  coerceValue(value, myRangeGroup);
446  break;
447  case 33:
448  coerceValue(value, myBakeIntoOutput);
449  break;
450  case 34:
451  coerceValue(value, myUseRemapRange);
452  break;
453  case 35:
454  coerceValue(value, myRemapRange);
455  break;
456 
457  }
458  }
459 
460  bool isParmColorRamp(exint idx) const override
461  {
462  switch (idx)
463  {
464  case 26:
465  return true;
466  }
467  return false;
468  }
469 
470  void getNestParmValue(TempIndex idx, TempIndex instance, exint &value) const override
471  { doGetParmValue(idx, instance, value); }
472  void getNestParmValue(TempIndex idx, TempIndex instance, fpreal &value) const override
473  { doGetParmValue(idx, instance, value); }
474  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector2D &value) const override
475  { doGetParmValue(idx, instance, value); }
476  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector3D &value) const override
477  { doGetParmValue(idx, instance, value); }
478  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector4D &value) const override
479  { doGetParmValue(idx, instance, value); }
480  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix2D &value) const override
481  { doGetParmValue(idx, instance, value); }
482  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
483  { doGetParmValue(idx, instance, value); }
484  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix4D &value) const override
485  { doGetParmValue(idx, instance, value); }
486  void getNestParmValue(TempIndex idx, TempIndex instance, UT_StringHolder &value) const override
487  { doGetParmValue(idx, instance, value); }
488  void getNestParmValue(TempIndex idx, TempIndex instance, UT_SharedPtr<UT_Ramp> &value) const override
489  { doGetParmValue(idx, instance, value); }
490  void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
491  { doGetParmValue(idx, instance, value); }
492 
493  template <typename T>
494  void
495  doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
496  {
497  if (idx.size() < 1)
498  return;
499  UT_ASSERT(idx.size() == instance.size()+1);
500  if (idx.size() != instance.size()+1)
501  return;
502  switch (idx[0])
503  {
504  case 0:
505  coerceValue(myGroup, ( ( value ) ));
506  break;
507  case 1:
508  coerceValue(myGroupType, clampMinValue(0, clampMaxValue(1, value ) ));
509  break;
510  case 2:
511  coerceValue(myMeasure, clampMinValue(0, clampMaxValue(8, value ) ));
512  break;
513  case 3:
514  coerceValue(myCurvatureType, clampMinValue(0, clampMaxValue(3, value ) ));
515  break;
516  case 4:
517  coerceValue(myPrincipalType, clampMinValue(0, clampMaxValue(1, value ) ));
518  break;
519  case 5:
520  coerceValue(myPrincipalSign, clampMinValue(0, clampMaxValue(1, value ) ));
521  break;
522  case 6:
523  coerceValue(myPrincipalReportAs, clampMinValue(0, clampMaxValue(2, value ) ));
524  break;
525  case 7:
526  coerceValue(myUmbilicCutoff, clampMinValue(0, clampMaxValue(1, value ) ));
527  break;
528  case 8:
529  coerceValue(myIntegrationMode, clampMinValue(0, clampMaxValue(2, value ) ));
530  break;
531  case 9:
532  coerceValue(mySrcAttrib, ( ( value ) ));
533  break;
534  case 10:
535  coerceValue(mySrcComp, clampMinValue(0, clampMaxValue(3, value ) ));
536  break;
537  case 11:
538  coerceValue(myScaleNormalize, ( ( value ) ));
539  break;
540  case 12:
541  coerceValue(myIntegrationDomain, clampMinValue(0, clampMaxValue(2, value ) ));
542  break;
543  case 13:
544  coerceValue(myRefineToManifold, ( ( value ) ));
545  break;
546  case 14:
547  coerceValue(myPieceAttrib, ( ( value ) ));
548  break;
549  case 15:
550  coerceValue(myUseCustomPos, ( ( value ) ));
551  break;
552  case 16:
553  coerceValue(myPosAttrib, ( ( value ) ));
554  break;
555  case 17:
556  coerceValue(myUseRangeMin, ( ( value ) ));
557  break;
558  case 18:
559  coerceValue(myRangeMin, ( ( value ) ));
560  break;
561  case 19:
562  coerceValue(myUseRangeMax, ( ( value ) ));
563  break;
564  case 20:
565  coerceValue(myRangeMax, ( ( value ) ));
566  break;
567  case 21:
568  coerceValue(myUseCenterWidth, ( ( value ) ));
569  break;
570  case 22:
571  coerceValue(myWidth, clampMinValue(0, ( value ) ));
572  break;
573  case 23:
574  coerceValue(myWidthScale, clampMinValue(0, clampMaxValue(2, value ) ));
575  break;
576  case 24:
577  coerceValue(myCenterType, clampMinValue(0, clampMaxValue(2, value ) ));
578  break;
579  case 25:
580  coerceValue(myFixedCenter, ( ( value ) ));
581  break;
582  case 26:
583  coerceValue(myColorramp, clampMinValue(2, ( value ) ));
584  break;
585  case 27:
586  coerceValue(myVectorScale, clampMinValue(0, ( value ) ));
587  break;
588  case 28:
589  coerceValue(myAttribName, ( ( value ) ));
590  break;
591  case 29:
592  coerceValue(myUseTotalAttrib, ( ( value ) ));
593  break;
594  case 30:
595  coerceValue(myTotalAttribName, ( ( value ) ));
596  break;
597  case 31:
598  coerceValue(myUseRangeGroup, ( ( value ) ));
599  break;
600  case 32:
601  coerceValue(myRangeGroup, ( ( value ) ));
602  break;
603  case 33:
604  coerceValue(myBakeIntoOutput, ( ( value ) ));
605  break;
606  case 34:
607  coerceValue(myUseRemapRange, ( ( value ) ));
608  break;
609  case 35:
610  coerceValue(myRemapRange, ( ( value ) ));
611  break;
612 
613  }
614  }
615 
616  void setNestParmValue(TempIndex idx, TempIndex instance, const exint &value) override
617  { doSetParmValue(idx, instance, value); }
618  void setNestParmValue(TempIndex idx, TempIndex instance, const fpreal &value) override
619  { doSetParmValue(idx, instance, value); }
620  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector2D &value) override
621  { doSetParmValue(idx, instance, value); }
622  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector3D &value) override
623  { doSetParmValue(idx, instance, value); }
624  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector4D &value) override
625  { doSetParmValue(idx, instance, value); }
626  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix2D &value) override
627  { doSetParmValue(idx, instance, value); }
628  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix3D &value) override
629  { doSetParmValue(idx, instance, value); }
630  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix4D &value) override
631  { doSetParmValue(idx, instance, value); }
632  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_StringHolder &value) override
633  { doSetParmValue(idx, instance, value); }
634  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_SharedPtr<UT_Ramp> &value) override
635  { doSetParmValue(idx, instance, value); }
636  void setNestParmValue(TempIndex idx, TempIndex instance, const PRM_DataItemHandle &value) override
637  { doSetParmValue(idx, instance, value); }
638 
639  exint getNestNumParms(TempIndex idx) const override
640  {
641  if (idx.size() == 0)
642  return 36;
643  switch (idx[0])
644  {
645 
646  }
647  // Invalid
648  return 0;
649  }
650 
651  const char *getNestParmName(TempIndex fieldnum) const override
652  {
653  if (fieldnum.size() < 1)
654  return 0;
655  switch (fieldnum[0])
656  {
657  case 0:
658  return "group";
659  case 1:
660  return "grouptype";
661  case 2:
662  return "measure";
663  case 3:
664  return "curvaturetype";
665  case 4:
666  return "principaltype";
667  case 5:
668  return "principalsign";
669  case 6:
670  return "principalreportas";
671  case 7:
672  return "umbiliccutoff";
673  case 8:
674  return "integrationmode";
675  case 9:
676  return "srcattrib";
677  case 10:
678  return "srccomp";
679  case 11:
680  return "scalenormalize";
681  case 12:
682  return "integrationdomain";
683  case 13:
684  return "refinetomanifold";
685  case 14:
686  return "pieceattrib";
687  case 15:
688  return "usecustompos";
689  case 16:
690  return "posattrib";
691  case 17:
692  return "userangemin";
693  case 18:
694  return "rangemin";
695  case 19:
696  return "userangemax";
697  case 20:
698  return "rangemax";
699  case 21:
700  return "usecenterwidth";
701  case 22:
702  return "width";
703  case 23:
704  return "widthscale";
705  case 24:
706  return "centertype";
707  case 25:
708  return "fixedcenter";
709  case 26:
710  return "colorramp";
711  case 27:
712  return "vectorscale";
713  case 28:
714  return "attribname";
715  case 29:
716  return "usetotalattrib";
717  case 30:
718  return "totalattribname";
719  case 31:
720  return "userangegroup";
721  case 32:
722  return "rangegroup";
723  case 33:
724  return "bakeintooutput";
725  case 34:
726  return "useremaprange";
727  case 35:
728  return "remaprange";
729 
730  }
731  return 0;
732  }
733 
734  ParmType getNestParmType(TempIndex fieldnum) const override
735  {
736  if (fieldnum.size() < 1)
737  return PARM_UNSUPPORTED;
738  switch (fieldnum[0])
739  {
740  case 0:
741  return PARM_STRING;
742  case 1:
743  return PARM_INTEGER;
744  case 2:
745  return PARM_INTEGER;
746  case 3:
747  return PARM_INTEGER;
748  case 4:
749  return PARM_INTEGER;
750  case 5:
751  return PARM_INTEGER;
752  case 6:
753  return PARM_INTEGER;
754  case 7:
755  return PARM_FLOAT;
756  case 8:
757  return PARM_INTEGER;
758  case 9:
759  return PARM_STRING;
760  case 10:
761  return PARM_INTEGER;
762  case 11:
763  return PARM_INTEGER;
764  case 12:
765  return PARM_INTEGER;
766  case 13:
767  return PARM_INTEGER;
768  case 14:
769  return PARM_STRING;
770  case 15:
771  return PARM_INTEGER;
772  case 16:
773  return PARM_STRING;
774  case 17:
775  return PARM_INTEGER;
776  case 18:
777  return PARM_FLOAT;
778  case 19:
779  return PARM_INTEGER;
780  case 20:
781  return PARM_FLOAT;
782  case 21:
783  return PARM_INTEGER;
784  case 22:
785  return PARM_FLOAT;
786  case 23:
787  return PARM_INTEGER;
788  case 24:
789  return PARM_INTEGER;
790  case 25:
791  return PARM_FLOAT;
792  case 26:
793  return PARM_RAMP;
794  case 27:
795  return PARM_FLOAT;
796  case 28:
797  return PARM_STRING;
798  case 29:
799  return PARM_INTEGER;
800  case 30:
801  return PARM_STRING;
802  case 31:
803  return PARM_INTEGER;
804  case 32:
805  return PARM_STRING;
806  case 33:
807  return PARM_INTEGER;
808  case 34:
809  return PARM_INTEGER;
810  case 35:
811  return PARM_VECTOR2;
812 
813  }
814  return PARM_UNSUPPORTED;
815  }
816 
817  // Boiler plate to load individual types.
818  static void loadData(UT_IStream &is, int64 &v)
819  { is.bread(&v, 1); }
820  static void loadData(UT_IStream &is, bool &v)
821  { int64 iv; is.bread(&iv, 1); v = iv; }
822  static void loadData(UT_IStream &is, fpreal64 &v)
823  { is.bread<fpreal64>(&v, 1); }
824  static void loadData(UT_IStream &is, UT_Vector2D &v)
825  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1); }
826  static void loadData(UT_IStream &is, UT_Vector3D &v)
827  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
828  is.bread<fpreal64>(&v.z(), 1); }
829  static void loadData(UT_IStream &is, UT_Vector4D &v)
830  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
831  is.bread<fpreal64>(&v.z(), 1); is.bread<fpreal64>(&v.w(), 1); }
832  static void loadData(UT_IStream &is, UT_Matrix2D &v)
833  { for (int r = 0; r < 2; r++) for (int c = 0; c < 2; c++) is.bread<fpreal64>(&v(r, c), 1); }
834  static void loadData(UT_IStream &is, UT_Matrix3D &v)
835  { for (int r = 0; r < 3; r++) for (int c = 0; c < 3; c++) is.bread<fpreal64>(&v(r, c), 1); }
836  static void loadData(UT_IStream &is, UT_Matrix4D &v)
837  { for (int r = 0; r < 4; r++) for (int c = 0; c < 4; c++) is.bread<fpreal64>(&v(r, c), 1); }
838  static void loadData(UT_IStream &is, UT_Vector2I &v)
839  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1); }
840  static void loadData(UT_IStream &is, UT_Vector3I &v)
841  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
842  is.bread<int64>(&v.z(), 1); }
843  static void loadData(UT_IStream &is, UT_Vector4I &v)
844  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
845  is.bread<int64>(&v.z(), 1); is.bread<int64>(&v.w(), 1); }
847  { is.bread(v); }
849  { UT_StringHolder rampdata;
850  loadData(is, rampdata);
851  if (rampdata.isstring())
852  {
853  v.reset(new UT_Ramp());
854  UT_IStream istr((const char *) rampdata, rampdata.length(), UT_ISTREAM_ASCII);
855  v->load(istr);
856  }
857  else v.reset();
858  }
861  loadData(is, data);
862  if (data.isstring())
863  {
864  // Find the data type.
865  const char *colon = UT_StringWrap(data).findChar(':');
866  if (colon)
867  {
868  int typelen = colon - data.buffer();
870  type.strncpy(data.buffer(), typelen);
871  UT_IStream istr(((const char *) data) + typelen + 1, data.length() - (typelen + 1), UT_ISTREAM_BINARY);
872 
873  v = PRM_DataFactory::parseBinary(type.buffer(), istr);
874  }
875  }
876  else v.reset();
877  }
878 
879  static void saveData(std::ostream &os, int64 v)
880  { UTwrite(os, &v); }
881  static void saveData(std::ostream &os, bool v)
882  { int64 iv = v; UTwrite(os, &iv); }
883  static void saveData(std::ostream &os, fpreal64 v)
884  { UTwrite<fpreal64>(os, &v); }
885  static void saveData(std::ostream &os, UT_Vector2D v)
886  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y()); }
887  static void saveData(std::ostream &os, UT_Vector3D v)
888  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
889  UTwrite<fpreal64>(os, &v.z()); }
890  static void saveData(std::ostream &os, UT_Vector4D v)
891  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
892  UTwrite<fpreal64>(os, &v.z()); UTwrite<fpreal64>(os, &v.w()); }
893  static void saveData(std::ostream &os, UT_Matrix2D v)
895  static void saveData(std::ostream &os, UT_Matrix3D v)
897  static void saveData(std::ostream &os, UT_Matrix4D v)
899  static void saveData(std::ostream &os, UT_StringHolder s)
900  { UT_StringWrap(s).saveBinary(os); }
901  static void saveData(std::ostream &os, UT_SharedPtr<UT_Ramp> s)
903  UT_OStringStream ostr;
904  if (s) s->save(ostr);
905  result = ostr.str();
906  saveData(os, result);
907  }
908  static void saveData(std::ostream &os, PRM_DataItemHandle s)
910  UT_OStringStream ostr;
911  if (s)
912  {
913  ostr << s->getDataTypeToken();
914  ostr << ":";
915  s->saveBinary(ostr);
916  }
917  result = ostr.str();
918  saveData(os, result);
919  }
920 
921 
922  void save(std::ostream &os) const
923  {
924  int32 v = version();
925  UTwrite(os, &v);
926  saveData(os, myGroup);
927  saveData(os, myGroupType);
928  saveData(os, myMeasure);
929  saveData(os, myCurvatureType);
930  saveData(os, myPrincipalType);
931  saveData(os, myPrincipalSign);
932  saveData(os, myPrincipalReportAs);
933  saveData(os, myUmbilicCutoff);
934  saveData(os, myIntegrationMode);
935  saveData(os, mySrcAttrib);
936  saveData(os, mySrcComp);
937  saveData(os, myScaleNormalize);
938  saveData(os, myIntegrationDomain);
939  saveData(os, myRefineToManifold);
940  saveData(os, myPieceAttrib);
941  saveData(os, myUseCustomPos);
942  saveData(os, myPosAttrib);
943  saveData(os, myUseRangeMin);
944  saveData(os, myRangeMin);
945  saveData(os, myUseRangeMax);
946  saveData(os, myRangeMax);
947  saveData(os, myUseCenterWidth);
948  saveData(os, myWidth);
949  saveData(os, myWidthScale);
950  saveData(os, myCenterType);
951  saveData(os, myFixedCenter);
952  saveData(os, myColorramp);
953  saveData(os, myVectorScale);
954  saveData(os, myAttribName);
955  saveData(os, myUseTotalAttrib);
956  saveData(os, myTotalAttribName);
957  saveData(os, myUseRangeGroup);
958  saveData(os, myRangeGroup);
959  saveData(os, myBakeIntoOutput);
960  saveData(os, myUseRemapRange);
961  saveData(os, myRemapRange);
962 
963  }
964 
965  bool load(UT_IStream &is)
966  {
967  int32 v;
968  is.bread(&v, 1);
969  if (version() != v)
970  {
971  // Fail incompatible versions
972  return false;
973  }
974  loadData(is, myGroup);
975  loadData(is, myGroupType);
976  loadData(is, myMeasure);
977  loadData(is, myCurvatureType);
978  loadData(is, myPrincipalType);
979  loadData(is, myPrincipalSign);
980  loadData(is, myPrincipalReportAs);
981  loadData(is, myUmbilicCutoff);
982  loadData(is, myIntegrationMode);
983  loadData(is, mySrcAttrib);
984  loadData(is, mySrcComp);
985  loadData(is, myScaleNormalize);
986  loadData(is, myIntegrationDomain);
987  loadData(is, myRefineToManifold);
988  loadData(is, myPieceAttrib);
989  loadData(is, myUseCustomPos);
990  loadData(is, myPosAttrib);
991  loadData(is, myUseRangeMin);
992  loadData(is, myRangeMin);
993  loadData(is, myUseRangeMax);
994  loadData(is, myRangeMax);
995  loadData(is, myUseCenterWidth);
996  loadData(is, myWidth);
997  loadData(is, myWidthScale);
998  loadData(is, myCenterType);
999  loadData(is, myFixedCenter);
1000  loadData(is, myColorramp);
1001  loadData(is, myVectorScale);
1002  loadData(is, myAttribName);
1003  loadData(is, myUseTotalAttrib);
1004  loadData(is, myTotalAttribName);
1005  loadData(is, myUseRangeGroup);
1006  loadData(is, myRangeGroup);
1007  loadData(is, myBakeIntoOutput);
1008  loadData(is, myUseRemapRange);
1009  loadData(is, myRemapRange);
1010 
1011  return true;
1012  }
1013 
1014  const UT_StringHolder & getGroup() const { return myGroup; }
1015  void setGroup(const UT_StringHolder & val) { myGroup = val; }
1017  {
1018  SOP_Node *thissop = cookparms.getNode();
1019  if (!thissop) return getGroup();
1021  OP_Utils::evalOpParm(result, thissop, "group", cookparms.getCookTime(), 0);
1022  return result;
1023  }
1024  GroupType getGroupType() const { return GroupType(myGroupType); }
1025  void setGroupType(GroupType val) { myGroupType = int64(val); }
1027  {
1028  SOP_Node *thissop = cookparms.getNode();
1029  if (!thissop) return getGroupType();
1030  int64 result;
1031  OP_Utils::evalOpParm(result, thissop, "grouptype", cookparms.getCookTime(), 0);
1032  return GroupType(result);
1033  }
1034  Measure getMeasure() const { return Measure(myMeasure); }
1035  void setMeasure(Measure val) { myMeasure = int64(val); }
1037  {
1038  SOP_Node *thissop = cookparms.getNode();
1039  if (!thissop) return getMeasure();
1040  int64 result;
1041  OP_Utils::evalOpParm(result, thissop, "measure", cookparms.getCookTime(), 0);
1042  return Measure(result);
1043  }
1044  CurvatureType getCurvatureType() const { return CurvatureType(myCurvatureType); }
1045  void setCurvatureType(CurvatureType val) { myCurvatureType = int64(val); }
1047  {
1048  SOP_Node *thissop = cookparms.getNode();
1049  if (!thissop) return getCurvatureType();
1050  int64 result;
1051  OP_Utils::evalOpParm(result, thissop, "curvaturetype", cookparms.getCookTime(), 0);
1052  return CurvatureType(result);
1053  }
1054  PrincipalType getPrincipalType() const { return PrincipalType(myPrincipalType); }
1055  void setPrincipalType(PrincipalType val) { myPrincipalType = int64(val); }
1057  {
1058  SOP_Node *thissop = cookparms.getNode();
1059  if (!thissop) return getPrincipalType();
1060  int64 result;
1061  OP_Utils::evalOpParm(result, thissop, "principaltype", cookparms.getCookTime(), 0);
1062  return PrincipalType(result);
1063  }
1064  PrincipalSign getPrincipalSign() const { return PrincipalSign(myPrincipalSign); }
1065  void setPrincipalSign(PrincipalSign val) { myPrincipalSign = int64(val); }
1067  {
1068  SOP_Node *thissop = cookparms.getNode();
1069  if (!thissop) return getPrincipalSign();
1070  int64 result;
1071  OP_Utils::evalOpParm(result, thissop, "principalsign", cookparms.getCookTime(), 0);
1072  return PrincipalSign(result);
1073  }
1074  PrincipalReportAs getPrincipalReportAs() const { return PrincipalReportAs(myPrincipalReportAs); }
1075  void setPrincipalReportAs(PrincipalReportAs val) { myPrincipalReportAs = int64(val); }
1077  {
1078  SOP_Node *thissop = cookparms.getNode();
1079  if (!thissop) return getPrincipalReportAs();
1080  int64 result;
1081  OP_Utils::evalOpParm(result, thissop, "principalreportas", cookparms.getCookTime(), 0);
1082  return PrincipalReportAs(result);
1083  }
1084  fpreal64 getUmbilicCutoff() const { return myUmbilicCutoff; }
1085  void setUmbilicCutoff(fpreal64 val) { myUmbilicCutoff = val; }
1087  {
1088  SOP_Node *thissop = cookparms.getNode();
1089  if (!thissop) return getUmbilicCutoff();
1090  fpreal64 result;
1091  OP_Utils::evalOpParm(result, thissop, "umbiliccutoff", cookparms.getCookTime(), 0);
1092  return result;
1093  }
1094  IntegrationMode getIntegrationMode() const { return IntegrationMode(myIntegrationMode); }
1095  void setIntegrationMode(IntegrationMode val) { myIntegrationMode = int64(val); }
1097  {
1098  SOP_Node *thissop = cookparms.getNode();
1099  if (!thissop) return getIntegrationMode();
1100  int64 result;
1101  OP_Utils::evalOpParm(result, thissop, "integrationmode", cookparms.getCookTime(), 0);
1102  return IntegrationMode(result);
1103  }
1104  const UT_StringHolder & getSrcAttrib() const { return mySrcAttrib; }
1105  void setSrcAttrib(const UT_StringHolder & val) { mySrcAttrib = val; }
1107  {
1108  SOP_Node *thissop = cookparms.getNode();
1109  if (!thissop) return getSrcAttrib();
1111  OP_Utils::evalOpParm(result, thissop, "srcattrib", cookparms.getCookTime(), 0);
1112  return result;
1113  }
1114  SrcComp getSrcComp() const { return SrcComp(mySrcComp); }
1115  void setSrcComp(SrcComp val) { mySrcComp = int64(val); }
1117  {
1118  SOP_Node *thissop = cookparms.getNode();
1119  if (!thissop) return getSrcComp();
1120  int64 result;
1121  OP_Utils::evalOpParm(result, thissop, "srccomp", cookparms.getCookTime(), 0);
1122  return SrcComp(result);
1123  }
1124  bool getScaleNormalize() const { return myScaleNormalize; }
1125  void setScaleNormalize(bool val) { myScaleNormalize = val; }
1126  bool opScaleNormalize(const SOP_NodeVerb::CookParms &cookparms) const
1127  {
1128  SOP_Node *thissop = cookparms.getNode();
1129  if (!thissop) return getScaleNormalize();
1130  bool result;
1131  OP_Utils::evalOpParm(result, thissop, "scalenormalize", cookparms.getCookTime(), 0);
1132  return result;
1133  }
1134  IntegrationDomain getIntegrationDomain() const { return IntegrationDomain(myIntegrationDomain); }
1135  void setIntegrationDomain(IntegrationDomain val) { myIntegrationDomain = int64(val); }
1137  {
1138  SOP_Node *thissop = cookparms.getNode();
1139  if (!thissop) return getIntegrationDomain();
1140  int64 result;
1141  OP_Utils::evalOpParm(result, thissop, "integrationdomain", cookparms.getCookTime(), 0);
1142  return IntegrationDomain(result);
1143  }
1144  bool getRefineToManifold() const { return myRefineToManifold; }
1145  void setRefineToManifold(bool val) { myRefineToManifold = val; }
1146  bool opRefineToManifold(const SOP_NodeVerb::CookParms &cookparms) const
1147  {
1148  SOP_Node *thissop = cookparms.getNode();
1149  if (!thissop) return getRefineToManifold();
1150  bool result;
1151  OP_Utils::evalOpParm(result, thissop, "refinetomanifold", cookparms.getCookTime(), 0);
1152  return result;
1153  }
1154  const UT_StringHolder & getPieceAttrib() const { return myPieceAttrib; }
1155  void setPieceAttrib(const UT_StringHolder & val) { myPieceAttrib = val; }
1157  {
1158  SOP_Node *thissop = cookparms.getNode();
1159  if (!thissop) return getPieceAttrib();
1161  OP_Utils::evalOpParm(result, thissop, "pieceattrib", cookparms.getCookTime(), 0);
1162  return result;
1163  }
1164  bool getUseCustomPos() const { return myUseCustomPos; }
1165  void setUseCustomPos(bool val) { myUseCustomPos = val; }
1166  bool opUseCustomPos(const SOP_NodeVerb::CookParms &cookparms) const
1167  {
1168  SOP_Node *thissop = cookparms.getNode();
1169  if (!thissop) return getUseCustomPos();
1170  bool result;
1171  OP_Utils::evalOpParm(result, thissop, "usecustompos", cookparms.getCookTime(), 0);
1172  return result;
1173  }
1174  const UT_StringHolder & getPosAttrib() const { return myPosAttrib; }
1175  void setPosAttrib(const UT_StringHolder & val) { myPosAttrib = val; }
1177  {
1178  SOP_Node *thissop = cookparms.getNode();
1179  if (!thissop) return getPosAttrib();
1181  OP_Utils::evalOpParm(result, thissop, "posattrib", cookparms.getCookTime(), 0);
1182  return result;
1183  }
1184  bool getUseRangeMin() const { return myUseRangeMin; }
1185  void setUseRangeMin(bool val) { myUseRangeMin = val; }
1186  bool opUseRangeMin(const SOP_NodeVerb::CookParms &cookparms) const
1187  {
1188  SOP_Node *thissop = cookparms.getNode();
1189  if (!thissop) return getUseRangeMin();
1190  bool result;
1191  OP_Utils::evalOpParm(result, thissop, "userangemin", cookparms.getCookTime(), 0);
1192  return result;
1193  }
1194  fpreal64 getRangeMin() const { return myRangeMin; }
1195  void setRangeMin(fpreal64 val) { myRangeMin = val; }
1197  {
1198  SOP_Node *thissop = cookparms.getNode();
1199  if (!thissop) return getRangeMin();
1200  fpreal64 result;
1201  OP_Utils::evalOpParm(result, thissop, "rangemin", cookparms.getCookTime(), 0);
1202  return result;
1203  }
1204  bool getUseRangeMax() const { return myUseRangeMax; }
1205  void setUseRangeMax(bool val) { myUseRangeMax = val; }
1206  bool opUseRangeMax(const SOP_NodeVerb::CookParms &cookparms) const
1207  {
1208  SOP_Node *thissop = cookparms.getNode();
1209  if (!thissop) return getUseRangeMax();
1210  bool result;
1211  OP_Utils::evalOpParm(result, thissop, "userangemax", cookparms.getCookTime(), 0);
1212  return result;
1213  }
1214  fpreal64 getRangeMax() const { return myRangeMax; }
1215  void setRangeMax(fpreal64 val) { myRangeMax = val; }
1217  {
1218  SOP_Node *thissop = cookparms.getNode();
1219  if (!thissop) return getRangeMax();
1220  fpreal64 result;
1221  OP_Utils::evalOpParm(result, thissop, "rangemax", cookparms.getCookTime(), 0);
1222  return result;
1223  }
1224  bool getUseCenterWidth() const { return myUseCenterWidth; }
1225  void setUseCenterWidth(bool val) { myUseCenterWidth = val; }
1226  bool opUseCenterWidth(const SOP_NodeVerb::CookParms &cookparms) const
1227  {
1228  SOP_Node *thissop = cookparms.getNode();
1229  if (!thissop) return getUseCenterWidth();
1230  bool result;
1231  OP_Utils::evalOpParm(result, thissop, "usecenterwidth", cookparms.getCookTime(), 0);
1232  return result;
1233  }
1234  fpreal64 getWidth() const { return myWidth; }
1235  void setWidth(fpreal64 val) { myWidth = val; }
1236  fpreal64 opWidth(const SOP_NodeVerb::CookParms &cookparms) const
1237  {
1238  SOP_Node *thissop = cookparms.getNode();
1239  if (!thissop) return getWidth();
1240  fpreal64 result;
1241  OP_Utils::evalOpParm(result, thissop, "width", cookparms.getCookTime(), 0);
1242  return result;
1243  }
1244  WidthScale getWidthScale() const { return WidthScale(myWidthScale); }
1245  void setWidthScale(WidthScale val) { myWidthScale = int64(val); }
1247  {
1248  SOP_Node *thissop = cookparms.getNode();
1249  if (!thissop) return getWidthScale();
1250  int64 result;
1251  OP_Utils::evalOpParm(result, thissop, "widthscale", cookparms.getCookTime(), 0);
1252  return WidthScale(result);
1253  }
1254  CenterType getCenterType() const { return CenterType(myCenterType); }
1255  void setCenterType(CenterType val) { myCenterType = int64(val); }
1257  {
1258  SOP_Node *thissop = cookparms.getNode();
1259  if (!thissop) return getCenterType();
1260  int64 result;
1261  OP_Utils::evalOpParm(result, thissop, "centertype", cookparms.getCookTime(), 0);
1262  return CenterType(result);
1263  }
1264  fpreal64 getFixedCenter() const { return myFixedCenter; }
1265  void setFixedCenter(fpreal64 val) { myFixedCenter = val; }
1267  {
1268  SOP_Node *thissop = cookparms.getNode();
1269  if (!thissop) return getFixedCenter();
1270  fpreal64 result;
1271  OP_Utils::evalOpParm(result, thissop, "fixedcenter", cookparms.getCookTime(), 0);
1272  return result;
1273  }
1274  UT_SharedPtr<UT_Ramp> getColorramp() const { return myColorramp; }
1275  void setColorramp(UT_SharedPtr<UT_Ramp> val) { myColorramp = val; }
1277  {
1278  SOP_Node *thissop = cookparms.getNode();
1279  if (!thissop) return getColorramp();
1281  OP_Utils::evalOpParm(result, thissop, "colorramp", cookparms.getCookTime(), 0);
1282  return result;
1283  }
1284  fpreal64 getVectorScale() const { return myVectorScale; }
1285  void setVectorScale(fpreal64 val) { myVectorScale = val; }
1287  {
1288  SOP_Node *thissop = cookparms.getNode();
1289  if (!thissop) return getVectorScale();
1290  fpreal64 result;
1291  OP_Utils::evalOpParm(result, thissop, "vectorscale", cookparms.getCookTime(), 0);
1292  return result;
1293  }
1294  const UT_StringHolder & getAttribName() const { return myAttribName; }
1295  void setAttribName(const UT_StringHolder & val) { myAttribName = val; }
1297  {
1298  SOP_Node *thissop = cookparms.getNode();
1299  if (!thissop) return getAttribName();
1301  OP_Utils::evalOpParm(result, thissop, "attribname", cookparms.getCookTime(), 0);
1302  return result;
1303  }
1304  bool getUseTotalAttrib() const { return myUseTotalAttrib; }
1305  void setUseTotalAttrib(bool val) { myUseTotalAttrib = val; }
1306  bool opUseTotalAttrib(const SOP_NodeVerb::CookParms &cookparms) const
1307  {
1308  SOP_Node *thissop = cookparms.getNode();
1309  if (!thissop) return getUseTotalAttrib();
1310  bool result;
1311  OP_Utils::evalOpParm(result, thissop, "usetotalattrib", cookparms.getCookTime(), 0);
1312  return result;
1313  }
1314  const UT_StringHolder & getTotalAttribName() const { return myTotalAttribName; }
1315  void setTotalAttribName(const UT_StringHolder & val) { myTotalAttribName = val; }
1317  {
1318  SOP_Node *thissop = cookparms.getNode();
1319  if (!thissop) return getTotalAttribName();
1321  OP_Utils::evalOpParm(result, thissop, "totalattribname", cookparms.getCookTime(), 0);
1322  return result;
1323  }
1324  bool getUseRangeGroup() const { return myUseRangeGroup; }
1325  void setUseRangeGroup(bool val) { myUseRangeGroup = val; }
1326  bool opUseRangeGroup(const SOP_NodeVerb::CookParms &cookparms) const
1327  {
1328  SOP_Node *thissop = cookparms.getNode();
1329  if (!thissop) return getUseRangeGroup();
1330  bool result;
1331  OP_Utils::evalOpParm(result, thissop, "userangegroup", cookparms.getCookTime(), 0);
1332  return result;
1333  }
1334  const UT_StringHolder & getRangeGroup() const { return myRangeGroup; }
1335  void setRangeGroup(const UT_StringHolder & val) { myRangeGroup = val; }
1337  {
1338  SOP_Node *thissop = cookparms.getNode();
1339  if (!thissop) return getRangeGroup();
1341  OP_Utils::evalOpParm(result, thissop, "rangegroup", cookparms.getCookTime(), 0);
1342  return result;
1343  }
1344  bool getBakeIntoOutput() const { return myBakeIntoOutput; }
1345  void setBakeIntoOutput(bool val) { myBakeIntoOutput = val; }
1346  bool opBakeIntoOutput(const SOP_NodeVerb::CookParms &cookparms) const
1347  {
1348  SOP_Node *thissop = cookparms.getNode();
1349  if (!thissop) return getBakeIntoOutput();
1350  bool result;
1351  OP_Utils::evalOpParm(result, thissop, "bakeintooutput", cookparms.getCookTime(), 0);
1352  return result;
1353  }
1354  bool getUseRemapRange() const { return myUseRemapRange; }
1355  void setUseRemapRange(bool val) { myUseRemapRange = val; }
1356  bool opUseRemapRange(const SOP_NodeVerb::CookParms &cookparms) const
1357  {
1358  SOP_Node *thissop = cookparms.getNode();
1359  if (!thissop) return getUseRemapRange();
1360  bool result;
1361  OP_Utils::evalOpParm(result, thissop, "useremaprange", cookparms.getCookTime(), 0);
1362  return result;
1363  }
1364  UT_Vector2D getRemapRange() const { return myRemapRange; }
1365  void setRemapRange(UT_Vector2D val) { myRemapRange = val; }
1367  {
1368  SOP_Node *thissop = cookparms.getNode();
1369  if (!thissop) return getRemapRange();
1371  OP_Utils::evalOpParm(result, thissop, "remaprange", cookparms.getCookTime(), 0);
1372  return result;
1373  }
1374 
1375 private:
1376  UT_StringHolder myGroup;
1377  int64 myGroupType;
1378  int64 myMeasure;
1379  int64 myCurvatureType;
1380  int64 myPrincipalType;
1381  int64 myPrincipalSign;
1382  int64 myPrincipalReportAs;
1383  fpreal64 myUmbilicCutoff;
1384  int64 myIntegrationMode;
1385  UT_StringHolder mySrcAttrib;
1386  int64 mySrcComp;
1387  bool myScaleNormalize;
1388  int64 myIntegrationDomain;
1389  bool myRefineToManifold;
1390  UT_StringHolder myPieceAttrib;
1391  bool myUseCustomPos;
1392  UT_StringHolder myPosAttrib;
1393  bool myUseRangeMin;
1394  fpreal64 myRangeMin;
1395  bool myUseRangeMax;
1396  fpreal64 myRangeMax;
1397  bool myUseCenterWidth;
1398  fpreal64 myWidth;
1399  int64 myWidthScale;
1400  int64 myCenterType;
1401  fpreal64 myFixedCenter;
1402  UT_SharedPtr<UT_Ramp> myColorramp;
1403  fpreal64 myVectorScale;
1404  UT_StringHolder myAttribName;
1405  bool myUseTotalAttrib;
1406  UT_StringHolder myTotalAttribName;
1407  bool myUseRangeGroup;
1408  UT_StringHolder myRangeGroup;
1409  bool myBakeIntoOutput;
1410  bool myUseRemapRange;
1411  UT_Vector2D myRemapRange;
1412 
1413 };
const UT_StringHolder & getPieceAttrib() const
Measure opMeasure(const SOP_NodeVerb::CookParms &cookparms) const
CenterType opCenterType(const SOP_NodeVerb::CookParms &cookparms) const
static void saveData(std::ostream &os, bool v)
bool opUseRangeGroup(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getAttribName() const
static void loadData(UT_IStream &is, UT_Matrix4D &v)
UT_StringHolder opPieceAttrib(const SOP_NodeVerb::CookParms &cookparms) const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix2D &value) const override
static void loadData(UT_IStream &is, UT_Vector3D &v)
PrincipalType getPrincipalType() const
SrcComp opSrcComp(const SOP_NodeVerb::CookParms &cookparms) const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix4D &value) const override
int int32
Definition: SYS_Types.h:39
SOP_Node * getNode() const
Definition: SOP_NodeVerb.h:347
void setWidth(fpreal64 val)
static void loadData(UT_IStream &is, bool &v)
fpreal64 opWidth(const SOP_NodeVerb::CookParms &cookparms) const
static void saveData(std::ostream &os, PRM_DataItemHandle s)
void setPrincipalReportAs(PrincipalReportAs val)
T clampMaxValue(fpreal maxvalue, const T &src) const
Definition: OP_NodeParms.h:315
static void loadData(UT_IStream &is, UT_Vector2D &v)
void setRangeMax(fpreal64 val)
bool opRefineToManifold(const SOP_NodeVerb::CookParms &cookparms) const
bool opBakeIntoOutput(const SOP_NodeVerb::CookParms &cookparms) const
UT_SharedPtr< UT_Ramp > getColorramp() const
void getNestParmValue(TempIndex idx, TempIndex instance, exint &value) const override
CurvatureType getCurvatureType() const
void doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
bool opUseRangeMin(const SOP_NodeVerb::CookParms &cookparms) const
static void saveData(std::ostream &os, UT_Matrix2D v)
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
const GLdouble * v
Definition: glcorearb.h:837
fpreal getTime() const
Definition: OP_Context.h:62
UT_Vector2T< fpreal64 > UT_Vector2D
WidthScale opWidthScale(const SOP_NodeVerb::CookParms &cookparms) const
IntegrationMode opIntegrationMode(const SOP_NodeVerb::CookParms &cookparms) const
void setNestParmValue(TempIndex idx, TempIndex instance, const exint &value) override
const UT_StringHolder & getTotalAttribName() const
static void loadData(UT_IStream &is, UT_Matrix3D &v)
void getNestParmValue(TempIndex idx, TempIndex instance, fpreal &value) const override
const OP_Context & context() const
Definition: OP_NodeParms.h:97
void setIntegrationMode(IntegrationMode val)
exint getNestNumParms(TempIndex idx) const override
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
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
GLdouble s
Definition: glad.h:3009
PrincipalReportAs opPrincipalReportAs(const SOP_NodeVerb::CookParms &cookparms) const
An output stream object that owns its own string buffer storage.
UT_StringHolder opGroup(const SOP_NodeVerb::CookParms &cookparms) const
ParmType getNestParmType(TempIndex fieldnum) const override
IntegrationDomain opIntegrationDomain(const SOP_NodeVerb::CookParms &cookparms) const
CenterType getCenterType() const
UT_SharedPtr< UT_Ramp > opColorramp(const SOP_NodeVerb::CookParms &cookparms) const
**But if you need a result
Definition: thread.h:613
fpreal64 opVectorScale(const SOP_NodeVerb::CookParms &cookparms) const
void setUmbilicCutoff(fpreal64 val)
T clampMinValue(fpreal minvalue, const T &src) const
Definition: OP_NodeParms.h:308
static void saveData(std::ostream &os, UT_Vector2D v)
IntegrationDomain getIntegrationDomain() const
void setNestParmValue(TempIndex idx, TempIndex instance, const fpreal &value) override
exint nodeIdx() const
Definition: OP_NodeParms.h:95
static PRM_DataItemHandle parseBinary(const char *type, UT_IStream &is)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_StringHolder &value) const override
const UT_WorkBuffer & str()
Returns a read-only reference to the underlying UT_WorkBuffer.
GroupType getGroupType() const
CurvatureType opCurvatureType(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getSrcAttrib() const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector3D &value) override
void setPosAttrib(const UT_StringHolder &val)
IntegrationMode getIntegrationMode() const
void buildFromOp(const OP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector4.h:491
void setRefineToManifold(bool val)
bool isParmColorRamp(exint idx) const override
bool opUseCenterWidth(const SOP_NodeVerb::CookParms &cookparms) const
void setIntegrationDomain(IntegrationDomain val)
UT_StringHolder opRangeGroup(const SOP_NodeVerb::CookParms &cookparms) const
double fpreal64
Definition: SYS_Types.h:201
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector2.h:423
bool opUseRemapRange(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opSrcAttrib(const SOP_NodeVerb::CookParms &cookparms) const
PrincipalType opPrincipalType(const SOP_NodeVerb::CookParms &cookparms) const
bool operator==(const BaseDimensions< T > &a, const BaseDimensions< Y > &b)
Definition: Dimensions.h:137
static void loadData(UT_IStream &is, UT_Vector2I &v)
void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
UT_Vector2D getRemapRange() const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector3D &value) const override
bool opUseTotalAttrib(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, fpreal64 &v)
void setMeasure(Measure val)
void setVectorScale(fpreal64 val)
exint length() const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector2D &value) const override
void setRemapRange(UT_Vector2D val)
void setRangeGroup(const UT_StringHolder &val)
SYS_FORCE_INLINE const char * buffer() const
std::shared_ptr< T > UT_SharedPtr
Wrapper around std::shared_ptr.
Definition: UT_SharedPtr.h:36
constexpr SYS_FORCE_INLINE T & z() noexcept
Definition: UT_Vector4.h:495
void getNestParmValue(TempIndex idx, TempIndex instance, UT_SharedPtr< UT_Ramp > &value) const override
static void loadData(UT_IStream &is, UT_StringHolder &v)
PrincipalSign getPrincipalSign() const
void setPrincipalType(PrincipalType val)
void setGroup(const UT_StringHolder &val)
PrincipalSign opPrincipalSign(const SOP_NodeVerb::CookParms &cookparms) const
const OP_GraphProxy * graph() const
Definition: OP_NodeParms.h:94
void setTotalAttribName(const UT_StringHolder &val)
void copyFrom(const OP_NodeParms *src) override
bool operator==(const SOP_Measure_2_0Parms &src) const
void setColorramp(UT_SharedPtr< UT_Ramp > val)
bool opUseRangeMax(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 opFixedCenter(const SOP_NodeVerb::CookParms &cookparms) const
void setPieceAttrib(const UT_StringHolder &val)
static void saveData(std::ostream &os, fpreal64 v)
long long int64
Definition: SYS_Types.h:116
fpreal64 opRangeMin(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 opRangeMax(const SOP_NodeVerb::CookParms &cookparms) const
bool load(UT_IStream &is)
static void loadData(UT_IStream &is, UT_Vector3I &v)
static void loadData(UT_IStream &is, UT_Vector4D &v)
fpreal64 getVectorScale() const
void setAttribName(const UT_StringHolder &val)
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix2D &value) override
static void saveData(std::ostream &os, UT_Vector4D v)
void setRangeMin(fpreal64 val)
void save(std::ostream &os) const
virtual void evalOpParm(int64 &v, NodeIdx node, const char *parmname, fpreal time, DEP_MicroNode *depnode) const =0
fpreal64 getRangeMin() const
void saveBinary(std::ostream &os) const
Save string to binary stream.
Definition: UT_String.h:296
void setFixedCenter(fpreal64 val)
static void saveData(std::ostream &os, UT_SharedPtr< UT_Ramp > s)
static void saveData(std::ostream &os, UT_Matrix4D v)
UT_Vector2D opRemapRange(const SOP_NodeVerb::CookParms &cookparms) const
GT_API const UT_StringHolder version
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix3D &value) override
static void loadData(UT_IStream &is, UT_Vector4I &v)
bool opUseCustomPos(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, PRM_DataItemHandle &v)
static void saveData(std::ostream &os, UT_Matrix3D v)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector4D &value) const override
void coerceValue(T &result, const S &src) const
Definition: OP_NodeParms.h:301
const char * getNestParmName(TempIndex fieldnum) const override
UT_StringHolder opPosAttrib(const SOP_NodeVerb::CookParms &cookparms) const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_StringHolder &value) override
void doGetParmValue(TempIndex idx, TempIndex instance, T &value) const
static void loadData(UT_IStream &is, UT_SharedPtr< UT_Ramp > &v)
fpreal64 fpreal
Definition: SYS_Types.h:277
DEP_MicroNode * depnode() const
Definition: OP_NodeParms.h:99
void setGroupType(GroupType val)
WidthScale getWidthScale() const
void setCurvatureType(CurvatureType val)
Utility class for containing a color ramp.
Definition: UT_Ramp.h:88
static void loadData(UT_IStream &is, int64 &v)
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix4D &value) override
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_SharedPtr< UT_Ramp > &value) override
constexpr SYS_FORCE_INLINE T & w() noexcept
Definition: UT_Vector4.h:497
GLuint GLfloat * val
Definition: glcorearb.h:1608
#define SOP_API
Definition: SOP_API.h:10
static void saveData(std::ostream &os, UT_Vector3D v)
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector4D &value) override
fpreal getCookTime() const
Definition: SOP_NodeVerb.h:361
const UT_StringHolder & getRangeGroup() const
void setPrincipalSign(PrincipalSign val)
const char * findChar(int c) const
Definition: UT_String.h:1385
#define UT_ASSERT(ZZ)
Definition: UT_Assert.h:156
fpreal64 opUmbilicCutoff(const SOP_NodeVerb::CookParms &cookparms) const
Definition: core.h:1131
void setNestParmValue(TempIndex idx, TempIndex instance, const PRM_DataItemHandle &value) override
UT_StringHolder opTotalAttribName(const SOP_NodeVerb::CookParms &cookparms) const
GLboolean r
Definition: glcorearb.h:1222
fpreal64 getFixedCenter() const
UT_StringHolder opAttribName(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 getUmbilicCutoff() const
void setCenterType(CenterType val)
bool opScaleNormalize(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getGroup() const
PrincipalReportAs getPrincipalReportAs() const
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector3.h:665
type
Definition: core.h:1059
static void saveData(std::ostream &os, UT_StringHolder s)
void setSrcAttrib(const UT_StringHolder &val)
static void loadData(UT_IStream &is, UT_Matrix2D &v)
fpreal64 getRangeMax() const
bool operator!=(const SOP_Measure_2_0Parms &src) const
static void saveData(std::ostream &os, int64 v)
UT_SharedPtr< const PRM_DataItem > PRM_DataItemHandle
Definition: PRM_Parm.h:89
void loadFromOpSubclass(const LoadParms &loadparms) override
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector2.h:425
SYS_FORCE_INLINE bool isstring() const
const UT_StringHolder & getPosAttrib() const
OP_NodeParms & operator=(const OP_NodeParms &)=default
SYS_FORCE_INLINE void strncpy(const char *src, exint maxlen)
void setSrcComp(SrcComp val)
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector2D &value) override
GLenum src
Definition: glcorearb.h:1793
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector3.h:663
GroupType opGroupType(const SOP_NodeVerb::CookParms &cookparms) const
void setWidthScale(WidthScale val)