opensourceBIM / BIMserver

The open source BIMserver platform
GNU Affero General Public License v3.0
1.56k stars 611 forks source link

Wall rendering problem #1063

Open JanoSlivka opened 5 years ago

JanoSlivka commented 5 years ago

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 model

Ifc: house.zip

rubendel commented 5 years ago

Moving to BIMserver issue tracker, as this is not a viewer problem

rubendel commented 5 years ago

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.

rubendel commented 5 years ago

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?

aothms commented 4 years ago

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.

afbeelding

JanoSlivka commented 4 years ago

Ok, thanks for explanation.

hlg commented 3 years ago

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