Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support for IFC 4.3 #353

Open
eriadam opened this issue Sep 11, 2020 · 14 comments
Open

Support for IFC 4.3 #353

eriadam opened this issue Sep 11, 2020 · 14 comments
Assignees
Labels
help wanted schema Updates to the IFC schema
Milestone

Comments

@eriadam
Copy link

eriadam commented Sep 11, 2020

Hello,

Do you maybe already have plans about supporting the upcoming version of IFC 4.3? It is already a release candidate.
https://standards.buildingsmart.org/IFC/DEV/IFC4_3/RC1/HTML/

We would be very interested in this IFC version due to the new infrastructure types it adds (IfcRoad, IfcRail, etc.).

Thanks,
Adam

@martin1cerny
Copy link
Member

Hi Adam,

yes, we have a plan to implement it in the next few months. What is your use-case for this? We would be very interested if you had any data we could use to test & validate our implementation. Or, would you use xbim to create an infrastructure data? In any case: Would you be interested to participate on the implementation in some way?

Martin

@bekraft
Copy link
Contributor

bekraft commented Sep 14, 2020

Hi,
since 4.3 is based on 4.1 Alignment: Is there anything already done implementing alignment entities? There is a ticket xBimTeam/XbimGeometry#181. What the current state?

I also would like to push this topic ahead. Up to now no vendor in our authoring pipelines supports 4.3 but it will happen. Especially concerning IfcBridge and IfcRoad.

@andyward
Copy link
Member

Hi @BerNold,

We did a proof of concept 18 months back for the bSa Rail room where we implemented the entities and IfcAlignment2DHorizontal as a proof of concept for Ifc5. These are still in the ifcrail branches of Essentials & Geometry. Obviously it wasn't a full implementation of the alignment geometries but could be a starting point. At the time the schema was very much pre-release.

Regenerating the schema with the 4x3 Express entities should be trivial. But as you allude, the Alignment implementation will require some effort & testing.

We actually have a project scheduled to start in October when we'll implement 4.3 + Alignments officially. If you'd like to get involved I'm sure Steve & Martin would appreciate any input if you've some time!

Andy

@eriadam
Copy link
Author

eriadam commented Sep 16, 2020

@martin1cerny We are using xbim to extract properties, quantities and other data from IFC files. We are also building a tool on it for running automated checks on IFCs.

While most of our customers are planning/building residential and commercial buildings, there is an upcoming infrastructure project—railway in this case. They are currently stuck with IfcProxyElements. But as soon as these new elements are available in the planning software, we want to be able to support them.

On the mid-term we want to be able to reclassify these proxy elements to proper building elements, be it IfcWall or IfcBridge and output new IFC files with xbim.

As for participation, absolutely. When you guys have an implementation plan for this, let us discuss and see where we can be of help.

@bekraft
Copy link
Contributor

bekraft commented Sep 16, 2020

Hi Andy,
if there‘s any opportunity to get involved, I‘m looking forward to it! I‘ve started to have try on implementing details for alignment curves but lost the focus due to other tasks. We (the others who do the civil engineering work) have a tight focus on infrastructure (road and bridge) where a precise alignment is strongly required. The current approach is the same as @eriadam already mentioned - using IfcBuildingElementProxy with classification via properties. However, I think there’s more work to do on the geometry side for the upcoming 4.3. So lets get in touch as soon you start and I will reserve time for it!

Cheers,
Bernold

@andyward
Copy link
Member

Good stuff!

@eriadam Just on the railway scenario, if you're interested there's a preview of what we did for the IfcRail room at https://ifcrail.azurewebsites.net/ - There's still a lot of BuildingElementProxies in the model (that wasn't the focus), but what you should see (looking at the Properties tab) is some of the new entity types (e.g. IfcRailway, IfcRailElement etc), and more significantly the ObjectPlacement of things like the sleeper is using IfcLinearPlacement relative to the IfcAlignmentCurve.

You can also download the unofficial IFC file.

