HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
SOP_PolyFill.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_PolyFillEnums
24 {
25  enum class Fillmode
26  {
27  NONE = 0,
28  TRIS,
29  TRIFAN,
30  QUADFAN,
31  QUADS,
32  GRIDQUADS
33  };
34 
36  getToken(Fillmode enum_value)
37  {
38  using namespace UT::Literal;
39  switch (enum_value) {
40  case Fillmode::NONE: return "none"_sh;
41  case Fillmode::TRIS: return "tris"_sh;
42  case Fillmode::TRIFAN: return "trifan"_sh;
43  case Fillmode::QUADFAN: return "quadfan"_sh;
44  case Fillmode::QUADS: return "quads"_sh;
45  case Fillmode::GRIDQUADS: return "gridquads"_sh;
46  default: UT_ASSERT(false); return ""_sh;
47  }
48  }
49 
50 }
51 
52 
54 {
55 public:
56  static int version() { return 1; }
57 
59  {
60  myGroup = ""_UTsh;
61  myFillmode = 4;
62  myCompleteloops = true;
63  myReverse = false;
64  myUniquepoints = false;
65  myUpdatenorms = true;
66  myLooptoggle = false;
67  myLoopdistance = 0.25;
68  mySmoothtoggle = true;
69  mySmoothstrength = 50;
70  myCorneroffset = 0;
71  myCustomcornerstoggle = false;
72  myCustomcorners = ""_UTsh;
73  mySubdivtoggle = true;
74  myTranslate = 0;
75  myTangentstrength = 0.4;
76  myPatchgrouptoggle = false;
77  myPatchgroup = "patch"_UTsh;
78  myLoopgrouptoggle = false;
79  myLoopgroup = "loopgroup"_UTsh;
80  myGroupappend = false;
81 
82  }
83 
84  explicit SOP_PolyFillParms(const SOP_PolyFillParms &) = default;
85  SOP_PolyFillParms &operator=(const SOP_PolyFillParms &) = default;
86  SOP_PolyFillParms(SOP_PolyFillParms &&) noexcept = default;
87  SOP_PolyFillParms &operator=(SOP_PolyFillParms &&) noexcept = default;
88 
89  ~SOP_PolyFillParms() override {}
90 
91  bool operator==(const SOP_PolyFillParms &src) const
92  {
93  if (myGroup != src.myGroup) return false;
94  if (myFillmode != src.myFillmode) return false;
95  if (myCompleteloops != src.myCompleteloops) return false;
96  if (myReverse != src.myReverse) return false;
97  if (myUniquepoints != src.myUniquepoints) return false;
98  if (myUpdatenorms != src.myUpdatenorms) return false;
99  if (myLooptoggle != src.myLooptoggle) return false;
100  if (myLoopdistance != src.myLoopdistance) return false;
101  if (mySmoothtoggle != src.mySmoothtoggle) return false;
102  if (mySmoothstrength != src.mySmoothstrength) return false;
103  if (myCorneroffset != src.myCorneroffset) return false;
104  if (myCustomcornerstoggle != src.myCustomcornerstoggle) return false;
105  if (myCustomcorners != src.myCustomcorners) return false;
106  if (mySubdivtoggle != src.mySubdivtoggle) return false;
107  if (myTranslate != src.myTranslate) return false;
108  if (myTangentstrength != src.myTangentstrength) return false;
109  if (myPatchgrouptoggle != src.myPatchgrouptoggle) return false;
110  if (myPatchgroup != src.myPatchgroup) return false;
111  if (myLoopgrouptoggle != src.myLoopgrouptoggle) return false;
112  if (myLoopgroup != src.myLoopgroup) return false;
113  if (myGroupappend != src.myGroupappend) return false;
114 
115  return true;
116  }
117  bool operator!=(const SOP_PolyFillParms &src) const
118  {
119  return !operator==(src);
120  }
122 
123 
124 
125  void buildFromOp(const OP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
126  {
127  myGroup = ""_UTsh;
128  if (true)
129  graph->evalOpParm(myGroup, nodeidx, "group", time, 0);
130  myFillmode = 4;
131  if (true)
132  graph->evalOpParm(myFillmode, nodeidx, "fillmode", time, 0);
133  myCompleteloops = true;
134  if (true)
135  graph->evalOpParm(myCompleteloops, nodeidx, "completeloops", time, 0);
136  myReverse = false;
137  if (true)
138  graph->evalOpParm(myReverse, nodeidx, "reverse", time, 0);
139  myUniquepoints = false;
140  if (true)
141  graph->evalOpParm(myUniquepoints, nodeidx, "uniquepoints", time, 0);
142  myUpdatenorms = true;
143  if (true)
144  graph->evalOpParm(myUpdatenorms, nodeidx, "updatenorms", time, 0);
145  myLooptoggle = false;
146  if (true && ( (true&&!(((int64(getFillmode())==0))||((int64(getFillmode())==1)))) ) )
147  graph->evalOpParm(myLooptoggle, nodeidx, "looptoggle", time, 0);
148  myLoopdistance = 0.25;
149  if (true && ( (true&&!(((int64(getFillmode())==0))||((int64(getFillmode())==1))||((getLooptoggle()==0)))) ) )
150  graph->evalOpParm(myLoopdistance, nodeidx, "loopdistance", time, 0);
151  mySmoothtoggle = true;
152  if (true && ( (true&&!(((int64(getFillmode())==0))||((int64(getFillmode())==1))||((int64(getFillmode())==2))||((int64(getFillmode())==3)))) ) )
153  graph->evalOpParm(mySmoothtoggle, nodeidx, "smoothtoggle", time, 0);
154  mySmoothstrength = 50;
155  if (true && ( (true&&!(((int64(getFillmode())==0))||((int64(getFillmode())==1))||((int64(getFillmode())==2))||((int64(getFillmode())==3))||((getSmoothtoggle()==0)))) ) )
156  graph->evalOpParm(mySmoothstrength, nodeidx, "smoothstrength", time, 0);
157  myCorneroffset = 0;
158  if (true && ( (true&&!(((int64(getFillmode())==0))||((int64(getFillmode())==1))||((int64(getFillmode())==4))||((int64(getFillmode())==2)))) ) )
159  graph->evalOpParm(myCorneroffset, nodeidx, "corneroffset", time, 0);
160  myCustomcornerstoggle = false;
161  if (true && ( (true&&!(((int64(getFillmode())==0))||((int64(getFillmode())==1))||((int64(getFillmode())==4))||((int64(getFillmode())==2)))) ) )
162  graph->evalOpParm(myCustomcornerstoggle, nodeidx, "customcornerstoggle", time, 0);
163  myCustomcorners = ""_UTsh;
164  if (true && ( (true&&!(((int64(getFillmode())==0))||((int64(getFillmode())==1))||((int64(getFillmode())==4))||((int64(getFillmode())==2))||((getCustomcornerstoggle()==0)))) ) )
165  graph->evalOpParm(myCustomcorners, nodeidx, "customcorners", time, 0);
166  mySubdivtoggle = true;
167  if (true && ( (true&&!(((int64(getFillmode())==0))||((int64(getFillmode())==1))||((int64(getFillmode())==4)))) ) )
168  graph->evalOpParm(mySubdivtoggle, nodeidx, "subdivtoggle", time, 0);
169  myTranslate = 0;
170  if (true && ( (true&&!(((int64(getFillmode())==0))||((int64(getFillmode())==1))||((int64(getFillmode())==4))||((getSubdivtoggle()==0)))) ) )
171  graph->evalOpParm(myTranslate, nodeidx, "translate", time, 0);
172  myTangentstrength = 0.4;
173  if (true && ( (true&&!(((int64(getFillmode())==0))||((int64(getFillmode())==1))||((int64(getFillmode())==4))||((int64(getFillmode())==2))||((int64(getFillmode())==3))||((getSubdivtoggle()==0)))) ) )
174  graph->evalOpParm(myTangentstrength, nodeidx, "tangentstrength", time, 0);
175  myPatchgrouptoggle = false;
176  if (true)
177  graph->evalOpParm(myPatchgrouptoggle, nodeidx, "patchgrouptoggle", time, 0);
178  myPatchgroup = "patch"_UTsh;
179  if (true && ( (true&&!(((getPatchgrouptoggle()==0)))) ) )
180  graph->evalOpParm(myPatchgroup, nodeidx, "patchgroup", time, 0);
181  myLoopgrouptoggle = false;
182  if (true && ( (true&&!(((int64(getFillmode())==0))||((int64(getFillmode())==1))||((getLooptoggle()==0)))) ) )
183  graph->evalOpParm(myLoopgrouptoggle, nodeidx, "loopgrouptoggle", time, 0);
184  myLoopgroup = "loopgroup"_UTsh;
185  if (true && ( (true&&!(((int64(getFillmode())==0))||((int64(getFillmode())==1))||((getLooptoggle()==0))||((getLoopgrouptoggle()==0)))) ) )
186  graph->evalOpParm(myLoopgroup, nodeidx, "loopgroup", time, 0);
187  myGroupappend = false;
188  if (true)
189  graph->evalOpParm(myGroupappend, nodeidx, "groupappend", time, 0);
190 
191  }
192 
193 
194  void loadFromOpSubclass(const LoadParms &loadparms) override
195  {
196  buildFromOp(loadparms.graph(), loadparms.nodeIdx(), loadparms.context().getTime(), loadparms.depnode());
197  }
198 
199 
200  void copyFrom(const OP_NodeParms *src) override
201  {
202  *this = *((const SOP_PolyFillParms *)src);
203  }
204 
205  template <typename T>
206  void
207  doGetParmValue(TempIndex idx, TempIndex instance, T &value) const
208  {
209  if (idx.size() < 1)
210  return;
211  UT_ASSERT(idx.size() == instance.size()+1);
212  if (idx.size() != instance.size()+1)
213  return;
214  switch (idx[0])
215  {
216  case 0:
217  coerceValue(value, myGroup);
218  break;
219  case 1:
220  coerceValue(value, myFillmode);
221  break;
222  case 2:
223  coerceValue(value, myCompleteloops);
224  break;
225  case 3:
226  coerceValue(value, myReverse);
227  break;
228  case 4:
229  coerceValue(value, myUniquepoints);
230  break;
231  case 5:
232  coerceValue(value, myUpdatenorms);
233  break;
234  case 6:
235  coerceValue(value, myLooptoggle);
236  break;
237  case 7:
238  coerceValue(value, myLoopdistance);
239  break;
240  case 8:
241  coerceValue(value, mySmoothtoggle);
242  break;
243  case 9:
244  coerceValue(value, mySmoothstrength);
245  break;
246  case 10:
247  coerceValue(value, myCorneroffset);
248  break;
249  case 11:
250  coerceValue(value, myCustomcornerstoggle);
251  break;
252  case 12:
253  coerceValue(value, myCustomcorners);
254  break;
255  case 13:
256  coerceValue(value, mySubdivtoggle);
257  break;
258  case 14:
259  coerceValue(value, myTranslate);
260  break;
261  case 15:
262  coerceValue(value, myTangentstrength);
263  break;
264  case 16:
265  coerceValue(value, myPatchgrouptoggle);
266  break;
267  case 17:
268  coerceValue(value, myPatchgroup);
269  break;
270  case 18:
271  coerceValue(value, myLoopgrouptoggle);
272  break;
273  case 19:
274  coerceValue(value, myLoopgroup);
275  break;
276  case 20:
277  coerceValue(value, myGroupappend);
278  break;
279 
280  }
281  }
282 
283  bool isParmColorRamp(exint idx) const override
284  {
285  switch (idx)
286  {
287 
288  }
289  return false;
290  }
291 
292  void getNestParmValue(TempIndex idx, TempIndex instance, exint &value) const override
293  { doGetParmValue(idx, instance, value); }
294  void getNestParmValue(TempIndex idx, TempIndex instance, fpreal &value) const override
295  { doGetParmValue(idx, instance, value); }
296  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector2D &value) const override
297  { doGetParmValue(idx, instance, value); }
298  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector3D &value) const override
299  { doGetParmValue(idx, instance, value); }
300  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector4D &value) const override
301  { doGetParmValue(idx, instance, value); }
302  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix2D &value) const override
303  { doGetParmValue(idx, instance, value); }
304  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
305  { doGetParmValue(idx, instance, value); }
306  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix4D &value) const override
307  { doGetParmValue(idx, instance, value); }
308  void getNestParmValue(TempIndex idx, TempIndex instance, UT_StringHolder &value) const override
309  { doGetParmValue(idx, instance, value); }
310  void getNestParmValue(TempIndex idx, TempIndex instance, UT_SharedPtr<UT_Ramp> &value) const override
311  { doGetParmValue(idx, instance, value); }
312  void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
313  { doGetParmValue(idx, instance, value); }
314 
315  template <typename T>
316  void
317  doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
318  {
319  if (idx.size() < 1)
320  return;
321  UT_ASSERT(idx.size() == instance.size()+1);
322  if (idx.size() != instance.size()+1)
323  return;
324  switch (idx[0])
325  {
326  case 0:
327  coerceValue(myGroup, ( ( value ) ));
328  break;
329  case 1:
330  coerceValue(myFillmode, clampMinValue(0, clampMaxValue(5, value ) ));
331  break;
332  case 2:
333  coerceValue(myCompleteloops, ( ( value ) ));
334  break;
335  case 3:
336  coerceValue(myReverse, ( ( value ) ));
337  break;
338  case 4:
339  coerceValue(myUniquepoints, ( ( value ) ));
340  break;
341  case 5:
342  coerceValue(myUpdatenorms, ( ( value ) ));
343  break;
344  case 6:
345  coerceValue(myLooptoggle, ( ( value ) ));
346  break;
347  case 7:
348  coerceValue(myLoopdistance, clampMinValue(0, clampMaxValue(1, value ) ));
349  break;
350  case 8:
351  coerceValue(mySmoothtoggle, ( ( value ) ));
352  break;
353  case 9:
354  coerceValue(mySmoothstrength, clampMinValue(0, ( value ) ));
355  break;
356  case 10:
357  coerceValue(myCorneroffset, ( ( value ) ));
358  break;
359  case 11:
360  coerceValue(myCustomcornerstoggle, ( ( value ) ));
361  break;
362  case 12:
363  coerceValue(myCustomcorners, ( ( value ) ));
364  break;
365  case 13:
366  coerceValue(mySubdivtoggle, ( ( value ) ));
367  break;
368  case 14:
369  coerceValue(myTranslate, ( ( value ) ));
370  break;
371  case 15:
372  coerceValue(myTangentstrength, clampMinValue(0, ( value ) ));
373  break;
374  case 16:
375  coerceValue(myPatchgrouptoggle, ( ( value ) ));
376  break;
377  case 17:
378  coerceValue(myPatchgroup, ( ( value ) ));
379  break;
380  case 18:
381  coerceValue(myLoopgrouptoggle, ( ( value ) ));
382  break;
383  case 19:
384  coerceValue(myLoopgroup, ( ( value ) ));
385  break;
386  case 20:
387  coerceValue(myGroupappend, ( ( value ) ));
388  break;
389 
390  }
391  }
392 
393  void setNestParmValue(TempIndex idx, TempIndex instance, const exint &value) override
394  { doSetParmValue(idx, instance, value); }
395  void setNestParmValue(TempIndex idx, TempIndex instance, const fpreal &value) override
396  { doSetParmValue(idx, instance, value); }
397  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector2D &value) override
398  { doSetParmValue(idx, instance, value); }
399  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector3D &value) override
400  { doSetParmValue(idx, instance, value); }
401  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector4D &value) override
402  { doSetParmValue(idx, instance, value); }
403  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix2D &value) override
404  { doSetParmValue(idx, instance, value); }
405  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix3D &value) override
406  { doSetParmValue(idx, instance, value); }
407  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix4D &value) override
408  { doSetParmValue(idx, instance, value); }
409  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_StringHolder &value) override
410  { doSetParmValue(idx, instance, value); }
411  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_SharedPtr<UT_Ramp> &value) override
412  { doSetParmValue(idx, instance, value); }
413  void setNestParmValue(TempIndex idx, TempIndex instance, const PRM_DataItemHandle &value) override
414  { doSetParmValue(idx, instance, value); }
415 
416  exint getNestNumParms(TempIndex idx) const override
417  {
418  if (idx.size() == 0)
419  return 21;
420  switch (idx[0])
421  {
422 
423  }
424  // Invalid
425  return 0;
426  }
427 
428  const char *getNestParmName(TempIndex fieldnum) const override
429  {
430  if (fieldnum.size() < 1)
431  return 0;
432  switch (fieldnum[0])
433  {
434  case 0:
435  return "group";
436  case 1:
437  return "fillmode";
438  case 2:
439  return "completeloops";
440  case 3:
441  return "reverse";
442  case 4:
443  return "uniquepoints";
444  case 5:
445  return "updatenorms";
446  case 6:
447  return "looptoggle";
448  case 7:
449  return "loopdistance";
450  case 8:
451  return "smoothtoggle";
452  case 9:
453  return "smoothstrength";
454  case 10:
455  return "corneroffset";
456  case 11:
457  return "customcornerstoggle";
458  case 12:
459  return "customcorners";
460  case 13:
461  return "subdivtoggle";
462  case 14:
463  return "translate";
464  case 15:
465  return "tangentstrength";
466  case 16:
467  return "patchgrouptoggle";
468  case 17:
469  return "patchgroup";
470  case 18:
471  return "loopgrouptoggle";
472  case 19:
473  return "loopgroup";
474  case 20:
475  return "groupappend";
476 
477  }
478  return 0;
479  }
480 
481  ParmType getNestParmType(TempIndex fieldnum) const override
482  {
483  if (fieldnum.size() < 1)
484  return PARM_UNSUPPORTED;
485  switch (fieldnum[0])
486  {
487  case 0:
488  return PARM_STRING;
489  case 1:
490  return PARM_INTEGER;
491  case 2:
492  return PARM_INTEGER;
493  case 3:
494  return PARM_INTEGER;
495  case 4:
496  return PARM_INTEGER;
497  case 5:
498  return PARM_INTEGER;
499  case 6:
500  return PARM_INTEGER;
501  case 7:
502  return PARM_FLOAT;
503  case 8:
504  return PARM_INTEGER;
505  case 9:
506  return PARM_FLOAT;
507  case 10:
508  return PARM_INTEGER;
509  case 11:
510  return PARM_INTEGER;
511  case 12:
512  return PARM_STRING;
513  case 13:
514  return PARM_INTEGER;
515  case 14:
516  return PARM_FLOAT;
517  case 15:
518  return PARM_FLOAT;
519  case 16:
520  return PARM_INTEGER;
521  case 17:
522  return PARM_STRING;
523  case 18:
524  return PARM_INTEGER;
525  case 19:
526  return PARM_STRING;
527  case 20:
528  return PARM_INTEGER;
529 
530  }
531  return PARM_UNSUPPORTED;
532  }
533 
534  // Boiler plate to load individual types.
535  static void loadData(UT_IStream &is, int64 &v)
536  { is.bread(&v, 1); }
537  static void loadData(UT_IStream &is, bool &v)
538  { int64 iv; is.bread(&iv, 1); v = iv; }
539  static void loadData(UT_IStream &is, fpreal64 &v)
540  { is.bread<fpreal64>(&v, 1); }
541  static void loadData(UT_IStream &is, UT_Vector2D &v)
542  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1); }
543  static void loadData(UT_IStream &is, UT_Vector3D &v)
544  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
545  is.bread<fpreal64>(&v.z(), 1); }
546  static void loadData(UT_IStream &is, UT_Vector4D &v)
547  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
548  is.bread<fpreal64>(&v.z(), 1); is.bread<fpreal64>(&v.w(), 1); }
549  static void loadData(UT_IStream &is, UT_Matrix2D &v)
550  { for (int r = 0; r < 2; r++) for (int c = 0; c < 2; c++) is.bread<fpreal64>(&v(r, c), 1); }
551  static void loadData(UT_IStream &is, UT_Matrix3D &v)
552  { for (int r = 0; r < 3; r++) for (int c = 0; c < 3; c++) is.bread<fpreal64>(&v(r, c), 1); }
553  static void loadData(UT_IStream &is, UT_Matrix4D &v)
554  { for (int r = 0; r < 4; r++) for (int c = 0; c < 4; c++) is.bread<fpreal64>(&v(r, c), 1); }
555  static void loadData(UT_IStream &is, UT_Vector2I &v)
556  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1); }
557  static void loadData(UT_IStream &is, UT_Vector3I &v)
558  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
559  is.bread<int64>(&v.z(), 1); }
560  static void loadData(UT_IStream &is, UT_Vector4I &v)
561  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
562  is.bread<int64>(&v.z(), 1); is.bread<int64>(&v.w(), 1); }
564  { is.bread(v); }
566  { UT_StringHolder rampdata;
567  loadData(is, rampdata);
568  if (rampdata.isstring())
569  {
570  v.reset(new UT_Ramp());
571  UT_IStream istr((const char *) rampdata, rampdata.length(), UT_ISTREAM_ASCII);
572  v->load(istr);
573  }
574  else v.reset();
575  }
578  loadData(is, data);
579  if (data.isstring())
580  {
581  // Find the data type.
582  const char *colon = UT_StringWrap(data).findChar(':');
583  if (colon)
584  {
585  int typelen = colon - data.buffer();
587  type.strncpy(data.buffer(), typelen);
588  UT_IStream istr(((const char *) data) + typelen + 1, data.length() - (typelen + 1), UT_ISTREAM_BINARY);
589 
590  v = PRM_DataFactory::parseBinary(type.buffer(), istr);
591  }
592  }
593  else v.reset();
594  }
595 
596  static void saveData(std::ostream &os, int64 v)
597  { UTwrite(os, &v); }
598  static void saveData(std::ostream &os, bool v)
599  { int64 iv = v; UTwrite(os, &iv); }
600  static void saveData(std::ostream &os, fpreal64 v)
601  { UTwrite<fpreal64>(os, &v); }
602  static void saveData(std::ostream &os, UT_Vector2D v)
603  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y()); }
604  static void saveData(std::ostream &os, UT_Vector3D v)
605  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
606  UTwrite<fpreal64>(os, &v.z()); }
607  static void saveData(std::ostream &os, UT_Vector4D v)
608  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
609  UTwrite<fpreal64>(os, &v.z()); UTwrite<fpreal64>(os, &v.w()); }
610  static void saveData(std::ostream &os, UT_Matrix2D v)
612  static void saveData(std::ostream &os, UT_Matrix3D v)
614  static void saveData(std::ostream &os, UT_Matrix4D v)
616  static void saveData(std::ostream &os, UT_StringHolder s)
617  { UT_StringWrap(s).saveBinary(os); }
618  static void saveData(std::ostream &os, UT_SharedPtr<UT_Ramp> s)
620  UT_OStringStream ostr;
621  if (s) s->save(ostr);
622  result = ostr.str();
623  saveData(os, result);
624  }
625  static void saveData(std::ostream &os, PRM_DataItemHandle s)
627  UT_OStringStream ostr;
628  if (s)
629  {
630  ostr << s->getDataTypeToken();
631  ostr << ":";
632  s->saveBinary(ostr);
633  }
634  result = ostr.str();
635  saveData(os, result);
636  }
637 
638 
639  void save(std::ostream &os) const
640  {
641  int32 v = version();
642  UTwrite(os, &v);
643  saveData(os, myGroup);
644  saveData(os, myFillmode);
645  saveData(os, myCompleteloops);
646  saveData(os, myReverse);
647  saveData(os, myUniquepoints);
648  saveData(os, myUpdatenorms);
649  saveData(os, myLooptoggle);
650  saveData(os, myLoopdistance);
651  saveData(os, mySmoothtoggle);
652  saveData(os, mySmoothstrength);
653  saveData(os, myCorneroffset);
654  saveData(os, myCustomcornerstoggle);
655  saveData(os, myCustomcorners);
656  saveData(os, mySubdivtoggle);
657  saveData(os, myTranslate);
658  saveData(os, myTangentstrength);
659  saveData(os, myPatchgrouptoggle);
660  saveData(os, myPatchgroup);
661  saveData(os, myLoopgrouptoggle);
662  saveData(os, myLoopgroup);
663  saveData(os, myGroupappend);
664 
665  }
666 
667  bool load(UT_IStream &is)
668  {
669  int32 v;
670  is.bread(&v, 1);
671  if (version() != v)
672  {
673  // Fail incompatible versions
674  return false;
675  }
676  loadData(is, myGroup);
677  loadData(is, myFillmode);
678  loadData(is, myCompleteloops);
679  loadData(is, myReverse);
680  loadData(is, myUniquepoints);
681  loadData(is, myUpdatenorms);
682  loadData(is, myLooptoggle);
683  loadData(is, myLoopdistance);
684  loadData(is, mySmoothtoggle);
685  loadData(is, mySmoothstrength);
686  loadData(is, myCorneroffset);
687  loadData(is, myCustomcornerstoggle);
688  loadData(is, myCustomcorners);
689  loadData(is, mySubdivtoggle);
690  loadData(is, myTranslate);
691  loadData(is, myTangentstrength);
692  loadData(is, myPatchgrouptoggle);
693  loadData(is, myPatchgroup);
694  loadData(is, myLoopgrouptoggle);
695  loadData(is, myLoopgroup);
696  loadData(is, myGroupappend);
697 
698  return true;
699  }
700 
701  const UT_StringHolder & getGroup() const { return myGroup; }
702  void setGroup(const UT_StringHolder & val) { myGroup = val; }
704  {
705  SOP_Node *thissop = cookparms.getNode();
706  if (!thissop) return getGroup();
708  OP_Utils::evalOpParm(result, thissop, "group", cookparms.getCookTime(), 0);
709  return result;
710  }
711  Fillmode getFillmode() const { return Fillmode(myFillmode); }
712  void setFillmode(Fillmode val) { myFillmode = int64(val); }
714  {
715  SOP_Node *thissop = cookparms.getNode();
716  if (!thissop) return getFillmode();
717  int64 result;
718  OP_Utils::evalOpParm(result, thissop, "fillmode", cookparms.getCookTime(), 0);
719  return Fillmode(result);
720  }
721  bool getCompleteloops() const { return myCompleteloops; }
722  void setCompleteloops(bool val) { myCompleteloops = val; }
723  bool opCompleteloops(const SOP_NodeVerb::CookParms &cookparms) const
724  {
725  SOP_Node *thissop = cookparms.getNode();
726  if (!thissop) return getCompleteloops();
727  bool result;
728  OP_Utils::evalOpParm(result, thissop, "completeloops", cookparms.getCookTime(), 0);
729  return result;
730  }
731  bool getReverse() const { return myReverse; }
732  void setReverse(bool val) { myReverse = val; }
733  bool opReverse(const SOP_NodeVerb::CookParms &cookparms) const
734  {
735  SOP_Node *thissop = cookparms.getNode();
736  if (!thissop) return getReverse();
737  bool result;
738  OP_Utils::evalOpParm(result, thissop, "reverse", cookparms.getCookTime(), 0);
739  return result;
740  }
741  bool getUniquepoints() const { return myUniquepoints; }
742  void setUniquepoints(bool val) { myUniquepoints = val; }
743  bool opUniquepoints(const SOP_NodeVerb::CookParms &cookparms) const
744  {
745  SOP_Node *thissop = cookparms.getNode();
746  if (!thissop) return getUniquepoints();
747  bool result;
748  OP_Utils::evalOpParm(result, thissop, "uniquepoints", cookparms.getCookTime(), 0);
749  return result;
750  }
751  bool getUpdatenorms() const { return myUpdatenorms; }
752  void setUpdatenorms(bool val) { myUpdatenorms = val; }
753  bool opUpdatenorms(const SOP_NodeVerb::CookParms &cookparms) const
754  {
755  SOP_Node *thissop = cookparms.getNode();
756  if (!thissop) return getUpdatenorms();
757  bool result;
758  OP_Utils::evalOpParm(result, thissop, "updatenorms", cookparms.getCookTime(), 0);
759  return result;
760  }
761  bool getLooptoggle() const { return myLooptoggle; }
762  void setLooptoggle(bool val) { myLooptoggle = val; }
763  bool opLooptoggle(const SOP_NodeVerb::CookParms &cookparms) const
764  {
765  SOP_Node *thissop = cookparms.getNode();
766  if (!thissop) return getLooptoggle();
767  bool result;
768  OP_Utils::evalOpParm(result, thissop, "looptoggle", cookparms.getCookTime(), 0);
769  return result;
770  }
771  fpreal64 getLoopdistance() const { return myLoopdistance; }
772  void setLoopdistance(fpreal64 val) { myLoopdistance = val; }
774  {
775  SOP_Node *thissop = cookparms.getNode();
776  if (!thissop) return getLoopdistance();
778  OP_Utils::evalOpParm(result, thissop, "loopdistance", cookparms.getCookTime(), 0);
779  return result;
780  }
781  bool getSmoothtoggle() const { return mySmoothtoggle; }
782  void setSmoothtoggle(bool val) { mySmoothtoggle = val; }
783  bool opSmoothtoggle(const SOP_NodeVerb::CookParms &cookparms) const
784  {
785  SOP_Node *thissop = cookparms.getNode();
786  if (!thissop) return getSmoothtoggle();
787  bool result;
788  OP_Utils::evalOpParm(result, thissop, "smoothtoggle", cookparms.getCookTime(), 0);
789  return result;
790  }
791  fpreal64 getSmoothstrength() const { return mySmoothstrength; }
792  void setSmoothstrength(fpreal64 val) { mySmoothstrength = val; }
794  {
795  SOP_Node *thissop = cookparms.getNode();
796  if (!thissop) return getSmoothstrength();
798  OP_Utils::evalOpParm(result, thissop, "smoothstrength", cookparms.getCookTime(), 0);
799  return result;
800  }
801  int64 getCorneroffset() const { return myCorneroffset; }
802  void setCorneroffset(int64 val) { myCorneroffset = val; }
804  {
805  SOP_Node *thissop = cookparms.getNode();
806  if (!thissop) return getCorneroffset();
807  int64 result;
808  OP_Utils::evalOpParm(result, thissop, "corneroffset", cookparms.getCookTime(), 0);
809  return result;
810  }
811  bool getCustomcornerstoggle() const { return myCustomcornerstoggle; }
812  void setCustomcornerstoggle(bool val) { myCustomcornerstoggle = val; }
813  bool opCustomcornerstoggle(const SOP_NodeVerb::CookParms &cookparms) const
814  {
815  SOP_Node *thissop = cookparms.getNode();
816  if (!thissop) return getCustomcornerstoggle();
817  bool result;
818  OP_Utils::evalOpParm(result, thissop, "customcornerstoggle", cookparms.getCookTime(), 0);
819  return result;
820  }
821  const UT_StringHolder & getCustomcorners() const { return myCustomcorners; }
822  void setCustomcorners(const UT_StringHolder & val) { myCustomcorners = val; }
824  {
825  SOP_Node *thissop = cookparms.getNode();
826  if (!thissop) return getCustomcorners();
828  OP_Utils::evalOpParm(result, thissop, "customcorners", cookparms.getCookTime(), 0);
829  return result;
830  }
831  bool getSubdivtoggle() const { return mySubdivtoggle; }
832  void setSubdivtoggle(bool val) { mySubdivtoggle = val; }
833  bool opSubdivtoggle(const SOP_NodeVerb::CookParms &cookparms) const
834  {
835  SOP_Node *thissop = cookparms.getNode();
836  if (!thissop) return getSubdivtoggle();
837  bool result;
838  OP_Utils::evalOpParm(result, thissop, "subdivtoggle", cookparms.getCookTime(), 0);
839  return result;
840  }
841  fpreal64 getTranslate() const { return myTranslate; }
842  void setTranslate(fpreal64 val) { myTranslate = val; }
844  {
845  SOP_Node *thissop = cookparms.getNode();
846  if (!thissop) return getTranslate();
848  OP_Utils::evalOpParm(result, thissop, "translate", cookparms.getCookTime(), 0);
849  return result;
850  }
851  fpreal64 getTangentstrength() const { return myTangentstrength; }
852  void setTangentstrength(fpreal64 val) { myTangentstrength = val; }
854  {
855  SOP_Node *thissop = cookparms.getNode();
856  if (!thissop) return getTangentstrength();
858  OP_Utils::evalOpParm(result, thissop, "tangentstrength", cookparms.getCookTime(), 0);
859  return result;
860  }
861  bool getPatchgrouptoggle() const { return myPatchgrouptoggle; }
862  void setPatchgrouptoggle(bool val) { myPatchgrouptoggle = val; }
863  bool opPatchgrouptoggle(const SOP_NodeVerb::CookParms &cookparms) const
864  {
865  SOP_Node *thissop = cookparms.getNode();
866  if (!thissop) return getPatchgrouptoggle();
867  bool result;
868  OP_Utils::evalOpParm(result, thissop, "patchgrouptoggle", cookparms.getCookTime(), 0);
869  return result;
870  }
871  const UT_StringHolder & getPatchgroup() const { return myPatchgroup; }
872  void setPatchgroup(const UT_StringHolder & val) { myPatchgroup = val; }
874  {
875  SOP_Node *thissop = cookparms.getNode();
876  if (!thissop) return getPatchgroup();
878  OP_Utils::evalOpParm(result, thissop, "patchgroup", cookparms.getCookTime(), 0);
879  return result;
880  }
881  bool getLoopgrouptoggle() const { return myLoopgrouptoggle; }
882  void setLoopgrouptoggle(bool val) { myLoopgrouptoggle = val; }
883  bool opLoopgrouptoggle(const SOP_NodeVerb::CookParms &cookparms) const
884  {
885  SOP_Node *thissop = cookparms.getNode();
886  if (!thissop) return getLoopgrouptoggle();
887  bool result;
888  OP_Utils::evalOpParm(result, thissop, "loopgrouptoggle", cookparms.getCookTime(), 0);
889  return result;
890  }
891  const UT_StringHolder & getLoopgroup() const { return myLoopgroup; }
892  void setLoopgroup(const UT_StringHolder & val) { myLoopgroup = val; }
894  {
895  SOP_Node *thissop = cookparms.getNode();
896  if (!thissop) return getLoopgroup();
898  OP_Utils::evalOpParm(result, thissop, "loopgroup", cookparms.getCookTime(), 0);
899  return result;
900  }
901  bool getGroupappend() const { return myGroupappend; }
902  void setGroupappend(bool val) { myGroupappend = val; }
903  bool opGroupappend(const SOP_NodeVerb::CookParms &cookparms) const
904  {
905  SOP_Node *thissop = cookparms.getNode();
906  if (!thissop) return getGroupappend();
907  bool result;
908  OP_Utils::evalOpParm(result, thissop, "groupappend", cookparms.getCookTime(), 0);
909  return result;
910  }
911 
912 private:
913  UT_StringHolder myGroup;
914  int64 myFillmode;
915  bool myCompleteloops;
916  bool myReverse;
917  bool myUniquepoints;
918  bool myUpdatenorms;
919  bool myLooptoggle;
920  fpreal64 myLoopdistance;
921  bool mySmoothtoggle;
922  fpreal64 mySmoothstrength;
923  int64 myCorneroffset;
924  bool myCustomcornerstoggle;
925  UT_StringHolder myCustomcorners;
926  bool mySubdivtoggle;
927  fpreal64 myTranslate;
928  fpreal64 myTangentstrength;
929  bool myPatchgrouptoggle;
930  UT_StringHolder myPatchgroup;
931  bool myLoopgrouptoggle;
932  UT_StringHolder myLoopgroup;
933  bool myGroupappend;
934 
935 };
void setSubdivtoggle(bool val)
bool opCompleteloops(const SOP_NodeVerb::CookParms &cookparms) const
void setFillmode(Fillmode val)
static void loadData(UT_IStream &is, UT_Vector2D &v)
const UT_StringHolder & getLoopgroup() const
static void loadData(UT_IStream &is, int64 &v)
fpreal64 getSmoothstrength() const
bool operator!=(const SOP_PolyFillParms &src) const
bool operator==(const SOP_PolyFillParms &src) const
void loadFromOpSubclass(const LoadParms &loadparms) override
fpreal64 getLoopdistance() const
int int32
Definition: SYS_Types.h:39
SOP_Node * getNode() const
Definition: SOP_NodeVerb.h:347
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix2D &value) const override
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector4D &value) const override
bool opLoopgrouptoggle(const SOP_NodeVerb::CookParms &cookparms) const
SYS_FORCE_INLINE UT_StringHolder getToken(Fillmode enum_value)
bool getSmoothtoggle() const
const UT_StringHolder & getPatchgroup() const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix4D &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
void getNestParmValue(TempIndex idx, TempIndex instance, UT_StringHolder &value) const override
const GLdouble * v
Definition: glcorearb.h:837
fpreal getTime() const
Definition: OP_Context.h:62
const UT_StringHolder & getCustomcorners() const
static void loadData(UT_IStream &is, fpreal64 &v)
void setLoopdistance(fpreal64 val)
const OP_Context & context() const
Definition: OP_NodeParms.h:97
constexpr SYS_FORCE_INLINE T & z() noexcept
Definition: UT_Vector3.h:667
int64 exint
Definition: SYS_Types.h:125
bool opCustomcornerstoggle(const SOP_NodeVerb::CookParms &cookparms) const
SYS_FORCE_INLINE const char * buffer() const
GLdouble s
Definition: glad.h:3009
void buildFromOp(const OP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
exint getNestNumParms(TempIndex idx) const override
An output stream object that owns its own string buffer storage.
void setPatchgrouptoggle(bool val)
static void saveData(std::ostream &os, bool v)
static void saveData(std::ostream &os, UT_StringHolder s)
**But if you need a result
Definition: thread.h:613
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_StringHolder &value) override
bool getUniquepoints() const
static void loadData(UT_IStream &is, PRM_DataItemHandle &v)
exint nodeIdx() const
Definition: OP_NodeParms.h:95
static PRM_DataItemHandle parseBinary(const char *type, UT_IStream &is)
bool load(UT_IStream &is)
bool getSubdivtoggle() const
const UT_WorkBuffer & str()
Returns a read-only reference to the underlying UT_WorkBuffer.
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector3D &value) override
void setCustomcornerstoggle(bool val)
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector4.h:491
bool getGroupappend() const
bool opLooptoggle(const SOP_NodeVerb::CookParms &cookparms) const
bool opSmoothtoggle(const SOP_NodeVerb::CookParms &cookparms) const
int64 getCorneroffset() const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix4D &value) const override
double fpreal64
Definition: SYS_Types.h:201
static void loadData(UT_IStream &is, UT_Vector3D &v)
void setUniquepoints(bool val)
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector2.h:423
bool getLoopgrouptoggle() const
void setTranslate(fpreal64 val)
static void saveData(std::ostream &os, UT_SharedPtr< UT_Ramp > s)
void setSmoothtoggle(bool val)
bool getCustomcornerstoggle() const
void getNestParmValue(TempIndex idx, TempIndex instance, exint &value) const override
bool operator==(const BaseDimensions< T > &a, const BaseDimensions< Y > &b)
Definition: Dimensions.h:137
void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
void setLoopgrouptoggle(bool val)
bool getCompleteloops() const
static void loadData(UT_IStream &is, UT_Matrix3D &v)
bool getReverse() const
UT_StringHolder opCustomcorners(const SOP_NodeVerb::CookParms &cookparms) const
void setReverse(bool val)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector3D &value) const override
static void saveData(std::ostream &os, UT_Vector4D v)
exint length() const
bool opUniquepoints(const SOP_NodeVerb::CookParms &cookparms) const
SYS_FORCE_INLINE const char * buffer() const
std::shared_ptr< T > UT_SharedPtr
Wrapper around std::shared_ptr.
Definition: UT_SharedPtr.h:36
static void loadData(UT_IStream &is, UT_Vector4D &v)
UT_StringHolder opGroup(const SOP_NodeVerb::CookParms &cookparms) const
constexpr SYS_FORCE_INLINE T & z() noexcept
Definition: UT_Vector4.h:495
bool opSubdivtoggle(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, UT_Vector2I &v)
void doGetParmValue(TempIndex idx, TempIndex instance, T &value) const
fpreal64 opSmoothstrength(const SOP_NodeVerb::CookParms &cookparms) const
void setGroup(const UT_StringHolder &val)
static void saveData(std::ostream &os, UT_Matrix3D v)
const OP_GraphProxy * graph() const
Definition: OP_NodeParms.h:94
bool opReverse(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 opLoopdistance(const SOP_NodeVerb::CookParms &cookparms) const
#define SYS_FORCE_INLINE
Definition: SYS_Inline.h:45
void setNestParmValue(TempIndex idx, TempIndex instance, const fpreal &value) override
static void loadData(UT_IStream &is, bool &v)
UT_StringHolder opLoopgroup(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getGroup() const
static void saveData(std::ostream &os, UT_Matrix2D v)
void setCorneroffset(int64 val)
const char * getNestParmName(TempIndex fieldnum) const override
Fillmode getFillmode() const
long long int64
Definition: SYS_Types.h:116
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector2D &value) const override
void doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
static void saveData(std::ostream &os, int64 v)
void setPatchgroup(const UT_StringHolder &val)
void setLooptoggle(bool val)
virtual void evalOpParm(int64 &v, NodeIdx node, const char *parmname, fpreal time, DEP_MicroNode *depnode) const =0
fpreal64 opTranslate(const SOP_NodeVerb::CookParms &cookparms) const
void setSmoothstrength(fpreal64 val)
void setLoopgroup(const UT_StringHolder &val)
UT_StringHolder opPatchgroup(const SOP_NodeVerb::CookParms &cookparms) const
void saveBinary(std::ostream &os) const
Save string to binary stream.
Definition: UT_String.h:296
ParmType getNestParmType(TempIndex fieldnum) const override
void setUpdatenorms(bool val)
GT_API const UT_StringHolder version
void setGroupappend(bool val)
void setNestParmValue(TempIndex idx, TempIndex instance, const PRM_DataItemHandle &value) override
int64 opCorneroffset(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 getTangentstrength() const
static void loadData(UT_IStream &is, UT_Matrix2D &v)
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector4D &value) override
void setCustomcorners(const UT_StringHolder &val)
void copyFrom(const OP_NodeParms *src) override
void getNestParmValue(TempIndex idx, TempIndex instance, fpreal &value) const override
static void saveData(std::ostream &os, UT_Vector3D v)
fpreal64 getTranslate() const
bool opPatchgrouptoggle(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, UT_Vector4I &v)
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_SharedPtr< UT_Ramp > &value) override
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix3D &value) override
bool opUpdatenorms(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 fpreal
Definition: SYS_Types.h:277
DEP_MicroNode * depnode() const
Definition: OP_NodeParms.h:99
bool getPatchgrouptoggle() const
LeafData & operator=(const LeafData &)=delete
Fillmode opFillmode(const SOP_NodeVerb::CookParms &cookparms) const
Utility class for containing a color ramp.
Definition: UT_Ramp.h:92
bool isParmColorRamp(exint idx) const override
void setNestParmValue(TempIndex idx, TempIndex instance, const exint &value) override
constexpr SYS_FORCE_INLINE T & w() noexcept
Definition: UT_Vector4.h:497
void getNestParmValue(TempIndex idx, TempIndex instance, UT_SharedPtr< UT_Ramp > &value) const override
GLuint GLfloat * val
Definition: glcorearb.h:1608
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix2D &value) override
static void saveData(std::ostream &os, UT_Matrix4D v)
#define SOP_API
Definition: SOP_API.h:10
void setTangentstrength(fpreal64 val)
static void loadData(UT_IStream &is, UT_Matrix4D &v)
fpreal getCookTime() const
Definition: SOP_NodeVerb.h:361
static void saveData(std::ostream &os, UT_Vector2D v)
const char * findChar(int c) const
Definition: UT_String.h:1395
#define UT_ASSERT(ZZ)
Definition: UT_Assert.h:156
Definition: core.h:1131
void setCompleteloops(bool val)
bool getLooptoggle() const
bool opGroupappend(const SOP_NodeVerb::CookParms &cookparms) const
GLboolean r
Definition: glcorearb.h:1222
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector3.h:665
type
Definition: core.h:1059
bool getUpdatenorms() const
static void loadData(UT_IStream &is, UT_StringHolder &v)
fpreal64 opTangentstrength(const SOP_NodeVerb::CookParms &cookparms) const
UT_SharedPtr< const PRM_DataItem > PRM_DataItemHandle
Definition: PRM_Parm.h:97
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector2D &value) override
void save(std::ostream &os) const
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector2.h:425
static void saveData(std::ostream &os, fpreal64 v)
SYS_FORCE_INLINE bool isstring() const
static void saveData(std::ostream &os, PRM_DataItemHandle s)
SYS_FORCE_INLINE void strncpy(const char *src, exint maxlen)
static void loadData(UT_IStream &is, UT_SharedPtr< UT_Ramp > &v)
GLenum src
Definition: glcorearb.h:1793
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector3.h:663
static void loadData(UT_IStream &is, UT_Vector3I &v)