python:ezdxf——如何使用

2023-11-02

官方文档:https://ezdxf.readthedocs.io/en/master/howto/index.html

一、基本文件

一般先决条件:

import ezdxf
doc = ezdxf.readfile("your_dxf_file.dxf")
msp = doc.modelspace()

1、设置/获取标头变量

ezdxf有一个接口来获取和设置标头变量:

doc.header['VarName'] = value
value = doc.header['VarName']

2、设置DXF绘图单元

使用此头变量设置CAD应用程序的默认单元,打开DXF文件。此设置与ezdxfAPI调用,对于长度值和坐标是不单位的,对于角度(在大多数情况下)是十进制度。

成套绘图单元:

$度量值控制当前绘图是否使用帝国或公制舱口模式和线型文件:

doc.header['$MEASUREMENT'] = 1
0 英语
1 公制

$LUNITS设置用于创建对象的线性单元格式:

doc.header['$LUNITS'] = 2
1 科学
2 十进制(默认)
3 工程学
4 建筑
5 分数

$AUNITS为角度设置单元格式:

doc.header['$AUNITS'] = 0
0 十进制
1 度/分/秒
2 格蕾
3 弧度

$INSUNITS设置AutoCAD设计中心块的默认绘图单元:

doc.header['$INSUNITS'] = 6
0 无单位
1
2
3 迈尔斯
4 毫米
5 厘米
6 米计
7 公里
8 微英寸
9 米尔斯
10 院子
11 安格罗斯
12 纳米级
13 微米
14 分度表
15 曲目
16 高度计
17 千兆
18 天文单位
19 光年
20 Parsecs
21 美国调查脚
22 美国调查英寸
23 美国调查场
24 美国调查英里

3、创建更具可读性的DXF文件(DXF漂亮打印机)

DXF文件是纯文本文件,您可以使用每个处理较大文件的文本编辑器打开这个文件。但是要快速获得你想要的信息并不是一件容易的事。

创建一个更具可读性的HTML文件(DXF漂亮打印机):

这将生成一个HTML文件。您的dxf_file.html与普通的DXF文件和DXF句柄相比,DXF实体之间的链接布局更好,这简化了DXF实体之间的导航。

在0.8.3版中更改:自ezdxf以来v0.8.3,一个名为dxfpp将添加到Python脚本路径:

usage: dxfpp [-h] [-o] [-r] [-x] [-l] FILE [FILE ...]

positional arguments:
  FILE             DXF files pretty print

optional arguments:
  -h, --help       show this help message and exit
  -o, --open       open generated HTML file with the default web browser
  -r, --raw        raw mode - just print tags, no DXF structure interpretation
  -x, --nocompile  don't compile points coordinates into single tags (only in
                   raw mode)
  -l, --legacy     legacy mode - reorders DXF point coordinates

4、为模型空间设置初始视图/缩放

若要显示以CAD应用程序窗口为中心的模型空间的任意位置,请将’*Active’Vport到这个位置。DXF属性dxf.center定义模型空间中的位置,dxf.height指定要查看的模型空间的区域。快捷功能:

doc.set_modelspace_vport(height=10, center=(10, 10))

二、DXF查看器

1、A 360查看器问题

Autodesk Web服务A 360似乎比AutoCAD桌面应用程序更挑剔,使用ezdxf支持的最新DXF版本可能会有所帮助,ezdxf支持的版本是DXF R2018(AC 1032)。

2、DXF实体不在查看器中显示

ezdxf如果不自动在实体中定位模型空间的主视图,则必须在TrueView 2020中执行“缩放到扩展”命令:
在这里插入图片描述
在Autodesk在线查看器中:
在这里插入图片描述
将这一行添加到代码中以重新定位主视图,调整中心(在模型空间坐标中)和高度(在绘图单元中)对您的需求的参数:

doc.set_modelspace_vport(height=10, center=(0, 0))

3、在AutoCAD加载时显示图像/XREFS

如果要添加具有与现有绘图相对路径的XREFS和图像,并且它们没有立即在AutoCAD中显示,请更改标头变量。 P R O J E C T N A M E = ′ ′ 到 ( 不 太 ) 解 决 这 个 问 题 。 用 于 d x f r 2004 及 更 高 版 本 的 e z d x f 模 板 有 PROJECTNAME=''到(不太)解决这个问题。用于dxf r 2004及更高版本的ezdxf模板有 PROJECTNAME=()dxfr2004ezdxfPROJECTNAME=’'作为默认值。

感谢大卫·布斯:

如果IMAGEDEF中的文件名包含完整路径(在AutoCAD中是绝对的),那么它将在加载时显示,否则在使用XREF管理器手动重新加载之前它不会显示(报告不可读)。

解决方法(在加载时显示图像)似乎是将完整的文件路径保存在DXF中,或者将其保存为DWG。

到目前为止,还没有在加载时显示具有相对路径的图像的解决方案。

