# -*- coding: utf-8 -*- from pydantic import BaseModel, Field, field_validator class Angetriebene_Kurve(BaseModel): teileid: str x: float y: float drehung: float = Field(default=0.0, description="Rotation der Kurve") hoehe0: float = Field(default=0.0, description="Hoehe Anfang der Kurve") hoehe1: float = Field(default=0.0, description="Hoehe Ende der Kurve") kurvenrichtung: str = Field(description="Kurvenrichtung der Kurve") antriebNebenStrecke: str = Field( description="wo die Angetriebene Strecke ist abhängig von der kurvenrichtung" ) winkel: int = Field(description="Der Winkel der Kurve") @property def antrieb(self): if self.antriebNebenStrecke == "Aussen": self.antriebNebenStrecke = "außen" elif self.antriebNebenStrecke == "Innen": self.antriebNebenStrecke = "innen" return self.antriebNebenStrecke @property def hight_zwischen(self): return (self.hoehe0 + self.hoehe1) / 2 @classmethod def from_merkmale( cls, teileid: str, x: float, y: float, merkmale: dict ) -> "Angetriebene_Kurve": hoehe0 = float(merkmale.get("Höhe Anfang")) * 1000 hoehe1 = float(merkmale.get("Höhe Ende")) * 1000 winkel = int(merkmale.get("Kurvenwinkel")) kurvenrichtung = merkmale.get("Kurvenrichtung") antriebNebenstrecke = merkmale.get("AntriebNebenStrecke") try: drehung = float(merkmale.get("Drehung")) except Exception as e: drehung = 0.0 return cls( teileid=teileid, x=x, y=y, drehung=drehung, hoehe0=hoehe0, hoehe1=hoehe1, kurvenrichtung=kurvenrichtung, antriebNebenStrecke=antriebNebenstrecke, winkel=winkel, )