HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
SOP_UVLayout-3.0.proto.h
Go to the documentation of this file.
1 /* Automagically Generated by generate_proto.py
2  * Do not Edit
3  */
4 #pragma once
5 
6 #include <SOP/SOP_API.h>
7 #include <SOP/SOP_NodeVerb.h>
8 #include <SOP/SOP_GraphProxy.h>
9 
10 #include <OP/OP_Utils.h>
11 #include <PRM/PRM_Parm.h>
12 #include <UT/UT_IStream.h>
13 #include <UT/UT_NTStreamUtil.h>
14 #include <UT/UT_Ramp.h>
15 #include <UT/UT_SharedPtr.h>
16 #include <UT/UT_StringHolder.h>
17 #include <UT/UT_StringStream.h>
18 #include <UT/UT_VectorTypes.h>
19 #include <UT/UT_EnvControl.h>
20 #include <SYS/SYS_Types.h>
21 
22 class DEP_MicroNode;
23 namespace SOP_UVLayout_3_0Enums
24 {
25  enum class UVProjPlane
26  {
27  XY = 0,
28  YZ,
29  ZX
30  };
31  enum class AxisAlignment
32  {
33  NONE = 0,
34  INTRINSIC,
35  EXTRINSIC
36  };
37  enum class Scaling
38  {
39  AUTO = 0,
40  CUSTOM
41  };
42  enum class RotationStep
43  {
44  NONE = 0,
45  PI,
46  PI2,
47  PI4,
48  PI8,
49  PI16,
50  PI32,
51  CUSTOM
52  };
53  enum class Resolution
54  {
55  RES1 = 0,
56  RES2,
57  RES3,
58  RES4,
59  RES5,
60  CUSTOM
61  };
62  enum class TargetType
63  {
64  BOXES = 0,
65  UDIM,
66  GEO
67  };
68  enum class TargetProjPlane
69  {
70  XY = 0,
71  YZ,
72  ZX
73  };
74 }
75 
76 
78 {
79 public:
80  static int version() { return 1; }
81  struct Rects
82  {
83  bool rect_use;
86 
87 
89  {
90  rect_use = true;
91  rect_center = UT_Vector2D(0.5,0.5);
92  rect_size = UT_Vector2D(1,1);
93 
94  }
95 
96  bool operator==(const Rects &src) const
97  {
98  if (rect_use != src.rect_use) return false;
99  if (rect_center != src.rect_center) return false;
100  if (rect_size != src.rect_size) return false;
101 
102  return true;
103  }
104  bool operator!=(const Rects &src) const
105  {
106  return !operator==(src);
107  }
108 
109  };
110 
112  {
114 
115  buf.strcat("[ ");
116  for (int i = 0; i < list.entries(); i++)
117  {
118  if (i)
119  buf.strcat(", ");
120  buf.strcat("( ");
121  buf.append("");
122  buf.appendSprintf("%s", (list(i).rect_use) ? "true" : "false");
123  buf.append(", ");
124  buf.appendSprintf("(%f, %f)", list(i).rect_center.x(), list(i).rect_center.y());
125  buf.append(", ");
126  buf.appendSprintf("(%f, %f)", list(i).rect_size.x(), list(i).rect_size.y());
127 
128  buf.strcat(" )");
129  }
130  buf.strcat(" ]");
131 
133  return result;
134  }
135 
137  {
138  myUVAttr = "uv"_UTsh;
139  myUVProjPlane = 0;
140  myGroup = ""_UTsh;
141  mySeparatorEdges = ""_UTsh;
142  myUseIslandAttr = false;
143  myIslandAttr = "island"_UTsh;
144  myUseTargetAttr = false;
145  myTargetAttr = "udim"_UTsh;
146  myTargetOverrides = ""_UTsh;
147  myUseIslandScaleAttr = false;
148  myIslandScaleAttr = "iscale"_UTsh;
149  myScaleOverrides = ""_UTsh;
150  myUseIslandOffsetAttr = false;
151  myIslandOffsetAttr = "ioffset"_UTsh;
152  myOffsetOverrides = ""_UTsh;
153  myCorrectAreas = false;
154  myAxisAlignment = 1;
155  myScaling = 0;
156  myScale = 1;
157  myRotationStep = 0;
158  myCircleDivs = 1;
159  myPackBetween = false;
160  myPackInCavities = true;
161  myPadding = 1;
162  myPadBoundaries = false;
163  myExpandPadding = false;
164  myIterations = 1;
165  myResolution = 2;
166  myCustomResolution = 1024;
167  myConnectivityTolerance = 1e-05;
168  myScaleTolerance = 0.005;
169  myRandSeed = 5489;
170  myTargetType = 0;
171  myUseDefaultTarget = false;
172  myDefaultTarget = 0;
173  myUseDefaultUdimTarget = false;
174  myDefaultUdimTarget = 1001;
175  myRects.setSize(1);
176  myTileSize = UT_Vector2D(1,1);
177  myNumColumns = 10;
178  myStartingUdim = 1001;
179  myTargetUVAttr = "uv"_UTsh;
180  myTargetProjPlane = 0;
181  myTargetGroup = ""_UTsh;
182  myTargetSeparatorEdges = ""_UTsh;
183  myUseTargetIslandAttr = false;
184  myTargetIslandAttr = "targetisland"_UTsh;
185  myStackIslands = false;
186  myStackMirrored = false;
187  myStackOnNonGroup = false;
188  myStackingLengthTolerance = 0.02;
189  myGenerateNonpackedPolys = false;
190  myNonpackedPolys = "nonpacked"_UTsh;
191  myGenerateIslandAttr = false;
192  myOutputIslandAttr = "island"_UTsh;
193  myGenerateTargetAttr = false;
194  myOutputTargetAttr = "target"_UTsh;
195 
196  }
197 
198  explicit SOP_UVLayout_3_0Parms(const SOP_UVLayout_3_0Parms &) = default;
200  SOP_UVLayout_3_0Parms(SOP_UVLayout_3_0Parms &&) noexcept = default;
201  SOP_UVLayout_3_0Parms &operator=(SOP_UVLayout_3_0Parms &&) noexcept = default;
202 
203  ~SOP_UVLayout_3_0Parms() override {}
204 
206  {
207  if (myUVAttr != src.myUVAttr) return false;
208  if (myUVProjPlane != src.myUVProjPlane) return false;
209  if (myGroup != src.myGroup) return false;
210  if (mySeparatorEdges != src.mySeparatorEdges) return false;
211  if (myUseIslandAttr != src.myUseIslandAttr) return false;
212  if (myIslandAttr != src.myIslandAttr) return false;
213  if (myUseTargetAttr != src.myUseTargetAttr) return false;
214  if (myTargetAttr != src.myTargetAttr) return false;
215  if (myTargetOverrides != src.myTargetOverrides) return false;
216  if (myUseIslandScaleAttr != src.myUseIslandScaleAttr) return false;
217  if (myIslandScaleAttr != src.myIslandScaleAttr) return false;
218  if (myScaleOverrides != src.myScaleOverrides) return false;
219  if (myUseIslandOffsetAttr != src.myUseIslandOffsetAttr) return false;
220  if (myIslandOffsetAttr != src.myIslandOffsetAttr) return false;
221  if (myOffsetOverrides != src.myOffsetOverrides) return false;
222  if (myCorrectAreas != src.myCorrectAreas) return false;
223  if (myAxisAlignment != src.myAxisAlignment) return false;
224  if (myScaling != src.myScaling) return false;
225  if (myScale != src.myScale) return false;
226  if (myRotationStep != src.myRotationStep) return false;
227  if (myCircleDivs != src.myCircleDivs) return false;
228  if (myPackBetween != src.myPackBetween) return false;
229  if (myPackInCavities != src.myPackInCavities) return false;
230  if (myPadding != src.myPadding) return false;
231  if (myPadBoundaries != src.myPadBoundaries) return false;
232  if (myExpandPadding != src.myExpandPadding) return false;
233  if (myIterations != src.myIterations) return false;
234  if (myResolution != src.myResolution) return false;
235  if (myCustomResolution != src.myCustomResolution) return false;
236  if (myConnectivityTolerance != src.myConnectivityTolerance) return false;
237  if (myScaleTolerance != src.myScaleTolerance) return false;
238  if (myRandSeed != src.myRandSeed) return false;
239  if (myTargetType != src.myTargetType) return false;
240  if (myUseDefaultTarget != src.myUseDefaultTarget) return false;
241  if (myDefaultTarget != src.myDefaultTarget) return false;
242  if (myUseDefaultUdimTarget != src.myUseDefaultUdimTarget) return false;
243  if (myDefaultUdimTarget != src.myDefaultUdimTarget) return false;
244  if (myRects != src.myRects) return false;
245  if (myTileSize != src.myTileSize) return false;
246  if (myNumColumns != src.myNumColumns) return false;
247  if (myStartingUdim != src.myStartingUdim) return false;
248  if (myTargetUVAttr != src.myTargetUVAttr) return false;
249  if (myTargetProjPlane != src.myTargetProjPlane) return false;
250  if (myTargetGroup != src.myTargetGroup) return false;
251  if (myTargetSeparatorEdges != src.myTargetSeparatorEdges) return false;
252  if (myUseTargetIslandAttr != src.myUseTargetIslandAttr) return false;
253  if (myTargetIslandAttr != src.myTargetIslandAttr) return false;
254  if (myStackIslands != src.myStackIslands) return false;
255  if (myStackMirrored != src.myStackMirrored) return false;
256  if (myStackOnNonGroup != src.myStackOnNonGroup) return false;
257  if (myStackingLengthTolerance != src.myStackingLengthTolerance) return false;
258  if (myGenerateNonpackedPolys != src.myGenerateNonpackedPolys) return false;
259  if (myNonpackedPolys != src.myNonpackedPolys) return false;
260  if (myGenerateIslandAttr != src.myGenerateIslandAttr) return false;
261  if (myOutputIslandAttr != src.myOutputIslandAttr) return false;
262  if (myGenerateTargetAttr != src.myGenerateTargetAttr) return false;
263  if (myOutputTargetAttr != src.myOutputTargetAttr) return false;
264 
265  return true;
266  }
268  {
269  return !operator==(src);
270  }
278 
279 
280 
281  void buildFromOp(const OP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
282  {
283  myUVAttr = "uv"_UTsh;
284  if (true)
285  graph->evalOpParm(myUVAttr, nodeidx, "uvattrib", time, 0);
286  myUVProjPlane = 0;
287  if (true)
288  graph->evalOpParm(myUVProjPlane, nodeidx, "projplane", time, 0);
289  myGroup = ""_UTsh;
290  if (true)
291  graph->evalOpParm(myGroup, nodeidx, "group", time, 0);
292  mySeparatorEdges = ""_UTsh;
293  if (true)
294  graph->evalOpParm(mySeparatorEdges, nodeidx, "separatoredges", time, 0);
295  myUseIslandAttr = false;
296  if (true)
297  graph->evalOpParm(myUseIslandAttr, nodeidx, "useislandattr", time, 0);
298  myIslandAttr = "island"_UTsh;
299  if (true && ( (true&&!(((getUseIslandAttr()==0)))) ) )
300  graph->evalOpParm(myIslandAttr, nodeidx, "islandattr", time, 0);
301  myUseTargetAttr = false;
302  if (true)
303  graph->evalOpParm(myUseTargetAttr, nodeidx, "usetargetattr", time, 0);
304  myTargetAttr = "udim"_UTsh;
305  if (true && ( (true&&!(((getUseTargetAttr()==0)))) ) )
306  graph->evalOpParm(myTargetAttr, nodeidx, "targetattr", time, 0);
307  myTargetOverrides = ""_UTsh;
308  if (true)
309  graph->evalOpParm(myTargetOverrides, nodeidx, "targetoverrides", time, 0);
310  myUseIslandScaleAttr = false;
311  if (true)
312  graph->evalOpParm(myUseIslandScaleAttr, nodeidx, "useislandscaleattr", time, 0);
313  myIslandScaleAttr = "iscale"_UTsh;
314  if (true && ( (true&&!(((getUseIslandScaleAttr()==0)))) ) )
315  graph->evalOpParm(myIslandScaleAttr, nodeidx, "islandscaleattr", time, 0);
316  myScaleOverrides = ""_UTsh;
317  if (true)
318  graph->evalOpParm(myScaleOverrides, nodeidx, "scaleoverrides", time, 0);
319  myUseIslandOffsetAttr = false;
320  if (true)
321  graph->evalOpParm(myUseIslandOffsetAttr, nodeidx, "useislandsetattr", time, 0);
322  myIslandOffsetAttr = "ioffset"_UTsh;
323  if (true && ( (true&&!(((getUseIslandOffsetAttr()==0)))) ) )
324  graph->evalOpParm(myIslandOffsetAttr, nodeidx, "islandoffsetattr", time, 0);
325  myOffsetOverrides = ""_UTsh;
326  if (true)
327  graph->evalOpParm(myOffsetOverrides, nodeidx, "offsetoverrides", time, 0);
328  myCorrectAreas = false;
329  if (true)
330  graph->evalOpParm(myCorrectAreas, nodeidx, "correctareas", time, 0);
331  myAxisAlignment = 1;
332  if (true)
333  graph->evalOpParm(myAxisAlignment, nodeidx, "axisalignislands", time, 0);
334  myScaling = 0;
335  if (true)
336  graph->evalOpParm(myScaling, nodeidx, "scaling", time, 0);
337  myScale = 1;
338  if (true && ( (true&&!(((int64(getScaling())!=1)))) ) )
339  graph->evalOpParm(myScale, nodeidx, "scale", time, 0);
340  myRotationStep = 0;
341  if (true)
342  graph->evalOpParm(myRotationStep, nodeidx, "rotstep", time, 0);
343  myCircleDivs = 1;
344  if (true && ( (true&&!(((int64(getRotationStep())!=7)))) ) )
345  graph->evalOpParm(myCircleDivs, nodeidx, "circledivs", time, 0);
346  myPackBetween = false;
347  if (true)
348  graph->evalOpParm(myPackBetween, nodeidx, "packbetween", time, 0);
349  myPackInCavities = true;
350  if (true)
351  graph->evalOpParm(myPackInCavities, nodeidx, "packincavities", time, 0);
352  myPadding = 1;
353  if (true)
354  graph->evalOpParm(myPadding, nodeidx, "padding", time, 0);
355  myPadBoundaries = false;
356  if (true)
357  graph->evalOpParm(myPadBoundaries, nodeidx, "paddingboundary", time, 0);
358  myExpandPadding = false;
359  if (true)
360  graph->evalOpParm(myExpandPadding, nodeidx, "expandpadding", time, 0);
361  myIterations = 1;
362  if (true)
363  graph->evalOpParm(myIterations, nodeidx, "iterations", time, 0);
364  myResolution = 2;
365  if (true)
366  graph->evalOpParm(myResolution, nodeidx, "resolution", time, 0);
367  myCustomResolution = 1024;
368  if (true && ( (true&&!(((int64(getResolution())!=5)))) ) )
369  graph->evalOpParm(myCustomResolution, nodeidx, "customresolution", time, 0);
370  myConnectivityTolerance = 1e-05;
371  if (true)
372  graph->evalOpParm(myConnectivityTolerance, nodeidx, "uvtolerance", time, 0);
373  myScaleTolerance = 0.005;
374  if (true && ( (true&&!(((int64(getScaling())==1)))) ) )
375  graph->evalOpParm(myScaleTolerance, nodeidx, "scaletolerance", time, 0);
376  myRandSeed = 5489;
377  if (true && ( (true&&!(((int64(getIterations())==1)))) ) )
378  graph->evalOpParm(myRandSeed, nodeidx, "randseed", time, 0);
379  myTargetType = 0;
380  if (true)
381  graph->evalOpParm(myTargetType, nodeidx, "targettype", time, 0);
382  myUseDefaultTarget = false;
383  if (true && ( (true&&!(((int64(getTargetType())==1)))) ) )
384  graph->evalOpParm(myUseDefaultTarget, nodeidx, "usedefaulttarget", time, 0);
385  myDefaultTarget = 0;
386  if (true && ( (true&&!(((getUseDefaultTarget()==0))||((int64(getTargetType())==1)))) ) )
387  graph->evalOpParm(myDefaultTarget, nodeidx, "defaulttarget", time, 0);
388  myUseDefaultUdimTarget = false;
389  if (true && ( (true&&!(((int64(getTargetType())!=1)))) ) )
390  graph->evalOpParm(myUseDefaultUdimTarget, nodeidx, "usedefaultudimtarget", time, 0);
391  myDefaultUdimTarget = 1001;
392  if (true && ( (true&&!(((getUseDefaultUdimTarget()==0))||((int64(getTargetType())!=1)))) ) )
393  graph->evalOpParm(myDefaultUdimTarget, nodeidx, "defaultudimtarget", time, 0);
394  if (true && ( (!(((int64(getTargetType())!=0))||((int64(getTargetType())!=0)))) ) )
395  {
396  int64 length = 0;
397  graph->evalOpParm(length, nodeidx, "rects", time, 0);
398  if (length < 0) length = 0;
399  myRects.setSize(length);
400  for (exint i = 0; i < length; i++)
401  {
402  int parmidx[1];
403  int offsets[1];
404  parmidx[0] = i+0;
405  offsets[0] = 0;
406  auto && _curentry = myRects(i);
407  (void) _curentry;
408  _curentry.rect_use = true;
409  if (true && ( (!(((int64(getTargetType())!=0))||((int64(getTargetType())!=0)))) ) && ( (true&&!(((int64(getTargetType())!=0)))) ) )
410  graph->evalOpParmInst(_curentry.rect_use, nodeidx, "rect_use#", parmidx, offsets, time, 0, 2-1);
411  _curentry.rect_center = UT_Vector2D(0.5,0.5);
412  if (true && ( (!(((int64(getTargetType())!=0))||((int64(getTargetType())!=0)))) ) && ( (true&&!(((int64(getTargetType())!=0))||((_curentry.rect_use==0)))) ) )
413  graph->evalOpParmInst(_curentry.rect_center, nodeidx, "rect_center#", parmidx, offsets, time, 0, 2-1);
414  _curentry.rect_size = UT_Vector2D(1,1);
415  if (true && ( (!(((int64(getTargetType())!=0))||((int64(getTargetType())!=0)))) ) && ( (true&&!(((int64(getTargetType())!=0))||((_curentry.rect_use==0)))) ) )
416  graph->evalOpParmInst(_curentry.rect_size, nodeidx, "rect_size#", parmidx, offsets, time, 0, 2-1);
417 
418  }
419  }
420  else
421  myRects.clear();
422  myTileSize = UT_Vector2D(1,1);
423  if (true && ( (true&&!(((int64(getTargetType())!=1)))) ) )
424  graph->evalOpParm(myTileSize, nodeidx, "tilesize", time, 0);
425  myNumColumns = 10;
426  if (true && ( (true&&!(((int64(getTargetType())!=1)))) ) )
427  graph->evalOpParm(myNumColumns, nodeidx, "numcolumns", time, 0);
428  myStartingUdim = 1001;
429  if (true && ( (true&&!(((int64(getTargetType())!=1)))) ) )
430  graph->evalOpParm(myStartingUdim, nodeidx, "startingudim", time, 0);
431  myTargetUVAttr = "uv"_UTsh;
432  if (true && ( (true&&!(((int64(getTargetType())!=2))||(((graph->getInput(nodeidx,1)>=0)==0)))) ) )
433  graph->evalOpParm(myTargetUVAttr, nodeidx, "targetuvattrib", time, 0);
434  myTargetProjPlane = 0;
435  if (true && ( (true&&!(((int64(getTargetType())!=2))||(((graph->getInput(nodeidx,1)>=0)==0)))) ) )
436  graph->evalOpParm(myTargetProjPlane, nodeidx, "targetprojplane", time, 0);
437  myTargetGroup = ""_UTsh;
438  if (true && ( (true&&!((((graph->getInput(nodeidx,1)>=0)==0))||((int64(getTargetType())!=2)))) ) )
439  graph->evalOpParm(myTargetGroup, nodeidx, "targetgroup", time, 0);
440  myTargetSeparatorEdges = ""_UTsh;
441  if (true && ( (true&&!(((int64(getTargetType())!=2))||(((graph->getInput(nodeidx,1)>=0)==0))||((int64(getTargetType())!=2)))) ) )
442  graph->evalOpParm(myTargetSeparatorEdges, nodeidx, "targetseparatoredges", time, 0);
443  myUseTargetIslandAttr = false;
444  if (true && ( (true&&!(((int64(getTargetType())!=2))||(((graph->getInput(nodeidx,1)>=0)==0))||((int64(getTargetType())!=2)))) ) )
445  graph->evalOpParm(myUseTargetIslandAttr, nodeidx, "usetargetislandattr", time, 0);
446  myTargetIslandAttr = "targetisland"_UTsh;
447  if (true && ( (true&&!(((int64(getTargetType())!=2))||((getUseTargetIslandAttr()==0))||((int64(getTargetType())!=2)))) ) )
448  graph->evalOpParm(myTargetIslandAttr, nodeidx, "targetislandattr", time, 0);
449  myStackIslands = false;
450  if (true)
451  graph->evalOpParm(myStackIslands, nodeidx, "stackislands", time, 0);
452  myStackMirrored = false;
453  if (true && ( (true&&!(((getStackIslands()==0)))) ) )
454  graph->evalOpParm(myStackMirrored, nodeidx, "invertedoverlays", time, 0);
455  myStackOnNonGroup = false;
456  if (true && ( (true&&!(((getStackIslands()==0)))) ) )
457  graph->evalOpParm(myStackOnNonGroup, nodeidx, "stackonnongroup", time, 0);
458  myStackingLengthTolerance = 0.02;
459  if (true && ( (true&&!(((getStackIslands()==0)))) ) )
460  graph->evalOpParm(myStackingLengthTolerance, nodeidx, "overlaytolerance", time, 0);
461  myGenerateNonpackedPolys = false;
462  if (true)
463  graph->evalOpParm(myGenerateNonpackedPolys, nodeidx, "generatenonpackedpoly", time, 0);
464  myNonpackedPolys = "nonpacked"_UTsh;
465  if (true && ( (true&&!(((getGenerateNonpackedPolys()==0)))) ) )
466  graph->evalOpParm(myNonpackedPolys, nodeidx, "nonpackedpolys", time, 0);
467  myGenerateIslandAttr = false;
468  if (true)
469  graph->evalOpParm(myGenerateIslandAttr, nodeidx, "generateislandattr", time, 0);
470  myOutputIslandAttr = "island"_UTsh;
471  if (true && ( (true&&!(((getGenerateIslandAttr()==0)))) ) )
472  graph->evalOpParm(myOutputIslandAttr, nodeidx, "outputislandattr", time, 0);
473  myGenerateTargetAttr = false;
474  if (true)
475  graph->evalOpParm(myGenerateTargetAttr, nodeidx, "generatetargetattr", time, 0);
476  myOutputTargetAttr = "target"_UTsh;
477  if (true && ( (true&&!(((getGenerateTargetAttr()==0)))) ) )
478  graph->evalOpParm(myOutputTargetAttr, nodeidx, "outputtargetattr", time, 0);
479 
480  }
481 
482 
483  void loadFromOpSubclass(const LoadParms &loadparms) override
484  {
485  buildFromOp(loadparms.graph(), loadparms.nodeIdx(), loadparms.context().getTime(), loadparms.depnode());
486  }
487 
488 
489  void copyFrom(const OP_NodeParms *src) override
490  {
491  *this = *((const SOP_UVLayout_3_0Parms *)src);
492  }
493 
494  template <typename T>
495  void
496  doGetParmValue(TempIndex idx, TempIndex instance, T &value) const
497  {
498  if (idx.size() < 1)
499  return;
500  UT_ASSERT(idx.size() == instance.size()+1);
501  if (idx.size() != instance.size()+1)
502  return;
503  switch (idx[0])
504  {
505  case 0:
506  coerceValue(value, myUVAttr);
507  break;
508  case 1:
509  coerceValue(value, myUVProjPlane);
510  break;
511  case 2:
512  coerceValue(value, myGroup);
513  break;
514  case 3:
515  coerceValue(value, mySeparatorEdges);
516  break;
517  case 4:
518  coerceValue(value, myUseIslandAttr);
519  break;
520  case 5:
521  coerceValue(value, myIslandAttr);
522  break;
523  case 6:
524  coerceValue(value, myUseTargetAttr);
525  break;
526  case 7:
527  coerceValue(value, myTargetAttr);
528  break;
529  case 8:
530  coerceValue(value, myTargetOverrides);
531  break;
532  case 9:
533  coerceValue(value, myUseIslandScaleAttr);
534  break;
535  case 10:
536  coerceValue(value, myIslandScaleAttr);
537  break;
538  case 11:
539  coerceValue(value, myScaleOverrides);
540  break;
541  case 12:
542  coerceValue(value, myUseIslandOffsetAttr);
543  break;
544  case 13:
545  coerceValue(value, myIslandOffsetAttr);
546  break;
547  case 14:
548  coerceValue(value, myOffsetOverrides);
549  break;
550  case 15:
551  coerceValue(value, myCorrectAreas);
552  break;
553  case 16:
554  coerceValue(value, myAxisAlignment);
555  break;
556  case 17:
557  coerceValue(value, myScaling);
558  break;
559  case 18:
560  coerceValue(value, myScale);
561  break;
562  case 19:
563  coerceValue(value, myRotationStep);
564  break;
565  case 20:
566  coerceValue(value, myCircleDivs);
567  break;
568  case 21:
569  coerceValue(value, myPackBetween);
570  break;
571  case 22:
572  coerceValue(value, myPackInCavities);
573  break;
574  case 23:
575  coerceValue(value, myPadding);
576  break;
577  case 24:
578  coerceValue(value, myPadBoundaries);
579  break;
580  case 25:
581  coerceValue(value, myExpandPadding);
582  break;
583  case 26:
584  coerceValue(value, myIterations);
585  break;
586  case 27:
587  coerceValue(value, myResolution);
588  break;
589  case 28:
590  coerceValue(value, myCustomResolution);
591  break;
592  case 29:
593  coerceValue(value, myConnectivityTolerance);
594  break;
595  case 30:
596  coerceValue(value, myScaleTolerance);
597  break;
598  case 31:
599  coerceValue(value, myRandSeed);
600  break;
601  case 32:
602  coerceValue(value, myTargetType);
603  break;
604  case 33:
605  coerceValue(value, myUseDefaultTarget);
606  break;
607  case 34:
608  coerceValue(value, myDefaultTarget);
609  break;
610  case 35:
611  coerceValue(value, myUseDefaultUdimTarget);
612  break;
613  case 36:
614  coerceValue(value, myDefaultUdimTarget);
615  break;
616  case 37:
617  if (idx.size() == 1)
618  coerceValue(value, myRects.entries());
619  else if (instance[0] < myRects.entries())
620  {
621  auto && _data = myRects(instance[0]);
622  switch (idx[1])
623  {
624  case 0:
625  coerceValue(value, _data.rect_use);
626  break;
627  case 1:
628  coerceValue(value, _data.rect_center);
629  break;
630  case 2:
631  coerceValue(value, _data.rect_size);
632  break;
633 
634  }
635  }
636  break;
637  case 38:
638  coerceValue(value, myTileSize);
639  break;
640  case 39:
641  coerceValue(value, myNumColumns);
642  break;
643  case 40:
644  coerceValue(value, myStartingUdim);
645  break;
646  case 41:
647  coerceValue(value, myTargetUVAttr);
648  break;
649  case 42:
650  coerceValue(value, myTargetProjPlane);
651  break;
652  case 43:
653  coerceValue(value, myTargetGroup);
654  break;
655  case 44:
656  coerceValue(value, myTargetSeparatorEdges);
657  break;
658  case 45:
659  coerceValue(value, myUseTargetIslandAttr);
660  break;
661  case 46:
662  coerceValue(value, myTargetIslandAttr);
663  break;
664  case 47:
665  coerceValue(value, myStackIslands);
666  break;
667  case 48:
668  coerceValue(value, myStackMirrored);
669  break;
670  case 49:
671  coerceValue(value, myStackOnNonGroup);
672  break;
673  case 50:
674  coerceValue(value, myStackingLengthTolerance);
675  break;
676  case 51:
677  coerceValue(value, myGenerateNonpackedPolys);
678  break;
679  case 52:
680  coerceValue(value, myNonpackedPolys);
681  break;
682  case 53:
683  coerceValue(value, myGenerateIslandAttr);
684  break;
685  case 54:
686  coerceValue(value, myOutputIslandAttr);
687  break;
688  case 55:
689  coerceValue(value, myGenerateTargetAttr);
690  break;
691  case 56:
692  coerceValue(value, myOutputTargetAttr);
693  break;
694 
695  }
696  }
697 
698  bool isParmColorRamp(exint idx) const override
699  {
700  switch (idx)
701  {
702 
703  }
704  return false;
705  }
706 
707  void getNestParmValue(TempIndex idx, TempIndex instance, exint &value) const override
708  { doGetParmValue(idx, instance, value); }
709  void getNestParmValue(TempIndex idx, TempIndex instance, fpreal &value) const override
710  { doGetParmValue(idx, instance, value); }
711  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector2D &value) const override
712  { doGetParmValue(idx, instance, value); }
713  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector3D &value) const override
714  { doGetParmValue(idx, instance, value); }
715  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector4D &value) const override
716  { doGetParmValue(idx, instance, value); }
717  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix2D &value) const override
718  { doGetParmValue(idx, instance, value); }
719  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
720  { doGetParmValue(idx, instance, value); }
721  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix4D &value) const override
722  { doGetParmValue(idx, instance, value); }
723  void getNestParmValue(TempIndex idx, TempIndex instance, UT_StringHolder &value) const override
724  { doGetParmValue(idx, instance, value); }
725  void getNestParmValue(TempIndex idx, TempIndex instance, UT_SharedPtr<UT_Ramp> &value) const override
726  { doGetParmValue(idx, instance, value); }
727  void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
728  { doGetParmValue(idx, instance, value); }
729 
730  template <typename T>
731  void
732  doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
733  {
734  if (idx.size() < 1)
735  return;
736  UT_ASSERT(idx.size() == instance.size()+1);
737  if (idx.size() != instance.size()+1)
738  return;
739  switch (idx[0])
740  {
741  case 0:
742  coerceValue(myUVAttr, ( ( value ) ));
743  break;
744  case 1:
745  coerceValue(myUVProjPlane, clampMinValue(0, clampMaxValue(2, value ) ));
746  break;
747  case 2:
748  coerceValue(myGroup, ( ( value ) ));
749  break;
750  case 3:
751  coerceValue(mySeparatorEdges, ( ( value ) ));
752  break;
753  case 4:
754  coerceValue(myUseIslandAttr, ( ( value ) ));
755  break;
756  case 5:
757  coerceValue(myIslandAttr, ( ( value ) ));
758  break;
759  case 6:
760  coerceValue(myUseTargetAttr, ( ( value ) ));
761  break;
762  case 7:
763  coerceValue(myTargetAttr, ( ( value ) ));
764  break;
765  case 8:
766  coerceValue(myTargetOverrides, ( ( value ) ));
767  break;
768  case 9:
769  coerceValue(myUseIslandScaleAttr, ( ( value ) ));
770  break;
771  case 10:
772  coerceValue(myIslandScaleAttr, ( ( value ) ));
773  break;
774  case 11:
775  coerceValue(myScaleOverrides, ( ( value ) ));
776  break;
777  case 12:
778  coerceValue(myUseIslandOffsetAttr, ( ( value ) ));
779  break;
780  case 13:
781  coerceValue(myIslandOffsetAttr, ( ( value ) ));
782  break;
783  case 14:
784  coerceValue(myOffsetOverrides, ( ( value ) ));
785  break;
786  case 15:
787  coerceValue(myCorrectAreas, ( ( value ) ));
788  break;
789  case 16:
790  coerceValue(myAxisAlignment, clampMinValue(0, clampMaxValue(2, value ) ));
791  break;
792  case 17:
793  coerceValue(myScaling, clampMinValue(0, clampMaxValue(1, value ) ));
794  break;
795  case 18:
796  coerceValue(myScale, clampMinValue(0, ( value ) ));
797  break;
798  case 19:
799  coerceValue(myRotationStep, clampMinValue(0, clampMaxValue(7, value ) ));
800  break;
801  case 20:
802  coerceValue(myCircleDivs, clampMinValue(1, ( value ) ));
803  break;
804  case 21:
805  coerceValue(myPackBetween, ( ( value ) ));
806  break;
807  case 22:
808  coerceValue(myPackInCavities, ( ( value ) ));
809  break;
810  case 23:
811  coerceValue(myPadding, clampMinValue(0, ( value ) ));
812  break;
813  case 24:
814  coerceValue(myPadBoundaries, ( ( value ) ));
815  break;
816  case 25:
817  coerceValue(myExpandPadding, ( ( value ) ));
818  break;
819  case 26:
820  coerceValue(myIterations, clampMinValue(1, ( value ) ));
821  break;
822  case 27:
823  coerceValue(myResolution, clampMinValue(0, clampMaxValue(5, value ) ));
824  break;
825  case 28:
826  coerceValue(myCustomResolution, clampMinValue(128, clampMaxValue(32768, value ) ));
827  break;
828  case 29:
829  coerceValue(myConnectivityTolerance, clampMinValue(0, ( value ) ));
830  break;
831  case 30:
832  coerceValue(myScaleTolerance, ( clampMaxValue(-15, value ) ));
833  break;
834  case 31:
835  coerceValue(myRandSeed, clampMinValue(0, ( value ) ));
836  break;
837  case 32:
838  coerceValue(myTargetType, clampMinValue(0, clampMaxValue(2, value ) ));
839  break;
840  case 33:
841  coerceValue(myUseDefaultTarget, ( ( value ) ));
842  break;
843  case 34:
844  coerceValue(myDefaultTarget, clampMinValue(0, ( value ) ));
845  break;
846  case 35:
847  coerceValue(myUseDefaultUdimTarget, ( ( value ) ));
848  break;
849  case 36:
850  coerceValue(myDefaultUdimTarget, clampMinValue(1001, ( value ) ));
851  break;
852  case 37:
853  if (idx.size() == 1)
854  {
855  exint newsize;
856  coerceValue(newsize, value);
857  if (newsize < 0) newsize = 0;
858  myRects.setSize(newsize);
859  }
860  else
861  {
862  if (instance[0] < 0)
863  return;
864  myRects.setSizeIfNeeded(instance[0]+1);
865  auto && _data = myRects(instance[0]);
866  switch (idx[1])
867  {
868  case 0:
869  coerceValue(_data.rect_use, value);
870  break;
871  case 1:
872  coerceValue(_data.rect_center, value);
873  break;
874  case 2:
875  coerceValue(_data.rect_size, value);
876  break;
877 
878  }
879  }
880  break;
881  case 38:
882  coerceValue(myTileSize, ( clampMaxValue(-5, value ) ));
883  break;
884  case 39:
885  coerceValue(myNumColumns, clampMinValue(1, ( value ) ));
886  break;
887  case 40:
888  coerceValue(myStartingUdim, ( ( value ) ));
889  break;
890  case 41:
891  coerceValue(myTargetUVAttr, ( ( value ) ));
892  break;
893  case 42:
894  coerceValue(myTargetProjPlane, clampMinValue(0, clampMaxValue(2, value ) ));
895  break;
896  case 43:
897  coerceValue(myTargetGroup, ( ( value ) ));
898  break;
899  case 44:
900  coerceValue(myTargetSeparatorEdges, ( ( value ) ));
901  break;
902  case 45:
903  coerceValue(myUseTargetIslandAttr, ( ( value ) ));
904  break;
905  case 46:
906  coerceValue(myTargetIslandAttr, ( ( value ) ));
907  break;
908  case 47:
909  coerceValue(myStackIslands, ( ( value ) ));
910  break;
911  case 48:
912  coerceValue(myStackMirrored, ( ( value ) ));
913  break;
914  case 49:
915  coerceValue(myStackOnNonGroup, ( ( value ) ));
916  break;
917  case 50:
918  coerceValue(myStackingLengthTolerance, clampMinValue(0, ( value ) ));
919  break;
920  case 51:
921  coerceValue(myGenerateNonpackedPolys, ( ( value ) ));
922  break;
923  case 52:
924  coerceValue(myNonpackedPolys, ( ( value ) ));
925  break;
926  case 53:
927  coerceValue(myGenerateIslandAttr, ( ( value ) ));
928  break;
929  case 54:
930  coerceValue(myOutputIslandAttr, ( ( value ) ));
931  break;
932  case 55:
933  coerceValue(myGenerateTargetAttr, ( ( value ) ));
934  break;
935  case 56:
936  coerceValue(myOutputTargetAttr, ( ( value ) ));
937  break;
938 
939  }
940  }
941 
942  void setNestParmValue(TempIndex idx, TempIndex instance, const exint &value) override
943  { doSetParmValue(idx, instance, value); }
944  void setNestParmValue(TempIndex idx, TempIndex instance, const fpreal &value) override
945  { doSetParmValue(idx, instance, value); }
946  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector2D &value) override
947  { doSetParmValue(idx, instance, value); }
948  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector3D &value) override
949  { doSetParmValue(idx, instance, value); }
950  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector4D &value) override
951  { doSetParmValue(idx, instance, value); }
952  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix2D &value) override
953  { doSetParmValue(idx, instance, value); }
954  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix3D &value) override
955  { doSetParmValue(idx, instance, value); }
956  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix4D &value) override
957  { doSetParmValue(idx, instance, value); }
958  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_StringHolder &value) override
959  { doSetParmValue(idx, instance, value); }
960  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_SharedPtr<UT_Ramp> &value) override
961  { doSetParmValue(idx, instance, value); }
962  void setNestParmValue(TempIndex idx, TempIndex instance, const PRM_DataItemHandle &value) override
963  { doSetParmValue(idx, instance, value); }
964 
965  exint getNestNumParms(TempIndex idx) const override
966  {
967  if (idx.size() == 0)
968  return 57;
969  switch (idx[0])
970  {
971  case 37:
972  return 3;
973 
974  }
975  // Invalid
976  return 0;
977  }
978 
979  const char *getNestParmName(TempIndex fieldnum) const override
980  {
981  if (fieldnum.size() < 1)
982  return 0;
983  switch (fieldnum[0])
984  {
985  case 0:
986  return "uvattrib";
987  case 1:
988  return "projplane";
989  case 2:
990  return "group";
991  case 3:
992  return "separatoredges";
993  case 4:
994  return "useislandattr";
995  case 5:
996  return "islandattr";
997  case 6:
998  return "usetargetattr";
999  case 7:
1000  return "targetattr";
1001  case 8:
1002  return "targetoverrides";
1003  case 9:
1004  return "useislandscaleattr";
1005  case 10:
1006  return "islandscaleattr";
1007  case 11:
1008  return "scaleoverrides";
1009  case 12:
1010  return "useislandsetattr";
1011  case 13:
1012  return "islandoffsetattr";
1013  case 14:
1014  return "offsetoverrides";
1015  case 15:
1016  return "correctareas";
1017  case 16:
1018  return "axisalignislands";
1019  case 17:
1020  return "scaling";
1021  case 18:
1022  return "scale";
1023  case 19:
1024  return "rotstep";
1025  case 20:
1026  return "circledivs";
1027  case 21:
1028  return "packbetween";
1029  case 22:
1030  return "packincavities";
1031  case 23:
1032  return "padding";
1033  case 24:
1034  return "paddingboundary";
1035  case 25:
1036  return "expandpadding";
1037  case 26:
1038  return "iterations";
1039  case 27:
1040  return "resolution";
1041  case 28:
1042  return "customresolution";
1043  case 29:
1044  return "uvtolerance";
1045  case 30:
1046  return "scaletolerance";
1047  case 31:
1048  return "randseed";
1049  case 32:
1050  return "targettype";
1051  case 33:
1052  return "usedefaulttarget";
1053  case 34:
1054  return "defaulttarget";
1055  case 35:
1056  return "usedefaultudimtarget";
1057  case 36:
1058  return "defaultudimtarget";
1059  case 37:
1060  if (fieldnum.size() == 1)
1061  return "rects";
1062  switch (fieldnum[1])
1063  {
1064  case 0:
1065  return "rect_use#";
1066  case 1:
1067  return "rect_center#";
1068  case 2:
1069  return "rect_size#";
1070 
1071  }
1072  return 0;
1073  case 38:
1074  return "tilesize";
1075  case 39:
1076  return "numcolumns";
1077  case 40:
1078  return "startingudim";
1079  case 41:
1080  return "targetuvattrib";
1081  case 42:
1082  return "targetprojplane";
1083  case 43:
1084  return "targetgroup";
1085  case 44:
1086  return "targetseparatoredges";
1087  case 45:
1088  return "usetargetislandattr";
1089  case 46:
1090  return "targetislandattr";
1091  case 47:
1092  return "stackislands";
1093  case 48:
1094  return "invertedoverlays";
1095  case 49:
1096  return "stackonnongroup";
1097  case 50:
1098  return "overlaytolerance";
1099  case 51:
1100  return "generatenonpackedpoly";
1101  case 52:
1102  return "nonpackedpolys";
1103  case 53:
1104  return "generateislandattr";
1105  case 54:
1106  return "outputislandattr";
1107  case 55:
1108  return "generatetargetattr";
1109  case 56:
1110  return "outputtargetattr";
1111 
1112  }
1113  return 0;
1114  }
1115 
1116  ParmType getNestParmType(TempIndex fieldnum) const override
1117  {
1118  if (fieldnum.size() < 1)
1119  return PARM_UNSUPPORTED;
1120  switch (fieldnum[0])
1121  {
1122  case 0:
1123  return PARM_STRING;
1124  case 1:
1125  return PARM_INTEGER;
1126  case 2:
1127  return PARM_STRING;
1128  case 3:
1129  return PARM_STRING;
1130  case 4:
1131  return PARM_INTEGER;
1132  case 5:
1133  return PARM_STRING;
1134  case 6:
1135  return PARM_INTEGER;
1136  case 7:
1137  return PARM_STRING;
1138  case 8:
1139  return PARM_STRING;
1140  case 9:
1141  return PARM_INTEGER;
1142  case 10:
1143  return PARM_STRING;
1144  case 11:
1145  return PARM_STRING;
1146  case 12:
1147  return PARM_INTEGER;
1148  case 13:
1149  return PARM_STRING;
1150  case 14:
1151  return PARM_STRING;
1152  case 15:
1153  return PARM_INTEGER;
1154  case 16:
1155  return PARM_INTEGER;
1156  case 17:
1157  return PARM_INTEGER;
1158  case 18:
1159  return PARM_FLOAT;
1160  case 19:
1161  return PARM_INTEGER;
1162  case 20:
1163  return PARM_INTEGER;
1164  case 21:
1165  return PARM_INTEGER;
1166  case 22:
1167  return PARM_INTEGER;
1168  case 23:
1169  return PARM_INTEGER;
1170  case 24:
1171  return PARM_INTEGER;
1172  case 25:
1173  return PARM_INTEGER;
1174  case 26:
1175  return PARM_INTEGER;
1176  case 27:
1177  return PARM_INTEGER;
1178  case 28:
1179  return PARM_INTEGER;
1180  case 29:
1181  return PARM_FLOAT;
1182  case 30:
1183  return PARM_FLOAT;
1184  case 31:
1185  return PARM_INTEGER;
1186  case 32:
1187  return PARM_INTEGER;
1188  case 33:
1189  return PARM_INTEGER;
1190  case 34:
1191  return PARM_INTEGER;
1192  case 35:
1193  return PARM_INTEGER;
1194  case 36:
1195  return PARM_INTEGER;
1196  case 37:
1197  if (fieldnum.size() == 1)
1198  return PARM_MULTIPARM;
1199  switch (fieldnum[1])
1200  {
1201  case 0:
1202  return PARM_INTEGER;
1203  case 1:
1204  return PARM_VECTOR2;
1205  case 2:
1206  return PARM_VECTOR2;
1207 
1208  }
1209  return PARM_UNSUPPORTED;
1210  case 38:
1211  return PARM_VECTOR2;
1212  case 39:
1213  return PARM_INTEGER;
1214  case 40:
1215  return PARM_INTEGER;
1216  case 41:
1217  return PARM_STRING;
1218  case 42:
1219  return PARM_INTEGER;
1220  case 43:
1221  return PARM_STRING;
1222  case 44:
1223  return PARM_STRING;
1224  case 45:
1225  return PARM_INTEGER;
1226  case 46:
1227  return PARM_STRING;
1228  case 47:
1229  return PARM_INTEGER;
1230  case 48:
1231  return PARM_INTEGER;
1232  case 49:
1233  return PARM_INTEGER;
1234  case 50:
1235  return PARM_FLOAT;
1236  case 51:
1237  return PARM_INTEGER;
1238  case 52:
1239  return PARM_STRING;
1240  case 53:
1241  return PARM_INTEGER;
1242  case 54:
1243  return PARM_STRING;
1244  case 55:
1245  return PARM_INTEGER;
1246  case 56:
1247  return PARM_STRING;
1248 
1249  }
1250  return PARM_UNSUPPORTED;
1251  }
1252 
1253  // Boiler plate to load individual types.
1254  static void loadData(UT_IStream &is, int64 &v)
1255  { is.bread(&v, 1); }
1256  static void loadData(UT_IStream &is, bool &v)
1257  { int64 iv; is.bread(&iv, 1); v = iv; }
1258  static void loadData(UT_IStream &is, fpreal64 &v)
1259  { is.bread<fpreal64>(&v, 1); }
1260  static void loadData(UT_IStream &is, UT_Vector2D &v)
1261  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1); }
1262  static void loadData(UT_IStream &is, UT_Vector3D &v)
1263  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
1264  is.bread<fpreal64>(&v.z(), 1); }
1265  static void loadData(UT_IStream &is, UT_Vector4D &v)
1266  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
1267  is.bread<fpreal64>(&v.z(), 1); is.bread<fpreal64>(&v.w(), 1); }
1268  static void loadData(UT_IStream &is, UT_Matrix2D &v)
1269  { for (int r = 0; r < 2; r++) for (int c = 0; c < 2; c++) is.bread<fpreal64>(&v(r, c), 1); }
1270  static void loadData(UT_IStream &is, UT_Matrix3D &v)
1271  { for (int r = 0; r < 3; r++) for (int c = 0; c < 3; c++) is.bread<fpreal64>(&v(r, c), 1); }
1272  static void loadData(UT_IStream &is, UT_Matrix4D &v)
1273  { for (int r = 0; r < 4; r++) for (int c = 0; c < 4; c++) is.bread<fpreal64>(&v(r, c), 1); }
1274  static void loadData(UT_IStream &is, UT_Vector2I &v)
1275  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1); }
1276  static void loadData(UT_IStream &is, UT_Vector3I &v)
1277  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
1278  is.bread<int64>(&v.z(), 1); }
1279  static void loadData(UT_IStream &is, UT_Vector4I &v)
1280  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
1281  is.bread<int64>(&v.z(), 1); is.bread<int64>(&v.w(), 1); }
1283  { is.bread(v); }
1285  { UT_StringHolder rampdata;
1286  loadData(is, rampdata);
1287  if (rampdata.isstring())
1288  {
1289  v.reset(new UT_Ramp());
1290  UT_IStream istr((const char *) rampdata, rampdata.length(), UT_ISTREAM_ASCII);
1291  v->load(istr);
1292  }
1293  else v.reset();
1294  }
1297  loadData(is, data);
1298  if (data.isstring())
1299  {
1300  // Find the data type.
1301  const char *colon = UT_StringWrap(data).findChar(':');
1302  if (colon)
1303  {
1304  int typelen = colon - data.buffer();
1306  type.strncpy(data.buffer(), typelen);
1307  UT_IStream istr(((const char *) data) + typelen + 1, data.length() - (typelen + 1), UT_ISTREAM_BINARY);
1308 
1309  v = PRM_DataFactory::parseBinary(type.buffer(), istr);
1310  }
1311  }
1312  else v.reset();
1313  }
1314 
1315  static void saveData(std::ostream &os, int64 v)
1316  { UTwrite(os, &v); }
1317  static void saveData(std::ostream &os, bool v)
1318  { int64 iv = v; UTwrite(os, &iv); }
1319  static void saveData(std::ostream &os, fpreal64 v)
1320  { UTwrite<fpreal64>(os, &v); }
1321  static void saveData(std::ostream &os, UT_Vector2D v)
1322  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y()); }
1323  static void saveData(std::ostream &os, UT_Vector3D v)
1324  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
1325  UTwrite<fpreal64>(os, &v.z()); }
1326  static void saveData(std::ostream &os, UT_Vector4D v)
1327  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
1328  UTwrite<fpreal64>(os, &v.z()); UTwrite<fpreal64>(os, &v.w()); }
1329  static void saveData(std::ostream &os, UT_Matrix2D v)
1330  { for (int r = 0; r < 2; r++) for (int c = 0; c < 2; c++) UTwrite<fpreal64>(os, &v(r, c)); }
1331  static void saveData(std::ostream &os, UT_Matrix3D v)
1332  { for (int r = 0; r < 3; r++) for (int c = 0; c < 3; c++) UTwrite<fpreal64>(os, &v(r, c)); }
1333  static void saveData(std::ostream &os, UT_Matrix4D v)
1334  { for (int r = 0; r < 4; r++) for (int c = 0; c < 4; c++) UTwrite<fpreal64>(os, &v(r, c)); }
1335  static void saveData(std::ostream &os, UT_StringHolder s)
1336  { UT_StringWrap(s).saveBinary(os); }
1337  static void saveData(std::ostream &os, UT_SharedPtr<UT_Ramp> s)
1339  UT_OStringStream ostr;
1340  if (s) s->save(ostr);
1341  result = ostr.str();
1342  saveData(os, result);
1343  }
1344  static void saveData(std::ostream &os, PRM_DataItemHandle s)
1346  UT_OStringStream ostr;
1347  if (s)
1348  {
1349  ostr << s->getDataTypeToken();
1350  ostr << ":";
1351  s->saveBinary(ostr);
1352  }
1353  result = ostr.str();
1354  saveData(os, result);
1355  }
1356 
1357 
1358  void save(std::ostream &os) const
1359  {
1360  int32 v = version();
1361  UTwrite(os, &v);
1362  saveData(os, myUVAttr);
1363  saveData(os, myUVProjPlane);
1364  saveData(os, myGroup);
1365  saveData(os, mySeparatorEdges);
1366  saveData(os, myUseIslandAttr);
1367  saveData(os, myIslandAttr);
1368  saveData(os, myUseTargetAttr);
1369  saveData(os, myTargetAttr);
1370  saveData(os, myTargetOverrides);
1371  saveData(os, myUseIslandScaleAttr);
1372  saveData(os, myIslandScaleAttr);
1373  saveData(os, myScaleOverrides);
1374  saveData(os, myUseIslandOffsetAttr);
1375  saveData(os, myIslandOffsetAttr);
1376  saveData(os, myOffsetOverrides);
1377  saveData(os, myCorrectAreas);
1378  saveData(os, myAxisAlignment);
1379  saveData(os, myScaling);
1380  saveData(os, myScale);
1381  saveData(os, myRotationStep);
1382  saveData(os, myCircleDivs);
1383  saveData(os, myPackBetween);
1384  saveData(os, myPackInCavities);
1385  saveData(os, myPadding);
1386  saveData(os, myPadBoundaries);
1387  saveData(os, myExpandPadding);
1388  saveData(os, myIterations);
1389  saveData(os, myResolution);
1390  saveData(os, myCustomResolution);
1391  saveData(os, myConnectivityTolerance);
1392  saveData(os, myScaleTolerance);
1393  saveData(os, myRandSeed);
1394  saveData(os, myTargetType);
1395  saveData(os, myUseDefaultTarget);
1396  saveData(os, myDefaultTarget);
1397  saveData(os, myUseDefaultUdimTarget);
1398  saveData(os, myDefaultUdimTarget);
1399  {
1400  int64 length = myRects.entries();
1401  UTwrite(os, &length);
1402  for (exint i = 0; i < length; i++)
1403  {
1404  auto && _curentry = myRects(i);
1405  (void) _curentry;
1406  saveData(os, _curentry.rect_use);
1407  saveData(os, _curentry.rect_center);
1408  saveData(os, _curentry.rect_size);
1409 
1410  }
1411  }
1412  saveData(os, myTileSize);
1413  saveData(os, myNumColumns);
1414  saveData(os, myStartingUdim);
1415  saveData(os, myTargetUVAttr);
1416  saveData(os, myTargetProjPlane);
1417  saveData(os, myTargetGroup);
1418  saveData(os, myTargetSeparatorEdges);
1419  saveData(os, myUseTargetIslandAttr);
1420  saveData(os, myTargetIslandAttr);
1421  saveData(os, myStackIslands);
1422  saveData(os, myStackMirrored);
1423  saveData(os, myStackOnNonGroup);
1424  saveData(os, myStackingLengthTolerance);
1425  saveData(os, myGenerateNonpackedPolys);
1426  saveData(os, myNonpackedPolys);
1427  saveData(os, myGenerateIslandAttr);
1428  saveData(os, myOutputIslandAttr);
1429  saveData(os, myGenerateTargetAttr);
1430  saveData(os, myOutputTargetAttr);
1431 
1432  }
1433 
1434  bool load(UT_IStream &is)
1435  {
1436  int32 v;
1437  is.bread(&v, 1);
1438  if (version() != v)
1439  {
1440  // Fail incompatible versions
1441  return false;
1442  }
1443  loadData(is, myUVAttr);
1444  loadData(is, myUVProjPlane);
1445  loadData(is, myGroup);
1446  loadData(is, mySeparatorEdges);
1447  loadData(is, myUseIslandAttr);
1448  loadData(is, myIslandAttr);
1449  loadData(is, myUseTargetAttr);
1450  loadData(is, myTargetAttr);
1451  loadData(is, myTargetOverrides);
1452  loadData(is, myUseIslandScaleAttr);
1453  loadData(is, myIslandScaleAttr);
1454  loadData(is, myScaleOverrides);
1455  loadData(is, myUseIslandOffsetAttr);
1456  loadData(is, myIslandOffsetAttr);
1457  loadData(is, myOffsetOverrides);
1458  loadData(is, myCorrectAreas);
1459  loadData(is, myAxisAlignment);
1460  loadData(is, myScaling);
1461  loadData(is, myScale);
1462  loadData(is, myRotationStep);
1463  loadData(is, myCircleDivs);
1464  loadData(is, myPackBetween);
1465  loadData(is, myPackInCavities);
1466  loadData(is, myPadding);
1467  loadData(is, myPadBoundaries);
1468  loadData(is, myExpandPadding);
1469  loadData(is, myIterations);
1470  loadData(is, myResolution);
1471  loadData(is, myCustomResolution);
1472  loadData(is, myConnectivityTolerance);
1473  loadData(is, myScaleTolerance);
1474  loadData(is, myRandSeed);
1475  loadData(is, myTargetType);
1476  loadData(is, myUseDefaultTarget);
1477  loadData(is, myDefaultTarget);
1478  loadData(is, myUseDefaultUdimTarget);
1479  loadData(is, myDefaultUdimTarget);
1480  {
1481  int64 length;
1482  is.read(&length, 1);
1483  myRects.setSize(length);
1484  for (exint i = 0; i < length; i++)
1485  {
1486  auto && _curentry = myRects(i);
1487  (void) _curentry;
1488  loadData(is, _curentry.rect_use);
1489  loadData(is, _curentry.rect_center);
1490  loadData(is, _curentry.rect_size);
1491 
1492  }
1493  }
1494  loadData(is, myTileSize);
1495  loadData(is, myNumColumns);
1496  loadData(is, myStartingUdim);
1497  loadData(is, myTargetUVAttr);
1498  loadData(is, myTargetProjPlane);
1499  loadData(is, myTargetGroup);
1500  loadData(is, myTargetSeparatorEdges);
1501  loadData(is, myUseTargetIslandAttr);
1502  loadData(is, myTargetIslandAttr);
1503  loadData(is, myStackIslands);
1504  loadData(is, myStackMirrored);
1505  loadData(is, myStackOnNonGroup);
1506  loadData(is, myStackingLengthTolerance);
1507  loadData(is, myGenerateNonpackedPolys);
1508  loadData(is, myNonpackedPolys);
1509  loadData(is, myGenerateIslandAttr);
1510  loadData(is, myOutputIslandAttr);
1511  loadData(is, myGenerateTargetAttr);
1512  loadData(is, myOutputTargetAttr);
1513 
1514  return true;
1515  }
1516 
1517  const UT_StringHolder & getUVAttr() const { return myUVAttr; }
1518  void setUVAttr(const UT_StringHolder & val) { myUVAttr = val; }
1520  {
1521  SOP_Node *thissop = cookparms.getNode();
1522  if (!thissop) return getUVAttr();
1524  OP_Utils::evalOpParm(result, thissop, "uvattrib", cookparms.getCookTime(), 0);
1525  return result;
1526  }
1527  UVProjPlane getUVProjPlane() const { return UVProjPlane(myUVProjPlane); }
1528  void setUVProjPlane(UVProjPlane val) { myUVProjPlane = int64(val); }
1530  {
1531  SOP_Node *thissop = cookparms.getNode();
1532  if (!thissop) return getUVProjPlane();
1533  int64 result;
1534  OP_Utils::evalOpParm(result, thissop, "projplane", cookparms.getCookTime(), 0);
1535  return UVProjPlane(result);
1536  }
1537  const UT_StringHolder & getGroup() const { return myGroup; }
1538  void setGroup(const UT_StringHolder & val) { myGroup = val; }
1540  {
1541  SOP_Node *thissop = cookparms.getNode();
1542  if (!thissop) return getGroup();
1544  OP_Utils::evalOpParm(result, thissop, "group", cookparms.getCookTime(), 0);
1545  return result;
1546  }
1547  const UT_StringHolder & getSeparatorEdges() const { return mySeparatorEdges; }
1548  void setSeparatorEdges(const UT_StringHolder & val) { mySeparatorEdges = val; }
1550  {
1551  SOP_Node *thissop = cookparms.getNode();
1552  if (!thissop) return getSeparatorEdges();
1554  OP_Utils::evalOpParm(result, thissop, "separatoredges", cookparms.getCookTime(), 0);
1555  return result;
1556  }
1557  bool getUseIslandAttr() const { return myUseIslandAttr; }
1558  void setUseIslandAttr(bool val) { myUseIslandAttr = val; }
1559  bool opUseIslandAttr(const SOP_NodeVerb::CookParms &cookparms) const
1560  {
1561  SOP_Node *thissop = cookparms.getNode();
1562  if (!thissop) return getUseIslandAttr();
1563  bool result;
1564  OP_Utils::evalOpParm(result, thissop, "useislandattr", cookparms.getCookTime(), 0);
1565  return result;
1566  }
1567  const UT_StringHolder & getIslandAttr() const { return myIslandAttr; }
1568  void setIslandAttr(const UT_StringHolder & val) { myIslandAttr = val; }
1570  {
1571  SOP_Node *thissop = cookparms.getNode();
1572  if (!thissop) return getIslandAttr();
1574  OP_Utils::evalOpParm(result, thissop, "islandattr", cookparms.getCookTime(), 0);
1575  return result;
1576  }
1577  bool getUseTargetAttr() const { return myUseTargetAttr; }
1578  void setUseTargetAttr(bool val) { myUseTargetAttr = val; }
1579  bool opUseTargetAttr(const SOP_NodeVerb::CookParms &cookparms) const
1580  {
1581  SOP_Node *thissop = cookparms.getNode();
1582  if (!thissop) return getUseTargetAttr();
1583  bool result;
1584  OP_Utils::evalOpParm(result, thissop, "usetargetattr", cookparms.getCookTime(), 0);
1585  return result;
1586  }
1587  const UT_StringHolder & getTargetAttr() const { return myTargetAttr; }
1588  void setTargetAttr(const UT_StringHolder & val) { myTargetAttr = val; }
1590  {
1591  SOP_Node *thissop = cookparms.getNode();
1592  if (!thissop) return getTargetAttr();
1594  OP_Utils::evalOpParm(result, thissop, "targetattr", cookparms.getCookTime(), 0);
1595  return result;
1596  }
1597  const UT_StringHolder & getTargetOverrides() const { return myTargetOverrides; }
1598  void setTargetOverrides(const UT_StringHolder & val) { myTargetOverrides = val; }
1600  {
1601  SOP_Node *thissop = cookparms.getNode();
1602  if (!thissop) return getTargetOverrides();
1604  OP_Utils::evalOpParm(result, thissop, "targetoverrides", cookparms.getCookTime(), 0);
1605  return result;
1606  }
1607  bool getUseIslandScaleAttr() const { return myUseIslandScaleAttr; }
1608  void setUseIslandScaleAttr(bool val) { myUseIslandScaleAttr = val; }
1609  bool opUseIslandScaleAttr(const SOP_NodeVerb::CookParms &cookparms) const
1610  {
1611  SOP_Node *thissop = cookparms.getNode();
1612  if (!thissop) return getUseIslandScaleAttr();
1613  bool result;
1614  OP_Utils::evalOpParm(result, thissop, "useislandscaleattr", cookparms.getCookTime(), 0);
1615  return result;
1616  }
1617  const UT_StringHolder & getIslandScaleAttr() const { return myIslandScaleAttr; }
1618  void setIslandScaleAttr(const UT_StringHolder & val) { myIslandScaleAttr = val; }
1620  {
1621  SOP_Node *thissop = cookparms.getNode();
1622  if (!thissop) return getIslandScaleAttr();
1624  OP_Utils::evalOpParm(result, thissop, "islandscaleattr", cookparms.getCookTime(), 0);
1625  return result;
1626  }
1627  const UT_StringHolder & getScaleOverrides() const { return myScaleOverrides; }
1628  void setScaleOverrides(const UT_StringHolder & val) { myScaleOverrides = val; }
1630  {
1631  SOP_Node *thissop = cookparms.getNode();
1632  if (!thissop) return getScaleOverrides();
1634  OP_Utils::evalOpParm(result, thissop, "scaleoverrides", cookparms.getCookTime(), 0);
1635  return result;
1636  }
1637  bool getUseIslandOffsetAttr() const { return myUseIslandOffsetAttr; }
1638  void setUseIslandOffsetAttr(bool val) { myUseIslandOffsetAttr = val; }
1639  bool opUseIslandOffsetAttr(const SOP_NodeVerb::CookParms &cookparms) const
1640  {
1641  SOP_Node *thissop = cookparms.getNode();
1642  if (!thissop) return getUseIslandOffsetAttr();
1643  bool result;
1644  OP_Utils::evalOpParm(result, thissop, "useislandsetattr", cookparms.getCookTime(), 0);
1645  return result;
1646  }
1647  const UT_StringHolder & getIslandOffsetAttr() const { return myIslandOffsetAttr; }
1648  void setIslandOffsetAttr(const UT_StringHolder & val) { myIslandOffsetAttr = val; }
1650  {
1651  SOP_Node *thissop = cookparms.getNode();
1652  if (!thissop) return getIslandOffsetAttr();
1654  OP_Utils::evalOpParm(result, thissop, "islandoffsetattr", cookparms.getCookTime(), 0);
1655  return result;
1656  }
1657  const UT_StringHolder & getOffsetOverrides() const { return myOffsetOverrides; }
1658  void setOffsetOverrides(const UT_StringHolder & val) { myOffsetOverrides = val; }
1660  {
1661  SOP_Node *thissop = cookparms.getNode();
1662  if (!thissop) return getOffsetOverrides();
1664  OP_Utils::evalOpParm(result, thissop, "offsetoverrides", cookparms.getCookTime(), 0);
1665  return result;
1666  }
1667  bool getCorrectAreas() const { return myCorrectAreas; }
1668  void setCorrectAreas(bool val) { myCorrectAreas = val; }
1669  bool opCorrectAreas(const SOP_NodeVerb::CookParms &cookparms) const
1670  {
1671  SOP_Node *thissop = cookparms.getNode();
1672  if (!thissop) return getCorrectAreas();
1673  bool result;
1674  OP_Utils::evalOpParm(result, thissop, "correctareas", cookparms.getCookTime(), 0);
1675  return result;
1676  }
1677  AxisAlignment getAxisAlignment() const { return AxisAlignment(myAxisAlignment); }
1678  void setAxisAlignment(AxisAlignment val) { myAxisAlignment = int64(val); }
1680  {
1681  SOP_Node *thissop = cookparms.getNode();
1682  if (!thissop) return getAxisAlignment();
1683  int64 result;
1684  OP_Utils::evalOpParm(result, thissop, "axisalignislands", cookparms.getCookTime(), 0);
1685  return AxisAlignment(result);
1686  }
1687  Scaling getScaling() const { return Scaling(myScaling); }
1688  void setScaling(Scaling val) { myScaling = int64(val); }
1690  {
1691  SOP_Node *thissop = cookparms.getNode();
1692  if (!thissop) return getScaling();
1693  int64 result;
1694  OP_Utils::evalOpParm(result, thissop, "scaling", cookparms.getCookTime(), 0);
1695  return Scaling(result);
1696  }
1697  fpreal64 getScale() const { return myScale; }
1698  void setScale(fpreal64 val) { myScale = val; }
1699  fpreal64 opScale(const SOP_NodeVerb::CookParms &cookparms) const
1700  {
1701  SOP_Node *thissop = cookparms.getNode();
1702  if (!thissop) return getScale();
1703  fpreal64 result;
1704  OP_Utils::evalOpParm(result, thissop, "scale", cookparms.getCookTime(), 0);
1705  return result;
1706  }
1707  RotationStep getRotationStep() const { return RotationStep(myRotationStep); }
1708  void setRotationStep(RotationStep val) { myRotationStep = int64(val); }
1710  {
1711  SOP_Node *thissop = cookparms.getNode();
1712  if (!thissop) return getRotationStep();
1713  int64 result;
1714  OP_Utils::evalOpParm(result, thissop, "rotstep", cookparms.getCookTime(), 0);
1715  return RotationStep(result);
1716  }
1717  int64 getCircleDivs() const { return myCircleDivs; }
1718  void setCircleDivs(int64 val) { myCircleDivs = val; }
1720  {
1721  SOP_Node *thissop = cookparms.getNode();
1722  if (!thissop) return getCircleDivs();
1723  int64 result;
1724  OP_Utils::evalOpParm(result, thissop, "circledivs", cookparms.getCookTime(), 0);
1725  return result;
1726  }
1727  bool getPackBetween() const { return myPackBetween; }
1728  void setPackBetween(bool val) { myPackBetween = val; }
1729  bool opPackBetween(const SOP_NodeVerb::CookParms &cookparms) const
1730  {
1731  SOP_Node *thissop = cookparms.getNode();
1732  if (!thissop) return getPackBetween();
1733  bool result;
1734  OP_Utils::evalOpParm(result, thissop, "packbetween", cookparms.getCookTime(), 0);
1735  return result;
1736  }
1737  bool getPackInCavities() const { return myPackInCavities; }
1738  void setPackInCavities(bool val) { myPackInCavities = val; }
1739  bool opPackInCavities(const SOP_NodeVerb::CookParms &cookparms) const
1740  {
1741  SOP_Node *thissop = cookparms.getNode();
1742  if (!thissop) return getPackInCavities();
1743  bool result;
1744  OP_Utils::evalOpParm(result, thissop, "packincavities", cookparms.getCookTime(), 0);
1745  return result;
1746  }
1747  int64 getPadding() const { return myPadding; }
1748  void setPadding(int64 val) { myPadding = val; }
1749  int64 opPadding(const SOP_NodeVerb::CookParms &cookparms) const
1750  {
1751  SOP_Node *thissop = cookparms.getNode();
1752  if (!thissop) return getPadding();
1753  int64 result;
1754  OP_Utils::evalOpParm(result, thissop, "padding", cookparms.getCookTime(), 0);
1755  return result;
1756  }
1757  bool getPadBoundaries() const { return myPadBoundaries; }
1758  void setPadBoundaries(bool val) { myPadBoundaries = val; }
1759  bool opPadBoundaries(const SOP_NodeVerb::CookParms &cookparms) const
1760  {
1761  SOP_Node *thissop = cookparms.getNode();
1762  if (!thissop) return getPadBoundaries();
1763  bool result;
1764  OP_Utils::evalOpParm(result, thissop, "paddingboundary", cookparms.getCookTime(), 0);
1765  return result;
1766  }
1767  bool getExpandPadding() const { return myExpandPadding; }
1768  void setExpandPadding(bool val) { myExpandPadding = val; }
1769  bool opExpandPadding(const SOP_NodeVerb::CookParms &cookparms) const
1770  {
1771  SOP_Node *thissop = cookparms.getNode();
1772  if (!thissop) return getExpandPadding();
1773  bool result;
1774  OP_Utils::evalOpParm(result, thissop, "expandpadding", cookparms.getCookTime(), 0);
1775  return result;
1776  }
1777  int64 getIterations() const { return myIterations; }
1778  void setIterations(int64 val) { myIterations = val; }
1780  {
1781  SOP_Node *thissop = cookparms.getNode();
1782  if (!thissop) return getIterations();
1783  int64 result;
1784  OP_Utils::evalOpParm(result, thissop, "iterations", cookparms.getCookTime(), 0);
1785  return result;
1786  }
1787  Resolution getResolution() const { return Resolution(myResolution); }
1788  void setResolution(Resolution val) { myResolution = int64(val); }
1790  {
1791  SOP_Node *thissop = cookparms.getNode();
1792  if (!thissop) return getResolution();
1793  int64 result;
1794  OP_Utils::evalOpParm(result, thissop, "resolution", cookparms.getCookTime(), 0);
1795  return Resolution(result);
1796  }
1797  int64 getCustomResolution() const { return myCustomResolution; }
1798  void setCustomResolution(int64 val) { myCustomResolution = val; }
1800  {
1801  SOP_Node *thissop = cookparms.getNode();
1802  if (!thissop) return getCustomResolution();
1803  int64 result;
1804  OP_Utils::evalOpParm(result, thissop, "customresolution", cookparms.getCookTime(), 0);
1805  return result;
1806  }
1807  fpreal64 getConnectivityTolerance() const { return myConnectivityTolerance; }
1808  void setConnectivityTolerance(fpreal64 val) { myConnectivityTolerance = val; }
1810  {
1811  SOP_Node *thissop = cookparms.getNode();
1812  if (!thissop) return getConnectivityTolerance();
1813  fpreal64 result;
1814  OP_Utils::evalOpParm(result, thissop, "uvtolerance", cookparms.getCookTime(), 0);
1815  return result;
1816  }
1817  fpreal64 getScaleTolerance() const { return myScaleTolerance; }
1818  void setScaleTolerance(fpreal64 val) { myScaleTolerance = val; }
1820  {
1821  SOP_Node *thissop = cookparms.getNode();
1822  if (!thissop) return getScaleTolerance();
1823  fpreal64 result;
1824  OP_Utils::evalOpParm(result, thissop, "scaletolerance", cookparms.getCookTime(), 0);
1825  return result;
1826  }
1827  int64 getRandSeed() const { return myRandSeed; }
1828  void setRandSeed(int64 val) { myRandSeed = val; }
1829  int64 opRandSeed(const SOP_NodeVerb::CookParms &cookparms) const
1830  {
1831  SOP_Node *thissop = cookparms.getNode();
1832  if (!thissop) return getRandSeed();
1833  int64 result;
1834  OP_Utils::evalOpParm(result, thissop, "randseed", cookparms.getCookTime(), 0);
1835  return result;
1836  }
1837  TargetType getTargetType() const { return TargetType(myTargetType); }
1838  void setTargetType(TargetType val) { myTargetType = int64(val); }
1840  {
1841  SOP_Node *thissop = cookparms.getNode();
1842  if (!thissop) return getTargetType();
1843  int64 result;
1844  OP_Utils::evalOpParm(result, thissop, "targettype", cookparms.getCookTime(), 0);
1845  return TargetType(result);
1846  }
1847  bool getUseDefaultTarget() const { return myUseDefaultTarget; }
1848  void setUseDefaultTarget(bool val) { myUseDefaultTarget = val; }
1849  bool opUseDefaultTarget(const SOP_NodeVerb::CookParms &cookparms) const
1850  {
1851  SOP_Node *thissop = cookparms.getNode();
1852  if (!thissop) return getUseDefaultTarget();
1853  bool result;
1854  OP_Utils::evalOpParm(result, thissop, "usedefaulttarget", cookparms.getCookTime(), 0);
1855  return result;
1856  }
1857  int64 getDefaultTarget() const { return myDefaultTarget; }
1858  void setDefaultTarget(int64 val) { myDefaultTarget = val; }
1860  {
1861  SOP_Node *thissop = cookparms.getNode();
1862  if (!thissop) return getDefaultTarget();
1863  int64 result;
1864  OP_Utils::evalOpParm(result, thissop, "defaulttarget", cookparms.getCookTime(), 0);
1865  return result;
1866  }
1867  bool getUseDefaultUdimTarget() const { return myUseDefaultUdimTarget; }
1868  void setUseDefaultUdimTarget(bool val) { myUseDefaultUdimTarget = val; }
1870  {
1871  SOP_Node *thissop = cookparms.getNode();
1872  if (!thissop) return getUseDefaultUdimTarget();
1873  bool result;
1874  OP_Utils::evalOpParm(result, thissop, "usedefaultudimtarget", cookparms.getCookTime(), 0);
1875  return result;
1876  }
1877  int64 getDefaultUdimTarget() const { return myDefaultUdimTarget; }
1878  void setDefaultUdimTarget(int64 val) { myDefaultUdimTarget = val; }
1880  {
1881  SOP_Node *thissop = cookparms.getNode();
1882  if (!thissop) return getDefaultUdimTarget();
1883  int64 result;
1884  OP_Utils::evalOpParm(result, thissop, "defaultudimtarget", cookparms.getCookTime(), 0);
1885  return result;
1886  }
1887  const UT_Array<Rects> &getRects() const { return myRects; }
1888 void setRects(const UT_Array<Rects> &val) { myRects = val; }
1889  exint opRects(const SOP_NodeVerb::CookParms &cookparms) const
1890  {
1891  SOP_Node *thissop = cookparms.getNode();
1892  if (!thissop) return getRects().entries();
1893  exint result;
1894  OP_Utils::evalOpParm(result, thissop, "rects", cookparms.getCookTime(), 0);
1895  return result;
1896  }
1897  bool opRects_rect_use(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
1898  { return opinstRects_rect_use(cookparms, &_idx); }
1899  bool opinstRects_rect_use(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1900  {
1901  SOP_Node *thissop = cookparms.getNode();
1902  if (!thissop) return (myRects(_idx[0]).rect_use);
1903  int _parmidx[2-1];
1904  _parmidx[1-1] = _idx[1-1] + 0;
1905 
1906  bool result;
1907  OP_Utils::evalOpParmInst(result, thissop, "rect_use#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1908  return (result);
1909  }
1910  UT_Vector2D opRects_rect_center(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
1911  { return opinstRects_rect_center(cookparms, &_idx); }
1912  UT_Vector2D opinstRects_rect_center(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1913  {
1914  SOP_Node *thissop = cookparms.getNode();
1915  if (!thissop) return (myRects(_idx[0]).rect_center);
1916  int _parmidx[2-1];
1917  _parmidx[1-1] = _idx[1-1] + 0;
1918 
1920  OP_Utils::evalOpParmInst(result, thissop, "rect_center#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1921  return (result);
1922  }
1923  UT_Vector2D opRects_rect_size(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
1924  { return opinstRects_rect_size(cookparms, &_idx); }
1925  UT_Vector2D opinstRects_rect_size(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1926  {
1927  SOP_Node *thissop = cookparms.getNode();
1928  if (!thissop) return (myRects(_idx[0]).rect_size);
1929  int _parmidx[2-1];
1930  _parmidx[1-1] = _idx[1-1] + 0;
1931 
1933  OP_Utils::evalOpParmInst(result, thissop, "rect_size#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1934  return (result);
1935  }
1936 
1937  UT_Vector2D getTileSize() const { return myTileSize; }
1938  void setTileSize(UT_Vector2D val) { myTileSize = val; }
1940  {
1941  SOP_Node *thissop = cookparms.getNode();
1942  if (!thissop) return getTileSize();
1944  OP_Utils::evalOpParm(result, thissop, "tilesize", cookparms.getCookTime(), 0);
1945  return result;
1946  }
1947  int64 getNumColumns() const { return myNumColumns; }
1948  void setNumColumns(int64 val) { myNumColumns = val; }
1950  {
1951  SOP_Node *thissop = cookparms.getNode();
1952  if (!thissop) return getNumColumns();
1953  int64 result;
1954  OP_Utils::evalOpParm(result, thissop, "numcolumns", cookparms.getCookTime(), 0);
1955  return result;
1956  }
1957  int64 getStartingUdim() const { return myStartingUdim; }
1958  void setStartingUdim(int64 val) { myStartingUdim = val; }
1960  {
1961  SOP_Node *thissop = cookparms.getNode();
1962  if (!thissop) return getStartingUdim();
1963  int64 result;
1964  OP_Utils::evalOpParm(result, thissop, "startingudim", cookparms.getCookTime(), 0);
1965  return result;
1966  }
1967  const UT_StringHolder & getTargetUVAttr() const { return myTargetUVAttr; }
1968  void setTargetUVAttr(const UT_StringHolder & val) { myTargetUVAttr = val; }
1970  {
1971  SOP_Node *thissop = cookparms.getNode();
1972  if (!thissop) return getTargetUVAttr();
1974  OP_Utils::evalOpParm(result, thissop, "targetuvattrib", cookparms.getCookTime(), 0);
1975  return result;
1976  }
1977  TargetProjPlane getTargetProjPlane() const { return TargetProjPlane(myTargetProjPlane); }
1978  void setTargetProjPlane(TargetProjPlane val) { myTargetProjPlane = int64(val); }
1980  {
1981  SOP_Node *thissop = cookparms.getNode();
1982  if (!thissop) return getTargetProjPlane();
1983  int64 result;
1984  OP_Utils::evalOpParm(result, thissop, "targetprojplane", cookparms.getCookTime(), 0);
1985  return TargetProjPlane(result);
1986  }
1987  const UT_StringHolder & getTargetGroup() const { return myTargetGroup; }
1988  void setTargetGroup(const UT_StringHolder & val) { myTargetGroup = val; }
1990  {
1991  SOP_Node *thissop = cookparms.getNode();
1992  if (!thissop) return getTargetGroup();
1994  OP_Utils::evalOpParm(result, thissop, "targetgroup", cookparms.getCookTime(), 0);
1995  return result;
1996  }
1997  const UT_StringHolder & getTargetSeparatorEdges() const { return myTargetSeparatorEdges; }
1998  void setTargetSeparatorEdges(const UT_StringHolder & val) { myTargetSeparatorEdges = val; }
2000  {
2001  SOP_Node *thissop = cookparms.getNode();
2002  if (!thissop) return getTargetSeparatorEdges();
2004  OP_Utils::evalOpParm(result, thissop, "targetseparatoredges", cookparms.getCookTime(), 0);
2005  return result;
2006  }
2007  bool getUseTargetIslandAttr() const { return myUseTargetIslandAttr; }
2008  void setUseTargetIslandAttr(bool val) { myUseTargetIslandAttr = val; }
2009  bool opUseTargetIslandAttr(const SOP_NodeVerb::CookParms &cookparms) const
2010  {
2011  SOP_Node *thissop = cookparms.getNode();
2012  if (!thissop) return getUseTargetIslandAttr();
2013  bool result;
2014  OP_Utils::evalOpParm(result, thissop, "usetargetislandattr", cookparms.getCookTime(), 0);
2015  return result;
2016  }
2017  const UT_StringHolder & getTargetIslandAttr() const { return myTargetIslandAttr; }
2018  void setTargetIslandAttr(const UT_StringHolder & val) { myTargetIslandAttr = val; }
2020  {
2021  SOP_Node *thissop = cookparms.getNode();
2022  if (!thissop) return getTargetIslandAttr();
2024  OP_Utils::evalOpParm(result, thissop, "targetislandattr", cookparms.getCookTime(), 0);
2025  return result;
2026  }
2027  bool getStackIslands() const { return myStackIslands; }
2028  void setStackIslands(bool val) { myStackIslands = val; }
2029  bool opStackIslands(const SOP_NodeVerb::CookParms &cookparms) const
2030  {
2031  SOP_Node *thissop = cookparms.getNode();
2032  if (!thissop) return getStackIslands();
2033  bool result;
2034  OP_Utils::evalOpParm(result, thissop, "stackislands", cookparms.getCookTime(), 0);
2035  return result;
2036  }
2037  bool getStackMirrored() const { return myStackMirrored; }
2038  void setStackMirrored(bool val) { myStackMirrored = val; }
2039  bool opStackMirrored(const SOP_NodeVerb::CookParms &cookparms) const
2040  {
2041  SOP_Node *thissop = cookparms.getNode();
2042  if (!thissop) return getStackMirrored();
2043  bool result;
2044  OP_Utils::evalOpParm(result, thissop, "invertedoverlays", cookparms.getCookTime(), 0);
2045  return result;
2046  }
2047  bool getStackOnNonGroup() const { return myStackOnNonGroup; }
2048  void setStackOnNonGroup(bool val) { myStackOnNonGroup = val; }
2049  bool opStackOnNonGroup(const SOP_NodeVerb::CookParms &cookparms) const
2050  {
2051  SOP_Node *thissop = cookparms.getNode();
2052  if (!thissop) return getStackOnNonGroup();
2053  bool result;
2054  OP_Utils::evalOpParm(result, thissop, "stackonnongroup", cookparms.getCookTime(), 0);
2055  return result;
2056  }
2057  fpreal64 getStackingLengthTolerance() const { return myStackingLengthTolerance; }
2058  void setStackingLengthTolerance(fpreal64 val) { myStackingLengthTolerance = val; }
2060  {
2061  SOP_Node *thissop = cookparms.getNode();
2062  if (!thissop) return getStackingLengthTolerance();
2063  fpreal64 result;
2064  OP_Utils::evalOpParm(result, thissop, "overlaytolerance", cookparms.getCookTime(), 0);
2065  return result;
2066  }
2067  bool getGenerateNonpackedPolys() const { return myGenerateNonpackedPolys; }
2068  void setGenerateNonpackedPolys(bool val) { myGenerateNonpackedPolys = val; }
2070  {
2071  SOP_Node *thissop = cookparms.getNode();
2072  if (!thissop) return getGenerateNonpackedPolys();
2073  bool result;
2074  OP_Utils::evalOpParm(result, thissop, "generatenonpackedpoly", cookparms.getCookTime(), 0);
2075  return result;
2076  }
2077  const UT_StringHolder & getNonpackedPolys() const { return myNonpackedPolys; }
2078  void setNonpackedPolys(const UT_StringHolder & val) { myNonpackedPolys = val; }
2080  {
2081  SOP_Node *thissop = cookparms.getNode();
2082  if (!thissop) return getNonpackedPolys();
2084  OP_Utils::evalOpParm(result, thissop, "nonpackedpolys", cookparms.getCookTime(), 0);
2085  return result;
2086  }
2087  bool getGenerateIslandAttr() const { return myGenerateIslandAttr; }
2088  void setGenerateIslandAttr(bool val) { myGenerateIslandAttr = val; }
2089  bool opGenerateIslandAttr(const SOP_NodeVerb::CookParms &cookparms) const
2090  {
2091  SOP_Node *thissop = cookparms.getNode();
2092  if (!thissop) return getGenerateIslandAttr();
2093  bool result;
2094  OP_Utils::evalOpParm(result, thissop, "generateislandattr", cookparms.getCookTime(), 0);
2095  return result;
2096  }
2097  const UT_StringHolder & getOutputIslandAttr() const { return myOutputIslandAttr; }
2098  void setOutputIslandAttr(const UT_StringHolder & val) { myOutputIslandAttr = val; }
2100  {
2101  SOP_Node *thissop = cookparms.getNode();
2102  if (!thissop) return getOutputIslandAttr();
2104  OP_Utils::evalOpParm(result, thissop, "outputislandattr", cookparms.getCookTime(), 0);
2105  return result;
2106  }
2107  bool getGenerateTargetAttr() const { return myGenerateTargetAttr; }
2108  void setGenerateTargetAttr(bool val) { myGenerateTargetAttr = val; }
2109  bool opGenerateTargetAttr(const SOP_NodeVerb::CookParms &cookparms) const
2110  {
2111  SOP_Node *thissop = cookparms.getNode();
2112  if (!thissop) return getGenerateTargetAttr();
2113  bool result;
2114  OP_Utils::evalOpParm(result, thissop, "generatetargetattr", cookparms.getCookTime(), 0);
2115  return result;
2116  }
2117  const UT_StringHolder & getOutputTargetAttr() const { return myOutputTargetAttr; }
2118  void setOutputTargetAttr(const UT_StringHolder & val) { myOutputTargetAttr = val; }
2120  {
2121  SOP_Node *thissop = cookparms.getNode();
2122  if (!thissop) return getOutputTargetAttr();
2124  OP_Utils::evalOpParm(result, thissop, "outputtargetattr", cookparms.getCookTime(), 0);
2125  return result;
2126  }
2127 
2128 private:
2129  UT_StringHolder myUVAttr;
2130  int64 myUVProjPlane;
2131  UT_StringHolder myGroup;
2132  UT_StringHolder mySeparatorEdges;
2133  bool myUseIslandAttr;
2134  UT_StringHolder myIslandAttr;
2135  bool myUseTargetAttr;
2136  UT_StringHolder myTargetAttr;
2137  UT_StringHolder myTargetOverrides;
2138  bool myUseIslandScaleAttr;
2139  UT_StringHolder myIslandScaleAttr;
2140  UT_StringHolder myScaleOverrides;
2141  bool myUseIslandOffsetAttr;
2142  UT_StringHolder myIslandOffsetAttr;
2143  UT_StringHolder myOffsetOverrides;
2144  bool myCorrectAreas;
2145  int64 myAxisAlignment;
2146  int64 myScaling;
2147  fpreal64 myScale;
2148  int64 myRotationStep;
2149  int64 myCircleDivs;
2150  bool myPackBetween;
2151  bool myPackInCavities;
2152  int64 myPadding;
2153  bool myPadBoundaries;
2154  bool myExpandPadding;
2155  int64 myIterations;
2156  int64 myResolution;
2157  int64 myCustomResolution;
2158  fpreal64 myConnectivityTolerance;
2159  fpreal64 myScaleTolerance;
2160  int64 myRandSeed;
2161  int64 myTargetType;
2162  bool myUseDefaultTarget;
2163  int64 myDefaultTarget;
2164  bool myUseDefaultUdimTarget;
2165  int64 myDefaultUdimTarget;
2166  UT_Array<Rects> myRects;
2167  UT_Vector2D myTileSize;
2168  int64 myNumColumns;
2169  int64 myStartingUdim;
2170  UT_StringHolder myTargetUVAttr;
2171  int64 myTargetProjPlane;
2172  UT_StringHolder myTargetGroup;
2173  UT_StringHolder myTargetSeparatorEdges;
2174  bool myUseTargetIslandAttr;
2175  UT_StringHolder myTargetIslandAttr;
2176  bool myStackIslands;
2177  bool myStackMirrored;
2178  bool myStackOnNonGroup;
2179  fpreal64 myStackingLengthTolerance;
2180  bool myGenerateNonpackedPolys;
2181  UT_StringHolder myNonpackedPolys;
2182  bool myGenerateIslandAttr;
2183  UT_StringHolder myOutputIslandAttr;
2184  bool myGenerateTargetAttr;
2185  UT_StringHolder myOutputTargetAttr;
2186 
2187 };
void setIslandScaleAttr(const UT_StringHolder &val)
bool opRects_rect_use(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
TargetType getTargetType() const
void loadFromOpSubclass(const LoadParms &loadparms) override
UT_Vector2D opRects_rect_size(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
void setUVProjPlane(UVProjPlane val)
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glcorearb.h:2540
void setStackingLengthTolerance(fpreal64 val)
bool opGenerateTargetAttr(const SOP_NodeVerb::CookParms &cookparms) const
void setTargetAttr(const UT_StringHolder &val)
const UT_StringHolder & getTargetUVAttr() const
int int32
Definition: SYS_Types.h:39
SOP_Node * getNode() const
Definition: SOP_NodeVerb.h:347
const UT_StringHolder & getTargetIslandAttr() const
void setTargetType(TargetType val)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
void getNestParmValue(TempIndex idx, TempIndex instance, exint &value) const override
UT_StringHolder opScaleOverrides(const SOP_NodeVerb::CookParms &cookparms) const
T clampMaxValue(fpreal maxvalue, const T &src) const
Definition: OP_NodeParms.h:315
void
Definition: png.h:1083
UT_Vector2D opinstRects_rect_size(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
exint bread(int32 *buffer, exint asize=1)
GLboolean * data
Definition: glcorearb.h:131
GT_API const UT_StringHolder time
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector4.h:493
const GLdouble * v
Definition: glcorearb.h:837
fpreal getTime() const
Definition: OP_Context.h:62
const UT_StringHolder & getUVAttr() const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix4D &value) const override
UT_Vector2T< fpreal64 > UT_Vector2D
static void saveData(std::ostream &os, fpreal64 v)
const UT_StringHolder & getIslandScaleAttr() const
bool operator!=(const Rects &src) const
void setTargetOverrides(const UT_StringHolder &val)
bool opStackOnNonGroup(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opTargetSeparatorEdges(const SOP_NodeVerb::CookParms &cookparms) const
bool operator!=(const SOP_UVLayout_3_0Parms &src) const
void setOutputIslandAttr(const UT_StringHolder &val)
bool opUseIslandOffsetAttr(const SOP_NodeVerb::CookParms &cookparms) const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector3D &value) const override
const OP_Context & context() const
Definition: OP_NodeParms.h:97
bool opPadBoundaries(const SOP_NodeVerb::CookParms &cookparms) const
constexpr SYS_FORCE_INLINE T & z() noexcept
Definition: UT_Vector3.h:667
int64 exint
Definition: SYS_Types.h:125
void setRotationStep(RotationStep val)
static void loadData(UT_IStream &is, UT_Matrix2D &v)
fpreal64 opConnectivityTolerance(const SOP_NodeVerb::CookParms &cookparms) const
const UT_Array< Rects > & getRects() const
bool opCorrectAreas(const SOP_NodeVerb::CookParms &cookparms) const
static void saveData(std::ostream &os, UT_StringHolder s)
SYS_FORCE_INLINE const char * buffer() const
fpreal64 getStackingLengthTolerance() const
GLdouble s
Definition: glad.h:3009
GLuint GLsizei GLsizei * length
Definition: glcorearb.h:795
RotationStep getRotationStep() const
static void saveData(std::ostream &os, PRM_DataItemHandle s)
An output stream object that owns its own string buffer storage.
static void loadData(UT_IStream &is, int64 &v)
UT_Vector2D opinstRects_rect_center(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
UT_Vector2D getTileSize() const
const char * getNestParmName(TempIndex fieldnum) const override
**But if you need a result
Definition: thread.h:613
static void loadData(UT_IStream &is, UT_Vector2I &v)
T clampMinValue(fpreal minvalue, const T &src) const
Definition: OP_NodeParms.h:308
UVProjPlane opUVProjPlane(const SOP_NodeVerb::CookParms &cookparms) const
int64 opDefaultUdimTarget(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opTargetIslandAttr(const SOP_NodeVerb::CookParms &cookparms) const
bool opStackMirrored(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, UT_Matrix3D &v)
exint nodeIdx() const
Definition: OP_NodeParms.h:95
static PRM_DataItemHandle parseBinary(const char *type, UT_IStream &is)
const UT_StringHolder & getTargetSeparatorEdges() const
const UT_WorkBuffer & str()
Returns a read-only reference to the underlying UT_WorkBuffer.
bool opUseDefaultUdimTarget(const SOP_NodeVerb::CookParms &cookparms) const
int64 opIterations(const SOP_NodeVerb::CookParms &cookparms) const
void doGetParmValue(TempIndex idx, TempIndex instance, T &value) const
const UT_StringHolder & getSeparatorEdges() const
bool opinstRects_rect_use(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
void setGenerateNonpackedPolys(bool val)
virtual NodeIdx getInput(NodeIdx idx, int input, bool markused=false) const =0
bool opStackIslands(const SOP_NodeVerb::CookParms &cookparms) const
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector4.h:491
void setDefaultUdimTarget(int64 val)
static void loadData(UT_IStream &is, UT_Vector3I &v)
RotationStep opRotationStep(const SOP_NodeVerb::CookParms &cookparms) const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_StringHolder &value) const override
GLuint GLsizei const GLuint const GLintptr * offsets
Definition: glcorearb.h:2621
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector2D &value) const override
double fpreal64
Definition: SYS_Types.h:201
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector2.h:423
bool opUseTargetAttr(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opGroup(const SOP_NodeVerb::CookParms &cookparms) const
bool operator==(const BaseDimensions< T > &a, const BaseDimensions< Y > &b)
Definition: Dimensions.h:137
static void loadData(UT_IStream &is, fpreal64 &v)
int64 opNumColumns(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getTargetGroup() const
int64 opPadding(const SOP_NodeVerb::CookParms &cookparms) const
void setConnectivityTolerance(fpreal64 val)
UT_StringHolder opSeparatorEdges(const SOP_NodeVerb::CookParms &cookparms) const
void setNestParmValue(TempIndex idx, TempIndex instance, const fpreal &value) override
void setResolution(Resolution val)
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix3D &value) override
static void loadData(UT_IStream &is, UT_Vector4D &v)
void setScaleTolerance(fpreal64 val)
exint length() const
bool opExpandPadding(const SOP_NodeVerb::CookParms &cookparms) const
AxisAlignment opAxisAlignment(const SOP_NodeVerb::CookParms &cookparms) const
SYS_FORCE_INLINE const char * buffer() const
UT_StringHolder opTargetUVAttr(const SOP_NodeVerb::CookParms &cookparms) const
std::shared_ptr< T > UT_SharedPtr
Wrapper around std::shared_ptr.
Definition: UT_SharedPtr.h:36
bool opPackInCavities(const SOP_NodeVerb::CookParms &cookparms) const
constexpr SYS_FORCE_INLINE T & z() noexcept
Definition: UT_Vector4.h:495
static void loadData(UT_IStream &is, bool &v)
static void saveData(std::ostream &os, bool v)
fpreal64 opScale(const SOP_NodeVerb::CookParms &cookparms) const
UT_Vector2D opTileSize(const SOP_NodeVerb::CookParms &cookparms) const
static void saveData(std::ostream &os, UT_Vector2D v)
UT_Vector2D opRects_rect_center(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
exint read(bool *array, exint sz=1)
Definition: UT_IStream.h:276
const OP_GraphProxy * graph() const
Definition: OP_NodeParms.h:94
UT_StringHolder opIslandScaleAttr(const SOP_NodeVerb::CookParms &cookparms) const
exint getNestNumParms(TempIndex idx) const override
UT_StringHolder opNonpackedPolys(const SOP_NodeVerb::CookParms &cookparms) const
bool opGenerateNonpackedPolys(const SOP_NodeVerb::CookParms &cookparms) const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector4D &value) const override
void setIslandAttr(const UT_StringHolder &val)
virtual void evalOpParmInst(int64 &v, NodeIdx node, const char *parmname, const int *inst, const int *offsets, fpreal time, DEP_MicroNode *depnode, int nestlevel=1) const =0
long long int64
Definition: SYS_Types.h:116
UT_StringHolder opIslandOffsetAttr(const SOP_NodeVerb::CookParms &cookparms) const
void buildFromOp(const OP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector3D &value) override
const UT_StringHolder & getOutputTargetAttr() const
void setGroup(const UT_StringHolder &val)
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_StringHolder &value) override
void setNestParmValue(TempIndex idx, TempIndex instance, const exint &value) override
TargetType opTargetType(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, PRM_DataItemHandle &v)
UT_StringHolder opIslandAttr(const SOP_NodeVerb::CookParms &cookparms) const
UVProjPlane getUVProjPlane() const
Resolution getResolution() const
bool opUseTargetIslandAttr(const SOP_NodeVerb::CookParms &cookparms) const
virtual void evalOpParm(int64 &v, NodeIdx node, const char *parmname, fpreal time, DEP_MicroNode *depnode) const =0
const UT_StringHolder & getOffsetOverrides() const
UT_StringHolder opOutputIslandAttr(const SOP_NodeVerb::CookParms &cookparms) const
TargetProjPlane getTargetProjPlane() const
static void saveData(std::ostream &os, UT_Vector3D v)
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix2D &value) override
static void saveData(std::ostream &os, UT_Vector4D v)
SYS_FORCE_INLINE void strcat(const char *src)
void saveBinary(std::ostream &os) const
Save string to binary stream.
Definition: UT_String.h:296
const UT_StringHolder & getGroup() const
static void loadData(UT_IStream &is, UT_SharedPtr< UT_Ramp > &v)
void setTargetUVAttr(const UT_StringHolder &val)
bool operator==(const Rects &src) const
void save(std::ostream &os) const
GT_API const UT_StringHolder version
void setTileSize(UT_Vector2D val)
bool opPackBetween(const SOP_NodeVerb::CookParms &cookparms) const
bool opUseDefaultTarget(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opTargetGroup(const SOP_NodeVerb::CookParms &cookparms) const
static void saveData(std::ostream &os, UT_Matrix3D v)
int64 opRandSeed(const SOP_NodeVerb::CookParms &cookparms) const
void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector2D &value) override
exint entries() const
Alias of size(). size() is preferred.
Definition: UT_Array.h:648
static void loadData(UT_IStream &is, UT_Matrix4D &v)
bool opUseIslandScaleAttr(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 opScaleTolerance(const SOP_NodeVerb::CookParms &cookparms) const
static void saveData(std::ostream &os, UT_SharedPtr< UT_Ramp > s)
static void loadData(UT_IStream &is, UT_Vector2D &v)
void setOutputTargetAttr(const UT_StringHolder &val)
int int appendSprintf(const char *fmt,...) SYS_PRINTF_CHECK_ATTRIBUTE(2
exint opRects(const SOP_NodeVerb::CookParms &cookparms) const
void coerceValue(T &result, const S &src) const
Definition: OP_NodeParms.h:301
UT_StringHolder opTargetOverrides(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getIslandOffsetAttr() const
const UT_StringHolder & getOutputIslandAttr() const
const UT_StringHolder & getNonpackedPolys() const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_SharedPtr< UT_Ramp > &value) override
UT_StringHolder opOffsetOverrides(const SOP_NodeVerb::CookParms &cookparms) const
void copyFrom(const OP_NodeParms *src) override
static void saveData(std::ostream &os, UT_Matrix2D v)
UT_StringHolder opOutputTargetAttr(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 fpreal
Definition: SYS_Types.h:277
DEP_MicroNode * depnode() const
Definition: OP_NodeParms.h:99
void setRects(const UT_Array< Rects > &val)
Utility class for containing a color ramp.
Definition: UT_Ramp.h:88
void getNestParmValue(TempIndex idx, TempIndex instance, fpreal &value) const override
void setNonpackedPolys(const UT_StringHolder &val)
int64 opStartingUdim(const SOP_NodeVerb::CookParms &cookparms) const
bool isParmColorRamp(exint idx) const override
static void loadData(UT_IStream &is, UT_Vector3D &v)
constexpr SYS_FORCE_INLINE T & w() noexcept
Definition: UT_Vector4.h:497
SYS_FORCE_INLINE void append(char character)
GLuint GLfloat * val
Definition: glcorearb.h:1608
Vec3< typename MatType::value_type > getScale(const MatType &mat)
Return a Vec3 representing the lengths of the passed matrix's upper 3×3's rows.
Definition: Mat.h:633
#define SOP_API
Definition: SOP_API.h:10
void setScaleOverrides(const UT_StringHolder &val)
fpreal64 getConnectivityTolerance() const
static void loadData(UT_IStream &is, UT_StringHolder &v)
const UT_StringHolder & getTargetOverrides() const
void setTargetSeparatorEdges(const UT_StringHolder &val)
fpreal getCookTime() const
Definition: SOP_NodeVerb.h:361
fpreal64 opStackingLengthTolerance(const SOP_NodeVerb::CookParms &cookparms) const
ParmType getNestParmType(TempIndex fieldnum) const override
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix2D &value) const override
void getNestParmValue(TempIndex idx, TempIndex instance, UT_SharedPtr< UT_Ramp > &value) const override
void setSeparatorEdges(const UT_StringHolder &val)
const UT_StringHolder & getIslandAttr() const
AxisAlignment getAxisAlignment() const
static void saveData(std::ostream &os, UT_Matrix4D v)
UT_StringHolder opUVAttr(const SOP_NodeVerb::CookParms &cookparms) const
const char * findChar(int c) const
Definition: UT_String.h:1385
#define UT_ASSERT(ZZ)
Definition: UT_Assert.h:156
void setTargetProjPlane(TargetProjPlane val)
Definition: core.h:1131
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix4D &value) override
void setNestParmValue(TempIndex idx, TempIndex instance, const PRM_DataItemHandle &value) override
Resolution opResolution(const SOP_NodeVerb::CookParms &cookparms) const
void setIslandOffsetAttr(const UT_StringHolder &val)
bool opUseIslandAttr(const SOP_NodeVerb::CookParms &cookparms) const
bool opGenerateIslandAttr(const SOP_NodeVerb::CookParms &cookparms) const
GLboolean r
Definition: glcorearb.h:1222
void setOffsetOverrides(const UT_StringHolder &val)
void setUVAttr(const UT_StringHolder &val)
static void saveData(std::ostream &os, int64 v)
Scaling opScaling(const SOP_NodeVerb::CookParms &cookparms) const
int64 opDefaultTarget(const SOP_NodeVerb::CookParms &cookparms) const
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector3.h:665
static void loadData(UT_IStream &is, UT_Vector4I &v)
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector4D &value) override
UT_StringHolder opTargetAttr(const SOP_NodeVerb::CookParms &cookparms) const
TargetProjPlane opTargetProjPlane(const SOP_NodeVerb::CookParms &cookparms) const
type
Definition: core.h:1059
void setTargetIslandAttr(const UT_StringHolder &val)
const UT_StringHolder & getTargetAttr() const
void doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
UT_SharedPtr< const PRM_DataItem > PRM_DataItemHandle
Definition: PRM_Parm.h:89
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector2.h:425
void setAxisAlignment(AxisAlignment val)
int64 opCustomResolution(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 getScaleTolerance() const
SYS_FORCE_INLINE bool isstring() const
int64 opCircleDivs(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getScaleOverrides() const
OP_NodeParms & operator=(const OP_NodeParms &)=default
SYS_FORCE_INLINE void strncpy(const char *src, exint maxlen)
UT_StringHolder createString(const UT_Array< Rects > &list) const
bool operator==(const SOP_UVLayout_3_0Parms &src) const
GLenum src
Definition: glcorearb.h:1793
void setUseDefaultUdimTarget(bool val)
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector3.h:663
void setTargetGroup(const UT_StringHolder &val)