/// <inheritdoc /> public override bool Run(List <InputDefinition> input) { try { this.GetDataValues(); var points = ((ArrayList)input[0].GetInput()).OfType <Point>().ToList(); double transitionLength = Distance.PointToPoint(points[0], points[1]); var transitionSection = new TransitionSectionGeometry(this.rectangleHeight, this.rectangleWidth, transitionLength, this.circleRadius, points[0], new Vector(points[1] - points[0])); this.InsertTransitionSection(transitionSection); } catch (Exception ex) { Console.WriteLine(@"Exception: " + ex); } return(true); }
/// <summary> /// Inserts the full transition section in the model. /// </summary> /// <param name="geometry">Geometry descriptor of the transition section.</param> private void InsertTransitionSection(TransitionSectionGeometry geometry) { var rectangularBase = geometry.RectangularSection; var circle = geometry.CircularSection; var conicalSectionArcs = rectangularBase.OfType <Arc>() .Zip(circle.Select(c => c as Arc), (b, t) => new { Bottom = b, Top = t }) .ToList(); foreach (var arcs in conicalSectionArcs) { var loftedPlate = this.MakeConicalSection(arcs.Bottom, arcs.Top); loftedPlate.Insert(); } for (var i = 0; i < conicalSectionArcs.Count; ++i) { var nextIdx = (i + 1) % conicalSectionArcs.Count; var plate = this.MakeTriangularSection( conicalSectionArcs[i].Bottom, conicalSectionArcs[i].Top, conicalSectionArcs[nextIdx].Bottom); plate.Insert(); } }