{"id":13470440,"url":"https://github.com/paireks/dotbim","last_synced_at":"2025-05-16T09:06:42.604Z","repository":{"id":44903872,"uuid":"454449625","full_name":"paireks/dotbim","owner":"paireks","description":"Minimalist file format for BIM","archived":false,"fork":false,"pushed_at":"2024-12-29T13:44:05.000Z","size":11908,"stargazers_count":177,"open_issues_count":6,"forks_count":22,"subscribers_count":22,"default_branch":"master","last_synced_at":"2025-05-09T16:44:53.205Z","etag":null,"topics":["3d-models","bim","dotbim","file-format"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/paireks.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-02-01T15:52:16.000Z","updated_at":"2025-05-02T13:43:43.000Z","dependencies_parsed_at":"2022-09-16T03:41:40.325Z","dependency_job_id":"2fda9295-b595-4b49-ad02-7cbbbce0c6ce","html_url":"https://github.com/paireks/dotbim","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paireks%2Fdotbim","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paireks%2Fdotbim/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paireks%2Fdotbim/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paireks%2Fdotbim/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/paireks","download_url":"https://codeload.github.com/paireks/dotbim/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254501558,"owners_count":22081528,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["3d-models","bim","dotbim","file-format"],"created_at":"2024-07-31T16:00:30.377Z","updated_at":"2025-05-16T09:06:37.587Z","avatar_url":"https://github.com/paireks.png","language":"C#","funding_links":[],"categories":["BIM Library"],"sub_categories":["C Sharp"],"readme":"![dotbim header](https://user-images.githubusercontent.com/4988604/212753228-2abcdfbe-b824-4f64-9c87-1319dae7e7ca.png)\n\n# dotbim (Schema version 1.1.0)\n\n[![Release](https://img.shields.io/nuget/v/dotbim?logo=nuget\u0026label=release\u0026color=blue)](https://www.nuget.org/packages/dotbim/)\n[![.NET Standard 2.0](https://img.shields.io/badge/-.NET%20Standard%202.0-blue)](https://www.nuget.org/packages/dotbim/)\n\n![AddOnIcon_154x154](https://user-images.githubusercontent.com/47977819/214624938-0e201999-7d74-4fc1-b975-03e20a961e21.png)\n\n## Introduction\n\nIntroducing an open-source and minimalist file format for BIM. Built to be easy to read and write.\n\nCreated by BIM developers for BIM developers.\n\n\u003cem\u003eAn idiot admires complexity, while a genius appreciates simplicity\u003c/em\u003e - Terry Davis\n\nWebsite: https://www.dotbim.net\n\nQuick introduction video: https://www.youtube.com/watch?v=RSV-0-UrzhQ\n\n## BIM vs IFC comparison\n\n|                             | .bim                     | .ifc                                                      |\n| --------------------------- | ------------------------ | --------------------------------------------------------- |\n| Is it open?                 | Yes                      | Yes                                                       |\n| Is it free?                 | Yes                      | Yes                                                       |\n| Type                        | Text file                | Text file                                                 |\n| What it contains            | Geometry + data attached | Geometry + data attached in a standardized way            |\n| Types of geometries allowed | Triangulated meshes only | A lot of different types: meshes, extrusions, b-reps etc. |\n| Pages of documentation      | 1                        | 100+                                                      |\n\nTo see much more extended comparison check out Dion's comparison here: https://github.com/paireks/dotbim/issues/8\n\n## Guide for developers\n\nIf you're a developer, check out this document: https://github.com/paireks/dotbim/blob/master/DeveloperTips.md\n\n## Apps supporting .bim\n\n(alphabetical order)\n\n### Apps and libraries that support .bim files\n\n| Name | Purpose | Link | Author |\n| ---- | ------- | ---- | ------ |\n| building3d | A wannabe framework for 3D modeling and simulation of buildings | https://github.com/krzysztofarendt/building3d | Krzysztof Arendt |\n| kolega.space | Fully automated volume studies in a flash | https://www.kolega.space/ | Designbotic |\n| Spacio | Lets you design, analyse, and bring to life properly structured building proposals – all within the same day. | https://spacio.ai/ | Spacio |\n| topologicpy | An Advanced Spatial Modelling and Analysis Software Library for Architecture, Engineering, and Construction | https://topologic.app/ | Wassim Jabi |\n| T-Rex | Reinforcement modelling | https://www.food4rhino.com/en/app/t-rex | Wojciech Radaczyński |\n\n### Viewers and graphics SDKs that support .bim files\n\n| Name             | Purpose | Link                                                                            | Author |\n|------------------| ------- |---------------------------------------------------------------------------------| ------ |\n| dotbim.three.js  | Convert dotbim file to three.js object | [Click](https://github.com/ricaun/dotbim.three.js)                              | Luiz Henrique Cassettari |\n| Online 3d Viewer | 3d viewer in browser | https://3dviewer.net/                                                           | Viktor Kovacs, Agnes Gaschitz |\n| STEP Viewer      | 3d viewer in browser | [Click](https://githubdragonfly.github.io/viewers/templates/STEP%20Viewer.html) | GitHubDragonFly |\n| xeokit           | Web Programming Toolkit for AEC Graphics | https://xeokit.io/                                                              | Lindsay Kay |\n| xeo.vision       | Engineering 3D BIM Viewer | https://xeo.vision/                                                           | Creoox |\n\n### Connectors - plugins that allow to export and/or import of .bim files to other software\n\n| Name | Link | Author |\n| ---- | ---- | ------ |\n| dotbim-archicad | [Click](https://github.com/kovacsv/dotbim-archicad) | Viktor Kovacs |\n| dotbim-blender | [Click](https://github.com/paireks/dotbim-blender) | Nathan Hild |\n| DotBimConvert/RevitExporter | [Click](https://github.com/RyugaRyuzaki/DotBimConvert/tree/main/RevitExporter) | Ryuga Ryuzaki |\n| dotbimGH | [Click](https://github.com/paireks/dotbimGH) | Wojciech Radaczyński |\n| dotbimRH | [Click](https://github.com/seghier/DotBimRHImportExport) | Seghier Mohamed Abdelaziz |\n| dotbim-Tekla | [Click](https://warehouse.tekla.com/#/catalog/details/a68b0576-e978-4cf8-b8bf-d196eb72a5f2) | Grzegorz Olszewski |\n| import_dotbim | [Click](https://github.com/MattiaBressanelli/import_dotbim) | Mattia Bressanelli |\n\n### Libraries for developers\n\n| Name | Purpose | Link | Author |\n| ---- | ------- | ---- | ------ |\n| dotbim | Library written in C# language | you're looking at it right now ;) | Wojciech Radaczyński |\n| dotbimpy | Library written in Python language | https://github.com/paireks/dotbimpy | Wojciech Radaczyński |\n| dotbim_rust | Library written in Rust language | https://github.com/paireks/dotbim_rust | Wojciech Radaczyński |\n| dotbim-ts | Library written in Typescript language | https://github.com/baid-group/dotbim-ts | Maciej Lutostański |\n\n### Converters - programs that allow to convert to/from .bim files\n\n| Name | Purpose | Link | Author |\n| ---- | ------- | ---- | ------ |\n| DotBimConvert/IFC | Converts from IFC | https://github.com/RyugaRyuzaki/DotBimConvert/tree/main/Ifc | Ryuga Ryuzaki |\n| dotbim-ifc | Converts to and from IFC and dotbim | https://github.com/Moult/dotbim-ifc | Dion Moult |\n| dotbim-io-dxf | Converts to and from 3d DXF and dotbim | https://github.com/Gorgious56/dotbim_io_dxf | Nathan Hild |\n| mesh2mesh | Mac application with ability to convert from .dae, .obj, .ply, .scn, .stl, .usd, .usda, .usdz | https://apps.apple.com/us/app/mesh2mesh/id1672770477 | fluthaus |\n| Online 3d Viewer | 3d viewer with ability of conversion from .obj, .3ds, .stl, .ply, .gltf, .glb, .off, .3dm, .fbx, .dae, .wrl, .3mf, .amf, .ifc, .brep, .step, .iges, .fcstd. | https://3dviewer.net/ | Viktor Kovacs, Agnes Gaschitz |\n\n### Other projects related to .bim\n\n| Name | Purpose | Link | Author |\n| ---- | ------- | ---- | ------ |\n| DotBimConvert/Compress | Compress and decompress .bim files | [Click](https://github.com/RyugaRyuzaki/DotBimConvert/tree/main/Compress) | Ryuga Ryuzaki |\n| ICEBridge | Blender plugin to send BIM data to IDA ICE | [Click](https://github.com/maxtillberg/ICEBridge) | Max Tillberg |\n| os4bim/dotbim | Converts Revit's detailed MEP to schematic 3d model | [Click](https://github.com/os4bim/dotbim) | Yoann Obry |\n| three.model.bim | 3d modelling in browser | https://github.com/RyugaRyuzaki/three.model.bim | Ryuga Ryuzaki |\n\nIf you're building any app that will use .bim - let me know, I'll post it here :)\n\n## NuGet package\n\nhttps://www.nuget.org/packages/dotbim/\n\n## Structure\n![BIM_Structure_01](https://user-images.githubusercontent.com/4988604/216430744-4b06030c-72e7-4d18-ac30-e5b90ac598f5.png)\n\n\n## Documentation\n\n### Main information\n\n- .bim\n- License: MIT\n- JSON structure\n- x, y, z coordinates should be in meters\n- Decimal point should be used\n- JSON objects and properties should start with lowercase and with underscore as a seperator between words, e.g. schema_version \n\n### file\n\nFile contains 4 properties:\n\n![BIM_file_01](https://user-images.githubusercontent.com/4988604/216434213-51b92980-1a9a-49b4-85e7-62fb439a7ef1.png)\n\n**schema_version** is the version of schema used in this file as string.\n\n### mesh\n\n![BIM_Mesh_01](https://user-images.githubusercontent.com/4988604/216436783-eae0e200-7521-492c-9412-59aa5e15b4a7.png)\n\n**mesh_id** is integer \u003e= 0 to reference this mesh later in the element.\n\n#### coordinates\n\nIt is a big array of all coordinates of a mesh. It is structured in this way:\n\n[X0, Y0, Z0, X1, Y1, Z1, X2, Y2, Z2, X3, Y3, Z3, ..., XN, YN, ZN]\n\nLet'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:\n\n[0.0, 0.0, 0.0, 10.0, 0.0, 0.0, 10.0, 5.0, 0.0]\n\nLater in faces_ids we refer to these vertices by their order.\n\n#### indices\n\nIt is a big array of ids (integers) that define all faces in a mesh. It is structured in this way:\n\n[Face1_Id1, Face1_Id2, Face1_Id3, Face2_Id1, Face2_Id2, Face3_Id3, Face3_Id1, Face3_Id2, Face3_Id3, ..., FaceN_Id1, FaceN_Id2, FaceN_Id3]\n\nIf we'd like to create one-face mesh using vertices_coordinates from an example above, then it will look like this:\n\n[0, 1, 2]\n\nPyramid example:\n\n```json\n  \"coordinates\": [\n    0.0,\n    0.0,\n    0.0,\n    10.0,\n    0.0,\n    0.0,\n    10.0,\n    10.0,\n    0.0,\n    0.0,\n    10.0,\n    0.0,\n    5.0,\n    5.0,\n    4.0\n  ],\n  \"indices\": [\n    0,\n    1,\n    2,\n    0,\n    2,\n    3,\n    0,\n    1,\n    4,\n    1,\n    2,\n    4,\n    2,\n    3,\n    4,\n    3,\n    0,\n    4\n  ]\n```\n\n### element\n\n![BIM_Element_01](https://user-images.githubusercontent.com/4988604/216438260-73f6bd54-56db-41b4-9509-6c0da2281089.png)\n**guid** is a string that can be used for comparison of different elements. \n\n```json\n\"guid\": \"76e051c1-1bd7-44fc-8e2e-db2b64055068\"\n```\n\n#### vector\n\nVector places referenced mesh where it should be placed as an element. It should have 3 properties:\n\n1. x (value)\n2. y (value)\n3. z (value)\n\n```json\n  \"vector\": {\n    \"x\": 9.9266016462536122,\n    \"y\": 3.3910972817343494,\n    \"z\": 52.239445879618685\n  }\n```\n\n#### rotation\n\nRotation rotates referenced mesh how it should be rotated as element. It is a quaternion. It should have 4 properties:\n\n1. qx (value) - first imaginary coefficient of the quaternion\n2. qy (value) - second imaginary coefficient of the quaternion\n3. qz (value) - third imaginary coefficient of the quaternion\n4. qw (value) - real part of the quaternion\n\n```json\n  \"rotation\": {\n    \"qx\": 0.63979295771454925,\n    \"qy\": 0.10626982147910254,\n    \"qz\": -0.12472093047736807,\n    \"qw\": -0.7508770776915008\n  }\n```\n\n#### color and face_colors\n\n**From schema_version 1.1.0 if face_colors tag is applied, then we color element using face_colors, if there is no face_colors - we use color tag to color an element.**\n\ncolor should have 3 properties:\n\n1. r (integer between 0-255) - red\n2. g (integer between 0-255) - green\n3. b (integer between 0-255) - blue\n4. a (integer between 0-255) - alpha\n\n```json\n  \"color\": {\n    \"r\": 255,\n    \"g\": 255,\n    \"b\": 0,\n    \"a\": 255\n  }\n```\n\nTo color single element with multiple colors add \"face_colors\" tag inside an element. \"face_colors\" is a simple list of integers (integers should be between 0-255) organised in that way:\n\n[r1, g1, b1, a1, r2, g2, b2, a2, r3, g3, b3, a3, ... rn, gn, bn, an]\n\nIt should match each face of the mesh.\n\nSo let's say you have 3 faces inside one mesh, and wanted to color first face (triangle) as red (255,0,0,255), second as skyblue (135,206,235,255), third as white (255,255,255,255). Then you will have:\n\n```json\n\n\"face_colors\" : [ 255, 0, 0, 255, 135, 206, 235, 255, 255, 255, 255, 255 ]\n\n```\n\n#### type\n\nElement type. It is a string that specifies what mesh represents. E.g. \"Beam\", \"Plate\".\n\n```json\n\"type\": \"Beam\"\n```\n\n### info\n\ninfo is just a dictionary with string as key and value.\n\n```json\n  \"info\": {\n    \"Name\": \"Teapot\",\n    \"Price\": \"2.50$\"\n  }\n```\n\n.bim file format encourages users to link their data by attaching URLs inside properties of file or specific elements. E.g.:\n\n```json\n  \"info\": {\n    \"Name\": \"Metal sheet roofing\",\n    \"Catalogue\": \"https://pruszynski.com.pl/t-20-roof,prod,99,2294.php\"\n  }\n```\n\nSuch functionality allows also to link one model with another as well.\nIf you're interested in this kind of linking, check this separate document about it: https://github.com/paireks/dotbim/blob/master/LinkingData.md\n\n## Tell me more\n\nIf 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/\n\n## Authors\n\n- Wojciech Radaczyński\n- Viktor Kovacs\n\n## Advisors\n- Tom Van Diggelen\n- Harry Collin\n- Marios Messios\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpaireks%2Fdotbim","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpaireks%2Fdotbim","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpaireks%2Fdotbim/lists"}