HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
SOP_SubdivideParms.proto.h
Go to the documentation of this file.
1 /* Automagically Generated by generate_proto.py
2  * Do not Edit
3  */
4 #pragma once
5 
6 #include <SOP/SOP_API.h>
7 #include <SOP/SOP_NodeVerb.h>
8 #include <OP/OP_GraphProxy.h>
9 
10 #include <OP/OP_Utils.h>
11 #include <PRM/PRM_Parm.h>
12 #include <UT/UT_IStream.h>
13 #include <UT/UT_NTStreamUtil.h>
14 #include <UT/UT_Ramp.h>
15 #include <UT/UT_SharedPtr.h>
16 #include <UT/UT_StringHolder.h>
17 #include <UT/UT_StringStream.h>
18 #include <UT/UT_VectorTypes.h>
19 #include <UT/UT_EnvControl.h>
20 #include <SYS/SYS_Types.h>
21 
22 class DEP_MicroNode;
23 
25 {
26 public:
27  static int version() { return 1; }
28 
30  {
31  myGroup = ""_UTsh;
32  myCreaseGroup = ""_UTsh;
33  myDepth = 1;
34  myOverrideCreaseWeight = false;
35  myCreaseWeight = 0;
36  myOutputCreases = 0;
37  myOutputCreaseGroup = "creases"_UTsh;
38  myCloseCracks = 1;
39  myDivideChoice = 1;
40  myBias = 1;
41  mySmoothVertex = true;
42  myEnforceConsistentTopology = false;
43  myLinearCreases = false;
44  myAlgorithm = 0;
45  myBuildPolygonSoup = false;
46  myTreatCurvesIndependent = false;
47  myUpdateNormals = true;
48  myRemoveHoles = true;
49  myVtxBoundaryInterp = "corner"_UTsh;
50  myFVarLinearInterp = "corner1"_UTsh;
51  myCreasingMethod = "uniform"_UTsh;
52  myTriangleSubd = "catclark"_UTsh;
53 
54  }
55 
56  explicit SOP_SubdivideParms(const SOP_SubdivideParms &) = default;
58  SOP_SubdivideParms(SOP_SubdivideParms &&) noexcept = default;
59  SOP_SubdivideParms &operator=(SOP_SubdivideParms &&) noexcept = default;
60 
61  ~SOP_SubdivideParms() override {}
62 
63  bool operator==(const SOP_SubdivideParms &src) const
64  {
65  if (myGroup != src.myGroup) return false;
66  if (myCreaseGroup != src.myCreaseGroup) return false;
67  if (myDepth != src.myDepth) return false;
68  if (myOverrideCreaseWeight != src.myOverrideCreaseWeight) return false;
69  if (myCreaseWeight != src.myCreaseWeight) return false;
70  if (myOutputCreases != src.myOutputCreases) return false;
71  if (myOutputCreaseGroup != src.myOutputCreaseGroup) return false;
72  if (myCloseCracks != src.myCloseCracks) return false;
73  if (myDivideChoice != src.myDivideChoice) return false;
74  if (myBias != src.myBias) return false;
75  if (mySmoothVertex != src.mySmoothVertex) return false;
76  if (myEnforceConsistentTopology != src.myEnforceConsistentTopology) return false;
77  if (myLinearCreases != src.myLinearCreases) return false;
78  if (myAlgorithm != src.myAlgorithm) return false;
79  if (myBuildPolygonSoup != src.myBuildPolygonSoup) return false;
80  if (myTreatCurvesIndependent != src.myTreatCurvesIndependent) return false;
81  if (myUpdateNormals != src.myUpdateNormals) return false;
82  if (myRemoveHoles != src.myRemoveHoles) return false;
83  if (myVtxBoundaryInterp != src.myVtxBoundaryInterp) return false;
84  if (myFVarLinearInterp != src.myFVarLinearInterp) return false;
85  if (myCreasingMethod != src.myCreasingMethod) return false;
86  if (myTriangleSubd != src.myTriangleSubd) return false;
87 
88 
89  if (baseGetSignature() != src.baseGetSignature()) return false;
90 
91  return true;
92  }
93  bool operator!=(const SOP_SubdivideParms &src) const
94  {
95  return !operator==(src);
96  }
97 
98 
99 
100  void buildFromOp(const OP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
101  {
102  myGroup = ""_UTsh;
103  if (true)
104  graph->evalOpParm(myGroup, nodeidx, "subdivide", time, graph->isDirect()?nullptr:depnode);
105  myCreaseGroup = ""_UTsh;
106  if (true)
107  graph->evalOpParm(myCreaseGroup, nodeidx, "creases", time, graph->isDirect()?nullptr:depnode);
108  myDepth = 1;
109  if (true)
110  graph->evalOpParm(myDepth, nodeidx, "iterations", time, graph->isDirect()?nullptr:depnode);
111  myOverrideCreaseWeight = false;
112  if (true)
113  graph->evalOpParm(myOverrideCreaseWeight, nodeidx, "overridecrease", time, graph->isDirect()?nullptr:depnode);
114  myCreaseWeight = 0;
115  if (true)
116  graph->evalOpParm(myCreaseWeight, nodeidx, "creaseweight", time, graph->isDirect()?nullptr:depnode);
117  myOutputCreases = 0;
118  if (true)
119  graph->evalOpParm(myOutputCreases, nodeidx, "outputcrease", time, graph->isDirect()?nullptr:depnode);
120  myOutputCreaseGroup = "creases"_UTsh;
121  if (true)
122  graph->evalOpParm(myOutputCreaseGroup, nodeidx, "outcreasegroup", time, graph->isDirect()?nullptr:depnode);
123  myCloseCracks = 1;
124  if (true)
125  graph->evalOpParm(myCloseCracks, nodeidx, "closeholes", time, graph->isDirect()?nullptr:depnode);
126  myDivideChoice = 1;
127  if (true)
128  graph->evalOpParm(myDivideChoice, nodeidx, "surroundpoly", time, graph->isDirect()?nullptr:depnode);
129  myBias = 1;
130  if (true)
131  graph->evalOpParm(myBias, nodeidx, "bias", time, graph->isDirect()?nullptr:depnode);
132  mySmoothVertex = true;
133  if (true)
134  graph->evalOpParm(mySmoothVertex, nodeidx, "smoothvertex", time, graph->isDirect()?nullptr:depnode);
135  myEnforceConsistentTopology = false;
136  if (true)
137  graph->evalOpParm(myEnforceConsistentTopology, nodeidx, "consisttopology", time, graph->isDirect()?nullptr:depnode);
138  myLinearCreases = false;
139  if (true)
140  graph->evalOpParm(myLinearCreases, nodeidx, "linearcreases", time, graph->isDirect()?nullptr:depnode);
141  myAlgorithm = 0;
142  if (true)
143  graph->evalOpParm(myAlgorithm, nodeidx, "algorithm", time, graph->isDirect()?nullptr:depnode);
144  myBuildPolygonSoup = false;
145  if (true)
146  graph->evalOpParm(myBuildPolygonSoup, nodeidx, "buildpolysoups", time, graph->isDirect()?nullptr:depnode);
147  myTreatCurvesIndependent = false;
148  if (true)
149  graph->evalOpParm(myTreatCurvesIndependent, nodeidx, "indepcurves", time, graph->isDirect()?nullptr:depnode);
150  myUpdateNormals = true;
151  if (true)
152  graph->evalOpParm(myUpdateNormals, nodeidx, "updatenmls", time, graph->isDirect()?nullptr:depnode);
153  myRemoveHoles = true;
154  if (true)
155  graph->evalOpParm(myRemoveHoles, nodeidx, "removeholes", time, graph->isDirect()?nullptr:depnode);
156  myVtxBoundaryInterp = "corner"_UTsh;
157  if (true)
158  graph->evalOpParm(myVtxBoundaryInterp, nodeidx, "vtxboundary", time, graph->isDirect()?nullptr:depnode);
159  myFVarLinearInterp = "corner1"_UTsh;
160  if (true)
161  graph->evalOpParm(myFVarLinearInterp, nodeidx, "fvarlinear", time, graph->isDirect()?nullptr:depnode);
162  myCreasingMethod = "uniform"_UTsh;
163  if (true)
164  graph->evalOpParm(myCreasingMethod, nodeidx, "creasemethod", time, graph->isDirect()?nullptr:depnode);
165  myTriangleSubd = "catclark"_UTsh;
166  if (true)
167  graph->evalOpParm(myTriangleSubd, nodeidx, "trianglesubd", time, graph->isDirect()?nullptr:depnode);
168 
169  }
170 
171 
172  void loadFromOpSubclass(const LoadParms &loadparms) override
173  {
174  buildFromOp(loadparms.graph(), loadparms.nodeIdx(), loadparms.context().getTime(), loadparms.depnode());
175  }
176 
177 
178  void copyFrom(const OP_NodeParms *src) override
179  {
180  *this = *((const SOP_SubdivideParms *)src);
181  }
182 
183  template <typename T>
184  void
185  doGetParmValue(TempIndex idx, TempIndex instance, T &value) const
186  {
187  if (idx.size() < 1)
188  return;
189  UT_ASSERT(idx.size() == instance.size()+1);
190  if (idx.size() != instance.size()+1)
191  return;
192  switch (idx[0])
193  {
194  case 0:
195  coerceValue(value, myGroup);
196  break;
197  case 1:
198  coerceValue(value, myCreaseGroup);
199  break;
200  case 2:
201  coerceValue(value, myDepth);
202  break;
203  case 3:
204  coerceValue(value, myOverrideCreaseWeight);
205  break;
206  case 4:
207  coerceValue(value, myCreaseWeight);
208  break;
209  case 5:
210  coerceValue(value, myOutputCreases);
211  break;
212  case 6:
213  coerceValue(value, myOutputCreaseGroup);
214  break;
215  case 7:
216  coerceValue(value, myCloseCracks);
217  break;
218  case 8:
219  coerceValue(value, myDivideChoice);
220  break;
221  case 9:
222  coerceValue(value, myBias);
223  break;
224  case 10:
225  coerceValue(value, mySmoothVertex);
226  break;
227  case 11:
228  coerceValue(value, myEnforceConsistentTopology);
229  break;
230  case 12:
231  coerceValue(value, myLinearCreases);
232  break;
233  case 13:
234  coerceValue(value, myAlgorithm);
235  break;
236  case 14:
237  coerceValue(value, myBuildPolygonSoup);
238  break;
239  case 15:
240  coerceValue(value, myTreatCurvesIndependent);
241  break;
242  case 16:
243  coerceValue(value, myUpdateNormals);
244  break;
245  case 17:
246  coerceValue(value, myRemoveHoles);
247  break;
248  case 18:
249  coerceValue(value, myVtxBoundaryInterp);
250  break;
251  case 19:
252  coerceValue(value, myFVarLinearInterp);
253  break;
254  case 20:
255  coerceValue(value, myCreasingMethod);
256  break;
257  case 21:
258  coerceValue(value, myTriangleSubd);
259  break;
260 
261  }
262  }
263 
264  bool isParmColorRamp(exint idx) const override
265  {
266  switch (idx)
267  {
268 
269  }
270  return false;
271  }
272 
273  void getNestParmValue(TempIndex idx, TempIndex instance, exint &value) const override
274  { doGetParmValue(idx, instance, value); }
275  void getNestParmValue(TempIndex idx, TempIndex instance, fpreal &value) const override
276  { doGetParmValue(idx, instance, value); }
277  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector2D &value) const override
278  { doGetParmValue(idx, instance, value); }
279  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector3D &value) const override
280  { doGetParmValue(idx, instance, value); }
281  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector4D &value) const override
282  { doGetParmValue(idx, instance, value); }
283  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix2D &value) const override
284  { doGetParmValue(idx, instance, value); }
285  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
286  { doGetParmValue(idx, instance, value); }
287  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix4D &value) const override
288  { doGetParmValue(idx, instance, value); }
289  void getNestParmValue(TempIndex idx, TempIndex instance, UT_StringHolder &value) const override
290  { doGetParmValue(idx, instance, value); }
291  void getNestParmValue(TempIndex idx, TempIndex instance, UT_SharedPtr<UT_Ramp> &value) const override
292  { doGetParmValue(idx, instance, value); }
293  void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
294  { doGetParmValue(idx, instance, value); }
295 
296  template <typename T>
297  void
298  doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
299  {
300  if (idx.size() < 1)
301  return;
302  UT_ASSERT(idx.size() == instance.size()+1);
303  if (idx.size() != instance.size()+1)
304  return;
305  switch (idx[0])
306  {
307  case 0:
308  coerceValue(myGroup, ( ( value ) ));
309  break;
310  case 1:
311  coerceValue(myCreaseGroup, ( ( value ) ));
312  break;
313  case 2:
314  coerceValue(myDepth, ( ( value ) ));
315  break;
316  case 3:
317  coerceValue(myOverrideCreaseWeight, ( ( value ) ));
318  break;
319  case 4:
320  coerceValue(myCreaseWeight, ( ( value ) ));
321  break;
322  case 5:
323  coerceValue(myOutputCreases, ( ( value ) ));
324  break;
325  case 6:
326  coerceValue(myOutputCreaseGroup, ( ( value ) ));
327  break;
328  case 7:
329  coerceValue(myCloseCracks, ( ( value ) ));
330  break;
331  case 8:
332  coerceValue(myDivideChoice, ( ( value ) ));
333  break;
334  case 9:
335  coerceValue(myBias, ( ( value ) ));
336  break;
337  case 10:
338  coerceValue(mySmoothVertex, ( ( value ) ));
339  break;
340  case 11:
341  coerceValue(myEnforceConsistentTopology, ( ( value ) ));
342  break;
343  case 12:
344  coerceValue(myLinearCreases, ( ( value ) ));
345  break;
346  case 13:
347  coerceValue(myAlgorithm, ( ( value ) ));
348  break;
349  case 14:
350  coerceValue(myBuildPolygonSoup, ( ( value ) ));
351  break;
352  case 15:
353  coerceValue(myTreatCurvesIndependent, ( ( value ) ));
354  break;
355  case 16:
356  coerceValue(myUpdateNormals, ( ( value ) ));
357  break;
358  case 17:
359  coerceValue(myRemoveHoles, ( ( value ) ));
360  break;
361  case 18:
362  coerceValue(myVtxBoundaryInterp, ( ( value ) ));
363  break;
364  case 19:
365  coerceValue(myFVarLinearInterp, ( ( value ) ));
366  break;
367  case 20:
368  coerceValue(myCreasingMethod, ( ( value ) ));
369  break;
370  case 21:
371  coerceValue(myTriangleSubd, ( ( 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 22;
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 "subdivide";
420  case 1:
421  return "creases";
422  case 2:
423  return "iterations";
424  case 3:
425  return "overridecrease";
426  case 4:
427  return "creaseweight";
428  case 5:
429  return "outputcrease";
430  case 6:
431  return "outcreasegroup";
432  case 7:
433  return "closeholes";
434  case 8:
435  return "surroundpoly";
436  case 9:
437  return "bias";
438  case 10:
439  return "smoothvertex";
440  case 11:
441  return "consisttopology";
442  case 12:
443  return "linearcreases";
444  case 13:
445  return "algorithm";
446  case 14:
447  return "buildpolysoups";
448  case 15:
449  return "indepcurves";
450  case 16:
451  return "updatenmls";
452  case 17:
453  return "removeholes";
454  case 18:
455  return "vtxboundary";
456  case 19:
457  return "fvarlinear";
458  case 20:
459  return "creasemethod";
460  case 21:
461  return "trianglesubd";
462 
463  }
464  return 0;
465  }
466 
467  ParmType getNestParmType(TempIndex fieldnum) const override
468  {
469  if (fieldnum.size() < 1)
470  return PARM_UNSUPPORTED;
471  switch (fieldnum[0])
472  {
473  case 0:
474  return PARM_STRING;
475  case 1:
476  return PARM_STRING;
477  case 2:
478  return PARM_INTEGER;
479  case 3:
480  return PARM_INTEGER;
481  case 4:
482  return PARM_FLOAT;
483  case 5:
484  return PARM_INTEGER;
485  case 6:
486  return PARM_STRING;
487  case 7:
488  return PARM_INTEGER;
489  case 8:
490  return PARM_INTEGER;
491  case 9:
492  return PARM_FLOAT;
493  case 10:
494  return PARM_INTEGER;
495  case 11:
496  return PARM_INTEGER;
497  case 12:
498  return PARM_INTEGER;
499  case 13:
500  return PARM_INTEGER;
501  case 14:
502  return PARM_INTEGER;
503  case 15:
504  return PARM_INTEGER;
505  case 16:
506  return PARM_INTEGER;
507  case 17:
508  return PARM_INTEGER;
509  case 18:
510  return PARM_STRING;
511  case 19:
512  return PARM_STRING;
513  case 20:
514  return PARM_STRING;
515  case 21:
516  return PARM_STRING;
517 
518  }
519  return PARM_UNSUPPORTED;
520  }
521 
522  // Boiler plate to load individual types.
523  static void loadData(UT_IStream &is, int64 &v)
524  { is.bread(&v, 1); }
525  static void loadData(UT_IStream &is, bool &v)
526  { int64 iv; is.bread(&iv, 1); v = iv; }
527  static void loadData(UT_IStream &is, fpreal64 &v)
528  { is.bread<fpreal64>(&v, 1); }
529  static void loadData(UT_IStream &is, UT_Vector2D &v)
530  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1); }
531  static void loadData(UT_IStream &is, UT_Vector3D &v)
532  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
533  is.bread<fpreal64>(&v.z(), 1); }
534  static void loadData(UT_IStream &is, UT_Vector4D &v)
535  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
536  is.bread<fpreal64>(&v.z(), 1); is.bread<fpreal64>(&v.w(), 1); }
537  static void loadData(UT_IStream &is, UT_Matrix2D &v)
538  { for (int r = 0; r < 2; r++) for (int c = 0; c < 2; c++) is.bread<fpreal64>(&v(r, c), 1); }
539  static void loadData(UT_IStream &is, UT_Matrix3D &v)
540  { for (int r = 0; r < 3; r++) for (int c = 0; c < 3; c++) is.bread<fpreal64>(&v(r, c), 1); }
541  static void loadData(UT_IStream &is, UT_Matrix4D &v)
542  { for (int r = 0; r < 4; r++) for (int c = 0; c < 4; c++) is.bread<fpreal64>(&v(r, c), 1); }
543  static void loadData(UT_IStream &is, UT_Vector2I &v)
544  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1); }
545  static void loadData(UT_IStream &is, UT_Vector3I &v)
546  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
547  is.bread<int64>(&v.z(), 1); }
548  static void loadData(UT_IStream &is, UT_Vector4I &v)
549  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
550  is.bread<int64>(&v.z(), 1); is.bread<int64>(&v.w(), 1); }
552  { is.bread(v); }
554  { UT_StringHolder rampdata;
555  loadData(is, rampdata);
556  if (rampdata.isstring())
557  {
558  v.reset(new UT_Ramp());
559  UT_IStream istr((const char *) rampdata, rampdata.length(), UT_ISTREAM_ASCII);
560  v->load(istr);
561  }
562  else v.reset();
563  }
566  loadData(is, data);
567  if (data.isstring())
568  {
569  // Find the data type.
570  const char *colon = UT_StringWrap(data).findChar(':');
571  if (colon)
572  {
573  int typelen = colon - data.buffer();
575  type.strncpy(data.buffer(), typelen);
576  UT_IStream istr(((const char *) data) + typelen + 1, data.length() - (typelen + 1), UT_ISTREAM_BINARY);
577 
578  v = PRM_DataFactory::parseBinary(type.buffer(), istr);
579  }
580  }
581  else v.reset();
582  }
583 
584  static void saveData(std::ostream &os, int64 v)
585  { UTwrite(os, &v); }
586  static void saveData(std::ostream &os, bool v)
587  { int64 iv = v; UTwrite(os, &iv); }
588  static void saveData(std::ostream &os, fpreal64 v)
589  { UTwrite<fpreal64>(os, &v); }
590  static void saveData(std::ostream &os, UT_Vector2D v)
591  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y()); }
592  static void saveData(std::ostream &os, UT_Vector3D v)
593  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
594  UTwrite<fpreal64>(os, &v.z()); }
595  static void saveData(std::ostream &os, UT_Vector4D v)
596  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
597  UTwrite<fpreal64>(os, &v.z()); UTwrite<fpreal64>(os, &v.w()); }
598  static void saveData(std::ostream &os, UT_Matrix2D v)
600  static void saveData(std::ostream &os, UT_Matrix3D v)
602  static void saveData(std::ostream &os, UT_Matrix4D v)
604  static void saveData(std::ostream &os, UT_StringHolder s)
605  { UT_StringWrap(s).saveBinary(os); }
606  static void saveData(std::ostream &os, UT_SharedPtr<UT_Ramp> s)
608  UT_OStringStream ostr;
609  if (s) s->save(ostr);
610  result = ostr.str();
611  saveData(os, result);
612  }
613  static void saveData(std::ostream &os, PRM_DataItemHandle s)
615  UT_OStringStream ostr;
616  if (s)
617  {
618  ostr << s->getDataTypeToken();
619  ostr << ":";
620  s->saveBinary(ostr);
621  }
622  result = ostr.str();
623  saveData(os, result);
624  }
625 
626 
627  void save(std::ostream &os) const
628  {
629  int32 v = version();
630  UTwrite(os, &v);
631  saveData(os, myGroup);
632  saveData(os, myCreaseGroup);
633  saveData(os, myDepth);
634  saveData(os, myOverrideCreaseWeight);
635  saveData(os, myCreaseWeight);
636  saveData(os, myOutputCreases);
637  saveData(os, myOutputCreaseGroup);
638  saveData(os, myCloseCracks);
639  saveData(os, myDivideChoice);
640  saveData(os, myBias);
641  saveData(os, mySmoothVertex);
642  saveData(os, myEnforceConsistentTopology);
643  saveData(os, myLinearCreases);
644  saveData(os, myAlgorithm);
645  saveData(os, myBuildPolygonSoup);
646  saveData(os, myTreatCurvesIndependent);
647  saveData(os, myUpdateNormals);
648  saveData(os, myRemoveHoles);
649  saveData(os, myVtxBoundaryInterp);
650  saveData(os, myFVarLinearInterp);
651  saveData(os, myCreasingMethod);
652  saveData(os, myTriangleSubd);
653 
654  }
655 
656  bool load(UT_IStream &is)
657  {
658  int32 v;
659  is.bread(&v, 1);
660  if (version() != v)
661  {
662  // Fail incompatible versions
663  return false;
664  }
665  loadData(is, myGroup);
666  loadData(is, myCreaseGroup);
667  loadData(is, myDepth);
668  loadData(is, myOverrideCreaseWeight);
669  loadData(is, myCreaseWeight);
670  loadData(is, myOutputCreases);
671  loadData(is, myOutputCreaseGroup);
672  loadData(is, myCloseCracks);
673  loadData(is, myDivideChoice);
674  loadData(is, myBias);
675  loadData(is, mySmoothVertex);
676  loadData(is, myEnforceConsistentTopology);
677  loadData(is, myLinearCreases);
678  loadData(is, myAlgorithm);
679  loadData(is, myBuildPolygonSoup);
680  loadData(is, myTreatCurvesIndependent);
681  loadData(is, myUpdateNormals);
682  loadData(is, myRemoveHoles);
683  loadData(is, myVtxBoundaryInterp);
684  loadData(is, myFVarLinearInterp);
685  loadData(is, myCreasingMethod);
686  loadData(is, myTriangleSubd);
687 
688  return true;
689  }
690 
691  const UT_StringHolder & getGroup() const { return myGroup; }
692  void setGroup(const UT_StringHolder & val) { myGroup = val; }
694  {
695  SOP_Node *thissop = cookparms.getNode();
696  if (!thissop) return getGroup();
698  OP_Utils::evalOpParm(result, thissop, "subdivide", cookparms.getCookTime(), 0);
699  return result;
700  }
701  const UT_StringHolder & getCreaseGroup() const { return myCreaseGroup; }
702  void setCreaseGroup(const UT_StringHolder & val) { myCreaseGroup = val; }
704  {
705  SOP_Node *thissop = cookparms.getNode();
706  if (!thissop) return getCreaseGroup();
708  OP_Utils::evalOpParm(result, thissop, "creases", cookparms.getCookTime(), 0);
709  return result;
710  }
711  int64 getDepth() const { return myDepth; }
712  void setDepth(int64 val) { myDepth = val; }
713  int64 opDepth(const SOP_NodeVerb::CookParms &cookparms) const
714  {
715  SOP_Node *thissop = cookparms.getNode();
716  if (!thissop) return getDepth();
717  int64 result;
718  OP_Utils::evalOpParm(result, thissop, "iterations", cookparms.getCookTime(), 0);
719  return result;
720  }
721  bool getOverrideCreaseWeight() const { return myOverrideCreaseWeight; }
722  void setOverrideCreaseWeight(bool val) { myOverrideCreaseWeight = val; }
723  bool opOverrideCreaseWeight(const SOP_NodeVerb::CookParms &cookparms) const
724  {
725  SOP_Node *thissop = cookparms.getNode();
726  if (!thissop) return getOverrideCreaseWeight();
727  bool result;
728  OP_Utils::evalOpParm(result, thissop, "overridecrease", cookparms.getCookTime(), 0);
729  return result;
730  }
731  fpreal64 getCreaseWeight() const { return myCreaseWeight; }
732  void setCreaseWeight(fpreal64 val) { myCreaseWeight = val; }
734  {
735  SOP_Node *thissop = cookparms.getNode();
736  if (!thissop) return getCreaseWeight();
738  OP_Utils::evalOpParm(result, thissop, "creaseweight", cookparms.getCookTime(), 0);
739  return result;
740  }
741  bool getOutputCreases() const { return myOutputCreases; }
742  void setOutputCreases(bool val) { myOutputCreases = val; }
743  bool opOutputCreases(const SOP_NodeVerb::CookParms &cookparms) const
744  {
745  SOP_Node *thissop = cookparms.getNode();
746  if (!thissop) return getOutputCreases();
747  bool result;
748  OP_Utils::evalOpParm(result, thissop, "outputcrease", cookparms.getCookTime(), 0);
749  return result;
750  }
751  const UT_StringHolder & getOutputCreaseGroup() const { return myOutputCreaseGroup; }
752  void setOutputCreaseGroup(const UT_StringHolder & val) { myOutputCreaseGroup = val; }
754  {
755  SOP_Node *thissop = cookparms.getNode();
756  if (!thissop) return getOutputCreaseGroup();
758  OP_Utils::evalOpParm(result, thissop, "outcreasegroup", cookparms.getCookTime(), 0);
759  return result;
760  }
761  int64 getCloseCracks() const { return myCloseCracks; }
762  void setCloseCracks(int64 val) { myCloseCracks = val; }
764  {
765  SOP_Node *thissop = cookparms.getNode();
766  if (!thissop) return getCloseCracks();
767  int64 result;
768  OP_Utils::evalOpParm(result, thissop, "closeholes", cookparms.getCookTime(), 0);
769  return result;
770  }
771  int64 getDivideChoice() const { return myDivideChoice; }
772  void setDivideChoice(int64 val) { myDivideChoice = val; }
774  {
775  SOP_Node *thissop = cookparms.getNode();
776  if (!thissop) return getDivideChoice();
777  int64 result;
778  OP_Utils::evalOpParm(result, thissop, "surroundpoly", cookparms.getCookTime(), 0);
779  return result;
780  }
781  fpreal64 getBias() const { return myBias; }
782  void setBias(fpreal64 val) { myBias = val; }
783  fpreal64 opBias(const SOP_NodeVerb::CookParms &cookparms) const
784  {
785  SOP_Node *thissop = cookparms.getNode();
786  if (!thissop) return getBias();
788  OP_Utils::evalOpParm(result, thissop, "bias", cookparms.getCookTime(), 0);
789  return result;
790  }
791  bool getSmoothVertex() const { return mySmoothVertex; }
792  void setSmoothVertex(bool val) { mySmoothVertex = val; }
793  bool opSmoothVertex(const SOP_NodeVerb::CookParms &cookparms) const
794  {
795  SOP_Node *thissop = cookparms.getNode();
796  if (!thissop) return getSmoothVertex();
797  bool result;
798  OP_Utils::evalOpParm(result, thissop, "smoothvertex", cookparms.getCookTime(), 0);
799  return result;
800  }
801  bool getEnforceConsistentTopology() const { return myEnforceConsistentTopology; }
802  void setEnforceConsistentTopology(bool val) { myEnforceConsistentTopology = val; }
804  {
805  SOP_Node *thissop = cookparms.getNode();
806  if (!thissop) return getEnforceConsistentTopology();
807  bool result;
808  OP_Utils::evalOpParm(result, thissop, "consisttopology", cookparms.getCookTime(), 0);
809  return result;
810  }
811  bool getLinearCreases() const { return myLinearCreases; }
812  void setLinearCreases(bool val) { myLinearCreases = val; }
813  bool opLinearCreases(const SOP_NodeVerb::CookParms &cookparms) const
814  {
815  SOP_Node *thissop = cookparms.getNode();
816  if (!thissop) return getLinearCreases();
817  bool result;
818  OP_Utils::evalOpParm(result, thissop, "linearcreases", cookparms.getCookTime(), 0);
819  return result;
820  }
821  int64 getAlgorithm() const { return myAlgorithm; }
822  void setAlgorithm(int64 val) { myAlgorithm = val; }
823  int64 opAlgorithm(const SOP_NodeVerb::CookParms &cookparms) const
824  {
825  SOP_Node *thissop = cookparms.getNode();
826  if (!thissop) return getAlgorithm();
827  int64 result;
828  OP_Utils::evalOpParm(result, thissop, "algorithm", cookparms.getCookTime(), 0);
829  return result;
830  }
831  bool getBuildPolygonSoup() const { return myBuildPolygonSoup; }
832  void setBuildPolygonSoup(bool val) { myBuildPolygonSoup = val; }
833  bool opBuildPolygonSoup(const SOP_NodeVerb::CookParms &cookparms) const
834  {
835  SOP_Node *thissop = cookparms.getNode();
836  if (!thissop) return getBuildPolygonSoup();
837  bool result;
838  OP_Utils::evalOpParm(result, thissop, "buildpolysoups", cookparms.getCookTime(), 0);
839  return result;
840  }
841  bool getTreatCurvesIndependent() const { return myTreatCurvesIndependent; }
842  void setTreatCurvesIndependent(bool val) { myTreatCurvesIndependent = val; }
844  {
845  SOP_Node *thissop = cookparms.getNode();
846  if (!thissop) return getTreatCurvesIndependent();
847  bool result;
848  OP_Utils::evalOpParm(result, thissop, "indepcurves", cookparms.getCookTime(), 0);
849  return result;
850  }
851  bool getUpdateNormals() const { return myUpdateNormals; }
852  void setUpdateNormals(bool val) { myUpdateNormals = val; }
853  bool opUpdateNormals(const SOP_NodeVerb::CookParms &cookparms) const
854  {
855  SOP_Node *thissop = cookparms.getNode();
856  if (!thissop) return getUpdateNormals();
857  bool result;
858  OP_Utils::evalOpParm(result, thissop, "updatenmls", cookparms.getCookTime(), 0);
859  return result;
860  }
861  bool getRemoveHoles() const { return myRemoveHoles; }
862  void setRemoveHoles(bool val) { myRemoveHoles = val; }
863  bool opRemoveHoles(const SOP_NodeVerb::CookParms &cookparms) const
864  {
865  SOP_Node *thissop = cookparms.getNode();
866  if (!thissop) return getRemoveHoles();
867  bool result;
868  OP_Utils::evalOpParm(result, thissop, "removeholes", cookparms.getCookTime(), 0);
869  return result;
870  }
871  const UT_StringHolder & getVtxBoundaryInterp() const { return myVtxBoundaryInterp; }
872  void setVtxBoundaryInterp(const UT_StringHolder & val) { myVtxBoundaryInterp = val; }
874  {
875  SOP_Node *thissop = cookparms.getNode();
876  if (!thissop) return getVtxBoundaryInterp();
878  OP_Utils::evalOpParm(result, thissop, "vtxboundary", cookparms.getCookTime(), 0);
879  return result;
880  }
881  const UT_StringHolder & getFVarLinearInterp() const { return myFVarLinearInterp; }
882  void setFVarLinearInterp(const UT_StringHolder & val) { myFVarLinearInterp = val; }
884  {
885  SOP_Node *thissop = cookparms.getNode();
886  if (!thissop) return getFVarLinearInterp();
888  OP_Utils::evalOpParm(result, thissop, "fvarlinear", cookparms.getCookTime(), 0);
889  return result;
890  }
891  const UT_StringHolder & getCreasingMethod() const { return myCreasingMethod; }
892  void setCreasingMethod(const UT_StringHolder & val) { myCreasingMethod = val; }
894  {
895  SOP_Node *thissop = cookparms.getNode();
896  if (!thissop) return getCreasingMethod();
898  OP_Utils::evalOpParm(result, thissop, "creasemethod", cookparms.getCookTime(), 0);
899  return result;
900  }
901  const UT_StringHolder & getTriangleSubd() const { return myTriangleSubd; }
902  void setTriangleSubd(const UT_StringHolder & val) { myTriangleSubd = val; }
904  {
905  SOP_Node *thissop = cookparms.getNode();
906  if (!thissop) return getTriangleSubd();
908  OP_Utils::evalOpParm(result, thissop, "trianglesubd", cookparms.getCookTime(), 0);
909  return result;
910  }
911 
912 private:
913  UT_StringHolder myGroup;
914  UT_StringHolder myCreaseGroup;
915  int64 myDepth;
916  bool myOverrideCreaseWeight;
917  fpreal64 myCreaseWeight;
918  bool myOutputCreases;
919  UT_StringHolder myOutputCreaseGroup;
920  int64 myCloseCracks;
921  int64 myDivideChoice;
922  fpreal64 myBias;
923  bool mySmoothVertex;
924  bool myEnforceConsistentTopology;
925  bool myLinearCreases;
926  int64 myAlgorithm;
927  bool myBuildPolygonSoup;
928  bool myTreatCurvesIndependent;
929  bool myUpdateNormals;
930  bool myRemoveHoles;
931  UT_StringHolder myVtxBoundaryInterp;
932  UT_StringHolder myFVarLinearInterp;
933  UT_StringHolder myCreasingMethod;
934  UT_StringHolder myTriangleSubd;
935 
936 };
static void loadData(UT_IStream &is, UT_SharedPtr< UT_Ramp > &v)
bool getTreatCurvesIndependent() const
type
Definition: core.h:556
static void saveData(std::ostream &os, bool v)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector2D &value) const override
static void loadData(UT_IStream &is, UT_Vector2D &v)
static void loadData(UT_IStream &is, UT_Vector4I &v)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_StringHolder &value) const override
int int32
Definition: SYS_Types.h:39
SOP_Node * getNode() const
Definition: SOP_NodeVerb.h:347
int64 opCloseCracks(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getTriangleSubd() const
fpreal64 getCreaseWeight() const
void copyFrom(const OP_NodeParms *src) override
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix2D &value) override
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix4D &value) override
bool operator==(const SOP_SubdivideParms &src) const
bool opUpdateNormals(const SOP_NodeVerb::CookParms &cookparms) const
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:63
GLsizei const GLfloat * value
Definition: glcorearb.h:824
bool getOverrideCreaseWeight() const
static void saveData(std::ostream &os, UT_Vector3D v)
const OP_Context & context() const
Definition: OP_NodeParms.h:97
bool opBuildPolygonSoup(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, PRM_DataItemHandle &v)
constexpr SYS_FORCE_INLINE T & z() noexcept
Definition: UT_Vector3.h:667
int64 exint
Definition: SYS_Types.h:125
UT_StringHolder opGroup(const SOP_NodeVerb::CookParms &cookparms) const
void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
SYS_FORCE_INLINE const char * buffer() const
void save(std::ostream &os) const
GLdouble s
Definition: glad.h:3009
An output stream object that owns its own string buffer storage.
**But if you need a result
Definition: thread.h:622
int64 opDivideChoice(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opCreaseGroup(const SOP_NodeVerb::CookParms &cookparms) const
ParmType getNestParmType(TempIndex fieldnum) const override
exint nodeIdx() const
Definition: OP_NodeParms.h:95
static PRM_DataItemHandle parseBinary(const char *type, UT_IStream &is)
const UT_WorkBuffer & str()
Returns a read-only reference to the underlying UT_WorkBuffer.
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix3D &value) override
void setCreaseGroup(const UT_StringHolder &val)
UT_StringHolder opTriangleSubd(const SOP_NodeVerb::CookParms &cookparms) const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector4D &value) override
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector4.h:491
void setBuildPolygonSoup(bool val)
static void loadData(UT_IStream &is, UT_Matrix3D &v)
double fpreal64
Definition: SYS_Types.h:201
UT_SharedPtr< const PRM_DataItem > PRM_DataItemHandle
Definition: APEX_Include.h:55
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector2.h:423
bool opTreatCurvesIndependent(const SOP_NodeVerb::CookParms &cookparms) const
bool opEnforceConsistentTopology(const SOP_NodeVerb::CookParms &cookparms) const
void setTriangleSubd(const UT_StringHolder &val)
bool opOverrideCreaseWeight(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, int64 &v)
exint length() const
static void saveData(std::ostream &os, UT_SharedPtr< UT_Ramp > s)
void doGetParmValue(TempIndex idx, TempIndex instance, T &value) const
bool isParmColorRamp(exint idx) const override
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 saveData(std::ostream &os, UT_Matrix4D v)
const UT_StringHolder & getCreasingMethod() const
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 saveData(std::ostream &os, UT_Vector4D v)
UT_StringHolder opCreasingMethod(const SOP_NodeVerb::CookParms &cookparms) const
const OP_GraphProxy * graph() const
Definition: OP_NodeParms.h:94
void setFVarLinearInterp(const UT_StringHolder &val)
bool opSmoothVertex(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getOutputCreaseGroup() const
void setNestParmValue(TempIndex idx, TempIndex instance, const fpreal &value) override
void setTreatCurvesIndependent(bool val)
const UT_StringHolder & getFVarLinearInterp() const
static void loadData(UT_IStream &is, UT_StringHolder &v)
void setEnforceConsistentTopology(bool val)
void setNestParmValue(TempIndex idx, TempIndex instance, const PRM_DataItemHandle &value) override
void setNestParmValue(TempIndex idx, TempIndex instance, const exint &value) override
static void loadData(UT_IStream &is, UT_Matrix4D &v)
long long int64
Definition: SYS_Types.h:116
static void loadData(UT_IStream &is, UT_Matrix2D &v)
bool opLinearCreases(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getGroup() const
void buildFromOp(const OP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
virtual void evalOpParm(int64 &v, NodeIdx node, const char *parmname, fpreal time, DEP_MicroNode *depnode) const =0
void setOutputCreaseGroup(const UT_StringHolder &val)
void setOverrideCreaseWeight(bool val)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector3D &value) const override
void setVtxBoundaryInterp(const UT_StringHolder &val)
exint getNestNumParms(TempIndex idx) const override
void loadFromOpSubclass(const LoadParms &loadparms) override
void saveBinary(std::ostream &os) const
Save string to binary stream.
Definition: UT_String.h:303
static void saveData(std::ostream &os, UT_Matrix3D v)
void setBias(fpreal64 val)
GT_API const UT_StringHolder version
static void saveData(std::ostream &os, int64 v)
void doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix4D &value) const override
int64 opDepth(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 opCreaseWeight(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, UT_Vector3I &v)
const UT_StringHolder & getCreaseGroup() const
static void saveData(std::ostream &os, UT_Matrix2D v)
void coerceValue(T &result, const S &src) const
Definition: OP_NodeParms.h:310
static void saveData(std::ostream &os, UT_StringHolder s)
int64 opAlgorithm(const SOP_NodeVerb::CookParms &cookparms) const
static void saveData(std::ostream &os, UT_Vector2D v)
static void loadData(UT_IStream &is, UT_Vector2I &v)
fpreal64 fpreal
Definition: SYS_Types.h:278
DEP_MicroNode * depnode() const
Definition: OP_NodeParms.h:99
Utility class for containing a color ramp.
Definition: UT_Ramp.h:96
void setCreasingMethod(const UT_StringHolder &val)
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_StringHolder &value) override
void getNestParmValue(TempIndex idx, TempIndex instance, fpreal &value) const override
constexpr SYS_FORCE_INLINE T & w() noexcept
Definition: UT_Vector4.h:497
bool opOutputCreases(const SOP_NodeVerb::CookParms &cookparms) const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector3D &value) override
static void saveData(std::ostream &os, fpreal64 v)
GLuint GLfloat * val
Definition: glcorearb.h:1608
virtual UT_StringHolder baseGetSignature() const
Definition: OP_NodeParms.h:294
#define SOP_API
Definition: SOP_API.h:10
static void loadData(UT_IStream &is, UT_Vector3D &v)
bool load(UT_IStream &is)
fpreal getCookTime() const
Definition: SOP_NodeVerb.h:372
static void saveData(std::ostream &os, PRM_DataItemHandle s)
void getNestParmValue(TempIndex idx, TempIndex instance, exint &value) const override
bool getEnforceConsistentTopology() const
void setCreaseWeight(fpreal64 val)
static void loadData(UT_IStream &is, bool &v)
const char * findChar(int c) const
Definition: UT_String.h:1401
#define UT_ASSERT(ZZ)
Definition: UT_Assert.h:156
const UT_StringHolder & getVtxBoundaryInterp() const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix2D &value) const override
UT_StringHolder opVtxBoundaryInterp(const SOP_NodeVerb::CookParms &cookparms) const
GLboolean r
Definition: glcorearb.h:1222
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_SharedPtr< UT_Ramp > &value) override
UT_StringHolder opOutputCreaseGroup(const SOP_NodeVerb::CookParms &cookparms) const
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector3.h:665
bool opRemoveHoles(const SOP_NodeVerb::CookParms &cookparms) const
virtual bool isDirect() const =0
Direct proxies mirror actual nodes:
static void loadData(UT_IStream &is, UT_Vector4D &v)
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector2D &value) override
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector2.h:425
SYS_FORCE_INLINE bool isstring() const
bool operator!=(const SOP_SubdivideParms &src) const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector4D &value) const override
UT_StringHolder opFVarLinearInterp(const SOP_NodeVerb::CookParms &cookparms) const
const char * getNestParmName(TempIndex fieldnum) const override
fpreal64 opBias(const SOP_NodeVerb::CookParms &cookparms) const
OP_NodeParms & operator=(const OP_NodeParms &)=default
void setGroup(const UT_StringHolder &val)
SYS_FORCE_INLINE void strncpy(const char *src, exint maxlen)
static void loadData(UT_IStream &is, fpreal64 &v)
GLenum src
Definition: glcorearb.h:1793
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector3.h:663