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)); }
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; }