-
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
Helmert Transition Segment #143
Comments
I found the following in @peterrdf presentation - it answers my first question - one business logic Helmert curve maps into two geometry curves. |
@RickBrice are there any other predefined types where this is the case? This will affect the alignment rules being developed for the validation service. Currently there is a check of number of segments in the business logic and the representation to confirm the same number of total segments in both. But based on your feedback, a single Helmert curve segment corresponds to two curves in the geometry, which means that some additional nuance will be needed in the implementation of validation rule ALA002. |
Thanks, I reviewed the docs for segment type enumerations and came to the same conclusion. I will revise ALA002 accordingly. |
What would the representation of that segment be then? The individual
segments on the business logic side point to one of the constituents within
the comp curve I thought.
Sent from a mobile device, excuse my brevity. Kind regards, Thomas
Op do 22 feb. 2024 15:21 schreef Scott Lecher ***@***.***>:
… Thanks, I reviewed the docs for segment type enumerations and came to the
same conclusion. I will revise ALA002 accordingly.
—
Reply to this email directly, view it on GitHub
<#143 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AAILWV3VXRRG56AX5QYIBH3YU5H75AVCNFSM6AAAAABDLDBHX2VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTSNJZGU2TEOJVHA>
.
You are receiving this because you are subscribed to this thread.Message
ID: ***@***.***>
|
Not sure if this answers your question but the IfcCompositeCurve is a representation at the level of IfcAlignment, which is just a collection of IfcCurveSegments. At the IfcCurveSegment level, the 'Axis' 'Segment' representation is a representation context referencing two IfcCurveSegments. Here is an example taken from the Rall Room. See
|
Also to my knowledge the HelmertCurve is the only enumeration value for available transition curves that generates two individual 'clipped curves', i.e. two IfcCurveSegment instances. I would say as the example above shows that for this case the IfcAlignmentSegment (# 29) references two elements within IfcShapeRepresentation.Items. Note, in my perception the link to geometry is kept to allow applications to understand and find the link between IfcAlignmentSegment and its IfcCurveSegment's counterpart (in this case two of them). Implicitely this relation is also there through the IfcCompositeCurve that is linked to IfcAlignment and both IfcAlignmentSegment and IfcCurveSegment are linked in an ordered fashion allowing to find the same relation, however in a much harder to implement manner. Also note that technically there could be more cases where an IfcAlignmentSegment has other than exact one IfcCurveSegment related. For example the case where it represents the last zero length element; in case of vertical and cant alignment this knowledge could be represented in EndPoint of IfcGradientCurve and IfcSegmentedReferenceCurve, although to my knowledge we agreed not to use EndPoint's in this case but to create a 0-length IfcCurveSegment in line with IfcCompositeCurve that does not have this EndPoint attribute. As a consequence it could also happen that IfcCurveSegment exists that do not have an IfcAlignmentSegment counterpart as the zero length last element was not defined. |
The two halfs for HELMERT are a result of the two distinct curvature functions for the first and the second half of a HELMERT transition bend. As others already noted HELMERT is the only transition bend supported in Ifc 4.3 with a split curvature function. In Ifc 4.3 documentation an explanation can be found at https://standards.buildingsmart.org/IFC/RELEASE/IFC4_3/HTML/lexical/IfcAlignmentHorizontalSegmentTypeEnum.htm. This curvature transition was proposed first by Friedrich Helmert in 1873. According to some sources HELMERT transition bends were in use by Deutsche Bahn in the past. It is still used in Finland and possibly also in Sweden. Therefore the HELMERT transition bend is included in European Norm 13803. A note for readers interested in technical history: Before the availablity of computing devices HELMERT transition bends were approximated by the biquadratic parabola, as no economically viable calculation methods with good accuracy were available. |
Thanks. I guess an alternative would be / would have been to wrap both
curves within that pair in a an additional composite curve, nested within
the main composite curve (I didn't verify how well that works). As I can
imagine that unsuspecting implementers would assume an index into the
business logic segments corresponds to an index on the composite curve
segments. Currently that would violate the 'Segment' RepresentationType
though.
Sent from a mobile device, excuse my brevity. Kind regards, Thomas
Op do 22 feb. 2024 20:13 schreef apinzenoehler ***@***.***>:
… The two halfs for HELMERT are a result of the two distinct curvature
functions for the first and the second half of a HELMERT transition bend.
As others already noted HELMERT is the only transition bend supported in
Ifc 4.3 with a split curvature function.
In Ifc 4.3 documentation an explanation can be found at
https://standards.buildingsmart.org/IFC/RELEASE/IFC4_3/HTML/lexical/IfcAlignmentHorizontalSegmentTypeEnum.htm
.
This curvature transition was proposed first by Friedrich Helmert in 1873.
According to some sources HELMERT transition bends were in use by Deutsche
Bahn in the past. It is still used in Finland and possibly also in Sweden.
Therefore the HELMERT transition bend is included in European Norm 13803.
A note for readers interested in technical history:
Before the availablity of computing devices HELMERT transition bends were
approximated by the biquadratic parabola, as no economically viable
calculation methods with good accuracy were available.
—
Reply to this email directly, view it on GitHub
<#143 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AAILWV7J7KWUOVILD2LYSTTYU6KERAVCNFSM6AAAAABDLDBHX2VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTSNRQGA4DQNRRGQ>
.
You are receiving this because you commented.Message ID:
***@***.***>
|
I didn't think it through totally however my first feedback on this idea would be that currently each IfcCurveSegment.ParentCurve is an unbounded curve (not by definition however). Making a nested structure (and therefore introducing bounded curves for parent curves) could introduce tricky issues especially as tangent (and in some cases even second order direction / tangent) at least at the end points of the clipped curves are relevant. |
I respectfully disagree with these possible additional cases. The concept template for alignment segments states that a zero-length segment must be present as the final IfcAlignmentSegment for horizontal, vertical and cant. Furthermore it states that each zero-length IfcAlignmentSegment must have a corresponding zero-length curve segment. Net result is that a Helmert segment is the only case where one IfcAlignmentSegment is represented by more than 1 curve segment - and it must be represented by exactly 2 segments per discussion upstream. |
Although theoretically you are correct, it depends on the purpose of use. For example in our case as a library provider we will need to support different situations, especially in case no schema violation is triggered when implementing the last zero-length segment differently or completely omit it. My expectation is that several IFC file providers will produce technically indeed still incorrect files that however are fully in accordance with the schema itself. I know there are discussions if it is correct to support incorrect data, however for now we keep trying to support as much cases as possible. |
Looking at the regulations which were the basis for IFC alignment requirements I think it is possible to define the proposed constraint of an one to one association of alignment business definition and IFC-geometry representation (with the exception of Helmert). But please keep in mind that the regulations cover only the rules for the participating rail infrastructure managers and also keep in mind that only the prioritized processes were considered. A nice example of such deliberations can be found at https://github.com/bSI-RailwayRoom/IFC-Rail-Unit-Test/issues/52. This "doucine" issue from 2020/2021 was closed in January 2021 because French SNCF decided that the detailed representation of doucine was not required in a first IFC version for rail. In case the quoted decision would have been otherwise very possible there would be another geometric representation. One business segment would then possibly be represented by three IFC geometry segments to model the smoothing logic of the doucine. If the validation rule proposal is meant to safeguard a "minimum average" of trackgeometry designs then please go ahead. As long as there are options for implementing more sophisticated designs with alternative IFC geometry representations I see no issue. However if the validation rule proposal is meant to define a constraint for all potential cases I would strongly object to the rule. I would see no benefit to restrict the applicability of IFC to more sophisticated track geometry designs without real necessity. |
I see. So I would clarify my summary position as
If a future schema version needs to accommodate other sophisticated designs such as the doucine mentioned, then the validation rule can be updated accordingly. The validation rule proposal is not seeking to define a constraint. The goal is to reflect the requirements of the 4.3 specification as faithfully as possible. This special case of a Helmert curve type segment having two representation segments was a bit of a "surprise" so to say, so the goal of this conversation is to make certain that there are no other similar cases that need to be accommodated in the validation process. |
Very good point... from this perspective there is a need to be more flexible in what is accepted as valid input, compared to what the validation service identifies as pass / fail. |
@civilx64 @peterrdf @aothms @apinzenoehler Would another case where one business logic definition (IfcAlignmentHorizontalSegment) map into two geometric representations (IfcCurveSegment) be a S-curve or reverse curve? This situation would occur for an IfcAlignmentHorizontalSegment where .StartRadiusOfCurvature and .EndRadiusOfCurvature have opposite signs, meaning one is CCW and one is CW. |
Per my understanding, no. LINEAR segments require start and end radius to be 0. CIRCULARARC segments require start and end radius to be the same magnitude and same sign. Assuming you are thinking of an S-curve as two back-to-back arcs, that situation would require two logic segments, each with a corresponding representation segment. This leaves transition curves as the only PredefinedType that could have start and end radius of different sign. With the exception of HELMERTCURVE previously discussed this transition segment would have a single representation. |
@civilx64 I think you are right. With a transition curve in an S-shape it would have start and length with opposite signs and length would be of sufficient magnitude to cause the curve to go through the origin and beyond. |
@RickBrice @civilx64 @aothms did you reach a conclusion? Namely, I'm interested in one or more of these: change in documentation, creation of validation service rules. Do you have proposals for any of these? |
I think we got things figured out that the Helmert curve will have a 1:2 mapping from business to geometry. I don't think any documentation changes are needed for that per se, but stating it explicitly in plain language might be helpful in the future. There remains an open question about the documentation, copied from above
|
This is already covered in the validation rules that have been created thus far, so no additional rules required at this time. |
Deployed in v0.6 of Validation Service via normative rule ALS010. |
I'm confused by the Helmert Transition Segment. For now, let's keep this strictly to horizontal alignment geometry. I want to compute (X,Y) and tangent along the curve segment.
Is an IfcSecondOrderPolynomialSpiral always a two-part "mirrored" curve?
From the Partial Concept Template 4.2.2.2.6, we see that the IfcCurveSegment.ParentCurve is an IfcSecondOrderPolynomialSpiral. The description talks about the Quadratic term for the first half and Quadratic, Linear, and Constant terms for the second half.
Should I expect a consecutive pair of IfcCurveSegment with ParentCurve = IfcSecondOrderPolynomialSpiral for each IfcAlignmentHorizontalSegment with PredefinedType = HELMERTCURVE? The first IfcCurveSegment would be the "first half" and the second the "second half". This doesn't seem to be the intent.
If the intent is a single IfcCurveSegment.ParentCurve = IfcSecondOrderPolynomialSpiral for each IfcAlignmentHorizontalSegment.PredefinedType = HELMERTCURVE, then are all IfcSecondOrderPolynomialSpiral entities to be interpreted as a two-part curve? I don't see anything in the documention for IfcSecondOrderPolynomialSpiral, 8.9.3.60, that would indicate this curve is to be treated differently from the other IfcThird... and IfcSeventhOrderPolynimalSpiral entities.
Documentation Error?
4.2.2.2.6 says "SegmentStart is the bearing angle at start and SegmentLength is the bearing angle at the end of the segment". However, the IfcCurveSegment.SegmentStart and IfcCurveSegment.SegmentLength are of type IfcCurveMeasureSelect, which by the informal proposition of 8.9.3.28.1, must be IfcLengthMeasure. The figure also indicates IfcLengthMeasure.
Note also that Bloss Transition Segment 4.2.2.2.2 and Viennese Bend Transition Segment 4.2.2.2.10 do not make any statements about the SegmentStart and SegmentLength attributes.
Is this statement in error and should it be removed from the documentation?
The text was updated successfully, but these errors were encountered: