Professional Documents
Culture Documents
Code
Code
GL import * from OpenGL.GLU import * import pygame from pygame.locals import * import time class Emissions: def __init__(self): self.SACO = [(75.0,0.0005),(85.0,0.0010),(95.0,0.0041)] self.SACO2 = [(75.0,0.0244),(85.0,0.0435),(95.0,0.0981),(55,0.0049),(65,0.0123)] self.SACH4 = [(75.0,0.0004048),(85.0,0.000856),(95.0,0.0017952)] self.INCO = [(75.0,0.0014),(85.0,0.0032),(95.0,0.0082),(65,0.0007)] self.INCO2 = [(75.0,0.0709),(85.0,0.1273),(95.0,0.2369),(65,0.0476),(55,0.0153)] self.INCH4 = [(75.0,0.000022),(85.0,0.00004),(95.0,0.00011),(65,0.0000081),(55,0.0000043)] def calculate_emissions_rate(self, gas, coal,temperature): """ gas: 0 => CO 1 => CO2 2 => CH4 CoalType: 0 => SA 1 => IN """ gast = ["CO","CO2","CH4"]
coalt = ["SA","IN"] #print " Gas Type : "+gast[gas] #print " Coal Type : "+coalt[coal] #print " Temperature: "+str(temperature) rate = 0 if coal == 0: if gas == 0: rate = self.calculate_rate(self.SACO,temperature) elif gas == 1: rate = self.calculate_rate(self.SACO2,temperature) elif gas == 2: rate = self.calculate_rate(self.SACH4,temperature) elif coal == 1: if gas == 0: rate = self.calculate_rate(self.INCO,temperature) elif gas == 1: rate = self.calculate_rate(self.INCO2,temperature) elif gas == 2: rate = self.calculate_rate(self.INCH4,temperature) #print " Rate #print "" return rate def calculate_rate(self,rates,temp): """Finds closest temperature and returns associated rate""" t,r = rates[0] d = abs(temp-t) rate = r for i in range(len(rates)): t,r = rates[i] if abs(temp-t) < d: : "+str(rate)
d = abs(temp-t) rate = r return rate def calculate_emissions(self,density,volume,gas,coal,temp): """ gas: 0 => CO 1 => CO2 3 => CH4 Coal: 0 => SA 1 => IN """ emissions = density*volume*self.calculate_emissions_rate(gas,coal,temp) return emissions precision = 20 X=3 Y=5 Z=5 square = [(float(i)/precision)**2 for i in range(precision*Z+1)] x2 = X**2 y2 = Y**2 z2 = Z**2 #http://gucky.uni-muenster.de/cgi-bin/rgbtab-en LIGHT_BLUE = (135/255, 206/255, 235/255) DARK_GREEN = (0,100/255, 0) YELLOW RED ORANGE = (255/255,255/255, 0) = (1,0,0) = (1,165/255,0)
def load_points_from_file(fname,points):
f = open(fname,'r') a = [] line = f.readline() while line != "": z,x,y,t = line.split(' ') #print (z,x,y) points[int(z)][int(x)][int(y)]=float(t) line = f.readline() return points def main(a,b,c,fname="points.txt"): #print ("X:"+str(a)+" Y:"+str(b)+" Z:"+str(c)) X = int(a) Y = int(b) Z = int(c) width = 1000 height = 800 temps = [[[[] for k in range(Y)] for j in range(X)] for i in range(Z)] temps = load_points_from_file(fname,temps)
pygame.display.init()
pygame.display.set_mode((width,height),pygame.HWSURFACE|pygame.OPENGL|pygame.D OUBLEBUF)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
glMatrixMode(GL_MODELVIEW)
glLoadIdentity() pygame.display.flip() x=0 y=0 z=0 glTranslate(-42.0, -18.0, -210.0) while (True): for event in pygame.event.get(): if event.type == QUIT: return if event.type == KEYUP and event.key == K_ESCAPE: return glClear(GL_COLOR_BUFFER_BIT) glPushMatrix()
elif pressed[K_DOWN]: y = y+1.0 if pressed[K_z]: z = z-1.0 elif pressed[K_x]: z = z+1.0 if pressed[K_q]: z = z-1.0 elif pressed[K_a]: z = z+1.0 glTranslate(x,y,z)
#-----------------------------------------------glPopMatrix() pygame.display.flip() time.sleep(0.01) class glStuff: def colorFromTemp(self,temp): if (temp<55): return LIGHT_BLUE if (temp<65): return DARK_GREEN if (temp<75): return YELLOW
if (temp<85): return ORANGE if (temp<95): return RED return LIGHT_BLUE def draw_cube(self,r,temp=100,x=0,y=0,z=0): glTranslate(x,y,z) glColor(self.colorFromTemp(temp)) glBegin(GL_QUADS)
glVertex(0,r,0) glVertex(r,r,0) glVertex(r,r,r) glVertex(0,r,r) glEnd() glTranslate(-x,-y,-z) def draw_rect(self,x,y,z,temps,r): for i in range(x): for j in range(y): for k in range(z): self.draw_cube(r,temps[k][i][j],i*r,j*r,r*k)
class GreetingWindow: def __init__(self): self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) self.window.set_default_size(400,400) self.window.set_border_width(10) self.window.set_title(")" self.VB = gtk.VBox(False,1) self.welcoming_text=gtk.Label(")" self.credits_1 = gtk.Label(")" self.credits_2 = gtk.Label(")" self.credits_3 = gtk.Label("written by moshe green") self.imageview = gtk.Image() self.run_text = ""
self.button = gtk.Button(self.run_text) self.button.connect("clicked", self.onClicked) self.imageview.set_from_file("frontimage1.jpg") self.VB.add(self.welcoming_text) self.VB.add(self.imageview) self.VB.add(self.button) self.VB.add(self.credits_1) self.VB.add(self.credits_2) self.VB.add(self.credits_3) self.window.add(self.VB) self.window.show_all() self.h = None def onClicked(self,nothing): self.window.hide() self.window.unrealize() self.h = CoalWindow() def main(self): gtk.main() class CoalWindow: def __init__(self): self.MAX_X = 5 self.MAX_Y = 5 self.MAX_Z = 5 self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) self.window.set_default_size(800,600) self.window.set_border_width(10) self.window.set_title(")" self.x = 1 self.y = 1 self.z = 1
self.points = [[[75 for i in range(self.MAX_Y)] for j in range(self.MAX_X)] for k in range(self.MAX_Z)] self.emits = emissions.Emissions() self.resLabels = [] self.window.connect('destroy', lambda *w: gtk.main_quit())
#Labels self.label_dimentions = gtk.Label(")" self.label_x self.label_y self.label_z self.label_points = gtk.Label(")" = gtk.Label(")" = gtk.Label(")" = gtk.Label(")".
self.label_location = gtk.Label(")" self.label_density = gtk.Label("( kg/m^3)") self.label_density_value = gtk.Label("0.85 ") self.label_temperature_at = gtk.Label(")":) ( self.label_results = gtk.Label(")":) ( self.label_coaltype = gtk.Label(")"
#creating location density combo-box text self.CBTlocation = gtk.combo_box_new_text() self.CBTlocation.append_text(")" self.CBTlocation.append_text(")" self.CBTlocation.set_active(0) self.CBTlocation.connect("changed",self.onLocationChanged)
#creating dimension spin-buttons self.SBdimx = gtk.SpinButton(gtk.Adjustment(1,1,self.MAX_X,1)) self.SBdimy = gtk.SpinButton(gtk.Adjustment(1,1,self.MAX_Y,1)) self.SBdimz = gtk.SpinButton(gtk.Adjustment(1,1,self.MAX_Z,1)) self.SBdimx.connect("changed",self.onChangedDimx) self.SBdimy.connect("changed",self.onChangedDimy) self.SBdimz.connect("changed",self.onChangedDimz) self.VBdims = gtk.VBox(True,3)
#total emissions table self.TableT = gtk.Table(4,2) self.label_total_emissions = gtk.Label(")") ( self.label_totalCO = gtk.Label("CO") self.label_totalCO2 = gtk.Label("CO2") self.label_totalCH4 = gtk.Label("CH4") self.co = gtk.Label("") self.co2 = gtk.Label("") self.ch4 = gtk.Label("")
#creating results per point table self.results = gtk.Table(self.x*self.y*self.z,4,True) self.coL = gtk.Label("CO") self.co2L = gtk.Label("CO2") self.ch4L = gtk.Label("CH4") self.pL = gtk.Label(")". self.results.attach(self.pL,0,1,0,1) self.results.attach(self.coL,1,2,0,1) self.results.attach(self.co2L,2,3,0,1) self.results.attach(self.ch4L,3,4,0,1) self.coL.show() self.co2L.show() self.ch4L.show() self.pL.show() #---self.results_SW = gtk.ScrolledWindow() self.results_SW.add_with_viewport(self.results)
#----
#self.drawingArea = gtk.DrawingArea()
#creating vb and hb for temp per point self.Right_UpperHB = gtk.HBox(False,1) self.VBpoints self.VBtemp = gtk.VBox(False,1) = gtk.VBox(False,1)
#save and display ButtonCreationand adding self.b1 = gtk.Button() self.HBMain.add(self.b1) self.b1.set_label(")" self.b1.connect("clicked",self.save) self.b1.show()
#adding dimensions spin buttons to container self.VBdims.add(self.label_dimentions) #---self.VBdims_xHB = gtk.HBox(False,1) self.VBdims_xHB.add(self.label_x) self.VBdims_xHB.add(self.SBdimx) self.VBdims.add(self.VBdims_xHB) #----
#------------left column-----------------
self.VBLeft_Upper.add(self.VBdims)
self.VBLeft.add(self.VBLeft_Upper) self.VBLeft.add(self.VBLeft_Middle)
#------------Middle column--------------#self.VBMiddle.add(self.drawingArea)
self.VBRight.add(self.label_results) self.VBRight.add(self.results_SW)
#adding to main box self.HBMain.add(self.VBLeft) self.HBMain.add(self.VBMiddle) self.HBMain.add(self.VBRight) #adding main box to window self.window.add(self.HBMain)
#Showing all widgets #self.label_dimentions.show() #self.label_x.show() #self.label_y.show() #self.label_z.show() self.label_points.show() #self.label_location.show() #self.label_density.show() #self.label_density_value.show() self.label_temperature_at.show() self.label_results.show() #self.label_coaltype.show()
#self.VBLeft_Upper.show() #self.VBLeft_Middle.show()
def onChangedPoint(self,nothing): (y,x,z) = self.ijk(int(self.SBpoints.get_value())-1) self.SBtemp.set_value(self.points[z][x][y]) def onChangedTemperature(self,nothing): (y,x,z) = self.ijk(int(self.SBpoints.get_value())-1) self.points[z][x][y] = self.SBtemp.get_value() self.populate_results(None)
def print2d(self,points): for i in range(self.x): a = "" for j in range(self.y): a+=str(points[i][j])+" " print a def print3d(self,points): for i in range(self.z): print ("["+str(i)+"]") self.print2d(self.points[i])
def onChangedDimx(self,nothing): self.x = int(self.SBdimx.get_value()) self.SBpoints.set_adjustment(gtk.Adjustment(1,1,self.x*self.y*self.z,1)) self.populate_results(None) def onChangedDimz(self,nothing): self.z = int(self.SBdimz.get_value()) self.SBpoints.set_adjustment(gtk.Adjustment(1,1,self.x*self.y*self.z,1)) self.populate_results(None) def onChangedDimy(self,nothing): self.y = int(self.SBdimy.get_value()) self.SBpoints.set_adjustment(gtk.Adjustment(1,1,self.x*self.y*self.z,1)) self.populate_results(None)
def populate_results(self,nothing): emissions_total = [0,0,0] density = 0.85 #if location = rimon if self.CBTlocation.get_active()==1: density = 1.2 coal = self.CBTcoal.get_active() self.results.resize(self.x*self.y*self.z+1,4) self.results.hide_all() self.results.show() self.pL.show() self.coL.show() self.co2L.show() self.ch4L.show() for z in range(self.z): for x in range(self.x): for y in range(self.y): n = (self.x*self.y)*z+self.y*x+y+1 #print ("Length: "+str(len(self.resLabels))+"\nN: "+str(n)) if (len(self.resLabels)) == n-1: p = gtk.Label(str(n)) a= gtk.Label(self.emits.calculate_emissions(density,1,0,coal,self.points[z][x][y])) b= gtk.Label(self.emits.calculate_emissions(density,1,1,coal,self.points[z][x][y])) c= gtk.Label(self.emits.calculate_emissions(density,1,2,coal,self.points[z][x][y])) self.results.attach(p,0,1,n,n+1) self.results.attach(a,1,2,n,n+1) self.results.attach(b,2,3,n,n+1) self.results.attach(c,3,4,n,n+1)
self.resLabels.append([p,a,b,c]) p.show() a.show() b.show() c.show() emissions_total[0] += float(a.get_text()) emissions_total[1] += float(b.get_text()) emissions_total[2] += float(c.get_text()) else: self.resLabels[n1][1].set_text(str(self.emits.calculate_emissions(density,1,0,coal,self.points[z][x][y]))) self.resLabels[n1][2].set_text(str(self.emits.calculate_emissions(density,1,1,coal,self.points[z][x][y]))) self.resLabels[n1][3].set_text(str(self.emits.calculate_emissions(density,1,2,coal,self.points[z][x][y])))
self.resLabels[n-1][0].show() self.resLabels[n-1][1].show() self.resLabels[n-1][2].show() self.resLabels[n-1][3].show() self.co.set_text(str(emissions_total[0])) self.co2.set_text(str(emissions_total[1])) self.ch4.set_text(str(emissions_total[2])) def onChangedCoal(self,nothing): self.populate_results(None) def save(self,nothin): f = open("points.txt",'w')
for i in range(self.z): for j in range(self.x): for k in range(self.y): f.write(str(i)+" "+str(j)+" "+str(k)+" "+str(self.points[i][j][k])+"\n") f.close() def display(self,nothing): import os os.system("C:\Python27\python cubes.py "+str(self.x)+" "+str(self.y)+" "+str(self.z)) def main(self): gtk.main()