diff --git a/lib/plant2dxf.py b/lib/plant2dxf.py index f1e467b..61d1aa3 100644 --- a/lib/plant2dxf.py +++ b/lib/plant2dxf.py @@ -17,6 +17,7 @@ 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 +import copy # --------------------------------------------------------- CFG-Leser für shapes.cfg @@ -88,9 +89,8 @@ def import_block(block_name: str, from_doc, to_doc, winkel = None) -> None: - Stellt sicher, dass benutzte Layer im Ziel existieren (mit Eigenschaften) - Übernimmt Basis­punkt und Block-Layer, falls vorhanden """ - - - if (block_name in to_doc.blocks): + + if ((block_name in to_doc.blocks)): return if block_name not in from_doc.blocks: raise ValueError(f"Block '{block_name}' nicht in Bibliothek gefunden.") @@ -126,14 +126,34 @@ def import_block(block_name: str, from_doc, to_doc, winkel = None) -> None: pass for ent in src: - if winkel != None: - - rotation_matrix = Matrix44.axis_rotate(Y_AXIS, winkel) - ent.transform(rotation_matrix) + copy = ent.copy() if ent.dxftype() == "INSERT": - import_block(ent.dxf.name,from_doc, to_doc,None) - tgt.add_entity(ent.copy()) + import_block(ent.dxf.name,from_doc, to_doc,None) + tgt.add_entity(copy) + +def dreh_block(block_name: str, from_doc, to_doc, winkel) : + """Importiert Blockdefinition block_name von from_doc nach to_doc. + + - Kopiert alle Entities des Blocks + - Stellt sicher, dass benutzte Layer im Ziel existieren (mit Eigenschaften) + - Übernimmt Basis­punkt und Block-Layer, falls vorhanden + """ + + dreh_block_name = block_name +f"_{math.degrees(winkel)}" + if (dreh_block_name in to_doc.blocks): + return dreh_block_name + block_zwischen = to_doc.blocks.new(name=block_name + f"aaa_{winkel}", base_point=(0,0,0)) + block = to_doc.blocks.new(name=dreh_block_name, base_point=(0,0,0)) + rotation_matrix = Matrix44.axis_rotate(Y_AXIS, winkel) + + block_zwischen.add_blockref(block_name,(0,0,0)) + for e in block_zwischen: + copy = e.copy() + copy.transform(rotation_matrix) + block.add_entity(copy) + return dreh_block_name + def berechne_hoehe(csv_path, logger=None): @@ -297,7 +317,7 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v doc.layers.add(name="6-SP", color=7) verbunden_am_einen = False - am_kreisel = 0 + richtung2 ="DEFAULT" unterschiedlich = False asoffset = float(config.get("ILS 2.0 Gefällestrecke", "asoffset")) @@ -313,6 +333,7 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v drehung0 =gefaellestrecke_nachbarn.get("Drehung0") x0_kreisel = float(gefaellestrecke_nachbarn.get("x0")) y0_kreisel = float(gefaellestrecke_nachbarn.get("y0")) + hoehe0 = float(gefaellestrecke_nachbarn.get("Hoehe0")) richtung0 = float(gefaellestrecke_nachbarn.get("rotation0")) richtung_rad0= math.radians(richtung0) @@ -322,15 +343,12 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v laenge = float(laenge_m) * 1000 # Meter → mm except ValueError: laenge = 10000 - 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),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) + + + halbe_laenge = laenge / 2 - winkel = math.radians(float(merkmale.get("Drehung"))) + rotation= float(merkmale.get("Drehung")) + winkel = math.radians(float(rotation)) dx = halbe_laenge *math.sin(winkel * -1) dy = halbe_laenge * math.cos(winkel) @@ -339,147 +357,26 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v hoehe2 = upper_hoehe_gefaehlle upper_hoehe_gefaehlle = lower_hoehe_gefaehlle lower_hoehe_gefaehlle = hoehe2 + winkel = winkel -180 - if upper_hoehe_gefaehlle == hoehe0: - hight = "higher" - if richtung0 == 90.0 or richtung0 ==270: - richtung0= "Vertikal" - if x0_kreisel < x: - start_floor = (math.floor(x +dx ), math.floor(y + dy ),lower_hoehe_gefaehlle) - ende_floor = (math.floor(x -dx), math.floor(y - dy ) ,upper_hoehe_gefaehlle) - start_round = (round(x +dx ), round(y + dy ),lower_hoehe_gefaehlle) - ende_round= (round(x -dx), round(y - dy ) ,upper_hoehe_gefaehlle) - gefaelle = "links" - else: - 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) - gefaelle = "rechts" - else: - richtung0 = "Horinzontal" - if y0_kreisel < y: - start_floor = (math.floor(x +dx ), math.floor(y + dy ),lower_hoehe_gefaehlle) - ende_floor = (math.floor(x -dx), math.floor(y - dy ) ,upper_hoehe_gefaehlle) - start_round = (round(x +dx ), round(y + dy ),lower_hoehe_gefaehlle) - ende_round= (round(x -dx), round(y - dy ) ,upper_hoehe_gefaehlle) - gefaelle = "links" - gefaelle = "unten" - else: - 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) - gefaelle = "links" - gefaelle = "oben" - else: - hight = "lower" - if richtung0 == 90.0 or richtung0 ==270: - richtung0= "Vertikal" - if x0_kreisel < x: - 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) - gefaelle = "rechts" - else: - start_floor = (math.floor(x +dx ), math.floor(y + dy ),lower_hoehe_gefaehlle) - ende_floor = (math.floor(x -dx), math.floor(y - dy ) ,upper_hoehe_gefaehlle) - start_round = (round(x +dx ), round(y + dy ),lower_hoehe_gefaehlle) - ende_round= (round(x -dx), round(y - dy ) ,upper_hoehe_gefaehlle) - gefaelle = "links" - else: - richtung0 = "Horinzontal" - if y0_kreisel < y: - 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) - gefaelle = "links" - gefaelle = "oben" - else: - start_floor = (math.floor(x +dx ), math.floor(y + dy ),lower_hoehe_gefaehlle) - ende_floor = (math.floor(x -dx), math.floor(y - dy ) ,upper_hoehe_gefaehlle) - start_round = (round(x +dx ), round(y + dy ),lower_hoehe_gefaehlle) - ende_round= (round(x -dx), round(y - dy ) ,upper_hoehe_gefaehlle) - gefaelle = "links" - gefaelle = "unten" - 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( (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 - start = x +dx, y + dy,start_floor[2] - ende = x -dx, y - dy,ende_floor[2] + 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) + if am_kreisel == 1: + start = x +dx, y + dy,upper_hoehe_gefaehlle + ende = x -dx, y - dy,lower_hoehe_gefaehlle line =msp.add_line(start,ende) line.dxf.layer = "6-SP" return verbunden_am_einen = True - blockname = f"Ils_2.0_Gefaellestrecke_{laenge}_{drehung0}_{gefaelle}_{verbunden_am_einen}_{hight}" - if gefaelle == "oben": - rotation = 0 - elif gefaelle == "unten" : - rotation = 180 - elif gefaelle == "links" : - rotation = 90 - elif gefaelle == "rechts" : - rotation = 270 + if upper_hoehe_gefaehlle == hoehe0: + hight ="higher" + else: + hight = "lower" + + blockname = f"Ils_2.0_Gefaellestrecke_{laenge}_{drehung0}_{hoehe_gefaehlle}_{verbunden_am_einen}_{hight}" + erstellung_gefaelle_block_verbunenden_am_einen(x, y, doc, lib_doc, asoffset, esoffset, upper_hoehe_gefaehlle, lower_hoehe_gefaehlle, hoehe_gefaehlle, drehung0, laenge, blockname,hight) blockref_layer = get_layer(doc, lib_doc, blockname) bref =msp.add_blockref(blockname,(x,y,hoehe_gefaehlle),dxfattribs={"rotation": rotation, "layer": blockref_layer}) @@ -497,6 +394,16 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v elif "Drehung0" in gefaellestrecke_nachbarn and "Drehung1" in gefaellestrecke_nachbarn: + winkel = math.radians(float(merkmale.get("Drehung"))) + + laenge_m = merkmale.get("Länge in Meter", "10").replace(",", ".") + try: + laenge = float(laenge_m) * 1000 # Meter → mm + except ValueError: + laenge = 10000 + halbe_laenge = laenge / 2 + dx = halbe_laenge *math.sin(winkel * -1) + dy = halbe_laenge * math.cos(winkel) drehung0 =gefaellestrecke_nachbarn.get("Drehung0") drehung1 = gefaellestrecke_nachbarn.get("Drehung1") hoehe0 = gefaellestrecke_nachbarn.get("Hoehe0") @@ -512,140 +419,13 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v richtung_rad1 = math.radians(richtung1) abstand0 = float(gefaellestrecke_nachbarn.get("abstand0")) * 1000 abstand1 = float(gefaellestrecke_nachbarn.get("abstand1")) * 1000 - kreisel_verbunden = 0 - laenge_m = merkmale.get("Länge in Meter", "10").replace(",", ".") - try: - laenge = float(laenge_m) * 1000 # Meter → mm - except ValueError: - laenge = 10000 + + + #ausrechnung position kreisel - 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)) - - 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)) - winkel = math.radians(float(merkmale.get("Drehung"))) - # berechnung der geraden einmal abgerunden und einmal gerunden zur negirung des offsets - halbe_laenge = laenge / 2 - dx = halbe_laenge *math.sin(winkel * -1) - dy = halbe_laenge * math.cos(winkel) - 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 - - - # 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( (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 + 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) # 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: @@ -665,53 +445,8 @@ 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 ) - - # setzung von richtung2 auf vertikal oder horizontal je nach dem welche orientierung der kreisel hat mit dem man am kreisel verbunden ist - 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" - else: - richtung2 = "Horinzontal" - unterschiedlich = True #Berechnung des Gefälles if hoehe0 > hoehe1: @@ -844,26 +579,25 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v line.dxf.layer = "6-SP" + + def handle_ils_2_0_variofoerderer(msp, teileid, merkmale, x, y, doc, lib_doc, verbose, symbols, strecken_nachbarn,config): + + + + + if "VARIO" not in doc.layers: doc.layers.add(name="VARIO", color=3) voerder_richtung = merkmale.get("Förderrichtung") winkel = int(merkmale.get("Winkel")) verbunden_am_einen = False - am_kreisel = 0 + erster_kreisel_höher = False ein_kreisel_höher = False richtung2 ="DEFAULT" unterschiedlich = False asoffset = float(config.get("ILS 2.0 Gefällestrecke", "asoffset")) esoffset = float(config.get("ILS 2.0 Gefällestrecke", "esoffset")) - umlenk_motor_offset = tuple(float(x) for x in(config.get("ILS 2.0 Variofoerderer","Umlenkstation")).split(",")) - block_Vario_Umlenkstation_500mm ="Vario_Umlenkstation_500mm" - block_Vario_Motorstation_500mm = "Vario_Motorstation_500mm" - import_block( block_Vario_Motorstation_500mm, lib_doc, doc,math.radians(3)) - import_block( block_Vario_Umlenkstation_500mm , lib_doc, doc,math.radians(3)) - - - upper_hoehe_vario= float(merkmale.get("Höhe Ende")) *1000 lower_hoehe_vario = float(merkmale.get("Höhe Anfang")) *1000 @@ -879,10 +613,65 @@ def handle_ils_2_0_variofoerderer(msp, teileid, merkmale, x, y, doc, lib_doc, ve gefaellestrecke_vario = nachbarn break laenge = float(merkmale.get("Länge in Meter")) *1000 + if upper_hoehe_vario == gefaellestrecke_vario.get("Hoehe0"): + ein_kreisel_höher = True if "Drehung0" in gefaellestrecke_vario and "Drehung1" not in gefaellestrecke_vario: + halbe_laenge = laenge / 2 + zwischen_winkel = float(merkmale.get("Drehung")) + richtung_rad = math.radians(zwischen_winkel) + dx = halbe_laenge * math.sin(-1 *richtung_rad) + dy = halbe_laenge * math.cos(richtung_rad) drehung0 = gefaellestrecke_vario.get("Drehung0") - if upper_hoehe_vario == gefaellestrecke_vario.get("Hoehe0"): - ein_kreisel_höher = True + + abstand0 = float(gefaellestrecke_vario.get("abstand0")) * 1000 + x0_kreisel = float(gefaellestrecke_vario.get("x0")) + y0_kreisel = float(gefaellestrecke_vario.get("y0")) + richtung0 = float(gefaellestrecke_vario.get("rotation0")) + richtung_rad0= math.radians(richtung0) + + 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) + if am_kreisel == 1: + blockname = (f"Vario_Foerderer_{winkel}_{voerder_richtung}_{laenge}_{hoehe_vario}_rechts_{ein_kreisel_höher}_{drehung0}_True") + block_name_links = (f"Vario_Foerderer_{winkel}_{voerder_richtung}_{laenge}_{hoehe_vario}_links_{ein_kreisel_höher}_{drehung0}_True") + if blockname in doc.blocks: + 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 + 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) + if ein_kreisel_höher == True: + + l = (start[0],start[1],upper_hoehe_vario) + m = (start[0],start[1] - 500*math.cos(math.radians(3)),upper_hoehe_vario +500* math.sin(math.radians(3))) + + line = Line.new(dxfattribs={"start": l,"end":m }) + copy= line.copy() + copy.translate(-x,-y,-hoehe_vario) + block_vario.add_entity(copy) + start = start[0], start[1] - math.cos(math.radians(3)) *500, start[2] +500* math.sin(math.radians(3)) + else: + l = (ende[0],ende[1],lower_hoehe_vario) + m = (ende[0],ende[1] + 500*math.cos(math.radians(3)) ,lower_hoehe_vario - 500* math.sin(math.radians(3))) + ende = ende[0], ende[1] + math.cos(math.radians(3)) *500, ende[2] - 500* math.sin(math.radians(3)) + line = Line.new(dxfattribs={"start": l,"end":m }) + copy= line.copy() + copy.translate(-x,-y,-hoehe_vario) + block_vario.add_entity(copy) + vario_erstellung(merkmale, x, y, doc, lib_doc, config, winkel, hoehe_vario, laenge, block_vario,block_name_links, start, ende) + 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 + + + blockname = (f"Vario_Foerderer_{winkel}_{voerder_richtung}_{laenge}_{hoehe_vario}_rechts_{ein_kreisel_höher}_{drehung0}") block_name_links = (f"Vario_Foerderer_{winkel}_{voerder_richtung}_{laenge}_{hoehe_vario}_links_{ein_kreisel_höher}_{drehung0}") if blockname in doc.blocks: @@ -894,43 +683,149 @@ def handle_ils_2_0_variofoerderer(msp, teileid, merkmale, x, y, doc, lib_doc, ve return block_vario = doc.blocks.new(blockname, base_point=(0,0,0)) start, ende =erstellung_gefaelle_block_verbunenden_am_einen(x, y, doc, lib_doc, asoffset, esoffset, upper_hoehe_vario, lower_hoehe_vario, hoehe_vario, drehung0, laenge, blockname,None ,block_vario, voerder_richtung, ein_kreisel_höher) - if blockname not in doc.blocks or block_name_links not in doc.blocks: - vario_erstellung(merkmale, x, y, doc, lib_doc, config, winkel, umlenk_motor_offset, block_Vario_Umlenkstation_500mm, block_Vario_Motorstation_500mm, hoehe_vario, laenge, block_vario,block_name_links, start, ende) + vario_erstellung(merkmale, x, y, doc, lib_doc, config, winkel, hoehe_vario, laenge, block_vario,block_name_links, start, ende) if merkmale.get("Motorseite")== "links": msp.add_blockref(block_name_links,(x,y,hoehe_vario),dxfattribs={"rotation": rotation}) if merkmale.get("Motorseite")== "rechts": msp.add_blockref(blockname,(x,y,hoehe_vario),dxfattribs={"rotation": rotation}) elif "Drehung0" in gefaellestrecke_vario and "Drehung1" in gefaellestrecke_vario: - + halbe_laenge = laenge / 2 + zwischen_winkel = float(merkmale.get("Drehung")) + richtung_rad = math.radians(zwischen_winkel) + dx = halbe_laenge * math.sin(-1 *richtung_rad) + dy = halbe_laenge * math.cos(richtung_rad) drehung0 = gefaellestrecke_vario.get("Drehung0") - drehung1 = gefaellestrecke_vario.get("Drehung1") + abstand0 = float(gefaellestrecke_vario.get("abstand0")) * 1000 + x0_kreisel = float(gefaellestrecke_vario.get("x0")) + y0_kreisel = float(gefaellestrecke_vario.get("y0")) + richtung0 = float(gefaellestrecke_vario.get("rotation0")) + richtung_rad0= math.radians(richtung0) kreisel_hoehe0 =float(gefaellestrecke_vario.get("Hoehe0")) + + drehung1 = gefaellestrecke_vario.get("Drehung1") + abstand1 = float(gefaellestrecke_vario.get("abstand1")) * 1000 + x1_kreisel = float(gefaellestrecke_vario.get("x1")) + y1_kreisel = float(gefaellestrecke_vario.get("y1")) + richtung1 = float(gefaellestrecke_vario.get("rotation1")) + richtung_rad1= math.radians(richtung1) kreisel_hoehe1= float(gefaellestrecke_vario.get("Hoehe1")) - if float(gefaellestrecke_vario.get("Hoehe0"))< float(gefaellestrecke_vario.get("Hoehe1")): + if kreisel_hoehe0< kreisel_hoehe1: drehung2 = drehung0 drehung0 = drehung1 drehung1 = drehung2 - blockname = (f"Vario_Foerderer_{winkel}_{voerder_richtung}_{laenge}_{hoehe_vario}_rechts_{drehung0}_{drehung1}") - block_name_links = (f"Vario_Foerderer_{winkel}_{voerder_richtung}_{laenge}_{hoehe_vario}_links_{drehung0}_{drehung1}") - - - if blockname in doc.blocks: + 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) + + if kreisel_verbunden == 2: + blockname = (f"Vario_Foerderer_{winkel}_{voerder_richtung}_{laenge}_{hoehe_vario}_rechts_{drehung0}_{drehung1}_{kreisel_verbunden}") + block_name_links = (f"Vario_Foerderer_{winkel}_{voerder_richtung}_{laenge}_{hoehe_vario}_links_{drehung0}_{drehung1}_{kreisel_verbunden}") + if blockname in doc.blocks: + 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 + 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) + l = (start[0],start[1],upper_hoehe_vario) + m = (start[0],start[1] - 500*math.cos(math.radians(3)),upper_hoehe_vario +500* math.sin(math.radians(3))) + + line = Line.new(dxfattribs={"start": l,"end":m }) + copy= line.copy() + copy.translate(-x,-y,-hoehe_vario) + block_vario.add_entity(copy) + start = start[0], start[1] - math.cos(math.radians(3)) *500, start[2] +500* math.sin(math.radians(3)) + + l = (ende[0],ende[1],lower_hoehe_vario) + m = (ende[0],ende[1] + 500*math.cos(math.radians(3)) ,lower_hoehe_vario - 500* math.sin(math.radians(3))) + ende = ende[0], ende[1] + math.cos(math.radians(3)) *500, ende[2] - 500* math.sin(math.radians(3)) + line = Line.new(dxfattribs={"start": l,"end":m }) + copy= line.copy() + copy.translate(-x,-y,-hoehe_vario) + block_vario.add_entity(copy) + vario_erstellung(merkmale, x, y, doc, lib_doc, config, winkel, hoehe_vario, laenge, block_vario,block_name_links, start, ende) + 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 am_kreisel != 0: + if upper_hoehe_vario == kreisel_hoehe0: + erster_kreisel_höher = True + else: + erster_kreisel_höher = False + blockname = (f"Vario_Foerderer_{winkel}_{voerder_richtung}_{laenge}_{hoehe_vario}_rechts_{am_kreisel}_{erster_kreisel_höher}_drehung0_{drehung1}") + block_name_links = (f"Vario_Foerderer_{winkel}_{voerder_richtung}_{laenge}_{hoehe_vario}_links_{am_kreisel}_{erster_kreisel_höher}_{drehung0}_{drehung1}") + + + if blockname in doc.blocks: + 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 + block_vario = doc.blocks.new(blockname, base_point=(0,0,0)) + dy_true = halbe_laenge * math.cos(0) + if am_kreisel == 1 and erster_kreisel_höher == True or am_kreisel == 2 and erster_kreisel_höher == False: + start = (x, y + dy_true,upper_hoehe_vario) + ende = (x,y -dy_true,lower_hoehe_vario) + l = (start[0],start[1],upper_hoehe_vario) + m = (start[0],start[1] - 500*math.cos(math.radians(3)),upper_hoehe_vario +500* math.sin(math.radians(3))) + + line = Line.new(dxfattribs={"start": l,"end":m }) + copy= line.copy() + copy.translate(-x,-y,-hoehe_vario) + block_vario.add_entity(copy) + y1 = start[1] - math.cos(math.radians(3)) *500 + z1 = start[2] +500* math.sin(math.radians(3)) + else: + start = (x, y + dy_true,upper_hoehe_vario) + ende = (x,y -dy_true,lower_hoehe_vario) + l = (ende[0],ende[1],lower_hoehe_vario) + m = (ende[0],ende[1] + 500*math.cos(math.radians(3)) ,lower_hoehe_vario - 500* math.sin(math.radians(3))) + + line = Line.new(dxfattribs={"start": l,"end":m }) + copy= line.copy() + copy.translate(-x,-y,-hoehe_vario) + block_vario.add_entity(copy) + y1 = ende[1] + math.cos(math.radians(3)) *500 + z1 = ende[2] -500* math.sin(math.radians(3)) + start, ende =gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoehe_vario, lower_hoehe_vario, hoehe_vario,richtung2, drehung0, drehung1, laenge, None, blockname,block_vario,voerder_richtung, am_kreisel,erster_kreisel_höher,y1,z1) + vario_erstellung(merkmale, x, y, doc, lib_doc, config, winkel, hoehe_vario, laenge, block_vario,block_name_links, start, ende) 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 - block_vario = doc.blocks.new(blockname, base_point=(0,0,0)) - start, ende =gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoehe_vario, lower_hoehe_vario, hoehe_vario,richtung2, drehung0, drehung1, laenge, None, blockname,block_vario,voerder_richtung) - if blockname not in doc.blocks or block_name_links not in doc.blocks: - vario_erstellung(merkmale, x, y, doc, lib_doc, config, winkel, umlenk_motor_offset, block_Vario_Umlenkstation_500mm, block_Vario_Motorstation_500mm, hoehe_vario, laenge, block_vario,block_name_links, start, ende) - if merkmale.get("Motorseite")== "links": - msp.add_blockref(block_name_links,(x,y,hoehe_vario),dxfattribs={"rotation": rotation}) - elif merkmale.get("Motorseite")== "rechts": - msp.add_blockref(blockname,(x,y,hoehe_vario),dxfattribs={"rotation": rotation}) + + + + else: + blockname = (f"Vario_Foerderer_{winkel}_{voerder_richtung}_{laenge}_{hoehe_vario}_rechts_{drehung0}_{drehung1}") + block_name_links = (f"Vario_Foerderer_{winkel}_{voerder_richtung}_{laenge}_{hoehe_vario}_links_{drehung0}_{drehung1}") + + + if blockname in doc.blocks: + 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 + + block_vario = doc.blocks.new(blockname, base_point=(0,0,0)) + start, ende =gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoehe_vario, lower_hoehe_vario, hoehe_vario,richtung2, drehung0, drehung1, laenge, None, blockname,block_vario,voerder_richtung) + if blockname not in doc.blocks or block_name_links not in doc.blocks: + vario_erstellung(merkmale, x, y, doc, lib_doc, config, winkel, hoehe_vario, laenge, block_vario,block_name_links, start, ende) + if merkmale.get("Motorseite")== "links": + msp.add_blockref(block_name_links,(x,y,hoehe_vario),dxfattribs={"rotation": rotation}) + elif merkmale.get("Motorseite")== "rechts": + msp.add_blockref(blockname,(x,y,hoehe_vario),dxfattribs={"rotation": rotation}) else: halbe_laenge = laenge/2 dy = halbe_laenge * math.cos(0) @@ -953,14 +848,19 @@ def handle_ils_2_0_variofoerderer(msp, teileid, merkmale, x, y, doc, lib_doc, ve if blockname not in doc.blocks or block_name_links not in doc.blocks: - vario_erstellung(merkmale, x, y, doc, lib_doc, config, winkel, umlenk_motor_offset, block_Vario_Umlenkstation_500mm, block_Vario_Motorstation_500mm, hoehe_vario, laenge, block,block_name_links, start, ende) + vario_erstellung(merkmale, x, y, doc, lib_doc, config, winkel, hoehe_vario, laenge, block,block_name_links, start, ende) if merkmale.get("Motorseite")== "links": msp.add_blockref(block_name_links,(x,y,hoehe_vario),dxfattribs={"rotation": rotation}) if merkmale.get("Motorseite")== "rechts": msp.add_blockref(blockname,(x,y,hoehe_vario),dxfattribs={"rotation": rotation}) -def vario_erstellung(merkmale, x, y, doc, lib_doc, config, winkel, umlenk_motor_offset, block_Vario_Umlenkstation_500mm, block_Vario_Motorstation_500mm, hoehe_vario, laenge, block,block_name_links, start, ende): +def vario_erstellung(merkmale, x, y, doc, lib_doc, config, winkel, hoehe_vario, laenge, block,block_name_links, start, ende): if merkmale.get("Förderrichtung") == "Auf": + umlenk_motor_offset = tuple(float(x) for x in(config.get("ILS 2.0 Variofoerderer","Umlenkstation")).split(",")) + block_Vario_Umlenkstation_500mm ="Vario_Umlenkstation_500mm" + block_Vario_Motorstation_500mm = "Vario_Motorstation_500mm" + import_block( block_Vario_Motorstation_500mm, lib_doc, doc,math.radians(3)) + import_block( block_Vario_Umlenkstation_500mm , lib_doc, doc,math.radians(3)) block.add_blockref(block_Vario_Umlenkstation_500mm,(ende[0] -x,ende[1] -y + umlenk_motor_offset[0]/2,ende[2] - hoehe_vario -umlenk_motor_offset[2]/2 ),dxfattribs={"rotation": 90}) ende = (ende[0] ,ende[1] + umlenk_motor_offset[0],ende[2] -umlenk_motor_offset[2]) block.add_blockref(block_Vario_Motorstation_500mm, (start[0]-x , start[1] - umlenk_motor_offset[0]/2 -y ,start[2] - hoehe_vario +umlenk_motor_offset[2]/2),dxfattribs={"rotation": 90}) @@ -1199,6 +1099,16 @@ def vario_erstellung(merkmale, x, y, doc, lib_doc, config, winkel, umlenk_motor_ else: clone.transform(matrix) block_links.add_entity(clone) + else: + umlenk_motor_offset = tuple(float(x) for x in(config.get("ILS 2.0 Variofoerderer","Umlenkstation")).split(",")) + block_Vario_Umlenkstation_500mm ="Vario_Umlenkstation_500mm" + block_Vario_Motorstation_500mm = "Vario_Motorstation_500mm" + import_block( block_Vario_Motorstation_500mm, lib_doc, doc,math.radians(3)) + import_block( block_Vario_Umlenkstation_500mm , lib_doc, doc,math.radians(3)) + block.add_blockref(block_Vario_Umlenkstation_500mm,(ende[0] -x,ende[1] -y + umlenk_motor_offset[0]/2,ende[2] - hoehe_vario -umlenk_motor_offset[2]/2 ),dxfattribs={"rotation": 90}) + ende = (ende[0] ,ende[1] + umlenk_motor_offset[0],ende[2] -umlenk_motor_offset[2]) + block.add_blockref(block_Vario_Motorstation_500mm, (start[0]-x , start[1] - umlenk_motor_offset[0]/2 -y ,start[2] - hoehe_vario +umlenk_motor_offset[2]/2),dxfattribs={"rotation": 90}) + start = start[0] , start[1] - umlenk_motor_offset[0],start[2] +umlenk_motor_offset[2] def handle_omniflo(msp, teileid, merkmale, x, y, doc, lib_doc, verbose, symbols, strecken_nachbarn,config): @@ -1265,14 +1175,14 @@ def handle_omniflo(msp, teileid, merkmale, x, y, doc, lib_doc, verbose, symbols, def erstellung_gefaelle_block_verbunenden_am_einen(x, y, doc, lib_doc, asoffset, esoffset, upper_hoehe_gefaehlle, lower_hoehe_gefaehlle, hoehe_gefaehlle, drehung0, laenge,blockname, hight = None, block_vario = None, vario_richtung = None, verbungden_höher = None): + halbe_laenge = laenge / 2 + dy = halbe_laenge * math.cos(0) if ((blockname not in doc.blocks and 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") ): if hight != None: block = doc.blocks.new(name=blockname, base_point=(0,0,0)) - halbe_laenge = laenge / 2 block_as = "200000241_AS-Element_90_rechts" import_block(block_as,lib_doc,doc) - dy = halbe_laenge * math.cos(0) if vario_richtung != None: start = (x , y + dy ,upper_hoehe_gefaehlle) ende = (x , y - dy + asoffset ,lower_hoehe_gefaehlle) @@ -1296,9 +1206,7 @@ def erstellung_gefaelle_block_verbunenden_am_einen(x, y, doc, lib_doc, asoffset, import_block(block_es,lib_doc,doc) if hight != None: block = doc.blocks.new(name=blockname, base_point=(0,0,0)) - halbe_laenge = laenge / 2 - dy = halbe_laenge * math.cos(0) if vario_richtung != None: start = (x , y + dy-esoffset,upper_hoehe_gefaehlle) ende = (x , y - dy ,lower_hoehe_gefaehlle) @@ -1323,9 +1231,7 @@ def erstellung_gefaelle_block_verbunenden_am_einen(x, y, doc, lib_doc, asoffset, import_block(block_as,lib_doc,doc) if hight != None: block = doc.blocks.new(name=blockname, base_point=(0,0,0)) - halbe_laenge = laenge / 2 - dy = halbe_laenge * math.cos(0) if vario_richtung != None: start = (x , y + dy ,upper_hoehe_gefaehlle) ende = (x , y - dy + asoffset,lower_hoehe_gefaehlle) @@ -1350,9 +1256,7 @@ def erstellung_gefaelle_block_verbunenden_am_einen(x, y, doc, lib_doc, asoffset, block = doc.blocks.new(name=blockname, base_point=(0,0,0)) block_es = "400102632_ES-Element_90_links" import_block(block_es,lib_doc,doc) - halbe_laenge = laenge / 2 - - dy = halbe_laenge * math.cos(0) + if vario_richtung != None: start = (x , y + dy-esoffset ,upper_hoehe_gefaehlle) ende = (x , y - dy,lower_hoehe_gefaehlle) @@ -1376,21 +1280,29 @@ def erstellung_gefaelle_block_verbunenden_am_einen(x, y, doc, lib_doc, asoffset, block.add_blockref(block_es, (ende[0]-x ,ende[1]-esoffset -y,ende[2] - hoehe_gefaehlle),dxfattribs={"rotation": 180}) -def gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoehe_gefaehlle, lower_hoehe_gefaehlle, hoehe_gefaehlle,richtung2, drehung0, drehung1, laenge, hight_position, blockname, block_vario = None,voerder_richtung = None): +def gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoehe_gefaehlle, lower_hoehe_gefaehlle, hoehe_gefaehlle,richtung2, drehung0, drehung1, laenge, hight_position, blockname, 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 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": - if blockname not in doc.blocks and drehung0 == "GUZS" and drehung1 == "GUZS" and hight_position == "higher" : - - block = doc.blocks.new(name=blockname, base_point=(0,0,0)) + if richtung2!= "DEFAULT" or am_kreisel != None: + if (blockname not in doc.blocks and drehung0 == "GUZS" and drehung1 == "GUZS" and hight_position == "higher") or (((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"): + block_es = "200000146_ES-Element_90_rechts" + import_block(block_es,lib_doc,doc) + if am_kreisel == None: + block = doc.blocks.new(name=blockname, base_point=(0,0,0)) halbe_laenge = laenge / 2 dy = halbe_laenge * math.cos(0) - + if am_kreisel!= None: + start = (x , y+ dy - esoffset,upper_hoehe_gefaehlle) + ende = (x , y1 ,z1) + block_vario.add_blockref(block_es, (start[0]-x ,start[1]+esoffset-y ,start[2] -hoehe_gefaehlle),dxfattribs={"rotation": 180}) + return start,ende + + start = (x , y + dy,upper_hoehe_gefaehlle) ende = (x , y - dy + esoffset,lower_hoehe_gefaehlle) line = Line.new(dxfattribs={"start": start, "end": ende}) @@ -1399,16 +1311,24 @@ def gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoeh copy.translate(-x,-y,-hoehe_gefaehlle) block.add_entity(copy) - block_es = "200000146_ES-Element_90_rechts" - import_block(block_es,lib_doc,doc) + block.add_blockref(block_es, (ende[0]-x ,ende[1]-esoffset-y ,ende[2] -hoehe_gefaehlle)) - elif blockname not in doc.blocks and drehung0 == "GUZS" and drehung1 == "GUZS": - block = doc.blocks.new(name=blockname, base_point=(0,0,0)) + elif (blockname not in doc.blocks and drehung0 == "GUZS" and drehung1 == "GUZS") or (am_kreisel != None and drehung0 == "GUZS" and drehung1 == "GUZS"): + if am_kreisel == None: + block = doc.blocks.new(name=blockname, base_point=(0,0,0)) halbe_laenge = laenge / 2 + block_as = "200000241_AS-Element_90_rechts" + import_block(block_as,lib_doc,doc) dy = halbe_laenge * math.cos(0) - + if am_kreisel != None: + start = (x , y1 ,z1) + ende = (x , y - dy + asoffset,lower_hoehe_gefaehlle) + block_vario.add_blockref(block_as,(ende[0]-x ,ende[1]-asoffset -y,ende[2] -hoehe_gefaehlle), dxfattribs={"rotation": 180}) + return start,ende + + start = (x , y + dy - asoffset,upper_hoehe_gefaehlle) ende = (x , y - dy ,lower_hoehe_gefaehlle) line = Line.new(dxfattribs={"start": start, "end": ende}) @@ -1417,16 +1337,24 @@ def gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoeh copy.translate(-x,-y,-hoehe_gefaehlle) block.add_entity(copy) - block_as = "200000241_AS-Element_90_rechts" - import_block(block_as,lib_doc,doc) + block.add_blockref(block_as,(start[0]-x ,start[1]+asoffset -y,start[2] -hoehe_gefaehlle)) - elif blockname not in doc.blocks and ((drehung0 == "GUZS" and drehung1 == "UZS" and hight_position == "higher")): - block = doc.blocks.new(name=blockname, base_point=(0,0,0)) + elif ((blockname not in doc.blocks and (drehung0 == "GUZS" and drehung1 == "UZS" and hight_position == "higher"))or + ((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_es = "400102632_ES-Element_90_links" + import_block(block_es,lib_doc,doc) + if am_kreisel == None: + block = doc.blocks.new(name=blockname, base_point=(0,0,0)) halbe_laenge = laenge / 2 dy = halbe_laenge * math.cos(0) - + if am_kreisel != None: + start = (x , y + dy - esoffset,upper_hoehe_gefaehlle) + ende = (x , y1 ,z1) + block_vario.add_blockref(block_es,(start[0]-x ,start[1]+esoffset -y,start[2] - hoehe_gefaehlle)) + return start,ende + start = (x , y + dy ,upper_hoehe_gefaehlle) ende = (x , y - dy + esoffset,lower_hoehe_gefaehlle) line = Line.new(dxfattribs={"start": start, "end": ende}) @@ -1436,17 +1364,26 @@ def gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoeh copy.translate(-x,-y,-hoehe_gefaehlle) block.add_entity(copy) - block_es = "400102632_ES-Element_90_links" - import_block(block_es,lib_doc,doc) + block.add_blockref(block_es,(ende[0]-x ,ende[1]-esoffset -y,ende[2] - hoehe_gefaehlle), dxfattribs={"rotation": 180}) - 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)) + elif (blockname not in doc.blocks and (drehung0 == "UZS" and drehung1 == "GUZS" and hight_position == "lower")or + ((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_as = "200000241_AS-Element_90_rechts" + import_block(block_as,lib_doc,doc) + if am_kreisel == None: + block = doc.blocks.new(name=blockname, base_point=(0,0,0)) halbe_laenge = laenge / 2 dy = halbe_laenge * math.cos(0) - + if am_kreisel != None: + start = (x , y1,z1) + ende = (x , y - dy +asoffset,lower_hoehe_gefaehlle) + block_vario.add_blockref(block_as,(ende[0]-x ,ende[1]-asoffset -y,ende[2] - hoehe_gefaehlle),dxfattribs={"rotation": 180}) + return start,ende + start = (x , y + dy - asoffset,upper_hoehe_gefaehlle) - ende = (x , y - dy ,lower_hoehe_gefaehlle) + ende = (x , y1 - dy ,z1) line = Line.new(dxfattribs={"start": start, "end": ende}) line.dxf.layer = "6-SP" @@ -1454,15 +1391,24 @@ def gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoeh copy.translate(-x,-y,-hoehe_gefaehlle) block.add_entity(copy) - block_as = "200000241_AS-Element_90_rechts" - - import_block(block_as,lib_doc,doc) + block.add_blockref(block_as,(start[0]-x ,start[1]+asoffset -y,start[2] - hoehe_gefaehlle)) - 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)) + elif ((blockname not in doc.blocks and drehung0 == "UZS" and drehung1 == "UZS" and hight_position == "higher")or + (((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")): + if am_kreisel == None: + block = doc.blocks.new(name=blockname, base_point=(0,0,0)) halbe_laenge = laenge / 2 - + block_es = "400102632_ES-Element_90_links" + import_block(block_es,lib_doc,doc) dy = halbe_laenge * math.cos(0) + if am_kreisel != None: + + start = (x , y + dy - esoffset,upper_hoehe_gefaehlle) + ende = (x , y1,z1) + block_vario.add_blockref(block_es, (start[0]-x ,start[1]+esoffset -y,start[2] - hoehe_gefaehlle)) + return start,ende + + start = (x , y + dy ,upper_hoehe_gefaehlle) ende = (x , y - dy + esoffset,lower_hoehe_gefaehlle) line = Line.new(dxfattribs={"start": start, "end": ende}) @@ -1473,19 +1419,23 @@ def gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoeh copy.translate(-x ,-y,-hoehe_gefaehlle) block.add_entity(copy) - block_es = "400102632_ES-Element_90_links" - import_block(block_es,lib_doc,doc) - - - block.add_blockref(block_es, (ende[0]-x ,ende[1]-esoffset -y,ende[2] - hoehe_gefaehlle),dxfattribs={"rotation": 180}) - elif blockname not in doc.blocks and drehung0 == "UZS" and drehung1 == "UZS": - block = doc.blocks.new(name=blockname, base_point=(0,0,0)) + elif (((blockname not in doc.blocks and 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) + if am_kreisel == None: + block = doc.blocks.new(name=blockname, base_point=(0,0,0)) halbe_laenge = laenge / 2 dy = halbe_laenge * math.cos(0) - + if am_kreisel != None: + start = (x , y1,z1) + ende = (x , y - dy + asoffset,lower_hoehe_gefaehlle) + block_vario.add_blockref(block_as,(ende[0]-x ,ende[1]-asoffset -y,ende[2] - hoehe_gefaehlle)) + return start, ende + start = (x , y + dy - asoffset,upper_hoehe_gefaehlle) ende = (x , y - dy ,lower_hoehe_gefaehlle) line = Line.new(dxfattribs={"start": start, "end": ende}) @@ -1495,17 +1445,25 @@ def gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoeh copy.translate(-x ,-y,-hoehe_gefaehlle) block.add_entity(copy) - block_as = "200000217_AS-Element_90_links" - import_block(block_as,lib_doc,doc) + block.add_blockref(block_as,(start[0]-x ,start[1]+asoffset -y,start[2] - hoehe_gefaehlle),dxfattribs={"rotation": 180}) - 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)) + elif (blockname not in doc.blocks and ((drehung0 == "UZS" and drehung1 == "GUZS" and hight_position== "higher"))or + ((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 = "200000146_ES-Element_90_rechts" + import_block(block_es,lib_doc,doc) + if am_kreisel == None: + block = doc.blocks.new(name=blockname, base_point=(0,0,0)) halbe_laenge = laenge / 2 dy = halbe_laenge * math.cos(0) + if am_kreisel != None: + start = (x , y + dy - esoffset,z1) + ende = (x , y1 ,lower_hoehe_gefaehlle) + block_vario.add_blockref(block_es, (start[0]-x ,start[1]+esoffset -y,start[2] - hoehe_gefaehlle),dxfattribs={"rotation": 180}) + return start, ende start = (x , y + dy,upper_hoehe_gefaehlle) ende = (x , y - dy + esoffset,lower_hoehe_gefaehlle) @@ -1518,16 +1476,25 @@ def gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoeh copy.translate(-x ,-y,-hoehe_gefaehlle) block.add_entity(copy) - block_es = "200000146_ES-Element_90_rechts" - import_block(block_es,lib_doc,doc) + block.add_blockref(block_es, (ende[0]-x ,ende[1]-esoffset -y,ende[2] - hoehe_gefaehlle)) - elif blockname not in doc.blocks and (drehung0 == "GUZS" and drehung1 == "UZS" and hight_position == "lower"): - block = doc.blocks.new(name=blockname, base_point=(0,0,0)) + elif (blockname not in doc.blocks and (drehung0 == "GUZS" and drehung1 == "UZS" and hight_position == "lower")or + ((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" and hight_position == "lower")): + block_as = "200000217_AS-Element_90_links" + import_block(block_as,lib_doc,doc) + if am_kreisel == None: + block = doc.blocks.new(name=blockname, base_point=(0,0,0)) halbe_laenge = laenge / 2 dy = halbe_laenge * math.cos(0) - start = (x , y + dy - asoffset,upper_hoehe_gefaehlle) + if am_kreisel != None: + start = (x , y1,z1) + ende = (x , y - dy + asoffset ,lower_hoehe_gefaehlle) + block_vario.add_blockref(block_as,(ende[0]-x ,ende[1]-asoffset -y,ende[2] - hoehe_gefaehlle)) + return start, ende + + start = (x , y +dy - asoffset,upper_hoehe_gefaehlle) ende = (x , y - dy ,lower_hoehe_gefaehlle) line = Line.new(dxfattribs={"start": start, "end": ende}) line.dxf.layer = "6-SP" @@ -1536,8 +1503,7 @@ def gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoeh copy.translate(-x ,-y,-hoehe_gefaehlle) block.add_entity(copy) - block_as = "200000217_AS-Element_90_links" - import_block(block_as,lib_doc,doc) + block.add_blockref(block_as,(start[0]-x ,start[1]+asoffset -y,start[2] - hoehe_gefaehlle),dxfattribs={"rotation": 180}) #erstellung von den normalen gefällestrecken @@ -1673,6 +1639,178 @@ 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] - hoehe_gefaehlle),dxfattribs={"rotation": 180}) block.add_blockref(block_es, (ende[0]-x ,ende[1]-esoffset -y,ende[2] - hoehe_gefaehlle)) +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: src = lib_doc.blocks[blockname]