alle gefaellestrecken ausnahmen sind jetzt drinnen logik wenn kreis nicht mit zwei kreisel verbuden ist

This commit is contained in:
2025-10-07 09:01:27 +02:00
parent 04f3aa6cb6
commit 1f0ec6d687
+319 -213
View File
@@ -283,6 +283,7 @@ def handle_standard(msp, blocknames, teileid, x, y, lib_doc, doc, verbose):
def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, verbose, symbols, gefaellestrecken_nachbarn,config): def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, verbose, symbols, gefaellestrecken_nachbarn,config):
#Vorbereitung der attributen #Vorbereitung der attributen
am_kreisel = 0 am_kreisel = 0
richtung2 ="DEFAULT" richtung2 ="DEFAULT"
unterschiedlich = False unterschiedlich = False
@@ -295,223 +296,338 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v
if teileid == nachbarn.get("Id"): if teileid == nachbarn.get("Id"):
gefaellestrecke_nachbarn = nachbarn gefaellestrecke_nachbarn = nachbarn
break break
drehung0 =gefaellestrecke_nachbarn.get("Drehung0") if "Drehung0" in gefaellestrecke_nachbarn and "Drehung1" in gefaellestrecke_nachbarn:
drehung1 = gefaellestrecke_nachbarn.get("Drehung1") drehung0 =gefaellestrecke_nachbarn.get("Drehung0")
hoehe0 = gefaellestrecke_nachbarn.get("Hoehe0") drehung1 = gefaellestrecke_nachbarn.get("Drehung1")
hoehe1 = gefaellestrecke_nachbarn.get("Hoehe1") hoehe0 = gefaellestrecke_nachbarn.get("Hoehe0")
x0_kreisel = float(gefaellestrecke_nachbarn.get("x0")) hoehe1 = gefaellestrecke_nachbarn.get("Hoehe1")
y0_kreisel = float(gefaellestrecke_nachbarn.get("y0")) x0_kreisel = float(gefaellestrecke_nachbarn.get("x0"))
x1_kreisel = float(gefaellestrecke_nachbarn.get("x1")) y0_kreisel = float(gefaellestrecke_nachbarn.get("y0"))
y1_kreisel = float(gefaellestrecke_nachbarn.get("y1")) x1_kreisel = float(gefaellestrecke_nachbarn.get("x1"))
richtung0 = float(gefaellestrecke_nachbarn.get("rotation0")) y1_kreisel = float(gefaellestrecke_nachbarn.get("y1"))
richtung1 = float(gefaellestrecke_nachbarn.get("rotation1")) richtung0 = float(gefaellestrecke_nachbarn.get("rotation0"))
richtung2 ="DEFAULT" richtung1 = float(gefaellestrecke_nachbarn.get("rotation1"))
richtung_rad0= math.radians(richtung0) richtung2 ="DEFAULT"
richtung_rad1 = math.radians(richtung1) richtung_rad0= math.radians(richtung0)
abstand0 = float(gefaellestrecke_nachbarn.get("abstand0")) * 1000 richtung_rad1 = math.radians(richtung1)
abstand1 = float(gefaellestrecke_nachbarn.get("abstand1")) * 1000 abstand0 = float(gefaellestrecke_nachbarn.get("abstand0")) * 1000
kreisel_verbunden = 0 abstand1 = float(gefaellestrecke_nachbarn.get("abstand1")) * 1000
laenge_m = merkmale.get("Länge in Meter", "10").replace(",", ".") kreisel_verbunden = 0
try: laenge_m = merkmale.get("Länge in Meter", "10").replace(",", ".")
laenge = float(laenge_m) * 1000 # Meter → mm try:
except ValueError: laenge = float(laenge_m) * 1000 # Meter → mm
laenge = 10000 # F except ValueError:
laenge = 10000 # F
#ausrechnung position kreisel #ausrechnung position kreisel
halbabstand0 = abstand0 / 2 halbabstand0 = abstand0 / 2
dx0 = halbabstand0 * math.cos(richtung_rad0) dx0 = halbabstand0 * math.cos(richtung_rad0)
dy0 = halbabstand0 * math.sin(richtung_rad0) dy0 = halbabstand0 * math.sin(richtung_rad0)
pos0_0 = (round(x0_kreisel + dx0),round( y0_kreisel + dy0),hoehe0) pos0_0_floor= (math.floor(x0_kreisel + dx0),math.floor( y0_kreisel + dy0),hoehe0)
pos0_1 = (round(x0_kreisel- dx0),round( y0_kreisel- dy0), hoehe0) pos0_1_floor = (math.floor(x0_kreisel- dx0),math.floor( y0_kreisel- dy0), hoehe0)
pos0_0_round= (round(x0_kreisel + dx0),round( y0_kreisel + dy0),hoehe0)
pos0_1_round = (round(x0_kreisel- dx0),round( y0_kreisel- dy0), hoehe0)
halbabstand1 = abstand1 / 2 halbabstand1 = abstand1 / 2
dx1 = halbabstand1 * math.cos(richtung_rad1 ) dx1 = halbabstand1 * math.cos(richtung_rad1 )
dy1 = halbabstand1 * math.sin(richtung_rad1) dy1 = halbabstand1 * math.sin(richtung_rad1)
pos1_0 = (round(x1_kreisel + dx1), round(y1_kreisel + dy1), hoehe1) pos1_0_floor = (math.floor(x1_kreisel + dx1), math.floor(y1_kreisel + dy1), hoehe1)
pos1_1 = (round(x1_kreisel - dx1), round(y1_kreisel - dy1), hoehe1) pos1_1_floor = (math.floor(x1_kreisel - dx1), math.floor(y1_kreisel - dy1), hoehe1)
winkel = math.radians(float(merkmale.get("Drehung"))) pos1_0_round = (round(x1_kreisel + dx1), round(y1_kreisel + dy1), hoehe1)
pos1_1_round = (round(x1_kreisel - dx1), round(y1_kreisel - dy1), hoehe1)
winkel = math.radians(float(merkmale.get("Drehung")))
halbe_laenge = laenge / 2 halbe_laenge = laenge / 2
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)
start = (round(x +dx ), round(y + dy ),upper_hoehe_gefaehlle) start_floor = (math.floor(x +dx ), math.floor(y + dy ),upper_hoehe_gefaehlle)
ende = (round(x -dx), round(y - dy ) ,lower_hoehe_gefaehlle) ende_floor = (math.floor(x -dx), math.floor(y - dy ) ,lower_hoehe_gefaehlle)
abstand_fuer_kreis_start_x = start[0] +RADIUS, start[1] start_round = (round(x +dx ), round(y + dy ),upper_hoehe_gefaehlle)
abstand_gegen_kreis_start_x = start[0] -RADIUS, start[1] ende_round= (round(x -dx), round(y - dy ) ,lower_hoehe_gefaehlle)
abstand_fuer_kreis_start_y = start[0], start[1] + RADIUS abstand_fuer_kreis_start_x_floor = start_floor[0] +RADIUS, start_floor[1]
abstand_gegen_kreis_start_y = start[0], start[1] - RADIUS abstand_gegen_kreis_start_x_floor = start_floor[0] -RADIUS, start_floor[1]
abstand_fuer_kreis_ende_x= ende[0] + RADIUS, ende[1] abstand_fuer_kreis_start_y_floor = start_floor[0], start_floor[1] + RADIUS
abstand_gegen_kreis_ende_x= ende[0] - RADIUS, ende[1] abstand_gegen_kreis_start_y_floor = start_floor[0], start_floor[1] - RADIUS
abstand_fuer_kreis_ende_y = ende[0] , ende[1] + RADIUS abstand_fuer_kreis_ende_x_floor= ende_floor[0] + RADIUS, ende_floor[1]
abstand_gegen_kreis_ende_y = ende[0] , ende[1] - RADIUS 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]
if( (abstand_fuer_kreis_start_x[0] == pos0_0[0] and abstand_fuer_kreis_start_x[1] == pos0_0[1] )or abstand_gegen_kreis_start_x_round = start_round[0] -RADIUS, start_round[1]
( abstand_fuer_kreis_start_x[0] == pos0_1[0] and abstand_fuer_kreis_start_x[1] == pos0_1[1]) or abstand_fuer_kreis_start_y_round = start_round[0], start_round[1] + RADIUS
( abstand_gegen_kreis_start_x[0] == pos0_0[0] and abstand_gegen_kreis_start_x[1] == pos0_0[1]) or abstand_gegen_kreis_start_y_round = start_round[0], start_round[1] - RADIUS
( abstand_gegen_kreis_start_x[0] == pos0_1[0] and abstand_gegen_kreis_start_x[1] == pos0_1[1]) or abstand_fuer_kreis_ende_x_round= ende_round[0] + RADIUS, ende_round[1]
(abstand_fuer_kreis_ende_x[0] == pos0_0[0] and abstand_fuer_kreis_ende_x[1] == pos0_0[1] )or abstand_gegen_kreis_ende_x_round= ende_round[0] - RADIUS, ende_round[1]
( abstand_fuer_kreis_ende_x[0] == pos0_1[0] and abstand_fuer_kreis_ende_x[1] == pos0_1[1]) or abstand_fuer_kreis_ende_y_round = ende_round[0] , ende_round[1] + RADIUS
( abstand_gegen_kreis_ende_x[0] == pos0_0[0] and abstand_gegen_kreis_ende_x[1] == pos0_0[1]) or abstand_gegen_kreis_ende_y_round = ende_round[0] , ende_round[1] - RADIUS
( abstand_gegen_kreis_ende_x[0] == pos0_1[0] and abstand_gegen_kreis_ende_x[1] == pos0_1[1]) or
(abstand_fuer_kreis_start_y[0] == pos0_0[0] and abstand_fuer_kreis_start_y[1] == pos0_0[1] )or
( abstand_fuer_kreis_start_y[0] == pos0_1[0] and abstand_fuer_kreis_start_y[1] == pos0_1[1]) or
( abstand_gegen_kreis_start_y[0] == pos0_0[0] and abstand_gegen_kreis_start_y[1] == pos0_0[1]) or
( abstand_gegen_kreis_start_y[0] == pos0_1[0] and abstand_gegen_kreis_start_y[1] == pos0_1[1]) or
(abstand_fuer_kreis_ende_y[0] == pos0_0[0] and abstand_fuer_kreis_ende_y[1] == pos0_0[1] )or
( abstand_fuer_kreis_ende_y[0] == pos0_1[0] and abstand_fuer_kreis_ende_y[1] == pos0_1[1]) or
( abstand_gegen_kreis_ende_y[0] == pos0_0[0] and abstand_gegen_kreis_ende_y[1] == pos0_0[1]) or
( abstand_gegen_kreis_ende_y[0] == pos0_1[0] and abstand_gegen_kreis_ende_y[1] == pos0_1[1])
):
kreisel_verbunden = kreisel_verbunden +1
am_kreisel = 1
if( (abstand_fuer_kreis_start_x[0] == pos1_0[0] and abstand_fuer_kreis_start_x[1] == pos1_0[1] )or if( (abstand_fuer_kreis_start_x_floor[0] == pos0_0_floor[0] and abstand_fuer_kreis_start_x_floor[1] == pos0_0_floor[1] )or
( abstand_fuer_kreis_start_x[0] == pos1_1[0] and abstand_fuer_kreis_start_x[1] == pos1_1[1]) or ( abstand_fuer_kreis_start_x_floor[0] == pos0_1_floor[0] and abstand_fuer_kreis_start_x_floor[1] == pos0_1_floor[1]) or
( abstand_gegen_kreis_start_x[0] == pos1_0[0] and abstand_gegen_kreis_start_x[1] == pos1_0[1]) or ( abstand_gegen_kreis_start_x_floor[0] == pos0_0_floor[0] and abstand_gegen_kreis_start_x_floor[1] == pos0_0_floor[1]) or
( abstand_gegen_kreis_start_x[0] == pos1_1[0] and abstand_gegen_kreis_start_x[1] == pos1_1[1]) or ( abstand_gegen_kreis_start_x_floor[0] == pos0_1_floor[0] and abstand_gegen_kreis_start_x_floor[1] == pos0_1_floor[1]) or
(abstand_fuer_kreis_ende_x[0] == pos1_0[0] and abstand_fuer_kreis_ende_x[1] == pos1_0[1] )or (abstand_fuer_kreis_ende_x_floor[0] == pos0_0_floor[0] and abstand_fuer_kreis_ende_x_floor[1] == pos0_0_floor[1] )or
( abstand_fuer_kreis_ende_x[0] == pos1_1[0] and abstand_fuer_kreis_ende_x[1] == pos1_1[1]) or ( abstand_fuer_kreis_ende_x_floor[0] == pos0_1_floor[0] and abstand_fuer_kreis_ende_x_floor[1] == pos0_1_floor[1]) or
( abstand_gegen_kreis_ende_x[0] == pos1_0[0] and abstand_gegen_kreis_ende_x[1] == pos1_0[1]) or ( abstand_gegen_kreis_ende_x_floor[0] == pos0_0_floor[0] and abstand_gegen_kreis_ende_x_floor[1] == pos0_0_floor[1]) or
( abstand_gegen_kreis_ende_x[0] == pos1_1[0] and abstand_gegen_kreis_ende_x[1] == pos1_1[1]) or ( abstand_gegen_kreis_ende_x_floor[0] == pos0_1_floor[0] and abstand_gegen_kreis_ende_x_floor[1] == pos0_1_floor[1]) or
(abstand_fuer_kreis_start_y[0] == pos1_0[0] and abstand_fuer_kreis_start_y[1] == pos1_0[1] )or (abstand_fuer_kreis_start_y_floor[0] == pos0_0_floor[0] and abstand_fuer_kreis_start_y_floor[1] == pos0_0_floor[1] )or
( abstand_fuer_kreis_start_y[0] == pos1_1[0] and abstand_fuer_kreis_start_y[1] == pos1_1[1]) or ( abstand_fuer_kreis_start_y_floor[0] == pos0_1_floor[0] and abstand_fuer_kreis_start_y_floor[1] == pos0_1_floor[1]) or
( abstand_gegen_kreis_start_y[0] == pos1_0[0] and abstand_gegen_kreis_start_y[1] == pos1_0[1]) or ( abstand_gegen_kreis_start_y_floor[0] == pos0_0_floor[0] and abstand_gegen_kreis_start_y_floor[1] == pos0_0_floor[1]) or
( abstand_gegen_kreis_start_y[0] == pos1_1[0] and abstand_gegen_kreis_start_y[1] == pos1_1[1]) or ( abstand_gegen_kreis_start_y_floor[0] == pos0_1_floor[0] and abstand_gegen_kreis_start_y_floor[1] == pos0_1_floor[1]) or
(abstand_fuer_kreis_ende_y[0] == pos1_0[0] and abstand_fuer_kreis_ende_y[1] == pos1_0[1] )or (abstand_fuer_kreis_ende_y_floor[0] == pos0_0_floor[0] and abstand_fuer_kreis_ende_y_floor[1] == pos0_0_floor[1] )or
( abstand_fuer_kreis_ende_y[0] == pos1_1[0] and abstand_fuer_kreis_ende_y[1] == pos1_1[1]) or ( abstand_fuer_kreis_ende_y_floor[0] == pos0_1_floor[0] and abstand_fuer_kreis_ende_y_floor[1] == pos0_1_floor[1]) or
( abstand_gegen_kreis_ende_y[0] == pos1_0[0] and abstand_gegen_kreis_ende_y[1] == pos1_0[1]) or ( abstand_gegen_kreis_ende_y_floor[0] == pos0_0_floor[0] and abstand_gegen_kreis_ende_y_floor[1] == pos0_0_floor[1]) or
( abstand_gegen_kreis_ende_y[0] == pos1_1[0] and abstand_gegen_kreis_ende_y[1] == pos1_1[1]) ( abstand_gegen_kreis_ende_y_floor[0] == pos0_1_floor[0] and abstand_gegen_kreis_ende_y_floor[1] == pos0_1_floor[1]) or
): (abstand_fuer_kreis_start_x_round[0] == pos0_0_round[0] and abstand_fuer_kreis_start_x_round[1] == pos0_0_round[1] )or
( abstand_fuer_kreis_start_x_round[0] == pos0_1_round[0] and abstand_fuer_kreis_start_x_round[1] == pos0_1_round[1]) or
( abstand_gegen_kreis_start_x_round[0] == pos0_0_round[0] and abstand_gegen_kreis_start_x_round[1] == pos0_0_round[1]) or
( abstand_gegen_kreis_start_x_round[0] == pos0_1_round[0] and abstand_gegen_kreis_start_x_round[1] == pos0_1_round[1]) or
(abstand_fuer_kreis_ende_x_round[0] == pos0_0_round[0] and abstand_fuer_kreis_ende_x_round[1] == pos0_0_round[1] )or
( abstand_fuer_kreis_ende_x_round[0] == pos0_1_round[0] and abstand_fuer_kreis_ende_x_round[1] == pos0_1_round[1]) or
( abstand_gegen_kreis_ende_x_round[0] == pos0_0_round[0] and abstand_gegen_kreis_ende_x_round[1] == pos0_0_round[1]) or
( abstand_gegen_kreis_ende_x_round[0] == pos0_1_floor[0] and abstand_gegen_kreis_ende_x_round[1] == pos0_1_round[1]) or
(abstand_fuer_kreis_start_y_round[0] == pos0_0_round[0] and abstand_fuer_kreis_start_y_round[1] == pos0_0_round[1] )or
( abstand_fuer_kreis_start_y_round[0] == pos0_1_round[0] and abstand_fuer_kreis_start_y_round[1] == pos0_1_round[1]) or
( abstand_gegen_kreis_start_y_round[0] == pos0_0_round[0] and abstand_gegen_kreis_start_y_round[1] == pos0_0_round[1]) or
( abstand_gegen_kreis_start_y_round[0] == pos0_1_round[0] and abstand_gegen_kreis_start_y_round[1] == pos0_1_round[1]) or
(abstand_fuer_kreis_ende_y_round[0] == pos0_0_round[0] and abstand_fuer_kreis_ende_y_round[1] == pos0_0_round[1] )or
( abstand_fuer_kreis_ende_y_round[0] == pos0_1_round[0] and abstand_fuer_kreis_ende_y_round[1] == pos0_1_round[1]) or
( abstand_gegen_kreis_ende_y_round[0] == pos0_0_round[0] and abstand_gegen_kreis_ende_y_round[1] == pos0_0_round[1]) or
( abstand_gegen_kreis_ende_y_round[0] == pos0_1_round[0] and abstand_gegen_kreis_ende_y_round[1] == pos0_1_round[1])
):
kreisel_verbunden = kreisel_verbunden +1 kreisel_verbunden = kreisel_verbunden +1
am_kreisel = 2 am_kreisel = 1
if kreisel_verbunden == 2:
msp.add_line(start,ende)
return
if richtung0 == 90.0 or richtung0 ==270:
richtung0= "Vertikal"
else:
richtung0 = "Horinzontal"
if richtung1 == 90.0 or richtung1 ==270:
richtung1= "Vertikal"
else:
richtung1 = "Horinzontal"
if (richtung0 != richtung1 and kreisel_verbunden ==1): if( (abstand_fuer_kreis_start_x_floor[0] == pos1_0_floor[0] and abstand_fuer_kreis_start_x_floor[1] == pos1_0_floor[1] )or
if x-RADIUS == x0_kreisel or x+RADIUS == x0_kreisel or x-RADIUS == x1_kreisel or x+ RADIUS == x1_kreisel: (abstand_fuer_kreis_start_x_floor[0] == pos1_1_floor[0] and abstand_fuer_kreis_start_x_floor[1] == pos1_1_floor[1]) or
richtung2= "Horinzontal" (abstand_gegen_kreis_start_x_floor[0] == pos1_0_floor[0] and abstand_gegen_kreis_start_x_floor[1] == pos1_0_floor[1]) or
(abstand_gegen_kreis_start_x_floor[0] == pos1_1_floor[0] and abstand_gegen_kreis_start_x_floor[1] == pos1_1_floor[1]) or
(abstand_fuer_kreis_ende_x_floor[0] == pos1_0_floor[0] and abstand_fuer_kreis_ende_x_floor[1] == pos1_0_floor[1] )or
(abstand_fuer_kreis_ende_x_floor[0] == pos1_1_floor[0] and abstand_fuer_kreis_ende_x_floor[1] == pos1_1_floor[1]) or
(abstand_gegen_kreis_ende_x_floor[0] == pos1_0_floor[0] and abstand_gegen_kreis_ende_x_floor[1] == pos1_0_floor[1]) or
(abstand_gegen_kreis_ende_x_floor[0] == pos1_1_floor[0] and abstand_gegen_kreis_ende_x_floor[1] == pos1_1_floor[1]) or
(abstand_fuer_kreis_start_y_floor[0] == pos1_0_floor[0] and abstand_fuer_kreis_start_y_floor[1] == pos1_0_floor[1] )or
(abstand_fuer_kreis_start_y_floor[0] == pos1_1_floor[0] and abstand_fuer_kreis_start_y_floor[1] == pos1_1_floor[1]) or
(abstand_gegen_kreis_start_y_floor[0] == pos1_0_floor[0] and abstand_gegen_kreis_start_y_floor[1] == pos1_0_floor[1]) or
(abstand_gegen_kreis_start_y_floor[0] == pos1_1_floor[0] and abstand_gegen_kreis_start_y_floor[1] == pos1_1_floor[1]) or
(abstand_fuer_kreis_ende_y_floor[0] == pos1_0_floor[0] and abstand_fuer_kreis_ende_y_floor[1] == pos1_0_floor[1] )or
(abstand_fuer_kreis_ende_y_floor[0] == pos1_1_floor[0] and abstand_fuer_kreis_ende_y_floor[1] == pos1_1_floor[1]) or
(abstand_gegen_kreis_ende_y_floor[0] == pos1_0_floor[0] and abstand_gegen_kreis_ende_y_floor[1] == pos1_0_floor[1]) or
(abstand_gegen_kreis_ende_y_floor[0] == pos1_1_floor[0] and abstand_gegen_kreis_ende_y_floor[1] == pos1_1_floor[1]) or
(abstand_fuer_kreis_start_x_round[0] == pos1_0_round[0] and abstand_fuer_kreis_start_x_round[1] == pos1_0_round[1] )or
(abstand_fuer_kreis_start_x_round[0] == pos1_1_round[0] and abstand_fuer_kreis_start_x_round[1] == pos1_1_round[1]) or
(abstand_gegen_kreis_start_x_round[0] == pos1_0_round[0] and abstand_gegen_kreis_start_x_round[1] == pos1_0_round[1]) or
(abstand_gegen_kreis_start_x_round[0] == pos1_1_round[0] and abstand_gegen_kreis_start_x_round[1] == pos1_1_round[1]) or
(abstand_fuer_kreis_ende_x_round[0] == pos1_0_round[0] and abstand_fuer_kreis_ende_x_round[1] == pos1_0_round[1])or
(abstand_fuer_kreis_ende_x_round[0] == pos1_1_round[0] and abstand_fuer_kreis_ende_x_round[1] == pos1_1_round[1]) or
(abstand_gegen_kreis_ende_x_round[0] == pos1_0_round[0] and abstand_gegen_kreis_ende_x_round[1] == pos1_0_round[1]) or
(abstand_gegen_kreis_ende_x_round[0] == pos1_1_round[0] and abstand_gegen_kreis_ende_x_round[1] == pos1_1_round[1]) or
(abstand_fuer_kreis_start_y_round[0] == pos1_0_round[0] and abstand_fuer_kreis_start_y_round[1] == pos1_0_round[1] )or
(abstand_fuer_kreis_start_y_round[0] == pos1_1_round[0] and abstand_fuer_kreis_start_y_round[1] == pos1_1_round[1]) or
(abstand_gegen_kreis_start_y_round[0] == pos1_0_round[0] and abstand_gegen_kreis_start_y_round[1] == pos1_0_round[1]) or
(abstand_gegen_kreis_start_y_round[0] == pos1_1_round[0] and abstand_gegen_kreis_start_y_round[1] == pos1_1_round[1]) or
(abstand_fuer_kreis_ende_y_round[0] == pos1_0_round[0] and abstand_fuer_kreis_ende_y_round[1] == pos1_0_round[1] )or
(abstand_fuer_kreis_ende_y_round[0] == pos1_1_round[0] and abstand_fuer_kreis_ende_y_round[1] == pos1_1_round[1]) or
(abstand_gegen_kreis_ende_y_round[0] == pos1_0_round[0] and abstand_gegen_kreis_ende_y_round[1] == pos1_0_round[1]) or
(abstand_gegen_kreis_ende_y_round[0] == pos1_1_round[0] and abstand_gegen_kreis_ende_y_round[1] == pos1_1_round[1])
):
kreisel_verbunden = kreisel_verbunden +1
am_kreisel = 2
if kreisel_verbunden == 2:
start = x +dx, y + dy,upper_hoehe_gefaehlle
ende = x -dx, y - dy,lower_hoehe_gefaehlle
msp.add_line(start,ende)
return
if richtung0 == 90.0 or richtung0 ==270:
richtung0= "Vertikal"
else: else:
richtung2 = "Vertikal" richtung0 = "Horinzontal"
unterschiedlich = True if richtung1 == 90.0 or richtung1 ==270:
#Berechnung des Gefälles richtung1= "Vertikal"
if hoehe0 > hoehe1:
hight_position = "higher"
else:
hight_position = "lower"
if richtung2 == "DEFAULT":
if richtung0 == "Vertikal":
if x0_kreisel < x1_kreisel:
position = hight_position + "_links"
else:
position = hight_position + "_rechts"
else: else:
if y0_kreisel > y1_kreisel: richtung1 = "Horinzontal"
position = hight_position + "_higher"
else:
position = hight_position + "_lower"
if richtung0 == "Vertikal":
if position == "lower_rechts" or position == "higher_links":
gefaelle = "links" if (richtung0 != richtung1 and kreisel_verbunden ==1):
if(
(abstand_fuer_kreis_start_y_floor[0] == pos0_0_floor[0] and abstand_fuer_kreis_start_y_floor[1] == pos0_0_floor[1])or
(abstand_fuer_kreis_start_y_floor[0] == pos0_1_floor[0] and abstand_fuer_kreis_start_y_floor[1] == pos0_1_floor[1]) or
(abstand_gegen_kreis_start_y_floor[0] == pos0_0_floor[0] and abstand_gegen_kreis_start_y_floor[1] == pos0_0_floor[1]) or
(abstand_gegen_kreis_start_y_floor[0] == pos0_1_floor[0] and abstand_gegen_kreis_start_y_floor[1] == pos0_1_floor[1]) or
(abstand_fuer_kreis_ende_y_floor[0] == pos0_0_floor[0] and abstand_fuer_kreis_ende_y_floor[1] == pos0_0_floor[1])or
(abstand_fuer_kreis_ende_y_floor[0] == pos0_1_floor[0] and abstand_fuer_kreis_ende_y_floor[1] == pos0_1_floor[1]) or
(abstand_gegen_kreis_ende_y_floor[0] == pos0_0_floor[0] and abstand_gegen_kreis_ende_y_floor[1] == pos0_0_floor[1]) or
(abstand_gegen_kreis_ende_y_floor[0] == pos0_1_floor[0] and abstand_gegen_kreis_ende_y_floor[1] == pos0_1_floor[1]) or
(abstand_fuer_kreis_start_y_round[0] == pos0_0_round[0] and abstand_fuer_kreis_start_y_round[1] == pos0_0_round[1])or
(abstand_fuer_kreis_start_y_round[0] == pos0_1_round[0] and abstand_fuer_kreis_start_y_round[1] == pos0_1_round[1]) or
(abstand_gegen_kreis_start_y_round[0] == pos0_0_round[0] and abstand_gegen_kreis_start_y_round[1] == pos0_0_round[1]) or
(abstand_gegen_kreis_start_y_round[0] == pos0_1_round[0] and abstand_gegen_kreis_start_y_round[1] == pos0_1_round[1]) or
(abstand_fuer_kreis_ende_y_round[0] == pos0_0_round[0] and abstand_fuer_kreis_ende_y_round[1] == pos0_0_round[1])or
(abstand_fuer_kreis_ende_y_round[0] == pos0_1_round[0] and abstand_fuer_kreis_ende_y_round[1] == pos0_1_round[1]) or
(abstand_gegen_kreis_ende_y_round[0] == pos0_0_round[0] and abstand_gegen_kreis_ende_y_round[1] == pos0_0_round[1]) or
(abstand_gegen_kreis_ende_y_round[0] == pos0_1_round[0] and abstand_gegen_kreis_ende_y_round[1] == pos0_1_round[1]) or
(abstand_fuer_kreis_start_y_floor[0] == pos1_0_floor[0] and abstand_fuer_kreis_start_y_floor[1] == pos1_0_floor[1] )or
( abstand_fuer_kreis_start_y_floor[0] == pos1_1_floor[0] and abstand_fuer_kreis_start_y_floor[1] == pos1_1_floor[1]) or
( abstand_gegen_kreis_start_y_floor[0] == pos1_0_floor[0] and abstand_gegen_kreis_start_y_floor[1] == pos1_0_floor[1]) or
( abstand_gegen_kreis_start_y_floor[0] == pos1_1_floor[0] and abstand_gegen_kreis_start_y_floor[1] == pos1_1_floor[1]) or
(abstand_fuer_kreis_ende_y_floor[0] == pos1_0_floor[0] and abstand_fuer_kreis_ende_y_floor[1] == pos1_0_floor[1] )or
( abstand_fuer_kreis_ende_y_floor[0] == pos1_1_floor[0] and abstand_fuer_kreis_ende_y_floor[1] == pos1_1_floor[1]) or
( abstand_gegen_kreis_ende_y_floor[0] == pos1_0_floor[0] and abstand_gegen_kreis_ende_y_floor[1] == pos1_0_floor[1]) or
( abstand_gegen_kreis_ende_y_floor[0] == pos1_1_floor[0] and abstand_gegen_kreis_ende_y_floor[1] == pos1_1_floor[1]) or
(abstand_fuer_kreis_start_y_round[0] == pos1_0_round[0] and abstand_fuer_kreis_start_y_round[1] == pos1_0_round[1] )or
( abstand_fuer_kreis_start_y_round[0] == pos1_1_round[0] and abstand_fuer_kreis_start_y_round[1] == pos1_1_round[1]) or
( abstand_gegen_kreis_start_y_round[0] == pos1_0_round[0] and abstand_gegen_kreis_start_y_round[1] == pos1_0_round[1]) or
( abstand_gegen_kreis_start_y_round[0] == pos1_1_round[0] and abstand_gegen_kreis_start_y_round[1] == pos1_1_round[1]) or
(abstand_fuer_kreis_ende_y_round[0] == pos1_0_round[0] and abstand_fuer_kreis_ende_y_round[1] == pos1_0_round[1] )or
( abstand_fuer_kreis_ende_y_round[0] == pos1_1_round[0] and abstand_fuer_kreis_ende_y_round[1] == pos1_1_round[1]) or
( abstand_gegen_kreis_ende_y_round[0] == pos1_0_round[0] and abstand_gegen_kreis_ende_y_round[1] == pos1_0_round[1]) or
( abstand_gegen_kreis_ende_y_round[0] == pos1_1_round[0] and abstand_gegen_kreis_ende_y_round[1] == pos1_1_round[1])
):
richtung2= "Vertikal"
else: else:
gefaelle = "rechts" richtung2 = "Horinzontal"
elif richtung0 == "Horinzontal": unterschiedlich = True
if position == "lower_lower" or position == "higher_higher": #Berechnung des Gefälles
gefaelle = "oben"
if hoehe0 > hoehe1:
hight_position = "higher"
else:
hight_position = "lower"
if richtung2 == "DEFAULT":
if richtung0 == "Vertikal":
if x0_kreisel < x1_kreisel:
position = hight_position + "_links"
else: else:
gefaelle = "unten" position = hight_position + "_rechts"
if (position == "higher_rechts" or position == "lower_rechts" or position=="higher_lower" or position== "lower_lower") and drehung0 != drehung1:
drehung_2 = drehung0
drehung0 = drehung1
drehung1= drehung_2
if hight_position == "higher":
hight_position = "lower"
else: else:
hight_position = "higher" if y0_kreisel > y1_kreisel:
position = hight_position + "_higher"
else:
if richtung2 == "Vertikal":
if x0_kreisel < x1_kreisel:
position = hight_position + "_links"
else:
position = hight_position + "_rechts"
else:
if y0_kreisel > y1_kreisel:
position = hight_position + "_higher"
else:
position = hight_position + "_lower"
if richtung2 == "Vertikal":
if position == "lower_rechts" or position == "higher_links":
gefaelle = "links"
else:
gefaelle = "rechts"
elif richtung2 == "Horinzontal":
if position == "lower_lower" or position == "higher_higher":
gefaelle = "oben"
else: else:
gefaelle = "unten" position = hight_position + "_lower"
if richtung0 == "Vertikal":
if position == "lower_rechts" or position == "higher_links":
gefaelle = "links"
else:
gefaelle = "rechts"
elif richtung0 == "Horinzontal":
if position == "lower_lower" or position == "higher_higher":
gefaelle = "oben"
else:
gefaelle = "unten"
if kreisel_verbunden == 1 and am_kreisel ==2:
am_kreisel == 1
drehung_2 = drehung0
drehung0 = drehung1
drehung1= drehung_2
if hight_position == "higher":
hight_position = "lower"
else:
hight_position = "higher"
else:
if richtung2 == "Vertikal":
if x0_kreisel < x1_kreisel:
position = hight_position + "_links"
else:
position = hight_position + "_rechts"
else:
if y0_kreisel > y1_kreisel:
position = hight_position + "_higher"
else:
position = hight_position + "_lower"
if richtung2 == "Vertikal":
if position == "lower_rechts" or position == "higher_links":
gefaelle = "links"
else:
gefaelle = "rechts"
elif richtung2 == "Horinzontal":
if position == "lower_lower" or position == "higher_higher":
gefaelle = "oben"
else:
gefaelle = "unten"
if am_kreisel == 2:
if am_kreisel == 2:
if am_kreisel == 1:
am_kreisel =2
elif am_kreisel ==2:
am_kreisel = 1 am_kreisel = 1
drehung_2 = drehung0 drehung_2 = drehung0
drehung0 = drehung1 drehung0 = drehung1
drehung1= drehung_2 drehung1= drehung_2
if hight_position == "higher": if hight_position == "higher":
hight_position = "lower" hight_position = "lower"
else: else:
hight_position = "higher" hight_position = "higher"
# #
blockname = f"Ils_2.0_Gefaellestrecke_{laenge}_{hoehe_gefaehlle}_{drehung0}_{drehung1}_{hight_position}_{unterschiedlich}_{teileid}" blockname = f"Ils_2.0_Gefaellestrecke_{laenge}_{hoehe_gefaehlle}_{drehung0}_{drehung1}_{hight_position}_{unterschiedlich}_{teileid}"
if gefaelle == "oben": if gefaelle == "oben":
rotation = 0 rotation = 0
elif gefaelle == "unten" : elif gefaelle == "unten" :
rotation = 180 rotation = 180
elif gefaelle == "links" : elif gefaelle == "links" :
rotation = 90 rotation = 90
elif gefaelle == "rechts" : elif gefaelle == "rechts" :
rotation = 270 rotation = 270
gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoehe_gefaehlle, lower_hoehe_gefaehlle, hoehe_gefaehlle,richtung0,richtung1,richtung2, am_kreisel,drehung0, drehung1, laenge, hight_position, blockname)
if (kreisel_verbunden == 1 and richtung2 =="DEFAULT"):
richtung2 = richtung0
bref =msp.add_blockref(blockname,(x,y,hoehe_gefaehlle),dxfattribs={"rotation": rotation}) gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoehe_gefaehlle, lower_hoehe_gefaehlle, hoehe_gefaehlle,richtung0,richtung1,richtung2, am_kreisel,drehung0, drehung1, laenge, hight_position, blockname)
bref.add_attrib(
tag= "NAME",
text= merkmale.get("bezeichner"),
insert = (x,y)
bref =msp.add_blockref(blockname,(x,y,hoehe_gefaehlle),dxfattribs={"rotation": rotation})
) bref.add_attrib(
tag= "NAME",
text= merkmale.get("bezeichner"),
insert = (x,y)
)
else:
laenge_m = merkmale.get("Länge in Meter", "10").replace(",", ".")
try:
laenge = float(laenge_m) * 1000 # Meter → mm
except ValueError:
laenge = 10000
winkel = math.radians(float(merkmale.get("Drehung")))
halbe_laenge = laenge / 2
dx = halbe_laenge *math.sin(winkel * -1)
dy = halbe_laenge * math.cos(winkel)
start = x +dx, y + dy,upper_hoehe_gefaehlle
ende = x -dx, y - dy,lower_hoehe_gefaehlle
msp.add_line(start,ende)
def gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoehe_gefaehlle, lower_hoehe_gefaehlle, hoehe_gefaehlle,richtung0,richtun1,richtung2,am_kreisel, drehung0, drehung1, laenge, hight_position, blockname): def gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoehe_gefaehlle, lower_hoehe_gefaehlle, hoehe_gefaehlle,richtung0,richtun1,richtung2,am_kreisel, drehung0, drehung1, laenge, hight_position, blockname):
@@ -564,14 +680,14 @@ def gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoeh
block_es = "400102632_ES-Element_90_links" block_es = "400102632_ES-Element_90_links"
import_block(block_es,lib_doc,doc) import_block(block_es,lib_doc,doc)
block.add_blockref(block_as,(start[0]-x ,start[1]+asoffset -y,start[2])) block.add_blockref(block_es,(ende[0]-x ,ende[1]-esoffset -y,ende[2]), dxfattribs={"rotation": 180})
elif blockname not in doc.blocks and (drehung0 == "UZS" and drehung1 == "GUZS" and hight_position == "lower"): elif blockname not in doc.blocks and (drehung0 == "UZS" and drehung1 == "GUZS" and hight_position == "lower"):
block = doc.blocks.new(name=blockname, base_point=(0,0,0)) block = doc.blocks.new(name=blockname, base_point=(0,0,0))
halbe_laenge = laenge / 2 halbe_laenge = laenge / 2
dy = halbe_laenge * math.cos(0) dy = halbe_laenge * math.cos(0)
start = (x , y + dy - asoffset,upper_hoehe_gefaehlle) start = (x , y + dy - asoffset,upper_hoehe_gefaehlle)
ende = (x , y - dy + esoffset,lower_hoehe_gefaehlle) ende = (x , y - dy ,lower_hoehe_gefaehlle)
line = Line.new(dxfattribs={"start": start, "end": ende}) line = Line.new(dxfattribs={"start": start, "end": ende})
copy= line.copy() copy= line.copy()
@@ -579,14 +695,14 @@ def gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoeh
block.add_entity(copy) block.add_entity(copy)
block_as = "200000241_AS-Element_90_rechts" block_as = "200000241_AS-Element_90_rechts"
import_block(block_es,lib_doc,doc) import_block(block_as,lib_doc,doc)
block.add_blockref(block_as,(start[0]-x ,start[1]+asoffset -y,start[2])) block.add_blockref(block_as,(start[0]-x ,start[1]+asoffset -y,start[2]))
elif blockname not in doc.blocks and drehung0 == "UZS" and drehung1 == "UZS" and hight_position == "higher": elif blockname not in doc.blocks and drehung0 == "UZS" and drehung1 == "UZS" and hight_position == "higher":
block = doc.blocks.new(name=blockname, base_point=(0,0,0)) block = doc.blocks.new(name=blockname, base_point=(0,0,0))
halbe_laenge = laenge / 2 halbe_laenge = laenge / 2
dy = halbe_laenge * math.cos(0) dy = halbe_laenge * math.cos(0)
start = (x , y + dy - asoffset,upper_hoehe_gefaehlle) start = (x , y + dy ,upper_hoehe_gefaehlle)
ende = (x , y - dy + esoffset,lower_hoehe_gefaehlle) ende = (x , y - dy + esoffset,lower_hoehe_gefaehlle)
line = Line.new(dxfattribs={"start": start, "end": ende}) line = Line.new(dxfattribs={"start": start, "end": ende})
copy= line.copy() copy= line.copy()
@@ -607,7 +723,7 @@ def gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoeh
dy = halbe_laenge * math.cos(0) dy = halbe_laenge * math.cos(0)
start = (x , y + dy - asoffset,upper_hoehe_gefaehlle) start = (x , y + dy - asoffset,upper_hoehe_gefaehlle)
ende = (x , y - dy + esoffset,lower_hoehe_gefaehlle) ende = (x , y - dy ,lower_hoehe_gefaehlle)
line = Line.new(dxfattribs={"start": start, "end": ende}) line = Line.new(dxfattribs={"start": start, "end": ende})
copy= line.copy() copy= line.copy()
@@ -615,13 +731,16 @@ def gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoeh
block.add_entity(copy) block.add_entity(copy)
block_as = "200000217_AS-Element_90_links" block_as = "200000217_AS-Element_90_links"
import_block(block_as,lib_doc,doc) import_block(block_as,lib_doc,doc)
block.add_blockref(block_as,(start[0]-x ,start[1]+asoffset -y,start[2]),dxfattribs={"rotation": 180}) block.add_blockref(block_as,(start[0]-x ,start[1]+asoffset -y,start[2]),dxfattribs={"rotation": 180})
elif blockname not in doc.blocks and ((drehung0 == "UZS" and drehung1 == "GUZS" and hight_position== "higher")): elif blockname not in doc.blocks and ((drehung0 == "UZS" and drehung1 == "GUZS" and hight_position== "higher")):
block = doc.blocks.new(name=blockname, base_point=(0,0,0)) block = doc.blocks.new(name=blockname, base_point=(0,0,0))
halbe_laenge = laenge / 2 halbe_laenge = laenge / 2
dy = halbe_laenge * math.cos(0) dy = halbe_laenge * math.cos(0)
start = (x , y + dy - asoffset,upper_hoehe_gefaehlle) start = (x , y + dy,upper_hoehe_gefaehlle)
ende = (x , y - dy + esoffset,lower_hoehe_gefaehlle) ende = (x , y - dy + esoffset,lower_hoehe_gefaehlle)
line = Line.new(dxfattribs={"start": start, "end": ende}) line = Line.new(dxfattribs={"start": start, "end": ende})
copy= line.copy() copy= line.copy()
@@ -639,7 +758,7 @@ def gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoeh
dy = halbe_laenge * math.cos(0) dy = halbe_laenge * math.cos(0)
start = (x , y + dy - asoffset,upper_hoehe_gefaehlle) start = (x , y + dy - asoffset,upper_hoehe_gefaehlle)
ende = (x , y - dy + esoffset,lower_hoehe_gefaehlle) ende = (x , y - dy ,lower_hoehe_gefaehlle)
line = Line.new(dxfattribs={"start": start, "end": ende}) line = Line.new(dxfattribs={"start": start, "end": ende})
copy= line.copy() copy= line.copy()
@@ -650,16 +769,6 @@ def gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoeh
block.add_blockref(block_as,(start[0]-x ,start[1]+asoffset -y,start[2]),dxfattribs={"rotation": 180}) block.add_blockref(block_as,(start[0]-x ,start[1]+asoffset -y,start[2]),dxfattribs={"rotation": 180})
else: else:
if blockname not in doc.blocks and drehung0 == "GUZS" and drehung1 == "GUZS" : if blockname not in doc.blocks and drehung0 == "GUZS" and drehung1 == "GUZS" :
block = doc.blocks.new(name=blockname, base_point=(0,0,0)) block = doc.blocks.new(name=blockname, base_point=(0,0,0))
@@ -743,9 +852,6 @@ def gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoeh
block.add_blockref(block_es, (ende[0]-x ,ende[1]-esoffset -y,ende[2])) block.add_blockref(block_es, (ende[0]-x ,ende[1]-esoffset -y,ende[2]))
def handle_omniflo(msp, teileid, merkmale, x, y, doc, lib_doc, verbose, symbols, gefaellestrecken_nachbarn,config): def handle_omniflo(msp, teileid, merkmale, x, y, doc, lib_doc, verbose, symbols, gefaellestrecken_nachbarn,config):
""" """
Für Omniflo Gerade: zeichnet eine Linie (Mitte = Koordinate, Länge und Winkel aus Merkmale). Für Omniflo Gerade: zeichnet eine Linie (Mitte = Koordinate, Länge und Winkel aus Merkmale).