protected override void SolveInstance(IGH_DataAccess DA) { Grid3f_goo goo = null; List <Curve> crvs = new List <Curve>(); DA.GetData(0, ref goo); DA.GetDataList(1, crvs); DenseGridTrilinearImplicit grid = new DenseGridTrilinearImplicit(new DenseGrid3f(goo.Value.Grid), new g3.Vector3f(goo.Value.GridOrigin), goo.Value.CellSize); var pts = grid.ToRhinoPts(); int numCurves = crvs.Count; Parallel.For(0, pts.Length, i => { var pt = pts[i]; double[] distances = new double[numCurves]; for (int j = 0; j < crvs.Count; j++) { double param = 0; var crv = crvs[j]; bool res = crv.ClosestPoint(pt, out param); double tempDouble = crv.PointAt(param).DistanceTo(pt); distances[j] = tempDouble; } grid.Grid.Buffer[i] = (float)distances.Min(); }); DA.SetData(0, grid); }
protected override void SolveInstance(IGH_DataAccess DA) { this.Message = modes.ToString() + " : " + steps.ToString() + " Steps"; Grid3f_goo goo = null; double val = 0; double exp = 0; DA.GetData(0, ref goo); DA.GetData(1, ref val); DA.GetData(2, ref exp); var iso = goo.Value; g3.MarchingCubes c = new g3.MarchingCubes(); c.Implicit = iso; c.Bounds = iso.Bounds(); c.RootMode = modes; c.RootModeSteps = steps; c.CubeSize = iso.CellSize; c.Bounds.Expand(3 * c.CubeSize); c.IsoValue = val; c.Generate(); DMesh3 outputMesh = c.Mesh; bool isValid = outputMesh.CheckValidity(); if (!isValid) { this.AddRuntimeMessage(GH_RuntimeMessageLevel.Warning, "Mesh seems to be corrupted. Please check..."); } DA.SetData(0, outputMesh); }
protected override void SolveInstance(IGH_DataAccess DA) { Grid3f_goo goo = null; DA.GetData(0, ref goo); DA.SetDataList(0, goo.Value.ToRhinoPts()); DA.SetDataList(1, goo.Value.Grid.Buffer); DA.SetData(2, goo.Value.Grid.ni); DA.SetData(3, goo.Value.Grid.nj); DA.SetData(4, goo.Value.Grid.nk); }
protected override void SolveInstance(IGH_DataAccess DA) { Grid3f_goo grid = null; List <double> vals = new List <double>(); DA.GetData <Grid3f_goo>(0, ref grid); DA.GetDataList <double>(1, vals); if (vals.Count != (grid.Value.Grid.ni * grid.Value.Grid.nj * grid.Value.Grid.nk)) { this.AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "List of values doesn't match number of points"); return; } grid.Value.Grid.Buffer = vals.Select(v => Convert.ToSingle(v)).ToArray(); DA.SetData(0, grid); }
protected override void SolveInstance(IGH_DataAccess DA) { int num_cells = 128; DMesh3_goo dMsh_goo = null; DA.GetData(0, ref dMsh_goo); DA.GetData(1, ref num_cells); DMesh3 dMsh_copy = new DMesh3(dMsh_goo.Value); double cell_size = dMsh_copy.CachedBounds.MaxDim / num_cells; MeshSignedDistanceGrid sdf = new MeshSignedDistanceGrid(dMsh_copy, cell_size); sdf.Compute(); var iso = new DenseGridTrilinearImplicit(sdf.Grid, sdf.GridOrigin, sdf.CellSize); Grid3f_goo goo = iso; DA.SetData(0, goo); }