From 7658d058d077b53a22d67d4c12ab65914c47013c Mon Sep 17 00:00:00 2001 From: lertlmaier Date: Mon, 2 Jun 2025 15:16:07 +0200 Subject: [PATCH] =?UTF-8?q?Code=20Anpassung.=20Rack=20Namen=20werden=20nic?= =?UTF-8?q?ht=20mehr=20=C3=BCberschrieben.=20Zeichenen=20des=20Graphen=20m?= =?UTF-8?q?it=20easy=20korrekt.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/drawdxf.py | 17 ++++++++++------- lib/plant.py | 26 +++++++++++--------------- lib/routing.py | 2 +- 3 files changed, 22 insertions(+), 23 deletions(-) diff --git a/lib/drawdxf.py b/lib/drawdxf.py index eb830c3..c99b33a 100644 --- a/lib/drawdxf.py +++ b/lib/drawdxf.py @@ -57,7 +57,7 @@ def new_dxf(plines, out_path): def modify_original_dxf(plines, originaldxf): """ adds new layer to original .dxf-file that contains cables """ - print("adding cables to original .dxf") + print("adding cables to original .dxf ..") doc = ezdxf.readfile(originaldxf) create_cables(plines, doc) @@ -66,13 +66,13 @@ def modify_original_dxf(plines, originaldxf): print("done") -def copy_layers_into_new(originaldxf, outpath): +def copy_layers_into_new(originaldxf, outpath, plines): """ creates a new dxf file with a racks, sensors, subdists from original file including cable paths """ - print("copying layers from original .dxf into new .dxf") + print("copying layers from original .dxf into new .dxf ..") quelle = ezdxf.readfile(originaldxf) - ziel = ezdxf.readfile(outpath) + ziel = ezdxf.new('R2018', setup=True) copy_layers_into_dxf_by_filter(quelle, ziel) create_cables(plines, quelle) @@ -272,6 +272,7 @@ def copy_layers_into_dxf_by_filter(dxf_source: ezdxf.document.Drawing, dxf_targe if style.dxf.name not in dxf_target.styles: dxf_target.styles.new(name=style.dxf.name) + ''' # 2. alle Blockdefinitionen kopieren die benötigt werden used_blocks = {ins.dxf.name for ins in msp_source.query("INSERT")} for name in used_blocks: @@ -284,12 +285,14 @@ def copy_layers_into_dxf_by_filter(dxf_source: ezdxf.document.Drawing, dxf_targe # **ALLE** Entities im Block kopieren for ent in src_block: new_block.add_entity(ent.copy()) - + + # 3. Jetzt die INSERTs in den Modelspace kopieren for ins in msp_source.query("INSERT"): new_ins = ins.copy() msp_target.add_entity(new_ins) - + + ''' # 4. Filter-Layernamen bestimmen for layername in layernames: @@ -372,7 +375,7 @@ if __name__ == '__main__': out_path = os.path.join(work_dir, args.copy_layer) res_pos = new_dxf(plines, out_path) - copy_layers_into_new(origin_path, out_path) + copy_layers_into_new(origin_path, out_path, plines) if args.new: # erzeuge dxf Datei nur mit Kabeln diff --git a/lib/plant.py b/lib/plant.py index 2cac13c..ce0d64c 100644 --- a/lib/plant.py +++ b/lib/plant.py @@ -118,14 +118,8 @@ class RackIDs(): self._rack_tree = None def add_rack(self, beg:Point, end:Point, name:str): - if beg in self._point2rack: - self._point2rack[beg].append(name) - else: - self._point2rack[beg] = [name] - if end in self._point2rack: - self._point2rack[end].append(name) - else: - self._point2rack[end] = [name] + self.add_point_to_rack(beg, name) + self.add_point_to_rack(end, name) self._rack2begend[name] = (beg, end) # Anfangs und Endpunkte zu Rack Namen merken @@ -155,12 +149,12 @@ class RackIDs(): return list(self._rack2begend.keys()) def add_point_to_rack(self, point:Point, name:str): - if point in self._point2rack: - self._point2rack[point].append(name) - else: - self._point2rack[point] = [name] + ''' Fügt einen Punkt zu genanntem Rack hinzu. (z.B Zwischenpunkt in der Mitte)''' + if point not in self._point2rack: + self._point2rack[point] = set() + self._point2rack[point].add(name) - def get_racks_from_point(self, point:Point) -> list[str]: + def get_racks_from_point(self, point:Point) -> set[str]: return self._point2rack[point] def get_points_from_rack(self, name:str) -> list[Point]: @@ -196,7 +190,6 @@ class RackIDs(): rnames = self._rack_map allracks = self._rack_lines - # Erzeugung von BoundingBox for i, l1 in enumerate(allracks): bbox = box(*l1.bounds).buffer(self._tol_snap) @@ -212,13 +205,14 @@ class RackIDs(): if inter.geom_type == "Point": self.add_point_to_rack(inter, rnames[l1]) self.add_point_to_rack(inter, rnames[l2]) + continue # Beinahe Schnittpunkte -> Snapping for pt in [Point(l2.coords[0]), Point(l2.coords[-1])]: if l1.distance(pt) <= self._tol_snap: snap_point = l1.interpolate(l1.project(pt)) self.add_point_to_rack(snap_point, rnames[l1]) - connrackname = f"c-{rnames[l2]}" + connrackname = f"c-{rnames[l2]}-{rnames[l1]}" self.add_rack(pt, snap_point, connrackname) def rack_is_horizontal(self, name): @@ -558,6 +552,8 @@ class Anlage(): color = "orange" tname = rname.split("-")[2] weight = self.get_tunnel_length(tname) + elif re.match("c-.*", rname): + color = "green" else: color = "black" diff --git a/lib/routing.py b/lib/routing.py index 9416742..c30f693 100644 --- a/lib/routing.py +++ b/lib/routing.py @@ -57,7 +57,7 @@ def create_plant(racks:dict, sensors:dict, distributors:dict, mapping:dict, tunn tol_snap = config.getfloat("Racks", "SnapTolerances") tol_connect = config.getfloat("Sensoren", "ConnectionTolerances") - + G = nx.Graph() an = Anlage(tol_snap=tol_snap, tol_connect=tol_connect) # Füge racks aus Daten hinzu an.set_racks(racks)