示例#1
0
 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)
示例#2
0
    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)
示例#3
0
 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)
示例#4
0
 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)
示例#5
0
    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)
示例#6
0
 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)
示例#7
0
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)
示例#8
0
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)
示例#9
0
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)
示例#10
0
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)