def projetar(self): self.pontoVista = PontoVista(int(self.entradaA.get()), int(self.entradaB.get()), int(self.entradaC.get())) ponto1 = [ int(self.entradaP1X.get()), int(self.entradaP1Y.get()), int(self.entradaP1Z.get()) ] ponto2 = [ int(self.entradaP2X.get()), int(self.entradaP2Y.get()), int(self.entradaP2Z.get()) ] ponto3 = [ int(self.entradaP3X.get()), int(self.entradaP3Y.get()), int(self.entradaP3Z.get()) ] self.planoProjecao = PlanoProjecao(ponto1, ponto2, ponto3) self.projPerspectiva = ProjPerspectiva(self.pontoVista, self.planoProjecao, self.objeto) matriz = self.projPerspectiva.projetarObjeto() cMatriz = self.cartesiano(matriz) rMatriz = self.reflexao(cMatriz) self.janelaMundo = Janela(min(rMatriz[0]), min(rMatriz[1]), max(rMatriz[0]), max(rMatriz[1])) self.janelaViewport = Janela(20, 20, 620, 460) self.viewport = Viewport(self.janelaMundo, self.janelaViewport, rMatriz) matrizFinal = self.viewport.transfViewport() self.desenhar(matrizFinal)
def test_casa3_proj_calculada(self): self.obj_casa3 = Objeto("./testes/casa3") self.pp_casa3 = ProjPerspectiva( PontoVista(5, 5, 3), PlanoProjecao([0, 0, 0], [1, 0, 0], [0, 1, 0]), self.obj_casa3) self.obj_projetado = self.pp_casa3.projetarObjeto() self.assertEqual(self.obj_projetado[0][0], 0) self.assertEqual(self.obj_projetado[0][1], -1.5) self.assertEqual(self.obj_projetado[0][2], -6.5) self.assertEqual(self.obj_projetado[0][3], -12.5) self.assertEqual(self.obj_projetado[0][4], -7.5) self.assertEqual(self.obj_projetado[0][5], -18) self.assertEqual(self.obj_projetado[0][6], 32) self.assertEqual(self.obj_projetado[0][7], 50) self.assertEqual(self.obj_projetado[0][8], 50) self.assertEqual(self.obj_projetado[0][9], 0) self.assertEqual(self.obj_projetado[1][0], 0) self.assertEqual(self.obj_projetado[1][1], 0) self.assertEqual(self.obj_projetado[1][2], -5) self.assertEqual(self.obj_projetado[1][3], -5) self.assertEqual(self.obj_projetado[1][4], 0) self.assertEqual(self.obj_projetado[1][5], 0) self.assertEqual(self.obj_projetado[1][6], 50) self.assertEqual(self.obj_projetado[1][7], 50) self.assertEqual(self.obj_projetado[1][8], 41) self.assertEqual(self.obj_projetado[1][9], -9) self.assertEqual(self.obj_projetado[2][0], 0) self.assertEqual(self.obj_projetado[2][1], 0) self.assertEqual(self.obj_projetado[2][2], 0) self.assertEqual(self.obj_projetado[2][3], 0) self.assertEqual(self.obj_projetado[2][4], 0) self.assertEqual(self.obj_projetado[2][5], 0) self.assertEqual(self.obj_projetado[2][6], 0) self.assertEqual(self.obj_projetado[2][7], 0) self.assertEqual(self.obj_projetado[2][8], 0) self.assertEqual(self.obj_projetado[2][9], 0) self.assertEqual(self.obj_projetado[0][0], -3) self.assertEqual(self.obj_projetado[0][1], -3) self.assertEqual(self.obj_projetado[0][2], -4) self.assertEqual(self.obj_projetado[0][3], -4) self.assertEqual(self.obj_projetado[0][4], -3) self.assertEqual(self.obj_projetado[0][5], -3) self.assertEqual(self.obj_projetado[0][6], 7) self.assertEqual(self.obj_projetado[0][7], 7) self.assertEqual(self.obj_projetado[0][8], 7) self.assertEqual(self.obj_projetado[0][9], -3)
def test_casa3_proj_perspectiva(self): self.obj_casa3 = Objeto("./testes/casa3") self.pp_casa3 = ProjPerspectiva( PontoVista(5, 5, 3), PlanoProjecao([0, 0, 0], [1, 0, 0], [0, 1, 0]), self.obj_casa3) self.assertEqual(self.pp_casa3.matrizProjecao[0][0], -3) self.assertEqual(self.pp_casa3.matrizProjecao[0][1], 0) self.assertEqual(self.pp_casa3.matrizProjecao[0][2], 5) self.assertEqual(self.pp_casa3.matrizProjecao[0][3], 0) self.assertEqual(self.pp_casa3.matrizProjecao[1][0], 0) self.assertEqual(self.pp_casa3.matrizProjecao[1][1], -3) self.assertEqual(self.pp_casa3.matrizProjecao[1][2], 5) self.assertEqual(self.pp_casa3.matrizProjecao[1][3], 0) self.assertEqual(self.pp_casa3.matrizProjecao[2][0], 0) self.assertEqual(self.pp_casa3.matrizProjecao[2][1], 0) self.assertEqual(self.pp_casa3.matrizProjecao[2][2], 0) self.assertEqual(self.pp_casa3.matrizProjecao[2][3], 0) self.assertEqual(self.pp_casa3.matrizProjecao[3][0], 0) self.assertEqual(self.pp_casa3.matrizProjecao[3][1], 0) self.assertEqual(self.pp_casa3.matrizProjecao[3][2], 1) self.assertEqual(self.pp_casa3.matrizProjecao[3][3], -3)
def projetar(self): self.pontoVista = PontoVista(int(self.entradaA.get()), int(self.entradaB.get()), int(self.entradaC.get())) ponto1 = [int(self.entradaP1X.get()), int(self.entradaP1Y.get()), int(self.entradaP1Z.get())] ponto2 = [int(self.entradaP2X.get()), int(self.entradaP2Y.get()), int(self.entradaP2Z.get())] ponto3 = [int(self.entradaP3X.get()), int(self.entradaP3Y.get()), int(self.entradaP3Z.get())] self.planoProjecao = PlanoProjecao(ponto1, ponto2, ponto3) self.projPerspectiva = ProjPerspectiva(self.pontoVista, self.planoProjecao, self.objeto) matriz = self.projPerspectiva.projetarObjeto() cMatriz = self.cartesiano(matriz) rMatriz = self.reflexao(cMatriz) self.janelaMundo = Janela(min(rMatriz[0]), min(rMatriz[1]), max(rMatriz[0]), max(rMatriz[1])) self.janelaViewport = Janela(20, 20, 620, 460) self.viewport = Viewport(self.janelaMundo, self.janelaViewport, rMatriz) matrizFinal = self.viewport.transfViewport() self.desenhar(matrizFinal)
def test_casa3_proj_calculada(self): self.obj_casa3 = Objeto("./testes/casa3") self.pp_casa3 = ProjPerspectiva(PontoVista(5,5,3),PlanoProjecao([0,0,0],[1,0,0],[0,1,0]),self.obj_casa3) self.obj_projetado = self.pp_casa3.projetarObjeto(); self.assertEqual(self.obj_projetado[0][0], 0) self.assertEqual(self.obj_projetado[0][1], -1.5) self.assertEqual(self.obj_projetado[0][2], -6.5) self.assertEqual(self.obj_projetado[0][3], -12.5) self.assertEqual(self.obj_projetado[0][4], -7.5) self.assertEqual(self.obj_projetado[0][5], -18) self.assertEqual(self.obj_projetado[0][6], 32) self.assertEqual(self.obj_projetado[0][7], 50) self.assertEqual(self.obj_projetado[0][8], 50) self.assertEqual(self.obj_projetado[0][9], 0) self.assertEqual(self.obj_projetado[1][0], 0) self.assertEqual(self.obj_projetado[1][1], 0) self.assertEqual(self.obj_projetado[1][2], -5) self.assertEqual(self.obj_projetado[1][3], -5) self.assertEqual(self.obj_projetado[1][4], 0) self.assertEqual(self.obj_projetado[1][5], 0) self.assertEqual(self.obj_projetado[1][6], 50) self.assertEqual(self.obj_projetado[1][7], 50) self.assertEqual(self.obj_projetado[1][8], 41) self.assertEqual(self.obj_projetado[1][9], -9) self.assertEqual(self.obj_projetado[2][0], 0) self.assertEqual(self.obj_projetado[2][1], 0) self.assertEqual(self.obj_projetado[2][2], 0) self.assertEqual(self.obj_projetado[2][3], 0) self.assertEqual(self.obj_projetado[2][4], 0) self.assertEqual(self.obj_projetado[2][5], 0) self.assertEqual(self.obj_projetado[2][6], 0) self.assertEqual(self.obj_projetado[2][7], 0) self.assertEqual(self.obj_projetado[2][8], 0) self.assertEqual(self.obj_projetado[2][9], 0) self.assertEqual(self.obj_projetado[0][0], -3) self.assertEqual(self.obj_projetado[0][1], -3) self.assertEqual(self.obj_projetado[0][2], -4) self.assertEqual(self.obj_projetado[0][3], -4) self.assertEqual(self.obj_projetado[0][4], -3) self.assertEqual(self.obj_projetado[0][5], -3) self.assertEqual(self.obj_projetado[0][6], 7) self.assertEqual(self.obj_projetado[0][7], 7) self.assertEqual(self.obj_projetado[0][8], 7) self.assertEqual(self.obj_projetado[0][9], -3)
def test_casa3_proj_perspectiva(self): self.obj_casa3 = Objeto("./testes/casa3") self.pp_casa3 = ProjPerspectiva(PontoVista(5,5,3),PlanoProjecao([0,0,0],[1,0,0],[0,1,0]),self.obj_casa3) self.assertEqual(self.pp_casa3.matrizProjecao[0][0], -3) self.assertEqual(self.pp_casa3.matrizProjecao[0][1], 0) self.assertEqual(self.pp_casa3.matrizProjecao[0][2], 5) self.assertEqual(self.pp_casa3.matrizProjecao[0][3], 0) self.assertEqual(self.pp_casa3.matrizProjecao[1][0], 0) self.assertEqual(self.pp_casa3.matrizProjecao[1][1], -3) self.assertEqual(self.pp_casa3.matrizProjecao[1][2], 5) self.assertEqual(self.pp_casa3.matrizProjecao[1][3], 0) self.assertEqual(self.pp_casa3.matrizProjecao[2][0], 0) self.assertEqual(self.pp_casa3.matrizProjecao[2][1], 0) self.assertEqual(self.pp_casa3.matrizProjecao[2][2], 0) self.assertEqual(self.pp_casa3.matrizProjecao[2][3], 0) self.assertEqual(self.pp_casa3.matrizProjecao[3][0], 0) self.assertEqual(self.pp_casa3.matrizProjecao[3][1], 0) self.assertEqual(self.pp_casa3.matrizProjecao[3][2], 1) self.assertEqual(self.pp_casa3.matrizProjecao[3][3], -3)
class TestSequenceFunctions(unittest.TestCase): # def setUp(self): # self.seq = range(10) def test_casa3_objeto(self): self.obj_casa3 = Objeto("./testes/casa3") self.assertEqual(self.obj_casa3.nPontos, 30) self.assertEqual(self.obj_casa3.nSuperficies, 15) def test_casa3_proj_perspectiva(self): self.obj_casa3 = Objeto("./testes/casa3") self.pp_casa3 = ProjPerspectiva(PontoVista(5,5,3),PlanoProjecao([0,0,0],[1,0,0],[0,1,0]),self.obj_casa3) self.assertEqual(self.pp_casa3.matrizProjecao[0][0], -3) self.assertEqual(self.pp_casa3.matrizProjecao[0][1], 0) self.assertEqual(self.pp_casa3.matrizProjecao[0][2], 5) self.assertEqual(self.pp_casa3.matrizProjecao[0][3], 0) self.assertEqual(self.pp_casa3.matrizProjecao[1][0], 0) self.assertEqual(self.pp_casa3.matrizProjecao[1][1], -3) self.assertEqual(self.pp_casa3.matrizProjecao[1][2], 5) self.assertEqual(self.pp_casa3.matrizProjecao[1][3], 0) self.assertEqual(self.pp_casa3.matrizProjecao[2][0], 0) self.assertEqual(self.pp_casa3.matrizProjecao[2][1], 0) self.assertEqual(self.pp_casa3.matrizProjecao[2][2], 0) self.assertEqual(self.pp_casa3.matrizProjecao[2][3], 0) self.assertEqual(self.pp_casa3.matrizProjecao[3][0], 0) self.assertEqual(self.pp_casa3.matrizProjecao[3][1], 0) self.assertEqual(self.pp_casa3.matrizProjecao[3][2], 1) self.assertEqual(self.pp_casa3.matrizProjecao[3][3], -3) def test_casa3_proj_calculada(self): self.obj_casa3 = Objeto("./testes/casa3") self.pp_casa3 = ProjPerspectiva(PontoVista(5,5,3),PlanoProjecao([0,0,0],[1,0,0],[0,1,0]),self.obj_casa3) self.obj_projetado = self.pp_casa3.projetarObjeto(); self.assertEqual(self.obj_projetado[0][0], 0) self.assertEqual(self.obj_projetado[0][1], -1.5) self.assertEqual(self.obj_projetado[0][2], -6.5) self.assertEqual(self.obj_projetado[0][3], -12.5) self.assertEqual(self.obj_projetado[0][4], -7.5) self.assertEqual(self.obj_projetado[0][5], -18) self.assertEqual(self.obj_projetado[0][6], 32) self.assertEqual(self.obj_projetado[0][7], 50) self.assertEqual(self.obj_projetado[0][8], 50) self.assertEqual(self.obj_projetado[0][9], 0) self.assertEqual(self.obj_projetado[1][0], 0) self.assertEqual(self.obj_projetado[1][1], 0) self.assertEqual(self.obj_projetado[1][2], -5) self.assertEqual(self.obj_projetado[1][3], -5) self.assertEqual(self.obj_projetado[1][4], 0) self.assertEqual(self.obj_projetado[1][5], 0) self.assertEqual(self.obj_projetado[1][6], 50) self.assertEqual(self.obj_projetado[1][7], 50) self.assertEqual(self.obj_projetado[1][8], 41) self.assertEqual(self.obj_projetado[1][9], -9) self.assertEqual(self.obj_projetado[2][0], 0) self.assertEqual(self.obj_projetado[2][1], 0) self.assertEqual(self.obj_projetado[2][2], 0) self.assertEqual(self.obj_projetado[2][3], 0) self.assertEqual(self.obj_projetado[2][4], 0) self.assertEqual(self.obj_projetado[2][5], 0) self.assertEqual(self.obj_projetado[2][6], 0) self.assertEqual(self.obj_projetado[2][7], 0) self.assertEqual(self.obj_projetado[2][8], 0) self.assertEqual(self.obj_projetado[2][9], 0) self.assertEqual(self.obj_projetado[0][0], -3) self.assertEqual(self.obj_projetado[0][1], -3) self.assertEqual(self.obj_projetado[0][2], -4) self.assertEqual(self.obj_projetado[0][3], -4) self.assertEqual(self.obj_projetado[0][4], -3) self.assertEqual(self.obj_projetado[0][5], -3) self.assertEqual(self.obj_projetado[0][6], 7) self.assertEqual(self.obj_projetado[0][7], 7) self.assertEqual(self.obj_projetado[0][8], 7) self.assertEqual(self.obj_projetado[0][9], -3)
class TestSequenceFunctions(unittest.TestCase): # def setUp(self): # self.seq = range(10) def test_casa3_objeto(self): self.obj_casa3 = Objeto("./testes/casa3") self.assertEqual(self.obj_casa3.nPontos, 30) self.assertEqual(self.obj_casa3.nSuperficies, 15) def test_casa3_proj_perspectiva(self): self.obj_casa3 = Objeto("./testes/casa3") self.pp_casa3 = ProjPerspectiva( PontoVista(5, 5, 3), PlanoProjecao([0, 0, 0], [1, 0, 0], [0, 1, 0]), self.obj_casa3) self.assertEqual(self.pp_casa3.matrizProjecao[0][0], -3) self.assertEqual(self.pp_casa3.matrizProjecao[0][1], 0) self.assertEqual(self.pp_casa3.matrizProjecao[0][2], 5) self.assertEqual(self.pp_casa3.matrizProjecao[0][3], 0) self.assertEqual(self.pp_casa3.matrizProjecao[1][0], 0) self.assertEqual(self.pp_casa3.matrizProjecao[1][1], -3) self.assertEqual(self.pp_casa3.matrizProjecao[1][2], 5) self.assertEqual(self.pp_casa3.matrizProjecao[1][3], 0) self.assertEqual(self.pp_casa3.matrizProjecao[2][0], 0) self.assertEqual(self.pp_casa3.matrizProjecao[2][1], 0) self.assertEqual(self.pp_casa3.matrizProjecao[2][2], 0) self.assertEqual(self.pp_casa3.matrizProjecao[2][3], 0) self.assertEqual(self.pp_casa3.matrizProjecao[3][0], 0) self.assertEqual(self.pp_casa3.matrizProjecao[3][1], 0) self.assertEqual(self.pp_casa3.matrizProjecao[3][2], 1) self.assertEqual(self.pp_casa3.matrizProjecao[3][3], -3) def test_casa3_proj_calculada(self): self.obj_casa3 = Objeto("./testes/casa3") self.pp_casa3 = ProjPerspectiva( PontoVista(5, 5, 3), PlanoProjecao([0, 0, 0], [1, 0, 0], [0, 1, 0]), self.obj_casa3) self.obj_projetado = self.pp_casa3.projetarObjeto() self.assertEqual(self.obj_projetado[0][0], 0) self.assertEqual(self.obj_projetado[0][1], -1.5) self.assertEqual(self.obj_projetado[0][2], -6.5) self.assertEqual(self.obj_projetado[0][3], -12.5) self.assertEqual(self.obj_projetado[0][4], -7.5) self.assertEqual(self.obj_projetado[0][5], -18) self.assertEqual(self.obj_projetado[0][6], 32) self.assertEqual(self.obj_projetado[0][7], 50) self.assertEqual(self.obj_projetado[0][8], 50) self.assertEqual(self.obj_projetado[0][9], 0) self.assertEqual(self.obj_projetado[1][0], 0) self.assertEqual(self.obj_projetado[1][1], 0) self.assertEqual(self.obj_projetado[1][2], -5) self.assertEqual(self.obj_projetado[1][3], -5) self.assertEqual(self.obj_projetado[1][4], 0) self.assertEqual(self.obj_projetado[1][5], 0) self.assertEqual(self.obj_projetado[1][6], 50) self.assertEqual(self.obj_projetado[1][7], 50) self.assertEqual(self.obj_projetado[1][8], 41) self.assertEqual(self.obj_projetado[1][9], -9) self.assertEqual(self.obj_projetado[2][0], 0) self.assertEqual(self.obj_projetado[2][1], 0) self.assertEqual(self.obj_projetado[2][2], 0) self.assertEqual(self.obj_projetado[2][3], 0) self.assertEqual(self.obj_projetado[2][4], 0) self.assertEqual(self.obj_projetado[2][5], 0) self.assertEqual(self.obj_projetado[2][6], 0) self.assertEqual(self.obj_projetado[2][7], 0) self.assertEqual(self.obj_projetado[2][8], 0) self.assertEqual(self.obj_projetado[2][9], 0) self.assertEqual(self.obj_projetado[0][0], -3) self.assertEqual(self.obj_projetado[0][1], -3) self.assertEqual(self.obj_projetado[0][2], -4) self.assertEqual(self.obj_projetado[0][3], -4) self.assertEqual(self.obj_projetado[0][4], -3) self.assertEqual(self.obj_projetado[0][5], -3) self.assertEqual(self.obj_projetado[0][6], 7) self.assertEqual(self.obj_projetado[0][7], 7) self.assertEqual(self.obj_projetado[0][8], 7) self.assertEqual(self.obj_projetado[0][9], -3)
class App: def __init__(self, master): self.objeto = object #init Frames self.framePontoVista = Frame(master, relief=FLAT, borderwidth=2) self.framePlanoProjecao = Frame(master, relief=FLAT, borderwidth=2) self.frameObjeto = Frame(master, relief=FLAT, borderwidth=2) self.frameSaidaGrafica = Frame(master, relief=SUNKEN, borderwidth=2, bg="black") #Griding Frames self.framePontoVista.grid(row=0, column=0) self.framePlanoProjecao.grid(row=1, column=0) self.frameObjeto.grid(row=2, column=0) self.frameSaidaGrafica.grid(row=0, column=1, rowspan=4) #Labels Label(self.framePontoVista, text="Ponto de Vista").grid(row=0, column=0, columnspan=2) Label(self.framePontoVista, text="A:").grid(row=1, column=0, sticky=E) Label(self.framePontoVista, text="B:").grid(row=2, column=0, sticky=E) Label(self.framePontoVista, text="C:").grid(row=3, column=0, sticky=E) Label(self.framePlanoProjecao, text="Plano de Projecao").grid(row=0, column=0, columnspan=4) Label(self.framePlanoProjecao, text="P1:").grid(row=1, column=0, sticky=E) Label(self.framePlanoProjecao, text="P2:").grid(row=2, column=0, sticky=E) Label(self.framePlanoProjecao, text="P3:").grid(row=3, column=0, sticky=E) Label(self.frameObjeto, text="Objeto").grid(row=0, column=0, columnspan=2) #Entradas self.entradaA = Entry(self.framePontoVista, width=3) self.entradaA.insert(0, "3") self.entradaB = Entry(self.framePontoVista, width=3) self.entradaB.insert(0, "3") self.entradaC = Entry(self.framePontoVista, width=3) self.entradaC.insert(0, "3") self.entradaP1X = Entry(self.framePlanoProjecao, width=3) self.entradaP1Y = Entry(self.framePlanoProjecao, width=3) self.entradaP1Z = Entry(self.framePlanoProjecao, width=3) self.entradaP2X = Entry(self.framePlanoProjecao, width=3) self.entradaP2Y = Entry(self.framePlanoProjecao, width=3) self.entradaP2Z = Entry(self.framePlanoProjecao, width=3) self.entradaP3X = Entry(self.framePlanoProjecao, width=3) self.entradaP3Y = Entry(self.framePlanoProjecao, width=3) self.entradaP3Z = Entry(self.framePlanoProjecao, width=3) self.entradaArq = Entry(self.frameObjeto, state="readonly") #Griding Entradas self.entradaA.grid(row=1, column=1) self.entradaB.grid(row=2, column=1) self.entradaC.grid(row=3, column=1) self.entradaP1X.grid(row=1, column=1) self.entradaP1Y.grid(row=1, column=2) self.entradaP1Z.grid(row=1, column=3) self.entradaP2X.grid(row=2, column=1) self.entradaP2Y.grid(row=2, column=2) self.entradaP2Z.grid(row=2, column=3) self.entradaP3X.grid(row=3, column=1) self.entradaP3Y.grid(row=3, column=2) self.entradaP3Z.grid(row=3, column=3) self.entradaArq.grid(row=2, column=0, columnspan=2) #Canvas self.saidaGrafica = Canvas(self.frameSaidaGrafica, width=640, height=480, bg="white") self.saidaGrafica.pack() #self.saidaGrafica.create_rectangle(100, 100, 300, 200, activefill="red", width=1) #Button self.botaoObjeto = Button(self.frameObjeto, text="Escolher Objeto", command=self.arquivoObjeto).grid( row=3, column=0, columnspan=2) self.botaoProjetar = Button(self.frameObjeto, text="Projetar", command=self.projetar).grid(row=4, column=0, columnspan=2) def cartesiano(self, matriz): nMatriz = [[0 for x in range(len(self.objeto.matrizPontos[0]))] for x in range(3)] for j in range(len(matriz[0])): nMatriz[0][j] = matriz[0][j] / matriz[3][j] nMatriz[1][j] = matriz[1][j] / matriz[3][j] nMatriz[2][j] = 1 return nMatriz def reflexao(self, matriz): nMatriz = matriz for j in range(len(matriz[0])): nMatriz[1][j] = -matriz[1][j] return nMatriz def desenhar(self, matriz): self.saidaGrafica.delete(ALL) for sup in self.objeto.superficies: for i in range(len(sup)): if (i == len(sup) - 1): ponto1 = int(sup[i]) ponto2 = int(sup[0]) else: ponto1 = int(sup[i]) ponto2 = int(sup[i + 1]) self.saidaGrafica.create_line(round(matriz[0][ponto1]), round(matriz[1][ponto1]), round(matriz[0][ponto2]), round(matriz[1][ponto2]), width=2, smooth=1) def arquivoObjeto(self): self.filename = askopenfilename() if self.objeto: del self.objeto self.objeto = Objeto(self.filename) self.entradaArq.configure(state="normal") self.entradaArq.delete(0, END) self.entradaArq.insert(0, self.filename) self.entradaArq.configure(state="readonly") self.entradaArq.update() def projetar(self): self.pontoVista = PontoVista(int(self.entradaA.get()), int(self.entradaB.get()), int(self.entradaC.get())) ponto1 = [ int(self.entradaP1X.get()), int(self.entradaP1Y.get()), int(self.entradaP1Z.get()) ] ponto2 = [ int(self.entradaP2X.get()), int(self.entradaP2Y.get()), int(self.entradaP2Z.get()) ] ponto3 = [ int(self.entradaP3X.get()), int(self.entradaP3Y.get()), int(self.entradaP3Z.get()) ] self.planoProjecao = PlanoProjecao(ponto1, ponto2, ponto3) self.projPerspectiva = ProjPerspectiva(self.pontoVista, self.planoProjecao, self.objeto) matriz = self.projPerspectiva.projetarObjeto() cMatriz = self.cartesiano(matriz) rMatriz = self.reflexao(cMatriz) self.janelaMundo = Janela(min(rMatriz[0]), min(rMatriz[1]), max(rMatriz[0]), max(rMatriz[1])) self.janelaViewport = Janela(20, 20, 620, 460) self.viewport = Viewport(self.janelaMundo, self.janelaViewport, rMatriz) matrizFinal = self.viewport.transfViewport() self.desenhar(matrizFinal)
class App: def __init__(self, master): self.objeto = object #init Frames self.framePontoVista = Frame(master, relief=FLAT, borderwidth=2) self.framePlanoProjecao = Frame(master, relief=FLAT, borderwidth=2) self.frameObjeto = Frame(master, relief=FLAT, borderwidth=2) self.frameSaidaGrafica = Frame(master, relief=SUNKEN, borderwidth=2, bg="black") #Griding Frames self.framePontoVista.grid(row=0, column=0) self.framePlanoProjecao.grid(row=1, column=0) self.frameObjeto.grid(row=2, column=0) self.frameSaidaGrafica.grid(row=0, column=1, rowspan=4) #Labels Label(self.framePontoVista, text="Ponto de Vista").grid(row=0, column=0, columnspan=2) Label(self.framePontoVista, text="A:").grid(row=1, column=0, sticky=E) Label(self.framePontoVista, text="B:").grid(row=2, column=0, sticky=E) Label(self.framePontoVista, text="C:").grid(row=3, column=0, sticky=E) Label(self.framePlanoProjecao, text="Plano de Projecao").grid(row=0, column=0, columnspan=4) Label(self.framePlanoProjecao, text="P1:").grid(row=1, column=0, sticky=E) Label(self.framePlanoProjecao, text="P2:").grid(row=2, column=0, sticky=E) Label(self.framePlanoProjecao, text="P3:").grid(row=3, column=0, sticky=E) Label(self.frameObjeto, text="Objeto").grid(row=0, column=0, columnspan=2) #Entradas self.entradaA = Entry(self.framePontoVista, width=3) self.entradaA.insert(0, "3") self.entradaB = Entry(self.framePontoVista, width=3) self.entradaB.insert(0, "3") self.entradaC = Entry(self.framePontoVista, width=3) self.entradaC.insert(0, "3") self.entradaP1X = Entry(self.framePlanoProjecao, width=3) self.entradaP1Y = Entry(self.framePlanoProjecao, width=3) self.entradaP1Z = Entry(self.framePlanoProjecao, width=3) self.entradaP2X = Entry(self.framePlanoProjecao, width=3) self.entradaP2Y = Entry(self.framePlanoProjecao, width=3) self.entradaP2Z = Entry(self.framePlanoProjecao, width=3) self.entradaP3X = Entry(self.framePlanoProjecao, width=3) self.entradaP3Y = Entry(self.framePlanoProjecao, width=3) self.entradaP3Z = Entry(self.framePlanoProjecao, width=3) self.entradaArq = Entry(self.frameObjeto, state="readonly") #Griding Entradas self.entradaA.grid(row=1, column=1) self.entradaB.grid(row=2, column=1) self.entradaC.grid(row=3, column=1) self.entradaP1X.grid(row=1, column=1) self.entradaP1Y.grid(row=1, column=2) self.entradaP1Z.grid(row=1, column=3) self.entradaP2X.grid(row=2, column=1) self.entradaP2Y.grid(row=2, column=2) self.entradaP2Z.grid(row=2, column=3) self.entradaP3X.grid(row=3, column=1) self.entradaP3Y.grid(row=3, column=2) self.entradaP3Z.grid(row=3, column=3) self.entradaArq.grid(row=2, column=0, columnspan=2) #Canvas self.saidaGrafica = Canvas(self.frameSaidaGrafica, width=640, height=480, bg="white") self.saidaGrafica.pack() #self.saidaGrafica.create_rectangle(100, 100, 300, 200, activefill="red", width=1) #Button self.botaoObjeto = Button(self.frameObjeto, text="Escolher Objeto", command=self.arquivoObjeto).grid(row=3, column=0, columnspan=2) self.botaoProjetar = Button(self.frameObjeto, text="Projetar", command=self.projetar).grid(row=4, column=0, columnspan=2) def cartesiano(self, matriz): nMatriz = [[0 for x in range(len(self.objeto.matrizPontos[0]))] for x in range(3)] for j in range(len(matriz[0])): nMatriz[0][j] = matriz[0][j] / matriz[3][j] nMatriz[1][j] = matriz[1][j] / matriz[3][j] nMatriz[2][j] = 1 return nMatriz def reflexao(self, matriz): nMatriz = matriz for j in range(len(matriz[0])): nMatriz[1][j] = -matriz[1][j] return nMatriz def desenhar(self, matriz): self.saidaGrafica.delete(ALL) for sup in self.objeto.superficies: for i in range(len(sup)): if (i == len(sup)-1): ponto1 = int(sup[i]) ponto2 = int(sup[0]) else: ponto1 = int(sup[i]) ponto2 = int(sup[i+1]) self.saidaGrafica.create_line(round(matriz[0][ponto1]), round(matriz[1][ponto1]), round(matriz[0][ponto2]), round(matriz[1][ponto2]), width=2, smooth=1) def arquivoObjeto(self): self.filename = askopenfilename() if self.objeto: del self.objeto self.objeto = Objeto(self.filename) self.entradaArq.configure(state="normal") self.entradaArq.delete(0, END) self.entradaArq.insert(0, self.filename) self.entradaArq.configure(state="readonly") self.entradaArq.update() def projetar(self): self.pontoVista = PontoVista(int(self.entradaA.get()), int(self.entradaB.get()), int(self.entradaC.get())) ponto1 = [int(self.entradaP1X.get()), int(self.entradaP1Y.get()), int(self.entradaP1Z.get())] ponto2 = [int(self.entradaP2X.get()), int(self.entradaP2Y.get()), int(self.entradaP2Z.get())] ponto3 = [int(self.entradaP3X.get()), int(self.entradaP3Y.get()), int(self.entradaP3Z.get())] self.planoProjecao = PlanoProjecao(ponto1, ponto2, ponto3) self.projPerspectiva = ProjPerspectiva(self.pontoVista, self.planoProjecao, self.objeto) matriz = self.projPerspectiva.projetarObjeto() cMatriz = self.cartesiano(matriz) rMatriz = self.reflexao(cMatriz) self.janelaMundo = Janela(min(rMatriz[0]), min(rMatriz[1]), max(rMatriz[0]), max(rMatriz[1])) self.janelaViewport = Janela(20, 20, 620, 460) self.viewport = Viewport(self.janelaMundo, self.janelaViewport, rMatriz) matrizFinal = self.viewport.transfViewport() self.desenhar(matrizFinal)