@entur/iteru-3dbus

中文文档
0.3.0发布于 2026/11/02EUPL-1.2ES Module构建来源已验证近 30 天下载 2014

npm license

中文使用文档
文档目录10 节
  1. 安装
  2. 使用
  3. A和B组
  4. 作为自定义元素
  5. 如何运作
  6. 包里没有
  7. 限制
  8. 开发
  9. 释放
  10. 许可证

铁道三号线

npm license

从一个 JSON 输入( A) 中抽取的以 3. js 为单位的 Boxy 三维总线, 可从 NeTEx 读取 VehicleType 文件(B):部分、轴、铃声、门、窗、彩色和前方.

现场: https://entur.github.io/iteru-3dbus/ 互联网档案馆的存檔,存档日期2013-12-21: 作为卡片的每个示例 (单位:千美元)list),两辆混凝土公交车和北欧公交车2.0型,每辆 在观众(bus?file=volvo-8900.xml) (中文(简体) ).

安装

npm i @entur/iteru-3dbus three@^0.180.0

仅限ES模块. three 是一个对等点: 主机会带自己的.

使用

import { validate, faces, mkBus } from "@entur/iteru-3dbus";

const errs = validate(inp); // string[], empty when valid; faces and mkBus take a valid inp
const maps = faces(inp); // SVG maps per box side, in mm; { headlight: svg } swaps the headlight drawing
scene.add(mkBus(inp, maps)); // a THREE.Group in metres: front end at x = 0, ground at y = 0

inp 一个对象反对 schema/bus-input.schema.json (合同v3.0),长度为毫米. examples/ 有两个 混凝土巴士, 如 NETEx XML 和, in busnordic/,北欧公交车2.0"公交车类型范例"表格中每行一班公交车(17). 这个 标准给予这些值一个类,一个最大长度,一个地板类型和一个门数;其他每个维度都是通用的,没有测量.

Schema 3.0是一个突破性的变化 (包装0.2.0):输入只持有所绘制的. brand, (中文(简体) ), model, (中文(简体) ), bus_class, (中文(简体) ), floor_type, (中文(简体) ), body, (中文(简体) ), door_side, (中文(简体) ), front.template, (中文(简体) ), photo, (中文(简体) ), meta 财务报告和审定财务报表 base_color.name 失踪 徽标是 front.badge_text 显示 front_display没有什么会归结到别的 一个部分 绝对 doors (单位:千美元)x_mm, (中文(简体) ), width_mm, (中文(简体) ), leaves, (中文(简体) ), glazed)或(或) doors_hint从来没有两者。 输入 2. 0 需要这些 删除的字段 schema_version 设置为 "3.0"。 。 。 .

导入给需求
@entur/iteru-3dbus/corevalidate, (中文(简体) ), limits, (中文(简体) ), schema,得出数字(layout, (中文(简体) ), doors, (中文(简体) ), windows,(......), MM无:在节点运行
@entur/iteru-3dbus/limitslimits:北欧的限制作为信件,在 validate无:在节点运行
@entur/iteru-3dbus/netexfromNetex, (中文(简体) ), KEYS, (中文(简体) ), PREFIX: 一个 NETEx VehicleType 读入输入无:在节点运行; fast-xml-parser 财务报告和审定财务报表 ajv 属于依赖关系
@entur/iteru-3dbus/facesfaces: SVG 地图a DOM,无3个
@entur/iteru-3dbus以上所有情况./netex 也一样, mkBus, (中文(简体) ), mapErrs; 可选阶段 (mkStage, (中文(简体) ), mkStageShot)和相机视图(mkViews, (中文(简体) ), VIEWS(中文(简体) )1个DOM和3个

A和B组

A是上面的投入。 B 为 NETEx: a VehicleType,带有 DeckPlan (一个) Deck 每节, PassengerEntrance )和 VehicleModel (徽章)当文件有他们。 NETEx 没有元素进入 KeyValues 在前缀下 3dbus: (单位:千美元)KEYS 列出每个元素。 A 类 VehicleType 无 DeckPlan 是一个 节: axles_mm, (中文(简体) ), windows_count 财务报告和审定财务报表 doors_hint (单位:千美元)zone:leaves[:bias][:axle_gap],逗号分离,例如:. front_overhang:2,between_axles:2:rear)是它的KeyValues,所以它的门是提示.

import { fromNetex, validate, limits } from "@entur/iteru-3dbus";

const r = fromNetex(xml); // { ok: true, inp, warns } or { ok: false, errs }; { prefix, id } as a second argument
const errs = r.ok ? [...validate(r.inp), ...limits(r.inp)] : r.errs; // limits are optional: a fantasy bus has none

