厉害啦,土木工程师开始考虑用Python解决问题了

2022-04-08 13:26:06 浏览数 (2)

0. 前言

钻芯综合柱状图作为一种能够全面、直观地体现钻芯法检测工作关键信息的工作成果,一直是钻芯法检测报告中的重要内容。

作者所在的单位目前使用某公司开发的绘制软件进行相关图件的绘制工作。该软件需要使用者将平时积累的钻芯检测数据(保存在EXCEL表格中)重新手动输入到软件中,这个过程涉及大量的重复劳动,费时费力。

为了提升工作效率,作者利用ezdxf开发一个小脚本,自动读取EXCEL表格中的相关内容并批量绘制钻芯综合柱状图,从而避免了相关信息的二次输入。

1. ezdxf简介

ezdxf模块用于创建新的dxf文件和读取/修改/写入现有的dxf文件。https://pypi.org/project/ezdxf/

2. 基础命令

2.1创建DXF

代码语言:javascript复制
import ezdxf
doc = ezdxf.new('R2000') #创建一个新的DXF R2000文件

2.2.绘制线段和多边形

代码语言:javascript复制
import ezdxf

doc = ezdxf.new('R2000') #创建一个新的DXF R2000文件

msp = doc.modelspace()

msp.add_line((10, 0), (100, 0)) #绘制一条从(10, 0)到(100, 0)的线段

msp.add_line((0, 10), (0, 100)) #绘制一条从(0,10)到(0, 100)的线段

pts = [(10,10),(10,100),(100,100),(100,10),(10,10)]#四边形的各个角点

msp.add_lwpolyline(pts) #绘制一个四边形

2.3.插入文本

代码语言:javascript复制
import ezdxf

doc = ezdxf.new('R2000') #创建一个新的DXF R2000文件

msp = doc.modelspace()

msp.add_line((10, 0), (100, 0)) #绘制一条从(10, 0)到(100, 0)的线段

msp.add_line((0, 10), (0, 100)) #绘制一条从(0,10)到(0, 100)的线段

pts = [(10,10),(10,100),(100,100),(100,10),(10,10)] #四边形的各个角点

msp.add_lwpolyline(pts) #绘制一个四边形

mtext = msp.add_mtext('文本') #在图形中插入“文本”二字

mtext.set_location(insert=(55,55), attachment_point=5) #插入点的位置为(55,55),attachment_point表示插入点的位置与插入文本的相对位置关系。

mtext.dxf.char_height = 10 #设置字体大小

插入点相对于文本的位置

attachment_point的值

上左

1

上中

2

上右

3

中左

4

中中

5

中右

6

下左

7

下中

8

下右

9

2.4.填充

代码语言:javascript复制
import ezdxf
doc = ezdxf.new('R2000') #创建一个新的DXF R2000文件
msp = doc.modelspace() 
msp.add_line((10, 0), (100, 0)) #绘制一条从(10, 0)到(100, 0)的线段
msp.add_line((0, 10), (0, 100)) #绘制一条从(0,10)到(0, 100)的线段
pts = [(10,10),(10,100),(100,100),(100,10),(10,10)]
msp.add_lwpolyline(pts) #绘制一个四边形

hatch = msp.add_hatch() 
hatch.paths.add_polyline_path(pts, is_closed=True)#设置填充边界              
hatch.set_pattern_fill('solid', scale=1)#设置填充图案

3. 效果展示

熟悉了以上几个基础的ezdxf操作命令,就可以进行钻芯综合柱状图批量绘制脚本的开发了。

假设某根桩的钻芯检测结果如下:

首先绘制必要的线段和多边形,得到柱状图的基本框架。然后利用pandas读取表格中的内容并插入对应位置,最后在相应区域填充对应的图案。

最终生成的柱状图效果如下。

0 人点赞