# @entur/iteru-3dbus 中文文档

规范地址：https://npmcn.com/package/%40entur/iteru-3dbus/

版本：0\.3\.0
npm 元数据更新时间：2026-11-01T23:03:31.935Z
中文译文更新时间：2026-11-14T14:24:56.508Z
软件包许可：EUPL-1\.2

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40entur/iteru-3dbus
原文对照：https://npmcn.com/package/%40entur/iteru-3dbus/?lang=original
项目主页：https://github.com/entur/iteru-3dbus#readme
源码仓库：https://github.com/entur/iteru-3dbus

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：69.7 kB，10 个文件
- 模块格式：ES Module
- TypeScript 类型：未声明
- 运行依赖：2 个
- peer 依赖：three ^0\.180\.0
- 首次发布：2026-10-17T10:03:07.902Z
- 最新版本发布：2026-11-01T23:03:31.659Z
- 近 30 天下载量：2014（2026-10-14 至 2026-11-12，npm 官方下载统计）
- 已发布版本数：5（近 12 个月 5 个）

## 中文简介

[![npm](https://img.shields.io/npm/v/@entur/iteru-3dbus)](https://www.npmjs.com/package/@entur/iteru-3dbus) [![license](https://img.shields.io/npm/l/@entur/iteru-3dbus)](https://github.com/entur/iteru-3dbus/blob/main/LICENSE.txt)

## 安装

```sh
npm install @entur/iteru-3dbus
```

也可以使用：`pnpm add @entur/iteru-3dbus`、`yarn add @entur/iteru-3dbus`、`bun add @entur/iteru-3dbus`

## README

# 铁道三号线

[![npm](https://img.shields.io/npm/v/@entur/iteru-3dbus)](https://www.npmjs.com/package/@entur/iteru-3dbus) [![license](https://img.shields.io/npm/l/@entur/iteru-3dbus)](https://github.com/entur/iteru-3dbus/blob/main/LICENSE.txt)

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

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

## 安装

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

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

## 使用

```js
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`](https://github.com/entur/iteru-3dbus/blob/main/schema/bus-input.schema.json) (合同v3.0),长度为毫米. [`examples/`](https://github.com/entur/iteru-3dbus/tree/main/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/core` | `validate`, (中文(简体) ), `limits`, (中文(简体) ), `schema`,得出数字(`layout`, (中文(简体) ), `doors`, (中文(简体) ), `windows`,(......), `MM` | 无:在节点运行 |
| `@entur/iteru-3dbus/limits` | `limits`:北欧的限制作为信件,在 `validate` | 无:在节点运行 |
| `@entur/iteru-3dbus/netex` | `fromNetex`, (中文(简体) ), `KEYS`, (中文(简体) ), `PREFIX`: 一个 NETEx `VehicleType` 读入输入 | 无:在节点运行; `fast-xml-parser` 财务报告和审定财务报表 `ajv` 属于依赖关系 |
| `@entur/iteru-3dbus/faces` | `faces`: 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 没有元素进入 `KeyValue`s 在前缀下 `3dbus:` (单位:千美元)`KEYS` 列出每个元素。 A 类 `VehicleType` 无 `DeckPlan` 是一个 节: `axles_mm`, (中文(简体) ), `windows_count` 财务报告和审定财务报表 `doors_hint` (单位:千美元)`zone:leaves[:bias][:axle_gap]`,逗号分离,例如:. `front_overhang:2,between_axles:2:rear`)是它的KeyValues,所以它的门是提示.

```js
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`](https://npmcn.com/package/%40entur/iteru-3dbus/scripts/netex-slice.js)),读取 KeyValues,构建输入并运行 `validate`; 每一个 错误名称其元素或密钥. `limits` 持有北欧长度、宽度、高度和门数限制; **北欧公共汽车 没有对照该文件检查2.0个数字.** 演示应用有"Size limit"开关(Nordic QQ Free) 为了他们。 A 类 `Length` 离区总和10毫米以上是警告;秒 `DeckLevel` 给上方窗口 带(见限制).

### 作为自定义元素

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

## 如何运作

```mermaid
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`](https://npmcn.com/package/%40entur/iteru-3dbus/docs/flowchart.html) 勾画出这样一个管道.

## 限制

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

剩余工作: [问题](https://github.com/entur/iteru-3dbus/issues)。 。 。 .

## 开发

```sh
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`。 。 。 .

## 释放

```sh
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`](https://npmcn.com/package/%40entur/iteru-3dbus/scripts/publish-by-hand.sh) 从工作树上发布标签并设定信任.

## 许可证

[欧盟PL-1.2](https://npmcn.com/package/%40entur/iteru-3dbus/LICENSE.txt)

## 常见问题

### 如何安装 @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 和提交记录判断。

