Open RickBrice opened 4 months ago
@RickBrice this was communicated to bSI at submission of 4.3 RC4. They submitted without a fix. The Tunnel project and deployment with software vendors such as ESRI, Trimble, 12d etc. addressed, documented and implemented IfcLinearPlacement with these rules: https://github.com/bSI-InfraRoom/IFC-Specification/pull/843 - correct linear placement always referenced a local placement https://github.com/bSI-InfraRoom/IFC-Specification/pull/259 - concept template requires linear placement to be relative to the placement of a linear positioning element
This shall be accepted by bSI to the formal ISO documentation.
These files: https://github.com/bSI-InfraRoom/IFC-Tunnel-Deployment/pulls are already mostly validated with this logic since the toolkit and checker are derived automatically from the schema and ifc spec (with usages referencing CTs).
For IfcAxis2PlacementLinear
, as with other IfcAxis2Placement siblings, both RefDirection
and Axis are optional. The default values are corresponding to IfcPointByDistanceExpression
where Axis
=(0,0,1) global i. e. perpendicular to the global XY plane and RefDirection
is the direction of the tangent of the curve on which the placement is.
As it says in the RefDirection
documentation, it can be omitted even if there is an Axis
present. This is different from its IfcAxis2Placement
siblings that require either both RefDirection
and Axis
to be set or both to be unset. The default value of RefDirection
is the tangent to the IfcPointByDistanceExpression.BasisCurve
.
@SergejMuhic thank you - your input is always helpful and enlightening.
The default values are corresponding to IfcPointByDistanceExpression where Axis=(0,0,1) global i. e. perpendicular to the global XY plane
IfcPointByDistanceExpression doesn’t explicitly call out that default IfcAxis2PlacementLinear.Axis = (0,0,1), and I haven’t found it elsewhere in the specification. The closest thing I can find is IfcPointByDistanceExpression.OffsetVertical is defined as
Default offset vertical to the basis curve where positive values indicate perpendicular to the tangent at DistanceAlong in the plane of the tangent perpendicular to the global XY plane.
This says that “vertical” is perpendicular to the tangent of basis curve. For IfcGradientCurve and IfcSegmentedReferenceCurve the curve tangent is generally not parallel to the global XY plane and therefore perpendicular would not be (0,0,1). If “basis curve” is not IfcPointByDistanceExpression.BasisCurve but instead IfcPointByDistanceExpression.BasisCurve.BaseCurve for IfcGradientCurve or IfcPointByDistanceExpression.BasisCurve.BaseCurve.BaseCurve for IfcSegmentedReferenceCurve then IfcAxis2PlacementLinear.Axis defaulting to (0,0,1) makes sense.
I would say the readers of the specification are not will served by such an obscure way of defining IfcAxis2PlacementLinear.Axis when it is omitted. An explicit statement in the definition of IfcAxis2PlacementLinear.Axis would be much more effective.
Regarding default IfcAxis2PlacementLinear.RefDirection
The default value of RefDirection is the tangent to the IfcPointByDistanceExpression.BasisCurve.
Easy enough to understand and it makes sense it is different that its siblings. The basis curve provides an extra bit of geometry that the siblings don’t have. However, I think IfcSectionedSolidHorizontal doesn’t work with the default Axis and RefDirection as explained. When the IfcSectionedSolidHorizontal.CrossSections are defined with default Axis and RefDirections the orientation of the CrossSection isn’t correct to create an extrusion.
Documentation error in IfcSectionedSolidHorizontal https://github.com/buildingSMART/IFC4.x-IF/issues/147 Do you have any insight on that?
IfcPointByDistanceExpression doesn’t explicitly call out that default IfcAxis2PlacementLinear.Axis = (0,0,1), and I haven’t found it elsewhere in the specification. The closest thing I can find is
True. When modelling the definitions and writing the documentation I was under extreme time pressure where I was looking for acceptance first. I never finalized documentation, templates and usages unfortunately (I was the sole person doing this part). Before actually documenting it, there was an arbitrary decision to hand over and not finalize in the project. You are right, the default Axis is not (0,0,1) but perpendicular to the tangent, my bad. The default value is actually implied in the Axis description where it says that the default is the local z axis. To make it clearer it should say, local z axis as specified in the offsets of IfcPointByDistanceExpression
.
My initial intent was using IfcPointOnCurve
and IfcAxis2Placement3D
but this was rejected in favour of a new point and a new placement definition. Consequently, the descriptions suffered a bit.
IfcAxis2PlacementLinear.Axis defaulting to (0,0,1) makes sense.
This actually was the initial intent but then IfcSectionedSolidHorizontal
would unnecessarily require more complex IfcAxis2PlacementLinear
instances since in bridge design the profiles are typically vertical. So, now we have two easy alternatives in IfcSectionedSolidHorizontal
, either perpendicular to tangent (default) by omitting both RefDirection
and Axis
or vertical by just using Axis=(0,0,1) and omitting RefDirection.
Let me take a raincheck on the IfcSectionedSolidHorizontal
issue. It is a bit late. But I will definitely look into it.
During our bsUSA BIM for Bridges meeting on July 17 someone mentioned that there was still some uncertainty about linear placement that is hampering implementation. I’m wondering what the issues are.
I think IfcLinearPlacement itself is pretty straightforward, especially since bSI has clarified PlacementRelTo. https://github.com/buildingSMART/ifc-gherkin-rules/issues/124
I have some outstanding questions in the bSI implementers forum regarding IfcAxis2PlacementLinear. Perhaps some of the implementers in the group have some insights and can reinvigorate the issue discussions.
Default value for IfcAxis2PlacementLinear.Axis is not defined https://github.com/buildingSMART/IFC4.x-IF/issues/125
Are both or neither Axis and RefDirection required for IfcAxis2PlacementLinear https://github.com/buildingSMART/IFC4.3.x-development/issues/732 https://github.com/buildingSMART/IFC4.3.x-development/issues/731
Documentation error in IfcSectionedSolidHorizontal https://github.com/buildingSMART/IFC4.x-IF/issues/147