Introducing an open-source, accessible, simple, minimalistic file format for BIM. Built to be easy to read and write.
Created by BIM developers for BIM developers.
An idiot admires complexity, while a genius appreciates simplicity - Terry Davis
Website: https://www.dotbim.net
Quick introduction video: https://www.youtube.com/watch?v=RSV-0-UrzhQ
.bim | .ifc | |
---|---|---|
Is it open? | Yes | Yes |
Is it free? | Yes | Yes |
Type | Text file | Text file |
What it contains | Geometry + data attached | Geometry + data attached in a standardized way |
Types of geometries allowed | Triangulated meshes only | A lot of different types: meshes, extrusions, b-reps etc. |
Pages of documentation | 1 | 100+ |
To see much more extended comparison check out Dion's comparison here: paireks#8
If you're a developer, check out this document: https://github.com/paireks/dotbim/blob/master/DeveloperTips.md
- C# library: you're looking at it right now ;)
- Python library: dotbimpy - https://github.com/paireks/dotbimpy
- Grasshopper plugin: dotbimGH - https://github.com/paireks/dotbimGH
- dotbim-ifc, converts to and from IFC and dotbim: https://github.com/Moult/dotbim-ifc, Author: Dion Moult
- Online 3d Viewer, supports .bim files and converts to other file formats: https://3dviewer.net/, Authors: Viktor Kovacs, Agnes Gaschitz
- Blender add-on: dotbim-blender, imports and exports .bim files https://github.com/paireks/dotbim-blender, Author: Nathan Hild
- dotbim-io-dxf, converts to and from 3d DXF files: https://github.com/Gorgious56/dotbim_io_dxf, Author: Nathan Hild
- Typescript library: dotbim-ts - https://github.com/baid-group/dotbim-ts, Author: Maciej Lutostański
- Archicad addon: dotbim-archicad - https://github.com/kovacsv/dotbim-archicad, Author: Viktor Kovacs
- Revit detailed MEP to schematic 3d model - https://github.com/os4bim/dotbim, Author: Yoann Obry
- SketchUp add-on: https://github.com/MattiaBressanelli/import_dotbim, Author: Mattia Bressanelli
If you're building any app that will use .bim - let me know, I'll post it here :)
https://www.nuget.org/packages/dotbim/
It may require importing another nuget for Newtonsoft.Json library: https://www.nuget.org/packages/Newtonsoft.Json/13.0.1
- .bim
- License: MIT
- JSON structure
- x, y, z coordinates should be in meters
- Decimal point should be used
- JSON objects and properties should start with lowercase and with underscore as a seperator between words, e.g. schema_version
File contains 4 properties:
schema_version is the version of schema used in this file as string. Current one is "1.0.0".
mesh_id is integer >= 0 to reference this mesh later in element.
It is a big array of all coordinates of a mesh. It is structured in this way:
[X0, Y0, Z0, X1, Y1, Z1, X2, Y2, Z2, X3, Y3, Z3, ..., XN, YN, ZN]
Let's say our mesh is defined by 3 vertices: (0.0, 0.0, 0.0), (10.0, 0.0, 0.0) and (10.0, 5.0, 0.0), then your vertices_coordinates will look like this:
[0.0, 0.0, 0.0, 10.0, 0.0, 0.0, 10.0, 5.0, 0.0]
Later in faces_ids we refer to these vertices by their order.
It is a big array of ids (integers) that define all faces in a mesh. It is structured in this way:
[Face1_Id1, Face1_Id2, Face1_Id3, Face2_Id1, Face2_Id2, Face3_Id3, Face3_Id1, Face3_Id2, Face3_Id3, ..., FaceN_Id1, FaceN_Id2, FaceN_Id3]
If we'd like to create one-face mesh using vertices_coordinates from an example above, then it will look like this:
[0, 1, 2]
Pyramid example:
"coordinates": [
0.0,
0.0,
0.0,
10.0,
0.0,
0.0,
10.0,
10.0,
0.0,
0.0,
10.0,
0.0,
5.0,
5.0,
4.0
],
"indices": [
0,
1,
2,
0,
2,
3,
0,
1,
4,
1,
2,
4,
2,
3,
4,
3,
0,
4
]
guid is a string that can be used for comparison of different elements.
"guid": "76e051c1-1bd7-44fc-8e2e-db2b64055068"
Vector places referenced mesh where it should be placed as an element. It should have 3 properties:
- x (value)
- y (value)
- z (value)
"vector": {
"x": 9.9266016462536122,
"y": 3.3910972817343494,
"z": 52.239445879618685
}
Rotation rotates referenced mesh how it should be rotated as element. It is a quaternion. It should have 4 properties:
- qx (value) - first imaginary coefficient of the quaternion
- qy (value) - second imaginary coefficient of the quaternion
- qz (value) - third imaginary coefficient of the quaternion
- qw (value) - real part of the quaternion
"rotation": {
"qx": 0.63979295771454925,
"qy": 0.10626982147910254,
"qz": -0.12472093047736807,
"qw": -0.7508770776915008
}
color should have 3 properties:
- r (integer between 0-255) - red
- g (integer between 0-255) - green
- b (integer between 0-255) - blue
- a (integer between 0-255) - alpha
"color": {
"r": 255,
"g": 255,
"b": 0,
"a": 255
}
Element type. It is a string that specifies what mesh represents. E.g. "Beam", "Plate".
"type": "Beam"
info is just a dictionary with string as key and value.
"info": {
"Name": "Teapot",
"Price": "2.50$"
}
.bim file format encourages users to link their data by attaching URLs inside properties of file or specific elements. E.g.:
"info": {
"Name": "Metal sheet roofing",
"Catalogue": "https://pruszynski.com.pl/t-20-roof,prod,99,2294.php"
}
Such functionality allows also to link one model with another as well. If you're interested in this kind of linking, check this separate document about it: https://github.com/paireks/dotbim/blob/master/LinkingData.md
If you'd like to read more details about this project, a bit background + line-by-line explanation, you might find this article on BIM Corner interesting: https://bimcorner.com/a-new-bim-file-format/
- Multicolor extension: https://github.com/paireks/dotbim-extensions-multicolor
- Wojciech Radaczyński
- Tom Van Diggelen
- Harry Collin
- Marios Messios