HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
SOP_CacheIf.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_CacheIfEnums
24 {
25  enum class CheckGroups
26  {
27  COOK = 0,
28  UPSTREAM
29  };
30  enum class Parm_GroupType
31  {
32  PRIMS = 0,
33  POINTS
34  };
35  enum class Expr_CacheWhen
36  {
37  VALUE = 0,
38  CHANGE
39  };
40  enum class Expr_ExprType
41  {
42  FLT = 0,
43  STR
44  };
45 }
46 
47 
49 {
50 public:
51  static int version() { return 1; }
52  struct NumInputs
53  {
75 
76 
78  {
79  input_enable = true;
80  input_checkpointattribs = false;
81  input_pointattribs = ""_UTsh;
82  input_checkvertexattribs = false;
83  input_vertexattribs = ""_UTsh;
84  input_checkprimitiveattribs = false;
85  input_primitiveattribs = ""_UTsh;
86  input_checkdetailattribs = false;
87  input_detailattribs = ""_UTsh;
88  input_checkpointgroups = false;
89  input_pointgroups = ""_UTsh;
90  input_checkvertexgroups = false;
91  input_vertexgroups = ""_UTsh;
92  input_checkprimitivegroups = false;
93  input_primitivegroups = ""_UTsh;
94  input_checkedgegroups = false;
95  input_edgegroups = ""_UTsh;
96  input_checkdetailid = false;
97  input_checkprimitivesid = true;
98  input_checktopology = true;
99  input_checkchangecount = false;
100 
101  }
102 
103  bool operator==(const NumInputs &src) const
104  {
105  if (input_enable != src.input_enable) return false;
106  if (input_checkpointattribs != src.input_checkpointattribs) return false;
107  if (input_pointattribs != src.input_pointattribs) return false;
108  if (input_checkvertexattribs != src.input_checkvertexattribs) return false;
109  if (input_vertexattribs != src.input_vertexattribs) return false;
110  if (input_checkprimitiveattribs != src.input_checkprimitiveattribs) return false;
111  if (input_primitiveattribs != src.input_primitiveattribs) return false;
112  if (input_checkdetailattribs != src.input_checkdetailattribs) return false;
113  if (input_detailattribs != src.input_detailattribs) return false;
114  if (input_checkpointgroups != src.input_checkpointgroups) return false;
115  if (input_pointgroups != src.input_pointgroups) return false;
116  if (input_checkvertexgroups != src.input_checkvertexgroups) return false;
117  if (input_vertexgroups != src.input_vertexgroups) return false;
118  if (input_checkprimitivegroups != src.input_checkprimitivegroups) return false;
119  if (input_primitivegroups != src.input_primitivegroups) return false;
120  if (input_checkedgegroups != src.input_checkedgegroups) return false;
121  if (input_edgegroups != src.input_edgegroups) return false;
122  if (input_checkdetailid != src.input_checkdetailid) return false;
123  if (input_checkprimitivesid != src.input_checkprimitivesid) return false;
124  if (input_checktopology != src.input_checktopology) return false;
125  if (input_checkchangecount != src.input_checkchangecount) return false;
126 
127  return true;
128  }
129  bool operator!=(const NumInputs &src) const
130  {
131  return !operator==(src);
132  }
133 
134  };
135 
137  {
139 
140  buf.strcat("[ ");
141  for (int i = 0; i < list.entries(); i++)
142  {
143  if (i)
144  buf.strcat(", ");
145  buf.strcat("( ");
146  buf.append("");
147  buf.appendSprintf("%s", (list(i).input_enable) ? "true" : "false");
148  buf.append(", ");
149  buf.appendSprintf("%s", (list(i).input_checkpointattribs) ? "true" : "false");
150  buf.append(", ");
151  { UT_String tmp; tmp = UT_StringWrap(list(i).input_pointattribs).makeQuotedString('"'); buf.strcat(tmp); }
152  buf.append(", ");
153  buf.appendSprintf("%s", (list(i).input_checkvertexattribs) ? "true" : "false");
154  buf.append(", ");
155  { UT_String tmp; tmp = UT_StringWrap(list(i).input_vertexattribs).makeQuotedString('"'); buf.strcat(tmp); }
156  buf.append(", ");
157  buf.appendSprintf("%s", (list(i).input_checkprimitiveattribs) ? "true" : "false");
158  buf.append(", ");
159  { UT_String tmp; tmp = UT_StringWrap(list(i).input_primitiveattribs).makeQuotedString('"'); buf.strcat(tmp); }
160  buf.append(", ");
161  buf.appendSprintf("%s", (list(i).input_checkdetailattribs) ? "true" : "false");
162  buf.append(", ");
163  { UT_String tmp; tmp = UT_StringWrap(list(i).input_detailattribs).makeQuotedString('"'); buf.strcat(tmp); }
164  buf.append(", ");
165  buf.appendSprintf("%s", (list(i).input_checkpointgroups) ? "true" : "false");
166  buf.append(", ");
167  { UT_String tmp; tmp = UT_StringWrap(list(i).input_pointgroups).makeQuotedString('"'); buf.strcat(tmp); }
168  buf.append(", ");
169  buf.appendSprintf("%s", (list(i).input_checkvertexgroups) ? "true" : "false");
170  buf.append(", ");
171  { UT_String tmp; tmp = UT_StringWrap(list(i).input_vertexgroups).makeQuotedString('"'); buf.strcat(tmp); }
172  buf.append(", ");
173  buf.appendSprintf("%s", (list(i).input_checkprimitivegroups) ? "true" : "false");
174  buf.append(", ");
175  { UT_String tmp; tmp = UT_StringWrap(list(i).input_primitivegroups).makeQuotedString('"'); buf.strcat(tmp); }
176  buf.append(", ");
177  buf.appendSprintf("%s", (list(i).input_checkedgegroups) ? "true" : "false");
178  buf.append(", ");
179  { UT_String tmp; tmp = UT_StringWrap(list(i).input_edgegroups).makeQuotedString('"'); buf.strcat(tmp); }
180  buf.append(", ");
181  buf.appendSprintf("%s", (list(i).input_checkdetailid) ? "true" : "false");
182  buf.append(", ");
183  buf.appendSprintf("%s", (list(i).input_checkprimitivesid) ? "true" : "false");
184  buf.append(", ");
185  buf.appendSprintf("%s", (list(i).input_checktopology) ? "true" : "false");
186  buf.append(", ");
187  buf.appendSprintf("%s", (list(i).input_checkchangecount) ? "true" : "false");
188 
189  buf.strcat(" )");
190  }
191  buf.strcat(" ]");
192 
194  return result;
195  }
196  struct NumPatterns
197  {
205 
206 
208  {
209  parm_enable = true;
210  parm_nodepath = ""_UTsh;
211  parm_parmfilter = "*"_UTsh;
212  parm_expandmultiparms = true;
213  parm_groupfilter = ""_UTsh;
214  parm_grouptype = 1;
215  parm_oninput = 0;
216 
217  }
218 
219  bool operator==(const NumPatterns &src) const
220  {
221  if (parm_enable != src.parm_enable) return false;
222  if (parm_nodepath != src.parm_nodepath) return false;
223  if (parm_parmfilter != src.parm_parmfilter) return false;
224  if (parm_expandmultiparms != src.parm_expandmultiparms) return false;
225  if (parm_groupfilter != src.parm_groupfilter) return false;
226  if (parm_grouptype != src.parm_grouptype) return false;
227  if (parm_oninput != src.parm_oninput) return false;
228 
229  return true;
230  }
231  bool operator!=(const NumPatterns &src) const
232  {
233  return !operator==(src);
234  }
235 
236  };
237 
239  {
241 
242  buf.strcat("[ ");
243  for (int i = 0; i < list.entries(); i++)
244  {
245  if (i)
246  buf.strcat(", ");
247  buf.strcat("( ");
248  buf.append("");
249  buf.appendSprintf("%s", (list(i).parm_enable) ? "true" : "false");
250  buf.append(", ");
251  { UT_String tmp; tmp = UT_StringWrap(list(i).parm_nodepath).makeQuotedString('"'); buf.strcat(tmp); }
252  buf.append(", ");
253  { UT_String tmp; tmp = UT_StringWrap(list(i).parm_parmfilter).makeQuotedString('"'); buf.strcat(tmp); }
254  buf.append(", ");
255  buf.appendSprintf("%s", (list(i).parm_expandmultiparms) ? "true" : "false");
256  buf.append(", ");
257  { UT_String tmp; tmp = UT_StringWrap(list(i).parm_groupfilter).makeQuotedString('"'); buf.strcat(tmp); }
258  buf.append(", ");
259  buf.appendSprintf("%d", (int) list(i).parm_grouptype);
260  buf.append(", ");
261  buf.appendSprintf("%d", (int) list(i).parm_oninput);
262 
263  buf.strcat(" )");
264  }
265  buf.strcat(" ]");
266 
268  return result;
269  }
271  {
278 
279 
281  {
282  expr_enable = true;
283  expr_cachewhen = 0;
284  expr_exprval = 0;
285  expr_exprtype = 0;
286  expr_numexpr = 0;
287  expr_strexpr = ""_UTsh;
288 
289  }
290 
291  bool operator==(const NumExpressions &src) const
292  {
293  if (expr_enable != src.expr_enable) return false;
294  if (expr_cachewhen != src.expr_cachewhen) return false;
295  if (expr_exprval != src.expr_exprval) return false;
296  if (expr_exprtype != src.expr_exprtype) return false;
297  if (expr_numexpr != src.expr_numexpr) return false;
298  if (expr_strexpr != src.expr_strexpr) return false;
299 
300  return true;
301  }
302  bool operator!=(const NumExpressions &src) const
303  {
304  return !operator==(src);
305  }
306 
307  };
308 
310  {
312 
313  buf.strcat("[ ");
314  for (int i = 0; i < list.entries(); i++)
315  {
316  if (i)
317  buf.strcat(", ");
318  buf.strcat("( ");
319  buf.append("");
320  buf.appendSprintf("%s", (list(i).expr_enable) ? "true" : "false");
321  buf.append(", ");
322  buf.appendSprintf("%d", (int) list(i).expr_cachewhen);
323  buf.append(", ");
324  buf.appendSprintf("%d", (int) list(i).expr_exprval);
325  buf.append(", ");
326  buf.appendSprintf("%d", (int) list(i).expr_exprtype);
327  buf.append(", ");
328  buf.appendSprintf("%f", (list(i).expr_numexpr));
329  buf.append(", ");
330  { UT_String tmp; tmp = UT_StringWrap(list(i).expr_strexpr).makeQuotedString('"'); buf.strcat(tmp); }
331 
332  buf.strcat(" )");
333  }
334  buf.strcat(" ]");
335 
337  return result;
338  }
339 
341  {
342  myCheckUpstream = false;
343  myOutputAttrib = false;
344  myCheckAttrib = false;
345  myAttribName = ""_UTsh;
346  myCheckGroups = 1;
347 
348  }
349 
350  explicit SOP_CacheIfParms(const SOP_CacheIfParms &) = default;
351  SOP_CacheIfParms &operator=(const SOP_CacheIfParms &) = default;
352  SOP_CacheIfParms(SOP_CacheIfParms &&) noexcept = default;
353  SOP_CacheIfParms &operator=(SOP_CacheIfParms &&) noexcept = default;
354 
355  ~SOP_CacheIfParms() override {}
356 
357  bool operator==(const SOP_CacheIfParms &src) const
358  {
359  if (myCheckUpstream != src.myCheckUpstream) return false;
360  if (myOutputAttrib != src.myOutputAttrib) return false;
361  if (myCheckAttrib != src.myCheckAttrib) return false;
362  if (myAttribName != src.myAttribName) return false;
363  if (myNumInputs != src.myNumInputs) return false;
364  if (myCheckGroups != src.myCheckGroups) return false;
365  if (myNumPatterns != src.myNumPatterns) return false;
366  if (myNumExpressions != src.myNumExpressions) return false;
367 
368  return true;
369  }
370  bool operator!=(const SOP_CacheIfParms &src) const
371  {
372  return !operator==(src);
373  }
378 
379 
380 
381  void buildFromOp(const OP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
382  {
383  myCheckUpstream = false;
384  if (true)
385  graph->evalOpParm(myCheckUpstream, nodeidx, "checkupstream", time, 0);
386  myOutputAttrib = false;
387  if (true)
388  graph->evalOpParm(myOutputAttrib, nodeidx, "outputattrib", time, 0);
389  myCheckAttrib = false;
390  if (true)
391  graph->evalOpParm(myCheckAttrib, nodeidx, "checkattrib", time, 0);
392  myAttribName = ""_UTsh;
393  if (true)
394  graph->evalOpParm(myAttribName, nodeidx, "attribname", time, 0);
395  if (true)
396  {
397  int64 length = 0;
398  graph->evalOpParm(length, nodeidx, "numinputs", time, 0);
399  if (length < 0) length = 0;
400  myNumInputs.setSize(length);
401  for (exint i = 0; i < length; i++)
402  {
403  int parmidx[1];
404  int offsets[1];
405  parmidx[0] = i+1;
406  offsets[0] = 1;
407  auto && _curentry = myNumInputs(i);
408  (void) _curentry;
409  _curentry.input_enable = true;
410  if (true)
411  graph->evalOpParmInst(_curentry.input_enable, nodeidx, "input_enable#", parmidx, offsets, time, 0, 2-1);
412  _curentry.input_checkpointattribs = false;
413  if (true)
414  graph->evalOpParmInst(_curentry.input_checkpointattribs, nodeidx, "input_checkpointattribs#", parmidx, offsets, time, 0, 2-1);
415  _curentry.input_pointattribs = ""_UTsh;
416  if (true && ( (true&&!(((_curentry.input_checkpointattribs==0)))) ) )
417  graph->evalOpParmInst(_curentry.input_pointattribs, nodeidx, "input_pointattribs#", parmidx, offsets, time, 0, 2-1);
418  _curentry.input_checkvertexattribs = false;
419  if (true)
420  graph->evalOpParmInst(_curentry.input_checkvertexattribs, nodeidx, "input_checkvertexattribs#", parmidx, offsets, time, 0, 2-1);
421  _curentry.input_vertexattribs = ""_UTsh;
422  if (true && ( (true&&!(((_curentry.input_checkvertexattribs==0)))) ) )
423  graph->evalOpParmInst(_curentry.input_vertexattribs, nodeidx, "input_vertexattribs#", parmidx, offsets, time, 0, 2-1);
424  _curentry.input_checkprimitiveattribs = false;
425  if (true)
426  graph->evalOpParmInst(_curentry.input_checkprimitiveattribs, nodeidx, "input_checkprimitiveattribs#", parmidx, offsets, time, 0, 2-1);
427  _curentry.input_primitiveattribs = ""_UTsh;
428  if (true && ( (true&&!(((_curentry.input_checkprimitiveattribs==0)))) ) )
429  graph->evalOpParmInst(_curentry.input_primitiveattribs, nodeidx, "input_primitiveattribs#", parmidx, offsets, time, 0, 2-1);
430  _curentry.input_checkdetailattribs = false;
431  if (true)
432  graph->evalOpParmInst(_curentry.input_checkdetailattribs, nodeidx, "input_checkdetailattribs#", parmidx, offsets, time, 0, 2-1);
433  _curentry.input_detailattribs = ""_UTsh;
434  if (true && ( (true&&!(((_curentry.input_checkdetailattribs==0)))) ) )
435  graph->evalOpParmInst(_curentry.input_detailattribs, nodeidx, "input_detailattribs#", parmidx, offsets, time, 0, 2-1);
436  _curentry.input_checkpointgroups = false;
437  if (true)
438  graph->evalOpParmInst(_curentry.input_checkpointgroups, nodeidx, "input_checkpointgroups#", parmidx, offsets, time, 0, 2-1);
439  _curentry.input_pointgroups = ""_UTsh;
440  if (true && ( (true&&!(((_curentry.input_checkpointgroups==0)))) ) )
441  graph->evalOpParmInst(_curentry.input_pointgroups, nodeidx, "input_pointgroups#", parmidx, offsets, time, 0, 2-1);
442  _curentry.input_checkvertexgroups = false;
443  if (true)
444  graph->evalOpParmInst(_curentry.input_checkvertexgroups, nodeidx, "input_checkvertexgroups#", parmidx, offsets, time, 0, 2-1);
445  _curentry.input_vertexgroups = ""_UTsh;
446  if (true && ( (true&&!(((_curentry.input_checkvertexgroups==0)))) ) )
447  graph->evalOpParmInst(_curentry.input_vertexgroups, nodeidx, "input_vertexgroups#", parmidx, offsets, time, 0, 2-1);
448  _curentry.input_checkprimitivegroups = false;
449  if (true)
450  graph->evalOpParmInst(_curentry.input_checkprimitivegroups, nodeidx, "input_checkprimitivegroups#", parmidx, offsets, time, 0, 2-1);
451  _curentry.input_primitivegroups = ""_UTsh;
452  if (true && ( (true&&!(((_curentry.input_checkprimitivegroups==0)))) ) )
453  graph->evalOpParmInst(_curentry.input_primitivegroups, nodeidx, "input_primitivegroups#", parmidx, offsets, time, 0, 2-1);
454  _curentry.input_checkedgegroups = false;
455  if (true)
456  graph->evalOpParmInst(_curentry.input_checkedgegroups, nodeidx, "input_checkedgegroups#", parmidx, offsets, time, 0, 2-1);
457  _curentry.input_edgegroups = ""_UTsh;
458  if (true && ( (true&&!(((_curentry.input_checkedgegroups==0)))) ) )
459  graph->evalOpParmInst(_curentry.input_edgegroups, nodeidx, "input_edgegroups#", parmidx, offsets, time, 0, 2-1);
460  _curentry.input_checkdetailid = false;
461  if (true)
462  graph->evalOpParmInst(_curentry.input_checkdetailid, nodeidx, "input_checkdetailid#", parmidx, offsets, time, 0, 2-1);
463  _curentry.input_checkprimitivesid = true;
464  if (true)
465  graph->evalOpParmInst(_curentry.input_checkprimitivesid, nodeidx, "input_checkprimitivesid#", parmidx, offsets, time, 0, 2-1);
466  _curentry.input_checktopology = true;
467  if (true)
468  graph->evalOpParmInst(_curentry.input_checktopology, nodeidx, "input_checktopology#", parmidx, offsets, time, 0, 2-1);
469  _curentry.input_checkchangecount = false;
470  if (true)
471  graph->evalOpParmInst(_curentry.input_checkchangecount, nodeidx, "input_checkchangecount#", parmidx, offsets, time, 0, 2-1);
472 
473  }
474  }
475  else
476  myNumInputs.clear();
477  myCheckGroups = 1;
478  if (true)
479  graph->evalOpParm(myCheckGroups, nodeidx, "checkgroups", time, 0);
480  if (true)
481  {
482  int64 length = 0;
483  graph->evalOpParm(length, nodeidx, "numpatterns", time, 0);
484  if (length < 0) length = 0;
485  myNumPatterns.setSize(length);
486  for (exint i = 0; i < length; i++)
487  {
488  int parmidx[1];
489  int offsets[1];
490  parmidx[0] = i+1;
491  offsets[0] = 1;
492  auto && _curentry = myNumPatterns(i);
493  (void) _curentry;
494  _curentry.parm_enable = true;
495  if (true)
496  graph->evalOpParmInst(_curentry.parm_enable, nodeidx, "parm_enable#", parmidx, offsets, time, 0, 2-1);
497  _curentry.parm_nodepath = ""_UTsh;
498  if (true && ( (true&&!(((_curentry.parm_enable==0)))) ) )
499  graph->evalOpParmInst(_curentry.parm_nodepath, nodeidx, "parm_nodepath#", parmidx, offsets, time, 0, 2-1);
500  _curentry.parm_parmfilter = "*"_UTsh;
501  if (true && ( (true&&!(((_curentry.parm_enable==0)))) ) )
502  graph->evalOpParmInst(_curentry.parm_parmfilter, nodeidx, "parm_parmfilter#", parmidx, offsets, time, 0, 2-1);
503  _curentry.parm_expandmultiparms = true;
504  if (true && ( (true&&!(((_curentry.parm_enable==0)))) ) )
505  graph->evalOpParmInst(_curentry.parm_expandmultiparms, nodeidx, "parm_expandmultiparms#", parmidx, offsets, time, 0, 2-1);
506  _curentry.parm_groupfilter = ""_UTsh;
507  if (true && ( (true&&!(((_curentry.parm_enable==0)))) ) )
508  graph->evalOpParmInst(_curentry.parm_groupfilter, nodeidx, "parm_groupfilter#", parmidx, offsets, time, 0, 2-1);
509  _curentry.parm_grouptype = 1;
510  if (true && ( (true&&!(((_curentry.parm_enable==0)))) ) )
511  graph->evalOpParmInst(_curentry.parm_grouptype, nodeidx, "parm_grouptype#", parmidx, offsets, time, 0, 2-1);
512  _curentry.parm_oninput = 0;
513  if (true && ( (true&&!(((_curentry.parm_enable==0)))) ) )
514  graph->evalOpParmInst(_curentry.parm_oninput, nodeidx, "parm_oninput#", parmidx, offsets, time, 0, 2-1);
515 
516  }
517  }
518  else
519  myNumPatterns.clear();
520  if (true)
521  {
522  int64 length = 0;
523  graph->evalOpParm(length, nodeidx, "numexpressions", time, 0);
524  if (length < 0) length = 0;
525  myNumExpressions.setSize(length);
526  for (exint i = 0; i < length; i++)
527  {
528  int parmidx[1];
529  int offsets[1];
530  parmidx[0] = i+1;
531  offsets[0] = 1;
532  auto && _curentry = myNumExpressions(i);
533  (void) _curentry;
534  _curentry.expr_enable = true;
535  if (true)
536  graph->evalOpParmInst(_curentry.expr_enable, nodeidx, "expr_enable#", parmidx, offsets, time, 0, 2-1);
537  _curentry.expr_cachewhen = 0;
538  if (true && ( (true&&!(((_curentry.expr_enable==0)))) ) )
539  graph->evalOpParmInst(_curentry.expr_cachewhen, nodeidx, "expr_cachewhen#", parmidx, offsets, time, 0, 2-1);
540  _curentry.expr_exprval = 0;
541  if (true && ( (true&&!(((_curentry.expr_enable==0))||((_curentry.expr_cachewhen!=0)))) ) )
542  graph->evalOpParmInst(_curentry.expr_exprval, nodeidx, "expr_exprval#", parmidx, offsets, time, 0, 2-1);
543  _curentry.expr_exprtype = 0;
544  if (true && ( (true&&!(((_curentry.expr_enable==0))||((_curentry.expr_cachewhen!=1)))) ) )
545  graph->evalOpParmInst(_curentry.expr_exprtype, nodeidx, "expr_exprtype#", parmidx, offsets, time, 0, 2-1);
546  _curentry.expr_numexpr = 0;
547  if (true && ( (true&&!(((_curentry.expr_enable==0))||((_curentry.expr_cachewhen!=1))||((_curentry.expr_exprtype!=0)))) ) )
548  graph->evalOpParmInst(_curentry.expr_numexpr, nodeidx, "expr_numexpr#", parmidx, offsets, time, 0, 2-1);
549  _curentry.expr_strexpr = ""_UTsh;
550  if (true && ( (true&&!(((_curentry.expr_enable==0))||((_curentry.expr_cachewhen!=1))||((_curentry.expr_exprtype!=1)))) ) )
551  graph->evalOpParmInst(_curentry.expr_strexpr, nodeidx, "expr_strexpr#", parmidx, offsets, time, 0, 2-1);
552 
553  }
554  }
555  else
556  myNumExpressions.clear();
557 
558  }
559 
560 
561  void loadFromOpSubclass(const LoadParms &loadparms) override
562  {
563  buildFromOp(loadparms.graph(), loadparms.nodeIdx(), loadparms.context().getTime(), loadparms.depnode());
564  }
565 
566 
567  void copyFrom(const OP_NodeParms *src) override
568  {
569  *this = *((const SOP_CacheIfParms *)src);
570  }
571 
572  template <typename T>
573  void
574  doGetParmValue(TempIndex idx, TempIndex instance, T &value) const
575  {
576  if (idx.size() < 1)
577  return;
578  UT_ASSERT(idx.size() == instance.size()+1);
579  if (idx.size() != instance.size()+1)
580  return;
581  switch (idx[0])
582  {
583  case 0:
584  coerceValue(value, myCheckUpstream);
585  break;
586  case 1:
587  coerceValue(value, myOutputAttrib);
588  break;
589  case 2:
590  coerceValue(value, myCheckAttrib);
591  break;
592  case 3:
593  coerceValue(value, myAttribName);
594  break;
595  case 4:
596  if (idx.size() == 1)
597  coerceValue(value, myNumInputs.entries());
598  else if (instance[0] < myNumInputs.entries())
599  {
600  auto && _data = myNumInputs(instance[0]);
601  switch (idx[1])
602  {
603  case 0:
604  coerceValue(value, _data.input_enable);
605  break;
606  case 1:
607  coerceValue(value, _data.input_checkpointattribs);
608  break;
609  case 2:
610  coerceValue(value, _data.input_pointattribs);
611  break;
612  case 3:
613  coerceValue(value, _data.input_checkvertexattribs);
614  break;
615  case 4:
616  coerceValue(value, _data.input_vertexattribs);
617  break;
618  case 5:
619  coerceValue(value, _data.input_checkprimitiveattribs);
620  break;
621  case 6:
622  coerceValue(value, _data.input_primitiveattribs);
623  break;
624  case 7:
625  coerceValue(value, _data.input_checkdetailattribs);
626  break;
627  case 8:
628  coerceValue(value, _data.input_detailattribs);
629  break;
630  case 9:
631  coerceValue(value, _data.input_checkpointgroups);
632  break;
633  case 10:
634  coerceValue(value, _data.input_pointgroups);
635  break;
636  case 11:
637  coerceValue(value, _data.input_checkvertexgroups);
638  break;
639  case 12:
640  coerceValue(value, _data.input_vertexgroups);
641  break;
642  case 13:
643  coerceValue(value, _data.input_checkprimitivegroups);
644  break;
645  case 14:
646  coerceValue(value, _data.input_primitivegroups);
647  break;
648  case 15:
649  coerceValue(value, _data.input_checkedgegroups);
650  break;
651  case 16:
652  coerceValue(value, _data.input_edgegroups);
653  break;
654  case 17:
655  coerceValue(value, _data.input_checkdetailid);
656  break;
657  case 18:
658  coerceValue(value, _data.input_checkprimitivesid);
659  break;
660  case 19:
661  coerceValue(value, _data.input_checktopology);
662  break;
663  case 20:
664  coerceValue(value, _data.input_checkchangecount);
665  break;
666 
667  }
668  }
669  break;
670  case 5:
671  coerceValue(value, myCheckGroups);
672  break;
673  case 6:
674  if (idx.size() == 1)
675  coerceValue(value, myNumPatterns.entries());
676  else if (instance[0] < myNumPatterns.entries())
677  {
678  auto && _data = myNumPatterns(instance[0]);
679  switch (idx[1])
680  {
681  case 0:
682  coerceValue(value, _data.parm_enable);
683  break;
684  case 1:
685  coerceValue(value, _data.parm_nodepath);
686  break;
687  case 2:
688  coerceValue(value, _data.parm_parmfilter);
689  break;
690  case 3:
691  coerceValue(value, _data.parm_expandmultiparms);
692  break;
693  case 4:
694  coerceValue(value, _data.parm_groupfilter);
695  break;
696  case 5:
697  coerceValue(value, _data.parm_grouptype);
698  break;
699  case 6:
700  coerceValue(value, _data.parm_oninput);
701  break;
702 
703  }
704  }
705  break;
706  case 7:
707  if (idx.size() == 1)
708  coerceValue(value, myNumExpressions.entries());
709  else if (instance[0] < myNumExpressions.entries())
710  {
711  auto && _data = myNumExpressions(instance[0]);
712  switch (idx[1])
713  {
714  case 0:
715  coerceValue(value, _data.expr_enable);
716  break;
717  case 1:
718  coerceValue(value, _data.expr_cachewhen);
719  break;
720  case 2:
721  coerceValue(value, _data.expr_exprval);
722  break;
723  case 3:
724  coerceValue(value, _data.expr_exprtype);
725  break;
726  case 4:
727  coerceValue(value, _data.expr_numexpr);
728  break;
729  case 5:
730  coerceValue(value, _data.expr_strexpr);
731  break;
732 
733  }
734  }
735  break;
736 
737  }
738  }
739 
740  bool isParmColorRamp(exint idx) const override
741  {
742  switch (idx)
743  {
744 
745  }
746  return false;
747  }
748 
749  void getNestParmValue(TempIndex idx, TempIndex instance, exint &value) const override
750  { doGetParmValue(idx, instance, value); }
751  void getNestParmValue(TempIndex idx, TempIndex instance, fpreal &value) const override
752  { doGetParmValue(idx, instance, value); }
753  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector2D &value) const override
754  { doGetParmValue(idx, instance, value); }
755  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector3D &value) const override
756  { doGetParmValue(idx, instance, value); }
757  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector4D &value) const override
758  { doGetParmValue(idx, instance, value); }
759  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix2D &value) const override
760  { doGetParmValue(idx, instance, value); }
761  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
762  { doGetParmValue(idx, instance, value); }
763  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix4D &value) const override
764  { doGetParmValue(idx, instance, value); }
765  void getNestParmValue(TempIndex idx, TempIndex instance, UT_StringHolder &value) const override
766  { doGetParmValue(idx, instance, value); }
767  void getNestParmValue(TempIndex idx, TempIndex instance, UT_SharedPtr<UT_Ramp> &value) const override
768  { doGetParmValue(idx, instance, value); }
769  void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
770  { doGetParmValue(idx, instance, value); }
771 
772  template <typename T>
773  void
774  doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
775  {
776  if (idx.size() < 1)
777  return;
778  UT_ASSERT(idx.size() == instance.size()+1);
779  if (idx.size() != instance.size()+1)
780  return;
781  switch (idx[0])
782  {
783  case 0:
784  coerceValue(myCheckUpstream, ( ( value ) ));
785  break;
786  case 1:
787  coerceValue(myOutputAttrib, ( ( value ) ));
788  break;
789  case 2:
790  coerceValue(myCheckAttrib, ( ( value ) ));
791  break;
792  case 3:
793  coerceValue(myAttribName, ( ( value ) ));
794  break;
795  case 4:
796  if (idx.size() == 1)
797  {
798  exint newsize;
799  coerceValue(newsize, value);
800  if (newsize < 0) newsize = 0;
801  myNumInputs.setSize(newsize);
802  }
803  else
804  {
805  if (instance[0] < 0)
806  return;
807  myNumInputs.setSizeIfNeeded(instance[0]+1);
808  auto && _data = myNumInputs(instance[0]);
809  switch (idx[1])
810  {
811  case 0:
812  coerceValue(_data.input_enable, value);
813  break;
814  case 1:
815  coerceValue(_data.input_checkpointattribs, value);
816  break;
817  case 2:
818  coerceValue(_data.input_pointattribs, value);
819  break;
820  case 3:
821  coerceValue(_data.input_checkvertexattribs, value);
822  break;
823  case 4:
824  coerceValue(_data.input_vertexattribs, value);
825  break;
826  case 5:
827  coerceValue(_data.input_checkprimitiveattribs, value);
828  break;
829  case 6:
830  coerceValue(_data.input_primitiveattribs, value);
831  break;
832  case 7:
833  coerceValue(_data.input_checkdetailattribs, value);
834  break;
835  case 8:
836  coerceValue(_data.input_detailattribs, value);
837  break;
838  case 9:
839  coerceValue(_data.input_checkpointgroups, value);
840  break;
841  case 10:
842  coerceValue(_data.input_pointgroups, value);
843  break;
844  case 11:
845  coerceValue(_data.input_checkvertexgroups, value);
846  break;
847  case 12:
848  coerceValue(_data.input_vertexgroups, value);
849  break;
850  case 13:
851  coerceValue(_data.input_checkprimitivegroups, value);
852  break;
853  case 14:
854  coerceValue(_data.input_primitivegroups, value);
855  break;
856  case 15:
857  coerceValue(_data.input_checkedgegroups, value);
858  break;
859  case 16:
860  coerceValue(_data.input_edgegroups, value);
861  break;
862  case 17:
863  coerceValue(_data.input_checkdetailid, value);
864  break;
865  case 18:
866  coerceValue(_data.input_checkprimitivesid, value);
867  break;
868  case 19:
869  coerceValue(_data.input_checktopology, value);
870  break;
871  case 20:
872  coerceValue(_data.input_checkchangecount, value);
873  break;
874 
875  }
876  }
877  break;
878  case 5:
879  coerceValue(myCheckGroups, clampMinValue(0, clampMaxValue(1, value ) ));
880  break;
881  case 6:
882  if (idx.size() == 1)
883  {
884  exint newsize;
885  coerceValue(newsize, value);
886  if (newsize < 0) newsize = 0;
887  myNumPatterns.setSize(newsize);
888  }
889  else
890  {
891  if (instance[0] < 0)
892  return;
893  myNumPatterns.setSizeIfNeeded(instance[0]+1);
894  auto && _data = myNumPatterns(instance[0]);
895  switch (idx[1])
896  {
897  case 0:
898  coerceValue(_data.parm_enable, value);
899  break;
900  case 1:
901  coerceValue(_data.parm_nodepath, value);
902  break;
903  case 2:
904  coerceValue(_data.parm_parmfilter, value);
905  break;
906  case 3:
907  coerceValue(_data.parm_expandmultiparms, value);
908  break;
909  case 4:
910  coerceValue(_data.parm_groupfilter, value);
911  break;
912  case 5:
913  coerceValue(_data.parm_grouptype, value);
914  break;
915  case 6:
916  coerceValue(_data.parm_oninput, value);
917  break;
918 
919  }
920  }
921  break;
922  case 7:
923  if (idx.size() == 1)
924  {
925  exint newsize;
926  coerceValue(newsize, value);
927  if (newsize < 0) newsize = 0;
928  myNumExpressions.setSize(newsize);
929  }
930  else
931  {
932  if (instance[0] < 0)
933  return;
934  myNumExpressions.setSizeIfNeeded(instance[0]+1);
935  auto && _data = myNumExpressions(instance[0]);
936  switch (idx[1])
937  {
938  case 0:
939  coerceValue(_data.expr_enable, value);
940  break;
941  case 1:
942  coerceValue(_data.expr_cachewhen, value);
943  break;
944  case 2:
945  coerceValue(_data.expr_exprval, value);
946  break;
947  case 3:
948  coerceValue(_data.expr_exprtype, value);
949  break;
950  case 4:
951  coerceValue(_data.expr_numexpr, value);
952  break;
953  case 5:
954  coerceValue(_data.expr_strexpr, value);
955  break;
956 
957  }
958  }
959  break;
960 
961  }
962  }
963 
964  void setNestParmValue(TempIndex idx, TempIndex instance, const exint &value) override
965  { doSetParmValue(idx, instance, value); }
966  void setNestParmValue(TempIndex idx, TempIndex instance, const fpreal &value) override
967  { doSetParmValue(idx, instance, value); }
968  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector2D &value) override
969  { doSetParmValue(idx, instance, value); }
970  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector3D &value) override
971  { doSetParmValue(idx, instance, value); }
972  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector4D &value) override
973  { doSetParmValue(idx, instance, value); }
974  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix2D &value) override
975  { doSetParmValue(idx, instance, value); }
976  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix3D &value) override
977  { doSetParmValue(idx, instance, value); }
978  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix4D &value) override
979  { doSetParmValue(idx, instance, value); }
980  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_StringHolder &value) override
981  { doSetParmValue(idx, instance, value); }
982  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_SharedPtr<UT_Ramp> &value) override
983  { doSetParmValue(idx, instance, value); }
984  void setNestParmValue(TempIndex idx, TempIndex instance, const PRM_DataItemHandle &value) override
985  { doSetParmValue(idx, instance, value); }
986 
987  exint getNestNumParms(TempIndex idx) const override
988  {
989  if (idx.size() == 0)
990  return 8;
991  switch (idx[0])
992  {
993  case 4:
994  return 21;
995  case 6:
996  return 7;
997  case 7:
998  return 6;
999 
1000  }
1001  // Invalid
1002  return 0;
1003  }
1004 
1005  const char *getNestParmName(TempIndex fieldnum) const override
1006  {
1007  if (fieldnum.size() < 1)
1008  return 0;
1009  switch (fieldnum[0])
1010  {
1011  case 0:
1012  return "checkupstream";
1013  case 1:
1014  return "outputattrib";
1015  case 2:
1016  return "checkattrib";
1017  case 3:
1018  return "attribname";
1019  case 4:
1020  if (fieldnum.size() == 1)
1021  return "numinputs";
1022  switch (fieldnum[1])
1023  {
1024  case 0:
1025  return "input_enable#";
1026  case 1:
1027  return "input_checkpointattribs#";
1028  case 2:
1029  return "input_pointattribs#";
1030  case 3:
1031  return "input_checkvertexattribs#";
1032  case 4:
1033  return "input_vertexattribs#";
1034  case 5:
1035  return "input_checkprimitiveattribs#";
1036  case 6:
1037  return "input_primitiveattribs#";
1038  case 7:
1039  return "input_checkdetailattribs#";
1040  case 8:
1041  return "input_detailattribs#";
1042  case 9:
1043  return "input_checkpointgroups#";
1044  case 10:
1045  return "input_pointgroups#";
1046  case 11:
1047  return "input_checkvertexgroups#";
1048  case 12:
1049  return "input_vertexgroups#";
1050  case 13:
1051  return "input_checkprimitivegroups#";
1052  case 14:
1053  return "input_primitivegroups#";
1054  case 15:
1055  return "input_checkedgegroups#";
1056  case 16:
1057  return "input_edgegroups#";
1058  case 17:
1059  return "input_checkdetailid#";
1060  case 18:
1061  return "input_checkprimitivesid#";
1062  case 19:
1063  return "input_checktopology#";
1064  case 20:
1065  return "input_checkchangecount#";
1066 
1067  }
1068  return 0;
1069  case 5:
1070  return "checkgroups";
1071  case 6:
1072  if (fieldnum.size() == 1)
1073  return "numpatterns";
1074  switch (fieldnum[1])
1075  {
1076  case 0:
1077  return "parm_enable#";
1078  case 1:
1079  return "parm_nodepath#";
1080  case 2:
1081  return "parm_parmfilter#";
1082  case 3:
1083  return "parm_expandmultiparms#";
1084  case 4:
1085  return "parm_groupfilter#";
1086  case 5:
1087  return "parm_grouptype#";
1088  case 6:
1089  return "parm_oninput#";
1090 
1091  }
1092  return 0;
1093  case 7:
1094  if (fieldnum.size() == 1)
1095  return "numexpressions";
1096  switch (fieldnum[1])
1097  {
1098  case 0:
1099  return "expr_enable#";
1100  case 1:
1101  return "expr_cachewhen#";
1102  case 2:
1103  return "expr_exprval#";
1104  case 3:
1105  return "expr_exprtype#";
1106  case 4:
1107  return "expr_numexpr#";
1108  case 5:
1109  return "expr_strexpr#";
1110 
1111  }
1112  return 0;
1113 
1114  }
1115  return 0;
1116  }
1117 
1118  ParmType getNestParmType(TempIndex fieldnum) const override
1119  {
1120  if (fieldnum.size() < 1)
1121  return PARM_UNSUPPORTED;
1122  switch (fieldnum[0])
1123  {
1124  case 0:
1125  return PARM_INTEGER;
1126  case 1:
1127  return PARM_INTEGER;
1128  case 2:
1129  return PARM_INTEGER;
1130  case 3:
1131  return PARM_STRING;
1132  case 4:
1133  if (fieldnum.size() == 1)
1134  return PARM_MULTIPARM;
1135  switch (fieldnum[1])
1136  {
1137  case 0:
1138  return PARM_INTEGER;
1139  case 1:
1140  return PARM_INTEGER;
1141  case 2:
1142  return PARM_STRING;
1143  case 3:
1144  return PARM_INTEGER;
1145  case 4:
1146  return PARM_STRING;
1147  case 5:
1148  return PARM_INTEGER;
1149  case 6:
1150  return PARM_STRING;
1151  case 7:
1152  return PARM_INTEGER;
1153  case 8:
1154  return PARM_STRING;
1155  case 9:
1156  return PARM_INTEGER;
1157  case 10:
1158  return PARM_STRING;
1159  case 11:
1160  return PARM_INTEGER;
1161  case 12:
1162  return PARM_STRING;
1163  case 13:
1164  return PARM_INTEGER;
1165  case 14:
1166  return PARM_STRING;
1167  case 15:
1168  return PARM_INTEGER;
1169  case 16:
1170  return PARM_STRING;
1171  case 17:
1172  return PARM_INTEGER;
1173  case 18:
1174  return PARM_INTEGER;
1175  case 19:
1176  return PARM_INTEGER;
1177  case 20:
1178  return PARM_INTEGER;
1179 
1180  }
1181  return PARM_UNSUPPORTED;
1182  case 5:
1183  return PARM_INTEGER;
1184  case 6:
1185  if (fieldnum.size() == 1)
1186  return PARM_MULTIPARM;
1187  switch (fieldnum[1])
1188  {
1189  case 0:
1190  return PARM_INTEGER;
1191  case 1:
1192  return PARM_STRING;
1193  case 2:
1194  return PARM_STRING;
1195  case 3:
1196  return PARM_INTEGER;
1197  case 4:
1198  return PARM_STRING;
1199  case 5:
1200  return PARM_INTEGER;
1201  case 6:
1202  return PARM_INTEGER;
1203 
1204  }
1205  return PARM_UNSUPPORTED;
1206  case 7:
1207  if (fieldnum.size() == 1)
1208  return PARM_MULTIPARM;
1209  switch (fieldnum[1])
1210  {
1211  case 0:
1212  return PARM_INTEGER;
1213  case 1:
1214  return PARM_INTEGER;
1215  case 2:
1216  return PARM_INTEGER;
1217  case 3:
1218  return PARM_INTEGER;
1219  case 4:
1220  return PARM_FLOAT;
1221  case 5:
1222  return PARM_STRING;
1223 
1224  }
1225  return PARM_UNSUPPORTED;
1226 
1227  }
1228  return PARM_UNSUPPORTED;
1229  }
1230 
1231  // Boiler plate to load individual types.
1232  static void loadData(UT_IStream &is, int64 &v)
1233  { is.bread(&v, 1); }
1234  static void loadData(UT_IStream &is, bool &v)
1235  { int64 iv; is.bread(&iv, 1); v = iv; }
1236  static void loadData(UT_IStream &is, fpreal64 &v)
1237  { is.bread<fpreal64>(&v, 1); }
1238  static void loadData(UT_IStream &is, UT_Vector2D &v)
1239  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1); }
1240  static void loadData(UT_IStream &is, UT_Vector3D &v)
1241  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
1242  is.bread<fpreal64>(&v.z(), 1); }
1243  static void loadData(UT_IStream &is, UT_Vector4D &v)
1244  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
1245  is.bread<fpreal64>(&v.z(), 1); is.bread<fpreal64>(&v.w(), 1); }
1246  static void loadData(UT_IStream &is, UT_Matrix2D &v)
1247  { for (int r = 0; r < 2; r++) for (int c = 0; c < 2; c++) is.bread<fpreal64>(&v(r, c), 1); }
1248  static void loadData(UT_IStream &is, UT_Matrix3D &v)
1249  { for (int r = 0; r < 3; r++) for (int c = 0; c < 3; c++) is.bread<fpreal64>(&v(r, c), 1); }
1250  static void loadData(UT_IStream &is, UT_Matrix4D &v)
1251  { for (int r = 0; r < 4; r++) for (int c = 0; c < 4; c++) is.bread<fpreal64>(&v(r, c), 1); }
1252  static void loadData(UT_IStream &is, UT_Vector2I &v)
1253  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1); }
1254  static void loadData(UT_IStream &is, UT_Vector3I &v)
1255  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
1256  is.bread<int64>(&v.z(), 1); }
1257  static void loadData(UT_IStream &is, UT_Vector4I &v)
1258  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
1259  is.bread<int64>(&v.z(), 1); is.bread<int64>(&v.w(), 1); }
1261  { is.bread(v); }
1263  { UT_StringHolder rampdata;
1264  loadData(is, rampdata);
1265  if (rampdata.isstring())
1266  {
1267  v.reset(new UT_Ramp());
1268  UT_IStream istr((const char *) rampdata, rampdata.length(), UT_ISTREAM_ASCII);
1269  v->load(istr);
1270  }
1271  else v.reset();
1272  }
1275  loadData(is, data);
1276  if (data.isstring())
1277  {
1278  // Find the data type.
1279  const char *colon = UT_StringWrap(data).findChar(':');
1280  if (colon)
1281  {
1282  int typelen = colon - data.buffer();
1284  type.strncpy(data.buffer(), typelen);
1285  UT_IStream istr(((const char *) data) + typelen + 1, data.length() - (typelen + 1), UT_ISTREAM_BINARY);
1286 
1287  v = PRM_DataFactory::parseBinary(type.buffer(), istr);
1288  }
1289  }
1290  else v.reset();
1291  }
1292 
1293  static void saveData(std::ostream &os, int64 v)
1294  { UTwrite(os, &v); }
1295  static void saveData(std::ostream &os, bool v)
1296  { int64 iv = v; UTwrite(os, &iv); }
1297  static void saveData(std::ostream &os, fpreal64 v)
1298  { UTwrite<fpreal64>(os, &v); }
1299  static void saveData(std::ostream &os, UT_Vector2D v)
1300  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y()); }
1301  static void saveData(std::ostream &os, UT_Vector3D v)
1302  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
1303  UTwrite<fpreal64>(os, &v.z()); }
1304  static void saveData(std::ostream &os, UT_Vector4D v)
1305  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
1306  UTwrite<fpreal64>(os, &v.z()); UTwrite<fpreal64>(os, &v.w()); }
1307  static void saveData(std::ostream &os, UT_Matrix2D v)
1308  { for (int r = 0; r < 2; r++) for (int c = 0; c < 2; c++) UTwrite<fpreal64>(os, &v(r, c)); }
1309  static void saveData(std::ostream &os, UT_Matrix3D v)
1310  { for (int r = 0; r < 3; r++) for (int c = 0; c < 3; c++) UTwrite<fpreal64>(os, &v(r, c)); }
1311  static void saveData(std::ostream &os, UT_Matrix4D v)
1312  { for (int r = 0; r < 4; r++) for (int c = 0; c < 4; c++) UTwrite<fpreal64>(os, &v(r, c)); }
1313  static void saveData(std::ostream &os, UT_StringHolder s)
1314  { UT_StringWrap(s).saveBinary(os); }
1315  static void saveData(std::ostream &os, UT_SharedPtr<UT_Ramp> s)
1317  UT_OStringStream ostr;
1318  if (s) s->save(ostr);
1319  result = ostr.str();
1320  saveData(os, result);
1321  }
1322  static void saveData(std::ostream &os, PRM_DataItemHandle s)
1324  UT_OStringStream ostr;
1325  if (s)
1326  {
1327  ostr << s->getDataTypeToken();
1328  ostr << ":";
1329  s->saveBinary(ostr);
1330  }
1331  result = ostr.str();
1332  saveData(os, result);
1333  }
1334 
1335 
1336  void save(std::ostream &os) const
1337  {
1338  int32 v = version();
1339  UTwrite(os, &v);
1340  saveData(os, myCheckUpstream);
1341  saveData(os, myOutputAttrib);
1342  saveData(os, myCheckAttrib);
1343  saveData(os, myAttribName);
1344  {
1345  int64 length = myNumInputs.entries();
1346  UTwrite(os, &length);
1347  for (exint i = 0; i < length; i++)
1348  {
1349  auto && _curentry = myNumInputs(i);
1350  (void) _curentry;
1351  saveData(os, _curentry.input_enable);
1352  saveData(os, _curentry.input_checkpointattribs);
1353  saveData(os, _curentry.input_pointattribs);
1354  saveData(os, _curentry.input_checkvertexattribs);
1355  saveData(os, _curentry.input_vertexattribs);
1356  saveData(os, _curentry.input_checkprimitiveattribs);
1357  saveData(os, _curentry.input_primitiveattribs);
1358  saveData(os, _curentry.input_checkdetailattribs);
1359  saveData(os, _curentry.input_detailattribs);
1360  saveData(os, _curentry.input_checkpointgroups);
1361  saveData(os, _curentry.input_pointgroups);
1362  saveData(os, _curentry.input_checkvertexgroups);
1363  saveData(os, _curentry.input_vertexgroups);
1364  saveData(os, _curentry.input_checkprimitivegroups);
1365  saveData(os, _curentry.input_primitivegroups);
1366  saveData(os, _curentry.input_checkedgegroups);
1367  saveData(os, _curentry.input_edgegroups);
1368  saveData(os, _curentry.input_checkdetailid);
1369  saveData(os, _curentry.input_checkprimitivesid);
1370  saveData(os, _curentry.input_checktopology);
1371  saveData(os, _curentry.input_checkchangecount);
1372 
1373  }
1374  }
1375  saveData(os, myCheckGroups);
1376  {
1377  int64 length = myNumPatterns.entries();
1378  UTwrite(os, &length);
1379  for (exint i = 0; i < length; i++)
1380  {
1381  auto && _curentry = myNumPatterns(i);
1382  (void) _curentry;
1383  saveData(os, _curentry.parm_enable);
1384  saveData(os, _curentry.parm_nodepath);
1385  saveData(os, _curentry.parm_parmfilter);
1386  saveData(os, _curentry.parm_expandmultiparms);
1387  saveData(os, _curentry.parm_groupfilter);
1388  saveData(os, _curentry.parm_grouptype);
1389  saveData(os, _curentry.parm_oninput);
1390 
1391  }
1392  }
1393  {
1394  int64 length = myNumExpressions.entries();
1395  UTwrite(os, &length);
1396  for (exint i = 0; i < length; i++)
1397  {
1398  auto && _curentry = myNumExpressions(i);
1399  (void) _curentry;
1400  saveData(os, _curentry.expr_enable);
1401  saveData(os, _curentry.expr_cachewhen);
1402  saveData(os, _curentry.expr_exprval);
1403  saveData(os, _curentry.expr_exprtype);
1404  saveData(os, _curentry.expr_numexpr);
1405  saveData(os, _curentry.expr_strexpr);
1406 
1407  }
1408  }
1409 
1410  }
1411 
1412  bool load(UT_IStream &is)
1413  {
1414  int32 v;
1415  is.bread(&v, 1);
1416  if (version() != v)
1417  {
1418  // Fail incompatible versions
1419  return false;
1420  }
1421  loadData(is, myCheckUpstream);
1422  loadData(is, myOutputAttrib);
1423  loadData(is, myCheckAttrib);
1424  loadData(is, myAttribName);
1425  {
1426  int64 length;
1427  is.read(&length, 1);
1428  myNumInputs.setSize(length);
1429  for (exint i = 0; i < length; i++)
1430  {
1431  auto && _curentry = myNumInputs(i);
1432  (void) _curentry;
1433  loadData(is, _curentry.input_enable);
1434  loadData(is, _curentry.input_checkpointattribs);
1435  loadData(is, _curentry.input_pointattribs);
1436  loadData(is, _curentry.input_checkvertexattribs);
1437  loadData(is, _curentry.input_vertexattribs);
1438  loadData(is, _curentry.input_checkprimitiveattribs);
1439  loadData(is, _curentry.input_primitiveattribs);
1440  loadData(is, _curentry.input_checkdetailattribs);
1441  loadData(is, _curentry.input_detailattribs);
1442  loadData(is, _curentry.input_checkpointgroups);
1443  loadData(is, _curentry.input_pointgroups);
1444  loadData(is, _curentry.input_checkvertexgroups);
1445  loadData(is, _curentry.input_vertexgroups);
1446  loadData(is, _curentry.input_checkprimitivegroups);
1447  loadData(is, _curentry.input_primitivegroups);
1448  loadData(is, _curentry.input_checkedgegroups);
1449  loadData(is, _curentry.input_edgegroups);
1450  loadData(is, _curentry.input_checkdetailid);
1451  loadData(is, _curentry.input_checkprimitivesid);
1452  loadData(is, _curentry.input_checktopology);
1453  loadData(is, _curentry.input_checkchangecount);
1454 
1455  }
1456  }
1457  loadData(is, myCheckGroups);
1458  {
1459  int64 length;
1460  is.read(&length, 1);
1461  myNumPatterns.setSize(length);
1462  for (exint i = 0; i < length; i++)
1463  {
1464  auto && _curentry = myNumPatterns(i);
1465  (void) _curentry;
1466  loadData(is, _curentry.parm_enable);
1467  loadData(is, _curentry.parm_nodepath);
1468  loadData(is, _curentry.parm_parmfilter);
1469  loadData(is, _curentry.parm_expandmultiparms);
1470  loadData(is, _curentry.parm_groupfilter);
1471  loadData(is, _curentry.parm_grouptype);
1472  loadData(is, _curentry.parm_oninput);
1473 
1474  }
1475  }
1476  {
1477  int64 length;
1478  is.read(&length, 1);
1479  myNumExpressions.setSize(length);
1480  for (exint i = 0; i < length; i++)
1481  {
1482  auto && _curentry = myNumExpressions(i);
1483  (void) _curentry;
1484  loadData(is, _curentry.expr_enable);
1485  loadData(is, _curentry.expr_cachewhen);
1486  loadData(is, _curentry.expr_exprval);
1487  loadData(is, _curentry.expr_exprtype);
1488  loadData(is, _curentry.expr_numexpr);
1489  loadData(is, _curentry.expr_strexpr);
1490 
1491  }
1492  }
1493 
1494  return true;
1495  }
1496 
1497  bool getCheckUpstream() const { return myCheckUpstream; }
1498  void setCheckUpstream(bool val) { myCheckUpstream = val; }
1499  bool opCheckUpstream(const SOP_NodeVerb::CookParms &cookparms) const
1500  {
1501  SOP_Node *thissop = cookparms.getNode();
1502  if (!thissop) return getCheckUpstream();
1503  bool result;
1504  OP_Utils::evalOpParm(result, thissop, "checkupstream", cookparms.getCookTime(), 0);
1505  return result;
1506  }
1507  bool getOutputAttrib() const { return myOutputAttrib; }
1508  void setOutputAttrib(bool val) { myOutputAttrib = val; }
1509  bool opOutputAttrib(const SOP_NodeVerb::CookParms &cookparms) const
1510  {
1511  SOP_Node *thissop = cookparms.getNode();
1512  if (!thissop) return getOutputAttrib();
1513  bool result;
1514  OP_Utils::evalOpParm(result, thissop, "outputattrib", cookparms.getCookTime(), 0);
1515  return result;
1516  }
1517  bool getCheckAttrib() const { return myCheckAttrib; }
1518  void setCheckAttrib(bool val) { myCheckAttrib = val; }
1519  bool opCheckAttrib(const SOP_NodeVerb::CookParms &cookparms) const
1520  {
1521  SOP_Node *thissop = cookparms.getNode();
1522  if (!thissop) return getCheckAttrib();
1523  bool result;
1524  OP_Utils::evalOpParm(result, thissop, "checkattrib", cookparms.getCookTime(), 0);
1525  return result;
1526  }
1527  const UT_StringHolder & getAttribName() const { return myAttribName; }
1528  void setAttribName(const UT_StringHolder & val) { myAttribName = val; }
1530  {
1531  SOP_Node *thissop = cookparms.getNode();
1532  if (!thissop) return getAttribName();
1534  OP_Utils::evalOpParm(result, thissop, "attribname", cookparms.getCookTime(), 0);
1535  return result;
1536  }
1537  const UT_Array<NumInputs> &getNumInputs() const { return myNumInputs; }
1538 void setNumInputs(const UT_Array<NumInputs> &val) { myNumInputs = val; }
1540  {
1541  SOP_Node *thissop = cookparms.getNode();
1542  if (!thissop) return getNumInputs().entries();
1543  exint result;
1544  OP_Utils::evalOpParm(result, thissop, "numinputs", cookparms.getCookTime(), 0);
1545  return result;
1546  }
1547  bool opNumInputs_input_enable(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
1548  { return opinstNumInputs_input_enable(cookparms, &_idx); }
1549  bool opinstNumInputs_input_enable(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1550  {
1551  SOP_Node *thissop = cookparms.getNode();
1552  if (!thissop) return (myNumInputs(_idx[0]).input_enable);
1553  int _parmidx[2-1];
1554  _parmidx[1-1] = _idx[1-1] + 1;
1555 
1556  bool result;
1557  OP_Utils::evalOpParmInst(result, thissop, "input_enable#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1558  return (result);
1559  }
1560  bool opNumInputs_input_checkpointattribs(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
1561  { return opinstNumInputs_input_checkpointattribs(cookparms, &_idx); }
1562  bool opinstNumInputs_input_checkpointattribs(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1563  {
1564  SOP_Node *thissop = cookparms.getNode();
1565  if (!thissop) return (myNumInputs(_idx[0]).input_checkpointattribs);
1566  int _parmidx[2-1];
1567  _parmidx[1-1] = _idx[1-1] + 1;
1568 
1569  bool result;
1570  OP_Utils::evalOpParmInst(result, thissop, "input_checkpointattribs#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1571  return (result);
1572  }
1574  { return opinstNumInputs_input_pointattribs(cookparms, &_idx); }
1576  {
1577  SOP_Node *thissop = cookparms.getNode();
1578  if (!thissop) return (myNumInputs(_idx[0]).input_pointattribs);
1579  int _parmidx[2-1];
1580  _parmidx[1-1] = _idx[1-1] + 1;
1581 
1583  OP_Utils::evalOpParmInst(result, thissop, "input_pointattribs#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1584  return (result);
1585  }
1586  bool opNumInputs_input_checkvertexattribs(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
1587  { return opinstNumInputs_input_checkvertexattribs(cookparms, &_idx); }
1588  bool opinstNumInputs_input_checkvertexattribs(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1589  {
1590  SOP_Node *thissop = cookparms.getNode();
1591  if (!thissop) return (myNumInputs(_idx[0]).input_checkvertexattribs);
1592  int _parmidx[2-1];
1593  _parmidx[1-1] = _idx[1-1] + 1;
1594 
1595  bool result;
1596  OP_Utils::evalOpParmInst(result, thissop, "input_checkvertexattribs#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1597  return (result);
1598  }
1600  { return opinstNumInputs_input_vertexattribs(cookparms, &_idx); }
1602  {
1603  SOP_Node *thissop = cookparms.getNode();
1604  if (!thissop) return (myNumInputs(_idx[0]).input_vertexattribs);
1605  int _parmidx[2-1];
1606  _parmidx[1-1] = _idx[1-1] + 1;
1607 
1609  OP_Utils::evalOpParmInst(result, thissop, "input_vertexattribs#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1610  return (result);
1611  }
1613  { return opinstNumInputs_input_checkprimitiveattribs(cookparms, &_idx); }
1614  bool opinstNumInputs_input_checkprimitiveattribs(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1615  {
1616  SOP_Node *thissop = cookparms.getNode();
1617  if (!thissop) return (myNumInputs(_idx[0]).input_checkprimitiveattribs);
1618  int _parmidx[2-1];
1619  _parmidx[1-1] = _idx[1-1] + 1;
1620 
1621  bool result;
1622  OP_Utils::evalOpParmInst(result, thissop, "input_checkprimitiveattribs#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1623  return (result);
1624  }
1626  { return opinstNumInputs_input_primitiveattribs(cookparms, &_idx); }
1628  {
1629  SOP_Node *thissop = cookparms.getNode();
1630  if (!thissop) return (myNumInputs(_idx[0]).input_primitiveattribs);
1631  int _parmidx[2-1];
1632  _parmidx[1-1] = _idx[1-1] + 1;
1633 
1635  OP_Utils::evalOpParmInst(result, thissop, "input_primitiveattribs#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1636  return (result);
1637  }
1638  bool opNumInputs_input_checkdetailattribs(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
1639  { return opinstNumInputs_input_checkdetailattribs(cookparms, &_idx); }
1640  bool opinstNumInputs_input_checkdetailattribs(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1641  {
1642  SOP_Node *thissop = cookparms.getNode();
1643  if (!thissop) return (myNumInputs(_idx[0]).input_checkdetailattribs);
1644  int _parmidx[2-1];
1645  _parmidx[1-1] = _idx[1-1] + 1;
1646 
1647  bool result;
1648  OP_Utils::evalOpParmInst(result, thissop, "input_checkdetailattribs#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1649  return (result);
1650  }
1652  { return opinstNumInputs_input_detailattribs(cookparms, &_idx); }
1654  {
1655  SOP_Node *thissop = cookparms.getNode();
1656  if (!thissop) return (myNumInputs(_idx[0]).input_detailattribs);
1657  int _parmidx[2-1];
1658  _parmidx[1-1] = _idx[1-1] + 1;
1659 
1661  OP_Utils::evalOpParmInst(result, thissop, "input_detailattribs#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1662  return (result);
1663  }
1664  bool opNumInputs_input_checkpointgroups(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
1665  { return opinstNumInputs_input_checkpointgroups(cookparms, &_idx); }
1666  bool opinstNumInputs_input_checkpointgroups(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1667  {
1668  SOP_Node *thissop = cookparms.getNode();
1669  if (!thissop) return (myNumInputs(_idx[0]).input_checkpointgroups);
1670  int _parmidx[2-1];
1671  _parmidx[1-1] = _idx[1-1] + 1;
1672 
1673  bool result;
1674  OP_Utils::evalOpParmInst(result, thissop, "input_checkpointgroups#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1675  return (result);
1676  }
1678  { return opinstNumInputs_input_pointgroups(cookparms, &_idx); }
1680  {
1681  SOP_Node *thissop = cookparms.getNode();
1682  if (!thissop) return (myNumInputs(_idx[0]).input_pointgroups);
1683  int _parmidx[2-1];
1684  _parmidx[1-1] = _idx[1-1] + 1;
1685 
1687  OP_Utils::evalOpParmInst(result, thissop, "input_pointgroups#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1688  return (result);
1689  }
1690  bool opNumInputs_input_checkvertexgroups(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
1691  { return opinstNumInputs_input_checkvertexgroups(cookparms, &_idx); }
1692  bool opinstNumInputs_input_checkvertexgroups(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1693  {
1694  SOP_Node *thissop = cookparms.getNode();
1695  if (!thissop) return (myNumInputs(_idx[0]).input_checkvertexgroups);
1696  int _parmidx[2-1];
1697  _parmidx[1-1] = _idx[1-1] + 1;
1698 
1699  bool result;
1700  OP_Utils::evalOpParmInst(result, thissop, "input_checkvertexgroups#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1701  return (result);
1702  }
1704  { return opinstNumInputs_input_vertexgroups(cookparms, &_idx); }
1706  {
1707  SOP_Node *thissop = cookparms.getNode();
1708  if (!thissop) return (myNumInputs(_idx[0]).input_vertexgroups);
1709  int _parmidx[2-1];
1710  _parmidx[1-1] = _idx[1-1] + 1;
1711 
1713  OP_Utils::evalOpParmInst(result, thissop, "input_vertexgroups#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1714  return (result);
1715  }
1717  { return opinstNumInputs_input_checkprimitivegroups(cookparms, &_idx); }
1718  bool opinstNumInputs_input_checkprimitivegroups(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1719  {
1720  SOP_Node *thissop = cookparms.getNode();
1721  if (!thissop) return (myNumInputs(_idx[0]).input_checkprimitivegroups);
1722  int _parmidx[2-1];
1723  _parmidx[1-1] = _idx[1-1] + 1;
1724 
1725  bool result;
1726  OP_Utils::evalOpParmInst(result, thissop, "input_checkprimitivegroups#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1727  return (result);
1728  }
1730  { return opinstNumInputs_input_primitivegroups(cookparms, &_idx); }
1732  {
1733  SOP_Node *thissop = cookparms.getNode();
1734  if (!thissop) return (myNumInputs(_idx[0]).input_primitivegroups);
1735  int _parmidx[2-1];
1736  _parmidx[1-1] = _idx[1-1] + 1;
1737 
1739  OP_Utils::evalOpParmInst(result, thissop, "input_primitivegroups#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1740  return (result);
1741  }
1742  bool opNumInputs_input_checkedgegroups(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
1743  { return opinstNumInputs_input_checkedgegroups(cookparms, &_idx); }
1744  bool opinstNumInputs_input_checkedgegroups(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1745  {
1746  SOP_Node *thissop = cookparms.getNode();
1747  if (!thissop) return (myNumInputs(_idx[0]).input_checkedgegroups);
1748  int _parmidx[2-1];
1749  _parmidx[1-1] = _idx[1-1] + 1;
1750 
1751  bool result;
1752  OP_Utils::evalOpParmInst(result, thissop, "input_checkedgegroups#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1753  return (result);
1754  }
1756  { return opinstNumInputs_input_edgegroups(cookparms, &_idx); }
1758  {
1759  SOP_Node *thissop = cookparms.getNode();
1760  if (!thissop) return (myNumInputs(_idx[0]).input_edgegroups);
1761  int _parmidx[2-1];
1762  _parmidx[1-1] = _idx[1-1] + 1;
1763 
1765  OP_Utils::evalOpParmInst(result, thissop, "input_edgegroups#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1766  return (result);
1767  }
1768  bool opNumInputs_input_checkdetailid(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
1769  { return opinstNumInputs_input_checkdetailid(cookparms, &_idx); }
1770  bool opinstNumInputs_input_checkdetailid(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1771  {
1772  SOP_Node *thissop = cookparms.getNode();
1773  if (!thissop) return (myNumInputs(_idx[0]).input_checkdetailid);
1774  int _parmidx[2-1];
1775  _parmidx[1-1] = _idx[1-1] + 1;
1776 
1777  bool result;
1778  OP_Utils::evalOpParmInst(result, thissop, "input_checkdetailid#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1779  return (result);
1780  }
1781  bool opNumInputs_input_checkprimitivesid(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
1782  { return opinstNumInputs_input_checkprimitivesid(cookparms, &_idx); }
1783  bool opinstNumInputs_input_checkprimitivesid(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1784  {
1785  SOP_Node *thissop = cookparms.getNode();
1786  if (!thissop) return (myNumInputs(_idx[0]).input_checkprimitivesid);
1787  int _parmidx[2-1];
1788  _parmidx[1-1] = _idx[1-1] + 1;
1789 
1790  bool result;
1791  OP_Utils::evalOpParmInst(result, thissop, "input_checkprimitivesid#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1792  return (result);
1793  }
1794  bool opNumInputs_input_checktopology(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
1795  { return opinstNumInputs_input_checktopology(cookparms, &_idx); }
1796  bool opinstNumInputs_input_checktopology(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1797  {
1798  SOP_Node *thissop = cookparms.getNode();
1799  if (!thissop) return (myNumInputs(_idx[0]).input_checktopology);
1800  int _parmidx[2-1];
1801  _parmidx[1-1] = _idx[1-1] + 1;
1802 
1803  bool result;
1804  OP_Utils::evalOpParmInst(result, thissop, "input_checktopology#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1805  return (result);
1806  }
1807  bool opNumInputs_input_checkchangecount(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
1808  { return opinstNumInputs_input_checkchangecount(cookparms, &_idx); }
1809  bool opinstNumInputs_input_checkchangecount(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1810  {
1811  SOP_Node *thissop = cookparms.getNode();
1812  if (!thissop) return (myNumInputs(_idx[0]).input_checkchangecount);
1813  int _parmidx[2-1];
1814  _parmidx[1-1] = _idx[1-1] + 1;
1815 
1816  bool result;
1817  OP_Utils::evalOpParmInst(result, thissop, "input_checkchangecount#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1818  return (result);
1819  }
1820 
1821  CheckGroups getCheckGroups() const { return CheckGroups(myCheckGroups); }
1822  void setCheckGroups(CheckGroups val) { myCheckGroups = int64(val); }
1824  {
1825  SOP_Node *thissop = cookparms.getNode();
1826  if (!thissop) return getCheckGroups();
1827  int64 result;
1828  OP_Utils::evalOpParm(result, thissop, "checkgroups", cookparms.getCookTime(), 0);
1829  return CheckGroups(result);
1830  }
1831  const UT_Array<NumPatterns> &getNumPatterns() const { return myNumPatterns; }
1832 void setNumPatterns(const UT_Array<NumPatterns> &val) { myNumPatterns = val; }
1834  {
1835  SOP_Node *thissop = cookparms.getNode();
1836  if (!thissop) return getNumPatterns().entries();
1837  exint result;
1838  OP_Utils::evalOpParm(result, thissop, "numpatterns", cookparms.getCookTime(), 0);
1839  return result;
1840  }
1841  bool opNumPatterns_parm_enable(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
1842  { return opinstNumPatterns_parm_enable(cookparms, &_idx); }
1843  bool opinstNumPatterns_parm_enable(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1844  {
1845  SOP_Node *thissop = cookparms.getNode();
1846  if (!thissop) return (myNumPatterns(_idx[0]).parm_enable);
1847  int _parmidx[2-1];
1848  _parmidx[1-1] = _idx[1-1] + 1;
1849 
1850  bool result;
1851  OP_Utils::evalOpParmInst(result, thissop, "parm_enable#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1852  return (result);
1853  }
1855  { return opinstNumPatterns_parm_nodepath(cookparms, &_idx); }
1857  {
1858  SOP_Node *thissop = cookparms.getNode();
1859  if (!thissop) return (myNumPatterns(_idx[0]).parm_nodepath);
1860  int _parmidx[2-1];
1861  _parmidx[1-1] = _idx[1-1] + 1;
1862 
1864  OP_Utils::evalOpParmInst(result, thissop, "parm_nodepath#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1865  return (result);
1866  }
1868  { return opinstNumPatterns_parm_parmfilter(cookparms, &_idx); }
1870  {
1871  SOP_Node *thissop = cookparms.getNode();
1872  if (!thissop) return (myNumPatterns(_idx[0]).parm_parmfilter);
1873  int _parmidx[2-1];
1874  _parmidx[1-1] = _idx[1-1] + 1;
1875 
1877  OP_Utils::evalOpParmInst(result, thissop, "parm_parmfilter#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1878  return (result);
1879  }
1880  bool opNumPatterns_parm_expandmultiparms(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
1881  { return opinstNumPatterns_parm_expandmultiparms(cookparms, &_idx); }
1882  bool opinstNumPatterns_parm_expandmultiparms(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1883  {
1884  SOP_Node *thissop = cookparms.getNode();
1885  if (!thissop) return (myNumPatterns(_idx[0]).parm_expandmultiparms);
1886  int _parmidx[2-1];
1887  _parmidx[1-1] = _idx[1-1] + 1;
1888 
1889  bool result;
1890  OP_Utils::evalOpParmInst(result, thissop, "parm_expandmultiparms#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1891  return (result);
1892  }
1894  { return opinstNumPatterns_parm_groupfilter(cookparms, &_idx); }
1896  {
1897  SOP_Node *thissop = cookparms.getNode();
1898  if (!thissop) return (myNumPatterns(_idx[0]).parm_groupfilter);
1899  int _parmidx[2-1];
1900  _parmidx[1-1] = _idx[1-1] + 1;
1901 
1903  OP_Utils::evalOpParmInst(result, thissop, "parm_groupfilter#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1904  return (result);
1905  }
1907  { return opinstNumPatterns_parm_grouptype(cookparms, &_idx); }
1908  int64 opinstNumPatterns_parm_grouptype(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1909  {
1910  SOP_Node *thissop = cookparms.getNode();
1911  if (!thissop) return (myNumPatterns(_idx[0]).parm_grouptype);
1912  int _parmidx[2-1];
1913  _parmidx[1-1] = _idx[1-1] + 1;
1914 
1915  int64 result;
1916  OP_Utils::evalOpParmInst(result, thissop, "parm_grouptype#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1917  return (result);
1918  }
1920  { return opinstNumPatterns_parm_oninput(cookparms, &_idx); }
1921  int64 opinstNumPatterns_parm_oninput(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1922  {
1923  SOP_Node *thissop = cookparms.getNode();
1924  if (!thissop) return (myNumPatterns(_idx[0]).parm_oninput);
1925  int _parmidx[2-1];
1926  _parmidx[1-1] = _idx[1-1] + 1;
1927 
1928  int64 result;
1929  OP_Utils::evalOpParmInst(result, thissop, "parm_oninput#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1930  return (result);
1931  }
1932 
1933  const UT_Array<NumExpressions> &getNumExpressions() const { return myNumExpressions; }
1934 void setNumExpressions(const UT_Array<NumExpressions> &val) { myNumExpressions = val; }
1936  {
1937  SOP_Node *thissop = cookparms.getNode();
1938  if (!thissop) return getNumExpressions().entries();
1939  exint result;
1940  OP_Utils::evalOpParm(result, thissop, "numexpressions", cookparms.getCookTime(), 0);
1941  return result;
1942  }
1943  bool opNumExpressions_expr_enable(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
1944  { return opinstNumExpressions_expr_enable(cookparms, &_idx); }
1945  bool opinstNumExpressions_expr_enable(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1946  {
1947  SOP_Node *thissop = cookparms.getNode();
1948  if (!thissop) return (myNumExpressions(_idx[0]).expr_enable);
1949  int _parmidx[2-1];
1950  _parmidx[1-1] = _idx[1-1] + 1;
1951 
1952  bool result;
1953  OP_Utils::evalOpParmInst(result, thissop, "expr_enable#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1954  return (result);
1955  }
1957  { return opinstNumExpressions_expr_cachewhen(cookparms, &_idx); }
1958  int64 opinstNumExpressions_expr_cachewhen(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1959  {
1960  SOP_Node *thissop = cookparms.getNode();
1961  if (!thissop) return (myNumExpressions(_idx[0]).expr_cachewhen);
1962  int _parmidx[2-1];
1963  _parmidx[1-1] = _idx[1-1] + 1;
1964 
1965  int64 result;
1966  OP_Utils::evalOpParmInst(result, thissop, "expr_cachewhen#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1967  return (result);
1968  }
1970  { return opinstNumExpressions_expr_exprval(cookparms, &_idx); }
1971  int64 opinstNumExpressions_expr_exprval(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1972  {
1973  SOP_Node *thissop = cookparms.getNode();
1974  if (!thissop) return (myNumExpressions(_idx[0]).expr_exprval);
1975  int _parmidx[2-1];
1976  _parmidx[1-1] = _idx[1-1] + 1;
1977 
1978  int64 result;
1979  OP_Utils::evalOpParmInst(result, thissop, "expr_exprval#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1980  return (result);
1981  }
1983  { return opinstNumExpressions_expr_exprtype(cookparms, &_idx); }
1984  int64 opinstNumExpressions_expr_exprtype(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1985  {
1986  SOP_Node *thissop = cookparms.getNode();
1987  if (!thissop) return (myNumExpressions(_idx[0]).expr_exprtype);
1988  int _parmidx[2-1];
1989  _parmidx[1-1] = _idx[1-1] + 1;
1990 
1991  int64 result;
1992  OP_Utils::evalOpParmInst(result, thissop, "expr_exprtype#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1993  return (result);
1994  }
1996  { return opinstNumExpressions_expr_numexpr(cookparms, &_idx); }
1997  fpreal64 opinstNumExpressions_expr_numexpr(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1998  {
1999  SOP_Node *thissop = cookparms.getNode();
2000  if (!thissop) return (myNumExpressions(_idx[0]).expr_numexpr);
2001  int _parmidx[2-1];
2002  _parmidx[1-1] = _idx[1-1] + 1;
2003 
2004  fpreal64 result;
2005  OP_Utils::evalOpParmInst(result, thissop, "expr_numexpr#", _parmidx, cookparms.getCookTime(), 0, 2-1);
2006  return (result);
2007  }
2009  { return opinstNumExpressions_expr_strexpr(cookparms, &_idx); }
2011  {
2012  SOP_Node *thissop = cookparms.getNode();
2013  if (!thissop) return (myNumExpressions(_idx[0]).expr_strexpr);
2014  int _parmidx[2-1];
2015  _parmidx[1-1] = _idx[1-1] + 1;
2016 
2018  OP_Utils::evalOpParmInst(result, thissop, "expr_strexpr#", _parmidx, cookparms.getCookTime(), 0, 2-1);
2019  return (result);
2020  }
2021 
2022 
2023 private:
2024  bool myCheckUpstream;
2025  bool myOutputAttrib;
2026  bool myCheckAttrib;
2027  UT_StringHolder myAttribName;
2028  UT_Array<NumInputs> myNumInputs;
2029  int64 myCheckGroups;
2030  UT_Array<NumPatterns> myNumPatterns;
2031  UT_Array<NumExpressions> myNumExpressions;
2032 
2033 };
int64 opinstNumPatterns_parm_oninput(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
bool getCheckAttrib() const
void setNumPatterns(const UT_Array< NumPatterns > &val)
static void loadData(UT_IStream &is, UT_Vector2I &v)
static void loadData(UT_IStream &is, UT_Matrix2D &v)
void setCheckGroups(CheckGroups val)
bool operator!=(const NumExpressions &src) const
static void saveData(std::ostream &os, UT_StringHolder s)
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector4D &value) override
void setCheckUpstream(bool val)
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glcorearb.h:2540
UT_StringHolder opinstNumInputs_input_primitiveattribs(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
bool opinstNumInputs_input_enable(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
bool operator==(const NumInputs &src) const
static void saveData(std::ostream &os, fpreal64 v)
const UT_Array< NumPatterns > & getNumPatterns() const
bool opNumInputs_input_checktopology(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
static void saveData(std::ostream &os, UT_Matrix2D v)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix4D &value) const override
static void saveData(std::ostream &os, UT_Matrix3D v)
int int32
Definition: SYS_Types.h:39
SOP_Node * getNode() const
Definition: SOP_NodeVerb.h:347
static void loadData(UT_IStream &is, UT_Matrix4D &v)
static void saveData(std::ostream &os, PRM_DataItemHandle s)
T clampMaxValue(fpreal maxvalue, const T &src) const
Definition: OP_NodeParms.h:315
bool opNumExpressions_expr_enable(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
static void loadData(UT_IStream &is, UT_Vector3D &v)
bool opinstNumInputs_input_checktopology(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
UT_StringHolder createString(const UT_Array< NumInputs > &list) const
static void loadData(UT_IStream &is, int64 &v)
static void loadData(UT_IStream &is, UT_StringHolder &v)
static int version()
void
Definition: png.h:1083
exint bread(int32 *buffer, exint asize=1)
GLboolean * data
Definition: glcorearb.h:131
void setOutputAttrib(bool val)
GT_API const UT_StringHolder time
UT_StringHolder opinstNumPatterns_parm_groupfilter(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector4.h:493
const GLdouble * v
Definition: glcorearb.h:837
fpreal getTime() const
Definition: OP_Context.h:62
static void loadData(UT_IStream &is, UT_Vector2D &v)
UT_StringHolder input_primitivegroups
bool operator==(const NumPatterns &src) const
UT_StringHolder opinstNumInputs_input_vertexgroups(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
bool load(UT_IStream &is)
static void saveData(std::ostream &os, UT_Vector4D v)
bool operator!=(const NumInputs &src) const
bool opNumInputs_input_checkpointgroups(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
static void saveData(std::ostream &os, int64 v)
UT_String makeQuotedString(char delimiter='\'', bool escape_nonprinting=false) const
void setCheckAttrib(bool val)
const OP_Context & context() const
Definition: OP_NodeParms.h:97
static void loadData(UT_IStream &is, PRM_DataItemHandle &v)
void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
const UT_StringHolder & getAttribName() 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
void getNestParmValue(TempIndex idx, TempIndex instance, exint &value) const override
void setNestParmValue(TempIndex idx, TempIndex instance, const exint &value) override
GLdouble s
Definition: glad.h:3009
void setAttribName(const UT_StringHolder &val)
GLuint GLsizei GLsizei * length
Definition: glcorearb.h:795
An output stream object that owns its own string buffer storage.
void getNestParmValue(TempIndex idx, TempIndex instance, fpreal &value) const override
UT_StringHolder input_detailattribs
bool opNumInputs_input_checkchangecount(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
static void loadData(UT_IStream &is, fpreal64 &v)
CheckGroups getCheckGroups() const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
**But if you need a result
Definition: thread.h:613
bool opNumPatterns_parm_expandmultiparms(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_StringHolder &value) override
T clampMinValue(fpreal minvalue, const T &src) const
Definition: OP_NodeParms.h:308
bool operator!=(const SOP_CacheIfParms &src) const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector3D &value) const override
bool operator==(const NumExpressions &src) const
exint nodeIdx() const
Definition: OP_NodeParms.h:95
bool opinstNumExpressions_expr_enable(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
bool opinstNumInputs_input_checkdetailattribs(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
static PRM_DataItemHandle parseBinary(const char *type, UT_IStream &is)
fpreal64 opNumExpressions_expr_numexpr(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
const UT_WorkBuffer & str()
Returns a read-only reference to the underlying UT_WorkBuffer.
static void loadData(UT_IStream &is, bool &v)
bool opinstNumInputs_input_checkpointgroups(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
bool opinstNumPatterns_parm_enable(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
bool opinstNumInputs_input_checkdetailid(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
UT_StringHolder opNumExpressions_expr_strexpr(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector3D &value) override
bool opNumInputs_input_enable(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector4.h:491
void setNumInputs(const UT_Array< NumInputs > &val)
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_SharedPtr< UT_Ramp > &value) override
const char * getNestParmName(TempIndex fieldnum) const override
bool operator!=(const NumPatterns &src) const
fpreal64 opinstNumExpressions_expr_numexpr(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
GLuint GLsizei const GLuint const GLintptr * offsets
Definition: glcorearb.h:2621
double fpreal64
Definition: SYS_Types.h:201
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector2.h:423
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix4D &value) override
bool opNumInputs_input_checkdetailattribs(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
static void saveData(std::ostream &os, UT_Vector2D v)
UT_StringHolder input_primitiveattribs
UT_StringHolder opNumInputs_input_edgegroups(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
UT_StringHolder opinstNumPatterns_parm_nodepath(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector2D &value) const override
bool operator==(const BaseDimensions< T > &a, const BaseDimensions< Y > &b)
Definition: Dimensions.h:137
int64 opNumExpressions_expr_cachewhen(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
exint opNumPatterns(const SOP_NodeVerb::CookParms &cookparms) const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix3D &value) override
static void loadData(UT_IStream &is, UT_Vector3I &v)
bool opCheckUpstream(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opinstNumInputs_input_pointgroups(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
bool opCheckAttrib(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opinstNumInputs_input_primitivegroups(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
int64 opinstNumExpressions_expr_exprtype(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
exint opNumExpressions(const SOP_NodeVerb::CookParms &cookparms) const
bool opOutputAttrib(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opinstNumInputs_input_edgegroups(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
static void saveData(std::ostream &os, UT_SharedPtr< UT_Ramp > s)
bool isParmColorRamp(exint idx) const override
exint length() const
bool opinstNumInputs_input_checkpointattribs(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
void save(std::ostream &os) const
const UT_Array< NumExpressions > & getNumExpressions() const
UT_StringHolder opNumInputs_input_detailattribs(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
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
static void loadData(UT_IStream &is, UT_Vector4I &v)
bool opNumInputs_input_checkdetailid(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
void copyFrom(const OP_NodeParms *src) override
UT_StringHolder createString(const UT_Array< NumExpressions > &list) const
exint read(bool *array, exint sz=1)
Definition: UT_IStream.h:276
const OP_GraphProxy * graph() const
Definition: OP_NodeParms.h:94
bool opinstNumPatterns_parm_expandmultiparms(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
void doGetParmValue(TempIndex idx, TempIndex instance, T &value) const
bool operator==(const SOP_CacheIfParms &src) const
void loadFromOpSubclass(const LoadParms &loadparms) override
void getNestParmValue(TempIndex idx, TempIndex instance, UT_StringHolder &value) const override
exint opNumInputs(const SOP_NodeVerb::CookParms &cookparms) const
virtual void evalOpParmInst(int64 &v, NodeIdx node, const char *parmname, const int *inst, const int *offsets, fpreal time, DEP_MicroNode *depnode, int nestlevel=1) const =0
long long int64
Definition: SYS_Types.h:116
static void loadData(UT_IStream &is, UT_SharedPtr< UT_Ramp > &v)
int64 opinstNumExpressions_expr_cachewhen(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
UT_StringHolder input_pointattribs
ParmType getNestParmType(TempIndex fieldnum) const override
void setNestParmValue(TempIndex idx, TempIndex instance, const PRM_DataItemHandle &value) override
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector2D &value) override
virtual void evalOpParm(int64 &v, NodeIdx node, const char *parmname, fpreal time, DEP_MicroNode *depnode) const =0
UT_StringHolder opinstNumPatterns_parm_parmfilter(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
bool opNumPatterns_parm_enable(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
void buildFromOp(const OP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
SYS_FORCE_INLINE void strcat(const char *src)
void saveBinary(std::ostream &os) const
Save string to binary stream.
Definition: UT_String.h:296
GT_API const UT_StringHolder version
UT_StringHolder opNumInputs_input_primitiveattribs(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
exint entries() const
Alias of size(). size() is preferred.
Definition: UT_Array.h:648
UT_StringHolder input_vertexattribs
void doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
bool opNumInputs_input_checkvertexattribs(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
void setNumExpressions(const UT_Array< NumExpressions > &val)
UT_StringHolder opNumInputs_input_pointattribs(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
int int appendSprintf(const char *fmt,...) SYS_PRINTF_CHECK_ATTRIBUTE(2
int64 opinstNumPatterns_parm_grouptype(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
bool opinstNumInputs_input_checkprimitivesid(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
void coerceValue(T &result, const S &src) const
Definition: OP_NodeParms.h:301
static void saveData(std::ostream &os, UT_Vector3D v)
static void loadData(UT_IStream &is, UT_Vector4D &v)
UT_StringHolder opNumInputs_input_primitivegroups(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
bool opNumInputs_input_checkedgegroups(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
fpreal64 fpreal
Definition: SYS_Types.h:277
DEP_MicroNode * depnode() const
Definition: OP_NodeParms.h:99
UT_StringHolder opAttribName(const SOP_NodeVerb::CookParms &cookparms) const
bool getOutputAttrib() const
bool opinstNumInputs_input_checkchangecount(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
UT_StringHolder opinstNumInputs_input_vertexattribs(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
Utility class for containing a color ramp.
Definition: UT_Ramp.h:88
constexpr SYS_FORCE_INLINE T & w() noexcept
Definition: UT_Vector4.h:497
SYS_FORCE_INLINE void append(char character)
GLuint GLfloat * val
Definition: glcorearb.h:1608
UT_StringHolder createString(const UT_Array< NumPatterns > &list) const
#define SOP_API
Definition: SOP_API.h:10
bool opNumInputs_input_checkprimitivegroups(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
exint getNestNumParms(TempIndex idx) const override
bool opinstNumInputs_input_checkvertexgroups(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
bool opinstNumInputs_input_checkedgegroups(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
fpreal getCookTime() const
Definition: SOP_NodeVerb.h:361
UT_StringHolder opNumInputs_input_pointgroups(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
UT_StringHolder opNumInputs_input_vertexattribs(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
UT_StringHolder opNumPatterns_parm_parmfilter(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
const char * findChar(int c) const
Definition: UT_String.h:1385
#define UT_ASSERT(ZZ)
Definition: UT_Assert.h:156
UT_StringHolder opNumPatterns_parm_nodepath(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
Definition: core.h:1131
bool opinstNumInputs_input_checkprimitiveattribs(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix2D &value) const override
UT_StringHolder opNumPatterns_parm_groupfilter(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector4D &value) const override
GLboolean r
Definition: glcorearb.h:1222
int64 opNumPatterns_parm_grouptype(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
bool opNumInputs_input_checkpointattribs(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
void setNestParmValue(TempIndex idx, TempIndex instance, const fpreal &value) override
static void saveData(std::ostream &os, bool v)
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector3.h:665
const UT_Array< NumInputs > & getNumInputs() const
type
Definition: core.h:1059
bool opinstNumInputs_input_checkvertexattribs(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
bool opNumInputs_input_checkprimitivesid(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
int64 opNumExpressions_expr_exprtype(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
bool opNumInputs_input_checkvertexgroups(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
bool opinstNumInputs_input_checkprimitivegroups(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
CheckGroups opCheckGroups(const SOP_NodeVerb::CookParms &cookparms) const
UT_SharedPtr< const PRM_DataItem > PRM_DataItemHandle
Definition: PRM_Parm.h:89
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix2D &value) override
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector2.h:425
UT_StringHolder opinstNumExpressions_expr_strexpr(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
SYS_FORCE_INLINE bool isstring() const
bool getCheckUpstream() const
UT_StringHolder opinstNumInputs_input_detailattribs(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
OP_NodeParms & operator=(const OP_NodeParms &)=default
static void saveData(std::ostream &os, UT_Matrix4D v)
UT_StringHolder opinstNumInputs_input_pointattribs(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
SYS_FORCE_INLINE void strncpy(const char *src, exint maxlen)
UT_StringHolder input_vertexgroups
bool opNumInputs_input_checkprimitiveattribs(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
int64 opinstNumExpressions_expr_exprval(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
int64 opNumExpressions_expr_exprval(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
static void loadData(UT_IStream &is, UT_Matrix3D &v)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_SharedPtr< UT_Ramp > &value) const override
UT_StringHolder opNumInputs_input_vertexgroups(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
GLenum src
Definition: glcorearb.h:1793
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector3.h:663
int64 opNumPatterns_parm_oninput(const SOP_NodeVerb::CookParms &cookparms, int _idx) const