2020-01-21 18:03:15 +11:00
|
|
|
IfcDiff
|
|
|
|
|
=======
|
|
|
|
|
|
2022-08-18 16:11:59 +10:00
|
|
|
IfcDiff is both a CLI utility and library that lets you compare the changes
|
|
|
|
|
between two IFC models. Changes are made on the assumption that the GlobalId of
|
|
|
|
|
an element in one model is consistent with the same element in another model.
|
|
|
|
|
You may compare geometric changes, and changes in various IFC relationships and
|
|
|
|
|
properties. IfcDiff supports comparing across different IFC schema versions.
|
2020-01-21 18:03:15 +11:00
|
|
|
|
2022-08-18 16:11:59 +10:00
|
|
|
Changes will be sorted into three lists:
|
2020-01-21 18:03:15 +11:00
|
|
|
|
2022-08-18 16:11:59 +10:00
|
|
|
- **Added**: a list of GlobalIds of elements present in the new file but not
|
|
|
|
|
present in the old file.
|
|
|
|
|
- **Deleted**: a list of GlobalIds of elements present in the old file but not
|
|
|
|
|
present in the new file.
|
|
|
|
|
- **Changed**: A list of GlobalIds of elements present in both the old and new
|
|
|
|
|
file, but changes were detected. A list of changes are provided.
|
2020-01-21 18:03:15 +11:00
|
|
|
|
2022-08-18 16:11:59 +10:00
|
|
|
There are different methods of installation, depending on your situation.
|
|
|
|
|
|
2024-06-26 11:44:19 +10:00
|
|
|
1. **PyPI** is recommended for developers using Pip.
|
2024-08-23 00:12:11 +10:00
|
|
|
2. **Using Bonsai** is recommended for non-developers wanting a graphical
|
|
|
|
|
interface.
|
2024-06-26 11:44:19 +10:00
|
|
|
3. **Source installation** is recommended for users wanting to use the latest
|
|
|
|
|
code as a library or a CLI utility.
|
|
|
|
|
|
|
|
|
|
PyPI
|
|
|
|
|
----
|
|
|
|
|
|
|
|
|
|
.. code-block::
|
|
|
|
|
|
|
|
|
|
pip install ifcdiff
|
|
|
|
|
|
2024-08-23 00:12:11 +10:00
|
|
|
Using Bonsai
|
|
|
|
|
------------
|
2024-06-26 11:44:19 +10:00
|
|
|
|
2024-08-23 00:12:11 +10:00
|
|
|
Bonsai is a Blender based graphical interface to IfcOpenShell. Other than
|
|
|
|
|
providing a graphical IFC authoring platform, it also comes with IfcOpenShell,
|
|
|
|
|
its utilities, and a Python shell built-in. This means you don't need to
|
|
|
|
|
install Python first, and you also can compare your IfcOpenShell scripting to
|
|
|
|
|
what you see with a visual model viewer, or use a graphical interface to access
|
|
|
|
|
the IfcOpenShell utilities.
|
2024-06-26 11:44:19 +10:00
|
|
|
|
2024-08-23 00:12:11 +10:00
|
|
|
1. Install Bonsai by following the `Bonsai
|
2024-06-26 11:44:19 +10:00
|
|
|
installation documentation
|
2024-08-23 00:12:11 +10:00
|
|
|
<https://docs.bonsaibim.org/quickstart/installation.html>`_.
|
2024-06-26 11:44:19 +10:00
|
|
|
|
|
|
|
|
2. Launch Blender. Change to the **Scene Properties** tab in the **Properties
|
|
|
|
|
Panel**. Scroll down to the **IFC Quality Control > IFC Diff** panel.
|
|
|
|
|
|
|
|
|
|
3. Browse to your old IFC file, new IFC file.
|
|
|
|
|
|
|
|
|
|
4. Optionally add any relationships you want to check.
|
|
|
|
|
|
|
|
|
|
5. Optionally type in a filter query.
|
|
|
|
|
|
|
|
|
|
6. Press **Execute IFC Diff**
|
|
|
|
|
|
|
|
|
|
TODO: add pictures and make this clearer for non-developers.
|
2022-08-18 16:11:59 +10:00
|
|
|
|
|
|
|
|
Source installation
|
|
|
|
|
-------------------
|
|
|
|
|
|
|
|
|
|
1. :doc:`Install IfcOpenShell <ifcopenshell-python/installation>`
|
2024-06-27 11:45:05 +10:00
|
|
|
2. `Clone the source code <https://github.com/IfcOpenShell/IfcOpenShell/tree/v0.8.0/src/ifcdiff>`_.
|
2023-06-07 16:00:12 +10:00
|
|
|
3. ``cd /path/to/IfcOpenShell/src/ifcdiff``
|
2022-09-19 12:25:35 +10:00
|
|
|
4. ``pip install -r requirements.txt``
|
2022-08-18 16:11:59 +10:00
|
|
|
|
|
|
|
|
Here is a minimal example of how to use IfcDiff as a Python module or CLI
|
|
|
|
|
utility:
|
|
|
|
|
|
2024-06-21 18:28:52 +05:00
|
|
|
.. code-block:: console
|
2022-08-18 16:11:59 +10:00
|
|
|
|
|
|
|
|
$ python -m ifcdiff -h
|
|
|
|
|
usage: ifcdiff.py [-h] [-o OUTPUT] [-r RELATIONSHIPS] old new
|
|
|
|
|
|
|
|
|
|
Show the difference between two IFC files
|
|
|
|
|
|
|
|
|
|
positional arguments:
|
|
|
|
|
old The old IFC file
|
|
|
|
|
new The new IFC file
|
|
|
|
|
|
|
|
|
|
options:
|
|
|
|
|
-h, --help show this help message and exit
|
|
|
|
|
-o OUTPUT, --output OUTPUT
|
|
|
|
|
The JSON diff file to output. Defaults to diff.json
|
|
|
|
|
-r RELATIONSHIPS, --relationships RELATIONSHIPS
|
|
|
|
|
A list of space-separated relationships, chosen from "type", "property", "container", "aggregate", "classification"
|
|
|
|
|
$ python -m ifcdiff old.ifc new.ifc
|
|
|
|
|
$ cat diff.json
|
|
|
|
|
|
|
|
|
|
Here is a minimal example of how to use IfcDiff as a library:
|
|
|
|
|
|
|
|
|
|
.. code-block:: python
|
|
|
|
|
|
|
|
|
|
from ifcdiff import IfcDiff
|
|
|
|
|
|
|
|
|
|
ifc_diff = IfcDiff("/path/to/old.ifc", "/path/to/new.ifc", "/path/to/diff.json")
|
|
|
|
|
ifc_diff.diff()
|
|
|
|
|
print(ifc_diff.change_register)
|
|
|
|
|
ifc_diff.export()
|
|
|
|
|
|
|
|
|
|
.. seealso::
|
|
|
|
|
|
|
|
|
|
For more information on how to use IfcDiff as a library, check out the :doc:`API
|
|
|
|
|
reference <autoapi/ifcdiff/index>`.
|
|
|
|
|
|
2022-09-19 12:25:35 +10:00
|
|
|
You can also alias it to a command:
|
|
|
|
|
|
2024-06-21 18:28:52 +05:00
|
|
|
.. code-block:: bash
|
2022-09-19 12:25:35 +10:00
|
|
|
|
2024-06-21 18:28:52 +05:00
|
|
|
alias ifcdiff='python -m ifcdiff'
|
2022-08-18 16:11:59 +10:00
|
|
|
|
|
|
|
|
Geometry changes
|
|
|
|
|
----------------
|
|
|
|
|
|
|
|
|
|
IfcDiff compares geometry changes using the underlying IFC geometric definition.
|
|
|
|
|
This means that if a shape is described in one file as an extrusion, and as a
|
|
|
|
|
mesh in another file, it is considered to be a change in geometry, even if they
|
|
|
|
|
resolve to be the same boundary representation.
|
|
|
|
|
|
|
|
|
|
Geometric tolerance is defined using the precision defined in the new IFC model.
|
|
|
|
|
|
|
|
|
|
Relationships
|
|
|
|
|
-------------
|
|
|
|
|
|
|
|
|
|
By default, IfcDiff only compares changes in attributes and geometry. You may
|
|
|
|
|
wish to optionally specify more relationships to compare. You may choose from:
|
|
|
|
|
|
|
|
|
|
- **type**: detects changes in the type relationship, such as when an
|
|
|
|
|
occurrence now belongs to a different type.
|
|
|
|
|
- **property**: detects changes in property sets, properties, quantity sets,
|
|
|
|
|
and quantities. Also includes detected changes in inherited properties.
|
|
|
|
|
- **container**: detects changes in the spatial container, handling indirect
|
|
|
|
|
containment such as when an element is part of an aggregate.
|
|
|
|
|
- **aggregate**: detects changes in aggregation.
|
|
|
|
|
- **classification**: detects changes in classification references. Also
|
|
|
|
|
includes detected changes in inherited classifications.
|