找到椭圆的圆心
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);
将图形对象添加到图形文件中(AddEntityToModelSpace)
public static ObjectId[] AddEntityToModelSpace(this Database db,params Entity entity)
{
ObjectId[] entityId = new ObjectId[entity.Length];
using (Transaction trans = db.TransactionManager.StartTransaction())
{
BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId,OpenMode.ForRead);
BlockTableRecord btr = (BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace],OpenMode.ForWrite);
for (int i = 0; i < entity.Length; i++)
{
entityId[i] = btr.AppendEntity(entity[i]);
trans.AddNewlyCreatedDBObject(entity[i],true);
}
trans.Commit();
}
return entityId;
}
完整代码
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);
}
调用
[CommandMethod("EllipseDemo")]
public void EllipseDemo()
{
Database db = HostApplicationServices.WorkingDatabase;
db.AddEllipseToModelSpace(new Point3d(100,100,0),new Point3d(500,500,0));
db.AddRectToModelSpace(new Point2d(100, 100), new Point2d(500, 500));
db.AddEllipseToModelSpace(new Point3d(100,100,0),new Point3d(500,400,0));
db.AddRectToModelSpace(new Point2d(100, 100), new Point2d(500, 400));
db.AddEllipseToModelSpace(new Point3d(100,100,0),new Point3d(200,400,0));
db.AddRectToModelSpace(new Point2d(100, 100), new Point2d(200, 400));
}
