示例#1
0
        public void GridFromCurves()
        {
            var a       = Vector3.Origin;
            var b       = new Vector3(5, 0, 1);
            var c       = new Vector3(5, 5, 2);
            var d       = new Vector3(0, 5, 3);
            var e       = new Vector3(0, 0, 4);
            var f       = new Vector3(5, 0, 5);
            var ctrlPts = new List <Vector3> {
                a, b, c, d, e, f
            };

            var bezier1 = new Bezier(ctrlPts);

            var grid = new Grid1d(bezier1);

            grid.DivideByApproximateLength(0.5, EvenDivisionMode.RoundUp);
            var cellGeometry = grid.GetCells().Select(cl => cl.GetCellGeometry());

            Assert.Equal(25, cellGeometry.Count());


            var r  = 2.0;
            var a1 = new Arc(new Vector3(5, 0), r, -90.0, 90.0);

            var arcGrid = new Grid1d(a1);

            arcGrid.DivideByApproximateLength(1, EvenDivisionMode.RoundDown);
            arcGrid.Cells[1].DivideByCount(4);
            var arcCellGeometry = arcGrid.GetCells().Select(cl => cl.GetCellGeometry());

            Assert.Equal(9, arcCellGeometry.Count());
        }
示例#2
0
        public void Grid1dApproximateLength()
        {
            var grid1 = new Grid1d(10.5);
            var grid2 = new Grid1d(10.5);
            var grid3 = new Grid1d(10.2);

            grid1.DivideByApproximateLength(6, EvenDivisionMode.Nearest);
            Assert.Equal(2, grid1.Cells.Count);

            grid2.DivideByApproximateLength(4, EvenDivisionMode.RoundUp);
            Assert.Equal(3, grid2.Cells.Count);

            grid3.DivideByApproximateLength(1, EvenDivisionMode.RoundDown);
            Assert.Equal(10, grid3.Cells.Count);
        }
示例#3
0
        /// <summary>
        /// The BallonaBridge function.
        /// </summary>
        /// <param name="model">The input model.</param>
        /// <param name="input">The arguments to the execution.</param>
        /// <returns>A BallonaBridgeOutputs instance containing computed results and the model with any new elements.</returns>
        public static BallonaBridgeOutputs Execute(Dictionary <string, Model> inputModels, BallonaBridgeInputs input)
        {
            /// Your code here.
            var output = new BallonaBridgeOutputs(1.0);

            Elements.Material brdigeMaterial = null;
            switch (input.Material)
            {
            case Material.Red:
                brdigeMaterial = new Elements.Material("Red", Colors.Red, 0.0f, 0.0f);
                break;

            case Material.Steel:
                brdigeMaterial = BuiltInMaterials.Steel;
                break;

            case Material.Wood:
                brdigeMaterial = BuiltInMaterials.Wood;
                break;
            }
            var beam = new Beam(input.CenterLine, Polygon.Rectangle(input.BridgeWidth, input.BridgeHeight), brdigeMaterial);

            var offsetCrv = input.CenterLine.Offset(5, EndType.Square);

            // output.model.AddElement(offsetCrv);


            var grid = new Grid1d(offsetCrv[0]);

            grid.DivideByApproximateLength(1.0);
            foreach (var pt in grid.GetCellSeparators())
            {
                var column = new Column(pt, 5, Polygon.Rectangle(0.05, 0.05));
                output.model.AddElement(column);
            }

            output.model.AddElement(beam);
            return(output);
        }
