读取点坐标简单地制作dxf文件(C#)
有时候我们需要在测量的小程序中加入一个功能,就是生成dxf文件。除了调用各种库,就是要自己看过dxf文件的组码,如果不能使用第三方的东西,那我们就可以用组码中最简单直接的部分来完成生成dxf文件的工作
- 这是我们读入的‘控制点.dat’,用datagridview控价展示出了它们的xyz坐标
- 我们还可以在程序界面中画出来,但这个不是关键了,就不管了,主要看看生成的dxf文件。这个点我没瞄准,左下方的坐标是54.9的6.几的0,就是对应上面读入的kz2的坐标,应该是没问题了
- 简单生成dxf的代码如下,就是用savefiledialog选择保存位置,然后弄个文本往这个里面写简单的组码就行了,最后保存的时候存为dxf就好了
// 利用.dxf的lisp组码来保存txt为dxf文件
public static void SaveDxf(List<PointInfo> points, string filepath)
{
StreamWriter sw = new StreamWriter(filepath); // 打开文件流
// 这上面都可以看成设置
sw.WriteLine("0"); // 0在lisp组码中表示开始组码
sw.WriteLine("SECTION"); // 与后面的ENDSEC对应,类似于{}
sw.WriteLine("2");
sw.WriteLine("HEADER");
sw.WriteLine("0");
sw.WriteLine("ENDSEC");
for (int i = 0; i < LevelPro.Points.Count - 1; ++i)
{
sw.WriteLine("0");
sw.WriteLine("SECTION");
sw.WriteLine("2");
sw.WriteLine("ENTITIES");
sw.WriteLine("0");
sw.WriteLine("LINE");
sw.WriteLine("100");
sw.WriteLine("AcDbEntity");
sw.WriteLine("8");
sw.WriteLine("0");
sw.WriteLine("100");
sw.WriteLine("AcDbLine");
sw.WriteLine("10"); // 起点X坐标
sw.WriteLine(points[i].startx);
sw.WriteLine("20"); // 起点Y坐标
sw.WriteLine(points[i].starty);
sw.WriteLine("11"); // 终点X坐标
sw.WriteLine(points[i].endx);
sw.WriteLine("21"); // 终点Y坐标
sw.WriteLine(points[i].endy);
sw.WriteLine("0");
sw.WriteLine("ENDSEC"); // 对应SECTION
}
sw.WriteLine("0");
sw.WriteLine("EOF"); // 文件结束
sw.Close(); // 关闭文件流
}
这个dxf文件的组码如下,比起查看cad自己生成的dxf文件,这个组码理解下已经非常好记了
0
SECTION
2
HEADER
0
ENDSEC
0
SECTION
2
ENTITIES
0
LINE
100
AcDbEntity
8
0
100
AcDbLine
10
55.0
20
33.0
11
55.0
21
7.0
0
ENDSEC
0
SECTION
2
ENTITIES
0
LINE
100
AcDbEntity
8
0
100
AcDbLine
10
45.0
20
63.0
11
45.0
21
13.0
0
ENDSEC
0
EOF