From acfa53b7224defe33f923ae090513c7680a01bb5 Mon Sep 17 00:00:00 2001
From: Paul Wolok
Date: Thu, 23 Oct 2025 12:38:12 +0200
Subject: [PATCH] =?UTF-8?q?die=20auf=20voerder=20kann=20man=20jetzt=20vert?=
=?UTF-8?q?ig=20stellen=20und=20eine=20neue=20Methode=20zur=20drehung=20de?=
=?UTF-8?q?r=20Bl=C3=B6cke=20wurde=20hinzugef=C3=BCgt?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
lib/plant2dxf.py | 972 +++++++++++++++++++++++++++--------------------
1 file changed, 555 insertions(+), 417 deletions(-)
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 Basispunkt 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 Basispunkt 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]