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