protected CentreLineOffset(double distance, SidesOfCentre side, OffsetTypes type)
 {
     DistanceFromCentre = distance;
     Side       = side;
     OffsetType = type;
     Curves     = new PersistentObjectIdCollection();
 }
        private static bool IsOffSetValidForSide(this Curve curve, Curve offSet, SidesOfCentre side)
        {
            if (offSet == null)
            {
                return(false);
            }
            var start        = new Point2d(curve.StartPoint.X, curve.StartPoint.Y);
            var offSetVector = start.GetVectorTo(new Point2d(offSet.StartPoint.X, offSet.StartPoint.Y));

            return(Math.Abs(curve.AngleFromCurveToForSide(side) - offSetVector.Angle) < RadiansHelper.ANGLE_TOLERANCE);
        }
        public static double AngleForSide(double angle, SidesOfCentre side)
        {
            switch (side)
            {
            case SidesOfCentre.Right:
                return(AngleForRightSide(angle));

            case SidesOfCentre.Left:
                return(AngleForLeftSide(angle));

            default:
                throw new ArgumentOutOfRangeException(nameof(side), side, null);
            }
        }
        public static Curve CreateOffset(this Curve curve, SidesOfCentre side, double dist)
        {
            Curve offset;

            switch (side)
            {
            case SidesOfCentre.Left:
                offset = curve.CreateLeftOffset(dist);
                break;

            case SidesOfCentre.Right:
                offset = curve.CreateRightOffset(dist);
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(side), side, null);
            }

            return(offset);
        }
        public static double AngleFromCurveToForSide(this Curve curve, SidesOfCentre side)
        {
            double curveAngle;

            switch (curve)
            {
            case Line line:
                curveAngle = line.Angle;
                break;

            case Arc arc:
                var startPoint  = new Point2d(arc.StartPoint.X, arc.StartPoint.Y);
                var arcCentre   = new Point2d(arc.Center.X, arc.Center.Y);
                var startVector = arcCentre.GetVectorTo(startPoint);
                curveAngle = arc.Clockwise() ? startVector.Angle - RadiansHelper.DEGREES_90 : startVector.Angle + RadiansHelper.DEGREES_90;
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(curve), curve, null);
            }

            return(RadiansHelper.AngleForSide(curveAngle, side));
        }
Exemplo n.º 6
0
 protected CarriageWay(SidesOfCentre side) : base(Constants.DEFAULT_CARRIAGE_WAY, side, OffsetTypes.CarriageWay)
 {
     Intersections = new List <OffsetIntersect>();
     Ignore        = false;
 }
Exemplo n.º 7
0
 protected Pavement(double distance, SidesOfCentre side) : base(distance, side, OffsetTypes.Pavement)
 {
 }