Be aware this was a pre-release schema - some things changed on the way to ifc4.3 (so you'll see thing like IfcRailwayPart in place of IfcBuildingStorey, which didn't make the cut)

@Noranius
Copy link

@andyward andyward added help wanted schema Updates to the IFC schema labels Oct 17, 2020
@andyward andyward added this to the Backlog milestone Oct 17, 2020
@martin1cerny
Copy link
Member

Hi all, we have started to work on IFC4x3: https://github.com/xBimTeam/XbimEssentials/tree/feature/Ifc4x3/Xbim.Ifc4x3

This is just an initial code for the schema implementation but allows to do some basic tests and is complete for scenarios where you want to write IFC4x3 files. Geometry engine will not work with this as of yet.

@bekraft
Copy link
Contributor

bekraft commented Nov 5, 2020

Hi @martin1cerny ,
I'll try to implement a mapping from our current classification to IFC4.3 entities next week.

@martin1cerny
Copy link
Member

Great. Happy to hear any feedback. Here is the overall list of new entities:

Namespace: Rail
    IfcAlignment2DCant
    IfcAlignment2DCantSegLine
    IfcAlignment2DCantSegTransition
    IfcAlignment2DCantSegment
    IfcAlignment2DVerSegTransition
    IfcAxisLateralInclination
    IfcDirectrixCurveSweptAreaSolid
    IfcDirectrixDistanceSweptAreaSolid
    IfcDistributionBoard
    IfcDistributionBoardType
    IfcElectricFlowTreatmentDevice
    IfcElectricFlowTreatmentDeviceType
    IfcInclinedReferenceSweptAreaSolid
    IfcLinearAxisWithInclination
    IfcLinearPlacementWithInclination
    IfcMobileTelecommunicationsAppliance
    IfcMobileTelecommunicationsApplianceType
    IfcRail
    IfcRailType
    IfcRailway
    IfcTrackElement
    IfcTrackElementType
Namespace: SharedBldgElements
    IfcBearing
    IfcBearingType
    IfcCaissonFoundation
    IfcCaissonFoundationType
    IfcDeepFoundation
    IfcDeepFoundationType
Namespace: SharedInfrastructureElements
    IfcBorehole
    IfcBuiltSystem
    IfcCourse
    IfcCourseType
    IfcEarthworksCut
    IfcEarthworksElement
    IfcEarthworksFill
    IfcGeomodel
    IfcGeoslice
    IfcGeotechnicalAssembly
    IfcGeotechnicalElement
    IfcGeotechnicalStratum
    IfcImpactProtectionDevice
    IfcImpactProtectionDeviceType
    IfcPavement
    IfcPavementType
    IfcPlant
    IfcReinforcedSoil
    IfcSign
    IfcSignType
    IfcSignal
    IfcSignalType
    IfcSolidStratum
    IfcVoidStratum
    IfcWaterStratum
Namespace: ProductExtension
    IfcBridge
    IfcBridgePart
    IfcFacility
    IfcFacilityPart
    IfcRelPositions
Namespace: PortsAndWaterways
    IfcConveyorSegment
    IfcConveyorSegmentType
    IfcLiquidTerminal
    IfcLiquidTerminalType
    IfcMarineFacility
    IfcMooringDevice
    IfcMooringDeviceType
    IfcNavigationElement
    IfcNavigationElementType
Namespace: Road
    IfcKerb
    IfcKerbType
    IfcLinearSpanPlacement
    IfcOpenCrossProfileDef
    IfcRelAssociatesProfileDef
    IfcRoad
    IfcSectionedSurface
Namespace: StructuralElementsDomain
    IfcTendonConduit
    IfcTendonConduitType
Namespace: SharedComponentElements
    IfcVibrationDamper
    IfcVibrationDamperType

@bekraft
Copy link
Contributor

bekraft commented Dec 19, 2020

Hi @martin1cerny,

I had a first try with the Ifc4.3rc1. There are some remarks and questions from my side.

