Anpasung des Offset berechnung für antrieb Kurven

This commit is contained in:
2025-12-15 09:13:10 +01:00
parent fabed828db
commit a3163e12fe
2 changed files with 53 additions and 19 deletions
+44 -7
View File
@@ -60,9 +60,14 @@ class VarioFoerderer(BaseModel):
anzahl_separatoren = int(merkmale.get("Anzahl der Separatoren"))
)
def get_offset_of_Vario_line(doc, lib_doc, voerder_richtung, winkel, upper_hoehe_vario, lower_hoehe_vario, gefaellestrecke_vario):
def get_offset_of_Vario_line(doc, lib_doc, foerderer, gefaellestrecke_vario):
winkel_VP_offset_vorne = None
winkel_VP_offset_hinten = None
voerder_richtung = foerderer.foerderer_richtung
winkel = int(foerderer.winkel)
rotation = foerderer.drehung
upper_hoehe_vario= foerderer.h1
lower_hoehe_vario = foerderer.h0
if (gefaellestrecke_vario.get("Winkel") != None or gefaellestrecke_vario.get("Kurvenrichtung") != None) and ((winkel == 3 and voerder_richtung == "Ab")or voerder_richtung == "Horizontal"):
# Überprüfung wo es verbunden ist und mit welchen fördere vorne ist ende der Fahrrichtung
if gefaellestrecke_vario.get("h0") != None :
@@ -121,10 +126,27 @@ class VarioFoerderer(BaseModel):
VP_0_nachbar = list(float(att)for att in re.split(r"[;,]", att_kurve["DELTA_VP_0"]))
SP_1_nachbar = list(float(att)for att in re.split(r"[;,]", att_kurve["DELTA_SP_1"]))
VP_1_nachbar= list(float(att)for att in re.split(r"[;,]", att_kurve["DELTA_VP_1"]))
if float(gefaellestrecke_vario.get("vario_hoehe_1")) == lower_hoehe_vario:
winkel_VP_offset_hinten = (SP_1_nachbar[0] -VP_1_nachbar[0] ),0,( SP_1_nachbar[2]- VP_1_nachbar[2])
if voerder_richtung == "Ab":
if float(gefaellestrecke_vario.get("vario_hoehe_1")) == lower_hoehe_vario:
winkel_VP_offset_hinten = (SP_1_nachbar[0] -VP_1_nachbar[0] ),0,( SP_1_nachbar[2]- VP_1_nachbar[2])
else:
winkel_VP_offset_vorne = (SP_1_nachbar[0] -VP_1_nachbar[0] ),0,( SP_1_nachbar[2]- VP_1_nachbar[2])
else:
winkel_VP_offset_vorne = (SP_0_nachbar[0] -VP_0_nachbar[0] ),0,(SP_0_nachbar[2] - VP_0_nachbar[2] )
x_angetrieben = gefaellestrecke_vario.get("X_angetrieben")
y_angetrieben = gefaellestrecke_vario.get("Y_angetrieben")
x = foerderer.x
y = foerderer.y
rotation_zwischen = rotation
if rotation_zwischen == 0.0:
rotation_zwischen = -360.0
if (((-360.0<= rotation_zwischen< -270.0)and y > y_angetrieben) or ((-90.0< rotation< 0.0)and y > y_angetrieben) or
((-270.0< rotation_zwischen< -90.0)and y < y_angetrieben) or
(rotation == -90.0 and x < x_angetrieben) or ((rotation == -270.0)and x<x_angetrieben)):
winkel_VP_offset_hinten = winkel_VP_offset_hinten = (SP_1_nachbar[0] -VP_1_nachbar[0] ),0,( SP_1_nachbar[2]- VP_1_nachbar[2])
else:
winkel_VP_offset_vorne = (SP_1_nachbar[0] -VP_1_nachbar[0] ),0,( SP_1_nachbar[2]- VP_1_nachbar[2])
# Das gleiche falls der 3 grad Förderer mit zwei Förderer Verbunden ist
if (gefaellestrecke_vario.get("Winkel_2") != None or gefaellestrecke_vario.get("Kurvenrichtung_1") != None) and ((winkel == 3 and voerder_richtung == "Ab")or voerder_richtung == "Horizontal"):
@@ -185,10 +207,25 @@ class VarioFoerderer(BaseModel):
VP_0_nachbar = list(float(att)for att in re.split(r"[;,]", att_kurve["DELTA_VP_0"]))
SP_1_nachbar = list(float(att)for att in re.split(r"[;,]", att_kurve["DELTA_SP_1"]))
VP_1_nachbar= list(float(att)for att in re.split(r"[;,]", att_kurve["DELTA_VP_1"]))
if float(gefaellestrecke_vario.get("vario_hoehe_1_1")) == lower_hoehe_vario:
winkel_VP_offset_hinten = (SP_1_nachbar[0] -VP_1_nachbar[0] ),0,( SP_1_nachbar[2]- VP_1_nachbar[2])
if voerder_richtung == "Ab":
if float(gefaellestrecke_vario.get("vario_hoehe_1")) == lower_hoehe_vario:
winkel_VP_offset_hinten = (SP_1_nachbar[0] -VP_1_nachbar[0] ),0,( SP_1_nachbar[2]- VP_1_nachbar[2])
else:
winkel_VP_offset_vorne = (SP_1_nachbar[0] -VP_1_nachbar[0] ),0,( SP_1_nachbar[2]- VP_1_nachbar[2])
else:
winkel_VP_offset_vorne = (SP_0_nachbar[0] -VP_0_nachbar[0] ),0,(SP_0_nachbar[2] - VP_0_nachbar[2] )
x_angetrieben = gefaellestrecke_vario.get("X_angetrieben")
y_angetrieben = gefaellestrecke_vario.get("Y_angetrieben")
x = foerderer.x
y = foerderer.y
rotation_zwischen = rotation
if rotation_zwischen == 0.0:
rotation_zwischen = -360.0
if (((-360.0<= rotation_zwischen< -270.0)and y > y_angetrieben) or ((-90.0< rotation< 0.0)and y > y_angetrieben) or
((-270.0< rotation_zwischen< -90.0)and y < y_angetrieben) or
(rotation == -90.0 and x < x_angetrieben) or ((rotation == -270.0)and x<x_angetrieben)):
winkel_VP_offset_hinten = winkel_VP_offset_hinten = (SP_1_nachbar[0] -VP_1_nachbar[0] ),0,( SP_1_nachbar[2]- VP_1_nachbar[2])
else:
winkel_VP_offset_vorne = (SP_1_nachbar[0] -VP_1_nachbar[0] ),0,( SP_1_nachbar[2]- VP_1_nachbar[2])
return winkel_VP_offset_vorne,winkel_VP_offset_hinten
def vario_erstellung(foerderer, doc, lib_doc, config, block, block_name_links, start, ende, voerder_richtung, winkel_VP_offset_vorne, winkel_VP_offset_hinten ):
+9 -12
View File
@@ -227,7 +227,6 @@ def handle_ils_2_0_kreisel(msp, teileid, merkmale, x, y, doc, lib_doc, verbose,
Kreisel.Kreisel.draw_kreisel_lines(msp, pos1, pos2, kreisel)
Kreisel.Kreisel.draw_kreisel_drehrichtung_markierung(msp, pos1, pos2, kreisel, lib_doc, doc, verbose)
def handle_ils_2_0_eckrad(msp, teileid, merkmale, x, y, doc, lib_doc, verbose, symbols, strecken_nachbarn,config,config_allgemein):
"""Erstellt ein Eckrad in der neuen Dxf"""
import_block("AN8",lib_doc,doc)
@@ -680,11 +679,8 @@ def handle_ils_2_0_variofoerderer(msp, teileid, merkmale, x, y, doc, lib_doc, ve
# für spätere Namens benenung der Vario forderer
motor_vorhanden = foerderer.hat_motor
umlenk_vorhanden = foerderer.hat_umlenk
gefahellewinkel = foerderer.gefaelle_winkel
gefaelle = foerderer.gefaelle_laenge
# Offsets für die Vario Linie für ab 3 bogen, da es in diesem Fall keine bögen hat die sich mit den nachbarn Bögen für andere Vario Förderer verbinden kann
winkel_VP_offset_vorne = None
winkel_VP_offset_hinten = None
@@ -700,7 +696,6 @@ def handle_ils_2_0_variofoerderer(msp, teileid, merkmale, x, y, doc, lib_doc, ve
erster_kreisel_höher = False
ein_kreisel_höher = False
richtung2 ="DEFAULT"
rotation = foerderer.drehung
upper_hoehe_vario= foerderer.h1
lower_hoehe_vario = foerderer.h0
@@ -710,9 +705,12 @@ def handle_ils_2_0_variofoerderer(msp, teileid, merkmale, x, y, doc, lib_doc, ve
if upper_hoehe_vario< lower_hoehe_vario:
hight = upper_hoehe_vario
upper_hoehe_vario = lower_hoehe_vario
foerderer.h1 = upper_hoehe_vario
lower_hoehe_vario = hight
foerderer.h0 = lower_hoehe_vario
# Korrektur der rotation mit der Umstellung der Höhe
rotation = rotation -180
foerderer.drehung = rotation
# Hollen der Information der Nachbarn strukturen ob diese Kreisel sind
@@ -722,7 +720,7 @@ def handle_ils_2_0_variofoerderer(msp, teileid, merkmale, x, y, doc, lib_doc, ve
break
laenge = foerderer.laenge
# Ausrechnung der nötigen Offset falls der Vario Förderer ab mit drei grad mit einem anderen Verbunden ist
winkel_VP_offset_vorne, winkel_VP_offset_hinten = VarioFoerderer.VarioFoerderer.get_offset_of_Vario_line(doc, lib_doc, voerder_richtung, winkel, upper_hoehe_vario, lower_hoehe_vario, gefaellestrecke_vario)
winkel_VP_offset_vorne, winkel_VP_offset_hinten = VarioFoerderer.VarioFoerderer.get_offset_of_Vario_line(doc, lib_doc,foerderer, gefaellestrecke_vario)
# Für spätere berechnung schauen ob der erste Kreis in der Liste höher ist
if upper_hoehe_vario == gefaellestrecke_vario.get("Hoehe0"):
@@ -1286,7 +1284,7 @@ def get_nachbar_information(csv_path:Path) -> dict:
kurvenrichtung = kurve_angetrieben.kurvenrichtung
tefkurve = kurve_angetrieben.antrieb
kurve_winkel = kurve_angetrieben.winkel
angetriebene_kurve.append({"Id": Id,"H0": h0,"H1":h1,"kurvenrichtung":kurvenrichtung,"Tefkurve": tefkurve,"Kurvenwinkel": kurve_winkel})
angetriebene_kurve.append({"Id": Id,"H0": h0,"H1":h1,"kurvenrichtung":kurvenrichtung,"Tefkurve": tefkurve,"Kurvenwinkel": kurve_winkel,"X_angetrieben":x,"Y_angetrieben":y})
for gerade in geraden:
anweisungen = 0
voerder_anweisung = 0
@@ -1295,6 +1293,8 @@ def get_nachbar_information(csv_path:Path) -> dict:
for foerderer in angetriebene_kurve:
if foerderer["Id"] in gerade["NachbarIds"]:
if voerder_anweisung == 0:
eintrag["X_angetrieben"] = foerderer.get("X_angetrieben")
eintrag["Y_angetrieben"] = foerderer.get("Y_angetrieben")
eintrag["vario_hoehe_0"] = foerderer.get("H0")
eintrag["vario_hoehe_1"] = foerderer.get("H1")
eintrag["Kurvenrichtung"] = foerderer.get("kurvenrichtung")
@@ -1302,6 +1302,8 @@ def get_nachbar_information(csv_path:Path) -> dict:
eintrag["Kurvenwinkel"] = foerderer.get("Kurvenwinkel")
voerder_anweisung = 1
elif voerder_anweisung ==1:
eintrag["X_angetrieben_1"] = foerderer.get("X_angetrieben")
eintrag["Y_angetrieben_1"] = foerderer.get("Y_angetrieben")
eintrag["vario_hoehe_0_1"] = foerderer.get("H0")
eintrag["vario_hoehe_1_1"] = foerderer.get("H1")
eintrag["Kurvenrichtung_1"] = foerderer.get("kurvenrichtung")
@@ -1443,17 +1445,12 @@ def main(csv_path: Path, lib_path: Path, cfg_path: Path, allgemein_cfg_path: Pat
else:
print(msg)
for insert in msp.query("INSERT"):
basepoint = insert.dxf.insert
doc.saveas(output_path)
if logger:
logger.info(f"[DONE] DXF gespeichert unter: {output_path}")
else:
print(f"[DONE] DXF gespeichert unter: {output_path}")
def check_dxflibrary_path(lib_path, verbose, logger):
lib_doc = None
if lib_path.exists():