Autodesk / revit-ifc

IFC for Revit and Navisworks (2019+)
477 stars 194 forks source link

Invalid IFC 4 export result from a wall with layers of the same material in Revit #603

Open FranziWM opened 1 year ago

FranziWM commented 1 year ago

Hi,

see attached PDF file.

Invalid IFC4 export result of walls consisting of layers.pdf

AngelVelezSosa commented 1 year ago

I believe this is a duplicate issue that we're already addressing but I will verify.

t-vasyi commented 1 year ago

https://jira.autodesk.com/browse/REVIT-203986

JOuellette-Autodesk commented 1 year ago

@FranziWM and @AngelVelezSosa I think the only thing that is incorrect is that the namings are not consistent between the IfcMaterialConstituent and IfcShapeAspect of the same material layers of the wall. It was not the intent to say every component has a unique name, only materially and dimensionally different components have unique names.

Thus, if you have an interior fire rated wall with 2 layers of gypsum board on both sides and the gypsum board is the same thickness and specifications for each layer, there is ONLY ONE name, with multiple entries (e.g. "15mm gypsum board") If you had 2 different types of gypsum board, then these would need to be called out accordingly and have different names for each type (e.g. "15mm gypsum board type x" and "10mm gypsum board"), with whatever combination (e.g. 2 layers of the 15mm and 2 of the 10mm.). But each layer would not have a distinct name, you'd have two of one and two of the other, per example.

JOuellette-Autodesk commented 1 year ago

@FranziWM What versions of Revit and the IFC Add-in are you using?

guenter1holzeder commented 1 year ago

@JOuellette-Autodesk In my opinion the mapping between IfcMaterialConstituent and IfcShapeAspect ist a design weakness in IFC. No matter if you are using layers with the same material (name), each layer has its OWN geometry. Thus each constituent material need to have an unique name which can be mapped to UNIQUE geometries.

Or is there another way to find a "bridge" between material and geometry in this case?

FranziWM commented 1 year ago

@JOuellette-Autodesk I use Revit version 23.1.10.4 and IFC4 Reference View.

FranziWM commented 1 year ago

Attached you can find a Revit and an IFC file. It containes just one example wall.

ORCA-AVA Beispieldatei.zip

FranziWM commented 1 year ago

An interesting point: In IFC2x3 the problem doesn't occur.

guenter1holzeder commented 1 year ago

In the given sample above there are unique names to the IfcMaterialConstituents (numbers in brackets) but not for their according geometries (IfcShapeAspects). So this is the missing mapping of both.

This cannot happen with IFC 2x3 because the mentioned IFC classes were introduced with IFC 4.

JOuellette-Autodesk commented 1 year ago

@JOuellette-Autodesk I use Revit version 23.1.10.4 and IFC4 Reference View.

@FranziWM Which of the Revit IFC exporter add-ins are you using?

JOuellette-Autodesk commented 1 year ago

@JOuellette-Autodesk In my opinion the mapping between IfcMaterialConstituent and IfcShapeAspect ist a design weakness in IFC. No matter if you are using layers with the same material (name), each layer has its OWN geometry. Thus each constituent material need to have an unique name which can be mapped to UNIQUE geometries.

Or is there another way to find a "bridge" between material and geometry in this case?

@guenter1holzeder Each MaterialConstituent entry has its own GUID. If the same material is used 4 times, it should have the same name 4 times so when you do a quantity takeoff, you get accurate results. The key thing is the naming on the user's part. You can't just use "gypsum" or "aluminum" if you are going to have different thicknesses and performance specs from each. "Gypsum" is a material, but it is NOT a building material.... where as "15mm Type X Gypsum Board" is. That is the best method for distinguishing between materials for QTO.

guenter1holzeder commented 1 year ago

@JOuellette-Autodesk This is the description from the IFC documentation (IFC4 ADD2 TC1)

_IfcMaterialConstituent is a single and identifiable part of an element which is constructed of a number of part (one or more) each having an individual material. The association of the material constituent to the part is provided by a keyword as value of the Name attribute. In order to identify and distinguish the part of the shape representation to which the material constituent applies the IfcProductDefinitionShape of the element has to include instances of IfcShapeAspect, using the same keyword for their Name attribute._

No GUID and no alternative concepts for mapping material with geometry except by names.

If you have four layers with same material and same thickness why should they have different material names like gypsum1, ..2, ..3 and so on?

guenter1holzeder commented 1 year ago

@JOuellette-Autodesk Our problem ist to identify the layer geometry by generic procedures, not to get QTOs from IFC. We are calculating quantities from geometries by ourselves.

