IfcCompositeCurve

Natural language names
deZusammengesetzte Kurve
enComposite Curve
frCourbe composite
Change log
ItemSPFXMLChangeDescription
IFC4 Addendum 1
    IfcCompositeCurve
      SelfIntersectMODIFIEDType changed from LOGICAL to IfcLogical.
Semantic definitions at the entity
Entity definition

An IfcCompositeCurve is a continuous curve composed of curve segments.

Figure 341 illustrates an example of a composite curve.

formula

Figure 341 — Composite curve

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

The arch should be parameterized:

Then the parameterization of the composite curve is:

 

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 l1 and for i 2, the ith segment is parameterized from:

formula

where lk is the parametric length (i.e., difference between maximum and minimum parameter values) of the curve underlying the kth segment. Let T denote the parameter for the composite curve. Then, if the ith segment is not a reparameterised composite curve segment, T is related to the parameter ti; ti0 ti ti1; for the ith 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.
Attribute definitions
#AttributeTypeCardinalityDescription C
1SegmentsIfcCompositeCurveSegmentL[1:?] 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. X
2SelfIntersectIfcLogical[1:1] Indication of whether the curve intersects itself or not; this is for information only. X
NSegments
:=SIZEOF(Segments)
IfcInteger[1:1]The number of component curves. X
ClosedCurve
:=Segments[NSegments].Transition <> Discontinuous
IfcLogical[1:1]Indication whether the curve is closed or not; this is derived from the transition code of the last segment. X
Formal Propositions
RuleDescription
CurveContinuousNo transition code should be Discontinuous, except for the last code of an open curve.
SameDimEnsures, that all segments used in the curve have the same dimensionality.
Inherited definitions from supertypes
Entity inheritance IfcCompositeCurveOnSurface IfcBoundedCurve IfcCurve IfcGeometricRepresentationItem IfcRepresentationItem
Attribute inheritance
#AttributeTypeCardinalityDescriptionC
IfcRepresentationItem
LayerAssignmentIfcPresentationLayerAssignment
@AssignedItems
S[0:1]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. X
StyledByItemIfcStyledItem
@Item
S[0:1]Reference to the IfcStyledItem that provides presentation information to the representation, e.g. a curve style, including colour and thickness to a geometric curve. X
IfcGeometricRepresentationItem
IfcCurve
Dim
:=IfcCurveDim(SELF)
IfcDimensionCount[1:1]The space dimensionality of this abstract class, defined differently for all subtypes, i.e. for IfcLine, IfcConic and IfcBoundedCurve. X
IfcBoundedCurve
IfcCompositeCurve
1SegmentsIfcCompositeCurveSegmentL[1:?] 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. X
2SelfIntersectIfcLogical[1:1] Indication of whether the curve intersects itself or not; this is for information only. X
NSegments
:=SIZEOF(Segments)
IfcInteger[1:1]The number of component curves. X
ClosedCurve
:=Segments[NSegments].Transition <> Discontinuous
IfcLogical[1:1]Indication whether the curve is closed or not; this is derived from the transition code of the last segment. X
Formal representations
XSD Specification
 <xs:element name="IfcCompositeCurve" type="ifc:IfcCompositeCurve" substitutionGroup="ifc:IfcBoundedCurve" nillable="true"/>
 <xs:complexType name="IfcCompositeCurve">
  <xs:complexContent>
   <xs:extension base="ifc:IfcBoundedCurve">
    <xs:sequence>
     <xs:element name="Segments">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="ifc:IfcCompositeCurveSegment" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:attribute ref="ifc:itemType" fixed="ifc:IfcCompositeCurveSegment"/>
       <xs:attribute ref="ifc:cType" fixed="list"/>
       <xs:attribute ref="ifc:arraySize" use="optional"/>
      </xs:complexType>
     </xs:element>
    </xs:sequence>
    <xs:attribute name="SelfIntersect" type="ifc:IfcLogical" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
EXPRESS Specification
ENTITY IfcCompositeCurve
 SUPERTYPE OF(IfcCompositeCurveOnSurface)
 SUBTYPE OF (IfcBoundedCurve);
  Segments : LIST [1:?] OF IfcCompositeCurveSegment;
  SelfIntersect : IfcLogical;
 DERIVE
  NSegments : IfcInteger := SIZEOF(Segments);
  ClosedCurve : IfcLogical := Segments[NSegments].Transition <> Discontinuous;
 WHERE
  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;

Link to EXPRESS-G diagram EXPRESS-G diagram

Link to this page  Link to this page