private static GH_Mesh SetMeshLevel(GH_Mesh mesh, List <int> meshLevels, double?resolution) { var levelDetails = new MeshLevelDetails { Resolution = resolution, Level = meshLevels.Count > 0? new MeshLevels { Min = meshLevels.First(), Max = meshLevels.Last() }: null }; Geometry.setUserString( mesh, "ComputeMeshLevels", levelDetails.ToJson() ); return(mesh); }
public static double EstimateSurfaceAreaCells(IGH_GeometricGoo geo, double baseCellSize) { var surfaceName = Geometry.getUserString(geo, "ComputeName"); var levels = Geometry.getUserString(geo, "ComputeMeshLevels"); if (string.IsNullOrEmpty(surfaceName) || string.IsNullOrEmpty(levels)) { return(0.0); } var meshLevel = new MeshLevelDetails().FromJson(levels); meshLevel.CellSize = baseCellSize; var cellSize = baseCellSize / Math.Pow(2, meshLevel.Level.Min); var mesh = new Mesh(); geo.CastTo(out mesh); var area = AreaMassProperties.Compute(mesh).Area; return((area / Math.Pow(cellSize, 2)) * 4); }
private static Dictionary <string, MeshLevelDetails> GetSurfaces(List <IGH_GeometricGoo> meshes, double cellSize) { var surfaces = new Dictionary <string, MeshLevelDetails>(); foreach (var mesh in meshes) { var surfaceName = Geometry.getUserString(mesh, "ComputeName"); var meshLevels = Geometry.getUserString(mesh, "ComputeMeshLevels"); if (string.IsNullOrEmpty(surfaceName) || string.IsNullOrEmpty(meshLevels)) { continue; } var meshLevel = new MeshLevelDetails().FromJson(meshLevels); meshLevel.CellSize = cellSize; surfaces.Add( surfaceName, meshLevel ); } return(surfaces); }