OM3格式解析

文件类型

OM3格式用于存储ObjectModel3D类型

格式规范

文本格式包含固定字段和非固定字段,固定字段必须包含,非固定字段可能不包含,同一字段仅出现一次

标题字段

固定字段,表达格式类型

  • 二进制:48 4F 4D 33 44 46 0A
  • 数据:HOM3DF\n

类型字段

固定字段,表达3D对象模型类型

第一类:表达包含点、法向量、三角形序号、多边形序号、有点基元球(无线序号)的3D对象模型

  • 二进制:00 01
  • 数据:1

第二类:表达包含线序号,无点基元球,基元长方体,基元平面的3D对象模型

  • 二进制:00 02
  • 数据:2

第四类:表达包含自定义扩展属性的3D对象模型

  • 二进制:00 04
  • 数据:4

附加字段

待研究

面字段

用于表达点云的面信息,也就是点如何构成的面结构

多边形类型

每组序号长度不一致,不小于3

多边形序号标题

  • 二进制:00 0C 66 61 63 65 5F 70 6F 6C 79 67 6F 6E
  • 数据:12(标题长度) face_polygon

多边形个数

  • 二进制:00 00 00 02
  • 数据:2

多边形数据个数

  • 二进制:00 00 00 06
  • 数据:6

多边形数据

  • 二进制:
    00 00 00 00 00 00 00 01 00 00 00 02
    00 00 00 00 00 00 00 01 00 00 00 02
  • 数据:
    0 1 2
    0 1 2

多边形长度和多边形起始序号

  • 二进制:
    00 00 00 03 00 00 00 00
    00 00 00 03 00 00 00 03
  • 数据:
    3 0
    3 3

三角形类型

每组序号长度一致,均为3个

三角形序号标题

  • 二进制:00 0D 66 61 63 65 5F 74 72 69 61 6E 67 6C 65
  • 数据:13(标题长度) face_triangle

三角形个数

  • 二进制:00 00 00 03
  • 数据:3

三角形序号

  • 二进制:
    00 00 00 00 00 00 00 01 00 00 00 02
    00 00 00 00 00 00 00 01 00 00 00 02
    00 00 00 00 00 00 00 01 00 00 00 02
  • 数据:
    0 1 2
    0 1 2
    0 1 2

线字段

每组序号长度不一致,不小于2

线序号标题

  • 二进制:00 0A 6C 69 6E 65 5F 61 72 72 61 79
  • 数据:10(标题长度) line_array

线个数

  • 二进制:00 00 00 03
  • 数据:3

线数据个数

  • 二进制:00 00 00 08
  • 数据:8

线数据

  • 二进制:
    00 00 00 00 00 00 00 01 00 00 00 02
    00 00 00 00 00 00 00 01
    00 00 00 00 00 00 00 01 00 00 00 02
  • 数据:
    0 1 2
    0 1
    0 1 2

线长度和线起始序号

  • 二进制:
    00 00 00 03 00 00 00 00
    00 00 00 02 00 00 00 03
    00 00 00 03 00 00 00 05
  • 数据:
    3 0
    2 3
    3 5

法向量字段

用于存储法向量信息,长度和点坐标一致,包含XYZ分量

法向量标题

  • 二进制:00 0C 70 6F 69 6E 74 5F 6E 6F 72 6D 61 6C
  • 数据:12(标题长度) point_normal

法向量个数

  • 二进制:00 00 00 03
  • 数据:3(点个数)

法向量XYZ分量数据

  • 二进制:
    3F 80 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 3F 80 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 3F 80 00 00
  • 数据:
    1(点1 X法向量分量) 0(点2 X法向量分量) 0(点3 X法向量分量)
    0(点1 Y法向量分量) 1(点2 Y法向量分量) 0(点3 Y法向量分量)
    0(点1 Z法向量分量) 0(点2 Z法向量分量) 1(点3 Z法向量分量)

XYZMapping字段

XYZMapping标题

  • 二进制:00 0B 78 79 7A 5F 6D 61 70 70 69 6E 67
  • 数据:11(标题长度) xyz_mapping

Map点长度

  • 二进制:00 00 00 04
  • 数据:4

Map列数

  • 二进制:00 00 00 03
  • 数据:3

Map行数

  • 二进制:00 00 00 02
  • 数据:2

Map列号

  • 二进制:00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 01
  • 数据:0 0 1 1

Map行号

  • 二进制:00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 01
  • 数据:0 1 0 1

自定义扩展属性

属性名开头为&符号

自定义扩展属性标题

  • 二进制:00 05 26 72 65 64 73
  • 数据:5(标题长度) &reds

自定义扩展属性长度

  • 二进制:00 00 00 04
  • 数据:4

自定义扩展属性类型

Object类型

  • 二进制:00 00 00 00
  • 数据:0(object)

Points类型

  • 二进制:00 00 00 01
  • 数据:1

