HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
SOP_UVFlatten-3.0.proto.h
Go to the documentation of this file.
1 /* Automagically Generated by generate_proto.py
2  * Do not Edit
3  */
4 #pragma once
5 
6 #include <SOP/SOP_API.h>
7 #include <SOP/SOP_NodeVerb.h>
8 #include <SOP/SOP_GraphProxy.h>
9 
10 #include <OP/OP_Utils.h>
11 #include <PRM/PRM_Parm.h>
12 #include <UT/UT_IStream.h>
13 #include <UT/UT_NTStreamUtil.h>
14 #include <UT/UT_Ramp.h>
15 #include <UT/UT_SharedPtr.h>
16 #include <UT/UT_StringHolder.h>
17 #include <UT/UT_StringStream.h>
18 #include <UT/UT_VectorTypes.h>
19 #include <UT/UT_EnvControl.h>
20 #include <SYS/SYS_Types.h>
21 
22 class DEP_MicroNode;
23 namespace SOP_UVFlatten_3_0Enums
24 {
25  enum class Method
26  {
27  SCP = 0,
28  ABF
29  };
30  enum class Align_axis
31  {
32  UAXIS = 0,
33  VAXIS
34  };
35  enum class Lalign_axis
36  {
37  UAXIS = 0,
38  VAXIS
39  };
40 }
41 
42 
44 {
45 public:
46  static int version() { return 1; }
47  struct Pins
48  {
49  bool usepin;
53 
54 
55  Pins()
56  {
57  usepin = true;
58  primvert = UT_Vector2D(0,0);
59  pinuv = UT_Vector2D(0,0);
60  pinrefuv = UT_Vector2D(0,0);
61 
62  }
63 
64  bool operator==(const Pins &src) const
65  {
66  if (usepin != src.usepin) return false;
67  if (primvert != src.primvert) return false;
68  if (pinuv != src.pinuv) return false;
69  if (pinrefuv != src.pinrefuv) return false;
70 
71  return true;
72  }
73  bool operator!=(const Pins &src) const
74  {
75  return !operator==(src);
76  }
77 
78  };
79 
81  {
83 
84  buf.strcat("[ ");
85  for (int i = 0; i < list.entries(); i++)
86  {
87  if (i)
88  buf.strcat(", ");
89  buf.strcat("( ");
90  buf.append("");
91  buf.appendSprintf("%s", (list(i).usepin) ? "true" : "false");
92  buf.append(", ");
93  buf.appendSprintf("(%f, %f)", list(i).primvert.x(), list(i).primvert.y());
94  buf.append(", ");
95  buf.appendSprintf("(%f, %f)", list(i).pinuv.x(), list(i).pinuv.y());
96  buf.append(", ");
97  buf.appendSprintf("(%f, %f)", list(i).pinrefuv.x(), list(i).pinrefuv.y());
98 
99  buf.strcat(" )");
100  }
101  buf.strcat(" ]");
102 
104  return result;
105  }
106  struct Alignments
107  {
111 
112 
114  {
115  align_enabled = true;
116  align_group = ""_UTsh;
117  align_axis = 0;
118 
119  }
120 
121  bool operator==(const Alignments &src) const
122  {
123  if (align_enabled != src.align_enabled) return false;
124  if (align_group != src.align_group) return false;
125  if (align_axis != src.align_axis) return false;
126 
127  return true;
128  }
129  bool operator!=(const Alignments &src) const
130  {
131  return !operator==(src);
132  }
133 
134  };
135 
137  {
139 
140  buf.strcat("[ ");
141  for (int i = 0; i < list.entries(); i++)
142  {
143  if (i)
144  buf.strcat(", ");
145  buf.strcat("( ");
146  buf.append("");
147  buf.appendSprintf("%s", (list(i).align_enabled) ? "true" : "false");
148  buf.append(", ");
149  { UT_String tmp; tmp = UT_StringWrap(list(i).align_group).makeQuotedString('"'); buf.strcat(tmp); }
150  buf.append(", ");
151  buf.appendSprintf("%d", (int) list(i).align_axis);
152 
153  buf.strcat(" )");
154  }
155  buf.strcat(" ]");
156 
158  return result;
159  }
161  {
164 
165 
167  {
168  straight_enabled = true;
169  straight_group = ""_UTsh;
170 
171  }
172 
173  bool operator==(const Straightenings &src) const
174  {
175  if (straight_enabled != src.straight_enabled) return false;
176  if (straight_group != src.straight_group) return false;
177 
178  return true;
179  }
180  bool operator!=(const Straightenings &src) const
181  {
182  return !operator==(src);
183  }
184 
185  };
186 
188  {
190 
191  buf.strcat("[ ");
192  for (int i = 0; i < list.entries(); i++)
193  {
194  if (i)
195  buf.strcat(", ");
196  buf.strcat("( ");
197  buf.append("");
198  buf.appendSprintf("%s", (list(i).straight_enabled) ? "true" : "false");
199  buf.append(", ");
200  { UT_String tmp; tmp = UT_StringWrap(list(i).straight_group).makeQuotedString('"'); buf.strcat(tmp); }
201 
202  buf.strcat(" )");
203  }
204  buf.strcat(" ]");
205 
207  return result;
208  }
209  struct Lpins
210  {
214 
215 
217  {
218  lprimvert = UT_Vector2D(0,0);
219  lpinuv = UT_Vector2D(0,0);
220  lpinrefuv = UT_Vector2D(0,0);
221 
222  }
223 
224  bool operator==(const Lpins &src) const
225  {
226  if (lprimvert != src.lprimvert) return false;
227  if (lpinuv != src.lpinuv) return false;
228  if (lpinrefuv != src.lpinrefuv) return false;
229 
230  return true;
231  }
232  bool operator!=(const Lpins &src) const
233  {
234  return !operator==(src);
235  }
236 
237  };
238 
240  {
242 
243  buf.strcat("[ ");
244  for (int i = 0; i < list.entries(); i++)
245  {
246  if (i)
247  buf.strcat(", ");
248  buf.strcat("( ");
249  buf.append("");
250  buf.appendSprintf("(%f, %f)", list(i).lprimvert.x(), list(i).lprimvert.y());
251  buf.append(", ");
252  buf.appendSprintf("(%f, %f)", list(i).lpinuv.x(), list(i).lpinuv.y());
253  buf.append(", ");
254  buf.appendSprintf("(%f, %f)", list(i).lpinrefuv.x(), list(i).lpinrefuv.y());
255 
256  buf.strcat(" )");
257  }
258  buf.strcat(" ]");
259 
261  return result;
262  }
263  struct Lalignments
264  {
267 
268 
270  {
271  lalign_group = ""_UTsh;
272  lalign_axis = 0;
273 
274  }
275 
276  bool operator==(const Lalignments &src) const
277  {
278  if (lalign_group != src.lalign_group) return false;
279  if (lalign_axis != src.lalign_axis) return false;
280 
281  return true;
282  }
283  bool operator!=(const Lalignments &src) const
284  {
285  return !operator==(src);
286  }
287 
288  };
289 
291  {
293 
294  buf.strcat("[ ");
295  for (int i = 0; i < list.entries(); i++)
296  {
297  if (i)
298  buf.strcat(", ");
299  buf.strcat("( ");
300  buf.append("");
301  { UT_String tmp; tmp = UT_StringWrap(list(i).lalign_group).makeQuotedString('"'); buf.strcat(tmp); }
302  buf.append(", ");
303  buf.appendSprintf("%d", (int) list(i).lalign_axis);
304 
305  buf.strcat(" )");
306  }
307  buf.strcat(" ]");
308 
310  return result;
311  }
313  {
315 
316 
318  {
319  lstraight_group = ""_UTsh;
320 
321  }
322 
323  bool operator==(const Lstraightenings &src) const
324  {
325  if (lstraight_group != src.lstraight_group) return false;
326 
327  return true;
328  }
329  bool operator!=(const Lstraightenings &src) const
330  {
331  return !operator==(src);
332  }
333 
334  };
335 
337  {
339 
340  buf.strcat("[ ");
341  for (int i = 0; i < list.entries(); i++)
342  {
343  if (i)
344  buf.strcat(", ");
345  buf.strcat("( ");
346  buf.append("");
347  { UT_String tmp; tmp = UT_StringWrap(list(i).lstraight_group).makeQuotedString('"'); buf.strcat(tmp); }
348 
349  buf.strcat(" )");
350  }
351  buf.strcat(" ]");
352 
354  return result;
355  }
356 
358  {
359  myGroup = ""_UTsh;
360  myUVAttrib = "uv"_UTsh;
361  myMethod = 0;
362  myKeepExistingSeams = false;
363  myKeepExistingLayout = false;
364  myPinBoundaries = false;
365  mySeams = ""_UTsh;
366  myRectifyGroup = ""_UTsh;
367  myUsePins = true;
368  myPins.setSize(0);
369  myUseAlignments = true;
370  myAlignments.setSize(0);
371  myUseStraightenings = true;
372  myStraightenings.setSize(0);
373  myManualLayout = true;
374  myLayoutSeams = ""_UTsh;
375  myLayoutRectifyGroup = ""_UTsh;
376  myLpins.setSize(0);
377  myLalignments.setSize(0);
378  myLstraightenings.setSize(0);
379  myUseOutputSeams = false;
380  myOutputSeams = "outputseams"_UTsh;
381  myUseOutputConstrIslands = false;
382  myOutputConstrIslands = "constrainedprims"_UTsh;
383  myBBoxCenter = UT_Vector2D(0.5,0.5);
384  myBBoxSize = UT_Vector2D(1,1);
385 
386  }
387 
388  explicit SOP_UVFlatten_3_0Parms(const SOP_UVFlatten_3_0Parms &) = default;
390  SOP_UVFlatten_3_0Parms(SOP_UVFlatten_3_0Parms &&) noexcept = default;
391  SOP_UVFlatten_3_0Parms &operator=(SOP_UVFlatten_3_0Parms &&) noexcept = default;
392 
393  ~SOP_UVFlatten_3_0Parms() override {}
394 
396  {
397  if (myGroup != src.myGroup) return false;
398  if (myUVAttrib != src.myUVAttrib) return false;
399  if (myMethod != src.myMethod) return false;
400  if (myKeepExistingSeams != src.myKeepExistingSeams) return false;
401  if (myKeepExistingLayout != src.myKeepExistingLayout) return false;
402  if (myPinBoundaries != src.myPinBoundaries) return false;
403  if (mySeams != src.mySeams) return false;
404  if (myRectifyGroup != src.myRectifyGroup) return false;
405  if (myUsePins != src.myUsePins) return false;
406  if (myPins != src.myPins) return false;
407  if (myUseAlignments != src.myUseAlignments) return false;
408  if (myAlignments != src.myAlignments) return false;
409  if (myUseStraightenings != src.myUseStraightenings) return false;
410  if (myStraightenings != src.myStraightenings) return false;
411  if (myManualLayout != src.myManualLayout) return false;
412  if (myLayoutSeams != src.myLayoutSeams) return false;
413  if (myLayoutRectifyGroup != src.myLayoutRectifyGroup) return false;
414  if (myLpins != src.myLpins) return false;
415  if (myLalignments != src.myLalignments) return false;
416  if (myLstraightenings != src.myLstraightenings) return false;
417  if (myUseOutputSeams != src.myUseOutputSeams) return false;
418  if (myOutputSeams != src.myOutputSeams) return false;
419  if (myUseOutputConstrIslands != src.myUseOutputConstrIslands) return false;
420  if (myOutputConstrIslands != src.myOutputConstrIslands) return false;
421  if (myBBoxCenter != src.myBBoxCenter) return false;
422  if (myBBoxSize != src.myBBoxSize) return false;
423 
424  return true;
425  }
427  {
428  return !operator==(src);
429  }
433 
434 
435 
436  void buildFromOp(const OP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
437  {
438  myGroup = ""_UTsh;
439  if (true)
440  graph->evalOpParm(myGroup, nodeidx, "group", time, 0);
441  myUVAttrib = "uv"_UTsh;
442  if (true)
443  graph->evalOpParm(myUVAttrib, nodeidx, "uvattrib", time, 0);
444  myMethod = 0;
445  if (true)
446  graph->evalOpParm(myMethod, nodeidx, "method", time, 0);
447  myKeepExistingSeams = false;
448  if (true)
449  graph->evalOpParm(myKeepExistingSeams, nodeidx, "keepexistingseams", time, 0);
450  myKeepExistingLayout = false;
451  if (true && ( (true&&!(((getKeepExistingSeams()==0)))) ) )
452  graph->evalOpParm(myKeepExistingLayout, nodeidx, "keepexistinglayout", time, 0);
453  myPinBoundaries = false;
454  if (true && ( (true&&!(((getKeepExistingSeams()==0))||((int64(getMethod())!=0)))) ) )
455  graph->evalOpParm(myPinBoundaries, nodeidx, "pinboundaries", time, 0);
456  mySeams = ""_UTsh;
457  if (true)
458  graph->evalOpParm(mySeams, nodeidx, "seamgroup", time, 0);
459  myRectifyGroup = ""_UTsh;
460  if (true)
461  graph->evalOpParm(myRectifyGroup, nodeidx, "rectifygroup", time, 0);
462  myUsePins = true;
463  if (true)
464  graph->evalOpParm(myUsePins, nodeidx, "usepins", time, 0);
465  if (true && ( (!(((getUsePins()==0)))) ) )
466  {
467  int64 length = 0;
468  graph->evalOpParm(length, nodeidx, "pins", time, 0);
469  if (length < 0) length = 0;
470  myPins.setSize(length);
471  for (exint i = 0; i < length; i++)
472  {
473  int parmidx[1];
474  int offsets[1];
475  parmidx[0] = i+0;
476  offsets[0] = 0;
477  auto && _curentry = myPins(i);
478  (void) _curentry;
479  _curentry.usepin = true;
480  if (true && ( (!(((getUsePins()==0)))) ) )
481  graph->evalOpParmInst(_curentry.usepin, nodeidx, "usepin#", parmidx, offsets, time, 0, 2-1);
482  _curentry.primvert = UT_Vector2D(0,0);
483  if (true && ( (!(((getUsePins()==0)))) ) )
484  graph->evalOpParmInst(_curentry.primvert, nodeidx, "primvert#", parmidx, offsets, time, 0, 2-1);
485  _curentry.pinuv = UT_Vector2D(0,0);
486  if (true && ( (!(((getUsePins()==0)))) ) )
487  graph->evalOpParmInst(_curentry.pinuv, nodeidx, "pinuv#", parmidx, offsets, time, 0, 2-1);
488  _curentry.pinrefuv = UT_Vector2D(0,0);
489  if (true && ( (!(((getUsePins()==0)))) ) )
490  graph->evalOpParmInst(_curentry.pinrefuv, nodeidx, "pinrefuv#", parmidx, offsets, time, 0, 2-1);
491 
492  }
493  }
494  else
495  myPins.clear();
496  myUseAlignments = true;
497  if (true)
498  graph->evalOpParm(myUseAlignments, nodeidx, "usealignments", time, 0);
499  if (true && ( (!(((getUseAlignments()==0)))) ) )
500  {
501  int64 length = 0;
502  graph->evalOpParm(length, nodeidx, "alignments", time, 0);
503  if (length < 0) length = 0;
504  myAlignments.setSize(length);
505  for (exint i = 0; i < length; i++)
506  {
507  int parmidx[1];
508  int offsets[1];
509  parmidx[0] = i+0;
510  offsets[0] = 0;
511  auto && _curentry = myAlignments(i);
512  (void) _curentry;
513  _curentry.align_enabled = true;
514  if (true && ( (!(((getUseAlignments()==0)))) ) )
515  graph->evalOpParmInst(_curentry.align_enabled, nodeidx, "align_enabled#", parmidx, offsets, time, 0, 2-1);
516  _curentry.align_group = ""_UTsh;
517  if (true && ( (!(((getUseAlignments()==0)))) ) )
518  graph->evalOpParmInst(_curentry.align_group, nodeidx, "align_group#", parmidx, offsets, time, 0, 2-1);
519  _curentry.align_axis = 0;
520  if (true && ( (!(((getUseAlignments()==0)))) ) )
521  graph->evalOpParmInst(_curentry.align_axis, nodeidx, "align_axis#", parmidx, offsets, time, 0, 2-1);
522 
523  }
524  }
525  else
526  myAlignments.clear();
527  myUseStraightenings = true;
528  if (true)
529  graph->evalOpParm(myUseStraightenings, nodeidx, "usestraightenings", time, 0);
530  if (true && ( (!(((getUseStraightenings()==0)))) ) )
531  {
532  int64 length = 0;
533  graph->evalOpParm(length, nodeidx, "straightenings", time, 0);
534  if (length < 0) length = 0;
535  myStraightenings.setSize(length);
536  for (exint i = 0; i < length; i++)
537  {
538  int parmidx[1];
539  int offsets[1];
540  parmidx[0] = i+0;
541  offsets[0] = 0;
542  auto && _curentry = myStraightenings(i);
543  (void) _curentry;
544  _curentry.straight_enabled = true;
545  if (true && ( (!(((getUseStraightenings()==0)))) ) )
546  graph->evalOpParmInst(_curentry.straight_enabled, nodeidx, "straight_enabled#", parmidx, offsets, time, 0, 2-1);
547  _curentry.straight_group = ""_UTsh;
548  if (true && ( (!(((getUseStraightenings()==0)))) ) )
549  graph->evalOpParmInst(_curentry.straight_group, nodeidx, "straight_group#", parmidx, offsets, time, 0, 2-1);
550 
551  }
552  }
553  else
554  myStraightenings.clear();
555  myManualLayout = true;
556  if (true)
557  graph->evalOpParm(myManualLayout, nodeidx, "manuallayout", time, 0);
558  myLayoutSeams = ""_UTsh;
559  if (true && ( (true&&!(((getManualLayout()==0)))) ) )
560  graph->evalOpParm(myLayoutSeams, nodeidx, "layoutseamgroup", time, 0);
561  myLayoutRectifyGroup = ""_UTsh;
562  if (true && ( (true&&!(((getManualLayout()==0)))) ) )
563  graph->evalOpParm(myLayoutRectifyGroup, nodeidx, "layoutrectifygroup", time, 0);
564  if (true && ( (!(((getManualLayout()==0))||((getManualLayout()==0)))) ) )
565  {
566  int64 length = 0;
567  graph->evalOpParm(length, nodeidx, "lpins", time, 0);
568  if (length < 0) length = 0;
569  myLpins.setSize(length);
570  for (exint i = 0; i < length; i++)
571  {
572  int parmidx[1];
573  int offsets[1];
574  parmidx[0] = i+0;
575  offsets[0] = 0;
576  auto && _curentry = myLpins(i);
577  (void) _curentry;
578  _curentry.lprimvert = UT_Vector2D(0,0);
579  if (true && ( (!(((getManualLayout()==0))||((getManualLayout()==0)))) ) && ( (true&&!(((getManualLayout()==0)))) ) )
580  graph->evalOpParmInst(_curentry.lprimvert, nodeidx, "lprimvert#", parmidx, offsets, time, 0, 2-1);
581  _curentry.lpinuv = UT_Vector2D(0,0);
582  if (true && ( (!(((getManualLayout()==0))||((getManualLayout()==0)))) ) && ( (true&&!(((getManualLayout()==0)))) ) )
583  graph->evalOpParmInst(_curentry.lpinuv, nodeidx, "lpinuv#", parmidx, offsets, time, 0, 2-1);
584  _curentry.lpinrefuv = UT_Vector2D(0,0);
585  if (true && ( (!(((getManualLayout()==0))||((getManualLayout()==0)))) ) && ( (true&&!(((getManualLayout()==0)))) ) )
586  graph->evalOpParmInst(_curentry.lpinrefuv, nodeidx, "lpinrefuv#", parmidx, offsets, time, 0, 2-1);
587 
588  }
589  }
590  else
591  myLpins.clear();
592  if (true && ( (!(((getManualLayout()==0))||((getManualLayout()==0)))) ) )
593  {
594  int64 length = 0;
595  graph->evalOpParm(length, nodeidx, "lalignments", time, 0);
596  if (length < 0) length = 0;
597  myLalignments.setSize(length);
598  for (exint i = 0; i < length; i++)
599  {
600  int parmidx[1];
601  int offsets[1];
602  parmidx[0] = i+0;
603  offsets[0] = 0;
604  auto && _curentry = myLalignments(i);
605  (void) _curentry;
606  _curentry.lalign_group = ""_UTsh;
607  if (true && ( (!(((getManualLayout()==0))||((getManualLayout()==0)))) ) && ( (true&&!(((getManualLayout()==0)))) ) )
608  graph->evalOpParmInst(_curentry.lalign_group, nodeidx, "lalign_group#", parmidx, offsets, time, 0, 2-1);
609  _curentry.lalign_axis = 0;
610  if (true && ( (!(((getManualLayout()==0))||((getManualLayout()==0)))) ) && ( (true&&!(((getManualLayout()==0)))) ) )
611  graph->evalOpParmInst(_curentry.lalign_axis, nodeidx, "lalign_axis#", parmidx, offsets, time, 0, 2-1);
612 
613  }
614  }
615  else
616  myLalignments.clear();
617  if (true && ( (!(((getManualLayout()==0))||((getManualLayout()==0)))) ) )
618  {
619  int64 length = 0;
620  graph->evalOpParm(length, nodeidx, "lstraightenings", time, 0);
621  if (length < 0) length = 0;
622  myLstraightenings.setSize(length);
623  for (exint i = 0; i < length; i++)
624  {
625  int parmidx[1];
626  int offsets[1];
627  parmidx[0] = i+0;
628  offsets[0] = 0;
629  auto && _curentry = myLstraightenings(i);
630  (void) _curentry;
631  _curentry.lstraight_group = ""_UTsh;
632  if (true && ( (!(((getManualLayout()==0))||((getManualLayout()==0)))) ) && ( (true&&!(((getManualLayout()==0)))) ) )
633  graph->evalOpParmInst(_curentry.lstraight_group, nodeidx, "lstraight_group#", parmidx, offsets, time, 0, 2-1);
634 
635  }
636  }
637  else
638  myLstraightenings.clear();
639  myUseOutputSeams = false;
640  if (true)
641  graph->evalOpParm(myUseOutputSeams, nodeidx, "useoutputseams", time, 0);
642  myOutputSeams = "outputseams"_UTsh;
643  if (true && ( (true&&!(((getUseOutputSeams()==0)))) ) )
644  graph->evalOpParm(myOutputSeams, nodeidx, "outputseams", time, 0);
645  myUseOutputConstrIslands = false;
646  if (true)
647  graph->evalOpParm(myUseOutputConstrIslands, nodeidx, "useoutputconstrislands", time, 0);
648  myOutputConstrIslands = "constrainedprims"_UTsh;
649  if (true && ( (true&&!(((getUseOutputConstrIslands()==0)))) ) )
650  graph->evalOpParm(myOutputConstrIslands, nodeidx, "outputconstrislands", time, 0);
651  myBBoxCenter = UT_Vector2D(0.5,0.5);
652  if (true)
653  graph->evalOpParm(myBBoxCenter, nodeidx, "bboxcenter", time, 0);
654  myBBoxSize = UT_Vector2D(1,1);
655  if (true)
656  graph->evalOpParm(myBBoxSize, nodeidx, "bboxsize", time, 0);
657 
658  }
659 
660 
661  void loadFromOpSubclass(const LoadParms &loadparms) override
662  {
663  buildFromOp(loadparms.graph(), loadparms.nodeIdx(), loadparms.context().getTime(), loadparms.depnode());
664  }
665 
666 
667  void copyFrom(const OP_NodeParms *src) override
668  {
669  *this = *((const SOP_UVFlatten_3_0Parms *)src);
670  }
671 
672  template <typename T>
673  void
674  doGetParmValue(TempIndex idx, TempIndex instance, T &value) const
675  {
676  if (idx.size() < 1)
677  return;
678  UT_ASSERT(idx.size() == instance.size()+1);
679  if (idx.size() != instance.size()+1)
680  return;
681  switch (idx[0])
682  {
683  case 0:
684  coerceValue(value, myGroup);
685  break;
686  case 1:
687  coerceValue(value, myUVAttrib);
688  break;
689  case 2:
690  coerceValue(value, myMethod);
691  break;
692  case 3:
693  coerceValue(value, myKeepExistingSeams);
694  break;
695  case 4:
696  coerceValue(value, myKeepExistingLayout);
697  break;
698  case 5:
699  coerceValue(value, myPinBoundaries);
700  break;
701  case 6:
702  coerceValue(value, mySeams);
703  break;
704  case 7:
705  coerceValue(value, myRectifyGroup);
706  break;
707  case 8:
708  coerceValue(value, myUsePins);
709  break;
710  case 9:
711  if (idx.size() == 1)
712  coerceValue(value, myPins.entries());
713  else if (instance[0] < myPins.entries())
714  {
715  auto && _data = myPins(instance[0]);
716  switch (idx[1])
717  {
718  case 0:
719  coerceValue(value, _data.usepin);
720  break;
721  case 1:
722  coerceValue(value, _data.primvert);
723  break;
724  case 2:
725  coerceValue(value, _data.pinuv);
726  break;
727  case 3:
728  coerceValue(value, _data.pinrefuv);
729  break;
730 
731  }
732  }
733  break;
734  case 10:
735  coerceValue(value, myUseAlignments);
736  break;
737  case 11:
738  if (idx.size() == 1)
739  coerceValue(value, myAlignments.entries());
740  else if (instance[0] < myAlignments.entries())
741  {
742  auto && _data = myAlignments(instance[0]);
743  switch (idx[1])
744  {
745  case 0:
746  coerceValue(value, _data.align_enabled);
747  break;
748  case 1:
749  coerceValue(value, _data.align_group);
750  break;
751  case 2:
752  coerceValue(value, _data.align_axis);
753  break;
754 
755  }
756  }
757  break;
758  case 12:
759  coerceValue(value, myUseStraightenings);
760  break;
761  case 13:
762  if (idx.size() == 1)
763  coerceValue(value, myStraightenings.entries());
764  else if (instance[0] < myStraightenings.entries())
765  {
766  auto && _data = myStraightenings(instance[0]);
767  switch (idx[1])
768  {
769  case 0:
770  coerceValue(value, _data.straight_enabled);
771  break;
772  case 1:
773  coerceValue(value, _data.straight_group);
774  break;
775 
776  }
777  }
778  break;
779  case 14:
780  coerceValue(value, myManualLayout);
781  break;
782  case 15:
783  coerceValue(value, myLayoutSeams);
784  break;
785  case 16:
786  coerceValue(value, myLayoutRectifyGroup);
787  break;
788  case 17:
789  if (idx.size() == 1)
790  coerceValue(value, myLpins.entries());
791  else if (instance[0] < myLpins.entries())
792  {
793  auto && _data = myLpins(instance[0]);
794  switch (idx[1])
795  {
796  case 0:
797  coerceValue(value, _data.lprimvert);
798  break;
799  case 1:
800  coerceValue(value, _data.lpinuv);
801  break;
802  case 2:
803  coerceValue(value, _data.lpinrefuv);
804  break;
805 
806  }
807  }
808  break;
809  case 18:
810  if (idx.size() == 1)
811  coerceValue(value, myLalignments.entries());
812  else if (instance[0] < myLalignments.entries())
813  {
814  auto && _data = myLalignments(instance[0]);
815  switch (idx[1])
816  {
817  case 0:
818  coerceValue(value, _data.lalign_group);
819  break;
820  case 1:
821  coerceValue(value, _data.lalign_axis);
822  break;
823 
824  }
825  }
826  break;
827  case 19:
828  if (idx.size() == 1)
829  coerceValue(value, myLstraightenings.entries());
830  else if (instance[0] < myLstraightenings.entries())
831  {
832  auto && _data = myLstraightenings(instance[0]);
833  switch (idx[1])
834  {
835  case 0:
836  coerceValue(value, _data.lstraight_group);
837  break;
838 
839  }
840  }
841  break;
842  case 20:
843  coerceValue(value, myUseOutputSeams);
844  break;
845  case 21:
846  coerceValue(value, myOutputSeams);
847  break;
848  case 22:
849  coerceValue(value, myUseOutputConstrIslands);
850  break;
851  case 23:
852  coerceValue(value, myOutputConstrIslands);
853  break;
854  case 24:
855  coerceValue(value, myBBoxCenter);
856  break;
857  case 25:
858  coerceValue(value, myBBoxSize);
859  break;
860 
861  }
862  }
863 
864  bool isParmColorRamp(exint idx) const override
865  {
866  switch (idx)
867  {
868 
869  }
870  return false;
871  }
872 
873  void getNestParmValue(TempIndex idx, TempIndex instance, exint &value) const override
874  { doGetParmValue(idx, instance, value); }
875  void getNestParmValue(TempIndex idx, TempIndex instance, fpreal &value) const override
876  { doGetParmValue(idx, instance, value); }
877  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector2D &value) const override
878  { doGetParmValue(idx, instance, value); }
879  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector3D &value) const override
880  { doGetParmValue(idx, instance, value); }
881  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector4D &value) const override
882  { doGetParmValue(idx, instance, value); }
883  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix2D &value) const override
884  { doGetParmValue(idx, instance, value); }
885  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
886  { doGetParmValue(idx, instance, value); }
887  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix4D &value) const override
888  { doGetParmValue(idx, instance, value); }
889  void getNestParmValue(TempIndex idx, TempIndex instance, UT_StringHolder &value) const override
890  { doGetParmValue(idx, instance, value); }
891  void getNestParmValue(TempIndex idx, TempIndex instance, UT_SharedPtr<UT_Ramp> &value) const override
892  { doGetParmValue(idx, instance, value); }
893  void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
894  { doGetParmValue(idx, instance, value); }
895 
896  template <typename T>
897  void
898  doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
899  {
900  if (idx.size() < 1)
901  return;
902  UT_ASSERT(idx.size() == instance.size()+1);
903  if (idx.size() != instance.size()+1)
904  return;
905  switch (idx[0])
906  {
907  case 0:
908  coerceValue(myGroup, ( ( value ) ));
909  break;
910  case 1:
911  coerceValue(myUVAttrib, ( ( value ) ));
912  break;
913  case 2:
914  coerceValue(myMethod, clampMinValue(0, clampMaxValue(1, value ) ));
915  break;
916  case 3:
917  coerceValue(myKeepExistingSeams, ( ( value ) ));
918  break;
919  case 4:
920  coerceValue(myKeepExistingLayout, ( ( value ) ));
921  break;
922  case 5:
923  coerceValue(myPinBoundaries, ( ( value ) ));
924  break;
925  case 6:
926  coerceValue(mySeams, ( ( value ) ));
927  break;
928  case 7:
929  coerceValue(myRectifyGroup, ( ( value ) ));
930  break;
931  case 8:
932  coerceValue(myUsePins, ( ( value ) ));
933  break;
934  case 9:
935  if (idx.size() == 1)
936  {
937  exint newsize;
938  coerceValue(newsize, value);
939  if (newsize < 0) newsize = 0;
940  myPins.setSize(newsize);
941  }
942  else
943  {
944  if (instance[0] < 0)
945  return;
946  myPins.setSizeIfNeeded(instance[0]+1);
947  auto && _data = myPins(instance[0]);
948  switch (idx[1])
949  {
950  case 0:
951  coerceValue(_data.usepin, value);
952  break;
953  case 1:
954  coerceValue(_data.primvert, value);
955  break;
956  case 2:
957  coerceValue(_data.pinuv, value);
958  break;
959  case 3:
960  coerceValue(_data.pinrefuv, value);
961  break;
962 
963  }
964  }
965  break;
966  case 10:
967  coerceValue(myUseAlignments, ( ( value ) ));
968  break;
969  case 11:
970  if (idx.size() == 1)
971  {
972  exint newsize;
973  coerceValue(newsize, value);
974  if (newsize < 0) newsize = 0;
975  myAlignments.setSize(newsize);
976  }
977  else
978  {
979  if (instance[0] < 0)
980  return;
981  myAlignments.setSizeIfNeeded(instance[0]+1);
982  auto && _data = myAlignments(instance[0]);
983  switch (idx[1])
984  {
985  case 0:
986  coerceValue(_data.align_enabled, value);
987  break;
988  case 1:
989  coerceValue(_data.align_group, value);
990  break;
991  case 2:
992  coerceValue(_data.align_axis, value);
993  break;
994 
995  }
996  }
997  break;
998  case 12:
999  coerceValue(myUseStraightenings, ( ( value ) ));
1000  break;
1001  case 13:
1002  if (idx.size() == 1)
1003  {
1004  exint newsize;
1005  coerceValue(newsize, value);
1006  if (newsize < 0) newsize = 0;
1007  myStraightenings.setSize(newsize);
1008  }
1009  else
1010  {
1011  if (instance[0] < 0)
1012  return;
1013  myStraightenings.setSizeIfNeeded(instance[0]+1);
1014  auto && _data = myStraightenings(instance[0]);
1015  switch (idx[1])
1016  {
1017  case 0:
1018  coerceValue(_data.straight_enabled, value);
1019  break;
1020  case 1:
1021  coerceValue(_data.straight_group, value);
1022  break;
1023 
1024  }
1025  }
1026  break;
1027  case 14:
1028  coerceValue(myManualLayout, ( ( value ) ));
1029  break;
1030  case 15:
1031  coerceValue(myLayoutSeams, ( ( value ) ));
1032  break;
1033  case 16:
1034  coerceValue(myLayoutRectifyGroup, ( ( value ) ));
1035  break;
1036  case 17:
1037  if (idx.size() == 1)
1038  {
1039  exint newsize;
1040  coerceValue(newsize, value);
1041  if (newsize < 0) newsize = 0;
1042  myLpins.setSize(newsize);
1043  }
1044  else
1045  {
1046  if (instance[0] < 0)
1047  return;
1048  myLpins.setSizeIfNeeded(instance[0]+1);
1049  auto && _data = myLpins(instance[0]);
1050  switch (idx[1])
1051  {
1052  case 0:
1053  coerceValue(_data.lprimvert, value);
1054  break;
1055  case 1:
1056  coerceValue(_data.lpinuv, value);
1057  break;
1058  case 2:
1059  coerceValue(_data.lpinrefuv, value);
1060  break;
1061 
1062  }
1063  }
1064  break;
1065  case 18:
1066  if (idx.size() == 1)
1067  {
1068  exint newsize;
1069  coerceValue(newsize, value);
1070  if (newsize < 0) newsize = 0;
1071  myLalignments.setSize(newsize);
1072  }
1073  else
1074  {
1075  if (instance[0] < 0)
1076  return;
1077  myLalignments.setSizeIfNeeded(instance[0]+1);
1078  auto && _data = myLalignments(instance[0]);
1079  switch (idx[1])
1080  {
1081  case 0:
1082  coerceValue(_data.lalign_group, value);
1083  break;
1084  case 1:
1085  coerceValue(_data.lalign_axis, value);
1086  break;
1087 
1088  }
1089  }
1090  break;
1091  case 19:
1092  if (idx.size() == 1)
1093  {
1094  exint newsize;
1095  coerceValue(newsize, value);
1096  if (newsize < 0) newsize = 0;
1097  myLstraightenings.setSize(newsize);
1098  }
1099  else
1100  {
1101  if (instance[0] < 0)
1102  return;
1103  myLstraightenings.setSizeIfNeeded(instance[0]+1);
1104  auto && _data = myLstraightenings(instance[0]);
1105  switch (idx[1])
1106  {
1107  case 0:
1108  coerceValue(_data.lstraight_group, value);
1109  break;
1110 
1111  }
1112  }
1113  break;
1114  case 20:
1115  coerceValue(myUseOutputSeams, ( ( value ) ));
1116  break;
1117  case 21:
1118  coerceValue(myOutputSeams, ( ( value ) ));
1119  break;
1120  case 22:
1121  coerceValue(myUseOutputConstrIslands, ( ( value ) ));
1122  break;
1123  case 23:
1124  coerceValue(myOutputConstrIslands, ( ( value ) ));
1125  break;
1126  case 24:
1127  coerceValue(myBBoxCenter, ( ( value ) ));
1128  break;
1129  case 25:
1130  coerceValue(myBBoxSize, clampMinValue(0, ( value ) ));
1131  break;
1132 
1133  }
1134  }
1135 
1136  void setNestParmValue(TempIndex idx, TempIndex instance, const exint &value) override
1137  { doSetParmValue(idx, instance, value); }
1138  void setNestParmValue(TempIndex idx, TempIndex instance, const fpreal &value) override
1139  { doSetParmValue(idx, instance, value); }
1140  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector2D &value) override
1141  { doSetParmValue(idx, instance, value); }
1142  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector3D &value) override
1143  { doSetParmValue(idx, instance, value); }
1144  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector4D &value) override
1145  { doSetParmValue(idx, instance, value); }
1146  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix2D &value) override
1147  { doSetParmValue(idx, instance, value); }
1148  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix3D &value) override
1149  { doSetParmValue(idx, instance, value); }
1150  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix4D &value) override
1151  { doSetParmValue(idx, instance, value); }
1152  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_StringHolder &value) override
1153  { doSetParmValue(idx, instance, value); }
1154  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_SharedPtr<UT_Ramp> &value) override
1155  { doSetParmValue(idx, instance, value); }
1156  void setNestParmValue(TempIndex idx, TempIndex instance, const PRM_DataItemHandle &value) override
1157  { doSetParmValue(idx, instance, value); }
1158 
1159  exint getNestNumParms(TempIndex idx) const override
1160  {
1161  if (idx.size() == 0)
1162  return 26;
1163  switch (idx[0])
1164  {
1165  case 9:
1166  return 4;
1167  case 11:
1168  return 3;
1169  case 13:
1170  return 2;
1171  case 17:
1172  return 3;
1173  case 18:
1174  return 2;
1175  case 19:
1176  return 1;
1177 
1178  }
1179  // Invalid
1180  return 0;
1181  }
1182 
1183  const char *getNestParmName(TempIndex fieldnum) const override
1184  {
1185  if (fieldnum.size() < 1)
1186  return 0;
1187  switch (fieldnum[0])
1188  {
1189  case 0:
1190  return "group";
1191  case 1:
1192  return "uvattrib";
1193  case 2:
1194  return "method";
1195  case 3:
1196  return "keepexistingseams";
1197  case 4:
1198  return "keepexistinglayout";
1199  case 5:
1200  return "pinboundaries";
1201  case 6:
1202  return "seamgroup";
1203  case 7:
1204  return "rectifygroup";
1205  case 8:
1206  return "usepins";
1207  case 9:
1208  if (fieldnum.size() == 1)
1209  return "pins";
1210  switch (fieldnum[1])
1211  {
1212  case 0:
1213  return "usepin#";
1214  case 1:
1215  return "primvert#";
1216  case 2:
1217  return "pinuv#";
1218  case 3:
1219  return "pinrefuv#";
1220 
1221  }
1222  return 0;
1223  case 10:
1224  return "usealignments";
1225  case 11:
1226  if (fieldnum.size() == 1)
1227  return "alignments";
1228  switch (fieldnum[1])
1229  {
1230  case 0:
1231  return "align_enabled#";
1232  case 1:
1233  return "align_group#";
1234  case 2:
1235  return "align_axis#";
1236 
1237  }
1238  return 0;
1239  case 12:
1240  return "usestraightenings";
1241  case 13:
1242  if (fieldnum.size() == 1)
1243  return "straightenings";
1244  switch (fieldnum[1])
1245  {
1246  case 0:
1247  return "straight_enabled#";
1248  case 1:
1249  return "straight_group#";
1250 
1251  }
1252  return 0;
1253  case 14:
1254  return "manuallayout";
1255  case 15:
1256  return "layoutseamgroup";
1257  case 16:
1258  return "layoutrectifygroup";
1259  case 17:
1260  if (fieldnum.size() == 1)
1261  return "lpins";
1262  switch (fieldnum[1])
1263  {
1264  case 0:
1265  return "lprimvert#";
1266  case 1:
1267  return "lpinuv#";
1268  case 2:
1269  return "lpinrefuv#";
1270 
1271  }
1272  return 0;
1273  case 18:
1274  if (fieldnum.size() == 1)
1275  return "lalignments";
1276  switch (fieldnum[1])
1277  {
1278  case 0:
1279  return "lalign_group#";
1280  case 1:
1281  return "lalign_axis#";
1282 
1283  }
1284  return 0;
1285  case 19:
1286  if (fieldnum.size() == 1)
1287  return "lstraightenings";
1288  switch (fieldnum[1])
1289  {
1290  case 0:
1291  return "lstraight_group#";
1292 
1293  }
1294  return 0;
1295  case 20:
1296  return "useoutputseams";
1297  case 21:
1298  return "outputseams";
1299  case 22:
1300  return "useoutputconstrislands";
1301  case 23:
1302  return "outputconstrislands";
1303  case 24:
1304  return "bboxcenter";
1305  case 25:
1306  return "bboxsize";
1307 
1308  }
1309  return 0;
1310  }
1311 
1312  ParmType getNestParmType(TempIndex fieldnum) const override
1313  {
1314  if (fieldnum.size() < 1)
1315  return PARM_UNSUPPORTED;
1316  switch (fieldnum[0])
1317  {
1318  case 0:
1319  return PARM_STRING;
1320  case 1:
1321  return PARM_STRING;
1322  case 2:
1323  return PARM_INTEGER;
1324  case 3:
1325  return PARM_INTEGER;
1326  case 4:
1327  return PARM_INTEGER;
1328  case 5:
1329  return PARM_INTEGER;
1330  case 6:
1331  return PARM_STRING;
1332  case 7:
1333  return PARM_STRING;
1334  case 8:
1335  return PARM_INTEGER;
1336  case 9:
1337  if (fieldnum.size() == 1)
1338  return PARM_MULTIPARM;
1339  switch (fieldnum[1])
1340  {
1341  case 0:
1342  return PARM_INTEGER;
1343  case 1:
1344  return PARM_VECTOR2;
1345  case 2:
1346  return PARM_VECTOR2;
1347  case 3:
1348  return PARM_VECTOR2;
1349 
1350  }
1351  return PARM_UNSUPPORTED;
1352  case 10:
1353  return PARM_INTEGER;
1354  case 11:
1355  if (fieldnum.size() == 1)
1356  return PARM_MULTIPARM;
1357  switch (fieldnum[1])
1358  {
1359  case 0:
1360  return PARM_INTEGER;
1361  case 1:
1362  return PARM_STRING;
1363  case 2:
1364  return PARM_INTEGER;
1365 
1366  }
1367  return PARM_UNSUPPORTED;
1368  case 12:
1369  return PARM_INTEGER;
1370  case 13:
1371  if (fieldnum.size() == 1)
1372  return PARM_MULTIPARM;
1373  switch (fieldnum[1])
1374  {
1375  case 0:
1376  return PARM_INTEGER;
1377  case 1:
1378  return PARM_STRING;
1379 
1380  }
1381  return PARM_UNSUPPORTED;
1382  case 14:
1383  return PARM_INTEGER;
1384  case 15:
1385  return PARM_STRING;
1386  case 16:
1387  return PARM_STRING;
1388  case 17:
1389  if (fieldnum.size() == 1)
1390  return PARM_MULTIPARM;
1391  switch (fieldnum[1])
1392  {
1393  case 0:
1394  return PARM_VECTOR2;
1395  case 1:
1396  return PARM_VECTOR2;
1397  case 2:
1398  return PARM_VECTOR2;
1399 
1400  }
1401  return PARM_UNSUPPORTED;
1402  case 18:
1403  if (fieldnum.size() == 1)
1404  return PARM_MULTIPARM;
1405  switch (fieldnum[1])
1406  {
1407  case 0:
1408  return PARM_STRING;
1409  case 1:
1410  return PARM_INTEGER;
1411 
1412  }
1413  return PARM_UNSUPPORTED;
1414  case 19:
1415  if (fieldnum.size() == 1)
1416  return PARM_MULTIPARM;
1417  switch (fieldnum[1])
1418  {
1419  case 0:
1420  return PARM_STRING;
1421 
1422  }
1423  return PARM_UNSUPPORTED;
1424  case 20:
1425  return PARM_INTEGER;
1426  case 21:
1427  return PARM_STRING;
1428  case 22:
1429  return PARM_INTEGER;
1430  case 23:
1431  return PARM_STRING;
1432  case 24:
1433  return PARM_VECTOR2;
1434  case 25:
1435  return PARM_VECTOR2;
1436 
1437  }
1438  return PARM_UNSUPPORTED;
1439  }
1440 
1441  // Boiler plate to load individual types.
1442  static void loadData(UT_IStream &is, int64 &v)
1443  { is.bread(&v, 1); }
1444  static void loadData(UT_IStream &is, bool &v)
1445  { int64 iv; is.bread(&iv, 1); v = iv; }
1446  static void loadData(UT_IStream &is, fpreal64 &v)
1447  { is.bread<fpreal64>(&v, 1); }
1448  static void loadData(UT_IStream &is, UT_Vector2D &v)
1449  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1); }
1450  static void loadData(UT_IStream &is, UT_Vector3D &v)
1451  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
1452  is.bread<fpreal64>(&v.z(), 1); }
1453  static void loadData(UT_IStream &is, UT_Vector4D &v)
1454  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
1455  is.bread<fpreal64>(&v.z(), 1); is.bread<fpreal64>(&v.w(), 1); }
1456  static void loadData(UT_IStream &is, UT_Matrix2D &v)
1457  { for (int r = 0; r < 2; r++) for (int c = 0; c < 2; c++) is.bread<fpreal64>(&v(r, c), 1); }
1458  static void loadData(UT_IStream &is, UT_Matrix3D &v)
1459  { for (int r = 0; r < 3; r++) for (int c = 0; c < 3; c++) is.bread<fpreal64>(&v(r, c), 1); }
1460  static void loadData(UT_IStream &is, UT_Matrix4D &v)
1461  { for (int r = 0; r < 4; r++) for (int c = 0; c < 4; c++) is.bread<fpreal64>(&v(r, c), 1); }
1462  static void loadData(UT_IStream &is, UT_Vector2I &v)
1463  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1); }
1464  static void loadData(UT_IStream &is, UT_Vector3I &v)
1465  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
1466  is.bread<int64>(&v.z(), 1); }
1467  static void loadData(UT_IStream &is, UT_Vector4I &v)
1468  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
1469  is.bread<int64>(&v.z(), 1); is.bread<int64>(&v.w(), 1); }
1471  { is.bread(v); }
1473  { UT_StringHolder rampdata;
1474  loadData(is, rampdata);
1475  if (rampdata.isstring())
1476  {
1477  v.reset(new UT_Ramp());
1478  UT_IStream istr((const char *) rampdata, rampdata.length(), UT_ISTREAM_ASCII);
1479  v->load(istr);
1480  }
1481  else v.reset();
1482  }
1485  loadData(is, data);
1486  if (data.isstring())
1487  {
1488  // Find the data type.
1489  const char *colon = UT_StringWrap(data).findChar(':');
1490  if (colon)
1491  {
1492  int typelen = colon - data.buffer();
1494  type.strncpy(data.buffer(), typelen);
1495  UT_IStream istr(((const char *) data) + typelen + 1, data.length() - (typelen + 1), UT_ISTREAM_BINARY);
1496 
1497  v = PRM_DataFactory::parseBinary(type.buffer(), istr);
1498  }
1499  }
1500  else v.reset();
1501  }
1502 
1503  static void saveData(std::ostream &os, int64 v)
1504  { UTwrite(os, &v); }
1505  static void saveData(std::ostream &os, bool v)
1506  { int64 iv = v; UTwrite(os, &iv); }
1507  static void saveData(std::ostream &os, fpreal64 v)
1508  { UTwrite<fpreal64>(os, &v); }
1509  static void saveData(std::ostream &os, UT_Vector2D v)
1510  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y()); }
1511  static void saveData(std::ostream &os, UT_Vector3D v)
1512  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
1513  UTwrite<fpreal64>(os, &v.z()); }
1514  static void saveData(std::ostream &os, UT_Vector4D v)
1515  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
1516  UTwrite<fpreal64>(os, &v.z()); UTwrite<fpreal64>(os, &v.w()); }
1517  static void saveData(std::ostream &os, UT_Matrix2D v)
1518  { for (int r = 0; r < 2; r++) for (int c = 0; c < 2; c++) UTwrite<fpreal64>(os, &v(r, c)); }
1519  static void saveData(std::ostream &os, UT_Matrix3D v)
1520  { for (int r = 0; r < 3; r++) for (int c = 0; c < 3; c++) UTwrite<fpreal64>(os, &v(r, c)); }
1521  static void saveData(std::ostream &os, UT_Matrix4D v)
1522  { for (int r = 0; r < 4; r++) for (int c = 0; c < 4; c++) UTwrite<fpreal64>(os, &v(r, c)); }
1523  static void saveData(std::ostream &os, UT_StringHolder s)
1524  { UT_StringWrap(s).saveBinary(os); }
1525  static void saveData(std::ostream &os, UT_SharedPtr<UT_Ramp> s)
1527  UT_OStringStream ostr;
1528  if (s) s->save(ostr);
1529  result = ostr.str();
1530  saveData(os, result);
1531  }
1532  static void saveData(std::ostream &os, PRM_DataItemHandle s)
1534  UT_OStringStream ostr;
1535  if (s)
1536  {
1537  ostr << s->getDataTypeToken();
1538  ostr << ":";
1539  s->saveBinary(ostr);
1540  }
1541  result = ostr.str();
1542  saveData(os, result);
1543  }
1544 
1545 
1546  void save(std::ostream &os) const
1547  {
1548  int32 v = version();
1549  UTwrite(os, &v);
1550  saveData(os, myGroup);
1551  saveData(os, myUVAttrib);
1552  saveData(os, myMethod);
1553  saveData(os, myKeepExistingSeams);
1554  saveData(os, myKeepExistingLayout);
1555  saveData(os, myPinBoundaries);
1556  saveData(os, mySeams);
1557  saveData(os, myRectifyGroup);
1558  saveData(os, myUsePins);
1559  {
1560  int64 length = myPins.entries();
1561  UTwrite(os, &length);
1562  for (exint i = 0; i < length; i++)
1563  {
1564  auto && _curentry = myPins(i);
1565  (void) _curentry;
1566  saveData(os, _curentry.usepin);
1567  saveData(os, _curentry.primvert);
1568  saveData(os, _curentry.pinuv);
1569  saveData(os, _curentry.pinrefuv);
1570 
1571  }
1572  }
1573  saveData(os, myUseAlignments);
1574  {
1575  int64 length = myAlignments.entries();
1576  UTwrite(os, &length);
1577  for (exint i = 0; i < length; i++)
1578  {
1579  auto && _curentry = myAlignments(i);
1580  (void) _curentry;
1581  saveData(os, _curentry.align_enabled);
1582  saveData(os, _curentry.align_group);
1583  saveData(os, _curentry.align_axis);
1584 
1585  }
1586  }
1587  saveData(os, myUseStraightenings);
1588  {
1589  int64 length = myStraightenings.entries();
1590  UTwrite(os, &length);
1591  for (exint i = 0; i < length; i++)
1592  {
1593  auto && _curentry = myStraightenings(i);
1594  (void) _curentry;
1595  saveData(os, _curentry.straight_enabled);
1596  saveData(os, _curentry.straight_group);
1597 
1598  }
1599  }
1600  saveData(os, myManualLayout);
1601  saveData(os, myLayoutSeams);
1602  saveData(os, myLayoutRectifyGroup);
1603  {
1604  int64 length = myLpins.entries();
1605  UTwrite(os, &length);
1606  for (exint i = 0; i < length; i++)
1607  {
1608  auto && _curentry = myLpins(i);
1609  (void) _curentry;
1610  saveData(os, _curentry.lprimvert);
1611  saveData(os, _curentry.lpinuv);
1612  saveData(os, _curentry.lpinrefuv);
1613 
1614  }
1615  }
1616  {
1617  int64 length = myLalignments.entries();
1618  UTwrite(os, &length);
1619  for (exint i = 0; i < length; i++)
1620  {
1621  auto && _curentry = myLalignments(i);
1622  (void) _curentry;
1623  saveData(os, _curentry.lalign_group);
1624  saveData(os, _curentry.lalign_axis);
1625 
1626  }
1627  }
1628  {
1629  int64 length = myLstraightenings.entries();
1630  UTwrite(os, &length);
1631  for (exint i = 0; i < length; i++)
1632  {
1633  auto && _curentry = myLstraightenings(i);
1634  (void) _curentry;
1635  saveData(os, _curentry.lstraight_group);
1636 
1637  }
1638  }
1639  saveData(os, myUseOutputSeams);
1640  saveData(os, myOutputSeams);
1641  saveData(os, myUseOutputConstrIslands);
1642  saveData(os, myOutputConstrIslands);
1643  saveData(os, myBBoxCenter);
1644  saveData(os, myBBoxSize);
1645 
1646  }
1647 
1648  bool load(UT_IStream &is)
1649  {
1650  int32 v;
1651  is.bread(&v, 1);
1652  if (version() != v)
1653  {
1654  // Fail incompatible versions
1655  return false;
1656  }
1657  loadData(is, myGroup);
1658  loadData(is, myUVAttrib);
1659  loadData(is, myMethod);
1660  loadData(is, myKeepExistingSeams);
1661  loadData(is, myKeepExistingLayout);
1662  loadData(is, myPinBoundaries);
1663  loadData(is, mySeams);
1664  loadData(is, myRectifyGroup);
1665  loadData(is, myUsePins);
1666  {
1667  int64 length;
1668  is.read(&length, 1);
1669  myPins.setSize(length);
1670  for (exint i = 0; i < length; i++)
1671  {
1672  auto && _curentry = myPins(i);
1673  (void) _curentry;
1674  loadData(is, _curentry.usepin);
1675  loadData(is, _curentry.primvert);
1676  loadData(is, _curentry.pinuv);
1677  loadData(is, _curentry.pinrefuv);
1678 
1679  }
1680  }
1681  loadData(is, myUseAlignments);
1682  {
1683  int64 length;
1684  is.read(&length, 1);
1685  myAlignments.setSize(length);
1686  for (exint i = 0; i < length; i++)
1687  {
1688  auto && _curentry = myAlignments(i);
1689  (void) _curentry;
1690  loadData(is, _curentry.align_enabled);
1691  loadData(is, _curentry.align_group);
1692  loadData(is, _curentry.align_axis);
1693 
1694  }
1695  }
1696  loadData(is, myUseStraightenings);
1697  {
1698  int64 length;
1699  is.read(&length, 1);
1700  myStraightenings.setSize(length);
1701  for (exint i = 0; i < length; i++)
1702  {
1703  auto && _curentry = myStraightenings(i);
1704  (void) _curentry;
1705  loadData(is, _curentry.straight_enabled);
1706  loadData(is, _curentry.straight_group);
1707 
1708  }
1709  }
1710  loadData(is, myManualLayout);
1711  loadData(is, myLayoutSeams);
1712  loadData(is, myLayoutRectifyGroup);
1713  {
1714  int64 length;
1715  is.read(&length, 1);
1716  myLpins.setSize(length);
1717  for (exint i = 0; i < length; i++)
1718  {
1719  auto && _curentry = myLpins(i);
1720  (void) _curentry;
1721  loadData(is, _curentry.lprimvert);
1722  loadData(is, _curentry.lpinuv);
1723  loadData(is, _curentry.lpinrefuv);
1724 
1725  }
1726  }
1727  {
1728  int64 length;
1729  is.read(&length, 1);
1730  myLalignments.setSize(length);
1731  for (exint i = 0; i < length; i++)
1732  {
1733  auto && _curentry = myLalignments(i);
1734  (void) _curentry;
1735  loadData(is, _curentry.lalign_group);
1736  loadData(is, _curentry.lalign_axis);
1737 
1738  }
1739  }
1740  {
1741  int64 length;
1742  is.read(&length, 1);
1743  myLstraightenings.setSize(length);
1744  for (exint i = 0; i < length; i++)
1745  {
1746  auto && _curentry = myLstraightenings(i);
1747  (void) _curentry;
1748  loadData(is, _curentry.lstraight_group);
1749 
1750  }
1751  }
1752  loadData(is, myUseOutputSeams);
1753  loadData(is, myOutputSeams);
1754  loadData(is, myUseOutputConstrIslands);
1755  loadData(is, myOutputConstrIslands);
1756  loadData(is, myBBoxCenter);
1757  loadData(is, myBBoxSize);
1758 
1759  return true;
1760  }
1761 
1762  const UT_StringHolder & getGroup() const { return myGroup; }
1763  void setGroup(const UT_StringHolder & val) { myGroup = val; }
1765  {
1766  SOP_Node *thissop = cookparms.getNode();
1767  if (!thissop) return getGroup();
1769  OP_Utils::evalOpParm(result, thissop, "group", cookparms.getCookTime(), 0);
1770  return result;
1771  }
1772  const UT_StringHolder & getUVAttrib() const { return myUVAttrib; }
1773  void setUVAttrib(const UT_StringHolder & val) { myUVAttrib = val; }
1775  {
1776  SOP_Node *thissop = cookparms.getNode();
1777  if (!thissop) return getUVAttrib();
1779  OP_Utils::evalOpParm(result, thissop, "uvattrib", cookparms.getCookTime(), 0);
1780  return result;
1781  }
1782  Method getMethod() const { return Method(myMethod); }
1783  void setMethod(Method val) { myMethod = int64(val); }
1784  Method opMethod(const SOP_NodeVerb::CookParms &cookparms) const
1785  {
1786  SOP_Node *thissop = cookparms.getNode();
1787  if (!thissop) return getMethod();
1788  int64 result;
1789  OP_Utils::evalOpParm(result, thissop, "method", cookparms.getCookTime(), 0);
1790  return Method(result);
1791  }
1792  bool getKeepExistingSeams() const { return myKeepExistingSeams; }
1793  void setKeepExistingSeams(bool val) { myKeepExistingSeams = val; }
1794  bool opKeepExistingSeams(const SOP_NodeVerb::CookParms &cookparms) const
1795  {
1796  SOP_Node *thissop = cookparms.getNode();
1797  if (!thissop) return getKeepExistingSeams();
1798  bool result;
1799  OP_Utils::evalOpParm(result, thissop, "keepexistingseams", cookparms.getCookTime(), 0);
1800  return result;
1801  }
1802  bool getKeepExistingLayout() const { return myKeepExistingLayout; }
1803  void setKeepExistingLayout(bool val) { myKeepExistingLayout = val; }
1804  bool opKeepExistingLayout(const SOP_NodeVerb::CookParms &cookparms) const
1805  {
1806  SOP_Node *thissop = cookparms.getNode();
1807  if (!thissop) return getKeepExistingLayout();
1808  bool result;
1809  OP_Utils::evalOpParm(result, thissop, "keepexistinglayout", cookparms.getCookTime(), 0);
1810  return result;
1811  }
1812  bool getPinBoundaries() const { return myPinBoundaries; }
1813  void setPinBoundaries(bool val) { myPinBoundaries = val; }
1814  bool opPinBoundaries(const SOP_NodeVerb::CookParms &cookparms) const
1815  {
1816  SOP_Node *thissop = cookparms.getNode();
1817  if (!thissop) return getPinBoundaries();
1818  bool result;
1819  OP_Utils::evalOpParm(result, thissop, "pinboundaries", cookparms.getCookTime(), 0);
1820  return result;
1821  }
1822  const UT_StringHolder & getSeams() const { return mySeams; }
1823  void setSeams(const UT_StringHolder & val) { mySeams = val; }
1825  {
1826  SOP_Node *thissop = cookparms.getNode();
1827  if (!thissop) return getSeams();
1829  OP_Utils::evalOpParm(result, thissop, "seamgroup", cookparms.getCookTime(), 0);
1830  return result;
1831  }
1832  const UT_StringHolder & getRectifyGroup() const { return myRectifyGroup; }
1833  void setRectifyGroup(const UT_StringHolder & val) { myRectifyGroup = val; }
1835  {
1836  SOP_Node *thissop = cookparms.getNode();
1837  if (!thissop) return getRectifyGroup();
1839  OP_Utils::evalOpParm(result, thissop, "rectifygroup", cookparms.getCookTime(), 0);
1840  return result;
1841  }
1842  bool getUsePins() const { return myUsePins; }
1843  void setUsePins(bool val) { myUsePins = val; }
1844  bool opUsePins(const SOP_NodeVerb::CookParms &cookparms) const
1845  {
1846  SOP_Node *thissop = cookparms.getNode();
1847  if (!thissop) return getUsePins();
1848  bool result;
1849  OP_Utils::evalOpParm(result, thissop, "usepins", cookparms.getCookTime(), 0);
1850  return result;
1851  }
1852  const UT_Array<Pins> &getPins() const { return myPins; }
1853 void setPins(const UT_Array<Pins> &val) { myPins = val; }
1854  exint opPins(const SOP_NodeVerb::CookParms &cookparms) const
1855  {
1856  SOP_Node *thissop = cookparms.getNode();
1857  if (!thissop) return getPins().entries();
1858  exint result;
1859  OP_Utils::evalOpParm(result, thissop, "pins", cookparms.getCookTime(), 0);
1860  return result;
1861  }
1862  bool opPins_usepin(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
1863  { return opinstPins_usepin(cookparms, &_idx); }
1864  bool opinstPins_usepin(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1865  {
1866  SOP_Node *thissop = cookparms.getNode();
1867  if (!thissop) return (myPins(_idx[0]).usepin);
1868  int _parmidx[2-1];
1869  _parmidx[1-1] = _idx[1-1] + 0;
1870 
1871  bool result;
1872  OP_Utils::evalOpParmInst(result, thissop, "usepin#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1873  return (result);
1874  }
1875  UT_Vector2D opPins_primvert(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
1876  { return opinstPins_primvert(cookparms, &_idx); }
1877  UT_Vector2D opinstPins_primvert(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1878  {
1879  SOP_Node *thissop = cookparms.getNode();
1880  if (!thissop) return (myPins(_idx[0]).primvert);
1881  int _parmidx[2-1];
1882  _parmidx[1-1] = _idx[1-1] + 0;
1883 
1885  OP_Utils::evalOpParmInst(result, thissop, "primvert#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1886  return (result);
1887  }
1888  UT_Vector2D opPins_pinuv(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
1889  { return opinstPins_pinuv(cookparms, &_idx); }
1890  UT_Vector2D opinstPins_pinuv(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1891  {
1892  SOP_Node *thissop = cookparms.getNode();
1893  if (!thissop) return (myPins(_idx[0]).pinuv);
1894  int _parmidx[2-1];
1895  _parmidx[1-1] = _idx[1-1] + 0;
1896 
1898  OP_Utils::evalOpParmInst(result, thissop, "pinuv#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1899  return (result);
1900  }
1901  UT_Vector2D opPins_pinrefuv(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
1902  { return opinstPins_pinrefuv(cookparms, &_idx); }
1903  UT_Vector2D opinstPins_pinrefuv(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1904  {
1905  SOP_Node *thissop = cookparms.getNode();
1906  if (!thissop) return (myPins(_idx[0]).pinrefuv);
1907  int _parmidx[2-1];
1908  _parmidx[1-1] = _idx[1-1] + 0;
1909 
1911  OP_Utils::evalOpParmInst(result, thissop, "pinrefuv#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1912  return (result);
1913  }
1914 
1915  bool getUseAlignments() const { return myUseAlignments; }
1916  void setUseAlignments(bool val) { myUseAlignments = val; }
1917  bool opUseAlignments(const SOP_NodeVerb::CookParms &cookparms) const
1918  {
1919  SOP_Node *thissop = cookparms.getNode();
1920  if (!thissop) return getUseAlignments();
1921  bool result;
1922  OP_Utils::evalOpParm(result, thissop, "usealignments", cookparms.getCookTime(), 0);
1923  return result;
1924  }
1925  const UT_Array<Alignments> &getAlignments() const { return myAlignments; }
1926 void setAlignments(const UT_Array<Alignments> &val) { myAlignments = val; }
1928  {
1929  SOP_Node *thissop = cookparms.getNode();
1930  if (!thissop) return getAlignments().entries();
1931  exint result;
1932  OP_Utils::evalOpParm(result, thissop, "alignments", cookparms.getCookTime(), 0);
1933  return result;
1934  }
1935  bool opAlignments_align_enabled(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
1936  { return opinstAlignments_align_enabled(cookparms, &_idx); }
1937  bool opinstAlignments_align_enabled(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1938  {
1939  SOP_Node *thissop = cookparms.getNode();
1940  if (!thissop) return (myAlignments(_idx[0]).align_enabled);
1941  int _parmidx[2-1];
1942  _parmidx[1-1] = _idx[1-1] + 0;
1943 
1944  bool result;
1945  OP_Utils::evalOpParmInst(result, thissop, "align_enabled#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1946  return (result);
1947  }
1949  { return opinstAlignments_align_group(cookparms, &_idx); }
1951  {
1952  SOP_Node *thissop = cookparms.getNode();
1953  if (!thissop) return (myAlignments(_idx[0]).align_group);
1954  int _parmidx[2-1];
1955  _parmidx[1-1] = _idx[1-1] + 0;
1956 
1958  OP_Utils::evalOpParmInst(result, thissop, "align_group#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1959  return (result);
1960  }
1961  int64 opAlignments_align_axis(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
1962  { return opinstAlignments_align_axis(cookparms, &_idx); }
1963  int64 opinstAlignments_align_axis(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1964  {
1965  SOP_Node *thissop = cookparms.getNode();
1966  if (!thissop) return (myAlignments(_idx[0]).align_axis);
1967  int _parmidx[2-1];
1968  _parmidx[1-1] = _idx[1-1] + 0;
1969 
1970  int64 result;
1971  OP_Utils::evalOpParmInst(result, thissop, "align_axis#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1972  return (result);
1973  }
1974 
1975  bool getUseStraightenings() const { return myUseStraightenings; }
1976  void setUseStraightenings(bool val) { myUseStraightenings = val; }
1977  bool opUseStraightenings(const SOP_NodeVerb::CookParms &cookparms) const
1978  {
1979  SOP_Node *thissop = cookparms.getNode();
1980  if (!thissop) return getUseStraightenings();
1981  bool result;
1982  OP_Utils::evalOpParm(result, thissop, "usestraightenings", cookparms.getCookTime(), 0);
1983  return result;
1984  }
1985  const UT_Array<Straightenings> &getStraightenings() const { return myStraightenings; }
1986 void setStraightenings(const UT_Array<Straightenings> &val) { myStraightenings = val; }
1988  {
1989  SOP_Node *thissop = cookparms.getNode();
1990  if (!thissop) return getStraightenings().entries();
1991  exint result;
1992  OP_Utils::evalOpParm(result, thissop, "straightenings", cookparms.getCookTime(), 0);
1993  return result;
1994  }
1995  bool opStraightenings_straight_enabled(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
1996  { return opinstStraightenings_straight_enabled(cookparms, &_idx); }
1997  bool opinstStraightenings_straight_enabled(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1998  {
1999  SOP_Node *thissop = cookparms.getNode();
2000  if (!thissop) return (myStraightenings(_idx[0]).straight_enabled);
2001  int _parmidx[2-1];
2002  _parmidx[1-1] = _idx[1-1] + 0;
2003 
2004  bool result;
2005  OP_Utils::evalOpParmInst(result, thissop, "straight_enabled#", _parmidx, cookparms.getCookTime(), 0, 2-1);
2006  return (result);
2007  }
2009  { return opinstStraightenings_straight_group(cookparms, &_idx); }
2011  {
2012  SOP_Node *thissop = cookparms.getNode();
2013  if (!thissop) return (myStraightenings(_idx[0]).straight_group);
2014  int _parmidx[2-1];
2015  _parmidx[1-1] = _idx[1-1] + 0;
2016 
2018  OP_Utils::evalOpParmInst(result, thissop, "straight_group#", _parmidx, cookparms.getCookTime(), 0, 2-1);
2019  return (result);
2020  }
2021 
2022  bool getManualLayout() const { return myManualLayout; }
2023  void setManualLayout(bool val) { myManualLayout = val; }
2024  bool opManualLayout(const SOP_NodeVerb::CookParms &cookparms) const
2025  {
2026  SOP_Node *thissop = cookparms.getNode();
2027  if (!thissop) return getManualLayout();
2028  bool result;
2029  OP_Utils::evalOpParm(result, thissop, "manuallayout", cookparms.getCookTime(), 0);
2030  return result;
2031  }
2032  const UT_StringHolder & getLayoutSeams() const { return myLayoutSeams; }
2033  void setLayoutSeams(const UT_StringHolder & val) { myLayoutSeams = val; }
2035  {
2036  SOP_Node *thissop = cookparms.getNode();
2037  if (!thissop) return getLayoutSeams();
2039  OP_Utils::evalOpParm(result, thissop, "layoutseamgroup", cookparms.getCookTime(), 0);
2040  return result;
2041  }
2042  const UT_StringHolder & getLayoutRectifyGroup() const { return myLayoutRectifyGroup; }
2043  void setLayoutRectifyGroup(const UT_StringHolder & val) { myLayoutRectifyGroup = val; }
2045  {
2046  SOP_Node *thissop = cookparms.getNode();
2047  if (!thissop) return getLayoutRectifyGroup();
2049  OP_Utils::evalOpParm(result, thissop, "layoutrectifygroup", cookparms.getCookTime(), 0);
2050  return result;
2051  }
2052  const UT_Array<Lpins> &getLpins() const { return myLpins; }
2053 void setLpins(const UT_Array<Lpins> &val) { myLpins = val; }
2054  exint opLpins(const SOP_NodeVerb::CookParms &cookparms) const
2055  {
2056  SOP_Node *thissop = cookparms.getNode();
2057  if (!thissop) return getLpins().entries();
2058  exint result;
2059  OP_Utils::evalOpParm(result, thissop, "lpins", cookparms.getCookTime(), 0);
2060  return result;
2061  }
2062  UT_Vector2D opLpins_lprimvert(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
2063  { return opinstLpins_lprimvert(cookparms, &_idx); }
2064  UT_Vector2D opinstLpins_lprimvert(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
2065  {
2066  SOP_Node *thissop = cookparms.getNode();
2067  if (!thissop) return (myLpins(_idx[0]).lprimvert);
2068  int _parmidx[2-1];
2069  _parmidx[1-1] = _idx[1-1] + 0;
2070 
2072  OP_Utils::evalOpParmInst(result, thissop, "lprimvert#", _parmidx, cookparms.getCookTime(), 0, 2-1);
2073  return (result);
2074  }
2075  UT_Vector2D opLpins_lpinuv(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
2076  { return opinstLpins_lpinuv(cookparms, &_idx); }
2077  UT_Vector2D opinstLpins_lpinuv(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
2078  {
2079  SOP_Node *thissop = cookparms.getNode();
2080  if (!thissop) return (myLpins(_idx[0]).lpinuv);
2081  int _parmidx[2-1];
2082  _parmidx[1-1] = _idx[1-1] + 0;
2083 
2085  OP_Utils::evalOpParmInst(result, thissop, "lpinuv#", _parmidx, cookparms.getCookTime(), 0, 2-1);
2086  return (result);
2087  }
2088  UT_Vector2D opLpins_lpinrefuv(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
2089  { return opinstLpins_lpinrefuv(cookparms, &_idx); }
2090  UT_Vector2D opinstLpins_lpinrefuv(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
2091  {
2092  SOP_Node *thissop = cookparms.getNode();
2093  if (!thissop) return (myLpins(_idx[0]).lpinrefuv);
2094  int _parmidx[2-1];
2095  _parmidx[1-1] = _idx[1-1] + 0;
2096 
2098  OP_Utils::evalOpParmInst(result, thissop, "lpinrefuv#", _parmidx, cookparms.getCookTime(), 0, 2-1);
2099  return (result);
2100  }
2101 
2102  const UT_Array<Lalignments> &getLalignments() const { return myLalignments; }
2103 void setLalignments(const UT_Array<Lalignments> &val) { myLalignments = val; }
2105  {
2106  SOP_Node *thissop = cookparms.getNode();
2107  if (!thissop) return getLalignments().entries();
2108  exint result;
2109  OP_Utils::evalOpParm(result, thissop, "lalignments", cookparms.getCookTime(), 0);
2110  return result;
2111  }
2113  { return opinstLalignments_lalign_group(cookparms, &_idx); }
2115  {
2116  SOP_Node *thissop = cookparms.getNode();
2117  if (!thissop) return (myLalignments(_idx[0]).lalign_group);
2118  int _parmidx[2-1];
2119  _parmidx[1-1] = _idx[1-1] + 0;
2120 
2122  OP_Utils::evalOpParmInst(result, thissop, "lalign_group#", _parmidx, cookparms.getCookTime(), 0, 2-1);
2123  return (result);
2124  }
2125  int64 opLalignments_lalign_axis(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
2126  { return opinstLalignments_lalign_axis(cookparms, &_idx); }
2127  int64 opinstLalignments_lalign_axis(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
2128  {
2129  SOP_Node *thissop = cookparms.getNode();
2130  if (!thissop) return (myLalignments(_idx[0]).lalign_axis);
2131  int _parmidx[2-1];
2132  _parmidx[1-1] = _idx[1-1] + 0;
2133 
2134  int64 result;
2135  OP_Utils::evalOpParmInst(result, thissop, "lalign_axis#", _parmidx, cookparms.getCookTime(), 0, 2-1);
2136  return (result);
2137  }
2138 
2139  const UT_Array<Lstraightenings> &getLstraightenings() const { return myLstraightenings; }
2140 void setLstraightenings(const UT_Array<Lstraightenings> &val) { myLstraightenings = val; }
2142  {
2143  SOP_Node *thissop = cookparms.getNode();
2144  if (!thissop) return getLstraightenings().entries();
2145  exint result;
2146  OP_Utils::evalOpParm(result, thissop, "lstraightenings", cookparms.getCookTime(), 0);
2147  return result;
2148  }
2150  { return opinstLstraightenings_lstraight_group(cookparms, &_idx); }
2152  {
2153  SOP_Node *thissop = cookparms.getNode();
2154  if (!thissop) return (myLstraightenings(_idx[0]).lstraight_group);
2155  int _parmidx[2-1];
2156  _parmidx[1-1] = _idx[1-1] + 0;
2157 
2159  OP_Utils::evalOpParmInst(result, thissop, "lstraight_group#", _parmidx, cookparms.getCookTime(), 0, 2-1);
2160  return (result);
2161  }
2162 
2163  bool getUseOutputSeams() const { return myUseOutputSeams; }
2164  void setUseOutputSeams(bool val) { myUseOutputSeams = val; }
2165  bool opUseOutputSeams(const SOP_NodeVerb::CookParms &cookparms) const
2166  {
2167  SOP_Node *thissop = cookparms.getNode();
2168  if (!thissop) return getUseOutputSeams();
2169  bool result;
2170  OP_Utils::evalOpParm(result, thissop, "useoutputseams", cookparms.getCookTime(), 0);
2171  return result;
2172  }
2173  const UT_StringHolder & getOutputSeams() const { return myOutputSeams; }
2174  void setOutputSeams(const UT_StringHolder & val) { myOutputSeams = val; }
2176  {
2177  SOP_Node *thissop = cookparms.getNode();
2178  if (!thissop) return getOutputSeams();
2180  OP_Utils::evalOpParm(result, thissop, "outputseams", cookparms.getCookTime(), 0);
2181  return result;
2182  }
2183  bool getUseOutputConstrIslands() const { return myUseOutputConstrIslands; }
2184  void setUseOutputConstrIslands(bool val) { myUseOutputConstrIslands = val; }
2186  {
2187  SOP_Node *thissop = cookparms.getNode();
2188  if (!thissop) return getUseOutputConstrIslands();
2189  bool result;
2190  OP_Utils::evalOpParm(result, thissop, "useoutputconstrislands", cookparms.getCookTime(), 0);
2191  return result;
2192  }
2193  const UT_StringHolder & getOutputConstrIslands() const { return myOutputConstrIslands; }
2194  void setOutputConstrIslands(const UT_StringHolder & val) { myOutputConstrIslands = val; }
2196  {
2197  SOP_Node *thissop = cookparms.getNode();
2198  if (!thissop) return getOutputConstrIslands();
2200  OP_Utils::evalOpParm(result, thissop, "outputconstrislands", cookparms.getCookTime(), 0);
2201  return result;
2202  }
2203  UT_Vector2D getBBoxCenter() const { return myBBoxCenter; }
2204  void setBBoxCenter(UT_Vector2D val) { myBBoxCenter = val; }
2206  {
2207  SOP_Node *thissop = cookparms.getNode();
2208  if (!thissop) return getBBoxCenter();
2210  OP_Utils::evalOpParm(result, thissop, "bboxcenter", cookparms.getCookTime(), 0);
2211  return result;
2212  }
2213  UT_Vector2D getBBoxSize() const { return myBBoxSize; }
2214  void setBBoxSize(UT_Vector2D val) { myBBoxSize = val; }
2216  {
2217  SOP_Node *thissop = cookparms.getNode();
2218  if (!thissop) return getBBoxSize();
2220  OP_Utils::evalOpParm(result, thissop, "bboxsize", cookparms.getCookTime(), 0);
2221  return result;
2222  }
2223 
2224 private:
2225  UT_StringHolder myGroup;
2226  UT_StringHolder myUVAttrib;
2227  int64 myMethod;
2228  bool myKeepExistingSeams;
2229  bool myKeepExistingLayout;
2230  bool myPinBoundaries;
2231  UT_StringHolder mySeams;
2232  UT_StringHolder myRectifyGroup;
2233  bool myUsePins;
2234  UT_Array<Pins> myPins;
2235  bool myUseAlignments;
2236  UT_Array<Alignments> myAlignments;
2237  bool myUseStraightenings;
2238  UT_Array<Straightenings> myStraightenings;
2239  bool myManualLayout;
2240  UT_StringHolder myLayoutSeams;
2241  UT_StringHolder myLayoutRectifyGroup;
2242  UT_Array<Lpins> myLpins;
2243  UT_Array<Lalignments> myLalignments;
2244  UT_Array<Lstraightenings> myLstraightenings;
2245  bool myUseOutputSeams;
2246  UT_StringHolder myOutputSeams;
2247  bool myUseOutputConstrIslands;
2248  UT_StringHolder myOutputConstrIslands;
2249  UT_Vector2D myBBoxCenter;
2250  UT_Vector2D myBBoxSize;
2251 
2252 };
void setUVAttrib(const UT_StringHolder &val)
UT_StringHolder opStraightenings_straight_group(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
static void saveData(std::ostream &os, int64 v)
static void loadData(UT_IStream &is, UT_SharedPtr< UT_Ramp > &v)
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_SharedPtr< UT_Ramp > &value) override
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector2D &value) const override
exint opPins(const SOP_NodeVerb::CookParms &cookparms) const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
void setLstraightenings(const UT_Array< Lstraightenings > &val)
const UT_StringHolder & getLayoutRectifyGroup() const
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glcorearb.h:2540
UT_StringHolder opSeams(const SOP_NodeVerb::CookParms &cookparms) const
UT_Vector2D opinstLpins_lpinrefuv(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
static void loadData(UT_IStream &is, UT_Vector2I &v)
void setNestParmValue(TempIndex idx, TempIndex instance, const fpreal &value) override
void getNestParmValue(TempIndex idx, TempIndex instance, UT_StringHolder &value) const override
static void loadData(UT_IStream &is, UT_Vector4D &v)
int int32
Definition: SYS_Types.h:39
SOP_Node * getNode() const
Definition: SOP_NodeVerb.h:347
bool operator!=(const SOP_UVFlatten_3_0Parms &src) const
static void saveData(std::ostream &os, bool v)
static void loadData(UT_IStream &is, UT_Matrix2D &v)
static void saveData(std::ostream &os, UT_Vector3D v)
bool operator!=(const Lalignments &src) const
void getNestParmValue(TempIndex idx, TempIndex instance, fpreal &value) const override
const UT_Array< Lpins > & getLpins() const
T clampMaxValue(fpreal maxvalue, const T &src) const
Definition: OP_NodeParms.h:315
void getNestParmValue(TempIndex idx, TempIndex instance, UT_SharedPtr< UT_Ramp > &value) const override
static void saveData(std::ostream &os, UT_SharedPtr< UT_Ramp > s)
bool operator!=(const Lstraightenings &src) const
UT_Vector2D opLpins_lprimvert(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
bool opKeepExistingSeams(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder createString(const UT_Array< Alignments > &list) const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector4D &value) override
static void loadData(UT_IStream &is, UT_Vector3I &v)
const UT_StringHolder & getOutputSeams() const
void
Definition: png.h:1083
UT_Vector2D opinstPins_primvert(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
bool operator!=(const Lpins &src) const
static void loadData(UT_IStream &is, UT_Vector4I &v)
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector4.h:493
void setGroup(const UT_StringHolder &val)
static void saveData(std::ostream &os, PRM_DataItemHandle s)
const GLdouble * v
Definition: glcorearb.h:837
fpreal getTime() const
Definition: OP_Context.h:62
bool opinstAlignments_align_enabled(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
int64 opAlignments_align_axis(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
exint opLstraightenings(const SOP_NodeVerb::CookParms &cookparms) const
UT_Vector2T< fpreal64 > UT_Vector2D
UT_Vector2D opinstLpins_lprimvert(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
static void loadData(UT_IStream &is, bool &v)
UT_Vector2D opinstLpins_lpinuv(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
bool operator==(const Lstraightenings &src) const
UT_String makeQuotedString(char delimiter='\'', bool escape_nonprinting=false) const
const UT_Array< Lalignments > & getLalignments() const
const OP_Context & context() const
Definition: OP_NodeParms.h:97
const UT_StringHolder & getGroup() const
UT_Vector2D opPins_pinuv(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
static void loadData(UT_IStream &is, UT_StringHolder &v)
UT_Vector2D opinstPins_pinrefuv(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
constexpr SYS_FORCE_INLINE T & z() noexcept
Definition: UT_Vector3.h:667
int64 exint
Definition: SYS_Types.h:125
SYS_FORCE_INLINE const char * buffer() const
GLdouble s
Definition: glad.h:3009
int64 opinstAlignments_align_axis(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
UT_StringHolder createString(const UT_Array< Lalignments > &list) const
GLuint GLsizei GLsizei * length
Definition: glcorearb.h:795
An output stream object that owns its own string buffer storage.
static void saveData(std::ostream &os, UT_StringHolder s)
exint opLalignments(const SOP_NodeVerb::CookParms &cookparms) const
**But if you need a result
Definition: thread.h:613
bool operator==(const Pins &src) const
bool operator==(const Lpins &src) const
void setOutputSeams(const UT_StringHolder &val)
T clampMinValue(fpreal minvalue, const T &src) const
Definition: OP_NodeParms.h:308
void setLalignments(const UT_Array< Lalignments > &val)
Method opMethod(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opLayoutRectifyGroup(const SOP_NodeVerb::CookParms &cookparms) const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector4D &value) const override
const UT_Array< Lstraightenings > & getLstraightenings() const
exint nodeIdx() const
Definition: OP_NodeParms.h:95
static PRM_DataItemHandle parseBinary(const char *type, UT_IStream &is)
const UT_StringHolder & getOutputConstrIslands() const
const UT_WorkBuffer & str()
Returns a read-only reference to the underlying UT_WorkBuffer.
bool opPins_usepin(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
UT_Vector2D opLpins_lpinuv(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
bool opUseStraightenings(const SOP_NodeVerb::CookParms &cookparms) const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix4D &value) override
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector4.h:491
bool isParmColorRamp(exint idx) const override
bool opUseOutputConstrIslands(const SOP_NodeVerb::CookParms &cookparms) const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector3D &value) override
GLuint GLsizei const GLuint const GLintptr * offsets
Definition: glcorearb.h:2621
bool opinstPins_usepin(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
double fpreal64
Definition: SYS_Types.h:201
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector2.h:423
void setStraightenings(const UT_Array< Straightenings > &val)
void doGetParmValue(TempIndex idx, TempIndex instance, T &value) const
UT_StringHolder opUVAttrib(const SOP_NodeVerb::CookParms &cookparms) const
void loadFromOpSubclass(const LoadParms &loadparms) override
bool operator!=(const Alignments &src) const
bool operator==(const BaseDimensions< T > &a, const BaseDimensions< Y > &b)
Definition: Dimensions.h:137
bool operator==(const Lalignments &src) const
void setAlignments(const UT_Array< Alignments > &val)
bool operator!=(const Straightenings &src) const
bool operator==(const Alignments &src) const
bool opUseOutputSeams(const SOP_NodeVerb::CookParms &cookparms) const
bool opUseAlignments(const SOP_NodeVerb::CookParms &cookparms) const
void setNestParmValue(TempIndex idx, TempIndex instance, const exint &value) override
exint length() const
UT_Vector2D opBBoxCenter(const SOP_NodeVerb::CookParms &cookparms) const
bool operator==(const Straightenings &src) const
void setBBoxCenter(UT_Vector2D val)
UT_StringHolder opinstAlignments_align_group(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix2D &value) override
SYS_FORCE_INLINE const char * buffer() const
std::shared_ptr< T > UT_SharedPtr
Wrapper around std::shared_ptr.
Definition: UT_SharedPtr.h:36
constexpr SYS_FORCE_INLINE T & z() noexcept
Definition: UT_Vector4.h:495
void setSeams(const UT_StringHolder &val)
static void saveData(std::ostream &os, fpreal64 v)
const char * getNestParmName(TempIndex fieldnum) const override
exint read(bool *array, exint sz=1)
Definition: UT_IStream.h:276
const OP_GraphProxy * graph() const
Definition: OP_NodeParms.h:94
bool opPinBoundaries(const SOP_NodeVerb::CookParms &cookparms) const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix3D &value) override
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_StringHolder &value) override
virtual void evalOpParmInst(int64 &v, NodeIdx node, const char *parmname, const int *inst, const int *offsets, fpreal time, DEP_MicroNode *depnode, int nestlevel=1) const =0
static void saveData(std::ostream &os, UT_Matrix4D v)
long long int64
Definition: SYS_Types.h:116
UT_StringHolder opGroup(const SOP_NodeVerb::CookParms &cookparms) const
static void saveData(std::ostream &os, UT_Vector2D v)
UT_Vector2D opLpins_lpinrefuv(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
UT_StringHolder opinstLstraightenings_lstraight_group(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
const UT_Array< Pins > & getPins() const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix2D &value) const override
UT_StringHolder opAlignments_align_group(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
exint opLpins(const SOP_NodeVerb::CookParms &cookparms) const
exint opStraightenings(const SOP_NodeVerb::CookParms &cookparms) const
bool opManualLayout(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opOutputSeams(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder createString(const UT_Array< Lpins > &list) const
int64 opinstLalignments_lalign_axis(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
UT_Vector2D getBBoxCenter() const
UT_Vector2D opBBoxSize(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opLalignments_lalign_group(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
virtual void evalOpParm(int64 &v, NodeIdx node, const char *parmname, fpreal time, DEP_MicroNode *depnode) const =0
void getNestParmValue(TempIndex idx, TempIndex instance, exint &value) const override
static void saveData(std::ostream &os, UT_Matrix3D v)
void setLayoutSeams(const UT_StringHolder &val)
SYS_FORCE_INLINE void strcat(const char *src)
void saveBinary(std::ostream &os) const
Save string to binary stream.
Definition: UT_String.h:296
void setOutputConstrIslands(const UT_StringHolder &val)
UT_StringHolder createString(const UT_Array< Lstraightenings > &list) const
GT_API const UT_StringHolder version
int64 opLalignments_lalign_axis(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
static void loadData(UT_IStream &is, UT_Vector2D &v)
exint entries() const
Alias of size(). size() is preferred.
Definition: UT_Array.h:648
exint getNestNumParms(TempIndex idx) const override
ParmType getNestParmType(TempIndex fieldnum) const override
UT_StringHolder opinstStraightenings_straight_group(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
exint opAlignments(const SOP_NodeVerb::CookParms &cookparms) const
int int appendSprintf(const char *fmt,...) SYS_PRINTF_CHECK_ATTRIBUTE(2
bool operator!=(const Pins &src) const
void coerceValue(T &result, const S &src) const
Definition: OP_NodeParms.h:301
UT_StringHolder opinstLalignments_lalign_group(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
void setLayoutRectifyGroup(const UT_StringHolder &val)
UT_StringHolder opLayoutSeams(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opLstraightenings_lstraight_group(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
static void loadData(UT_IStream &is, PRM_DataItemHandle &v)
UT_Vector2D getBBoxSize() const
bool opStraightenings_straight_enabled(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
fpreal64 fpreal
Definition: SYS_Types.h:277
DEP_MicroNode * depnode() const
Definition: OP_NodeParms.h:99
const UT_Array< Straightenings > & getStraightenings() const
UT_StringHolder opRectifyGroup(const SOP_NodeVerb::CookParms &cookparms) const
Utility class for containing a color ramp.
Definition: UT_Ramp.h:88
void setRectifyGroup(const UT_StringHolder &val)
UT_StringHolder createString(const UT_Array< Pins > &list) const
UT_StringHolder opOutputConstrIslands(const SOP_NodeVerb::CookParms &cookparms) const
static void saveData(std::ostream &os, UT_Vector4D v)
constexpr SYS_FORCE_INLINE T & w() noexcept
Definition: UT_Vector4.h:497
SYS_FORCE_INLINE void append(char character)
const UT_Array< Alignments > & getAlignments() const
static void loadData(UT_IStream &is, UT_Vector3D &v)
GLuint GLfloat * val
Definition: glcorearb.h:1608
#define SOP_API
Definition: SOP_API.h:10
void doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
const UT_StringHolder & getRectifyGroup() const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix4D &value) const override
static void loadData(UT_IStream &is, UT_Matrix4D &v)
const UT_StringHolder & getSeams() const
void copyFrom(const OP_NodeParms *src) override
fpreal getCookTime() const
Definition: SOP_NodeVerb.h:361
UT_Vector2D opinstPins_pinuv(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
static void loadData(UT_IStream &is, fpreal64 &v)
void setLpins(const UT_Array< Lpins > &val)
const char * findChar(int c) const
Definition: UT_String.h:1385
#define UT_ASSERT(ZZ)
Definition: UT_Assert.h:156
Definition: core.h:1131
static void loadData(UT_IStream &is, int64 &v)
void setNestParmValue(TempIndex idx, TempIndex instance, const PRM_DataItemHandle &value) override
void buildFromOp(const OP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
GLboolean r
Definition: glcorearb.h:1222
UT_Vector2D opPins_primvert(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector3.h:665
bool opUsePins(const SOP_NodeVerb::CookParms &cookparms) const
type
Definition: core.h:1059
const UT_StringHolder & getLayoutSeams() const
static void saveData(std::ostream &os, UT_Matrix2D v)
bool opinstStraightenings_straight_enabled(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
const UT_StringHolder & getUVAttrib() const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector2D &value) override
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector3D &value) const override
static void loadData(UT_IStream &is, UT_Matrix3D &v)
UT_SharedPtr< const PRM_DataItem > PRM_DataItemHandle
Definition: PRM_Parm.h:89
void setPins(const UT_Array< Pins > &val)
void save(std::ostream &os) const
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector2.h:425
SYS_FORCE_INLINE bool isstring() const
bool opAlignments_align_enabled(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
OP_NodeParms & operator=(const OP_NodeParms &)=default
SYS_FORCE_INLINE void strncpy(const char *src, exint maxlen)
void setBBoxSize(UT_Vector2D val)
bool opKeepExistingLayout(const SOP_NodeVerb::CookParms &cookparms) const
UT_Vector2D opPins_pinrefuv(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
GLenum src
Definition: glcorearb.h:1793
void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector3.h:663
bool operator==(const SOP_UVFlatten_3_0Parms &src) const
UT_StringHolder createString(const UT_Array< Straightenings > &list) const