4、为模型空间设置初始视图/缩放

若要显示以CAD应用程序窗口为中心的模型空间的任意位置,请将’*Active’Vport到这个位置。DXF属性dxf.center定义模型空间中的位置,dxf.height指定要查看的模型空间的区域。快捷功能:

doc.set_modelspace_vport(height=10, center=(10, 10))

三、DXF内容

一般先决条件:

import ezdxf
doc = ezdxf.readfile("your_dxf_file.dxf")
msp = doc.modelspace()

1、获取/设置块引用属性

块引用(Insert)可以具有附加属性(Attrib),这些都是简单的文本注释,并在块引用后面附加了一个关联的标记。

迭代所有附加的属性:

# get all INSERT entities with entity.dxf.name == "Part12"
blockrefs = msp.query('INSERT[name=="Part12"]')
if len(blockrefs):
    entity = blockrefs[0]  # process first entity found
    for attrib in entity.attribs:
        if attrib.dxf.tag == "diameter":  # identify attribute by tag
            attrib.dxf.text = "17mm"  # change attribute content

按标记获取属性:

diameter = entity.get_attrib('diameter')
if diameter is not None:
    diameter.dxf.text = "17mm"

2、将XDATA添加到实体

将XDATA添加为元组列表(组代码、值)set_xdata(),如果已经存在,则覆盖数据:

doc.appids.new('YOUR_APPID')  # IMPORTANT: create an APP ID entry

circle = msp.add_circle((10, 10), 100)
circle.set_xdata(
    'YOUR_APPID',
    [
        (1000, 'your_web_link.org'),
        (1002, '{'),
        (1000, 'some text'),
        (1002, '{'),
        (1071, 1),
        (1002, '}'),
        (1002, '}')
    ])

有关组代码的含义,请参见dxf参考部分。数字阶参考的DXF群码,有效组码在1000-1071范围内。

方法get_xdata()将实体的扩展数据返回为Tags对象。

3、从维度获取重写的DIMSTYLE值

一般来说Dimension样式和配置属性存储在Dimstyle实体,但是可以单独重写每个维度实体的每个属性,则由DimstyleOverride对象,如以下示例所示:

for dimension in msp.query('DIMENSION'):
    dimstyle_override = dimension.override()  # requires v0.12
    dimtol = dimstyle_override['dimtol']
    if dimtol:
        print(f'{str(dimension)} has tolerance values:')
        dimtp = dimstyle_override['dimtp']
        dimtm = dimstyle_override['dimtm']
        print(f'Upper tolerance: {dimtp}')
        print(f'Lower tolerance: {dimtm}')

这个DimstyleOverride对象返回基础DIMSTYLE对象的值,如果维度中的值未被覆盖,或None如果该值既没有在DIMSTYLE中定义,也没有在维度中定义。

4、覆盖维度的DIMSTYLE值

与上面相同,DimstyleOverride对象还支持重写DIMSTYLE值。但是,仅仅覆盖这些值并不会影响维度实体的图形表示,因为CAD应用程序只显示关联的匿名块,其中包含维度实体上的图形表示为简单的DXF实体。呼叫render方法DimstyleOverride对象重新创建此图形表示形式。ezdxf,但是ezdxf 不支持所有维度类型和DIMVARS,以及结果会有所不同来自AutoCAD或BricsCAD渲染。

dimstyle_override = dimension.override()
dimstyle_override.set_tolerance(0.1)

# delete associated geometry block
del doc.blocks[dimension.dxf.geometry]

# recreate geometry block
dimstyle_override.render()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python:ezdxf——如何使用 的相关文章

