土建算量
它解决的一件事:施工员/技术员不会用广联达,也要在几分钟内拿到"这层要多少方混凝土、什么标号、大概多少吨钢筋",直接抄进物资计划。
0.5.0 优化概况
- 复用
cad-file-reader0.5+ 的规范/图集元数据辅助:首次建索引同步生成.cadidx/<索引>/normative辅助结果,不复制规范全文,不新增解析依赖。 - 规范辅助只作元数据、版本风险和输入缺口提示;失败仅写日志,不阻断混凝土/钢筋计划量输出。
- 索引缓存版本升到 0.3.0,旧缓存自动重建;缓存命中且辅助文件缺失时,只要明细仍存在会自动补跑。
- 重复的「尺寸多标注」警告在报告/台账汇总区去重,明细中的全部候选仍保留,便于照图复核。
0.6.0 新增:原结构算量流水线并入
- 接管原
cad-file-reader的结构算量能力:梁对象、支座净跨、多跨闭合、实例去重、编号冲突定责、板厚分区、洞口扣减、墙身闭合、边缘构件、预制底板、楼梯梁、结构模型和混凝土分账。 - 新增统一高级入口:
scripts/run_qty.sh advanced ...或scripts/run_qty.sh pipeline ...,串起扫描、几何、拓扑、证据层、统一报告和执行清单。 - 底座
cad-file-reader >= 0.25.0只提供识图、文字/图层/图框、几何线段和原文证据;算量口径、扣减、损耗、分账和台账全部在本技能内完成。 - 迁移脚本仍可通过
CAD_SKILL_DIR调用识图底座;找不到底座时明确报错,不静默降级。 - 迁移后回归 317 项通过(合成数据与迁移自锁测试;不含公司图纸内容)。
0.7.0 优化概况:对接 cad-file-reader 测量候选
- 底座依赖提升到
cad-file-reader >= 0.25.0;识图底座可额外输出长度、面积、体积测量候选,但每条都是final_quantity=false的识图证据。 - 首次建索引时在缓存目录生成
measurement-candidates/辅助结果,仅用于回图复核梁线、房间边界和显式尺寸;土建净量、扣减、损耗、分账和台账口径仍全部在本技能内完成。 - 测量候选缺失或生成失败不阻断土建算量;缓存版本升到 0.4.0,旧缓存自动重建。
前置
依赖已安装的技能 cad-file-reader >= 0.25.0(本技能只调它的识图、文字/图层/图框、几何线段和规范/图集元数据入口;不再依赖任何算量入口)。找不到时报错并提示设 CAD_SKILL_DIR。
用法
# 1) 列出这张图的楼层图名(第一次解图并建索引;之后任何查询都不再解图)
scripts/run_qty.sh floors 图纸.dwg --with-geom
# 2) 出某一层:层高自动从图面"层高表/标高表"反查;轴网给一次即写入本图配置
scripts/run_qty.sh floor 图纸.dwg --floor-label "标高(下层)~(上层)墙柱平法施工图" \
--axis-grid "8x8400,6x7800" --with-geom -o 该层计划
# 3) 之后换任何层都不用再给参数(沿用本图配置,层高按该层标高重新自动查)
scripts/run_qty.sh floor 图纸.dwg --floor-label "五层板配筋图" --with-geom -o 五层
# 4) 报「先浇 + 后浇带封闭」两笔:带长在平面图上量一次(本层合计),带宽自动从说明读
scripts/run_qty.sh floor 图纸.dwg --floor-label "五层板配筋图" --with-geom --strip-length-m 120 -o 该层计划
# 5) 图上读不到柱截面时,照柱表敲一次,本图之后所有层沿用(会标"人工参数",不冒充图面直读)
scripts/run_qty.sh floor 图纸.dwg --floor-label "标高(下)~(上)墙柱平法施工图" --with-geom \
--member-size "KZ1=500x900,KZ2=600x600,Q2=250" -o 墙柱层计划
高级结构算量流水线(迁移自 cad-file-reader)
# 原 cad-file-reader 的梁板柱墙/楼梯/洞口/预制底板/混凝土分账统一入口
scripts/run_qty.sh advanced 结构图.dwg \
--floor-label "二层梁平法施工图" \
--support-floor-label "标高X~Y墙柱平法施工图" \
--slab-floor-label "二层板结构施工图" \
--out 首层算量
高级入口保留候选量、复核量、风险量、参考回填和正式入账口径分层;缺输入记 skipped,不自动补造。详细参数见 packs/quantity-pipeline/SKILL.md 和历史文件。
| 参数 | 作用 | 不给会怎样 |
|---|---|---|
--axis-grid "8x8400,6x7800" |
板面积与梁长骨架(两向跨数×跨距);给一次就写进本图 profile.json | 板/梁进缺项清单,不出数 |
--story-height-mm |
柱、墙高 | 默认自动取:图名自标的标高区间(墙柱层图名常写「标高(下)~(上)」)→ 否则层高表本层标高减下层标高;两条都失败又没配置 → 柱/墙进缺项 |
--story-basis |
层高取哪一段:below(默认,跟着本层顶板一起浇的柱墙段)/ above(本层往上那段) |
用默认;只有出"本层往上"的柱才改 |
--with-geom |
索引时导出图面线段(墙长要用;轴网自动尝试也要用) | 墙进缺项清单 |
--try-auto-grid |
试着从图面线段复原轴网 | 天正轴网常是自定义实体解不出,失败会明说并让你给一次参数 |
--loss |
损耗率(默认取 rules/口径.json 的 1.5%) |
用默认 |
--member-size "KZ1=500x900,Q2=250" |
人工补构件截面/墙厚(柱梁给 b×h、墙给厚),给一次写进本图配置 | 图上取不到的那型进缺项,不猜 |
--strip-length-m |
本层后浇带中心线总长(m)。给了才把板量拆成"先浇区 + 封闭带(高一级微膨胀)"两笔 | 不拆;输出里进缺项提示,板量仍是整层 |
--strip-width-mm |
带宽 | 先从说明原文读(如"宽度均为800");读不到按 rules 默认 800mm 并标推定;不在 100~3000mm 内视为填错,进缺项不拆 |
--openings-m2 |
照建施/洞表人工补扣的洞口面积合计(㎡),从板面积里减掉 | 只扣图面能算出尺寸的洞口(结构图常只画不注) |
--keep-detail |
保留解图明细 JSON(占空间大) | 默认建完索引就回收,一张 21.7MB 图省 ~35MB |
--cache-dir |
索引与 profile 位置;默认落在图纸同目录 .cadidx/ |
图纸目录不可写时自动退到临时目录 |
时间都花在哪(实测)
| 场景 | 实测 |
|---|---|
| 21.7MB 图第一次索引(52,488 条文字 + 221,827 条线段) | 18–34 s |
| 之后每一层查询(同一张图,含层高自动反查、说明摘录、后浇带拆分) | 0.5–1.1 s |
| 换一张新图 | 再付一次索引 |
索引按图纸内容 SHA-256 命名,图纸没变就永久复用;删掉 .cadidx/<名字-哈希>/ 即强制重建。
建完索引自动回收解图明细 JSON:21.7MB 图的缓存从 64MB 降到 31MB(--keep-detail 可保留)。
输出头带口径版本与指纹(如 口径 0.4.0+(运行输出显示实际版本与指纹)),改过 rules/口径.json 一眼能看出来。
口径(写在 rules/口径.json,可改可核对)
- 柱=截面 × 柱段高 × 根数(有梁板柱算至柱顶,不扣梁高)。柱段高取"跟着本层顶板一起浇的那一段":图名写了标高区间就用区间差,否则用层高表本层标高减下层标高;表里两值对不上会报"需核对"
- 层高表里"标高 X 行注的层高"是 X 往上那一段,直接用会错一层;本技能取的是板下面那段柱墙高。真图实测:中间层取到板下柱段,顶层(表内那行空白)也能算出来,不再退回上一层的配置
- 梁=各向轴线长合计 × 截面档占比分摊(清单口径梁长算至柱侧,本表按轴线毛长)
- 板=轴网包络面积 × 板厚档占比分摊(按图面板厚标注位置数加权)
- 墙=墙线长 × 层高 × 墙厚(长需
--with-geom) - 订货量=净量 ×(1+损耗);钢筋列=净量 × 图面/经验含筋率区间 → 给出的是带,不是逐根
- 后浇带:带面积=带长×带宽,按本层各板厚档面积占比分摊 → 封闭带一笔(标号按说明"高一级",父级推定则仍标推定),先浇区同额扣减,总量守恒
- 洞口:图面能算出尺寸的(如
JD5 720x300)自动从板面积里扣,≥0.3㎡ 才扣;结构图常只画不注尺寸,那部分要照建施给--openings-m2,扣减量与来源都写进输出 - 同一个编号在图上有多种截面/厚度标注时:取出现次数最多的那个,全部候选写进"依据"并在顶上提示"需核对",不静默选一个
- 截面/墙厚来源三级:①构件旁边的图面标注(就近绑定)②表格里读——墙身表按表头列名(编号/标高/墙厚)对齐取,且表内标高段必须与本层图名区间一致才取;③都取不到就人工给一次(
--member-size)。每行"依据"都会写明是哪一级 - 说明摘录:自动摘出带宽、后浇带类型、封闭用混凝土、保留时间等报量要用的条款原文(本层图框内优先,其次全图),不改写不解释
- 规范校核:出量后检查标号、构件尺寸、正量与标注完整性;缺混凝土强度等级时不再默认C30,而是标「未标注(需核对)」。输出有「规范校核」区块,明细每行有「规范校核」列
边界(必须对用户如实说)
- 这是计划口径毛量:未扣柱/节点/小洞口,误差 ±5
10%(板面积靠轴网分摊时 ±1020%)。不能用于翻样下料、对量、劳务结算、竣工计量。 - 缺依据的构件一律进缺项清单并写明缺什么,绝不用默认值凑数;只有两处例外且都明标:板厚退回「说明主档 + 推定」,后浇带宽在说明读不到时按默认 800mm 推定(同时进缺项清单)。
- 楼层切分靠"图名附近有构件标注"判定真图名,不依赖任何图层命名体系;同名命中多张真图框时全部纳入并提示会算两遍。
- 轴网复原的边界:图面轴线若是普通 LINE/LWPOLYLINE 可自动复原(
--try-auto-grid);天正导出的轴网常是自定义实体、解不出线段,这时必须给一次--axis-grid(会存进本图配置,之后不用重复给)。 - 后浇带不能自动量:带线在图面上多是双线或符号,图层命名各院不一;按“平行双线 + 间距”自动筛带容易把梁边线、钢筋桁架等误识别。因此只接受在平面图上人工量一次带长(
--strip-length-m),拆完后浇带后再报。 - 柱表形态各家不同:本技能能按表头列名读横排表(墙身表那类);有的图柱表是竖排转置表(表头 编号/标高/纵筋/箍筋 一列竖着写),甚至根本没有截面这一列(柱截面只画在柱边或详图里)——这种就读不到,会整型进缺项,用
--member-size给一次即可,绝不拿别层或邻柱的数凑 - 表内出现多套分区标高时(同一张表里混着几套标高列),标高段对不上本层图名的行一律不取,并在日志里写明
- 说明被拆成多段/夹符号的文字会先按坐标拼回整句再检索(
join_lines,字宽按 350mm 估),仍可能漏;漏了会表现为"未检出后浇带",以人工核对为准。 - 天正自定义实体、无轴网图纸、说明被拆成多段的图纸,会出现可解释的缺项——按缺项清单补参数即可,不要相信"跑通了就是对的"。
显式依赖与降级(0.9+)
- 底座
cad-file-reader >= 0.28.1是本技能的显式依赖:运行首次会自动检测,缺失时自动下载安装底座并补齐 vendor(联网,下载包做 SHA-256 完整性与版本校验,校验失败拒绝安装);已装则直接复用,不重复下载。 - 独立/离线场景可设
SKILL_NO_BASE=1:不再自动安装底座,仅使用已有扫描 JSON、测量候选或表格输入(精度受限并在结果中标注)。 - 可设
CAD_AUTO_SETUP=0关闭底座内部的 vendor 自动下载;手动安装用scripts/setup.sh或scripts/ensure_base.sh。
