Open JanoSlivka opened 5 years ago
Moving to BIMserver issue tracker, as this is not a viewer problem
This is what IfcConvert has to say about it:
[Error] {067sA8zdLAg9ljXUp7lMFt} Invalid loop
[Error] {067sA8zdLAg9ljXUp7lMFt} Failed to convert:
#208045=IfcOpenShell((#208043))
[Error] {1WPpjxYDX0jQOLDiaebR$$} Invalid loop
[Error] {1WPpjxYDX0jQOLDiaebR$$} Failed to convert:
#462535=IfcOpenShell((#462533))
Not sure if that's the problem. Using Blender with IfcOpenShell import crashes blender. File looks similarly wrong in DDS-CAD, Solibri seems to get it right this time. Will report to IfcOpenShell developer.
A bit more debugging resulted in the 3 attached subfiles (layerset slicing disabled).
[1] This is the wall where the opening is missing, interestingly enough, running it through IfcConvert (0.6.0a1 (OCC 7.3.0)) results in the correct (looking) result. [2] and [3] These are the walls sticking out on one side. IfcConvert also returns the (incorrect looking) representation.
IfcConvert does not return any errors for any of these subfiles, so the aforementioned errors probably caused by other elements.
[1] IfcWall-39.txt [2] IfcWall-41.txt [3] IfcWall-45.txt
@aothms Maybe you would like to have a look at this sometime?
The volume below is subtracted from the walls. This is a violation of the requirements on a closed shell.
Every edge shall be referenced exactly twice by the loops of the face.
That middle edge has four faces. So it's actually two closed shells touching at an edge. I'm just giving you the reason for the current behaviour. Let's keep the issue open and I might find time to work on this.
Ok, thanks for explanation.
With current IfcOpenShell versions the invalid BREP seems to be skipped entirely as an operand during boolean operations.
The issue is slightly different then analysed in the first place: The upper horizontal face is bounded by one loop with 6 vertexes and there is no edge in the middle. Thus the violated manifold constraint is
IfcManifoldSolidBrep: Faces do not intersect except along their boundaries. IfcClosedShell: Distinct faces of the shell do not intersect, but may share edges or vertices.
The case of edges shared by more than 2 faces seems to be handled gracefully in IfcOpenShell by now (see IfcWall-45-fix-4.ifc.txt with the upper face split into two loops).
@aothms do you plan to fix the shell (on the IfcOpenShell side) for this case as well in the future?
So far I think the only improvement on BIMserver side could be to include some info or warning level information about the skipped boolean operand, but I don't think this can be achieved easily with the current render engine communication protocol. So in this case I wonder whether it would be better to fail rather than generate wrong geometry.
Just for the record, here is the sample with a valid BREP (by elevating top face): IfcWall-45-fix-2.ifc.txt
Hello,
can you please check why the window opening is not subtracted from the wall?? And the wall goes through the roof? I use BimServer 1.5.172 and BimSurfer v3 0.0.264. Thanks
Ifc: house.zip