Support for IFC 4.3
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
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
Hi, since 4.3 is based on 4.1 Alignment: Is there anything already done implementing alignment entities? There is a ticket https://github.com/xBimTeam/XbimGeometry/issues/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.
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
@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.
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
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)
After a short search I could find some examples for IFC4x3: https://github.com/buildingSMART/Sample-Test-Files/tree/master/IFC%204.3 http://www.ifcwiki.org/index.php?title=KIT_IFC_Examples
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.
Hi @martin1cerny , I'll try to implement a mapping from our current classification to IFC4.3 entities next week.
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
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
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):
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.
There is a new feature branch and project work item #450 for Essentials and https://github.com/xBimTeam/XbimGeometry/issues/400 for Geometry.