Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 21

#!/usr/bin/env python # -*- coding: utf-8 -*pygtk.require('2.0') import gobject, gtk from math import radians,cos,sin from OpenGL.

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)

glClearColor(0.0, 0.0, 0.0, 1.0) glClear(GL_COLOR_BUFFER_BIT)

glViewport(0, 0, width, height)

glMatrixMode(GL_PROJECTION)

glLoadIdentity()

gluPerspective(60.0, float(width)/height, .1, 1000.)

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

pressed = pygame.key.get_pressed() if pressed[K_LEFT]: x = x+1.0 elif pressed[K_RIGHT]: x = x-1.0 if pressed[K_UP]: y = y-1.0

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)

#-----------------------------------------------#gluSphere(gluNewQuadric(),100,100,100) a = glStuff() r = 20 a.draw_rect(X,Y,Z,temps,r)

#-----------------------------------------------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,0,0) glVertex(r,0,0) glVertex(r,r,0) glVertex(0,r,0)

glVertex(0,0,r) glVertex(r,0,r) glVertex(r,r,r) glVertex(0,r,r)

glVertex(0,0,0) glVertex(0,r,0) glVertex(0,r,r) glVertex(0,0,r)

glVertex(r,0,0) glVertex(r,r,0) glVertex(r,r,r) glVertex(r,0,r)

glVertex(0,0,0) glVertex(r,0,0) glVertex(r,0,r) glVertex(0,0,r)

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

self.HBMain = gtk.HBox(False,1) self.VBLeft = gtk.VBox(False,3) self.VBRight = gtk.VBox(False,3) self.VBMiddle = gtk.VBox(False,3)

self.VBLeft_Upper = gtk.VBox(False,3) self.VBLeft_Middle = gtk.VBox(False,3)

#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 gas type combo box text self.CBTcoal = gtk.combo_box_new_text()

self.CBTcoal.append_text("SA") self.CBTcoal.append_text("IN") self.CBTcoal.set_active(0) self.CBTcoal.connect("changed", self.onChangedCoal)

#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("")

self.TableT.attach(self.label_total_emissions,0,1,0,1) self.TableT.attach(self.label_totalCO,0,1,1,2) self.TableT.attach(self.label_totalCO2,1,2,1,2) self.TableT.attach(self.label_totalCH4,2,3,1,2) self.TableT.attach(self.co,0,1,2,3) self.TableT.attach(self.co2,1,2,2,3) self.TableT.attach(self.ch4,2,3,2,3) self.TableT.show_all()

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

#----

#creating drawing area for gl

#self.drawingArea = gtk.DrawingArea()

#creating points spinbutton self.SBpoints = gtk.SpinButton(gtk.Adjustment(1,1,1,1)) self.SBpoints.connect("changed",self.onChangedPoint)

#creating temperature per point spin button self.SBtemp = gtk.SpinButton(gtk.Adjustment(1,1,100,1)) self.SBtemp.connect("changed",self.onChangedTemperature)

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

self.VBpoints.add(self.label_points) self.VBpoints.add(self.SBpoints) self.VBtemp.add(self.label_temperature_at) self.VBtemp.add(self.SBtemp) self.Right_UpperHB.add(self.VBpoints) self.Right_UpperHB.add(self.VBtemp)

#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()

self.b2 = gtk.Button() self.HBMain.add(self.b2)

self.b2.set_label(")" self.b2.connect("clicked",self.display) self.b2.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) #----

#---self.VBdims_yHB = gtk.HBox(False,1) self.VBdims_yHB.add(self.label_y) self.VBdims_yHB.add(self.SBdimy) self.VBdims.add(self.VBdims_yHB) #----

#---self.VBdims_zHB = gtk.HBox(False,1) self.VBdims_zHB.add(self.label_z) self.VBdims_zHB.add(self.SBdimz) self.VBdims.add(self.VBdims_zHB) #----

#------------left column-----------------

#left upper self.VBLeft_Middle.add(self.label_density) self.VBLeft_Middle.add(self.label_density_value)

#---self.VBLeft_Middle_HBlocation = gtk.HBox(False,1) self.VBLeft_Middle_HBlocation.add(self.label_location) self.VBLeft_Middle_HBlocation.add(self.CBTlocation) self.VBLeft_Upper.add(self.VBLeft_Middle_HBlocation) #----

#---self.VBLeft_Upper_HBcoal = gtk.HBox(False,1) self.VBLeft_Upper_HBcoal.add(self.label_coaltype) self.VBLeft_Upper_HBcoal.add(self.CBTcoal) self.VBLeft_Upper.add(self.VBLeft_Upper_HBcoal) #---#left middle

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)

#------------Right column---------------self.VBRight.add(self.Right_UpperHB) self.VBRight.add(self.TableT)

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.SBdimx.show() #self.SBdimy.show() #self.SBdimz.show() #self.VBdims.show() self.SBpoints.show() #self.drawingArea.show()

self.results.show() self.results_SW.show() self.SBtemp.show() #self.CBTlocation.show() #self.CBTcoal.show()

#self.VBLeft_Upper.show() #self.VBLeft_Middle.show()

self.Right_UpperHB.show_all() self.VBLeft.show_all() #self.VBMiddle.show() self.VBRight.show() self.HBMain.show() self.window.show()

def onLocationChanged(self,cb): if self.CBTlocation.get_active()==1: self.label_density_value.set_text("1.2") elif self.CBTlocation.get_active()==0: self.label_density_value.set_text("0.85") self.populate_results(None)

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 ijk(self,p): k = int(p)/(self.x*self.y) j = (int(p)%(self.x*self.y))%self.y i = (int(p)%(self.x*self.y))/self.y return (j,i,k)

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

emissions_total[0] += float(self.resLabels[n-1][1].get_text()) emissions_total[1] += float(self.resLabels[n-1][2].get_text()) emissions_total[2] += float(self.resLabels[n-1][3].get_text())

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

if __name__=='__main__': h = GreetingWindow() h.main()

You might also like