First, when using Ifc4.3 the compilation of geometry warns about a class clash in XbimEssentials Ifc2x3 and Ifc4.3 at IfcValueHelper. I‘ve solved this by using partial classes and renaming the clashing methods. But actually, I‘m not sure, whether they are generated or not.

The concept of IfcAlignment has been completely refactored by bS. There are a lot of changes between 4.1 and 4.3. I.e. IfcAlignmentHorizontal has been renamed and moved to be derived from IfcProduct. Means, the geometry would have to maintain two different implementation. I‘m also not sure, how the class generation process handles the name change. Since there‘s an interface Ifc4 abstraction layer, it might cause conflicts.

The rc2 had significant changes, too. Is there a possibility to regenerate/update the Ifc4x3 branch and merge the changes of rc2? I‘ve started to take over the IfcRail implementation by hand, since there is no way to merge those changes automatically. Furthermore, I guess it would be easier to completely forget about 4.1 implementation since there are too many conflicts and changes (and no real impact to the final model since the alignment part wasn‘t connected to the model anyway).

Cheers,
Bernold

@martin1cerny
Copy link
Member

Hi @bekraft,

thanks for your work! IfcValueHelper is partially generated, so I'll have to change this in the code generator.

I run my own comparison on schemas and RC2 changes are significant (summary bellow). I have regenerated the schema to be RC2, so you can try it.

I'm trying to handle name changes, but if it is also moved in the inheritance hierarchy, it should now be independent and should not cause any problems.

Any suggestions and contributions are most welcome!

Number of entities:
IFC4X3_RC1: 879
IFC4X3_RC2: 885

Number of non-abstract entities:
IFC4X3_RC1: 745
IFC4X3_RC2: 752

Number of types:
IFC4X3_RC1: 130
IFC4X3_RC2: 130

Number of enumerations:
IFC4X3_RC1: 242
IFC4X3_RC2: 245

Number of select types:
IFC4X3_RC1: 66
IFC4X3_RC2: 67

Number of global rules:
IFC4X3_RC1: 2
IFC4X3_RC2: 2

Entities added to schema (18):
Added EntityDefinition: IfcAlignmentCant
Added EntityDefinition: IfcAlignmentCantSegment
Added EntityDefinition: IfcAlignmentHorizontal
Added EntityDefinition: IfcAlignmentHorizontalSegment
Added EntityDefinition: IfcAlignmentParameterSegment
Added EntityDefinition: IfcAlignmentSegment
Added EntityDefinition: IfcAlignmentVertical
Added EntityDefinition: IfcAlignmentVerticalSegment
Added EntityDefinition: IfcAxis2PlacementLinear
Added EntityDefinition: IfcBlossCurve
Added EntityDefinition: IfcClothoid
Added EntityDefinition: IfcCurveSegment
Added EntityDefinition: IfcGradientCurve
Added EntityDefinition: IfcLinearElement
Added EntityDefinition: IfcPointByDistanceExpression
Added EntityDefinition: IfcSegment
Added EntityDefinition: IfcSegmentedReferenceCurve
Added EntityDefinition: IfcSeriesParameterCurve

Selects added to schema (1):
Added SelectType: IfcCurveMeasureSelect

Defined types added to schema (0):

Enumerations added to schema (3):
Added EnumerationType: IfcAlignmentCantSegmentTypeEnum
Added EnumerationType: IfcAlignmentHorizontalSegmentTypeEnum
Added EnumerationType: IfcAlignmentVerticalSegmentTypeEnum

Entities removed from schema (12):
Removed EntityDefinition: IfcAlignment2DCant
Removed EntityDefinition: IfcAlignment2DCantSegLine
Removed EntityDefinition: IfcAlignment2DCantSegTransition
Removed EntityDefinition: IfcAlignment2DCantSegment
Removed EntityDefinition: IfcAlignment2DHorizontal
Removed EntityDefinition: IfcAlignment2DHorizontalSegment
Removed EntityDefinition: IfcAlignment2DSegment
Removed EntityDefinition: IfcAlignment2DVerSegTransition
Removed EntityDefinition: IfcAlignment2DVertical
Removed EntityDefinition: IfcAlignment2DVerticalSegment
Removed EntityDefinition: IfcDistanceExpression
Removed EntityDefinition: IfcOrientationExpression

