From 04f3aa6cb61f4181604e34e7f0270cce00b34411 Mon Sep 17 00:00:00 2001 From: Paul Wolok Date: Thu, 2 Oct 2025 15:26:31 +0200 Subject: [PATCH 1/4] gefaellegerade sonderfall --- lib/plant2dxf.py | 485 ++++++++++++++++++++++++++++++++++------------- 1 file changed, 350 insertions(+), 135 deletions(-) diff --git a/lib/plant2dxf.py b/lib/plant2dxf.py index 0c99585..4136611 100644 --- a/lib/plant2dxf.py +++ b/lib/plant2dxf.py @@ -283,6 +283,8 @@ def handle_standard(msp, blocknames, teileid, x, y, lib_doc, doc, verbose): def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, verbose, symbols, gefaellestrecken_nachbarn,config): #Vorbereitung der attributen + am_kreisel = 0 + richtung2 ="DEFAULT" unterschiedlich = False asoffset = float(config.get("ILS 2.0 Gefällestrecke", "asoffset")) esoffset = float(config.get("ILS 2.0 Gefällestrecke", "esoffset")) @@ -303,10 +305,11 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v y1_kreisel = float(gefaellestrecke_nachbarn.get("y1")) richtung0 = float(gefaellestrecke_nachbarn.get("rotation0")) richtung1 = float(gefaellestrecke_nachbarn.get("rotation1")) + richtung2 ="DEFAULT" richtung_rad0= math.radians(richtung0) richtung_rad1 = math.radians(richtung1) - abstand0 = float(gefaellestrecke_nachbarn.get("abstand0")) - abstand1 = float(gefaellestrecke_nachbarn.get("abstand1")) + 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: @@ -319,45 +322,75 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v halbabstand0 = abstand0 / 2 dx0 = halbabstand0 * math.cos(richtung_rad0) dy0 = halbabstand0 * math.sin(richtung_rad0) - pos0_0 = (round(x0_kreisel - dx0),round( y0_kreisel - dy0),hoehe0) - pos0_1 = (round(x0_kreisel+ dx0),round( y0_kreisel+ dy0), hoehe0) + pos0_0 = (round(x0_kreisel + dx0),round( y0_kreisel + dy0),hoehe0) + pos0_1 = (round(x0_kreisel- dx0),round( y0_kreisel- dy0), hoehe0) halbabstand1 = abstand1 / 2 - dx1 = halbabstand1 * math.cos(richtung_rad1) + dx1 = halbabstand1 * math.cos(richtung_rad1 ) dy1 = halbabstand1 * math.sin(richtung_rad1) - pos1_0 = (round(x1_kreisel - dx1), round(y1_kreisel - dy1), hoehe1) - pos1_1 = (round(x1_kreisel + dx1), round(y1_kreisel + dy1), hoehe1) + pos1_0 = (round(x1_kreisel + dx1), round(y1_kreisel + dy1), hoehe1) + pos1_1 = (round(x1_kreisel - dx1), round(y1_kreisel - dy1), hoehe1) winkel = math.radians(float(merkmale.get("Drehung"))) halbe_laenge = laenge / 2 dx = halbe_laenge *math.sin(winkel * -1) dy = halbe_laenge * math.cos(winkel) - start = (x +dx , y + dy ,upper_hoehe_gefaehlle) - ende = (x -dx, y - dy ,lower_hoehe_gefaehlle) - abstand_fuer_kreis_start = round(start[0] +RADIUS),round( start[1] + RADIUS) - abstand_gegen_kreis_start = round(start[0] - RADIUS), round(start[1] - RADIUS) - abstand_fuer_kreis_ende = round(ende[0] + RADIUS), round(ende[1] + RADIUS) - abstand_gegen_kreis_ende = round(ende[0] - RADIUS), round(ende[1] - RADIUS) + start = (round(x +dx ), round(y + dy ),upper_hoehe_gefaehlle) + ende = (round(x -dx), round(y - dy ) ,lower_hoehe_gefaehlle) + abstand_fuer_kreis_start_x = start[0] +RADIUS, start[1] + abstand_gegen_kreis_start_x = start[0] -RADIUS, start[1] + abstand_fuer_kreis_start_y = start[0], start[1] + RADIUS + abstand_gegen_kreis_start_y = start[0], start[1] - RADIUS + abstand_fuer_kreis_ende_x= ende[0] + RADIUS, ende[1] + abstand_gegen_kreis_ende_x= ende[0] - RADIUS, ende[1] + abstand_fuer_kreis_ende_y = ende[0] , ende[1] + RADIUS + abstand_gegen_kreis_ende_y = ende[0] , ende[1] - RADIUS - if( abstand_fuer_kreis_start[0] == pos0_0[0] or abstand_fuer_kreis_start[0] == pos0_1[0] or - abstand_fuer_kreis_start[1] == pos0_0[1] or abstand_fuer_kreis_start[1] == pos0_1[1] or - abstand_gegen_kreis_ende[0] == pos0_0[0] or abstand_gegen_kreis_ende[0] == pos0_1[0] or - abstand_gegen_kreis_ende[1] == pos0_0[1] or abstand_gegen_kreis_ende[1] == pos0_1[1] + if( (abstand_fuer_kreis_start_x[0] == pos0_0[0] and abstand_fuer_kreis_start_x[1] == pos0_0[1] )or + ( abstand_fuer_kreis_start_x[0] == pos0_1[0] and abstand_fuer_kreis_start_x[1] == pos0_1[1]) or + ( abstand_gegen_kreis_start_x[0] == pos0_0[0] and abstand_gegen_kreis_start_x[1] == pos0_0[1]) or + ( abstand_gegen_kreis_start_x[0] == pos0_1[0] and abstand_gegen_kreis_start_x[1] == pos0_1[1]) or + (abstand_fuer_kreis_ende_x[0] == pos0_0[0] and abstand_fuer_kreis_ende_x[1] == pos0_0[1] )or + ( abstand_fuer_kreis_ende_x[0] == pos0_1[0] and abstand_fuer_kreis_ende_x[1] == pos0_1[1]) or + ( abstand_gegen_kreis_ende_x[0] == pos0_0[0] and abstand_gegen_kreis_ende_x[1] == pos0_0[1]) or + ( abstand_gegen_kreis_ende_x[0] == pos0_1[0] and abstand_gegen_kreis_ende_x[1] == pos0_1[1]) or - - + (abstand_fuer_kreis_start_y[0] == pos0_0[0] and abstand_fuer_kreis_start_y[1] == pos0_0[1] )or + ( abstand_fuer_kreis_start_y[0] == pos0_1[0] and abstand_fuer_kreis_start_y[1] == pos0_1[1]) or + ( abstand_gegen_kreis_start_y[0] == pos0_0[0] and abstand_gegen_kreis_start_y[1] == pos0_0[1]) or + ( abstand_gegen_kreis_start_y[0] == pos0_1[0] and abstand_gegen_kreis_start_y[1] == pos0_1[1]) or + (abstand_fuer_kreis_ende_y[0] == pos0_0[0] and abstand_fuer_kreis_ende_y[1] == pos0_0[1] )or + ( abstand_fuer_kreis_ende_y[0] == pos0_1[0] and abstand_fuer_kreis_ende_y[1] == pos0_1[1]) or + ( abstand_gegen_kreis_ende_y[0] == pos0_0[0] and abstand_gegen_kreis_ende_y[1] == pos0_0[1]) or + ( abstand_gegen_kreis_ende_y[0] == pos0_1[0] and abstand_gegen_kreis_ende_y[1] == pos0_1[1]) ): kreisel_verbunden = kreisel_verbunden +1 + am_kreisel = 1 - if ( abstand_gegen_kreis_start[0] == pos1_0[0] or abstand_gegen_kreis_start[0] == pos1_1[0] or - abstand_gegen_kreis_start[1] == pos1_0[1] or abstand_gegen_kreis_start[1] == pos1_1[1]or - abstand_fuer_kreis_ende[0] == pos1_0[0] or abstand_fuer_kreis_ende[0] == pos1_1[0] or - abstand_fuer_kreis_ende[1] == pos1_0[1] or abstand_fuer_kreis_ende[1] == pos1_1[1] - ): + if( (abstand_fuer_kreis_start_x[0] == pos1_0[0] and abstand_fuer_kreis_start_x[1] == pos1_0[1] )or + ( abstand_fuer_kreis_start_x[0] == pos1_1[0] and abstand_fuer_kreis_start_x[1] == pos1_1[1]) or + ( abstand_gegen_kreis_start_x[0] == pos1_0[0] and abstand_gegen_kreis_start_x[1] == pos1_0[1]) or + ( abstand_gegen_kreis_start_x[0] == pos1_1[0] and abstand_gegen_kreis_start_x[1] == pos1_1[1]) or + (abstand_fuer_kreis_ende_x[0] == pos1_0[0] and abstand_fuer_kreis_ende_x[1] == pos1_0[1] )or + ( abstand_fuer_kreis_ende_x[0] == pos1_1[0] and abstand_fuer_kreis_ende_x[1] == pos1_1[1]) or + ( abstand_gegen_kreis_ende_x[0] == pos1_0[0] and abstand_gegen_kreis_ende_x[1] == pos1_0[1]) or + ( abstand_gegen_kreis_ende_x[0] == pos1_1[0] and abstand_gegen_kreis_ende_x[1] == pos1_1[1]) or + + (abstand_fuer_kreis_start_y[0] == pos1_0[0] and abstand_fuer_kreis_start_y[1] == pos1_0[1] )or + ( abstand_fuer_kreis_start_y[0] == pos1_1[0] and abstand_fuer_kreis_start_y[1] == pos1_1[1]) or + ( abstand_gegen_kreis_start_y[0] == pos1_0[0] and abstand_gegen_kreis_start_y[1] == pos1_0[1]) or + ( abstand_gegen_kreis_start_y[0] == pos1_1[0] and abstand_gegen_kreis_start_y[1] == pos1_1[1]) or + (abstand_fuer_kreis_ende_y[0] == pos1_0[0] and abstand_fuer_kreis_ende_y[1] == pos1_0[1] )or + ( abstand_fuer_kreis_ende_y[0] == pos1_1[0] and abstand_fuer_kreis_ende_y[1] == pos1_1[1]) or + ( abstand_gegen_kreis_ende_y[0] == pos1_0[0] and abstand_gegen_kreis_ende_y[1] == pos1_0[1]) or + ( abstand_gegen_kreis_ende_y[0] == pos1_1[0] and abstand_gegen_kreis_ende_y[1] == pos1_1[1]) + ): kreisel_verbunden = kreisel_verbunden +1 + am_kreisel = 2 + if kreisel_verbunden == 2: msp.add_line(start,ende) @@ -377,52 +410,88 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v - if (richtung0 != richtung1): + if (richtung0 != richtung1 and kreisel_verbunden ==1): if x-RADIUS == x0_kreisel or x+RADIUS == x0_kreisel or x-RADIUS == x1_kreisel or x+ RADIUS == x1_kreisel: - richtung0= "Horinzontal" + richtung2= "Horinzontal" else: - richtung1 = "Vertikal" + richtung2 = "Vertikal" unterschiedlich = True #Berechnung des Gefälles if hoehe0 > hoehe1: hight_position = "higher" else: hight_position = "lower" - if richtung0 == "Vertikal": - if x0_kreisel < x1_kreisel: - position = hight_position + "_links" - else: - position = hight_position + "_rechts" - else: - if y0_kreisel > y1_kreisel: - position = hight_position + "_higher" - else: - position = hight_position + "_lower" - - if richtung0 == "Vertikal": - if position == "lower_rechts" or position == "higher_links": - gefaelle = "links" - else: - gefaelle = "rechts" - elif richtung0 == "Horinzontal": - if position == "lower_lower" or position == "higher_higher": - gefaelle = "oben" + if richtung2 == "DEFAULT": + if richtung0 == "Vertikal": + if x0_kreisel < x1_kreisel: + position = hight_position + "_links" else: - gefaelle = "unten" - - #Wechsel das die Drehung des obersten oder des Linkens Kreisels immer als erstes steht für die Bennenung des Blockes und dem entsprchend - #wird auch getauscht in welcher hohen position es ist - if (position == "higher_rechts" or position == "lower_rechts" or position=="higher_lower" or position== "lower_lower") and drehung0 != drehung1: - drehung_2 = drehung0 - drehung0 = drehung1 - drehung1= drehung_2 - if hight_position == "higher": - hight_position = "lower" + position = hight_position + "_rechts" else: - hight_position = "higher" + if y0_kreisel > y1_kreisel: + position = hight_position + "_higher" + else: + position = hight_position + "_lower" + + if richtung0 == "Vertikal": + if position == "lower_rechts" or position == "higher_links": + gefaelle = "links" + else: + gefaelle = "rechts" + elif richtung0 == "Horinzontal": + if position == "lower_lower" or position == "higher_higher": + gefaelle = "oben" + else: + gefaelle = "unten" + + if (position == "higher_rechts" or position == "lower_rechts" or position=="higher_lower" or position== "lower_lower") and drehung0 != drehung1: + + drehung_2 = drehung0 + drehung0 = drehung1 + drehung1= drehung_2 + if hight_position == "higher": + hight_position = "lower" + else: + hight_position = "higher" + + else: + if richtung2 == "Vertikal": + if x0_kreisel < x1_kreisel: + position = hight_position + "_links" + else: + position = hight_position + "_rechts" + else: + if y0_kreisel > y1_kreisel: + position = hight_position + "_higher" + else: + position = hight_position + "_lower" + + if richtung2 == "Vertikal": + if position == "lower_rechts" or position == "higher_links": + gefaelle = "links" + else: + gefaelle = "rechts" + elif richtung2 == "Horinzontal": + if position == "lower_lower" or position == "higher_higher": + gefaelle = "oben" + else: + gefaelle = "unten" + + if am_kreisel == 2: + if am_kreisel == 1: + am_kreisel =2 + elif am_kreisel ==2: + am_kreisel = 1 + drehung_2 = drehung0 + drehung0 = drehung1 + drehung1= drehung_2 + if hight_position == "higher": + hight_position = "lower" + else: + hight_position = "higher" # - blockname = f"Ils_2.0_Gefaellestrecke_{laenge}_{hoehe_gefaehlle}_{drehung0}_{drehung1}_{hight_position}" + blockname = f"Ils_2.0_Gefaellestrecke_{laenge}_{hoehe_gefaehlle}_{drehung0}_{drehung1}_{hight_position}_{unterschiedlich}_{teileid}" if gefaelle == "oben": rotation = 0 elif gefaelle == "unten" : @@ -431,7 +500,7 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v rotation = 90 elif gefaelle == "rechts" : rotation = 270 - gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoehe_gefaehlle, lower_hoehe_gefaehlle, hoehe_gefaehlle, drehung0, drehung1, laenge, hight_position, blockname) + gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoehe_gefaehlle, lower_hoehe_gefaehlle, hoehe_gefaehlle,richtung0,richtung1,richtung2, am_kreisel,drehung0, drehung1, laenge, hight_position, blockname) @@ -445,89 +514,235 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v ) -def gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoehe_gefaehlle, lower_hoehe_gefaehlle, hoehe_gefaehlle, drehung0, drehung1, laenge, hight_position, blockname): - if blockname not in doc.blocks and drehung0 == "GUZS" and drehung1 == "GUZS" : - 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) - ende = (x , y - dy + esoffset,lower_hoehe_gefaehlle) - line = Line.new(dxfattribs={"start": start, "end": ende}) - copy= line.copy() - - 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_es = "200000146_ES-Element_90_rechts" - import_block(block_es,lib_doc,doc) - block.add_blockref(block_as,(start[0]-x ,start[1]+asoffset -y,start[2] -hoehe_gefaehlle)) - block.add_blockref(block_es, (ende[0]-x ,ende[1]-esoffset-y ,ende[2] -hoehe_gefaehlle)) - - if blockname not in doc.blocks and ((drehung0 == "GUZS" and drehung1 == "UZS" and hight_position == "higher")or (drehung0 == "UZS" and drehung1 == "GUZS" and hight_position == "lower")): - 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) - ende = (x , y - dy + esoffset,lower_hoehe_gefaehlle) - line = Line.new(dxfattribs={"start": start, "end": ende}) - copy= line.copy() - - 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_es = "400102632_ES-Element_90_links" - import_block(block_es,lib_doc,doc) - block.add_blockref(block_as,(start[0]-x ,start[1]+asoffset -y,start[2])) - block.add_blockref(block_es, (ende[0]-x ,ende[1]- esoffset-y,ende[2]),dxfattribs={"rotation": 180}) +def gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoehe_gefaehlle, lower_hoehe_gefaehlle, hoehe_gefaehlle,richtung0,richtun1,richtung2,am_kreisel, drehung0, drehung1, laenge, hight_position, blockname): + 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)) + halbe_laenge = laenge / 2 + + dy = halbe_laenge * math.cos(0) + start = (x , y + dy,upper_hoehe_gefaehlle) + ende = (x , y - dy + esoffset,lower_hoehe_gefaehlle) + line = Line.new(dxfattribs={"start": start, "end": ende}) + copy= line.copy() + + copy.translate(-x,-y,-hoehe_gefaehlle) + block.add_entity(copy) + block_es = "200000146_ES-Element_90_rechts" + import_block(block_es,lib_doc,doc) - if blockname not in doc.blocks and drehung0 == "UZS" and drehung1 == "UZS": - 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) - ende = (x , y - dy + esoffset,lower_hoehe_gefaehlle) - line = Line.new(dxfattribs={"start": start, "end": ende}) - copy= line.copy() - - 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_es = "400102632_ES-Element_90_links" - import_block(block_es,lib_doc,doc) - - block.add_blockref(block_as,(start[0]-x ,start[1]+asoffset -y,start[2]),dxfattribs={"rotation": 180}) - - block.add_blockref(block_es, (ende[0]-x ,ende[1]-esoffset -y,ende[2]),dxfattribs={"rotation": 180}) + 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)) + halbe_laenge = laenge / 2 + + dy = halbe_laenge * math.cos(0) + start = (x , y + dy - asoffset,upper_hoehe_gefaehlle) + ende = (x , y - dy ,lower_hoehe_gefaehlle) + line = Line.new(dxfattribs={"start": start, "end": ende}) + copy= line.copy() + + 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)) + halbe_laenge = laenge / 2 + + dy = halbe_laenge * math.cos(0) + start = (x , y + dy ,upper_hoehe_gefaehlle) + ende = (x , y - dy + esoffset,lower_hoehe_gefaehlle) + line = Line.new(dxfattribs={"start": start, "end": ende}) + copy= line.copy() + + copy.translate(-x,-y,-hoehe_gefaehlle) + block.add_entity(copy) - - if blockname not in doc.blocks and ((drehung0 == "UZS" and drehung1 == "GUZS" and hight_position== "higher")or (drehung0 == "GUZS" and drehung1 == "UZS" and hight_position == "lower")): - 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) + block.add_blockref(block_as,(start[0]-x ,start[1]+asoffset -y,start[2])) + elif blockname not in doc.blocks and (drehung0 == "UZS" and drehung1 == "GUZS" and hight_position == "lower"): + 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) + ende = (x , y - dy + esoffset,lower_hoehe_gefaehlle) + line = Line.new(dxfattribs={"start": start, "end": ende}) + copy= line.copy() + + copy.translate(-x,-y,-hoehe_gefaehlle) + block.add_entity(copy) + block_as = "200000241_AS-Element_90_rechts" - dy = halbe_laenge * math.cos(0) - start = (x , y + dy - asoffset,upper_hoehe_gefaehlle) - ende = (x , y - dy + esoffset,lower_hoehe_gefaehlle) - line = Line.new(dxfattribs={"start": start, "end": ende}) - copy= line.copy() + import_block(block_es,lib_doc,doc) + block.add_blockref(block_as,(start[0]-x ,start[1]+asoffset -y,start[2])) + elif blockname not in doc.blocks and drehung0 == "UZS" and drehung1 == "UZS" and hight_position == "higher": + 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) + ende = (x , y - dy + esoffset,lower_hoehe_gefaehlle) + line = Line.new(dxfattribs={"start": start, "end": ende}) + copy= line.copy() + + 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]),dxfattribs={"rotation": 180}) - 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_es = "200000146_ES-Element_90_rechts" - import_block(block_es,lib_doc,doc) + elif blockname not in doc.blocks and drehung0 == "UZS" and drehung1 == "UZS": + 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) + ende = (x , y - dy + esoffset,lower_hoehe_gefaehlle) + line = Line.new(dxfattribs={"start": start, "end": ende}) + copy= line.copy() + + 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]),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)) + halbe_laenge = laenge / 2 + + dy = halbe_laenge * math.cos(0) + start = (x , y + dy - asoffset,upper_hoehe_gefaehlle) + ende = (x , y - dy + esoffset,lower_hoehe_gefaehlle) + line = Line.new(dxfattribs={"start": start, "end": ende}) + copy= line.copy() + + 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_as,(start[0]-x ,start[1]+asoffset -y,start[2]),dxfattribs={"rotation": 180}) - - block.add_blockref(block_es, (ende[0]-x ,ende[1]-esoffset -y,ende[2])) + block.add_blockref(block_es, (ende[0]-x ,ende[1]-esoffset -y,ende[2])) + 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)) + halbe_laenge = laenge / 2 + + dy = halbe_laenge * math.cos(0) + start = (x , y + dy - asoffset,upper_hoehe_gefaehlle) + ende = (x , y - dy + esoffset,lower_hoehe_gefaehlle) + line = Line.new(dxfattribs={"start": start, "end": ende}) + copy= line.copy() + + 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]),dxfattribs={"rotation": 180}) + + + + + + + + + + + else: + if blockname not in doc.blocks and drehung0 == "GUZS" and drehung1 == "GUZS" : + 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) + ende = (x , y - dy + esoffset,lower_hoehe_gefaehlle) + line = Line.new(dxfattribs={"start": start, "end": ende}) + copy= line.copy() + + 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_es = "200000146_ES-Element_90_rechts" + import_block(block_es,lib_doc,doc) + block.add_blockref(block_as,(start[0]-x ,start[1]+asoffset -y,start[2] -hoehe_gefaehlle)) + 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 == "higher")or (drehung0 == "UZS" and drehung1 == "GUZS" and hight_position == "lower")): + 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) + ende = (x , y - dy + esoffset,lower_hoehe_gefaehlle) + line = Line.new(dxfattribs={"start": start, "end": ende}) + copy= line.copy() + + 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_es = "400102632_ES-Element_90_links" + import_block(block_es,lib_doc,doc) + block.add_blockref(block_as,(start[0]-x ,start[1]+asoffset -y,start[2])) + block.add_blockref(block_es, (ende[0]-x ,ende[1]- esoffset-y,ende[2]),dxfattribs={"rotation": 180}) + + + elif blockname not in doc.blocks and drehung0 == "UZS" and drehung1 == "UZS": + 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) + ende = (x , y - dy + esoffset,lower_hoehe_gefaehlle) + line = Line.new(dxfattribs={"start": start, "end": ende}) + copy= line.copy() + + 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_es = "400102632_ES-Element_90_links" + import_block(block_es,lib_doc,doc) + + block.add_blockref(block_as,(start[0]-x ,start[1]+asoffset -y,start[2]),dxfattribs={"rotation": 180}) + + block.add_blockref(block_es, (ende[0]-x ,ende[1]-esoffset -y,ende[2]),dxfattribs={"rotation": 180}) + + + elif blockname not in doc.blocks and ((drehung0 == "UZS" and drehung1 == "GUZS" and hight_position== "higher")or (drehung0 == "GUZS" and drehung1 == "UZS" and hight_position == "lower")): + 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) + ende = (x , y - dy + esoffset,lower_hoehe_gefaehlle) + line = Line.new(dxfattribs={"start": start, "end": ende}) + copy= line.copy() + + 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_es = "200000146_ES-Element_90_rechts" + import_block(block_es,lib_doc,doc) + + block.add_blockref(block_as,(start[0]-x ,start[1]+asoffset -y,start[2]),dxfattribs={"rotation": 180}) + + block.add_blockref(block_es, (ende[0]-x ,ende[1]-esoffset -y,ende[2])) + From 1f0ec6d687ff140158a8401de133e2e429a220a9 Mon Sep 17 00:00:00 2001 From: Paul Wolok Date: Tue, 7 Oct 2025 09:01:27 +0200 Subject: [PATCH 2/4] alle gefaellestrecken ausnahmen sind jetzt drinnen logik wenn kreis nicht mit zwei kreisel verbuden ist --- lib/plant2dxf.py | 532 ++++++++++++++++++++++++++++------------------- 1 file changed, 319 insertions(+), 213 deletions(-) diff --git a/lib/plant2dxf.py b/lib/plant2dxf.py index 4136611..b95fb7b 100644 --- a/lib/plant2dxf.py +++ b/lib/plant2dxf.py @@ -283,6 +283,7 @@ def handle_standard(msp, blocknames, teileid, x, y, lib_doc, doc, verbose): def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, verbose, symbols, gefaellestrecken_nachbarn,config): #Vorbereitung der attributen + am_kreisel = 0 richtung2 ="DEFAULT" unterschiedlich = False @@ -295,223 +296,338 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v if teileid == nachbarn.get("Id"): gefaellestrecke_nachbarn = nachbarn break - drehung0 =gefaellestrecke_nachbarn.get("Drehung0") - drehung1 = gefaellestrecke_nachbarn.get("Drehung1") - hoehe0 = gefaellestrecke_nachbarn.get("Hoehe0") - hoehe1 = gefaellestrecke_nachbarn.get("Hoehe1") - x0_kreisel = float(gefaellestrecke_nachbarn.get("x0")) - y0_kreisel = float(gefaellestrecke_nachbarn.get("y0")) - x1_kreisel = float(gefaellestrecke_nachbarn.get("x1")) - y1_kreisel = float(gefaellestrecke_nachbarn.get("y1")) - richtung0 = float(gefaellestrecke_nachbarn.get("rotation0")) - richtung1 = float(gefaellestrecke_nachbarn.get("rotation1")) - richtung2 ="DEFAULT" - richtung_rad0= math.radians(richtung0) - 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 # F + if "Drehung0" in gefaellestrecke_nachbarn and "Drehung1" in gefaellestrecke_nachbarn: + drehung0 =gefaellestrecke_nachbarn.get("Drehung0") + drehung1 = gefaellestrecke_nachbarn.get("Drehung1") + hoehe0 = gefaellestrecke_nachbarn.get("Hoehe0") + hoehe1 = gefaellestrecke_nachbarn.get("Hoehe1") + x0_kreisel = float(gefaellestrecke_nachbarn.get("x0")) + y0_kreisel = float(gefaellestrecke_nachbarn.get("y0")) + x1_kreisel = float(gefaellestrecke_nachbarn.get("x1")) + y1_kreisel = float(gefaellestrecke_nachbarn.get("y1")) + richtung0 = float(gefaellestrecke_nachbarn.get("rotation0")) + richtung1 = float(gefaellestrecke_nachbarn.get("rotation1")) + richtung2 ="DEFAULT" + richtung_rad0= math.radians(richtung0) + 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 # F - #ausrechnung position kreisel - halbabstand0 = abstand0 / 2 - dx0 = halbabstand0 * math.cos(richtung_rad0) - dy0 = halbabstand0 * math.sin(richtung_rad0) - pos0_0 = (round(x0_kreisel + dx0),round( y0_kreisel + dy0),hoehe0) - pos0_1 = (round(x0_kreisel- dx0),round( y0_kreisel- dy0), hoehe0) + #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),hoehe0) + pos0_1_floor = (math.floor(x0_kreisel- dx0),math.floor( y0_kreisel- dy0), hoehe0) + pos0_0_round= (round(x0_kreisel + dx0),round( y0_kreisel + dy0),hoehe0) + pos0_1_round = (round(x0_kreisel- dx0),round( y0_kreisel- dy0), hoehe0) - halbabstand1 = abstand1 / 2 - dx1 = halbabstand1 * math.cos(richtung_rad1 ) - dy1 = halbabstand1 * math.sin(richtung_rad1) - pos1_0 = (round(x1_kreisel + dx1), round(y1_kreisel + dy1), hoehe1) - pos1_1 = (round(x1_kreisel - dx1), round(y1_kreisel - dy1), hoehe1) - winkel = math.radians(float(merkmale.get("Drehung"))) + 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), hoehe1) + pos1_1_floor = (math.floor(x1_kreisel - dx1), math.floor(y1_kreisel - dy1), hoehe1) + pos1_0_round = (round(x1_kreisel + dx1), round(y1_kreisel + dy1), hoehe1) + pos1_1_round = (round(x1_kreisel - dx1), round(y1_kreisel - dy1), hoehe1) + winkel = math.radians(float(merkmale.get("Drehung"))) - halbe_laenge = laenge / 2 - dx = halbe_laenge *math.sin(winkel * -1) - dy = halbe_laenge * math.cos(winkel) - start = (round(x +dx ), round(y + dy ),upper_hoehe_gefaehlle) - ende = (round(x -dx), round(y - dy ) ,lower_hoehe_gefaehlle) - abstand_fuer_kreis_start_x = start[0] +RADIUS, start[1] - abstand_gegen_kreis_start_x = start[0] -RADIUS, start[1] - abstand_fuer_kreis_start_y = start[0], start[1] + RADIUS - abstand_gegen_kreis_start_y = start[0], start[1] - RADIUS - abstand_fuer_kreis_ende_x= ende[0] + RADIUS, ende[1] - abstand_gegen_kreis_ende_x= ende[0] - RADIUS, ende[1] - abstand_fuer_kreis_ende_y = ende[0] , ende[1] + RADIUS - abstand_gegen_kreis_ende_y = ende[0] , ende[1] - RADIUS + 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) + 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 - - if( (abstand_fuer_kreis_start_x[0] == pos0_0[0] and abstand_fuer_kreis_start_x[1] == pos0_0[1] )or - ( abstand_fuer_kreis_start_x[0] == pos0_1[0] and abstand_fuer_kreis_start_x[1] == pos0_1[1]) or - ( abstand_gegen_kreis_start_x[0] == pos0_0[0] and abstand_gegen_kreis_start_x[1] == pos0_0[1]) or - ( abstand_gegen_kreis_start_x[0] == pos0_1[0] and abstand_gegen_kreis_start_x[1] == pos0_1[1]) or - (abstand_fuer_kreis_ende_x[0] == pos0_0[0] and abstand_fuer_kreis_ende_x[1] == pos0_0[1] )or - ( abstand_fuer_kreis_ende_x[0] == pos0_1[0] and abstand_fuer_kreis_ende_x[1] == pos0_1[1]) or - ( abstand_gegen_kreis_ende_x[0] == pos0_0[0] and abstand_gegen_kreis_ende_x[1] == pos0_0[1]) or - ( abstand_gegen_kreis_ende_x[0] == pos0_1[0] and abstand_gegen_kreis_ende_x[1] == pos0_1[1]) or - - (abstand_fuer_kreis_start_y[0] == pos0_0[0] and abstand_fuer_kreis_start_y[1] == pos0_0[1] )or - ( abstand_fuer_kreis_start_y[0] == pos0_1[0] and abstand_fuer_kreis_start_y[1] == pos0_1[1]) or - ( abstand_gegen_kreis_start_y[0] == pos0_0[0] and abstand_gegen_kreis_start_y[1] == pos0_0[1]) or - ( abstand_gegen_kreis_start_y[0] == pos0_1[0] and abstand_gegen_kreis_start_y[1] == pos0_1[1]) or - (abstand_fuer_kreis_ende_y[0] == pos0_0[0] and abstand_fuer_kreis_ende_y[1] == pos0_0[1] )or - ( abstand_fuer_kreis_ende_y[0] == pos0_1[0] and abstand_fuer_kreis_ende_y[1] == pos0_1[1]) or - ( abstand_gegen_kreis_ende_y[0] == pos0_0[0] and abstand_gegen_kreis_ende_y[1] == pos0_0[1]) or - ( abstand_gegen_kreis_ende_y[0] == pos0_1[0] and abstand_gegen_kreis_ende_y[1] == pos0_1[1]) - ): - kreisel_verbunden = kreisel_verbunden +1 - am_kreisel = 1 + 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[0] == pos1_0[0] and abstand_fuer_kreis_start_x[1] == pos1_0[1] )or - ( abstand_fuer_kreis_start_x[0] == pos1_1[0] and abstand_fuer_kreis_start_x[1] == pos1_1[1]) or - ( abstand_gegen_kreis_start_x[0] == pos1_0[0] and abstand_gegen_kreis_start_x[1] == pos1_0[1]) or - ( abstand_gegen_kreis_start_x[0] == pos1_1[0] and abstand_gegen_kreis_start_x[1] == pos1_1[1]) or - (abstand_fuer_kreis_ende_x[0] == pos1_0[0] and abstand_fuer_kreis_ende_x[1] == pos1_0[1] )or - ( abstand_fuer_kreis_ende_x[0] == pos1_1[0] and abstand_fuer_kreis_ende_x[1] == pos1_1[1]) or - ( abstand_gegen_kreis_ende_x[0] == pos1_0[0] and abstand_gegen_kreis_ende_x[1] == pos1_0[1]) or - ( abstand_gegen_kreis_ende_x[0] == pos1_1[0] and abstand_gegen_kreis_ende_x[1] == pos1_1[1]) or - - (abstand_fuer_kreis_start_y[0] == pos1_0[0] and abstand_fuer_kreis_start_y[1] == pos1_0[1] )or - ( abstand_fuer_kreis_start_y[0] == pos1_1[0] and abstand_fuer_kreis_start_y[1] == pos1_1[1]) or - ( abstand_gegen_kreis_start_y[0] == pos1_0[0] and abstand_gegen_kreis_start_y[1] == pos1_0[1]) or - ( abstand_gegen_kreis_start_y[0] == pos1_1[0] and abstand_gegen_kreis_start_y[1] == pos1_1[1]) or - (abstand_fuer_kreis_ende_y[0] == pos1_0[0] and abstand_fuer_kreis_ende_y[1] == pos1_0[1] )or - ( abstand_fuer_kreis_ende_y[0] == pos1_1[0] and abstand_fuer_kreis_ende_y[1] == pos1_1[1]) or - ( abstand_gegen_kreis_ende_y[0] == pos1_0[0] and abstand_gegen_kreis_ende_y[1] == pos1_0[1]) or - ( abstand_gegen_kreis_ende_y[0] == pos1_1[0] and abstand_gegen_kreis_ende_y[1] == pos1_1[1]) - ): + + if( (abstand_fuer_kreis_start_x_floor[0] == pos0_0_floor[0] and abstand_fuer_kreis_start_x_floor[1] == pos0_0_floor[1] )or + ( abstand_fuer_kreis_start_x_floor[0] == pos0_1_floor[0] and abstand_fuer_kreis_start_x_floor[1] == pos0_1_floor[1]) or + ( abstand_gegen_kreis_start_x_floor[0] == pos0_0_floor[0] and abstand_gegen_kreis_start_x_floor[1] == pos0_0_floor[1]) or + ( abstand_gegen_kreis_start_x_floor[0] == pos0_1_floor[0] and abstand_gegen_kreis_start_x_floor[1] == pos0_1_floor[1]) or + (abstand_fuer_kreis_ende_x_floor[0] == pos0_0_floor[0] and abstand_fuer_kreis_ende_x_floor[1] == pos0_0_floor[1] )or + ( abstand_fuer_kreis_ende_x_floor[0] == pos0_1_floor[0] and abstand_fuer_kreis_ende_x_floor[1] == pos0_1_floor[1]) or + ( abstand_gegen_kreis_ende_x_floor[0] == pos0_0_floor[0] and abstand_gegen_kreis_ende_x_floor[1] == pos0_0_floor[1]) or + ( abstand_gegen_kreis_ende_x_floor[0] == pos0_1_floor[0] and abstand_gegen_kreis_ende_x_floor[1] == pos0_1_floor[1]) or + + (abstand_fuer_kreis_start_y_floor[0] == pos0_0_floor[0] and abstand_fuer_kreis_start_y_floor[1] == pos0_0_floor[1] )or + ( abstand_fuer_kreis_start_y_floor[0] == pos0_1_floor[0] and abstand_fuer_kreis_start_y_floor[1] == pos0_1_floor[1]) or + ( abstand_gegen_kreis_start_y_floor[0] == pos0_0_floor[0] and abstand_gegen_kreis_start_y_floor[1] == pos0_0_floor[1]) or + ( abstand_gegen_kreis_start_y_floor[0] == pos0_1_floor[0] and abstand_gegen_kreis_start_y_floor[1] == pos0_1_floor[1]) or + (abstand_fuer_kreis_ende_y_floor[0] == pos0_0_floor[0] and abstand_fuer_kreis_ende_y_floor[1] == pos0_0_floor[1] )or + ( abstand_fuer_kreis_ende_y_floor[0] == pos0_1_floor[0] and abstand_fuer_kreis_ende_y_floor[1] == pos0_1_floor[1]) or + ( abstand_gegen_kreis_ende_y_floor[0] == pos0_0_floor[0] and abstand_gegen_kreis_ende_y_floor[1] == pos0_0_floor[1]) or + ( abstand_gegen_kreis_ende_y_floor[0] == pos0_1_floor[0] and abstand_gegen_kreis_ende_y_floor[1] == pos0_1_floor[1]) or + (abstand_fuer_kreis_start_x_round[0] == pos0_0_round[0] and abstand_fuer_kreis_start_x_round[1] == pos0_0_round[1] )or + ( abstand_fuer_kreis_start_x_round[0] == pos0_1_round[0] and abstand_fuer_kreis_start_x_round[1] == pos0_1_round[1]) or + ( abstand_gegen_kreis_start_x_round[0] == pos0_0_round[0] and abstand_gegen_kreis_start_x_round[1] == pos0_0_round[1]) or + ( abstand_gegen_kreis_start_x_round[0] == pos0_1_round[0] and abstand_gegen_kreis_start_x_round[1] == pos0_1_round[1]) or + (abstand_fuer_kreis_ende_x_round[0] == pos0_0_round[0] and abstand_fuer_kreis_ende_x_round[1] == pos0_0_round[1] )or + ( abstand_fuer_kreis_ende_x_round[0] == pos0_1_round[0] and abstand_fuer_kreis_ende_x_round[1] == pos0_1_round[1]) or + ( abstand_gegen_kreis_ende_x_round[0] == pos0_0_round[0] and abstand_gegen_kreis_ende_x_round[1] == pos0_0_round[1]) or + ( abstand_gegen_kreis_ende_x_round[0] == pos0_1_floor[0] and abstand_gegen_kreis_ende_x_round[1] == pos0_1_round[1]) or + + (abstand_fuer_kreis_start_y_round[0] == pos0_0_round[0] and abstand_fuer_kreis_start_y_round[1] == pos0_0_round[1] )or + ( abstand_fuer_kreis_start_y_round[0] == pos0_1_round[0] and abstand_fuer_kreis_start_y_round[1] == pos0_1_round[1]) or + ( abstand_gegen_kreis_start_y_round[0] == pos0_0_round[0] and abstand_gegen_kreis_start_y_round[1] == pos0_0_round[1]) or + ( abstand_gegen_kreis_start_y_round[0] == pos0_1_round[0] and abstand_gegen_kreis_start_y_round[1] == pos0_1_round[1]) or + (abstand_fuer_kreis_ende_y_round[0] == pos0_0_round[0] and abstand_fuer_kreis_ende_y_round[1] == pos0_0_round[1] )or + ( abstand_fuer_kreis_ende_y_round[0] == pos0_1_round[0] and abstand_fuer_kreis_ende_y_round[1] == pos0_1_round[1]) or + ( abstand_gegen_kreis_ende_y_round[0] == pos0_0_round[0] and abstand_gegen_kreis_ende_y_round[1] == pos0_0_round[1]) or + ( abstand_gegen_kreis_ende_y_round[0] == pos0_1_round[0] and abstand_gegen_kreis_ende_y_round[1] == pos0_1_round[1]) + ): kreisel_verbunden = kreisel_verbunden +1 - am_kreisel = 2 - - - if kreisel_verbunden == 2: - msp.add_line(start,ende) - return - - - - if richtung0 == 90.0 or richtung0 ==270: - richtung0= "Vertikal" - else: - richtung0 = "Horinzontal" - if richtung1 == 90.0 or richtung1 ==270: - richtung1= "Vertikal" - else: - richtung1 = "Horinzontal" - + am_kreisel = 1 - if (richtung0 != richtung1 and kreisel_verbunden ==1): - if x-RADIUS == x0_kreisel or x+RADIUS == x0_kreisel or x-RADIUS == x1_kreisel or x+ RADIUS == x1_kreisel: - richtung2= "Horinzontal" + if( (abstand_fuer_kreis_start_x_floor[0] == pos1_0_floor[0] and abstand_fuer_kreis_start_x_floor[1] == pos1_0_floor[1] )or + (abstand_fuer_kreis_start_x_floor[0] == pos1_1_floor[0] and abstand_fuer_kreis_start_x_floor[1] == pos1_1_floor[1]) or + (abstand_gegen_kreis_start_x_floor[0] == pos1_0_floor[0] and abstand_gegen_kreis_start_x_floor[1] == pos1_0_floor[1]) or + (abstand_gegen_kreis_start_x_floor[0] == pos1_1_floor[0] and abstand_gegen_kreis_start_x_floor[1] == pos1_1_floor[1]) or + (abstand_fuer_kreis_ende_x_floor[0] == pos1_0_floor[0] and abstand_fuer_kreis_ende_x_floor[1] == pos1_0_floor[1] )or + (abstand_fuer_kreis_ende_x_floor[0] == pos1_1_floor[0] and abstand_fuer_kreis_ende_x_floor[1] == pos1_1_floor[1]) or + (abstand_gegen_kreis_ende_x_floor[0] == pos1_0_floor[0] and abstand_gegen_kreis_ende_x_floor[1] == pos1_0_floor[1]) or + (abstand_gegen_kreis_ende_x_floor[0] == pos1_1_floor[0] and abstand_gegen_kreis_ende_x_floor[1] == pos1_1_floor[1]) or + + (abstand_fuer_kreis_start_y_floor[0] == pos1_0_floor[0] and abstand_fuer_kreis_start_y_floor[1] == pos1_0_floor[1] )or + (abstand_fuer_kreis_start_y_floor[0] == pos1_1_floor[0] and abstand_fuer_kreis_start_y_floor[1] == pos1_1_floor[1]) or + (abstand_gegen_kreis_start_y_floor[0] == pos1_0_floor[0] and abstand_gegen_kreis_start_y_floor[1] == pos1_0_floor[1]) or + (abstand_gegen_kreis_start_y_floor[0] == pos1_1_floor[0] and abstand_gegen_kreis_start_y_floor[1] == pos1_1_floor[1]) or + (abstand_fuer_kreis_ende_y_floor[0] == pos1_0_floor[0] and abstand_fuer_kreis_ende_y_floor[1] == pos1_0_floor[1] )or + (abstand_fuer_kreis_ende_y_floor[0] == pos1_1_floor[0] and abstand_fuer_kreis_ende_y_floor[1] == pos1_1_floor[1]) or + (abstand_gegen_kreis_ende_y_floor[0] == pos1_0_floor[0] and abstand_gegen_kreis_ende_y_floor[1] == pos1_0_floor[1]) or + (abstand_gegen_kreis_ende_y_floor[0] == pos1_1_floor[0] and abstand_gegen_kreis_ende_y_floor[1] == pos1_1_floor[1]) or + + + + + (abstand_fuer_kreis_start_x_round[0] == pos1_0_round[0] and abstand_fuer_kreis_start_x_round[1] == pos1_0_round[1] )or + (abstand_fuer_kreis_start_x_round[0] == pos1_1_round[0] and abstand_fuer_kreis_start_x_round[1] == pos1_1_round[1]) or + (abstand_gegen_kreis_start_x_round[0] == pos1_0_round[0] and abstand_gegen_kreis_start_x_round[1] == pos1_0_round[1]) or + (abstand_gegen_kreis_start_x_round[0] == pos1_1_round[0] and abstand_gegen_kreis_start_x_round[1] == pos1_1_round[1]) or + (abstand_fuer_kreis_ende_x_round[0] == pos1_0_round[0] and abstand_fuer_kreis_ende_x_round[1] == pos1_0_round[1])or + (abstand_fuer_kreis_ende_x_round[0] == pos1_1_round[0] and abstand_fuer_kreis_ende_x_round[1] == pos1_1_round[1]) or + (abstand_gegen_kreis_ende_x_round[0] == pos1_0_round[0] and abstand_gegen_kreis_ende_x_round[1] == pos1_0_round[1]) or + (abstand_gegen_kreis_ende_x_round[0] == pos1_1_round[0] and abstand_gegen_kreis_ende_x_round[1] == pos1_1_round[1]) or + + (abstand_fuer_kreis_start_y_round[0] == pos1_0_round[0] and abstand_fuer_kreis_start_y_round[1] == pos1_0_round[1] )or + (abstand_fuer_kreis_start_y_round[0] == pos1_1_round[0] and abstand_fuer_kreis_start_y_round[1] == pos1_1_round[1]) or + (abstand_gegen_kreis_start_y_round[0] == pos1_0_round[0] and abstand_gegen_kreis_start_y_round[1] == pos1_0_round[1]) or + (abstand_gegen_kreis_start_y_round[0] == pos1_1_round[0] and abstand_gegen_kreis_start_y_round[1] == pos1_1_round[1]) or + (abstand_fuer_kreis_ende_y_round[0] == pos1_0_round[0] and abstand_fuer_kreis_ende_y_round[1] == pos1_0_round[1] )or + (abstand_fuer_kreis_ende_y_round[0] == pos1_1_round[0] and abstand_fuer_kreis_ende_y_round[1] == pos1_1_round[1]) or + (abstand_gegen_kreis_ende_y_round[0] == pos1_0_round[0] and abstand_gegen_kreis_ende_y_round[1] == pos1_0_round[1]) or + (abstand_gegen_kreis_ende_y_round[0] == pos1_1_round[0] and abstand_gegen_kreis_ende_y_round[1] == pos1_1_round[1]) + ): + kreisel_verbunden = kreisel_verbunden +1 + am_kreisel = 2 + + + if kreisel_verbunden == 2: + start = x +dx, y + dy,upper_hoehe_gefaehlle + ende = x -dx, y - dy,lower_hoehe_gefaehlle + msp.add_line(start,ende) + return + + + + if richtung0 == 90.0 or richtung0 ==270: + richtung0= "Vertikal" else: - richtung2 = "Vertikal" - unterschiedlich = True - #Berechnung des Gefälles - if hoehe0 > hoehe1: - hight_position = "higher" - else: - hight_position = "lower" - if richtung2 == "DEFAULT": - if richtung0 == "Vertikal": - if x0_kreisel < x1_kreisel: - position = hight_position + "_links" - else: - position = hight_position + "_rechts" + richtung0 = "Horinzontal" + if richtung1 == 90.0 or richtung1 ==270: + richtung1= "Vertikal" else: - if y0_kreisel > y1_kreisel: - position = hight_position + "_higher" - else: - position = hight_position + "_lower" + richtung1 = "Horinzontal" + - if richtung0 == "Vertikal": - if position == "lower_rechts" or position == "higher_links": - gefaelle = "links" + + + if (richtung0 != richtung1 and kreisel_verbunden ==1): + if( + (abstand_fuer_kreis_start_y_floor[0] == pos0_0_floor[0] and abstand_fuer_kreis_start_y_floor[1] == pos0_0_floor[1])or + (abstand_fuer_kreis_start_y_floor[0] == pos0_1_floor[0] and abstand_fuer_kreis_start_y_floor[1] == pos0_1_floor[1]) or + (abstand_gegen_kreis_start_y_floor[0] == pos0_0_floor[0] and abstand_gegen_kreis_start_y_floor[1] == pos0_0_floor[1]) or + (abstand_gegen_kreis_start_y_floor[0] == pos0_1_floor[0] and abstand_gegen_kreis_start_y_floor[1] == pos0_1_floor[1]) or + (abstand_fuer_kreis_ende_y_floor[0] == pos0_0_floor[0] and abstand_fuer_kreis_ende_y_floor[1] == pos0_0_floor[1])or + (abstand_fuer_kreis_ende_y_floor[0] == pos0_1_floor[0] and abstand_fuer_kreis_ende_y_floor[1] == pos0_1_floor[1]) or + (abstand_gegen_kreis_ende_y_floor[0] == pos0_0_floor[0] and abstand_gegen_kreis_ende_y_floor[1] == pos0_0_floor[1]) or + (abstand_gegen_kreis_ende_y_floor[0] == pos0_1_floor[0] and abstand_gegen_kreis_ende_y_floor[1] == pos0_1_floor[1]) or + (abstand_fuer_kreis_start_y_round[0] == pos0_0_round[0] and abstand_fuer_kreis_start_y_round[1] == pos0_0_round[1])or + (abstand_fuer_kreis_start_y_round[0] == pos0_1_round[0] and abstand_fuer_kreis_start_y_round[1] == pos0_1_round[1]) or + (abstand_gegen_kreis_start_y_round[0] == pos0_0_round[0] and abstand_gegen_kreis_start_y_round[1] == pos0_0_round[1]) or + (abstand_gegen_kreis_start_y_round[0] == pos0_1_round[0] and abstand_gegen_kreis_start_y_round[1] == pos0_1_round[1]) or + (abstand_fuer_kreis_ende_y_round[0] == pos0_0_round[0] and abstand_fuer_kreis_ende_y_round[1] == pos0_0_round[1])or + (abstand_fuer_kreis_ende_y_round[0] == pos0_1_round[0] and abstand_fuer_kreis_ende_y_round[1] == pos0_1_round[1]) or + (abstand_gegen_kreis_ende_y_round[0] == pos0_0_round[0] and abstand_gegen_kreis_ende_y_round[1] == pos0_0_round[1]) or + (abstand_gegen_kreis_ende_y_round[0] == pos0_1_round[0] and abstand_gegen_kreis_ende_y_round[1] == pos0_1_round[1]) or + + + + (abstand_fuer_kreis_start_y_floor[0] == pos1_0_floor[0] and abstand_fuer_kreis_start_y_floor[1] == pos1_0_floor[1] )or + ( abstand_fuer_kreis_start_y_floor[0] == pos1_1_floor[0] and abstand_fuer_kreis_start_y_floor[1] == pos1_1_floor[1]) or + ( abstand_gegen_kreis_start_y_floor[0] == pos1_0_floor[0] and abstand_gegen_kreis_start_y_floor[1] == pos1_0_floor[1]) or + ( abstand_gegen_kreis_start_y_floor[0] == pos1_1_floor[0] and abstand_gegen_kreis_start_y_floor[1] == pos1_1_floor[1]) or + (abstand_fuer_kreis_ende_y_floor[0] == pos1_0_floor[0] and abstand_fuer_kreis_ende_y_floor[1] == pos1_0_floor[1] )or + ( abstand_fuer_kreis_ende_y_floor[0] == pos1_1_floor[0] and abstand_fuer_kreis_ende_y_floor[1] == pos1_1_floor[1]) or + ( abstand_gegen_kreis_ende_y_floor[0] == pos1_0_floor[0] and abstand_gegen_kreis_ende_y_floor[1] == pos1_0_floor[1]) or + ( abstand_gegen_kreis_ende_y_floor[0] == pos1_1_floor[0] and abstand_gegen_kreis_ende_y_floor[1] == pos1_1_floor[1]) or + + (abstand_fuer_kreis_start_y_round[0] == pos1_0_round[0] and abstand_fuer_kreis_start_y_round[1] == pos1_0_round[1] )or + ( abstand_fuer_kreis_start_y_round[0] == pos1_1_round[0] and abstand_fuer_kreis_start_y_round[1] == pos1_1_round[1]) or + ( abstand_gegen_kreis_start_y_round[0] == pos1_0_round[0] and abstand_gegen_kreis_start_y_round[1] == pos1_0_round[1]) or + ( abstand_gegen_kreis_start_y_round[0] == pos1_1_round[0] and abstand_gegen_kreis_start_y_round[1] == pos1_1_round[1]) or + (abstand_fuer_kreis_ende_y_round[0] == pos1_0_round[0] and abstand_fuer_kreis_ende_y_round[1] == pos1_0_round[1] )or + ( abstand_fuer_kreis_ende_y_round[0] == pos1_1_round[0] and abstand_fuer_kreis_ende_y_round[1] == pos1_1_round[1]) or + ( abstand_gegen_kreis_ende_y_round[0] == pos1_0_round[0] and abstand_gegen_kreis_ende_y_round[1] == pos1_0_round[1]) or + ( abstand_gegen_kreis_ende_y_round[0] == pos1_1_round[0] and abstand_gegen_kreis_ende_y_round[1] == pos1_1_round[1]) + ): + richtung2= "Vertikal" else: - gefaelle = "rechts" - elif richtung0 == "Horinzontal": - if position == "lower_lower" or position == "higher_higher": - gefaelle = "oben" + richtung2 = "Horinzontal" + unterschiedlich = True + #Berechnung des Gefälles + + if hoehe0 > hoehe1: + hight_position = "higher" + else: + hight_position = "lower" + if richtung2 == "DEFAULT": + if richtung0 == "Vertikal": + if x0_kreisel < x1_kreisel: + position = hight_position + "_links" else: - gefaelle = "unten" - - if (position == "higher_rechts" or position == "lower_rechts" or position=="higher_lower" or position== "lower_lower") and drehung0 != drehung1: - - drehung_2 = drehung0 - drehung0 = drehung1 - drehung1= drehung_2 - if hight_position == "higher": - hight_position = "lower" + position = hight_position + "_rechts" else: - hight_position = "higher" - - else: - if richtung2 == "Vertikal": - if x0_kreisel < x1_kreisel: - position = hight_position + "_links" - else: - position = hight_position + "_rechts" - else: - if y0_kreisel > y1_kreisel: - position = hight_position + "_higher" - else: - position = hight_position + "_lower" - - if richtung2 == "Vertikal": - if position == "lower_rechts" or position == "higher_links": - gefaelle = "links" - else: - gefaelle = "rechts" - elif richtung2 == "Horinzontal": - if position == "lower_lower" or position == "higher_higher": - gefaelle = "oben" + if y0_kreisel > y1_kreisel: + position = hight_position + "_higher" else: - gefaelle = "unten" + position = hight_position + "_lower" + + if richtung0 == "Vertikal": + if position == "lower_rechts" or position == "higher_links": + gefaelle = "links" + else: + gefaelle = "rechts" + elif richtung0 == "Horinzontal": + if position == "lower_lower" or position == "higher_higher": + gefaelle = "oben" + else: + gefaelle = "unten" + + if kreisel_verbunden == 1 and am_kreisel ==2: + am_kreisel == 1 + + drehung_2 = drehung0 + drehung0 = drehung1 + drehung1= drehung_2 + if hight_position == "higher": + hight_position = "lower" + else: + hight_position = "higher" + + else: + if richtung2 == "Vertikal": + if x0_kreisel < x1_kreisel: + position = hight_position + "_links" + else: + position = hight_position + "_rechts" + else: + if y0_kreisel > y1_kreisel: + position = hight_position + "_higher" + else: + position = hight_position + "_lower" + + if richtung2 == "Vertikal": + if position == "lower_rechts" or position == "higher_links": + gefaelle = "links" + else: + gefaelle = "rechts" + elif richtung2 == "Horinzontal": + if position == "lower_lower" or position == "higher_higher": + gefaelle = "oben" + else: + gefaelle = "unten" + + if am_kreisel == 2: - if am_kreisel == 2: - if am_kreisel == 1: - am_kreisel =2 - elif am_kreisel ==2: am_kreisel = 1 - drehung_2 = drehung0 - drehung0 = drehung1 - drehung1= drehung_2 - if hight_position == "higher": - hight_position = "lower" - else: - hight_position = "higher" + drehung_2 = drehung0 + drehung0 = drehung1 + drehung1= drehung_2 + if hight_position == "higher": + hight_position = "lower" + else: + hight_position = "higher" - # - blockname = f"Ils_2.0_Gefaellestrecke_{laenge}_{hoehe_gefaehlle}_{drehung0}_{drehung1}_{hight_position}_{unterschiedlich}_{teileid}" - if gefaelle == "oben": - rotation = 0 - elif gefaelle == "unten" : - rotation = 180 - elif gefaelle == "links" : - rotation = 90 - elif gefaelle == "rechts" : - rotation = 270 - gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoehe_gefaehlle, lower_hoehe_gefaehlle, hoehe_gefaehlle,richtung0,richtung1,richtung2, am_kreisel,drehung0, drehung1, laenge, hight_position, blockname) + # + blockname = f"Ils_2.0_Gefaellestrecke_{laenge}_{hoehe_gefaehlle}_{drehung0}_{drehung1}_{hight_position}_{unterschiedlich}_{teileid}" + if gefaelle == "oben": + rotation = 0 + elif gefaelle == "unten" : + rotation = 180 + elif gefaelle == "links" : + rotation = 90 + elif gefaelle == "rechts" : + rotation = 270 + + + + if (kreisel_verbunden == 1 and richtung2 =="DEFAULT"): + richtung2 = richtung0 - - bref =msp.add_blockref(blockname,(x,y,hoehe_gefaehlle),dxfattribs={"rotation": rotation}) - bref.add_attrib( - tag= "NAME", - text= merkmale.get("bezeichner"), - insert = (x,y) + gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoehe_gefaehlle, lower_hoehe_gefaehlle, hoehe_gefaehlle,richtung0,richtung1,richtung2, am_kreisel,drehung0, drehung1, laenge, hight_position, blockname) + + - - ) + bref =msp.add_blockref(blockname,(x,y,hoehe_gefaehlle),dxfattribs={"rotation": rotation}) + bref.add_attrib( + tag= "NAME", + text= merkmale.get("bezeichner"), + insert = (x,y) + + + ) + else: + laenge_m = merkmale.get("Länge in Meter", "10").replace(",", ".") + try: + laenge = float(laenge_m) * 1000 # Meter → mm + except ValueError: + laenge = 10000 + + winkel = math.radians(float(merkmale.get("Drehung"))) + halbe_laenge = laenge / 2 + dx = halbe_laenge *math.sin(winkel * -1) + dy = halbe_laenge * math.cos(winkel) + start = x +dx, y + dy,upper_hoehe_gefaehlle + ende = x -dx, y - dy,lower_hoehe_gefaehlle + msp.add_line(start,ende) def gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoehe_gefaehlle, lower_hoehe_gefaehlle, hoehe_gefaehlle,richtung0,richtun1,richtung2,am_kreisel, drehung0, drehung1, laenge, hight_position, blockname): @@ -564,14 +680,14 @@ def gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoeh block_es = "400102632_ES-Element_90_links" import_block(block_es,lib_doc,doc) - block.add_blockref(block_as,(start[0]-x ,start[1]+asoffset -y,start[2])) + block.add_blockref(block_es,(ende[0]-x ,ende[1]-esoffset -y,ende[2]), dxfattribs={"rotation": 180}) elif blockname not in doc.blocks and (drehung0 == "UZS" and drehung1 == "GUZS" and hight_position == "lower"): 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) - ende = (x , y - dy + esoffset,lower_hoehe_gefaehlle) + ende = (x , y - dy ,lower_hoehe_gefaehlle) line = Line.new(dxfattribs={"start": start, "end": ende}) copy= line.copy() @@ -579,14 +695,14 @@ def gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoeh block.add_entity(copy) block_as = "200000241_AS-Element_90_rechts" - import_block(block_es,lib_doc,doc) + import_block(block_as,lib_doc,doc) block.add_blockref(block_as,(start[0]-x ,start[1]+asoffset -y,start[2])) 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)) halbe_laenge = laenge / 2 dy = halbe_laenge * math.cos(0) - start = (x , y + dy - asoffset,upper_hoehe_gefaehlle) + start = (x , y + dy ,upper_hoehe_gefaehlle) ende = (x , y - dy + esoffset,lower_hoehe_gefaehlle) line = Line.new(dxfattribs={"start": start, "end": ende}) copy= line.copy() @@ -607,7 +723,7 @@ def gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoeh dy = halbe_laenge * math.cos(0) start = (x , y + dy - asoffset,upper_hoehe_gefaehlle) - ende = (x , y - dy + esoffset,lower_hoehe_gefaehlle) + ende = (x , y - dy ,lower_hoehe_gefaehlle) line = Line.new(dxfattribs={"start": start, "end": ende}) copy= line.copy() @@ -615,13 +731,16 @@ def gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoeh 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]),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)) halbe_laenge = laenge / 2 dy = halbe_laenge * math.cos(0) - start = (x , y + dy - asoffset,upper_hoehe_gefaehlle) + start = (x , y + dy,upper_hoehe_gefaehlle) ende = (x , y - dy + esoffset,lower_hoehe_gefaehlle) line = Line.new(dxfattribs={"start": start, "end": ende}) copy= line.copy() @@ -639,7 +758,7 @@ def gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoeh dy = halbe_laenge * math.cos(0) start = (x , y + dy - asoffset,upper_hoehe_gefaehlle) - ende = (x , y - dy + esoffset,lower_hoehe_gefaehlle) + ende = (x , y - dy ,lower_hoehe_gefaehlle) line = Line.new(dxfattribs={"start": start, "end": ende}) copy= line.copy() @@ -650,16 +769,6 @@ def gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoeh block.add_blockref(block_as,(start[0]-x ,start[1]+asoffset -y,start[2]),dxfattribs={"rotation": 180}) - - - - - - - - - - else: if blockname not in doc.blocks and drehung0 == "GUZS" and drehung1 == "GUZS" : block = doc.blocks.new(name=blockname, base_point=(0,0,0)) @@ -743,9 +852,6 @@ def gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoeh block.add_blockref(block_es, (ende[0]-x ,ende[1]-esoffset -y,ende[2])) - - - def handle_omniflo(msp, teileid, merkmale, x, y, doc, lib_doc, verbose, symbols, gefaellestrecken_nachbarn,config): """ Für Omniflo Gerade: zeichnet eine Linie (Mitte = Koordinate, Länge und Winkel aus Merkmale). From 971a766f9fab4bcc3ea69af9ac8924f818969d02 Mon Sep 17 00:00:00 2001 From: Paul Wolok Date: Tue, 7 Oct 2025 15:01:06 +0200 Subject: [PATCH 3/4] man kann nun gefaellestreckne nur mit einem kreisel verbinden --- lib/plant2dxf.py | 297 ++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 281 insertions(+), 16 deletions(-) diff --git a/lib/plant2dxf.py b/lib/plant2dxf.py index b95fb7b..4965985 100644 --- a/lib/plant2dxf.py +++ b/lib/plant2dxf.py @@ -283,7 +283,7 @@ def handle_standard(msp, blocknames, teileid, x, y, lib_doc, doc, verbose): def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, verbose, symbols, gefaellestrecken_nachbarn,config): #Vorbereitung der attributen - + verbunden_am_einen = False am_kreisel = 0 richtung2 ="DEFAULT" unterschiedlich = False @@ -296,7 +296,256 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v if teileid == nachbarn.get("Id"): gefaellestrecke_nachbarn = nachbarn break - if "Drehung0" in gefaellestrecke_nachbarn and "Drehung1" in gefaellestrecke_nachbarn: + if "Drehung0" in gefaellestrecke_nachbarn and "Drehung1" not in gefaellestrecke_nachbarn: + drehung0 =gefaellestrecke_nachbarn.get("Drehung0") + x0_kreisel = float(gefaellestrecke_nachbarn.get("x0")) + y0_kreisel = float(gefaellestrecke_nachbarn.get("y0")) + hoehe0 = gefaellestrecke_nachbarn.get("Hoehe0") + richtung0 = float(gefaellestrecke_nachbarn.get("rotation0")) + richtung_rad0= math.radians(richtung0) + abstand0 = float(gefaellestrecke_nachbarn.get("abstand0")) * 1000 + laenge_m = merkmale.get("Länge in Meter", "10").replace(",", ".") + try: + 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"))) + dx = halbe_laenge *math.sin(winkel * -1) + dy = halbe_laenge * math.cos(winkel) + + + if upper_hoehe_gefaehlle < lower_hoehe_gefaehlle: + hoehe2 = upper_hoehe_gefaehlle + upper_hoehe_gefaehlle = lower_hoehe_gefaehlle + lower_hoehe_gefaehlle = hoehe2 + + + 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[0] == pos0_0_floor[0] and abstand_fuer_kreis_start_x_floor[1] == pos0_0_floor[1] )or + (abstand_fuer_kreis_start_x_floor[0] == pos0_1_floor[0] and abstand_fuer_kreis_start_x_floor[1] == pos0_1_floor[1]) or + (abstand_gegen_kreis_start_x_floor[0] == pos0_0_floor[0] and abstand_gegen_kreis_start_x_floor[1] == pos0_0_floor[1]) or + (abstand_gegen_kreis_start_x_floor[0] == pos0_1_floor[0] and abstand_gegen_kreis_start_x_floor[1] == pos0_1_floor[1]) or + (abstand_fuer_kreis_ende_x_floor[0] == pos0_0_floor[0] and abstand_fuer_kreis_ende_x_floor[1] == pos0_0_floor[1] )or + (abstand_fuer_kreis_ende_x_floor[0] == pos0_1_floor[0] and abstand_fuer_kreis_ende_x_floor[1] == pos0_1_floor[1]) or + (abstand_gegen_kreis_ende_x_floor[0] == pos0_0_floor[0] and abstand_gegen_kreis_ende_x_floor[1] == pos0_0_floor[1]) or + (abstand_gegen_kreis_ende_x_floor[0] == pos0_1_floor[0] and abstand_gegen_kreis_ende_x_floor[1] == pos0_1_floor[1]) or + + (abstand_fuer_kreis_start_y_floor[0] == pos0_0_floor[0] and abstand_fuer_kreis_start_y_floor[1] == pos0_0_floor[1] )or + (abstand_fuer_kreis_start_y_floor[0] == pos0_1_floor[0] and abstand_fuer_kreis_start_y_floor[1] == pos0_1_floor[1]) or + (abstand_gegen_kreis_start_y_floor[0] == pos0_0_floor[0] and abstand_gegen_kreis_start_y_floor[1] == pos0_0_floor[1]) or + (abstand_gegen_kreis_start_y_floor[0] == pos0_1_floor[0] and abstand_gegen_kreis_start_y_floor[1] == pos0_1_floor[1]) or + (abstand_fuer_kreis_ende_y_floor[0] == pos0_0_floor[0] and abstand_fuer_kreis_ende_y_floor[1] == pos0_0_floor[1] )or + (abstand_fuer_kreis_ende_y_floor[0] == pos0_1_floor[0] and abstand_fuer_kreis_ende_y_floor[1] == pos0_1_floor[1]) or + (abstand_gegen_kreis_ende_y_floor[0] == pos0_0_floor[0] and abstand_gegen_kreis_ende_y_floor[1] == pos0_0_floor[1]) or + (abstand_gegen_kreis_ende_y_floor[0] == pos0_1_floor[0] and abstand_gegen_kreis_ende_y_floor[1] == pos0_1_floor[1]) or + (abstand_fuer_kreis_start_x_round[0] == pos0_0_round[0] and abstand_fuer_kreis_start_x_round[1] == pos0_0_round[1] )or + (abstand_fuer_kreis_start_x_round[0] == pos0_1_round[0] and abstand_fuer_kreis_start_x_round[1] == pos0_1_round[1]) or + (abstand_gegen_kreis_start_x_round[0] == pos0_0_round[0] and abstand_gegen_kreis_start_x_round[1] == pos0_0_round[1]) or + (abstand_gegen_kreis_start_x_round[0] == pos0_1_round[0] and abstand_gegen_kreis_start_x_round[1] == pos0_1_round[1]) or + (abstand_fuer_kreis_ende_x_round[0] == pos0_0_round[0] and abstand_fuer_kreis_ende_x_round[1] == pos0_0_round[1] )or + (abstand_fuer_kreis_ende_x_round[0] == pos0_1_round[0] and abstand_fuer_kreis_ende_x_round[1] == pos0_1_round[1]) or + (abstand_gegen_kreis_ende_x_round[0] == pos0_0_round[0] and abstand_gegen_kreis_ende_x_round[1] == pos0_0_round[1]) or + (abstand_gegen_kreis_ende_x_round[0] == pos0_1_round[0] and abstand_gegen_kreis_ende_x_round[1] == pos0_1_round[1]) or + + (abstand_fuer_kreis_start_y_round[0] == pos0_0_round[0] and abstand_fuer_kreis_start_y_round[1] == pos0_0_round[1] )or + (abstand_fuer_kreis_start_y_round[0] == pos0_1_round[0] and abstand_fuer_kreis_start_y_round[1] == pos0_1_round[1]) or + (abstand_gegen_kreis_start_y_round[0] == pos0_0_round[0] and abstand_gegen_kreis_start_y_round[1] == pos0_0_round[1]) or + (abstand_gegen_kreis_start_y_round[0] == pos0_1_round[0] and abstand_gegen_kreis_start_y_round[1] == pos0_1_round[1]) or + (abstand_fuer_kreis_ende_y_round[0] == pos0_0_round[0] and abstand_fuer_kreis_ende_y_round[1] == pos0_0_round[1] )or + (abstand_fuer_kreis_ende_y_round[0] == pos0_1_round[0] and abstand_fuer_kreis_ende_y_round[1] == pos0_1_round[1]) or + (abstand_gegen_kreis_ende_y_round[0] == pos0_0_round[0] and abstand_gegen_kreis_ende_y_round[1] == pos0_0_round[1]) or + (abstand_gegen_kreis_ende_y_round[0] == pos0_1_round[0] and abstand_gegen_kreis_ende_y_round[1] == pos0_1_round[1]) + ): + kreisel_verbunden = kreisel_verbunden +1 + # 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] + msp.add_line(start,ende) + 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 blockname not in doc.blocks and hight == "higher" and drehung0 == "GUZS": + 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) + ende = (x , y - dy ,lower_hoehe_gefaehlle) + line = Line.new(dxfattribs={"start": start, "end": ende}) + copy= line.copy() + + 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 hight == "lower" and drehung0 == "GUZS": + + 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,upper_hoehe_gefaehlle) + ende = (x , y - dy + esoffset,lower_hoehe_gefaehlle) + line = Line.new(dxfattribs={"start": start, "end": ende}) + copy= line.copy() + + 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 hight == "higher" and drehung0 == "UZS": + 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) + ende = (x , y - dy ,lower_hoehe_gefaehlle) + line = Line.new(dxfattribs={"start": start, "end": ende}) + copy= line.copy() + + 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]),dxfattribs={"rotation": 180}) + elif blockname not in doc.blocks and hight == "lower" and drehung0 == "UZS": + 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 ,upper_hoehe_gefaehlle) + ende = (x , y - dy + esoffset,lower_hoehe_gefaehlle) + line = Line.new(dxfattribs={"start": start, "end": ende}) + copy= line.copy() + + 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]),dxfattribs={"rotation": 180}) + bref =msp.add_blockref(blockname,(x,y,hoehe_gefaehlle),dxfattribs={"rotation": rotation}) + bref.add_attrib( + tag= "NAME", + text= merkmale.get("bezeichner"), + insert = (x,y) + ) + + + + + + + + elif "Drehung0" in gefaellestrecke_nachbarn and "Drehung1" in gefaellestrecke_nachbarn: drehung0 =gefaellestrecke_nachbarn.get("Drehung0") drehung1 = gefaellestrecke_nachbarn.get("Drehung1") hoehe0 = gefaellestrecke_nachbarn.get("Hoehe0") @@ -317,7 +566,7 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v try: laenge = float(laenge_m) * 1000 # Meter → mm except ValueError: - laenge = 10000 # F + laenge = 10000 #ausrechnung position kreisel @@ -337,7 +586,7 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v pos1_0_round = (round(x1_kreisel + dx1), round(y1_kreisel + dy1), hoehe1) pos1_1_round = (round(x1_kreisel - dx1), round(y1_kreisel - dy1), hoehe1) winkel = math.radians(float(merkmale.get("Drehung"))) - + # 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) @@ -345,6 +594,7 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v 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 @@ -364,7 +614,7 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v 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[0] == pos0_0_floor[0] and abstand_fuer_kreis_start_x_floor[1] == pos0_0_floor[1] )or ( abstand_fuer_kreis_start_x_floor[0] == pos0_1_floor[0] and abstand_fuer_kreis_start_x_floor[1] == pos0_1_floor[1]) or ( abstand_gegen_kreis_start_x_floor[0] == pos0_0_floor[0] and abstand_gegen_kreis_start_x_floor[1] == pos0_0_floor[1]) or @@ -401,6 +651,7 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v ( abstand_gegen_kreis_ende_y_round[0] == pos0_1_round[0] and abstand_gegen_kreis_ende_y_round[1] == pos0_1_round[1]) ): kreisel_verbunden = kreisel_verbunden +1 + # setzung auf kreisel 1 für spätere ausrechnung der geraden form am_kreisel = 1 @@ -447,7 +698,7 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v kreisel_verbunden = kreisel_verbunden +1 am_kreisel = 2 - + # 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: start = x +dx, y + dy,upper_hoehe_gefaehlle ende = x -dx, y - dy,lower_hoehe_gefaehlle @@ -455,7 +706,7 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v return - + #umbezeichnung von den geraden zu strings ob es Vertikal oder Horizontal ist if richtung0 == 90.0 or richtung0 ==270: richtung0= "Vertikal" else: @@ -467,7 +718,7 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v - + # 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[0] == pos0_0_floor[0] and abstand_fuer_kreis_start_y_floor[1] == pos0_0_floor[1])or @@ -539,7 +790,17 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v gefaelle = "oben" else: gefaelle = "unten" - + # vertausch der drehung und der höhe für die namens gebung des blockes + if (position == "higher_rechts" or position == "lower_rechts" or position=="higher_lower" or position== "lower_lower") and drehung0 != drehung1 and am_kreisel == 0: + drehung_2 = drehung0 + drehung0 = drehung1 + drehung1= drehung_2 + if hight_position == "higher": + hight_position = "lower" + else: + hight_position = "higher" + + # austausch der werte damit immer davon ausgehen dass der 1 kreisel in unserer Liste am Kreisel verbuden ist if kreisel_verbunden == 1 and am_kreisel ==2: am_kreisel == 1 @@ -573,7 +834,7 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v gefaelle = "oben" else: gefaelle = "unten" - + # austausch der werte damit immer davon ausgehen dass der 1 kreisel in unserer Liste am Kreisel verbuden ist if am_kreisel == 2: am_kreisel = 1 @@ -585,8 +846,10 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v else: hight_position = "higher" - # - blockname = f"Ils_2.0_Gefaellestrecke_{laenge}_{hoehe_gefaehlle}_{drehung0}_{drehung1}_{hight_position}_{unterschiedlich}_{teileid}" + if richtung2 == "DEFAULT": + blockname = f"Ils_2.0_Gefaellestrecke_{laenge}_{hoehe_gefaehlle}_{drehung0}_{drehung1}_{hight_position}_{verbunden_am_einen}" + else: + blockname = f"Ils_2.0_Gefaellestrecke_{laenge}_{hoehe_gefaehlle}_{drehung0}_{drehung1}_{hight_position}_{unterschiedlich}_{richtung2}_{verbunden_am_einen}" if gefaelle == "oben": rotation = 0 elif gefaelle == "unten" : @@ -597,12 +860,12 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v rotation = 270 - + #geben der richtung2 eines wertes außer default wenn beide kreisel die gleiche richung haben if (kreisel_verbunden == 1 and richtung2 =="DEFAULT"): richtung2 = richtung0 - gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoehe_gefaehlle, lower_hoehe_gefaehlle, hoehe_gefaehlle,richtung0,richtung1,richtung2, am_kreisel,drehung0, drehung1, laenge, hight_position, blockname) + gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoehe_gefaehlle, lower_hoehe_gefaehlle, hoehe_gefaehlle,richtung2, am_kreisel,drehung0, drehung1, laenge, hight_position, verbunden_am_einen,blockname) @@ -614,6 +877,7 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v ) + #falls eine gefällestrecke nicht mit einem kreisel verbunden ist else: laenge_m = merkmale.get("Länge in Meter", "10").replace(",", ".") try: @@ -630,7 +894,8 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v msp.add_line(start,ende) -def gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoehe_gefaehlle, lower_hoehe_gefaehlle, hoehe_gefaehlle,richtung0,richtun1,richtung2,am_kreisel, drehung0, drehung1, laenge, hight_position, blockname): +def gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoehe_gefaehlle, lower_hoehe_gefaehlle, hoehe_gefaehlle,richtung2,am_kreisel, drehung0, drehung1, laenge, hight_position,verbunden_am_einen, blockname): + #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 richtung2!= "DEFAULT": if blockname not in doc.blocks and drehung0 == "GUZS" and drehung1 == "GUZS" and hight_position == "higher" : @@ -768,7 +1033,7 @@ def gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoeh import_block(block_as,lib_doc,doc) block.add_blockref(block_as,(start[0]-x ,start[1]+asoffset -y,start[2]),dxfattribs={"rotation": 180}) - + #erstellung von den normalen gefällestrecken else: if blockname not in doc.blocks and drehung0 == "GUZS" and drehung1 == "GUZS" : block = doc.blocks.new(name=blockname, base_point=(0,0,0)) From 2f5b43ad12fde35a4e2be658e70e39f454434179 Mon Sep 17 00:00:00 2001 From: Paul Wolok Date: Wed, 8 Oct 2025 11:42:23 +0200 Subject: [PATCH 4/4] =?UTF-8?q?Die=20h=C3=B6hen=20werden=20nun=20im=202.5?= =?UTF-8?q?=20d=20richtig=20angezeigt=20und=20die=20linien=20=C3=BCbernehm?= =?UTF-8?q?en=20nun=20die=20layers?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/plant2dxf.py | 532 ++++++++++++++++++++++++++--------------------- 1 file changed, 292 insertions(+), 240 deletions(-) diff --git a/lib/plant2dxf.py b/lib/plant2dxf.py index 4965985..5c8ab47 100644 --- a/lib/plant2dxf.py +++ b/lib/plant2dxf.py @@ -283,7 +283,10 @@ def handle_standard(msp, blocknames, teileid, x, y, lib_doc, doc, verbose): def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, verbose, symbols, gefaellestrecken_nachbarn,config): #Vorbereitung der attributen + if "6-SP" not in doc.layers: + doc.layers.add(name="6-SP", color=3) verbunden_am_einen = False + am_kreisel = 0 richtung2 ="DEFAULT" unterschiedlich = False @@ -300,7 +303,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 = gefaellestrecke_nachbarn.get("Hoehe0") + hoehe0 = float(gefaellestrecke_nachbarn.get("Hoehe0")) richtung0 = float(gefaellestrecke_nachbarn.get("rotation0")) richtung_rad0= math.radians(richtung0) abstand0 = float(gefaellestrecke_nachbarn.get("abstand0")) * 1000 @@ -411,47 +414,50 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v abstand_gegen_kreis_ende_y_round = ende_round[0] , ende_round[1] - RADIUS - if( (abstand_fuer_kreis_start_x_floor[0] == pos0_0_floor[0] and abstand_fuer_kreis_start_x_floor[1] == pos0_0_floor[1] )or - (abstand_fuer_kreis_start_x_floor[0] == pos0_1_floor[0] and abstand_fuer_kreis_start_x_floor[1] == pos0_1_floor[1]) or - (abstand_gegen_kreis_start_x_floor[0] == pos0_0_floor[0] and abstand_gegen_kreis_start_x_floor[1] == pos0_0_floor[1]) or - (abstand_gegen_kreis_start_x_floor[0] == pos0_1_floor[0] and abstand_gegen_kreis_start_x_floor[1] == pos0_1_floor[1]) or - (abstand_fuer_kreis_ende_x_floor[0] == pos0_0_floor[0] and abstand_fuer_kreis_ende_x_floor[1] == pos0_0_floor[1] )or - (abstand_fuer_kreis_ende_x_floor[0] == pos0_1_floor[0] and abstand_fuer_kreis_ende_x_floor[1] == pos0_1_floor[1]) or - (abstand_gegen_kreis_ende_x_floor[0] == pos0_0_floor[0] and abstand_gegen_kreis_ende_x_floor[1] == pos0_0_floor[1]) or - (abstand_gegen_kreis_ende_x_floor[0] == pos0_1_floor[0] and abstand_gegen_kreis_ende_x_floor[1] == pos0_1_floor[1]) or + 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[0] == pos0_0_floor[0] and abstand_fuer_kreis_start_y_floor[1] == pos0_0_floor[1] )or - (abstand_fuer_kreis_start_y_floor[0] == pos0_1_floor[0] and abstand_fuer_kreis_start_y_floor[1] == pos0_1_floor[1]) or - (abstand_gegen_kreis_start_y_floor[0] == pos0_0_floor[0] and abstand_gegen_kreis_start_y_floor[1] == pos0_0_floor[1]) or - (abstand_gegen_kreis_start_y_floor[0] == pos0_1_floor[0] and abstand_gegen_kreis_start_y_floor[1] == pos0_1_floor[1]) or - (abstand_fuer_kreis_ende_y_floor[0] == pos0_0_floor[0] and abstand_fuer_kreis_ende_y_floor[1] == pos0_0_floor[1] )or - (abstand_fuer_kreis_ende_y_floor[0] == pos0_1_floor[0] and abstand_fuer_kreis_ende_y_floor[1] == pos0_1_floor[1]) or - (abstand_gegen_kreis_ende_y_floor[0] == pos0_0_floor[0] and abstand_gegen_kreis_ende_y_floor[1] == pos0_0_floor[1]) or - (abstand_gegen_kreis_ende_y_floor[0] == pos0_1_floor[0] and abstand_gegen_kreis_ende_y_floor[1] == pos0_1_floor[1]) or - (abstand_fuer_kreis_start_x_round[0] == pos0_0_round[0] and abstand_fuer_kreis_start_x_round[1] == pos0_0_round[1] )or - (abstand_fuer_kreis_start_x_round[0] == pos0_1_round[0] and abstand_fuer_kreis_start_x_round[1] == pos0_1_round[1]) or - (abstand_gegen_kreis_start_x_round[0] == pos0_0_round[0] and abstand_gegen_kreis_start_x_round[1] == pos0_0_round[1]) or - (abstand_gegen_kreis_start_x_round[0] == pos0_1_round[0] and abstand_gegen_kreis_start_x_round[1] == pos0_1_round[1]) or - (abstand_fuer_kreis_ende_x_round[0] == pos0_0_round[0] and abstand_fuer_kreis_ende_x_round[1] == pos0_0_round[1] )or - (abstand_fuer_kreis_ende_x_round[0] == pos0_1_round[0] and abstand_fuer_kreis_ende_x_round[1] == pos0_1_round[1]) or - (abstand_gegen_kreis_ende_x_round[0] == pos0_0_round[0] and abstand_gegen_kreis_ende_x_round[1] == pos0_0_round[1]) or - (abstand_gegen_kreis_ende_x_round[0] == pos0_1_round[0] and abstand_gegen_kreis_ende_x_round[1] == pos0_1_round[1]) 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[0] == pos0_0_round[0] and abstand_fuer_kreis_start_y_round[1] == pos0_0_round[1] )or - (abstand_fuer_kreis_start_y_round[0] == pos0_1_round[0] and abstand_fuer_kreis_start_y_round[1] == pos0_1_round[1]) or - (abstand_gegen_kreis_start_y_round[0] == pos0_0_round[0] and abstand_gegen_kreis_start_y_round[1] == pos0_0_round[1]) or - (abstand_gegen_kreis_start_y_round[0] == pos0_1_round[0] and abstand_gegen_kreis_start_y_round[1] == pos0_1_round[1]) or - (abstand_fuer_kreis_ende_y_round[0] == pos0_0_round[0] and abstand_fuer_kreis_ende_y_round[1] == pos0_0_round[1] )or - (abstand_fuer_kreis_ende_y_round[0] == pos0_1_round[0] and abstand_fuer_kreis_ende_y_round[1] == pos0_1_round[1]) or - (abstand_gegen_kreis_ende_y_round[0] == pos0_0_round[0] and abstand_gegen_kreis_ende_y_round[1] == pos0_0_round[1]) or - (abstand_gegen_kreis_ende_y_round[0] == pos0_1_round[0] and abstand_gegen_kreis_ende_y_round[1] == pos0_1_round[1]) + (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] - msp.add_line(start,ende) + line =msp.add_line(start,ende) + line.dxf.layer = "6-SP" + return verbunden_am_einen = True @@ -464,80 +470,15 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v rotation = 90 elif gefaelle == "rechts" : rotation = 270 - if blockname not in doc.blocks and hight == "higher" and drehung0 == "GUZS": - 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) - ende = (x , y - dy ,lower_hoehe_gefaehlle) - line = Line.new(dxfattribs={"start": start, "end": ende}) - copy= line.copy() - - 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 hight == "lower" and drehung0 == "GUZS": - - 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,upper_hoehe_gefaehlle) - ende = (x , y - dy + esoffset,lower_hoehe_gefaehlle) - line = Line.new(dxfattribs={"start": start, "end": ende}) - copy= line.copy() - - 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 hight == "higher" and drehung0 == "UZS": - 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) - ende = (x , y - dy ,lower_hoehe_gefaehlle) - line = Line.new(dxfattribs={"start": start, "end": ende}) - copy= line.copy() - - 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]),dxfattribs={"rotation": 180}) - elif blockname not in doc.blocks and hight == "lower" and drehung0 == "UZS": - 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 ,upper_hoehe_gefaehlle) - ende = (x , y - dy + esoffset,lower_hoehe_gefaehlle) - line = Line.new(dxfattribs={"start": start, "end": ende}) - copy= line.copy() - - 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]),dxfattribs={"rotation": 180}) - bref =msp.add_blockref(blockname,(x,y,hoehe_gefaehlle),dxfattribs={"rotation": rotation}) - bref.add_attrib( + erstellung_gefaelle_block_verbunenden_am_einen(x, y, doc, lib_doc, asoffset, esoffset, upper_hoehe_gefaehlle, lower_hoehe_gefaehlle, hoehe_gefaehlle, drehung0, laenge, hight, blockname) + blockref_layer = get_layer(doc, lib_doc, blockname) + bref =msp.add_blockref(blockname,(x,y,hoehe_gefaehlle),dxfattribs={"rotation": rotation, "layer": blockref_layer}) + a =bref.add_attrib( tag= "NAME", text= merkmale.get("bezeichner"), insert = (x,y) - ) + ) + a.is_invisible = True @@ -548,7 +489,7 @@ 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: drehung0 =gefaellestrecke_nachbarn.get("Drehung0") drehung1 = gefaellestrecke_nachbarn.get("Drehung1") - hoehe0 = gefaellestrecke_nachbarn.get("Hoehe0") + hoehe0 = gefaellestrecke_nachbarn.get("Hoehe0") hoehe1 = gefaellestrecke_nachbarn.get("Hoehe1") x0_kreisel = float(gefaellestrecke_nachbarn.get("x0")) y0_kreisel = float(gefaellestrecke_nachbarn.get("y0")) @@ -573,18 +514,18 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v 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) + 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), hoehe1) - pos1_1_floor = (math.floor(x1_kreisel - dx1), math.floor(y1_kreisel - dy1), hoehe1) - pos1_0_round = (round(x1_kreisel + dx1), round(y1_kreisel + dy1), hoehe1) - pos1_1_round = (round(x1_kreisel - dx1), round(y1_kreisel - dy1), hoehe1) + 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 @@ -615,40 +556,41 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v # vergleich mit einem kreisel von zwei - if( (abstand_fuer_kreis_start_x_floor[0] == pos0_0_floor[0] and abstand_fuer_kreis_start_x_floor[1] == pos0_0_floor[1] )or - ( abstand_fuer_kreis_start_x_floor[0] == pos0_1_floor[0] and abstand_fuer_kreis_start_x_floor[1] == pos0_1_floor[1]) or - ( abstand_gegen_kreis_start_x_floor[0] == pos0_0_floor[0] and abstand_gegen_kreis_start_x_floor[1] == pos0_0_floor[1]) or - ( abstand_gegen_kreis_start_x_floor[0] == pos0_1_floor[0] and abstand_gegen_kreis_start_x_floor[1] == pos0_1_floor[1]) or - (abstand_fuer_kreis_ende_x_floor[0] == pos0_0_floor[0] and abstand_fuer_kreis_ende_x_floor[1] == pos0_0_floor[1] )or - ( abstand_fuer_kreis_ende_x_floor[0] == pos0_1_floor[0] and abstand_fuer_kreis_ende_x_floor[1] == pos0_1_floor[1]) or - ( abstand_gegen_kreis_ende_x_floor[0] == pos0_0_floor[0] and abstand_gegen_kreis_ende_x_floor[1] == pos0_0_floor[1]) or - ( abstand_gegen_kreis_ende_x_floor[0] == pos0_1_floor[0] and abstand_gegen_kreis_ende_x_floor[1] == pos0_1_floor[1]) or + 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[0] == pos0_0_floor[0] and abstand_fuer_kreis_start_y_floor[1] == pos0_0_floor[1] )or - ( abstand_fuer_kreis_start_y_floor[0] == pos0_1_floor[0] and abstand_fuer_kreis_start_y_floor[1] == pos0_1_floor[1]) or - ( abstand_gegen_kreis_start_y_floor[0] == pos0_0_floor[0] and abstand_gegen_kreis_start_y_floor[1] == pos0_0_floor[1]) or - ( abstand_gegen_kreis_start_y_floor[0] == pos0_1_floor[0] and abstand_gegen_kreis_start_y_floor[1] == pos0_1_floor[1]) or - (abstand_fuer_kreis_ende_y_floor[0] == pos0_0_floor[0] and abstand_fuer_kreis_ende_y_floor[1] == pos0_0_floor[1] )or - ( abstand_fuer_kreis_ende_y_floor[0] == pos0_1_floor[0] and abstand_fuer_kreis_ende_y_floor[1] == pos0_1_floor[1]) or - ( abstand_gegen_kreis_ende_y_floor[0] == pos0_0_floor[0] and abstand_gegen_kreis_ende_y_floor[1] == pos0_0_floor[1]) or - ( abstand_gegen_kreis_ende_y_floor[0] == pos0_1_floor[0] and abstand_gegen_kreis_ende_y_floor[1] == pos0_1_floor[1]) or - (abstand_fuer_kreis_start_x_round[0] == pos0_0_round[0] and abstand_fuer_kreis_start_x_round[1] == pos0_0_round[1] )or - ( abstand_fuer_kreis_start_x_round[0] == pos0_1_round[0] and abstand_fuer_kreis_start_x_round[1] == pos0_1_round[1]) or - ( abstand_gegen_kreis_start_x_round[0] == pos0_0_round[0] and abstand_gegen_kreis_start_x_round[1] == pos0_0_round[1]) or - ( abstand_gegen_kreis_start_x_round[0] == pos0_1_round[0] and abstand_gegen_kreis_start_x_round[1] == pos0_1_round[1]) or - (abstand_fuer_kreis_ende_x_round[0] == pos0_0_round[0] and abstand_fuer_kreis_ende_x_round[1] == pos0_0_round[1] )or - ( abstand_fuer_kreis_ende_x_round[0] == pos0_1_round[0] and abstand_fuer_kreis_ende_x_round[1] == pos0_1_round[1]) or - ( abstand_gegen_kreis_ende_x_round[0] == pos0_0_round[0] and abstand_gegen_kreis_ende_x_round[1] == pos0_0_round[1]) or - ( abstand_gegen_kreis_ende_x_round[0] == pos0_1_floor[0] and abstand_gegen_kreis_ende_x_round[1] == pos0_1_round[1]) or + (abstand_fuer_kreis_start_y_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[0] == pos0_0_round[0] and abstand_fuer_kreis_start_y_round[1] == pos0_0_round[1] )or - ( abstand_fuer_kreis_start_y_round[0] == pos0_1_round[0] and abstand_fuer_kreis_start_y_round[1] == pos0_1_round[1]) or - ( abstand_gegen_kreis_start_y_round[0] == pos0_0_round[0] and abstand_gegen_kreis_start_y_round[1] == pos0_0_round[1]) or - ( abstand_gegen_kreis_start_y_round[0] == pos0_1_round[0] and abstand_gegen_kreis_start_y_round[1] == pos0_1_round[1]) or - (abstand_fuer_kreis_ende_y_round[0] == pos0_0_round[0] and abstand_fuer_kreis_ende_y_round[1] == pos0_0_round[1] )or - ( abstand_fuer_kreis_ende_y_round[0] == pos0_1_round[0] and abstand_fuer_kreis_ende_y_round[1] == pos0_1_round[1]) or - ( abstand_gegen_kreis_ende_y_round[0] == pos0_0_round[0] and abstand_gegen_kreis_ende_y_round[1] == pos0_0_round[1]) or - ( abstand_gegen_kreis_ende_y_round[0] == pos0_1_round[0] and abstand_gegen_kreis_ende_y_round[1] == pos0_1_round[1]) + (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 @@ -656,44 +598,41 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v - if( (abstand_fuer_kreis_start_x_floor[0] == pos1_0_floor[0] and abstand_fuer_kreis_start_x_floor[1] == pos1_0_floor[1] )or - (abstand_fuer_kreis_start_x_floor[0] == pos1_1_floor[0] and abstand_fuer_kreis_start_x_floor[1] == pos1_1_floor[1]) or - (abstand_gegen_kreis_start_x_floor[0] == pos1_0_floor[0] and abstand_gegen_kreis_start_x_floor[1] == pos1_0_floor[1]) or - (abstand_gegen_kreis_start_x_floor[0] == pos1_1_floor[0] and abstand_gegen_kreis_start_x_floor[1] == pos1_1_floor[1]) or - (abstand_fuer_kreis_ende_x_floor[0] == pos1_0_floor[0] and abstand_fuer_kreis_ende_x_floor[1] == pos1_0_floor[1] )or - (abstand_fuer_kreis_ende_x_floor[0] == pos1_1_floor[0] and abstand_fuer_kreis_ende_x_floor[1] == pos1_1_floor[1]) or - (abstand_gegen_kreis_ende_x_floor[0] == pos1_0_floor[0] and abstand_gegen_kreis_ende_x_floor[1] == pos1_0_floor[1]) or - (abstand_gegen_kreis_ende_x_floor[0] == pos1_1_floor[0] and abstand_gegen_kreis_ende_x_floor[1] == pos1_1_floor[1]) or + 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[0] == pos1_0_floor[0] and abstand_fuer_kreis_start_y_floor[1] == pos1_0_floor[1] )or - (abstand_fuer_kreis_start_y_floor[0] == pos1_1_floor[0] and abstand_fuer_kreis_start_y_floor[1] == pos1_1_floor[1]) or - (abstand_gegen_kreis_start_y_floor[0] == pos1_0_floor[0] and abstand_gegen_kreis_start_y_floor[1] == pos1_0_floor[1]) or - (abstand_gegen_kreis_start_y_floor[0] == pos1_1_floor[0] and abstand_gegen_kreis_start_y_floor[1] == pos1_1_floor[1]) or - (abstand_fuer_kreis_ende_y_floor[0] == pos1_0_floor[0] and abstand_fuer_kreis_ende_y_floor[1] == pos1_0_floor[1] )or - (abstand_fuer_kreis_ende_y_floor[0] == pos1_1_floor[0] and abstand_fuer_kreis_ende_y_floor[1] == pos1_1_floor[1]) or - (abstand_gegen_kreis_ende_y_floor[0] == pos1_0_floor[0] and abstand_gegen_kreis_ende_y_floor[1] == pos1_0_floor[1]) or - (abstand_gegen_kreis_ende_y_floor[0] == pos1_1_floor[0] and abstand_gegen_kreis_ende_y_floor[1] == pos1_1_floor[1]) or + (abstand_fuer_kreis_start_y_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[0] == pos1_0_round[0] and abstand_fuer_kreis_start_x_round[1] == pos1_0_round[1] )or - (abstand_fuer_kreis_start_x_round[0] == pos1_1_round[0] and abstand_fuer_kreis_start_x_round[1] == pos1_1_round[1]) or - (abstand_gegen_kreis_start_x_round[0] == pos1_0_round[0] and abstand_gegen_kreis_start_x_round[1] == pos1_0_round[1]) or - (abstand_gegen_kreis_start_x_round[0] == pos1_1_round[0] and abstand_gegen_kreis_start_x_round[1] == pos1_1_round[1]) or - (abstand_fuer_kreis_ende_x_round[0] == pos1_0_round[0] and abstand_fuer_kreis_ende_x_round[1] == pos1_0_round[1])or - (abstand_fuer_kreis_ende_x_round[0] == pos1_1_round[0] and abstand_fuer_kreis_ende_x_round[1] == pos1_1_round[1]) or - (abstand_gegen_kreis_ende_x_round[0] == pos1_0_round[0] and abstand_gegen_kreis_ende_x_round[1] == pos1_0_round[1]) or - (abstand_gegen_kreis_ende_x_round[0] == pos1_1_round[0] and abstand_gegen_kreis_ende_x_round[1] == pos1_1_round[1]) or + (abstand_fuer_kreis_start_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[0] == pos1_0_round[0] and abstand_fuer_kreis_start_y_round[1] == pos1_0_round[1] )or - (abstand_fuer_kreis_start_y_round[0] == pos1_1_round[0] and abstand_fuer_kreis_start_y_round[1] == pos1_1_round[1]) or - (abstand_gegen_kreis_start_y_round[0] == pos1_0_round[0] and abstand_gegen_kreis_start_y_round[1] == pos1_0_round[1]) or - (abstand_gegen_kreis_start_y_round[0] == pos1_1_round[0] and abstand_gegen_kreis_start_y_round[1] == pos1_1_round[1]) or - (abstand_fuer_kreis_ende_y_round[0] == pos1_0_round[0] and abstand_fuer_kreis_ende_y_round[1] == pos1_0_round[1] )or - (abstand_fuer_kreis_ende_y_round[0] == pos1_1_round[0] and abstand_fuer_kreis_ende_y_round[1] == pos1_1_round[1]) or - (abstand_gegen_kreis_ende_y_round[0] == pos1_0_round[0] and abstand_gegen_kreis_ende_y_round[1] == pos1_0_round[1]) or - (abstand_gegen_kreis_ende_y_round[0] == pos1_1_round[0] and abstand_gegen_kreis_ende_y_round[1] == pos1_1_round[1]) + (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 @@ -702,7 +641,8 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v if kreisel_verbunden == 2: start = x +dx, y + dy,upper_hoehe_gefaehlle ende = x -dx, y - dy,lower_hoehe_gefaehlle - msp.add_line(start,ende) + line = msp.add_line(start,ende) + line.dxf.layer = "6-SP" return @@ -721,42 +661,42 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v # 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[0] == pos0_0_floor[0] and abstand_fuer_kreis_start_y_floor[1] == pos0_0_floor[1])or - (abstand_fuer_kreis_start_y_floor[0] == pos0_1_floor[0] and abstand_fuer_kreis_start_y_floor[1] == pos0_1_floor[1]) or - (abstand_gegen_kreis_start_y_floor[0] == pos0_0_floor[0] and abstand_gegen_kreis_start_y_floor[1] == pos0_0_floor[1]) or - (abstand_gegen_kreis_start_y_floor[0] == pos0_1_floor[0] and abstand_gegen_kreis_start_y_floor[1] == pos0_1_floor[1]) or - (abstand_fuer_kreis_ende_y_floor[0] == pos0_0_floor[0] and abstand_fuer_kreis_ende_y_floor[1] == pos0_0_floor[1])or - (abstand_fuer_kreis_ende_y_floor[0] == pos0_1_floor[0] and abstand_fuer_kreis_ende_y_floor[1] == pos0_1_floor[1]) or - (abstand_gegen_kreis_ende_y_floor[0] == pos0_0_floor[0] and abstand_gegen_kreis_ende_y_floor[1] == pos0_0_floor[1]) or - (abstand_gegen_kreis_ende_y_floor[0] == pos0_1_floor[0] and abstand_gegen_kreis_ende_y_floor[1] == pos0_1_floor[1]) or - (abstand_fuer_kreis_start_y_round[0] == pos0_0_round[0] and abstand_fuer_kreis_start_y_round[1] == pos0_0_round[1])or - (abstand_fuer_kreis_start_y_round[0] == pos0_1_round[0] and abstand_fuer_kreis_start_y_round[1] == pos0_1_round[1]) or - (abstand_gegen_kreis_start_y_round[0] == pos0_0_round[0] and abstand_gegen_kreis_start_y_round[1] == pos0_0_round[1]) or - (abstand_gegen_kreis_start_y_round[0] == pos0_1_round[0] and abstand_gegen_kreis_start_y_round[1] == pos0_1_round[1]) or - (abstand_fuer_kreis_ende_y_round[0] == pos0_0_round[0] and abstand_fuer_kreis_ende_y_round[1] == pos0_0_round[1])or - (abstand_fuer_kreis_ende_y_round[0] == pos0_1_round[0] and abstand_fuer_kreis_ende_y_round[1] == pos0_1_round[1]) or - (abstand_gegen_kreis_ende_y_round[0] == pos0_0_round[0] and abstand_gegen_kreis_ende_y_round[1] == pos0_0_round[1]) or - (abstand_gegen_kreis_ende_y_round[0] == pos0_1_round[0] and abstand_gegen_kreis_ende_y_round[1] == pos0_1_round[1]) or + (abstand_fuer_kreis_start_y_floor== 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[0] == pos1_0_floor[0] and abstand_fuer_kreis_start_y_floor[1] == pos1_0_floor[1] )or - ( abstand_fuer_kreis_start_y_floor[0] == pos1_1_floor[0] and abstand_fuer_kreis_start_y_floor[1] == pos1_1_floor[1]) or - ( abstand_gegen_kreis_start_y_floor[0] == pos1_0_floor[0] and abstand_gegen_kreis_start_y_floor[1] == pos1_0_floor[1]) or - ( abstand_gegen_kreis_start_y_floor[0] == pos1_1_floor[0] and abstand_gegen_kreis_start_y_floor[1] == pos1_1_floor[1]) or - (abstand_fuer_kreis_ende_y_floor[0] == pos1_0_floor[0] and abstand_fuer_kreis_ende_y_floor[1] == pos1_0_floor[1] )or - ( abstand_fuer_kreis_ende_y_floor[0] == pos1_1_floor[0] and abstand_fuer_kreis_ende_y_floor[1] == pos1_1_floor[1]) or - ( abstand_gegen_kreis_ende_y_floor[0] == pos1_0_floor[0] and abstand_gegen_kreis_ende_y_floor[1] == pos1_0_floor[1]) or - ( abstand_gegen_kreis_ende_y_floor[0] == pos1_1_floor[0] and abstand_gegen_kreis_ende_y_floor[1] == pos1_1_floor[1]) or + (abstand_fuer_kreis_start_y_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[0] == pos1_0_round[0] and abstand_fuer_kreis_start_y_round[1] == pos1_0_round[1] )or - ( abstand_fuer_kreis_start_y_round[0] == pos1_1_round[0] and abstand_fuer_kreis_start_y_round[1] == pos1_1_round[1]) or - ( abstand_gegen_kreis_start_y_round[0] == pos1_0_round[0] and abstand_gegen_kreis_start_y_round[1] == pos1_0_round[1]) or - ( abstand_gegen_kreis_start_y_round[0] == pos1_1_round[0] and abstand_gegen_kreis_start_y_round[1] == pos1_1_round[1]) or - (abstand_fuer_kreis_ende_y_round[0] == pos1_0_round[0] and abstand_fuer_kreis_ende_y_round[1] == pos1_0_round[1] )or - ( abstand_fuer_kreis_ende_y_round[0] == pos1_1_round[0] and abstand_fuer_kreis_ende_y_round[1] == pos1_1_round[1]) or - ( abstand_gegen_kreis_ende_y_round[0] == pos1_0_round[0] and abstand_gegen_kreis_ende_y_round[1] == pos1_0_round[1]) or - ( abstand_gegen_kreis_ende_y_round[0] == pos1_1_round[0] and abstand_gegen_kreis_ende_y_round[1] == pos1_1_round[1]) + (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: @@ -846,10 +786,7 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v else: hight_position = "higher" - if richtung2 == "DEFAULT": - blockname = f"Ils_2.0_Gefaellestrecke_{laenge}_{hoehe_gefaehlle}_{drehung0}_{drehung1}_{hight_position}_{verbunden_am_einen}" - else: - blockname = f"Ils_2.0_Gefaellestrecke_{laenge}_{hoehe_gefaehlle}_{drehung0}_{drehung1}_{hight_position}_{unterschiedlich}_{richtung2}_{verbunden_am_einen}" + if gefaelle == "oben": rotation = 0 elif gefaelle == "unten" : @@ -864,19 +801,21 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v if (kreisel_verbunden == 1 and richtung2 =="DEFAULT"): richtung2 = richtung0 - - gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoehe_gefaehlle, lower_hoehe_gefaehlle, hoehe_gefaehlle,richtung2, am_kreisel,drehung0, drehung1, laenge, hight_position, verbunden_am_einen,blockname) - + if richtung2 == "DEFAULT": + blockname = f"Ils_2.0_Gefaellestrecke_{laenge}_{hoehe_gefaehlle}_{drehung0}_{drehung1}_{hight_position}_{verbunden_am_einen}" + else: + blockname = f"Ils_2.0_Gefaellestrecke_{laenge}_{hoehe_gefaehlle}_{drehung0}_{drehung1}_{hight_position}_{unterschiedlich}_{richtung2}_{verbunden_am_einen}" + gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoehe_gefaehlle, lower_hoehe_gefaehlle, hoehe_gefaehlle,richtung2,drehung0, drehung1, laenge, hight_position,blockname) + blockref_layer = get_layer(doc, lib_doc, blockname) - bref =msp.add_blockref(blockname,(x,y,hoehe_gefaehlle),dxfattribs={"rotation": rotation}) - bref.add_attrib( + bref =msp.add_blockref(blockname,(x,y,hoehe_gefaehlle),dxfattribs={"rotation": rotation, "layer": blockref_layer }) + a = bref.add_attrib( tag= "NAME", text= merkmale.get("bezeichner"), insert = (x,y) - - ) + a.is_invisible = True #falls eine gefällestrecke nicht mit einem kreisel verbunden ist else: laenge_m = merkmale.get("Länge in Meter", "10").replace(",", ".") @@ -891,11 +830,90 @@ def handle_ils_2_0_gefaellestrecke(msp, teileid, merkmale, x, y, doc, lib_doc, v dy = halbe_laenge * math.cos(winkel) start = x +dx, y + dy,upper_hoehe_gefaehlle ende = x -dx, y - dy,lower_hoehe_gefaehlle - msp.add_line(start,ende) + line = msp.add_line(start,ende) + line.dxf.layer = "6-SP" + +def erstellung_gefaelle_block_verbunenden_am_einen(x, y, doc, lib_doc, asoffset, esoffset, upper_hoehe_gefaehlle, lower_hoehe_gefaehlle, hoehe_gefaehlle, drehung0, laenge, hight, blockname): + if blockname not in doc.blocks and hight == "higher" and drehung0 == "GUZS": + 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) + ende = (x , y - dy ,lower_hoehe_gefaehlle) + line = Line.new(dxfattribs={"start": start, "end": ende}) + line.dxf.layer = "6-SP" + copy= line.copy() + + 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 hight == "lower" and drehung0 == "GUZS": + 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,upper_hoehe_gefaehlle) + ende = (x , y - dy + esoffset,lower_hoehe_gefaehlle) + line = Line.new(dxfattribs={"start": start, "end": ende}) + line.dxf.layer = "6-SP" + copy= line.copy() + + 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 hight == "higher" and drehung0 == "UZS": + 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) + ende = (x , y - dy ,lower_hoehe_gefaehlle) + line = Line.new(dxfattribs={"start": start, "end": ende}) + line.dxf.layer = "6-SP" + copy= line.copy() + + 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 hight == "lower" and drehung0 == "UZS": + 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 ,upper_hoehe_gefaehlle) + ende = (x , y - dy + esoffset,lower_hoehe_gefaehlle) + line = Line.new(dxfattribs={"start": start, "end": ende}) + line.dxf.layer = "6-SP" + copy= line.copy() + + 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}) -def gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoehe_gefaehlle, lower_hoehe_gefaehlle, hoehe_gefaehlle,richtung2,am_kreisel, drehung0, drehung1, laenge, hight_position,verbunden_am_einen, blockname): +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): #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" : @@ -903,9 +921,11 @@ def gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoeh halbe_laenge = laenge / 2 dy = halbe_laenge * math.cos(0) + start = (x , y + dy,upper_hoehe_gefaehlle) ende = (x , y - dy + esoffset,lower_hoehe_gefaehlle) line = Line.new(dxfattribs={"start": start, "end": ende}) + line.dxf.layer = "6-SP" copy= line.copy() copy.translate(-x,-y,-hoehe_gefaehlle) @@ -919,9 +939,11 @@ def gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoeh halbe_laenge = laenge / 2 dy = halbe_laenge * math.cos(0) + 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" copy= line.copy() copy.translate(-x,-y,-hoehe_gefaehlle) @@ -935,9 +957,11 @@ def gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoeh halbe_laenge = laenge / 2 dy = halbe_laenge * math.cos(0) + start = (x , y + dy ,upper_hoehe_gefaehlle) ende = (x , y - dy + esoffset,lower_hoehe_gefaehlle) line = Line.new(dxfattribs={"start": start, "end": ende}) + line.dxf.layer = "6-SP" copy= line.copy() copy.translate(-x,-y,-hoehe_gefaehlle) @@ -945,15 +969,18 @@ def gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoeh 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]), dxfattribs={"rotation": 180}) + 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)) halbe_laenge = laenge / 2 dy = halbe_laenge * math.cos(0) + 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" + copy= line.copy() copy.translate(-x,-y,-hoehe_gefaehlle) @@ -961,7 +988,7 @@ def gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoeh 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])) + 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)) halbe_laenge = laenge / 2 @@ -970,6 +997,8 @@ def gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoeh start = (x , y + dy ,upper_hoehe_gefaehlle) ende = (x , y - dy + esoffset,lower_hoehe_gefaehlle) line = Line.new(dxfattribs={"start": start, "end": ende}) + line.dxf.layer = "6-SP" + copy= line.copy() copy.translate(-x ,-y,-hoehe_gefaehlle) @@ -980,16 +1009,19 @@ def gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoeh - block.add_blockref(block_es, (ende[0]-x ,ende[1]-esoffset -y,ende[2]),dxfattribs={"rotation": 180}) + 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)) halbe_laenge = laenge / 2 dy = halbe_laenge * math.cos(0) + 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" + copy= line.copy() copy.translate(-x ,-y,-hoehe_gefaehlle) @@ -997,7 +1029,7 @@ def gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoeh 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]),dxfattribs={"rotation": 180}) + 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")): @@ -1005,9 +1037,13 @@ def gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoeh halbe_laenge = laenge / 2 dy = halbe_laenge * math.cos(0) + start = (x , y + dy,upper_hoehe_gefaehlle) ende = (x , y - dy + esoffset,lower_hoehe_gefaehlle) line = Line.new(dxfattribs={"start": start, "end": ende}) + line.dxf.layer = "6-SP" + + copy= line.copy() copy.translate(-x ,-y,-hoehe_gefaehlle) @@ -1016,7 +1052,7 @@ def gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoeh 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])) + 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)) halbe_laenge = laenge / 2 @@ -1025,6 +1061,8 @@ def gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoeh 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" + copy= line.copy() copy.translate(-x ,-y,-hoehe_gefaehlle) @@ -1032,7 +1070,7 @@ def gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoeh 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]),dxfattribs={"rotation": 180}) + 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 else: if blockname not in doc.blocks and drehung0 == "GUZS" and drehung1 == "GUZS" : @@ -1040,9 +1078,12 @@ def gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoeh halbe_laenge = laenge / 2 dy = halbe_laenge * math.cos(0) + start = (x , y + dy - asoffset,upper_hoehe_gefaehlle) ende = (x , y - dy + esoffset,lower_hoehe_gefaehlle) line = Line.new(dxfattribs={"start": start, "end": ende}) + line.dxf.layer = "6-SP" + copy= line.copy() copy.translate(-x,-y,-hoehe_gefaehlle) @@ -1062,6 +1103,8 @@ def gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoeh start = (x , y + dy - asoffset,upper_hoehe_gefaehlle) ende = (x , y - dy + esoffset,lower_hoehe_gefaehlle) line = Line.new(dxfattribs={"start": start, "end": ende}) + line.dxf.layer = "6-SP" + copy= line.copy() copy.translate(-x,-y,-hoehe_gefaehlle) @@ -1070,8 +1113,8 @@ def gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoeh import_block(block_as,lib_doc,doc) block_es = "400102632_ES-Element_90_links" import_block(block_es,lib_doc,doc) - block.add_blockref(block_as,(start[0]-x ,start[1]+asoffset -y,start[2])) - block.add_blockref(block_es, (ende[0]-x ,ende[1]- esoffset-y,ende[2]),dxfattribs={"rotation": 180}) + block.add_blockref(block_as,(start[0]-x ,start[1]+asoffset -y,start[2] - hoehe_gefaehlle)) + 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": @@ -1079,9 +1122,12 @@ def gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoeh halbe_laenge = laenge / 2 dy = halbe_laenge * math.cos(0) + start = (x , y + dy - asoffset,upper_hoehe_gefaehlle) ende = (x , y - dy + esoffset,lower_hoehe_gefaehlle) line = Line.new(dxfattribs={"start": start, "end": ende}) + line.dxf.layer = "6-SP" + copy= line.copy() copy.translate(-x ,-y,-hoehe_gefaehlle) @@ -1091,9 +1137,9 @@ def gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoeh block_es = "400102632_ES-Element_90_links" import_block(block_es,lib_doc,doc) - block.add_blockref(block_as,(start[0]-x ,start[1]+asoffset -y,start[2]),dxfattribs={"rotation": 180}) + block.add_blockref(block_as,(start[0]-x ,start[1]+asoffset -y,start[2] - hoehe_gefaehlle),dxfattribs={"rotation": 180}) - block.add_blockref(block_es, (ende[0]-x ,ende[1]-esoffset -y,ende[2]),dxfattribs={"rotation": 180}) + 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== "higher")or (drehung0 == "GUZS" and drehung1 == "UZS" and hight_position == "lower")): @@ -1101,9 +1147,12 @@ def gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoeh halbe_laenge = laenge / 2 dy = halbe_laenge * math.cos(0) + start = (x , y + dy - asoffset,upper_hoehe_gefaehlle) ende = (x , y - dy + esoffset,lower_hoehe_gefaehlle) line = Line.new(dxfattribs={"start": start, "end": ende}) + line.dxf.layer = "6-SP" + copy= line.copy() copy.translate(-x ,-y,-hoehe_gefaehlle) @@ -1113,9 +1162,9 @@ def gefaellegerade_erstellung(x, y, doc, lib_doc, asoffset, esoffset, upper_hoeh block_es = "200000146_ES-Element_90_rechts" import_block(block_es,lib_doc,doc) - block.add_blockref(block_as,(start[0]-x ,start[1]+asoffset -y,start[2]),dxfattribs={"rotation": 180}) + block.add_blockref(block_as,(start[0]-x ,start[1]+asoffset -y,start[2] - hoehe_gefaehlle),dxfattribs={"rotation": 180}) - block.add_blockref(block_es, (ende[0]-x ,ende[1]-esoffset -y,ende[2])) + block.add_blockref(block_es, (ende[0]-x ,ende[1]-esoffset -y,ende[2] - hoehe_gefaehlle)) def handle_omniflo(msp, teileid, merkmale, x, y, doc, lib_doc, verbose, symbols, gefaellestrecken_nachbarn,config): """ @@ -1182,7 +1231,10 @@ def handle_omniflo(msp, teileid, merkmale, x, y, doc, lib_doc, verbose, symbols, def get_layer(doc, lib_doc, blockname): - src = lib_doc.blocks[blockname] + if blockname in lib_doc.blocks: + src = lib_doc.blocks[blockname] + else: + src = doc.blocks[blockname] try: used_layer_names = {e.dxf.layer for e in src if hasattr(e.dxf, "layer")} for layer_name in used_layer_names: