004集—— txt格式坐标写入cad(CAD—C#二次开发入门)
如图所示原始坐标格式,xy按空格分开,将坐标按顺序在cad中画成多段线:
坐标xy分开并按行重新输入txt,效果如下:
代码如下 :
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Runtime;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using AcTools;
using Autodesk.AutoCAD.Geometry;
using System.IO;
namespace Acdemo
{
public class Acdemo
{
private void Addl(Entity ent )
{
Database db = HostApplicationServices.WorkingDatabase;
using (Transaction tr = db.TransactionManager .StartTransaction ())
{
BlockTable bt = (BlockTable)tr.GetObject (db.BlockTableId ,OpenMode .ForRead );
BlockTableRecord btr = (BlockTableRecord)tr.GetObject(bt[BlockTableRecord .ModelSpace ],OpenMode.ForWrite );
btr.AppendEntity (ent);
tr.AddNewlyCreatedDBObject(ent,true );
tr.Commit ();
}
}
[CommandMethod("xx")]
public void Demo()
{
Database db = HostApplicationServices.WorkingDatabase;
string filename = @"E:\d\8.txt";
string filename1 = @"E:\d\999.txt";
try
{
File.Delete(filename1);
string contents = File.ReadAllText(filename);
List<List<string>> list = new List<List<string>>();
Polyline pl = new Polyline();
pl.Closed = true;
pl.ColorIndex = 3;
string[] cont = contents.Split(new char[] { ' ', '\n' });
double x, y;
File.AppendAllLines(filename1, cont);
for (int i = 0; i < cont.Length / 2; i++)
{
x = Convert.ToDouble (cont[2*i]);
y = Convert.ToDouble(cont[2*i+1]);
pl.AddVertexAt(i, new Point2d(x, y),0.0,0.0,0.0);
}
Addl (pl);
}
catch (System.Exception)
{
throw;
}
}
}
}
其中有个封装函数addl,为封装事务写入实体到数据库的函。
若输入坐标格式有误,则用以下程序,可在命令行提示错误信息:
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Runtime;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using AcTools;
using Autodesk.AutoCAD.Geometry;
using System.IO;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.ApplicationServices;
namespace Acdemo
{
public class Acdemo
{
private void Addl(Entity ent )
{
Database db = HostApplicationServices.WorkingDatabase;
using (Transaction tr = db.TransactionManager .StartTransaction ())
{
BlockTable bt = (BlockTable)tr.GetObject (db.BlockTableId ,OpenMode .ForRead );
BlockTableRecord btr = (BlockTableRecord)tr.GetObject(bt[BlockTableRecord .ModelSpace ],OpenMode.ForWrite );
btr.AppendEntity (ent);
tr.AddNewlyCreatedDBObject(ent,true );
tr.Commit ();
}
}
[CommandMethod("xx")]
public void Demo()
{
Database db = HostApplicationServices.WorkingDatabase;
string filename = @"E:\d\8.txt";
string filename1 = @"E:\d\999.txt";
try
{
File.Delete(filename1);
string contents = File.ReadAllText(filename);
List<List<string>> list = new List<List<string>>();
Polyline pl = new Polyline();
pl.Closed = true;
pl.ColorIndex = 3;
string[] cont = contents.Split(new char[] { ' ', '\n' });
double x, y;
File.AppendAllLines(filename1, cont);
for (int i = 0; i < cont.Length / 2; i++)
{
//x = Convert.ToDouble (cont[2*i]);
//y = Convert.ToDouble(cont[2*i+1]);
bool bx = double.TryParse(cont[2*i], out x);
bool by = double.TryParse (cont[2*i + 1],out y);
if (bx==false || by == false )
{
Editor ed = Application .DocumentManager.MdiActiveDocument .Editor ;
ed.WriteMessage($"有错误,{cont[2 * i]},{cont[2 * i+1]}");
}
pl.AddVertexAt(i, new Point2d(x, y),0.0,0.0,0.0);
}
Addl (pl);
}
catch (System.Exception)
{
throw;
}
}
}
}