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