Skip to main content

A Pydantic-based fork of the official dotbim python package.

Project description

dotbimpy

This is a maintained fork of dotbimpy by Wojciech Radaczyński, originally released under the MIT license. A PR has been raised to the original repository. If the original maintainer wishes to merge changes back, I'm happy to coordinate.

Description

Open-source Python library for dotbim file format.

Read more about dotbim here: https://github.com/paireks/dotbim

dotbim's website: https://dotbim.net/

Here you can find small manual for developers regarding development of tools that will work with .bim file format: https://github.com/paireks/dotbim/blob/master/DeveloperTips.md

Installation

Python

pip install dotbim-community

JupyterLab / Jupyter Notebooks

To display models inside notebooks additional steps are required, as displaying of models is based on plotly. Check out them there:

Google colab

To use it in Google colab add this line at the beggining of the notebook:

!pip install dotbim-community

Examples

Pyramid example

2022-02-18_16h09_04

# Mesh properties
coordinates = [
    # Base
    0.0, 0.0, 0.0,
    10.0, 0.0, 0.0,
    10.0, 10.0, 0.0,
    0.0, 10.0, 0.0,

    # Top
    5.0, 5.0, 4.0
]

indices = [
    # Base faces
    0, 1, 2,
    0, 2, 3,

    # Side faces
    0, 1, 4,
    1, 2, 4,
    2, 3, 4,
    3, 0, 4
]

# Instantiate Mesh object
mesh = Mesh(mesh_id=0, coordinates=coordinates, indices=indices)

# Element properties
color = Color(r=255, g=255, b=0, a=255)
guid = "76e051c1-1bd7-44fc-8e2e-db2b64055068"
info = {"Name": "Pyramid"}
rotation = Rotation(qx=0, qy=0, qz=0, qw=1.0)
type = "Structure"
vector = Vector(x=0, y=0, z=0)

# Instantiate Element object
element = Element(mesh_id=0,
                  vector=vector,
                  guid=guid,
                  info=info,
                  rotation=rotation,
                  type=type,
                  color=color)

# File meta data
file_info = {
    "Author": "John Doe",
    "Date": "28.09.1999"
}

# Instantiate and save File object
file = File("1.0.0", meshes=[mesh], elements=[element], info=file_info)
file.save("Pyramid.bim")

3 cubes example

Cubes

from dotbimpy import *


coordinates = [
    0.0, 0.0, 0.0,
    10.0, 0.0, 0.0,
    10.0, 0.0, 20.0,
    0.0, 0.0, 20.0,
    0.0, 30.0, 0.0,
    10.0, 30.0, 0.0,
    10.0, 30.0, 20.0,
    0.0, 30.0, 20.0
]

faces_ids = [
    # Front side
    0, 1, 2,
    0, 2, 3,

    # Bottom side
    0, 1, 4,
    1, 4, 5,

    # Left side
    0, 4, 3,
    4, 3, 7,

    # Right side
    1, 2, 5,
    2, 5, 6,

    # Top side
    2, 3, 7,
    2, 6, 7,

    # Back side
    4, 5, 7,
    5, 6, 7
]

mesh = Mesh(mesh_id=0, coordinates=coordinates, indices=faces_ids)

red_cube = Element(mesh_id=0,
                   color=Color(255, 0, 0, 255),
                   vector=Vector(x=-100.0, y=-100.0, z=-100.0),
                   rotation=Rotation(qx=0.0, qy=0.0, qz=0.0, qw=1.0),
                   guid="9f61b565-06a2-4bef-8b72-f37091ab54d6",
                   info={"Name": "Red Cube"},
                   type="Brick")

green_cube = Element(mesh_id=0,
                     color=Color(0, 255, 0, 126),
                     vector=Vector(x=-0.0, y=0.0, z=0.0),
                     rotation=Rotation(qx=0.0, qy=0.0, qz=0.0, qw=1.0),
                     guid="4d00c967-791a-42a6-a5e8-cf05831bc11d",
                     info={"Name": "Green Cube"},
                     type="Brick")