Triangles类型

  • 二进制:00 00 00 02
  • 数据:2

Polygons类型

  • 二进制:00 00 00 03
  • 数据:3

Lines类型

  • 二进制:00 00 00 04
  • 数据:4

自定义扩展属性数据

  • 二进制:3F 80 00 00 3F 80 00 00 3F 80 00 00 3F 80 00 00
  • 数据:1 1 1 1

标准扩展属性

属性名开头不带&符号

标准扩展属性标题

  • 二进制:00 05 26 72 65 64 73
  • 数据:5(标题长度) &reds

标准扩展属性长度

  • 二进制:00 00 00 02
  • 数据:2

标准扩展属性类型

Object类型

  • 二进制:00 00 00 00
  • 数据:0(object)

Points类型

  • 二进制:00 00 00 01
  • 数据:1

Triangles类型

  • 二进制:00 00 00 02
  • 数据:2

Polygons类型

  • 二进制:00 00 00 03
  • 数据:3

Lines类型

  • 二进制:00 00 00 04
  • 数据:4

标准扩展属性数据类型

float32

  • 二进制: 00 01
  • 数据: 1

float64

  • 二进制: 00 02
  • 数据: 2

标准扩展属性数据

float32

  • 二进制: 3F 80 00 00 3F 80 00 00
  • 数据: 1 1

float64

  • 二进制: 3F 80 00 00 00 00 00 00 3F 80 00 00 00 00 00 00
  • 数据: 1 1

基元字段

圆柱类型

圆柱基元标题

  • 二进制:00 0B 6F 5F 70 72 69 6D 69 74 69 76 65
  • 数据:11(标题长度) o_primitive

圆柱基元类型

  • 二进制:00 00 00 01 00 00 00 01
  • 数据:1(类型标志长度) 1(类型标志)

圆柱基元pose

  • 二进制:
    40 90 4E 4F BA 6F 34 5F
    40 9E B5 04 7C C4 C1 B3
    40 AB 51 C4 7F 42 5E 91
    40 67 00 00 00 87 AD 02
    40 76 2F FF FF 46 E8 33
    00 00 00 00 00 00 00 00
    00 00 00 00
  • 数据:
    2500(X平移×1000)
    1500(Y平移×1000)
    250(Z平移×1000)
    18.035383320187695(X旋转)
    346.853804236635(Y旋转)
    0(Z旋转)
    0(位姿类型)

圆柱半径

  • 二进制:40 BB 47 14 01 1C E6 89
  • 数据:6983.078141981395(球半径×1000)

圆柱轴长个数

  • 二进制:00 00 00 01
  • 数据:1

圆柱轴长

  • 二进制:
    C0 C0 9A 00 15 8F 43 4F
    40 C0 9A 00 0F EE C0 B6
  • 数据:
    -8500.000657947412(轴坐标最小值×1000)
    8500.00048622522(轴坐标最大值×1000)

精度参数

有精度参数
精度参数个数
  • 二进制:00 00 00 01
  • 数据:1
精度参数
  • 二进制:3F 2D 90 C8 26 92 8D 83
  • 数据:0.00022556727643517288(精度×1000)
无精度参数
精度参数个数
  • 二进制:00 00 00 00
  • 数据:0

球类型类型

球基元标题

  • 二进制:00 0B 6F 5F 70 72 69 6D 69 74 69 76 65
  • 数据:11(标题长度) o_primitive

球基元类型

  • 二进制:00 00 00 01 00 00 00 02
  • 数据:1(类型标志长度) 2(类型标志)

球基元pose

  • 二进制:
    40 8F 40 00 00 00 00 00
    40 9F 40 00 00 00 00 00
    40 A7 70 00 00 00 00 00
  • 数据:
    1000(X平移×1000)
    2000(Y平移×1000)
    3000(Z平移×1000)

球半径

  • 二进制:40 AF 40 00 00 00 00 00
  • 数据:4000(球半径×1000)

空位

  • 二进制:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  • 数据:0 0 0

精度参数

  • 二进制:3D 50 00 00 00 00 00 00
  • 数据:2.2737367544323206e-13(精度×1000)

球类型类型(类型字段2&4)

球基元标题

  • 二进制:00 0B 6F 5F 70 72 69 6D 69 74 69 76 65
  • 数据:11(标题长度) o_primitive

球基元类型

  • 二进制:00 00 00 01 00 00 00 02
  • 数据:1(类型标志长度) 2(类型标志)

球基元pose

  • 二进制:
    40 8F 40 00 00 00 00 00
    40 9F 40 00 00 00 00 00
    40 A7 70 00 00 00 00
    00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00
    00 00 00 00
  • 数据:
    1000(X平移×1000)
    2000(Y平移×1000)
    3000(Z平移×1000)
    0(X旋转)
    0(Y旋转)
    0(Z旋转)
    0(位姿类型)

