Exemple #1
0
        // 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);
        }
Exemple #2
0
        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));
        }
Exemple #3
0
        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"]));
        }