1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Cad二次开发添加图形到数据库

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

时间:2023-03-06 18:38:41

相关推荐

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);}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。