Circle
using Autodesk.DesignScript.Interfaces;
using Autodesk.DesignScript.Runtime;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
namespace Autodesk.DesignScript.Geometry
{
public class Circle : Curve
{
internal ICircleEntity CircleEntity => HostImpl as ICircleEntity;
public Point CenterPoint => Point.Wrap(CircleEntity.get_CenterPoint());
[Scaling()]
public double Radius {
get {
return CircleEntity.get_Radius() * DesignScriptEntity.scaleFactor;
}
}
internal Circle(ICircleEntity host)
: base(host)
{
}
public override string ToString()
{
return "Circle(Normal = " + Normal?.ToString() + ", CenterPoint = " + CenterPoint?.ToString() + ", Radius = " + Radius.ToString(GeometryExtension.DoublePrintFormat, CultureInfo.InvariantCulture) + ")";
}
internal new static void InitType()
{
Geometry.RegisterHostType(typeof(ICircleEntity), (IGeometryEntity host) => new Circle(host as ICircleEntity));
}
internal static Circle Wrap(ICircleEntity host)
{
if (host == null)
return null;
return new Circle(host);
}
internal static Circle[] Wrap(ICircleEntity[] hosts)
{
return (from x in hosts
select Wrap(x)).ToArray();
}
internal static Circle[][] Wrap(ICircleEntity[][] hosts)
{
return (from x in hosts
select Wrap(x)).ToArray();
}
internal static ICircleEntity[][] Unwrap(Circle[][] o)
{
return (from x in o
select Unwrap(x)).ToArray();
}
internal static ICircleEntity[] Unwrap(Circle[] o)
{
return (from x in o
select Unwrap(x)).ToArray();
}
internal static ICircleEntity[] Unwrap(IEnumerable<Circle> o)
{
return (from x in o
select Unwrap(x)).ToArray();
}
internal static ICircleEntity Unwrap(Circle o)
{
return o.CircleEntity;
}
public static Circle ByCenterPointRadius([DefaultArgument("Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0)")] Point centerPoint, [Scaling()] double radius = 1)
{
DesignScriptEntity.CheckArgsForAsmExtents(new List<double> {
radius
});
radius /= DesignScriptEntity.scaleFactor;
return Wrap(HostFactory.Factory.CircleByCenterPointRadius(Point.Unwrap(centerPoint), radius));
}
public static Circle ByCenterPointRadiusNormal([DefaultArgument("Autodesk.DesignScript.Geometry.Point.ByCoordinates(0, 0, 0)")] Point centerPoint, [DefaultArgument("1")] [Scaling()] double radius, [DefaultArgument("Autodesk.DesignScript.Geometry.Vector.ByCoordinates(0, 0, 1)")] Vector normal)
{
DesignScriptEntity.CheckArgsForAsmExtents(new List<double> {
radius
});
radius /= DesignScriptEntity.scaleFactor;
return Wrap(HostFactory.Factory.CircleByCenterPointRadiusNormal(Point.Unwrap(centerPoint), radius, Vector.Unwrap(normal)));
}
public static Circle ByPlaneRadius([DefaultArgument("Autodesk.DesignScript.Geometry.Plane.XY()")] Plane plane, [Scaling()] double radius = 1)
{
DesignScriptEntity.CheckArgsForAsmExtents(new List<double> {
radius
});
radius /= DesignScriptEntity.scaleFactor;
return Wrap(HostFactory.Factory.CircleByPlaneRadius(Plane.Unwrap(plane), radius));
}
public static Circle ByThreePoints(Point p1, Point p2, Point p3)
{
return Wrap(HostFactory.Factory.CircleByThreePoints(Point.Unwrap(p1), Point.Unwrap(p2), Point.Unwrap(p3)));
}
public static Circle ByBestFitThroughPoints(IEnumerable<Point> points)
{
return Wrap(HostFactory.Factory.CircleByBestFitThroughPoints(Point.Unwrap(points)));
}
}
}