Replies: 3 comments 5 replies
-
@RickBrice by and large I agree with what you have laid out here, although I can neither deny nor confirm the amount of late nights and cocktails.
In my (admittedly minimal) rail domain experience this is the normal case. The low railhead stays at the profile grade and the upper rail rotates to provide the necessary cant.
I agree.
It depends on the value of
Which entity ID?
I believe it is neither. Before looking at the docs I had assumed that
I think this becomes moot as there is no Base formula (Cant) for
I agree with Y-deviation as zero and my understanding is that this is describing the case where the profile grade and axis of rotation are coincident. In other words the
Referring back to the diagram, with this case there is no variation in Axis because the placement is not going up or down... because it is at the axis of rotation.
This is required when the axis of rotation is at the profile grade and you therefore don't have an explicit definition of cross-slope. Which leads to:
Exactly. If rotating around the low railhead then the cant value along with
Agree, and this is what I'm calling cross-slope.
No worries! I find this enjoyable as the Venn diagram of civil engineers doing "heavy" software development is pretty narrow - at least in my experience. |
Beta Was this translation helpful? Give feedback.
-
😄 Let's try to come up with some suggestions then when we have verified our understanding.
Maybe @peterrdf can rescue us once more. But I recall from overhearing conversations that cant is based on the 1st derivative of the curve. Sorry, I can't be of much help here. |
Beta Was this translation helpful? Give feedback.
-
Maybe the best would be a call where we could go through the individual questions. Just as a starter:
As said more than happy to have an indepth session, either in one of the weekly IF meetings or as a separate biliteral meeting. |
Beta Was this translation helpful? Give feedback.
-
I'm trying to break down and understand the definition of an IfcSegmentedReferenceCurve. It looks like there were some late nights, after hours cocktail sessions involved in scripting the prose.
I think this refers to the 1/2 cant shown in . Based on the business logic, where there is a left and right cant and a rail head distance to define the elevation deviation and cross slope, it seems that 1/2 cant is a special case of only one rail being elevated/depressed (rotation about left or right rail). If one rail is lowered and the other raised (rotation about the centerline), the elevation change from the axis of the base curve would be zero (or more generally any value if there was an arbitrary point of rotation).
In general I think it means the change in IfcCurveSegment.Placement.Location along the length of the segment is defined by the type and geometry of the IfcCurveSegment.ParentCurve. It is the distance between the actual curve from the IfcGradientCurve,
For example, if the .ParentCurve is an IfcLine as IfcLine.Pnt = IfcCartesianPoint(0,5) and IfcLine.Dir = IfcDirection(1.0,0.05) the actual curve starts 5 above the IfcGradientCurve at the start of the segment and ends 5.0 + 0.05*IfcCurveSegment.SegmentLength at the end of the segment.
None of this has to do with the superelevated cross slope. That is defined by the next sentence.
This is definitely a post-cocktail sentence. What is the parent curve's "curvature gradient equation"?
I think the "curvature gradient equation" is analogous to IfcAlignmentCantSegment.PredefinedType and it defines how the IfcCurveSegment.Placement.Axis rotates over the length of the segment.
If the IfcCurveSegment.ParentCurve is a IfcLine and a line has infinite curvature, how does the IfcCurveSegment.Placement.Axis rotate over the length of the segment? Should it be taken as constant (corresponding to IfcAlignmentCantSegmentTypeEnum.CONSTANTCANT.)? If so, what is the value of the constant?
The Linear Placement of Signal example referenced from the IfcSegmentedReferenceCurve documentation, one of the IfcSegmentedGradientCurve's IfcCurveSegment.ParentCurve is an IfcClothoid. The curvature of a clothoid varies linearly with distance along the curve so is the 'curvature gradient equation' = d(k)/du = sqrt(PI)/|A| where k = As/|A^3| and s = Au*sqrt(PI). (Equations taken from IfcClothoid). Does this correspond to IfcAlignmentCantSegmentTypeEnum.CONSTANTCANT. or IfcAlignmentCantSegmentTypeEnum.LINEARTRANSITION.?
How is this constant used to vary IfcCurveSegment.Placement.Axis along the length of the segment? If IfcCurveSegment.Placement.Axis starts at (0,0,1), what is .Axis at u = .SegmentLength?
How is "no deviation in the position of the curve segment to the base curve axis is specified" possible? IfcCurveSegment.Placement is a required parameter. Perhaps it means if IfcCurveSegment.Placement.Location is (0,0,0) so the Y-deviation is zero. But this doesn't make sense given the previous sentences in the definition of IfcSegmentedReferenceCurve. The variation of Axis is "directly proportionate to the curve segment parent curve curvature gradient equation" and IfcCurveSegment.ParentCurve is required.
The idea of linearly interpolating IfcCurveSegment.Placement.Axis along the length of the segment, between the Placement.Axis defined for a segment and defined for the next segment is easy to do. The direction (either Axis or RefDirection) is (x = x1 + u(x2-x1)/L, y = y1 + u(y2-y1)/L, z = z1 + u(z2-z1)/L). The circumstances when this is required doesn't seem possible.
Finally, there aren't any specific definitions for IfcCurveSegment.Placement.RefDirection except for the case defined above (derived from the next segment's .Placement). From the figure, I might guess that .RefDirection is tangent to the IfcCurveSegment.ParentCurve.
Sorry for the brain dump - I hope you understand my ramblings and have some insights to share so I can make sense of IfcSegmentedReferenceCurve geometry.
@aothms @civilx64
Beta Was this translation helpful? Give feedback.
All reactions