作为《使用Python创建AutoCAD DXF文档》的姊妹篇,本文介绍用Python读取DXF

==================================================================================================================================================================================================================

1. 老规矩

pip install dxfgrabber

2.获取图层

首先用AutoCAD画一个图,然后导出为DXF格式。

这个图有两个图层,图层0和自定义的Mylayer。图层0有一些线段,图层Mylayer有一个圆和一个圆弧。

dxfgrabber可以读取多个版本的DXF,这里,把这个工程保存为R12 DXF,起名为『mydraw.dxf』

import dxfgrabber

dxf = dxfgrabber.readfile("mydraw.dxf")

for layer in dxf.layers:

print(layer.name,layer.color,layer.linetype)

得到输出为

(u'0', 7, u'CONTINUOUS')

(u'MYLAYER', 5, u'CONTINUOUS')

3.获取图形

在DXF中,所有的图形(Entity)都『打散』在dxf文件中,而不是与图层间形成层级关系。图形所在的层是通过图形的layer属性得到的。

import dxfgrabber

dxf = dxfgrabber.readfile("mydraw.dxf")

for e in dxf.entities:

print(e.dxftype,e.layer)

if e.dxftype == 'LINE':

print (e.start,e.end)

if e.dxftype == 'CIRCLE':

print (e.center,e.radius)

if e.dxftype == 'ARC':

print (e.center,e.radius,e.start_angle,e.end_angle)

对于线的端点、圆心之类的属性,点坐标均为三维的(x,y,z)形式。上述程序的输出为:

(u'LINE', u'0')

((0.0, 500.0, 0.0), (700.0, 500.0, 0.0))

(u'LINE', u'0')

((700.0, 500.0, 0.0), (1000.0, 0.0, 0.0))

(u'LINE', u'0')

((1000.0, 0.0, 0.0), (0.0, 250.0, 0.0))

(u'LINE', u'0')

((0.0, 250.0, 0.0), (0.0, 500.0, 0.0))

(u'CIRCLE', u'MYLAYER')

((1500.0, 800.0, 0.0), 450.0)

(u'ARC', u'MYLAYER')

((3450.0, 700.0, 0.0), 750.0, 180.0, 42.0)

4. 获取图块

下面在AutoCAD里创建一个图块,并插入2个图块。由于定义的图形也转换成了图块,所以现在应该有3个图块。

作为图块插入到绘图中的图形,其类型是INSERT。可以通过其name属性得到其图块的名称,通过其insert属性得到其位置。

import dxfgrabber

dxf = dxfgrabber.readfile("mydraw.dxf")

for e in dxf.entities:

print(e.dxftype,e.name,e.insert)

运行结果

(u'INSERT', u'MYBLOCK', (0.0, 0.0, 0.0))

(u'INSERT', u'MYBLOCK', (2000.0, 0.0, 0.0))

(u'INSERT', u'MYBLOCK', (3000.0, 0.0, 0.0))

用以下方法得到所有的block:

import dxfgrabber

dxf = dxfgrabber.readfile("mydraw.dxf")

for b in dxf.blocks:

print(b.name)

对于每一个block对象,可以直接用枚举的方法得到其包含的图形:

import dxfgrabber

dxf = dxfgrabber.readfile("mydraw.dxf")

myblock = dxf.blocks['MYBLOCK']

for e in b:

print (e.dxftype)

得到

CIRCLE

POLYLINE

5. 总结

dxfgrabber的功能很强大,但是由于1. DXF是纯文本格式 2. dxfgrabber是纯Python实现的,故在读取大型设计的时候,可能力不从心。在这种情况下,可以考虑使用Python的COM接口。

