8.9.6.12 IfcGetBasisSurface
8.9.6.12.1 Semantic definition
8.9.6.12.2 Formal representation
FUNCTION IfcGetBasisSurface (C : IfcCurveOnSurface) : SET[0:2] OF IfcSurface; LOCAL Surfs : SET[0:2] OF IfcSurface; N : INTEGER; END_LOCAL; Surfs := []; IF 'IFC4X3_DEV_738df036.IFCPCURVE' IN TYPEOF (C) THEN Surfs := [C\IfcPCurve.BasisSurface]; ELSE IF 'IFC4X3_DEV_738df036.IFCSURFACECURVE' IN TYPEOF (C) THEN N := SIZEOF(C\IfcSurfaceCurve.AssociatedGeometry); REPEAT i := 1 TO N; Surfs := Surfs + IfcAssociatedSurface(C\IfcSurfaceCurve.AssociatedGeometry[i]); END_REPEAT; END_IF; END_IF; IF 'IFC4X3_DEV_738df036.IFCCOMPOSITECURVEONSURFACE' IN TYPEOF (C) THEN (* For an IfcCompositeCurveOnSurface the BasisSurface is the intersection of the BasisSurface of all the segments. *) N := SIZEOF(C\IfcCompositeCurve.Segments); IF ('IFC4X3_DEV_738df036.IFCCURVESEGMENT' IN TYPEOF(C\IfcCompositeCurve.Segments[1])) THEN Surfs := IfcGetBasisSurface(C\IfcCompositeCurve.Segments[1]\IfcCurveSegment.ParentCurve); END_IF; IF ('IFC4X3_DEV_738df036.IFCCOMPOSITECURVESEGMENT' IN TYPEOF(C\IfcCompositeCurve.Segments[1])) THEN Surfs := IfcGetBasisSurface(C\IfcCompositeCurve.Segments[1]\IfcCompositeCurveSegment.ParentCurve); END_IF; IF N > 1 THEN REPEAT i := 2 TO N; IF ('IFC4X3_DEV_738df036.IFCCURVESEGMENT' IN TYPEOF(C\IfcCompositeCurve.Segments[i])) THEN Surfs := Surfs * IfcGetBasisSurface(C\IfcCompositeCurve.Segments[i]\IfcCurveSegment.ParentCurve); END_IF; IF ('IFC4X3_DEV_738df036.IFCCOMPOSITECURVESEGMENT' IN TYPEOF(C\IfcCompositeCurve.Segments[i])) THEN Surfs := Surfs * IfcGetBasisSurface(C\IfcCompositeCurve.Segments[i]\IfcCompositeCurveSegment.ParentCurve); END_IF; END_REPEAT; END_IF; END_IF; RETURN(Surfs); END_FUNCTION;