blue_cube = Element(mesh_id=0,
                    color=Color(0, 0, 255, 10),
                    vector=Vector(x=100.0, y=100.0, z=100.0),
                    rotation=Rotation(qx=0.0, qy=0.0, qz=0.0, qw=1.0),
                    guid="8501a5e3-4709-47d8-bd5d-33d745a435d5",
                    info={"Name": "Blue Cube"},
                    type="Brick")

file_info = {"Author": "John Doe"}

file = File(schema_version="1.0.0",
            meshes=[mesh],
            elements=[red_cube, green_cube, blue_cube],
            info=file_info)

file.save("Cubes.bim")

Read file

read_file = File.read("Pyramid.bim")

And then you can get all of the properties from it:

version = read_file.schema_version

View file

Default

If you want to view your file:

file.view()

2022-02-23_23h49_52

Customize

You can customize the plot that represents the .bim file. You can do it by using:

figure = file.create_plotly_figure()

Then you get plotly's figure, which can be edited. E.g.

  • adding text tag:

2022-04-22_22h26_02

from dotbimpy import *

bim_file = File.read(r"Teapot.bim")
figure = bim_file.create_plotly_figure()

figure.update_layout(
    scene=dict(
        annotations=[
            dict(
                showarrow=False,
                x=0,
                y=0,
                z=1.5,
                text="My Teapot!"
            )]
    ),
)

figure.show()
  • combining model view with charts:

image

Merge files

If you want to merge two files together:

merged_file = file_a + file_b

dotbimpy + trimesh

There is a wonderful library called trimesh: https://github.com/mikedh/trimesh, that has a lot of features regarding meshes. Because .bim files relies on meshes only, therefore you can find this library really helpful for many tasks related dotbim, like:

Example notebook: https://github.com/paireks/dotbimpy/blob/master/dotbimpy/other/DotbimToTrimeshScene.ipynb

dotbimpy + cadquery

Sometimes it's much easier to create B-REP and then convert it into mesh. For this purpose you can try cadquery: https://github.com/CadQuery/cadquery

Example notebook 1: https://github.com/paireks/dotbimpy/blob/master/dotbimpy/other/WallsWithBeams.ipynb

2022-03-14_00h07_13

Example notebook 2: https://github.com/paireks/dotbimpy/blob/master/dotbimpy/other/Truss.ipynb

2022-03-20_13h18_47

Libraries used

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dotbim_community-1.0.0.tar.gz (221.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

dotbim_community-1.0.0-py3-none-any.whl (7.8 kB view details)

Uploaded Python 3

File details

Details for the file dotbim_community-1.0.0.tar.gz.

File metadata

  • Download URL: dotbim_community-1.0.0.tar.gz
  • Upload date:
  • Size: 221.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for dotbim_community-1.0.0.tar.gz
Algorithm Hash digest
SHA256 a67d48ad1c4838e22190017cf8ed2b15e95e173b247ddd7a1b1626a4786988a5
MD5 584385303dbe328086c77df568b4906b
BLAKE2b-256 974a96adb0fd0c07e7b06d142eb8b06426ed562bf02f12abc559b2a5e4a2a32b

See more details on using hashes here.

Provenance

The following attestation bundles were made for dotbim_community-1.0.0.tar.gz:

Publisher: pypi-publish.yml on thekaushikls/dotbim-community

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file dotbim_community-1.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for dotbim_community-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0935c7e969483962527085422d8d10862ae2a74aec87c2e654a75521ab8f944a
MD5 cb48ed972992f4c4ef50a7655f352459
BLAKE2b-256 486ece5b838cfd5fb3625c767d92d38f3fadd5b51bbd8869886d3ad2dff7fec8

See more details on using hashes here.

Provenance

The following attestation bundles were made for dotbim_community-1.0.0-py3-none-any.whl:

Publisher: pypi-publish.yml on thekaushikls/dotbim-community

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page