New diagrams on the developer guide.

This commit is contained in:
Dion Moult
2022-01-28 20:32:41 +11:00
parent d3ef3f1501
commit 19e007a67c
7 changed files with 37 additions and 173 deletions
Binary file not shown.

Before

Width:  |  Height:  |  Size: 76 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

@@ -21,6 +21,8 @@ BCF. The same concepts will apply. We can call this Native OpenBIM authoring,
which is a paradigm shift from traditional BIM which relies on translated IFC
data.
.. image:: native-openbim.png
Every user operation reads or writes this data structure in memory, and the IFC
data becomes the source of truth for all data. There is no such thing as an
import or export. The data is always represented in IFC. When a BIM model is
@@ -38,13 +40,25 @@ Just show me the code!
----------------------
Sometimes, the best way to learn how to hack on a project is to just start
hacking away. The BlenderBIM Add-on code is separated into modules. Each module
focuses on a particular topic of BIM. Most modules are self-contained, but
sometimes they connect to one another, just like how BIM works.
hacking away. BIM authoring is a really big topic. As a result, the BlenderBIM
Add-on code is separated into modules. Each module focuses on a particular topic
of BIM. Most modules are self-contained, but sometimes they connect to one
another, just like how BIM works.
The BlenderBIM Add-on comes with a secret demo module which is basically a hello
world coding tutorial which teaches you about all the moving parts. It's far
more interesting to read this code rather than 15 pages of abstract software
.. image:: module-architecture.png
Modules are not arbitrary divisions. They tend to reflect how portions of BIM
data are segregated in the IFC international standard. This allows us to
minimise the overlap between modules, so that developers can work on a single
portion of the code with relative certainty that their actions will not affects
other developers.
- `BlenderBIM Add-on modules <https://github.com/IfcOpenShell/IfcOpenShell/tree/v0.6.0/src/blenderbim/blenderbim/bim/module>`__
- `IFC modules <https://github.com/IfcOpenShell/IfcOpenShell/tree/v0.6.0/src/ifcopenshell-python/ifcopenshell/api>`__
The BlenderBIM Add-on comes with a secret **demo module** which is basically a
hello world coding tutorial which teaches you about all the moving parts. It's
far more interesting to read this code rather than 15 pages of abstract software
architecture flow charts and diagrams. The code and its comments will guide you
through the process.
@@ -56,10 +70,12 @@ To see the demo module in action, you'll need to enable it. In
module. When you restart Blender, you will see a new demo panel in your scene
properties interface tab. Have fun!
Here are all the files associated with the demo module. Feel free to read them
in any order. Each file is heavily commented with explanations about what each
line of code does. Change some of the code, reload Blender, and see what
happens!
.. image:: demo-module.png
Now you're ready to learn how to code! Here are all the files associated with
the demo module. Feel free to read them in any order. Each file is heavily
commented with explanations about what each line of code does. Change some of
the code, reload Blender, and see what happens!
::
@@ -79,7 +95,8 @@ and how to test and structure it so that you can build incredibly complex
features in a maintainable way.
Tests for quality checking also exist. The system is designed so that you can
do "Test Driven Development". You can find the tests here:
do "Test Driven Development". For reference on how to run these tests, see
:ref:`blenderbim/running_tests` for details. You can find the tests here:
::
@@ -140,6 +157,8 @@ The BlenderBIM Add-on code may be understood in three separate layers: **Deliver
three layers from one another. Because they are separate, they can be tested and
built separately.
.. image:: architecture.png
The **Delivery** mechanism is how the application is delivered to
the user and handles user interactions. It covers the interface and triggering
events as inputs into the application, and rendering responses.
@@ -180,142 +199,14 @@ even with their own CLI. This **Data** layer isn't a single folder of code we
can point to, it's an ecosystem of libraries and utilities that we want to share
with the entire industry.
Delivery architecture
---------------------
TODO: Continue writing.
Past this point needs to be reviewed. Continue reading but don't trust anything
blindly.
The IFC based system takes care of reading and writing IFC data using
the IfcOpenShell library. This system is agnostic of Blender and the BlenderBIM
Add-on. Data is read from the IFC dataset using ``Data`` classes. Data is
written into the IFC dataset using ``Usecase`` classes.
The Blender based system takes care of turning Blender into a BIM authoring
client. Like all Blender add-ons, ``Operators`` define user operations, such as
those triggered when pressing a button. ``UI`` defines the interface, such as
the layout of buttons, input fields, and panels. Finally, ``Props`` define
properties that Blender keeps track of, typically for interface input fields or
user settings.
The Blender system depends on the IFC system. The IFC system does not depend on
the Blender system.
.. image:: architecture.png
..
digraph G {rankdir=LR;
node [fontname = "Handlee", shape=rect];
subgraph cluster_0 {
node [style=filled,color=pink];
IfcOpenShell -> Data;
Usecase -> IfcOpenShell;
label = "*IFC based*";
fontsize = 20;
color=grey
}
subgraph cluster_1 {
node [style=filled,color=lightblue];
Operators -> Usecase
Data->UI
Data->Operators
Operators -> Props
Props -> Operators
Props -> UI
label = "*Blender based*";
fontsize = 20;
color=grey
}
}
Of course, there are many details that we are glossing over, but it provides a
good representation of data flow in the BlenderBIM Add-on.
The code for these two systems may be found here:
- `ifcopenshell <https://github.com/IfcOpenShell/IfcOpenShell/tree/v0.6.0/src/ifcopenshell-python>`__
- `blenderbim <https://github.com/IfcOpenShell/IfcOpenShell/tree/v0.6.0/src/blenderbim>`__
Module architecture
-------------------
Because BIM authoring is a vast field, the architecture is further grouped into
modules. Modules include things like project related capabilities, structural
related capabilities, costing related capabilities, and so on.
Each module consists an IFC based system, which does all the IFC manipulations,
and a Blender based counterpart, which exposes all of these operations to the
user via the Blender interface.
.. image:: module-architecture.png
..
digraph G {
node [fontname = "Handlee", shape=rect];
subgraph cluster_1 {
rank=same;
{
blender1 [label="Blender", style=filled, color=lightblue];
ifc1 [label="IFC", style=filled, color=pink];
ifc1 -> blender1
blender1 -> ifc1
}
label = "*Project Module*";
fontsize = 20;
color=grey
}
subgraph cluster_2 {
rank=same;
{
blender2 [label="Blender", style=filled, color=lightblue];
ifc2 [label="IFC", style=filled, color=pink];
ifc2 -> blender2
blender2 -> ifc2
}
label = "*Structural Module*";
fontsize = 20;
color=grey
}
subgraph cluster_3 {
rank=same;
{
blender3 [label="Blender", style=filled, color=lightblue];
ifc3 [label="IFC", style=filled, color=pink];
ifc3 -> blender3
blender3 -> ifc3
}
label = "*XYZ Module*";
fontsize = 20;
color=grey
}
}
Modules are not arbitrary divisions, but instead reflect subgraphs of IFC
relationships that minimise overlap with other subgraphs. Therefore modules are
mostly self contained, and allow developers to work on a single portion of the
code with relative certainty that their actions will not affects other
developers. Sometimes, overlap is inevitable.
There are over 40 modules, so we won't list them here.
- `IFC modules <https://github.com/IfcOpenShell/IfcOpenShell/tree/v0.6.0/src/ifcopenshell-python/ifcopenshell/api>`__
- `Blender modules <https://github.com/IfcOpenShell/IfcOpenShell/tree/v0.6.0/src/blenderbim/blenderbim/bim/module>`__
IfcOpenShell Architecture
-------------------------
A large part of the BlenderBIM Add-on is understanding how IFC data is modified.
This code is not technically part of the the BlenderBIM Add-on codebase, but it
is vital to understand. You will need to be familiar with the IfcOpenShell
Python module.
Manipulating IFC data is not simple. IFC may be serialised into multiple
formats, multiple schema versions must be supported, and geometry may be defined
in a highly parametric or implicit manner, which geometry kernels do not
@@ -330,29 +221,6 @@ workings of the C++ base is out of scope.
.. image:: ifcopenshell-architecture.png
..
digraph G {rankdir=LR;
node [fontname = "Handlee", shape=rect, style=filled,color=pink];
IfcOpenShell [label="IfcOpenShell C++", color=grey]
ifcopenshell [label="IfcOpenShell-python"]
OpenCascade [color=grey]
CGAL [color=grey]
OpenCascade -> IfcOpenShell
CGAL -> IfcOpenShell
IfcOpenShell -> ifcopenshell
ifcopenshell -> Core
ifcopenshell -> Utils
ifcopenshell -> API
API -> Module01
API -> Module02
API -> Module03
Module03[label="..."]
Module01 -> Data
Module01 -> Usecase
}
IfcOpenShell offers a core set of low-level functionality to read and write this
data. An example of the core functionality would be:
@@ -416,9 +284,3 @@ The code for IfcOpenShell's various systems can be found here:
- `ifcopenshell (core) <https://github.com/IfcOpenShell/IfcOpenShell/tree/v0.6.0/src/ifcopenshell-python/ifcopenshell>`__
- `ifcopenshell.util <https://github.com/IfcOpenShell/IfcOpenShell/tree/v0.6.0/src/ifcopenshell-python/ifcopenshell/util>`__
- `ifcopenshell.api <https://github.com/IfcOpenShell/IfcOpenShell/tree/v0.6.0/src/ifcopenshell-python/ifcopenshell/api>`__
BlenderBIM Add-on architecture
------------------------------
TODO
Binary file not shown.

Before

Width:  |  Height:  |  Size: 408 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 159 KiB

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

@@ -1,3 +1,5 @@
.. _blenderbim/running_tests:
Running tests
=============