FranziWM commented 1 year ago

@JOuellette-Autodesk I don't use a Revit IFC exporter add-in. Can you recommend one?

AngelVelezSosa commented 1 year ago

This is the add-in he meant. https://github.com/Autodesk/revit-ifc/releases/tag/IFC_v23.2.3.0

You should also be able to find it via the Autodesk Desktop Application which shows available updates

FranziWM commented 1 year ago

Ok, thank you. I installed the update but the result is still the same as described above.

guenter1holzeder commented 1 year ago

Hi, are there any news about the problem (bug) described above? There are other issues about the same. #517

AngelVelezSosa commented 1 year ago

I thought this was fixed, @o-babii ?

o-babii commented 12 months ago

Hi @AngelVelezSosa, @guenter1holzeder,

This bug is fixed, IfcShapeAspect and IfcMaterialConstituent are consistent starting IFC Exporter 23.3.0. Here is the export result comparing to previous addin version for the sample file: https://github.com/Autodesk/revit-ifc/files/10869175/ORCA-AVA.Beispieldatei.zip

image

@guenter1holzeder, Could you please add more details on your case, if this issue is still reproducible for you after updating to 23.3.0 (or 23.3.1)

Thanks

guenter1holzeder commented 12 months ago

@AngelVelezSosa Why closed? Please give me time to validate the fix.

AngelVelezSosa commented 12 months ago

Sorry that I jumped the gun, feel free to reopen if you find an issue.

guenter1holzeder commented 12 months ago

Please regard added files inside zip: ORCA-AVA Beispieldatei o-babii.zip

I exported the layered wall contained in the revit file to IFC 4 with Revit 24.0.5.432 and got the same (wrong) result. I patched the IFC file (" - wanted") with additional data to fix my issue. Please use a file comparer to see the difference.

The fix consists of a unique mapping each IfcMaterialConstituent (= wall layer) to its IfcShapeAspect (= geometry representation) as you can see by the graphic of #517.

@o-babii What do you mean with IFC Export 23.3? I thought in Revit 24 the IFC Exporter is built in!? @AngelVelezSosa Please reopen this issue

o-babii commented 11 months ago

@guenter1holzeder, Ok, I see. You faced this issue in Revit 2024, not 2023.

1) This bug is fixed for 2024 as well, IfcShapeAspect and IfcMaterialConstituent are consistent starting Revit 2024.1 or with opensource addin (https://github.com/Autodesk/revit-ifc/releases/tag/IFC_v24.2.0) if updating Revit is not suitable for you. 2) The fixed version gives a result different from what you specified in the "-wanted" file. See the comparison below: "- wanted" on the left and result with using IFC Extension 24.2 on the right image

Fixed version makes material consistent for IfcShapeAspect and IfcMaterialConstituent, the material name in the IFC corresponds to the material name in the Revit file. image It doesn`t multiply material names with like x (1), x (2), x (3) ...

Is this fix work for you? Or does your case require creating a unique material name (the same material) for each pair of IfcShapeAspect/IfcMaterialConstituent?

guenter1holzeder commented 11 months ago

@o-babii Unfortunately the fix doesn't work for me - and I think for everybody who need the INDIVIDUAL geometry representation of each wall layer.

So again in other words:

It is a question of coding algorithm to individualize each pair of IfcShapeAspect/IfcMaterialConstituent. (1), (2), ... is only a classic way to do so.

AngelVelezSosa commented 11 months ago

At the moment I think @guenter1holzeder is correct and "(2), (3), ..." for both IfcMaterialConstituent and IfcShapeAspect is the only possible IFC4 solution.

guenter1holzeder commented 11 months ago

@AngelVelezSosa Thanks for your agreement. 👍

Now what is your plan for this? We have several customer issues on that...

AngelVelezSosa commented 11 months ago

Our plan is to create a JIRA item (done) and work on it :)

louistrue commented 6 months ago

it has been a while, but I am coming back to this because I keep stumbling upon the (in my humble opinion) unfortunate implementation around ConstituentSets. The recent changes (which I tried to understand but honestly gave up after a while) mess up existing QTO workflows (after adapting for constituentSet 😣) because we now dont even get valid materials anymore: image

I also realized this doesnt work as intended, Width is a sum of 2 layers with same material name: image

AngelVelezSosa commented 6 months ago

We have done some additional work on this which we plan to integrate into a future update. We did just roll out some 2022 updates and are looking to do the rounds for other versions.

louistrue commented 6 months ago

thanks for your reply, good to hear 👍 looking forward to that 👏