IFC (IFC4X3_ADD2) under development IfcCompositeCurve

RV ⓘ
AbV ⓘ Semantic definition

An IfcCompositeCurve is a continuous curve composed of curve segments.

Figure illustrates an example of a composite curve.

Figure — 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.
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 IfcReparameterisedCompositeCurveSegment).

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. Entity inheritance Attributes

# Attribute Type Description
IfcRepresentationItem (2)
LayerAssignment SET [0:1] OF IfcPresentationLayerAssignment FOR AssignedItems

Assignment 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.

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.

IfcCurve (1)
* Dim IfcDimensionCount

This attribute is formally derived.


The space dimensionality of this abstract class, defined differently for all subtypes, i.e. for IfcLine, IfcConic and IfcBoundedCurve.

Click to show 3 hidden inherited attributes Click to hide 3 inherited attributes
IfcCompositeCurve (4)
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.

2 SelfIntersect IfcLogical

Indication of whether the curve intersects itself or not; this is for information only.

* NSegments IfcInteger

This attribute is formally derived.


The number of component curves.

* ClosedCurve IfcLogical

This attribute is formally derived.

Segments[NSegments].Transition <> Discontinuous

Indication whether the curve is closed or not; this is derived from the transition code of the last segment.

Table Formal propositions

Name Description

No transition code should be Discontinuous, except for the last code of an open curve.

((NOT ClosedCurve) AND (SIZEOF(QUERY(Temp <* Segments | Temp.Transition = Discontinuous)) = 1)) OR ((ClosedCurve) AND (SIZEOF(QUERY(Temp <* Segments | Temp.Transition = Discontinuous)) = 0))

Ensures, that all segments used in the curve have the same dimensionality.

SIZEOF( QUERY( Temp <* Segments | Temp.Dim <> Segments[1].Dim)) = 0
Table Examples Formal representation

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;
END_ENTITY; References

Edit on Github

Is this page difficult to understand? Let us know! Changelog IFC4

  • where rule, CurveContinuous
  • where rule, SameDim
  • where rule, WR41
  • where rule, WR42
  • attribute SelfIntersect type, Changed from "logical" to "IfcLogical" IFC4.3_DEV_5d53fb2