从 import 开始使用工程工具箱
本节不只列出库名,还要讲清楚:库是什么、怎么安装、怎么导入、导入后如何调用最小代码完成一个工程动作。
本节不只列出库名,还要讲清楚:库是什么、怎么安装、怎么导入、导入后如何调用最小代码完成一个工程动作。
这些库覆盖课程早期需要的矩阵计算、图表、表格、科学计算、三维渲染、CAD 内核、DXF 出图和二维几何运算。
数组、向量、矩阵
二维绘图与图表
工程表格处理
Excel 文件读写
科学计算扩展
三维网格渲染
参数化 CAD 实体建模
DXF 图纸生成
二维几何计算
Python 本身只提供基础能力。工程计算、图形绘制、Excel、DXF、三维渲染都需要通过第三方库扩展。`import` 的作用就是把这些库加载到当前程序中。
初学阶段先掌握三种写法:完整导入、别名导入、从库中导入某个对象。别名写法能让代码更短,但必须保持团队习惯一致。
# 1. 完整导入
import math
print(math.sqrt(9))
# 2. 使用别名,常见于 numpy / pandas
import numpy as np
import pandas as pd
# 3. 只导入一个函数或类
from pathlib import Path
project = Path(".")
如果库没有安装,`import` 会报错。遇到 `ModuleNotFoundError`,不要先改代码,先检查当前解释器和虚拟环境是否正确。
# 命令行:安装库
pip install numpy pandas matplotlib openpyxl scipy pyvista ezdxf shapely
# 脚本中:导入库
import numpy as np
import pandas as pd
# 常见错误
ModuleNotFoundError: No module named 'numpy'
`numpy` 是几何计算最常用的基础库。坐标点、方向向量、矩阵变换都可以用数组表达。
import numpy as np
p1 = np.array([0.0, 0.0, 0.0])
p2 = np.array([6000.0, 3000.0, 0.0])
vector = p2 - p1
length = np.linalg.norm(vector)
print("梁轴线长度:", length, "mm")
`matplotlib` 适合画折线图、散点图、二维轴网和简单工程图表。它常用的子模块是 `matplotlib.pyplot`。
import matplotlib.pyplot as plt
x = [0, 6000, 12000]
y = [0, 0, 0]
plt.plot(x, y, marker="o")
plt.title("Grid Line A")
plt.xlabel("X / mm")
plt.ylabel("Y / mm")
plt.axis("equal")
plt.show()
`pandas` 用来处理表格数据。工程构件清单、碰撞报告、Excel 数据导入后都可以变成 `DataFrame`。
import pandas as pd
beams = pd.DataFrame({
"id": ["B1", "B2"],
"length_m": [6.0, 7.5],
"width_m": [0.3, 0.3],
"height_m": [0.6, 0.7],
})
beams["volume_m3"] = (
beams["length_m"] * beams["width_m"] * beams["height_m"]
)
print(beams)
`openpyxl` 适合直接操作 `.xlsx` 文件,例如写入单元格、保存工程量表。它也常作为 `pandas` 写 Excel 的底层引擎。
from openpyxl import Workbook
wb = Workbook()
ws = wb.active
ws.title = "工程量"
ws["A1"] = "构件"
ws["B1"] = "体积 m3"
ws.append(["梁 B1", 1.08])
ws.append(["柱 C1", 1.30])
wb.save("quantity.xlsx")
`scipy` 是 `numpy` 的扩展,提供优化、插值、距离、线性代数等工具。早期课程可先用它做距离矩阵或简单数值计算。
import numpy as np
from scipy.spatial.distance import cdist
columns = np.array([
[0, 0],
[6000, 0],
[6000, 6000],
])
dist = cdist(columns, columns)
print(dist)
`pyvista` 用于三维渲染和网格可视化。它可以帮助学生直观看到几何体、坐标轴和空间关系。
import pyvista as pv
beam = pv.Cube(
center=(3000, 0, 300),
x_length=6000,
y_length=300,
z_length=600,
)
plotter = pv.Plotter()
plotter.add_mesh(beam, color="tan", show_edges=True)
plotter.add_axes()
plotter.show()
`build123d` 基于 OpenCASCADE,适合用脚本创建梁、柱、板、墙等工程实体。这里先用一个 Box 表达梁形构件。
from build123d import Box, export_stl
beam = Box(6000, 300, 600)
export_stl(beam, "beam.stl")
print(type(beam))
`ezdxf` 可以创建 DXF 文件,适合讲轴线、柱网、文字标注和简单结构平面图自动生成。
import ezdxf
doc = ezdxf.new("R2010")
msp = doc.modelspace()
msp.add_line((0, 0), (12000, 0))
msp.add_circle((6000, 0), radius=300)
msp.add_text("Grid A", height=250).set_placement((0, 400))
doc.saveas("grid.dxf")
`shapely` 用来表达二维点、线、面,并判断相交、包含、距离等关系。它适合处理平面图中的管线、墙线和洞口。
from shapely.geometry import LineString, Polygon
pipe = LineString([(0, 0), (8000, 0)])
wall = Polygon([
(3000, -200),
(5000, -200),
(5000, 200),
(3000, 200),
])
print(pipe.intersects(wall))
print(pipe.intersection(wall).length)
通常把所有导入语句放在 Python 文件顶部,先标准库、再第三方库、再本项目模块。这样别人一眼能看出脚本依赖什么工具。
# 标准库
from pathlib import Path
# 第三方库
import numpy as np
import pandas as pd
import pyvista as pv
# 本项目模块,后续课程会逐步创建
from core.geometry import Point3D
本节的重点不是背库名,而是理解“安装、导入、调用”的完整链条。后续每学一个工程问题,都会选择合适的库来表达、计算和输出结果。