随机推荐

  • 20220128学习记录- 北交opencv基础

    1 模拟图像 空间采样与亮度量化 数字图像 空间分辨率 与采样间隔有关 亮度分辨率 与灰度级有关 2 图像存储 比特数 面积x灰度级的量化级别 注意是256灰度级不是乘256而是乘8 2的8次方 3 各类图像格式的特点与区别 4 灰度直方图
  • 什么是数据挖掘技术,基本概念是什么?

    随着计算机技术的发展 各行各业都开始采用计算机及相应的信息技术进行管理和运营 这使得企业生成 收集 存贮和处理数据的能力大大提高 数据量与日俱增 企业数据实际上是企业的经验积累 当其积累到一定程度时 必然会反映出规律性的东西 对企业来 堆积
  • JavaWeb-使用cookie完成两周内免登录功能

    欢迎页面 h2 欢迎页面 h2 br
  • 一文看懂异步 FIFO 架构(三) 双时钟的异步 FIFO

    目录 工作原理 方向标志 方向标志的实现 计算满和空 结论 往期系列博客 在本系列的第一篇文章中 我们看到了 FIFO 的一般架构 并分析了一个时钟的简单情况 该系列的第二部分描述了一种可能的双时钟设计的架构 在第三部分中 我们将探索另一种
  • Window操作系统基本知识

    windows系统 kernel32 dll是Windows 系统中非常重要的32位动态链接库文件 属于内核级文件 它控制着系统的内存管理 数据的输入输出操作和中断处理 当Windows启动时 kernel32 dll就驻留在内存中特定的写
  • 【CSS】滚动条样式详解

    只总结webkit的 IE与firefox暂不做记录 呼出与关闭滚动条 1 如果是浏览器的滚动条 其依赖的是html标签 我们不需要设置 内容溢出会自动出现 对html标签的溢出样式隐藏即可 html overflow x hidden 隐
  • 集合竞价规则及集合竞价的产生条件

    了解一下集合竞价规则 对于股民来说 是非常重要的 否则连一些基本的定义都了解不清楚的话 那么就麻烦了 下面为你介绍一下集合竞价规则以及集合竞价的产生条件 如果想要了解更多集合竞价方面的知识 敬请关注QR量化投资社区 下面让我们了解一下集合竞
  • 引入flutter module,运行时flutter_webview_plugin报错:Unhandled Exception: MissingPluginException

    异常信息 Android原生项目引入了一个flutter module flutter module用到了一个flutter写的sdk sdk需要使用webview来执行js代码 因此sdk引用了flutter webview plugin
  • mysql 分区表合并_MySQL 合并表、分区表

    合并表 合并表示一种早期的 简单的分区实现 在未来可能被淘汰 不推荐使用 限制 合并表和子表的字段 索引要完全相同 即使子表上有主键限制 合并表中仍然会出现重复值 如果删除其中一个子表 表可能还存在 带只能通过合并表访问 视操作系统而定 合
  • @GetMapping 接多个参数的写法

    后面拼接接着拼接上去就行了 此上方面针对于 接收多个未知参数 但是针对有很多需要模糊查询的方面 如果 我们所需要的接收的参数 是我们实体类对象的话 就不需要这么麻烦了 直接带入实体类对象 用即可
  • qt 串口通信

    qt串口通信 需要用到QSerialport类 1 pro文件中添加QT serialport 2 获取当前有哪些串口设备 QSerialPortInfo availablePorts 3 设置要打开的串口 setPortName 然后打开
  • 前端人员学习postman

    前端人员使用postman postman介绍 下载安装 posman的基本操作 主要进的是如何新建一个文件夹 然后新建请求 postman发送不同请求 讲的是如何发送不同类型的请求 发送get请求 发送post请求 body里面数据类型的
  • 人工智能科技成熟的11个Github上免费开源项目,很多电影中才有的场景应用到现实颠覆普通人的认知和想象

    人工智能科技成熟的11个Github上免费开源项目 很多电影中才有的场景应用到现实颠覆普通人的认知和想象 全文大纲 PULSE 该开源项目可以通过给图片增加像素点来实现去马赛克或高清化 Depix 给打了马赛克的文字去码 TecoGAN 给
  • Wireshark数据抓包分析之ARP协议

    目录 预备知识 1 知识储备 2 什么是ARP 3 ARP工作流程 4 ARP缓存表 实验目的 实验环境 实验步骤一 实验步骤二 实验步骤三 预备知识 1 知识储备 推荐两本好书 TCP IP详解卷1 http www pc6 com so
  • 两相混合步进电机(简单驱动器)simulink仿真

    1 目的 主要是控制步进电机的正反转以及周期性的转动一个步距角度 驱动模式为整步4拍不涉及到对转速的控制 比较基础 其次比较着重于对模型的分析 如有错误 这里欢迎大佬们指出 推荐先看一下以下的论文 基于simulink的步进电机控制系统仿真
  • MySQL 删除表中的数据记录

    文章目录 前言 一 删除表中的数据记录 1 删除特定数据记录 2 删除所有数据记录 总结 前言 删除数据记录是数据操作中常见的操作 可以删除表中已经存在的数据记录 在MySQL中可以通过DELETE语句来删除数据记录 该SQL语句可以通过以
  • JAVA中extends 与implements区别

    http www cnblogs com hnrainll archive 2011 10 11 2207773 html JAVA中extends 与implements有啥区别 1 在类的声明中 通过关键字extends来创建一个类的子
  • 爬取豆瓣电影排行榜top 250

    coding utf 8 import requests import re os 爬取豆瓣250 def douban ranking start 构建请求 param start start filter respon requests
  • 使用VS Code断点调试PHP

    vs code 使用一款杰出的轻量级代码编辑器 其中的插件工具不胜枚举而且还在不断增加 使用 vs code 调试 php 代码更是方便简洁 下面我们来一起看一下 1 安装 XDebug 扩展 调试 php 代码最常用的就是 XDebug
  • python:ezdxf——如何使用

    官方文档 https ezdxf readthedocs io en master howto index html 文章目录 一 基本文件 1 设置 获取标头变量 2 设置DXF绘图单元 3 创建更具可读性的DXF文件 DXF漂亮打印机