3. 参数化球体建模与质量属性批量提取
任务说明
本案例将构建一个参数化球体建模脚本,以半径为输入参数批量生成球体模型,并自动提取每个球体的体积、质量与质心位置,最终将结果汇总输出到CSV文件。实现采用Python与OpenCASCADE几何内核,通过cadquery库完成建模与质量属性计算。
实现方案
核心思路:定义sphere_batch函数,接收半径列表与材料密度,循环执行以下操作——用cadquery.Workplane.sphere()创建球体实体,调用val().Volume()和val().Center()获取体积与质心,质量由体积乘密度得到。所有结果存入列表后,使用csv模块写入文件。为保证可复现性,代码中直接给出半径样例[10, 20, 30]与密度7.85 g/cm³(钢材典型值)。
代码实现
import cadquery as cq
import csv
def sphere_batch(radii_mm, density_g_per_cm3, output_file):
"""
参数化批量生成球体并提取质量属性
:param radii_mm: 半径列表,单位mm
:param density_g_per_cm3: 材料密度,单位g/cm³
:param output_file: 输出CSV路径
"""
results = []
for r in radii_mm:
# 创建球体(半径单位mm)
sphere = cq.Workplane("XY").sphere(r)
solid = sphere.val()
# 提取体积(mm³)
volume_mm3 = solid.Volume()
# 提取质心坐标(mm)
center = solid.Center()
cx, cy, cz = center.x, center.y, center.z
# 计算质量:体积(mm³) × 密度(g/cm³) / 1000 = g
mass_g = volume_mm3 * density_g_per_cm3 / 1000.0
results.append({
"radius_mm": r,
"volume_mm3": volume_mm3,
"mass_g": mass_g,
"centroid_x_mm": cx,
"centroid_y_mm": cy,
"centroid_z_mm": cz
})
# 写入CSV
with open(output_file, "w", newline="") as f:
writer = csv.DictWriter(f, fieldnames=results[0].keys())
writer.writeheader()
writer.writerows(results)
return results
# 样例执行:半径10/20/30mm,密度7.85g/cm³
if __name__ == "__main__":
radii = [10, 20, 30]
density = 7.85
out_path = "sphere_properties.csv"
data = sphere_batch(radii, density, out_path)
print(f"已生成 {out_path},共 {len(data)} 条记录")
落地与运行
依赖安装:
pip install cadquery
执行方式:将上述代码保存为sphere_batch.py,在命令行运行:
python sphere_batch.py
运行结束后,当前目录下生成sphere_properties.csv文件。
验证方法
打开CSV文件,检查三行数据是否满足以下判定标准:
- 体积公式校验:球体体积理论值 \( V = \frac{4}{3}\pi r^3 \)。例如半径10mm时,理论体积约4188.79 mm³,CSV中数值应一致(允许浮点误差)。
- 质心位置:球体质心应位于原点(0,0,0),三行数据的质心坐标均应接近0。
- 质量计算:质量 = 体积(mm³) × 密度(g/cm³) / 1000。半径10mm时,质量约32.89g,可手动复核。
若CSV中数值与理论计算一致,则案例验证通过。