公司来了一批图纸,里面有一部分内容需要复制到excel中,几百张来图每一张都

手工复制,烦死了。编写一个CAD插件,自动导出文本,简单记录在下面。

想法是:

1.输入命令,选择所有dwg文件

2.挨个处理dwg文件,生成同名的txt文件保存文本

基本思路是用Database.ReadDwgFile 读取dwg文件,因为这样可以不用显示文档,可以提高速度;

        [CommandMethod("GetText")]
public void GetTextCST()
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "dwg files (*.dwg)|*.dwg|All files (*.*)|*.*";
ofd.FilterIndex = 1;
ofd.RestoreDirectory = true;
ofd.Multiselect = true; if(ofd.ShowDialog()== DialogResult.OK)
foreach (string fn in ofd.FileNames)
try
{
DoDwg2Csv(fn);
}
catch
{
File.AppendAllText("D:\\dwg2csv.txt", DateTime.Now.ToString("yyyy-MM-dd hh-mm-ss") + fn + "\n");
}
}

  

        private void DoDwg2Csv(string fn)
{
string csvname = fn + ".csv";
using (Database db = new Database(false, true))
{
db.ReadDwgFile(fn, FileOpenMode.OpenForReadAndAllShare, false, "");
db.CloseInput(true); using (Transaction tr = db.TransactionManager.StartTransaction())
{
// 模型空间
BlockTable blkTbl = tr.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
BlockTableRecord modelSpace = tr.GetObject(
blkTbl[BlockTableRecord.ModelSpace],
OpenMode.ForRead)
as BlockTableRecord; // 遍历模型空间,提取文字
List<DBText> txts = new List<DBText>();
foreach (ObjectId oid in modelSpace)
{
DBObject dbobj = tr.GetObject(oid, OpenMode.ForRead);
if (dbobj is Entity)
{
Entity entity = dbobj as Entity;
string enttype = entity.GetRXClass().Name;
if (enttype == "AcDbText")
{
DBText acText = entity as DBText;
if (acText.Position.X < 587 || acText.Position.Y < 115)//指定范围
continue;
txts.Add( acText );
}
}//if (dbobj is Entity)
}//foreach (ObjectId oid in modelSpace) txts.Sort((t1, t2) => t1.Position.X >= t2.Position.X ? 1 : -1); for (int i = 0; i < txts.Count;i++)
File.AppendAllText(csvname, txts[i].TextString+"\r\n", Encoding.Default);
}//using
}//using
}

  

批量输出dwg文件中的文本的更多相关文章

  1. 【转】【整理】将Linux脚本中的正常输出,警告,错误等信息输出到文件中

     本文来自:http://blog.csdn.net/woshinia/article/details/18040063   很早以前  编译的时候 就在用 2>&1,但是一直没有生成一 ...

  2. Linux命令行批量替换多文件中的字符串【转】

    Linux命令行批量替换多文件中的字符串[转自百度文库] 一种是Mahuinan法,一种是Sumly法,一种是30T法分别如下: 一.Mahuinan法: 用sed命令可以批量替换多个文件中的字符串. ...

  3. 将Linux下编译的warning警告信息输出到文件中[整理笔记]

    Linux中,脚本语言环境中,即你用make xxx即其他一些普通linux命令,比如ls,find等,不同的数字,代表不同的含义: 数字 含义 标准叫法0 标准输入  stdin = standar ...

  4. 【转载】 C#往文件中追加文本内容信息

    在C#的文件相关操作中,往已有的文件中追加相关内容信息也是常有的操作,例如我们在写网站日志文件的时候,很多时候是1天的日志存放在一个txt文件中,此时就涉及到往原有文件中追加写入文本内容信息,追加文本 ...

  5. Java的实验程序之输出单个文件中的前 N 个最常出现的英语单词

    日期:2018.10.11 星期四 博客期:016 题目:输出单个文件中的前 N 个最常出现的英语单词,并输出到文本文件中 在程序运行之前,我试着先写了字符的字母的总结,加载代码如下: //如下是第一 ...

  6. shell编程学习笔记(七):Shell中将指定内容输出到文件中

    我们这里把echo要打印的内容输出到文件中 以下蓝色字体部分为Linux命令,红色字体的内容为输出的内容: # cd /opt/scripts # vim script06.sh 开始编写script ...

  7. 将windows控制台内容输出到文件中

    将windows控制台内容输出到文件中 dir>c:/file.txt 2>&1   对应的java  class   >c:/file.txt 2>&1   ...

  8. fprintf输出到文件中,sprintf输出到字符串中. 如: fprintf(fp,"%s",name); fp为文件指针 sprintf(buff,"%s",name); buff为字符数组

    fprintf输出到文件中,sprintf输出到字符串中. 如: fprintf(fp,"%s",name); fp为文件指针 sprintf(buff,"%s" ...

  9. 怎样批量删除PDF文件中的注释

    日常我们在阅读一些PDF文章时候,我们会发现有些PDF文章带有非常多的注释,显得非常不美观,影响了阅读体验.那么PDF文章里的批注应该怎么进行删除呢?怎样批量删除PDF文件中的注释?   操作教程: ...

随机推荐

  1. C高级第二次PTA作业

    6-7 删除字符串中数字字符 1.设计思路: (1)算法: 第一步:定义一个字符数组item,输入一个字符串赋给字符数组item.调用函数delnum, 第二步:在函数delnum中定义循环变量i=0 ...

  2. [LeetCode&Python] Problem 896. Monotonic Array

    An array is monotonic if it is either monotone increasing or monotone decreasing. An array A is mono ...

  3. golang channel 总结

    1.未初始化的channel读,阻塞 package main import ( "fmt" "time" ) func main() { var ch cha ...

  4. day03用户交互、基本数据类型、运算符

    用户交互 在实际应用中,我们经常需要用户输入相应信息,根据用户输入信息进行反馈,此时我们需要input/output信息 python中提供了便捷的输入方法input()和print() 在pytho ...

  5. java list 的遍历

    import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.I ...

  6. lesson4-图像分类-小象cv

    CNN网络进化:AlexNet->VGG->GoogleNet->ResNet,深度8->19->22->152GoogleNet:Lsplit->trans ...

  7. Java之从头开始编写简单课程信息管理系统

    编写简单的课程管理系统对于新手并不友好,想要出色的完成并不容易以下是我的一些经验和方法 详情可参考以下链接: https://www.cnblogs.com/dream0-0/p/10090828.h ...

  8. java学习之动手实验

     一, 1,JAVA的基本运行单位是类 2,类的成员:成员变量,构造方法,普通方法和内部类 3,成员变量种类:字符类型:char        布尔类型:boolean     数值类型:byte, ...

  9. 用户密码管理和 su 命令

    1.passwd root 用户给自己改 密码,直接 输入 passwd  就可以了 若是给其它用户修改密码,就需要 passwd  user_name 用户锁定和解锁 passwd -l user_ ...

  10. JavaSE笔记

    this关键字 哪个对象调用方法,方法定义中的this即为该对象的引用! static关键字 使用static声名的成员变量为静态成员变量,在第一次使用的时候被初始化,static成员变量只有一份 使 ...