批量输出dwg文件中的文本
公司来了一批图纸,里面有一部分内容需要复制到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文件中的文本的更多相关文章
- 【转】【整理】将Linux脚本中的正常输出,警告,错误等信息输出到文件中
本文来自:http://blog.csdn.net/woshinia/article/details/18040063 很早以前 编译的时候 就在用 2>&1,但是一直没有生成一 ...
- Linux命令行批量替换多文件中的字符串【转】
Linux命令行批量替换多文件中的字符串[转自百度文库] 一种是Mahuinan法,一种是Sumly法,一种是30T法分别如下: 一.Mahuinan法: 用sed命令可以批量替换多个文件中的字符串. ...
- 将Linux下编译的warning警告信息输出到文件中[整理笔记]
Linux中,脚本语言环境中,即你用make xxx即其他一些普通linux命令,比如ls,find等,不同的数字,代表不同的含义: 数字 含义 标准叫法0 标准输入 stdin = standar ...
- 【转载】 C#往文件中追加文本内容信息
在C#的文件相关操作中,往已有的文件中追加相关内容信息也是常有的操作,例如我们在写网站日志文件的时候,很多时候是1天的日志存放在一个txt文件中,此时就涉及到往原有文件中追加写入文本内容信息,追加文本 ...
- Java的实验程序之输出单个文件中的前 N 个最常出现的英语单词
日期:2018.10.11 星期四 博客期:016 题目:输出单个文件中的前 N 个最常出现的英语单词,并输出到文本文件中 在程序运行之前,我试着先写了字符的字母的总结,加载代码如下: //如下是第一 ...
- shell编程学习笔记(七):Shell中将指定内容输出到文件中
我们这里把echo要打印的内容输出到文件中 以下蓝色字体部分为Linux命令,红色字体的内容为输出的内容: # cd /opt/scripts # vim script06.sh 开始编写script ...
- 将windows控制台内容输出到文件中
将windows控制台内容输出到文件中 dir>c:/file.txt 2>&1 对应的java class >c:/file.txt 2>&1 ...
- fprintf输出到文件中,sprintf输出到字符串中. 如: fprintf(fp,"%s",name); fp为文件指针 sprintf(buff,"%s",name); buff为字符数组
fprintf输出到文件中,sprintf输出到字符串中. 如: fprintf(fp,"%s",name); fp为文件指针 sprintf(buff,"%s" ...
- 怎样批量删除PDF文件中的注释
日常我们在阅读一些PDF文章时候,我们会发现有些PDF文章带有非常多的注释,显得非常不美观,影响了阅读体验.那么PDF文章里的批注应该怎么进行删除呢?怎样批量删除PDF文件中的注释? 操作教程: ...
随机推荐
- spring boot项目,application.properties配置文件下中文乱码解决方案
转自:https://blog.csdn.net/qq_40408534/article/details/79831807 如以上,application.properties文件下中文乱码.发生乱码 ...
- Redis持久化--RDB+AOF(转)
1.Redis两种持久化方式 RDB 执行机制:快照,直接将databases中的key-value的二进制形式存储在了rdb文件中 优点:性能较高(因为是快照,且执行频率比aof低,而且rdb文件中 ...
- Python之路,第十一篇:Python入门与基础11
python3 函数2 全局变量:一直存在 局部变量:函数执行时存在,执行完毕后销毁: lambda 表达式(又称匿名函数表达式) 作用: 创建一个匿名(无名)函数对象, 同 def 类似但不提供函 ...
- Cython 使用
链接: Cython是一个快速生成Python扩展模块的工具,从语法层面上来讲是Python语法和C语言语法的混血,当Python性能遇到瓶颈时,Cython直接将C的原生速度植入Python程序,这 ...
- python中把数据存入csv中
import csv # 如果不添加newline=""的话,就会每条数据中间都会有空格行 with open("test.csv","w" ...
- Unity调用Window提示框Yes/No(英文提示窗)
Unity调用Windows弹提示框 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- ...
- java关键字详解----static
Java Static关键字详解 提起static关键字,相信大家绝对不会陌生,但是,想要完全说明白,猛的一想,发现自己好像又说不太明白... ...比方说,昨天被一个同学问起的时候... ... ...
- 使用w uptime vmstat top sar nload 等命令查看系统负载
1. w 和uptime,查看cpu的使用率: 2.vmstat 命令,查看更细的物理设备使用状况: 3.top 命令: top -c 可具体查看命令及路径: top -bn1 静太显示一条命令, ...
- 实验吧—密码学——WP之 困在栅栏里的凯撒
首先我们研究题目.栅栏:凯撒 还发现一个数字“6”,那么我们很容易就有一个解题思路 对这段字符进行栅栏解密再进行凯撒解密 我们都知道,栅栏解密的关键就是栏数,根据题目中我们发现的信息,这段字符串是12 ...
- pythoy-生成器
生成器:只有在调用的时候才会生成相应的数据(调用到这个数据的时候才会生成这个数据,没有调用到时就没有这个数据)只记录数据的当前位置 生成器不能像普通的列表一样,通过下标或者切片的方式去取生成器只能通过 ...