绘制圆
public static ObjectId AddCircleToModelSpace(this Database db, Point3d center, double radius)
{
return db.AddEntityToModelSpace(new Circle(center, new Vector3d(0, 0, 1), radius));
}
两点绘制圆
public static ObjectId AddCircleToModelSpace(this Database db, Point3d point1, Point3d point2)
{
Point3d center = point1.GetCenterPointBetweenTwoPoint(point2);
double radius = point1.GetDistanceBetweenTwoPoint(center);
return db.AddCircleToModelSpace(center, radius);
}
三点绘制圆
public static ObjectId AddCircleToModelSpace(this Database db, Point3d point1, Point3d point2, Point3d point3)
{
if (point1.IsOnOneLine(point2, point3))
{
return ObjectId.Null;
}
CircularArc3d cArc = new CircularArc3d(point1, point2, point3);
return db.AddCircleToModelSpace(cArc.Center, cArc.Radius);
}
绘制折现多段线
public static ObjectId AddPolyLineToModelSpace(this Database db, bool isClosed, double constantWidth, params Point2d[] vertices)
{
if (vertices.Length < 2)
{
return ObjectId.Null;
}
Polyline pLine = new Polyline();
for (int i = 0; i < vertices.Length; i++)
{
pLine.AddVertexAt(i, vertices[i], 0, 0, 0);
}
if (isClosed)
{
pLine.Closed = true;
}
pLine.ConstantWidth = constantWidth;
return db.AddEntityToModelSpace(pLine);
}
绘制矩形
public static ObjectId AddRectToModelSpace(this Database db, Point2d point1, Point2d point2)
{
Polyline pLine = new Polyline();
Point2d p1 = new Point2d(Math.Min(point1.X, point2.X), Math.Min(point1.Y, point2.Y));
Point2d p2 = new Point2d(Math.Max(point1.X, point2.X), Math.Min(point1.Y, point2.Y));
Point2d p3 = new Point2d(Math.Max(point1.X, point2.X), Math.Max(point1.Y, point2.Y));
Point2d p4 = new Point2d(Math.Min(point1.X, point2.X), Math.Max(point1.Y, point2.Y));
pLine.AddVertexAt(0, p1, 0, 0, 0);
pLine.AddVertexAt(1, p2, 0, 0, 0);
pLine.AddVertexAt(2, p3, 0, 0, 0);
pLine.AddVertexAt(3, p4, 0, 0, 0);
pLine.Closed = true;
return db.AddEntityToModelSpace(pLine);
}
绘制椭圆
public static ObjectId AddEllipseToModelSpace(this Database db, Point3d center, double majorRadius, double shortRadius, double degree, double startDegree, double endDegree)
{
double ratio = shortRadius / majorRadius;
Vector3d majorAxis = new Vector3d(majorRadius * Math.Cos(degree.DegreeToAngle()), majorRadius * Math.Sin(degree.DegreeToAngle()), 0);
Ellipse elli = new Ellipse(center, Vector3d.ZAxis, majorAxis, ratio, startDegree.DegreeToAngle(), endDegree.DegreeToAngle());
return db.AddEntityToModelSpace(elli);
}
public static ObjectId AddEllipseToModelSpace(this Database db, Point3d majorPoint1, Point3d majorPoint2, double shortRadius)
{
Point3d center = majorPoint1.GetCenterPointBetweenTwoPoint(majorPoint2);
double ratio = shortRadius / (majorPoint1.GetDistanceBetweenTwoPoint(majorPoint2) / 2);
Vector3d majorAxis = majorPoint2.GetVectorTo(center);
Ellipse elli = new Ellipse(center, Vector3d.ZAxis, majorAxis, ratio, 0, Math.PI * 2);
return db.AddEntityToModelSpace(elli);
}
public static ObjectId AddEllipseToModelSpace(this Database db, Point3d point1, Point3d point2)
{
Point3d center = point1.GetCenterPointBetweenTwoPoint(point2);
double ratio = Math.Abs((point1.Y - point2.Y) / (point1.X - point2.X));
Vector3d majorVector = new Vector3d(Math.Abs(point1.X - point2.X) / 2, 0, 0);
if (ratio >= 1)
{
ratio = Math.Abs((point1.X - point2.X) / (point1.Y - point2.Y));
majorVector = new Vector3d(0, Math.Abs(point1.Y - point2.Y) / 2, 0);
}
Ellipse elli = new Ellipse(center, Vector3d.ZAxis, majorVector, ratio, 0, Math.PI * 2);
return db.AddEntityToModelSpace(elli);
}