球半径

  • 二进制:40 AF 40 00 00 00 00 00
  • 数据:4000(球半径×1000)

精度参数

有精度参数
精度参数个数
  • 二进制:00 00 00 01
  • 数据:1
精度参数
  • 二进制:3F 2D 90 C8 26 92 8D 83
  • 数据:0.00022556727643517288(精度×1000)
无精度参数
精度参数个数
  • 二进制:00 00 00 00
  • 数据:0

平面类型

平面基元标题

  • 二进制:00 0B 6F 5F 70 72 69 6D 69 74 69 76 65
  • 数据:11(标题长度) o_primitive

平面基元类型

  • 二进制:00 00 00 01 00 00 00 03
  • 数据:1(类型标志长度) 3(类型标志)

平面基元pose

  • 二进制:
    40 A3 88 00 00 00 00 00
    40 97 70 00 00 00 00 00
    40 6F 40 00 00 00 00 00
    40 32 09 0E E1 9B 07 B1
    40 75 AD A9 2E A1 98 8A
    00 00 00 00 00 00 00 00
    00 00 00 00
  • 数据:
    2500(X平移×1000)
    1500(Y平移×1000)
    250(Z平移×1000)
    18.035383320187695(X旋转)
    346.853804236635(Y旋转)
    0(Z旋转)
    0(位姿类型)

平面点个数

  • 二进制:00 00 00 05
  • 数据:5

平面点坐标

  • 二进制:
    C4 0A 35 5D C4 B8 F1 82
    43 C7 04 0E C4 10 0A D9
    44 30 E8 B3 44 C6 75 B1
    C4 0A 35 5D 43 EA 04 F5
    C4 0A 35 5D C4 B8 F1 82
  • 数据:
    -552.8338012695312(点1 Y坐标×1000) -1479.547119140625(点1 X坐标×1000)
    398.03167724609375(点2 Y坐标×1000) -576.1694946289062(点2 X坐标×1000)
    707.6359252929688(点3 Y坐标×1000) 1587.6778564453125(点3 X坐标×1000)
    -552.8338012695312(点4 Y坐标×1000) 468.0387268066406(点4 X坐标×1000)
    -552.8338012695312(点5 Y坐标×1000) -1479.547119140625(点5 X坐标×1000)

精度参数

有精度参数
精度参数个数
  • 二进制:00 00 00 01
  • 数据:1
精度参数
  • 二进制:3F 2D 90 C8 26 92 8D 83
  • 数据:0.00022556727643517288(精度×1000)
无精度参数
精度参数个数
  • 二进制:00 00 00 00
  • 数据:0

长方体类型

长方体基元标题

  • 二进制:00 0B 6F 5F 70 72 69 6D 69 74 69 76 65
  • 数据:11(标题长度) o_primitive

长方体基元类型

  • 二进制:00 00 00 01 00 00 00 04
  • 数据:1(类型标志长度) 4(类型标志)

长方体基元pose

  • 二进制:
    40 8F 40 00 00 00 00 00
    40 9F 40 00 00 00 00 00
    40 A7 70 00 00 00 00 00
    40 10 00 00 00 00 00 00
    40 14 00 00 00 00 00 00
    40 18 00 00 00 00 00 00
    00 00 00 00
  • 数据:
    1000(X平移×1000)
    2000(Y平移×1000)
    3000(Z平移×1000)
    4(X旋转)
    5(Y旋转)
    6(Z旋转)
    0(位姿类型)

长方体长宽高

  • 二进制:
    40 8F 40 00 00 00 00 00
    40 9F 40 00 00 00 00 00
    40 A7 70 00 00 00 00 00
  • 数据:
    1000(长方体长×1000)
    1000(长方体宽×1000)
    1000(长方体高×1000)

精度参数个数

  • 二进制:00 00 00 00
  • 数据:0

点字段

用于存储点坐标信息,包含每个点的XYZ信息

点坐标标题

  • 二进制:00 0B 70 6F 69 6E 74 5F 63 6F 6F 72 64
  • 数据:11(标题长度) point_coord

点坐标个数

  • 二进制:00 00 00 03
  • 数据:3(点个数)

点坐标数据

  • 二进制:
    44 7A 00 00 44 7A 00 00 44 7A 00 00
    44 FA 00 00 44 FA 00 00 44 FA 00 00
    45 3B 80 00 45 3B 80 00 45 3B 80 00
  • 数据:
    1000(点1 X坐标×1000) 1000(点2 X坐标×1000) 1000(点3 X坐标×1000)
    2000(点1 Y坐标×1000) 2000(点2 Y坐标×1000) 2000(点3 Y坐标×1000)
    3000(点1 Z坐标×1000) 3000(点2 Z坐标×1000) 3000(点3 Z坐标×1000)

结束字段

文件末尾信息,为固定字段

末尾标题

  • 二进制信息:00 00 46 44 33 4D 4F 48 2E
  • 数据:0(标题长度) FD3MOH.