コード例 #1
0
        public AcadDB.Arc ArcToNativeDB(Arc arc)
        {
            var center = PointToNative(arc.plane.origin);
            var radius = ScaleToNative((double)arc.radius, arc.units);

            return(new AcadDB.Arc(center, radius, (double)arc.startAngle, (double)arc.endAngle));
        }
コード例 #2
0
        public CircularArc3d ArcToNative(Arc arc)
        {
            var _arc = new CircularArc3d(PointToNative(arc.startPoint), PointToNative(arc.midPoint), PointToNative(arc.endPoint));

            _arc.SetAxes(VectorToNative(arc.plane.normal), VectorToNative(arc.plane.xdir));
            _arc.SetAngles((double)arc.startAngle, (double)arc.endAngle);

            return(_arc);
        }
コード例 #3
0
        // Arcs
        public Arc ArcToSpeckle(AcadDB.Arc arc)
        {
            var _arc = new Arc(PlaneToSpeckle(arc.GetPlane()), arc.Radius, arc.StartAngle, arc.EndAngle, arc.TotalAngle, ModelUnits);

            _arc.startPoint = PointToSpeckle(arc.StartPoint);
            _arc.endPoint   = PointToSpeckle(arc.EndPoint);
            _arc.domain     = new Interval(arc.StartParam, arc.EndParam);
            _arc.length     = arc.Length;
            _arc.bbox       = BoxToSpeckle(arc.GeometricExtents, true);
            return(_arc);
        }
コード例 #4
0
        // Arc
        public Arc ArcToSpeckle(CircularArc3d arc)
        {
            var _arc = new Arc(PlaneToSpeckle(arc.GetPlane()), arc.Radius, arc.StartAngle, arc.EndAngle, Math.Abs(arc.EndAngle - arc.StartAngle), ModelUnits);

            _arc.startPoint = PointToSpeckle(arc.StartPoint);
            _arc.endPoint   = PointToSpeckle(arc.EndPoint);
            _arc.domain     = IntervalToSpeckle(arc.GetInterval());
            _arc.length     = arc.GetLength(arc.GetParameterOf(arc.StartPoint), arc.GetParameterOf(arc.EndPoint), tolerance);
            _arc.bbox       = BoxToSpeckle(arc.OrthoBoundBlock);
            return(_arc);
        }
コード例 #5
0
        private Arc AlignmentArcToSpeckle(CivilDB.AlignmentSubEntityArc arc)
        {
            // calculate midpoint of chord as between start and end point
            Point2d chordMid = new Point2d((arc.StartPoint.X + arc.EndPoint.X) / 2, (arc.StartPoint.Y + arc.EndPoint.Y) / 2);

            // calculate sagitta as radius minus distance between arc center and chord midpoint
            var sagitta = arc.Radius - arc.CenterPoint.GetDistanceTo(chordMid);

            // get unit vector from arc center to chord mid
            var midVector     = arc.CenterPoint.GetVectorTo(chordMid);
            var unitMidVector = midVector.DivideBy(midVector.Length);

            // get midpoint of arc by moving chord mid point the length of the sagitta along mid vector
            var midPoint = chordMid.Add(unitMidVector.MultiplyBy(sagitta));

            // find arc plane (normal is in clockwise dir)
            var center3 = new Point3d(arc.CenterPoint.X, arc.CenterPoint.Y, 0);

            Acad.Plane plane = (arc.Clockwise) ? new Acad.Plane(center3, Vector3d.ZAxis.MultiplyBy(-1)) : new Acad.Plane(center3, Vector3d.ZAxis);

            // calculate start and end angles
            var startVector = new Vector3d(arc.StartPoint.X - center3.X, arc.StartPoint.Y - center3.Y, 0);
            var endVector   = new Vector3d(arc.EndPoint.X - center3.X, arc.EndPoint.Y - center3.Y, 0);
            var startAngle  = startVector.AngleOnPlane(plane);
            var endAngle    = endVector.AngleOnPlane(plane);

            // calculate total angle.
            // TODO: This needs to be improved with more research into autocad .AngleOnPlane() return values (negative angles, etc).
            var totalAngle = (arc.Clockwise) ? System.Math.Abs(endAngle - startAngle) : System.Math.Abs(endAngle - startAngle);

            // create arc
            var _arc = new Arc(PlaneToSpeckle(plane), arc.Radius, startAngle, endAngle, totalAngle, ModelUnits);

            _arc.startPoint = PointToSpeckle(arc.StartPoint);
            _arc.endPoint   = PointToSpeckle(arc.EndPoint);
            _arc.midPoint   = PointToSpeckle(midPoint);
            _arc.domain     = IntervalToSpeckle(new Acad.Interval(0, 1, tolerance));
            _arc.length     = arc.Length;

            return(_arc);
        }
コード例 #6
0
 public CircularArc3d ArcToNative(Arc arc)
 {
     return(new CircularArc3d(PointToNative(arc.startPoint), PointToNative(arc.midPoint), PointToNative(arc.endPoint)));
 }