//绘制带弧线的多段线 输入每个点和它后面圆弧的角度(180°的圆弧就是 Math.PI),如果没有圆弧则用null
public static ObjectId MakePolylineWithArc(List<Tuple<Point2d,double?>> ptAngleTable,string layername = null)
{
// 获取当前文档和数据库
Document acDoc = Application.DocumentManager.MdiActiveDocument;
Database acCurDb = acDoc.Database;
// 启动事务
using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
{
// 以读模式打开Block表
BlockTable acBlkTbl;
acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead) as BlockTable;
// 以写模式打开Block表记录Model空间
BlockTableRecord acBlkTblRec;
acBlkTblRec = acTrans.GetObject(acCurDb.CurrentSpaceId, OpenMode.ForWrite) as BlockTableRecord;
// 创建一个轻量级多段线
Polyline acPoly = new Polyline();
//遍历所有的点
int nlen = ptAngleTable.Count;
for (int i = 0; i < nlen; ++i)
{
var angle = ptAngleTable[i].Item2;
acPoly.AddVertexAt(i, ptAngleTable[i].Item1, angle==null? 0:Math.Tan(angle.Value/4.0), 0, 0);
}
// 将新对象添加到块表记录和事务
acBlkTblRec.AppendEntity(acPoly);
acTrans.AddNewlyCreatedDBObject(acPoly, true);
//acPoly.ConstantWidth = width;//设置宽度
//添加图层
if (layername != null)
{
LayerTools.AddLayer(acCurDb,layername);
//CreateLayer(layername, 0);
acPoly.Layer = layername;
}
//256代表颜色随图层
//acPoly.ColorIndex = colorindex;
//acPoly.Closed = Closeflag;
// 保存新对象到数据库
acTrans.Commit();
return acPoly.ObjectId;
}
}
cad net 绘制带圆弧的多段线
最新推荐文章于 2024-04-30 16:02:46 发布