1、从此版本起彻底改版名称由三维平基土石方计算软件改名为3D蓝图(3D Blueprint)软件软件已升级为一个中型的三维编辑软件了平基土石方计算只作为其中的一个工程应用的工具了工具支持两期法、三角网法、断面法、固定完成貌标高法计算平基土石方工程量。2、软件功能是在一个三维场景可任意编辑三维点、线、面、文本、三维实体(球柱、箭头等)、外部模型(各种STL,VTK,OBJ等三维对象)、构件(本软件定制的由点线面构成的构部件可以将加工的各种构件在场景是拼装出三维场景)等并用这样各种三维对象来搭建需要的三维场景。如可以用于创建大型的三维地形地貌图地形上可以放置各种建筑物附属设施自然景观等。3、三维场景中的全部三维对象可以进行保存打印导出等可作为大型地形图(类似三维CASS)及地物图的编辑和保存。4、本三维编辑制作软件借用了deepseek网页版(免费没花钱)共同完成的编码可在QQ群1104113454中下载EXE文件本软件支持的构件(扩展名.part)的文件pickle序列化格式如下文件格式 • 扩展名.part • 序列化方式pickle.dump(data, file, protocolpickle.HIGHEST_PROTOCOL) • 根类型dict ________________________________________ 根字典结构 python { # ----- 构件元信息 ----- partName: str, # 构件名称如 柱子 partStyle: str, # 构件类型/风格如 方形柱 # ----- 公共属性 ----- color: str | tuple, # 三角形面公共颜色use_privateAttribsFalse 时生效 # 字符串: silver, red, #RRGGBB # 元组: (r, g, b) 0-1 浮点数 point_color: str | tuple, # 点颜色 line_color: str | tuple, # 线颜色 lineType: int, # 线型枚举值 (0无线, 1实线, 2虚线, 3点线, 4点划线, 5双点划线) lineWidth: float, # 线宽 opacity_public: float, # 公共透明度 (0-1)use_privateAttribsFalse 时生效 use_privateAttribs: bool, # True每个面独立渲染使用面私有属性False合并所有面为一个角色 show_style: int, # 显示样式: 0仅线, 1仅面, 2线面都显示 base_Position: [float, float, float], # 构件插入点坐标 (x, y, z) # ----- 面的集合核心数据----- faces: { 0: { ... }, # 面键字符串数字从 0 开始递增 1: { ... }, # ... }, # ----- 可选包围盒缓存----- bbox: (xmin, xmax, ymin, ymax, zmin, zmax), # ----- 可选相机状态用于打开时恢复视角----- _camera_state: { position: (x, y, z), focal_point: (x, y, z), view_up: (x, y, z), }, } ________________________________________ 面Face字典结构 每个面是一个字典包含几何数据和渲染属性 python { # ----- 面类型 ----- face_type: str, # horizontal (水平面) 或 vertical (立面) display_name: str, # 显示名称如 顶面 # ----- 高程属性 ----- elevation_bottom: float, # 底面高程水平面时等于高程值立面时为底部高程 elevation_top: float, # 顶面高程水平面时等于高程值立面时为顶部高程 # ----- 几何数据均为 numpy 数组float64----- points: np.ndarray, # 顶点集形状 (n, 3) lines: np.ndarray, # 线段集形状 (m, 2, 3) triangles: np.ndarray, # 三角网形状 (k, 3, 3) 或 (k, 9) [自动转换] # ----- 抠除开洞相关 ----- del_plines: { # 抠除线集合闭合多边形 抠除线_1: np.ndarray, # 形状 (n, 3)闭合多边形顶点 抠除线_2: np.ndarray, # ... }, del_triangles: { # 抠除区域的三角网由 del_plines 生成 抠除线_1: np.ndarray, # 形状 (k, 3, 3) 或 (k, 9) 抠除线_2: np.ndarray, # ... }, # ----- 装饰线非闭合线段----- extra_lines: [ # 列表每个元素为 (n, 2, 3) 的线段集 np.ndarray, # ... ], # ----- 私有渲染属性use_privateAttribsTrue 时生效----- color: str | tuple, # 本面的三角形颜色 opacity: float, # 本面透明度 (0-1) del_color: str | tuple, # 抠除区域三角形颜色 del_opacity: float, # 抠除区域透明度 (0-1) } 数据类型说明 颜色值格式 支持两种格式 1. 字符串HTML 颜色名或十六进制如 silver、red、#RRGGBB、#RGB 2. 元组(r, g, b)每个分量范围 0.0 ~ 1.0 线型枚举值 (LineType) 值 名称 说明 0 NO_PEN 无线 1 SOLID_LINE 实线 2 DASH_LINE 虚线 3 DOT_LINE 点线 4 DASH_DOT_LINE 点划线 5 DASH_DOT_DOT_LINE 双点划线 显示样式枚举值 (show_style) 值 说明 0 只显示线 1 只显示面 2 线面都显示 面类型 (face_type) 值 说明 horizontal 水平面平行于 XY 平面 vertical 立面垂直于 XY 平面 ________________________________________ 几何数据规范 points (顶点集) python # 形状: (n, 3) # 每行: [x, y, z] points np.array([ [0.0, 0.0, 0.0], [1.0, 0.0, 0.0], [1.0, 1.0, 0.0], [0.0, 1.0, 0.0], ], dtypefloat) lines (线段集) python # 形状: (m, 2, 3) # 每条线段: [[x1, y1, z1], [x2, y2, z2]] lines np.array([ [[0.0, 0.0, 0.0], [1.0, 0.0, 0.0]], [[1.0, 0.0, 0.0], [1.0, 1.0, 0.0]], ], dtypefloat) triangles (三角网) python # 形状: (k, 3, 3) 或 (k, 9) # 每个三角形: [[x1,y1,z1], [x2,y2,z2], [x3,y3,z3]] triangles np.array([ [[0.0, 0.0, 0.0], [1.0, 0.0, 0.0], [1.0, 1.0, 0.0]], [[0.0, 0.0, 0.0], [1.0, 1.0, 0.0], [0.0, 1.0, 0.0]], ], dtypefloat) del_plines (抠除线/闭合多边形) python # 形状: (n, 3) # 闭合多边形顶点首尾不必重复系统会自动闭合 del_pline np.array([ [0.2, 0.2, 0.0], [0.8, 0.2, 0.0], [0.5, 0.8, 0.0], ], dtypefloat) 完整示例 python import pickle import numpy as np # 构建一个简单的方块构件数据 part_data { partName: 测试方块, partStyle: 立方体, color: (0.7, 0.7, 0.7), point_color: blue, line_color: white, lineType: 1, lineWidth: 1.0, opacity_public: 1.0, use_privateAttribs: True, show_style: 2, base_Position: [0.0, 0.0, 0.0], faces: { # 底面 (水平面) 0: { face_type: horizontal, display_name: 底面, elevation_bottom: 0.0, elevation_top: 0.0, points: np.array([ [0.0, 0.0, 0.0], [1.0, 0.0, 0.0], [1.0, 1.0, 0.0], [0.0, 1.0, 0.0] ], dtypefloat), lines: np.array([ [[0.0, 0.0, 0.0], [1.0, 0.0, 0.0]], [[1.0, 0.0, 0.0], [1.0, 1.0, 0.0]], [[1.0, 1.0, 0.0], [0.0, 1.0, 0.0]], [[0.0, 1.0, 0.0], [0.0, 0.0, 0.0]] ], dtypefloat), triangles: np.array([ [[0.0, 0.0, 0.0], [1.0, 0.0, 0.0], [1.0, 1.0, 0.0]], [[0.0, 0.0, 0.0], [1.0, 1.0, 0.0], [0.0, 1.0, 0.0]] ], dtypefloat), del_plines: {}, del_triangles: {}, extra_lines: [], color: (0.7, 0.7, 0.7), opacity: 1.0, del_color: green, del_opacity: 1.0, }, # 前立面 1: { face_type: vertical, display_name: 前立面, elevation_bottom: 0.0, elevation_top: 1.0, points: np.array([ [0.0, 0.0, 0.0], [1.0, 0.0, 0.0], [1.0, 0.0, 1.0], [0.0, 0.0, 1.0] ], dtypefloat), lines: np.array([ [[0.0, 0.0, 0.0], [1.0, 0.0, 0.0]], [[1.0, 0.0, 0.0], [1.0, 0.0, 1.0]], [[1.0, 0.0, 1.0], [0.0, 0.0, 1.0]], [[0.0, 0.0, 1.0], [0.0, 0.0, 0.0]] ], dtypefloat), triangles: np.array([ [[0.0, 0.0, 0.0], [1.0, 0.0, 0.0], [1.0, 0.0, 1.0]], [[0.0, 0.0, 0.0], [1.0, 0.0, 1.0], [0.0, 0.0, 1.0]] ], dtypefloat), del_plines: {}, del_triangles: {}, extra_lines: [], color: silver, opacity: 1.0, del_color: green, del_opacity: 1.0, }, }, bbox: (0.0, 1.0, 0.0, 1.0, 0.0, 1.0), } # 保存为 .part 文件 with open(test.part, wb) as f: pickle.dump(part_data, f, protocolpickle.HIGHEST_PROTOCOL) # 读取 .part 文件 with open(test.part, rb) as f: loaded_data pickle.load(f) ________________________________________ 重要说明 1. numpy 数组所有几何数据均为 np.ndarraydtype 为 float64。保存时无需转换为列表pickle 直接支持 numpy 数组序列化。 2. 面键规则faces 字典的键为字符串数字从 0 开始递增。水平面通常为 0立面依次递增。 3. 抠除线处理del_plines 中的闭合多边形在渲染时会自动与 triangles 进行布尔运算裁剪生成 del_triangles。 4. 水平面 vs 立面 o 水平面elevation_bottom elevation_top所有顶点 Z 值相同 o 立面elevation_bottom elevation_top顶点 Z 值在底部和顶部之间变化 5. 兼容性triangles 支持两种形状 (n, 3, 3) 和 (n, 9)读取时自动转换。 6. 可选字段bbox 和 _camera_state 为缓存字段可以省略软件会在打开时自动重新计算。软件下载地址【免费】3D蓝图软件(原平基土石方计算软件)资源-CSDN下载https://download.csdn.net/download/mr_LuoWei2009/93315361