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)); }
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); }
// 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); }
// 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); }
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); }
public CircularArc3d ArcToNative(Arc arc) { return(new CircularArc3d(PointToNative(arc.startPoint), PointToNative(arc.midPoint), PointToNative(arc.endPoint))); }