IFC 4.3.x development IfcCompositeCurve

Change log


additions where_rules CurveContinuous
additions where_rules SameDim
deletions where_rules WR41
deletions where_rules WR42
modificationsattributes SelfIntersect definitionChanged from logical to IfcLogical


modificationsattributes Segments definitionChanged from list[1:?] of IfcCompositeCurveSegment to list[1:?] of IfcSegment Semantic definitions at the entity

An IfcCompositeCurve is a continuous curve composed of curve segments.

Figure 1 illustrates an example of a composite curve.


Consider an IfcCompositeCurve having line segment and an arc segment. The line should be parameterized:

  • IfcPolyline with start= 0.,0. end= 0.,1., SameSense= TRUE, parametric length = 1.

The arch should be parameterized:

  • IfcTrimmedCurve with start= 180', end= 90', SameSense= FALSE, parametric length = 90.

Then the parameterization of the composite curve is:

  • IfcCompositeCurve with 0. ≤ T ≤ 1. (line segment) and 1. ≤ T ≤ 91. (arc segment), parametric length = 91.


NOTE Definition according to ISO 10303-42:
A composite curve is a collection of curves joined end-to-end. The individual segments of the curve are themselves defined as composite curve segments. The parameterization of the composite curve is an accumulation of the parametric ranges of the referenced bounded curves. The first segment is parameterized from 0 to l~1~ and for i__≤__2, the i^th^ segment is parameterized from:

formula where l~k~ is the parametric length (i.e., difference between maximum and minimum parameter values) of the curve underlying the k^th^ segment. Let T denote the parameter for the composite curve. Then, if the i_th segment is not a reparameterised composite curve segment, _T is related to the parameter t~i~; t~i0~__≤__t~i~__≤__t~i1~; for the _i_th segment by the equation:

formula if Segments[i].SameSense = TRUE; or by the equation:

formula if Segments[i].SameSense = FALSE; If the segments[i] is of type reparameterised composite curve segment,

formula where τ is defined at reparameterized composite curve segment (see IfcReparameterizedCompositeCurveSegment).

NOTE  Entity adapted from composite_curve defined in ISO 10303-42.

HISTORY  New entity in IFC1.0

Informal Propositions:

  1. The SameSense attribute of each segment correctly specifies the senses of the component curves. When traversed in the direction indicated by SameSense, the segments shall join end-to-end. Attributes

# Attribute Type Description
LayerAssignmentSET [0:1] OF IfcPresentationLayerAssignment FOR AssignedItemsAssignment of the representation item to a single or multiple layer(s). The LayerAssignments can override a LayerAssignments of the IfcRepresentation it is used within the list of Items.

> IFC2x3 CHANGE  The inverse attribute LayerAssignments has been added.

> IFC4 CHANGE  The inverse attribute LayerAssignment has been restricted to max 1. Upward compatibility for file based exchange is guaranteed.
StyledByItem SET [0:1] OF IfcStyledItem FOR Item Reference to the IfcStyledItem that provides presentation information to the representation, e.g. a curve style, including colour and thickness to a geometric curve.

> IFC2x3 CHANGE  The inverse attribute StyledByItem has been added.
Dim INVALID The space dimensionality of this abstract class, defined differently for all subtypes, i.e. for IfcLine, IfcConic and IfcBoundedCurve.
1 Segments LIST [1:?] OF IfcSegment The component bounded curves, their transitions and senses. The transition attribute for the last segment defines the transition between the end of the last segment and the start of the first; this transition attribute may take the value discontinuous, which indicates an open curve.

> NOTE : For IfcGradientCurve and IfcSegmentedReferenceCurve the segments define the interpolation between segment start and and segment end.
2 SelfIntersect IfcLogical Indication of whether the curve intersects itself or not; this is for information only.
NSegments INVALID The number of component curves.
ClosedCurve INVALID Indication whether the curve is closed or not; this is derived from the transition code of the last segment. Entity inheritance

dot_inheritance IfcCompositeCurveOnSurface IfcCompositeCurveOnSurface IfcCompositeCurve IfcCompositeCurve IfcCompositeCurveOnSurface->IfcCompositeCurve IfcBoundedCurve IfcBoundedCurve IfcCompositeCurve->IfcBoundedCurve IfcGradientCurve IfcGradientCurve IfcGradientCurve->IfcCompositeCurve IfcSegmentedReferenceCurve IfcSegmentedReferenceCurve IfcSegmentedReferenceCurve->IfcCompositeCurve IfcBoundedCurve_children 4 more... IfcBoundedCurve_children->IfcBoundedCurve IfcCurve IfcCurve IfcBoundedCurve->IfcCurve IfcCurve_children 7 more... IfcCurve_children->IfcCurve IfcGeometricRepresentationItem IfcGeometricRepresentationItem IfcCurve->IfcGeometricRepresentationItem IfcGeometricRepresentationItem_children 24 more... IfcGeometricRepresentationItem_children->IfcGeometricRepresentationItem IfcRepresentationItem IfcRepresentationItem IfcGeometricRepresentationItem->IfcRepresentationItem IfcRepresentationItem_children 3 more... IfcRepresentationItem_children->IfcRepresentationItem Formal representations

ENTITY IfcCompositeCurve
 SUBTYPE OF (IfcBoundedCurve);
	Segments : LIST [1:?] OF IfcSegment;
	SelfIntersect : IfcLogical;
	 NSegments : IfcInteger := SIZEOF(Segments);
	 ClosedCurve : IfcLogical := Segments[NSegments].Transition <> Discontinuous;
	CurveContinuous : ((NOT ClosedCurve) AND (SIZEOF(QUERY(Temp <* Segments | Temp.Transition = Discontinuous)) = 1)) OR ((ClosedCurve) AND (SIZEOF(QUERY(Temp <* Segments | Temp.Transition = Discontinuous)) = 0));
	SameDim : SIZEOF( QUERY( Temp <* Segments | Temp.Dim <> Segments[1].Dim)) = 0;