Cad二次开发添加图形到数据库

绘制圆

/// <summary>
/// 绘制圆
/// </summary>
/// <param name="db">图形数据库</param>
/// <param name="center">圆心</param>
/// <param name="radius">半径</param>
/// <returns>ObjectId</returns>
public static ObjectId AddCircleToModelSpace(this Database db, Point3d center, double radius)
{
    return db.AddEntityToModelSpace(new Circle(center, new Vector3d(0, 0, 1), radius));
}

两点绘制圆

/// <summary>
/// 两点绘制圆
/// </summary>
/// <param name="db">图形数据库</param>
/// <param name="point1">第一个点</param>
/// <param name="point2">第二个点</param>
/// <returns>ObjectId</returns>
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);
}

三点绘制圆

/// <summary>
/// 三点绘制圆
/// </summary>
/// <param name="db">图形数据库</param>
/// <param name="point1">第一个点</param>
/// <param name="point2">第二个点</param>
/// <param name="point3">第三个点</param>
/// <returns>ObjectId</returns>
public static ObjectId AddCircleToModelSpace(this Database db, Point3d point1, Point3d point2, Point3d point3)
{
    //先判断三点是否在同一条直线上
    if (point1.IsOnOneLine(point2, point3))
    {
        return ObjectId.Null;
    }
    //声明几何类的CircularArc3d对象
    CircularArc3d cArc = new CircularArc3d(point1, point2, point3);
    return db.AddCircleToModelSpace(cArc.Center, cArc.Radius);
}

绘制折现多段线

/// <summary>
/// 绘制折现多段线
/// </summary>
/// <param name="db">图形数据库</param>
/// <param name="isClosed">是否闭合</param>
/// <param name="constantWidth">线宽</param>
/// <param name="vertices">多段线顶点,可变参数</param>
/// <returns>ObjectId</returns>
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);
}

绘制矩形

/// <summary>
/// 绘制矩形
/// </summary>
/// <param name="db"></param>
/// <param name="point1"></param>
/// <param name="point2"></param>
/// <returns></returns>
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);
}

绘制椭圆

/// <summary>
/// 绘制椭圆
/// </summary>
/// <param name="db">图形数据库</param>
/// <param name="center">椭圆中心</param>
/// <param name="majorRadius">长轴长度</param>
/// <param name="shortRadius">短轴长度</param>
/// <param name="degree">长轴与X轴夹角,角度值</param>
/// <param name="startDegree">起始角度</param>
/// <param name="endDegree">终止角度</param>
/// <returns>ObjectId</returns>
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);
}

/// <summary>
/// 绘制椭圆
/// </summary>
/// <param name="db">图形数据库</param>
/// <param name="majorPoint1">长轴端点1</param>
/// <param name="majorPoint2">长轴端点2</param>
/// <param name="shortRadius">短轴的长度</param>
/// <returns>ObjectId</returns>
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);
}

/// <summary>
/// 绘制椭圆
/// </summary>
/// <param name="db">图形数据库</param>
/// <param name="point1">所在矩形的顶点1</param>
/// <param name="point2">所在矩形的顶点2</param>
/// <returns>ObjectId</returns>
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);
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

周杰伦fans

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值