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); }
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)); }
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); }