Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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);
        }
Exemple #5
0
        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);
        }