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 <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 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 
453  if (baseGetSignature() != src.baseGetSignature()) return false;
454 
455  return true;
456  }
457  bool operator!=(const SOP_Fuse_2_0Parms &src) const
458  {
459  return !operator==(src);
460  }
470 
471 
472 
473  void buildFromOp(const OP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
474  {
475  myQuerygroup = ""_UTsh;
476  if (true)
477  graph->evalOpParm(myQuerygroup, nodeidx, "querygroup", time, graph->isDirect()?nullptr:depnode);
478  myPosAttrib = "P"_UTsh;
479  if (true)
480  graph->evalOpParm(myPosAttrib, nodeidx, "posattrib", time, graph->isDirect()?nullptr:depnode);
481  mySnaptype = 0;
482  if (true)
483  graph->evalOpParm(mySnaptype, nodeidx, "snaptype", time, graph->isDirect()?nullptr:depnode);
484  myAlgorithm = 0;
485  if (true && ( (true&&!(((int64(getSnaptype())!=0)))) ) )
486  graph->evalOpParm(myAlgorithm, nodeidx, "algorithm", time, graph->isDirect()?nullptr:depnode);
487  myUseTol3D = true;
488  if (true && ( (true&&!(((int64(getSnaptype())!=0)))) ) )
489  graph->evalOpParm(myUseTol3D, nodeidx, "usetol3d", time, graph->isDirect()?nullptr:depnode);
490  myTol3d = 0.001;
491  if (true && ( (true&&!(((int64(getSnaptype())!=0))||((getUseTol3D()==0))||((int64(getSnaptype())!=0)))) ) )
492  graph->evalOpParm(myTol3d, nodeidx, "tol3d", time, graph->isDirect()?nullptr:depnode);
493  myTargetPtAttrib = "snap_to"_UTsh;
494  if (true && ( (true&&!(((int64(getSnaptype())!=2)))) ) )
495  graph->evalOpParm(myTargetPtAttrib, nodeidx, "targetptattrib", time, graph->isDirect()?nullptr:depnode);
496  myTargetClass = 0;
497  if (true && ( (true&&!(((int64(getSnaptype())!=2)))) ) )
498  graph->evalOpParm(myTargetClass, nodeidx, "targetclass", time, graph->isDirect()?nullptr:depnode);
499  myUsePositionSnapMethod = true;
500  if (true && ( (true&&!(((int64(getSnaptype())==1)))) ) )
501  graph->evalOpParm(myUsePositionSnapMethod, nodeidx, "usepositionsnapmethod", time, graph->isDirect()?nullptr:depnode);
502  myPositionSnapMethod = 0;
503  if (true && ( (true&&!(((int64(getSnaptype())==1))||((getUsePositionSnapMethod()==0))||((int64(getSnaptype())==1)))) ) )
504  graph->evalOpParm(myPositionSnapMethod, nodeidx, "positionsnapmethod", time, graph->isDirect()?nullptr:depnode);
505  myPositionSnapWeightName = "weight"_UTsh;
506  if (true && ( (true&&!(((int64(getSnaptype())==1))||((getUsePositionSnapMethod()==0))||((int64(getSnaptype())==1))||((int64(getPositionSnapMethod())!=10)&&(int64(getPositionSnapMethod())!=11)&&(int64(getPositionSnapMethod())!=12)&&(int64(getPositionSnapMethod())!=13)))) ) )
507  graph->evalOpParm(myPositionSnapWeightName, nodeidx, "positionsnapweightname", time, graph->isDirect()?nullptr:depnode);
508  myUseradiusattrib = false;
509  if (true && ( (true&&!(((int64(getSnaptype())!=0)))) ) )
510  graph->evalOpParm(myUseradiusattrib, nodeidx, "useradiusattrib", time, graph->isDirect()?nullptr:depnode);
511  myRadiusattrib = "pscale"_UTsh;
512  if (true && ( (true&&!(((getUseradiusattrib()==0))||((int64(getSnaptype())!=0)))) ) )
513  graph->evalOpParm(myRadiusattrib, nodeidx, "radiusattrib", time, graph->isDirect()?nullptr:depnode);
514  myUsematchattrib = false;
515  if (true && ( (true&&!(((int64(getSnaptype())!=0)))) ) )
516  graph->evalOpParm(myUsematchattrib, nodeidx, "usematchattrib", time, graph->isDirect()?nullptr:depnode);
517  myMatchattrib = "name"_UTsh;
518  if (true && ( (true&&!(((getUsematchattrib()==0))||((int64(getSnaptype())!=0)))) ) )
519  graph->evalOpParm(myMatchattrib, nodeidx, "matchattrib", time, graph->isDirect()?nullptr:depnode);
520  myMatchtype = 0;
521  if (true && ( (true&&!(((getUsematchattrib()==0))||((int64(getSnaptype())!=0)))) ) )
522  graph->evalOpParm(myMatchtype, nodeidx, "matchtype", time, graph->isDirect()?nullptr:depnode);
523  myMatchTol = 0;
524  if (true && ( (true&&!(((getUsematchattrib()==0))||((int64(getSnaptype())!=0)))) ) )
525  graph->evalOpParm(myMatchTol, nodeidx, "matchtol", time, graph->isDirect()?nullptr:depnode);
526  myGridtype = 0;
527  if (true && ( (true&&!(((int64(getSnaptype())!=1)))) ) )
528  graph->evalOpParm(myGridtype, nodeidx, "gridtype", time, graph->isDirect()?nullptr:depnode);
529  myGridspacing = UT_Vector3D(0.1,0.1,0.1);
530  if (true && ( (true&&!(((int64(getSnaptype())!=1))||((int64(getGridtype())!=0)))) ) )
531  graph->evalOpParm(myGridspacing, nodeidx, "gridspacing", time, graph->isDirect()?nullptr:depnode);
532  myGridlines = UT_Vector3D(10,10,10);
533  if (true && ( (true&&!(((int64(getSnaptype())!=1))||((int64(getGridtype())!=1)))) ) )
534  graph->evalOpParm(myGridlines, nodeidx, "gridlines", time, graph->isDirect()?nullptr:depnode);
535  myGridpow2 = UT_Vector3I(3,3,3);
536  if (true && ( (true&&!(((int64(getSnaptype())!=1))||((int64(getGridtype())!=2)))) ) )
537  graph->evalOpParm(myGridpow2, nodeidx, "gridpow2", time, graph->isDirect()?nullptr:depnode);
538  myGridoffset = UT_Vector3D(0,0,0);
539  if (true && ( (true&&!(((int64(getSnaptype())!=1)))) ) )
540  graph->evalOpParm(myGridoffset, nodeidx, "gridoffset", time, graph->isDirect()?nullptr:depnode);
541  myGridround = 0;
542  if (true && ( (true&&!(((int64(getSnaptype())!=1)))) ) )
543  graph->evalOpParm(myGridround, nodeidx, "gridround", time, graph->isDirect()?nullptr:depnode);
544  myUseGridTol = true;
545  if (true && ( (true&&!(((int64(getSnaptype())!=1)))) ) )
546  graph->evalOpParm(myUseGridTol, nodeidx, "usegridtol", time, graph->isDirect()?nullptr:depnode);
547  myGridtol = 10;
548  if (true && ( (true&&!(((int64(getSnaptype())!=1))||((getUseGridTol()==0))||((int64(getSnaptype())!=1)))) ) )
549  graph->evalOpParm(myGridtol, nodeidx, "gridtol", time, graph->isDirect()?nullptr:depnode);
550  myConsolidateSnappedPoints = true;
551  if (true)
552  graph->evalOpParm(myConsolidateSnappedPoints, nodeidx, "consolidatesnappedpoints", time, graph->isDirect()?nullptr:depnode);
553  myKeepConsolidatedPoints = false;
554  if (true && ( (true&&!(((getConsolidateSnappedPoints()==0)))) ) )
555  graph->evalOpParm(myKeepConsolidatedPoints, nodeidx, "keepconsolidatedpoints", time, graph->isDirect()?nullptr:depnode);
556  myDelDegen = true;
557  if (true && ( (true&&!(((getConsolidateSnappedPoints()==0)))) ) )
558  graph->evalOpParm(myDelDegen, nodeidx, "deldegen", time, graph->isDirect()?nullptr:depnode);
559  myDelDegenPoints = true;
560  if (true && ( (true&&!(((getConsolidateSnappedPoints()==0))||((getDelDegen()==0)))) ) )
561  graph->evalOpParm(myDelDegenPoints, nodeidx, "deldegenpoints", time, graph->isDirect()?nullptr:depnode);
562  myDelUnusedPoints = false;
563  if (true && ( (true&&!(((getConsolidateSnappedPoints()==0)))) ) )
564  graph->evalOpParm(myDelUnusedPoints, nodeidx, "delunusedpoints", time, graph->isDirect()?nullptr:depnode);
565  myRecomputenml = true;
566  if (true)
567  graph->evalOpParm(myRecomputenml, nodeidx, "recomputenml", time, graph->isDirect()?nullptr:depnode);
568  myCreatesnappedgroup = false;
569  if (true)
570  graph->evalOpParm(myCreatesnappedgroup, nodeidx, "createsnappedgroup", time, graph->isDirect()?nullptr:depnode);
571  mySnappedgroupname = "snapped_points"_UTsh;
572  if (true && ( (true&&!(((getCreatesnappedgroup()==0)))) ) )
573  graph->evalOpParm(mySnappedgroupname, nodeidx, "snappedgroupname", time, graph->isDirect()?nullptr:depnode);
574  myCreatesnappedattrib = false;
575  if (true && ( (true&&!(((int64(getSnaptype())==1)))) ) )
576  graph->evalOpParm(myCreatesnappedattrib, nodeidx, "createsnappedattrib", time, graph->isDirect()?nullptr:depnode);
577  mySnappedattribname = "snapped_to"_UTsh;
578  if (true && ( (true&&!(((getCreatesnappedattrib()==0))||((int64(getSnaptype())==1)))) ) )
579  graph->evalOpParm(mySnappedattribname, nodeidx, "snappedattribname", time, graph->isDirect()?nullptr:depnode);
580  if (true)
581  {
582  int64 length = 0;
583  graph->evalOpParm(length, nodeidx, "numpointattribs", time, graph->isDirect()?nullptr:depnode);
584  if (length < 0) length = 0;
585  myNumpointattribs.setSize(length);
586  for (exint i = 0; i < length; i++)
587  {
588  int parmidx[1];
589  int offsets[1];
590  parmidx[0] = i+1;
591  offsets[0] = 1;
592  auto && _curentry = myNumpointattribs(i);
593  (void) _curentry;
594  _curentry.attribsnapmethod = 8;
595  if (true)
596  graph->evalOpParmInst(_curentry.attribsnapmethod, nodeidx, "attribsnapmethod#", parmidx, offsets, time, graph->isDirect()?nullptr:depnode, 2-1);
597  _curentry.pointattribnames = ""_UTsh;
598  if (true)
599  graph->evalOpParmInst(_curentry.pointattribnames, nodeidx, "pointattribnames#", parmidx, offsets, time, graph->isDirect()?nullptr:depnode, 2-1);
600  _curentry.pointattribweightname = "weight"_UTsh;
601  if (true && ( (true&&!(((_curentry.attribsnapmethod!=11)&&(_curentry.attribsnapmethod!=12)&&(_curentry.attribsnapmethod!=13)&&(_curentry.attribsnapmethod!=14)&&(_curentry.attribsnapmethod!=15)))) ) )
602  graph->evalOpParmInst(_curentry.pointattribweightname, nodeidx, "pointattribweightname#", parmidx, offsets, time, graph->isDirect()?nullptr:depnode, 2-1);
603 
604  }
605  }
606  else
607  myNumpointattribs.clear();
608  if (true)
609  {
610  int64 length = 0;
611  graph->evalOpParm(length, nodeidx, "numgroups", time, graph->isDirect()?nullptr:depnode);
612  if (length < 0) length = 0;
613  myNumgroups.setSize(length);
614  for (exint i = 0; i < length; i++)
615  {
616  int parmidx[1];
617  int offsets[1];
618  parmidx[0] = i+1;
619  offsets[0] = 1;
620  auto && _curentry = myNumgroups(i);
621  (void) _curentry;
622  _curentry.grouppropagation = 0;
623  if (true)
624  graph->evalOpParmInst(_curentry.grouppropagation, nodeidx, "grouppropagation#", parmidx, offsets, time, graph->isDirect()?nullptr:depnode, 2-1);
625  _curentry.pointgroupnames = ""_UTsh;
626  if (true)
627  graph->evalOpParmInst(_curentry.pointgroupnames, nodeidx, "pointgroupnames#", parmidx, offsets, time, graph->isDirect()?nullptr:depnode, 2-1);
628 
629  }
630  }
631  else
632  myNumgroups.clear();
633  myUsetargetgroup = false;
634  if (true && ( (true&&!(((int64(getSnaptype())==1))||(((graph->getInput(nodeidx,1)>=0)==1)))) ) )
635  graph->evalOpParm(myUsetargetgroup, nodeidx, "usetargetgroup", time, graph->isDirect()?nullptr:depnode);
636  myTargetgroup = ""_UTsh;
637  if (true && ( (true&&!(((int64(getSnaptype())==1))||((getUsetargetgroup()==0)&&((graph->getInput(nodeidx,1)>=0)==0)))) ) )
638  graph->evalOpParm(myTargetgroup, nodeidx, "targetgroup", time, graph->isDirect()?nullptr:depnode);
639  myModifyboth = false;
640  if (true && ( (true&&!(((int64(getSnaptype())==1))||(((graph->getInput(nodeidx,1)>=0)==1))||((getUsetargetgroup()==0)&&(int64(getSnaptype())!=2)))) ) )
641  graph->evalOpParm(myModifyboth, nodeidx, "modifyboth", time, graph->isDirect()?nullptr:depnode);
642 
643  }
644 
645 
646  void loadFromOpSubclass(const LoadParms &loadparms) override
647  {
648  buildFromOp(loadparms.graph(), loadparms.nodeIdx(), loadparms.context().getTime(), loadparms.depnode());
649  }
650 
651 
652  void copyFrom(const OP_NodeParms *src) override
653  {
654  *this = *((const SOP_Fuse_2_0Parms *)src);
655  }
656 
657  template <typename T>
658  void
659  doGetParmValue(TempIndex idx, TempIndex instance, T &value) const
660  {
661  if (idx.size() < 1)
662  return;
663  UT_ASSERT(idx.size() == instance.size()+1);
664  if (idx.size() != instance.size()+1)
665  return;
666  switch (idx[0])
667  {
668  case 0:
669  coerceValue(value, myQuerygroup);
670  break;
671  case 1:
672  coerceValue(value, myPosAttrib);
673  break;
674  case 2:
675  coerceValue(value, mySnaptype);
676  break;
677  case 3:
678  coerceValue(value, myAlgorithm);
679  break;
680  case 4:
681  coerceValue(value, myUseTol3D);
682  break;
683  case 5:
684  coerceValue(value, myTol3d);
685  break;
686  case 6:
687  coerceValue(value, myTargetPtAttrib);
688  break;
689  case 7:
690  coerceValue(value, myTargetClass);
691  break;
692  case 8:
693  coerceValue(value, myUsePositionSnapMethod);
694  break;
695  case 9:
696  coerceValue(value, myPositionSnapMethod);
697  break;
698  case 10:
699  coerceValue(value, myPositionSnapWeightName);
700  break;
701  case 11:
702  coerceValue(value, myUseradiusattrib);
703  break;
704  case 12:
705  coerceValue(value, myRadiusattrib);
706  break;
707  case 13:
708  coerceValue(value, myUsematchattrib);
709  break;
710  case 14:
711  coerceValue(value, myMatchattrib);
712  break;
713  case 15:
714  coerceValue(value, myMatchtype);
715  break;
716  case 16:
717  coerceValue(value, myMatchTol);
718  break;
719  case 17:
720  coerceValue(value, myGridtype);
721  break;
722  case 18:
723  coerceValue(value, myGridspacing);
724  break;
725  case 19:
726  coerceValue(value, myGridlines);
727  break;
728  case 20:
729  coerceValue(value, myGridpow2);
730  break;
731  case 21:
732  coerceValue(value, myGridoffset);
733  break;
734  case 22:
735  coerceValue(value, myGridround);
736  break;
737  case 23:
738  coerceValue(value, myUseGridTol);
739  break;
740  case 24:
741  coerceValue(value, myGridtol);
742  break;
743  case 25:
744  coerceValue(value, myConsolidateSnappedPoints);
745  break;
746  case 26:
747  coerceValue(value, myKeepConsolidatedPoints);
748  break;
749  case 27:
750  coerceValue(value, myDelDegen);
751  break;
752  case 28:
753  coerceValue(value, myDelDegenPoints);
754  break;
755  case 29:
756  coerceValue(value, myDelUnusedPoints);
757  break;
758  case 30:
759  coerceValue(value, myRecomputenml);
760  break;
761  case 31:
762  coerceValue(value, myCreatesnappedgroup);
763  break;
764  case 32:
765  coerceValue(value, mySnappedgroupname);
766  break;
767  case 33:
768  coerceValue(value, myCreatesnappedattrib);
769  break;
770  case 34:
771  coerceValue(value, mySnappedattribname);
772  break;
773  case 35:
774  if (idx.size() == 1)
775  coerceValue(value, myNumpointattribs.entries());
776  else if (instance[0] < myNumpointattribs.entries())
777  {
778  auto && _data = myNumpointattribs(instance[0]);
779  switch (idx[1])
780  {
781  case 0:
782  coerceValue(value, _data.attribsnapmethod);
783  break;
784  case 1:
785  coerceValue(value, _data.pointattribnames);
786  break;
787  case 2:
788  coerceValue(value, _data.pointattribweightname);
789  break;
790 
791  }
792  }
793  break;
794  case 36:
795  if (idx.size() == 1)
796  coerceValue(value, myNumgroups.entries());
797  else if (instance[0] < myNumgroups.entries())
798  {
799  auto && _data = myNumgroups(instance[0]);
800  switch (idx[1])
801  {
802  case 0:
803  coerceValue(value, _data.grouppropagation);
804  break;
805  case 1:
806  coerceValue(value, _data.pointgroupnames);
807  break;
808 
809  }
810  }
811  break;
812  case 37:
813  coerceValue(value, myUsetargetgroup);
814  break;
815  case 38:
816  coerceValue(value, myTargetgroup);
817  break;
818  case 39:
819  coerceValue(value, myModifyboth);
820  break;
821 
822  }
823  }
824 
825  bool isParmColorRamp(exint idx) const override
826  {
827  switch (idx)
828  {
829 
830  }
831  return false;
832  }
833 
834  void getNestParmValue(TempIndex idx, TempIndex instance, exint &value) const override
835  { doGetParmValue(idx, instance, value); }
836  void getNestParmValue(TempIndex idx, TempIndex instance, fpreal &value) const override
837  { doGetParmValue(idx, instance, value); }
838  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector2D &value) const override
839  { doGetParmValue(idx, instance, value); }
840  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector3D &value) const override
841  { doGetParmValue(idx, instance, value); }
842  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector4D &value) const override
843  { doGetParmValue(idx, instance, value); }
844  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix2D &value) const override
845  { doGetParmValue(idx, instance, value); }
846  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
847  { doGetParmValue(idx, instance, value); }
848  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix4D &value) const override
849  { doGetParmValue(idx, instance, value); }
850  void getNestParmValue(TempIndex idx, TempIndex instance, UT_StringHolder &value) const override
851  { doGetParmValue(idx, instance, value); }
852  void getNestParmValue(TempIndex idx, TempIndex instance, UT_SharedPtr<UT_Ramp> &value) const override
853  { doGetParmValue(idx, instance, value); }
854  void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
855  { doGetParmValue(idx, instance, value); }
856 
857  template <typename T>
858  void
859  doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
860  {
861  if (idx.size() < 1)
862  return;
863  UT_ASSERT(idx.size() == instance.size()+1);
864  if (idx.size() != instance.size()+1)
865  return;
866  switch (idx[0])
867  {
868  case 0:
869  coerceValue(myQuerygroup, ( ( value ) ));
870  break;
871  case 1:
872  coerceValue(myPosAttrib, ( ( value ) ));
873  break;
874  case 2:
875  coerceValue(mySnaptype, clampMinValue(0, clampMaxValue(2, value ) ));
876  break;
877  case 3:
878  coerceValue(myAlgorithm, clampMinValue(0, clampMaxValue(1, value ) ));
879  break;
880  case 4:
881  coerceValue(myUseTol3D, ( ( value ) ));
882  break;
883  case 5:
884  coerceValue(myTol3d, ( ( value ) ));
885  break;
886  case 6:
887  coerceValue(myTargetPtAttrib, ( ( value ) ));
888  break;
889  case 7:
890  coerceValue(myTargetClass, clampMinValue(0, clampMaxValue(3, value ) ));
891  break;
892  case 8:
893  coerceValue(myUsePositionSnapMethod, ( ( value ) ));
894  break;
895  case 9:
896  coerceValue(myPositionSnapMethod, clampMinValue(0, clampMaxValue(13, value ) ));
897  break;
898  case 10:
899  coerceValue(myPositionSnapWeightName, ( ( value ) ));
900  break;
901  case 11:
902  coerceValue(myUseradiusattrib, ( ( value ) ));
903  break;
904  case 12:
905  coerceValue(myRadiusattrib, ( ( value ) ));
906  break;
907  case 13:
908  coerceValue(myUsematchattrib, ( ( value ) ));
909  break;
910  case 14:
911  coerceValue(myMatchattrib, ( ( value ) ));
912  break;
913  case 15:
914  coerceValue(myMatchtype, clampMinValue(0, clampMaxValue(1, value ) ));
915  break;
916  case 16:
917  coerceValue(myMatchTol, ( ( value ) ));
918  break;
919  case 17:
920  coerceValue(myGridtype, clampMinValue(0, clampMaxValue(2, value ) ));
921  break;
922  case 18:
923  coerceValue(myGridspacing, ( ( value ) ));
924  break;
925  case 19:
926  coerceValue(myGridlines, ( ( value ) ));
927  break;
928  case 20:
929  coerceValue(myGridpow2, ( ( value ) ));
930  break;
931  case 21:
932  coerceValue(myGridoffset, ( ( value ) ));
933  break;
934  case 22:
935  coerceValue(myGridround, clampMinValue(0, clampMaxValue(2, value ) ));
936  break;
937  case 23:
938  coerceValue(myUseGridTol, ( ( value ) ));
939  break;
940  case 24:
941  coerceValue(myGridtol, ( ( value ) ));
942  break;
943  case 25:
944  coerceValue(myConsolidateSnappedPoints, ( ( value ) ));
945  break;
946  case 26:
947  coerceValue(myKeepConsolidatedPoints, ( ( value ) ));
948  break;
949  case 27:
950  coerceValue(myDelDegen, ( ( value ) ));
951  break;
952  case 28:
953  coerceValue(myDelDegenPoints, ( ( value ) ));
954  break;
955  case 29:
956  coerceValue(myDelUnusedPoints, ( ( value ) ));
957  break;
958  case 30:
959  coerceValue(myRecomputenml, ( ( value ) ));
960  break;
961  case 31:
962  coerceValue(myCreatesnappedgroup, ( ( value ) ));
963  break;
964  case 32:
965  coerceValue(mySnappedgroupname, ( ( value ) ));
966  break;
967  case 33:
968  coerceValue(myCreatesnappedattrib, ( ( value ) ));
969  break;
970  case 34:
971  coerceValue(mySnappedattribname, ( ( value ) ));
972  break;
973  case 35:
974  if (idx.size() == 1)
975  {
976  exint newsize;
977  coerceValue(newsize, value);
978  if (newsize < 0) newsize = 0;
979  myNumpointattribs.setSize(newsize);
980  }
981  else
982  {
983  if (instance[0] < 0)
984  return;
985  myNumpointattribs.setSizeIfNeeded(instance[0]+1);
986  auto && _data = myNumpointattribs(instance[0]);
987  switch (idx[1])
988  {
989  case 0:
990  coerceValue(_data.attribsnapmethod, value);
991  break;
992  case 1:
993  coerceValue(_data.pointattribnames, value);
994  break;
995  case 2:
996  coerceValue(_data.pointattribweightname, value);
997  break;
998 
999  }
1000  }
1001  break;
1002  case 36:
1003  if (idx.size() == 1)
1004  {
1005  exint newsize;
1006  coerceValue(newsize, value);
1007  if (newsize < 0) newsize = 0;
1008  myNumgroups.setSize(newsize);
1009  }
1010  else
1011  {
1012  if (instance[0] < 0)
1013  return;
1014  myNumgroups.setSizeIfNeeded(instance[0]+1);
1015  auto && _data = myNumgroups(instance[0]);
1016  switch (idx[1])
1017  {
1018  case 0:
1019  coerceValue(_data.grouppropagation, value);
1020  break;
1021  case 1:
1022  coerceValue(_data.pointgroupnames, value);
1023  break;
1024 
1025  }
1026  }
1027  break;
1028  case 37:
1029  coerceValue(myUsetargetgroup, ( ( value ) ));
1030  break;
1031  case 38:
1032  coerceValue(myTargetgroup, ( ( value ) ));
1033  break;
1034  case 39:
1035  coerceValue(myModifyboth, ( ( value ) ));
1036  break;
1037 
1038  }
1039  }
1040 
1041  void setNestParmValue(TempIndex idx, TempIndex instance, const exint &value) override
1042  { doSetParmValue(idx, instance, value); }
1043  void setNestParmValue(TempIndex idx, TempIndex instance, const fpreal &value) override
1044  { doSetParmValue(idx, instance, value); }
1045  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector2D &value) override
1046  { doSetParmValue(idx, instance, value); }
1047  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector3D &value) override
1048  { doSetParmValue(idx, instance, value); }
1049  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector4D &value) override
1050  { doSetParmValue(idx, instance, value); }
1051  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix2D &value) override
1052  { doSetParmValue(idx, instance, value); }
1053  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix3D &value) override
1054  { doSetParmValue(idx, instance, value); }
1055  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix4D &value) override
1056  { doSetParmValue(idx, instance, value); }
1057  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_StringHolder &value) override
1058  { doSetParmValue(idx, instance, value); }
1059  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_SharedPtr<UT_Ramp> &value) override
1060  { doSetParmValue(idx, instance, value); }
1061  void setNestParmValue(TempIndex idx, TempIndex instance, const PRM_DataItemHandle &value) override
1062  { doSetParmValue(idx, instance, value); }
1063 
1064  exint getNestNumParms(TempIndex idx) const override
1065  {
1066  if (idx.size() == 0)
1067  return 40;
1068  switch (idx[0])
1069  {
1070  case 35:
1071  return 3;
1072  case 36:
1073  return 2;
1074 
1075  }
1076  // Invalid
1077  return 0;
1078  }
1079 
1080  const char *getNestParmName(TempIndex fieldnum) const override
1081  {
1082  if (fieldnum.size() < 1)
1083  return 0;
1084  switch (fieldnum[0])
1085  {
1086  case 0:
1087  return "querygroup";
1088  case 1:
1089  return "posattrib";
1090  case 2:
1091  return "snaptype";
1092  case 3:
1093  return "algorithm";
1094  case 4:
1095  return "usetol3d";
1096  case 5:
1097  return "tol3d";
1098  case 6:
1099  return "targetptattrib";
1100  case 7:
1101  return "targetclass";
1102  case 8:
1103  return "usepositionsnapmethod";
1104  case 9:
1105  return "positionsnapmethod";
1106  case 10:
1107  return "positionsnapweightname";
1108  case 11:
1109  return "useradiusattrib";
1110  case 12:
1111  return "radiusattrib";
1112  case 13:
1113  return "usematchattrib";
1114  case 14:
1115  return "matchattrib";
1116  case 15:
1117  return "matchtype";
1118  case 16:
1119  return "matchtol";
1120  case 17:
1121  return "gridtype";
1122  case 18:
1123  return "gridspacing";
1124  case 19:
1125  return "gridlines";
1126  case 20:
1127  return "gridpow2";
1128  case 21:
1129  return "gridoffset";
1130  case 22:
1131  return "gridround";
1132  case 23:
1133  return "usegridtol";
1134  case 24:
1135  return "gridtol";
1136  case 25:
1137  return "consolidatesnappedpoints";
1138  case 26:
1139  return "keepconsolidatedpoints";
1140  case 27:
1141  return "deldegen";
1142  case 28:
1143  return "deldegenpoints";
1144  case 29:
1145  return "delunusedpoints";
1146  case 30:
1147  return "recomputenml";
1148  case 31:
1149  return "createsnappedgroup";
1150  case 32:
1151  return "snappedgroupname";
1152  case 33:
1153  return "createsnappedattrib";
1154  case 34:
1155  return "snappedattribname";
1156  case 35:
1157  if (fieldnum.size() == 1)
1158  return "numpointattribs";
1159  switch (fieldnum[1])
1160  {
1161  case 0:
1162  return "attribsnapmethod#";
1163  case 1:
1164  return "pointattribnames#";
1165  case 2:
1166  return "pointattribweightname#";
1167 
1168  }
1169  return 0;
1170  case 36:
1171  if (fieldnum.size() == 1)
1172  return "numgroups";
1173  switch (fieldnum[1])
1174  {
1175  case 0:
1176  return "grouppropagation#";
1177  case 1:
1178  return "pointgroupnames#";
1179 
1180  }
1181  return 0;
1182  case 37:
1183  return "usetargetgroup";
1184  case 38:
1185  return "targetgroup";
1186  case 39:
1187  return "modifyboth";
1188 
1189  }
1190  return 0;
1191  }
1192 
1193  ParmType getNestParmType(TempIndex fieldnum) const override
1194  {
1195  if (fieldnum.size() < 1)
1196  return PARM_UNSUPPORTED;
1197  switch (fieldnum[0])
1198  {
1199  case 0:
1200  return PARM_STRING;
1201  case 1:
1202  return PARM_STRING;
1203  case 2:
1204  return PARM_INTEGER;
1205  case 3:
1206  return PARM_INTEGER;
1207  case 4:
1208  return PARM_INTEGER;
1209  case 5:
1210  return PARM_FLOAT;
1211  case 6:
1212  return PARM_STRING;
1213  case 7:
1214  return PARM_INTEGER;
1215  case 8:
1216  return PARM_INTEGER;
1217  case 9:
1218  return PARM_INTEGER;
1219  case 10:
1220  return PARM_STRING;
1221  case 11:
1222  return PARM_INTEGER;
1223  case 12:
1224  return PARM_STRING;
1225  case 13:
1226  return PARM_INTEGER;
1227  case 14:
1228  return PARM_STRING;
1229  case 15:
1230  return PARM_INTEGER;
1231  case 16:
1232  return PARM_FLOAT;
1233  case 17:
1234  return PARM_INTEGER;
1235  case 18:
1236  return PARM_VECTOR3;
1237  case 19:
1238  return PARM_VECTOR3;
1239  case 20:
1240  return PARM_VECTOR3;
1241  case 21:
1242  return PARM_VECTOR3;
1243  case 22:
1244  return PARM_INTEGER;
1245  case 23:
1246  return PARM_INTEGER;
1247  case 24:
1248  return PARM_FLOAT;
1249  case 25:
1250  return PARM_INTEGER;
1251  case 26:
1252  return PARM_INTEGER;
1253  case 27:
1254  return PARM_INTEGER;
1255  case 28:
1256  return PARM_INTEGER;
1257  case 29:
1258  return PARM_INTEGER;
1259  case 30:
1260  return PARM_INTEGER;
1261  case 31:
1262  return PARM_INTEGER;
1263  case 32:
1264  return PARM_STRING;
1265  case 33:
1266  return PARM_INTEGER;
1267  case 34:
1268  return PARM_STRING;
1269  case 35:
1270  if (fieldnum.size() == 1)
1271  return PARM_MULTIPARM;
1272  switch (fieldnum[1])
1273  {
1274  case 0:
1275  return PARM_INTEGER;
1276  case 1:
1277  return PARM_STRING;
1278  case 2:
1279  return PARM_STRING;
1280 
1281  }
1282  return PARM_UNSUPPORTED;
1283  case 36:
1284  if (fieldnum.size() == 1)
1285  return PARM_MULTIPARM;
1286  switch (fieldnum[1])
1287  {
1288  case 0:
1289  return PARM_INTEGER;
1290  case 1:
1291  return PARM_STRING;
1292 
1293  }
1294  return PARM_UNSUPPORTED;
1295  case 37:
1296  return PARM_INTEGER;
1297  case 38:
1298  return PARM_STRING;
1299  case 39:
1300  return PARM_INTEGER;
1301 
1302  }
1303  return PARM_UNSUPPORTED;
1304  }
1305 
1306  // Boiler plate to load individual types.
1307  static void loadData(UT_IStream &is, int64 &v)
1308  { is.bread(&v, 1); }
1309  static void loadData(UT_IStream &is, bool &v)
1310  { int64 iv; is.bread(&iv, 1); v = iv; }
1311  static void loadData(UT_IStream &is, fpreal64 &v)
1312  { is.bread<fpreal64>(&v, 1); }
1313  static void loadData(UT_IStream &is, UT_Vector2D &v)
1314  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1); }
1315  static void loadData(UT_IStream &is, UT_Vector3D &v)
1316  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
1317  is.bread<fpreal64>(&v.z(), 1); }
1318  static void loadData(UT_IStream &is, UT_Vector4D &v)
1319  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
1320  is.bread<fpreal64>(&v.z(), 1); is.bread<fpreal64>(&v.w(), 1); }
1321  static void loadData(UT_IStream &is, UT_Matrix2D &v)
1322  { for (int r = 0; r < 2; r++) for (int c = 0; c < 2; c++) is.bread<fpreal64>(&v(r, c), 1); }
1323  static void loadData(UT_IStream &is, UT_Matrix3D &v)
1324  { for (int r = 0; r < 3; r++) for (int c = 0; c < 3; c++) is.bread<fpreal64>(&v(r, c), 1); }
1325  static void loadData(UT_IStream &is, UT_Matrix4D &v)
1326  { for (int r = 0; r < 4; r++) for (int c = 0; c < 4; c++) is.bread<fpreal64>(&v(r, c), 1); }
1327  static void loadData(UT_IStream &is, UT_Vector2I &v)
1328  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1); }
1329  static void loadData(UT_IStream &is, UT_Vector3I &v)
1330  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
1331  is.bread<int64>(&v.z(), 1); }
1332  static void loadData(UT_IStream &is, UT_Vector4I &v)
1333  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
1334  is.bread<int64>(&v.z(), 1); is.bread<int64>(&v.w(), 1); }
1336  { is.bread(v); }
1338  { UT_StringHolder rampdata;
1339  loadData(is, rampdata);
1340  if (rampdata.isstring())
1341  {
1342  v.reset(new UT_Ramp());
1343  UT_IStream istr((const char *) rampdata, rampdata.length(), UT_ISTREAM_ASCII);
1344  v->load(istr);
1345  }
1346  else v.reset();
1347  }
1350  loadData(is, data);
1351  if (data.isstring())
1352  {
1353  // Find the data type.
1354  const char *colon = UT_StringWrap(data).findChar(':');
1355  if (colon)
1356  {
1357  int typelen = colon - data.buffer();
1359  type.strncpy(data.buffer(), typelen);
1360  UT_IStream istr(((const char *) data) + typelen + 1, data.length() - (typelen + 1), UT_ISTREAM_BINARY);
1361 
1362  v = PRM_DataFactory::parseBinary(type.buffer(), istr);
1363  }
1364  }
1365  else v.reset();
1366  }
1367 
1368  static void saveData(std::ostream &os, int64 v)
1369  { UTwrite(os, &v); }
1370  static void saveData(std::ostream &os, bool v)
1371  { int64 iv = v; UTwrite(os, &iv); }
1372  static void saveData(std::ostream &os, fpreal64 v)
1373  { UTwrite<fpreal64>(os, &v); }
1374  static void saveData(std::ostream &os, UT_Vector2D v)
1375  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y()); }
1376  static void saveData(std::ostream &os, UT_Vector3D v)
1377  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
1378  UTwrite<fpreal64>(os, &v.z()); }
1379  static void saveData(std::ostream &os, UT_Vector4D v)
1380  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
1381  UTwrite<fpreal64>(os, &v.z()); UTwrite<fpreal64>(os, &v.w()); }
1382  static void saveData(std::ostream &os, UT_Matrix2D v)
1384  static void saveData(std::ostream &os, UT_Matrix3D v)
1386  static void saveData(std::ostream &os, UT_Matrix4D v)
1388  static void saveData(std::ostream &os, UT_StringHolder s)
1389  { UT_StringWrap(s).saveBinary(os); }
1390  static void saveData(std::ostream &os, UT_SharedPtr<UT_Ramp> s)
1392  UT_OStringStream ostr;
1393  if (s) s->save(ostr);
1394  result = ostr.str();
1395  saveData(os, result);
1396  }
1397  static void saveData(std::ostream &os, PRM_DataItemHandle s)
1399  UT_OStringStream ostr;
1400  if (s)
1401  {
1402  ostr << s->getDataTypeToken();
1403  ostr << ":";
1404  s->saveBinary(ostr);
1405  }
1406  result = ostr.str();
1407  saveData(os, result);
1408  }
1409 
1410 
1411  void save(std::ostream &os) const
1412  {
1413  int32 v = version();
1414  UTwrite(os, &v);
1415  saveData(os, myQuerygroup);
1416  saveData(os, myPosAttrib);
1417  saveData(os, mySnaptype);
1418  saveData(os, myAlgorithm);
1419  saveData(os, myUseTol3D);
1420  saveData(os, myTol3d);
1421  saveData(os, myTargetPtAttrib);
1422  saveData(os, myTargetClass);
1423  saveData(os, myUsePositionSnapMethod);
1424  saveData(os, myPositionSnapMethod);
1425  saveData(os, myPositionSnapWeightName);
1426  saveData(os, myUseradiusattrib);
1427  saveData(os, myRadiusattrib);
1428  saveData(os, myUsematchattrib);
1429  saveData(os, myMatchattrib);
1430  saveData(os, myMatchtype);
1431  saveData(os, myMatchTol);
1432  saveData(os, myGridtype);
1433  saveData(os, myGridspacing);
1434  saveData(os, myGridlines);
1435  saveData(os, myGridpow2);
1436  saveData(os, myGridoffset);
1437  saveData(os, myGridround);
1438  saveData(os, myUseGridTol);
1439  saveData(os, myGridtol);
1440  saveData(os, myConsolidateSnappedPoints);
1441  saveData(os, myKeepConsolidatedPoints);
1442  saveData(os, myDelDegen);
1443  saveData(os, myDelDegenPoints);
1444  saveData(os, myDelUnusedPoints);
1445  saveData(os, myRecomputenml);
1446  saveData(os, myCreatesnappedgroup);
1447  saveData(os, mySnappedgroupname);
1448  saveData(os, myCreatesnappedattrib);
1449  saveData(os, mySnappedattribname);
1450  {
1451  int64 length = myNumpointattribs.entries();
1452  UTwrite(os, &length);
1453  for (exint i = 0; i < length; i++)
1454  {
1455  auto && _curentry = myNumpointattribs(i);
1456  (void) _curentry;
1457  saveData(os, _curentry.attribsnapmethod);
1458  saveData(os, _curentry.pointattribnames);
1459  saveData(os, _curentry.pointattribweightname);
1460 
1461  }
1462  }
1463  {
1464  int64 length = myNumgroups.entries();
1465  UTwrite(os, &length);
1466  for (exint i = 0; i < length; i++)
1467  {
1468  auto && _curentry = myNumgroups(i);
1469  (void) _curentry;
1470  saveData(os, _curentry.grouppropagation);
1471  saveData(os, _curentry.pointgroupnames);
1472 
1473  }
1474  }
1475  saveData(os, myUsetargetgroup);
1476  saveData(os, myTargetgroup);
1477  saveData(os, myModifyboth);
1478 
1479  }
1480 
1481  bool load(UT_IStream &is)
1482  {
1483  int32 v;
1484  is.bread(&v, 1);
1485  if (version() != v)
1486  {
1487  // Fail incompatible versions
1488  return false;
1489  }
1490  loadData(is, myQuerygroup);
1491  loadData(is, myPosAttrib);
1492  loadData(is, mySnaptype);
1493  loadData(is, myAlgorithm);
1494  loadData(is, myUseTol3D);
1495  loadData(is, myTol3d);
1496  loadData(is, myTargetPtAttrib);
1497  loadData(is, myTargetClass);
1498  loadData(is, myUsePositionSnapMethod);
1499  loadData(is, myPositionSnapMethod);
1500  loadData(is, myPositionSnapWeightName);
1501  loadData(is, myUseradiusattrib);
1502  loadData(is, myRadiusattrib);
1503  loadData(is, myUsematchattrib);
1504  loadData(is, myMatchattrib);
1505  loadData(is, myMatchtype);
1506  loadData(is, myMatchTol);
1507  loadData(is, myGridtype);
1508  loadData(is, myGridspacing);
1509  loadData(is, myGridlines);
1510  loadData(is, myGridpow2);
1511  loadData(is, myGridoffset);
1512  loadData(is, myGridround);
1513  loadData(is, myUseGridTol);
1514  loadData(is, myGridtol);
1515  loadData(is, myConsolidateSnappedPoints);
1516  loadData(is, myKeepConsolidatedPoints);
1517  loadData(is, myDelDegen);
1518  loadData(is, myDelDegenPoints);
1519  loadData(is, myDelUnusedPoints);
1520  loadData(is, myRecomputenml);
1521  loadData(is, myCreatesnappedgroup);
1522  loadData(is, mySnappedgroupname);
1523  loadData(is, myCreatesnappedattrib);
1524  loadData(is, mySnappedattribname);
1525  {
1526  int64 length;
1527  is.read(&length, 1);
1528  myNumpointattribs.setSize(length);
1529  for (exint i = 0; i < length; i++)
1530  {
1531  auto && _curentry = myNumpointattribs(i);
1532  (void) _curentry;
1533  loadData(is, _curentry.attribsnapmethod);
1534  loadData(is, _curentry.pointattribnames);
1535  loadData(is, _curentry.pointattribweightname);
1536 
1537  }
1538  }
1539  {
1540  int64 length;
1541  is.read(&length, 1);
1542  myNumgroups.setSize(length);
1543  for (exint i = 0; i < length; i++)
1544  {
1545  auto && _curentry = myNumgroups(i);
1546  (void) _curentry;
1547  loadData(is, _curentry.grouppropagation);
1548  loadData(is, _curentry.pointgroupnames);
1549 
1550  }
1551  }
1552  loadData(is, myUsetargetgroup);
1553  loadData(is, myTargetgroup);
1554  loadData(is, myModifyboth);
1555 
1556  return true;
1557  }
1558 
1559  const UT_StringHolder & getQuerygroup() const { return myQuerygroup; }
1560  void setQuerygroup(const UT_StringHolder & val) { myQuerygroup = val; }
1562  {
1563  SOP_Node *thissop = cookparms.getNode();
1564  if (!thissop) return getQuerygroup();
1566  OP_Utils::evalOpParm(result, thissop, "querygroup", cookparms.getCookTime(), 0);
1567  return result;
1568  }
1569  const UT_StringHolder & getPosAttrib() const { return myPosAttrib; }
1570  void setPosAttrib(const UT_StringHolder & val) { myPosAttrib = val; }
1572  {
1573  SOP_Node *thissop = cookparms.getNode();
1574  if (!thissop) return getPosAttrib();
1576  OP_Utils::evalOpParm(result, thissop, "posattrib", cookparms.getCookTime(), 0);
1577  return result;
1578  }
1579  Snaptype getSnaptype() const { return Snaptype(mySnaptype); }
1580  void setSnaptype(Snaptype val) { mySnaptype = int64(val); }
1582  {
1583  SOP_Node *thissop = cookparms.getNode();
1584  if (!thissop) return getSnaptype();
1585  int64 result;
1586  OP_Utils::evalOpParm(result, thissop, "snaptype", cookparms.getCookTime(), 0);
1587  return Snaptype(result);
1588  }
1589  Algorithm getAlgorithm() const { return Algorithm(myAlgorithm); }
1590  void setAlgorithm(Algorithm val) { myAlgorithm = int64(val); }
1592  {
1593  SOP_Node *thissop = cookparms.getNode();
1594  if (!thissop) return getAlgorithm();
1595  int64 result;
1596  OP_Utils::evalOpParm(result, thissop, "algorithm", cookparms.getCookTime(), 0);
1597  return Algorithm(result);
1598  }
1599  bool getUseTol3D() const { return myUseTol3D; }
1600  void setUseTol3D(bool val) { myUseTol3D = val; }
1601  bool opUseTol3D(const SOP_NodeVerb::CookParms &cookparms) const
1602  {
1603  SOP_Node *thissop = cookparms.getNode();
1604  if (!thissop) return getUseTol3D();
1605  bool result;
1606  OP_Utils::evalOpParm(result, thissop, "usetol3d", cookparms.getCookTime(), 0);
1607  return result;
1608  }
1609  fpreal64 getTol3d() const { return myTol3d; }
1610  void setTol3d(fpreal64 val) { myTol3d = val; }
1611  fpreal64 opTol3d(const SOP_NodeVerb::CookParms &cookparms) const
1612  {
1613  SOP_Node *thissop = cookparms.getNode();
1614  if (!thissop) return getTol3d();
1615  fpreal64 result;
1616  OP_Utils::evalOpParm(result, thissop, "tol3d", cookparms.getCookTime(), 0);
1617  return result;
1618  }
1619  const UT_StringHolder & getTargetPtAttrib() const { return myTargetPtAttrib; }
1620  void setTargetPtAttrib(const UT_StringHolder & val) { myTargetPtAttrib = val; }
1622  {
1623  SOP_Node *thissop = cookparms.getNode();
1624  if (!thissop) return getTargetPtAttrib();
1626  OP_Utils::evalOpParm(result, thissop, "targetptattrib", cookparms.getCookTime(), 0);
1627  return result;
1628  }
1629  TargetClass getTargetClass() const { return TargetClass(myTargetClass); }
1630  void setTargetClass(TargetClass val) { myTargetClass = int64(val); }
1632  {
1633  SOP_Node *thissop = cookparms.getNode();
1634  if (!thissop) return getTargetClass();
1635  int64 result;
1636  OP_Utils::evalOpParm(result, thissop, "targetclass", cookparms.getCookTime(), 0);
1637  return TargetClass(result);
1638  }
1639  bool getUsePositionSnapMethod() const { return myUsePositionSnapMethod; }
1640  void setUsePositionSnapMethod(bool val) { myUsePositionSnapMethod = val; }
1642  {
1643  SOP_Node *thissop = cookparms.getNode();
1644  if (!thissop) return getUsePositionSnapMethod();
1645  bool result;
1646  OP_Utils::evalOpParm(result, thissop, "usepositionsnapmethod", cookparms.getCookTime(), 0);
1647  return result;
1648  }
1649  PositionSnapMethod getPositionSnapMethod() const { return PositionSnapMethod(myPositionSnapMethod); }
1650  void setPositionSnapMethod(PositionSnapMethod val) { myPositionSnapMethod = int64(val); }
1652  {
1653  SOP_Node *thissop = cookparms.getNode();
1654  if (!thissop) return getPositionSnapMethod();
1655  int64 result;
1656  OP_Utils::evalOpParm(result, thissop, "positionsnapmethod", cookparms.getCookTime(), 0);
1657  return PositionSnapMethod(result);
1658  }
1659  const UT_StringHolder & getPositionSnapWeightName() const { return myPositionSnapWeightName; }
1660  void setPositionSnapWeightName(const UT_StringHolder & val) { myPositionSnapWeightName = val; }
1662  {
1663  SOP_Node *thissop = cookparms.getNode();
1664  if (!thissop) return getPositionSnapWeightName();
1666  OP_Utils::evalOpParm(result, thissop, "positionsnapweightname", cookparms.getCookTime(), 0);
1667  return result;
1668  }
1669  bool getUseradiusattrib() const { return myUseradiusattrib; }
1670  void setUseradiusattrib(bool val) { myUseradiusattrib = val; }
1671  bool opUseradiusattrib(const SOP_NodeVerb::CookParms &cookparms) const
1672  {
1673  SOP_Node *thissop = cookparms.getNode();
1674  if (!thissop) return getUseradiusattrib();
1675  bool result;
1676  OP_Utils::evalOpParm(result, thissop, "useradiusattrib", cookparms.getCookTime(), 0);
1677  return result;
1678  }
1679  const UT_StringHolder & getRadiusattrib() const { return myRadiusattrib; }
1680  void setRadiusattrib(const UT_StringHolder & val) { myRadiusattrib = val; }
1682  {
1683  SOP_Node *thissop = cookparms.getNode();
1684  if (!thissop) return getRadiusattrib();
1686  OP_Utils::evalOpParm(result, thissop, "radiusattrib", cookparms.getCookTime(), 0);
1687  return result;
1688  }
1689  bool getUsematchattrib() const { return myUsematchattrib; }
1690  void setUsematchattrib(bool val) { myUsematchattrib = val; }
1691  bool opUsematchattrib(const SOP_NodeVerb::CookParms &cookparms) const
1692  {
1693  SOP_Node *thissop = cookparms.getNode();
1694  if (!thissop) return getUsematchattrib();
1695  bool result;
1696  OP_Utils::evalOpParm(result, thissop, "usematchattrib", cookparms.getCookTime(), 0);
1697  return result;
1698  }
1699  const UT_StringHolder & getMatchattrib() const { return myMatchattrib; }
1700  void setMatchattrib(const UT_StringHolder & val) { myMatchattrib = val; }
1702  {
1703  SOP_Node *thissop = cookparms.getNode();
1704  if (!thissop) return getMatchattrib();
1706  OP_Utils::evalOpParm(result, thissop, "matchattrib", cookparms.getCookTime(), 0);
1707  return result;
1708  }
1709  Matchtype getMatchtype() const { return Matchtype(myMatchtype); }
1710  void setMatchtype(Matchtype val) { myMatchtype = int64(val); }
1712  {
1713  SOP_Node *thissop = cookparms.getNode();
1714  if (!thissop) return getMatchtype();
1715  int64 result;
1716  OP_Utils::evalOpParm(result, thissop, "matchtype", cookparms.getCookTime(), 0);
1717  return Matchtype(result);
1718  }
1719  fpreal64 getMatchTol() const { return myMatchTol; }
1720  void setMatchTol(fpreal64 val) { myMatchTol = val; }
1722  {
1723  SOP_Node *thissop = cookparms.getNode();
1724  if (!thissop) return getMatchTol();
1725  fpreal64 result;
1726  OP_Utils::evalOpParm(result, thissop, "matchtol", cookparms.getCookTime(), 0);
1727  return result;
1728  }
1729  Gridtype getGridtype() const { return Gridtype(myGridtype); }
1730  void setGridtype(Gridtype val) { myGridtype = int64(val); }
1732  {
1733  SOP_Node *thissop = cookparms.getNode();
1734  if (!thissop) return getGridtype();
1735  int64 result;
1736  OP_Utils::evalOpParm(result, thissop, "gridtype", cookparms.getCookTime(), 0);
1737  return Gridtype(result);
1738  }
1739  UT_Vector3D getGridspacing() const { return myGridspacing; }
1740  void setGridspacing(UT_Vector3D val) { myGridspacing = val; }
1742  {
1743  SOP_Node *thissop = cookparms.getNode();
1744  if (!thissop) return getGridspacing();
1746  OP_Utils::evalOpParm(result, thissop, "gridspacing", cookparms.getCookTime(), 0);
1747  return result;
1748  }
1749  UT_Vector3D getGridlines() const { return myGridlines; }
1750  void setGridlines(UT_Vector3D val) { myGridlines = val; }
1752  {
1753  SOP_Node *thissop = cookparms.getNode();
1754  if (!thissop) return getGridlines();
1756  OP_Utils::evalOpParm(result, thissop, "gridlines", cookparms.getCookTime(), 0);
1757  return result;
1758  }
1759  UT_Vector3I getGridpow2() const { return myGridpow2; }
1760  void setGridpow2(UT_Vector3I val) { myGridpow2 = val; }
1762  {
1763  SOP_Node *thissop = cookparms.getNode();
1764  if (!thissop) return getGridpow2();
1766  OP_Utils::evalOpParm(result, thissop, "gridpow2", cookparms.getCookTime(), 0);
1767  return result;
1768  }
1769  UT_Vector3D getGridoffset() const { return myGridoffset; }
1770  void setGridoffset(UT_Vector3D val) { myGridoffset = val; }
1772  {
1773  SOP_Node *thissop = cookparms.getNode();
1774  if (!thissop) return getGridoffset();
1776  OP_Utils::evalOpParm(result, thissop, "gridoffset", cookparms.getCookTime(), 0);
1777  return result;
1778  }
1779  Gridround getGridround() const { return Gridround(myGridround); }
1780  void setGridround(Gridround val) { myGridround = int64(val); }
1782  {
1783  SOP_Node *thissop = cookparms.getNode();
1784  if (!thissop) return getGridround();
1785  int64 result;
1786  OP_Utils::evalOpParm(result, thissop, "gridround", cookparms.getCookTime(), 0);
1787  return Gridround(result);
1788  }
1789  bool getUseGridTol() const { return myUseGridTol; }
1790  void setUseGridTol(bool val) { myUseGridTol = val; }
1791  bool opUseGridTol(const SOP_NodeVerb::CookParms &cookparms) const
1792  {
1793  SOP_Node *thissop = cookparms.getNode();
1794  if (!thissop) return getUseGridTol();
1795  bool result;
1796  OP_Utils::evalOpParm(result, thissop, "usegridtol", cookparms.getCookTime(), 0);
1797  return result;
1798  }
1799  fpreal64 getGridtol() const { return myGridtol; }
1800  void setGridtol(fpreal64 val) { myGridtol = val; }
1802  {
1803  SOP_Node *thissop = cookparms.getNode();
1804  if (!thissop) return getGridtol();
1805  fpreal64 result;
1806  OP_Utils::evalOpParm(result, thissop, "gridtol", cookparms.getCookTime(), 0);
1807  return result;
1808  }
1809  bool getConsolidateSnappedPoints() const { return myConsolidateSnappedPoints; }
1810  void setConsolidateSnappedPoints(bool val) { myConsolidateSnappedPoints = val; }
1812  {
1813  SOP_Node *thissop = cookparms.getNode();
1814  if (!thissop) return getConsolidateSnappedPoints();
1815  bool result;
1816  OP_Utils::evalOpParm(result, thissop, "consolidatesnappedpoints", cookparms.getCookTime(), 0);
1817  return result;
1818  }
1819  bool getKeepConsolidatedPoints() const { return myKeepConsolidatedPoints; }
1820  void setKeepConsolidatedPoints(bool val) { myKeepConsolidatedPoints = val; }
1822  {
1823  SOP_Node *thissop = cookparms.getNode();
1824  if (!thissop) return getKeepConsolidatedPoints();
1825  bool result;
1826  OP_Utils::evalOpParm(result, thissop, "keepconsolidatedpoints", cookparms.getCookTime(), 0);
1827  return result;
1828  }
1829  bool getDelDegen() const { return myDelDegen; }
1830  void setDelDegen(bool val) { myDelDegen = val; }
1831  bool opDelDegen(const SOP_NodeVerb::CookParms &cookparms) const
1832  {
1833  SOP_Node *thissop = cookparms.getNode();
1834  if (!thissop) return getDelDegen();
1835  bool result;
1836  OP_Utils::evalOpParm(result, thissop, "deldegen", cookparms.getCookTime(), 0);
1837  return result;
1838  }
1839  bool getDelDegenPoints() const { return myDelDegenPoints; }
1840  void setDelDegenPoints(bool val) { myDelDegenPoints = val; }
1841  bool opDelDegenPoints(const SOP_NodeVerb::CookParms &cookparms) const
1842  {
1843  SOP_Node *thissop = cookparms.getNode();
1844  if (!thissop) return getDelDegenPoints();
1845  bool result;
1846  OP_Utils::evalOpParm(result, thissop, "deldegenpoints", cookparms.getCookTime(), 0);
1847  return result;
1848  }
1849  bool getDelUnusedPoints() const { return myDelUnusedPoints; }
1850  void setDelUnusedPoints(bool val) { myDelUnusedPoints = val; }
1851  bool opDelUnusedPoints(const SOP_NodeVerb::CookParms &cookparms) const
1852  {
1853  SOP_Node *thissop = cookparms.getNode();
1854  if (!thissop) return getDelUnusedPoints();
1855  bool result;
1856  OP_Utils::evalOpParm(result, thissop, "delunusedpoints", cookparms.getCookTime(), 0);
1857  return result;
1858  }
1859  bool getRecomputenml() const { return myRecomputenml; }
1860  void setRecomputenml(bool val) { myRecomputenml = val; }
1861  bool opRecomputenml(const SOP_NodeVerb::CookParms &cookparms) const
1862  {
1863  SOP_Node *thissop = cookparms.getNode();
1864  if (!thissop) return getRecomputenml();
1865  bool result;
1866  OP_Utils::evalOpParm(result, thissop, "recomputenml", cookparms.getCookTime(), 0);
1867  return result;
1868  }
1869  bool getCreatesnappedgroup() const { return myCreatesnappedgroup; }
1870  void setCreatesnappedgroup(bool val) { myCreatesnappedgroup = val; }
1871  bool opCreatesnappedgroup(const SOP_NodeVerb::CookParms &cookparms) const
1872  {
1873  SOP_Node *thissop = cookparms.getNode();
1874  if (!thissop) return getCreatesnappedgroup();
1875  bool result;
1876  OP_Utils::evalOpParm(result, thissop, "createsnappedgroup", cookparms.getCookTime(), 0);
1877  return result;
1878  }
1879  const UT_StringHolder & getSnappedgroupname() const { return mySnappedgroupname; }
1880  void setSnappedgroupname(const UT_StringHolder & val) { mySnappedgroupname = val; }
1882  {
1883  SOP_Node *thissop = cookparms.getNode();
1884  if (!thissop) return getSnappedgroupname();
1886  OP_Utils::evalOpParm(result, thissop, "snappedgroupname", cookparms.getCookTime(), 0);
1887  return result;
1888  }
1889  bool getCreatesnappedattrib() const { return myCreatesnappedattrib; }
1890  void setCreatesnappedattrib(bool val) { myCreatesnappedattrib = val; }
1891  bool opCreatesnappedattrib(const SOP_NodeVerb::CookParms &cookparms) const
1892  {
1893  SOP_Node *thissop = cookparms.getNode();
1894  if (!thissop) return getCreatesnappedattrib();
1895  bool result;
1896  OP_Utils::evalOpParm(result, thissop, "createsnappedattrib", cookparms.getCookTime(), 0);
1897  return result;
1898  }
1899  const UT_StringHolder & getSnappedattribname() const { return mySnappedattribname; }
1900  void setSnappedattribname(const UT_StringHolder & val) { mySnappedattribname = val; }
1902  {
1903  SOP_Node *thissop = cookparms.getNode();
1904  if (!thissop) return getSnappedattribname();
1906  OP_Utils::evalOpParm(result, thissop, "snappedattribname", cookparms.getCookTime(), 0);
1907  return result;
1908  }
1909  const UT_Array<Numpointattribs> &getNumpointattribs() const { return myNumpointattribs; }
1910 void setNumpointattribs(const UT_Array<Numpointattribs> &val) { myNumpointattribs = val; }
1912  {
1913  SOP_Node *thissop = cookparms.getNode();
1914  if (!thissop) return getNumpointattribs().entries();
1915  exint result;
1916  OP_Utils::evalOpParm(result, thissop, "numpointattribs", cookparms.getCookTime(), 0);
1917  return result;
1918  }
1920  { return opinstNumpointattribs_attribsnapmethod(cookparms, &_idx); }
1922  {
1923  SOP_Node *thissop = cookparms.getNode();
1924  if (!thissop) return (myNumpointattribs(_idx[0]).attribsnapmethod);
1925  int _parmidx[2-1];
1926  _parmidx[1-1] = _idx[1-1] + 1;
1927 
1928  int64 result;
1929  OP_Utils::evalOpParmInst(result, thissop, "attribsnapmethod#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1930  return (result);
1931  }
1933  { return opinstNumpointattribs_pointattribnames(cookparms, &_idx); }
1935  {
1936  SOP_Node *thissop = cookparms.getNode();
1937  if (!thissop) return (myNumpointattribs(_idx[0]).pointattribnames);
1938  int _parmidx[2-1];
1939  _parmidx[1-1] = _idx[1-1] + 1;
1940 
1942  OP_Utils::evalOpParmInst(result, thissop, "pointattribnames#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1943  return (result);
1944  }
1946  { return opinstNumpointattribs_pointattribweightname(cookparms, &_idx); }
1948  {
1949  SOP_Node *thissop = cookparms.getNode();
1950  if (!thissop) return (myNumpointattribs(_idx[0]).pointattribweightname);
1951  int _parmidx[2-1];
1952  _parmidx[1-1] = _idx[1-1] + 1;
1953 
1955  OP_Utils::evalOpParmInst(result, thissop, "pointattribweightname#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1956  return (result);
1957  }
1958 
1959  const UT_Array<Numgroups> &getNumgroups() const { return myNumgroups; }
1960 void setNumgroups(const UT_Array<Numgroups> &val) { myNumgroups = val; }
1962  {
1963  SOP_Node *thissop = cookparms.getNode();
1964  if (!thissop) return getNumgroups().entries();
1965  exint result;
1966  OP_Utils::evalOpParm(result, thissop, "numgroups", cookparms.getCookTime(), 0);
1967  return result;
1968  }
1970  { return opinstNumgroups_grouppropagation(cookparms, &_idx); }
1971  int64 opinstNumgroups_grouppropagation(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1972  {
1973  SOP_Node *thissop = cookparms.getNode();
1974  if (!thissop) return (myNumgroups(_idx[0]).grouppropagation);
1975  int _parmidx[2-1];
1976  _parmidx[1-1] = _idx[1-1] + 1;
1977 
1978  int64 result;
1979  OP_Utils::evalOpParmInst(result, thissop, "grouppropagation#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1980  return (result);
1981  }
1983  { return opinstNumgroups_pointgroupnames(cookparms, &_idx); }
1985  {
1986  SOP_Node *thissop = cookparms.getNode();
1987  if (!thissop) return (myNumgroups(_idx[0]).pointgroupnames);
1988  int _parmidx[2-1];
1989  _parmidx[1-1] = _idx[1-1] + 1;
1990 
1992  OP_Utils::evalOpParmInst(result, thissop, "pointgroupnames#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1993  return (result);
1994  }
1995 
1996  bool getUsetargetgroup() const { return myUsetargetgroup; }
1997  void setUsetargetgroup(bool val) { myUsetargetgroup = val; }
1998  bool opUsetargetgroup(const SOP_NodeVerb::CookParms &cookparms) const
1999  {
2000  SOP_Node *thissop = cookparms.getNode();
2001  if (!thissop) return getUsetargetgroup();
2002  bool result;
2003  OP_Utils::evalOpParm(result, thissop, "usetargetgroup", cookparms.getCookTime(), 0);
2004  return result;
2005  }
2006  const UT_StringHolder & getTargetgroup() const { return myTargetgroup; }
2007  void setTargetgroup(const UT_StringHolder & val) { myTargetgroup = val; }
2009  {
2010  SOP_Node *thissop = cookparms.getNode();
2011  if (!thissop) return getTargetgroup();
2013  OP_Utils::evalOpParm(result, thissop, "targetgroup", cookparms.getCookTime(), 0);
2014  return result;
2015  }
2016  bool getModifyboth() const { return myModifyboth; }
2017  void setModifyboth(bool val) { myModifyboth = val; }
2018  bool opModifyboth(const SOP_NodeVerb::CookParms &cookparms) const
2019  {
2020  SOP_Node *thissop = cookparms.getNode();
2021  if (!thissop) return getModifyboth();
2022  bool result;
2023  OP_Utils::evalOpParm(result, thissop, "modifyboth", cookparms.getCookTime(), 0);
2024  return result;
2025  }
2026 
2027 private:
2028  UT_StringHolder myQuerygroup;
2029  UT_StringHolder myPosAttrib;
2030  int64 mySnaptype;
2031  int64 myAlgorithm;
2032  bool myUseTol3D;
2033  fpreal64 myTol3d;
2034  UT_StringHolder myTargetPtAttrib;
2035  int64 myTargetClass;
2036  bool myUsePositionSnapMethod;
2037  int64 myPositionSnapMethod;
2038  UT_StringHolder myPositionSnapWeightName;
2039  bool myUseradiusattrib;
2040  UT_StringHolder myRadiusattrib;
2041  bool myUsematchattrib;
2042  UT_StringHolder myMatchattrib;
2043  int64 myMatchtype;
2044  fpreal64 myMatchTol;
2045  int64 myGridtype;
2046  UT_Vector3D myGridspacing;
2047  UT_Vector3D myGridlines;
2048  UT_Vector3I myGridpow2;
2049  UT_Vector3D myGridoffset;
2050  int64 myGridround;
2051  bool myUseGridTol;
2052  fpreal64 myGridtol;
2053  bool myConsolidateSnappedPoints;
2054  bool myKeepConsolidatedPoints;
2055  bool myDelDegen;
2056  bool myDelDegenPoints;
2057  bool myDelUnusedPoints;
2058  bool myRecomputenml;
2059  bool myCreatesnappedgroup;
2060  UT_StringHolder mySnappedgroupname;
2061  bool myCreatesnappedattrib;
2062  UT_StringHolder mySnappedattribname;
2063  UT_Array<Numpointattribs> myNumpointattribs;
2064  UT_Array<Numgroups> myNumgroups;
2065  bool myUsetargetgroup;
2066  UT_StringHolder myTargetgroup;
2067  bool myModifyboth;
2068 
2069 };
UT_StringHolder opNumpointattribs_pointattribnames(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
bool getUseTol3D() const
virtual NodeIdx getInput(NodeIdx idx, OP_InputIdx input, bool markused=false) const =0
void setCreatesnappedattrib(bool val)
type
Definition: core.h:556
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:63
GLsizei const GLfloat * value
Definition: glcorearb.h:824
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:622
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)
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
UT_SharedPtr< const PRM_DataItem > PRM_DataItemHandle
Definition: APEX_Include.h:55
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:303
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:655
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:278
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:96
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
virtual UT_StringHolder baseGetSignature() const
Definition: OP_NodeParms.h:294
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:372
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:1401
#define UT_ASSERT(ZZ)
Definition: UT_Assert.h:156
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
Matchtype getMatchtype() const
virtual bool isDirect() const =0
Direct proxies mirror actual nodes:
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
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)