-
Notifications
You must be signed in to change notification settings - Fork 88
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
Improve documentation of IfcSegmentedReferenceCurve + example #913
base: master
Are you sure you want to change the base?
Improve documentation of IfcSegmentedReferenceCurve + example #913
Conversation
Link to the example PR: buildingSMART/IFC4.3.x-sample-models#24 |
Ping: @RickBrice @civilx64 @peterrdf @aothms |
The term "base curve" is used three times in the first paragraph. The first instance is changed to "basis curve". The probably should be some consistency here. The BaseCurve attribute is defined as "The basis curve providing....". Perhaps use BaseCurve when referring to the attribute and "basis curve" when referring to the actual curve? It might be better to just say "base curve" everywhere to avoid confusion. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If the domain people are satisfied that's already a major leap forward, I'm still left with some doubts though.
This doc mentions several concepts:
Inputs:
- Segment placement
- Deviation in the position of the curve
- Axis directions
Outputs:
- Super elevation
- Cross slope
- Deviating elevation
And then there are also relationships between these inputs:
- If no deviation in the position ... then the axes directions are interpolated.
- When placement location differs ... [then] the parent curve also defines the deviating elevation
My questions:
- If this curve is in the UV space "horizontal distance along base curve, deviating elevation" then what is the meaning of the axis directions that is being interpolated?
- Does CurveSegment.Placement of 5 units up somehow affect the end-result differently than a ParentCurve\IfcLine.Pnt of 5 units up?
- I'm still left wondering whether this is a generic procedure or a sequence of imperative if then statements. In my mind, before reading the docs, dy/dx of this curve (i.e curve segments placed by placements) would be essentially applied to the basis, creating a twin copy of the basis, where if you'd know the distance between these, you'd have a function of the rotation vector along the curve. But the 'if ... then', and 'when ... then' sentences in the docs really confuse me. Also specifically mentioning placement and curve separately confuses me.
|
||
Figure 2 — use of a segmented reference curve on a cant segment based on a gradient curve with rotation about track centerline and no superelevation. | ||
|
||
Informally, a _IfcSegmentedReferenceCurve_ is a curve defined in a “horizontal distance along base curve, deviating elevation” coordinate system. The _IfcCurveSegment.ParentCurve_ defines the change in cross slope between rail heads over the length of the segment. When the _IfcCurveSegment.Placement.Location_ differs from the _IfcCurveSegmentPlacement.Location_ of the next segment (or the _IfcSegmentedReferenceCurve.EndPoint_ for the last segment, if specified), the _IfcCurveSegment.ParentCurve_ also defines the deviating elevation. If the _IfcCurveSegment.Placement.Location_ is the same as for the start of the next segment, the deviating elevation along the length of the segment is constant. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Informally, a _IfcSegmentedReferenceCurve_ is a curve defined in a “horizontal distance along base curve, deviating elevation” coordinate system. The _IfcCurveSegment.ParentCurve_ defines the change in cross slope between rail heads over the length of the segment. When the _IfcCurveSegment.Placement.Location_ differs from the _IfcCurveSegmentPlacement.Location_ of the next segment (or the _IfcSegmentedReferenceCurve.EndPoint_ for the last segment, if specified), the _IfcCurveSegment.ParentCurve_ also defines the deviating elevation. If the _IfcCurveSegment.Placement.Location_ is the same as for the start of the next segment, the deviating elevation along the length of the segment is constant. | |
Informally, a _IfcSegmentedReferenceCurve_ is a curve defined in a “horizontal distance along base curve, deviating elevation” coordinate system. The _IfcCurveSegment.ParentCurve_ defines the change in cross slope between rail heads over the length of the segment. When the _IfcCurveSegment.Placement.Location_ differs from the _IfcCurveSegment.Placement.Location_ of the next segment (or the _IfcSegmentedReferenceCurve.EndPoint_ for the last segment, if specified), the _IfcCurveSegment.ParentCurve_ also defines the deviating elevation. If the _IfcCurveSegment.Placement.Location_ is the same as for the start of the next segment, the deviating elevation along the length of the segment is constant. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
(or the IfcSegmentedReferenceCurve.EndPoint for the last segment, if specified)
Is EndPoint still relevant now that we have the agreement to have 0-length segment at the end?
I'd prefer to make a clear choice here.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
(or the IfcSegmentedReferenceCurve.EndPoint for the last segment, if specified)
Is EndPoint still relevant now that we have the agreement to have 0-length segment at the end?
I'd prefer to make a clear choice here.
We should strike the reference to EndPoint. As I recall there is agreement in the IF that it should not be used.
@@ -1,13 +1,25 @@ | |||
# IfcSegmentedReferenceCurve | |||
|
|||
The _IfcSegmentedReferenceCurve_ is a curve defined in the linear parameter space of its base curve that is set in the attribute _BaseCurve_. The base curve provides a basis for the positioning of the collection of _IfcCurveSegment_ occurrences. A deviating explicit position of a curve segment (_IfcCurveSegment_.Placement) from the axis of the base curve produces a superelevation i.e. depression or elevation from the axis of the base curve. The superelevation rate of change is directly proportionate to the curve segment parent curve curvature gradient equation (_IfcCurveSegment_._ParentCurve_) in the linear parameter space of the base curve. If no deviation in the position of the curve segment to the base curve axis is specified, the axes (Axis and RefDirection) directions of _IfcAxis2Placement_ are interpolated between the initial curve segment placement and the placement of the subsequent curve segment. | |||
The _IfcSegmentedReferenceCurve_ is a curve defined in the linear parameter space of its base curve that is set in the attribute _BaseCurve_. The base curve provides a basis for the positioning of the collection of _IfcCurveSegment_ occurrences. A deviating explicit position of a curve segment (_IfcCurveSegment.Placement_) from the axis of the basis curve produces a superelevation (i.e. depression or elevation from the axis of the base curve). The deviating elevation is defined by the _IfcCurveSegment.ParentCurve_ in the linear parameter space of the base curve. If no deviation in the position of the curve segment to the base curve axis is specified, the axes (_Axis_ and _RefDirection_) directions of _IfcAxis2Placement_ are interpolated between the initial curve segment placement and the placement of the subsequent curve segment. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
A deviating explicit position of a curve segment (IfcCurveSegment.Placement) from the axis of the basis curve produces a superelevation (i.e. depression or elevation from the axis of the base curve)
It could be me, but this sentence reads to me as completely tautological. If I rephrase this it reads:
A deviating ... position from the axis of the basis curve ...
produces ...
depression or elevation a deviation from the axis of the base curve
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
superelevation is the important term. This section of the spec relates the domain concept of superelevation to its expression within IFC constructs. I would recommend keeping the wording per the original with the formatting (italics and parentheses) per your suggested change.
Credit: @RickBrice @civilx64 @peterrdf
Thanks to all contributors from the IFC Implementers Forum.