INTERLIS 2.4; /* ######################################################################## CHBASE - BASE MODULES OF THE SWISS FEDERATION FOR MINIMAL GEODATA MODELS ====== BASISMODULE DES BUNDES MODULES DE BASE DE LA CONFEDERATION FÜR MINIMALE GEODATENMODELLE POUR LES MODELES DE GEODONNEES MINIMAUX PROVIDER: GKG/KOGIS - GCS/COSIG CONTACT: models@geo.admin.ch PUBLISHED: 2023-10-18 ######################################################################## */ /* ######################################################################## ######################################################################## PART VIII -- GEOMETRY3D - Package Geometry3D */ !! ######################################################################## !!@technicalContact=mailto:models@geo.admin.ch !!@furtherInformation=https://www.geo.admin.ch/de/geoinformation-schweiz/geobasisdaten/geodata-models.html TYPE MODEL Geometry3D_V2 (en) AT "https://models.geo.admin.ch/CH/" VERSION "2023-10-18" = IMPORTS UNQUALIFIED INTERLIS; IMPORTS Units; IMPORTS CoordSys; IMPORTS Geometry_V2; DOMAIN LocalCoord2 = COORD -1000.000 .. 1000.000 [INTERLIS.m], -1000.000 .. 1000.000 [INTERLIS.m], ROTATION 2 -> 1; LocalSurface = SURFACE WITH (STRAIGHTS,ARCS) VERTEX LocalCoord2 WITHOUT OVERLAPS > 0.001; !! abstract base structure for all 3d curve types STRUCTURE Curve3D (ABSTRACT) = Directed: MANDATORY BOOLEAN; END Curve3D; !! polyline in 3d STRUCTURE PolylineStraight3D EXTENDS Curve3D = Geometry: MANDATORY POLYLINE WITH (STRAIGHTS) VERTEX Geometry_V2.Coord3 WITHOUT OVERLAPS > 0.001; END PolylineStraight3D; !! composite (connected) curve STRUCTURE CompositeCurve3D = Simplified: LIST {1..*} OF PolylineStraight3D; Native: LIST {0..*} OF Curve3D; Resolution: 1 .. 100000; !! Default 1 END CompositeCurve3D; STRUCTURE CrossSection (ABSTRACT) = END CrossSection; STRUCTURE CircularCrossSection EXTENDS CrossSection = Radius: MANDATORY 0.001 .. 1000.000 [INTERLIS.m]; END CircularCrossSection; STRUCTURE SurfaceCrossSection EXTENDS CrossSection = Surface: MANDATORY LocalSurface; END SurfaceCrossSection; STRUCTURE Pipe3D EXTENDS CompositeCurve3D = CrossSection: MANDATORY CrossSection; END Pipe3D; !! abtract base structure for all 3d surface types STRUCTURE Surface3D (ABSTRACT) = FillData: BLACKBOX BINARY; FillMimeType: TEXT*100; END Surface3D; !! function for calculating edge point count FUNCTION getEdgePointCount(geometry:SURFACE):NUMERIC; !! planar surface in 3D with no arcs STRUCTURE PlanarSurface3D EXTENDS Surface3D = Geometry: MANDATORY SURFACE WITH (STRAIGHTS) VERTEX Geometry_V2.Coord3 WITHOUT OVERLAPS > 0.001; END PlanarSurface3D; !! planar surface with only three points no arcs STRUCTURE Triangle3D EXTENDS PlanarSurface3D = MANDATORY CONSTRAINT getEdgePointCount(Geometry) == 3; END Triangle3D; !! non planar surface in 3D !! all inner edge curves are shared by two surfaces !! except edge curves of composite boundary(ies) !! surfaces may intersect STRUCTURE CompositeSurface3D = Simplified: BAG {1..*} OF Triangle3D; Native: BAG {0..*} OF Surface3D; Resolution: 1 .. 100000; !! Default 1 END CompositeSurface3D; !! triangle network (TIN) STRUCTURE Tin3D EXTENDS CompositeSurface3D = END Tin3D; !! closed surface shell !! all surface edge curves are shared by two surfaces !! surfaces may not intersect STRUCTURE SurfaceShell3D EXTENDS CompositeSurface3D = END SurfaceShell3D; !! 3D solid with one outer shell and 0..* inner shells !! shells may not intersect !! inner shells are enclosed by outer shell STRUCTURE Solid3D = OuterShell: MANDATORY SurfaceShell3D; InnerShells: BAG {0..*} OF SurfaceShell3D; FillData: BLACKBOX BINARY; FillMimeType: TEXT*100; END Solid3D; !! collection of 3D points STRUCTURE PointCloud3D = Points: BAG {1..*} OF Geometry_V2.Coord3; END PointCloud3D; !! function for testing composite solids in set constraints FUNCTION isCompositeSolid3D(solids:BAG OF Solid3D):BOOLEAN; END Geometry3D_V2. !! ########################################################################