fromNetex 剖析、取出、检查 NETEx 形状(图案的一分块,由 scripts/netex-slice.js),读取 KeyValues,构建输入并运行 validate; 每一个 错误名称其元素或密钥. limits 持有北欧长度、宽度、高度和门数限制; 北欧公共汽车 没有对照该文件检查2.0个数字. 演示应用有"Size limit"开关(Nordic QQ Free) 为了他们。 A 类 Length 离区总和10毫米以上是警告;秒 DeckLevel 给上方窗口 带(见限制).

作为自定义元素

guide/bus-3d.js 将库包成 <bus-3d>, (中文(简体) ), 与重建、相机、出错事件和处理主机需要。 这是用户指南的示例,而不是其中的一部分 软件包: 复制并指向其一个导入 @entur/iteru-3dbus。演示应用程序是其主机.

如何运作

flowchart LR
    subgraph inp["inp (validated)"]
        G["Body<br/>sections: length, axles, bellows<br/>width, height, roof equipment, tyre"]
        P["Placement<br/>bands, door hints, window hints"]
        L["Look<br/>colour, front"]
    end
    H["headlight SVG<br/>(optional)"] -.-> F
    G --> F[/"faces(inp)"/]
    P --> F
    L --> F
    F -->|"SVG maps: right/left per section,<br/>front, rear"| B[/"mkBus(inp, maps)"/]
    G --> B
    L -->|colour| B
    B --> D["THREE.Group<br/>meshes with mapped textures"]

faces 是表面细节的单一来源:同样的地图是模型的纹理和演示应用的地图卡. mkBus 每节都挤出 切开车轮拱 增加车轮、起伏器和车顶舱 并绘制纹理图.

包里没有

从相片(VLM, OpenCV)读取总线的ML, 留给消费者: 他们生产输入 (A) 或 NETEx (B),以及 软件包绘制它. docs/flowchart.html 勾画出这样一个管道.

限制

  • 一个通称前; 后模板没有绘制 .
  • 只有右边的门.
  • 最多两个甲板:第三个德克勒斯被拒绝. 上层甲板是一个窗口带(upper_win_band_height_mm),沿整条公交车划出同样一行.

剩余工作: 问题。 。 。 .

开发

npm i
npm run dev                              # the demo app: /list, /bus?file=volvo-8900.xml
npm test
npm run validate -- examples/*.xml examples/busnordic/*.xml   # .xml through fromNetex, else input JSON
npm run build:lib                        # the package, in dist-lib/

演示应用程序从 main 以 .github/workflows/pages.yml。 。 。 .

释放

npm version minor --no-git-tag-version   # in a PR; merge it
git tag v$(node -p "require('./package.json').version") && git push origin --tags   # on main, after the merge

标签运行 .github/workflows/release.yml测试,然后 npm pack,然后用焦油球放出一个 GitHub (单位:千美元)entur-iteru-3dbus-<version>.tgz,以及 entur-iteru-3dbus.tgz 页:1 releases/latest/download/和生成的音符, 接下来 npm publish 同样的焦油丸。 带有标签的标签 - (单位:千美元)v0.2.0-rc.1制作预发本,按 next。 。 。 .

CI 通过 npm 信任的出版发布: 注册员接受 release.yml {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}这个由OIDC重新发行的 {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}没有标志. 这种信任只能被设定在一个存在的软件包上,所以第一个版本是手取: scripts/publish-by-hand.sh 从工作树上发布标签并设定信任.

许可证

欧盟PL-1.2

版本与发布记录

@entur/iteru-3dbus 共发布 5 个版本,首次发布于 2026/10/17;过去 12 个月发布了 5 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.3.0latest2026/11/0212 天前
0.2.02026/10/2322 天前
0.1.12026/10/1827 天前
0.1.02026/10/1728 天前
0.0.0-stage2026/10/1728 天前

关于 @entur/iteru-3dbus 的常见问题

如何安装 @entur/iteru-3dbus?

在项目目录运行 npm install @entur/iteru-3dbus,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:three(^0.180.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@entur/iteru-3dbus 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/entur__iteru-3dbus 是否存在。

@entur/iteru-3dbus 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@entur/iteru-3dbus 可以商用吗?

@entur/iteru-3dbus 使用 EUPL-1.2 许可。声明的许可为 EUPL-1.2,请阅读许可原文确认使用条件。以上为概括,不构成法律意见,请以许可原文为准。

@entur/iteru-3dbus 的下载量有多少?

根据 npm 官方下载统计,@entur/iteru-3dbus 在 2026/10/14 – 2026/11/12 这 30 天内被下载 2,014 次,日均约 67 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@entur/iteru-3dbus 还在维护吗?

最新版本 0.3.0 发布于 2026/11/02(12 天前);至今共发布 5 个版本,其中过去 12 个月发布了 5 个;首次发布于 2026/10/17。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。