SCHEMA Geometrieschema;

REFERENCE FROM Strassennetz (GDF_Verbindungselement, GDF_Verbindungspunkt, Strassenelement, Nullpunkt, Netzknoten, Abschnitt_oder_Ast);

REFERENCE FROM Administration (Verwaltungsbezirk);

REFERENCE FROM Verkehr (Fahrstreifen_Nummer);

REFERENCE FROM Bauliche_Strasseneigenschaften (Streifenbegrenzung, Schicht, Querschnittstreifen, Fahrbahnquerneigung, Fahrbahnlaengsneigung);

REFERENCE FROM Entwurf (Polygonpunkt, Abstand_Achse_Linie);

REFERENCE FROM Allgemeine_Objekte (Winkel);

REFERENCE FROM Allgemeine_Geometrieobjekte (ALKIS_Objekt_Flaeche, ALKIS_Objekt_Linie, ALKIS_Objekt_Punkt, Beschriftung, allgemeines_Flaechenobjekt, allgemeines_Linienobjekt, Symbol, allgemeines_Punktobjekt);

REFERENCE FROM direct_positioning_schema (direct_position);

ENTITY Punktobjekt_Modell
ABSTRACT SUPERTYPE OF (ONEOF(Netzknoten , Nullpunkt , GDF_Verbindungspunkt , allgemeines_Punktobjekt , Symbol , Beschriftung , ALKIS_Objekt_Punkt ));
--- Attribute :
--- Relationen :
    dargestellt_von_Knoten: OPTIONAL SET [1: ?] OF Knoten;
    dargestellt_von_Punkt: OPTIONAL SET [1: ?] OF Punkt;
INVERSE
    zu_Beschriftung: SET [0: ?] OF Beschriftung FOR zu_Punktobjekt_Modell;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION << - VERSION >>

ENTITY Linienobjekt_Modell
ABSTRACT SUPERTYPE OF (ONEOF(Abschnitt_oder_Ast , Strassenelement , Streifenbegrenzung , GDF_Verbindungselement , allgemeines_Linienobjekt , ALKIS_Objekt_Linie ));
--- Attribute :
--- Relationen :
    dargestellt_von_Kante: OPTIONAL SET [1: ?] OF Kante;
    dargestellt_von_Linie: OPTIONAL SET [1: ?] OF Linie;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION << - VERSION >>

ENTITY Flaechenobjekt_Modell
ABSTRACT SUPERTYPE OF (ONEOF(Fahrbahnlaengsneigung , Fahrbahnquerneigung , Querschnittstreifen , Fahrstreifen_Nummer , Verwaltungsbezirk , allgemeines_Flaechenobjekt , ALKIS_Objekt_Flaeche ));
--- Attribute :
--- Relationen :
    dargestellt_von_Masche: OPTIONAL SET [1: ?] OF Masche;
    dargestellt_von_Flaeche: OPTIONAL SET [1: ?] OF Flaeche;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION << - VERSION >>

ENTITY Volumenobjekt_Modell
ABSTRACT SUPERTYPE OF (ONEOF(Schicht ));
--- Attribute :
--- Relationen :
    dargestellt_von_Koerper: OPTIONAL SET [1: ?] OF Koerper;
    dargestellt_von_Volumen: OPTIONAL SET [1: ?] OF Volumen;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION << - VERSION >>

ENTITY Raumbezugsart
ABSTRACT SUPERTYPE OF (ONEOF(Knoten , Kante , Masche , Koerper , Punkt , Linie , Flaeche , Volumen ));
--- Attribute :
--- Relationen :
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION << - VERSION >>

ENTITY Knoten
ABSTRACT SUPERTYPE OF (ONEOF(isolierter_Knoten , nicht_isolierter_Knoten ))
SUBTYPE OF (Raumbezugsart);
--- Attribute :
--- Relationen :
    hat_Punkt: OPTIONAL SET [1: ?] OF Punkt;
