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