读取点坐标简单地制作dxf文件(C#)

有时候我们需要在测量的小程序中加入一个功能,就是生成dxf文件。除了调用各种库,就是要自己看过dxf文件的组码,如果不能使用第三方的东西,那我们就可以用组码中最简单直接的部分来完成生成dxf文件的工作

  1. 这是我们读入的‘控制点.dat’,用datagridview控价展示出了它们的xyz坐标
    在这里插入图片描述
  2. 我们还可以在程序界面中画出来,但这个不是关键了,就不管了,主要看看生成的dxf文件。这个点我没瞄准,左下方的坐标是54.9的6.几的0,就是对应上面读入的kz2的坐标,应该是没问题了
    在这里插入图片描述
  3. 简单生成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
发布了39 篇原创文章 · 获赞 48 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_39798423/article/details/86764881