// Utility private static CellComplex MakeASimpleCellComplex( double uCellSize = 10, double vCellSize = 10, double uNumCells = 5, double vNumCells = 5, double cellHeight = 5, double numLevels = 3, Nullable <Vector3> origin = null, Nullable <Vector3> uDirection = null, Nullable <Vector3> vDirection = null, Polygon polygon = null ) { var orig = origin == null ? new Vector3() : (Vector3)origin; var uDir = uDirection == null ? new Vector3(1, 0, 0) : ((Vector3)uDirection).Unitized(); var vDir = vDirection == null ? new Vector3(0, 1, 0) : ((Vector3)vDirection).Unitized(); var uLength = orig.X + uCellSize * uNumCells; var vLength = orig.Y + vCellSize * vNumCells; // Create Grid2d var boundary = polygon == null?Polygon.Rectangle(orig, new Vector3(uLength, vLength)) : polygon; // Using constructor with origin var grid = new Grid2d(boundary, orig, uDir, vDir); for (var u = uCellSize; u < uLength; u += uCellSize) { grid.SplitAtPoint(orig + (uDir * u)); } for (var v = vCellSize; v < vLength; v += vCellSize) { grid.SplitAtPoint(orig + (vDir * v)); } var cellComplex = new CellComplex(Guid.NewGuid(), "Test"); for (var i = 0; i < numLevels; i++) { foreach (var cell in grid.GetCells()) { foreach (var crv in cell.GetTrimmedCellGeometry()) { cellComplex.AddCell((Polygon)crv, 5, cellHeight * i, grid.U, grid.V); } } } return(cellComplex); }
public void TrimBehavior() { Name = "TrimBehavior"; var polygonjson = "[{\"discriminator\":\"Elements.Geometry.Polygon\",\"Vertices\":[{\"X\":-14.371519985751306,\"Y\":-4.8816304299427005,\"Z\":0.0},{\"X\":-17.661873645682569,\"Y\":9.2555712951713573,\"Z\":0.0},{\"X\":12.965610421927806,\"Y\":9.2555712951713573,\"Z\":0.0},{\"X\":12.965610421927806,\"Y\":3.5538269529982784,\"Z\":0.0},{\"X\":6.4046991240848143,\"Y\":3.5538269529982784,\"Z\":0.0},{\"X\":1.3278034769444158,\"Y\":-4.8816304299427005,\"Z\":0.0}]},{\"discriminator\":\"Elements.Geometry.Polygon\",\"Vertices\":[{\"X\":-9.4508365123690652,\"Y\":0.20473478280229102,\"Z\":0.0},{\"X\":-1.8745460850979974,\"Y\":0.20473478280229102,\"Z\":0.0},{\"X\":-1.8745460850979974,\"Y\":5.4378426037008651,\"Z\":0.0},{\"X\":-9.4508365123690652,\"Y\":5.4378426037008651,\"Z\":0.0}]}]\r\n"; var polygons = JsonConvert.DeserializeObject <List <Polygon> >(polygonjson); var grid = new Grid2d(polygons); foreach (var pt in polygons[1].Vertices) { grid.SplitAtPoint(pt); } grid.CellsFlat.ForEach(c => c.U.DivideByApproximateLength(1.0, EvenDivisionMode.RoundDown)); var trimmedCells = grid.GetCells().Select(c => (TrimmedGeometry: c.GetTrimmedCellGeometry(), BaseRect: c.GetCellGeometry(), IsTrimmed: c.IsTrimmed())); foreach (var trimGeometry in trimmedCells) { var trimGeo = trimGeometry.TrimmedGeometry.OfType <Polygon>(); var material = trimGeometry.IsTrimmed ? BuiltInMaterials.XAxis : BuiltInMaterials.ZAxis; foreach (var t in trimGeo) { Model.AddElement(new ModelCurve(t)); Model.AddElement(new Mass(t, 1, material, new Transform(0, 0, -1.001))); } } Assert.Equal(87, trimmedCells.Count()); Assert.Equal(18, trimmedCells.Count(c => c.IsTrimmed)); }
public void TrimBehavior() { var polygonjson = "[{\"discriminator\":\"Elements.Geometry.Polygon\",\"Vertices\":[{\"X\":-14.371519985751306,\"Y\":-4.8816304299427005,\"Z\":0.0},{\"X\":-17.661873645682569,\"Y\":9.2555712951713573,\"Z\":0.0},{\"X\":12.965610421927806,\"Y\":9.2555712951713573,\"Z\":0.0},{\"X\":12.965610421927806,\"Y\":3.5538269529982784,\"Z\":0.0},{\"X\":6.4046991240848143,\"Y\":3.5538269529982784,\"Z\":0.0},{\"X\":1.3278034769444158,\"Y\":-4.8816304299427005,\"Z\":0.0}]},{\"discriminator\":\"Elements.Geometry.Polygon\",\"Vertices\":[{\"X\":-9.4508365123690652,\"Y\":0.20473478280229102,\"Z\":0.0},{\"X\":-1.8745460850979974,\"Y\":0.20473478280229102,\"Z\":0.0},{\"X\":-1.8745460850979974,\"Y\":5.4378426037008651,\"Z\":0.0},{\"X\":-9.4508365123690652,\"Y\":5.4378426037008651,\"Z\":0.0}]}]\r\n"; var polygons = JsonConvert.DeserializeObject <List <Polygon> >(polygonjson); var grid = new Grid2d(polygons); foreach (var pt in polygons[1].Vertices) { grid.SplitAtPoint(pt); } grid.CellsFlat.ForEach(c => c.U.DivideByApproximateLength(1.0, EvenDivisionMode.RoundDown)); var trimmedCells = grid.GetCells().Select(c => new Dictionary <string, object> { { "TrimmedGeometry", c.GetTrimmedCellGeometry() }, { "BaseRect", c.GetCellGeometry() }, { "IsTrimmed", c.IsTrimmed() } } ); Assert.Equal(87, trimmedCells.Count()); Assert.Equal(18, trimmedCells.Count(c => (bool)c["IsTrimmed"])); }