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 
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  return true;
461  }
463  {
464  return !operator==(src);
465  }
469 
470 
471 
472  void buildFromOp(const OP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
473  {
474  myGroup = ""_UTsh;
475  if (true)
476  graph->evalOpParm(myGroup, nodeidx, "group", time, 0);
477  myUVAttrib = "uv"_UTsh;
478  if (true)
479  graph->evalOpParm(myUVAttrib, nodeidx, "uvattrib", time, 0);
480  myMethod = 0;
481  if (true)
482  graph->evalOpParm(myMethod, nodeidx, "method", time, 0);
483  myKeepExistingSeams = false;
484  if (true)
485  graph->evalOpParm(myKeepExistingSeams, nodeidx, "keepexistingseams", time, 0);
486  myKeepExistingLayout = false;
487  if (true && ( (true&&!(((getKeepExistingSeams()==0)))) ) )
488  graph->evalOpParm(myKeepExistingLayout, nodeidx, "keepexistinglayout", time, 0);
489  myPinBoundaries = false;
490  if (true && ( (true&&!(((getKeepExistingSeams()==0))||((int64(getMethod())!=0)))) ) )
491  graph->evalOpParm(myPinBoundaries, nodeidx, "pinboundaries", time, 0);
492  mySeams = ""_UTsh;
493  if (true)
494  graph->evalOpParm(mySeams, nodeidx, "seamgroup", time, 0);
495  myRectifyGroup = ""_UTsh;
496  if (true)
497  graph->evalOpParm(myRectifyGroup, nodeidx, "rectifygroup", time, 0);
498  myUsePins = true;
499  if (true)
500  graph->evalOpParm(myUsePins, nodeidx, "usepins", time, 0);
501  if (true && ( (!(((getUsePins()==0)))) ) )
502  {
503  int64 length = 0;
504  graph->evalOpParm(length, nodeidx, "pins", time, 0);
505  if (length < 0) length = 0;
506  myPins.setSize(length);
507  for (exint i = 0; i < length; i++)
508  {
509  int parmidx[1];
510  int offsets[1];
511  parmidx[0] = i+0;
512  offsets[0] = 0;
513  auto && _curentry = myPins(i);
514  (void) _curentry;
515  _curentry.usepin = true;
516  if (true && ( (!(((getUsePins()==0)))) ) )
517  graph->evalOpParmInst(_curentry.usepin, nodeidx, "usepin#", parmidx, offsets, time, 0, 2-1);
518  _curentry.primvert = UT_Vector2D(0,0);
519  if (true && ( (!(((getUsePins()==0)))) ) )
520  graph->evalOpParmInst(_curentry.primvert, nodeidx, "primvert#", parmidx, offsets, time, 0, 2-1);
521  _curentry.pinuv = UT_Vector2D(0,0);
522  if (true && ( (!(((getUsePins()==0)))) ) )
523  graph->evalOpParmInst(_curentry.pinuv, nodeidx, "pinuv#", parmidx, offsets, time, 0, 2-1);
524  _curentry.pinrefuv = UT_Vector2D(0,0);
525  if (true && ( (!(((getUsePins()==0)))) ) )
526  graph->evalOpParmInst(_curentry.pinrefuv, nodeidx, "pinrefuv#", parmidx, offsets, time, 0, 2-1);
527 
528  }
529  }
530  else
531  myPins.clear();
532  myUseAlignments = true;
533  if (true)
534  graph->evalOpParm(myUseAlignments, nodeidx, "usealignments", time, 0);
535  if (true && ( (!(((getUseAlignments()==0)))) ) )
536  {
537  int64 length = 0;
538  graph->evalOpParm(length, nodeidx, "alignments", time, 0);
539  if (length < 0) length = 0;
540  myAlignments.setSize(length);
541  for (exint i = 0; i < length; i++)
542  {
543  int parmidx[1];
544  int offsets[1];
545  parmidx[0] = i+0;
546  offsets[0] = 0;
547  auto && _curentry = myAlignments(i);
548  (void) _curentry;
549  _curentry.align_enabled = true;
550  if (true && ( (!(((getUseAlignments()==0)))) ) )
551  graph->evalOpParmInst(_curentry.align_enabled, nodeidx, "align_enabled#", parmidx, offsets, time, 0, 2-1);
552  _curentry.align_group = ""_UTsh;
553  if (true && ( (!(((getUseAlignments()==0)))) ) )
554  graph->evalOpParmInst(_curentry.align_group, nodeidx, "align_group#", parmidx, offsets, time, 0, 2-1);
555  _curentry.align_axis = 0;
556  if (true && ( (!(((getUseAlignments()==0)))) ) )
557  graph->evalOpParmInst(_curentry.align_axis, nodeidx, "align_axis#", parmidx, offsets, time, 0, 2-1);
558 
559  }
560  }
561  else
562  myAlignments.clear();
563  myUseStraightenings = true;
564  if (true)
565  graph->evalOpParm(myUseStraightenings, nodeidx, "usestraightenings", time, 0);
566  if (true && ( (!(((getUseStraightenings()==0)))) ) )
567  {
568  int64 length = 0;
569  graph->evalOpParm(length, nodeidx, "straightenings", time, 0);
570  if (length < 0) length = 0;
571  myStraightenings.setSize(length);
572  for (exint i = 0; i < length; i++)
573  {
574  int parmidx[1];
575  int offsets[1];
576  parmidx[0] = i+0;
577  offsets[0] = 0;
578  auto && _curentry = myStraightenings(i);
579  (void) _curentry;
580  _curentry.straight_enabled = true;
581  if (true && ( (!(((getUseStraightenings()==0)))) ) )
582  graph->evalOpParmInst(_curentry.straight_enabled, nodeidx, "straight_enabled#", parmidx, offsets, time, 0, 2-1);
583  _curentry.straight_group = ""_UTsh;
584  if (true && ( (!(((getUseStraightenings()==0)))) ) )
585  graph->evalOpParmInst(_curentry.straight_group, nodeidx, "straight_group#", parmidx, offsets, time, 0, 2-1);
586 
587  }
588  }
589  else
590  myStraightenings.clear();
591  myManualLayout = true;
592  if (true)
593  graph->evalOpParm(myManualLayout, nodeidx, "manuallayout", time, 0);
594  myLayoutSeams = ""_UTsh;
595  if (true && ( (true&&!(((getManualLayout()==0)))) ) )
596  graph->evalOpParm(myLayoutSeams, nodeidx, "layoutseamgroup", time, 0);
597  myLayoutRectifyGroup = ""_UTsh;
598  if (true && ( (true&&!(((getManualLayout()==0)))) ) )
599  graph->evalOpParm(myLayoutRectifyGroup, nodeidx, "layoutrectifygroup", time, 0);
600  if (true && ( (!(((getManualLayout()==0))||((getManualLayout()==0)))) ) )
601  {
602  int64 length = 0;
603  graph->evalOpParm(length, nodeidx, "lpins", time, 0);
604  if (length < 0) length = 0;
605  myLpins.setSize(length);
606  for (exint i = 0; i < length; i++)
607  {
608  int parmidx[1];
609  int offsets[1];
610  parmidx[0] = i+0;
611  offsets[0] = 0;
612  auto && _curentry = myLpins(i);
613  (void) _curentry;
614  _curentry.lprimvert = UT_Vector2D(0,0);
615  if (true && ( (!(((getManualLayout()==0))||((getManualLayout()==0)))) ) && ( (true&&!(((getManualLayout()==0)))) ) )
616  graph->evalOpParmInst(_curentry.lprimvert, nodeidx, "lprimvert#", parmidx, offsets, time, 0, 2-1);
617  _curentry.lpinuv = UT_Vector2D(0,0);
618  if (true && ( (!(((getManualLayout()==0))||((getManualLayout()==0)))) ) && ( (true&&!(((getManualLayout()==0)))) ) )
619  graph->evalOpParmInst(_curentry.lpinuv, nodeidx, "lpinuv#", parmidx, offsets, time, 0, 2-1);
620  _curentry.lpinrefuv = UT_Vector2D(0,0);
621  if (true && ( (!(((getManualLayout()==0))||((getManualLayout()==0)))) ) && ( (true&&!(((getManualLayout()==0)))) ) )
622  graph->evalOpParmInst(_curentry.lpinrefuv, nodeidx, "lpinrefuv#", parmidx, offsets, time, 0, 2-1);
623 
624  }
625  }
626  else
627  myLpins.clear();
628  if (true && ( (!(((getManualLayout()==0))||((getManualLayout()==0)))) ) )
629  {
630  int64 length = 0;
631  graph->evalOpParm(length, nodeidx, "lalignments", time, 0);
632  if (length < 0) length = 0;
633  myLalignments.setSize(length);
634  for (exint i = 0; i < length; i++)
635  {
636  int parmidx[1];
637  int offsets[1];
638  parmidx[0] = i+0;
639  offsets[0] = 0;
640  auto && _curentry = myLalignments(i);
641  (void) _curentry;
642  _curentry.lalign_group = ""_UTsh;
643  if (true && ( (!(((getManualLayout()==0))||((getManualLayout()==0)))) ) && ( (true&&!(((getManualLayout()==0)))) ) )
644  graph->evalOpParmInst(_curentry.lalign_group, nodeidx, "lalign_group#", parmidx, offsets, time, 0, 2-1);
645  _curentry.lalign_axis = 0;
646  if (true && ( (!(((getManualLayout()==0))||((getManualLayout()==0)))) ) && ( (true&&!(((getManualLayout()==0)))) ) )
647  graph->evalOpParmInst(_curentry.lalign_axis, nodeidx, "lalign_axis#", parmidx, offsets, time, 0, 2-1);
648 
649  }
650  }
651  else
652  myLalignments.clear();
653  if (true && ( (!(((getManualLayout()==0))||((getManualLayout()==0)))) ) )
654  {
655  int64 length = 0;
656  graph->evalOpParm(length, nodeidx, "lstraightenings", time, 0);
657  if (length < 0) length = 0;
658  myLstraightenings.setSize(length);
659  for (exint i = 0; i < length; i++)
660  {
661  int parmidx[1];
662  int offsets[1];
663  parmidx[0] = i+0;
664  offsets[0] = 0;
665  auto && _curentry = myLstraightenings(i);
666  (void) _curentry;
667  _curentry.lstraight_group = ""_UTsh;
668  if (true && ( (!(((getManualLayout()==0))||((getManualLayout()==0)))) ) && ( (true&&!(((getManualLayout()==0)))) ) )
669  graph->evalOpParmInst(_curentry.lstraight_group, nodeidx, "lstraight_group#", parmidx, offsets, time, 0, 2-1);
670 
671  }
672  }
673  else
674  myLstraightenings.clear();
675  myUseOutputSeams = false;
676  if (true)
677  graph->evalOpParm(myUseOutputSeams, nodeidx, "useoutputseams", time, 0);
678  myOutputSeams = "outputseams"_UTsh;
679  if (true && ( (true&&!(((getUseOutputSeams()==0)))) ) )
680  graph->evalOpParm(myOutputSeams, nodeidx, "outputseams", time, 0);
681  myUseOutputConstrIslands = false;
682  if (true)
683  graph->evalOpParm(myUseOutputConstrIslands, nodeidx, "useoutputconstrislands", time, 0);
684  myOutputConstrIslands = "constrainedprims"_UTsh;
685  if (true && ( (true&&!(((getUseOutputConstrIslands()==0)))) ) )
686  graph->evalOpParm(myOutputConstrIslands, nodeidx, "outputconstrislands", time, 0);
687  myBBoxCenter = UT_Vector2D(0.5,0.5);
688  if (true)
689  graph->evalOpParm(myBBoxCenter, nodeidx, "bboxcenter", time, 0);
690  myBBoxSize = UT_Vector2D(1,1);
691  if (true)
692  graph->evalOpParm(myBBoxSize, nodeidx, "bboxsize", time, 0);
693 
694  }
695 
696 
697  void loadFromOpSubclass(const LoadParms &loadparms) override
698  {
699  buildFromOp(loadparms.graph(), loadparms.nodeIdx(), loadparms.context().getTime(), loadparms.depnode());
700  }
701 
702 
703  void copyFrom(const OP_NodeParms *src) override
704  {
705  *this = *((const SOP_UVFlatten_3_0Parms *)src);
706  }
707 
708  template <typename T>
709  void
710  doGetParmValue(TempIndex idx, TempIndex instance, T &value) const
711  {
712  if (idx.size() < 1)
713  return;
714  UT_ASSERT(idx.size() == instance.size()+1);
715  if (idx.size() != instance.size()+1)
716  return;
717  switch (idx[0])
718  {
719  case 0:
720  coerceValue(value, myGroup);
721  break;
722  case 1:
723  coerceValue(value, myUVAttrib);
724  break;
725  case 2:
726  coerceValue(value, myMethod);
727  break;
728  case 3:
729  coerceValue(value, myKeepExistingSeams);
730  break;
731  case 4:
732  coerceValue(value, myKeepExistingLayout);
733  break;
734  case 5:
735  coerceValue(value, myPinBoundaries);
736  break;
737  case 6:
738  coerceValue(value, mySeams);
739  break;
740  case 7:
741  coerceValue(value, myRectifyGroup);
742  break;
743  case 8:
744  coerceValue(value, myUsePins);
745  break;
746  case 9:
747  if (idx.size() == 1)
748  coerceValue(value, myPins.entries());
749  else if (instance[0] < myPins.entries())
750  {
751  auto && _data = myPins(instance[0]);
752  switch (idx[1])
753  {
754  case 0:
755  coerceValue(value, _data.usepin);
756  break;
757  case 1:
758  coerceValue(value, _data.primvert);
759  break;
760  case 2:
761  coerceValue(value, _data.pinuv);
762  break;
763  case 3:
764  coerceValue(value, _data.pinrefuv);
765  break;
766 
767  }
768  }
769  break;
770  case 10:
771  coerceValue(value, myUseAlignments);
772  break;
773  case 11:
774  if (idx.size() == 1)
775  coerceValue(value, myAlignments.entries());
776  else if (instance[0] < myAlignments.entries())
777  {
778  auto && _data = myAlignments(instance[0]);
779  switch (idx[1])
780  {
781  case 0:
782  coerceValue(value, _data.align_enabled);
783  break;
784  case 1:
785  coerceValue(value, _data.align_group);
786  break;
787  case 2:
788  coerceValue(value, _data.align_axis);
789  break;
790 
791  }
792  }
793  break;
794  case 12:
795  coerceValue(value, myUseStraightenings);
796  break;
797  case 13:
798  if (idx.size() == 1)
799  coerceValue(value, myStraightenings.entries());
800  else if (instance[0] < myStraightenings.entries())
801  {
802  auto && _data = myStraightenings(instance[0]);
803  switch (idx[1])
804  {
805  case 0:
806  coerceValue(value, _data.straight_enabled);
807  break;
808  case 1:
809  coerceValue(value, _data.straight_group);
810  break;
811 
812  }
813  }
814  break;
815  case 14:
816  coerceValue(value, myManualLayout);
817  break;
818  case 15:
819  coerceValue(value, myLayoutSeams);
820  break;
821  case 16:
822  coerceValue(value, myLayoutRectifyGroup);
823  break;
824  case 17:
825  if (idx.size() == 1)
826  coerceValue(value, myLpins.entries());
827  else if (instance[0] < myLpins.entries())
828  {
829  auto && _data = myLpins(instance[0]);
830  switch (idx[1])
831  {
832  case 0:
833  coerceValue(value, _data.lprimvert);
834  break;
835  case 1:
836  coerceValue(value, _data.lpinuv);
837  break;
838  case 2:
839  coerceValue(value, _data.lpinrefuv);
840  break;
841 
842  }
843  }
844  break;
845  case 18:
846  if (idx.size() == 1)
847  coerceValue(value, myLalignments.entries());
848  else if (instance[0] < myLalignments.entries())
849  {
850  auto && _data = myLalignments(instance[0]);
851  switch (idx[1])
852  {
853  case 0:
854  coerceValue(value, _data.lalign_group);
855  break;
856  case 1:
857  coerceValue(value, _data.lalign_axis);
858  break;
859 
860  }
861  }
862  break;
863  case 19:
864  if (idx.size() == 1)
865  coerceValue(value, myLstraightenings.entries());
866  else if (instance[0] < myLstraightenings.entries())
867  {
868  auto && _data = myLstraightenings(instance[0]);
869  switch (idx[1])
870  {
871  case 0:
872  coerceValue(value, _data.lstraight_group);
873  break;
874 
875  }
876  }
877  break;
878  case 20:
879  coerceValue(value, myUseOutputSeams);
880  break;
881  case 21:
882  coerceValue(value, myOutputSeams);
883  break;
884  case 22:
885  coerceValue(value, myUseOutputConstrIslands);
886  break;
887  case 23:
888  coerceValue(value, myOutputConstrIslands);
889  break;
890  case 24:
891  coerceValue(value, myBBoxCenter);
892  break;
893  case 25:
894  coerceValue(value, myBBoxSize);
895  break;
896 
897  }
898  }
899 
900  bool isParmColorRamp(exint idx) const override
901  {
902  switch (idx)
903  {
904 
905  }
906  return false;
907  }
908 
909  void getNestParmValue(TempIndex idx, TempIndex instance, exint &value) const override
910  { doGetParmValue(idx, instance, value); }
911  void getNestParmValue(TempIndex idx, TempIndex instance, fpreal &value) const override
912  { doGetParmValue(idx, instance, value); }
913  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector2D &value) const override
914  { doGetParmValue(idx, instance, value); }
915  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector3D &value) const override
916  { doGetParmValue(idx, instance, value); }
917  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector4D &value) const override
918  { doGetParmValue(idx, instance, value); }
919  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix2D &value) const override
920  { doGetParmValue(idx, instance, value); }
921  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
922  { doGetParmValue(idx, instance, value); }
923  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix4D &value) const override
924  { doGetParmValue(idx, instance, value); }
925  void getNestParmValue(TempIndex idx, TempIndex instance, UT_StringHolder &value) const override
926  { doGetParmValue(idx, instance, value); }
927  void getNestParmValue(TempIndex idx, TempIndex instance, UT_SharedPtr<UT_Ramp> &value) const override
928  { doGetParmValue(idx, instance, value); }
929  void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
930  { doGetParmValue(idx, instance, value); }
931 
932  template <typename T>
933  void
934  doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
935  {
936  if (idx.size() < 1)
937  return;
938  UT_ASSERT(idx.size() == instance.size()+1);
939  if (idx.size() != instance.size()+1)
940  return;
941  switch (idx[0])
942  {
943  case 0:
944  coerceValue(myGroup, ( ( value ) ));
945  break;
946  case 1:
947  coerceValue(myUVAttrib, ( ( value ) ));
948  break;
949  case 2:
950  coerceValue(myMethod, clampMinValue(0, clampMaxValue(1, value ) ));
951  break;
952  case 3:
953  coerceValue(myKeepExistingSeams, ( ( value ) ));
954  break;
955  case 4:
956  coerceValue(myKeepExistingLayout, ( ( value ) ));
957  break;
958  case 5:
959  coerceValue(myPinBoundaries, ( ( value ) ));
960  break;
961  case 6:
962  coerceValue(mySeams, ( ( value ) ));
963  break;
964  case 7:
965  coerceValue(myRectifyGroup, ( ( value ) ));
966  break;
967  case 8:
968  coerceValue(myUsePins, ( ( value ) ));
969  break;
970  case 9:
971  if (idx.size() == 1)
972  {
973  exint newsize;
974  coerceValue(newsize, value);
975  if (newsize < 0) newsize = 0;
976  myPins.setSize(newsize);
977  }
978  else
979  {
980  if (instance[0] < 0)
981  return;
982  myPins.setSizeIfNeeded(instance[0]+1);
983  auto && _data = myPins(instance[0]);
984  switch (idx[1])
985  {
986  case 0:
987  coerceValue(_data.usepin, value);
988  break;
989  case 1:
990  coerceValue(_data.primvert, value);
991  break;
992  case 2:
993  coerceValue(_data.pinuv, value);
994  break;
995  case 3:
996  coerceValue(_data.pinrefuv, value);
997  break;
998 
999  }
1000  }
1001  break;
1002  case 10:
1003  coerceValue(myUseAlignments, ( ( value ) ));
1004  break;
1005  case 11:
1006  if (idx.size() == 1)
1007  {
1008  exint newsize;
1009  coerceValue(newsize, value);
1010  if (newsize < 0) newsize = 0;
1011  myAlignments.setSize(newsize);
1012  }
1013  else
1014  {
1015  if (instance[0] < 0)
1016  return;
1017  myAlignments.setSizeIfNeeded(instance[0]+1);
1018  auto && _data = myAlignments(instance[0]);
1019  switch (idx[1])
1020  {
1021  case 0:
1022  coerceValue(_data.align_enabled, value);
1023  break;
1024  case 1:
1025  coerceValue(_data.align_group, value);
1026  break;
1027  case 2:
1028  coerceValue(_data.align_axis, value);
1029  break;
1030 
1031  }
1032  }
1033  break;
1034  case 12:
1035  coerceValue(myUseStraightenings, ( ( value ) ));
1036  break;
1037  case 13:
1038  if (idx.size() == 1)
1039  {
1040  exint newsize;
1041  coerceValue(newsize, value);
1042  if (newsize < 0) newsize = 0;
1043  myStraightenings.setSize(newsize);
1044  }
1045  else
1046  {
1047  if (instance[0] < 0)
1048  return;
1049  myStraightenings.setSizeIfNeeded(instance[0]+1);
1050  auto && _data = myStraightenings(instance[0]);
1051  switch (idx[1])
1052  {
1053  case 0:
1054  coerceValue(_data.straight_enabled, value);
1055  break;
1056  case 1:
1057  coerceValue(_data.straight_group, value);
1058  break;
1059 
1060  }
1061  }
1062  break;
1063  case 14:
1064  coerceValue(myManualLayout, ( ( value ) ));
1065  break;
1066  case 15:
1067  coerceValue(myLayoutSeams, ( ( value ) ));
1068  break;
1069  case 16:
1070  coerceValue(myLayoutRectifyGroup, ( ( value ) ));
1071  break;
1072  case 17:
1073  if (idx.size() == 1)
1074  {
1075  exint newsize;
1076  coerceValue(newsize, value);
1077  if (newsize < 0) newsize = 0;
1078  myLpins.setSize(newsize);
1079  }
1080  else
1081  {
1082  if (instance[0] < 0)
1083  return;
1084  myLpins.setSizeIfNeeded(instance[0]+1);
1085  auto && _data = myLpins(instance[0]);
1086  switch (idx[1])
1087  {
1088  case 0:
1089  coerceValue(_data.lprimvert, value);
1090  break;
1091  case 1:
1092  coerceValue(_data.lpinuv, value);
1093  break;
1094  case 2:
1095  coerceValue(_data.lpinrefuv, value);
1096  break;
1097 
1098  }
1099  }
1100  break;
1101  case 18:
1102  if (idx.size() == 1)
1103  {
1104  exint newsize;
1105  coerceValue(newsize, value);
1106  if (newsize < 0) newsize = 0;
1107  myLalignments.setSize(newsize);
1108  }
1109  else
1110  {
1111  if (instance[0] < 0)
1112  return;
1113  myLalignments.setSizeIfNeeded(instance[0]+1);
1114  auto && _data = myLalignments(instance[0]);
1115  switch (idx[1])
1116  {
1117  case 0:
1118  coerceValue(_data.lalign_group, value);
1119  break;
1120  case 1:
1121  coerceValue(_data.lalign_axis, value);
1122  break;
1123 
1124  }
1125  }
1126  break;
1127  case 19:
1128  if (idx.size() == 1)
1129  {
1130  exint newsize;
1131  coerceValue(newsize, value);
1132  if (newsize < 0) newsize = 0;
1133  myLstraightenings.setSize(newsize);
1134  }
1135  else
1136  {
1137  if (instance[0] < 0)
1138  return;
1139  myLstraightenings.setSizeIfNeeded(instance[0]+1);
1140  auto && _data = myLstraightenings(instance[0]);
1141  switch (idx[1])
1142  {
1143  case 0:
1144  coerceValue(_data.lstraight_group, value);
1145  break;
1146 
1147  }
1148  }
1149  break;
1150  case 20:
1151  coerceValue(myUseOutputSeams, ( ( value ) ));
1152  break;
1153  case 21:
1154  coerceValue(myOutputSeams, ( ( value ) ));
1155  break;
1156  case 22:
1157  coerceValue(myUseOutputConstrIslands, ( ( value ) ));
1158  break;
1159  case 23:
1160  coerceValue(myOutputConstrIslands, ( ( value ) ));
1161  break;
1162  case 24:
1163  coerceValue(myBBoxCenter, ( ( value ) ));
1164  break;
1165  case 25:
1166  coerceValue(myBBoxSize, clampMinValue(0, ( value ) ));
1167  break;
1168 
1169  }
1170  }
1171 
1172  void setNestParmValue(TempIndex idx, TempIndex instance, const exint &value) override
1173  { doSetParmValue(idx, instance, value); }
1174  void setNestParmValue(TempIndex idx, TempIndex instance, const fpreal &value) override
1175  { doSetParmValue(idx, instance, value); }
1176  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector2D &value) override
1177  { doSetParmValue(idx, instance, value); }
1178  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector3D &value) override
1179  { doSetParmValue(idx, instance, value); }
1180  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector4D &value) override
1181  { doSetParmValue(idx, instance, value); }
1182  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix2D &value) override
1183  { doSetParmValue(idx, instance, value); }
1184  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix3D &value) override
1185  { doSetParmValue(idx, instance, value); }
1186  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix4D &value) override
1187  { doSetParmValue(idx, instance, value); }
1188  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_StringHolder &value) override
1189  { doSetParmValue(idx, instance, value); }
1190  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_SharedPtr<UT_Ramp> &value) override
1191  { doSetParmValue(idx, instance, value); }
1192  void setNestParmValue(TempIndex idx, TempIndex instance, const PRM_DataItemHandle &value) override
1193  { doSetParmValue(idx, instance, value); }
1194 
1195  exint getNestNumParms(TempIndex idx) const override
1196  {
1197  if (idx.size() == 0)
1198  return 26;
1199  switch (idx[0])
1200  {
1201  case 9:
1202  return 4;
1203  case 11:
1204  return 3;
1205  case 13:
1206  return 2;
1207  case 17:
1208  return 3;
1209  case 18:
1210  return 2;
1211  case 19:
1212  return 1;
1213 
1214  }
1215  // Invalid
1216  return 0;
1217  }
1218 
1219  const char *getNestParmName(TempIndex fieldnum) const override
1220  {
1221  if (fieldnum.size() < 1)
1222  return 0;
1223  switch (fieldnum[0])
1224  {
1225  case 0:
1226  return "group";
1227  case 1:
1228  return "uvattrib";
1229  case 2:
1230  return "method";
1231  case 3:
1232  return "keepexistingseams";
1233  case 4:
1234  return "keepexistinglayout";
1235  case 5:
1236  return "pinboundaries";
1237  case 6:
1238  return "seamgroup";
1239  case 7:
1240  return "rectifygroup";
1241  case 8:
1242  return "usepins";
1243  case 9:
1244  if (fieldnum.size() == 1)
1245  return "pins";
1246  switch (fieldnum[1])
1247  {
1248  case 0:
1249  return "usepin#";
1250  case 1:
1251  return "primvert#";
1252  case 2:
1253  return "pinuv#";
1254  case 3:
1255  return "pinrefuv#";
1256 
1257  }
1258  return 0;
1259  case 10:
1260  return "usealignments";
1261  case 11:
1262  if (fieldnum.size() == 1)
1263  return "alignments";
1264  switch (fieldnum[1])
1265  {
1266  case 0:
1267  return "align_enabled#";
1268  case 1:
1269  return "align_group#";
1270  case 2:
1271  return "align_axis#";
1272 
1273  }
1274  return 0;
1275  case 12:
1276  return "usestraightenings";
1277  case 13:
1278  if (fieldnum.size() == 1)
1279  return "straightenings";
1280  switch (fieldnum[1])
1281  {
1282  case 0:
1283  return "straight_enabled#";
1284  case 1:
1285  return "straight_group#";
1286 
1287  }
1288  return 0;
1289  case 14:
1290  return "manuallayout";
1291  case 15:
1292  return "layoutseamgroup";
1293  case 16:
1294  return "layoutrectifygroup";
1295  case 17:
1296  if (fieldnum.size() == 1)
1297  return "lpins";
1298  switch (fieldnum[1])
1299  {
1300  case 0:
1301  return "lprimvert#";
1302  case 1:
1303  return "lpinuv#";
1304  case 2:
1305  return "lpinrefuv#";
1306 
1307  }
1308  return 0;
1309  case 18:
1310  if (fieldnum.size() == 1)
1311  return "lalignments";
1312  switch (fieldnum[1])
1313  {
1314  case 0:
1315  return "lalign_group#";
1316  case 1:
1317  return "lalign_axis#";
1318 
1319  }
1320  return 0;
1321  case 19:
1322  if (fieldnum.size() == 1)
1323  return "lstraightenings";
1324  switch (fieldnum[1])
1325  {
1326  case 0:
1327  return "lstraight_group#";
1328 
1329  }
1330  return 0;
1331  case 20:
1332  return "useoutputseams";
1333  case 21:
1334  return "outputseams";
1335  case 22:
1336  return "useoutputconstrislands";
1337  case 23:
1338  return "outputconstrislands";
1339  case 24:
1340  return "bboxcenter";
1341  case 25:
1342  return "bboxsize";
1343 
1344  }
1345  return 0;
1346  }
1347 
1348  ParmType getNestParmType(TempIndex fieldnum) const override
1349  {
1350  if (fieldnum.size() < 1)
1351  return PARM_UNSUPPORTED;
1352  switch (fieldnum[0])
1353  {
1354  case 0:
1355  return PARM_STRING;
1356  case 1:
1357  return PARM_STRING;
1358  case 2:
1359  return PARM_INTEGER;
1360  case 3:
1361  return PARM_INTEGER;
1362  case 4:
1363  return PARM_INTEGER;
1364  case 5:
1365  return PARM_INTEGER;
1366  case 6:
1367  return PARM_STRING;
1368  case 7:
1369  return PARM_STRING;
1370  case 8:
1371  return PARM_INTEGER;
1372  case 9:
1373  if (fieldnum.size() == 1)
1374  return PARM_MULTIPARM;
1375  switch (fieldnum[1])
1376  {
1377  case 0:
1378  return PARM_INTEGER;
1379  case 1:
1380  return PARM_VECTOR2;
1381  case 2:
1382  return PARM_VECTOR2;
1383  case 3:
1384  return PARM_VECTOR2;
1385 
1386  }
1387  return PARM_UNSUPPORTED;
1388  case 10:
1389  return PARM_INTEGER;
1390  case 11:
1391  if (fieldnum.size() == 1)
1392  return PARM_MULTIPARM;
1393  switch (fieldnum[1])
1394  {
1395  case 0:
1396  return PARM_INTEGER;
1397  case 1:
1398  return PARM_STRING;
1399  case 2:
1400  return PARM_INTEGER;
1401 
1402  }
1403  return PARM_UNSUPPORTED;
1404  case 12:
1405  return PARM_INTEGER;
1406  case 13:
1407  if (fieldnum.size() == 1)
1408  return PARM_MULTIPARM;
1409  switch (fieldnum[1])
1410  {
1411  case 0:
1412  return PARM_INTEGER;
1413  case 1:
1414  return PARM_STRING;
1415 
1416  }
1417  return PARM_UNSUPPORTED;
1418  case 14:
1419  return PARM_INTEGER;
1420  case 15:
1421  return PARM_STRING;
1422  case 16:
1423  return PARM_STRING;
1424  case 17:
1425  if (fieldnum.size() == 1)
1426  return PARM_MULTIPARM;
1427  switch (fieldnum[1])
1428  {
1429  case 0:
1430  return PARM_VECTOR2;
1431  case 1:
1432  return PARM_VECTOR2;
1433  case 2:
1434  return PARM_VECTOR2;
1435 
1436  }
1437  return PARM_UNSUPPORTED;
1438  case 18:
1439  if (fieldnum.size() == 1)
1440  return PARM_MULTIPARM;
1441  switch (fieldnum[1])
1442  {
1443  case 0:
1444  return PARM_STRING;
1445  case 1:
1446  return PARM_INTEGER;
1447 
1448  }
1449  return PARM_UNSUPPORTED;
1450  case 19:
1451  if (fieldnum.size() == 1)
1452  return PARM_MULTIPARM;
1453  switch (fieldnum[1])
1454  {
1455  case 0:
1456  return PARM_STRING;
1457 
1458  }
1459  return PARM_UNSUPPORTED;
1460  case 20:
1461  return PARM_INTEGER;
1462  case 21:
1463  return PARM_STRING;
1464  case 22:
1465  return PARM_INTEGER;
1466  case 23:
1467  return PARM_STRING;
1468  case 24:
1469  return PARM_VECTOR2;
1470  case 25:
1471  return PARM_VECTOR2;
1472 
1473  }
1474  return PARM_UNSUPPORTED;
1475  }
1476 
1477  // Boiler plate to load individual types.
1478  static void loadData(UT_IStream &is, int64 &v)
1479  { is.bread(&v, 1); }
1480  static void loadData(UT_IStream &is, bool &v)
1481  { int64 iv; is.bread(&iv, 1); v = iv; }
1482  static void loadData(UT_IStream &is, fpreal64 &v)
1483  { is.bread<fpreal64>(&v, 1); }
1484  static void loadData(UT_IStream &is, UT_Vector2D &v)
1485  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1); }
1486  static void loadData(UT_IStream &is, UT_Vector3D &v)
1487  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
1488  is.bread<fpreal64>(&v.z(), 1); }
1489  static void loadData(UT_IStream &is, UT_Vector4D &v)
1490  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
1491  is.bread<fpreal64>(&v.z(), 1); is.bread<fpreal64>(&v.w(), 1); }
1492  static void loadData(UT_IStream &is, UT_Matrix2D &v)
1493  { for (int r = 0; r < 2; r++) for (int c = 0; c < 2; c++) is.bread<fpreal64>(&v(r, c), 1); }
1494  static void loadData(UT_IStream &is, UT_Matrix3D &v)
1495  { for (int r = 0; r < 3; r++) for (int c = 0; c < 3; c++) is.bread<fpreal64>(&v(r, c), 1); }
1496  static void loadData(UT_IStream &is, UT_Matrix4D &v)
1497  { for (int r = 0; r < 4; r++) for (int c = 0; c < 4; c++) is.bread<fpreal64>(&v(r, c), 1); }
1498  static void loadData(UT_IStream &is, UT_Vector2I &v)
1499  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1); }
1500  static void loadData(UT_IStream &is, UT_Vector3I &v)
1501  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
1502  is.bread<int64>(&v.z(), 1); }
1503  static void loadData(UT_IStream &is, UT_Vector4I &v)
1504  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
1505  is.bread<int64>(&v.z(), 1); is.bread<int64>(&v.w(), 1); }
1507  { is.bread(v); }
1509  { UT_StringHolder rampdata;
1510  loadData(is, rampdata);
1511  if (rampdata.isstring())
1512  {
1513  v.reset(new UT_Ramp());
1514  UT_IStream istr((const char *) rampdata, rampdata.length(), UT_ISTREAM_ASCII);
1515  v->load(istr);
1516  }
1517  else v.reset();
1518  }
1521  loadData(is, data);
1522  if (data.isstring())
1523  {
1524  // Find the data type.
1525  const char *colon = UT_StringWrap(data).findChar(':');
1526  if (colon)
1527  {
1528  int typelen = colon - data.buffer();
1530  type.strncpy(data.buffer(), typelen);
1531  UT_IStream istr(((const char *) data) + typelen + 1, data.length() - (typelen + 1), UT_ISTREAM_BINARY);
1532 
1533  v = PRM_DataFactory::parseBinary(type.buffer(), istr);
1534  }
1535  }
1536  else v.reset();
1537  }
1538 
1539  static void saveData(std::ostream &os, int64 v)
1540  { UTwrite(os, &v); }
1541  static void saveData(std::ostream &os, bool v)
1542  { int64 iv = v; UTwrite(os, &iv); }
1543  static void saveData(std::ostream &os, fpreal64 v)
1544  { UTwrite<fpreal64>(os, &v); }
1545  static void saveData(std::ostream &os, UT_Vector2D v)
1546  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y()); }
1547  static void saveData(std::ostream &os, UT_Vector3D v)
1548  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
1549  UTwrite<fpreal64>(os, &v.z()); }
1550  static void saveData(std::ostream &os, UT_Vector4D v)
1551  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
1552  UTwrite<fpreal64>(os, &v.z()); UTwrite<fpreal64>(os, &v.w()); }
1553  static void saveData(std::ostream &os, UT_Matrix2D v)
1555  static void saveData(std::ostream &os, UT_Matrix3D v)
1557  static void saveData(std::ostream &os, UT_Matrix4D v)
1559  static void saveData(std::ostream &os, UT_StringHolder s)
1560  { UT_StringWrap(s).saveBinary(os); }
1561  static void saveData(std::ostream &os, UT_SharedPtr<UT_Ramp> s)
1563  UT_OStringStream ostr;
1564  if (s) s->save(ostr);
1565  result = ostr.str();
1566  saveData(os, result);
1567  }
1568  static void saveData(std::ostream &os, PRM_DataItemHandle s)
1570  UT_OStringStream ostr;
1571  if (s)
1572  {
1573  ostr << s->getDataTypeToken();
1574  ostr << ":";
1575  s->saveBinary(ostr);
1576  }
1577  result = ostr.str();
1578  saveData(os, result);
1579  }
1580 
1581 
1582  void save(std::ostream &os) const
1583  {
1584  int32 v = version();
1585  UTwrite(os, &v);
1586  saveData(os, myGroup);
1587  saveData(os, myUVAttrib);
1588  saveData(os, myMethod);
1589  saveData(os, myKeepExistingSeams);
1590  saveData(os, myKeepExistingLayout);
1591  saveData(os, myPinBoundaries);
1592  saveData(os, mySeams);
1593  saveData(os, myRectifyGroup);
1594  saveData(os, myUsePins);
1595  {
1596  int64 length = myPins.entries();
1597  UTwrite(os, &length);
1598  for (exint i = 0; i < length; i++)
1599  {
1600  auto && _curentry = myPins(i);
1601  (void) _curentry;
1602  saveData(os, _curentry.usepin);
1603  saveData(os, _curentry.primvert);
1604  saveData(os, _curentry.pinuv);
1605  saveData(os, _curentry.pinrefuv);
1606 
1607  }
1608  }
1609  saveData(os, myUseAlignments);
1610  {
1611  int64 length = myAlignments.entries();
1612  UTwrite(os, &length);
1613  for (exint i = 0; i < length; i++)
1614  {
1615  auto && _curentry = myAlignments(i);
1616  (void) _curentry;
1617  saveData(os, _curentry.align_enabled);
1618  saveData(os, _curentry.align_group);
1619  saveData(os, _curentry.align_axis);
1620 
1621  }
1622  }
1623  saveData(os, myUseStraightenings);
1624  {
1625  int64 length = myStraightenings.entries();
1626  UTwrite(os, &length);
1627  for (exint i = 0; i < length; i++)
1628  {
1629  auto && _curentry = myStraightenings(i);
1630  (void) _curentry;
1631  saveData(os, _curentry.straight_enabled);
1632  saveData(os, _curentry.straight_group);
1633 
1634  }
1635  }
1636  saveData(os, myManualLayout);
1637  saveData(os, myLayoutSeams);
1638  saveData(os, myLayoutRectifyGroup);
1639  {
1640  int64 length = myLpins.entries();
1641  UTwrite(os, &length);
1642  for (exint i = 0; i < length; i++)
1643  {
1644  auto && _curentry = myLpins(i);
1645  (void) _curentry;
1646  saveData(os, _curentry.lprimvert);
1647  saveData(os, _curentry.lpinuv);
1648  saveData(os, _curentry.lpinrefuv);
1649 
1650  }
1651  }
1652  {
1653  int64 length = myLalignments.entries();
1654  UTwrite(os, &length);
1655  for (exint i = 0; i < length; i++)
1656  {
1657  auto && _curentry = myLalignments(i);
1658  (void) _curentry;
1659  saveData(os, _curentry.lalign_group);
1660  saveData(os, _curentry.lalign_axis);
1661 
1662  }
1663  }
1664  {
1665  int64 length = myLstraightenings.entries();
1666  UTwrite(os, &length);
1667  for (exint i = 0; i < length; i++)
1668  {
1669  auto && _curentry = myLstraightenings(i);
1670  (void) _curentry;
1671  saveData(os, _curentry.lstraight_group);
1672 
1673  }
1674  }
1675  saveData(os, myUseOutputSeams);
1676  saveData(os, myOutputSeams);
1677  saveData(os, myUseOutputConstrIslands);
1678  saveData(os, myOutputConstrIslands);
1679  saveData(os, myBBoxCenter);
1680  saveData(os, myBBoxSize);
1681 
1682  }
1683 
1684  bool load(UT_IStream &is)
1685  {
1686  int32 v;
1687  is.bread(&v, 1);
1688  if (version() != v)
1689  {
1690  // Fail incompatible versions
1691  return false;
1692  }
1693  loadData(is, myGroup);
1694  loadData(is, myUVAttrib);
1695  loadData(is, myMethod);
1696  loadData(is, myKeepExistingSeams);
1697  loadData(is, myKeepExistingLayout);
1698  loadData(is, myPinBoundaries);
1699  loadData(is, mySeams);
1700  loadData(is, myRectifyGroup);
1701  loadData(is, myUsePins);
1702  {
1703  int64 length;
1704  is.read(&length, 1);
1705  myPins.setSize(length);
1706  for (exint i = 0; i < length; i++)
1707  {
1708  auto && _curentry = myPins(i);
1709  (void) _curentry;
1710  loadData(is, _curentry.usepin);
1711  loadData(is, _curentry.primvert);
1712  loadData(is, _curentry.pinuv);
1713  loadData(is, _curentry.pinrefuv);
1714 
1715  }
1716  }
1717  loadData(is, myUseAlignments);
1718  {
1719  int64 length;
1720  is.read(&length, 1);
1721  myAlignments.setSize(length);
1722  for (exint i = 0; i < length; i++)
1723  {
1724  auto && _curentry = myAlignments(i);
1725  (void) _curentry;
1726  loadData(is, _curentry.align_enabled);
1727  loadData(is, _curentry.align_group);
1728  loadData(is, _curentry.align_axis);
1729 
1730  }
1731  }
1732  loadData(is, myUseStraightenings);
1733  {
1734  int64 length;
1735  is.read(&length, 1);
1736  myStraightenings.setSize(length);
1737  for (exint i = 0; i < length; i++)
1738  {
1739  auto && _curentry = myStraightenings(i);
1740  (void) _curentry;
1741  loadData(is, _curentry.straight_enabled);
1742  loadData(is, _curentry.straight_group);
1743 
1744  }
1745  }
1746  loadData(is, myManualLayout);
1747  loadData(is, myLayoutSeams);
1748  loadData(is, myLayoutRectifyGroup);
1749  {
1750  int64 length;
1751  is.read(&length, 1);
1752  myLpins.setSize(length);
1753  for (exint i = 0; i < length; i++)
1754  {
1755  auto && _curentry = myLpins(i);
1756  (void) _curentry;
1757  loadData(is, _curentry.lprimvert);
1758  loadData(is, _curentry.lpinuv);
1759  loadData(is, _curentry.lpinrefuv);
1760 
1761  }
1762  }
1763  {
1764  int64 length;
1765  is.read(&length, 1);
1766  myLalignments.setSize(length);
1767  for (exint i = 0; i < length; i++)
1768  {
1769  auto && _curentry = myLalignments(i);
1770  (void) _curentry;
1771  loadData(is, _curentry.lalign_group);
1772  loadData(is, _curentry.lalign_axis);
1773 
1774  }
1775  }
1776  {
1777  int64 length;
1778  is.read(&length, 1);
1779  myLstraightenings.setSize(length);
1780  for (exint i = 0; i < length; i++)
1781  {
1782  auto && _curentry = myLstraightenings(i);
1783  (void) _curentry;
1784  loadData(is, _curentry.lstraight_group);
1785 
1786  }
1787  }
1788  loadData(is, myUseOutputSeams);
1789  loadData(is, myOutputSeams);
1790  loadData(is, myUseOutputConstrIslands);
1791  loadData(is, myOutputConstrIslands);
1792  loadData(is, myBBoxCenter);
1793  loadData(is, myBBoxSize);
1794 
1795  return true;
1796  }
1797 
1798  const UT_StringHolder & getGroup() const { return myGroup; }
1799  void setGroup(const UT_StringHolder & val) { myGroup = val; }
1801  {
1802  SOP_Node *thissop = cookparms.getNode();
1803  if (!thissop) return getGroup();
1805  OP_Utils::evalOpParm(result, thissop, "group", cookparms.getCookTime(), 0);
1806  return result;
1807  }
1808  const UT_StringHolder & getUVAttrib() const { return myUVAttrib; }
1809  void setUVAttrib(const UT_StringHolder & val) { myUVAttrib = val; }
1811  {
1812  SOP_Node *thissop = cookparms.getNode();
1813  if (!thissop) return getUVAttrib();
1815  OP_Utils::evalOpParm(result, thissop, "uvattrib", cookparms.getCookTime(), 0);
1816  return result;
1817  }
1818  Method getMethod() const { return Method(myMethod); }
1819  void setMethod(Method val) { myMethod = int64(val); }
1820  Method opMethod(const SOP_NodeVerb::CookParms &cookparms) const
1821  {
1822  SOP_Node *thissop = cookparms.getNode();
1823  if (!thissop) return getMethod();
1824  int64 result;
1825  OP_Utils::evalOpParm(result, thissop, "method", cookparms.getCookTime(), 0);
1826  return Method(result);
1827  }
1828  bool getKeepExistingSeams() const { return myKeepExistingSeams; }
1829  void setKeepExistingSeams(bool val) { myKeepExistingSeams = val; }
1830  bool opKeepExistingSeams(const SOP_NodeVerb::CookParms &cookparms) const
1831  {
1832  SOP_Node *thissop = cookparms.getNode();
1833  if (!thissop) return getKeepExistingSeams();
1834  bool result;
1835  OP_Utils::evalOpParm(result, thissop, "keepexistingseams", cookparms.getCookTime(), 0);
1836  return result;
1837  }
1838  bool getKeepExistingLayout() const { return myKeepExistingLayout; }
1839  void setKeepExistingLayout(bool val) { myKeepExistingLayout = val; }
1840  bool opKeepExistingLayout(const SOP_NodeVerb::CookParms &cookparms) const
1841  {
1842  SOP_Node *thissop = cookparms.getNode();
1843  if (!thissop) return getKeepExistingLayout();
1844  bool result;
1845  OP_Utils::evalOpParm(result, thissop, "keepexistinglayout", cookparms.getCookTime(), 0);
1846  return result;
1847  }
1848  bool getPinBoundaries() const { return myPinBoundaries; }
1849  void setPinBoundaries(bool val) { myPinBoundaries = val; }
1850  bool opPinBoundaries(const SOP_NodeVerb::CookParms &cookparms) const
1851  {
1852  SOP_Node *thissop = cookparms.getNode();
1853  if (!thissop) return getPinBoundaries();
1854  bool result;
1855  OP_Utils::evalOpParm(result, thissop, "pinboundaries", cookparms.getCookTime(), 0);
1856  return result;
1857  }
1858  const UT_StringHolder & getSeams() const { return mySeams; }
1859  void setSeams(const UT_StringHolder & val) { mySeams = val; }
1861  {
1862  SOP_Node *thissop = cookparms.getNode();
1863  if (!thissop) return getSeams();
1865  OP_Utils::evalOpParm(result, thissop, "seamgroup", cookparms.getCookTime(), 0);
1866  return result;
1867  }
1868  const UT_StringHolder & getRectifyGroup() const { return myRectifyGroup; }
1869  void setRectifyGroup(const UT_StringHolder & val) { myRectifyGroup = val; }
1871  {
1872  SOP_Node *thissop = cookparms.getNode();
1873  if (!thissop) return getRectifyGroup();
1875  OP_Utils::evalOpParm(result, thissop, "rectifygroup", cookparms.getCookTime(), 0);
1876  return result;
1877  }
1878  bool getUsePins() const { return myUsePins; }
1879  void setUsePins(bool val) { myUsePins = val; }
1880  bool opUsePins(const SOP_NodeVerb::CookParms &cookparms) const
1881  {
1882  SOP_Node *thissop = cookparms.getNode();
1883  if (!thissop) return getUsePins();
1884  bool result;
1885  OP_Utils::evalOpParm(result, thissop, "usepins", cookparms.getCookTime(), 0);
1886  return result;
1887  }
1888  const UT_Array<Pins> &getPins() const { return myPins; }
1889 void setPins(const UT_Array<Pins> &val) { myPins = val; }
1890  exint opPins(const SOP_NodeVerb::CookParms &cookparms) const
1891  {
1892  SOP_Node *thissop = cookparms.getNode();
1893  if (!thissop) return getPins().entries();
1894  exint result;
1895  OP_Utils::evalOpParm(result, thissop, "pins", cookparms.getCookTime(), 0);
1896  return result;
1897  }
1898  bool opPins_usepin(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
1899  { return opinstPins_usepin(cookparms, &_idx); }
1900  bool opinstPins_usepin(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1901  {
1902  SOP_Node *thissop = cookparms.getNode();
1903  if (!thissop) return (myPins(_idx[0]).usepin);
1904  int _parmidx[2-1];
1905  _parmidx[1-1] = _idx[1-1] + 0;
1906 
1907  bool result;
1908  OP_Utils::evalOpParmInst(result, thissop, "usepin#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1909  return (result);
1910  }
1911  UT_Vector2D opPins_primvert(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
1912  { return opinstPins_primvert(cookparms, &_idx); }
1913  UT_Vector2D opinstPins_primvert(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1914  {
1915  SOP_Node *thissop = cookparms.getNode();
1916  if (!thissop) return (myPins(_idx[0]).primvert);
1917  int _parmidx[2-1];
1918  _parmidx[1-1] = _idx[1-1] + 0;
1919 
1921  OP_Utils::evalOpParmInst(result, thissop, "primvert#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1922  return (result);
1923  }
1924  UT_Vector2D opPins_pinuv(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
1925  { return opinstPins_pinuv(cookparms, &_idx); }
1926  UT_Vector2D opinstPins_pinuv(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1927  {
1928  SOP_Node *thissop = cookparms.getNode();
1929  if (!thissop) return (myPins(_idx[0]).pinuv);
1930  int _parmidx[2-1];
1931  _parmidx[1-1] = _idx[1-1] + 0;
1932 
1934  OP_Utils::evalOpParmInst(result, thissop, "pinuv#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1935  return (result);
1936  }
1937  UT_Vector2D opPins_pinrefuv(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
1938  { return opinstPins_pinrefuv(cookparms, &_idx); }
1939  UT_Vector2D opinstPins_pinrefuv(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1940  {
1941  SOP_Node *thissop = cookparms.getNode();
1942  if (!thissop) return (myPins(_idx[0]).pinrefuv);
1943  int _parmidx[2-1];
1944  _parmidx[1-1] = _idx[1-1] + 0;
1945 
1947  OP_Utils::evalOpParmInst(result, thissop, "pinrefuv#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1948  return (result);
1949  }
1950 
1951  bool getUseAlignments() const { return myUseAlignments; }
1952  void setUseAlignments(bool val) { myUseAlignments = val; }
1953  bool opUseAlignments(const SOP_NodeVerb::CookParms &cookparms) const
1954  {
1955  SOP_Node *thissop = cookparms.getNode();
1956  if (!thissop) return getUseAlignments();
1957  bool result;
1958  OP_Utils::evalOpParm(result, thissop, "usealignments", cookparms.getCookTime(), 0);
1959  return result;
1960  }
1961  const UT_Array<Alignments> &getAlignments() const { return myAlignments; }
1962 void setAlignments(const UT_Array<Alignments> &val) { myAlignments = val; }
1964  {
1965  SOP_Node *thissop = cookparms.getNode();
1966  if (!thissop) return getAlignments().entries();
1967  exint result;
1968  OP_Utils::evalOpParm(result, thissop, "alignments", cookparms.getCookTime(), 0);
1969  return result;
1970  }
1971  bool opAlignments_align_enabled(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
1972  { return opinstAlignments_align_enabled(cookparms, &_idx); }
1973  bool opinstAlignments_align_enabled(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1974  {
1975  SOP_Node *thissop = cookparms.getNode();
1976  if (!thissop) return (myAlignments(_idx[0]).align_enabled);
1977  int _parmidx[2-1];
1978  _parmidx[1-1] = _idx[1-1] + 0;
1979 
1980  bool result;
1981  OP_Utils::evalOpParmInst(result, thissop, "align_enabled#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1982  return (result);
1983  }
1985  { return opinstAlignments_align_group(cookparms, &_idx); }
1987  {
1988  SOP_Node *thissop = cookparms.getNode();
1989  if (!thissop) return (myAlignments(_idx[0]).align_group);
1990  int _parmidx[2-1];
1991  _parmidx[1-1] = _idx[1-1] + 0;
1992 
1994  OP_Utils::evalOpParmInst(result, thissop, "align_group#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1995  return (result);
1996  }
1997  int64 opAlignments_align_axis(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
1998  { return opinstAlignments_align_axis(cookparms, &_idx); }
1999  int64 opinstAlignments_align_axis(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
2000  {
2001  SOP_Node *thissop = cookparms.getNode();
2002  if (!thissop) return (myAlignments(_idx[0]).align_axis);
2003  int _parmidx[2-1];
2004  _parmidx[1-1] = _idx[1-1] + 0;
2005 
2006  int64 result;
2007  OP_Utils::evalOpParmInst(result, thissop, "align_axis#", _parmidx, cookparms.getCookTime(), 0, 2-1);
2008  return (result);
2009  }
2010 
2011  bool getUseStraightenings() const { return myUseStraightenings; }
2012  void setUseStraightenings(bool val) { myUseStraightenings = val; }
2013  bool opUseStraightenings(const SOP_NodeVerb::CookParms &cookparms) const
2014  {
2015  SOP_Node *thissop = cookparms.getNode();
2016  if (!thissop) return getUseStraightenings();
2017  bool result;
2018  OP_Utils::evalOpParm(result, thissop, "usestraightenings", cookparms.getCookTime(), 0);
2019  return result;
2020  }
2021  const UT_Array<Straightenings> &getStraightenings() const { return myStraightenings; }
2022 void setStraightenings(const UT_Array<Straightenings> &val) { myStraightenings = val; }
2024  {
2025  SOP_Node *thissop = cookparms.getNode();
2026  if (!thissop) return getStraightenings().entries();
2027  exint result;
2028  OP_Utils::evalOpParm(result, thissop, "straightenings", cookparms.getCookTime(), 0);
2029  return result;
2030  }
2031  bool opStraightenings_straight_enabled(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
2032  { return opinstStraightenings_straight_enabled(cookparms, &_idx); }
2033  bool opinstStraightenings_straight_enabled(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
2034  {
2035  SOP_Node *thissop = cookparms.getNode();
2036  if (!thissop) return (myStraightenings(_idx[0]).straight_enabled);
2037  int _parmidx[2-1];
2038  _parmidx[1-1] = _idx[1-1] + 0;
2039 
2040  bool result;
2041  OP_Utils::evalOpParmInst(result, thissop, "straight_enabled#", _parmidx, cookparms.getCookTime(), 0, 2-1);
2042  return (result);
2043  }
2045  { return opinstStraightenings_straight_group(cookparms, &_idx); }
2047  {
2048  SOP_Node *thissop = cookparms.getNode();
2049  if (!thissop) return (myStraightenings(_idx[0]).straight_group);
2050  int _parmidx[2-1];
2051  _parmidx[1-1] = _idx[1-1] + 0;
2052 
2054  OP_Utils::evalOpParmInst(result, thissop, "straight_group#", _parmidx, cookparms.getCookTime(), 0, 2-1);
2055  return (result);
2056  }
2057 
2058  bool getManualLayout() const { return myManualLayout; }
2059  void setManualLayout(bool val) { myManualLayout = val; }
2060  bool opManualLayout(const SOP_NodeVerb::CookParms &cookparms) const
2061  {
2062  SOP_Node *thissop = cookparms.getNode();
2063  if (!thissop) return getManualLayout();
2064  bool result;
2065  OP_Utils::evalOpParm(result, thissop, "manuallayout", cookparms.getCookTime(), 0);
2066  return result;
2067  }
2068  const UT_StringHolder & getLayoutSeams() const { return myLayoutSeams; }
2069  void setLayoutSeams(const UT_StringHolder & val) { myLayoutSeams = val; }
2071  {
2072  SOP_Node *thissop = cookparms.getNode();
2073  if (!thissop) return getLayoutSeams();
2075  OP_Utils::evalOpParm(result, thissop, "layoutseamgroup", cookparms.getCookTime(), 0);
2076  return result;
2077  }
2078  const UT_StringHolder & getLayoutRectifyGroup() const { return myLayoutRectifyGroup; }
2079  void setLayoutRectifyGroup(const UT_StringHolder & val) { myLayoutRectifyGroup = val; }
2081  {
2082  SOP_Node *thissop = cookparms.getNode();
2083  if (!thissop) return getLayoutRectifyGroup();
2085  OP_Utils::evalOpParm(result, thissop, "layoutrectifygroup", cookparms.getCookTime(), 0);
2086  return result;
2087  }
2088  const UT_Array<Lpins> &getLpins() const { return myLpins; }
2089 void setLpins(const UT_Array<Lpins> &val) { myLpins = val; }
2090  exint opLpins(const SOP_NodeVerb::CookParms &cookparms) const
2091  {
2092  SOP_Node *thissop = cookparms.getNode();
2093  if (!thissop) return getLpins().entries();
2094  exint result;
2095  OP_Utils::evalOpParm(result, thissop, "lpins", cookparms.getCookTime(), 0);
2096  return result;
2097  }
2098  UT_Vector2D opLpins_lprimvert(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
2099  { return opinstLpins_lprimvert(cookparms, &_idx); }
2100  UT_Vector2D opinstLpins_lprimvert(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
2101  {
2102  SOP_Node *thissop = cookparms.getNode();
2103  if (!thissop) return (myLpins(_idx[0]).lprimvert);
2104  int _parmidx[2-1];
2105  _parmidx[1-1] = _idx[1-1] + 0;
2106 
2108  OP_Utils::evalOpParmInst(result, thissop, "lprimvert#", _parmidx, cookparms.getCookTime(), 0, 2-1);
2109  return (result);
2110  }
2111  UT_Vector2D opLpins_lpinuv(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
2112  { return opinstLpins_lpinuv(cookparms, &_idx); }
2113  UT_Vector2D opinstLpins_lpinuv(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
2114  {
2115  SOP_Node *thissop = cookparms.getNode();
2116  if (!thissop) return (myLpins(_idx[0]).lpinuv);
2117  int _parmidx[2-1];
2118  _parmidx[1-1] = _idx[1-1] + 0;
2119 
2121  OP_Utils::evalOpParmInst(result, thissop, "lpinuv#", _parmidx, cookparms.getCookTime(), 0, 2-1);
2122  return (result);
2123  }
2124  UT_Vector2D opLpins_lpinrefuv(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
2125  { return opinstLpins_lpinrefuv(cookparms, &_idx); }
2126  UT_Vector2D opinstLpins_lpinrefuv(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
2127  {
2128  SOP_Node *thissop = cookparms.getNode();
2129  if (!thissop) return (myLpins(_idx[0]).lpinrefuv);
2130  int _parmidx[2-1];
2131  _parmidx[1-1] = _idx[1-1] + 0;
2132 
2134  OP_Utils::evalOpParmInst(result, thissop, "lpinrefuv#", _parmidx, cookparms.getCookTime(), 0, 2-1);
2135  return (result);
2136  }
2137 
2138  const UT_Array<Lalignments> &getLalignments() const { return myLalignments; }
2139 void setLalignments(const UT_Array<Lalignments> &val) { myLalignments = val; }
2141  {
2142  SOP_Node *thissop = cookparms.getNode();
2143  if (!thissop) return getLalignments().entries();
2144  exint result;
2145  OP_Utils::evalOpParm(result, thissop, "lalignments", cookparms.getCookTime(), 0);
2146  return result;
2147  }
2149  { return opinstLalignments_lalign_group(cookparms, &_idx); }
2151  {
2152  SOP_Node *thissop = cookparms.getNode();
2153  if (!thissop) return (myLalignments(_idx[0]).lalign_group);
2154  int _parmidx[2-1];
2155  _parmidx[1-1] = _idx[1-1] + 0;
2156 
2158  OP_Utils::evalOpParmInst(result, thissop, "lalign_group#", _parmidx, cookparms.getCookTime(), 0, 2-1);
2159  return (result);
2160  }
2161  int64 opLalignments_lalign_axis(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
2162  { return opinstLalignments_lalign_axis(cookparms, &_idx); }
2163  int64 opinstLalignments_lalign_axis(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
2164  {
2165  SOP_Node *thissop = cookparms.getNode();
2166  if (!thissop) return (myLalignments(_idx[0]).lalign_axis);
2167  int _parmidx[2-1];
2168  _parmidx[1-1] = _idx[1-1] + 0;
2169 
2170  int64 result;
2171  OP_Utils::evalOpParmInst(result, thissop, "lalign_axis#", _parmidx, cookparms.getCookTime(), 0, 2-1);
2172  return (result);
2173  }
2174 
2175  const UT_Array<Lstraightenings> &getLstraightenings() const { return myLstraightenings; }
2176 void setLstraightenings(const UT_Array<Lstraightenings> &val) { myLstraightenings = val; }
2178  {
2179  SOP_Node *thissop = cookparms.getNode();
2180  if (!thissop) return getLstraightenings().entries();
2181  exint result;
2182  OP_Utils::evalOpParm(result, thissop, "lstraightenings", cookparms.getCookTime(), 0);
2183  return result;
2184  }
2186  { return opinstLstraightenings_lstraight_group(cookparms, &_idx); }
2188  {
2189  SOP_Node *thissop = cookparms.getNode();
2190  if (!thissop) return (myLstraightenings(_idx[0]).lstraight_group);
2191  int _parmidx[2-1];
2192  _parmidx[1-1] = _idx[1-1] + 0;
2193 
2195  OP_Utils::evalOpParmInst(result, thissop, "lstraight_group#", _parmidx, cookparms.getCookTime(), 0, 2-1);
2196  return (result);
2197  }
2198 
2199  bool getUseOutputSeams() const { return myUseOutputSeams; }
2200  void setUseOutputSeams(bool val) { myUseOutputSeams = val; }
2201  bool opUseOutputSeams(const SOP_NodeVerb::CookParms &cookparms) const
2202  {
2203  SOP_Node *thissop = cookparms.getNode();
2204  if (!thissop) return getUseOutputSeams();
2205  bool result;
2206  OP_Utils::evalOpParm(result, thissop, "useoutputseams", cookparms.getCookTime(), 0);
2207  return result;
2208  }
2209  const UT_StringHolder & getOutputSeams() const { return myOutputSeams; }
2210  void setOutputSeams(const UT_StringHolder & val) { myOutputSeams = val; }
2212  {
2213  SOP_Node *thissop = cookparms.getNode();
2214  if (!thissop) return getOutputSeams();
2216  OP_Utils::evalOpParm(result, thissop, "outputseams", cookparms.getCookTime(), 0);
2217  return result;
2218  }
2219  bool getUseOutputConstrIslands() const { return myUseOutputConstrIslands; }
2220  void setUseOutputConstrIslands(bool val) { myUseOutputConstrIslands = val; }
2222  {
2223  SOP_Node *thissop = cookparms.getNode();
2224  if (!thissop) return getUseOutputConstrIslands();
2225  bool result;
2226  OP_Utils::evalOpParm(result, thissop, "useoutputconstrislands", cookparms.getCookTime(), 0);
2227  return result;
2228  }
2229  const UT_StringHolder & getOutputConstrIslands() const { return myOutputConstrIslands; }
2230  void setOutputConstrIslands(const UT_StringHolder & val) { myOutputConstrIslands = val; }
2232  {
2233  SOP_Node *thissop = cookparms.getNode();
2234  if (!thissop) return getOutputConstrIslands();
2236  OP_Utils::evalOpParm(result, thissop, "outputconstrislands", cookparms.getCookTime(), 0);
2237  return result;
2238  }
2239  UT_Vector2D getBBoxCenter() const { return myBBoxCenter; }
2240  void setBBoxCenter(UT_Vector2D val) { myBBoxCenter = val; }
2242  {
2243  SOP_Node *thissop = cookparms.getNode();
2244  if (!thissop) return getBBoxCenter();
2246  OP_Utils::evalOpParm(result, thissop, "bboxcenter", cookparms.getCookTime(), 0);
2247  return result;
2248  }
2249  UT_Vector2D getBBoxSize() const { return myBBoxSize; }
2250  void setBBoxSize(UT_Vector2D val) { myBBoxSize = val; }
2252  {
2253  SOP_Node *thissop = cookparms.getNode();
2254  if (!thissop) return getBBoxSize();
2256  OP_Utils::evalOpParm(result, thissop, "bboxsize", cookparms.getCookTime(), 0);
2257  return result;
2258  }
2259 
2260 private:
2261  UT_StringHolder myGroup;
2262  UT_StringHolder myUVAttrib;
2263  int64 myMethod;
2264  bool myKeepExistingSeams;
2265  bool myKeepExistingLayout;
2266  bool myPinBoundaries;
2267  UT_StringHolder mySeams;
2268  UT_StringHolder myRectifyGroup;
2269  bool myUsePins;
2270  UT_Array<Pins> myPins;
2271  bool myUseAlignments;
2272  UT_Array<Alignments> myAlignments;
2273  bool myUseStraightenings;
2274  UT_Array<Straightenings> myStraightenings;
2275  bool myManualLayout;
2276  UT_StringHolder myLayoutSeams;
2277  UT_StringHolder myLayoutRectifyGroup;
2278  UT_Array<Lpins> myLpins;
2279  UT_Array<Lalignments> myLalignments;
2280  UT_Array<Lstraightenings> myLstraightenings;
2281  bool myUseOutputSeams;
2282  UT_StringHolder myOutputSeams;
2283  bool myUseOutputConstrIslands;
2284  UT_StringHolder myOutputConstrIslands;
2285  UT_Vector2D myBBoxCenter;
2286  UT_Vector2D myBBoxSize;
2287 
2288 };
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
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)
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
#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: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
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
LeafData & operator=(const LeafData &)=delete
Utility class for containing a color ramp.
Definition: UT_Ramp.h:92
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:1395
#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:97
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