INVERSE
    stellt_Punktobjekt_dar: SET [0: ?] OF Punktobjekt_Modell FOR dargestellt_von_Knoten;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION << - VERSION >>

ENTITY isolierter_Knoten
SUBTYPE OF (Knoten);
--- Attribute :
--- Relationen :
    liegt_in_Masche: OPTIONAL Masche;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION << - VERSION >>

ENTITY nicht_isolierter_Knoten
SUBTYPE OF (Knoten);
--- Attribute :
--- Relationen :
INVERSE
    Beginn_von: SET [0: ?] OF Kante FOR beginnt_bei_Knoten;
    Ende_von: SET [0: ?] OF Kante FOR endet_bei_Knoten;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION << - VERSION >>

ENTITY Kante
SUBTYPE OF (Raumbezugsart);
--- Attribute :
--- Relationen :
    hat_Linie: OPTIONAL SET [1: ?] OF Linie;
    beginnt_bei_Knoten: OPTIONAL nicht_isolierter_Knoten;
    endet_bei_Knoten: OPTIONAL nicht_isolierter_Knoten;
INVERSE
    stellt_Linienobjekt_dar: SET [0: ?] OF Linienobjekt_Modell FOR dargestellt_von_Kante;
    begrenzt_Masche: SET [0: ?] OF Masche FOR hat_Kante;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION << - VERSION >>

ENTITY Masche
SUBTYPE OF (Raumbezugsart);
--- Attribute :
--- Relationen :
    hat_Flaeche: OPTIONAL SET [1: ?] OF Flaeche;
    hat_Kante: OPTIONAL SET [1: ?] OF Kante;
INVERSE
    stellt_Flaechenobjekt_dar: SET [0: ?] OF Flaechenobjekt_Modell FOR dargestellt_von_Masche;
    enthaelt_Knoten: SET [0: ?] OF isolierter_Knoten FOR liegt_in_Masche;
    begrenzt_Koerper: SET [0: ?] OF Koerper FOR hat_Masche;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION << - VERSION >>

ENTITY Koerper
SUBTYPE OF (Raumbezugsart);
--- Attribute :
--- Relationen :
    hat_Volumen: OPTIONAL SET [1: ?] OF Volumen;
    hat_Masche: OPTIONAL SET [1: ?] OF Masche;
INVERSE
    stellt_Volumenobjekt_dar: SET [0: ?] OF Volumenobjekt_Modell FOR dargestellt_von_Koerper;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION << - VERSION >>

ENTITY Punkt
SUPERTYPE OF (ONEOF(gerechneter_Punkt , Polygonpunkt ))
SUBTYPE OF (Raumbezugsart);
--- Attribute :
--- Relationen :
    hat_Lage: direct_position;
INVERSE
    stellt_Punktobjekt_dar: SET [0: ?] OF Punktobjekt_Modell FOR dargestellt_von_Punkt;
    von_Knoten: SET [0: ?] OF Knoten FOR hat_Punkt;
    Beginn_von_Linienelement: SET [0: ?] OF Linienelement_3D FOR beginnt_bei_Punkt;
    Ende_von_Linienelement: SET [0: ?] OF Linienelement_3D FOR endet_bei_Punkt;
    Zwischenpunkt_von_Kreisbogen: SET [0: ?] OF Kreisbogen FOR hat_Zwischenpunkt;
    Stuetzpunkt_in_Spline: SET [0: ?] OF Linienelement_Spline FOR hat_Stuetzpunkte;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION << - VERSION >>

ENTITY gerechneter_Punkt
SUBTYPE OF (Punkt);
--- Attribute :
--- Relationen :
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION << - VERSION >>

ENTITY Linie
SUBTYPE OF (Raumbezugsart);
--- Attribute :
--- Relationen :
    besteht_aus_Linienelementen: LIST [1: ?] OF Linienelement_3D;
    beschreibt_Linien_auf_Flelem: OPTIONAL SET [1: ?] OF Linie_Flaechenelement;
