Add a missing "=" to create a valid SVG for ellipses.
I accidentally stumbled upon a way to actually get an ellipse in SVG by
tilting a cylinder. If I tilt the cylinder via the `ObjectPlacement` of
the `IfcProduct` I get an ellipse. If I set the `ExtrudedDirection` of
the `IfcExtrudedAreasolid`, however, I get a sampled path.
Use <circle> and <ellipse> to create a valid SVG for these geometries.
Limit to only the *first* edge. I am not sure whether there are
scenarios with multiple edges like this:
1. One or more straight line pieces or arc segments
2. A full closed circle
3. More straight lines or arc segments
If there is, we are keeping the original behavior here.
For the scenario where we a building storey and it has an elevation:
Instead taking the cross section of every product 1 meter above it's
lowest, take the cross section at storey elevation + 1 meter.
When running the viewer app in python3, I got the following crash:
Traceback (most recent call last):
File "geom_app.py", line 2, in <module>
ifcopenshell.geom.app.application().start()
File "/usr/lib/python3/dist-packages/ifcopenshell/geom/app.py", line 534, in __init__
self.editor = code_edit(self.canvas, configuration().options('snippets'))
File "/usr/lib/python3/dist-packages/ifcopenshell/geom/app.py", line 68, in __init__
config = Cfg()
TypeError: 'ConfigParser' object is not callable
Unify configparser usage for py2 and py3 by making sure the py3 path
also gives a callable Cfg
`if(bounding_width)` evaluates to true as long as `bounding_width` is
non-zero (including negative values). Since `bounding_width` and
`bounding_height` are default initialized to -1.0, we were erroneously
setting a bounding rectangle of (-1.0, -1.0) here. This means the SVG
output has been broken/malformed if we didn't specify --bounds.
* Implementation of BVH tree for IFC files using NCollection_UBTree
* Fixes for gcc and OCCT < v6.8
* Enable BVH selection by TopoDS_Shape
* Small fixes to tree
* Merge conflicted files and other changes
* Eliminate one warning (some remain) + add tree test
When adding entities, don't assign ID to Simple types.
Otherwise that type will be serialized incorrectly.
This fixes the issue with IFCPLANEANGLEMEASURE being serilzed
incorrectly when used as attribute to IFCMEASUREWITHUNIT.
With ID assigned, it will look like this:
#10=IFCMEASUREWITHUNIT(#9=IFCPLANEANGLEMEASURE(0.017453293),#8);
The correct way to serialze is:
#10=IFCMEASUREWITHUNIT(IFCPLANEANGLEMEASURE(0.017453293),#8);
* ifcgeom: Add placement_rel_to for convert()
Change geometry conversion in `convert()` for `ObjectPlacement` such
that we can stop the `PlacementRelTo()` recursion when we hit an
`ObjectPlacement` that places a certain type, e.g. a `IfcSite'.
Introduce a new IteratorSetting `SITE_LOCAL_PLACEMENT` which will be
exposed in `IfcConvert`.
* IfcConvert: Add --site-local-placement
Some IFC authoring tools may put the global origo at a large distance
away from the actual building geometry. Also, the global X- and Y-axes
may be at arbitrary angles with natural building axes. Using
--center-model or --model-offset may place the converted geometry closer
to origo, but will still use the global IFC definition of axis
directions. Also, in a scenario with multiple IFC files for one
construction site, using --center-model on each of them would not
generate consistent geometry across OBJ or DAE files.
Solve this by introducing --site-local-placement which will disregard
the ObjectPlacement at the IfcSite level.