HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
SOP_Fuse-2.0.proto.h
Go to the documentation of this file.
1 /* Automagically Generated by generate_proto.py
2  * Do not Edit
3  */
4 #pragma once
5 
6 #include <SOP/SOP_API.h>
7 #include <SOP/SOP_NodeVerb.h>
8 #include <SOP/SOP_GraphProxy.h>
9 
10 #include <OP/OP_Utils.h>
11 #include <PRM/PRM_Parm.h>
12 #include <UT/UT_IStream.h>
13 #include <UT/UT_NTStreamUtil.h>
14 #include <UT/UT_Ramp.h>
15 #include <UT/UT_SharedPtr.h>
16 #include <UT/UT_StringHolder.h>
17 #include <UT/UT_StringStream.h>
18 #include <UT/UT_VectorTypes.h>
19 #include <UT/UT_EnvControl.h>
20 #include <SYS/SYS_Types.h>
21 
22 class DEP_MicroNode;
23 namespace SOP_Fuse_2_0Enums
24 {
25  enum class Snaptype
26  {
27  DISTANCESNAP = 0,
28  GRIDSNAP,
29  SPECIFIED
30  };
31 
33  getToken(Snaptype enum_value)
34  {
35  using namespace UT::Literal;
36  switch (enum_value) {
37  case Snaptype::DISTANCESNAP: return "distancesnap"_sh;
38  case Snaptype::GRIDSNAP: return "gridsnap"_sh;
39  case Snaptype::SPECIFIED: return "specified"_sh;
40  default: UT_ASSERT(false); return ""_sh;
41  }
42  }
43 
44  enum class Algorithm
45  {
46  LOWEST = 0,
47  CLOSEST
48  };
49 
51  getToken(Algorithm enum_value)
52  {
53  using namespace UT::Literal;
54  switch (enum_value) {
55  case Algorithm::LOWEST: return "lowest"_sh;
56  case Algorithm::CLOSEST: return "closest"_sh;
57  default: UT_ASSERT(false); return ""_sh;
58  }
59  }
60 
61  enum class TargetClass
62  {
63  POINT = 0,
64  VERTEX,
65  PRIM,
66  DETAIL
67  };
68 
70  getToken(TargetClass enum_value)
71  {
72  using namespace UT::Literal;
73  switch (enum_value) {
74  case TargetClass::POINT: return "point"_sh;
75  case TargetClass::VERTEX: return "vertex"_sh;
76  case TargetClass::PRIM: return "prim"_sh;
77  case TargetClass::DETAIL: return "detail"_sh;
78  default: UT_ASSERT(false); return ""_sh;
79  }
80  }
81 
82  enum class PositionSnapMethod
83  {
84  AVERAGE = 0,
85  LOWEST,
86  HIGHEST,
87  MAX,
88  MIN,
89  MODE,
90  MEDIAN,
91  SUM,
92  SUMSQUARE,
93  RMS,
96  MINWEIGHT,
97  MAXWEIGHT
98  };
99 
102  {
103  using namespace UT::Literal;
104  switch (enum_value) {
105  case PositionSnapMethod::AVERAGE: return "average"_sh;
106  case PositionSnapMethod::LOWEST: return "lowest"_sh;
107  case PositionSnapMethod::HIGHEST: return "highest"_sh;
108  case PositionSnapMethod::MAX: return "max"_sh;
109  case PositionSnapMethod::MIN: return "min"_sh;
110  case PositionSnapMethod::MODE: return "mode"_sh;
111  case PositionSnapMethod::MEDIAN: return "median"_sh;
112  case PositionSnapMethod::SUM: return "sum"_sh;
113  case PositionSnapMethod::SUMSQUARE: return "sumsquare"_sh;
114  case PositionSnapMethod::RMS: return "rms"_sh;
115  case PositionSnapMethod::WEIGHTEDMEAN: return "weightedmean"_sh;
116  case PositionSnapMethod::WEIGHTEDSUM: return "weightedsum"_sh;
117  case PositionSnapMethod::MINWEIGHT: return "minweight"_sh;
118  case PositionSnapMethod::MAXWEIGHT: return "maxweight"_sh;
119  default: UT_ASSERT(false); return ""_sh;
120  }
121  }
122 
123  enum class Matchtype
124  {
125  MATCH = 0,
126  MISMATCH
127  };
128 
130  getToken(Matchtype enum_value)
131  {
132  using namespace UT::Literal;
133  switch (enum_value) {
134  case Matchtype::MATCH: return "match"_sh;
135  case Matchtype::MISMATCH: return "mismatch"_sh;
136  default: UT_ASSERT(false); return ""_sh;
137  }
138  }
139 
140  enum class Gridtype
141  {
142  SPACING = 0,
143  LINES,
144  POW2
145  };
146 
148  getToken(Gridtype enum_value)
149  {
150  using namespace UT::Literal;
151  switch (enum_value) {
152  case Gridtype::SPACING: return "spacing"_sh;
153  case Gridtype::LINES: return "lines"_sh;
154  case Gridtype::POW2: return "pow2"_sh;
155  default: UT_ASSERT(false); return ""_sh;
156  }
157  }
158 
159  enum class Gridround
160  {
161  NEAREST = 0,
162  DOWN,
163  UP
164  };
165 
167  getToken(Gridround enum_value)
168  {
169  using namespace UT::Literal;
170  switch (enum_value) {
171  case Gridround::NEAREST: return "nearest"_sh;
172  case Gridround::DOWN: return "down"_sh;
173  case Gridround::UP: return "up"_sh;
174  default: UT_ASSERT(false); return ""_sh;
175  }
176  }
177 
178  enum class Attribsnapmethod
179  {
180  MAX = 0,
181  MIN,
182  MEAN,
183  MODE,
184  MEDIAN,
185  SUM,
186  SUMSQUARE,
187  RMS,
188  FIRST,
189  LAST,
190  CONCAT,
191  WEIGHTEDMEAN,
192  WEIGHTEDSUM,
193  MINWEIGHT,
194  MAXWEIGHT,
196  };
197 
200  {
201  using namespace UT::Literal;
202  switch (enum_value) {
203  case Attribsnapmethod::MAX: return "max"_sh;
204  case Attribsnapmethod::MIN: return "min"_sh;
205  case Attribsnapmethod::MEAN: return "mean"_sh;
206  case Attribsnapmethod::MODE: return "mode"_sh;
207  case Attribsnapmethod::MEDIAN: return "median"_sh;
208  case Attribsnapmethod::SUM: return "sum"_sh;
209  case Attribsnapmethod::SUMSQUARE: return "sumsquare"_sh;
210  case Attribsnapmethod::RMS: return "rms"_sh;
211  case Attribsnapmethod::FIRST: return "first"_sh;
212  case Attribsnapmethod::LAST: return "last"_sh;
213  case Attribsnapmethod::CONCAT: return "concat"_sh;
214  case Attribsnapmethod::WEIGHTEDMEAN: return "weightedmean"_sh;
215  case Attribsnapmethod::WEIGHTEDSUM: return "weightedsum"_sh;
216  case Attribsnapmethod::MINWEIGHT: return "minweight"_sh;
217  case Attribsnapmethod::MAXWEIGHT: return "maxweight"_sh;
218  case Attribsnapmethod::CONCATORDERED: return "concatordered"_sh;
219  default: UT_ASSERT(false); return ""_sh;
220  }
221  }
222 
223  enum class Grouppropagation
224  {
225  LEASTPOINTNUMBER = 0,
227  UNION,
228  INTERSECT,
229  MODE
230  };
231 
234  {
235  using namespace UT::Literal;
236  switch (enum_value) {
237  case Grouppropagation::LEASTPOINTNUMBER: return "leastpointnumber"_sh;
238  case Grouppropagation::GREATESTPOINTNUMBER: return "greatestpointnumber"_sh;
239  case Grouppropagation::UNION: return "union"_sh;
240  case Grouppropagation::INTERSECT: return "intersect"_sh;
241  case Grouppropagation::MODE: return "mode"_sh;
242  default: UT_ASSERT(false); return ""_sh;
243  }
244  }
245 
246 }
247 
248 
250 {
251 public:
252  static int version() { return 1; }
254  {
258 
259 
261  {
262  attribsnapmethod = 8;
263  pointattribnames = ""_UTsh;
264  pointattribweightname = "weight"_UTsh;
265 
266  }
267 
268  bool operator==(const Numpointattribs &src) const
269  {
270  if (attribsnapmethod != src.attribsnapmethod) return false;
271  if (pointattribnames != src.pointattribnames) return false;
272  if (pointattribweightname != src.pointattribweightname) return false;
273 
274  return true;
275  }
276  bool operator!=(const Numpointattribs &src) const
277  {
278  return !operator==(src);
279  }
280 
281  };
282 
284  {
286 
287  buf.strcat("[ ");
288  for (int i = 0; i < list.entries(); i++)
289  {
290  if (i)
291  buf.strcat(", ");
292  buf.strcat("( ");
293  buf.append("");
294  buf.appendSprintf("%d", (int) list(i).attribsnapmethod);
295  buf.append(", ");
296  { UT_String tmp; tmp = UT_StringWrap(list(i).pointattribnames).makeQuotedString('"'); buf.strcat(tmp); }
297  buf.append(", ");
298  { UT_String tmp; tmp = UT_StringWrap(list(i).pointattribweightname).makeQuotedString('"'); buf.strcat(tmp); }
299 
300  buf.strcat(" )");
301  }
302  buf.strcat(" ]");
303 
305  return result;
306  }
307  struct Numgroups
308  {
311 
312 
314  {
315  grouppropagation = 0;
316  pointgroupnames = ""_UTsh;
317 
318  }
319 
320  bool operator==(const Numgroups &src) const
321  {
322  if (grouppropagation != src.grouppropagation) return false;
323  if (pointgroupnames != src.pointgroupnames) return false;
324 
325  return true;
326  }
327  bool operator!=(const Numgroups &src) const
328  {
329  return !operator==(src);
330  }
331 
332  };
333 
335  {
337 
338  buf.strcat("[ ");
339  for (int i = 0; i < list.entries(); i++)
340  {
341  if (i)
342  buf.strcat(", ");
343  buf.strcat("( ");
344  buf.append("");
345  buf.appendSprintf("%d", (int) list(i).grouppropagation);
346  buf.append(", ");
347  { UT_String tmp; tmp = UT_StringWrap(list(i).pointgroupnames).makeQuotedString('"'); buf.strcat(tmp); }
348 
349  buf.strcat(" )");
350  }
351  buf.strcat(" ]");
352 
354  return result;
355  }
356 
358  {
359  myQuerygroup = ""_UTsh;
360  myPosAttrib = "P"_UTsh;
361  mySnaptype = 0;
362  myAlgorithm = 0;
363  myUseTol3D = true;
364  myTol3d = 0.001;
365  myTargetPtAttrib = "snap_to"_UTsh;
366  myTargetClass = 0;
367  myUsePositionSnapMethod = true;
368  myPositionSnapMethod = 0;
369  myPositionSnapWeightName = "weight"_UTsh;
370  myUseradiusattrib = false;
371  myRadiusattrib = "pscale"_UTsh;
372  myUsematchattrib = false;
373  myMatchattrib = "name"_UTsh;
374  myMatchtype = 0;
375  myMatchTol = 0;
376  myGridtype = 0;
377  myGridspacing = UT_Vector3D(0.1,0.1,0.1);
378  myGridlines = UT_Vector3D(10,10,10);
379  myGridpow2 = UT_Vector3I(3,3,3);
380  myGridoffset = UT_Vector3D(0,0,0);
381  myGridround = 0;
382  myUseGridTol = true;
383  myGridtol = 10;
384  myConsolidateSnappedPoints = true;
385  myKeepConsolidatedPoints = false;
386  myDelDegen = true;
387  myDelDegenPoints = true;
388  myDelUnusedPoints = false;
389  myRecomputenml = true;
390  myCreatesnappedgroup = false;
391  mySnappedgroupname = "snapped_points"_UTsh;
392  myCreatesnappedattrib = false;
393  mySnappedattribname = "snapped_to"_UTsh;
394  myNumpointattribs.setSize(0);
395  myNumgroups.setSize(0);
396  myUsetargetgroup = false;
397  myTargetgroup = ""_UTsh;
398  myModifyboth = false;
399 
400  }
401 
402  explicit SOP_Fuse_2_0Parms(const SOP_Fuse_2_0Parms &) = default;
403  SOP_Fuse_2_0Parms &operator=(const SOP_Fuse_2_0Parms &) = default;
404  SOP_Fuse_2_0Parms(SOP_Fuse_2_0Parms &&) noexcept = default;
405  SOP_Fuse_2_0Parms &operator=(SOP_Fuse_2_0Parms &&) noexcept = default;
406 
407  ~SOP_Fuse_2_0Parms() override {}
408 
409  bool operator==(const SOP_Fuse_2_0Parms &src) const
410  {
411  if (myQuerygroup != src.myQuerygroup) return false;
412  if (myPosAttrib != src.myPosAttrib) return false;
413  if (mySnaptype != src.mySnaptype) return false;
414  if (myAlgorithm != src.myAlgorithm) return false;
415  if (myUseTol3D != src.myUseTol3D) return false;
416  if (myTol3d != src.myTol3d) return false;
417  if (myTargetPtAttrib != src.myTargetPtAttrib) return false;
418  if (myTargetClass != src.myTargetClass) return false;
419  if (myUsePositionSnapMethod != src.myUsePositionSnapMethod) return false;
420  if (myPositionSnapMethod != src.myPositionSnapMethod) return false;
421  if (myPositionSnapWeightName != src.myPositionSnapWeightName) return false;
422  if (myUseradiusattrib != src.myUseradiusattrib) return false;
423  if (myRadiusattrib != src.myRadiusattrib) return false;
424  if (myUsematchattrib != src.myUsematchattrib) return false;
425  if (myMatchattrib != src.myMatchattrib) return false;
426  if (myMatchtype != src.myMatchtype) return false;
427  if (myMatchTol != src.myMatchTol) return false;
428  if (myGridtype != src.myGridtype) return false;
429  if (myGridspacing != src.myGridspacing) return false;
430  if (myGridlines != src.myGridlines) return false;
431  if (myGridpow2 != src.myGridpow2) return false;
432  if (myGridoffset != src.myGridoffset) return false;
433  if (myGridround != src.myGridround) return false;
434  if (myUseGridTol != src.myUseGridTol) return false;
435  if (myGridtol != src.myGridtol) return false;
436  if (myConsolidateSnappedPoints != src.myConsolidateSnappedPoints) return false;
437  if (myKeepConsolidatedPoints != src.myKeepConsolidatedPoints) return false;
438  if (myDelDegen != src.myDelDegen) return false;
439  if (myDelDegenPoints != src.myDelDegenPoints) return false;
440  if (myDelUnusedPoints != src.myDelUnusedPoints) return false;
441  if (myRecomputenml != src.myRecomputenml) return false;
442  if (myCreatesnappedgroup != src.myCreatesnappedgroup) return false;
443  if (mySnappedgroupname != src.mySnappedgroupname) return false;
444  if (myCreatesnappedattrib != src.myCreatesnappedattrib) return false;
445  if (mySnappedattribname != src.mySnappedattribname) return false;
446  if (myNumpointattribs != src.myNumpointattribs) return false;
447  if (myNumgroups != src.myNumgroups) return false;
448  if (myUsetargetgroup != src.myUsetargetgroup) return false;
449  if (myTargetgroup != src.myTargetgroup) return false;
450  if (myModifyboth != src.myModifyboth) return false;
451 
452  return true;
453  }
454  bool operator!=(const SOP_Fuse_2_0Parms &src) const
455  {
456  return !operator==(src);
457  }
467 
468 
469 
470  void buildFromOp(const OP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
471  {
472  myQuerygroup = ""_UTsh;
473  if (true)
474  graph->evalOpParm(myQuerygroup, nodeidx, "querygroup", time, 0);
475  myPosAttrib = "P"_UTsh;
476  if (true)
477  graph->evalOpParm(myPosAttrib, nodeidx, "posattrib", time, 0);
478  mySnaptype = 0;
479  if (true)
480  graph->evalOpParm(mySnaptype, nodeidx, "snaptype", time, 0);
481  myAlgorithm = 0;
482  if (true && ( (true&&!(((int64(getSnaptype())!=0)))) ) )
483  graph->evalOpParm(myAlgorithm, nodeidx, "algorithm", time, 0);
484  myUseTol3D = true;
485  if (true && ( (true&&!(((int64(getSnaptype())!=0)))) ) )
486  graph->evalOpParm(myUseTol3D, nodeidx, "usetol3d", time, 0);
487  myTol3d = 0.001;
488  if (true && ( (true&&!(((int64(getSnaptype())!=0))||((getUseTol3D()==0))||((int64(getSnaptype())!=0)))) ) )
489  graph->evalOpParm(myTol3d, nodeidx, "tol3d", time, 0);
490  myTargetPtAttrib = "snap_to"_UTsh;
491  if (true && ( (true&&!(((int64(getSnaptype())!=2)))) ) )
492  graph->evalOpParm(myTargetPtAttrib, nodeidx, "targetptattrib", time, 0);
493  myTargetClass = 0;
494  if (true && ( (true&&!(((int64(getSnaptype())!=2)))) ) )
495  graph->evalOpParm(myTargetClass, nodeidx, "targetclass", time, 0);
496  myUsePositionSnapMethod = true;
497  if (true && ( (true&&!(((int64(getSnaptype())==1)))) ) )
498  graph->evalOpParm(myUsePositionSnapMethod, nodeidx, "usepositionsnapmethod", time, 0);
499  myPositionSnapMethod = 0;
500  if (true && ( (true&&!(((int64(getSnaptype())==1))||((getUsePositionSnapMethod()==0))||((int64(getSnaptype())==1)))) ) )
501  graph->evalOpParm(myPositionSnapMethod, nodeidx, "positionsnapmethod", time, 0);
502  myPositionSnapWeightName = "weight"_UTsh;
503  if (true && ( (true&&!(((int64(getSnaptype())==1))||((getUsePositionSnapMethod()==0))||((int64(getSnaptype())==1))||((int64(getPositionSnapMethod())!=10)&&(int64(getPositionSnapMethod())!=11)&&(int64(getPositionSnapMethod())!=12)&&(int64(getPositionSnapMethod())!=13)))) ) )
504  graph->evalOpParm(myPositionSnapWeightName, nodeidx, "positionsnapweightname", time, 0);
505  myUseradiusattrib = false;
506  if (true && ( (true&&!(((int64(getSnaptype())!=0)))) ) )
507  graph->evalOpParm(myUseradiusattrib, nodeidx, "useradiusattrib", time, 0);
508  myRadiusattrib = "pscale"_UTsh;
509  if (true && ( (true&&!(((getUseradiusattrib()==0))||((int64(getSnaptype())!=0)))) ) )
510  graph->evalOpParm(myRadiusattrib, nodeidx, "radiusattrib", time, 0);
511  myUsematchattrib = false;
512  if (true && ( (true&&!(((int64(getSnaptype())!=0)))) ) )
513  graph->evalOpParm(myUsematchattrib, nodeidx, "usematchattrib", time, 0);
514  myMatchattrib = "name"_UTsh;
515  if (true && ( (true&&!(((getUsematchattrib()==0))||((int64(getSnaptype())!=0)))) ) )
516  graph->evalOpParm(myMatchattrib, nodeidx, "matchattrib", time, 0);
517  myMatchtype = 0;
518  if (true && ( (true&&!(((getUsematchattrib()==0))||((int64(getSnaptype())!=0)))) ) )
519  graph->evalOpParm(myMatchtype, nodeidx, "matchtype", time, 0);
520  myMatchTol = 0;
521  if (true && ( (true&&!(((getUsematchattrib()==0))||((int64(getSnaptype())!=0)))) ) )
522  graph->evalOpParm(myMatchTol, nodeidx, "matchtol", time, 0);
523  myGridtype = 0;
524  if (true && ( (true&&!(((int64(getSnaptype())!=1)))) ) )
525  graph->evalOpParm(myGridtype, nodeidx, "gridtype", time, 0);
526  myGridspacing = UT_Vector3D(0.1,0.1,0.1);
527  if (true && ( (true&&!(((int64(getSnaptype())!=1))||((int64(getGridtype())!=0)))) ) )
528  graph->evalOpParm(myGridspacing, nodeidx, "gridspacing", time, 0);
529  myGridlines = UT_Vector3D(10,10,10);
530  if (true && ( (true&&!(((int64(getSnaptype())!=1))||((int64(getGridtype())!=1)))) ) )
531  graph->evalOpParm(myGridlines, nodeidx, "gridlines", time, 0);
532  myGridpow2 = UT_Vector3I(3,3,3);
533  if (true && ( (true&&!(((int64(getSnaptype())!=1))||((int64(getGridtype())!=2)))) ) )
534  graph->evalOpParm(myGridpow2, nodeidx, "gridpow2", time, 0);
535  myGridoffset = UT_Vector3D(0,0,0);
536  if (true && ( (true&&!(((int64(getSnaptype())!=1)))) ) )
537  graph->evalOpParm(myGridoffset, nodeidx, "gridoffset", time, 0);
538  myGridround = 0;
539  if (true && ( (true&&!(((int64(getSnaptype())!=1)))) ) )
540  graph->evalOpParm(myGridround, nodeidx, "gridround", time, 0);
541  myUseGridTol = true;
542  if (true && ( (true&&!(((int64(getSnaptype())!=1)))) ) )
543  graph->evalOpParm(myUseGridTol, nodeidx, "usegridtol", time, 0);
544  myGridtol = 10;
545  if (true && ( (true&&!(((int64(getSnaptype())!=1))||((getUseGridTol()==0))||((int64(getSnaptype())!=1)))) ) )
546  graph->evalOpParm(myGridtol, nodeidx, "gridtol", time, 0);
547  myConsolidateSnappedPoints = true;
548  if (true)
549  graph->evalOpParm(myConsolidateSnappedPoints, nodeidx, "consolidatesnappedpoints", time, 0);
550  myKeepConsolidatedPoints = false;
551  if (true && ( (true&&!(((getConsolidateSnappedPoints()==0)))) ) )
552  graph->evalOpParm(myKeepConsolidatedPoints, nodeidx, "keepconsolidatedpoints", time, 0);
553  myDelDegen = true;
554  if (true && ( (true&&!(((getConsolidateSnappedPoints()==0)))) ) )
555  graph->evalOpParm(myDelDegen, nodeidx, "deldegen", time, 0);
556  myDelDegenPoints = true;
557  if (true && ( (true&&!(((getConsolidateSnappedPoints()==0))||((getDelDegen()==0)))) ) )
558  graph->evalOpParm(myDelDegenPoints, nodeidx, "deldegenpoints", time, 0);
559  myDelUnusedPoints = false;
560  if (true && ( (true&&!(((getConsolidateSnappedPoints()==0)))) ) )
561  graph->evalOpParm(myDelUnusedPoints, nodeidx, "delunusedpoints", time, 0);
562  myRecomputenml = true;
563  if (true)
564  graph->evalOpParm(myRecomputenml, nodeidx, "recomputenml", time, 0);
565  myCreatesnappedgroup = false;
566  if (true)
567  graph->evalOpParm(myCreatesnappedgroup, nodeidx, "createsnappedgroup", time, 0);
568  mySnappedgroupname = "snapped_points"_UTsh;
569  if (true && ( (true&&!(((getCreatesnappedgroup()==0)))) ) )
570  graph->evalOpParm(mySnappedgroupname, nodeidx, "snappedgroupname", time, 0);
571  myCreatesnappedattrib = false;
572  if (true && ( (true&&!(((int64(getSnaptype())==1)))) ) )
573  graph->evalOpParm(myCreatesnappedattrib, nodeidx, "createsnappedattrib", time, 0);
574  mySnappedattribname = "snapped_to"_UTsh;
575  if (true && ( (true&&!(((getCreatesnappedattrib()==0))||((int64(getSnaptype())==1)))) ) )
576  graph->evalOpParm(mySnappedattribname, nodeidx, "snappedattribname", time, 0);
577  if (true)
578  {
579  int64 length = 0;
580  graph->evalOpParm(length, nodeidx, "numpointattribs", time, 0);
581  if (length < 0) length = 0;
582  myNumpointattribs.setSize(length);
583  for (exint i = 0; i < length; i++)
584  {
585  int parmidx[1];
586  int offsets[1];
587  parmidx[0] = i+1;
588  offsets[0] = 1;
589  auto && _curentry = myNumpointattribs(i);
590  (void) _curentry;
591  _curentry.attribsnapmethod = 8;
592  if (true)
593  graph->evalOpParmInst(_curentry.attribsnapmethod, nodeidx, "attribsnapmethod#", parmidx, offsets, time, 0, 2-1);
594  _curentry.pointattribnames = ""_UTsh;
595  if (true)
596  graph->evalOpParmInst(_curentry.pointattribnames, nodeidx, "pointattribnames#", parmidx, offsets, time, 0, 2-1);
597  _curentry.pointattribweightname = "weight"_UTsh;
598  if (true && ( (true&&!(((_curentry.attribsnapmethod!=11)&&(_curentry.attribsnapmethod!=12)&&(_curentry.attribsnapmethod!=13)&&(_curentry.attribsnapmethod!=14)&&(_curentry.attribsnapmethod!=15)))) ) )
599  graph->evalOpParmInst(_curentry.pointattribweightname, nodeidx, "pointattribweightname#", parmidx, offsets, time, 0, 2-1);
600 
601  }
602  }
603  else
604  myNumpointattribs.clear();
605  if (true)
606  {
607  int64 length = 0;
608  graph->evalOpParm(length, nodeidx, "numgroups", time, 0);
609  if (length < 0) length = 0;
610  myNumgroups.setSize(length);
611  for (exint i = 0; i < length; i++)
612  {
613  int parmidx[1];
614  int offsets[1];
615  parmidx[0] = i+1;
616  offsets[0] = 1;
617  auto && _curentry = myNumgroups(i);
618  (void) _curentry;
619  _curentry.grouppropagation = 0;
620  if (true)
621  graph->evalOpParmInst(_curentry.grouppropagation, nodeidx, "grouppropagation#", parmidx, offsets, time, 0, 2-1);
622  _curentry.pointgroupnames = ""_UTsh;
623  if (true)
624  graph->evalOpParmInst(_curentry.pointgroupnames, nodeidx, "pointgroupnames#", parmidx, offsets, time, 0, 2-1);
625 
626  }
627  }
628  else
629  myNumgroups.clear();
630  myUsetargetgroup = false;
631  if (true && ( (true&&!(((int64(getSnaptype())==1))||(((graph->getInput(nodeidx,1)>=0)==1)))) ) )
632  graph->evalOpParm(myUsetargetgroup, nodeidx, "usetargetgroup", time, 0);
633  myTargetgroup = ""_UTsh;
634  if (true && ( (true&&!(((int64(getSnaptype())==1))||((getUsetargetgroup()==0)&&((graph->getInput(nodeidx,1)>=0)==0)))) ) )
635  graph->evalOpParm(myTargetgroup, nodeidx, "targetgroup", time, 0);
636  myModifyboth = false;
637  if (true && ( (true&&!(((int64(getSnaptype())==1))||(((graph->getInput(nodeidx,1)>=0)==1))||((getUsetargetgroup()==0)&&(int64(getSnaptype())!=2)))) ) )
638  graph->evalOpParm(myModifyboth, nodeidx, "modifyboth", time, 0);
639 
640  }
641 
642 
643  void loadFromOpSubclass(const LoadParms &loadparms) override
644  {
645  buildFromOp(loadparms.graph(), loadparms.nodeIdx(), loadparms.context().getTime(), loadparms.depnode());
646  }
647 
648 
649  void copyFrom(const OP_NodeParms *src) override
650  {
651  *this = *((const SOP_Fuse_2_0Parms *)src);
652  }
653 
654  template <typename T>
655  void
656  doGetParmValue(TempIndex idx, TempIndex instance, T &value) const
657  {
658  if (idx.size() < 1)
659  return;
660  UT_ASSERT(idx.size() == instance.size()+1);
661  if (idx.size() != instance.size()+1)
662  return;
663  switch (idx[0])
664  {
665  case 0:
666  coerceValue(value, myQuerygroup);
667  break;
668  case 1:
669  coerceValue(value, myPosAttrib);
670  break;
671  case 2:
672  coerceValue(value, mySnaptype);
673  break;
674  case 3:
675  coerceValue(value, myAlgorithm);
676  break;
677  case 4:
678  coerceValue(value, myUseTol3D);
679  break;
680  case 5:
681  coerceValue(value, myTol3d);
682  break;
683  case 6:
684  coerceValue(value, myTargetPtAttrib);
685  break;
686  case 7:
687  coerceValue(value, myTargetClass);
688  break;
689  case 8:
690  coerceValue(value, myUsePositionSnapMethod);
691  break;
692  case 9:
693  coerceValue(value, myPositionSnapMethod);
694  break;
695  case 10:
696  coerceValue(value, myPositionSnapWeightName);
697  break;
698  case 11:
699  coerceValue(value, myUseradiusattrib);
700  break;
701  case 12:
702  coerceValue(value, myRadiusattrib);
703  break;
704  case 13:
705  coerceValue(value, myUsematchattrib);
706  break;
707  case 14:
708  coerceValue(value, myMatchattrib);
709  break;
710  case 15:
711  coerceValue(value, myMatchtype);
712  break;
713  case 16:
714  coerceValue(value, myMatchTol);
715  break;
716  case 17:
717  coerceValue(value, myGridtype);
718  break;
719  case 18:
720  coerceValue(value, myGridspacing);
721  break;
722  case 19:
723  coerceValue(value, myGridlines);
724  break;
725  case 20:
726  coerceValue(value, myGridpow2);
727  break;
728  case 21:
729  coerceValue(value, myGridoffset);
730  break;
731  case 22:
732  coerceValue(value, myGridround);
733  break;
734  case 23:
735  coerceValue(value, myUseGridTol);
736  break;
737  case 24:
738  coerceValue(value, myGridtol);
739  break;
740  case 25:
741  coerceValue(value, myConsolidateSnappedPoints);
742  break;
743  case 26:
744  coerceValue(value, myKeepConsolidatedPoints);
745  break;
746  case 27:
747  coerceValue(value, myDelDegen);
748  break;
749  case 28:
750  coerceValue(value, myDelDegenPoints);
751  break;
752  case 29:
753  coerceValue(value, myDelUnusedPoints);
754  break;
755  case 30:
756  coerceValue(value, myRecomputenml);
757  break;
758  case 31:
759  coerceValue(value, myCreatesnappedgroup);
760  break;
761  case 32:
762  coerceValue(value, mySnappedgroupname);
763  break;
764  case 33:
765  coerceValue(value, myCreatesnappedattrib);
766  break;
767  case 34:
768  coerceValue(value, mySnappedattribname);
769  break;
770  case 35:
771  if (idx.size() == 1)
772  coerceValue(value, myNumpointattribs.entries());
773  else if (instance[0] < myNumpointattribs.entries())
774  {
775  auto && _data = myNumpointattribs(instance[0]);
776  switch (idx[1])
777  {
778  case 0:
779  coerceValue(value, _data.attribsnapmethod);
780  break;
781  case 1:
782  coerceValue(value, _data.pointattribnames);
783  break;
784  case 2:
785  coerceValue(value, _data.pointattribweightname);
786  break;
787 
788  }
789  }
790  break;
791  case 36:
792  if (idx.size() == 1)
793  coerceValue(value, myNumgroups.entries());
794  else if (instance[0] < myNumgroups.entries())
795  {
796  auto && _data = myNumgroups(instance[0]);
797  switch (idx[1])
798  {
799  case 0:
800  coerceValue(value, _data.grouppropagation);
801  break;
802  case 1:
803  coerceValue(value, _data.pointgroupnames);
804  break;
805 
806  }
807  }
808  break;
809  case 37:
810  coerceValue(value, myUsetargetgroup);
811  break;
812  case 38:
813  coerceValue(value, myTargetgroup);
814  break;
815  case 39:
816  coerceValue(value, myModifyboth);
817  break;
818 
819  }
820  }
821 
822  bool isParmColorRamp(exint idx) const override
823  {
824  switch (idx)
825  {
826 
827  }
828  return false;
829  }
830 
831  void getNestParmValue(TempIndex idx, TempIndex instance, exint &value) const override
832  { doGetParmValue(idx, instance, value); }
833  void getNestParmValue(TempIndex idx, TempIndex instance, fpreal &value) const override
834  { doGetParmValue(idx, instance, value); }
835  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector2D &value) const override
836  { doGetParmValue(idx, instance, value); }
837  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector3D &value) const override
838  { doGetParmValue(idx, instance, value); }
839  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector4D &value) const override
840  { doGetParmValue(idx, instance, value); }
841  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix2D &value) const override
842  { doGetParmValue(idx, instance, value); }
843  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
844  { doGetParmValue(idx, instance, value); }
845  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix4D &value) const override
846  { doGetParmValue(idx, instance, value); }
847  void getNestParmValue(TempIndex idx, TempIndex instance, UT_StringHolder &value) const override
848  { doGetParmValue(idx, instance, value); }
849  void getNestParmValue(TempIndex idx, TempIndex instance, UT_SharedPtr<UT_Ramp> &value) const override
850  { doGetParmValue(idx, instance, value); }
851  void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
852  { doGetParmValue(idx, instance, value); }
853 
854  template <typename T>
855  void
856  doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
857  {
858  if (idx.size() < 1)
859  return;
860  UT_ASSERT(idx.size() == instance.size()+1);
861  if (idx.size() != instance.size()+1)
862  return;
863  switch (idx[0])
864  {
865  case 0:
866  coerceValue(myQuerygroup, ( ( value ) ));
867  break;
868  case 1:
869  coerceValue(myPosAttrib, ( ( value ) ));
870  break;
871  case 2:
872  coerceValue(mySnaptype, clampMinValue(0, clampMaxValue(2, value ) ));
873  break;
874  case 3:
875  coerceValue(myAlgorithm, clampMinValue(0, clampMaxValue(1, value ) ));
876  break;
877  case 4:
878  coerceValue(myUseTol3D, ( ( value ) ));
879  break;
880  case 5:
881  coerceValue(myTol3d, ( ( value ) ));
882  break;
883  case 6:
884  coerceValue(myTargetPtAttrib, ( ( value ) ));
885  break;
886  case 7:
887  coerceValue(myTargetClass, clampMinValue(0, clampMaxValue(3, value ) ));
888  break;
889  case 8:
890  coerceValue(myUsePositionSnapMethod, ( ( value ) ));
891  break;
892  case 9:
893  coerceValue(myPositionSnapMethod, clampMinValue(0, clampMaxValue(13, value ) ));
894  break;
895  case 10:
896  coerceValue(myPositionSnapWeightName, ( ( value ) ));
897  break;
898  case 11:
899  coerceValue(myUseradiusattrib, ( ( value ) ));
900  break;
901  case 12:
902  coerceValue(myRadiusattrib, ( ( value ) ));
903  break;
904  case 13:
905  coerceValue(myUsematchattrib, ( ( value ) ));
906  break;
907  case 14:
908  coerceValue(myMatchattrib, ( ( value ) ));
909  break;
910  case 15:
911  coerceValue(myMatchtype, clampMinValue(0, clampMaxValue(1, value ) ));
912  break;
913  case 16:
914  coerceValue(myMatchTol, ( ( value ) ));
915  break;
916  case 17:
917  coerceValue(myGridtype, clampMinValue(0, clampMaxValue(2, value ) ));
918  break;
919  case 18:
920  coerceValue(myGridspacing, ( ( value ) ));
921  break;
922  case 19:
923  coerceValue(myGridlines, ( ( value ) ));
924  break;
925  case 20:
926  coerceValue(myGridpow2, ( ( value ) ));
927  break;
928  case 21:
929  coerceValue(myGridoffset, ( ( value ) ));
930  break;
931  case 22:
932  coerceValue(myGridround, clampMinValue(0, clampMaxValue(2, value ) ));
933  break;
934  case 23:
935  coerceValue(myUseGridTol, ( ( value ) ));
936  break;
937  case 24:
938  coerceValue(myGridtol, ( ( value ) ));
939  break;
940  case 25:
941  coerceValue(myConsolidateSnappedPoints, ( ( value ) ));
942  break;
943  case 26:
944  coerceValue(myKeepConsolidatedPoints, ( ( value ) ));
945  break;
946  case 27:
947  coerceValue(myDelDegen, ( ( value ) ));
948  break;
949  case 28:
950  coerceValue(myDelDegenPoints, ( ( value ) ));
951  break;
952  case 29:
953  coerceValue(myDelUnusedPoints, ( ( value ) ));
954  break;
955  case 30:
956  coerceValue(myRecomputenml, ( ( value ) ));
957  break;
958  case 31:
959  coerceValue(myCreatesnappedgroup, ( ( value ) ));
960  break;
961  case 32:
962  coerceValue(mySnappedgroupname, ( ( value ) ));
963  break;
964  case 33:
965  coerceValue(myCreatesnappedattrib, ( ( value ) ));
966  break;
967  case 34:
968  coerceValue(mySnappedattribname, ( ( value ) ));
969  break;
970  case 35:
971  if (idx.size() == 1)
972  {
973  exint newsize;
974  coerceValue(newsize, value);
975  if (newsize < 0) newsize = 0;
976  myNumpointattribs.setSize(newsize);
977  }
978  else
979  {
980  if (instance[0] < 0)
981  return;
982  myNumpointattribs.setSizeIfNeeded(instance[0]+1);
983  auto && _data = myNumpointattribs(instance[0]);
984  switch (idx[1])
985  {
986  case 0:
987  coerceValue(_data.attribsnapmethod, value);
988  break;
989  case 1:
990  coerceValue(_data.pointattribnames, value);
991  break;
992  case 2:
993  coerceValue(_data.pointattribweightname, value);
994  break;
995 
996  }
997  }
998  break;
999  case 36:
1000  if (idx.size() == 1)
1001  {
1002  exint newsize;
1003  coerceValue(newsize, value);
1004  if (newsize < 0) newsize = 0;
1005  myNumgroups.setSize(newsize);
1006  }
1007  else
1008  {
1009  if (instance[0] < 0)
1010  return;
1011  myNumgroups.setSizeIfNeeded(instance[0]+1);
1012  auto && _data = myNumgroups(instance[0]);
1013  switch (idx[1])
1014  {
1015  case 0:
1016  coerceValue(_data.grouppropagation, value);
1017  break;
1018  case 1:
1019  coerceValue(_data.pointgroupnames, value);
1020  break;
1021 
1022  }
1023  }
1024  break;
1025  case 37:
1026  coerceValue(myUsetargetgroup, ( ( value ) ));
1027  break;
1028  case 38:
1029  coerceValue(myTargetgroup, ( ( value ) ));
1030  break;
1031  case 39:
1032  coerceValue(myModifyboth, ( ( value ) ));
1033  break;
1034 
1035  }
1036  }
1037 
1038  void setNestParmValue(TempIndex idx, TempIndex instance, const exint &value) override
1039  { doSetParmValue(idx, instance, value); }
1040  void setNestParmValue(TempIndex idx, TempIndex instance, const fpreal &value) override
1041  { doSetParmValue(idx, instance, value); }
1042  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector2D &value) override
1043  { doSetParmValue(idx, instance, value); }
1044  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector3D &value) override
1045  { doSetParmValue(idx, instance, value); }
1046  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector4D &value) override
1047  { doSetParmValue(idx, instance, value); }
1048  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix2D &value) override
1049  { doSetParmValue(idx, instance, value); }
1050  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix3D &value) override
1051  { doSetParmValue(idx, instance, value); }
1052  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix4D &value) override
1053  { doSetParmValue(idx, instance, value); }
1054  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_StringHolder &value) override
1055  { doSetParmValue(idx, instance, value); }
1056  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_SharedPtr<UT_Ramp> &value) override
1057  { doSetParmValue(idx, instance, value); }
1058  void setNestParmValue(TempIndex idx, TempIndex instance, const PRM_DataItemHandle &value) override
1059  { doSetParmValue(idx, instance, value); }
1060 
1061  exint getNestNumParms(TempIndex idx) const override
1062  {
1063  if (idx.size() == 0)
1064  return 40;
1065  switch (idx[0])
1066  {
1067  case 35:
1068  return 3;
1069  case 36:
1070  return 2;
1071 
1072  }
1073  // Invalid
1074  return 0;
1075  }
1076 
1077  const char *getNestParmName(TempIndex fieldnum) const override
1078  {
1079  if (fieldnum.size() < 1)
1080  return 0;
1081  switch (fieldnum[0])
1082  {
1083  case 0:
1084  return "querygroup";
1085  case 1:
1086  return "posattrib";
1087  case 2:
1088  return "snaptype";
1089  case 3:
1090  return "algorithm";
1091  case 4:
1092  return "usetol3d";
1093  case 5:
1094  return "tol3d";
1095  case 6:
1096  return "targetptattrib";
1097  case 7:
1098  return "targetclass";
1099  case 8:
1100  return "usepositionsnapmethod";
1101  case 9:
1102  return "positionsnapmethod";
1103  case 10:
1104  return "positionsnapweightname";
1105  case 11:
1106  return "useradiusattrib";
1107  case 12:
1108  return "radiusattrib";
1109  case 13:
1110  return "usematchattrib";
1111  case 14:
1112  return "matchattrib";
1113  case 15:
1114  return "matchtype";
1115  case 16:
1116  return "matchtol";
1117  case 17:
1118  return "gridtype";
1119  case 18:
1120  return "gridspacing";
1121  case 19:
1122  return "gridlines";
1123  case 20:
1124  return "gridpow2";
1125  case 21:
1126  return "gridoffset";
1127  case 22:
1128  return "gridround";
1129  case 23:
1130  return "usegridtol";
1131  case 24:
1132  return "gridtol";
1133  case 25:
1134  return "consolidatesnappedpoints";
1135  case 26:
1136  return "keepconsolidatedpoints";
1137  case 27:
1138  return "deldegen";
1139  case 28:
1140  return "deldegenpoints";
1141  case 29:
1142  return "delunusedpoints";
1143  case 30:
1144  return "recomputenml";
1145  case 31:
1146  return "createsnappedgroup";
1147  case 32:
1148  return "snappedgroupname";
1149  case 33:
1150  return "createsnappedattrib";
1151  case 34:
1152  return "snappedattribname";
1153  case 35:
1154  if (fieldnum.size() == 1)
1155  return "numpointattribs";
1156  switch (fieldnum[1])
1157  {
1158  case 0:
1159  return "attribsnapmethod#";
1160  case 1:
1161  return "pointattribnames#";
1162  case 2:
1163  return "pointattribweightname#";
1164 
1165  }
1166  return 0;
1167  case 36:
1168  if (fieldnum.size() == 1)
1169  return "numgroups";
1170  switch (fieldnum[1])
1171  {
1172  case 0:
1173  return "grouppropagation#";
1174  case 1:
1175  return "pointgroupnames#";
1176 
1177  }
1178  return 0;
1179  case 37:
1180  return "usetargetgroup";
1181  case 38:
1182  return "targetgroup";
1183  case 39:
1184  return "modifyboth";
1185 
1186  }
1187  return 0;
1188  }
1189 
1190  ParmType getNestParmType(TempIndex fieldnum) const override
1191  {
1192  if (fieldnum.size() < 1)
1193  return PARM_UNSUPPORTED;
1194  switch (fieldnum[0])
1195  {
1196  case 0:
1197  return PARM_STRING;
1198  case 1:
1199  return PARM_STRING;
1200  case 2:
1201  return PARM_INTEGER;
1202  case 3:
1203  return PARM_INTEGER;
1204  case 4:
1205  return PARM_INTEGER;
1206  case 5:
1207  return PARM_FLOAT;
1208  case 6:
1209  return PARM_STRING;
1210  case 7:
1211  return PARM_INTEGER;
1212  case 8:
1213  return PARM_INTEGER;
1214  case 9:
1215  return PARM_INTEGER;
1216  case 10:
1217  return PARM_STRING;
1218  case 11:
1219  return PARM_INTEGER;
1220  case 12:
1221  return PARM_STRING;
1222  case 13:
1223  return PARM_INTEGER;
1224  case 14:
1225  return PARM_STRING;
1226  case 15:
1227  return PARM_INTEGER;
1228  case 16:
1229  return PARM_FLOAT;
1230  case 17:
1231  return PARM_INTEGER;
1232  case 18:
1233  return PARM_VECTOR3;
1234  case 19:
1235  return PARM_VECTOR3;
1236  case 20:
1237  return PARM_VECTOR3;
1238  case 21:
1239  return PARM_VECTOR3;
1240  case 22:
1241  return PARM_INTEGER;
1242  case 23:
1243  return PARM_INTEGER;
1244  case 24:
1245  return PARM_FLOAT;
1246  case 25:
1247  return PARM_INTEGER;
1248  case 26:
1249  return PARM_INTEGER;
1250  case 27:
1251  return PARM_INTEGER;
1252  case 28:
1253  return PARM_INTEGER;
1254  case 29:
1255  return PARM_INTEGER;
1256  case 30:
1257  return PARM_INTEGER;
1258  case 31:
1259  return PARM_INTEGER;
1260  case 32:
1261  return PARM_STRING;
1262  case 33:
1263  return PARM_INTEGER;
1264  case 34:
1265  return PARM_STRING;
1266  case 35:
1267  if (fieldnum.size() == 1)
1268  return PARM_MULTIPARM;
1269  switch (fieldnum[1])
1270  {
1271  case 0:
1272  return PARM_INTEGER;
1273  case 1:
1274  return PARM_STRING;
1275  case 2:
1276  return PARM_STRING;
1277 
1278  }
1279  return PARM_UNSUPPORTED;
1280  case 36:
1281  if (fieldnum.size() == 1)
1282  return PARM_MULTIPARM;
1283  switch (fieldnum[1])
1284  {
1285  case 0:
1286  return PARM_INTEGER;
1287  case 1:
1288  return PARM_STRING;
1289 
1290  }
1291  return PARM_UNSUPPORTED;
1292  case 37:
1293  return PARM_INTEGER;
1294  case 38:
1295  return PARM_STRING;
1296  case 39:
1297  return PARM_INTEGER;
1298 
1299  }
1300  return PARM_UNSUPPORTED;
1301  }
1302 
1303  // Boiler plate to load individual types.
1304  static void loadData(UT_IStream &is, int64 &v)
1305  { is.bread(&v, 1); }
1306  static void loadData(UT_IStream &is, bool &v)
1307  { int64 iv; is.bread(&iv, 1); v = iv; }
1308  static void loadData(UT_IStream &is, fpreal64 &v)
1309  { is.bread<fpreal64>(&v, 1); }
1310  static void loadData(UT_IStream &is, UT_Vector2D &v)
1311  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1); }
1312  static void loadData(UT_IStream &is, UT_Vector3D &v)
1313  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
1314  is.bread<fpreal64>(&v.z(), 1); }
1315  static void loadData(UT_IStream &is, UT_Vector4D &v)
1316  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
1317  is.bread<fpreal64>(&v.z(), 1); is.bread<fpreal64>(&v.w(), 1); }
1318  static void loadData(UT_IStream &is, UT_Matrix2D &v)
1319  { for (int r = 0; r < 2; r++) for (int c = 0; c < 2; c++) is.bread<fpreal64>(&v(r, c), 1); }
1320  static void loadData(UT_IStream &is, UT_Matrix3D &v)
1321  { for (int r = 0; r < 3; r++) for (int c = 0; c < 3; c++) is.bread<fpreal64>(&v(r, c), 1); }
1322  static void loadData(UT_IStream &is, UT_Matrix4D &v)
1323  { for (int r = 0; r < 4; r++) for (int c = 0; c < 4; c++) is.bread<fpreal64>(&v(r, c), 1); }
1324  static void loadData(UT_IStream &is, UT_Vector2I &v)
1325  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1); }
1326  static void loadData(UT_IStream &is, UT_Vector3I &v)
1327  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
1328  is.bread<int64>(&v.z(), 1); }
1329  static void loadData(UT_IStream &is, UT_Vector4I &v)
1330  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
1331  is.bread<int64>(&v.z(), 1); is.bread<int64>(&v.w(), 1); }
1333  { is.bread(v); }
1335  { UT_StringHolder rampdata;
1336  loadData(is, rampdata);
1337  if (rampdata.isstring())
1338  {
1339  v.reset(new UT_Ramp());
1340  UT_IStream istr((const char *) rampdata, rampdata.length(), UT_ISTREAM_ASCII);
1341  v->load(istr);
1342  }
1343  else v.reset();
1344  }
1347  loadData(is, data);
1348  if (data.isstring())
1349  {
1350  // Find the data type.
1351  const char *colon = UT_StringWrap(data).findChar(':');
1352  if (colon)
1353  {
1354  int typelen = colon - data.buffer();
1356  type.strncpy(data.buffer(), typelen);
1357  UT_IStream istr(((const char *) data) + typelen + 1, data.length() - (typelen + 1), UT_ISTREAM_BINARY);
1358 
1359  v = PRM_DataFactory::parseBinary(type.buffer(), istr);
1360  }
1361  }
1362  else v.reset();
1363  }
1364 
1365  static void saveData(std::ostream &os, int64 v)
1366  { UTwrite(os, &v); }
1367  static void saveData(std::ostream &os, bool v)
1368  { int64 iv = v; UTwrite(os, &iv); }
1369  static void saveData(std::ostream &os, fpreal64 v)
1370  { UTwrite<fpreal64>(os, &v); }
1371  static void saveData(std::ostream &os, UT_Vector2D v)
1372  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y()); }
1373  static void saveData(std::ostream &os, UT_Vector3D v)
1374  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
1375  UTwrite<fpreal64>(os, &v.z()); }
1376  static void saveData(std::ostream &os, UT_Vector4D v)
1377  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
1378  UTwrite<fpreal64>(os, &v.z()); UTwrite<fpreal64>(os, &v.w()); }
1379  static void saveData(std::ostream &os, UT_Matrix2D v)
1381  static void saveData(std::ostream &os, UT_Matrix3D v)
1383  static void saveData(std::ostream &os, UT_Matrix4D v)
1385  static void saveData(std::ostream &os, UT_StringHolder s)
1386  { UT_StringWrap(s).saveBinary(os); }
1387  static void saveData(std::ostream &os, UT_SharedPtr<UT_Ramp> s)
1389  UT_OStringStream ostr;
1390  if (s) s->save(ostr);
1391  result = ostr.str();
1392  saveData(os, result);
1393  }
1394  static void saveData(std::ostream &os, PRM_DataItemHandle s)
1396  UT_OStringStream ostr;
1397  if (s)
1398  {
1399  ostr << s->getDataTypeToken();
1400  ostr << ":";
1401  s->saveBinary(ostr);
1402  }
1403  result = ostr.str();
1404  saveData(os, result);
1405  }
1406 
1407 
1408  void save(std::ostream &os) const
1409  {
1410  int32 v = version();
1411  UTwrite(os, &v);
1412  saveData(os, myQuerygroup);
1413  saveData(os, myPosAttrib);
1414  saveData(os, mySnaptype);
1415  saveData(os, myAlgorithm);
1416  saveData(os, myUseTol3D);
1417  saveData(os, myTol3d);
1418  saveData(os, myTargetPtAttrib);
1419  saveData(os, myTargetClass);
1420  saveData(os, myUsePositionSnapMethod);
1421  saveData(os, myPositionSnapMethod);
1422  saveData(os, myPositionSnapWeightName);
1423  saveData(os, myUseradiusattrib);
1424  saveData(os, myRadiusattrib);
1425  saveData(os, myUsematchattrib);
1426  saveData(os, myMatchattrib);
1427  saveData(os, myMatchtype);
1428  saveData(os, myMatchTol);
1429  saveData(os, myGridtype);
1430  saveData(os, myGridspacing);
1431  saveData(os, myGridlines);
1432  saveData(os, myGridpow2);
1433  saveData(os, myGridoffset);
1434  saveData(os, myGridround);
1435  saveData(os, myUseGridTol);
1436  saveData(os, myGridtol);
1437  saveData(os, myConsolidateSnappedPoints);
1438  saveData(os, myKeepConsolidatedPoints);
1439  saveData(os, myDelDegen);
1440  saveData(os, myDelDegenPoints);
1441  saveData(os, myDelUnusedPoints);
1442  saveData(os, myRecomputenml);
1443  saveData(os, myCreatesnappedgroup);
1444  saveData(os, mySnappedgroupname);
1445  saveData(os, myCreatesnappedattrib);
1446  saveData(os, mySnappedattribname);
1447  {
1448  int64 length = myNumpointattribs.entries();
1449  UTwrite(os, &length);
1450  for (exint i = 0; i < length; i++)
1451  {
1452  auto && _curentry = myNumpointattribs(i);
1453  (void) _curentry;
1454  saveData(os, _curentry.attribsnapmethod);
1455  saveData(os, _curentry.pointattribnames);
1456  saveData(os, _curentry.pointattribweightname);
1457 
1458  }
1459  }
1460  {
1461  int64 length = myNumgroups.entries();
1462  UTwrite(os, &length);
1463  for (exint i = 0; i < length; i++)
1464  {
1465  auto && _curentry = myNumgroups(i);
1466  (void) _curentry;
1467  saveData(os, _curentry.grouppropagation);
1468  saveData(os, _curentry.pointgroupnames);
1469 
1470  }
1471  }
1472  saveData(os, myUsetargetgroup);
1473  saveData(os, myTargetgroup);
1474  saveData(os, myModifyboth);
1475 
1476  }
1477 
1478  bool load(UT_IStream &is)
1479  {
1480  int32 v;
1481  is.bread(&v, 1);
1482  if (version() != v)
1483  {
1484  // Fail incompatible versions
1485  return false;
1486  }
1487  loadData(is, myQuerygroup);
1488  loadData(is, myPosAttrib);
1489  loadData(is, mySnaptype);
1490  loadData(is, myAlgorithm);
1491  loadData(is, myUseTol3D);
1492  loadData(is, myTol3d);
1493  loadData(is, myTargetPtAttrib);
1494  loadData(is, myTargetClass);
1495  loadData(is, myUsePositionSnapMethod);
1496  loadData(is, myPositionSnapMethod);
1497  loadData(is, myPositionSnapWeightName);
1498  loadData(is, myUseradiusattrib);
1499  loadData(is, myRadiusattrib);
1500  loadData(is, myUsematchattrib);
1501  loadData(is, myMatchattrib);
1502  loadData(is, myMatchtype);
1503  loadData(is, myMatchTol);
1504  loadData(is, myGridtype);
1505  loadData(is, myGridspacing);
1506  loadData(is, myGridlines);
1507  loadData(is, myGridpow2);
1508  loadData(is, myGridoffset);
1509  loadData(is, myGridround);
1510  loadData(is, myUseGridTol);
1511  loadData(is, myGridtol);
1512  loadData(is, myConsolidateSnappedPoints);
1513  loadData(is, myKeepConsolidatedPoints);
1514  loadData(is, myDelDegen);
1515  loadData(is, myDelDegenPoints);
1516  loadData(is, myDelUnusedPoints);
1517  loadData(is, myRecomputenml);
1518  loadData(is, myCreatesnappedgroup);
1519  loadData(is, mySnappedgroupname);
1520  loadData(is, myCreatesnappedattrib);
1521  loadData(is, mySnappedattribname);
1522  {
1523  int64 length;
1524  is.read(&length, 1);
1525  myNumpointattribs.setSize(length);
1526  for (exint i = 0; i < length; i++)
1527  {
1528  auto && _curentry = myNumpointattribs(i);
1529  (void) _curentry;
1530  loadData(is, _curentry.attribsnapmethod);
1531  loadData(is, _curentry.pointattribnames);
1532  loadData(is, _curentry.pointattribweightname);
1533 
1534  }
1535  }
1536  {
1537  int64 length;
1538  is.read(&length, 1);
1539  myNumgroups.setSize(length);
1540  for (exint i = 0; i < length; i++)
1541  {
1542  auto && _curentry = myNumgroups(i);
1543  (void) _curentry;
1544  loadData(is, _curentry.grouppropagation);
1545  loadData(is, _curentry.pointgroupnames);
1546 
1547  }
1548  }
1549  loadData(is, myUsetargetgroup);
1550  loadData(is, myTargetgroup);
1551  loadData(is, myModifyboth);
1552 
1553  return true;
1554  }
1555 
1556  const UT_StringHolder & getQuerygroup() const { return myQuerygroup; }
1557  void setQuerygroup(const UT_StringHolder & val) { myQuerygroup = val; }
1559  {
1560  SOP_Node *thissop = cookparms.getNode();
1561  if (!thissop) return getQuerygroup();
1563  OP_Utils::evalOpParm(result, thissop, "querygroup", cookparms.getCookTime(), 0);
1564  return result;
1565  }
1566  const UT_StringHolder & getPosAttrib() const { return myPosAttrib; }
1567  void setPosAttrib(const UT_StringHolder & val) { myPosAttrib = val; }
1569  {
1570  SOP_Node *thissop = cookparms.getNode();
1571  if (!thissop) return getPosAttrib();
1573  OP_Utils::evalOpParm(result, thissop, "posattrib", cookparms.getCookTime(), 0);
1574  return result;
1575  }
1576  Snaptype getSnaptype() const { return Snaptype(mySnaptype); }
1577  void setSnaptype(Snaptype val) { mySnaptype = int64(val); }
1579  {
1580  SOP_Node *thissop = cookparms.getNode();
1581  if (!thissop) return getSnaptype();
1582  int64 result;
1583  OP_Utils::evalOpParm(result, thissop, "snaptype", cookparms.getCookTime(), 0);
1584  return Snaptype(result);
1585  }
1586  Algorithm getAlgorithm() const { return Algorithm(myAlgorithm); }
1587  void setAlgorithm(Algorithm val) { myAlgorithm = int64(val); }
1589  {
1590  SOP_Node *thissop = cookparms.getNode();
1591  if (!thissop) return getAlgorithm();
1592  int64 result;
1593  OP_Utils::evalOpParm(result, thissop, "algorithm", cookparms.getCookTime(), 0);
1594  return Algorithm(result);
1595  }
1596  bool getUseTol3D() const { return myUseTol3D; }
1597  void setUseTol3D(bool val) { myUseTol3D = val; }
1598  bool opUseTol3D(const SOP_NodeVerb::CookParms &cookparms) const
1599  {
1600  SOP_Node *thissop = cookparms.getNode();
1601  if (!thissop) return getUseTol3D();
1602  bool result;
1603  OP_Utils::evalOpParm(result, thissop, "usetol3d", cookparms.getCookTime(), 0);
1604  return result;
1605  }
1606  fpreal64 getTol3d() const { return myTol3d; }
1607  void setTol3d(fpreal64 val) { myTol3d = val; }
1608  fpreal64 opTol3d(const SOP_NodeVerb::CookParms &cookparms) const
1609  {
1610  SOP_Node *thissop = cookparms.getNode();
1611  if (!thissop) return getTol3d();
1612  fpreal64 result;
1613  OP_Utils::evalOpParm(result, thissop, "tol3d", cookparms.getCookTime(), 0);
1614  return result;
1615  }
1616  const UT_StringHolder & getTargetPtAttrib() const { return myTargetPtAttrib; }
1617  void setTargetPtAttrib(const UT_StringHolder & val) { myTargetPtAttrib = val; }
1619  {
1620  SOP_Node *thissop = cookparms.getNode();
1621  if (!thissop) return getTargetPtAttrib();
1623  OP_Utils::evalOpParm(result, thissop, "targetptattrib", cookparms.getCookTime(), 0);
1624  return result;
1625  }
1626  TargetClass getTargetClass() const { return TargetClass(myTargetClass); }
1627  void setTargetClass(TargetClass val) { myTargetClass = int64(val); }
1629  {
1630  SOP_Node *thissop = cookparms.getNode();
1631  if (!thissop) return getTargetClass();
1632  int64 result;
1633  OP_Utils::evalOpParm(result, thissop, "targetclass", cookparms.getCookTime(), 0);
1634  return TargetClass(result);
1635  }
1636  bool getUsePositionSnapMethod() const { return myUsePositionSnapMethod; }
1637  void setUsePositionSnapMethod(bool val) { myUsePositionSnapMethod = val; }
1639  {
1640  SOP_Node *thissop = cookparms.getNode();
1641  if (!thissop) return getUsePositionSnapMethod();
1642  bool result;
1643  OP_Utils::evalOpParm(result, thissop, "usepositionsnapmethod", cookparms.getCookTime(), 0);
1644  return result;
1645  }
1646  PositionSnapMethod getPositionSnapMethod() const { return PositionSnapMethod(myPositionSnapMethod); }
1647  void setPositionSnapMethod(PositionSnapMethod val) { myPositionSnapMethod = int64(val); }
1649  {
1650  SOP_Node *thissop = cookparms.getNode();
1651  if (!thissop) return getPositionSnapMethod();
1652  int64 result;
1653  OP_Utils::evalOpParm(result, thissop, "positionsnapmethod", cookparms.getCookTime(), 0);
1654  return PositionSnapMethod(result);
1655  }
1656  const UT_StringHolder & getPositionSnapWeightName() const { return myPositionSnapWeightName; }
1657  void setPositionSnapWeightName(const UT_StringHolder & val) { myPositionSnapWeightName = val; }
1659  {
1660  SOP_Node *thissop = cookparms.getNode();
1661  if (!thissop) return getPositionSnapWeightName();
1663  OP_Utils::evalOpParm(result, thissop, "positionsnapweightname", cookparms.getCookTime(), 0);
1664  return result;
1665  }
1666  bool getUseradiusattrib() const { return myUseradiusattrib; }
1667  void setUseradiusattrib(bool val) { myUseradiusattrib = val; }
1668  bool opUseradiusattrib(const SOP_NodeVerb::CookParms &cookparms) const
1669  {
1670  SOP_Node *thissop = cookparms.getNode();
1671  if (!thissop) return getUseradiusattrib();
1672  bool result;
1673  OP_Utils::evalOpParm(result, thissop, "useradiusattrib", cookparms.getCookTime(), 0);
1674  return result;
1675  }
1676  const UT_StringHolder & getRadiusattrib() const { return myRadiusattrib; }
1677  void setRadiusattrib(const UT_StringHolder & val) { myRadiusattrib = val; }
1679  {
1680  SOP_Node *thissop = cookparms.getNode();
1681  if (!thissop) return getRadiusattrib();
1683  OP_Utils::evalOpParm(result, thissop, "radiusattrib", cookparms.getCookTime(), 0);
1684  return result;
1685  }
1686  bool getUsematchattrib() const { return myUsematchattrib; }
1687  void setUsematchattrib(bool val) { myUsematchattrib = val; }
1688  bool opUsematchattrib(const SOP_NodeVerb::CookParms &cookparms) const
1689  {
1690  SOP_Node *thissop = cookparms.getNode();
1691  if (!thissop) return getUsematchattrib();
1692  bool result;
1693  OP_Utils::evalOpParm(result, thissop, "usematchattrib", cookparms.getCookTime(), 0);
1694  return result;
1695  }
1696  const UT_StringHolder & getMatchattrib() const { return myMatchattrib; }
1697  void setMatchattrib(const UT_StringHolder & val) { myMatchattrib = val; }
1699  {
1700  SOP_Node *thissop = cookparms.getNode();
1701  if (!thissop) return getMatchattrib();
1703  OP_Utils::evalOpParm(result, thissop, "matchattrib", cookparms.getCookTime(), 0);
1704  return result;
1705  }
1706  Matchtype getMatchtype() const { return Matchtype(myMatchtype); }
1707  void setMatchtype(Matchtype val) { myMatchtype = int64(val); }
1709  {
1710  SOP_Node *thissop = cookparms.getNode();
1711  if (!thissop) return getMatchtype();
1712  int64 result;
1713  OP_Utils::evalOpParm(result, thissop, "matchtype", cookparms.getCookTime(), 0);
1714  return Matchtype(result);
1715  }
1716  fpreal64 getMatchTol() const { return myMatchTol; }
1717  void setMatchTol(fpreal64 val) { myMatchTol = val; }
1719  {
1720  SOP_Node *thissop = cookparms.getNode();
1721  if (!thissop) return getMatchTol();
1722  fpreal64 result;
1723  OP_Utils::evalOpParm(result, thissop, "matchtol", cookparms.getCookTime(), 0);
1724  return result;
1725  }
1726  Gridtype getGridtype() const { return Gridtype(myGridtype); }
1727  void setGridtype(Gridtype val) { myGridtype = int64(val); }
1729  {
1730  SOP_Node *thissop = cookparms.getNode();
1731  if (!thissop) return getGridtype();
1732  int64 result;
1733  OP_Utils::evalOpParm(result, thissop, "gridtype", cookparms.getCookTime(), 0);
1734  return Gridtype(result);
1735  }
1736  UT_Vector3D getGridspacing() const { return myGridspacing; }
1737  void setGridspacing(UT_Vector3D val) { myGridspacing = val; }
1739  {
1740  SOP_Node *thissop = cookparms.getNode();
1741  if (!thissop) return getGridspacing();
1743  OP_Utils::evalOpParm(result, thissop, "gridspacing", cookparms.getCookTime(), 0);
1744  return result;
1745  }
1746  UT_Vector3D getGridlines() const { return myGridlines; }
1747  void setGridlines(UT_Vector3D val) { myGridlines = val; }
1749  {
1750  SOP_Node *thissop = cookparms.getNode();
1751  if (!thissop) return getGridlines();
1753  OP_Utils::evalOpParm(result, thissop, "gridlines", cookparms.getCookTime(), 0);
1754  return result;
1755  }
1756  UT_Vector3I getGridpow2() const { return myGridpow2; }
1757  void setGridpow2(UT_Vector3I val) { myGridpow2 = val; }
1759  {
1760  SOP_Node *thissop = cookparms.getNode();
1761  if (!thissop) return getGridpow2();
1763  OP_Utils::evalOpParm(result, thissop, "gridpow2", cookparms.getCookTime(), 0);
1764  return result;
1765  }
1766  UT_Vector3D getGridoffset() const { return myGridoffset; }
1767  void setGridoffset(UT_Vector3D val) { myGridoffset = val; }
1769  {
1770  SOP_Node *thissop = cookparms.getNode();
1771  if (!thissop) return getGridoffset();
1773  OP_Utils::evalOpParm(result, thissop, "gridoffset", cookparms.getCookTime(), 0);
1774  return result;
1775  }
1776  Gridround getGridround() const { return Gridround(myGridround); }
1777  void setGridround(Gridround val) { myGridround = int64(val); }
1779  {
1780  SOP_Node *thissop = cookparms.getNode();
1781  if (!thissop) return getGridround();
1782  int64 result;
1783  OP_Utils::evalOpParm(result, thissop, "gridround", cookparms.getCookTime(), 0);
1784  return Gridround(result);
1785  }
1786  bool getUseGridTol() const { return myUseGridTol; }
1787  void setUseGridTol(bool val) { myUseGridTol = val; }
1788  bool opUseGridTol(const SOP_NodeVerb::CookParms &cookparms) const
1789  {
1790  SOP_Node *thissop = cookparms.getNode();
1791  if (!thissop) return getUseGridTol();
1792  bool result;
1793  OP_Utils::evalOpParm(result, thissop, "usegridtol", cookparms.getCookTime(), 0);
1794  return result;
1795  }
1796  fpreal64 getGridtol() const { return myGridtol; }
1797  void setGridtol(fpreal64 val) { myGridtol = val; }
1799  {
1800  SOP_Node *thissop = cookparms.getNode();
1801  if (!thissop) return getGridtol();
1802  fpreal64 result;
1803  OP_Utils::evalOpParm(result, thissop, "gridtol", cookparms.getCookTime(), 0);
1804  return result;
1805  }
1806  bool getConsolidateSnappedPoints() const { return myConsolidateSnappedPoints; }
1807  void setConsolidateSnappedPoints(bool val) { myConsolidateSnappedPoints = val; }
1809  {
1810  SOP_Node *thissop = cookparms.getNode();
1811  if (!thissop) return getConsolidateSnappedPoints();
1812  bool result;
1813  OP_Utils::evalOpParm(result, thissop, "consolidatesnappedpoints", cookparms.getCookTime(), 0);
1814  return result;
1815  }
1816  bool getKeepConsolidatedPoints() const { return myKeepConsolidatedPoints; }
1817  void setKeepConsolidatedPoints(bool val) { myKeepConsolidatedPoints = val; }
1819  {
1820  SOP_Node *thissop = cookparms.getNode();
1821  if (!thissop) return getKeepConsolidatedPoints();
1822  bool result;
1823  OP_Utils::evalOpParm(result, thissop, "keepconsolidatedpoints", cookparms.getCookTime(), 0);
1824  return result;
1825  }
1826  bool getDelDegen() const { return myDelDegen; }
1827  void setDelDegen(bool val) { myDelDegen = val; }
1828  bool opDelDegen(const SOP_NodeVerb::CookParms &cookparms) const
1829  {
1830  SOP_Node *thissop = cookparms.getNode();
1831  if (!thissop) return getDelDegen();
1832  bool result;
1833  OP_Utils::evalOpParm(result, thissop, "deldegen", cookparms.getCookTime(), 0);
1834  return result;
1835  }
1836  bool getDelDegenPoints() const { return myDelDegenPoints; }
1837  void setDelDegenPoints(bool val) { myDelDegenPoints = val; }
1838  bool opDelDegenPoints(const SOP_NodeVerb::CookParms &cookparms) const
1839  {
1840  SOP_Node *thissop = cookparms.getNode();
1841  if (!thissop) return getDelDegenPoints();
1842  bool result;
1843  OP_Utils::evalOpParm(result, thissop, "deldegenpoints", cookparms.getCookTime(), 0);
1844  return result;
1845  }
1846  bool getDelUnusedPoints() const { return myDelUnusedPoints; }
1847  void setDelUnusedPoints(bool val) { myDelUnusedPoints = val; }
1848  bool opDelUnusedPoints(const SOP_NodeVerb::CookParms &cookparms) const
1849  {
1850  SOP_Node *thissop = cookparms.getNode();
1851  if (!thissop) return getDelUnusedPoints();
1852  bool result;
1853  OP_Utils::evalOpParm(result, thissop, "delunusedpoints", cookparms.getCookTime(), 0);
1854  return result;
1855  }
1856  bool getRecomputenml() const { return myRecomputenml; }
1857  void setRecomputenml(bool val) { myRecomputenml = val; }
1858  bool opRecomputenml(const SOP_NodeVerb::CookParms &cookparms) const
1859  {
1860  SOP_Node *thissop = cookparms.getNode();
1861  if (!thissop) return getRecomputenml();
1862  bool result;
1863  OP_Utils::evalOpParm(result, thissop, "recomputenml", cookparms.getCookTime(), 0);
1864  return result;
1865  }
1866  bool getCreatesnappedgroup() const { return myCreatesnappedgroup; }
1867  void setCreatesnappedgroup(bool val) { myCreatesnappedgroup = val; }
1868  bool opCreatesnappedgroup(const SOP_NodeVerb::CookParms &cookparms) const
1869  {
1870  SOP_Node *thissop = cookparms.getNode();
1871  if (!thissop) return getCreatesnappedgroup();
1872  bool result;
1873  OP_Utils::evalOpParm(result, thissop, "createsnappedgroup", cookparms.getCookTime(), 0);
1874  return result;
1875  }
1876  const UT_StringHolder & getSnappedgroupname() const { return mySnappedgroupname; }
1877  void setSnappedgroupname(const UT_StringHolder & val) { mySnappedgroupname = val; }
1879  {
1880  SOP_Node *thissop = cookparms.getNode();
1881  if (!thissop) return getSnappedgroupname();
1883  OP_Utils::evalOpParm(result, thissop, "snappedgroupname", cookparms.getCookTime(), 0);
1884  return result;
1885  }
1886  bool getCreatesnappedattrib() const { return myCreatesnappedattrib; }
1887  void setCreatesnappedattrib(bool val) { myCreatesnappedattrib = val; }
1888  bool opCreatesnappedattrib(const SOP_NodeVerb::CookParms &cookparms) const
1889  {
1890  SOP_Node *thissop = cookparms.getNode();
1891  if (!thissop) return getCreatesnappedattrib();
1892  bool result;
1893  OP_Utils::evalOpParm(result, thissop, "createsnappedattrib", cookparms.getCookTime(), 0);
1894  return result;
1895  }
1896  const UT_StringHolder & getSnappedattribname() const { return mySnappedattribname; }
1897  void setSnappedattribname(const UT_StringHolder & val) { mySnappedattribname = val; }
1899  {
1900  SOP_Node *thissop = cookparms.getNode();
1901  if (!thissop) return getSnappedattribname();
1903  OP_Utils::evalOpParm(result, thissop, "snappedattribname", cookparms.getCookTime(), 0);
1904  return result;
1905  }
1906  const UT_Array<Numpointattribs> &getNumpointattribs() const { return myNumpointattribs; }
1907 void setNumpointattribs(const UT_Array<Numpointattribs> &val) { myNumpointattribs = val; }
1909  {
1910  SOP_Node *thissop = cookparms.getNode();
1911  if (!thissop) return getNumpointattribs().entries();
1912  exint result;
1913  OP_Utils::evalOpParm(result, thissop, "numpointattribs", cookparms.getCookTime(), 0);
1914  return result;
1915  }
1917  { return opinstNumpointattribs_attribsnapmethod(cookparms, &_idx); }
1919  {
1920  SOP_Node *thissop = cookparms.getNode();
1921  if (!thissop) return (myNumpointattribs(_idx[0]).attribsnapmethod);
1922  int _parmidx[2-1];
1923  _parmidx[1-1] = _idx[1-1] + 1;
1924 
1925  int64 result;
1926  OP_Utils::evalOpParmInst(result, thissop, "attribsnapmethod#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1927  return (result);
1928  }
1930  { return opinstNumpointattribs_pointattribnames(cookparms, &_idx); }
1932  {
1933  SOP_Node *thissop = cookparms.getNode();
1934  if (!thissop) return (myNumpointattribs(_idx[0]).pointattribnames);
1935  int _parmidx[2-1];
1936  _parmidx[1-1] = _idx[1-1] + 1;
1937 
1939  OP_Utils::evalOpParmInst(result, thissop, "pointattribnames#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1940  return (result);
1941  }
1943  { return opinstNumpointattribs_pointattribweightname(cookparms, &_idx); }
1945  {
1946  SOP_Node *thissop = cookparms.getNode();
1947  if (!thissop) return (myNumpointattribs(_idx[0]).pointattribweightname);
1948  int _parmidx[2-1];
1949  _parmidx[1-1] = _idx[1-1] + 1;
1950 
1952  OP_Utils::evalOpParmInst(result, thissop, "pointattribweightname#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1953  return (result);
1954  }
1955 
1956  const UT_Array<Numgroups> &getNumgroups() const { return myNumgroups; }
1957 void setNumgroups(const UT_Array<Numgroups> &val) { myNumgroups = val; }
1959  {
1960  SOP_Node *thissop = cookparms.getNode();
1961  if (!thissop) return getNumgroups().entries();
1962  exint result;
1963  OP_Utils::evalOpParm(result, thissop, "numgroups", cookparms.getCookTime(), 0);
1964  return result;
1965  }
1967  { return opinstNumgroups_grouppropagation(cookparms, &_idx); }
1968  int64 opinstNumgroups_grouppropagation(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1969  {
1970  SOP_Node *thissop = cookparms.getNode();
1971  if (!thissop) return (myNumgroups(_idx[0]).grouppropagation);
1972  int _parmidx[2-1];
1973  _parmidx[1-1] = _idx[1-1] + 1;
1974 
1975  int64 result;
1976  OP_Utils::evalOpParmInst(result, thissop, "grouppropagation#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1977  return (result);
1978  }
1980  { return opinstNumgroups_pointgroupnames(cookparms, &_idx); }
1982  {
1983  SOP_Node *thissop = cookparms.getNode();
1984  if (!thissop) return (myNumgroups(_idx[0]).pointgroupnames);
1985  int _parmidx[2-1];
1986  _parmidx[1-1] = _idx[1-1] + 1;
1987 
1989  OP_Utils::evalOpParmInst(result, thissop, "pointgroupnames#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1990  return (result);
1991  }
1992 
1993  bool getUsetargetgroup() const { return myUsetargetgroup; }
1994  void setUsetargetgroup(bool val) { myUsetargetgroup = val; }
1995  bool opUsetargetgroup(const SOP_NodeVerb::CookParms &cookparms) const
1996  {
1997  SOP_Node *thissop = cookparms.getNode();
1998  if (!thissop) return getUsetargetgroup();
1999  bool result;
2000  OP_Utils::evalOpParm(result, thissop, "usetargetgroup", cookparms.getCookTime(), 0);
2001  return result;
2002  }
2003  const UT_StringHolder & getTargetgroup() const { return myTargetgroup; }
2004  void setTargetgroup(const UT_StringHolder & val) { myTargetgroup = val; }
2006  {
2007  SOP_Node *thissop = cookparms.getNode();
2008  if (!thissop) return getTargetgroup();
2010  OP_Utils::evalOpParm(result, thissop, "targetgroup", cookparms.getCookTime(), 0);
2011  return result;
2012  }
2013  bool getModifyboth() const { return myModifyboth; }
2014  void setModifyboth(bool val) { myModifyboth = val; }
2015  bool opModifyboth(const SOP_NodeVerb::CookParms &cookparms) const
2016  {
2017  SOP_Node *thissop = cookparms.getNode();
2018  if (!thissop) return getModifyboth();
2019  bool result;
2020  OP_Utils::evalOpParm(result, thissop, "modifyboth", cookparms.getCookTime(), 0);
2021  return result;
2022  }
2023 
2024 private:
2025  UT_StringHolder myQuerygroup;
2026  UT_StringHolder myPosAttrib;
2027  int64 mySnaptype;
2028  int64 myAlgorithm;
2029  bool myUseTol3D;
2030  fpreal64 myTol3d;
2031  UT_StringHolder myTargetPtAttrib;
2032  int64 myTargetClass;
2033  bool myUsePositionSnapMethod;
2034  int64 myPositionSnapMethod;
2035  UT_StringHolder myPositionSnapWeightName;
2036  bool myUseradiusattrib;
2037  UT_StringHolder myRadiusattrib;
2038  bool myUsematchattrib;
2039  UT_StringHolder myMatchattrib;
2040  int64 myMatchtype;
2041  fpreal64 myMatchTol;
2042  int64 myGridtype;
2043  UT_Vector3D myGridspacing;
2044  UT_Vector3D myGridlines;
2045  UT_Vector3I myGridpow2;
2046  UT_Vector3D myGridoffset;
2047  int64 myGridround;
2048  bool myUseGridTol;
2049  fpreal64 myGridtol;
2050  bool myConsolidateSnappedPoints;
2051  bool myKeepConsolidatedPoints;
2052  bool myDelDegen;
2053  bool myDelDegenPoints;
2054  bool myDelUnusedPoints;
2055  bool myRecomputenml;
2056  bool myCreatesnappedgroup;
2057  UT_StringHolder mySnappedgroupname;
2058  bool myCreatesnappedattrib;
2059  UT_StringHolder mySnappedattribname;
2060  UT_Array<Numpointattribs> myNumpointattribs;
2061  UT_Array<Numgroups> myNumgroups;
2062  bool myUsetargetgroup;
2063  UT_StringHolder myTargetgroup;
2064  bool myModifyboth;
2065 
2066 };
UT_StringHolder opNumpointattribs_pointattribnames(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
bool getUseTol3D() const
void setCreatesnappedattrib(bool val)
void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
bool opRecomputenml(const SOP_NodeVerb::CookParms &cookparms) const
bool getDelDegenPoints() const
int64 opinstNumgroups_grouppropagation(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
static void loadData(UT_IStream &is, UT_Vector2D &v)
void setTol3d(fpreal64 val)
const UT_Array< Numpointattribs > & getNumpointattribs() const
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glcorearb.h:2540
bool opDelDegen(const SOP_NodeVerb::CookParms &cookparms) const
void setUsetargetgroup(bool val)
Algorithm opAlgorithm(const SOP_NodeVerb::CookParms &cookparms) const
void getNestParmValue(TempIndex idx, TempIndex instance, exint &value) const override
UT_Vector3I opGridpow2(const SOP_NodeVerb::CookParms &cookparms) const
int int32
Definition: SYS_Types.h:39
SOP_Node * getNode() const
Definition: SOP_NodeVerb.h:347
const UT_StringHolder & getQuerygroup() const
exint getNestNumParms(TempIndex idx) const override
UT_Vector3D opGridlines(const SOP_NodeVerb::CookParms &cookparms) const
bool opDelDegenPoints(const SOP_NodeVerb::CookParms &cookparms) const
static void saveData(std::ostream &os, UT_Vector3D v)
bool operator==(const Numgroups &src) const
void setPosAttrib(const UT_StringHolder &val)
void setMatchtype(Matchtype val)
exint opNumpointattribs(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 getGridtol() const
UT_StringHolder opSnappedattribname(const SOP_NodeVerb::CookParms &cookparms) const
void save(std::ostream &os) const
void
Definition: png.h:1083
static void loadData(UT_IStream &is, UT_StringHolder &v)
exint bread(int32 *buffer, exint asize=1)
GLboolean * data
Definition: glcorearb.h:131
GT_API const UT_StringHolder time
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector4.h:493
PositionSnapMethod opPositionSnapMethod(const SOP_NodeVerb::CookParms &cookparms) const
const GLdouble * v
Definition: glcorearb.h:837
const UT_StringHolder & getMatchattrib() const
fpreal getTime() const
Definition: OP_Context.h:62
void setModifyboth(bool val)
Snaptype getSnaptype() const
void setGridtype(Gridtype val)
Gridtype opGridtype(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getTargetgroup() const
void setTargetPtAttrib(const UT_StringHolder &val)
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_SharedPtr< UT_Ramp > &value) override
bool getConsolidateSnappedPoints() const
Matchtype opMatchtype(const SOP_NodeVerb::CookParms &cookparms) const
UT_String makeQuotedString(char delimiter='\'', bool escape_nonprinting=false) const
const OP_Context & context() const
Definition: OP_NodeParms.h:97
UT_StringHolder opPosAttrib(const SOP_NodeVerb::CookParms &cookparms) const
bool getUseradiusattrib() const
constexpr SYS_FORCE_INLINE T & z() noexcept
Definition: UT_Vector3.h:667
int64 exint
Definition: SYS_Types.h:125
UT_StringHolder createString(const UT_Array< Numgroups > &list) const
bool operator!=(const Numpointattribs &src) const
void setGridspacing(UT_Vector3D val)
UT_StringHolder opTargetPtAttrib(const SOP_NodeVerb::CookParms &cookparms) const
SYS_FORCE_INLINE const char * buffer() const
GLdouble s
Definition: glad.h:3009
GLuint GLsizei GLsizei * length
Definition: glcorearb.h:795
static void saveData(std::ostream &os, UT_Matrix4D v)
An output stream object that owns its own string buffer storage.
void setGridlines(UT_Vector3D val)
bool opCreatesnappedgroup(const SOP_NodeVerb::CookParms &cookparms) const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix2D &value) const override
UT_Vector3D getGridoffset() const
UT_StringHolder opinstNumpointattribs_pointattribweightname(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
void setDelDegenPoints(bool val)
static void loadData(UT_IStream &is, UT_Vector3D &v)
**But if you need a result
Definition: thread.h:613
const UT_StringHolder & getTargetPtAttrib() const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector4D &value) override
Snaptype opSnaptype(const SOP_NodeVerb::CookParms &cookparms) const
UT_Vector3T< int64 > UT_Vector3I
const UT_StringHolder & getSnappedgroupname() const
Algorithm getAlgorithm() const
void setUsematchattrib(bool val)
bool opUsePositionSnapMethod(const SOP_NodeVerb::CookParms &cookparms) const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix4D &value) const override
UT_Vector3D getGridlines() const
exint nodeIdx() const
Definition: OP_NodeParms.h:95
static PRM_DataItemHandle parseBinary(const char *type, UT_IStream &is)
fpreal64 opTol3d(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getSnappedattribname() const
const UT_WorkBuffer & str()
Returns a read-only reference to the underlying UT_WorkBuffer.
bool load(UT_IStream &is)
virtual NodeIdx getInput(NodeIdx idx, int input, bool markused=false) const =0
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector4.h:491
UT_Vector3D opGridoffset(const SOP_NodeVerb::CookParms &cookparms) const
int64 opNumpointattribs_attribsnapmethod(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
bool getDelDegen() const
UT_StringHolder opNumgroups_pointgroupnames(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
GLuint GLsizei const GLuint const GLintptr * offsets
Definition: glcorearb.h:2621
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector4D &value) const override
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix3D &value) override
fpreal64 opGridtol(const SOP_NodeVerb::CookParms &cookparms) const
double fpreal64
Definition: SYS_Types.h:201
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector2.h:423
int64 opinstNumpointattribs_attribsnapmethod(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
const UT_Array< Numgroups > & getNumgroups() const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_StringHolder &value) override
bool operator==(const BaseDimensions< T > &a, const BaseDimensions< Y > &b)
Definition: Dimensions.h:137
Gridtype getGridtype() const
static void loadData(UT_IStream &is, PRM_DataItemHandle &v)
void setDelDegen(bool val)
bool opDelUnusedPoints(const SOP_NodeVerb::CookParms &cookparms) const
void setSnaptype(Snaptype val)
static void loadData(UT_IStream &is, UT_Matrix3D &v)
bool getKeepConsolidatedPoints() const
void setNumpointattribs(const UT_Array< Numpointattribs > &val)
const UT_StringHolder & getPositionSnapWeightName() const
void setNumgroups(const UT_Array< Numgroups > &val)
static void saveData(std::ostream &os, UT_StringHolder s)
UT_StringHolder opSnappedgroupname(const SOP_NodeVerb::CookParms &cookparms) const
exint length() const
Gridround opGridround(const SOP_NodeVerb::CookParms &cookparms) const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix4D &value) override
void setSnappedgroupname(const UT_StringHolder &val)
SYS_FORCE_INLINE const char * buffer() const
void setUseradiusattrib(bool val)
std::shared_ptr< T > UT_SharedPtr
Wrapper around std::shared_ptr.
Definition: UT_SharedPtr.h:36
static void saveData(std::ostream &os, UT_Matrix3D v)
constexpr SYS_FORCE_INLINE T & z() noexcept
Definition: UT_Vector4.h:495
void doGetParmValue(TempIndex idx, TempIndex instance, T &value) const
void setUseTol3D(bool val)
bool opModifyboth(const SOP_NodeVerb::CookParms &cookparms) const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector2D &value) const override
void setUsePositionSnapMethod(bool val)
exint read(bool *array, exint sz=1)
Definition: UT_IStream.h:276
const OP_GraphProxy * graph() const
Definition: OP_NodeParms.h:94
#define SYS_FORCE_INLINE
Definition: SYS_Inline.h:45
const UT_StringHolder & getPosAttrib() const
exint opNumgroups(const SOP_NodeVerb::CookParms &cookparms) const
UT_Vector3D getGridspacing() const
UT_StringHolder opQuerygroup(const SOP_NodeVerb::CookParms &cookparms) const
void setGridoffset(UT_Vector3D val)
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector2D &value) override
static void saveData(std::ostream &os, bool v)
UT_StringHolder opinstNumpointattribs_pointattribnames(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
bool isParmColorRamp(exint idx) const override
virtual void evalOpParmInst(int64 &v, NodeIdx node, const char *parmname, const int *inst, const int *offsets, fpreal time, DEP_MicroNode *depnode, int nestlevel=1) const =0
void doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
void setKeepConsolidatedPoints(bool val)
long long int64
Definition: SYS_Types.h:116
UT_Vector3I getGridpow2() const
UT_Vector3D opGridspacing(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, UT_Matrix4D &v)
void setUseGridTol(bool val)
static void loadData(UT_IStream &is, bool &v)
UT_Vector3T< fpreal64 > UT_Vector3D
void getNestParmValue(TempIndex idx, TempIndex instance, UT_SharedPtr< UT_Ramp > &value) const override
static void loadData(UT_IStream &is, UT_Vector4D &v)
static void saveData(std::ostream &os, PRM_DataItemHandle s)
static void saveData(std::ostream &os, int64 v)
bool operator!=(const Numgroups &src) const
void setGridpow2(UT_Vector3I val)
Gridround getGridround() const
int64 opNumgroups_grouppropagation(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
bool getUseGridTol() const
static void loadData(UT_IStream &is, UT_Vector2I &v)
virtual void evalOpParm(int64 &v, NodeIdx node, const char *parmname, fpreal time, DEP_MicroNode *depnode) const =0
bool getModifyboth() const
SYS_FORCE_INLINE void strcat(const char *src)
UT_StringHolder opRadiusattrib(const SOP_NodeVerb::CookParms &cookparms) const
void saveBinary(std::ostream &os) const
Save string to binary stream.
Definition: UT_String.h:296
static void saveData(std::ostream &os, UT_Vector4D v)
GT_API const UT_StringHolder version
void setNestParmValue(TempIndex idx, TempIndex instance, const fpreal &value) override
void setTargetgroup(const UT_StringHolder &val)
static void loadData(UT_IStream &is, UT_Matrix2D &v)
exint entries() const
Alias of size(). size() is preferred.
Definition: UT_Array.h:648
fpreal64 getTol3d() const
bool getUsematchattrib() const
bool opUseradiusattrib(const SOP_NodeVerb::CookParms &cookparms) const
int int appendSprintf(const char *fmt,...) SYS_PRINTF_CHECK_ATTRIBUTE(2
bool operator!=(const SOP_Fuse_2_0Parms &src) const
void setSnappedattribname(const UT_StringHolder &val)
static void loadData(UT_IStream &is, UT_Vector3I &v)
static void saveData(std::ostream &os, UT_SharedPtr< UT_Ramp > s)
TargetClass getTargetClass() const
static void saveData(std::ostream &os, UT_Matrix2D v)
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector3D &value) override
bool getDelUnusedPoints() const
bool opKeepConsolidatedPoints(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 getMatchTol() const
void setQuerygroup(const UT_StringHolder &val)
void setConsolidateSnappedPoints(bool val)
fpreal64 fpreal
Definition: SYS_Types.h:277
void setNestParmValue(TempIndex idx, TempIndex instance, const exint &value) override
DEP_MicroNode * depnode() const
Definition: OP_NodeParms.h:99
UT_StringHolder opPositionSnapWeightName(const SOP_NodeVerb::CookParms &cookparms) const
bool operator==(const SOP_Fuse_2_0Parms &src) const
LeafData & operator=(const LeafData &)=delete
bool getCreatesnappedgroup() const
Utility class for containing a color ramp.
Definition: UT_Ramp.h:92
bool getCreatesnappedattrib() const
void setTargetClass(TargetClass val)
bool getUsePositionSnapMethod() const
UT_StringHolder opTargetgroup(const SOP_NodeVerb::CookParms &cookparms) const
constexpr SYS_FORCE_INLINE T & w() noexcept
Definition: UT_Vector4.h:497
SYS_FORCE_INLINE void append(char character)
GLuint GLfloat * val
Definition: glcorearb.h:1608
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
static void saveData(std::ostream &os, fpreal64 v)
#define SOP_API
Definition: SOP_API.h:10
UT_StringHolder opNumpointattribs_pointattribweightname(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
bool opUsetargetgroup(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, fpreal64 &v)
bool getRecomputenml() const
bool opUseTol3D(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getRadiusattrib() const
void setGridtol(fpreal64 val)
void buildFromOp(const OP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
fpreal getCookTime() const
Definition: SOP_NodeVerb.h:361
static void loadData(UT_IStream &is, int64 &v)
void copyFrom(const OP_NodeParms *src) override
SYS_FORCE_INLINE UT_StringHolder getToken(Snaptype enum_value)
void setCreatesnappedgroup(bool val)
bool opUseGridTol(const SOP_NodeVerb::CookParms &cookparms) const
const char * findChar(int c) const
Definition: UT_String.h:1395
#define UT_ASSERT(ZZ)
Definition: UT_Assert.h:156
Definition: core.h:1131
GLboolean r
Definition: glcorearb.h:1222
void setDelUnusedPoints(bool val)
void setRadiusattrib(const UT_StringHolder &val)
static void loadData(UT_IStream &is, UT_SharedPtr< UT_Ramp > &v)
static void saveData(std::ostream &os, UT_Vector2D v)
bool opConsolidateSnappedPoints(const SOP_NodeVerb::CookParms &cookparms) const
void setGridround(Gridround val)
UT_StringHolder opinstNumgroups_pointgroupnames(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector3.h:665
void setRecomputenml(bool val)
void setMatchattrib(const UT_StringHolder &val)
bool opCreatesnappedattrib(const SOP_NodeVerb::CookParms &cookparms) const
type
Definition: core.h:1059
Matchtype getMatchtype() const
void loadFromOpSubclass(const LoadParms &loadparms) override
fpreal64 opMatchTol(const SOP_NodeVerb::CookParms &cookparms) const
void getNestParmValue(TempIndex idx, TempIndex instance, fpreal &value) const override
void setAlgorithm(Algorithm val)
const char * getNestParmName(TempIndex fieldnum) const override
UT_SharedPtr< const PRM_DataItem > PRM_DataItemHandle
Definition: PRM_Parm.h:97
static void loadData(UT_IStream &is, UT_Vector4I &v)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector3D &value) const override
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector2.h:425
void setMatchTol(fpreal64 val)
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix2D &value) override
SYS_FORCE_INLINE bool isstring() const
UT_StringHolder opMatchattrib(const SOP_NodeVerb::CookParms &cookparms) const
void setNestParmValue(TempIndex idx, TempIndex instance, const PRM_DataItemHandle &value) override
PositionSnapMethod getPositionSnapMethod() const
UT_StringHolder createString(const UT_Array< Numpointattribs > &list) const
bool opUsematchattrib(const SOP_NodeVerb::CookParms &cookparms) const
void setPositionSnapMethod(PositionSnapMethod val)
SYS_FORCE_INLINE void strncpy(const char *src, exint maxlen)
bool getUsetargetgroup() const
TargetClass opTargetClass(const SOP_NodeVerb::CookParms &cookparms) const
bool operator==(const Numpointattribs &src) const
ParmType getNestParmType(TempIndex fieldnum) const override
void getNestParmValue(TempIndex idx, TempIndex instance, UT_StringHolder &value) const override
GLenum src
Definition: glcorearb.h:1793
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector3.h:663
void setPositionSnapWeightName(const UT_StringHolder &val)