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