/// <summary>
        /// Determines if the surface line of a calculation is intersecting with the section reference line.
        /// </summary>
        /// <param name="pipingCalculation">The piping calculation containing the surface line.</param>
        /// <param name="lineSegments">The line segments that define the reference line.</param>
        /// <returns><c>true</c> when intersecting. <c>false</c> otherwise.</returns>
        /// <exception cref="InvalidOperationException">Thrown when <paramref name="lineSegments"/> contains no elements.</exception>
        public static bool IsSurfaceLineIntersectionWithReferenceLineInSection(this IPipingCalculation <PipingInput> pipingCalculation,
                                                                               IEnumerable <Segment2D> lineSegments)
        {
            PipingSurfaceLine surfaceLine = pipingCalculation?.InputParameters.SurfaceLine;

            if (surfaceLine == null)
            {
                return(false);
            }

            double minimalDistance = lineSegments.Min(segment => segment.GetEuclideanDistanceToPoint(surfaceLine.ReferenceLineIntersectionWorldPoint));

            return(minimalDistance < 1e-6);
        }
        /// <summary>
        /// Creates a <see cref="CalculatableActivity"/> based on the provided <paramref name="calculation"/>.
        /// </summary>
        /// <param name="calculation">The calculation to create a <see cref="CalculatableActivity"/> for.</param>
        /// <param name="failureMechanism">The failure mechanism the <paramref name="calculation"/> belongs to.</param>
        /// <param name="assessmentSection">The assessment section the <paramref name="calculation"/> belongs to.</param>
        /// <returns>A <see cref="CalculatableActivity"/>.</returns>
        /// <exception cref="NotSupportedException">Thrown when <see cref="calculation"/> is of a type that is not supported.</exception>
        private static CalculatableActivity CreateCalculationActivity(IPipingCalculation <PipingInput> calculation,
                                                                      PipingFailureMechanism failureMechanism,
                                                                      IAssessmentSection assessmentSection)
        {
            switch (calculation)
            {
            case SemiProbabilisticPipingCalculation semiProbabilisticPipingCalculation:
                return(CreateSemiProbabilisticPipingCalculationActivity(semiProbabilisticPipingCalculation,
                                                                        failureMechanism.GeneralInput,
                                                                        assessmentSection));

            case ProbabilisticPipingCalculation probabilisticPipingCalculation:
                return(CreateProbabilisticPipingCalculationActivity(probabilisticPipingCalculation,
                                                                    failureMechanism,
                                                                    assessmentSection));

            default:
                throw new NotSupportedException();
            }
        }
 public void SetUp()
 {
     calculation             = PipingCalculationTestFactory.CreateCalculationWithValidInput(new TestHydraulicBoundaryLocation());
     testSurfaceLineTopLevel = calculation.InputParameters.SurfaceLine.Points.Max(p => p.Z);
 }