INVERSE
    stellt_Linienobjekt_dar: SET [0: ?] OF Linienobjekt_Modell FOR dargestellt_von_Linie;
    von_Kante: SET [0: ?] OF Kante FOR hat_Linie;
    von_Abstand_Achse_Linie: SET [0: ?] OF Abstand_Achse_Linie FOR hat_Linie;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION << - VERSION >>

ENTITY Linienelement_3D
ABSTRACT SUPERTYPE OF (ONEOF(Linienelement_Spline , gerades_Linienelement , Kreisbogen ));
--- Attribute :
--- Relationen :
    beginnt_bei_Punkt: Punkt;
    endet_bei_Punkt: Punkt;
INVERSE
    zu_Linie: Linie FOR besteht_aus_Linienelementen;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION << - VERSION >>

ENTITY Linienelement_Spline
SUBTYPE OF (Linienelement_3D);
--- Attribute :
    tangentialer_Anschluss: OPTIONAL BOOLEAN;
    geschlossen: OPTIONAL BOOLEAN;
    Kruemmung_am_Anfang: OPTIONAL REAL;
    Kruemmung_am_Ende: OPTIONAL REAL;
    Tangente_am_Anfang: OPTIONAL Winkel;
    Tangente_am_Ende: OPTIONAL Winkel;
--- Relationen :
    hat_Stuetzpunkte: OPTIONAL LIST [1: ?] OF Punkt;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION << - VERSION >>

ENTITY gerades_Linienelement
SUBTYPE OF (Linienelement_3D);
--- Attribute :
--- Relationen :
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION << - VERSION >>

ENTITY Kreisbogen
SUBTYPE OF (Linienelement_3D);
--- Attribute :
--- Relationen :
    hat_Zwischenpunkt: Punkt;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION << - VERSION >>

ENTITY Linie_Flaechenelement;
--- Attribute :
    bei_Linienfunktion: STRING;
--- Relationen :
INVERSE
    Linie: Linie FOR beschreibt_Linien_auf_Flelem;
    Flaechenelement: Flaechenelement FOR beschrieben_durch_Linien;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION << - VERSION >>

ENTITY Flaeche
ABSTRACT SUPERTYPE OF (ONEOF(Flaechenelement , komplexe_Flaeche ))
SUBTYPE OF (Raumbezugsart);
--- Attribute :
--- Relationen :
INVERSE
    stellt_Flaechenobjekt_dar: SET [0: ?] OF Flaechenobjekt_Modell FOR dargestellt_von_Flaeche;
    von_Masche: SET [0: ?] OF Masche FOR hat_Flaeche;
    begrenzt_Volumen: SET [0: ?] OF Volumen FOR hat_Flaeche;
    erste_Flaeche_in: SET [0: ?] OF komplexe_Flaeche FOR hat_erste_Flaeche;
    zweite_Flaeche_in: SET [0: ?] OF komplexe_Flaeche FOR hat_zweite_Flaeche;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION << - VERSION >>

ENTITY Flaechenelement
SUBTYPE OF (Flaeche);
--- Attribute :
--- Relationen :
    beschrieben_durch_Linien: Linie_Flaechenelement;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION << - VERSION >>

ENTITY komplexe_Flaeche
SUBTYPE OF (Flaeche);
--- Attribute :
--- Relationen :
    hat_erste_Flaeche: Flaeche;
    hat_zweite_Flaeche: Flaeche;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION << - VERSION >>

ENTITY Volumen
SUBTYPE OF (Raumbezugsart);
--- Attribute :
--- Relationen :
    hat_Flaeche: SET [1: ?] OF Flaeche;
INVERSE
    stellt_Volumenobjekt_dar: SET [0: ?] OF Volumenobjekt_Modell FOR dargestellt_von_Volumen;
    von_Koerper: SET [0: ?] OF Koerper FOR hat_Volumen;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION << - VERSION >>

END_SCHEMA; -- Geometrieschema