getpositions schreibt nur noch eine json Ergebnisdatei raus. Config launch.json und routing.py angepasst; in Requirements networkx aufgenommen.
This commit is contained in:
Vendored
+15
-1
@@ -4,6 +4,7 @@
|
|||||||
// Weitere Informationen finden Sie unter https://go.microsoft.com/fwlink/?linkid=830387
|
// Weitere Informationen finden Sie unter https://go.microsoft.com/fwlink/?linkid=830387
|
||||||
"version": "0.2.0",
|
"version": "0.2.0",
|
||||||
"configurations": [
|
"configurations": [
|
||||||
|
|
||||||
{
|
{
|
||||||
"name": "Python-Debugger: Aktuelle Datei mit Argumenten",
|
"name": "Python-Debugger: Aktuelle Datei mit Argumenten",
|
||||||
"type": "debugpy",
|
"type": "debugpy",
|
||||||
@@ -33,7 +34,8 @@
|
|||||||
"-s",
|
"-s",
|
||||||
"-d",
|
"-d",
|
||||||
"-r",
|
"-r",
|
||||||
"-c"
|
"-c",
|
||||||
|
"-w"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -65,6 +67,18 @@
|
|||||||
"-r"
|
"-r"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "run routing for easy",
|
||||||
|
"type": "debugpy",
|
||||||
|
"request": "launch",
|
||||||
|
"program": "${file}",
|
||||||
|
"console": "integratedTerminal",
|
||||||
|
"justMyCode": true,
|
||||||
|
"args": [
|
||||||
|
"--inputfile",
|
||||||
|
"easy_positions.json"
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "draw cable dxf from easy.json",
|
"name": "draw cable dxf from easy.json",
|
||||||
"type": "debugpy",
|
"type": "debugpy",
|
||||||
|
|||||||
@@ -0,0 +1,54 @@
|
|||||||
|
Um den Abstand eines Punktes $P$ von einer Strecke $\overline{AB}$ im zweidimensionalen Raum zu berechnen, gehst du wie folgt vor:
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Gegeben:
|
||||||
|
|
||||||
|
* Punkt $P = (x_0, y_0)$
|
||||||
|
* Strecke mit den Endpunkten $A = (x_1, y_1)$, $B = (x_2, y_2)$
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Schritt-für-Schritt-Lösung:
|
||||||
|
|
||||||
|
1. **Vektorbildung**:
|
||||||
|
|
||||||
|
* $\vec{AP} = (x_0 - x_1, y_0 - y_1)$
|
||||||
|
* $\vec{AB} = (x_2 - x_1, y_2 - y_1)$
|
||||||
|
|
||||||
|
2. **Skalare Projektion von $\vec{AP}$ auf $\vec{AB}$**:
|
||||||
|
|
||||||
|
$$
|
||||||
|
t = \frac{\vec{AP} \cdot \vec{AB}}{|\vec{AB}|^2}
|
||||||
|
$$
|
||||||
|
|
||||||
|
3. **Fallunterscheidung**:
|
||||||
|
|
||||||
|
* Wenn $t < 0$: nächstgelegener Punkt ist $A$
|
||||||
|
* Wenn $t > 1$: nächstgelegener Punkt ist $B$
|
||||||
|
* Wenn $0 \leq t \leq 1$: Projektion fällt auf die Strecke, d.h. Punkt $Q = A + t \cdot \vec{AB}$
|
||||||
|
|
||||||
|
4. **Abstandsberechnung**:
|
||||||
|
|
||||||
|
* Falls $t < 0$ oder $t > 1$: Abstand = $|P - A|$ bzw. $|P - B|$
|
||||||
|
* Sonst: Abstand = $|P - Q|$
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Beispiel in Formel:
|
||||||
|
|
||||||
|
$$
|
||||||
|
\text{Abstand} =
|
||||||
|
\begin{cases}
|
||||||
|
\sqrt{(x_0 - x_1)^2 + (y_0 - y_1)^2}, & \text{wenn } t < 0 \\
|
||||||
|
\sqrt{(x_0 - x_2)^2 + (y_0 - y_2)^2}, & \text{wenn } t > 1 \\
|
||||||
|
\sqrt{(x_0 - x_q)^2 + (y_0 - y_q)^2}, & \text{sonst}
|
||||||
|
\end{cases}
|
||||||
|
$$
|
||||||
|
|
||||||
|
wobei:
|
||||||
|
|
||||||
|
$$
|
||||||
|
x_q = x_1 + t \cdot (x_2 - x_1), \quad y_q = y_1 + t \cdot (y_2 - y_1)
|
||||||
|
$$
|
||||||
|
|
||||||
+2
-2
@@ -6,7 +6,7 @@ from dataclasses import dataclass, asdict, fields
|
|||||||
from dacite import from_dict
|
from dacite import from_dict
|
||||||
from typing import List
|
from typing import List
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
import shutil
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -73,7 +73,7 @@ def new_dxf(json_file, dxf_file, out_path):
|
|||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
parser = argparse.ArgumentParser(description='draws a dxf file with the given cable coordinates', prog='drawdxf')
|
parser = argparse.ArgumentParser(description='draws a dxf file with the given cable coordinates', prog='drawdxf')
|
||||||
parser.add_argument('-j', '--jsonfile', action='store', required=True, help='this json file contains all cables and its coordinates which should be drawn', metavar='myfile.json')
|
parser.add_argument('-j', '--jsonfile', action='store', required=True, help='this json file contains all cables and its coordinates which should be drawn. Saved with an unique timestamp', metavar='myfile.json')
|
||||||
parser.add_argument('-d', '--dxf', action='store', required=True, help='this dxf drawing will be copied and the new layer with the cables will be added', metavar='myfile.dxf')
|
parser.add_argument('-d', '--dxf', action='store', required=True, help='this dxf drawing will be copied and the new layer with the cables will be added', metavar='myfile.dxf')
|
||||||
|
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|||||||
+10
-2
@@ -170,6 +170,7 @@ if __name__ == '__main__':
|
|||||||
parser.add_argument('-s', '--sensors', action='store_true', help='fetch all position of sensors, motors, actors')
|
parser.add_argument('-s', '--sensors', action='store_true', help='fetch all position of sensors, motors, actors')
|
||||||
parser.add_argument('-d', '--dists', action='store_true', help='fetch all positions of all subdistributors')
|
parser.add_argument('-d', '--dists', action='store_true', help='fetch all positions of all subdistributors')
|
||||||
parser.add_argument('-r', '--rack', action='store_true', help='fetch all positions of all cable racks')
|
parser.add_argument('-r', '--rack', action='store_true', help='fetch all positions of all cable racks')
|
||||||
|
parser.add_argument('-w', '--write', action='store_true', help='write results into a json file')
|
||||||
parser.add_argument('-c', '--console', action='store_true', help='print results to output')
|
parser.add_argument('-c', '--console', action='store_true', help='print results to output')
|
||||||
|
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
@@ -179,7 +180,8 @@ if __name__ == '__main__':
|
|||||||
config_dir = os.environ.get("PROJECT_CFG")
|
config_dir = os.environ.get("PROJECT_CFG")
|
||||||
filename = args.filename
|
filename = args.filename
|
||||||
|
|
||||||
doc = get_dxf_file(os.path.join(work_dir, filename)) # type: ignore
|
dxf_path = os.path.join(work_dir, filename)
|
||||||
|
doc = get_dxf_file(dxf_path) # type: ignore
|
||||||
msp = doc.modelspace()
|
msp = doc.modelspace()
|
||||||
|
|
||||||
res_pos = dict()
|
res_pos = dict()
|
||||||
@@ -190,21 +192,27 @@ if __name__ == '__main__':
|
|||||||
config = configparser.ConfigParser(allow_no_value=True)
|
config = configparser.ConfigParser(allow_no_value=True)
|
||||||
config.read(os.path.join(config_dir, "getpositions.cfg"))
|
config.read(os.path.join(config_dir, "getpositions.cfg"))
|
||||||
|
|
||||||
|
output_results = dict()
|
||||||
if args.sensors:
|
if args.sensors:
|
||||||
res_pos = get_input_positions(msp)
|
res_pos = get_input_positions(msp)
|
||||||
|
output_results['sensors'] = res_pos
|
||||||
if args.console:
|
if args.console:
|
||||||
print(to_json(res_pos))
|
print(to_json(res_pos))
|
||||||
write_results(to_json(res_pos), work_dir, "sensors.json")
|
|
||||||
if args.dists:
|
if args.dists:
|
||||||
res_dist = get_subdistributor_positions(msp)
|
res_dist = get_subdistributor_positions(msp)
|
||||||
|
output_results['distributors'] = res_dist
|
||||||
if args.console:
|
if args.console:
|
||||||
print(to_json(res_dist))
|
print(to_json(res_dist))
|
||||||
write_results(to_json(res_dist), work_dir, "subdistributors.json")
|
write_results(to_json(res_dist), work_dir, "subdistributors.json")
|
||||||
if args.rack:
|
if args.rack:
|
||||||
res_rac = get_rack_positions(msp)
|
res_rac = get_rack_positions(msp)
|
||||||
|
output_results['racks'] = res_rac
|
||||||
if args.console:
|
if args.console:
|
||||||
print(to_json(res_rac))
|
print(to_json(res_rac))
|
||||||
write_results(to_json(res_rac), work_dir, "racks.json")
|
write_results(to_json(res_rac), work_dir, "racks.json")
|
||||||
|
if args.write:
|
||||||
|
basename = os.path.splitext(args.filename)[0]
|
||||||
|
write_results(to_json(output_results), work_dir, basename+"_positions.json")
|
||||||
|
|
||||||
else:
|
else:
|
||||||
parser.print_help()
|
parser.print_help()
|
||||||
|
|||||||
@@ -1,2 +1,4 @@
|
|||||||
|
matplotlib=3.10.0
|
||||||
|
networkx==3.4.2
|
||||||
dacite==1.9.2
|
dacite==1.9.2
|
||||||
ezdxf==1.4.1
|
ezdxf==1.4.1
|
||||||
|
|||||||
+8
-6
@@ -122,6 +122,7 @@ def node_to_coords(node_name, racks):
|
|||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
parser = argparse.ArgumentParser(description='Berechne Wege von Sensoren zu Verteilern über Kabeltrassen')
|
parser = argparse.ArgumentParser(description='Berechne Wege von Sensoren zu Verteilern über Kabeltrassen')
|
||||||
|
parser.add_argument('-i', '--inputfile', action='store', required=True, default="easy_position.json", help='file with all informations about positions gathered from getpositions', metavar='my_positions.json')
|
||||||
parser.add_argument('-c', '--console', action='store_true', help='Ausgabe auf Konsole')
|
parser.add_argument('-c', '--console', action='store_true', help='Ausgabe auf Konsole')
|
||||||
|
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
@@ -131,14 +132,15 @@ if __name__ == "__main__":
|
|||||||
config_dir = os.environ.get("PROJECT_CFG")
|
config_dir = os.environ.get("PROJECT_CFG")
|
||||||
|
|
||||||
# Pfade zu JSON-Dateien
|
# Pfade zu JSON-Dateien
|
||||||
sensors_path = os.path.join(work_dir, "sensors.json")
|
jsonfilename = args.inputfile
|
||||||
subdist_path = os.path.join(work_dir, "subdistributors.json")
|
sensors_path = os.path.join(work_dir, jsonfilename)
|
||||||
racks_path = os.path.join(work_dir, "racks.json")
|
|
||||||
|
|
||||||
# Einlesen
|
# Einlesen
|
||||||
sensors = load_json(sensors_path)
|
|
||||||
subdists = load_json(subdist_path)
|
data = load_json(sensors_path)
|
||||||
racks = load_json(racks_path)
|
sensors = data["sensors"]
|
||||||
|
subdists = data["distributors"]
|
||||||
|
racks = data["racks"]
|
||||||
|
|
||||||
# Graph erstellen
|
# Graph erstellen
|
||||||
graph = {}
|
graph = {}
|
||||||
|
|||||||
Reference in New Issue
Block a user