BIMserver icon indicating copy to clipboard operation
BIMserver copied to clipboard

Missing Doors Opening [0.15.162.jar / 0.15.181.jar]

Open paullee0 opened this issue 5 years ago • 9 comments

BIMserver [0.15.162.jar on Win7] render attached IFC model with some missing doors.

IFC++ render the openings correctly.

Steps to reproduce the behaviour:

  1. Checkin the attached IFC
  2. Check the doors
  3. Found a few of them does not have openings at wall

Expected behavior Should have door opening as in IFC++ / original model in FreeCAD

Screenshots

Screenshot from 2020-01-21 00-58-26

Villa Savoye_1F_03.zip Screenshot from 2020-01-20 03-14-02

paullee0 avatar Jan 20 '20 17:01 paullee0

Other missing Windows / Doors

Screenshot from 2020-01-21 01-20-31 Screenshot from 2020-01-21 01-18-22

paullee0 avatar Jan 20 '20 17:01 paullee0

Similar result latest 0.15.181.jar on Win 7.

Same IFC file.

Screenshot from 2020-01-21 02-50-43

paullee0 avatar Jan 20 '20 18:01 paullee0

Thanks for testing the latest release! I think this is related to the following issue: https://github.com/opensourceBIM/BIMserver/issues/1063

I have extracted the wall for debugging purposes [1].

This is the message IfcConvert (0.6.0b0 (OCC 7.3.0)) has about the specific wall:

[Error] {0D09gOgWH95BCTVau1lLiY} Opening subtraction failed for 21 openings
#67=IfcWall('0D09gOgWH95BCTVau1lLiY',#68,'Wall__1F_3.1mH','',$,#69,#1,$,.MOVABLE.)

@aothms Could you have a look at this?

[1] IfcWall-32.ifc.txt

rubendel avatar Jan 20 '20 19:01 rubendel

Thanks checking!

paullee0 avatar Jan 20 '20 20:01 paullee0

The issue is a non-manifold situation within the same shell as a result of the openings, see image. This pretty rare and caused perhaps also by that what we see here is one single wall element (which is not recommended by the standard, wall elements should not have discontinuities).

A workaround would be to break up your wall at that location (left side of the glass pane) into multiple elements or do a union with the part above so that the non-manifoldness does not occur anymore.

In the meantime I'll keep the issue open, but I can't promise to invest time into this soon.

afbeelding

aothms avatar Feb 03 '20 14:02 aothms

Thanks! Do not understand the technicality :( but I just lower the triangular window to avoid it coincident to the top edge of the wall. It works :) Do not know if it should just works like IFC++ ?

And a new problem shows.

There is a subtraction element but it is (was) not subtracted in BIMserver (it shows correctly in IFC++)

Screenshot from 2020-02-09 08-49-56

Screenshot from 2020-02-09 08-47-14

Screenshot from 2020-02-09 08-47-51

Screenshot from 2020-02-09 08-47-39

paullee0 avatar Feb 09 '20 01:02 paullee0

Your last issue is due to some adventurous modelling construction:

#348=IFCWALL('0D09gOgWH95BCTVau1lLiY',#5,'Wall__1F_3.1mH','',$,#63,#347,$,.MOVABLE.);
#379=IFCBUILDINGELEMENTPROXY('1gCQMP6fzAAg6EH6G$m$Bl',#5,'Wall__2F_Slab_Upstand',$,$,#63,#378,$,.ELEMENT.);
#380=IFCRELAGGREGATES('0L7LOXdVj37e7Bd$BIWYx_',#5,'Addition','',#348,(#379));
#443=IFCOPENINGELEMENT('0cK1npQyz6HOK0rVRwZpuu',#5,'Extru__1F_RampParapet02_Outline',$,$,#63,#442,$,$);
#444=IFCRELVOIDSELEMENT('3$3mYNHbf0lxlTIVtSy550',#5,'Subtraction','',#348,#443);

So your wall consists of two products. The main bulk of representation items is in the representation of the wall #348 and a little piece is in the building element proxy #379. These two parts are then connected via an aggregation relationship with the wall being the whole and the proxy being the part. Now you expect the feature subtraction on the wall to also have an effect on the proxy. IfcQuery seems to interpret the situation like that, but many other applications don't. I might have missed something in the specification, but I think you have created an ambiguous model. How should an application know whether to first carry out the aggregation or the subtraction? I don't think these implicit boolean operators have any precedence specified.

Semantically, it might be more appropriate to replace IfcRelAggregates with IfcRelProjectsElement and IfcBuildingElementProxy with IfcProjectionElement. This is feature addition and the additive equivalent to feature substraction with IfcRelVoidsElement and IfcOpeningElement. This would not solve the precedence issue though.

#379=IFCPROJECTIONELEMENT('1gCQMP6fzAAg6EH6G$m$Bl',#5,'Wall__2F_Slab_Upstand',$,$,#63,#378,$,$);
#380=IFCRELPROJECTSELEMENT('0L7LOXdVj37e7Bd$BIWYx_',#5,'Addition','',#348,#379);

To solve the precedence in Boolean operations, you could just include the representation items of the proxy into the wall representation and remove the proxy and aggregation. The fixed file displays properly in BIMserver.

image

With the latter solution, you lose the treatment of "Wall__2F_Slab_Upstand" as an independent product, but I think you don't need it: There are no properties attached to it and you have squashed all other internal walls into one single product anyway. Though as @aothms said, it would be cleaner to model wall segments as separate products with one or few representation items each instead of one giant product with many representation items.

Another hint to improve your IFC: Do not abuse feature subtraction, i.e. IfcRelVoidsElement/IfcOpeningElement for Boolean operations that don't really establish a feature/opening, for example #443. Better model these as CSG on the representation level (with IfcBooleanResult). This implies that subtraction is carried out on single items (and not an aggregation), but you can reuse the second CSG operand to subtract from multiple items.

hlg avatar Mar 15 '21 17:03 hlg

Thanks :D Probably ping @yorikvanhavre to have a look when there is a gap.

paullee0 avatar Mar 15 '21 18:03 paullee0

Any update regarding this issue?

zaqifathis avatar Jan 23 '25 11:01 zaqifathis