python dxf_使用Python读取AutoCAD DXF文档相关推荐

  1. python用于cad_使用Python读取AutoCAD DXF文档

    作为<使用Python创建AutoCAD DXF文档>的姊妹篇,本文介绍用Python读取DXF ============================================= ...

  2. python读取cad表格_使用Python读取AutoCAD DXF文档

    作为<使用Python创建AutoCAD DXF文档>的姊妹篇,本文介绍用Python读取DXF ============================================= ...

  3. Python使用标准库zipfile提取docx文档中所有图片

    清华科技大讲堂免费直播课预告: 免费直播课|Python数据可视化与科学计算可视化案例分享,5月28日晚20:00-21:30 ============ 哔哩哔哩网站免费视频观看地址: 董老师在哔哩哔 ...

  4. C#培训2019-9-30第十课 Dxf转档 读取DXF文档 读取圆信息 生成 NC加工档

    DXF格式资料 DXF文档原来是AutoCAD的专用格式,后来开发了.因此格式内容可以直接查看AutoCAD给出的帮助文档:http://docs.autodesk.com/ACD/2011/CHS/ ...

  5. Python借助jieba包对中文txt文档去停用词、分词

    Python借助jieba包对中文txt文档去停用词.分词` import jieba# 创建停用词list def stopwordslist(filepath):stopwords = [line ...

  6. 孤荷凌寒自学python第五十四天使用python来删除Firebase数据库中的文档

    孤荷凌寒自学python第五十四天使用python来删除Firebase数据库中的文档 (完整学习过程屏幕记录视频地址在文末) 今天继续研究Firebase数据库,利用google免费提供的这个数据库 ...

  7. Python量化交易平台:JQData | API使用文档(转)

    Python量化交易平台:JQData | API使用文档(转) #原文地址:https://www.joinquant.com/help/api/help?name=JQData JQData说明书 ...

  8. python连接mysql输出数据库结构docx文档

    python连接mysql输出数据库结构docx文档-Python文档类资源-CSDN下载

  9. python pyh模块下载_PyH首页、文档和下载 - 生成HTML页面的Python模块 - OSCHINA - 中文开源技术交流社区...

    PyH 是一个用来生成HTML页面的Python模块,使用面向对象的方式,HTML的标签都会对应一个Python的对象,输出的HTML文档排版良好,易于阅读. 示例代码: from pyh impor ...

  10. 基于pdf2docx模块Python实现批量将PDF转Word文档(安装+完整代码教程)

    PDF文件是一种常见的文档格式,但是在编辑和修改时不太方便,因为PDF本质上是一种静态的文档格式.因此,有时候我们需要将PDF文件转换成Word格式,以便更好地编辑和修改文档.在本篇文章中,我们将介绍 ...

最新文章

  1. ACMNO.35 C语言-宏润年 给年份year,定义一个宏,以判别该年份是否闰年。提示:宏名可以定义为LEAP_YEAR,形参为y,既定义宏的形式为 #define LEAP_YEAR(y)
  2. c++ 窗体上输出文字_C/C++经典面试题
  3. springcloud 与springboot的依赖关系以及版本的选择
  4. Android源码打包命令
  5. 0009:err:listview:LISTVIEW_WindowProc unknown msg 108c问题解决
  6. 如何实现 asp.net core 安全优雅退出 ?
  7. 国家开放大学本科计算机应用基础,【(精华版)最新国家开放大学电大本科《计算机应用基础》网络课网考形考作业一及三试题答案】.docx...
  8. c#打印程序原码_C#程序打印新行
  9. ”0元中标的商业逻辑“ -- 如何更好防范项目风险(北京软件造价评估技术创新联盟:李培圣)...
  10. 如何卸载 Internet Explorer 7
  11. struts2+json(3)
  12. VM12即VMware Workstation 12 序列号
  13. SSM框架---开发免费小说网站(h5+电脑端)
  14. 如何使用计算机管理员账户,如何使用管理员身份运行程序【图解】
  15. 苹果笔记本突然开机黑屏
  16. 兰斯洛特·δ零式·开发计划
  17. fetch_array()与fetch_assoc()的用法
  18. 从投资人发现“新大陆”,看“产融星城”为何成?
  19. 参考文献格式要首行缩进吗_参考文献顶格写吗
  20. Note For Linux By Jes(20)-Linux 核心编译与管理

热门文章

  1. 台式机主板常见接口资料
  2. 不要让采购欺诈吃掉你的利润
  3. 蓝桥杯就要开赛了,填空题还不会?我教你一篇学会填空题,从此填空满分,信心大涨
  4. Virtual Table — RTTI — typeinfo dynamic_cast 模板编程 orocos OperationCaller 类的设计
  5. ruby 安装问题的 一二事
  6. chrome视频无法播放的解决方法(Solve the problem of Google player cannot be played normally)
  7. X99-DELUXE II 无线网卡linux驱动RHEL8.5-centos8.5
  8. Unity Android Ios 微信SDK 接入
  9. 使用Resnet网络对人脸图像分类识别出男女性别(包含数据集制作+训练+测试)
  10. CIO40: IT 人之读书与家庭