/// <summary> /// /// </summary> /// <param name="DA"></param> private void InitializeSolver(IGH_DataAccess DA, DynamicRemesher.Settings settings) { GH_HeMesh3d source = null; if (!DA.GetData(0, ref source)) { return; } IGH_Goo targetGoo = null; if (!DA.GetData(1, ref targetGoo)) { return; } var featsGoo = new List <GH_ObjectWrapper>(); DA.GetDataList(2, featsGoo); var target = CreateSurfaceFeature(targetGoo); var features = featsGoo.Select(obj => (IFeature)obj.Value).Concat(CreateBoundaryFeatures(source)); _solver = DynamicRemesher.Solver.Create(source.Value, target, features, settings); }
/// <inheritdoc /> protected override void SolveInstance(IGH_DataAccess DA) { int state = 0; if (!DA.GetData(6, ref state)) { return; } // reset if (state == 0) { _solver = null; return; } GH_ObjectWrapper settingsGoo = null; if (!DA.GetData(4, ref settingsGoo)) { return; } if (_solver == null) { InitializeSolver(DA, (DynamicRemesher.Settings)settingsGoo.Value); } else { _solver.Settings = (DynamicRemesher.Settings)settingsGoo.Value; } // update length field GH_ObjectWrapper fieldGoo = null; if (DA.GetData(3, ref fieldGoo)) { _solver.LengthField = (IField3d <double>)fieldGoo.Value; } else { _solver.LengthField = null; } int subSteps = 0; DA.GetData(5, ref subSteps); // step for (int i = 0; i < subSteps; i++) { _solver.Step(); } _print.AppendLine($"{_solver.StepCount} steps"); // output DA.SetData(0, new GH_String(_print.ToString())); DA.SetData(1, new GH_HeMesh3d(HeMesh3d.Factory.CreateCopy(_solver.Mesh, _setV, null, null))); // recall if (state == 1) { ExpireSolution(true); } _print.Clear(); }
/// <summary> /// This is the method that actually does the work. /// </summary> /// <param name="DA">The DA object can be used to retrieve data from input parameters and /// to store data in output parameters.</param> protected override void SolveInstance(IGH_DataAccess DA) { int state = 0; if (!DA.GetData(6, ref state)) { return; } // reset if (state == 0) { _solver = null; return; } // initialize if (_solver == null) { GH_HeMesh3d source = null; if (!DA.GetData(0, ref source)) { return; } GH_Mesh target = null; if (!DA.GetData(1, ref target)) { return; } var feats = new List <GH_ObjectWrapper>(); DA.GetDataList(2, feats); _solver = DynamicRemesher.Solver.Create( source.Value.Duplicate(), new MeshFeature(target.Value), feats.Select(f => (IFeature)f.Value) ); } // update dynamic parameters GH_ObjectWrapper goo = null; // update fields if (DA.GetData(3, ref goo)) { _solver.LengthField = (IField3d <double>)goo.Value; } else { _solver.LengthField = null; } // update settings if (!DA.GetData(4, ref goo)) { return; } _solver.Settings = (DynamicRemesher.Settings)goo.Value; int subSteps = 0; DA.GetData(5, ref subSteps); // step for (int i = 0; i < subSteps; i++) { _solver.Step(); } _print.AppendLine($"{_solver.StepCount} steps"); // output DA.SetData(0, new GH_String(_print.ToString())); DA.SetData(1, new GH_HeMesh3d(HeMesh3d.Factory.CreateCopy(_solver.Mesh, _setV, delegate { }, delegate { }))); // recall if (state == 1) { ExpireSolution(true); } _print.Clear(); }