BIMserver icon indicating copy to clipboard operation
BIMserver copied to clipboard

Wall rendering problem

Open JanoSlivka opened this issue 6 years ago • 6 comments

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

JanoSlivka avatar Nov 21 '19 15:11 JanoSlivka

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

rubendel avatar Nov 21 '19 19:11 rubendel

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 avatar Nov 21 '19 19:11 rubendel

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?

rubendel avatar Nov 22 '19 08:11 rubendel

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

aothms avatar Feb 03 '20 15:02 aothms

Ok, thanks for explanation.

JanoSlivka avatar Feb 03 '20 16:02 JanoSlivka

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

hlg avatar Mar 15 '21 14:03 hlg