看图的时候喜欢在图上直接标注意见,但是如果还要再把意见一行一行的导出到word里面就很麻烦,在网上看了一个审图软件,报价要980,而且那个审图意见做的太复杂了。
我的需求就是把图上标的单行文字和多行文字直接导出来就行,因此,采用C#写了这个程序。
不多说,直接上图,上代码。
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Net.Mime.MediaTypeNames;
using System.Xml.Linq;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Geometry;
using System.IO;
namespace dcyj
{
public class Class1
{
//审图意见导出,内置了默认路径和默认图层,避免重复劳动
[CommandMethod("stjjdc")]
public void BlockInLayerCAD()
{
Document arcdoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
Database arcdb = HostApplicationServices.WorkingDatabase;
Editor ed = arcdoc.Editor;
// 创建文本
StreamWriter txtWtriter = new StreamWriter(Stream.Null);
if (File.Exists("E:\\24审图意见\\temple_yjdc.txt"))
{
File.Delete("E:\\24审图意见\\temple_yjdc.txt");
}
String layerforexp = "00000styj";
ed.WriteMessage("\n 先把文字都调整到00000图层,文本保持目录为:E:\\24审图意见\\temple_yjdc.txt");
using (Transaction trans = arcdb.TransactionManager.StartTransaction())
{
txtWtriter = File.AppendText("E:\\24审图意见\\temple_yjdc.txt");
txtWtriter.WriteLine("以下意见详见CAD文件批注。");
LayerTable lt = (LayerTable)trans.GetObject(arcdb.LayerTableId, OpenMode.ForRead);
if (!(lt.Has(layerforexp)))
{
ed.WriteMessage("\n 找不图层:00000styj,请先把文字都调整到00000styj图层");
}
else
{
ed.WriteMessage("\n 已找到图层:00000styj");
BlockTableRecord ltr = (BlockTableRecord)trans.GetObject(arcdb.CurrentSpaceId, OpenMode.ForRead);
String stryj = "";
String enttype = "";
int index_YJ = 1;
foreach (ObjectId objectid in ltr)
{
Entity ent = (Entity)trans.GetObject(objectid, OpenMode.ForRead);
enttype= ent.GetType().Name;
// ed.WriteMessage("\n enttype是:"+ enttype);
if (enttype.Equals("MText")&&ent.Layer.Equals(layerforexp)) {
stryj = index_YJ+(ent as MText).Text.ToString();
txtWtriter.WriteLine(stryj);
ed.WriteMessage("\n 文字内容是:" + stryj);
index_YJ++;
}
else if (enttype.Equals("DBText") && ent.Layer.Equals(layerforexp))
{
stryj = index_YJ + (ent as DBText).TextString.ToString();
txtWtriter.WriteLine(stryj);
ed.WriteMessage("\n 文字内容是:" + stryj);
index_YJ++;
}
}
}
trans.Commit();
txtWtriter.Flush();
txtWtriter.Close();
}
}
}
}