MoonBit Gmsh MSH exchange, topology and mesh inspection
| 能力 | 范围与边界 |
|---|---|
| MSH 交换 | 2.2 / 4.1;ASCII / 二进制;大小端;4.1 的 4/8 字节 size_t |
| 编号 | 稀疏、乱序节点与单元编号;正整数 ≤ 2,147,483,647,超出明确拒绝 |
| 单元 | Gmsh 类型 1–19,覆盖常见一、二阶单元;连接顺序无损保存 |
| 元数据 | 4.1 实体、包围盒、带符号边界引用、物理组、参数坐标;2.2 额外标签 |
| 数据字段 | 多帧 NodeData / ElementData;1/3/9 分量;稀疏数据;时间与额外头标签 |
| 变换 | 按单元/物理组取子集、清除未使用节点、紧凑编号;同步维护字段关联 |
| 拓扑 | 线性单元面/边邻接、外边界、非流形面;全阶共享节点连通分量 |
| 边界工作流 | 外面/外边/端点提取,复用显式单元标签/字段,来源映射与损失报告,派生MSH导出 |
| 几何 | 孤立/精确重复节点、重复连接;线性三角形面积/质量、四面体有符号体积/翻转/质量 |
| 导出 | MSH、JSON;线性网格的 geometry-only VTK/OBJ;体网格 OBJ 导出外边界 |
moon check --target all
moon test --target js
moon test --target wasm-gc
moon build --target js --release
node tools/gmsh.mjs inspect examples/triangle.msh
node tools/gmsh.mjs quality examples/triangle.msh examples/quality.json
node tools/gmsh.mjs topology examples/triangle.msh
node tools/gmsh.mjs boundary examples/triangle.msh
node tools/gmsh.mjs boundary-msh examples/triangle.msh examples/boundary.json boundary.msh
moon run examples/extract_boundary --target js
node tools/gmsh.mjs validate examples/triangle.msh examples/strict.json
node tools/gmsh.mjs convert examples/triangle.msh examples/convert.json converted.msh
node tools/gmsh.mjs inspect converted.msh
node tools/gmsh.mjs vtk examples/triangle.msh examples/export.json mesh.vtk
node tools/gmsh.mjs obj examples/triangle.msh examples/export.json mesh.objnode tools/gmsh.mjs COMMAND INPUT [OPTIONS.json] [OUTPUT]
node tools/gmsh.mjs create OPTIONS.json OUTPUT| 选项 | 用途 |
|---|---|
| version | 输出 "2.2" / "4.1";默认保持输入版本 |
| binary, little | 是否二进制、是否小端;默认 false / true |
| size_width | 默认 8;仅 4.1 可设 4 |
| allow_loss | 默认 false;明确接受目标格式无法表示的已知元数据损失 |
| drop_unknown | 默认 false;显式丢弃未知段,才允许变换或跨版本/二进制转换 |
| tags | subset 的唯一单元编号数组;保留请求顺序 |
| dimension, group | physical 的维度与物理组;topology 可用 dimension 指定层级 |
| tag | quality 的单元编号 |
| tolerance | 退化质量阈值,默认 1e-12,范围 [0,1) |
| strict | validate 为 true 时,已支持的几何缺陷同时触发退出码 3 |
| max_facets | boundary/boundary-msh 的输出面额度,0..100万,默认100万;不截断 |
{"nodes":[{"tag":10,"xyz":[0,0,0]},{"tag":20,"xyz":[1,0,0]}],
"elements":[{"tag":7,"kind":1,"nodes":[10,20]}],
"version":"4.1","binary":true}let m = @gmsh.decode(bytes)
let selected = m.subset([77]).compact()
let output = selected.encode(version="4.1", binary=true)
let report = m.diagnostics()
let faces = m.topology().boundary
let boundary = m.extract_boundary()
let mapping = boundary.report()
// Inspect mapping.losses before explicitly opting into any loss.python -m pip install -r tools/requirements.txt
python tools/verify-reference.py
python tools/verify-boundary.py
node tools/check-cli.mjsmoon check --target all --deny-warn
moon test --target js --deny-warn
moon test --target wasm-gc --deny-warn
moon build --target js --release --deny-warn
moon packagepub struct Boundary {
// private fields
}pub(all) struct BoundaryCoverage {
boundary_dimension : Int
facets : Int
groups : Array[BoundaryGroup]
unlabeled : Array[BoundarySource]
multiple : Array[BoundarySource]
missing_groups : Array[Int]
} derive(ToJson)pub(all) struct BoundaryField {
source_index : Int
input_entries : Int
retained_entries : Int
} derive(ToJson)pub(all) struct BoundaryReport {
source_dimension : Int
boundary_dimension : Int
selected_elements : Int
nodes : Array[BoundaryNode]
facets : Array[BoundarySource]
fields : Array[BoundaryField]
losses : Array[String]
} derive(ToJson)pub(all) struct BoundarySource {
element : Int
owner : Int
owner_index : Int
local_facet : Int
explicit_element : Int
} derive(ToJson)pub struct Mesh {
// private fields
}pub(all) struct Quality {
tag : Int
kind : Int
measure : Double
signed_volume : Double
quality : Double
degenerate : Bool
inverted : Bool
} derive(ToJson)Install
Download zipMoonBit Gmsh MSH exchange, topology and mesh inspection