HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
SOP_GroupCreate.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_GroupCreateEnums
24 {
25  enum class Grouptype
26  {
27  PRIMITIVE = 0,
28  POINT,
29  EDGE,
30  VERTEX
31  };
32 
34  getToken(Grouptype enum_value)
35  {
36  using namespace UT::Literal;
37  switch (enum_value) {
38  case Grouptype::PRIMITIVE: return "primitive"_sh;
39  case Grouptype::POINT: return "point"_sh;
40  case Grouptype::EDGE: return "edge"_sh;
41  case Grouptype::VERTEX: return "vertex"_sh;
42  default: UT_ASSERT(false); return ""_sh;
43  }
44  }
45 
46  enum class Mergeop
47  {
48  REPLACE = 0,
49  UNION,
50  INTERSECT,
51  SUBTRACT
52  };
53 
55  getToken(Mergeop enum_value)
56  {
57  using namespace UT::Literal;
58  switch (enum_value) {
59  case Mergeop::REPLACE: return "replace"_sh;
60  case Mergeop::UNION: return "union"_sh;
61  case Mergeop::INTERSECT: return "intersect"_sh;
62  case Mergeop::SUBTRACT: return "subtract"_sh;
63  default: UT_ASSERT(false); return ""_sh;
64  }
65  }
66 
67  enum class Boundtype
68  {
69  USEBBOX = 0,
70  USEBSPHERE,
71  USEBOBJECT,
72  USEBVOLUME,
74  };
75 
77  getToken(Boundtype enum_value)
78  {
79  using namespace UT::Literal;
80  switch (enum_value) {
81  case Boundtype::USEBBOX: return "usebbox"_sh;
82  case Boundtype::USEBSPHERE: return "usebsphere"_sh;
83  case Boundtype::USEBOBJECT: return "usebobject"_sh;
84  case Boundtype::USEBVOLUME: return "usebvolume"_sh;
85  case Boundtype::USEBCONVEX: return "usebconvex"_sh;
86  default: UT_ASSERT(false); return ""_sh;
87  }
88  }
89 
90 }
91 
92 
94 {
95 public:
96  static int version() { return 1; }
97 
99  {
100  myGroupName = "group1"_UTsh;
101  myGrouptype = 0;
102  myMergeop = 0;
103  myGroupBase = true;
104  myBasegroup = ""_UTsh;
105  myOrdered = false;
106  myGeotype = 0;
107  myGroupBounding = false;
108  myBoundtype = 0;
109  mySize = UT_Vector3D(1,1,1);
110  myT = UT_Vector3D(0,0,0);
111  myIncludenotwhollycontained = false;
112  myIso = 0;
113  myInvertvolume = false;
114  myGroupNormal = false;
115  myCamerapath = ""_UTsh;
116  myNonplanar = false;
117  myNonplanartol = 0.001;
118  myDir = UT_Vector3D(0,0,1);
119  myAngle = 180;
120  myOppositenormals = false;
121  myGroupEdges = false;
122  myDominedgeangle = false;
123  myMinedgeangle = 20;
124  myDomaxedgeangle = false;
125  myMaxedgeangle = 20;
126  myEdgeAngleBetweenEdges = false;
127  myDominedgelen = false;
128  myMinedgelen = 0;
129  myDomaxedgelen = false;
130  myMaxedgelen = 0;
131  myDodepth = false;
132  myEdgestep = 0;
133  myEdgeptgrp = "0"_UTsh;
134  myUnshared = false;
135  myBoundaryGroups = false;
136  myGroupRandom = false;
137  myGlobalseed = 1;
138  myUseseedattrib = false;
139  mySeedattrib = "id"_UTsh;
140  myPercent = 50;
141 
142  }
143 
144  explicit SOP_GroupCreateParms(const SOP_GroupCreateParms &) = default;
146  SOP_GroupCreateParms(SOP_GroupCreateParms &&) noexcept = default;
147  SOP_GroupCreateParms &operator=(SOP_GroupCreateParms &&) noexcept = default;
148 
149  ~SOP_GroupCreateParms() override {}
150 
152  {
153  if (myGroupName != src.myGroupName) return false;
154  if (myGrouptype != src.myGrouptype) return false;
155  if (myMergeop != src.myMergeop) return false;
156  if (myGroupBase != src.myGroupBase) return false;
157  if (myBasegroup != src.myBasegroup) return false;
158  if (myOrdered != src.myOrdered) return false;
159  if (myGeotype != src.myGeotype) return false;
160  if (myGroupBounding != src.myGroupBounding) return false;
161  if (myBoundtype != src.myBoundtype) return false;
162  if (mySize != src.mySize) return false;
163  if (myT != src.myT) return false;
164  if (myIncludenotwhollycontained != src.myIncludenotwhollycontained) return false;
165  if (myIso != src.myIso) return false;
166  if (myInvertvolume != src.myInvertvolume) return false;
167  if (myGroupNormal != src.myGroupNormal) return false;
168  if (myCamerapath != src.myCamerapath) return false;
169  if (myNonplanar != src.myNonplanar) return false;
170  if (myNonplanartol != src.myNonplanartol) return false;
171  if (myDir != src.myDir) return false;
172  if (myAngle != src.myAngle) return false;
173  if (myOppositenormals != src.myOppositenormals) return false;
174  if (myGroupEdges != src.myGroupEdges) return false;
175  if (myDominedgeangle != src.myDominedgeangle) return false;
176  if (myMinedgeangle != src.myMinedgeangle) return false;
177  if (myDomaxedgeangle != src.myDomaxedgeangle) return false;
178  if (myMaxedgeangle != src.myMaxedgeangle) return false;
179  if (myEdgeAngleBetweenEdges != src.myEdgeAngleBetweenEdges) return false;
180  if (myDominedgelen != src.myDominedgelen) return false;
181  if (myMinedgelen != src.myMinedgelen) return false;
182  if (myDomaxedgelen != src.myDomaxedgelen) return false;
183  if (myMaxedgelen != src.myMaxedgelen) return false;
184  if (myDodepth != src.myDodepth) return false;
185  if (myEdgestep != src.myEdgestep) return false;
186  if (myEdgeptgrp != src.myEdgeptgrp) return false;
187  if (myUnshared != src.myUnshared) return false;
188  if (myBoundaryGroups != src.myBoundaryGroups) return false;
189  if (myGroupRandom != src.myGroupRandom) return false;
190  if (myGlobalseed != src.myGlobalseed) return false;
191  if (myUseseedattrib != src.myUseseedattrib) return false;
192  if (mySeedattrib != src.mySeedattrib) return false;
193  if (myPercent != src.myPercent) return false;
194 
195  return true;
196  }
198  {
199  return !operator==(src);
200  }
204 
205 
206 
207  void buildFromOp(const OP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
208  {
209  myGroupName = "group1"_UTsh;
210  if (true)
211  graph->evalOpParm(myGroupName, nodeidx, "groupname", time, 0);
212  myGrouptype = 0;
213  if (true)
214  graph->evalOpParm(myGrouptype, nodeidx, "grouptype", time, 0);
215  myMergeop = 0;
216  if (true)
217  graph->evalOpParm(myMergeop, nodeidx, "mergeop", time, 0);
218  myGroupBase = true;
219  if (true)
220  graph->evalOpParm(myGroupBase, nodeidx, "groupbase", time, 0);
221  myBasegroup = ""_UTsh;
222  if (true && ( (true&&!(((getGroupBase()==0)))) ) )
223  graph->evalOpParm(myBasegroup, nodeidx, "basegroup", time, 0);
224  myOrdered = false;
225  if (true && ( (true&&!(((getGroupBase()==0)))) ) )
226  graph->evalOpParm(myOrdered, nodeidx, "ordered", time, 0);
227  myGeotype = 0;
228  if (true && ( (true&&!(((getGroupBase()==0)))) ) )
229  graph->evalOpParm(myGeotype, nodeidx, "geotype", time, 0);
230  myGroupBounding = false;
231  if (true)
232  graph->evalOpParm(myGroupBounding, nodeidx, "groupbounding", time, 0);
233  myBoundtype = 0;
234  if (true && ( (true&&!(((getGroupBounding()==0)))) ) )
235  graph->evalOpParm(myBoundtype, nodeidx, "boundtype", time, 0);
236  mySize = UT_Vector3D(1,1,1);
237  if (true && ( (true&&!(((getGroupBounding()==0))||((int64(getBoundtype())!=0)&&(int64(getBoundtype())!=1)))) ) )
238  graph->evalOpParm(mySize, nodeidx, "size", time, 0);
239  myT = UT_Vector3D(0,0,0);
240  if (true && ( (true&&!(((getGroupBounding()==0))||((int64(getBoundtype())!=0)&&(int64(getBoundtype())!=1)))) ) )
241  graph->evalOpParm(myT, nodeidx, "t", time, 0);
242  myIncludenotwhollycontained = false;
243  if (true && ( (true&&!(((getGroupBounding()==0))||((int64(getBoundtype())!=0)&&(int64(getBoundtype())!=1)&&(int64(getBoundtype())!=4)))) ) )
244  graph->evalOpParm(myIncludenotwhollycontained, nodeidx, "includenotwhollycontained", time, 0);
245  myIso = 0;
246  if (true && ( (true&&!(((getGroupBounding()==0))||((int64(getBoundtype())!=3)&&(int64(getBoundtype())!=4)))) ) )
247  graph->evalOpParm(myIso, nodeidx, "iso", time, 0);
248  myInvertvolume = false;
249  if (true && ( (true&&!(((getGroupBounding()==0))||((int64(getBoundtype())!=3)&&(int64(getBoundtype())!=4)))) ) )
250  graph->evalOpParm(myInvertvolume, nodeidx, "invertvolume", time, 0);
251  myGroupNormal = false;
252  if (true && ( (true&&!(((int64(getGrouptype())==3)))) ) )
253  graph->evalOpParm(myGroupNormal, nodeidx, "groupnormal", time, 0);
254  myCamerapath = ""_UTsh;
255  if (true && ( (true&&!(((int64(getGrouptype())==3))||((getGroupNormal()==0))||((int64(getGrouptype())==3)))) ) )
256  graph->evalOpParm(myCamerapath, nodeidx, "camerapath", time, 0);
257  myNonplanar = false;
258  if (true && ( (true&&!(((int64(getGrouptype())!=0))||((int64(getGrouptype())==3))||((getGroupNormal()==0))||((int64(getGrouptype())==3)))) ) )
259  graph->evalOpParm(myNonplanar, nodeidx, "nonplanar", time, 0);
260  myNonplanartol = 0.001;
261  if (true && ( (true&&!(((int64(getGrouptype())!=0))||((getNonplanar()==0))||((int64(getGrouptype())==3))||((getGroupNormal()==0))||((int64(getGrouptype())==3)))) ) )
262  graph->evalOpParm(myNonplanartol, nodeidx, "nonplanartol", time, 0);
263  myDir = UT_Vector3D(0,0,1);
264  if (true && ( (true&&!(((int64(getGrouptype())==0)&&(getNonplanar()==1))||((getCamerapath()!=""))||((int64(getGrouptype())==3))||((getGroupNormal()==0))||((int64(getGrouptype())==3)))) ) )
265  graph->evalOpParm(myDir, nodeidx, "dir", time, 0);
266  myAngle = 180;
267  if (true && ( (true&&!(((int64(getGrouptype())==0)&&(getNonplanar()==1))||((getCamerapath()!=""))||((int64(getGrouptype())==3))||((getGroupNormal()==0))||((int64(getGrouptype())==3)))) ) )
268  graph->evalOpParm(myAngle, nodeidx, "angle", time, 0);
269  myOppositenormals = false;
270  if (true && ( (true&&!(((int64(getGrouptype())==3))||((getGroupNormal()==0))||((int64(getGrouptype())==3)))) ) )
271  graph->evalOpParm(myOppositenormals, nodeidx, "oppositenormals", time, 0);
272  myGroupEdges = false;
273  if (true && ( (true&&!(((int64(getGrouptype())==3)))) ) )
274  graph->evalOpParm(myGroupEdges, nodeidx, "groupedges", time, 0);
275  myDominedgeangle = false;
276  if (true && ( (true&&!(((int64(getGrouptype())==1))||((int64(getGrouptype())==3))||((getGroupEdges()==0))||((int64(getGrouptype())==3)))) ) )
277  graph->evalOpParm(myDominedgeangle, nodeidx, "dominedgeangle", time, 0);
278  myMinedgeangle = 20;
279  if (true && ( (true&&!(((int64(getGrouptype())==1))||((getDominedgeangle()==0))||((int64(getGrouptype())==3))||((getGroupEdges()==0))||((int64(getGrouptype())==3)))) ) )
280  graph->evalOpParm(myMinedgeangle, nodeidx, "minedgeangle", time, 0);
281  myDomaxedgeangle = false;
282  if (true && ( (true&&!(((int64(getGrouptype())==1))||((int64(getGrouptype())==3))||((getGroupEdges()==0))||((int64(getGrouptype())==3)))) ) )
283  graph->evalOpParm(myDomaxedgeangle, nodeidx, "domaxedgeangle", time, 0);
284  myMaxedgeangle = 20;
285  if (true && ( (true&&!(((int64(getGrouptype())==1))||((getDomaxedgeangle()==0))||((int64(getGrouptype())==3))||((getGroupEdges()==0))||((int64(getGrouptype())==3)))) ) )
286  graph->evalOpParm(myMaxedgeangle, nodeidx, "maxedgeangle", time, 0);
287  myEdgeAngleBetweenEdges = false;
288  if (true && ( (true&&!(((int64(getGrouptype())!=2))||((int64(getGrouptype())==3))||((getGroupEdges()==0))||((int64(getGrouptype())==3)))) ) )
289  graph->evalOpParm(myEdgeAngleBetweenEdges, nodeidx, "edgeanglebetweenedges", time, 0);
290  myDominedgelen = false;
291  if (true && ( (true&&!(((int64(getGrouptype())!=2))||((int64(getGrouptype())==3))||((getGroupEdges()==0))||((int64(getGrouptype())==3)))) ) )
292  graph->evalOpParm(myDominedgelen, nodeidx, "dominedgelen", time, 0);
293  myMinedgelen = 0;
294  if (true && ( (true&&!(((int64(getGrouptype())!=2))||((getDominedgelen()==0))||((int64(getGrouptype())==3))||((getGroupEdges()==0))||((int64(getGrouptype())==3)))) ) )
295  graph->evalOpParm(myMinedgelen, nodeidx, "minedgelen", time, 0);
296  myDomaxedgelen = false;
297  if (true && ( (true&&!(((int64(getGrouptype())!=2))||((int64(getGrouptype())==3))||((getGroupEdges()==0))||((int64(getGrouptype())==3)))) ) )
298  graph->evalOpParm(myDomaxedgelen, nodeidx, "domaxedgelen", time, 0);
299  myMaxedgelen = 0;
300  if (true && ( (true&&!(((int64(getGrouptype())!=2))||((getDomaxedgelen()==0))||((int64(getGrouptype())==3))||((getGroupEdges()==0))||((int64(getGrouptype())==3)))) ) )
301  graph->evalOpParm(myMaxedgelen, nodeidx, "maxedgelen", time, 0);
302  myDodepth = false;
303  if (true && ( (true&&!(((int64(getGrouptype())!=1))||((int64(getGrouptype())==3))||((getGroupEdges()==0))||((int64(getGrouptype())==3)))) ) )
304  graph->evalOpParm(myDodepth, nodeidx, "dodepth", time, 0);
305  myEdgestep = 0;
306  if (true && ( (true&&!(((int64(getGrouptype())!=1))||((getDodepth()==0))||((int64(getGrouptype())==3))||((getGroupEdges()==0))||((int64(getGrouptype())==3)))) ) )
307  graph->evalOpParm(myEdgestep, nodeidx, "edgestep", time, 0);
308  myEdgeptgrp = "0"_UTsh;
309  if (true && ( (true&&!(((int64(getGrouptype())!=1))||((getDodepth()==0))||((int64(getGrouptype())==3))||((getGroupEdges()==0))||((int64(getGrouptype())==3)))) ) )
310  graph->evalOpParm(myEdgeptgrp, nodeidx, "edgeptgrp", time, 0);
311  myUnshared = false;
312  if (true && ( (true&&!(((int64(getGrouptype())==3))||((getGroupEdges()==0))||((int64(getGrouptype())==3)))) ) )
313  graph->evalOpParm(myUnshared, nodeidx, "unshared", time, 0);
314  myBoundaryGroups = false;
315  if (true && ( (true&&!(((int64(getGrouptype())!=1))||((getUnshared()==0))||((int64(getGrouptype())==3))||((getGroupEdges()==0))||((int64(getGrouptype())==3)))) ) )
316  graph->evalOpParm(myBoundaryGroups, nodeidx, "boundarygroups", time, 0);
317  myGroupRandom = false;
318  if (true)
319  graph->evalOpParm(myGroupRandom, nodeidx, "grouprandom", time, 0);
320  myGlobalseed = 1;
321  if (true && ( (true&&!(((getGroupRandom()==0)))) ) )
322  graph->evalOpParm(myGlobalseed, nodeidx, "globalseed", time, 0);
323  myUseseedattrib = false;
324  if (true && ( (true&&!(((getGroupRandom()==0)))) ) )
325  graph->evalOpParm(myUseseedattrib, nodeidx, "useseedattrib", time, 0);
326  mySeedattrib = "id"_UTsh;
327  if (true && ( (true&&!(((getUseseedattrib()==0))||((getGroupRandom()==0)))) ) )
328  graph->evalOpParm(mySeedattrib, nodeidx, "seedattrib", time, 0);
329  myPercent = 50;
330  if (true && ( (true&&!(((getGroupRandom()==0)))) ) )
331  graph->evalOpParm(myPercent, nodeidx, "percent", time, 0);
332 
333  }
334 
335 
336  void loadFromOpSubclass(const LoadParms &loadparms) override
337  {
338  buildFromOp(loadparms.graph(), loadparms.nodeIdx(), loadparms.context().getTime(), loadparms.depnode());
339  }
340 
341 
342  void copyFrom(const OP_NodeParms *src) override
343  {
344  *this = *((const SOP_GroupCreateParms *)src);
345  }
346 
347  template <typename T>
348  void
349  doGetParmValue(TempIndex idx, TempIndex instance, T &value) const
350  {
351  if (idx.size() < 1)
352  return;
353  UT_ASSERT(idx.size() == instance.size()+1);
354  if (idx.size() != instance.size()+1)
355  return;
356  switch (idx[0])
357  {
358  case 0:
359  coerceValue(value, myGroupName);
360  break;
361  case 1:
362  coerceValue(value, myGrouptype);
363  break;
364  case 2:
365  coerceValue(value, myMergeop);
366  break;
367  case 3:
368  coerceValue(value, myGroupBase);
369  break;
370  case 4:
371  coerceValue(value, myBasegroup);
372  break;
373  case 5:
374  coerceValue(value, myOrdered);
375  break;
376  case 6:
377  coerceValue(value, myGeotype);
378  break;
379  case 7:
380  coerceValue(value, myGroupBounding);
381  break;
382  case 8:
383  coerceValue(value, myBoundtype);
384  break;
385  case 9:
386  coerceValue(value, mySize);
387  break;
388  case 10:
389  coerceValue(value, myT);
390  break;
391  case 11:
392  coerceValue(value, myIncludenotwhollycontained);
393  break;
394  case 12:
395  coerceValue(value, myIso);
396  break;
397  case 13:
398  coerceValue(value, myInvertvolume);
399  break;
400  case 14:
401  coerceValue(value, myGroupNormal);
402  break;
403  case 15:
404  coerceValue(value, myCamerapath);
405  break;
406  case 16:
407  coerceValue(value, myNonplanar);
408  break;
409  case 17:
410  coerceValue(value, myNonplanartol);
411  break;
412  case 18:
413  coerceValue(value, myDir);
414  break;
415  case 19:
416  coerceValue(value, myAngle);
417  break;
418  case 20:
419  coerceValue(value, myOppositenormals);
420  break;
421  case 21:
422  coerceValue(value, myGroupEdges);
423  break;
424  case 22:
425  coerceValue(value, myDominedgeangle);
426  break;
427  case 23:
428  coerceValue(value, myMinedgeangle);
429  break;
430  case 24:
431  coerceValue(value, myDomaxedgeangle);
432  break;
433  case 25:
434  coerceValue(value, myMaxedgeangle);
435  break;
436  case 26:
437  coerceValue(value, myEdgeAngleBetweenEdges);
438  break;
439  case 27:
440  coerceValue(value, myDominedgelen);
441  break;
442  case 28:
443  coerceValue(value, myMinedgelen);
444  break;
445  case 29:
446  coerceValue(value, myDomaxedgelen);
447  break;
448  case 30:
449  coerceValue(value, myMaxedgelen);
450  break;
451  case 31:
452  coerceValue(value, myDodepth);
453  break;
454  case 32:
455  coerceValue(value, myEdgestep);
456  break;
457  case 33:
458  coerceValue(value, myEdgeptgrp);
459  break;
460  case 34:
461  coerceValue(value, myUnshared);
462  break;
463  case 35:
464  coerceValue(value, myBoundaryGroups);
465  break;
466  case 36:
467  coerceValue(value, myGroupRandom);
468  break;
469  case 37:
470  coerceValue(value, myGlobalseed);
471  break;
472  case 38:
473  coerceValue(value, myUseseedattrib);
474  break;
475  case 39:
476  coerceValue(value, mySeedattrib);
477  break;
478  case 40:
479  coerceValue(value, myPercent);
480  break;
481 
482  }
483  }
484 
485  bool isParmColorRamp(exint idx) const override
486  {
487  switch (idx)
488  {
489 
490  }
491  return false;
492  }
493 
494  void getNestParmValue(TempIndex idx, TempIndex instance, exint &value) const override
495  { doGetParmValue(idx, instance, value); }
496  void getNestParmValue(TempIndex idx, TempIndex instance, fpreal &value) const override
497  { doGetParmValue(idx, instance, value); }
498  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector2D &value) const override
499  { doGetParmValue(idx, instance, value); }
500  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector3D &value) const override
501  { doGetParmValue(idx, instance, value); }
502  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector4D &value) const override
503  { doGetParmValue(idx, instance, value); }
504  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix2D &value) const override
505  { doGetParmValue(idx, instance, value); }
506  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
507  { doGetParmValue(idx, instance, value); }
508  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix4D &value) const override
509  { doGetParmValue(idx, instance, value); }
510  void getNestParmValue(TempIndex idx, TempIndex instance, UT_StringHolder &value) const override
511  { doGetParmValue(idx, instance, value); }
512  void getNestParmValue(TempIndex idx, TempIndex instance, UT_SharedPtr<UT_Ramp> &value) const override
513  { doGetParmValue(idx, instance, value); }
514  void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
515  { doGetParmValue(idx, instance, value); }
516 
517  template <typename T>
518  void
519  doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
520  {
521  if (idx.size() < 1)
522  return;
523  UT_ASSERT(idx.size() == instance.size()+1);
524  if (idx.size() != instance.size()+1)
525  return;
526  switch (idx[0])
527  {
528  case 0:
529  coerceValue(myGroupName, ( ( value ) ));
530  break;
531  case 1:
532  coerceValue(myGrouptype, clampMinValue(0, clampMaxValue(3, value ) ));
533  break;
534  case 2:
535  coerceValue(myMergeop, clampMinValue(0, clampMaxValue(3, value ) ));
536  break;
537  case 3:
538  coerceValue(myGroupBase, ( ( value ) ));
539  break;
540  case 4:
541  coerceValue(myBasegroup, ( ( value ) ));
542  break;
543  case 5:
544  coerceValue(myOrdered, ( ( value ) ));
545  break;
546  case 6:
547  coerceValue(myGeotype, ( ( value ) ));
548  break;
549  case 7:
550  coerceValue(myGroupBounding, ( ( value ) ));
551  break;
552  case 8:
553  coerceValue(myBoundtype, clampMinValue(0, clampMaxValue(4, value ) ));
554  break;
555  case 9:
556  coerceValue(mySize, ( ( value ) ));
557  break;
558  case 10:
559  coerceValue(myT, ( ( value ) ));
560  break;
561  case 11:
562  coerceValue(myIncludenotwhollycontained, ( ( value ) ));
563  break;
564  case 12:
565  coerceValue(myIso, ( ( value ) ));
566  break;
567  case 13:
568  coerceValue(myInvertvolume, ( ( value ) ));
569  break;
570  case 14:
571  coerceValue(myGroupNormal, ( ( value ) ));
572  break;
573  case 15:
574  coerceValue(myCamerapath, ( ( value ) ));
575  break;
576  case 16:
577  coerceValue(myNonplanar, ( ( value ) ));
578  break;
579  case 17:
580  coerceValue(myNonplanartol, clampMinValue(0, ( value ) ));
581  break;
582  case 18:
583  coerceValue(myDir, ( ( value ) ));
584  break;
585  case 19:
586  coerceValue(myAngle, clampMinValue(0, clampMaxValue(180, value ) ));
587  break;
588  case 20:
589  coerceValue(myOppositenormals, ( ( value ) ));
590  break;
591  case 21:
592  coerceValue(myGroupEdges, ( ( value ) ));
593  break;
594  case 22:
595  coerceValue(myDominedgeangle, ( ( value ) ));
596  break;
597  case 23:
598  coerceValue(myMinedgeangle, ( ( value ) ));
599  break;
600  case 24:
601  coerceValue(myDomaxedgeangle, ( ( value ) ));
602  break;
603  case 25:
604  coerceValue(myMaxedgeangle, ( ( value ) ));
605  break;
606  case 26:
607  coerceValue(myEdgeAngleBetweenEdges, ( ( value ) ));
608  break;
609  case 27:
610  coerceValue(myDominedgelen, ( ( value ) ));
611  break;
612  case 28:
613  coerceValue(myMinedgelen, clampMinValue(0, ( value ) ));
614  break;
615  case 29:
616  coerceValue(myDomaxedgelen, ( ( value ) ));
617  break;
618  case 30:
619  coerceValue(myMaxedgelen, clampMinValue(0, ( value ) ));
620  break;
621  case 31:
622  coerceValue(myDodepth, ( ( value ) ));
623  break;
624  case 32:
625  coerceValue(myEdgestep, clampMinValue(0, ( value ) ));
626  break;
627  case 33:
628  coerceValue(myEdgeptgrp, ( ( value ) ));
629  break;
630  case 34:
631  coerceValue(myUnshared, ( ( value ) ));
632  break;
633  case 35:
634  coerceValue(myBoundaryGroups, ( ( value ) ));
635  break;
636  case 36:
637  coerceValue(myGroupRandom, ( ( value ) ));
638  break;
639  case 37:
640  coerceValue(myGlobalseed, ( ( value ) ));
641  break;
642  case 38:
643  coerceValue(myUseseedattrib, ( ( value ) ));
644  break;
645  case 39:
646  coerceValue(mySeedattrib, ( ( value ) ));
647  break;
648  case 40:
649  coerceValue(myPercent, clampMinValue(0, clampMaxValue(100, value ) ));
650  break;
651 
652  }
653  }
654 
655  void setNestParmValue(TempIndex idx, TempIndex instance, const exint &value) override
656  { doSetParmValue(idx, instance, value); }
657  void setNestParmValue(TempIndex idx, TempIndex instance, const fpreal &value) override
658  { doSetParmValue(idx, instance, value); }
659  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector2D &value) override
660  { doSetParmValue(idx, instance, value); }
661  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector3D &value) override
662  { doSetParmValue(idx, instance, value); }
663  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector4D &value) override
664  { doSetParmValue(idx, instance, value); }
665  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix2D &value) override
666  { doSetParmValue(idx, instance, value); }
667  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix3D &value) override
668  { doSetParmValue(idx, instance, value); }
669  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix4D &value) override
670  { doSetParmValue(idx, instance, value); }
671  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_StringHolder &value) override
672  { doSetParmValue(idx, instance, value); }
673  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_SharedPtr<UT_Ramp> &value) override
674  { doSetParmValue(idx, instance, value); }
675  void setNestParmValue(TempIndex idx, TempIndex instance, const PRM_DataItemHandle &value) override
676  { doSetParmValue(idx, instance, value); }
677 
678  exint getNestNumParms(TempIndex idx) const override
679  {
680  if (idx.size() == 0)
681  return 41;
682  switch (idx[0])
683  {
684 
685  }
686  // Invalid
687  return 0;
688  }
689 
690  const char *getNestParmName(TempIndex fieldnum) const override
691  {
692  if (fieldnum.size() < 1)
693  return 0;
694  switch (fieldnum[0])
695  {
696  case 0:
697  return "groupname";
698  case 1:
699  return "grouptype";
700  case 2:
701  return "mergeop";
702  case 3:
703  return "groupbase";
704  case 4:
705  return "basegroup";
706  case 5:
707  return "ordered";
708  case 6:
709  return "geotype";
710  case 7:
711  return "groupbounding";
712  case 8:
713  return "boundtype";
714  case 9:
715  return "size";
716  case 10:
717  return "t";
718  case 11:
719  return "includenotwhollycontained";
720  case 12:
721  return "iso";
722  case 13:
723  return "invertvolume";
724  case 14:
725  return "groupnormal";
726  case 15:
727  return "camerapath";
728  case 16:
729  return "nonplanar";
730  case 17:
731  return "nonplanartol";
732  case 18:
733  return "dir";
734  case 19:
735  return "angle";
736  case 20:
737  return "oppositenormals";
738  case 21:
739  return "groupedges";
740  case 22:
741  return "dominedgeangle";
742  case 23:
743  return "minedgeangle";
744  case 24:
745  return "domaxedgeangle";
746  case 25:
747  return "maxedgeangle";
748  case 26:
749  return "edgeanglebetweenedges";
750  case 27:
751  return "dominedgelen";
752  case 28:
753  return "minedgelen";
754  case 29:
755  return "domaxedgelen";
756  case 30:
757  return "maxedgelen";
758  case 31:
759  return "dodepth";
760  case 32:
761  return "edgestep";
762  case 33:
763  return "edgeptgrp";
764  case 34:
765  return "unshared";
766  case 35:
767  return "boundarygroups";
768  case 36:
769  return "grouprandom";
770  case 37:
771  return "globalseed";
772  case 38:
773  return "useseedattrib";
774  case 39:
775  return "seedattrib";
776  case 40:
777  return "percent";
778 
779  }
780  return 0;
781  }
782 
783  ParmType getNestParmType(TempIndex fieldnum) const override
784  {
785  if (fieldnum.size() < 1)
786  return PARM_UNSUPPORTED;
787  switch (fieldnum[0])
788  {
789  case 0:
790  return PARM_STRING;
791  case 1:
792  return PARM_INTEGER;
793  case 2:
794  return PARM_INTEGER;
795  case 3:
796  return PARM_INTEGER;
797  case 4:
798  return PARM_STRING;
799  case 5:
800  return PARM_INTEGER;
801  case 6:
802  return PARM_INTEGER;
803  case 7:
804  return PARM_INTEGER;
805  case 8:
806  return PARM_INTEGER;
807  case 9:
808  return PARM_VECTOR3;
809  case 10:
810  return PARM_VECTOR3;
811  case 11:
812  return PARM_INTEGER;
813  case 12:
814  return PARM_FLOAT;
815  case 13:
816  return PARM_INTEGER;
817  case 14:
818  return PARM_INTEGER;
819  case 15:
820  return PARM_STRING;
821  case 16:
822  return PARM_INTEGER;
823  case 17:
824  return PARM_FLOAT;
825  case 18:
826  return PARM_VECTOR3;
827  case 19:
828  return PARM_FLOAT;
829  case 20:
830  return PARM_INTEGER;
831  case 21:
832  return PARM_INTEGER;
833  case 22:
834  return PARM_INTEGER;
835  case 23:
836  return PARM_FLOAT;
837  case 24:
838  return PARM_INTEGER;
839  case 25:
840  return PARM_FLOAT;
841  case 26:
842  return PARM_INTEGER;
843  case 27:
844  return PARM_INTEGER;
845  case 28:
846  return PARM_FLOAT;
847  case 29:
848  return PARM_INTEGER;
849  case 30:
850  return PARM_FLOAT;
851  case 31:
852  return PARM_INTEGER;
853  case 32:
854  return PARM_INTEGER;
855  case 33:
856  return PARM_STRING;
857  case 34:
858  return PARM_INTEGER;
859  case 35:
860  return PARM_INTEGER;
861  case 36:
862  return PARM_INTEGER;
863  case 37:
864  return PARM_FLOAT;
865  case 38:
866  return PARM_INTEGER;
867  case 39:
868  return PARM_STRING;
869  case 40:
870  return PARM_FLOAT;
871 
872  }
873  return PARM_UNSUPPORTED;
874  }
875 
876  // Boiler plate to load individual types.
877  static void loadData(UT_IStream &is, int64 &v)
878  { is.bread(&v, 1); }
879  static void loadData(UT_IStream &is, bool &v)
880  { int64 iv; is.bread(&iv, 1); v = iv; }
881  static void loadData(UT_IStream &is, fpreal64 &v)
882  { is.bread<fpreal64>(&v, 1); }
883  static void loadData(UT_IStream &is, UT_Vector2D &v)
884  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1); }
885  static void loadData(UT_IStream &is, UT_Vector3D &v)
886  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
887  is.bread<fpreal64>(&v.z(), 1); }
888  static void loadData(UT_IStream &is, UT_Vector4D &v)
889  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
890  is.bread<fpreal64>(&v.z(), 1); is.bread<fpreal64>(&v.w(), 1); }
891  static void loadData(UT_IStream &is, UT_Matrix2D &v)
892  { for (int r = 0; r < 2; r++) for (int c = 0; c < 2; c++) is.bread<fpreal64>(&v(r, c), 1); }
893  static void loadData(UT_IStream &is, UT_Matrix3D &v)
894  { for (int r = 0; r < 3; r++) for (int c = 0; c < 3; c++) is.bread<fpreal64>(&v(r, c), 1); }
895  static void loadData(UT_IStream &is, UT_Matrix4D &v)
896  { for (int r = 0; r < 4; r++) for (int c = 0; c < 4; c++) is.bread<fpreal64>(&v(r, c), 1); }
897  static void loadData(UT_IStream &is, UT_Vector2I &v)
898  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1); }
899  static void loadData(UT_IStream &is, UT_Vector3I &v)
900  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
901  is.bread<int64>(&v.z(), 1); }
902  static void loadData(UT_IStream &is, UT_Vector4I &v)
903  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
904  is.bread<int64>(&v.z(), 1); is.bread<int64>(&v.w(), 1); }
906  { is.bread(v); }
908  { UT_StringHolder rampdata;
909  loadData(is, rampdata);
910  if (rampdata.isstring())
911  {
912  v.reset(new UT_Ramp());
913  UT_IStream istr((const char *) rampdata, rampdata.length(), UT_ISTREAM_ASCII);
914  v->load(istr);
915  }
916  else v.reset();
917  }
920  loadData(is, data);
921  if (data.isstring())
922  {
923  // Find the data type.
924  const char *colon = UT_StringWrap(data).findChar(':');
925  if (colon)
926  {
927  int typelen = colon - data.buffer();
929  type.strncpy(data.buffer(), typelen);
930  UT_IStream istr(((const char *) data) + typelen + 1, data.length() - (typelen + 1), UT_ISTREAM_BINARY);
931 
932  v = PRM_DataFactory::parseBinary(type.buffer(), istr);
933  }
934  }
935  else v.reset();
936  }
937 
938  static void saveData(std::ostream &os, int64 v)
939  { UTwrite(os, &v); }
940  static void saveData(std::ostream &os, bool v)
941  { int64 iv = v; UTwrite(os, &iv); }
942  static void saveData(std::ostream &os, fpreal64 v)
943  { UTwrite<fpreal64>(os, &v); }
944  static void saveData(std::ostream &os, UT_Vector2D v)
945  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y()); }
946  static void saveData(std::ostream &os, UT_Vector3D v)
947  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
948  UTwrite<fpreal64>(os, &v.z()); }
949  static void saveData(std::ostream &os, UT_Vector4D v)
950  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
951  UTwrite<fpreal64>(os, &v.z()); UTwrite<fpreal64>(os, &v.w()); }
952  static void saveData(std::ostream &os, UT_Matrix2D v)
954  static void saveData(std::ostream &os, UT_Matrix3D v)
956  static void saveData(std::ostream &os, UT_Matrix4D v)
958  static void saveData(std::ostream &os, UT_StringHolder s)
959  { UT_StringWrap(s).saveBinary(os); }
960  static void saveData(std::ostream &os, UT_SharedPtr<UT_Ramp> s)
962  UT_OStringStream ostr;
963  if (s) s->save(ostr);
964  result = ostr.str();
965  saveData(os, result);
966  }
967  static void saveData(std::ostream &os, PRM_DataItemHandle s)
969  UT_OStringStream ostr;
970  if (s)
971  {
972  ostr << s->getDataTypeToken();
973  ostr << ":";
974  s->saveBinary(ostr);
975  }
976  result = ostr.str();
977  saveData(os, result);
978  }
979 
980 
981  void save(std::ostream &os) const
982  {
983  int32 v = version();
984  UTwrite(os, &v);
985  saveData(os, myGroupName);
986  saveData(os, myGrouptype);
987  saveData(os, myMergeop);
988  saveData(os, myGroupBase);
989  saveData(os, myBasegroup);
990  saveData(os, myOrdered);
991  saveData(os, myGeotype);
992  saveData(os, myGroupBounding);
993  saveData(os, myBoundtype);
994  saveData(os, mySize);
995  saveData(os, myT);
996  saveData(os, myIncludenotwhollycontained);
997  saveData(os, myIso);
998  saveData(os, myInvertvolume);
999  saveData(os, myGroupNormal);
1000  saveData(os, myCamerapath);
1001  saveData(os, myNonplanar);
1002  saveData(os, myNonplanartol);
1003  saveData(os, myDir);
1004  saveData(os, myAngle);
1005  saveData(os, myOppositenormals);
1006  saveData(os, myGroupEdges);
1007  saveData(os, myDominedgeangle);
1008  saveData(os, myMinedgeangle);
1009  saveData(os, myDomaxedgeangle);
1010  saveData(os, myMaxedgeangle);
1011  saveData(os, myEdgeAngleBetweenEdges);
1012  saveData(os, myDominedgelen);
1013  saveData(os, myMinedgelen);
1014  saveData(os, myDomaxedgelen);
1015  saveData(os, myMaxedgelen);
1016  saveData(os, myDodepth);
1017  saveData(os, myEdgestep);
1018  saveData(os, myEdgeptgrp);
1019  saveData(os, myUnshared);
1020  saveData(os, myBoundaryGroups);
1021  saveData(os, myGroupRandom);
1022  saveData(os, myGlobalseed);
1023  saveData(os, myUseseedattrib);
1024  saveData(os, mySeedattrib);
1025  saveData(os, myPercent);
1026 
1027  }
1028 
1029  bool load(UT_IStream &is)
1030  {
1031  int32 v;
1032  is.bread(&v, 1);
1033  if (version() != v)
1034  {
1035  // Fail incompatible versions
1036  return false;
1037  }
1038  loadData(is, myGroupName);
1039  loadData(is, myGrouptype);
1040  loadData(is, myMergeop);
1041  loadData(is, myGroupBase);
1042  loadData(is, myBasegroup);
1043  loadData(is, myOrdered);
1044  loadData(is, myGeotype);
1045  loadData(is, myGroupBounding);
1046  loadData(is, myBoundtype);
1047  loadData(is, mySize);
1048  loadData(is, myT);
1049  loadData(is, myIncludenotwhollycontained);
1050  loadData(is, myIso);
1051  loadData(is, myInvertvolume);
1052  loadData(is, myGroupNormal);
1053  loadData(is, myCamerapath);
1054  loadData(is, myNonplanar);
1055  loadData(is, myNonplanartol);
1056  loadData(is, myDir);
1057  loadData(is, myAngle);
1058  loadData(is, myOppositenormals);
1059  loadData(is, myGroupEdges);
1060  loadData(is, myDominedgeangle);
1061  loadData(is, myMinedgeangle);
1062  loadData(is, myDomaxedgeangle);
1063  loadData(is, myMaxedgeangle);
1064  loadData(is, myEdgeAngleBetweenEdges);
1065  loadData(is, myDominedgelen);
1066  loadData(is, myMinedgelen);
1067  loadData(is, myDomaxedgelen);
1068  loadData(is, myMaxedgelen);
1069  loadData(is, myDodepth);
1070  loadData(is, myEdgestep);
1071  loadData(is, myEdgeptgrp);
1072  loadData(is, myUnshared);
1073  loadData(is, myBoundaryGroups);
1074  loadData(is, myGroupRandom);
1075  loadData(is, myGlobalseed);
1076  loadData(is, myUseseedattrib);
1077  loadData(is, mySeedattrib);
1078  loadData(is, myPercent);
1079 
1080  return true;
1081  }
1082 
1083  const UT_StringHolder & getGroupName() const { return myGroupName; }
1084  void setGroupName(const UT_StringHolder & val) { myGroupName = val; }
1086  {
1087  SOP_Node *thissop = cookparms.getNode();
1088  if (!thissop) return getGroupName();
1090  OP_Utils::evalOpParm(result, thissop, "groupname", cookparms.getCookTime(), 0);
1091  return result;
1092  }
1093  Grouptype getGrouptype() const { return Grouptype(myGrouptype); }
1094  void setGrouptype(Grouptype val) { myGrouptype = int64(val); }
1096  {
1097  SOP_Node *thissop = cookparms.getNode();
1098  if (!thissop) return getGrouptype();
1099  int64 result;
1100  OP_Utils::evalOpParm(result, thissop, "grouptype", cookparms.getCookTime(), 0);
1101  return Grouptype(result);
1102  }
1103  Mergeop getMergeop() const { return Mergeop(myMergeop); }
1104  void setMergeop(Mergeop val) { myMergeop = int64(val); }
1106  {
1107  SOP_Node *thissop = cookparms.getNode();
1108  if (!thissop) return getMergeop();
1109  int64 result;
1110  OP_Utils::evalOpParm(result, thissop, "mergeop", cookparms.getCookTime(), 0);
1111  return Mergeop(result);
1112  }
1113  bool getGroupBase() const { return myGroupBase; }
1114  void setGroupBase(bool val) { myGroupBase = val; }
1115  bool opGroupBase(const SOP_NodeVerb::CookParms &cookparms) const
1116  {
1117  SOP_Node *thissop = cookparms.getNode();
1118  if (!thissop) return getGroupBase();
1119  bool result;
1120  OP_Utils::evalOpParm(result, thissop, "groupbase", cookparms.getCookTime(), 0);
1121  return result;
1122  }
1123  const UT_StringHolder & getBasegroup() const { return myBasegroup; }
1124  void setBasegroup(const UT_StringHolder & val) { myBasegroup = val; }
1126  {
1127  SOP_Node *thissop = cookparms.getNode();
1128  if (!thissop) return getBasegroup();
1130  OP_Utils::evalOpParm(result, thissop, "basegroup", cookparms.getCookTime(), 0);
1131  return result;
1132  }
1133  bool getOrdered() const { return myOrdered; }
1134  void setOrdered(bool val) { myOrdered = val; }
1135  bool opOrdered(const SOP_NodeVerb::CookParms &cookparms) const
1136  {
1137  SOP_Node *thissop = cookparms.getNode();
1138  if (!thissop) return getOrdered();
1139  bool result;
1140  OP_Utils::evalOpParm(result, thissop, "ordered", cookparms.getCookTime(), 0);
1141  return result;
1142  }
1143  int64 getGeotype() const { return myGeotype; }
1144  void setGeotype(int64 val) { myGeotype = val; }
1145  int64 opGeotype(const SOP_NodeVerb::CookParms &cookparms) const
1146  {
1147  SOP_Node *thissop = cookparms.getNode();
1148  if (!thissop) return getGeotype();
1149  int64 result;
1150  OP_Utils::evalOpParm(result, thissop, "geotype", cookparms.getCookTime(), 0);
1151  return result;
1152  }
1153  bool getGroupBounding() const { return myGroupBounding; }
1154  void setGroupBounding(bool val) { myGroupBounding = val; }
1155  bool opGroupBounding(const SOP_NodeVerb::CookParms &cookparms) const
1156  {
1157  SOP_Node *thissop = cookparms.getNode();
1158  if (!thissop) return getGroupBounding();
1159  bool result;
1160  OP_Utils::evalOpParm(result, thissop, "groupbounding", cookparms.getCookTime(), 0);
1161  return result;
1162  }
1163  Boundtype getBoundtype() const { return Boundtype(myBoundtype); }
1164  void setBoundtype(Boundtype val) { myBoundtype = int64(val); }
1166  {
1167  SOP_Node *thissop = cookparms.getNode();
1168  if (!thissop) return getBoundtype();
1169  int64 result;
1170  OP_Utils::evalOpParm(result, thissop, "boundtype", cookparms.getCookTime(), 0);
1171  return Boundtype(result);
1172  }
1173  UT_Vector3D getSize() const { return mySize; }
1174  void setSize(UT_Vector3D val) { mySize = val; }
1176  {
1177  SOP_Node *thissop = cookparms.getNode();
1178  if (!thissop) return getSize();
1180  OP_Utils::evalOpParm(result, thissop, "size", cookparms.getCookTime(), 0);
1181  return result;
1182  }
1183  UT_Vector3D getT() const { return myT; }
1184  void setT(UT_Vector3D val) { myT = val; }
1185  UT_Vector3D opT(const SOP_NodeVerb::CookParms &cookparms) const
1186  {
1187  SOP_Node *thissop = cookparms.getNode();
1188  if (!thissop) return getT();
1190  OP_Utils::evalOpParm(result, thissop, "t", cookparms.getCookTime(), 0);
1191  return result;
1192  }
1193  bool getIncludenotwhollycontained() const { return myIncludenotwhollycontained; }
1194  void setIncludenotwhollycontained(bool val) { myIncludenotwhollycontained = val; }
1196  {
1197  SOP_Node *thissop = cookparms.getNode();
1198  if (!thissop) return getIncludenotwhollycontained();
1199  bool result;
1200  OP_Utils::evalOpParm(result, thissop, "includenotwhollycontained", cookparms.getCookTime(), 0);
1201  return result;
1202  }
1203  fpreal64 getIso() const { return myIso; }
1204  void setIso(fpreal64 val) { myIso = val; }
1205  fpreal64 opIso(const SOP_NodeVerb::CookParms &cookparms) const
1206  {
1207  SOP_Node *thissop = cookparms.getNode();
1208  if (!thissop) return getIso();
1209  fpreal64 result;
1210  OP_Utils::evalOpParm(result, thissop, "iso", cookparms.getCookTime(), 0);
1211  return result;
1212  }
1213  bool getInvertvolume() const { return myInvertvolume; }
1214  void setInvertvolume(bool val) { myInvertvolume = val; }
1215  bool opInvertvolume(const SOP_NodeVerb::CookParms &cookparms) const
1216  {
1217  SOP_Node *thissop = cookparms.getNode();
1218  if (!thissop) return getInvertvolume();
1219  bool result;
1220  OP_Utils::evalOpParm(result, thissop, "invertvolume", cookparms.getCookTime(), 0);
1221  return result;
1222  }
1223  bool getGroupNormal() const { return myGroupNormal; }
1224  void setGroupNormal(bool val) { myGroupNormal = val; }
1225  bool opGroupNormal(const SOP_NodeVerb::CookParms &cookparms) const
1226  {
1227  SOP_Node *thissop = cookparms.getNode();
1228  if (!thissop) return getGroupNormal();
1229  bool result;
1230  OP_Utils::evalOpParm(result, thissop, "groupnormal", cookparms.getCookTime(), 0);
1231  return result;
1232  }
1233  const UT_StringHolder & getCamerapath() const { return myCamerapath; }
1234  void setCamerapath(const UT_StringHolder & val) { myCamerapath = val; }
1236  {
1237  SOP_Node *thissop = cookparms.getNode();
1238  if (!thissop) return getCamerapath();
1240  OP_Utils::evalOpParm(result, thissop, "camerapath", cookparms.getCookTime(), 0);
1241  return result;
1242  }
1243  bool getNonplanar() const { return myNonplanar; }
1244  void setNonplanar(bool val) { myNonplanar = val; }
1245  bool opNonplanar(const SOP_NodeVerb::CookParms &cookparms) const
1246  {
1247  SOP_Node *thissop = cookparms.getNode();
1248  if (!thissop) return getNonplanar();
1249  bool result;
1250  OP_Utils::evalOpParm(result, thissop, "nonplanar", cookparms.getCookTime(), 0);
1251  return result;
1252  }
1253  fpreal64 getNonplanartol() const { return myNonplanartol; }
1254  void setNonplanartol(fpreal64 val) { myNonplanartol = val; }
1256  {
1257  SOP_Node *thissop = cookparms.getNode();
1258  if (!thissop) return getNonplanartol();
1259  fpreal64 result;
1260  OP_Utils::evalOpParm(result, thissop, "nonplanartol", cookparms.getCookTime(), 0);
1261  return result;
1262  }
1263  UT_Vector3D getDir() const { return myDir; }
1264  void setDir(UT_Vector3D val) { myDir = val; }
1266  {
1267  SOP_Node *thissop = cookparms.getNode();
1268  if (!thissop) return getDir();
1270  OP_Utils::evalOpParm(result, thissop, "dir", cookparms.getCookTime(), 0);
1271  return result;
1272  }
1273  fpreal64 getAngle() const { return myAngle; }
1274  void setAngle(fpreal64 val) { myAngle = val; }
1275  fpreal64 opAngle(const SOP_NodeVerb::CookParms &cookparms) const
1276  {
1277  SOP_Node *thissop = cookparms.getNode();
1278  if (!thissop) return getAngle();
1279  fpreal64 result;
1280  OP_Utils::evalOpParm(result, thissop, "angle", cookparms.getCookTime(), 0);
1281  return result;
1282  }
1283  bool getOppositenormals() const { return myOppositenormals; }
1284  void setOppositenormals(bool val) { myOppositenormals = val; }
1285  bool opOppositenormals(const SOP_NodeVerb::CookParms &cookparms) const
1286  {
1287  SOP_Node *thissop = cookparms.getNode();
1288  if (!thissop) return getOppositenormals();
1289  bool result;
1290  OP_Utils::evalOpParm(result, thissop, "oppositenormals", cookparms.getCookTime(), 0);
1291  return result;
1292  }
1293  bool getGroupEdges() const { return myGroupEdges; }
1294  void setGroupEdges(bool val) { myGroupEdges = val; }
1295  bool opGroupEdges(const SOP_NodeVerb::CookParms &cookparms) const
1296  {
1297  SOP_Node *thissop = cookparms.getNode();
1298  if (!thissop) return getGroupEdges();
1299  bool result;
1300  OP_Utils::evalOpParm(result, thissop, "groupedges", cookparms.getCookTime(), 0);
1301  return result;
1302  }
1303  bool getDominedgeangle() const { return myDominedgeangle; }
1304  void setDominedgeangle(bool val) { myDominedgeangle = val; }
1305  bool opDominedgeangle(const SOP_NodeVerb::CookParms &cookparms) const
1306  {
1307  SOP_Node *thissop = cookparms.getNode();
1308  if (!thissop) return getDominedgeangle();
1309  bool result;
1310  OP_Utils::evalOpParm(result, thissop, "dominedgeangle", cookparms.getCookTime(), 0);
1311  return result;
1312  }
1313  fpreal64 getMinedgeangle() const { return myMinedgeangle; }
1314  void setMinedgeangle(fpreal64 val) { myMinedgeangle = val; }
1316  {
1317  SOP_Node *thissop = cookparms.getNode();
1318  if (!thissop) return getMinedgeangle();
1319  fpreal64 result;
1320  OP_Utils::evalOpParm(result, thissop, "minedgeangle", cookparms.getCookTime(), 0);
1321  return result;
1322  }
1323  bool getDomaxedgeangle() const { return myDomaxedgeangle; }
1324  void setDomaxedgeangle(bool val) { myDomaxedgeangle = val; }
1325  bool opDomaxedgeangle(const SOP_NodeVerb::CookParms &cookparms) const
1326  {
1327  SOP_Node *thissop = cookparms.getNode();
1328  if (!thissop) return getDomaxedgeangle();
1329  bool result;
1330  OP_Utils::evalOpParm(result, thissop, "domaxedgeangle", cookparms.getCookTime(), 0);
1331  return result;
1332  }
1333  fpreal64 getMaxedgeangle() const { return myMaxedgeangle; }
1334  void setMaxedgeangle(fpreal64 val) { myMaxedgeangle = val; }
1336  {
1337  SOP_Node *thissop = cookparms.getNode();
1338  if (!thissop) return getMaxedgeangle();
1339  fpreal64 result;
1340  OP_Utils::evalOpParm(result, thissop, "maxedgeangle", cookparms.getCookTime(), 0);
1341  return result;
1342  }
1343  bool getEdgeAngleBetweenEdges() const { return myEdgeAngleBetweenEdges; }
1344  void setEdgeAngleBetweenEdges(bool val) { myEdgeAngleBetweenEdges = val; }
1346  {
1347  SOP_Node *thissop = cookparms.getNode();
1348  if (!thissop) return getEdgeAngleBetweenEdges();
1349  bool result;
1350  OP_Utils::evalOpParm(result, thissop, "edgeanglebetweenedges", cookparms.getCookTime(), 0);
1351  return result;
1352  }
1353  bool getDominedgelen() const { return myDominedgelen; }
1354  void setDominedgelen(bool val) { myDominedgelen = val; }
1355  bool opDominedgelen(const SOP_NodeVerb::CookParms &cookparms) const
1356  {
1357  SOP_Node *thissop = cookparms.getNode();
1358  if (!thissop) return getDominedgelen();
1359  bool result;
1360  OP_Utils::evalOpParm(result, thissop, "dominedgelen", cookparms.getCookTime(), 0);
1361  return result;
1362  }
1363  fpreal64 getMinedgelen() const { return myMinedgelen; }
1364  void setMinedgelen(fpreal64 val) { myMinedgelen = val; }
1366  {
1367  SOP_Node *thissop = cookparms.getNode();
1368  if (!thissop) return getMinedgelen();
1369  fpreal64 result;
1370  OP_Utils::evalOpParm(result, thissop, "minedgelen", cookparms.getCookTime(), 0);
1371  return result;
1372  }
1373  bool getDomaxedgelen() const { return myDomaxedgelen; }
1374  void setDomaxedgelen(bool val) { myDomaxedgelen = val; }
1375  bool opDomaxedgelen(const SOP_NodeVerb::CookParms &cookparms) const
1376  {
1377  SOP_Node *thissop = cookparms.getNode();
1378  if (!thissop) return getDomaxedgelen();
1379  bool result;
1380  OP_Utils::evalOpParm(result, thissop, "domaxedgelen", cookparms.getCookTime(), 0);
1381  return result;
1382  }
1383  fpreal64 getMaxedgelen() const { return myMaxedgelen; }
1384  void setMaxedgelen(fpreal64 val) { myMaxedgelen = val; }
1386  {
1387  SOP_Node *thissop = cookparms.getNode();
1388  if (!thissop) return getMaxedgelen();
1389  fpreal64 result;
1390  OP_Utils::evalOpParm(result, thissop, "maxedgelen", cookparms.getCookTime(), 0);
1391  return result;
1392  }
1393  bool getDodepth() const { return myDodepth; }
1394  void setDodepth(bool val) { myDodepth = val; }
1395  bool opDodepth(const SOP_NodeVerb::CookParms &cookparms) const
1396  {
1397  SOP_Node *thissop = cookparms.getNode();
1398  if (!thissop) return getDodepth();
1399  bool result;
1400  OP_Utils::evalOpParm(result, thissop, "dodepth", cookparms.getCookTime(), 0);
1401  return result;
1402  }
1403  int64 getEdgestep() const { return myEdgestep; }
1404  void setEdgestep(int64 val) { myEdgestep = val; }
1405  int64 opEdgestep(const SOP_NodeVerb::CookParms &cookparms) const
1406  {
1407  SOP_Node *thissop = cookparms.getNode();
1408  if (!thissop) return getEdgestep();
1409  int64 result;
1410  OP_Utils::evalOpParm(result, thissop, "edgestep", cookparms.getCookTime(), 0);
1411  return result;
1412  }
1413  const UT_StringHolder & getEdgeptgrp() const { return myEdgeptgrp; }
1414  void setEdgeptgrp(const UT_StringHolder & val) { myEdgeptgrp = val; }
1416  {
1417  SOP_Node *thissop = cookparms.getNode();
1418  if (!thissop) return getEdgeptgrp();
1420  OP_Utils::evalOpParm(result, thissop, "edgeptgrp", cookparms.getCookTime(), 0);
1421  return result;
1422  }
1423  bool getUnshared() const { return myUnshared; }
1424  void setUnshared(bool val) { myUnshared = val; }
1425  bool opUnshared(const SOP_NodeVerb::CookParms &cookparms) const
1426  {
1427  SOP_Node *thissop = cookparms.getNode();
1428  if (!thissop) return getUnshared();
1429  bool result;
1430  OP_Utils::evalOpParm(result, thissop, "unshared", cookparms.getCookTime(), 0);
1431  return result;
1432  }
1433  bool getBoundaryGroups() const { return myBoundaryGroups; }
1434  void setBoundaryGroups(bool val) { myBoundaryGroups = val; }
1435  bool opBoundaryGroups(const SOP_NodeVerb::CookParms &cookparms) const
1436  {
1437  SOP_Node *thissop = cookparms.getNode();
1438  if (!thissop) return getBoundaryGroups();
1439  bool result;
1440  OP_Utils::evalOpParm(result, thissop, "boundarygroups", cookparms.getCookTime(), 0);
1441  return result;
1442  }
1443  bool getGroupRandom() const { return myGroupRandom; }
1444  void setGroupRandom(bool val) { myGroupRandom = val; }
1445  bool opGroupRandom(const SOP_NodeVerb::CookParms &cookparms) const
1446  {
1447  SOP_Node *thissop = cookparms.getNode();
1448  if (!thissop) return getGroupRandom();
1449  bool result;
1450  OP_Utils::evalOpParm(result, thissop, "grouprandom", cookparms.getCookTime(), 0);
1451  return result;
1452  }
1453  fpreal64 getGlobalseed() const { return myGlobalseed; }
1454  void setGlobalseed(fpreal64 val) { myGlobalseed = val; }
1456  {
1457  SOP_Node *thissop = cookparms.getNode();
1458  if (!thissop) return getGlobalseed();
1459  fpreal64 result;
1460  OP_Utils::evalOpParm(result, thissop, "globalseed", cookparms.getCookTime(), 0);
1461  return result;
1462  }
1463  bool getUseseedattrib() const { return myUseseedattrib; }
1464  void setUseseedattrib(bool val) { myUseseedattrib = val; }
1465  bool opUseseedattrib(const SOP_NodeVerb::CookParms &cookparms) const
1466  {
1467  SOP_Node *thissop = cookparms.getNode();
1468  if (!thissop) return getUseseedattrib();
1469  bool result;
1470  OP_Utils::evalOpParm(result, thissop, "useseedattrib", cookparms.getCookTime(), 0);
1471  return result;
1472  }
1473  const UT_StringHolder & getSeedattrib() const { return mySeedattrib; }
1474  void setSeedattrib(const UT_StringHolder & val) { mySeedattrib = val; }
1476  {
1477  SOP_Node *thissop = cookparms.getNode();
1478  if (!thissop) return getSeedattrib();
1480  OP_Utils::evalOpParm(result, thissop, "seedattrib", cookparms.getCookTime(), 0);
1481  return result;
1482  }
1483  fpreal64 getPercent() const { return myPercent; }
1484  void setPercent(fpreal64 val) { myPercent = val; }
1486  {
1487  SOP_Node *thissop = cookparms.getNode();
1488  if (!thissop) return getPercent();
1489  fpreal64 result;
1490  OP_Utils::evalOpParm(result, thissop, "percent", cookparms.getCookTime(), 0);
1491  return result;
1492  }
1493 
1494 private:
1495  UT_StringHolder myGroupName;
1496  int64 myGrouptype;
1497  int64 myMergeop;
1498  bool myGroupBase;
1499  UT_StringHolder myBasegroup;
1500  bool myOrdered;
1501  int64 myGeotype;
1502  bool myGroupBounding;
1503  int64 myBoundtype;
1504  UT_Vector3D mySize;
1505  UT_Vector3D myT;
1506  bool myIncludenotwhollycontained;
1507  fpreal64 myIso;
1508  bool myInvertvolume;
1509  bool myGroupNormal;
1510  UT_StringHolder myCamerapath;
1511  bool myNonplanar;
1512  fpreal64 myNonplanartol;
1513  UT_Vector3D myDir;
1514  fpreal64 myAngle;
1515  bool myOppositenormals;
1516  bool myGroupEdges;
1517  bool myDominedgeangle;
1518  fpreal64 myMinedgeangle;
1519  bool myDomaxedgeangle;
1520  fpreal64 myMaxedgeangle;
1521  bool myEdgeAngleBetweenEdges;
1522  bool myDominedgelen;
1523  fpreal64 myMinedgelen;
1524  bool myDomaxedgelen;
1525  fpreal64 myMaxedgelen;
1526  bool myDodepth;
1527  int64 myEdgestep;
1528  UT_StringHolder myEdgeptgrp;
1529  bool myUnshared;
1530  bool myBoundaryGroups;
1531  bool myGroupRandom;
1532  fpreal64 myGlobalseed;
1533  bool myUseseedattrib;
1534  UT_StringHolder mySeedattrib;
1535  fpreal64 myPercent;
1536 
1537 };
void setIncludenotwhollycontained(bool val)
bool getEdgeAngleBetweenEdges() const
void getNestParmValue(TempIndex idx, TempIndex instance, exint &value) const override
static void saveData(std::ostream &os, UT_StringHolder s)
void setMaxedgeangle(fpreal64 val)
fpreal64 getPercent() const
bool opUnshared(const SOP_NodeVerb::CookParms &cookparms) const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_SharedPtr< UT_Ramp > &value) const override
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_StringHolder &value) override
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector3D &value) override
const UT_StringHolder & getGroupName() const
void setNestParmValue(TempIndex idx, TempIndex instance, const PRM_DataItemHandle &value) override
static void loadData(UT_IStream &is, bool &v)
int int32
Definition: SYS_Types.h:39
const UT_StringHolder & getCamerapath() const
SOP_Node * getNode() const
Definition: SOP_NodeVerb.h:347
void setGrouptype(Grouptype val)
bool operator!=(const SOP_GroupCreateParms &src) const
void setDir(UT_Vector3D val)
static void saveData(std::ostream &os, UT_Matrix4D v)
bool opGroupRandom(const SOP_NodeVerb::CookParms &cookparms) const
void getNestParmValue(TempIndex idx, TempIndex instance, fpreal &value) const override
fpreal64 opMaxedgeangle(const SOP_NodeVerb::CookParms &cookparms) const
void setBasegroup(const UT_StringHolder &val)
void setSize(UT_Vector3D val)
exint getNestNumParms(TempIndex idx) const override
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector4D &value) override
static void saveData(std::ostream &os, int64 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
const GLdouble * v
Definition: glcorearb.h:837
fpreal getTime() const
Definition: OP_Context.h:62
UT_Vector3D opDir(const SOP_NodeVerb::CookParms &cookparms) const
static void saveData(std::ostream &os, bool v)
bool opInvertvolume(const SOP_NodeVerb::CookParms &cookparms) const
bool opDomaxedgelen(const SOP_NodeVerb::CookParms &cookparms) const
void doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
UT_StringHolder opEdgeptgrp(const SOP_NodeVerb::CookParms &cookparms) const
const OP_Context & context() const
Definition: OP_NodeParms.h:97
static void loadData(UT_IStream &is, UT_Vector3D &v)
constexpr SYS_FORCE_INLINE T & z() noexcept
Definition: UT_Vector3.h:667
int64 exint
Definition: SYS_Types.h:125
void setGroupName(const UT_StringHolder &val)
void setEdgeAngleBetweenEdges(bool val)
bool opDominedgelen(const SOP_NodeVerb::CookParms &cookparms) const
static void saveData(std::ostream &os, UT_Matrix2D v)
void setMinedgeangle(fpreal64 val)
void setCamerapath(const UT_StringHolder &val)
UT_StringHolder opSeedattrib(const SOP_NodeVerb::CookParms &cookparms) const
bool operator==(const SOP_GroupCreateParms &src) const
SYS_FORCE_INLINE const char * buffer() const
GLdouble s
Definition: glad.h:3009
Boundtype getBoundtype() const
static void loadData(UT_IStream &is, UT_Vector4D &v)
bool opGroupEdges(const SOP_NodeVerb::CookParms &cookparms) const
void doGetParmValue(TempIndex idx, TempIndex instance, T &value) const
An output stream object that owns its own string buffer storage.
UT_Vector3D getDir() const
bool opDominedgeangle(const SOP_NodeVerb::CookParms &cookparms) const
bool opDodepth(const SOP_NodeVerb::CookParms &cookparms) const
**But if you need a result
Definition: thread.h:613
ParmType getNestParmType(TempIndex fieldnum) const override
static void loadData(UT_IStream &is, UT_Vector2D &v)
const char * getNestParmName(TempIndex fieldnum) const override
fpreal64 getNonplanartol() const
exint nodeIdx() const
Definition: OP_NodeParms.h:95
fpreal64 opIso(const SOP_NodeVerb::CookParms &cookparms) const
static PRM_DataItemHandle parseBinary(const char *type, UT_IStream &is)
const UT_WorkBuffer & str()
Returns a read-only reference to the underlying UT_WorkBuffer.
const UT_StringHolder & getEdgeptgrp() const
bool opGroupNormal(const SOP_NodeVerb::CookParms &cookparms) const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix4D &value) override
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector4.h:491
UT_Vector3D getSize() const
UT_Vector3D opT(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
fpreal64 opGlobalseed(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getBasegroup() const
static void loadData(UT_IStream &is, UT_Vector3I &v)
bool operator==(const BaseDimensions< T > &a, const BaseDimensions< Y > &b)
Definition: Dimensions.h:137
static void loadData(UT_IStream &is, PRM_DataItemHandle &v)
int64 opGeotype(const SOP_NodeVerb::CookParms &cookparms) const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector4D &value) const override
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
void setBoundtype(Boundtype val)
exint length() const
fpreal64 opMaxedgelen(const SOP_NodeVerb::CookParms &cookparms) const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix3D &value) override
bool opDomaxedgeangle(const SOP_NodeVerb::CookParms &cookparms) const
SYS_FORCE_INLINE const char * buffer() const
std::shared_ptr< T > UT_SharedPtr
Wrapper around std::shared_ptr.
Definition: UT_SharedPtr.h:36
static void loadData(UT_IStream &is, int64 &v)
constexpr SYS_FORCE_INLINE T & z() noexcept
Definition: UT_Vector4.h:495
void buildFromOp(const OP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_SharedPtr< UT_Ramp > &value) override
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix4D &value) const override
const UT_StringHolder & getSeedattrib() const
fpreal64 opMinedgeangle(const SOP_NodeVerb::CookParms &cookparms) const
void copyFrom(const OP_NodeParms *src) override
const OP_GraphProxy * graph() const
Definition: OP_NodeParms.h:94
#define SYS_FORCE_INLINE
Definition: SYS_Inline.h:45
static void loadData(UT_IStream &is, UT_Vector4I &v)
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix2D &value) override
bool opGroupBounding(const SOP_NodeVerb::CookParms &cookparms) const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector2D &value) const override
bool opUseseedattrib(const SOP_NodeVerb::CookParms &cookparms) const
int64 opEdgestep(const SOP_NodeVerb::CookParms &cookparms) const
long long int64
Definition: SYS_Types.h:116
bool isParmColorRamp(exint idx) const override
fpreal64 getGlobalseed() const
bool opOrdered(const SOP_NodeVerb::CookParms &cookparms) const
void setPercent(fpreal64 val)
UT_Vector3T< fpreal64 > UT_Vector3D
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector3D &value) const override
UT_StringHolder opBasegroup(const SOP_NodeVerb::CookParms &cookparms) const
void setMinedgelen(fpreal64 val)
static void loadData(UT_IStream &is, UT_Matrix3D &v)
static void loadData(UT_IStream &is, UT_Matrix4D &v)
virtual void evalOpParm(int64 &v, NodeIdx node, const char *parmname, fpreal time, DEP_MicroNode *depnode) const =0
Grouptype opGrouptype(const SOP_NodeVerb::CookParms &cookparms) const
void setAngle(fpreal64 val)
Boundtype opBoundtype(const SOP_NodeVerb::CookParms &cookparms) const
static void saveData(std::ostream &os, UT_Vector4D v)
void saveBinary(std::ostream &os) const
Save string to binary stream.
Definition: UT_String.h:296
bool getIncludenotwhollycontained() const
void setMaxedgelen(fpreal64 val)
GT_API const UT_StringHolder version
fpreal64 getMaxedgeangle() const
static void loadData(UT_IStream &is, UT_Vector2I &v)
bool opNonplanar(const SOP_NodeVerb::CookParms &cookparms) const
void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
void setGlobalseed(fpreal64 val)
SYS_FORCE_INLINE UT_StringHolder getToken(Grouptype enum_value)
static void loadData(UT_IStream &is, fpreal64 &v)
static void loadData(UT_IStream &is, UT_SharedPtr< UT_Ramp > &v)
fpreal64 opPercent(const SOP_NodeVerb::CookParms &cookparms) const
static void saveData(std::ostream &os, PRM_DataItemHandle s)
UT_StringHolder opCamerapath(const SOP_NodeVerb::CookParms &cookparms) const
void setEdgeptgrp(const UT_StringHolder &val)
UT_Vector3D getT() const
void save(std::ostream &os) const
fpreal64 fpreal
Definition: SYS_Types.h:277
DEP_MicroNode * depnode() const
Definition: OP_NodeParms.h:99
void setSeedattrib(const UT_StringHolder &val)
LeafData & operator=(const LeafData &)=delete
Utility class for containing a color ramp.
Definition: UT_Ramp.h:92
fpreal64 opMinedgelen(const SOP_NodeVerb::CookParms &cookparms) const
void setNestParmValue(TempIndex idx, TempIndex instance, const fpreal &value) override
static void loadData(UT_IStream &is, UT_Matrix2D &v)
Mergeop opMergeop(const SOP_NodeVerb::CookParms &cookparms) const
constexpr SYS_FORCE_INLINE T & w() noexcept
Definition: UT_Vector4.h:497
GLuint GLfloat * val
Definition: glcorearb.h:1608
#define SOP_API
Definition: SOP_API.h:10
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix2D &value) const override
static void saveData(std::ostream &os, UT_Vector3D v)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_StringHolder &value) const override
fpreal64 opNonplanartol(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, UT_StringHolder &v)
fpreal getCookTime() const
Definition: SOP_NodeVerb.h:361
void setMergeop(Mergeop val)
const char * findChar(int c) const
Definition: UT_String.h:1395
#define UT_ASSERT(ZZ)
Definition: UT_Assert.h:156
Definition: core.h:1131
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector2D &value) override
void setT(UT_Vector3D val)
GLboolean r
Definition: glcorearb.h:1222
void setNonplanartol(fpreal64 val)
static void saveData(std::ostream &os, UT_Vector2D v)
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector3.h:665
fpreal64 opAngle(const SOP_NodeVerb::CookParms &cookparms) const
type
Definition: core.h:1059
Grouptype getGrouptype() const
static void saveData(std::ostream &os, UT_SharedPtr< UT_Ramp > s)
bool opIncludenotwhollycontained(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 getMinedgeangle() const
void setNestParmValue(TempIndex idx, TempIndex instance, const exint &value) override
static void saveData(std::ostream &os, fpreal64 v)
bool opBoundaryGroups(const SOP_NodeVerb::CookParms &cookparms) const
UT_SharedPtr< const PRM_DataItem > PRM_DataItemHandle
Definition: PRM_Parm.h:97
fpreal64 getMaxedgelen() const
static void saveData(std::ostream &os, UT_Matrix3D v)
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector2.h:425
UT_StringHolder opGroupName(const SOP_NodeVerb::CookParms &cookparms) const
SYS_FORCE_INLINE bool isstring() const
void loadFromOpSubclass(const LoadParms &loadparms) override
bool opGroupBase(const SOP_NodeVerb::CookParms &cookparms) const
SYS_FORCE_INLINE void strncpy(const char *src, exint maxlen)
bool opOppositenormals(const SOP_NodeVerb::CookParms &cookparms) const
UT_Vector3D opSize(const SOP_NodeVerb::CookParms &cookparms) const
bool load(UT_IStream &is)
bool opEdgeAngleBetweenEdges(const SOP_NodeVerb::CookParms &cookparms) const
GLenum src
Definition: glcorearb.h:1793
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector3.h:663
fpreal64 getMinedgelen() const