Eckrad kunktioniert
This commit is contained in:
@@ -26,5 +26,5 @@ class Eckrad(BaseModel):
|
||||
x = x,
|
||||
y = y,
|
||||
hoehe = hoehe,
|
||||
drehung = drehung
|
||||
drehrichtung = drehrichtung
|
||||
)
|
||||
@@ -187,7 +187,7 @@ class Gefaellestrecke(BaseModel):
|
||||
if rotation_zwischen == 0.0:
|
||||
rotation_zwischen = -360.0
|
||||
if (((-360.0<= rotation_zwischen< -270.0)and y > y_angetrieben_1) or ((-90.0< rotation< 0.0)and y > y_angetrieben_1) or
|
||||
((-270.0< rotation_zwischen< -90.0)and y < y_angetrieben) or
|
||||
((-270.0< rotation_zwischen< -90.0)and y < y_angetrieben_1) or
|
||||
(rotation == -90.0 and x < x_angetrieben_1) or ((rotation == -270.0)and x<x_angetrieben_1)):
|
||||
hat_umlenk_1 = True
|
||||
umlenk_gerade = True
|
||||
|
||||
+100
-36
@@ -2,7 +2,6 @@
|
||||
placeblocks.py
|
||||
Erzeugt DXF-Elemente aus einer RuleDesigner-CSV.
|
||||
"""
|
||||
|
||||
import os
|
||||
import sys
|
||||
import csv
|
||||
@@ -13,17 +12,12 @@ import configparser
|
||||
import ezdxf
|
||||
from ezdxf import units
|
||||
from ezdxf.entities import Line
|
||||
from ezdxf.addons import importer
|
||||
from ezdxf.math import Matrix44, X_AXIS,Y_AXIS,Z_AXIS
|
||||
from pathlib import Path
|
||||
import math
|
||||
from utils import check_environment_var, setup_logger
|
||||
from Elemente import Kreisel, VarioFoerderer,Gefaehllestrecke,Angetriebene_Kurve,Bt_element,Omniflo
|
||||
from Elemente import Kreisel, VarioFoerderer,Gefaehllestrecke,Angetriebene_Kurve,Bt_element,Omniflo, Eckrad
|
||||
import as_es_methoden
|
||||
import block_methoden
|
||||
|
||||
|
||||
|
||||
# --------------------------------------------------------- CFG-Leser für shapes.cfg
|
||||
def get_shape_cfg(teileart, cfg_path, logger=None):
|
||||
parser = configparser.ConfigParser()
|
||||
@@ -136,7 +130,7 @@ def handle_ils_2_0_eckrad(msp, teileid, merkmale, x, y, doc, lib_doc, verbose, s
|
||||
block_methoden.import_block("Richtungspfeil",lib_doc,doc)
|
||||
eckrad_rechts = "eckrad_UZS"
|
||||
eckrad_links = "eckrad_GUZS"
|
||||
hight = float(merkmale.get("Höhe in m"))
|
||||
hight = float(merkmale.get("Höhe in m")) * 1000
|
||||
if eckrad_rechts not in doc.blocks:
|
||||
block_rechts = doc.blocks.new(name= eckrad_rechts,base_point=(0,0,0))
|
||||
block_links = doc.blocks.new(name= eckrad_links,base_point=(0,0,0))
|
||||
@@ -246,7 +240,7 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v
|
||||
return
|
||||
if upper_hoehe_gefaehlle == hoehe0:
|
||||
hight ="higher"
|
||||
else:
|
||||
elif lower_hoehe_gefaehlle == hoehe0 and winkel != 0:
|
||||
hight = "lower"
|
||||
if hat_motor_0 == False and hat_umlenk_0 == False:
|
||||
blockname = f"Ils_2.0_Gefaellestrecke_{laenge}_{drehung0}_{hoehe_gefaehlle}_{verbunden_am_einen}_{hight}"
|
||||
@@ -564,12 +558,60 @@ def handle_ils_2_0_variofoerderer(msp, teileid, merkmale, x, y, doc, lib_doc, ve
|
||||
gefaellestrecke_vario = nachbarn
|
||||
break
|
||||
laenge = foerderer.laenge
|
||||
halbe_laenge = laenge / 2
|
||||
# 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,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"):
|
||||
ein_kreisel_höher = True
|
||||
if "Eckrad_x" in gefaellestrecke_vario and "Eckrad_x_1" not in gefaellestrecke_vario:
|
||||
x0_eckrad = gefaellestrecke_vario.get("Eckrad_x")
|
||||
y0_eckrad = gefaellestrecke_vario.get("Eckrad_y")
|
||||
hoehe_eckrad = gefaellestrecke_vario.get("Eckrad_höhe")
|
||||
if(upper_hoehe_vario == hoehe_eckrad):
|
||||
ein_kreisel_höher = True
|
||||
else:
|
||||
ein_kreisel_höher = False
|
||||
mit_horizontal_verbunden = horizontale_ausrichtung(x, y, voerder_richtung, rotation, x0_eckrad, y0_eckrad)
|
||||
blockname = (f"Vario_Foerderer_{winkel}_{voerder_richtung}_{laenge}_{hoehe_vario}_rechts_{ein_kreisel_höher}_{motor_vorhanden}_{umlenk_vorhanden}_{gefaelle}_{gefahellewinkel}_{mit_horizontal_verbunden}")
|
||||
block_name_links = (f"Vario_Foerderer_{winkel}_{voerder_richtung}_{laenge}_{hoehe_vario}_links_{ein_kreisel_höher}_{motor_vorhanden}_{umlenk_vorhanden}_{gefaelle}_{gefahellewinkel}_{mit_horizontal_verbunden}")
|
||||
if blockname not in doc.blocks:
|
||||
block_vario = doc.blocks.new(blockname, base_point=(0,0,0))
|
||||
|
||||
dy_true = halbe_laenge * math.cos (0)
|
||||
start = (x, y + dy_true,upper_hoehe_vario)
|
||||
ende = (x,y -dy_true,lower_hoehe_vario)
|
||||
start, ende = VarioFoerderer.VarioFoerderer.vario_verbuden_am_kreisel(foerderer, block_vario, start, ende, mit_horizontal_verbunden,1,1,ein_kreisel_höher)
|
||||
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
|
||||
if merkmale.get("Motorseite")== "links":
|
||||
msp.add_blockref(block_name_links,(x,y,hoehe_vario),dxfattribs={"rotation": rotation})
|
||||
return
|
||||
elif merkmale.get("Motorseite")== "rechts":
|
||||
msp.add_blockref(blockname,(x,y,hoehe_vario),dxfattribs={"rotation": rotation})
|
||||
return
|
||||
if "Eckrad_x" in gefaellestrecke_vario and "Eckrad_x_1" in gefaellestrecke_vario:
|
||||
|
||||
blockname = (f"Vario_Foerderer_{winkel}_{voerder_richtung}_{laenge}_{hoehe_vario}_rechts_2_{motor_vorhanden}_{umlenk_vorhanden}_{gefaelle}_{gefahellewinkel}")
|
||||
block_name_links = (f"Vario_Foerderer_{winkel}_{voerder_richtung}_{laenge}_{hoehe_vario}_links_2_{motor_vorhanden}_{umlenk_vorhanden}_{gefaelle}_{gefahellewinkel}")
|
||||
if blockname not in doc.blocks:
|
||||
block_vario = doc.blocks.new(blockname, base_point=(0,0,0))
|
||||
|
||||
dy_true = halbe_laenge * math.cos (0)
|
||||
start = (x, y + dy_true,upper_hoehe_vario)
|
||||
ende = (x,y -dy_true,lower_hoehe_vario)
|
||||
start, ende = VarioFoerderer.VarioFoerderer.vario_verbuden_am_kreisel(foerderer, block_vario, start, ende, None,2,)
|
||||
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
|
||||
if merkmale.get("Motorseite")== "links":
|
||||
msp.add_blockref(block_name_links,(x,y,hoehe_vario),dxfattribs={"rotation": rotation})
|
||||
return
|
||||
elif merkmale.get("Motorseite")== "rechts":
|
||||
msp.add_blockref(blockname,(x,y,hoehe_vario),dxfattribs={"rotation": rotation})
|
||||
return
|
||||
|
||||
|
||||
# Aufruf falls nur mit einem Kreisel verbunden
|
||||
if "Drehung0" in gefaellestrecke_vario and "Drehung1" not in gefaellestrecke_vario:
|
||||
# Vorbereitund der Daten des Kreisel
|
||||
@@ -587,28 +629,7 @@ def handle_ils_2_0_variofoerderer(msp, teileid, merkmale, x, y, doc, lib_doc, ve
|
||||
# Herausfinden ob der Förderere direkt mit dem Kreisel verbunden ist, die Werte für den Zweiten Kreisel wird auf None gesetzt weil diese nicht existieren
|
||||
|
||||
# None als string für späteren vergleich
|
||||
mit_horizontal_verbunden = "None"
|
||||
if voerder_richtung == "Horizontal":
|
||||
if rotation == 0.0:
|
||||
if y> y0_kreisel:
|
||||
mit_horizontal_verbunden = "unten_drehung_0_or_-90"
|
||||
else:
|
||||
mit_horizontal_verbunden = "oben_drehung_0_or_-90"
|
||||
if rotation == -180.0:
|
||||
if y> y0_kreisel:
|
||||
mit_horizontal_verbunden = "unten_drehung_-180_or_-270"
|
||||
else:
|
||||
mit_horizontal_verbunden = "oben_drehung_-180_or_-270"
|
||||
if rotation == -90.0:
|
||||
if x> x0_kreisel:
|
||||
mit_horizontal_verbunden = "unten_drehung_0_or_-90"
|
||||
else:
|
||||
mit_horizontal_verbunden = "oben_drehung_0_or_-90"
|
||||
if rotation == -270.0:
|
||||
if x> x0_kreisel:
|
||||
mit_horizontal_verbunden = "unten_drehung_-180_or_-270"
|
||||
else:
|
||||
mit_horizontal_verbunden = "oben_drehung_-180_or_-270"
|
||||
mit_horizontal_verbunden = horizontale_ausrichtung(x, y, voerder_richtung, rotation, x0_kreisel, y0_kreisel)
|
||||
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
|
||||
@@ -702,8 +723,8 @@ def handle_ils_2_0_variofoerderer(msp, teileid, merkmale, x, y, doc, lib_doc, ve
|
||||
# Falls der Förder mit beiden Kreisel verbunden ist
|
||||
if kreisel_verbunden == 2:
|
||||
# Erstellung der blockname für wenn die Motorstation rechts und links
|
||||
blockname = (f"Vario_Foerderer_{winkel}_{voerder_richtung}_{laenge}_{hoehe_vario}_rechts_{drehung0}_{drehung1}_{kreisel_verbunden}_{motor_vorhanden}_{umlenk_vorhanden}_{gefaelle}_{gefahellewinkel}")
|
||||
block_name_links = (f"Vario_Foerderer_{winkel}_{voerder_richtung}_{laenge}_{hoehe_vario}_links_{drehung0}_{drehung1}_{kreisel_verbunden}_{motor_vorhanden}_{umlenk_vorhanden}_{gefaelle}_{gefahellewinkel}")
|
||||
blockname = (f"Vario_Foerderer_{winkel}_{voerder_richtung}_{laenge}_{hoehe_vario}_rechts_{kreisel_verbunden}_{motor_vorhanden}_{umlenk_vorhanden}_{gefaelle}_{gefahellewinkel}")
|
||||
block_name_links = (f"Vario_Foerderer_{winkel}_{voerder_richtung}_{laenge}_{hoehe_vario}_links_{kreisel_verbunden}_{motor_vorhanden}_{umlenk_vorhanden}_{gefaelle}_{gefahellewinkel}")
|
||||
# Falls der Block bereits in dem doc ist platziere diesen einfach
|
||||
if blockname in doc.blocks:
|
||||
if merkmale.get("Motorseite")== "links":
|
||||
@@ -826,6 +847,31 @@ def handle_ils_2_0_variofoerderer(msp, teileid, merkmale, x, y, doc, lib_doc, ve
|
||||
if merkmale.get("Motorseite")== "rechts":
|
||||
msp.add_blockref(blockname,(x,y,hoehe_vario),dxfattribs={"rotation": rotation})
|
||||
|
||||
def horizontale_ausrichtung(x, y, voerder_richtung, rotation, x0_kreisel, y0_kreisel):
|
||||
mit_horizontal_verbunden = "None"
|
||||
if voerder_richtung == "Horizontal":
|
||||
if rotation == 0.0:
|
||||
if y> y0_kreisel:
|
||||
mit_horizontal_verbunden = "unten_drehung_0_or_-90"
|
||||
else:
|
||||
mit_horizontal_verbunden = "oben_drehung_0_or_-90"
|
||||
if rotation == -180.0:
|
||||
if y> y0_kreisel:
|
||||
mit_horizontal_verbunden = "unten_drehung_-180_or_-270"
|
||||
else:
|
||||
mit_horizontal_verbunden = "oben_drehung_-180_or_-270"
|
||||
if rotation == -90.0:
|
||||
if x> x0_kreisel:
|
||||
mit_horizontal_verbunden = "unten_drehung_0_or_-90"
|
||||
else:
|
||||
mit_horizontal_verbunden = "oben_drehung_0_or_-90"
|
||||
if rotation == -270.0:
|
||||
if x> x0_kreisel:
|
||||
mit_horizontal_verbunden = "unten_drehung_-180_or_-270"
|
||||
else:
|
||||
mit_horizontal_verbunden = "oben_drehung_-180_or_-270"
|
||||
return mit_horizontal_verbunden
|
||||
|
||||
def handle_ils_2_0_kurve_angetrieben(msp, teileid, merkmale, x, y, doc, lib_doc, verbose, symbols, strecken_nachbarn,config,config_allgemein):
|
||||
"""Erstellt eine Angetriebene Kurve (Förderer Kurve) in der neuen Dxf"""
|
||||
voerder_kurve = Angetriebene_Kurve.Angetriebene_Kurve.from_merkmale(teileid,x,y,merkmale)
|
||||
@@ -935,7 +981,7 @@ def get_nachbar_information(csv_path:Path) -> dict:
|
||||
kreisel =[]
|
||||
strecken_nachbarn = []
|
||||
angetriebene_kurve= []
|
||||
anweisungen = 0
|
||||
eckrad_dic= []
|
||||
"""Gib für jede gefällestrecke zurück welche Drehrichtung die benachbarten Kreisel haben """
|
||||
with csv_path.open(newline="", encoding="utf-8") as fh:
|
||||
reader = csv.DictReader(fh, delimiter=';')
|
||||
@@ -987,11 +1033,19 @@ def get_nachbar_information(csv_path:Path) -> dict:
|
||||
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,"X_angetrieben":x,"Y_angetrieben":y})
|
||||
|
||||
if bezeichner =="ILS 2.0 Eckrad":
|
||||
Id = row["TeileId"].strip()
|
||||
planquadrat = row["Planquadrat"]
|
||||
x, y = extract_coords(planquadrat)
|
||||
merkmale = parse_merkmale(row.get("Merkmale", ""))
|
||||
eckrad_att = Eckrad.Eckrad.from_merkmale(Id,x,y,merkmale)
|
||||
|
||||
eckrad_dic.append({"Id": Id,"H0": eckrad_att.hoehe,"Eckrad_x": x,"Eckrad_y": y})
|
||||
for gerade in geraden:
|
||||
anweisungen = 0
|
||||
voerder_anweisung = 0
|
||||
geraden_anweisung = 0
|
||||
eckrad_anweisung = 0
|
||||
eintrag = {"Id": gerade["Id"]}
|
||||
for foerderer in angetriebene_kurve:
|
||||
if foerderer["Id"] in gerade["NachbarIds"]:
|
||||
@@ -1012,7 +1066,17 @@ def get_nachbar_information(csv_path:Path) -> dict:
|
||||
eintrag["Kurvenrichtung_1"] = foerderer.get("kurvenrichtung")
|
||||
eintrag["Tefkurve_1"] = foerderer.get("Tefkurve")
|
||||
eintrag["Kurvenwinkel_1"] = foerderer.get("Kurvenwinkel")
|
||||
|
||||
for eckrad in eckrad_dic:
|
||||
if eckrad["Id"] in gerade["NachbarIds"]:
|
||||
if eckrad_anweisung == 0:
|
||||
eintrag["Eckrad_x"] = eckrad.get("Eckrad_x")
|
||||
eintrag["Eckrad_y"] = eckrad.get("Eckrad_y")
|
||||
eintrag["Eckrad_höhe"] = eckrad.get("H0")
|
||||
eckrad_anweisung = 1
|
||||
elif eckrad_anweisung == 1:
|
||||
eintrag["Eckrad_x_1"] = eckrad.get("Eckrad_x")
|
||||
eintrag["Eckrad_y_1"] = eckrad.get("Eckrad_y")
|
||||
eintrag["Eckrad_höhe_1"] = eckrad.get("H0")
|
||||
for kreis in kreisel:
|
||||
if kreis["Id"] in gerade["NachbarIds"]:
|
||||
if anweisungen == 0:
|
||||
|
||||
Reference in New Issue
Block a user