示例#4
0
        /// <summary>
        /// Construct a set of elements from this rule for a given definition.
        /// </summary>
        /// <param name="definition">The definition to instantiate.</param>
        public List <Element> Instantiate(ComponentDefinition definition)
        {
            var arrayElements = new List <Element>();
            var newVertices   = PolylinePlacementRule.TransformPolyline(this, definition);

            var path = IsClosed ? new Polygon(newVertices) : new Polyline(newVertices);

            var grid1d = new Grid1d(path);

            switch (SpacingRule.SpacingMode)
            {
            case SpacingMode.ByLength:
                grid1d.DivideByFixedLength(SpacingRule.Value);
                break;

            case SpacingMode.ByApproximateLength:
                grid1d.DivideByApproximateLength(SpacingRule.Value);
                break;

            case SpacingMode.ByCount:
                grid1d.DivideByCount((int)SpacingRule.Value);
                break;
            }

            var separators = grid1d.GetCellSeparators();

            foreach (var sep in separators)
            {
                ElementDefinition.IsElementDefinition = true;
                var transform = new Transform(definition.OrientationGuide);
                transform.Concatenate(new Transform(sep));
                var instance = ElementDefinition.CreateInstance(transform, Guid.NewGuid().ToString());
                arrayElements.Add(instance);
            }
            return(arrayElements);
        }
        /// <summary>
        /// The Testfunction1 function.
        /// </summary>
        /// <param name="model">The input model.</param>
        /// <param name="input">The arguments to the execution.</param>
        /// <returns>A Testfunction1Outputs instance containing computed results and the model with any new elements.</returns>
        public static Testfunction1Outputs Execute(Dictionary <string, Model> inputModels, Testfunction1Inputs input)
        {
            /// Your code here.
            var output = new Testfunction1Outputs(1.0);
            List <ModelCurve> modelCurves = new List <ModelCurve>();
            List <Curve>      Curves      = new List <Curve>();

            Elements.Material brdigeMaterial = null;
            switch (input.Material)
            {
            case Material.Red:
                brdigeMaterial = new Elements.Material("Red", Colors.Red, 0.0f, 0.0f);
                break;

            case Material.Steel:
                brdigeMaterial = BuiltInMaterials.Steel;
                break;

            case Material.Wood:
                brdigeMaterial = BuiltInMaterials.Wood;
                break;
            }
            var            profile          = WideFlangeProfileServer.Instance.GetProfileByType(WideFlangeProfileType.W10x100);
            var            pts              = new List <Vector3>();
            var            centerCrv        = input.CenterLine;
            var            offsetCrv        = input.CenterLine.Offset(input.OffsetWidth, EndType.Square)[0];
            var            offsetCrv2       = input.CenterLine.Offset(input.OffsetWidth / 2, EndType.Square)[0];
            var            rebuildOffsetCrv = new Polygon(offsetCrv.Vertices);
            var            LGon             = Polygon.L(15, 15, 5);
            var            ltransform       = new Transform(15, 0, 0);
            List <Polygon> testPoly         = new List <Polygon>();

            testPoly.AddRange(new[] { rebuildOffsetCrv, Polygon.Rectangle(15, 15), ltransform.OfPolygon(LGon) });

            foreach (var poly in testPoly)
            {
                var beam = new Beam(poly, Polygon.Rectangle(input.BridgeWidth, input.BridgeHeight), brdigeMaterial);
                // var beam = new Beam(poly, profile, brdigeMaterial);
                output.Model.AddElement(beam);
                var grid = new Grid1d(poly);

                grid.DivideByApproximateLength(3);

                foreach (var pt in grid.GetCellSeparators())
                {
                    var column = new Column(pt, 5, Polygon.Rectangle(0.1, 0.1));
                    output.Model.AddElement(column);
                }
            }
            var secLine = new Line(new Vector3(-input.OffsetWidth * 2, 0, 0), new Vector3(input.OffsetWidth * 2, 0, 0));
            // List<Plane> planes = new List<Plane>();
            List <Line> secLines = new List <Line>();


            var crvSegments = centerCrv.Segments();

            foreach (var crv in crvSegments)
            {
                var grid = new Grid1d(crv);

                grid.DivideByApproximateLength(3);

                foreach (var pt in grid.GetCellSeparators())
                {
                    // planes.Add(new Plane(pt, Vector3.XAxis(pt)))
                    // pts.Add(pt);
                    var transform = new Transform(pt, crv.Direction());
                    secLines.Add(transform.OfLine(secLine));
                    // planes.Add(new Plane(pt, crv.Direction()));
                    var column = new Column(pt, 5, Polygon.Rectangle(0.1, 0.1));
                    output.Model.AddElement(column);
                }
            }

            Curves.AddRange(new[] { centerCrv, offsetCrv, (Curve)secLine });
            Curves.AddRange(secLines);
            foreach (var crv in Curves)
            {
                modelCurves.Add(new ModelCurve(crv));
            }
            // var pink = new Elements.Material("pink", Colors.Pink);
            // var modelPoints = new ModelPoints(pts, pink);


            // var crvs = new List<Curve>{Polygon.Rectangle(10,10), offsetCrv[0]};

            // foreach(var crv in crvs) {
            //   modelCurves.Add(new ModelCurve(crv));
            //   var grid = new Grid1d(crv);
            //   grid.DivideByApproximateLength(1.0);
            //   foreach(var pt in grid.GetCellSeparators())
            //   {
            //     var column = new Column(pt, 5, Polygon.Rectangle(0.05, 0.05));
            //     output.Model.AddElement(column);
            //   }

            // }
            // output.Model.AddElements(modelPoints);
            output.Model.AddElements(modelCurves);
            // output.Model.AddElement(beam);
            return(output);
        }