예제 #1
0
        private static List <RefinementRegion> GetRefinementRegions(List <IGH_GeometricGoo> meshes, double cellSize)
        {
            var refinementRegions = new List <RefinementRegion>();

            foreach (var mesh in meshes)
            {
                var regionName        = Geometry.getUserString(mesh, "ComputeName");
                var refinementDetails = Geometry.getUserString(mesh, "ComputeRefinementRegion");
                if (regionName == null || refinementDetails == null)
                {
                    continue;
                }

                var detail = new RefinementDetails().FromJson(refinementDetails);
                detail.CellSize = cellSize;
                refinementRegions.Add(
                    new RefinementRegion
                {
                    Name    = regionName,
                    Details = detail
                }
                    );
            }

            return(refinementRegions);
        }
        private static GH_Mesh CreateRefinementMesh(Point3d centerPoint, double radius, int index, List <double> heights, int?meshLevel, List <double> resolutions)
        {
            var height = index < heights.Count ? heights[index] : heights.Last();
            var mesh   = CreateMesh(centerPoint, radius, height);

            if (meshLevel != null)
            {
                meshLevel = meshLevel - index <= 1 ? 1 : meshLevel - index;

                var refinementRegion = new RefinementDetails
                {
                    Mode   = "inside",
                    Levels = $"(( {meshLevel} {meshLevel} ))"
                };
                Geometry.setUserString(
                    mesh,
                    "ComputeRefinementRegion",
                    refinementRegion.ToJson()
                    );
            }
            else
            {
                var resolution       = index < resolutions.Count ? resolutions[index] : resolutions.Last();
                var refinementRegion = new RefinementDetails
                {
                    Mode       = "inside",
                    Resolution = resolution
                };
                Geometry.setUserString(
                    mesh,
                    "ComputeRefinementRegion",
                    refinementRegion.ToJson()
                    );
            }

            Geometry.setUserString(
                mesh,
                "ComputeName",
                $"Refinement_X{centerPoint.X}_Y{centerPoint.Y}_Z{centerPoint.Z}_R{radius}"
                );
            return(mesh);
        }
예제 #3
0
        public static double EstimateRefinementCells(IGH_GeometricGoo geo, double baseCellSize)
        {
            var regionName        = Geometry.getUserString(geo, "ComputeName");
            var refinementDetails = Geometry.getUserString(geo, "ComputeRefinementRegion");

            if (string.IsNullOrEmpty(regionName) || string.IsNullOrEmpty(refinementDetails))
            {
                return(0.0);
            }

            var details = new RefinementDetails().FromJson(refinementDetails);

            details.CellSize = baseCellSize;
            var cellSize = baseCellSize / Math.Pow(2, int.Parse(details.Levels.Split(' ')[1]));
            var mesh     = new Mesh();

            geo.CastTo(out mesh);

            return(mesh.Volume() / Math.Pow(cellSize, 3));
        }
예제 #4
0
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            var meshes   = new List <GH_Mesh>();
            var location = "inside";
            var minLevel = 1;
            var maxLevel = 1;


            DA.GetDataList(0, meshes);
            if (!DA.GetData(1, ref location))
            {
                return;
            }

            DA.GetData(2, ref minLevel);
            DA.GetData(2, ref maxLevel);

            var refLevels = $"(( {minLevel} {maxLevel} ))";

            // Get a list of object references in the Rhino model
            foreach (var mesh in meshes)
            {
                var refinementRegion = new RefinementDetails
                {
                    Mode   = location,
                    Levels = refLevels
                };
                Geometry.setUserString(
                    mesh,
                    "ComputeRefinementRegion",
                    refinementRegion.ToJson()
                    );
            }

            DA.SetDataList(0, meshes);
        }