ARTICLE · 1330164
我把一份 Excel 电缆清册,变成了能在浏览器里转的三维模型
做机电设计这些年,我一直被一件事膈应着,模型太重。
一个 Revit 模型动辄几百 MB,想给现场看一眼电缆怎么走,得先让人装软件、配环境、等同步。模型明明是我们自己画的,看模型的门槛却比画图还高。
前阵子我干脆试了条野路子,自己定义了一个轻量化 BIM 数据格式,取名 .lmv。然后拿一份真实的电缆清册做了一次完整闭环,从 Excel 一路跑到浏览器里的三维电缆沟,能点选回路高亮,能自动敷设算量。
整个过程挺有意思,中间还踩到一个很典型的坑。想跟你聊聊。

查看器实拍 · 左下是清册面板,右侧是构件信息,中间是三维沟网
01
几何不存网格,只存生成规则
主流轻量化方案的思路是把模型「拍扁」,导出成三角网格。文件是小了,数据也死了,Web 端只能看,没法改,更没法算。
.lmv 反过来做。包里不存网格,只存生成规则,一段沟的断面尺寸、走向、起终点,一台设备的宽高深和坐标。网格在使用它的那一端临时求值,Revit 端读规则建实体,Web 端读规则用 Three.js 渲染。
同一包数据,两端各自生长。

.lmv 包结构 · 几何只存生成规则,Revit 端与 Web 端各自求值
02
一个 .lmv 包长什么样
本质是个 ZIP,但规矩不少。首条必须是 mimetype,STORED 不压缩、固定 1980 年的时间戳,这个做法是从 EPUB 和 ODF 学来的,解压工具一眼就能认出格式。接着是 manifest.json,登记全部条目和 sha256 校验,再往后排 schema、model、rules、geometry。
真正的坑在坐标系。schema 用毫米、Z 向上,这是建筑行业的习惯;glTF 用米、Y 向上,这是图形学的习惯。转换就一行,(x/1000, z/1000, -y/1000)。
但只要你写反一次,整个模型就会躺在地上给你看。
03
拿一份真清册做闭环
验证用的是项目里真实的「一级箱出线」清册。起点编号靠合并单元格向下填充,电缆规格写着 4*50+1*25、2*(4*150+1*70) 这类行业写法,解析器得一层层剥。
生成器读 xlsx,解析规格,沿沟网自动路由,输出 .lmv。demo 模型一共 12 台设备、8 段电缆沟、5 口井、6 条电缆,整个包 33.2 KB。
清册每一行是一个回路组合,单选高亮,再点一次取消。左侧构件树能折叠,同层多根电缆按站位横向错开,最小中心距 67.5 毫米,一根是一根,互不重合。
按模型实数据绘制的俯视图 · 点选清册一行,整条回路高亮
04
还能在浏览器里直接敷设
点「敷设电缆」,选起点柜、选终点设备,后台用 BFS 把环网里的简单路径全部枚举出来,逐条标长,算上两端各 2 米预留,选一条就自动敷下去,还能反向导出清册 CSV。
有件事挺反常。2DA7 到 TB2T3DJ1ATL 这对设备,沿环网两侧绕过去的长度几乎一样,35.7 米对 35.6 米。这恰恰说明,只给一条「最短路径」是不够的,得让人看见所有选择。

BFS 枚举出的两条路径 · 左上绕行与下右绕行几乎等长
中途我还把支架整个删掉过。只要把沟的 bracketSide 声明成 none,规则引擎就自动跳过支架层数检查,敷设兜底到 -600 那一层。规则是数据,不是代码,这句话到这时候才算真正落地。
05
最大的坑,是清册自己
模型跑通之后做了一次全面体检,发现有面柜一个起点挂着两根电缆。
我第一反应是生成器出 bug 了,一根电缆被拆成了两根。查下去才发现问题出在清册,同一个回路编号 2-M(B2)-1,同时挂在 2DA7 和 2DA8 两面柜上,样本表里两段数据几乎照抄了一遍。
一个柜出多根电缆本来再正常不过,2DA7 在这份清册里就有 9 条出线。但回路编号是回路的身份证,重复就是事故。
处理办法是生成器加了个开关,同回路只留第一条,电缆从 9 根变成 6 根。
说实话,这反而是整个实验里我最满意的部分。工具链搭好之后,第一批被揪出来的问题,是数据自己的。
做下来最大的感受是,轻量化的本质不是把模型压小,是把生成权交还给使用数据的那一端。
Excel 才是机电行业真正的数据库。清册、图签、计算书都在里面躺着,格式该做的事,是把这份数据安全地运到任何一端,而不是把它锁死在某个软件里。
模型会过时,规则不会。

文中的 .lmv 格式、生成器与查看器均为个人实验项目
清册数据来自真实项目样本,已脱敏















































































