FUNCTION IfcCurveDim
(Curve : IfcCurve)
: IfcDimensionCount;
IF ('IFC4X3_DEV_b97c76c5.IFCLINE' IN TYPEOF(Curve))
THEN RETURN(Curve\IfcLine.Pnt.Dim);
END_IF;
IF ('IFC4X3_DEV_b97c76c5.IFCCONIC' IN TYPEOF(Curve))
THEN RETURN(Curve\IfcConic.Position.Dim);
END_IF;
IF ('IFC4X3_DEV_b97c76c5.IFCPOLYLINE' IN TYPEOF(Curve))
THEN RETURN(Curve\IfcPolyline.Points[1].Dim);
END_IF;
IF ('IFC4X3_DEV_b97c76c5.IFCTRIMMEDCURVE' IN TYPEOF(Curve))
THEN RETURN(IfcCurveDim(Curve\IfcTrimmedCurve.BasisCurve));
END_IF;
IF ('IFC4X3_DEV_b97c76c5.IFCGRADIENTCURVE' IN TYPEOF(Curve))
THEN RETURN(3);
END_IF;
IF ('IFC4X3_DEV_b97c76c5.IFCSEGMENTEDREFERENCECURVE' IN TYPEOF(Curve))
THEN RETURN(3);
END_IF;
IF ('IFC4X3_DEV_b97c76c5.IFCCOMPOSITECURVE' IN TYPEOF(Curve))
THEN RETURN(Curve\IfcCompositeCurve.Segments[1].Dim);
END_IF;
IF ('IFC4X3_DEV_b97c76c5.IFCBSPLINECURVE' IN TYPEOF(Curve))
THEN RETURN(Curve\IfcBSplineCurve.ControlPointsList[1].Dim);
END_IF;
IF ('IFC4X3_DEV_b97c76c5.IFCOFFSETCURVE2D' IN TYPEOF(Curve))
THEN RETURN(2);
END_IF;
IF ('IFC4X3_DEV_b97c76c5.IFCOFFSETCURVE3D' IN TYPEOF(Curve))
THEN RETURN(3);
END_IF;
IF ('IFC4X3_DEV_b97c76c5.IFCOFFSETCURVEBYDISTANCES' IN TYPEOF(Curve))
THEN RETURN(3);
END_IF;
IF ('IFC4X3_DEV_b97c76c5.IFCCURVESEGMENT2D' IN TYPEOF(Curve))
THEN RETURN(2);
END_IF;
IF ('IFC4X3_DEV_b97c76c5.IFCPOLYNOMIALCURVE' IN TYPEOF(Curve)) THEN
IF ( NOT EXISTS(Curve\IfcPolynomialCurve.CoefficientsZ) AND (Curve\IfcPolynomialCurve.Position.Dim = 2 ))
THEN RETURN(2);
END_IF;
RETURN(3);
END_IF;
IF ('IFC4X3_DEV_b97c76c5.IFCPCURVE' IN TYPEOF(Curve))
THEN RETURN(3);
END_IF;
IF ('IFC4X3_DEV_b97c76c5.IFCINDEXEDPOLYCURVE' IN TYPEOF(Curve))
THEN RETURN(Curve\IfcIndexedPolyCurve.Points.Dim);
END_IF;
IF ('IFC4X3_DEV_b97c76c5.IFCSPIRAL' IN TYPEOF(Curve))
THEN RETURN(Curve\IfcSpiral.Position.Dim);
END_IF;
RETURN (?);
END_FUNCTION;