Selects removed from schema (0):

Defined types removed from schema (0):

Enumerations removed from schema (0):

Changed entity definitions (24):
Entity: IfcAlignment2DVerSegCircularArc
Added attribute: EndGradient 
Added attribute: RadiusOfCurvature 
Added attribute: PredefinedType 
Removed attribute: TangentialContinuity 
Changed attribute index: StartTag (Old index: 1, New index: 0)
Changed attribute index: EndTag (Old index: 2, New index: 1)
Changed attribute index: StartDistAlong (Old index: 3, New index: 2)
Changed attribute index: HorizontalLength (Old index: 4, New index: 3)
Changed attribute index: StartHeight (Old index: 5, New index: 4)
Changed attribute index: StartGradient (Old index: 6, New index: 5)
Changed attribute type: StartGradient (Old type: IfcRatioMeasure, New type: IfcLengthMeasure)
Changed attribute index: Radius (Old index: 7, New index: 9)
Changed attribute index: IsConvex (Old index: 8, New index: 10)

Entity: IfcAlignment2DVerSegLine
Added attribute: EndGradient 
Added attribute: RadiusOfCurvature 
Added attribute: PredefinedType 
Removed attribute: TangentialContinuity 
Changed attribute index: StartTag (Old index: 1, New index: 0)
Changed attribute index: EndTag (Old index: 2, New index: 1)
Changed attribute index: StartDistAlong (Old index: 3, New index: 2)
Changed attribute index: HorizontalLength (Old index: 4, New index: 3)
Changed attribute index: StartHeight (Old index: 5, New index: 4)
Changed attribute index: StartGradient (Old index: 6, New index: 5)
Changed attribute type: StartGradient (Old type: IfcRatioMeasure, New type: IfcLengthMeasure)

Entity: IfcAlignment2DVerSegParabolicArc
Added attribute: EndGradient 
Added attribute: RadiusOfCurvature 
Added attribute: PredefinedType 
Removed attribute: TangentialContinuity 
Changed attribute index: StartTag (Old index: 1, New index: 0)
Changed attribute index: EndTag (Old index: 2, New index: 1)
Changed attribute index: StartDistAlong (Old index: 3, New index: 2)
Changed attribute index: HorizontalLength (Old index: 4, New index: 3)
Changed attribute index: StartHeight (Old index: 5, New index: 4)
Changed attribute index: StartGradient (Old index: 6, New index: 5)
Changed attribute type: StartGradient (Old type: IfcRatioMeasure, New type: IfcLengthMeasure)
Changed attribute index: ParabolaConstant (Old index: 7, New index: 9)
Changed attribute index: IsConvex (Old index: 8, New index: 10)

Entity: IfcAlignmentCurve
Changed attribute type: Horizontal (Old type: IfcAlignment2DHorizontal, New type: IfcAlignmentHorizontal)
Changed attribute type: Vertical (Old type: IfcAlignment2DVertical, New type: IfcAlignmentVertical)

Entity: IfcAxis1Placement
Changed attribute type: Location (Old type: IfcCartesianPoint, New type: IfcPoint)

Entity: IfcAxis2Placement2D
Changed attribute type: Location (Old type: IfcCartesianPoint, New type: IfcPoint)

Entity: IfcAxis2Placement3D
Changed attribute type: Location (Old type: IfcCartesianPoint, New type: IfcPoint)

Entity: IfcBoundaryCurve
Changed attribute type: Segments (Old type: ListType<IfcCompositeCurveSegment>, New type: ListType<IfcSegment>)

Entity: IfcCompositeCurve
Changed attribute type: Segments (Old type: ListType<IfcCompositeCurveSegment>, New type: ListType<IfcSegment>)

