通过python控制AutoCAD绘制市政管网平面图及三大工况图
- 主要:
- pyautocad:绘图
- openpyxl:传导数据
- 次要:
- ezdxf:文本替换
- PyWin32:删除图层、导出pdf、数据转换
- 数据来源:
- Epanet 2.2 or WaterDesk:进行水力平差
- arcgis:将dwg转换为shp文件导入平差软件作为背景图
以下为本人运行代码的环境,仅做参考:
- Python 3.9
- Matlab 2018a
- Excel 2016
- AutoCAD 2018
- Anaconda 2.1.1
- 将工况数据按文件
data/data_max.xlsx
的格式导入,其中:- 最高时最高日导入至
data_max
里 - 消防工况导入至
data_fire
里 - 意外事故工况数据导入至
data_acc
里
- 最高时最高日导入至
- 背景图存放至
background.dwg
里 - 运行
contour/contourPlot.m
文件,文件里的参数见contour/contourMap.m
函数注释,生成的数据在data/contourM.xlsx
文件里,其中:Sheet1
存放定线图高程数据Sheet2
存放最高时最高日节点压力数据Sheet3
存放消防工况节点压力数据Sheet4
存放意外事故工况节点压力数据
- 打开背景图文件
background.dwg
- 打开Pycharm, 在python的编译配置中,working directory中的路径需落在pycad-pipemapsimplex
import os
os.getcwd()
# 若输出类似于:'X:\\xxx\\pycad-pipemapsimplex'
# 即为成功
- 分别在
src/main.py
里运行:
test1_max()
test1_fire()
test1_acc()
test1_tmp()
- 检查在路径
data\dxf
里是否出现:test1_acc.dxf;test1_fire.dxf;test1_max.dxf;test1_tmp
四份文件,出现则意味成功
- 打开
test1_new.dwg
文件,对该文件做出以下修改:- 移动双管:上下各偏移一定距离
- 折管:移动多段线的中点,把流向块等旋转移动
- 引线:对标注过于密集的管段使用引线,注意不要删除管段标注!
- 水厂、加压泵站:增加图例
- Attention:不要删除任何一个text,如果报错
index list range error
,那么问题就大概率出在这里!
- 修改好之后将
test1_new.dwg
另存为(通过AutoCAD)四份文件,分别命名为:- tmp_max.dxf、tmp_acc.dxf、tmp_fire.dxf、tmp_ali.dxf
- 注意,如果意外事故工况报错
index list range error
,那么有可能是在校核意外事故工况时将某主干管删除了,导致TEXT
属性缺失,可以在acc.xlsx
里将该管段属性添加进去即可
- 在
src/main
里运行test2
函数 - 运行成功后,分别将以下四份dxf文件转换为dwg文件(通过AutoCAD):
origin:tmp_max.dxf、tmp_acc.dxf、tmp_fire.dxf、tmp_ali.dxf
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
after:tmp_max.dwg、tmp_acc.dwg、tmp_fire.dwg、tmp_ali.dwg
- 分别打开背景图文件:
tmp_max.dwg、tmp_acc.dwg、tmp_fire.dwg、tmp_ali.dwg
- 在
src/main.py
里分别运行:
test3_max()
test3_fire()
test3_acc()
- 到此为止,三张工况图已经基本画完了,检查
output/
文件夹里是否出现:- acc.dwg、fire.dwg、max.dwg
- 打开背景图文件
tmp_ali.dwg
- 在
src/main
里运行test4
函数 - 检查
output/
文件夹里是否出现ali.dwg
- 修改双管上标注,e.g.[280\281]-1000-100
- 填充水厂泵站节点,并为水厂节点命名,e.g.山南水厂
- 删除等水压线多余的标注
- 手动增加A1图框,然后将各节点的坐标记录下来
- 打印出图
- Python 二次开发 AutoCAD 简介 作者:Hulunbuir
- 335工作室 pythonCAD教程 作者:微信公众号(335工作室)