Auto CAD二次开发——折线多段线
学如逆水行舟,不进则退。 愿自己不忘初心,坚持积累。感谢大家的支持。本篇博客主要是学习多段不带圆弧的多段线。下一篇将学习带圆弧的多段线。
1、基础知识储备

多段线与之前的直线、圆弧、圆同属于Entity,这里我简单叙述一下多段线的继承关系:Polyline(多段线)->Curve(曲线)->Entity(实体)->DBObject(基础数据对象)->Drawable(图形)->RXObject,,因此都可以使用Database 图形数据库进行绘制。
2、绘制折线多段线
2.1底层逻辑
public Polyline(); public Polyline(int vertices);参数vertices表示顶点
除此之外,Polyline类库中分装了其他的方法:
1、public bool Closed { get; set; }//判断是否闭合
2、public void AddVertexAt(int index, Point2d pt, double bulge, double startWidth, double endWidth);//添加顶点
参数1:顶点的序号;参数2:顶点(Point2d类型);参数3:凸度(主要用于绘制圆弧,直线为0);参数4:起始线宽;参数5:终止线宽。
3、public double ConstantWidth { get; set; }//全局线宽
2.2不封装代码:
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.Runtime;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace CAD_CreateEntity
{public class PolyClass{[CommandMethod("CreatePolyline")]public void CreatePolyLine(){Polyline pl = new Polyline();Point2d p1 = new Point2d(100, 100);Point2d p2 = new Point2d(200, 100);Point2d p3 = new Point2d(200, 200);pl.AddVertexAt(0, p1, 0, 0, 0);pl.AddVertexAt(1, p2, 0, 0, 0);pl.AddVertexAt(2, p3, 0, 0, 0);pl.Closed = true;pl.ConstantWidth = 10;//声明图形数据库Database db = HostApplicationServices.WorkingDatabase;db.AddEntityToModelSpace(pl);}}
}
运行结果:

2.3分装代码:
函数封装:
/// <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);}
函数调用:
//声明图形数据库Database db = HostApplicationServices.WorkingDatabase;db.AddPolyLineToModelSpace(true, 0, new Point2d(10, 10), new Point2d(50, 10), new Point2d(100, 20));db.AddPolyLineToModelSpace(true, 0, new Point2d(10, 50), new Point2d(50, 50), new Point2d(100, 60));
运行结果:

