铁道三号线
从一个 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/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 没有元素进入
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 从工作树上发布标签并设定信任.