如图所示,CAD图中line和pline坐标和图层数据导出到txt文本。
程序运行后导出如下文件:
附部分源代码:
public static void DwgToTxt(this Database db)
{
// var db = Z.db;
var ed = Z.ed;
//Point3d pt ;
BlockData data = new BlockData();
List<BlockData> datas = new List<BlockData>();
List<string> str = new List<string>();
using (var tr = db.TransactionManager.StartTransaction())
{
var bt = tr.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
var btr = tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForRead) as BlockTableRecord;
int i = 0;
int linenum = 1;
int plinenum = 1;
foreach (var obj in btr)
{
//Double x;
//double y;
//Point3d pt = new Point3d(x, y, 0);
Entity ent = obj.GetObject(OpenMode.ForRead) as Entity;
if (ent != null)
{
if (ent is Curve)
{
if (ent is Line)
{
str.Add("\n" + linenum + ": Line:\n");
Line line = (Line)ent;
data.layerName = "图层:" + line.Layer + "\n";
data.X = line.StartPoint.X.ToString("F3");
data.Y = line.StartPoint.Y.ToString("F3");
datas.Add(data);
str.Add(datas[i].layerName + datas[i].X + "," + datas[i].Y);
i = i + 1;
linenum = linenum + 1;
}
else if (ent is Polyline)
{
str.Add("\n" + plinenum + "PLine:\n");
Polyline pline = (Polyline)ent;
for (int k = 0; k < pline.NumberOfVertices; k++)
{
// Polyline pline = (Polyline)ent;
data.layerName = "图层:" + pline.Layer + "\n";
data.X = pline.GetPoint3dAt(k).X.ToString("F3") ;
data.Y = pline.GetPoint3dAt(k).Y.ToString("F3");
datas.Add(data);
str.Add(datas[i].layerName + datas[i].X + "," + datas[i].Y);
i = i + 1;
}
plinenum = plinenum + 1;
}
}
}
}
}
SaveFileDialog savefd;
DialogResult saveDlgRes;
db.Sfd(out savefd, out saveDlgRes);
if (saveDlgRes == Wform.DialogResult.OK)
{
string[] contents = new string[str.Count];
for (int j = 0; j < datas.Count; j++)
{
contents[j] = str[j];//datas[j].layerName + ",\n" + datas[j].X + "\n" + datas[j].Y;
}
File.WriteAllLines(savefd.FileName, contents);
}
}
部分方法为个人封装方法,如打开文件对话框,保存文件对话框。部分字段也进行了封装,如定义数据库database db等。
CAD二开插件定制:↓↓↓