Entity: IfcCompositeCurveOnSurface
Changed attribute type: Segments (Old type: ListType<IfcCompositeCurveSegment>, New type: ListType<IfcSegment>)

Entity: IfcDirectrixCurveSweptAreaSolid
Changed attribute type: StartParam (Old type: IfcParameterValue, New type: IfcCurveMeasureSelect)
Changed attribute type: EndParam (Old type: IfcParameterValue, New type: IfcCurveMeasureSelect)

Entity: IfcDirectrixDistanceSweptAreaSolid
Changed attribute type: StartDistance (Old type: IfcDistanceExpression, New type: IfcPointByDistanceExpression)
Changed attribute type: EndDistance (Old type: IfcDistanceExpression, New type: IfcPointByDistanceExpression)

Entity: IfcFillAreaStyle
Added attribute: ModelOrDraughting 
Removed attribute: ModelorDraughting 

Entity: IfcFixedReferenceSweptAreaSolid
Changed attribute type: StartParam (Old type: IfcParameterValue, New type: IfcCurveMeasureSelect)
Changed attribute type: EndParam (Old type: IfcParameterValue, New type: IfcCurveMeasureSelect)

Entity: IfcInclinedReferenceSweptAreaSolid
Changed attribute type: StartDistance (Old type: IfcDistanceExpression, New type: IfcPointByDistanceExpression)
Changed attribute type: EndDistance (Old type: IfcDistanceExpression, New type: IfcPointByDistanceExpression)

Entity: IfcLinearPlacement
Added attribute: RelativePlacement 
Removed attribute: Orientation 
Changed attribute type: Distance (Old type: IfcDistanceExpression, New type: IfcPointByDistanceExpression)

Entity: IfcLinearPlacementWithInclination
Added attribute: RelativePlacement 
Removed attribute: Orientation 
Changed attribute type: Distance (Old type: IfcDistanceExpression, New type: IfcPointByDistanceExpression)

Entity: IfcLinearSpanPlacement
Added attribute: RelativePlacement 
Removed attribute: Orientation 
Changed attribute type: Distance (Old type: IfcDistanceExpression, New type: IfcPointByDistanceExpression)

Entity: IfcOffsetCurveByDistances
Changed attribute type: OffsetValues (Old type: ListType<IfcDistanceExpression>, New type: ListType<IfcPointByDistanceExpression>)

Entity: IfcOuterBoundaryCurve
Changed attribute type: Segments (Old type: ListType<IfcCompositeCurveSegment>, New type: ListType<IfcSegment>)

Entity: IfcPlacement
Changed attribute type: Location (Old type: IfcCartesianPoint, New type: IfcPoint)

Entity: IfcSectionedSolidHorizontal
Changed attribute type: CrossSectionPositions (Old type: ListType<IfcDistanceExpression>, New type: ListType<IfcPointByDistanceExpression>)

Entity: IfcSectionedSurface
Changed attribute type: CrossSectionPositions (Old type: ListType<IfcDistanceExpression>, New type: ListType<IfcPointByDistanceExpression>)

Entity: IfcSurfaceCurveSweptAreaSolid
Changed attribute type: StartParam (Old type: IfcParameterValue, New type: IfcCurveMeasureSelect)
Changed attribute type: EndParam (Old type: IfcParameterValue, New type: IfcCurveMeasureSelect)


Changed selects (0):

Changed enumerations (0):

@inv-raymond
Copy link

Hello, may I know what is the status of IFC4x3 support in xBim? Is it fully implemented now? If yes, how to use it? Just build IFC4x3 branch and use it for xbim Essentials? and xbim Geometry need any special version or not? I am interesting in try Xbim toolkit to process IFC4x3 file.

@martin1cerny
Copy link
Member

martin1cerny commented Nov 4, 2022

There is a new feature branch and project work item #450 for Essentials and xBimTeam/XbimGeometry#400 for Geometry.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
help wanted schema Updates to the IFC schema
Projects
None yet
Development

No branches or pull requests

7 participants