Paar namens änderung rotation ausgegleicht falls nur as es element da ist man die rotation von dieser passt

This commit is contained in:
2026-01-21 08:01:41 +01:00
parent a5baccb40a
commit e928ee363d
5 changed files with 98 additions and 60 deletions
+13
View File
@@ -1,12 +1,25 @@
## Wichtige Ezdxf Methoden ## Wichtige Ezdxf Methoden
1. block.add_blockref(blockname,(kordinaten)dxfattribute={"rotation": rotation,"layer": layer}) 1. block.add_blockref(blockname,(kordinaten)dxfattribute={"rotation": rotation,"layer": layer})
- Fügt inserts in ein block hinzu - Fügt inserts in ein block hinzu
2. msp.add_blockref(blockname,(kordinaten)dxfattribute={"rotation": rotation,"layer": layer}) 2. msp.add_blockref(blockname,(kordinaten)dxfattribute={"rotation": rotation,"layer": layer})
- Fügt insert ins Modelspace hinzu - Fügt insert ins Modelspace hinzu
3. doc.blocks.new(blockname, base_point=(0,0,0)) 3. doc.blocks.new(blockname, base_point=(0,0,0))
- Fügt einen neune Block ins Document hinzu(gleichen Block kann man nur einmal machen if abrage wär if blockname in doc.blocks) - Fügt einen neune Block ins Document hinzu(gleichen Block kann man nur einmal machen if abrage wär if blockname in doc.blocks)
4. msp.query("DXFOBJEKT) 4. msp.query("DXFOBJEKT)
- Holle jedes spezifische dxfobjekt von dem Modelspace, wird meistens für Inserts verwendet - Holle jedes spezifische dxfobjekt von dem Modelspace, wird meistens für Inserts verwendet
## Plant2dxf handle Gefällestrecke ## Plant2dxf handle Gefällestrecke
1.Definiere Attribute und entnehme die Attribute von den Nachbarn falls nötig.
2.Abarbeitung fall nur mit einem Kreisel verbunden.
3. Korektur der rotation und austausch der Höhe falls nötig, wird gemact für die Konsistenz der Erstellung
## Main line ## Main line
+1
View File
@@ -2,6 +2,7 @@ from pydantic import BaseModel, Field, field_validator
from typing import Optional from typing import Optional
class Bt_element(BaseModel): class Bt_element(BaseModel):
"""Das sind beide BTMT Elemente"""
teileid: str teileid: str
drehung: Optional [float] = Field(default=0.0,description="Rotation des Elements") drehung: Optional [float] = Field(default=0.0,description="Rotation des Elements")
hoehe: Optional [float] = Field(default=0.0,description="Hoehe des Elements") hoehe: Optional [float] = Field(default=0.0,description="Hoehe des Elements")
+24
View File
@@ -305,6 +305,30 @@ class VarioFoerderer(BaseModel):
winkel_VP_offset_vorne = (SP_1_nachbar[0] -VP_1_nachbar[0] ),0,( SP_1_nachbar[2]- VP_1_nachbar[2]) 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 return winkel_VP_offset_vorne,winkel_VP_offset_hinten
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 vario_verbuden_am_kreisel(foerderer, block_vario, start, ende, mit_horizontal_verbunden = None,kreisel_verbunden = None,am_kreisel = None,erster_kreisel_höher = None): def vario_verbuden_am_kreisel(foerderer, block_vario, start, ende, mit_horizontal_verbunden = None,kreisel_verbunden = None,am_kreisel = None,erster_kreisel_höher = None):
lower_hoehe_vario = foerderer.h0 lower_hoehe_vario = foerderer.h0
upper_hoehe_vario = foerderer.h1 upper_hoehe_vario = foerderer.h1
+8 -8
View File
@@ -4,7 +4,7 @@ import plant2dxf
import block_methoden import block_methoden
RADIUS = 400 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, verbunden_höher = None,gefaelle_block=None,start = None,ende = None,mit_horizontal_verbunden = None): 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, verbunden_höher = None,gefaelle_block=None,start = None,ende = None,mit_horizontal_verbunden = None,as_es_rotation= None):
halbe_laenge = laenge / 2 halbe_laenge = laenge / 2
dy = halbe_laenge * math.cos(0) dy = halbe_laenge * math.cos(0)
asoffset = float(config.get("ILS 2.0 Gefällestrecke", "asoffset")) asoffset = float(config.get("ILS 2.0 Gefällestrecke", "asoffset"))
@@ -54,7 +54,7 @@ def erstellung_gefaelle_block_verbunenden_am_einen(msp,x, y, doc, lib_doc, upper
block_vario.add_blockref(block_as,(start[0]-x ,start[1]+asoffset_y -y,start[2] -hoehe_gefaehlle + asoffset_z),dxfattribs={"layer":layer,"color":color}) block_vario.add_blockref(block_as,(start[0]-x ,start[1]+asoffset_y -y,start[2] -hoehe_gefaehlle + asoffset_z),dxfattribs={"layer":layer,"color":color})
return start,ende return start,ende
if laenge > asoffset: if laenge >= asoffset:
start[1] = start[1] - asoffset_y start[1] = start[1] - asoffset_y
start[2] = start[2] - asoffset_z start[2] = start[2] - asoffset_z
line = Line.new(dxfattribs={"start": start, "end": ende}) line = Line.new(dxfattribs={"start": start, "end": ende})
@@ -65,7 +65,7 @@ def erstellung_gefaelle_block_verbunenden_am_einen(msp,x, y, doc, lib_doc, upper
gefaelle_block.add_blockref(block_as,(start[0]-x ,start[1]+asoffset_y -y,start[2] -hoehe_gefaehlle + asoffset_z),dxfattribs={"layer":layer,"color":color}) gefaelle_block.add_blockref(block_as,(start[0]-x ,start[1]+asoffset_y -y,start[2] -hoehe_gefaehlle + asoffset_z),dxfattribs={"layer":layer,"color":color})
return False return False
else: else:
msp.add_blockref(block_as,(x,y,upper_hoehe_gefaehlle),dxfattribs={"layer":layer,"color":color}) msp.add_blockref(block_as,(start[0],start[1]+asoffset_y,upper_hoehe_gefaehlle),dxfattribs={"layer":layer,"color":color})
return True return True
elif block_es != None: elif block_es != None:
block_es = block_methoden.dreh_block(block_es,doc,lib_doc,math.radians(winkel_es)) block_es = block_methoden.dreh_block(block_es,doc,lib_doc,math.radians(winkel_es))
@@ -77,10 +77,10 @@ def erstellung_gefaelle_block_verbunenden_am_einen(msp,x, y, doc, lib_doc, upper
elif vario_richtung == "Ab": elif vario_richtung == "Ab":
start = (x , y + dy ,upper_hoehe_gefaehlle) start = (x , y + dy ,upper_hoehe_gefaehlle)
ende = (x , y - dy + esoffset_y,lower_hoehe_gefaehlle + esoffset_z) 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),dxfattribs={"layer":layer,"color":color}) block_vario.add_blockref(block_es, (ende[0]-x ,ende[1]-esoffset_y -y,ende[2] - hoehe_gefaehlle -esoffset_z),dxfattribs={"rotation": as_es_rotation,"layer":layer,"color":color})
return start,ende return start,ende
if laenge > esoffset: if laenge >= esoffset:
ende[1] = ende[1] + esoffset_y ende[1] = ende[1] + esoffset_y
ende[2] = ende[2] + esoffset_z ende[2] = ende[2] + esoffset_z
line = Line.new(dxfattribs={"start": start, "end": ende}) line = Line.new(dxfattribs={"start": start, "end": ende})
@@ -91,7 +91,7 @@ def erstellung_gefaelle_block_verbunenden_am_einen(msp,x, y, doc, lib_doc, upper
gefaelle_block.add_blockref(block_es, (ende[0]-x ,ende[1]-esoffset_y -y,ende[2] - hoehe_gefaehlle -esoffset_z),dxfattribs={"layer":layer,"color":color}) gefaelle_block.add_blockref(block_es, (ende[0]-x ,ende[1]-esoffset_y -y,ende[2] - hoehe_gefaehlle -esoffset_z),dxfattribs={"layer":layer,"color":color})
return False return False
else: else:
msp.add_blockref(block_es,(x,y,lower_hoehe_gefaehlle),dxfattribs={"layer":layer,"color":color}) msp.add_blockref(block_es,(ende[0],ende[1]+esoffset_y,lower_hoehe_gefaehlle),dxfattribs={"rotation": as_es_rotation,"layer":layer,"color":color})
return True 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): 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):
@@ -113,7 +113,7 @@ def gefaellegerade_erstellung(x, y, doc, lib_doc, upper_hoehe_gefaehlle, lower_h
middle_hoehe = upper_hoehe_gefaehlle middle_hoehe = upper_hoehe_gefaehlle
upper_hoehe_gefaehlle = lower_hoehe_gefaehlle upper_hoehe_gefaehlle = lower_hoehe_gefaehlle
lower_hoehe_gefaehlle = middle_hoehe lower_hoehe_gefaehlle = middle_hoehe
# Entnehmung welches as/es element man braucht wenn es mit zwei Kreisel verbunden ist aber ein Kreisel direkt am Kopf hängt
if richtung2!= "DEFAULT" or am_kreisel != None: if richtung2!= "DEFAULT" or am_kreisel != None:
# Schaut bei gleicher Orentierung # Schaut bei gleicher Orentierung
if ((drehung0 == "GUZS" and drehung1 == "GUZS" and hight_position == "higher") or if ((drehung0 == "GUZS" and drehung1 == "GUZS" and hight_position == "higher") or
@@ -159,7 +159,7 @@ def gefaellegerade_erstellung(x, y, doc, lib_doc, upper_hoehe_gefaehlle, lower_h
block_methoden.import_block(block_as,lib_doc,doc) block_methoden.import_block(block_as,lib_doc,doc)
layer, color = block_methoden.get_insert_color_layer(lib_doc,block_as) layer, color = block_methoden.get_insert_color_layer(lib_doc,block_as)
# Erstellt den Block
if block_es != None: if block_es != None:
block_es = block_methoden.dreh_block(block_es,doc,lib_doc,math.radians(winkel_es)) block_es = block_methoden.dreh_block(block_es,doc,lib_doc,math.radians(winkel_es))
if voerder_richtung == "Auf": if voerder_richtung == "Auf":
+40 -40
View File
@@ -62,7 +62,6 @@ def get_shape_cfg(teileart, cfg_path, logger=None):
# --------------------------------------------------------- Konstante Parameter # --------------------------------------------------------- Konstante Parameter
ATTR_TAG = "TeileId" # Attributtag im Block ATTR_TAG = "TeileId" # Attributtag im Block
RADIUS = 400 # Radius der Kreiselkreise (mm) RADIUS = 400 # Radius der Kreiselkreise (mm)
# --------------------------------------------------------- Hilfsfunktionen # --------------------------------------------------------- Hilfsfunktionen
def extract_coords(planquadrat: str) -> tuple[float, float]: def extract_coords(planquadrat: str) -> tuple[float, float]:
"""Extrahiert X/Y Koordinaten aus PlanquadratString.""" """Extrahiert X/Y Koordinaten aus PlanquadratString."""
@@ -131,6 +130,7 @@ def handle_ils_2_0_eckrad(msp, teileid, merkmale, x, y, doc, lib_doc, verbose, s
eckrad_rechts = "eckrad_UZS" eckrad_rechts = "eckrad_UZS"
eckrad_links = "eckrad_GUZS" eckrad_links = "eckrad_GUZS"
hight = float(merkmale.get("Höhe in m")) * 1000 hight = float(merkmale.get("Höhe in m")) * 1000
# Erstellung der Richtungung Blöcke der Eckrads
if eckrad_rechts not in doc.blocks: if eckrad_rechts not in doc.blocks:
block_rechts = doc.blocks.new(name= eckrad_rechts,base_point=(0,0,0)) 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)) block_links = doc.blocks.new(name= eckrad_links,base_point=(0,0,0))
@@ -151,7 +151,6 @@ 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): def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, verbose, symbols, strecken_nachbarn,config,config_allgemein):
"""Erstellt eine Gefällestrecke in der neuen Dxf""" """Erstellt eine Gefällestrecke in der neuen Dxf"""
#Vorbereitung der attributen #Vorbereitung der attributen
gefaelle_objekt = Gefaehllestrecke.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")) asoffset = float(config.get("ILS 2.0 Gefällestrecke", "asoffset"))
esoffset = float(config.get("ILS 2.0 Gefällestrecke", "esoffset")) esoffset = float(config.get("ILS 2.0 Gefällestrecke", "esoffset"))
@@ -167,20 +166,20 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v
dy = halbe_laenge * math.cos(winkel) dy = halbe_laenge * math.cos(winkel)
start = x +dx, y + dy,upper_hoehe_gefaehlle start = x +dx, y + dy,upper_hoehe_gefaehlle
if "6-SP" not in doc.layers: if "6-SP" not in doc.layers:
doc.layers.add(name="6-SP", color=7) doc.layers.add(name="6-SP", color=7)
gefaelle_layer = "6-SP" gefaelle_layer = "6-SP"
verbunden_am_einen = False verbunden_am_einen = False
richtung2 ="DEFAULT" richtung2 ="DEFAULT"
unterschiedlich = False unterschiedlich = False
anzahl_seperatoren_oder_scan(msp, x, y, doc, lib_doc, gefaelle_objekt, hoehe_gefaehlle, rotation) anzahl_seperatoren_oder_scan(msp, x, y, doc, lib_doc, gefaelle_objekt, hoehe_gefaehlle, rotation)
for nachbarn in strecken_nachbarn: for nachbarn in strecken_nachbarn:
if teileid == nachbarn.get("Id"): if teileid == nachbarn.get("Id"):
gefaellestrecke_nachbarn = nachbarn gefaellestrecke_nachbarn = nachbarn
break break
# Fall verbunden mit exakt einem Kreisel
if "Drehung0" in gefaellestrecke_nachbarn and "Drehung1" not in gefaellestrecke_nachbarn: if "Drehung0" in gefaellestrecke_nachbarn and "Drehung1" not in gefaellestrecke_nachbarn:
# Entnehmen der Attribute der Nacharn
drehung0 =gefaellestrecke_nachbarn.get("Drehung0") drehung0 =gefaellestrecke_nachbarn.get("Drehung0")
x0_kreisel = float(gefaellestrecke_nachbarn.get("x0")) x0_kreisel = float(gefaellestrecke_nachbarn.get("x0"))
y0_kreisel = float(gefaellestrecke_nachbarn.get("y0")) y0_kreisel = float(gefaellestrecke_nachbarn.get("y0"))
@@ -190,6 +189,7 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v
richtung_rad0= math.radians(richtung0) richtung_rad0= math.radians(richtung0)
abstand0 = float(gefaellestrecke_nachbarn.get("abstand0")) * 1000 abstand0 = float(gefaellestrecke_nachbarn.get("abstand0")) * 1000
#Austauch der höhen und dementsprechende Koorekur falls nötig, dieser Schritt ist notwendig für die Konsistzenz der Blockerstellung
if upper_hoehe_gefaehlle < lower_hoehe_gefaehlle: if upper_hoehe_gefaehlle < lower_hoehe_gefaehlle:
hoehe2 = upper_hoehe_gefaehlle hoehe2 = upper_hoehe_gefaehlle
upper_hoehe_gefaehlle = lower_hoehe_gefaehlle upper_hoehe_gefaehlle = lower_hoehe_gefaehlle
@@ -199,6 +199,7 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v
rotation = rotation -180 rotation = rotation -180
gefaelle_objekt.drehung = rotation gefaelle_objekt.drehung = rotation
# Übrerprüfung ob die Gefällestrecke einen Motor oder Umlenkstation braucht, wenn es mit einer angetriebenen Kurve verbunden ist
block_Vario_Umlenkstation_500mm, block_Vario_Motorstation_500mm, blockname_motor_links, blockname_umlenk_links = block_methoden.rotatate_and_left_motor_umlenk(doc, lib_doc,config) block_Vario_Umlenkstation_500mm, block_Vario_Motorstation_500mm, blockname_motor_links, blockname_umlenk_links = block_methoden.rotatate_and_left_motor_umlenk(doc, lib_doc,config)
hat_zusatz = Gefaehllestrecke.Gefaellestrecke.hat_motor_umlenk_station (gefaelle_objekt, gefaellestrecke_nachbarn) hat_zusatz = Gefaehllestrecke.Gefaellestrecke.hat_motor_umlenk_station (gefaelle_objekt, gefaellestrecke_nachbarn)
hat_motor_0 = hat_zusatz.get("hat_motor_0") hat_motor_0 = hat_zusatz.get("hat_motor_0")
@@ -210,7 +211,9 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v
umlenk_gerade = hat_zusatz.get("umlenk_gerade") umlenk_gerade = hat_zusatz.get("umlenk_gerade")
motor_gerade = hat_zusatz.get("motor_gerade") motor_gerade = hat_zusatz.get("motor_gerade")
verbunden_am_einen = True verbunden_am_einen = True
# Überprüfung ist die Gefällestrecke direkt mit dem Kreisel verbunden, anstelle des Stahlbandes
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) 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)
# Bearbeitung der Gefälle Strecke falls dies der Fall ist
if am_kreisel == 1: if am_kreisel == 1:
if hat_motor_0 == False and hat_umlenk_0 == False: if hat_motor_0 == False and hat_umlenk_0 == False:
dx = halbe_laenge *math.sin(winkel * -1) dx = halbe_laenge *math.sin(winkel * -1)
@@ -220,8 +223,8 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v
line =msp.add_line(start,ende) line =msp.add_line(start,ende)
line.dxf.layer = "6-SP" line.dxf.layer = "6-SP"
return return
#Bearbeitung der Gefällestrecke die direkt am Kreisel hängt und eine Motor- Umlenkstation besitzt
else: else:
dy = halbe_laenge * math.cos(0) dy = halbe_laenge * math.cos(0)
start = [x , y + dy ,upper_hoehe_gefaehlle] start = [x , y + dy ,upper_hoehe_gefaehlle]
ende = [x , y - dy ,lower_hoehe_gefaehlle] ende = [x , y - dy ,lower_hoehe_gefaehlle]
@@ -238,10 +241,12 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v
block.add_entity(line) block.add_entity(line)
msp.add_blockref(blockname,(x,y,hoehe_gefaehlle),dxfattribs={"rotation": rotation,"layer": gefaelle_layer}) msp.add_blockref(blockname,(x,y,hoehe_gefaehlle),dxfattribs={"rotation": rotation,"layer": gefaelle_layer})
return return
# Schauen ob die Gefällestrecke mit dem Höheren oder unterm Teil a, Kreisel Verbunden ist
if upper_hoehe_gefaehlle == hoehe0: if upper_hoehe_gefaehlle == hoehe0:
hight ="higher" hight ="higher"
elif lower_hoehe_gefaehlle == hoehe0 and winkel != 0: else:
hight = "lower" hight = "lower"
# Erstelle den Block
if hat_motor_0 == False and hat_umlenk_0 == False: if hat_motor_0 == False and hat_umlenk_0 == False:
blockname = f"Ils_2.0_Gefaellestrecke_{laenge}_{drehung0}_{hoehe_gefaehlle}_{verbunden_am_einen}_{hight}" blockname = f"Ils_2.0_Gefaellestrecke_{laenge}_{drehung0}_{hoehe_gefaehlle}_{verbunden_am_einen}_{hight}"
else: else:
@@ -265,8 +270,23 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v
start = [x , y + dy ,upper_hoehe_gefaehlle] start = [x , y + dy ,upper_hoehe_gefaehlle]
ende = [x , y - dy ,lower_hoehe_gefaehlle] ende = [x , y - dy ,lower_hoehe_gefaehlle]
start, ende = Gefaehllestrecke.Gefaellestrecke.ein_motor_oder_eine_umlenk(x, y, start,ende,doc, lib_doc, hoehe_gefaehlle, block_Vario_Umlenkstation_500mm, block_Vario_Motorstation_500mm, blockname_motor_links, blockname_umlenk_links, hat_motor_0, hat_umlenk_0, tefkurve_0, block,umlenk_gerade,motor_gerade) start, ende = Gefaehllestrecke.Gefaellestrecke.ein_motor_oder_eine_umlenk(x, y, start,ende,doc, lib_doc, hoehe_gefaehlle, block_Vario_Umlenkstation_500mm, block_Vario_Motorstation_500mm, blockname_motor_links, blockname_umlenk_links, hat_motor_0, hat_umlenk_0, tefkurve_0, block,umlenk_gerade,motor_gerade)
#Füge die AS- Eselemente ein, falls die Gefällestrecke größer ist als das jeweilige Element
if richtung0 == 0.0 or richtung0 == -180:
rotation_ersatz = "V"
else:
rotation_ersatz = "H"
if rotation_ersatz == "H":
if x> x0_kreisel:
as_es_rotation= -90
else:
as_es_rotation= -270
else:
if y> y0_kreisel:
as_es_rotation= 0
else:
as_es_rotation= -180
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) 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,None,as_es_rotation)
if only_es_or_as == False: if only_es_or_as == False:
bref =msp.add_blockref(blockname,(x,y,hoehe_gefaehlle),dxfattribs={"rotation": rotation,"layer": gefaelle_layer}) bref =msp.add_blockref(blockname,(x,y,hoehe_gefaehlle),dxfattribs={"rotation": rotation,"layer": gefaelle_layer})
@@ -276,8 +296,9 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v
insert = (x,y) insert = (x,y)
) )
a.is_invisible = True a.is_invisible = True
#Abarbeitung der Gefallestrecke falls es mit 2 Kreiseln verbunden ist
elif "Drehung0" in gefaellestrecke_nachbarn and "Drehung1" in gefaellestrecke_nachbarn: elif "Drehung0" in gefaellestrecke_nachbarn and "Drehung1" in gefaellestrecke_nachbarn:
#Hollen der nötigen Atributte
dx = halbe_laenge *math.sin(winkel * -1) dx = halbe_laenge *math.sin(winkel * -1)
dy = halbe_laenge * math.cos(winkel) dy = halbe_laenge * math.cos(winkel)
drehung0 =gefaellestrecke_nachbarn.get("Drehung0") drehung0 =gefaellestrecke_nachbarn.get("Drehung0")
@@ -297,9 +318,9 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v
abstand1 = float(gefaellestrecke_nachbarn.get("abstand1")) * 1000 abstand1 = float(gefaellestrecke_nachbarn.get("abstand1")) * 1000
rotation = float(merkmale.get("Drehung")) rotation = float(merkmale.get("Drehung"))
#ausrechnung position kreisel # Überprüfung ist die Gefällestrecke direkt mit eimen Kreisel verbunden, anstelle des Stahlbandes und wenn ja wie viele
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) 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) # falls beide enden direkt mit dem Kreisel verbunden sind zeichnen einfacher Linie
if kreisel_verbunden == 2: if kreisel_verbunden == 2:
start = x +dx, y + dy,upper_hoehe_gefaehlle start = x +dx, y + dy,upper_hoehe_gefaehlle
ende = x -dx, y - dy,lower_hoehe_gefaehlle ende = x -dx, y - dy,lower_hoehe_gefaehlle
@@ -396,7 +417,7 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v
hight_position = "lower" hight_position = "lower"
else: else:
hight_position = "higher" hight_position = "higher"
# Erstellung der Rotation
if gefaelle == "oben": if gefaelle == "oben":
rotation = 0 rotation = 0
elif gefaelle == "unten" : elif gefaelle == "unten" :
@@ -433,7 +454,7 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v
gefaelle_objekt.h0 = lower_hoehe_gefaehlle gefaelle_objekt.h0 = lower_hoehe_gefaehlle
rotation = rotation -180 rotation = rotation -180
gefaelle_objekt.drehung = rotation gefaelle_objekt.drehung = rotation
# Schauen ob die Gefällestruktur mit einer Kurve verbunden ist und deswegen ein Motor und oder eine Umlenkstation braucht
block_Vario_Umlenkstation_500mm, block_Vario_Motorstation_500mm, blockname_motor_links, blockname_umlenk_links = block_methoden.rotatate_and_left_motor_umlenk(doc, lib_doc,config) block_Vario_Umlenkstation_500mm, block_Vario_Motorstation_500mm, blockname_motor_links, blockname_umlenk_links = block_methoden.rotatate_and_left_motor_umlenk(doc, lib_doc,config)
hat_zusatz = Gefaehllestrecke.Gefaellestrecke.hat_motor_umlenk_station(gefaelle_objekt, gefaellestrecke_nachbarn) hat_zusatz = Gefaehllestrecke.Gefaellestrecke.hat_motor_umlenk_station(gefaelle_objekt, gefaellestrecke_nachbarn)
hat_motor_0 = hat_zusatz.get("hat_motor_0") hat_motor_0 = hat_zusatz.get("hat_motor_0")
@@ -446,7 +467,7 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v
motor_gerade = hat_zusatz.get("motor_gerade") motor_gerade = hat_zusatz.get("motor_gerade")
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}_{umlenk_gerade}_{motor_gerade}" 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}_{umlenk_gerade}_{motor_gerade}"
# behandlung der Gefällestrecke falls es keine Vario Kurve hat
if hat_motor_0 == False or hat_umlenk_0 == False or hat_motor_1 == False or hat_umlenk_1 == False: if hat_motor_0 == False or hat_umlenk_0 == False or hat_motor_1 == False or hat_umlenk_1 == False:
dx = halbe_laenge *math.sin(winkel * -1) dx = halbe_laenge *math.sin(winkel * -1)
dy = halbe_laenge * math.cos(winkel) dy = halbe_laenge * math.cos(winkel)
@@ -455,6 +476,7 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v
a= msp.add_line(start,ende) a= msp.add_line(start,ende)
a.dxf.layer = "6-SP" a.dxf.layer = "6-SP"
return return
# Behandlung falls es mit einer odr zwei Vario kurve verbunden ist
if blockname not in doc.blocks: if blockname not in doc.blocks:
block = doc.blocks.new(name=blockname,base_point = (0,0,0)) block = doc.blocks.new(name=blockname,base_point = (0,0,0))
dy = halbe_laenge * math.cos(0) dy = halbe_laenge * math.cos(0)
@@ -472,6 +494,7 @@ def anzahl_seperatoren_oder_scan(msp, x, y, doc, lib_doc, klassen_objekt, hoehe,
"""Importiert alle seperatoren und/oder scanner für das nötige objekt""" """Importiert alle seperatoren und/oder scanner für das nötige objekt"""
separatoren = klassen_objekt.anzahl_separatoren separatoren = klassen_objekt.anzahl_separatoren
scanner = klassen_objekt.anzahl_scanner scanner = klassen_objekt.anzahl_scanner
# Schauen welche Ausrichtung das Objekt hat, damit man die Separtoren unbd Scanner nicht in das Objekt tut
if rotation == 0 or rotation == -180: if rotation == 0 or rotation == -180:
ausrichtung = "V" ausrichtung = "V"
else: else:
@@ -573,7 +596,7 @@ def handle_ils_2_0_variofoerderer(msp, teileid, merkmale, x, y, doc, lib_doc, ve
ein_kreisel_höher = True ein_kreisel_höher = True
else: else:
ein_kreisel_höher = False ein_kreisel_höher = False
mit_horizontal_verbunden = horizontale_ausrichtung(x, y, voerder_richtung, rotation, x0_eckrad, y0_eckrad) mit_horizontal_verbunden = VarioFoerderer.VarioFoerderer.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}") 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}") 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: if blockname not in doc.blocks:
@@ -629,7 +652,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 # 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 # None als string für späteren vergleich
mit_horizontal_verbunden = horizontale_ausrichtung(x, y, voerder_richtung, rotation, x0_kreisel, y0_kreisel) mit_horizontal_verbunden = VarioFoerderer.VarioFoerderer.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 ) 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: if am_kreisel == 1:
# Erstellung der blockname für wenn die Motorstation rechts und links # Erstellung der blockname für wenn die Motorstation rechts und links
@@ -847,30 +870,7 @@ def handle_ils_2_0_variofoerderer(msp, teileid, merkmale, x, y, doc, lib_doc, ve
if merkmale.get("Motorseite")== "rechts": if merkmale.get("Motorseite")== "rechts":
msp.add_blockref(blockname,(x,y,hoehe_vario),dxfattribs={"rotation": rotation}) 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): 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""" """Erstellt eine Angetriebene Kurve (Förderer Kurve) in der neuen Dxf"""