-
Notifications
You must be signed in to change notification settings - Fork 18
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
ALS007 Alignment vertical shape representation #293
Comments
Interesting angle. And thanks for the example file. A few thoughts, but I'd like to hear from @peterrdf @civilx64 @RickBrice @JanErikHoel and others implementing alignment.
|
On the one hand, for consistency, sure, we've been incrementally adding indexedpoly to other parts of the schema as well, such as polygonal bounded halfspace. But the association to segments on the business logic side scares me a bit:
I would vote for (a) |
In this particular example, it's an offset alignment. So the transition segment is an "offset clothoid". I'm not an expert in this, but it seems to me that an offset of a clothoid, is not another clothoid but would be a spline. |
@jmirtsch Thanks for raising this issue. That said, here goes:
IfcGradientCurve is the only valid class for representation of IfcAlignmentVertical.
Absolutely correct: IfcIndexedPolyline and IfcIndexedPolyCurve are valid as representations of IfcAlignment but not for IfcAlignmentHorizontal, IfcAlignmentVertical, or IfcAlignmentCant.
I believe that ALS006 is currently incorrect and should only allow IfcCompositeCurve as representation of IfcAlignmentHorizontal. However that is not explicitly spelled out in documentation for IfcAlignmentHorizontal or any of the concept templates: 4.1.7.1.1 correctly lists polyline and indexed poly curve as valid for IfcAlignment. The following three concepts 4.1.7.1.1.1, .2, and .3 tie IfcCompositeCurve, IfcGradientCurve, and IfcSegmentedReferenceCurve to horizontal, vertical, and cant layouts, respectively but they are denoted as representations of IfcAlignment. What is missing are three concept templates to further clarify IfcCompositeCurve, IfcGradientCurve, and IfcSegmentedReferenceCurve as representations of IfcAlignmentHorizontal, IfcAlignmentVertical, and IfcAlignmentCant, respectively. Associating these representations to the alignment layouts in a 1:1 manner is much cleaner (IMO) than having multiple representations on IfcAlignment - especially when there is re-use of a horizontal layout with multiple The current state of these concept templates corresponds to what I have personally noted in practice - representations associated to IfcAlignment and to the segments, but not to the layouts.
The indexed poly is required for segments that don't fit within the domain of enumerated types for transitions.
These situations actually require that there is no business logic for the H, V, and C layouts - and by extension their constituent segments.
I agree on both points and re-emphasize that these classes are valid for representation of IfcAlignment only.
This could be addressed by providing IfcReferents at various intervals along the polyline or poly curve approximation that correspond to the actual distance along the original alignment. |
Pausing a bit to reflect on my experience in industry - this discussion agrees with how authoring tools are used in practice where features offset from a "pure" alignment are still referred to as alignments - because they carry the concept of defining sweeps and placements based on distance along - but do not correspond to exact segmental constructs of line, circular arc, clothoid, etc. Correlating to IFC schema, these offset alignments would be exchanged as IfcAlignment with 2D or 3D polyline / polycurve geometry with no business logic or definition of individual segments. IfcOffsetCurveByDistances would also be a valid representation - only for IfcAlignment and not for the layouts or segments. This would have the benefit of allowing the receiving software the ability to calculate precise locations at any point along the primary alignment. Which is better? I see parallels to the discussion of BRep versus tesselated faces for solids. The former is more compact and "pure" but more difficult for a wide range of receiving tools to support. Correspondingly, greater interoperability for alignments is achieved via polyline & polycurve than IfcOffsetCurveByDistances. |
correct - there is not a parallel clothoid in the same way there is a parallel circle. Sorry I haven’t fully engaged in the discussion. I’ve been traveling. |
@civilx64 has done a great job breaking this down. My read is that poly line is for approximations of IfcAlignment when the full detail is not available.
Why is this the case? IfcOffsetCurveByDistances Is ultimately tied to an IfcGradientCurve which should have good interoperability. I’ve been computing points on the offset curve by evaluating the BasisCurve then applying the offsets. There are some issues with the application of IfcOffsetCurveByDistances as discussed here buildingSMART/IFC4.x-IF#139 what vertical transition curve is missing? |
An importing application does not need to do any calculations when importing polyline or polycurve because the (x, y, z) coordinates of the shape are explicitly provided. With IfcOffsetCurveByEdges an importing application needs to be able to calculate these points along an alignment. This is similar to industry experience with exchanging surface data via LandXML. A surface can be defined via its SourceData or its Definition. The SourceData represents the collection of data used to generate the surface, whereas the Definition contains the faces and points that define the surface. An Information Exchange involving LandXML surfaces containing SourceData only requires the receiving application to be able to compute the corresponding constrained Delauny triangulation. Experience has shown that each vendor implements this slightly differently, particularly when it comes to trimming triangles at the boundary. Conversely, exchanging the Definition ensures that the receiving application will load the exact same number of triangle faces with the exact same coordinates as the authoring tool. There is certainly some of my personal opinion sneaking in here but I see it as "wider range of applications able to import the data = greater interoperability". |
Good discussion. Let me first only answer the last part from @civilx64. If I understand it correctly it is the choice between SourceData (in my words design intent) and Definition (generated mesh / poly line). Really good point as I think there are different opinions in what IFC should carry. My personal opinion is that IFC should (only) carry SourceData, two main reasons: (in my perception the Definition is purely a interpretation of the used application of the essence of geometrical content, I agree this is almost always different for each individual application but I don't see an issue in this): 1. the non-geometrical semantics is also SourceData (I see this as the key purpose of IFC itself, i.e. an integrated snap-shot of the geometrical and non-geometrical source data) 2. there are many other formats that solved the problem of exchanging Definition (Collada, glTF, OBJ, OpenUSD), they can do this much better than IFC is capable of doing. I know many poeple see this different and would like to see IFC moving into exchanging Definition data for geometry. In my perception like an bsDD + instantiation + existing 'simple' geometry exchange format. I am clearly not in favor of this road and would see IFC vanishing into more general / widespread formats this way; a pity as there is great value in domain wide agreement of a baseline of a format specification for exchanging SourceData (with highly semantical non-geometrical and geometrical definition). |
Since Evandro asked me for feedback in the the comment far up, I pitch in a couple of comments:
|
Hi @JanErikHoel, sorry to dive into details directly :-) Just triggering on your comment 'we can't risk that the receiving software at site interpret the alignment source data differently than the design software' that I of course fully agree with from a conceptual point of view. I think there are two versions of this statement:
The second statement means that when defining semantic geometry definitions as we do now for transition curve geometry almost always will generate slightly different geometry looking at two different applications. In my perception this is not an issue, but maybe I am wrong. The first statement is a very good point but I am not sure we are talking about this here. Maybe we should think of adding an alternative 'measured representation' or 'calculated representation'? |
ALS007 restricts representation to a gradient curve.
However, in the Alignment documentation it notes that several types of curves might be used for geometric representation (refer Geometric perspective)
https://ifc43-docs.standards.buildingsmart.org/IFC/RELEASE/IFC4x3/HTML/lexical/IfcAlignment.htm
I would request that this check also permit the vertical alignment representation be an indexed poly curve or polyline (which I'm reverting to when
an alignment has transition segments that are not supported in IFC.
I've attached a test file that presently fails. Note that the horizontal passes using the indexed polycurve.
00_LRT_BIM-Station_Platform edge_dummyNB.zip
The text was updated successfully, but these errors were encountered: