Пример #1
0
        public static Ellipse ToCadEllipse(EllipticArc arc, double defaultElevation)
        {
            EllipticArc ellipticArc = (EllipticArc)Utility.CloneObject(arc);
            PointN      pointN      = (PointN)ellipticArc.CenterPoint;

            if (double.IsNaN(pointN.Z))
            {
                pointN.Z = 0.0;
            }
            if (!pointN.ZSpecified)
            {
                pointN.Z = defaultElevation;
                ((PointN)ellipticArc.FromPoint).Z = defaultElevation;
                ((PointN)ellipticArc.ToPoint).Z   = defaultElevation;
            }
            Point3d point3d  = GIS2CAD.ToCadPoint3d((PointN)ellipticArc.FromPoint);
            Point3d point3d2 = GIS2CAD.ToCadPoint3d((PointN)ellipticArc.ToPoint);

            if (!ellipticArc.EllipseStd)
            {
                AGSEllipticalArc.TransformToEllipseStd(ref ellipticArc);
            }
            PointN          pointN2         = (PointN)ellipticArc.FromPoint;
            PointN          pointN3         = (PointN)ellipticArc.ToPoint;
            double          arg_B7_0        = pointN2.X;
            double          arg_BF_0        = pointN2.Y;
            double          num             = ellipticArc.MinorMajorRatio * ellipticArc.MinorMajorRatio;
            double          x               = pointN2.X;
            double          y               = pointN2.Y;
            double          x2              = pointN3.X;
            double          y2              = pointN3.Y;
            double          num2            = Math.Sqrt(num * x * x + y * y);
            double          num3            = Math.Sqrt(num * x2 * x2 + y2 * y2);
            double          num4            = 0.5 * (num2 + num3);
            double          num5            = num4 / ellipticArc.MinorMajorRatio;
            Vector3d        vector3d        = new Vector3d(num5, 0.0, 0.0);
            Vector3d        vector3d2       = new Vector3d(0.0, num4, 0.0);
            Vector3d        vector3d3       = vector3d.RotateBy(ellipticArc.Rotation, Vector3d.ZAxis);
            Vector3d        vector3d4       = vector3d2.RotateBy(ellipticArc.Rotation, Vector3d.ZAxis);
            Point3d         point3d3        = GIS2CAD.ToCadPoint3d(pointN);
            EllipticalArc3d ellipticalArc3d = new EllipticalArc3d(point3d3, vector3d3, vector3d4, num5, num4);
            double          num6            = ellipticalArc3d.GetParameterOf(point3d);
            double          num7            = ellipticalArc3d.GetParameterOf(point3d2);

            if (!ellipticArc.IsCounterClockwise)
            {
                double num8 = num6;
                num6 = num7;
                num7 = num8;
            }
            return(new Ellipse(point3d3, Vector3d.ZAxis, vector3d3, ellipticArc.MinorMajorRatio, num6, num7));
        }
Пример #2
0
        private static void TransformToEllipseStd(ref EllipticArc arc)
        {
            PointN pointN = (PointN)arc.CenterPoint;

            if (double.IsNaN(pointN.Z))
            {
                pointN.Z = 0.0;
            }
            PointN fromPoint = (PointN)arc.FromPoint;
            PointN toPoint   = (PointN)arc.ToPoint;

            AGSEllipticalArc.TransformToEllipseStd(ref fromPoint, pointN, arc.Rotation);
            AGSEllipticalArc.TransformToEllipseStd(ref toPoint, pointN, arc.Rotation);
            arc.FromPoint = fromPoint;
            arc.ToPoint   = toPoint;
        }