Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

ss15:projekte_im_sommersemester_15:dokumentation:config

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<d:
					d=dneu
					nachbar=v
		knoten.nachbarn=[nachbar]
 
 
	def axiomwege():
		'''Weist den Axiom-Knoten die richtigen Wege zu'''
		done=[]
		for i in range(len(variablen.axiom)):			
			if (variablen.axiom[i] not in done) and (variablen.axiom[i].nachbarn[0] not in done):
				done.append(variablen.axiom[i])
				done.append(variablen.axiom[i].nachbarn[0])
 
		for i in range(len(done)/2):
			w=Weg(done[2*i],done[2*i+1])
 
			gott.wegliste.append(w)
			done[2*i].nachbarn.remove(done[2*i+1])
			done[2*i+1].nachbarn.remove(done[2*i])
 
 
 
 
 
	for k in variablen.axiom:
		setNachbarn(k)
	axiomwege()
 
	return variablen,gott

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 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).

ss15/projekte_im_sommersemester_15/dokumentation/config.txt · Zuletzt geändert: 2016/05/10 14:46 (Externe Bearbeitung)