From f8b8b0dd15603323f852133123cffbcb275854fa Mon Sep 17 00:00:00 2001 From: Paul Wolok Date: Thu, 4 Dec 2025 15:12:26 +0100 Subject: [PATCH] weiteres refactoring --- cfg/allgemein.cfg | 3 +- lib/Elemente/Gefaehllestrecke.py | 109 +++++ lib/as_es_methoden.py | 438 +++++++++++++++++++ lib/dxf2lib.py | 1 - lib/plant2dxf.py | 721 +++---------------------------- 5 files changed, 612 insertions(+), 660 deletions(-) create mode 100644 lib/Elemente/Gefaehllestrecke.py create mode 100644 lib/as_es_methoden.py diff --git a/cfg/allgemein.cfg b/cfg/allgemein.cfg index 177ef08..240c2e9 100644 --- a/cfg/allgemein.cfg +++ b/cfg/allgemein.cfg @@ -13,7 +13,8 @@ libfile = omniflo_lib.dxf [BT] libfile = ils_lib.dxf - +[TEF] +libfile = omniflo_lib.dxf [dxf2lib] # Text-Positionierung und Formatierung # Vertikaler Abstand des Texts über dem Block (in DXF-Einheiten) diff --git a/lib/Elemente/Gefaehllestrecke.py b/lib/Elemente/Gefaehllestrecke.py new file mode 100644 index 0000000..ebcc49f --- /dev/null +++ b/lib/Elemente/Gefaehllestrecke.py @@ -0,0 +1,109 @@ + +from pydantic import BaseModel, Field, field_validator +import math +import plant2dxf +from ezdxf.math import Matrix44 + + +class Gefaellestrecke(BaseModel): + teileid: str + x: float = Field(description="X-Koordinate des Foerder-Zentrums") + y: float = Field(description="Y-Koordinate des Foerder-Zentrums") + laenge:float = Field(description = "Länge des Förderers") + h0: float = Field(description="Höhe Unten in Merkmale") + h1: float = Field(description="Höhe Oben in Merkmale") + drehung: float = Field(default=0.0, description="Drehung an z achse") + anzahl_scanner: int = Field(default=0, description="Anzahl der Scanner") + anzahl_separatoren: int = Field(default=0, description="Anzahl der Separatoren") + + @property + def hight_zwischen(self): + return ((self.h0 + self.h1) /2) + + @classmethod + def from_merkmale(cls, teileid: str, x: float, y: float, merkmale: dict) -> 'Gefaellestrecke': + + h0 = float(merkmale.get("Höhe unten")) * 1000 + h1 = float(merkmale.get("Höhe oben")) * 1000 + laenge = float(merkmale.get("Länge in Meter")) * 1000 + return cls( + teileid = teileid, + laenge = laenge, + x = x, + y = y, + h0 = h0, + h1 =h1, + drehung = float(merkmale.get("Drehung")), + anzahl_scanner = int(merkmale.get("Anzahl der Scanner")), + anzahl_separatoren = int(merkmale.get("Anzahl der Separatoren")) + ) + def hat_motor_umlenk_station (doc, lib_doc, upper_hoehe_gefaehlle, lower_hoehe_gefaehlle, gefaellestrecke_nachbarn): + hat_motor_0 = None + hat_motor_1 = None + hat_umlenk_0 = None + hat_umlenk_1 = None + tefkurve_0 = None + tefkurve_1 = None + if "Kurvenrichtung" in gefaellestrecke_nachbarn: + vario_hoehe_0 = float(gefaellestrecke_nachbarn.get("vario_hoehe_0")) * 1000 + vario_hoehe_1 = float(gefaellestrecke_nachbarn.get("vario_hoehe_1")) * 1000 + kurvenrichtung = gefaellestrecke_nachbarn.get("Kurvenrichtung") + tefkurve_0 = gefaellestrecke_nachbarn.get("Tefkurve") + if (kurvenrichtung == "links" and tefkurve_0 == "Aussen") or kurvenrichtung == "rechts" and tefkurve_0 == "Innen": + tefkurve_0 = "links" + else: + tefkurve_0 = "rechts" + block_Vario_Umlenkstation_500mm ="Vario_Umlenkstation_500mm" + block_Vario_Motorstation_500mm = "Vario_Motorstation_500mm" + blockname_motor_links = block_Vario_Motorstation_500mm +"links" + blockname_umlenk_links = block_Vario_Umlenkstation_500mm + "links" + plant2dxf.import_block(block_Vario_Umlenkstation_500mm,lib_doc,doc) + plant2dxf.import_block(block_Vario_Motorstation_500mm,lib_doc,doc) + block_Vario_Umlenkstation_500mm =plant2dxf.dreh_block(block_Vario_Umlenkstation_500mm,doc,math.radians(3)) + block_Vario_Motorstation_500mm =plant2dxf.dreh_block(block_Vario_Motorstation_500mm,doc,math.radians(3)) + if blockname_motor_links not in doc.blocks: + matrix = Matrix44.scale(1,-1,1) + block_motor_links = doc.blocks.new(name=blockname_motor_links,base_point=(0,0,0)) + block_umlenk_links = doc.blocks.new(name=blockname_umlenk_links,base_point=(0,0,0)) + block_motor_rechts = doc.blocks[block_Vario_Motorstation_500mm] + block_umlenk_rechts = doc.blocks[block_Vario_Umlenkstation_500mm] + for e in block_motor_rechts: + copy = e.copy() + copy.transform(matrix) + block_motor_links.add_entity(copy) + + for e in block_umlenk_rechts: + copy = e.copy() + copy.transform(matrix) + block_umlenk_links.add_entity(copy) + + if upper_hoehe_gefaehlle > lower_hoehe_gefaehlle: + if vario_hoehe_0 == upper_hoehe_gefaehlle or vario_hoehe_1 == upper_hoehe_gefaehlle: + hat_motor_0 = True + else: + hat_umlenk_0 = True + if upper_hoehe_gefaehlle < lower_hoehe_gefaehlle: + if vario_hoehe_0 == lower_hoehe_gefaehlle or vario_hoehe_1 == lower_hoehe_gefaehlle: + hat_motor_0 = True + else: + hat_umlenk_0 = True + if "Kurvenrichtung_1" in gefaellestrecke_nachbarn: + vario_hoehe_0_1 = float(gefaellestrecke_nachbarn.get("vario_hoehe_0_1")) * 1000 + vario_hoehe_1_1 = float(gefaellestrecke_nachbarn.get("vario_hoehe_1_1")) * 1000 + kurvenrichtung_1 = gefaellestrecke_nachbarn.get("Kurvenrichtung_1") + tefkurve_1 = gefaellestrecke_nachbarn.get("Tefkurve_1") + if (kurvenrichtung_1 == "links" and tefkurve_1 == "Aussen") or kurvenrichtung_1 == "rechts" and tefkurve_1 == "Innen": + tefkurve_0 = "links" + else: + tefkurve_0 = "rechts" + if upper_hoehe_gefaehlle > lower_hoehe_gefaehlle: + if vario_hoehe_0_1 == upper_hoehe_gefaehlle or vario_hoehe_1_1 == upper_hoehe_gefaehlle: + hat_motor_1 = True + else: + hat_umlenk_1 = True + if upper_hoehe_gefaehlle < lower_hoehe_gefaehlle: + if vario_hoehe_0_1 == lower_hoehe_gefaehlle or vario_hoehe_1_1 == lower_hoehe_gefaehlle: + hat_motor_1 = True + else: + hat_umlenk_1 = True + return hat_motor_0,hat_umlenk_0,hat_motor_1,hat_umlenk_1, tefkurve_0, tefkurve_1 \ No newline at end of file diff --git a/lib/as_es_methoden.py b/lib/as_es_methoden.py new file mode 100644 index 0000000..192da55 --- /dev/null +++ b/lib/as_es_methoden.py @@ -0,0 +1,438 @@ +from ezdxf.entities import Line +import math +import plant2dxf + +RADIUS = 400 +def erstellung_gefaelle_block_verbunenden_am_einen(msp,x, y, doc, lib_doc, upper_hoehe_gefaehlle, lower_hoehe_gefaehlle, hoehe_gefaehlle, drehung0, laenge,blockname,config, hight = None, block_vario = None, vario_richtung = None, verbungden_höher = None,gefaelle_block=None,start = None,ende = None,mit_horizontal_verbunden = None): + halbe_laenge = laenge / 2 + dy = halbe_laenge * math.cos(0) + asoffset = float(config.get("ILS 2.0 Gefällestrecke", "asoffset")) + esoffset = float(config.get("ILS 2.0 Gefällestrecke", "esoffset")) + winkel_as = float(config.get("Ils 2.0 core winkel", "winkel_as")) + winkel_es = float(config.get("Ils 2.0 core winkel", "winkel_es")) + asoffset_y = asoffset * math.cos(math.radians(winkel_as)) + asoffset_z = asoffset * math.sin(math.radians(winkel_as)) + esoffset_y = esoffset * math.cos(math.radians(winkel_es)) + esoffset_z = esoffset * math.sin(math.radians(winkel_es)) + block_as = None + block_es = None + if (( hight == "higher" and drehung0 == "GUZS" )or (vario_richtung == "Auf"and verbungden_höher == False and drehung0 == "GUZS")or + (vario_richtung == "Ab" and verbungden_höher == True and drehung0 == "GUZS")or (vario_richtung == "Horizontal" and drehung0 == "GUZS" and (mit_horizontal_verbunden == "unten_drehung_0_or_-90" or mit_horizontal_verbunden == "oben_drehung_-180_or_-270"))): + block_as = "200000241_AS-Element_90_rechts" + plant2dxf.import_block(block_as,lib_doc,doc) + + elif ((hight == "lower" and drehung0 == "GUZS") or (vario_richtung == "Auf"and verbungden_höher == True and drehung0 == "GUZS") or + (vario_richtung == "Ab" and verbungden_höher == False and drehung0 == "GUZS")or (vario_richtung == "Horizontal" and drehung0 == "GUZS" and (mit_horizontal_verbunden == "oben_drehung_0_or_-90" or mit_horizontal_verbunden == "unten_drehung_-180_or_-270"))): + block_es = "200000146_ES-Element_90_rechts" + plant2dxf.import_block(block_es,lib_doc,doc) + + elif ((hight == "higher" and drehung0 == "UZS")or (vario_richtung == "Auf"and verbungden_höher == False and drehung0 == "UZS") or + (vario_richtung == "Ab" and verbungden_höher == True and drehung0 == "UZS")or (vario_richtung == "Horizontal" and drehung0 == "UZS" and (mit_horizontal_verbunden == "unten_drehung_0_or_-90" or mit_horizontal_verbunden == "oben_drehung_-180_or_-270"))): + block_as = "200000217_AS-Element_90_links" + plant2dxf.import_block(block_as,lib_doc,doc) + + elif (( hight == "lower" and drehung0 == "UZS") or (vario_richtung == "Auf" and verbungden_höher == True and drehung0 == "UZS") or + (vario_richtung == "Ab" and verbungden_höher == False and drehung0 == "UZS")or (vario_richtung == "Horizontal" and drehung0 == "UZS" and (mit_horizontal_verbunden == "oben_drehung_0_or_-90" or mit_horizontal_verbunden == "unten_drehung_-180_or_-270"))): + block_es = "400102632_ES-Element_90_links" + plant2dxf.import_block(block_es,lib_doc,doc) + + if block_as != None: + block_as = plant2dxf.dreh_block(block_as,doc,math.radians(winkel_as)) + if vario_richtung == "Auf" or vario_richtung =="Horizontal": + start = (x , y + dy ,upper_hoehe_gefaehlle) + ende = (x , y - dy + asoffset_y ,lower_hoehe_gefaehlle - asoffset_z) + block_vario.add_blockref(block_as,(ende[0]-x ,ende[1]-asoffset_y -y,ende[2] -hoehe_gefaehlle + asoffset_z),dxfattribs={"rotation": 180}) + return start, ende + elif vario_richtung == "Ab": + start = (x , y + dy - asoffset_y,upper_hoehe_gefaehlle - asoffset_z) + ende = (x , y - dy ,lower_hoehe_gefaehlle) + block_vario.add_blockref(block_as,(start[0]-x ,start[1]+asoffset_y -y,start[2] -hoehe_gefaehlle + asoffset_z)) + return start,ende + + if laenge > asoffset: + start[1] = start[1] - asoffset_y + start[2] = start[2] - asoffset_z + line = Line.new(dxfattribs={"start": start, "end": ende}) + line.dxf.layer = "6-SP" + copy= line.copy() + copy.translate(-x,-y,-hoehe_gefaehlle) + gefaelle_block.add_entity(copy) + gefaelle_block.add_blockref(block_as,(start[0]-x ,start[1]+asoffset_y -y,start[2] -hoehe_gefaehlle + asoffset_z)) + return False + else: + msp.add_blockref(block_as,(x,y,upper_hoehe_gefaehlle)) + return True + elif block_es != None: + block_es = plant2dxf.dreh_block(block_es,doc,math.radians(winkel_es)) + if vario_richtung == "Auf" or vario_richtung =="Horizontal": + start = (x , y + dy-esoffset_y ,upper_hoehe_gefaehlle + esoffset_z) + ende = (x , y - dy,lower_hoehe_gefaehlle) + block_vario.add_blockref(block_es, (start[0]-x ,start[1]+esoffset_y -y,start[2] - hoehe_gefaehlle - esoffset_z),dxfattribs={"rotation": 180}) + return start, ende + elif vario_richtung == "Ab": + start = (x , y + dy ,upper_hoehe_gefaehlle) + ende = (x , y - dy + esoffset_y,lower_hoehe_gefaehlle + esoffset_z) + block_vario.add_blockref(block_es, (ende[0]-x ,ende[1]-esoffset_y -y,ende[2] - hoehe_gefaehlle -esoffset_z)) + return start,ende + + if laenge > esoffset: + ende[1] = ende[1] + esoffset_y + ende[2] = ende[2] + esoffset_z + line = Line.new(dxfattribs={"start": start, "end": ende}) + line.dxf.layer = "6-SP" + copy= line.copy() + copy.translate(-x ,-y,-hoehe_gefaehlle) + gefaelle_block.add_entity(copy) + gefaelle_block.add_blockref(block_es, (ende[0]-x ,ende[1]-esoffset_y -y,ende[2] - hoehe_gefaehlle -esoffset_z)) + return False + else: + msp.add_blockref(block_es,(x,y,lower_hoehe_gefaehlle)) + return True + +def gefaellegerade_erstellung(x, y, doc, lib_doc, upper_hoehe_gefaehlle, lower_hoehe_gefaehlle, hoehe_gefaehlle,richtung2, drehung0, drehung1, laenge, hight_position, blockname,config, block_vario = None,voerder_richtung = None, am_kreisel = None, erster_kreisel_höher = None,y1=None,z1 =None): + #erstellung des blockes falls die gefaelle strecke mit einem kreisel verbunden ist, mehrere variation von selben weil diese nötig sind sobald man die richtigen inserts bekommen + + asoffset = float(config.get("ILS 2.0 Gefällestrecke", "asoffset")) + esoffset = float(config.get("ILS 2.0 Gefällestrecke", "esoffset")) + winkel_as = float(config.get("Ils 2.0 core winkel", "winkel_as")) + winkel_es = float(config.get("Ils 2.0 core winkel", "winkel_es")) + asoffset_y = asoffset * math.cos(math.radians(winkel_as)) + asoffset_z = asoffset * math.sin(math.radians(winkel_as)) + esoffset_y = esoffset * math.cos(math.radians(winkel_es)) + esoffset_z = esoffset * math.sin(math.radians(winkel_es)) + block_as = None + block_es = None + halbe_laenge = laenge / 2 + dy = halbe_laenge * math.cos(0) + if upper_hoehe_gefaehlle < lower_hoehe_gefaehlle: + middle_hoehe = upper_hoehe_gefaehlle + upper_hoehe_gefaehlle = lower_hoehe_gefaehlle + lower_hoehe_gefaehlle = middle_hoehe + + if richtung2!= "DEFAULT" or am_kreisel != None: + if ((drehung0 == "GUZS" and drehung1 == "GUZS" and hight_position == "higher") or + (voerder_richtung == "Auf" and((am_kreisel == 1 and erster_kreisel_höher == False)or (am_kreisel== 2 and erster_kreisel_höher == True)) and drehung0 == "GUZS" and drehung1== "GUZS") or + (voerder_richtung == "Ab"and ((am_kreisel == 1 and erster_kreisel_höher == True)or (am_kreisel== 2 and erster_kreisel_höher == False)) and drehung0 == "GUZS" and drehung1== "GUZS")): + block_es = "200000146_ES-Element_90_rechts" + plant2dxf.import_block(block_es,lib_doc,doc) + + elif ((drehung0 == "GUZS" and drehung1 == "GUZS") or + (am_kreisel != None and drehung0 == "GUZS" and drehung1 == "GUZS")): + block_as = "200000241_AS-Element_90_rechts" + plant2dxf.import_block(block_as,lib_doc,doc) + + elif (( drehung0 == "GUZS" and drehung1 == "UZS" and hight_position == "higher")or + (voerder_richtung == "Auf" and((am_kreisel == 1 and erster_kreisel_höher == False)or (am_kreisel == 2 and erster_kreisel_höher == True))and (drehung0 == "UZS" and drehung1 == "GUZS")) or + (voerder_richtung == "Ab" and((am_kreisel == 1 and erster_kreisel_höher == True) or (am_kreisel ==2 and erster_kreisel_höher ==False))and (drehung0 == "GUZS" and drehung1 == "UZS"))): + + block_es = "400102632_ES-Element_90_links" + plant2dxf.import_block(block_es,lib_doc,doc) + + elif ((drehung0 == "UZS" and drehung1 == "GUZS" and hight_position == "lower")or + (voerder_richtung == "Auf" and((am_kreisel == 1 and erster_kreisel_höher == True)or (am_kreisel == 2 and erster_kreisel_höher == False))and (drehung0 == "UZS" and drehung1 == "GUZS")) or + (voerder_richtung == "Ab"and ((am_kreisel == 1 and erster_kreisel_höher == False)or (am_kreisel == 2 and erster_kreisel_höher == True))and (drehung0 == "GUZS" and drehung1 == "UZS"))): + + block_as = "200000241_AS-Element_90_rechts" + plant2dxf.import_block(block_as,lib_doc,doc) + + elif ((drehung0 == "UZS" and drehung1 == "UZS" and hight_position == "higher")or + (voerder_richtung == "Auf" and((am_kreisel == 1 and erster_kreisel_höher == False)or (am_kreisel== 2 and erster_kreisel_höher == True)) and drehung0 == "UZS" and drehung1== "UZS")or + (voerder_richtung == "Ab" and((am_kreisel == 1 and erster_kreisel_höher == True)or (am_kreisel== 2 and erster_kreisel_höher == False)) and drehung0 == "UZS" and drehung1== "UZS")): + + block_es = "400102632_ES-Element_90_links" + plant2dxf.import_block(block_es,lib_doc,doc) + + elif (((drehung0 == "UZS" and drehung1 == "UZS")or + (am_kreisel!= None and drehung0 == "UZS" and drehung1 == "UZS"))): + block_as = "200000217_AS-Element_90_links" + plant2dxf.import_block(block_as,lib_doc,doc) + + elif (((drehung0 == "UZS" and drehung1 == "GUZS" and hight_position== "higher"))or + (voerder_richtung == "Auf"and ((am_kreisel == 1 and erster_kreisel_höher == False) or (am_kreisel ==2 and erster_kreisel_höher ==True))and (drehung0 == "GUZS" and drehung1 == "UZS")) or + (voerder_richtung == "Ab" and((am_kreisel == 1 and erster_kreisel_höher == True)or (am_kreisel == 2 and erster_kreisel_höher == False))and (drehung0 == "UZS" and drehung1 == "GUZS"))): + block_es = "200000146_ES-Element_90_rechts" + plant2dxf.import_block(block_es,lib_doc,doc) + + elif ((drehung0 == "GUZS" and drehung1 == "UZS" and hight_position == "lower")or + (voerder_richtung == "Auf"and((am_kreisel == 1 and erster_kreisel_höher == True)or (am_kreisel == 2 and erster_kreisel_höher == False))and (drehung0 == "GUZS" and drehung1 == "UZS")) or + (voerder_richtung == "Ab" and((am_kreisel == 1 and erster_kreisel_höher == False)or (am_kreisel == 2 and erster_kreisel_höher == True))and (drehung0 == "UZS" and drehung1 == "GUZS"))): + block_as = "200000217_AS-Element_90_links" + plant2dxf.import_block(block_as,lib_doc,doc) + + if block_es != None: + block_es = plant2dxf.dreh_block(block_es,doc,math.radians(winkel_es)) + if voerder_richtung == "Auf": + start = (x , y+ dy - esoffset_y,upper_hoehe_gefaehlle + esoffset_z) + ende = (x , y1 ,z1) + block_vario.add_blockref(block_es, (start[0]-x ,start[1]+esoffset_y-y ,start[2] - esoffset_z-hoehe_gefaehlle),dxfattribs={"rotation": 180}) + return start,ende + elif(voerder_richtung == "Ab"): + start = (x , y1 ,z1) + ende = (x , y - dy + esoffset_y,lower_hoehe_gefaehlle + esoffset_z) + block_vario.add_blockref(block_es, (ende[0]-x ,ende[1]-esoffset_y-y ,ende[2] - esoffset_z -hoehe_gefaehlle)) + return start, ende + elif am_kreisel == None and blockname not in doc.blocks: + block = doc.blocks.new(name=blockname, base_point=(0,0,0)) + start = (x , y + dy,upper_hoehe_gefaehlle) + ende = (x , y - dy + esoffset_y,lower_hoehe_gefaehlle + esoffset_z) + line = Line.new(dxfattribs={"start": start, "end": ende}) + line.dxf.layer = "6-SP" + copy= line.copy() + copy.translate(-x,-y,-hoehe_gefaehlle) + block.add_entity(copy) + block.add_blockref(block_es, (ende[0]-x ,ende[1]- esoffset_y -y ,ende[2] -hoehe_gefaehlle )) + if block_as != None: + block_as = plant2dxf.dreh_block(block_as,doc,math.radians(winkel_as)) + if voerder_richtung == "Auf": + start = (x , y1,z1) + ende = (x , y - dy + asoffset_y ,lower_hoehe_gefaehlle) + block_vario.add_blockref(block_as,(ende[0]-x ,ende[1]-asoffset_y -y,ende[2] - esoffset_z - hoehe_gefaehlle ),dxfattribs={"rotation": 180}) + return start, ende + elif voerder_richtung == "Ab": + start = (x , y +dy - asoffset_y,upper_hoehe_gefaehlle - asoffset_z) + ende = (x , y1 ,z1) + block_vario.add_blockref(block_as,(start[0]-x ,start[1]+asoffset_y -y,start[2] + asoffset_z - hoehe_gefaehlle)) + return start,ende + elif am_kreisel == None and blockname not in doc.blocks: + block = doc.blocks.new(name=blockname, base_point=(0,0,0)) + start = (x , y +dy - asoffset_y,upper_hoehe_gefaehlle- asoffset_z) + ende = (x , y - dy ,lower_hoehe_gefaehlle) + line = Line.new(dxfattribs={"start": start, "end": ende}) + line.dxf.layer = "6-SP" + + copy= line.copy() + copy.translate(-x ,-y,-hoehe_gefaehlle) + + block.add_entity(copy) + block.add_blockref(block_as,(start[0]-x ,start[1]+asoffset_y -y,start[2] + asoffset_z - hoehe_gefaehlle)) + else: + if (( drehung0 == "GUZS" and drehung1 == "GUZS") or (voerder_richtung != None and drehung0 == "GUZS" and drehung1 == "GUZS")): + block_as = "200000241_AS-Element_90_rechts" + plant2dxf.import_block(block_as,lib_doc,doc) + block_es = "200000146_ES-Element_90_rechts" + plant2dxf.import_block(block_es,lib_doc,doc) + + elif (((drehung0 == "GUZS" and drehung1 == "UZS" and hight_position == "higher")or (drehung0 == "UZS" and drehung1 == "GUZS" and hight_position == "lower")) or + (voerder_richtung == "Auf" and drehung0 == "UZS"and drehung1 == "GUZS") or + (voerder_richtung == "Ab" and drehung0 == "GUZS" and drehung1 == "UZS")) : + block_as = "200000241_AS-Element_90_rechts" + plant2dxf.import_block(block_as,lib_doc,doc) + block_es = "400102632_ES-Element_90_links" + plant2dxf.import_block(block_es,lib_doc,doc) + + elif (( drehung0 == "UZS" and drehung1 == "UZS") or (voerder_richtung != None and drehung0 == "UZS" and drehung1 == "UZS")): + block_as = "200000217_AS-Element_90_links" + plant2dxf.import_block(block_as,lib_doc,doc) + block_es = "400102632_ES-Element_90_links" + plant2dxf.import_block(block_es,lib_doc,doc) + + elif ((((drehung0 == "UZS" and drehung1 == "GUZS" and hight_position== "higher")or (drehung0 == "GUZS" and drehung1 == "UZS" and hight_position == "lower")))or + (voerder_richtung == "Auf" and drehung0 == "GUZS" and drehung1 == "UZS") or + (voerder_richtung == "Ab" and drehung0 == "UZS"and drehung1 == "GUZS")) : + + block_as = "200000217_AS-Element_90_links" + plant2dxf.import_block(block_as,lib_doc,doc) + block_es = "200000146_ES-Element_90_rechts" + plant2dxf.import_block(block_es,lib_doc,doc) + block_as = plant2dxf.dreh_block(block_as,doc,math.radians(winkel_as)) + block_es = plant2dxf.dreh_block(block_es,doc,math.radians(winkel_es)) + halbe_laenge = laenge / 2 + + dy = halbe_laenge * math.cos(0) + if hight_position != None and blockname not in doc.blocks: + block = doc.blocks.new(name=blockname, base_point=(0,0,0)) + start = (x , y + dy - asoffset_y,upper_hoehe_gefaehlle- asoffset_z) + ende = (x , y - dy + esoffset_y,lower_hoehe_gefaehlle + esoffset_z) + line = Line.new(dxfattribs={"start": start, "end": ende}) + line.dxf.layer = "6-SP" + + copy= line.copy() + + copy.translate(-x ,-y,-hoehe_gefaehlle) + block.add_entity(copy) + block.add_blockref(block_as,(start[0]-x ,start[1]+asoffset_y -y,start[2] + asoffset_z - hoehe_gefaehlle )) + block.add_blockref(block_es, (ende[0]-x ,ende[1]-esoffset_y -y,ende[2] - esoffset_z - hoehe_gefaehlle )) + return + if voerder_richtung == "Auf": + start = (x , y + dy - esoffset_y,upper_hoehe_gefaehlle + esoffset_z) + ende = (x , y - dy + asoffset,lower_hoehe_gefaehlle -asoffset_z) + + block_vario.add_blockref(block_es,(start[0]-x ,start[1]+esoffset_y -y,start[2] - esoffset_z - hoehe_gefaehlle ),dxfattribs={"rotation": 180}) + block_vario.add_blockref(block_as, (ende[0]-x ,ende[1]-asoffset_y -y,ende[2] + asoffset_z - hoehe_gefaehlle ),dxfattribs={"rotation": 180}) + return start,ende + elif voerder_richtung == "Ab": + start = (x , y + dy - asoffset_y,upper_hoehe_gefaehlle - asoffset_z) + ende = (x , y - dy + esoffset_y,lower_hoehe_gefaehlle + esoffset_z) + + block_vario.add_blockref(block_as,(start[0]-x ,start[1]+asoffset_y -y,start[2] + asoffset_z - hoehe_gefaehlle )) + block_vario.add_blockref(block_es, (ende[0]-x ,ende[1]-esoffset_y -y,ende[2] - esoffset_z - hoehe_gefaehlle)) + return start,ende + + +def am_kreisel_direct_verbunden(x, y, upper_hoehe_gefaehlle, lower_hoehe_gefaehlle, x0_kreisel, y0_kreisel, richtung_rad0, abstand0, dx, dy, x1_kreisel, y1_kreisel, richtung_rad1, abstand1,kreisel_verbunden= None, richtung0 = None, richtung1 = None, richtung2 = None): + if kreisel_verbunden == None: + kreisel_verbunden = 0 + unterschiedlich = False + am_kreisel = 0 + halbabstand0 = abstand0 / 2 + dx0 = halbabstand0 * math.cos(richtung_rad0) + dy0 = halbabstand0 * math.sin(richtung_rad0) + pos0_0_floor= (math.floor(x0_kreisel + dx0),math.floor( y0_kreisel + dy0)) + pos0_1_floor = (math.floor(x0_kreisel- dx0),math.floor( y0_kreisel- dy0)) + pos0_0_round= (round(x0_kreisel + dx0),round( y0_kreisel + dy0)) + pos0_1_round = (round(x0_kreisel- dx0),round( y0_kreisel- dy0)) + if (x1_kreisel != None): + halbabstand1 = abstand1 / 2 + dx1 = halbabstand1 * math.cos(richtung_rad1 ) + dy1 = halbabstand1 * math.sin(richtung_rad1) + pos1_0_floor = (math.floor(x1_kreisel + dx1), math.floor(y1_kreisel + dy1)) + pos1_1_floor = (math.floor(x1_kreisel - dx1), math.floor(y1_kreisel - dy1)) + pos1_0_round = (round(x1_kreisel + dx1), round(y1_kreisel + dy1)) + pos1_1_round = (round(x1_kreisel - dx1), round(y1_kreisel - dy1)) + + # berechnung der geraden einmal abgerunden und einmal gerunden zur negirung des offsets + start_floor = (math.floor(x +dx ), math.floor(y + dy ),upper_hoehe_gefaehlle) + ende_floor = (math.floor(x -dx), math.floor(y - dy ) ,lower_hoehe_gefaehlle) + start_round = (round(x +dx ), round(y + dy ),upper_hoehe_gefaehlle) + ende_round= (round(x -dx), round(y - dy ) ,lower_hoehe_gefaehlle) + # verschiebund der endpunkte der gerade in richtung von dem potentiellen Kreisel für den vergleich wieder mit floor und rundung + abstand_fuer_kreis_start_x_floor = start_floor[0] +RADIUS, start_floor[1] + abstand_gegen_kreis_start_x_floor = start_floor[0] -RADIUS, start_floor[1] + abstand_fuer_kreis_start_y_floor = start_floor[0], start_floor[1] + RADIUS + abstand_gegen_kreis_start_y_floor = start_floor[0], start_floor[1] - RADIUS + abstand_fuer_kreis_ende_x_floor= ende_floor[0] + RADIUS, ende_floor[1] + abstand_gegen_kreis_ende_x_floor= ende_floor[0] - RADIUS, ende_floor[1] + abstand_fuer_kreis_ende_y_floor = ende_floor[0] , ende_floor[1] + RADIUS + abstand_gegen_kreis_ende_y_floor = ende_floor[0] , ende_floor[1] - RADIUS + + abstand_fuer_kreis_start_x_round= start_round[0] +RADIUS, start_round[1] + abstand_gegen_kreis_start_x_round = start_round[0] -RADIUS, start_round[1] + abstand_fuer_kreis_start_y_round = start_round[0], start_round[1] + RADIUS + abstand_gegen_kreis_start_y_round = start_round[0], start_round[1] - RADIUS + abstand_fuer_kreis_ende_x_round= ende_round[0] + RADIUS, ende_round[1] + abstand_gegen_kreis_ende_x_round= ende_round[0] - RADIUS, ende_round[1] + abstand_fuer_kreis_ende_y_round = ende_round[0] , ende_round[1] + RADIUS + abstand_gegen_kreis_ende_y_round = ende_round[0] , ende_round[1] - RADIUS + if(richtung0 != None and richtung0 != None): + if (richtung0 != richtung1 and kreisel_verbunden ==1): + if( + (abstand_fuer_kreis_start_y_floor == pos0_0_floor) or + (abstand_fuer_kreis_start_y_floor == pos0_1_floor) or + (abstand_gegen_kreis_start_y_floor == pos0_0_floor) or + (abstand_gegen_kreis_start_y_floor == pos0_1_floor) or + (abstand_fuer_kreis_ende_y_floor == pos0_0_floor) or + (abstand_fuer_kreis_ende_y_floor == pos0_1_floor) or + (abstand_gegen_kreis_ende_y_floor == pos0_0_floor) or + (abstand_gegen_kreis_ende_y_floor == pos0_1_floor) or + (abstand_fuer_kreis_start_y_round == pos0_0_round) or + (abstand_fuer_kreis_start_y_round == pos0_1_round) or + (abstand_gegen_kreis_start_y_round == pos0_0_round) or + (abstand_gegen_kreis_start_y_round == pos0_1_round) or + (abstand_fuer_kreis_ende_y_round == pos0_0_round) or + (abstand_fuer_kreis_ende_y_round == pos0_1_round) or + (abstand_gegen_kreis_ende_y_round == pos0_0_round) or + (abstand_gegen_kreis_ende_y_round == pos0_1_round) or + + (abstand_fuer_kreis_start_y_floor == pos1_0_floor) or + (abstand_fuer_kreis_start_y_floor == pos1_1_floor) or + (abstand_gegen_kreis_start_y_floor == pos1_0_floor) or + (abstand_gegen_kreis_start_y_floor == pos1_1_floor) or + (abstand_fuer_kreis_ende_y_floor == pos1_0_floor) or + (abstand_fuer_kreis_ende_y_floor == pos1_1_floor) or + (abstand_gegen_kreis_ende_y_floor == pos1_0_floor) or + (abstand_gegen_kreis_ende_y_floor == pos1_1_floor) or + + (abstand_fuer_kreis_start_y_round == pos1_0_round) or + (abstand_fuer_kreis_start_y_round == pos1_1_round) or + (abstand_gegen_kreis_start_y_round == pos1_0_round) or + (abstand_gegen_kreis_start_y_round == pos1_1_round) or + (abstand_fuer_kreis_ende_y_round == pos1_0_round) or + (abstand_fuer_kreis_ende_y_round == pos1_1_round) or + (abstand_gegen_kreis_ende_y_round == pos1_0_round) or + (abstand_gegen_kreis_ende_y_round == pos1_1_round) + ): + richtung2= "Vertikal" + unterschiedlich = True + + else: + richtung2 = "Horinzontal" + unterschiedlich = True + return richtung2, unterschiedlich + return richtung2, unterschiedlich + + # vergleich mit einem kreisel von zwei + if( (abstand_fuer_kreis_start_x_floor == pos0_0_floor) or + (abstand_fuer_kreis_start_x_floor == pos0_1_floor) or + (abstand_gegen_kreis_start_x_floor == pos0_0_floor) or + (abstand_gegen_kreis_start_x_floor == pos0_1_floor) or + (abstand_fuer_kreis_ende_x_floor == pos0_0_floor) or + (abstand_fuer_kreis_ende_x_floor == pos0_1_floor) or + (abstand_gegen_kreis_ende_x_floor == pos0_0_floor) or + (abstand_gegen_kreis_ende_x_floor == pos0_1_floor) or + (abstand_fuer_kreis_start_y_floor == pos0_0_floor) or + (abstand_fuer_kreis_start_y_floor == pos0_1_floor) or + (abstand_gegen_kreis_start_y_floor == pos0_0_floor) or + (abstand_gegen_kreis_start_y_floor == pos0_1_floor) or + (abstand_fuer_kreis_ende_y_floor == pos0_0_floor) or + (abstand_fuer_kreis_ende_y_floor == pos0_1_floor) or + (abstand_gegen_kreis_ende_y_floor == pos0_0_floor) or + (abstand_gegen_kreis_ende_y_floor == pos0_1_floor) or + (abstand_fuer_kreis_start_x_round == pos0_0_round ) or + (abstand_fuer_kreis_start_x_round == pos0_1_round) or + (abstand_gegen_kreis_start_x_round == pos0_0_round) or + (abstand_gegen_kreis_start_x_round == pos0_1_round) or + (abstand_fuer_kreis_ende_x_round == pos0_0_round) or + (abstand_fuer_kreis_ende_x_round == pos0_1_round) or + (abstand_gegen_kreis_ende_x_round == pos0_0_round) or + (abstand_gegen_kreis_ende_x_round == pos0_1_round) or + (abstand_fuer_kreis_start_y_round == pos0_0_round) or + (abstand_fuer_kreis_start_y_round == pos0_1_round) or + (abstand_gegen_kreis_start_y_round == pos0_0_round) or + (abstand_gegen_kreis_start_y_round == pos0_1_round) or + (abstand_fuer_kreis_ende_y_round == pos0_0_round) or + (abstand_fuer_kreis_ende_y_round == pos0_1_round) or + (abstand_gegen_kreis_ende_y_round == pos0_0_round) or + (abstand_gegen_kreis_ende_y_round == pos0_1_round) + ): + kreisel_verbunden = kreisel_verbunden +1 + # setzung auf kreisel 1 für spätere ausrechnung der geraden form + am_kreisel = 1 + if (x1_kreisel == None): + return am_kreisel,kreisel_verbunden + + if( (abstand_fuer_kreis_start_x_floor == pos1_0_floor )or + (abstand_fuer_kreis_start_x_floor == pos1_1_floor) or + (abstand_gegen_kreis_start_x_floor == pos1_0_floor) or + (abstand_gegen_kreis_start_x_floor == pos1_1_floor) or + (abstand_fuer_kreis_ende_x_floor == pos1_0_floor) or + (abstand_fuer_kreis_ende_x_floor == pos1_1_floor) or + (abstand_gegen_kreis_ende_x_floor == pos1_0_floor) or + (abstand_gegen_kreis_ende_x_floor == pos1_1_floor) or + (abstand_fuer_kreis_start_y_floor == pos1_0_floor ) or + (abstand_fuer_kreis_start_y_floor == pos1_1_floor) or + (abstand_gegen_kreis_start_y_floor == pos1_0_floor) or + (abstand_gegen_kreis_start_y_floor == pos1_1_floor) or + (abstand_fuer_kreis_ende_y_floor == pos1_0_floor ) or + (abstand_fuer_kreis_ende_y_floor == pos1_1_floor) or + (abstand_gegen_kreis_ende_y_floor == pos1_0_floor) or + (abstand_gegen_kreis_ende_y_floor == pos1_1_floor) or + (abstand_fuer_kreis_start_x_round == pos1_0_round ) or + (abstand_fuer_kreis_start_x_round == pos1_1_round) or + (abstand_gegen_kreis_start_x_round == pos1_0_round) or + (abstand_gegen_kreis_start_x_round == pos1_1_round) or + (abstand_fuer_kreis_ende_x_round == pos1_0_round) or + (abstand_fuer_kreis_ende_x_round == pos1_1_round) or + (abstand_gegen_kreis_ende_x_round == pos1_0_round) or + (abstand_gegen_kreis_ende_x_round == pos1_1_round) or + (abstand_fuer_kreis_start_y_round == pos1_0_round) or + (abstand_fuer_kreis_start_y_round == pos1_1_round) or + (abstand_gegen_kreis_start_y_round == pos1_0_round) or + (abstand_gegen_kreis_start_y_round == pos1_1_round) or + (abstand_fuer_kreis_ende_y_round == pos1_0_round) or + (abstand_fuer_kreis_ende_y_round == pos1_1_round) or + (abstand_gegen_kreis_ende_y_round == pos1_0_round) or + (abstand_gegen_kreis_ende_y_round == pos1_1_round) + ): + kreisel_verbunden = kreisel_verbunden +1 + am_kreisel = 2 + return am_kreisel,kreisel_verbunden \ No newline at end of file diff --git a/lib/dxf2lib.py b/lib/dxf2lib.py index 1013fb2..63e2efa 100644 --- a/lib/dxf2lib.py +++ b/lib/dxf2lib.py @@ -48,7 +48,6 @@ def create_block_library(input_dir, output_file, config, logger=None): if not filename.lower().endswith(".dxf"): continue - filepath = os.path.join(input_dir, filename) name = os.path.splitext(filename)[0] diff --git a/lib/plant2dxf.py b/lib/plant2dxf.py index cb2f4af..e834215 100644 --- a/lib/plant2dxf.py +++ b/lib/plant2dxf.py @@ -21,8 +21,33 @@ import math from pydantic import BaseModel, Field, field_validator from typing import Optional from utils import check_environment_var, setup_logger -from Elemente import Kreisel, VarioFoerderer -# global_zaehler = 0 +from Elemente import Kreisel, VarioFoerderer,Gefaehllestrecke +import as_es_methoden + +class Bt_element(BaseModel): + teileid: str + drehung: Optional [float] = Field(default=0.0,description="Rotation des Elements") + hoehe: Optional [float] = Field(default=0.0,description="Hoehe des Elements") + + @classmethod + def from_merkmale(cls, teileid: str, x: float, y: float, merkmale: dict) -> 'Bt_element': + try: + hoehe = float(merkmale.get("Höhe in Meter")) + except Exception as e: + hoehe = 0.0 + try: + drehung = float(merkmale.get("Drehung")) + except Exception as e: + drehung = 0.0 + + return cls( + teileid = teileid, + x = x, + y = y, + hoehe = hoehe, + drehung = drehung + + ) # --------------------------------------------------------- CFG-Leser für shapes.cfg def get_shape_cfg(teileart, cfg_path, logger=None): parser = configparser.ConfigParser() @@ -68,43 +93,6 @@ def get_shape_cfg(teileart, cfg_path, logger=None): ATTR_TAG = "TeileId" # Attributtag im Block RADIUS = 400 # Radius der Kreiselkreise (mm) -# --------------------------------------------------------- Pydantic Modelle - -class Gefaellestrecke(BaseModel): - teileid: str - x: float = Field(description="X-Koordinate des Foerder-Zentrums") - y: float = Field(description="Y-Koordinate des Foerder-Zentrums") - laenge:float = Field(description = "Länge des Förderers") - h0: float = Field(description="Höhe Unten in Merkmale") - h1: float = Field(description="Höhe Oben in Merkmale") - drehung: float = Field(default=0.0, description="Drehung an z achse") - anzahl_scanner: int = Field(default=0, description="Anzahl der Scanner") - anzahl_separatoren: int = Field(default=0, description="Anzahl der Separatoren") - - @property - def hight_zwischen(self): - return ((self.h0 + self.h1) /2) - - @classmethod - def from_merkmale(cls, teileid: str, x: float, y: float, merkmale: dict) -> 'VarioFoerderer': - - h0 = float(merkmale.get("Höhe unten")) * 1000 - h1 = float(merkmale.get("Höhe oben")) * 1000 - laenge = float(merkmale.get("Länge in Meter")) * 1000 - return cls( - teileid = teileid, - laenge = laenge, - x = x, - y = y, - h0 = h0, - h1 =h1, - drehung = float(merkmale.get("Drehung")), - anzahl_scanner = int(merkmale.get("Anzahl der Scanner")), - anzahl_separatoren = int(merkmale.get("Anzahl der Separatoren")) - - ) - - # --------------------------------------------------------- Hilfsfunktionen def extract_coords(planquadrat: str) -> tuple[float, float]: """Extrahiert X/Y Koordinaten aus PlanquadratString.""" @@ -216,35 +204,6 @@ def dreh_block(block_name: str, to_doc, winkel) : block.add_entity(copy) return dreh_block_name -def berechne_hoehe(csv_path, logger=None): - y_werte = [] - try: - with csv_path.open(newline="", encoding="utf-8") as fh: - reader = csv.DictReader(fh, delimiter=';') - for row in reader: - planquadrat = row.get("Planquadrat", "") - try: - _, y = extract_coords(planquadrat) - y_werte.append(y) - except Exception as e: - if logger: - logger.warning(f"Fehler beim Extrahieren der Koordinate aus '{planquadrat}': {e}") - except Exception as e: - if logger: - logger.error(f"Fehler beim Lesen der CSV-Datei {csv_path}: {e}") - else: - print(f"Fehler beim Lesen der CSV-Datei {csv_path}: {e}") - return 0 - if not y_werte: - msg = "Keine Y-Koordinaten in der CSV gefunden!" - if logger: - logger.error(msg) - else: - print(msg) - raise ValueError(msg) - return max(y_werte) - - def handle_ils_2_0_kreisel(msp, teileid, merkmale, x, y, doc, lib_doc, verbose, symbols,strecken_nachbarn,config,config_allgemein): # Erstelle Kreisel-Objekt aus merkmale kreisel = Kreisel.Kreisel.from_merkmale(teileid, x, y, merkmale) @@ -326,7 +285,7 @@ def handle_ils_2_0_eckrad(msp, teileid, merkmale, x, y, doc, lib_doc, verbose, s def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, verbose, symbols, strecken_nachbarn,config,config_allgemein): #Vorbereitung der attributen - gefaelle_objekt = Gefaellestrecke.from_merkmale(teileid,x,y,merkmale) + gefaelle_objekt = Gefaehllestrecke.Gefaellestrecke.from_merkmale(teileid,x,y,merkmale) asoffset = float(config.get("ILS 2.0 Gefällestrecke", "asoffset")) esoffset = float(config.get("ILS 2.0 Gefällestrecke", "esoffset")) upper_hoehe_gefaehlle= gefaelle_objekt.h1 @@ -343,17 +302,10 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v if "6-SP" not in doc.layers: doc.layers.add(name="6-SP", color=7) verbunden_am_einen = False - tefkurve_0 = None - tefkurve_1 = None - hat_motor_0 = False - hat_umlenk_0 =False - hat_motor_1 = False - hat_umlenk_1 =False + richtung2 ="DEFAULT" unterschiedlich = False - - separatoren = gefaelle_objekt.anzahl_separatoren scanner = gefaelle_objekt.anzahl_scanner if rotation == 0 or rotation == -180: @@ -414,48 +366,10 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v lower_hoehe_gefaehlle = hoehe2 rotation = rotation -180 - if "Kurvenrichtung" in gefaellestrecke_nachbarn: - vario_hoehe_0 = float(gefaellestrecke_nachbarn.get("vario_hoehe_0")) * 1000 - vario_hoehe_1 = float(gefaellestrecke_nachbarn.get("vario_hoehe_1")) * 1000 - kurvenrichtung = gefaellestrecke_nachbarn.get("Kurvenrichtung") - tefkurve_0 = gefaellestrecke_nachbarn.get("Tefkurve") - block_Vario_Umlenkstation_500mm ="Vario_Umlenkstation_500mm" - block_Vario_Motorstation_500mm = "Vario_Motorstation_500mm" - import_block(block_Vario_Umlenkstation_500mm,lib_doc,doc) - import_block(block_Vario_Motorstation_500mm,lib_doc,doc) - block_Vario_Umlenkstation_500mm =dreh_block(block_Vario_Umlenkstation_500mm,doc,math.radians(3)) - block_Vario_Motorstation_500mm =dreh_block(block_Vario_Motorstation_500mm,doc,math.radians(3)) - blockname_motor_links = block_Vario_Motorstation_500mm +"links" - blockname_umlenk_links = block_Vario_Umlenkstation_500mm + "links" - if blockname_motor_links not in doc.blocks: - matrix = Matrix44(1,-1,1) - block_motor_links = doc.blocks.new(name=blockname_motor_links,base_point=(0,0,0)) - block_umlenk_links = doc.blocks.new(name=blockname_umlenk_links,base_point=(0,0,0)) - block_motor_rechts = doc.blocks[block_Vario_Motorstation_500mm] - block_umlenk_rechts = doc.blocks[block_Vario_Umlenkstation_500mm] - for e in block_motor_rechts: - copy = e.copy() - copy.transform(matrix) - block_motor_links.add_entity(copy) + hat_motor_0, hat_umlenk_0, hat_motor_1, hat_umlenk_1, tefkurve_0, tefkurve_1 = Gefaehllestrecke.Gefaellestrecke.hat_motor_umlenk_station (doc, lib_doc, upper_hoehe_gefaehlle, lower_hoehe_gefaehlle, gefaellestrecke_nachbarn) - for e in block_umlenk_rechts: - copy = e.copy() - copy.transform(matrix) - block_umlenk_links.add_entity(copy) - - if upper_hoehe_gefaehlle > lower_hoehe_gefaehlle: - if vario_hoehe_0 == upper_hoehe_gefaehlle or vario_hoehe_1 == upper_hoehe_gefaehlle: - hat_motor_0 = True - - else: - hat_umlenk_0 = True - if upper_hoehe_gefaehlle < lower_hoehe_gefaehlle: - if vario_hoehe_0 == lower_hoehe_gefaehlle or vario_hoehe_1 == lower_hoehe_gefaehlle: - hat_motor_0 = True - else: - hat_umlenk_0 = True verbunden_am_einen = True - am_kreisel, kreisel_verbunden =am_kreisel_direct_verbunden(x, y, upper_hoehe_gefaehlle, lower_hoehe_gefaehlle, x0_kreisel, y0_kreisel, richtung_rad0, abstand0, dx, dy, None, None, None, None) + am_kreisel, kreisel_verbunden =as_es_methoden.am_kreisel_direct_verbunden(x, y, upper_hoehe_gefaehlle, lower_hoehe_gefaehlle, x0_kreisel, y0_kreisel, richtung_rad0, abstand0, dx, dy, None, None, None, None) if am_kreisel == 1: if hat_motor_0 == False and hat_umlenk_0 == False: dx = halbe_laenge *math.sin(winkel * -1) @@ -538,7 +452,7 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v ende[2] = ende[2] + 500* math.sin(math.radians(3)) - only_es_or_as = erstellung_gefaelle_block_verbunenden_am_einen(msp,x, y, doc, lib_doc, upper_hoehe_gefaehlle, lower_hoehe_gefaehlle, hoehe_gefaehlle, drehung0, laenge, blockname,config,hight,None,None,None,block,start,ende) + only_es_or_as = as_es_methoden.erstellung_gefaelle_block_verbunenden_am_einen(msp,x, y, doc, lib_doc, upper_hoehe_gefaehlle, lower_hoehe_gefaehlle, hoehe_gefaehlle, drehung0, laenge, blockname,config,hight,None,None,None,block,start,ende) if only_es_or_as == False: bref =msp.add_blockref(blockname,(x,y,hoehe_gefaehlle),dxfattribs={"rotation": rotation}) @@ -570,7 +484,7 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v rotation = float(merkmale.get("Drehung")) #ausrechnung position kreisel - am_kreisel, kreisel_verbunden= am_kreisel_direct_verbunden(x, y, upper_hoehe_gefaehlle, lower_hoehe_gefaehlle, x0_kreisel, y0_kreisel, richtung_rad0, abstand0, dx, dy, x1_kreisel, y1_kreisel, richtung_rad1, abstand1) + am_kreisel, kreisel_verbunden= as_es_methoden.am_kreisel_direct_verbunden(x, y, upper_hoehe_gefaehlle, lower_hoehe_gefaehlle, x0_kreisel, y0_kreisel, richtung_rad0, abstand0, dx, dy, x1_kreisel, y1_kreisel, richtung_rad1, abstand1) # falls gefälle strecke mit zwei kreiseln verbunden zeichne eine einfache linie (später braucht man hier auch eine logik sobald man die richtigen es und as elemente hat) if kreisel_verbunden == 2: start = x +dx, y + dy,upper_hoehe_gefaehlle @@ -588,7 +502,7 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v richtung1= "Vertikal" else: richtung1 = "Horinzontal" - richtung2,unterschiedlich = am_kreisel_direct_verbunden(x, y, upper_hoehe_gefaehlle, lower_hoehe_gefaehlle, x0_kreisel, y0_kreisel, richtung_rad0, abstand0, dx, dy, x1_kreisel, y1_kreisel, richtung_rad1, abstand1,kreisel_verbunden, richtung0 , richtung1 , richtung2 ) + richtung2,unterschiedlich = as_es_methoden.am_kreisel_direct_verbunden(x, y, upper_hoehe_gefaehlle, lower_hoehe_gefaehlle, x0_kreisel, y0_kreisel, richtung_rad0, abstand0, dx, dy, x1_kreisel, y1_kreisel, richtung_rad1, abstand1,kreisel_verbunden, richtung0 , richtung1 , richtung2 ) #Berechnung des Gefälles if hoehe0 > hoehe1: hight_position = "higher" @@ -686,7 +600,7 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v blockname = f"Ils_2.0_Gefaellestrecke_{laenge}_{hoehe_gefaehlle}_{drehung0}_{drehung1}_{hight_position}_{verbunden_am_einen}" else: blockname = f"Ils_2.0_Gefaellestrecke_{laenge}_{hoehe_gefaehlle}_{drehung0}_{drehung1}_{hight_position}_{unterschiedlich}_{richtung2}_{verbunden_am_einen}" - gefaellegerade_erstellung(x, y, doc, lib_doc, upper_hoehe_gefaehlle, lower_hoehe_gefaehlle, hoehe_gefaehlle,richtung2,drehung0, drehung1, laenge, hight_position,blockname,config) + as_es_methoden.gefaellegerade_erstellung(x, y, doc, lib_doc, upper_hoehe_gefaehlle, lower_hoehe_gefaehlle, hoehe_gefaehlle,richtung2,drehung0, drehung1, laenge, hight_position,blockname,config) blockref_layer = get_layer(doc, lib_doc, blockname) bref =msp.add_blockref(blockname,(x,y,hoehe_gefaehlle),dxfattribs={"rotation": rotation, "layer": blockref_layer }) @@ -705,60 +619,11 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v lower_hoehe_gefaehlle = hoehe2 rotation = rotation -180 - - if "Kurvenrichtung" in gefaellestrecke_nachbarn: - vario_hoehe_0 = float(gefaellestrecke_nachbarn.get("vario_hoehe_0")) * 1000 - vario_hoehe_1 = float(gefaellestrecke_nachbarn.get("vario_hoehe_1")) * 1000 - kurvenrichtung = gefaellestrecke_nachbarn.get("Kurvenrichtung") - tefkurve_0 = gefaellestrecke_nachbarn.get("Tefkurve") - block_Vario_Umlenkstation_500mm ="Vario_Umlenkstation_500mm" - block_Vario_Motorstation_500mm = "Vario_Motorstation_500mm" - import_block(block_Vario_Umlenkstation_500mm,lib_doc,doc) - import_block(block_Vario_Motorstation_500mm,lib_doc,doc) - block_Vario_Umlenkstation_500mm =dreh_block(block_Vario_Umlenkstation_500mm,doc,math.radians(3)) - block_Vario_Motorstation_500mm =dreh_block(block_Vario_Motorstation_500mm,doc,math.radians(3)) - blockname_motor_links = block_Vario_Motorstation_500mm +"links" - blockname_umlenk_links = block_Vario_Umlenkstation_500mm + "links" - if blockname_motor_links not in doc.blocks: - matrix = Matrix44.scale(1,-1,1) - block_motor_links = doc.blocks.new(name=blockname_motor_links,base_point=(0,0,0)) - block_umlenk_links = doc.blocks.new(name=blockname_umlenk_links,base_point=(0,0,0)) - block_motor_rechts = doc.blocks[block_Vario_Motorstation_500mm] - block_umlenk_rechts = doc.blocks[block_Vario_Umlenkstation_500mm] - for e in block_motor_rechts: - copy = e.copy() - copy.transform(matrix) - block_motor_links.add_entity(copy) - - for e in block_umlenk_rechts: - copy = e.copy() - copy.transform(matrix) - block_umlenk_links.add_entity(copy) - - if upper_hoehe_gefaehlle > lower_hoehe_gefaehlle: - if vario_hoehe_0 == upper_hoehe_gefaehlle or vario_hoehe_1 == upper_hoehe_gefaehlle: - hat_motor_0 = True - else: - hat_umlenk_0 = True - if upper_hoehe_gefaehlle < lower_hoehe_gefaehlle: - if vario_hoehe_0 == lower_hoehe_gefaehlle or vario_hoehe_1 == lower_hoehe_gefaehlle: - hat_motor_0 = True - else: - hat_umlenk_0 = True - if "Kurvenrichtung_1" in gefaellestrecke_nachbarn: - vario_hoehe_0_1 = float(gefaellestrecke_nachbarn.get("vario_hoehe_0_1")) * 1000 - vario_hoehe_1_1 = float(gefaellestrecke_nachbarn.get("vario_hoehe_1_1")) * 1000 - tefkurve_1 = gefaellestrecke_nachbarn.get("Tefkurve_1") - if upper_hoehe_gefaehlle > lower_hoehe_gefaehlle: - if vario_hoehe_0_1 == upper_hoehe_gefaehlle or vario_hoehe_1_1 == upper_hoehe_gefaehlle: - hat_motor_1 = True - else: - hat_umlenk_1 = True - if upper_hoehe_gefaehlle < lower_hoehe_gefaehlle: - if vario_hoehe_0_1 == lower_hoehe_gefaehlle or vario_hoehe_1_1 == lower_hoehe_gefaehlle: - hat_motor_1 = True - else: - hat_umlenk_1 = True + block_Vario_Umlenkstation_500mm ="Vario_Umlenkstation_500mm" + block_Vario_Motorstation_500mm = "Vario_Motorstation_500mm" + blockname_motor_links = block_Vario_Motorstation_500mm +"links" + blockname_umlenk_links = block_Vario_Umlenkstation_500mm + "links" + hat_motor_0, hat_umlenk_0, hat_motor_1, hat_umlenk_1, tefkurve_0, tefkurve_1 = Gefaehllestrecke.Gefaellestrecke.hat_motor_umlenk_station(doc, lib_doc, upper_hoehe_gefaehlle, lower_hoehe_gefaehlle, gefaellestrecke_nachbarn) blockname = f"Ils_2.0_Gefaellestrecke_{laenge}_{hoehe_gefaehlle}_{hat_motor_0}_{hat_umlenk_0}_{tefkurve_0}_{hat_motor_1}_{hat_umlenk_1}_{tefkurve_1}" dy = halbe_laenge * math.cos(0) start = [x , y + dy ,upper_hoehe_gefaehlle] @@ -770,7 +635,7 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v ende = x -dx, y - dy,lower_hoehe_gefaehlle line = msp.add_line(start,ende) line.dxf.layer = "6-SP" - elif (hat_motor_0 == True and hat_umlenk_0 == False) and tefkurve_1 == None: + elif (hat_motor_0 == True and hat_umlenk_0 == None) and tefkurve_1 == None: if blockname not in doc.blocks: block = doc.blocks.new(name=blockname,base_point = (0,0,0)) if (hat_motor_0 == True and tefkurve_0 == "rechts") or (hat_motor_1 == True and tefkurve_1 == "rechts"): @@ -783,7 +648,7 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v line.translate(-x,-y,-hoehe_gefaehlle) block.add_entity(line) msp.add_blockref(blockname,(x,y,hoehe_gefaehlle),dxfattribs={"rotation": rotation}) - elif hat_motor_0 == False and hat_umlenk_0 == True and tefkurve_1 == None: + elif hat_motor_0 == None and hat_umlenk_0 == True and tefkurve_1 == None: if blockname not in doc.blocks: block = doc.blocks.new(name=blockname,base_point = (0,0,0)) if (hat_umlenk_0 == True and tefkurve_0 == "rechts") or (hat_umlenk_1 == True and tefkurve_1 == "rechts"): @@ -812,6 +677,8 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v line.translate(-x,-y,-hoehe_gefaehlle) block.add_entity(line) msp.add_blockref(blockname,(x,y,hoehe_gefaehlle),dxfattribs={"rotation": rotation}) + + def add_attributes_to_block(block, attributes): """ @@ -1065,7 +932,7 @@ def handle_ils_2_0_variofoerderer(msp, teileid, merkmale, x, y, doc, lib_doc, ve mit_horizontal_verbunden = "unten_drehung_-180_or_-270" else: mit_horizontal_verbunden = "oben_drehung_-180_or_-270" - am_kreisel,kreseil_verbunden =am_kreisel_direct_verbunden(x, y, upper_hoehe_vario, lower_hoehe_vario, x0_kreisel, y0_kreisel, richtung_rad0, abstand0, dx, dy, None, None, None, None ) + am_kreisel,kreseil_verbunden =as_es_methoden.am_kreisel_direct_verbunden(x, y, upper_hoehe_vario, lower_hoehe_vario, x0_kreisel, y0_kreisel, richtung_rad0, abstand0, dx, dy, None, None, None, None ) if am_kreisel == 1: # Erstellung der blockname für wenn die Motorstation rechts und links blockname = (f"Vario_Foerderer_{winkel}_{voerder_richtung}_{laenge}_{hoehe_vario}_rechts_{ein_kreisel_höher}_{drehung0}_True_{motor_vorhanden}_{umlenk_vorhanden}_{gefaelle}_{gefahellewinkel}_{mit_horizontal_verbunden}") @@ -1172,7 +1039,7 @@ def handle_ils_2_0_variofoerderer(msp, teileid, merkmale, x, y, doc, lib_doc, ve # Schauen welches as oder es element man wo verbinden muss und bereits in den block tuen, der None wert ist ein Wert der für die Gefällestrecke notwendig ist # Entnehmen von start und end Werte für spätere vario erstellung - start, ende =erstellung_gefaelle_block_verbunenden_am_einen(msp,x, y, doc, lib_doc, upper_hoehe_vario, lower_hoehe_vario, hoehe_vario, drehung0, laenge, blockname,config,None ,block_vario, voerder_richtung, ein_kreisel_höher,None,None,None,mit_horizontal_verbunden) + start, ende = as_es_methoden.erstellung_gefaelle_block_verbunenden_am_einen(msp,x, y, doc, lib_doc, upper_hoehe_vario, lower_hoehe_vario, hoehe_vario, drehung0, laenge, blockname,config,None ,block_vario, voerder_richtung, ein_kreisel_höher,None,None,None,mit_horizontal_verbunden) # Erstellung des Varios selber VarioFoerderer.VarioFoerderer.vario_erstellung(foerderer, doc, lib_doc, config, block_vario,block_name_links, start, ende,voerder_richtung ,winkel_VP_offset_vorne,winkel_VP_offset_hinten) # reintuen des förderes in den Modelspace @@ -1211,7 +1078,7 @@ def handle_ils_2_0_variofoerderer(msp, teileid, merkmale, x, y, doc, lib_doc, ve drehung1 = drehung2 # Schauen ob der Förderer direkt am Kreisel verbunden ist - am_kreisel,kreisel_verbunden =am_kreisel_direct_verbunden(x, y, upper_hoehe_vario, lower_hoehe_vario, x0_kreisel, y0_kreisel, richtung_rad0, abstand0, dx, dy, x1_kreisel, y1_kreisel, richtung_rad1, abstand1) + am_kreisel,kreisel_verbunden = as_es_methoden.am_kreisel_direct_verbunden(x, y, upper_hoehe_vario, lower_hoehe_vario, x0_kreisel, y0_kreisel, richtung_rad0, abstand0, dx, dy, x1_kreisel, y1_kreisel, richtung_rad1, abstand1) # Falls der Förder mit beiden Kreisel verbunden ist if kreisel_verbunden == 2: # Erstellung der blockname für wenn die Motorstation rechts und links @@ -1344,7 +1211,7 @@ def handle_ils_2_0_variofoerderer(msp, teileid, merkmale, x, y, doc, lib_doc, ve # Schauen welche es oder as element man braucht man braucht und diese in den block einfügen # Entnehmen von start und end Werte für spätere vario erstellung - start, ende =gefaellegerade_erstellung(x, y, doc, lib_doc, upper_hoehe_vario, lower_hoehe_vario, hoehe_vario,richtung2, drehung0, drehung1, laenge, None, blockname,config,block_vario,voerder_richtung, am_kreisel,erster_kreisel_höher,y1,z1) + start, ende = as_es_methoden.gefaellegerade_erstellung(x, y, doc, lib_doc, upper_hoehe_vario, lower_hoehe_vario, hoehe_vario,richtung2, drehung0, drehung1, laenge, None, blockname,config,block_vario,voerder_richtung, am_kreisel,erster_kreisel_höher,y1,z1) # Erstellung der Vario gefälle selber VarioFoerderer.VarioFoerderer.vario_erstellung(foerderer, doc, lib_doc, config, block_vario,block_name_links, start, ende,voerder_richtung ,winkel_VP_offset_vorne,winkel_VP_offset_hinten) # Reintuen des endblockes in den Modelspace @@ -1373,7 +1240,7 @@ def handle_ils_2_0_variofoerderer(msp, teileid, merkmale, x, y, doc, lib_doc, ve # Schauen welche es oder as element man braucht man braucht und diese in den block einfügen # Entnehmen von start und end Werte für spätere vario erstellung - start, ende =gefaellegerade_erstellung(x, y, doc, lib_doc, upper_hoehe_vario, lower_hoehe_vario, hoehe_vario,richtung2, drehung0, drehung1, laenge, None, blockname,config,block_vario,voerder_richtung) + start, ende = as_es_methoden.gefaellegerade_erstellung(x, y, doc, lib_doc, upper_hoehe_vario, lower_hoehe_vario, hoehe_vario,richtung2, drehung0, drehung1, laenge, None, blockname,config,block_vario,voerder_richtung) # Erstellung des Vario selber VarioFoerderer.VarioFoerderer.vario_erstellung(foerderer, doc, lib_doc, config, block_vario,block_name_links, start, ende,voerder_richtung,winkel_VP_offset_vorne,winkel_VP_offset_hinten ) # Reintuen des endblockes in den Modelspace @@ -1444,38 +1311,20 @@ def handle_ils_2_0_kurve(msp, teileid, merkmale, x, y, doc, lib_doc, verbose, sy msp.add_blockref("AN8",(x,y,hz),dxfattribs={"rotation": rotation}) def handle_bt___beladung(msp, teileid, merkmale, x, y, doc, lib_doc, verbose, symbols, strecken_nachbarn,config,config_allgemein): - rotation = None - hight = None - if "Drehung" in merkmale: - rotation= float(merkmale.get("Drehung")) - if "Höhe in M" in merkmale: - hight = float(merkmale.get("Höhe in M")) * 1000 - import_block("AN8",lib_doc,doc) - if hight == None and rotation == None: - msp.add_blockref("AN8",(x,y)) - elif hight != None and rotation == None: - msp.add_blockref("AN8",(x,y,hight)) - elif hight == None and rotation != None: - msp.add_blockref("AN8",(x,y),dxfattribute={"rotation": rotation}) - else: - msp.add_blockref("AN8",(x,y,hight),dxfattribute={"rotation": rotation}) + bt_element = Bt_element.from_merkmale(teileid,x,y,merkmale) + rotation = bt_element.drehung + hight = bt_element.hoehe + blockname = "AN8" + import_block(blockname,lib_doc,doc) + msp.add_blockref(blockname,(x,y,hight),dxfattribs={"rotation": rotation}) def handle_bt___entladung(msp, teileid, merkmale, x, y, doc, lib_doc, verbose, symbols, strecken_nachbarn,config,config_allgemein): - rotation = None - hight = None - if "Drehung" in merkmale: - rotation= float(merkmale.get("Drehung")) - if "Höhe in M" in merkmale: - hight = float(merkmale.get("Höhe in M")) * 1000 - import_block("AN8",lib_doc,doc) - if hight == None and rotation == None: - msp.add_blockref("AN8",(x,y)) - elif hight != None and rotation == None: - msp.add_blockref("AN8",(x,y,hight)) - elif hight == None and rotation != None: - msp.add_blockref("AN8",(x,y),dxfattribute={"rotation": rotation}) - else: - msp.add_blockref("AN8",(x,y,hight),dxfattribute={"rotation": rotation}) + bt_element = Bt_element.from_merkmale(teileid,x,y,merkmale) + rotation = bt_element.drehung + hight = bt_element.hoehe + blockname = "AN8" + import_block(blockname,lib_doc,doc) + msp.add_blockref(blockname,(x,y,hight),dxfattribs={"rotation": rotation}) def handle_omniflo(msp, teileid, merkmale, x, y, doc, lib_doc, verbose, symbols, strecken_nachbarn,config,config_allgemein): @@ -1566,439 +1415,7 @@ def handle_omniflo(msp, teileid, merkmale, x, y, doc, lib_doc, verbose, symbols, drehung = merkmale.get("Drehung") bref = msp.add_blockref(blockname, (x, y,float(merkmale.get("Höhe"))), dxfattribs={"rotation": drehung}) # Layer, auf dem der Insert liegt -def erstellung_gefaelle_block_verbunenden_am_einen(msp,x, y, doc, lib_doc, upper_hoehe_gefaehlle, lower_hoehe_gefaehlle, hoehe_gefaehlle, drehung0, laenge,blockname,config, hight = None, block_vario = None, vario_richtung = None, verbungden_höher = None,gefaelle_block=None,start = None,ende = None,mit_horizontal_verbunden = None): - halbe_laenge = laenge / 2 - dy = halbe_laenge * math.cos(0) - asoffset = float(config.get("ILS 2.0 Gefällestrecke", "asoffset")) - esoffset = float(config.get("ILS 2.0 Gefällestrecke", "esoffset")) - winkel_as = float(config.get("Ils 2.0 core winkel", "winkel_as")) - winkel_es = float(config.get("Ils 2.0 core winkel", "winkel_es")) - asoffset_y = asoffset * math.cos(math.radians(winkel_as)) - asoffset_z = asoffset * math.sin(math.radians(winkel_as)) - esoffset_y = esoffset * math.cos(math.radians(winkel_es)) - esoffset_z = esoffset * math.sin(math.radians(winkel_es)) - block_as = None - block_es = None - if (( hight == "higher" and drehung0 == "GUZS" )or (vario_richtung == "Auf"and verbungden_höher == False and drehung0 == "GUZS")or - (vario_richtung == "Ab" and verbungden_höher == True and drehung0 == "GUZS")or (vario_richtung == "Horizontal" and drehung0 == "GUZS" and (mit_horizontal_verbunden == "unten_drehung_0_or_-90" or mit_horizontal_verbunden == "oben_drehung_-180_or_-270"))): - block_as = "200000241_AS-Element_90_rechts" - import_block(block_as,lib_doc,doc) - elif ((hight == "lower" and drehung0 == "GUZS") or (vario_richtung == "Auf"and verbungden_höher == True and drehung0 == "GUZS") or - (vario_richtung == "Ab" and verbungden_höher == False and drehung0 == "GUZS")or (vario_richtung == "Horizontal" and drehung0 == "GUZS" and (mit_horizontal_verbunden == "oben_drehung_0_or_-90" or mit_horizontal_verbunden == "unten_drehung_-180_or_-270"))): - block_es = "200000146_ES-Element_90_rechts" - import_block(block_es,lib_doc,doc) - - elif ((hight == "higher" and drehung0 == "UZS")or (vario_richtung == "Auf"and verbungden_höher == False and drehung0 == "UZS") or - (vario_richtung == "Ab" and verbungden_höher == True and drehung0 == "UZS")or (vario_richtung == "Horizontal" and drehung0 == "UZS" and (mit_horizontal_verbunden == "unten_drehung_0_or_-90" or mit_horizontal_verbunden == "oben_drehung_-180_or_-270"))): - block_as = "200000217_AS-Element_90_links" - import_block(block_as,lib_doc,doc) - - elif (( hight == "lower" and drehung0 == "UZS") or (vario_richtung == "Auf" and verbungden_höher == True and drehung0 == "UZS") or - (vario_richtung == "Ab" and verbungden_höher == False and drehung0 == "UZS")or (vario_richtung == "Horizontal" and drehung0 == "UZS" and (mit_horizontal_verbunden == "oben_drehung_0_or_-90" or mit_horizontal_verbunden == "unten_drehung_-180_or_-270"))): - block_es = "400102632_ES-Element_90_links" - import_block(block_es,lib_doc,doc) - - if block_as != None: - block_as = dreh_block(block_as,doc,math.radians(winkel_as)) - if vario_richtung == "Auf" or vario_richtung =="Horizontal": - start = (x , y + dy ,upper_hoehe_gefaehlle) - ende = (x , y - dy + asoffset_y ,lower_hoehe_gefaehlle - asoffset_z) - block_vario.add_blockref(block_as,(ende[0]-x ,ende[1]-asoffset_y -y,ende[2] -hoehe_gefaehlle + asoffset_z),dxfattribs={"rotation": 180}) - return start, ende - elif vario_richtung == "Ab": - start = (x , y + dy - asoffset_y,upper_hoehe_gefaehlle - asoffset_z) - ende = (x , y - dy ,lower_hoehe_gefaehlle) - block_vario.add_blockref(block_as,(start[0]-x ,start[1]+asoffset_y -y,start[2] -hoehe_gefaehlle + asoffset_z)) - return start,ende - - if laenge > asoffset: - start[1] = start[1] - asoffset_y - start[2] = start[2] - asoffset_z - line = Line.new(dxfattribs={"start": start, "end": ende}) - line.dxf.layer = "6-SP" - copy= line.copy() - copy.translate(-x,-y,-hoehe_gefaehlle) - gefaelle_block.add_entity(copy) - gefaelle_block.add_blockref(block_as,(start[0]-x ,start[1]+asoffset_y -y,start[2] -hoehe_gefaehlle + asoffset_z)) - return False - else: - msp.add_blockref(block_as,(x,y,upper_hoehe_gefaehlle)) - return True - elif block_es != None: - block_es = dreh_block(block_es,doc,math.radians(winkel_es)) - if vario_richtung == "Auf" or vario_richtung =="Horizontal": - start = (x , y + dy-esoffset_y ,upper_hoehe_gefaehlle + esoffset_z) - ende = (x , y - dy,lower_hoehe_gefaehlle) - block_vario.add_blockref(block_es, (start[0]-x ,start[1]+esoffset_y -y,start[2] - hoehe_gefaehlle - esoffset_z),dxfattribs={"rotation": 180}) - return start, ende - elif vario_richtung == "Ab": - start = (x , y + dy ,upper_hoehe_gefaehlle) - ende = (x , y - dy + esoffset_y,lower_hoehe_gefaehlle + esoffset_z) - block_vario.add_blockref(block_es, (ende[0]-x ,ende[1]-esoffset_y -y,ende[2] - hoehe_gefaehlle -esoffset_z)) - return start,ende - - if laenge > esoffset: - ende[1] = ende[1] + esoffset_y - ende[2] = ende[2] + esoffset_z - line = Line.new(dxfattribs={"start": start, "end": ende}) - line.dxf.layer = "6-SP" - copy= line.copy() - copy.translate(-x ,-y,-hoehe_gefaehlle) - gefaelle_block.add_entity(copy) - gefaelle_block.add_blockref(block_es, (ende[0]-x ,ende[1]-esoffset_y -y,ende[2] - hoehe_gefaehlle -esoffset_z)) - return False - else: - msp.add_blockref(block_es,(x,y,lower_hoehe_gefaehlle)) - return True - -def gefaellegerade_erstellung(x, y, doc, lib_doc, upper_hoehe_gefaehlle, lower_hoehe_gefaehlle, hoehe_gefaehlle,richtung2, drehung0, drehung1, laenge, hight_position, blockname,config, block_vario = None,voerder_richtung = None, am_kreisel = None, erster_kreisel_höher = None,y1=None,z1 =None): - #erstellung des blockes falls die gefaelle strecke mit einem kreisel verbunden ist, mehrere variation von selben weil diese nötig sind sobald man die richtigen inserts bekommen - - asoffset = float(config.get("ILS 2.0 Gefällestrecke", "asoffset")) - esoffset = float(config.get("ILS 2.0 Gefällestrecke", "esoffset")) - winkel_as = float(config.get("Ils 2.0 core winkel", "winkel_as")) - winkel_es = float(config.get("Ils 2.0 core winkel", "winkel_es")) - asoffset_y = asoffset * math.cos(math.radians(winkel_as)) - asoffset_z = asoffset * math.sin(math.radians(winkel_as)) - esoffset_y = esoffset * math.cos(math.radians(winkel_es)) - esoffset_z = esoffset * math.sin(math.radians(winkel_es)) - block_as = None - block_es = None - halbe_laenge = laenge / 2 - dy = halbe_laenge * math.cos(0) - if upper_hoehe_gefaehlle < lower_hoehe_gefaehlle: - middle_hoehe = upper_hoehe_gefaehlle - upper_hoehe_gefaehlle = lower_hoehe_gefaehlle - lower_hoehe_gefaehlle = middle_hoehe - - if richtung2!= "DEFAULT" or am_kreisel != None: - if ((drehung0 == "GUZS" and drehung1 == "GUZS" and hight_position == "higher") or - (voerder_richtung == "Auf" and((am_kreisel == 1 and erster_kreisel_höher == False)or (am_kreisel== 2 and erster_kreisel_höher == True)) and drehung0 == "GUZS" and drehung1== "GUZS") or - (voerder_richtung == "Ab"and ((am_kreisel == 1 and erster_kreisel_höher == True)or (am_kreisel== 2 and erster_kreisel_höher == False)) and drehung0 == "GUZS" and drehung1== "GUZS")): - block_es = "200000146_ES-Element_90_rechts" - import_block(block_es,lib_doc,doc) - - elif ((drehung0 == "GUZS" and drehung1 == "GUZS") or - (am_kreisel != None and drehung0 == "GUZS" and drehung1 == "GUZS")): - block_as = "200000241_AS-Element_90_rechts" - import_block(block_as,lib_doc,doc) - - elif (( drehung0 == "GUZS" and drehung1 == "UZS" and hight_position == "higher")or - (voerder_richtung == "Auf" and((am_kreisel == 1 and erster_kreisel_höher == False)or (am_kreisel == 2 and erster_kreisel_höher == True))and (drehung0 == "UZS" and drehung1 == "GUZS")) or - (voerder_richtung == "Ab" and((am_kreisel == 1 and erster_kreisel_höher == True) or (am_kreisel ==2 and erster_kreisel_höher ==False))and (drehung0 == "GUZS" and drehung1 == "UZS"))): - - block_es = "400102632_ES-Element_90_links" - import_block(block_es,lib_doc,doc) - - elif ((drehung0 == "UZS" and drehung1 == "GUZS" and hight_position == "lower")or - (voerder_richtung == "Auf" and((am_kreisel == 1 and erster_kreisel_höher == True)or (am_kreisel == 2 and erster_kreisel_höher == False))and (drehung0 == "UZS" and drehung1 == "GUZS")) or - (voerder_richtung == "Ab"and ((am_kreisel == 1 and erster_kreisel_höher == False)or (am_kreisel == 2 and erster_kreisel_höher == True))and (drehung0 == "GUZS" and drehung1 == "UZS"))): - - block_as = "200000241_AS-Element_90_rechts" - import_block(block_as,lib_doc,doc) - - elif ((drehung0 == "UZS" and drehung1 == "UZS" and hight_position == "higher")or - (voerder_richtung == "Auf" and((am_kreisel == 1 and erster_kreisel_höher == False)or (am_kreisel== 2 and erster_kreisel_höher == True)) and drehung0 == "UZS" and drehung1== "UZS")or - (voerder_richtung == "Ab" and((am_kreisel == 1 and erster_kreisel_höher == True)or (am_kreisel== 2 and erster_kreisel_höher == False)) and drehung0 == "UZS" and drehung1== "UZS")): - - block_es = "400102632_ES-Element_90_links" - import_block(block_es,lib_doc,doc) - - elif (((drehung0 == "UZS" and drehung1 == "UZS")or - (am_kreisel!= None and drehung0 == "UZS" and drehung1 == "UZS"))): - block_as = "200000217_AS-Element_90_links" - import_block(block_as,lib_doc,doc) - - elif (((drehung0 == "UZS" and drehung1 == "GUZS" and hight_position== "higher"))or - (voerder_richtung == "Auf"and ((am_kreisel == 1 and erster_kreisel_höher == False) or (am_kreisel ==2 and erster_kreisel_höher ==True))and (drehung0 == "GUZS" and drehung1 == "UZS")) or - (voerder_richtung == "Ab" and((am_kreisel == 1 and erster_kreisel_höher == True)or (am_kreisel == 2 and erster_kreisel_höher == False))and (drehung0 == "UZS" and drehung1 == "GUZS"))): - block_es = "200000146_ES-Element_90_rechts" - import_block(block_es,lib_doc,doc) - - elif ((drehung0 == "GUZS" and drehung1 == "UZS" and hight_position == "lower")or - (voerder_richtung == "Auf"and((am_kreisel == 1 and erster_kreisel_höher == True)or (am_kreisel == 2 and erster_kreisel_höher == False))and (drehung0 == "GUZS" and drehung1 == "UZS")) or - (voerder_richtung == "Ab" and((am_kreisel == 1 and erster_kreisel_höher == False)or (am_kreisel == 2 and erster_kreisel_höher == True))and (drehung0 == "UZS" and drehung1 == "GUZS"))): - block_as = "200000217_AS-Element_90_links" - import_block(block_as,lib_doc,doc) - - if block_es != None: - block_es = dreh_block(block_es,doc,math.radians(winkel_es)) - if voerder_richtung == "Auf": - start = (x , y+ dy - esoffset_y,upper_hoehe_gefaehlle + esoffset_z) - ende = (x , y1 ,z1) - block_vario.add_blockref(block_es, (start[0]-x ,start[1]+esoffset_y-y ,start[2] - esoffset_z-hoehe_gefaehlle),dxfattribs={"rotation": 180}) - return start,ende - elif(voerder_richtung == "Ab"): - start = (x , y1 ,z1) - ende = (x , y - dy + esoffset_y,lower_hoehe_gefaehlle + esoffset_z) - block_vario.add_blockref(block_es, (ende[0]-x ,ende[1]-esoffset_y-y ,ende[2] - esoffset_z -hoehe_gefaehlle)) - return start, ende - elif am_kreisel == None and blockname not in doc.blocks: - block = doc.blocks.new(name=blockname, base_point=(0,0,0)) - start = (x , y + dy,upper_hoehe_gefaehlle) - ende = (x , y - dy + esoffset_y,lower_hoehe_gefaehlle + esoffset_z) - line = Line.new(dxfattribs={"start": start, "end": ende}) - line.dxf.layer = "6-SP" - copy= line.copy() - copy.translate(-x,-y,-hoehe_gefaehlle) - block.add_entity(copy) - block.add_blockref(block_es, (ende[0]-x ,ende[1]- esoffset_y -y ,ende[2] -hoehe_gefaehlle )) - if block_as != None: - block_as = dreh_block(block_as,doc,math.radians(winkel_as)) - if voerder_richtung == "Auf": - start = (x , y1,z1) - ende = (x , y - dy + asoffset_y ,lower_hoehe_gefaehlle) - block_vario.add_blockref(block_as,(ende[0]-x ,ende[1]-asoffset_y -y,ende[2] - esoffset_z - hoehe_gefaehlle ),dxfattribs={"rotation": 180}) - return start, ende - elif voerder_richtung == "Ab": - start = (x , y +dy - asoffset_y,upper_hoehe_gefaehlle - asoffset_z) - ende = (x , y1 ,z1) - block_vario.add_blockref(block_as,(start[0]-x ,start[1]+asoffset_y -y,start[2] + asoffset_z - hoehe_gefaehlle)) - return start,ende - elif am_kreisel == None and blockname not in doc.blocks: - block = doc.blocks.new(name=blockname, base_point=(0,0,0)) - start = (x , y +dy - asoffset_y,upper_hoehe_gefaehlle- asoffset_z) - ende = (x , y - dy ,lower_hoehe_gefaehlle) - line = Line.new(dxfattribs={"start": start, "end": ende}) - line.dxf.layer = "6-SP" - - copy= line.copy() - copy.translate(-x ,-y,-hoehe_gefaehlle) - - block.add_entity(copy) - block.add_blockref(block_as,(start[0]-x ,start[1]+asoffset_y -y,start[2] + asoffset_z - hoehe_gefaehlle)) - else: - if (( drehung0 == "GUZS" and drehung1 == "GUZS") or (voerder_richtung != None and drehung0 == "GUZS" and drehung1 == "GUZS")): - block_as = "200000241_AS-Element_90_rechts" - import_block(block_as,lib_doc,doc) - block_es = "200000146_ES-Element_90_rechts" - import_block(block_es,lib_doc,doc) - - elif (((drehung0 == "GUZS" and drehung1 == "UZS" and hight_position == "higher")or (drehung0 == "UZS" and drehung1 == "GUZS" and hight_position == "lower")) or - (voerder_richtung == "Auf" and drehung0 == "UZS"and drehung1 == "GUZS") or - (voerder_richtung == "Ab" and drehung0 == "GUZS" and drehung1 == "UZS")) : - block_as = "200000241_AS-Element_90_rechts" - import_block(block_as,lib_doc,doc) - block_es = "400102632_ES-Element_90_links" - import_block(block_es,lib_doc,doc) - - elif (( drehung0 == "UZS" and drehung1 == "UZS") or (voerder_richtung != None and drehung0 == "UZS" and drehung1 == "UZS")): - block_as = "200000217_AS-Element_90_links" - import_block(block_as,lib_doc,doc) - block_es = "400102632_ES-Element_90_links" - import_block(block_es,lib_doc,doc) - - elif ((((drehung0 == "UZS" and drehung1 == "GUZS" and hight_position== "higher")or (drehung0 == "GUZS" and drehung1 == "UZS" and hight_position == "lower")))or - (voerder_richtung == "Auf" and drehung0 == "GUZS" and drehung1 == "UZS") or - (voerder_richtung == "Ab" and drehung0 == "UZS"and drehung1 == "GUZS")) : - - block_as = "200000217_AS-Element_90_links" - import_block(block_as,lib_doc,doc) - block_es = "200000146_ES-Element_90_rechts" - import_block(block_es,lib_doc,doc) - block_as = dreh_block(block_as,doc,math.radians(winkel_as)) - block_es = dreh_block(block_es,doc,math.radians(winkel_es)) - halbe_laenge = laenge / 2 - - dy = halbe_laenge * math.cos(0) - if hight_position != None and blockname not in doc.blocks: - block = doc.blocks.new(name=blockname, base_point=(0,0,0)) - start = (x , y + dy - asoffset_y,upper_hoehe_gefaehlle- asoffset_z) - ende = (x , y - dy + esoffset_y,lower_hoehe_gefaehlle + esoffset_z) - line = Line.new(dxfattribs={"start": start, "end": ende}) - line.dxf.layer = "6-SP" - - copy= line.copy() - - copy.translate(-x ,-y,-hoehe_gefaehlle) - block.add_entity(copy) - block.add_blockref(block_as,(start[0]-x ,start[1]+asoffset_y -y,start[2] + asoffset_z - hoehe_gefaehlle )) - block.add_blockref(block_es, (ende[0]-x ,ende[1]-esoffset_y -y,ende[2] - esoffset_z - hoehe_gefaehlle )) - return - if voerder_richtung == "Auf": - start = (x , y + dy - esoffset_y,upper_hoehe_gefaehlle + esoffset_z) - ende = (x , y - dy + asoffset,lower_hoehe_gefaehlle -asoffset_z) - - block_vario.add_blockref(block_es,(start[0]-x ,start[1]+esoffset_y -y,start[2] - esoffset_z - hoehe_gefaehlle ),dxfattribs={"rotation": 180}) - block_vario.add_blockref(block_as, (ende[0]-x ,ende[1]-asoffset_y -y,ende[2] + asoffset_z - hoehe_gefaehlle ),dxfattribs={"rotation": 180}) - return start,ende - elif voerder_richtung == "Ab": - start = (x , y + dy - asoffset_y,upper_hoehe_gefaehlle - asoffset_z) - ende = (x , y - dy + esoffset_y,lower_hoehe_gefaehlle + esoffset_z) - - block_vario.add_blockref(block_as,(start[0]-x ,start[1]+asoffset_y -y,start[2] + asoffset_z - hoehe_gefaehlle )) - block_vario.add_blockref(block_es, (ende[0]-x ,ende[1]-esoffset_y -y,ende[2] - esoffset_z - hoehe_gefaehlle)) - return start,ende - - -def am_kreisel_direct_verbunden(x, y, upper_hoehe_gefaehlle, lower_hoehe_gefaehlle, x0_kreisel, y0_kreisel, richtung_rad0, abstand0, dx, dy, x1_kreisel, y1_kreisel, richtung_rad1, abstand1,kreisel_verbunden= None, richtung0 = None, richtung1 = None, richtung2 = None): - if kreisel_verbunden == None: - kreisel_verbunden = 0 - unterschiedlich = False - am_kreisel = 0 - halbabstand0 = abstand0 / 2 - dx0 = halbabstand0 * math.cos(richtung_rad0) - dy0 = halbabstand0 * math.sin(richtung_rad0) - pos0_0_floor= (math.floor(x0_kreisel + dx0),math.floor( y0_kreisel + dy0)) - pos0_1_floor = (math.floor(x0_kreisel- dx0),math.floor( y0_kreisel- dy0)) - pos0_0_round= (round(x0_kreisel + dx0),round( y0_kreisel + dy0)) - pos0_1_round = (round(x0_kreisel- dx0),round( y0_kreisel- dy0)) - if (x1_kreisel != None): - halbabstand1 = abstand1 / 2 - dx1 = halbabstand1 * math.cos(richtung_rad1 ) - dy1 = halbabstand1 * math.sin(richtung_rad1) - pos1_0_floor = (math.floor(x1_kreisel + dx1), math.floor(y1_kreisel + dy1)) - pos1_1_floor = (math.floor(x1_kreisel - dx1), math.floor(y1_kreisel - dy1)) - pos1_0_round = (round(x1_kreisel + dx1), round(y1_kreisel + dy1)) - pos1_1_round = (round(x1_kreisel - dx1), round(y1_kreisel - dy1)) - - # berechnung der geraden einmal abgerunden und einmal gerunden zur negirung des offsets - start_floor = (math.floor(x +dx ), math.floor(y + dy ),upper_hoehe_gefaehlle) - ende_floor = (math.floor(x -dx), math.floor(y - dy ) ,lower_hoehe_gefaehlle) - start_round = (round(x +dx ), round(y + dy ),upper_hoehe_gefaehlle) - ende_round= (round(x -dx), round(y - dy ) ,lower_hoehe_gefaehlle) - # verschiebund der endpunkte der gerade in richtung von dem potentiellen Kreisel für den vergleich wieder mit floor und rundung - abstand_fuer_kreis_start_x_floor = start_floor[0] +RADIUS, start_floor[1] - abstand_gegen_kreis_start_x_floor = start_floor[0] -RADIUS, start_floor[1] - abstand_fuer_kreis_start_y_floor = start_floor[0], start_floor[1] + RADIUS - abstand_gegen_kreis_start_y_floor = start_floor[0], start_floor[1] - RADIUS - abstand_fuer_kreis_ende_x_floor= ende_floor[0] + RADIUS, ende_floor[1] - abstand_gegen_kreis_ende_x_floor= ende_floor[0] - RADIUS, ende_floor[1] - abstand_fuer_kreis_ende_y_floor = ende_floor[0] , ende_floor[1] + RADIUS - abstand_gegen_kreis_ende_y_floor = ende_floor[0] , ende_floor[1] - RADIUS - - abstand_fuer_kreis_start_x_round= start_round[0] +RADIUS, start_round[1] - abstand_gegen_kreis_start_x_round = start_round[0] -RADIUS, start_round[1] - abstand_fuer_kreis_start_y_round = start_round[0], start_round[1] + RADIUS - abstand_gegen_kreis_start_y_round = start_round[0], start_round[1] - RADIUS - abstand_fuer_kreis_ende_x_round= ende_round[0] + RADIUS, ende_round[1] - abstand_gegen_kreis_ende_x_round= ende_round[0] - RADIUS, ende_round[1] - abstand_fuer_kreis_ende_y_round = ende_round[0] , ende_round[1] + RADIUS - abstand_gegen_kreis_ende_y_round = ende_round[0] , ende_round[1] - RADIUS - if(richtung0 != None and richtung0 != None): - if (richtung0 != richtung1 and kreisel_verbunden ==1): - if( - (abstand_fuer_kreis_start_y_floor == pos0_0_floor) or - (abstand_fuer_kreis_start_y_floor == pos0_1_floor) or - (abstand_gegen_kreis_start_y_floor == pos0_0_floor) or - (abstand_gegen_kreis_start_y_floor == pos0_1_floor) or - (abstand_fuer_kreis_ende_y_floor == pos0_0_floor) or - (abstand_fuer_kreis_ende_y_floor == pos0_1_floor) or - (abstand_gegen_kreis_ende_y_floor == pos0_0_floor) or - (abstand_gegen_kreis_ende_y_floor == pos0_1_floor) or - (abstand_fuer_kreis_start_y_round == pos0_0_round) or - (abstand_fuer_kreis_start_y_round == pos0_1_round) or - (abstand_gegen_kreis_start_y_round == pos0_0_round) or - (abstand_gegen_kreis_start_y_round == pos0_1_round) or - (abstand_fuer_kreis_ende_y_round == pos0_0_round) or - (abstand_fuer_kreis_ende_y_round == pos0_1_round) or - (abstand_gegen_kreis_ende_y_round == pos0_0_round) or - (abstand_gegen_kreis_ende_y_round == pos0_1_round) or - - (abstand_fuer_kreis_start_y_floor == pos1_0_floor) or - (abstand_fuer_kreis_start_y_floor == pos1_1_floor) or - (abstand_gegen_kreis_start_y_floor == pos1_0_floor) or - (abstand_gegen_kreis_start_y_floor == pos1_1_floor) or - (abstand_fuer_kreis_ende_y_floor == pos1_0_floor) or - (abstand_fuer_kreis_ende_y_floor == pos1_1_floor) or - (abstand_gegen_kreis_ende_y_floor == pos1_0_floor) or - (abstand_gegen_kreis_ende_y_floor == pos1_1_floor) or - - (abstand_fuer_kreis_start_y_round == pos1_0_round) or - (abstand_fuer_kreis_start_y_round == pos1_1_round) or - (abstand_gegen_kreis_start_y_round == pos1_0_round) or - (abstand_gegen_kreis_start_y_round == pos1_1_round) or - (abstand_fuer_kreis_ende_y_round == pos1_0_round) or - (abstand_fuer_kreis_ende_y_round == pos1_1_round) or - (abstand_gegen_kreis_ende_y_round == pos1_0_round) or - (abstand_gegen_kreis_ende_y_round == pos1_1_round) - ): - richtung2= "Vertikal" - unterschiedlich = True - - else: - richtung2 = "Horinzontal" - unterschiedlich = True - return richtung2, unterschiedlich - return richtung2, unterschiedlich - - # vergleich mit einem kreisel von zwei - if( (abstand_fuer_kreis_start_x_floor == pos0_0_floor) or - (abstand_fuer_kreis_start_x_floor == pos0_1_floor) or - (abstand_gegen_kreis_start_x_floor == pos0_0_floor) or - (abstand_gegen_kreis_start_x_floor == pos0_1_floor) or - (abstand_fuer_kreis_ende_x_floor == pos0_0_floor) or - (abstand_fuer_kreis_ende_x_floor == pos0_1_floor) or - (abstand_gegen_kreis_ende_x_floor == pos0_0_floor) or - (abstand_gegen_kreis_ende_x_floor == pos0_1_floor) or - (abstand_fuer_kreis_start_y_floor == pos0_0_floor) or - (abstand_fuer_kreis_start_y_floor == pos0_1_floor) or - (abstand_gegen_kreis_start_y_floor == pos0_0_floor) or - (abstand_gegen_kreis_start_y_floor == pos0_1_floor) or - (abstand_fuer_kreis_ende_y_floor == pos0_0_floor) or - (abstand_fuer_kreis_ende_y_floor == pos0_1_floor) or - (abstand_gegen_kreis_ende_y_floor == pos0_0_floor) or - (abstand_gegen_kreis_ende_y_floor == pos0_1_floor) or - (abstand_fuer_kreis_start_x_round == pos0_0_round ) or - (abstand_fuer_kreis_start_x_round == pos0_1_round) or - (abstand_gegen_kreis_start_x_round == pos0_0_round) or - (abstand_gegen_kreis_start_x_round == pos0_1_round) or - (abstand_fuer_kreis_ende_x_round == pos0_0_round) or - (abstand_fuer_kreis_ende_x_round == pos0_1_round) or - (abstand_gegen_kreis_ende_x_round == pos0_0_round) or - (abstand_gegen_kreis_ende_x_round == pos0_1_round) or - (abstand_fuer_kreis_start_y_round == pos0_0_round) or - (abstand_fuer_kreis_start_y_round == pos0_1_round) or - (abstand_gegen_kreis_start_y_round == pos0_0_round) or - (abstand_gegen_kreis_start_y_round == pos0_1_round) or - (abstand_fuer_kreis_ende_y_round == pos0_0_round) or - (abstand_fuer_kreis_ende_y_round == pos0_1_round) or - (abstand_gegen_kreis_ende_y_round == pos0_0_round) or - (abstand_gegen_kreis_ende_y_round == pos0_1_round) - ): - kreisel_verbunden = kreisel_verbunden +1 - # setzung auf kreisel 1 für spätere ausrechnung der geraden form - am_kreisel = 1 - if (x1_kreisel == None): - return am_kreisel,kreisel_verbunden - - if( (abstand_fuer_kreis_start_x_floor == pos1_0_floor )or - (abstand_fuer_kreis_start_x_floor == pos1_1_floor) or - (abstand_gegen_kreis_start_x_floor == pos1_0_floor) or - (abstand_gegen_kreis_start_x_floor == pos1_1_floor) or - (abstand_fuer_kreis_ende_x_floor == pos1_0_floor) or - (abstand_fuer_kreis_ende_x_floor == pos1_1_floor) or - (abstand_gegen_kreis_ende_x_floor == pos1_0_floor) or - (abstand_gegen_kreis_ende_x_floor == pos1_1_floor) or - (abstand_fuer_kreis_start_y_floor == pos1_0_floor ) or - (abstand_fuer_kreis_start_y_floor == pos1_1_floor) or - (abstand_gegen_kreis_start_y_floor == pos1_0_floor) or - (abstand_gegen_kreis_start_y_floor == pos1_1_floor) or - (abstand_fuer_kreis_ende_y_floor == pos1_0_floor ) or - (abstand_fuer_kreis_ende_y_floor == pos1_1_floor) or - (abstand_gegen_kreis_ende_y_floor == pos1_0_floor) or - (abstand_gegen_kreis_ende_y_floor == pos1_1_floor) or - (abstand_fuer_kreis_start_x_round == pos1_0_round ) or - (abstand_fuer_kreis_start_x_round == pos1_1_round) or - (abstand_gegen_kreis_start_x_round == pos1_0_round) or - (abstand_gegen_kreis_start_x_round == pos1_1_round) or - (abstand_fuer_kreis_ende_x_round == pos1_0_round) or - (abstand_fuer_kreis_ende_x_round == pos1_1_round) or - (abstand_gegen_kreis_ende_x_round == pos1_0_round) or - (abstand_gegen_kreis_ende_x_round == pos1_1_round) or - (abstand_fuer_kreis_start_y_round == pos1_0_round) or - (abstand_fuer_kreis_start_y_round == pos1_1_round) or - (abstand_gegen_kreis_start_y_round == pos1_0_round) or - (abstand_gegen_kreis_start_y_round == pos1_1_round) or - (abstand_fuer_kreis_ende_y_round == pos1_0_round) or - (abstand_fuer_kreis_ende_y_round == pos1_1_round) or - (abstand_gegen_kreis_ende_y_round == pos1_0_round) or - (abstand_gegen_kreis_ende_y_round == pos1_1_round) - ): - kreisel_verbunden = kreisel_verbunden +1 - am_kreisel = 2 - return am_kreisel,kreisel_verbunden def get_layer(doc, lib_doc, blockname): if blockname in lib_doc.blocks: @@ -2057,7 +1474,7 @@ def get_libfile_cfg(teileart, cfg_path): return parser.get(section, "libfile", fallback=None) return None -def get_rotations_of_strecken(csv_path:Path) -> dict: +def get_nachbar_information(csv_path:Path) -> dict: geraden = [] kreisel =[] strecken_nachbarn = [] @@ -2196,24 +1613,12 @@ def main(csv_path: Path, lib_path: Path, cfg_path: Path, allgemein_cfg_path: Pat doc.header['$INSUNITS'] = 4 # Millimeter msp = doc.modelspace() - - # Höhe bestimmen für Koordinaten-Transformation - try: - height = berechne_hoehe(csv_path, logger=logger) - except Exception as e: - msg = f"Fehler bei der Höhenberechnung: {e}" - if logger: - logger.error(msg) - else: - print(msg) - sys.exit(1) - blocklib_dir = data_dir / "block_libraries" lib_docs = dict() # gibt zu jeder ShapeId einer Gefällestrecke zurück, ob sich der jeweilige Kreisel im UZ oder GUZ dreht # rot_of_gf["shape_3ae53a7b-efb8-f66b-eadc-20b99f949ef1"] = ('UZ', 'GUZ') - strecken_nachbarn = get_rotations_of_strecken(csv_path) + strecken_nachbarn = get_nachbar_information(csv_path) # Verarbeitung der Blöcke