HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
SOP_TopoTransfer.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_TopoTransferEnums
24 {
26  {
27  AUTO = 0,
28  MANUAL
29  };
30  enum class MaskMode
31  {
32  MASKOFF = 0,
33  MASKON
34  };
35  enum class SolverType
36  {
37  NONLINEAR = 0,
38  LINEAR
39  };
40  enum class Debug_menu
41  {
42  SHOW_NONE = 0,
45  };
46 }
47 
48 
50 {
51 public:
52  static int version() { return 1; }
54  {
64 
65 
67  {
68  enablegroup = true;
69  pballcolor = UT_Vector3D(0,0,1);
70  pname = "group#"_UTsh;
71  usesourcepos = true;
72  sourcepos = ""_UTsh;
73  usetargetpos = true;
74  targetpos = ""_UTsh;
75  psourcegroup = ""_UTsh;
76  ptargetgroup = ""_UTsh;
77 
78  }
79 
80  bool operator==(const Numlandmarkgroups &src) const
81  {
82  if (enablegroup != src.enablegroup) return false;
83  if (pballcolor != src.pballcolor) return false;
84  if (pname != src.pname) return false;
85  if (usesourcepos != src.usesourcepos) return false;
86  if (sourcepos != src.sourcepos) return false;
87  if (usetargetpos != src.usetargetpos) return false;
88  if (targetpos != src.targetpos) return false;
89  if (psourcegroup != src.psourcegroup) return false;
90  if (ptargetgroup != src.ptargetgroup) return false;
91 
92  return true;
93  }
94  bool operator!=(const Numlandmarkgroups &src) const
95  {
96  return !operator==(src);
97  }
98 
99  };
100 
102  {
104 
105  buf.strcat("[ ");
106  for (int i = 0; i < list.entries(); i++)
107  {
108  if (i)
109  buf.strcat(", ");
110  buf.strcat("( ");
111  buf.append("");
112  buf.appendSprintf("%s", (list(i).enablegroup) ? "true" : "false");
113  buf.append(", ");
114  buf.appendSprintf("(%f, %f, %f)", list(i).pballcolor.x(), list(i).pballcolor.y(), list(i).pballcolor.z());
115  buf.append(", ");
116  { UT_String tmp; tmp = UT_StringWrap(list(i).pname).makeQuotedString('"'); buf.strcat(tmp); }
117  buf.append(", ");
118  buf.appendSprintf("%s", (list(i).usesourcepos) ? "true" : "false");
119  buf.append(", ");
120  { UT_String tmp; tmp = UT_StringWrap(list(i).sourcepos).makeQuotedString('"'); buf.strcat(tmp); }
121  buf.append(", ");
122  buf.appendSprintf("%s", (list(i).usetargetpos) ? "true" : "false");
123  buf.append(", ");
124  { UT_String tmp; tmp = UT_StringWrap(list(i).targetpos).makeQuotedString('"'); buf.strcat(tmp); }
125  buf.append(", ");
126  { UT_String tmp; tmp = UT_StringWrap(list(i).psourcegroup).makeQuotedString('"'); buf.strcat(tmp); }
127  buf.append(", ");
128  { UT_String tmp; tmp = UT_StringWrap(list(i).ptargetgroup).makeQuotedString('"'); buf.strcat(tmp); }
129 
130  buf.strcat(" )");
131  }
132  buf.strcat(" ]");
133 
135  return result;
136  }
137 
139  {
140  myEnableSolve = true;
141  myEnableGeometryConstraints = false;
142  myConstraintSelection = 0;
143  myConstraintSource = ""_UTsh;
144  myIterations = 15;
145  myReducedLevels = 3;
146  myReductionPercentage = UT_Vector2D(0.1,0.9);
147  myReductionPercentageSingle = 0.1;
148  myInitialReductionPercentage = 0.1;
149  myRigidWeights = UT_Vector2D(1,0.001);
150  myLandmarkWeights = UT_Vector2D(100,100);
151  myMaskMode = 0;
152  myMaskTolerance = 1e-6;
153  myRigidprimitives = ""_UTsh;
154  myDistTolerance = 0.2;
155  myNormTolerance = 45;
156  mySolverType = 0;
157  mySolverIterations = 20;
158  myGradientTolerance = UT_Vector2D(0.01,0.003);
159  myDebug_menu = 0;
160  myDebug_coarse_lvl = 0;
161  myDebug_coarse_iteration = 0;
162  myDebug_dense_lvl = 0;
163  myDebug_dense_iteration = 0;
164  myDebug_hessian_scaling = true;
165  myDebug_use_marquadt = true;
166  myParameter_tolerance = 0.0001;
167  myUse_tau = false;
168  myTau = 0.000001;
169  myInitial_damping = 0.0001;
170  myDebug_save_meshes = false;
171  myUseLandmarkLables = true;
172  myLandmarkAttribute = "landmark"_UTsh;
173  myEnableLandmarks = true;
174  myNumlandmarkgroups.setSize(0);
175  myRigidMask = "rigid_mask"_UTsh;
176 
177  }
178 
179  explicit SOP_TopoTransferParms(const SOP_TopoTransferParms &) = default;
181  SOP_TopoTransferParms(SOP_TopoTransferParms &&) noexcept = default;
182  SOP_TopoTransferParms &operator=(SOP_TopoTransferParms &&) noexcept = default;
183 
184  ~SOP_TopoTransferParms() override {}
185 
187  {
188  if (myEnableSolve != src.myEnableSolve) return false;
189  if (myEnableGeometryConstraints != src.myEnableGeometryConstraints) return false;
190  if (myConstraintSelection != src.myConstraintSelection) return false;
191  if (myConstraintSource != src.myConstraintSource) return false;
192  if (myIterations != src.myIterations) return false;
193  if (myReducedLevels != src.myReducedLevels) return false;
194  if (myReductionPercentage != src.myReductionPercentage) return false;
195  if (myReductionPercentageSingle != src.myReductionPercentageSingle) return false;
196  if (myInitialReductionPercentage != src.myInitialReductionPercentage) return false;
197  if (myRigidWeights != src.myRigidWeights) return false;
198  if (myLandmarkWeights != src.myLandmarkWeights) return false;
199  if (myMaskMode != src.myMaskMode) return false;
200  if (myMaskTolerance != src.myMaskTolerance) return false;
201  if (myRigidprimitives != src.myRigidprimitives) return false;
202  if (myDistTolerance != src.myDistTolerance) return false;
203  if (myNormTolerance != src.myNormTolerance) return false;
204  if (mySolverType != src.mySolverType) return false;
205  if (mySolverIterations != src.mySolverIterations) return false;
206  if (myGradientTolerance != src.myGradientTolerance) return false;
207  if (myDebug_menu != src.myDebug_menu) return false;
208  if (myDebug_coarse_lvl != src.myDebug_coarse_lvl) return false;
209  if (myDebug_coarse_iteration != src.myDebug_coarse_iteration) return false;
210  if (myDebug_dense_lvl != src.myDebug_dense_lvl) return false;
211  if (myDebug_dense_iteration != src.myDebug_dense_iteration) return false;
212  if (myDebug_hessian_scaling != src.myDebug_hessian_scaling) return false;
213  if (myDebug_use_marquadt != src.myDebug_use_marquadt) return false;
214  if (myParameter_tolerance != src.myParameter_tolerance) return false;
215  if (myUse_tau != src.myUse_tau) return false;
216  if (myTau != src.myTau) return false;
217  if (myInitial_damping != src.myInitial_damping) return false;
218  if (myDebug_save_meshes != src.myDebug_save_meshes) return false;
219  if (myUseLandmarkLables != src.myUseLandmarkLables) return false;
220  if (myLandmarkAttribute != src.myLandmarkAttribute) return false;
221  if (myEnableLandmarks != src.myEnableLandmarks) return false;
222  if (myNumlandmarkgroups != src.myNumlandmarkgroups) return false;
223  if (myRigidMask != src.myRigidMask) return false;
224 
225  return true;
226  }
228  {
229  return !operator==(src);
230  }
235 
236 
237 
238  void buildFromOp(const OP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
239  {
240  myEnableSolve = true;
241  if (true)
242  graph->evalOpParm(myEnableSolve, nodeidx, "enablesolve", time, 0);
243  myEnableGeometryConstraints = false;
244  if (true)
245  graph->evalOpParm(myEnableGeometryConstraints, nodeidx, "enablegeometryconstraints", time, 0);
246  myConstraintSelection = 0;
247  if (true && ( (true&&!(((getEnableGeometryConstraints()==0)))) ) )
248  graph->evalOpParm(myConstraintSelection, nodeidx, "constraintselection", time, 0);
249  myConstraintSource = ""_UTsh;
250  if (true && ( (true&&!(((int64(getConstraintSelection())==0)))) ) )
251  graph->evalOpParm(myConstraintSource, nodeidx, "constraintsource", time, 0);
252  myIterations = 15;
253  if (true)
254  graph->evalOpParm(myIterations, nodeidx, "iterations", time, 0);
255  myReducedLevels = 3;
256  if (true)
257  graph->evalOpParm(myReducedLevels, nodeidx, "reducedlevels", time, 0);
258  myReductionPercentage = UT_Vector2D(0.1,0.9);
259  if (true && ( (true&&!(((int64(getReducedLevels())<=1))||((getEnableGeometryConstraints()==1)))) ) )
260  graph->evalOpParm(myReductionPercentage, nodeidx, "reductionpercentage", time, 0);
261  myReductionPercentageSingle = 0.1;
262  if (true && ( (true&&!(((int64(getReducedLevels())>1))||((getEnableGeometryConstraints()==1)))) ) )
263  graph->evalOpParm(myReductionPercentageSingle, nodeidx, "reductionpercentage_single", time, 0);
264  myInitialReductionPercentage = 0.1;
265  if (true && ( (true&&!(((int64(getReducedLevels())<=1))||((getEnableGeometryConstraints()==0)))) ) )
266  graph->evalOpParm(myInitialReductionPercentage, nodeidx, "initialreductionpercentage", time, 0);
267  myRigidWeights = UT_Vector2D(1,0.001);
268  if (true)
269  graph->evalOpParm(myRigidWeights, nodeidx, "rigidweights", time, 0);
270  myLandmarkWeights = UT_Vector2D(100,100);
271  if (true)
272  graph->evalOpParm(myLandmarkWeights, nodeidx, "landmarkweights", time, 0);
273  myMaskMode = 0;
274  if (true)
275  graph->evalOpParm(myMaskMode, nodeidx, "maskmode", time, 0);
276  myMaskTolerance = 1e-6;
277  if (true && ( (true&&!(((int64(getMaskMode())==0)))) ) )
278  graph->evalOpParm(myMaskTolerance, nodeidx, "masktolerance", time, 0);
279  myRigidprimitives = ""_UTsh;
280  if (true)
281  graph->evalOpParm(myRigidprimitives, nodeidx, "rigidprimitives", time, 0);
282  myDistTolerance = 0.2;
283  if (true)
284  graph->evalOpParm(myDistTolerance, nodeidx, "disttolerance", time, 0);
285  myNormTolerance = 45;
286  if (true)
287  graph->evalOpParm(myNormTolerance, nodeidx, "normtolerance", time, 0);
288  mySolverType = 0;
289  if (true)
290  graph->evalOpParm(mySolverType, nodeidx, "solvertype", time, 0);
291  mySolverIterations = 20;
292  if (true && ( (true&&!(((int64(getSolverType())!=0)))) ) )
293  graph->evalOpParm(mySolverIterations, nodeidx, "solveriterations", time, 0);
294  myGradientTolerance = UT_Vector2D(0.01,0.003);
295  if (true && ( (true&&!(((int64(getSolverType())!=0)))) ) )
296  graph->evalOpParm(myGradientTolerance, nodeidx, "gradienttolerance", time, 0);
297  myDebug_menu = 0;
298  if (true)
299  graph->evalOpParm(myDebug_menu, nodeidx, "debug_menu", time, 0);
300  myDebug_coarse_lvl = 0;
301  if (true && ( (true&&!(((int64(getDebug_menu())!=1)))) ) )
302  graph->evalOpParm(myDebug_coarse_lvl, nodeidx, "debug_coarse_lvl", time, 0);
303  myDebug_coarse_iteration = 0;
304  if (true && ( (true&&!(((int64(getDebug_menu())!=1)))) ) )
305  graph->evalOpParm(myDebug_coarse_iteration, nodeidx, "debug_coarse_iteration", time, 0);
306  myDebug_dense_lvl = 0;
307  if (true && ( (true&&!(((int64(getDebug_menu())!=2)))) ) )
308  graph->evalOpParm(myDebug_dense_lvl, nodeidx, "debug_dense_lvl", time, 0);
309  myDebug_dense_iteration = 0;
310  if (true && ( (true&&!(((int64(getDebug_menu())!=2)))) ) )
311  graph->evalOpParm(myDebug_dense_iteration, nodeidx, "debug_dense_iteration", time, 0);
312  myDebug_hessian_scaling = true;
313  if (true)
314  graph->evalOpParm(myDebug_hessian_scaling, nodeidx, "debug_hessian_scaling", time, 0);
315  myDebug_use_marquadt = true;
316  if (true)
317  graph->evalOpParm(myDebug_use_marquadt, nodeidx, "debug_use_marquadt", time, 0);
318  myParameter_tolerance = 0.0001;
319  if (true)
320  graph->evalOpParm(myParameter_tolerance, nodeidx, "parameter_tolerance", time, 0);
321  myUse_tau = false;
322  if (true)
323  graph->evalOpParm(myUse_tau, nodeidx, "use_tau", time, 0);
324  myTau = 0.000001;
325  if (true && ( (true&&!(((getUse_tau()!=1)))) ) )
326  graph->evalOpParm(myTau, nodeidx, "tau", time, 0);
327  myInitial_damping = 0.0001;
328  if (true && ( (true&&!(((getUse_tau()==1)))) ) )
329  graph->evalOpParm(myInitial_damping, nodeidx, "initial_damping", time, 0);
330  myDebug_save_meshes = false;
331  if (true)
332  graph->evalOpParm(myDebug_save_meshes, nodeidx, "debug_save_meshes", time, 0);
333  myUseLandmarkLables = true;
334  if (true && ( (true&&!((((graph->getInput(nodeidx,2)>=0)==0))||(((graph->getInput(nodeidx,3)>=0)==0)))) ) )
335  graph->evalOpParm(myUseLandmarkLables, nodeidx, "uselandmarklabels", time, 0);
336  myLandmarkAttribute = "landmark"_UTsh;
337  if (true && ( (true&&!((((graph->getInput(nodeidx,2)>=0)==0))||(((graph->getInput(nodeidx,3)>=0)==0))||((getUseLandmarkLables()==0)))) ) )
338  graph->evalOpParm(myLandmarkAttribute, nodeidx, "landmarkattrib", time, 0);
339  myEnableLandmarks = true;
340  if (true && ( (true&&!((((graph->getInput(nodeidx,2)>=0)==1)&&((graph->getInput(nodeidx,3)>=0)==1)))) ) )
341  graph->evalOpParm(myEnableLandmarks, nodeidx, "enablelandmarks", time, 0);
342  if (true && ( (!((((graph->getInput(nodeidx,2)>=0)==1)&&((graph->getInput(nodeidx,3)>=0)==1))||((getEnableLandmarks()==0)))) ) )
343  {
344  int64 length = 0;
345  graph->evalOpParm(length, nodeidx, "numlandmarkgroups", time, 0);
346  if (length < 0) length = 0;
347  myNumlandmarkgroups.setSize(length);
348  for (exint i = 0; i < length; i++)
349  {
350  int parmidx[1];
351  int offsets[1];
352  parmidx[0] = i+1;
353  offsets[0] = 1;
354  auto && _curentry = myNumlandmarkgroups(i);
355  (void) _curentry;
356  _curentry.enablegroup = true;
357  if (true && ( (!((((graph->getInput(nodeidx,2)>=0)==1)&&((graph->getInput(nodeidx,3)>=0)==1))||((getEnableLandmarks()==0)))) ) && ( (true&&!((((graph->getInput(nodeidx,2)>=0)==1)&&((graph->getInput(nodeidx,3)>=0)==1))||((getEnableLandmarks()==0)))) ) )
358  graph->evalOpParmInst(_curentry.enablegroup, nodeidx, "enablegroup#", parmidx, offsets, time, 0, 2-1);
359  _curentry.pballcolor = UT_Vector3D(0,0,1);
360  if (true && ( (!((((graph->getInput(nodeidx,2)>=0)==1)&&((graph->getInput(nodeidx,3)>=0)==1))||((getEnableLandmarks()==0)))) ) && ( (true&&!((((graph->getInput(nodeidx,2)>=0)==1)&&((graph->getInput(nodeidx,3)>=0)==1))||((getEnableLandmarks()==0))||((_curentry.enablegroup==0)))) ) )
361  graph->evalOpParmInst(_curentry.pballcolor, nodeidx, "pballcolor#", parmidx, offsets, time, 0, 2-1);
362  _curentry.pname = "group#"_UTsh;
363  if (true && ( (!((((graph->getInput(nodeidx,2)>=0)==1)&&((graph->getInput(nodeidx,3)>=0)==1))||((getEnableLandmarks()==0)))) ) && ( (true&&!((((graph->getInput(nodeidx,2)>=0)==1)&&((graph->getInput(nodeidx,3)>=0)==1))||((getEnableLandmarks()==0))||((_curentry.enablegroup==0)))) ) )
364  graph->evalOpParmInst(_curentry.pname, nodeidx, "pname#", parmidx, offsets, time, 0, 2-1);
365  _curentry.usesourcepos = true;
366  if (true && ( (!((((graph->getInput(nodeidx,2)>=0)==1)&&((graph->getInput(nodeidx,3)>=0)==1))||((getEnableLandmarks()==0)))) ) && ( (true&&!((((graph->getInput(nodeidx,2)>=0)==1)&&((graph->getInput(nodeidx,3)>=0)==1))||((getEnableLandmarks()==0))||((_curentry.enablegroup==0)))) ) )
367  graph->evalOpParmInst(_curentry.usesourcepos, nodeidx, "usesourcepos#", parmidx, offsets, time, 0, 2-1);
368  _curentry.sourcepos = ""_UTsh;
369  if (true && ( (!((((graph->getInput(nodeidx,2)>=0)==1)&&((graph->getInput(nodeidx,3)>=0)==1))||((getEnableLandmarks()==0)))) ) && ( (true&&!((((graph->getInput(nodeidx,2)>=0)==1)&&((graph->getInput(nodeidx,3)>=0)==1))||((getEnableLandmarks()==0))||((_curentry.enablegroup==0))||((_curentry.usesourcepos==0)))) ) )
370  graph->evalOpParmInst(_curentry.sourcepos, nodeidx, "sourcepos#", parmidx, offsets, time, 0, 2-1);
371  _curentry.usetargetpos = true;
372  if (true && ( (!((((graph->getInput(nodeidx,2)>=0)==1)&&((graph->getInput(nodeidx,3)>=0)==1))||((getEnableLandmarks()==0)))) ) && ( (true&&!((((graph->getInput(nodeidx,2)>=0)==1)&&((graph->getInput(nodeidx,3)>=0)==1))||((getEnableLandmarks()==0))||((_curentry.enablegroup==0)))) ) )
373  graph->evalOpParmInst(_curentry.usetargetpos, nodeidx, "usetargetpos#", parmidx, offsets, time, 0, 2-1);
374  _curentry.targetpos = ""_UTsh;
375  if (true && ( (!((((graph->getInput(nodeidx,2)>=0)==1)&&((graph->getInput(nodeidx,3)>=0)==1))||((getEnableLandmarks()==0)))) ) && ( (true&&!((((graph->getInput(nodeidx,2)>=0)==1)&&((graph->getInput(nodeidx,3)>=0)==1))||((getEnableLandmarks()==0))||((_curentry.enablegroup==0))||((_curentry.usetargetpos==0)))) ) )
376  graph->evalOpParmInst(_curentry.targetpos, nodeidx, "targetpos#", parmidx, offsets, time, 0, 2-1);
377  _curentry.psourcegroup = ""_UTsh;
378  if (true && ( (!((((graph->getInput(nodeidx,2)>=0)==1)&&((graph->getInput(nodeidx,3)>=0)==1))||((getEnableLandmarks()==0)))) ) && ( (true&&!((((graph->getInput(nodeidx,2)>=0)==1)&&((graph->getInput(nodeidx,3)>=0)==1))||((getEnableLandmarks()==0))||((_curentry.enablegroup==0))||((_curentry.usesourcepos==1)))) ) )
379  graph->evalOpParmInst(_curentry.psourcegroup, nodeidx, "psourcegroup#", parmidx, offsets, time, 0, 2-1);
380  _curentry.ptargetgroup = ""_UTsh;
381  if (true && ( (!((((graph->getInput(nodeidx,2)>=0)==1)&&((graph->getInput(nodeidx,3)>=0)==1))||((getEnableLandmarks()==0)))) ) && ( (true&&!((((graph->getInput(nodeidx,2)>=0)==1)&&((graph->getInput(nodeidx,3)>=0)==1))||((getEnableLandmarks()==0))||((_curentry.enablegroup==0))||((_curentry.usetargetpos==1)))) ) )
382  graph->evalOpParmInst(_curentry.ptargetgroup, nodeidx, "ptargetgroup#", parmidx, offsets, time, 0, 2-1);
383 
384  }
385  }
386  else
387  myNumlandmarkgroups.clear();
388  myRigidMask = "rigid_mask"_UTsh;
389  if (true && ( (true&&!(((int64(getMaskMode())==0)))) ) )
390  graph->evalOpParm(myRigidMask, nodeidx, "rigidmask", time, 0);
391 
392  }
393 
394 
395  void loadFromOpSubclass(const LoadParms &loadparms) override
396  {
397  buildFromOp(loadparms.graph(), loadparms.nodeIdx(), loadparms.context().getTime(), loadparms.depnode());
398  }
399 
400 
401  void copyFrom(const OP_NodeParms *src) override
402  {
403  *this = *((const SOP_TopoTransferParms *)src);
404  }
405 
406  template <typename T>
407  void
408  doGetParmValue(TempIndex idx, TempIndex instance, T &value) const
409  {
410  if (idx.size() < 1)
411  return;
412  UT_ASSERT(idx.size() == instance.size()+1);
413  if (idx.size() != instance.size()+1)
414  return;
415  switch (idx[0])
416  {
417  case 0:
418  coerceValue(value, myEnableSolve);
419  break;
420  case 1:
421  coerceValue(value, myEnableGeometryConstraints);
422  break;
423  case 2:
424  coerceValue(value, myConstraintSelection);
425  break;
426  case 3:
427  coerceValue(value, myConstraintSource);
428  break;
429  case 4:
430  coerceValue(value, myIterations);
431  break;
432  case 5:
433  coerceValue(value, myReducedLevels);
434  break;
435  case 6:
436  coerceValue(value, myReductionPercentage);
437  break;
438  case 7:
439  coerceValue(value, myReductionPercentageSingle);
440  break;
441  case 8:
442  coerceValue(value, myInitialReductionPercentage);
443  break;
444  case 9:
445  coerceValue(value, myRigidWeights);
446  break;
447  case 10:
448  coerceValue(value, myLandmarkWeights);
449  break;
450  case 11:
451  coerceValue(value, myMaskMode);
452  break;
453  case 12:
454  coerceValue(value, myMaskTolerance);
455  break;
456  case 13:
457  coerceValue(value, myRigidprimitives);
458  break;
459  case 14:
460  coerceValue(value, myDistTolerance);
461  break;
462  case 15:
463  coerceValue(value, myNormTolerance);
464  break;
465  case 16:
466  coerceValue(value, mySolverType);
467  break;
468  case 17:
469  coerceValue(value, mySolverIterations);
470  break;
471  case 18:
472  coerceValue(value, myGradientTolerance);
473  break;
474  case 19:
475  coerceValue(value, myDebug_menu);
476  break;
477  case 20:
478  coerceValue(value, myDebug_coarse_lvl);
479  break;
480  case 21:
481  coerceValue(value, myDebug_coarse_iteration);
482  break;
483  case 22:
484  coerceValue(value, myDebug_dense_lvl);
485  break;
486  case 23:
487  coerceValue(value, myDebug_dense_iteration);
488  break;
489  case 24:
490  coerceValue(value, myDebug_hessian_scaling);
491  break;
492  case 25:
493  coerceValue(value, myDebug_use_marquadt);
494  break;
495  case 26:
496  coerceValue(value, myParameter_tolerance);
497  break;
498  case 27:
499  coerceValue(value, myUse_tau);
500  break;
501  case 28:
502  coerceValue(value, myTau);
503  break;
504  case 29:
505  coerceValue(value, myInitial_damping);
506  break;
507  case 30:
508  coerceValue(value, myDebug_save_meshes);
509  break;
510  case 31:
511  coerceValue(value, myUseLandmarkLables);
512  break;
513  case 32:
514  coerceValue(value, myLandmarkAttribute);
515  break;
516  case 33:
517  coerceValue(value, myEnableLandmarks);
518  break;
519  case 34:
520  if (idx.size() == 1)
521  coerceValue(value, myNumlandmarkgroups.entries());
522  else if (instance[0] < myNumlandmarkgroups.entries())
523  {
524  auto && _data = myNumlandmarkgroups(instance[0]);
525  switch (idx[1])
526  {
527  case 0:
528  coerceValue(value, _data.enablegroup);
529  break;
530  case 1:
531  coerceValue(value, _data.pballcolor);
532  break;
533  case 2:
534  coerceValue(value, _data.pname);
535  break;
536  case 3:
537  coerceValue(value, _data.usesourcepos);
538  break;
539  case 4:
540  coerceValue(value, _data.sourcepos);
541  break;
542  case 5:
543  coerceValue(value, _data.usetargetpos);
544  break;
545  case 6:
546  coerceValue(value, _data.targetpos);
547  break;
548  case 7:
549  coerceValue(value, _data.psourcegroup);
550  break;
551  case 8:
552  coerceValue(value, _data.ptargetgroup);
553  break;
554 
555  }
556  }
557  break;
558  case 35:
559  coerceValue(value, myRigidMask);
560  break;
561 
562  }
563  }
564 
565  bool isParmColorRamp(exint idx) const override
566  {
567  switch (idx)
568  {
569 
570  }
571  return false;
572  }
573 
574  void getNestParmValue(TempIndex idx, TempIndex instance, exint &value) const override
575  { doGetParmValue(idx, instance, value); }
576  void getNestParmValue(TempIndex idx, TempIndex instance, fpreal &value) const override
577  { doGetParmValue(idx, instance, value); }
578  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector2D &value) const override
579  { doGetParmValue(idx, instance, value); }
580  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector3D &value) const override
581  { doGetParmValue(idx, instance, value); }
582  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector4D &value) const override
583  { doGetParmValue(idx, instance, value); }
584  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix2D &value) const override
585  { doGetParmValue(idx, instance, value); }
586  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
587  { doGetParmValue(idx, instance, value); }
588  void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix4D &value) const override
589  { doGetParmValue(idx, instance, value); }
590  void getNestParmValue(TempIndex idx, TempIndex instance, UT_StringHolder &value) const override
591  { doGetParmValue(idx, instance, value); }
592  void getNestParmValue(TempIndex idx, TempIndex instance, UT_SharedPtr<UT_Ramp> &value) const override
593  { doGetParmValue(idx, instance, value); }
594  void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
595  { doGetParmValue(idx, instance, value); }
596 
597  template <typename T>
598  void
599  doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
600  {
601  if (idx.size() < 1)
602  return;
603  UT_ASSERT(idx.size() == instance.size()+1);
604  if (idx.size() != instance.size()+1)
605  return;
606  switch (idx[0])
607  {
608  case 0:
609  coerceValue(myEnableSolve, ( ( value ) ));
610  break;
611  case 1:
612  coerceValue(myEnableGeometryConstraints, ( ( value ) ));
613  break;
614  case 2:
615  coerceValue(myConstraintSelection, clampMinValue(0, clampMaxValue(1, value ) ));
616  break;
617  case 3:
618  coerceValue(myConstraintSource, ( ( value ) ));
619  break;
620  case 4:
621  coerceValue(myIterations, clampMinValue(1, ( value ) ));
622  break;
623  case 5:
624  coerceValue(myReducedLevels, clampMinValue(1, ( value ) ));
625  break;
626  case 6:
627  coerceValue(myReductionPercentage, clampMinValue(0.05, clampMaxValue(1, value ) ));
628  break;
629  case 7:
630  coerceValue(myReductionPercentageSingle, clampMinValue(0.05, clampMaxValue(1, value ) ));
631  break;
632  case 8:
633  coerceValue(myInitialReductionPercentage, clampMinValue(0.05, clampMaxValue(1, value ) ));
634  break;
635  case 9:
636  coerceValue(myRigidWeights, clampMinValue(0, ( value ) ));
637  break;
638  case 10:
639  coerceValue(myLandmarkWeights, clampMinValue(0, ( value ) ));
640  break;
641  case 11:
642  coerceValue(myMaskMode, clampMinValue(0, clampMaxValue(1, value ) ));
643  break;
644  case 12:
645  coerceValue(myMaskTolerance, clampMinValue(0.0, clampMaxValue(1, value ) ));
646  break;
647  case 13:
648  coerceValue(myRigidprimitives, ( ( value ) ));
649  break;
650  case 14:
651  coerceValue(myDistTolerance, clampMinValue(0.0001, ( value ) ));
652  break;
653  case 15:
654  coerceValue(myNormTolerance, clampMinValue(1, clampMaxValue(180, value ) ));
655  break;
656  case 16:
657  coerceValue(mySolverType, clampMinValue(0, clampMaxValue(1, value ) ));
658  break;
659  case 17:
660  coerceValue(mySolverIterations, clampMinValue(1, ( value ) ));
661  break;
662  case 18:
663  coerceValue(myGradientTolerance, clampMinValue(0.00001, clampMaxValue(1.0, value ) ));
664  break;
665  case 19:
666  coerceValue(myDebug_menu, clampMinValue(0, clampMaxValue(2, value ) ));
667  break;
668  case 20:
669  coerceValue(myDebug_coarse_lvl, ( ( value ) ));
670  break;
671  case 21:
672  coerceValue(myDebug_coarse_iteration, ( ( value ) ));
673  break;
674  case 22:
675  coerceValue(myDebug_dense_lvl, ( ( value ) ));
676  break;
677  case 23:
678  coerceValue(myDebug_dense_iteration, ( ( value ) ));
679  break;
680  case 24:
681  coerceValue(myDebug_hessian_scaling, ( ( value ) ));
682  break;
683  case 25:
684  coerceValue(myDebug_use_marquadt, ( ( value ) ));
685  break;
686  case 26:
687  coerceValue(myParameter_tolerance, ( ( value ) ));
688  break;
689  case 27:
690  coerceValue(myUse_tau, ( ( value ) ));
691  break;
692  case 28:
693  coerceValue(myTau, ( ( value ) ));
694  break;
695  case 29:
696  coerceValue(myInitial_damping, ( ( value ) ));
697  break;
698  case 30:
699  coerceValue(myDebug_save_meshes, ( ( value ) ));
700  break;
701  case 31:
702  coerceValue(myUseLandmarkLables, ( ( value ) ));
703  break;
704  case 32:
705  coerceValue(myLandmarkAttribute, ( ( value ) ));
706  break;
707  case 33:
708  coerceValue(myEnableLandmarks, ( ( value ) ));
709  break;
710  case 34:
711  if (idx.size() == 1)
712  {
713  exint newsize;
714  coerceValue(newsize, value);
715  if (newsize < 0) newsize = 0;
716  myNumlandmarkgroups.setSize(newsize);
717  }
718  else
719  {
720  if (instance[0] < 0)
721  return;
722  myNumlandmarkgroups.setSizeIfNeeded(instance[0]+1);
723  auto && _data = myNumlandmarkgroups(instance[0]);
724  switch (idx[1])
725  {
726  case 0:
727  coerceValue(_data.enablegroup, value);
728  break;
729  case 1:
730  coerceValue(_data.pballcolor, value);
731  break;
732  case 2:
733  coerceValue(_data.pname, value);
734  break;
735  case 3:
736  coerceValue(_data.usesourcepos, value);
737  break;
738  case 4:
739  coerceValue(_data.sourcepos, value);
740  break;
741  case 5:
742  coerceValue(_data.usetargetpos, value);
743  break;
744  case 6:
745  coerceValue(_data.targetpos, value);
746  break;
747  case 7:
748  coerceValue(_data.psourcegroup, value);
749  break;
750  case 8:
751  coerceValue(_data.ptargetgroup, value);
752  break;
753 
754  }
755  }
756  break;
757  case 35:
758  coerceValue(myRigidMask, ( ( value ) ));
759  break;
760 
761  }
762  }
763 
764  void setNestParmValue(TempIndex idx, TempIndex instance, const exint &value) override
765  { doSetParmValue(idx, instance, value); }
766  void setNestParmValue(TempIndex idx, TempIndex instance, const fpreal &value) override
767  { doSetParmValue(idx, instance, value); }
768  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector2D &value) override
769  { doSetParmValue(idx, instance, value); }
770  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector3D &value) override
771  { doSetParmValue(idx, instance, value); }
772  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector4D &value) override
773  { doSetParmValue(idx, instance, value); }
774  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix2D &value) override
775  { doSetParmValue(idx, instance, value); }
776  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix3D &value) override
777  { doSetParmValue(idx, instance, value); }
778  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix4D &value) override
779  { doSetParmValue(idx, instance, value); }
780  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_StringHolder &value) override
781  { doSetParmValue(idx, instance, value); }
782  void setNestParmValue(TempIndex idx, TempIndex instance, const UT_SharedPtr<UT_Ramp> &value) override
783  { doSetParmValue(idx, instance, value); }
784  void setNestParmValue(TempIndex idx, TempIndex instance, const PRM_DataItemHandle &value) override
785  { doSetParmValue(idx, instance, value); }
786 
787  exint getNestNumParms(TempIndex idx) const override
788  {
789  if (idx.size() == 0)
790  return 36;
791  switch (idx[0])
792  {
793  case 34:
794  return 9;
795 
796  }
797  // Invalid
798  return 0;
799  }
800 
801  const char *getNestParmName(TempIndex fieldnum) const override
802  {
803  if (fieldnum.size() < 1)
804  return 0;
805  switch (fieldnum[0])
806  {
807  case 0:
808  return "enablesolve";
809  case 1:
810  return "enablegeometryconstraints";
811  case 2:
812  return "constraintselection";
813  case 3:
814  return "constraintsource";
815  case 4:
816  return "iterations";
817  case 5:
818  return "reducedlevels";
819  case 6:
820  return "reductionpercentage";
821  case 7:
822  return "reductionpercentage_single";
823  case 8:
824  return "initialreductionpercentage";
825  case 9:
826  return "rigidweights";
827  case 10:
828  return "landmarkweights";
829  case 11:
830  return "maskmode";
831  case 12:
832  return "masktolerance";
833  case 13:
834  return "rigidprimitives";
835  case 14:
836  return "disttolerance";
837  case 15:
838  return "normtolerance";
839  case 16:
840  return "solvertype";
841  case 17:
842  return "solveriterations";
843  case 18:
844  return "gradienttolerance";
845  case 19:
846  return "debug_menu";
847  case 20:
848  return "debug_coarse_lvl";
849  case 21:
850  return "debug_coarse_iteration";
851  case 22:
852  return "debug_dense_lvl";
853  case 23:
854  return "debug_dense_iteration";
855  case 24:
856  return "debug_hessian_scaling";
857  case 25:
858  return "debug_use_marquadt";
859  case 26:
860  return "parameter_tolerance";
861  case 27:
862  return "use_tau";
863  case 28:
864  return "tau";
865  case 29:
866  return "initial_damping";
867  case 30:
868  return "debug_save_meshes";
869  case 31:
870  return "uselandmarklabels";
871  case 32:
872  return "landmarkattrib";
873  case 33:
874  return "enablelandmarks";
875  case 34:
876  if (fieldnum.size() == 1)
877  return "numlandmarkgroups";
878  switch (fieldnum[1])
879  {
880  case 0:
881  return "enablegroup#";
882  case 1:
883  return "pballcolor#";
884  case 2:
885  return "pname#";
886  case 3:
887  return "usesourcepos#";
888  case 4:
889  return "sourcepos#";
890  case 5:
891  return "usetargetpos#";
892  case 6:
893  return "targetpos#";
894  case 7:
895  return "psourcegroup#";
896  case 8:
897  return "ptargetgroup#";
898 
899  }
900  return 0;
901  case 35:
902  return "rigidmask";
903 
904  }
905  return 0;
906  }
907 
908  ParmType getNestParmType(TempIndex fieldnum) const override
909  {
910  if (fieldnum.size() < 1)
911  return PARM_UNSUPPORTED;
912  switch (fieldnum[0])
913  {
914  case 0:
915  return PARM_INTEGER;
916  case 1:
917  return PARM_INTEGER;
918  case 2:
919  return PARM_INTEGER;
920  case 3:
921  return PARM_STRING;
922  case 4:
923  return PARM_INTEGER;
924  case 5:
925  return PARM_INTEGER;
926  case 6:
927  return PARM_VECTOR2;
928  case 7:
929  return PARM_FLOAT;
930  case 8:
931  return PARM_FLOAT;
932  case 9:
933  return PARM_VECTOR2;
934  case 10:
935  return PARM_VECTOR2;
936  case 11:
937  return PARM_INTEGER;
938  case 12:
939  return PARM_FLOAT;
940  case 13:
941  return PARM_STRING;
942  case 14:
943  return PARM_FLOAT;
944  case 15:
945  return PARM_FLOAT;
946  case 16:
947  return PARM_INTEGER;
948  case 17:
949  return PARM_INTEGER;
950  case 18:
951  return PARM_VECTOR2;
952  case 19:
953  return PARM_INTEGER;
954  case 20:
955  return PARM_INTEGER;
956  case 21:
957  return PARM_INTEGER;
958  case 22:
959  return PARM_INTEGER;
960  case 23:
961  return PARM_INTEGER;
962  case 24:
963  return PARM_INTEGER;
964  case 25:
965  return PARM_INTEGER;
966  case 26:
967  return PARM_FLOAT;
968  case 27:
969  return PARM_INTEGER;
970  case 28:
971  return PARM_FLOAT;
972  case 29:
973  return PARM_FLOAT;
974  case 30:
975  return PARM_INTEGER;
976  case 31:
977  return PARM_INTEGER;
978  case 32:
979  return PARM_STRING;
980  case 33:
981  return PARM_INTEGER;
982  case 34:
983  if (fieldnum.size() == 1)
984  return PARM_MULTIPARM;
985  switch (fieldnum[1])
986  {
987  case 0:
988  return PARM_INTEGER;
989  case 1:
990  return PARM_VECTOR3;
991  case 2:
992  return PARM_STRING;
993  case 3:
994  return PARM_INTEGER;
995  case 4:
996  return PARM_STRING;
997  case 5:
998  return PARM_INTEGER;
999  case 6:
1000  return PARM_STRING;
1001  case 7:
1002  return PARM_STRING;
1003  case 8:
1004  return PARM_STRING;
1005 
1006  }
1007  return PARM_UNSUPPORTED;
1008  case 35:
1009  return PARM_STRING;
1010 
1011  }
1012  return PARM_UNSUPPORTED;
1013  }
1014 
1015  // Boiler plate to load individual types.
1016  static void loadData(UT_IStream &is, int64 &v)
1017  { is.bread(&v, 1); }
1018  static void loadData(UT_IStream &is, bool &v)
1019  { int64 iv; is.bread(&iv, 1); v = iv; }
1020  static void loadData(UT_IStream &is, fpreal64 &v)
1021  { is.bread<fpreal64>(&v, 1); }
1022  static void loadData(UT_IStream &is, UT_Vector2D &v)
1023  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1); }
1024  static void loadData(UT_IStream &is, UT_Vector3D &v)
1025  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
1026  is.bread<fpreal64>(&v.z(), 1); }
1027  static void loadData(UT_IStream &is, UT_Vector4D &v)
1028  { is.bread<fpreal64>(&v.x(), 1); is.bread<fpreal64>(&v.y(), 1);
1029  is.bread<fpreal64>(&v.z(), 1); is.bread<fpreal64>(&v.w(), 1); }
1030  static void loadData(UT_IStream &is, UT_Matrix2D &v)
1031  { for (int r = 0; r < 2; r++) for (int c = 0; c < 2; c++) is.bread<fpreal64>(&v(r, c), 1); }
1032  static void loadData(UT_IStream &is, UT_Matrix3D &v)
1033  { for (int r = 0; r < 3; r++) for (int c = 0; c < 3; c++) is.bread<fpreal64>(&v(r, c), 1); }
1034  static void loadData(UT_IStream &is, UT_Matrix4D &v)
1035  { for (int r = 0; r < 4; r++) for (int c = 0; c < 4; c++) is.bread<fpreal64>(&v(r, c), 1); }
1036  static void loadData(UT_IStream &is, UT_Vector2I &v)
1037  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1); }
1038  static void loadData(UT_IStream &is, UT_Vector3I &v)
1039  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
1040  is.bread<int64>(&v.z(), 1); }
1041  static void loadData(UT_IStream &is, UT_Vector4I &v)
1042  { is.bread<int64>(&v.x(), 1); is.bread<int64>(&v.y(), 1);
1043  is.bread<int64>(&v.z(), 1); is.bread<int64>(&v.w(), 1); }
1045  { is.bread(v); }
1047  { UT_StringHolder rampdata;
1048  loadData(is, rampdata);
1049  if (rampdata.isstring())
1050  {
1051  v.reset(new UT_Ramp());
1052  UT_IStream istr((const char *) rampdata, rampdata.length(), UT_ISTREAM_ASCII);
1053  v->load(istr);
1054  }
1055  else v.reset();
1056  }
1059  loadData(is, data);
1060  if (data.isstring())
1061  {
1062  // Find the data type.
1063  const char *colon = UT_StringWrap(data).findChar(':');
1064  if (colon)
1065  {
1066  int typelen = colon - data.buffer();
1068  type.strncpy(data.buffer(), typelen);
1069  UT_IStream istr(((const char *) data) + typelen + 1, data.length() - (typelen + 1), UT_ISTREAM_BINARY);
1070 
1071  v = PRM_DataFactory::parseBinary(type.buffer(), istr);
1072  }
1073  }
1074  else v.reset();
1075  }
1076 
1077  static void saveData(std::ostream &os, int64 v)
1078  { UTwrite(os, &v); }
1079  static void saveData(std::ostream &os, bool v)
1080  { int64 iv = v; UTwrite(os, &iv); }
1081  static void saveData(std::ostream &os, fpreal64 v)
1082  { UTwrite<fpreal64>(os, &v); }
1083  static void saveData(std::ostream &os, UT_Vector2D v)
1084  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y()); }
1085  static void saveData(std::ostream &os, UT_Vector3D v)
1086  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
1087  UTwrite<fpreal64>(os, &v.z()); }
1088  static void saveData(std::ostream &os, UT_Vector4D v)
1089  { UTwrite<fpreal64>(os, &v.x()); UTwrite<fpreal64>(os, &v.y());
1090  UTwrite<fpreal64>(os, &v.z()); UTwrite<fpreal64>(os, &v.w()); }
1091  static void saveData(std::ostream &os, UT_Matrix2D v)
1092  { for (int r = 0; r < 2; r++) for (int c = 0; c < 2; c++) UTwrite<fpreal64>(os, &v(r, c)); }
1093  static void saveData(std::ostream &os, UT_Matrix3D v)
1094  { for (int r = 0; r < 3; r++) for (int c = 0; c < 3; c++) UTwrite<fpreal64>(os, &v(r, c)); }
1095  static void saveData(std::ostream &os, UT_Matrix4D v)
1096  { for (int r = 0; r < 4; r++) for (int c = 0; c < 4; c++) UTwrite<fpreal64>(os, &v(r, c)); }
1097  static void saveData(std::ostream &os, UT_StringHolder s)
1098  { UT_StringWrap(s).saveBinary(os); }
1099  static void saveData(std::ostream &os, UT_SharedPtr<UT_Ramp> s)
1101  UT_OStringStream ostr;
1102  if (s) s->save(ostr);
1103  result = ostr.str();
1104  saveData(os, result);
1105  }
1106  static void saveData(std::ostream &os, PRM_DataItemHandle s)
1108  UT_OStringStream ostr;
1109  if (s)
1110  {
1111  ostr << s->getDataTypeToken();
1112  ostr << ":";
1113  s->saveBinary(ostr);
1114  }
1115  result = ostr.str();
1116  saveData(os, result);
1117  }
1118 
1119 
1120  void save(std::ostream &os) const
1121  {
1122  int32 v = version();
1123  UTwrite(os, &v);
1124  saveData(os, myEnableSolve);
1125  saveData(os, myEnableGeometryConstraints);
1126  saveData(os, myConstraintSelection);
1127  saveData(os, myConstraintSource);
1128  saveData(os, myIterations);
1129  saveData(os, myReducedLevels);
1130  saveData(os, myReductionPercentage);
1131  saveData(os, myReductionPercentageSingle);
1132  saveData(os, myInitialReductionPercentage);
1133  saveData(os, myRigidWeights);
1134  saveData(os, myLandmarkWeights);
1135  saveData(os, myMaskMode);
1136  saveData(os, myMaskTolerance);
1137  saveData(os, myRigidprimitives);
1138  saveData(os, myDistTolerance);
1139  saveData(os, myNormTolerance);
1140  saveData(os, mySolverType);
1141  saveData(os, mySolverIterations);
1142  saveData(os, myGradientTolerance);
1143  saveData(os, myDebug_menu);
1144  saveData(os, myDebug_coarse_lvl);
1145  saveData(os, myDebug_coarse_iteration);
1146  saveData(os, myDebug_dense_lvl);
1147  saveData(os, myDebug_dense_iteration);
1148  saveData(os, myDebug_hessian_scaling);
1149  saveData(os, myDebug_use_marquadt);
1150  saveData(os, myParameter_tolerance);
1151  saveData(os, myUse_tau);
1152  saveData(os, myTau);
1153  saveData(os, myInitial_damping);
1154  saveData(os, myDebug_save_meshes);
1155  saveData(os, myUseLandmarkLables);
1156  saveData(os, myLandmarkAttribute);
1157  saveData(os, myEnableLandmarks);
1158  {
1159  int64 length = myNumlandmarkgroups.entries();
1160  UTwrite(os, &length);
1161  for (exint i = 0; i < length; i++)
1162  {
1163  auto && _curentry = myNumlandmarkgroups(i);
1164  (void) _curentry;
1165  saveData(os, _curentry.enablegroup);
1166  saveData(os, _curentry.pballcolor);
1167  saveData(os, _curentry.pname);
1168  saveData(os, _curentry.usesourcepos);
1169  saveData(os, _curentry.sourcepos);
1170  saveData(os, _curentry.usetargetpos);
1171  saveData(os, _curentry.targetpos);
1172  saveData(os, _curentry.psourcegroup);
1173  saveData(os, _curentry.ptargetgroup);
1174 
1175  }
1176  }
1177  saveData(os, myRigidMask);
1178 
1179  }
1180 
1181  bool load(UT_IStream &is)
1182  {
1183  int32 v;
1184  is.bread(&v, 1);
1185  if (version() != v)
1186  {
1187  // Fail incompatible versions
1188  return false;
1189  }
1190  loadData(is, myEnableSolve);
1191  loadData(is, myEnableGeometryConstraints);
1192  loadData(is, myConstraintSelection);
1193  loadData(is, myConstraintSource);
1194  loadData(is, myIterations);
1195  loadData(is, myReducedLevels);
1196  loadData(is, myReductionPercentage);
1197  loadData(is, myReductionPercentageSingle);
1198  loadData(is, myInitialReductionPercentage);
1199  loadData(is, myRigidWeights);
1200  loadData(is, myLandmarkWeights);
1201  loadData(is, myMaskMode);
1202  loadData(is, myMaskTolerance);
1203  loadData(is, myRigidprimitives);
1204  loadData(is, myDistTolerance);
1205  loadData(is, myNormTolerance);
1206  loadData(is, mySolverType);
1207  loadData(is, mySolverIterations);
1208  loadData(is, myGradientTolerance);
1209  loadData(is, myDebug_menu);
1210  loadData(is, myDebug_coarse_lvl);
1211  loadData(is, myDebug_coarse_iteration);
1212  loadData(is, myDebug_dense_lvl);
1213  loadData(is, myDebug_dense_iteration);
1214  loadData(is, myDebug_hessian_scaling);
1215  loadData(is, myDebug_use_marquadt);
1216  loadData(is, myParameter_tolerance);
1217  loadData(is, myUse_tau);
1218  loadData(is, myTau);
1219  loadData(is, myInitial_damping);
1220  loadData(is, myDebug_save_meshes);
1221  loadData(is, myUseLandmarkLables);
1222  loadData(is, myLandmarkAttribute);
1223  loadData(is, myEnableLandmarks);
1224  {
1225  int64 length;
1226  is.read(&length, 1);
1227  myNumlandmarkgroups.setSize(length);
1228  for (exint i = 0; i < length; i++)
1229  {
1230  auto && _curentry = myNumlandmarkgroups(i);
1231  (void) _curentry;
1232  loadData(is, _curentry.enablegroup);
1233  loadData(is, _curentry.pballcolor);
1234  loadData(is, _curentry.pname);
1235  loadData(is, _curentry.usesourcepos);
1236  loadData(is, _curentry.sourcepos);
1237  loadData(is, _curentry.usetargetpos);
1238  loadData(is, _curentry.targetpos);
1239  loadData(is, _curentry.psourcegroup);
1240  loadData(is, _curentry.ptargetgroup);
1241 
1242  }
1243  }
1244  loadData(is, myRigidMask);
1245 
1246  return true;
1247  }
1248 
1249  bool getEnableSolve() const { return myEnableSolve; }
1250  void setEnableSolve(bool val) { myEnableSolve = val; }
1251  bool opEnableSolve(const SOP_NodeVerb::CookParms &cookparms) const
1252  {
1253  SOP_Node *thissop = cookparms.getNode();
1254  if (!thissop) return getEnableSolve();
1255  bool result;
1256  OP_Utils::evalOpParm(result, thissop, "enablesolve", cookparms.getCookTime(), 0);
1257  return result;
1258  }
1259  bool getEnableGeometryConstraints() const { return myEnableGeometryConstraints; }
1260  void setEnableGeometryConstraints(bool val) { myEnableGeometryConstraints = val; }
1262  {
1263  SOP_Node *thissop = cookparms.getNode();
1264  if (!thissop) return getEnableGeometryConstraints();
1265  bool result;
1266  OP_Utils::evalOpParm(result, thissop, "enablegeometryconstraints", cookparms.getCookTime(), 0);
1267  return result;
1268  }
1269  ConstraintSelection getConstraintSelection() const { return ConstraintSelection(myConstraintSelection); }
1270  void setConstraintSelection(ConstraintSelection val) { myConstraintSelection = int64(val); }
1272  {
1273  SOP_Node *thissop = cookparms.getNode();
1274  if (!thissop) return getConstraintSelection();
1275  int64 result;
1276  OP_Utils::evalOpParm(result, thissop, "constraintselection", cookparms.getCookTime(), 0);
1277  return ConstraintSelection(result);
1278  }
1279  const UT_StringHolder & getConstraintSource() const { return myConstraintSource; }
1280  void setConstraintSource(const UT_StringHolder & val) { myConstraintSource = val; }
1282  {
1283  SOP_Node *thissop = cookparms.getNode();
1284  if (!thissop) return getConstraintSource();
1286  OP_Utils::evalOpParm(result, thissop, "constraintsource", cookparms.getCookTime(), 0);
1287  return result;
1288  }
1289  int64 getIterations() const { return myIterations; }
1290  void setIterations(int64 val) { myIterations = val; }
1292  {
1293  SOP_Node *thissop = cookparms.getNode();
1294  if (!thissop) return getIterations();
1295  int64 result;
1296  OP_Utils::evalOpParm(result, thissop, "iterations", cookparms.getCookTime(), 0);
1297  return result;
1298  }
1299  int64 getReducedLevels() const { return myReducedLevels; }
1300  void setReducedLevels(int64 val) { myReducedLevels = val; }
1302  {
1303  SOP_Node *thissop = cookparms.getNode();
1304  if (!thissop) return getReducedLevels();
1305  int64 result;
1306  OP_Utils::evalOpParm(result, thissop, "reducedlevels", cookparms.getCookTime(), 0);
1307  return result;
1308  }
1309  UT_Vector2D getReductionPercentage() const { return myReductionPercentage; }
1310  void setReductionPercentage(UT_Vector2D val) { myReductionPercentage = val; }
1312  {
1313  SOP_Node *thissop = cookparms.getNode();
1314  if (!thissop) return getReductionPercentage();
1316  OP_Utils::evalOpParm(result, thissop, "reductionpercentage", cookparms.getCookTime(), 0);
1317  return result;
1318  }
1319  fpreal64 getReductionPercentageSingle() const { return myReductionPercentageSingle; }
1320  void setReductionPercentageSingle(fpreal64 val) { myReductionPercentageSingle = val; }
1322  {
1323  SOP_Node *thissop = cookparms.getNode();
1324  if (!thissop) return getReductionPercentageSingle();
1325  fpreal64 result;
1326  OP_Utils::evalOpParm(result, thissop, "reductionpercentage_single", cookparms.getCookTime(), 0);
1327  return result;
1328  }
1329  fpreal64 getInitialReductionPercentage() const { return myInitialReductionPercentage; }
1330  void setInitialReductionPercentage(fpreal64 val) { myInitialReductionPercentage = val; }
1332  {
1333  SOP_Node *thissop = cookparms.getNode();
1334  if (!thissop) return getInitialReductionPercentage();
1335  fpreal64 result;
1336  OP_Utils::evalOpParm(result, thissop, "initialreductionpercentage", cookparms.getCookTime(), 0);
1337  return result;
1338  }
1339  UT_Vector2D getRigidWeights() const { return myRigidWeights; }
1340  void setRigidWeights(UT_Vector2D val) { myRigidWeights = val; }
1342  {
1343  SOP_Node *thissop = cookparms.getNode();
1344  if (!thissop) return getRigidWeights();
1346  OP_Utils::evalOpParm(result, thissop, "rigidweights", cookparms.getCookTime(), 0);
1347  return result;
1348  }
1349  UT_Vector2D getLandmarkWeights() const { return myLandmarkWeights; }
1350  void setLandmarkWeights(UT_Vector2D val) { myLandmarkWeights = val; }
1352  {
1353  SOP_Node *thissop = cookparms.getNode();
1354  if (!thissop) return getLandmarkWeights();
1356  OP_Utils::evalOpParm(result, thissop, "landmarkweights", cookparms.getCookTime(), 0);
1357  return result;
1358  }
1359  MaskMode getMaskMode() const { return MaskMode(myMaskMode); }
1360  void setMaskMode(MaskMode val) { myMaskMode = int64(val); }
1362  {
1363  SOP_Node *thissop = cookparms.getNode();
1364  if (!thissop) return getMaskMode();
1365  int64 result;
1366  OP_Utils::evalOpParm(result, thissop, "maskmode", cookparms.getCookTime(), 0);
1367  return MaskMode(result);
1368  }
1369  fpreal64 getMaskTolerance() const { return myMaskTolerance; }
1370  void setMaskTolerance(fpreal64 val) { myMaskTolerance = val; }
1372  {
1373  SOP_Node *thissop = cookparms.getNode();
1374  if (!thissop) return getMaskTolerance();
1375  fpreal64 result;
1376  OP_Utils::evalOpParm(result, thissop, "masktolerance", cookparms.getCookTime(), 0);
1377  return result;
1378  }
1379  const UT_StringHolder & getRigidprimitives() const { return myRigidprimitives; }
1380  void setRigidprimitives(const UT_StringHolder & val) { myRigidprimitives = val; }
1382  {
1383  SOP_Node *thissop = cookparms.getNode();
1384  if (!thissop) return getRigidprimitives();
1386  OP_Utils::evalOpParm(result, thissop, "rigidprimitives", cookparms.getCookTime(), 0);
1387  return result;
1388  }
1389  fpreal64 getDistTolerance() const { return myDistTolerance; }
1390  void setDistTolerance(fpreal64 val) { myDistTolerance = val; }
1392  {
1393  SOP_Node *thissop = cookparms.getNode();
1394  if (!thissop) return getDistTolerance();
1395  fpreal64 result;
1396  OP_Utils::evalOpParm(result, thissop, "disttolerance", cookparms.getCookTime(), 0);
1397  return result;
1398  }
1399  fpreal64 getNormTolerance() const { return myNormTolerance; }
1400  void setNormTolerance(fpreal64 val) { myNormTolerance = val; }
1402  {
1403  SOP_Node *thissop = cookparms.getNode();
1404  if (!thissop) return getNormTolerance();
1405  fpreal64 result;
1406  OP_Utils::evalOpParm(result, thissop, "normtolerance", cookparms.getCookTime(), 0);
1407  return result;
1408  }
1409  SolverType getSolverType() const { return SolverType(mySolverType); }
1410  void setSolverType(SolverType val) { mySolverType = int64(val); }
1412  {
1413  SOP_Node *thissop = cookparms.getNode();
1414  if (!thissop) return getSolverType();
1415  int64 result;
1416  OP_Utils::evalOpParm(result, thissop, "solvertype", cookparms.getCookTime(), 0);
1417  return SolverType(result);
1418  }
1419  int64 getSolverIterations() const { return mySolverIterations; }
1420  void setSolverIterations(int64 val) { mySolverIterations = val; }
1422  {
1423  SOP_Node *thissop = cookparms.getNode();
1424  if (!thissop) return getSolverIterations();
1425  int64 result;
1426  OP_Utils::evalOpParm(result, thissop, "solveriterations", cookparms.getCookTime(), 0);
1427  return result;
1428  }
1429  UT_Vector2D getGradientTolerance() const { return myGradientTolerance; }
1430  void setGradientTolerance(UT_Vector2D val) { myGradientTolerance = val; }
1432  {
1433  SOP_Node *thissop = cookparms.getNode();
1434  if (!thissop) return getGradientTolerance();
1436  OP_Utils::evalOpParm(result, thissop, "gradienttolerance", cookparms.getCookTime(), 0);
1437  return result;
1438  }
1439  Debug_menu getDebug_menu() const { return Debug_menu(myDebug_menu); }
1440  void setDebug_menu(Debug_menu val) { myDebug_menu = int64(val); }
1442  {
1443  SOP_Node *thissop = cookparms.getNode();
1444  if (!thissop) return getDebug_menu();
1445  int64 result;
1446  OP_Utils::evalOpParm(result, thissop, "debug_menu", cookparms.getCookTime(), 0);
1447  return Debug_menu(result);
1448  }
1449  int64 getDebug_coarse_lvl() const { return myDebug_coarse_lvl; }
1450  void setDebug_coarse_lvl(int64 val) { myDebug_coarse_lvl = val; }
1452  {
1453  SOP_Node *thissop = cookparms.getNode();
1454  if (!thissop) return getDebug_coarse_lvl();
1455  int64 result;
1456  OP_Utils::evalOpParm(result, thissop, "debug_coarse_lvl", cookparms.getCookTime(), 0);
1457  return result;
1458  }
1459  int64 getDebug_coarse_iteration() const { return myDebug_coarse_iteration; }
1460  void setDebug_coarse_iteration(int64 val) { myDebug_coarse_iteration = val; }
1462  {
1463  SOP_Node *thissop = cookparms.getNode();
1464  if (!thissop) return getDebug_coarse_iteration();
1465  int64 result;
1466  OP_Utils::evalOpParm(result, thissop, "debug_coarse_iteration", cookparms.getCookTime(), 0);
1467  return result;
1468  }
1469  int64 getDebug_dense_lvl() const { return myDebug_dense_lvl; }
1470  void setDebug_dense_lvl(int64 val) { myDebug_dense_lvl = val; }
1472  {
1473  SOP_Node *thissop = cookparms.getNode();
1474  if (!thissop) return getDebug_dense_lvl();
1475  int64 result;
1476  OP_Utils::evalOpParm(result, thissop, "debug_dense_lvl", cookparms.getCookTime(), 0);
1477  return result;
1478  }
1479  int64 getDebug_dense_iteration() const { return myDebug_dense_iteration; }
1480  void setDebug_dense_iteration(int64 val) { myDebug_dense_iteration = val; }
1482  {
1483  SOP_Node *thissop = cookparms.getNode();
1484  if (!thissop) return getDebug_dense_iteration();
1485  int64 result;
1486  OP_Utils::evalOpParm(result, thissop, "debug_dense_iteration", cookparms.getCookTime(), 0);
1487  return result;
1488  }
1489  bool getDebug_hessian_scaling() const { return myDebug_hessian_scaling; }
1490  void setDebug_hessian_scaling(bool val) { myDebug_hessian_scaling = val; }
1492  {
1493  SOP_Node *thissop = cookparms.getNode();
1494  if (!thissop) return getDebug_hessian_scaling();
1495  bool result;
1496  OP_Utils::evalOpParm(result, thissop, "debug_hessian_scaling", cookparms.getCookTime(), 0);
1497  return result;
1498  }
1499  bool getDebug_use_marquadt() const { return myDebug_use_marquadt; }
1500  void setDebug_use_marquadt(bool val) { myDebug_use_marquadt = val; }
1501  bool opDebug_use_marquadt(const SOP_NodeVerb::CookParms &cookparms) const
1502  {
1503  SOP_Node *thissop = cookparms.getNode();
1504  if (!thissop) return getDebug_use_marquadt();
1505  bool result;
1506  OP_Utils::evalOpParm(result, thissop, "debug_use_marquadt", cookparms.getCookTime(), 0);
1507  return result;
1508  }
1509  fpreal64 getParameter_tolerance() const { return myParameter_tolerance; }
1510  void setParameter_tolerance(fpreal64 val) { myParameter_tolerance = val; }
1512  {
1513  SOP_Node *thissop = cookparms.getNode();
1514  if (!thissop) return getParameter_tolerance();
1515  fpreal64 result;
1516  OP_Utils::evalOpParm(result, thissop, "parameter_tolerance", cookparms.getCookTime(), 0);
1517  return result;
1518  }
1519  bool getUse_tau() const { return myUse_tau; }
1520  void setUse_tau(bool val) { myUse_tau = val; }
1521  bool opUse_tau(const SOP_NodeVerb::CookParms &cookparms) const
1522  {
1523  SOP_Node *thissop = cookparms.getNode();
1524  if (!thissop) return getUse_tau();
1525  bool result;
1526  OP_Utils::evalOpParm(result, thissop, "use_tau", cookparms.getCookTime(), 0);
1527  return result;
1528  }
1529  fpreal64 getTau() const { return myTau; }
1530  void setTau(fpreal64 val) { myTau = val; }
1531  fpreal64 opTau(const SOP_NodeVerb::CookParms &cookparms) const
1532  {
1533  SOP_Node *thissop = cookparms.getNode();
1534  if (!thissop) return getTau();
1535  fpreal64 result;
1536  OP_Utils::evalOpParm(result, thissop, "tau", cookparms.getCookTime(), 0);
1537  return result;
1538  }
1539  fpreal64 getInitial_damping() const { return myInitial_damping; }
1540  void setInitial_damping(fpreal64 val) { myInitial_damping = val; }
1542  {
1543  SOP_Node *thissop = cookparms.getNode();
1544  if (!thissop) return getInitial_damping();
1545  fpreal64 result;
1546  OP_Utils::evalOpParm(result, thissop, "initial_damping", cookparms.getCookTime(), 0);
1547  return result;
1548  }
1549  bool getDebug_save_meshes() const { return myDebug_save_meshes; }
1550  void setDebug_save_meshes(bool val) { myDebug_save_meshes = val; }
1551  bool opDebug_save_meshes(const SOP_NodeVerb::CookParms &cookparms) const
1552  {
1553  SOP_Node *thissop = cookparms.getNode();
1554  if (!thissop) return getDebug_save_meshes();
1555  bool result;
1556  OP_Utils::evalOpParm(result, thissop, "debug_save_meshes", cookparms.getCookTime(), 0);
1557  return result;
1558  }
1559  bool getUseLandmarkLables() const { return myUseLandmarkLables; }
1560  void setUseLandmarkLables(bool val) { myUseLandmarkLables = val; }
1561  bool opUseLandmarkLables(const SOP_NodeVerb::CookParms &cookparms) const
1562  {
1563  SOP_Node *thissop = cookparms.getNode();
1564  if (!thissop) return getUseLandmarkLables();
1565  bool result;
1566  OP_Utils::evalOpParm(result, thissop, "uselandmarklabels", cookparms.getCookTime(), 0);
1567  return result;
1568  }
1569  const UT_StringHolder & getLandmarkAttribute() const { return myLandmarkAttribute; }
1570  void setLandmarkAttribute(const UT_StringHolder & val) { myLandmarkAttribute = val; }
1572  {
1573  SOP_Node *thissop = cookparms.getNode();
1574  if (!thissop) return getLandmarkAttribute();
1576  OP_Utils::evalOpParm(result, thissop, "landmarkattrib", cookparms.getCookTime(), 0);
1577  return result;
1578  }
1579  bool getEnableLandmarks() const { return myEnableLandmarks; }
1580  void setEnableLandmarks(bool val) { myEnableLandmarks = val; }
1581  bool opEnableLandmarks(const SOP_NodeVerb::CookParms &cookparms) const
1582  {
1583  SOP_Node *thissop = cookparms.getNode();
1584  if (!thissop) return getEnableLandmarks();
1585  bool result;
1586  OP_Utils::evalOpParm(result, thissop, "enablelandmarks", cookparms.getCookTime(), 0);
1587  return result;
1588  }
1589  const UT_Array<Numlandmarkgroups> &getNumlandmarkgroups() const { return myNumlandmarkgroups; }
1590 void setNumlandmarkgroups(const UT_Array<Numlandmarkgroups> &val) { myNumlandmarkgroups = val; }
1592  {
1593  SOP_Node *thissop = cookparms.getNode();
1594  if (!thissop) return getNumlandmarkgroups().entries();
1595  exint result;
1596  OP_Utils::evalOpParm(result, thissop, "numlandmarkgroups", cookparms.getCookTime(), 0);
1597  return result;
1598  }
1599  bool opNumlandmarkgroups_enablegroup(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
1600  { return opinstNumlandmarkgroups_enablegroup(cookparms, &_idx); }
1601  bool opinstNumlandmarkgroups_enablegroup(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1602  {
1603  SOP_Node *thissop = cookparms.getNode();
1604  if (!thissop) return (myNumlandmarkgroups(_idx[0]).enablegroup);
1605  int _parmidx[2-1];
1606  _parmidx[1-1] = _idx[1-1] + 1;
1607 
1608  bool result;
1609  OP_Utils::evalOpParmInst(result, thissop, "enablegroup#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1610  return (result);
1611  }
1613  { return opinstNumlandmarkgroups_pballcolor(cookparms, &_idx); }
1615  {
1616  SOP_Node *thissop = cookparms.getNode();
1617  if (!thissop) return (myNumlandmarkgroups(_idx[0]).pballcolor);
1618  int _parmidx[2-1];
1619  _parmidx[1-1] = _idx[1-1] + 1;
1620 
1622  OP_Utils::evalOpParmInst(result, thissop, "pballcolor#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1623  return (result);
1624  }
1626  { return opinstNumlandmarkgroups_pname(cookparms, &_idx); }
1628  {
1629  SOP_Node *thissop = cookparms.getNode();
1630  if (!thissop) return (myNumlandmarkgroups(_idx[0]).pname);
1631  int _parmidx[2-1];
1632  _parmidx[1-1] = _idx[1-1] + 1;
1633 
1635  OP_Utils::evalOpParmInst(result, thissop, "pname#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1636  return (result);
1637  }
1638  bool opNumlandmarkgroups_usesourcepos(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
1639  { return opinstNumlandmarkgroups_usesourcepos(cookparms, &_idx); }
1640  bool opinstNumlandmarkgroups_usesourcepos(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1641  {
1642  SOP_Node *thissop = cookparms.getNode();
1643  if (!thissop) return (myNumlandmarkgroups(_idx[0]).usesourcepos);
1644  int _parmidx[2-1];
1645  _parmidx[1-1] = _idx[1-1] + 1;
1646 
1647  bool result;
1648  OP_Utils::evalOpParmInst(result, thissop, "usesourcepos#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1649  return (result);
1650  }
1652  { return opinstNumlandmarkgroups_sourcepos(cookparms, &_idx); }
1654  {
1655  SOP_Node *thissop = cookparms.getNode();
1656  if (!thissop) return (myNumlandmarkgroups(_idx[0]).sourcepos);
1657  int _parmidx[2-1];
1658  _parmidx[1-1] = _idx[1-1] + 1;
1659 
1661  OP_Utils::evalOpParmInst(result, thissop, "sourcepos#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1662  return (result);
1663  }
1664  bool opNumlandmarkgroups_usetargetpos(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
1665  { return opinstNumlandmarkgroups_usetargetpos(cookparms, &_idx); }
1666  bool opinstNumlandmarkgroups_usetargetpos(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
1667  {
1668  SOP_Node *thissop = cookparms.getNode();
1669  if (!thissop) return (myNumlandmarkgroups(_idx[0]).usetargetpos);
1670  int _parmidx[2-1];
1671  _parmidx[1-1] = _idx[1-1] + 1;
1672 
1673  bool result;
1674  OP_Utils::evalOpParmInst(result, thissop, "usetargetpos#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1675  return (result);
1676  }
1678  { return opinstNumlandmarkgroups_targetpos(cookparms, &_idx); }
1680  {
1681  SOP_Node *thissop = cookparms.getNode();
1682  if (!thissop) return (myNumlandmarkgroups(_idx[0]).targetpos);
1683  int _parmidx[2-1];
1684  _parmidx[1-1] = _idx[1-1] + 1;
1685 
1687  OP_Utils::evalOpParmInst(result, thissop, "targetpos#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1688  return (result);
1689  }
1691  { return opinstNumlandmarkgroups_psourcegroup(cookparms, &_idx); }
1693  {
1694  SOP_Node *thissop = cookparms.getNode();
1695  if (!thissop) return (myNumlandmarkgroups(_idx[0]).psourcegroup);
1696  int _parmidx[2-1];
1697  _parmidx[1-1] = _idx[1-1] + 1;
1698 
1700  OP_Utils::evalOpParmInst(result, thissop, "psourcegroup#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1701  return (result);
1702  }
1704  { return opinstNumlandmarkgroups_ptargetgroup(cookparms, &_idx); }
1706  {
1707  SOP_Node *thissop = cookparms.getNode();
1708  if (!thissop) return (myNumlandmarkgroups(_idx[0]).ptargetgroup);
1709  int _parmidx[2-1];
1710  _parmidx[1-1] = _idx[1-1] + 1;
1711 
1713  OP_Utils::evalOpParmInst(result, thissop, "ptargetgroup#", _parmidx, cookparms.getCookTime(), 0, 2-1);
1714  return (result);
1715  }
1716 
1717  const UT_StringHolder & getRigidMask() const { return myRigidMask; }
1718  void setRigidMask(const UT_StringHolder & val) { myRigidMask = val; }
1720  {
1721  SOP_Node *thissop = cookparms.getNode();
1722  if (!thissop) return getRigidMask();
1724  OP_Utils::evalOpParm(result, thissop, "rigidmask", cookparms.getCookTime(), 0);
1725  return result;
1726  }
1727 
1728 private:
1729  bool myEnableSolve;
1730  bool myEnableGeometryConstraints;
1731  int64 myConstraintSelection;
1732  UT_StringHolder myConstraintSource;
1733  int64 myIterations;
1734  int64 myReducedLevels;
1735  UT_Vector2D myReductionPercentage;
1736  fpreal64 myReductionPercentageSingle;
1737  fpreal64 myInitialReductionPercentage;
1738  UT_Vector2D myRigidWeights;
1739  UT_Vector2D myLandmarkWeights;
1740  int64 myMaskMode;
1741  fpreal64 myMaskTolerance;
1742  UT_StringHolder myRigidprimitives;
1743  fpreal64 myDistTolerance;
1744  fpreal64 myNormTolerance;
1745  int64 mySolverType;
1746  int64 mySolverIterations;
1747  UT_Vector2D myGradientTolerance;
1748  int64 myDebug_menu;
1749  int64 myDebug_coarse_lvl;
1750  int64 myDebug_coarse_iteration;
1751  int64 myDebug_dense_lvl;
1752  int64 myDebug_dense_iteration;
1753  bool myDebug_hessian_scaling;
1754  bool myDebug_use_marquadt;
1755  fpreal64 myParameter_tolerance;
1756  bool myUse_tau;
1757  fpreal64 myTau;
1758  fpreal64 myInitial_damping;
1759  bool myDebug_save_meshes;
1760  bool myUseLandmarkLables;
1761  UT_StringHolder myLandmarkAttribute;
1762  bool myEnableLandmarks;
1763  UT_Array<Numlandmarkgroups> myNumlandmarkgroups;
1764  UT_StringHolder myRigidMask;
1765 
1766 };
void setDistTolerance(fpreal64 val)
bool opNumlandmarkgroups_usetargetpos(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
static void saveData(std::ostream &os, bool v)
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glcorearb.h:2540
static void loadData(UT_IStream &is, UT_Matrix4D &v)
void setLandmarkAttribute(const UT_StringHolder &val)
static void saveData(std::ostream &os, int64 v)
const char * getNestParmName(TempIndex fieldnum) const override
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_StringHolder &value) override
static void loadData(UT_IStream &is, UT_Vector3D &v)
int int32
Definition: SYS_Types.h:39
SOP_Node * getNode() const
Definition: SOP_NodeVerb.h:347
static void loadData(UT_IStream &is, UT_Vector2D &v)
void setMaskMode(MaskMode val)
MaskMode opMaskMode(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opNumlandmarkgroups_ptargetgroup(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
UT_StringHolder opinstNumlandmarkgroups_targetpos(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
T clampMaxValue(fpreal maxvalue, const T &src) const
Definition: OP_NodeParms.h:315
bool isParmColorRamp(exint idx) const override
fpreal64 opMaskTolerance(const SOP_NodeVerb::CookParms &cookparms) const
UT_Vector2D getRigidWeights() const
const UT_StringHolder & getRigidMask() const
static void saveData(std::ostream &os, UT_SharedPtr< UT_Ramp > s)
void
Definition: png.h:1083
exint bread(int32 *buffer, exint asize=1)
GLboolean * data
Definition: glcorearb.h:131
SolverType getSolverType() const
GT_API const UT_StringHolder time
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector4.h:493
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector3D &value) override
const GLdouble * v
Definition: glcorearb.h:837
fpreal getTime() const
Definition: OP_Context.h:62
UT_Vector2T< fpreal64 > UT_Vector2D
fpreal64 getParameter_tolerance() const
void setNestParmValue(TempIndex idx, TempIndex instance, const fpreal &value) override
void loadFromOpSubclass(const LoadParms &loadparms) override
void setDebug_dense_iteration(int64 val)
bool opinstNumlandmarkgroups_enablegroup(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector4D &value) override
UT_String makeQuotedString(char delimiter='\'', bool escape_nonprinting=false) const
const OP_Context & context() const
Definition: OP_NodeParms.h:97
UT_StringHolder opNumlandmarkgroups_psourcegroup(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
constexpr SYS_FORCE_INLINE T & z() noexcept
Definition: UT_Vector3.h:667
bool operator!=(const SOP_TopoTransferParms &src) const
int64 exint
Definition: SYS_Types.h:125
SYS_FORCE_INLINE const char * buffer() const
GLdouble s
Definition: glad.h:3009
fpreal64 opNormTolerance(const SOP_NodeVerb::CookParms &cookparms) const
GLuint GLsizei GLsizei * length
Definition: glcorearb.h:795
UT_Vector2D getLandmarkWeights() const
bool opinstNumlandmarkgroups_usesourcepos(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
An output stream object that owns its own string buffer storage.
void getNestParmValue(TempIndex idx, TempIndex instance, exint &value) const override
static void loadData(UT_IStream &is, PRM_DataItemHandle &v)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_SharedPtr< UT_Ramp > &value) const override
bool opDebug_hessian_scaling(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 getInitialReductionPercentage() const
**But if you need a result
Definition: thread.h:613
void setSolverType(SolverType val)
int64 opIterations(const SOP_NodeVerb::CookParms &cookparms) const
T clampMinValue(fpreal minvalue, const T &src) const
Definition: OP_NodeParms.h:308
exint nodeIdx() const
Definition: OP_NodeParms.h:95
static PRM_DataItemHandle parseBinary(const char *type, UT_IStream &is)
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
const UT_WorkBuffer & str()
Returns a read-only reference to the underlying UT_WorkBuffer.
static void saveData(std::ostream &os, UT_Vector4D v)
fpreal64 opInitial_damping(const SOP_NodeVerb::CookParms &cookparms) const
void setNestParmValue(TempIndex idx, TempIndex instance, const PRM_DataItemHandle &value) override
UT_StringHolder opRigidprimitives(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opLandmarkAttribute(const SOP_NodeVerb::CookParms &cookparms) const
void setConstraintSource(const UT_StringHolder &val)
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix4D &value) override
static void saveData(std::ostream &os, UT_StringHolder s)
virtual NodeIdx getInput(NodeIdx idx, int input, bool markused=false) const =0
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector4.h:491
Debug_menu opDebug_menu(const SOP_NodeVerb::CookParms &cookparms) const
fpreal64 getReductionPercentageSingle() const
UT_StringHolder opNumlandmarkgroups_sourcepos(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
bool opNumlandmarkgroups_enablegroup(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
GLuint GLsizei const GLuint const GLintptr * offsets
Definition: glcorearb.h:2621
UT_StringHolder opConstraintSource(const SOP_NodeVerb::CookParms &cookparms) const
bool operator==(const SOP_TopoTransferParms &src) const
double fpreal64
Definition: SYS_Types.h:201
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector2.h:423
bool opDebug_save_meshes(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, UT_Matrix2D &v)
const UT_StringHolder & getRigidprimitives() const
bool operator==(const BaseDimensions< T > &a, const BaseDimensions< Y > &b)
Definition: Dimensions.h:137
fpreal64 opDistTolerance(const SOP_NodeVerb::CookParms &cookparms) const
void setRigidMask(const UT_StringHolder &val)
void setReductionPercentage(UT_Vector2D val)
bool opDebug_use_marquadt(const SOP_NodeVerb::CookParms &cookparms) const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_StringHolder &value) const override
ParmType getNestParmType(TempIndex fieldnum) const override
static void loadData(UT_IStream &is, UT_StringHolder &v)
static void loadData(UT_IStream &is, UT_Vector4D &v)
UT_Vector2D getReductionPercentage() const
UT_Vector3D opinstNumlandmarkgroups_pballcolor(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
exint length() const
fpreal64 opParameter_tolerance(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getConstraintSource() const
SYS_FORCE_INLINE const char * buffer() const
std::shared_ptr< T > UT_SharedPtr
Wrapper around std::shared_ptr.
Definition: UT_SharedPtr.h:36
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector4D &value) const override
fpreal64 getNormTolerance() const
void doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
constexpr SYS_FORCE_INLINE T & z() noexcept
Definition: UT_Vector4.h:495
int64 opDebug_dense_iteration(const SOP_NodeVerb::CookParms &cookparms) const
exint read(bool *array, exint sz=1)
Definition: UT_IStream.h:276
const OP_GraphProxy * graph() const
Definition: OP_NodeParms.h:94
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector2D &value) const override
bool opNumlandmarkgroups_usesourcepos(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
UT_Vector2D opRigidWeights(const SOP_NodeVerb::CookParms &cookparms) const
UT_Vector2D opGradientTolerance(const SOP_NodeVerb::CookParms &cookparms) const
void doGetParmValue(TempIndex idx, TempIndex instance, T &value) const
int64 opDebug_dense_lvl(const SOP_NodeVerb::CookParms &cookparms) const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix4D &value) const override
bool opinstNumlandmarkgroups_usetargetpos(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
Debug_menu getDebug_menu() const
fpreal64 getInitial_damping() 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
fpreal64 opReductionPercentageSingle(const SOP_NodeVerb::CookParms &cookparms) const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix3D &value) override
fpreal64 getMaskTolerance() const
int64 opSolverIterations(const SOP_NodeVerb::CookParms &cookparms) const
UT_Vector3T< fpreal64 > UT_Vector3D
static void loadData(UT_IStream &is, UT_Vector2I &v)
const UT_Array< Numlandmarkgroups > & getNumlandmarkgroups() const
int64 opDebug_coarse_iteration(const SOP_NodeVerb::CookParms &cookparms) const
int64 opDebug_coarse_lvl(const SOP_NodeVerb::CookParms &cookparms) const
static void saveData(std::ostream &os, UT_Matrix4D v)
bool operator!=(const Numlandmarkgroups &src) const
UT_StringHolder createString(const UT_Array< Numlandmarkgroups > &list) const
void setConstraintSelection(ConstraintSelection val)
SolverType opSolverType(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opRigidMask(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opinstNumlandmarkgroups_sourcepos(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix2D &value) const override
void setLandmarkWeights(UT_Vector2D val)
ConstraintSelection getConstraintSelection() const
virtual void evalOpParm(int64 &v, NodeIdx node, const char *parmname, fpreal time, DEP_MicroNode *depnode) const =0
bool opEnableSolve(const SOP_NodeVerb::CookParms &cookparms) const
GLenum pname
Definition: glcorearb.h:104
void setNestParmValue(TempIndex idx, TempIndex instance, const exint &value) override
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 getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
static void loadData(UT_IStream &is, bool &v)
GT_API const UT_StringHolder version
static void loadData(UT_IStream &is, UT_Vector3I &v)
void save(std::ostream &os) const
ConstraintSelection opConstraintSelection(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, fpreal64 &v)
exint entries() const
Alias of size(). size() is preferred.
Definition: UT_Array.h:648
UT_Vector2D getGradientTolerance() const
void setInitial_damping(fpreal64 val)
static void loadData(UT_IStream &is, UT_Vector4I &v)
UT_Vector3D opNumlandmarkgroups_pballcolor(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
UT_Vector2D opLandmarkWeights(const SOP_NodeVerb::CookParms &cookparms) const
void setReductionPercentageSingle(fpreal64 val)
int int appendSprintf(const char *fmt,...) SYS_PRINTF_CHECK_ATTRIBUTE(2
void coerceValue(T &result, const S &src) const
Definition: OP_NodeParms.h:301
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector2D &value) override
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix2D &value) override
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_SharedPtr< UT_Ramp > &value) override
fpreal64 opInitialReductionPercentage(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, int64 &v)
static void saveData(std::ostream &os, PRM_DataItemHandle s)
fpreal64 fpreal
Definition: SYS_Types.h:277
DEP_MicroNode * depnode() const
Definition: OP_NodeParms.h:99
void getNestParmValue(TempIndex idx, TempIndex instance, fpreal &value) const override
void setDebug_coarse_iteration(int64 val)
Utility class for containing a color ramp.
Definition: UT_Ramp.h:88
UT_StringHolder opinstNumlandmarkgroups_psourcegroup(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
void setNormTolerance(fpreal64 val)
exint getNestNumParms(TempIndex idx) const override
constexpr SYS_FORCE_INLINE T & w() noexcept
Definition: UT_Vector4.h:497
SYS_FORCE_INLINE void append(char character)
static void loadData(UT_IStream &is, UT_Matrix3D &v)
bool opEnableLandmarks(const SOP_NodeVerb::CookParms &cookparms) const
GLuint GLfloat * val
Definition: glcorearb.h:1608
#define SOP_API
Definition: SOP_API.h:10
bool getEnableGeometryConstraints() const
void setGradientTolerance(UT_Vector2D val)
int64 getDebug_dense_iteration() const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector3D &value) const override
fpreal getCookTime() const
Definition: SOP_NodeVerb.h:361
static void saveData(std::ostream &os, UT_Matrix3D v)
void setParameter_tolerance(fpreal64 val)
UT_Vector2D opReductionPercentage(const SOP_NodeVerb::CookParms &cookparms) const
void setEnableGeometryConstraints(bool val)
bool operator==(const Numlandmarkgroups &src) const
const char * findChar(int c) const
Definition: UT_String.h:1385
#define UT_ASSERT(ZZ)
Definition: UT_Assert.h:156
Definition: core.h:1131
exint opNumlandmarkgroups(const SOP_NodeVerb::CookParms &cookparms) const
GLboolean r
Definition: glcorearb.h:1222
bool opEnableGeometryConstraints(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getLandmarkAttribute() const
void setInitialReductionPercentage(fpreal64 val)
bool opUseLandmarkLables(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, UT_SharedPtr< UT_Ramp > &v)
static void saveData(std::ostream &os, UT_Vector2D v)
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector3.h:665
void setMaskTolerance(fpreal64 val)
type
Definition: core.h:1059
void setRigidprimitives(const UT_StringHolder &val)
fpreal64 opTau(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opNumlandmarkgroups_targetpos(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
void setDebug_menu(Debug_menu val)
UT_StringHolder opinstNumlandmarkgroups_pname(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
static void saveData(std::ostream &os, UT_Matrix2D v)
int64 opReducedLevels(const SOP_NodeVerb::CookParms &cookparms) const
void copyFrom(const OP_NodeParms *src) override
void buildFromOp(const OP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
bool opUse_tau(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opNumlandmarkgroups_pname(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
UT_SharedPtr< const PRM_DataItem > PRM_DataItemHandle
Definition: PRM_Parm.h:89
constexpr SYS_FORCE_INLINE T & y() noexcept
Definition: UT_Vector2.h:425
void setNumlandmarkgroups(const UT_Array< Numlandmarkgroups > &val)
SYS_FORCE_INLINE bool isstring() const
OP_NodeParms & operator=(const OP_NodeParms &)=default
static void saveData(std::ostream &os, UT_Vector3D v)
void setDebug_hessian_scaling(bool val)
SYS_FORCE_INLINE void strncpy(const char *src, exint maxlen)
UT_StringHolder opinstNumlandmarkgroups_ptargetgroup(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
fpreal64 getDistTolerance() const
static void saveData(std::ostream &os, fpreal64 v)
GLenum src
Definition: glcorearb.h:1793
constexpr SYS_FORCE_INLINE T & x() noexcept
Definition: UT_Vector3.h:663
int64 getDebug_coarse_iteration() const
void setRigidWeights(UT_Vector2D val)