===== config ===== aufgerufen von: main returned: Variablen-Objekt, GOTT-Objekt # -*- coding:utf-8 -*- from Knoten import Knoten from Weg import Weg import numpy as np class Variablen: '''Design Nach Singleton''' #Erstellt Attribut mit jedem Eintrag des Namedtuples welches in config() aus der JSON datei gebaut wird class __Variablen: def __init__(self,tupel=None): for x in tupel._fields: setattr(self,x,tupel.__getattribute__(x)) instance=None def __init__(self,tupel=None): if not Variablen.instance: Variablen.instance=Variablen.__Variablen(tupel) def __setattr__(self,name,val): setattr(self.instance,name,val) def __getattr__(self, name): return getattr(self.instance,name) class GOTT: class __GOTT: def __init__(self): self.knotenliste=[] self.wegliste=[] self.warteliste=[] instance=None def __init__(self): if not GOTT.instance: GOTT.instance=GOTT.__GOTT() def __setattr__(self,name,val): setattr(self.instance,name,val) def __getattr__(self, name): return getattr(self.instance,name) def config(): '''Importiert JSON txt und baut "variablen" Objekt mit statischen Variablen sowie "GOTT" Objekt mit Knoten-und Wegliste''' import json from collections import namedtuple d=open("./conf.txt",'r') variablen=d.read() d.close() variablen=json.loads(variablen,object_hook= lambda d: namedtuple('X',d.keys())(*d.values())) #Erstellt Variablen-Objekt aus namedtuple-Objekt variablen=Variablen(variablen) #Erstellt np.array aus liste variablen.zentrum=np.array(variablen.zentrum) #Erstellt Knoten-Objekte aus Koordinaten der Axiome variablen.axiom=[Knoten(np.array([float(x[0]),float(x[1])])) for x in variablen.axiom] #Findet die laengste mögliche Kantenlaenge und speichert sie als Attribut ein. variablen.maximaleKantenlaenge=max(variablen.radiallMax,variablen.gitterlMax,variablen.verzweigtlMax,variablen.nebenstrasselMax,variablen.seedlMax) def bilder_setup(img_name, img2_name): ''' Nimmt ein Bild als input, erstellt eine "Regel-Karte". Bei der Bild- erstellung bedenken: Rot = Gitter, Gruen = Verzweigt, Blau = Radial, wobei ein schwarzer Pixel ein Zentrum definiert. ''' import matplotlib.image as mpimg variablen.img = mpimg.imread(img_name) zentrum = [np.argwhere(variablen.img == [0,0,0])[0][1],np.argwhere(variablen.img == [0,0,0])[0][0]] variablen.img2 = mpimg.imread(img2_name) import os bilder_setup(os.getcwd()+"/Regelbilder/"+variablen.regelbild_name, os.getcwd()+"/Bevoelkerungsdichtebilder/"+variablen.bevoelkerungsbild_name) #Erstelt GOTT-Objekt mit Dynamischer Knoten- und Wegliste from copy import copy gott=GOTT() gott.knotenliste=copy(variablen.axiom) gott.wegliste=[] gott.warteliste=[] #Setzt die Nachbarn im Axiom richtig def setNachbarn(knoten): '''Setzt für jeden knoten im Axiom den richtigen Nachbarn''' d=np.inf nachbar=None for v in variablen.axiom: if v is not knoten: dneu=np.linalg.norm(v.koords-knoten.koords) if dneu Zunächst werden die beiden Singleton-Objekte die verwendet werden definiert. Das Variablen Objekt enthält alle Inputs, welche sich in der Laufzeit des Programmes nicht ändern. Dazu wird [[ss15:projekte_im_sommersemester_15:dokumentation:conf|conf.txt]] mit dem Python eigenen Json-Parser eingelesen und es wird zunächst ein Namedtuple Objekt gebaut. Jedes Element des Namedtuples wird dann zu einem Attribut des Variablen-Objektes gemacht. Dabei werden einige Inputs leicht verändert (z.B werden aus den Axiom-Koordinaten jeweils Knoten-Objekte gemacht).