-
Notifications
You must be signed in to change notification settings - Fork 34
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
IfcLinearPlacement.PlacementRelTo needs clarification #138
Comments
I think CT 4.1.7.4.2 addresses the requirements for an IfcLocalPlacement used for IfcLinearPlacement.PlacementRelTo. Though the Linear Placement of Signal example uses multiple levels of IfcLocalPlacement.PlacementRelTo while the CT only shows one. |
Please read the documentation in Product Linear Placement. The |
@SergejMuhic Thank you, I missed that subtle detail on the Product Linear Placement concept template - a rookie mistake. If I understand correctly, the IfcLinearPositionElement.ObjectPlacement refers to the exact same IfcLocalPlacement as the IfcLinearPlacement.PlacementRelTo. The requirement on IfcLinearPlacement.PlacementRelTo be an IfcLocalPlacement by Product Linear Placement documentation eliminates the possibility of relative placements along an alignment. Is that intended? Relative linear placement is very useful. If you want to layout bridge piers, Pier 1 can be defined at some distance from the start of the alignment and all subsequent piers could be defined at some distance from the previous pier (via IfcLinearPlacement.PlacementRelTo = IfcLinearPlacement of previous). In the IF meeting last week @peterrdf was saying implementers should support relative linear placement. How is that accomplished if it can't be done with IfcLinearPlacement.PlacementRelTo? |
Precisely.
Correct again. The intention was to not allow relative linear placements. Facilitating all the relations between entities would be quite complex between There is also the concept of measuring along curves in So, if we eventually see a curvature continuous C2 alignment that can produce parametric sweeps, we have to stick to these local well defined concepts. In the resource layer we do not get any benefits from relative placement, just complexity. For relative positioning the above linked concept template (Product Relative Positioning) should be used. |
@aothms @RickBrice would the rule in our backlog here close this issue or there's a need for a separate rule? |
Problem
IfcLinearPlacement.PlacementRelTo only makes sense under certain conditions.
Placement is constrained to a curve so IfcLinearPlacement.PlacementRelTo should be constrained to be an IfcLinearPlacement. I don't see how a placement can be constrained to a curve and simultaneously relative to an arbitrary placement. The only exception would be if the IfcLinearPlacement.PlacementRelTo is the exact same IfcLocalPlacement as used to place the alignment curve.
Example E.2.2 - Linear Placement of Signal uses a deeply nested sequence of placements for IfcLinearPlacement, but they all end up being relative to (0,0,0) Axis (0,0,1), RefDirection (1,0,0) which basically is the same as IfcLinearPlacement.PlacementRelTo = null. Placement would not make sense if each IfcLocalPlacement.Location was a different IfcCartesianPoint because that would break the constraint to the context of the curve.
Snippet of IfcLinearPlacement for Linear Placement of Signal example.
Not only should IfcLinearPlacement.PlacementRelTo be constrained to an IfcLinearPlacement, both linear placements should be constrained to the same basis curve. That is both placements' IfcLinearPlacement.RelativePlacement.Location.BasisCurve need to be the same curve. This allows to easily layout placement at a uniform spacing along an alignment by using the same IfcAxis2PlacementLinear or IfcPointByDistanceExpression in each IfcLinearPlacement.RelativePlacement.Location.
In the following example,
#999
is a curve.#100
is placement 50.0 from the start of that curve,#110
is 50.0 from#100
and#120
is 50.0 from#110
... and so onThis then brings up another question that is not clear in the specification. How are the Axis and RefDirection from each IfcAxis2PlacementLinear in the sequence of IfcLinearPlacement combined. For the example above,
#101
uses the default values for Axis and RefDirection (which are not well defined, see #125) at multiple locations along the curve.Should the 4x4 placement matrices be multiplied together as would be the case for a sequence of IfcLocalPlacements? In my experience with infrastructure, this isn't particularly useful. Items are typically placed relative to a point on a curve using the plan-view curve tangent and normal vectors at that point.
Is a rule needed (or clarifying documentation) that says the Axis and RefDirection are based on curve at the IfcLinearPlacement.RelativePlacement.Location and not combined with the IfcLinearPlacement.PlacementRelTo.RelativePlacement.Location?
Solution(s)
Develop clear examples of valid relative linear placement cases.
Document constraints (can only be relative to another IfcLinearPlacement using the same BasisCurve)
Document treatment of Axis and RefDirection if it differs from IfcLocalPlacement
Require schema changes?
✓
noRequire documentation changes?
✓
don't knowRule required
IfcLinearPlacement can only be relative to another IfcLinearPlacement using the same BasisCurve
✓
normative check: every IFC file must pass this checkAdditional context
@aothms @civilx64 @evandroAlfieri @peterrdf
Thoughts?
The text was updated successfully, but these errors were encountered: