Represent Composite Curve
Overview
Identifies the information requirements for the provision of a composite curve.
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. Each segment may be any of the subtypes of IfcCurve defined within the IFC model.
The form of transition between the curve segments can be specified to determine the smoothing that should be applied within an application. The illustration below shows the allowed transitions.
Results
Specification of a composite curve with one or more segments each of which is itself a curve.
| Description | Entity/Pset/Functional Part | MAN | REC | OPT |
|---|---|---|---|---|
| Determine each segment of the curve.
A segment is a curve that is a subtype of IfcCurve. A WHERE rule is applied that restricts composite curve segments to being subtypes of IfcBoundedCurve. Note that this can also include other composite curves. For further information, refer to the functional parts describing representation of such curves namely:
|
IfcCompositeCurveSegment.ParentCurve::IfcCurve (subtypes) | |||
| For each segment, identify whether the segment has the same sense (direction) as the parent curve.
The value is set to TRUE or FALSE. Sense is used to organize overall direction of the composite curve so that segments join together end-start. |
IfcCompositeCurveSegment.SameSense::BOOLEAN | |||
| For each segment, set the state of the transition from the end point to the start of the next segment.
Allowed transitions are indicated in the overview diagram and have the following meanings:
|
IfcCompositeCurveSegment.Transition::IfcTransitionCode_ | |||
| The space dimensionality for each segment is derived from the space dimensionality of the parent curve | IfcCompositeCurveSegment.Dim | |||
| Assign the segments in an ordered sequence to the composite curve. | IfcCompositeCurve.Segments | |||
| Indicate whether the curve intersects itself or not.
Value is set to TRUE, FALSE or UNKNOWN Note that presently, this is for information only. |
IfcCompositeCurve.SelfIntersect::LOGICAL | |||
| Derive the number of component segments in the composite curve. | IfcCompositeCurve.NSegments::INTEGER | |||
| Derive whether the composite curve is a closed curve from the transition code of the last segment in the sequence. | IfcCompositeCurve.ClosedCurve::LOGICAL | |||
| The space dimensionality for the composite curve is derived from its 2 or 3 dimensional context. | IfcCompositeCurve.Dim | |||
| Note that a composite curve that is defined in 2 dimensions may be specified as a 2 dimensional composite curve with a forced space dimensionality of 2.
In this case, use Ifc2dCompositeCurve in place of IfcCompositeCurve in the above. |
IFC Entities Required
- Ifc2dCompositeCurve
- IfcBoundedCurve
- IfcCompositeCurve
- IfcCompositeCurveSegment
- IfcCurve
- IfcGeometricRepresentationItem
- IfcRepresentationItem
IFC Datatypes Required
- IfcDimensionCount
- IfcTransitionCode
IFC Functions Required
- -
IDM Functional Parts Required
- -
EXPRESS-G
EXPRESS Schema
SCHEMA FP_REPRESENT_COMPOSITE_CURVE;
TYPE IfcDimensionCount = INTEGER;
WHERE
WR1 : { 0 < SELF <= 3 };
END_TYPE;
TYPE IfcTransitionCode = ENUMERATION OF
(DISCONTINUOUS,
CONTINUOUS,
CONTSAMEGRADIENT,
CONTSAMEGRADIENTSAMECURVATURE);
END_TYPE;
ENTITY IfcGeometricRepresentationItem
ABSTRACT SUPERTYPE OF (ONEOF(IfcCompositeCurveSegment, IfcCurve))
SUBTYPE OF(IfcRepresentationItem);
END_ENTITY;
ENTITY IfcRepresentationItem
ABSTRACT SUPERTYPE;
END_ENTITY;
ENTITY IfcCurve
ABSTRACT SUPERTYPE
SUBTYPE OF(IfcGeometricRepresentationItem);
DERIVE
Dim : IfcDimensionCount := IfcCurveDim(SELF);
END_ENTITY;
ENTITY IfcBoundedCurve
ABSTRACT SUPERTYPE
SUBTYPE OF(IfcCurve);
END_ENTITY;
ENTITY IfcCompositeCurve
SUBTYPE OF(IfcBoundedCurve);
Segments : LIST [1:?] OF IfcCompositeCurveSegment;
SelfIntersect : LOGICAL;
DERIVE
NSegments : INTEGER := SIZEOF(Segments);
ClosedCurve : LOGICAL := Segments[NSegments].Transition <> Discontinuous;
WHERE
WR41 : ((NOT ClosedCurve) AND (SIZEOF(QUERY(Temp <* Segments | Temp.Transition = Discontinuous)) = 1)) OR ((ClosedCurve)
AND (SIZEOF(QUERY(Temp <* Segments | Temp.Transition = Discontinuous)) = 0));
WR42 : SIZEOF( QUERY( Temp <* Segments | Temp.Dim <> Segments[1].Dim)) = 0;
END_ENTITY;
ENTITY Ifc2dCompositeCurve
SUBTYPE OF(IfcCompositeCurve);
WHERE
WR1 : SELF\IfcCompositeCurve.ClosedCurve;
WR2 : SELF\IfcCurve.Dim = 2;
END_ENTITY;
ENTITY IfcCompositeCurveSegment
SUBTYPE OF(IfcGeometricRepresentationItem);
Transition : IfcTransitionCode;
SameSense : BOOLEAN;
ParentCurve : IfcCurve;
DERIVE
Dim : IfcDimensionCount := ParentCurve.Dim;
INVERSE
UsingCurves : SET [1:?] OF IfcCompositeCurve FOR Segments;
WHERE
WR1 : ('IFC2X2_FINAL.IFCBOUNDEDCURVE' IN TYPEOF(ParentCurve));
END_ENTITY;
END_SCHEMA;