factor out view-setting code

This commit is contained in:
Jeff Epler 2009-08-19 17:41:04 -05:00
parent 8998af5573
commit 6d0b2ca739
2 changed files with 102 additions and 76 deletions

View file

@ -1212,4 +1212,101 @@ class GlCanonDraw:
glEnd()
glDepthFunc(GL_LESS)
def set_view_x(self):
if self.g:
mid = [(a+b)/2
for a, b in zip(self.g.max_extents, self.g.min_extents)]
glTranslatef(-mid[0], -mid[1], -mid[2])
size = [(a-b)
for a, b in zip(self.g.max_extents, self.g.min_extents)]
self.set_eyepoint_from_extents(size[1], size[2])
else:
self.set_eyepoint(5.)
self.perspective = False
self.lat = -90
self.lon = 270
self._redraw()
def set_view_y(self):
self.reset()
glRotatef(-90, 1, 0, 0)
if self.is_lathe():
glRotatef(90, 0, 1, 0)
if self.g:
mid = [(a+b)/2
for a, b in zip(self.g.max_extents, self.g.min_extents)]
glTranslatef(-mid[0], -mid[1], -mid[2])
size = [(a-b)
for a, b in zip(self.g.max_extents, self.g.min_extents)]
self.set_eyepoint_from_extents(size[0], size[2])
else:
self.set_eyepoint(5.)
self.perspective = False
self.lat = -90
self.lon = 0
self._redraw()
def set_view_z(self):
self.reset()
if self.g:
mid = [(a+b)/2
for a, b in zip(self.g.max_extents, self.g.min_extents)]
glTranslatef(-mid[0], -mid[1], -mid[2])
size = [(a-b)
for a, b in zip(self.g.max_extents, self.g.min_extents)]
self.set_eyepoint_from_extents(size[0], size[1])
else:
self.set_eyepoint(5.)
self.perspective = False
self.lat = self.lon = 0
self._redraw()
def set_view_z2(self):
self.reset()
glRotatef(-90, 0, 0, 1)
if self.g:
mid = [(a+b)/2
for a, b in zip(self.g.max_extents, self.g.min_extents)]
glTranslatef(-mid[0], -mid[1], -mid[2])
size = [(a-b) for a, b
in zip(self.g.max_extents, self.g.min_extents)]
self.set_eyepoint_from_extents(size[1], size[0])
else:
self.set_eyepoint(5.)
self.perspective = False
self.lat = 0
self.lon = 270
self._redraw()
def set_view_p(self):
self.reset()
self.perspective = True
if self.g:
mid = [(a+b)/2
for a, b in zip(self.g.max_extents, self.g.min_extents)]
glTranslatef(-mid[0], -mid[1], -mid[2])
size = [(a-b)
for a, b in zip(self.g.max_extents, self.g.min_extents)]
size = (size[0] **2 + size[1] ** 2 + size[2] ** 2) ** .5
if size > 1e99: size = 5. # in case there are no moves in the preview
w = self.winfo_width()
h = self.winfo_height()
fovx = self.fovy * w / h
fov = min(fovx, self.fovy)
self.set_eyepoint((size * 1.1 + 1.0) / 2 / sin ( fov * pi / 180 / 2))
self.lat = -60
self.lon = 335
x = (self.g.min_extents[0] + self.g.max_extents[0])/2
y = (self.g.min_extents[1] + self.g.max_extents[1])/2
z = (self.g.min_extents[2] + self.g.max_extents[2])/2
glnav.glRotateScene(self, 1.0, x, y, z, 0, 0, 0, 0)
else:
self.set_eyepoint(5.)
self.lat = -60
self.lon = 335
glnav.glRotateScene(self, 1.0, self.xcenter, self.ycenter, self.zcenter, 0, 0, 0, 0)
self._redraw()
# vim:ts=8:sts=4:et:

View file

@ -1723,17 +1723,7 @@ class TclCommands(nf.TclCommands):
o.reset()
glRotatef(-90, 0, 1, 0)
glRotatef(-90, 1, 0, 0)
if o.g:
mid = [(a+b)/2 for a, b in zip(o.g.max_extents, o.g.min_extents)]
glTranslatef(-mid[0], -mid[1], -mid[2])
size = [(a-b) for a, b in zip(o.g.max_extents, o.g.min_extents)]
o.set_eyepoint_from_extents(size[1], size[2])
else:
o.set_eyepoint(5.)
o.perspective = False
o.lat = -90
o.lon = 270
o.tkRedraw()
o.set_view_x()
def set_view_y(event=None):
widgets.view_z.configure(relief="link")
@ -1742,21 +1732,7 @@ class TclCommands(nf.TclCommands):
widgets.view_y.configure(relief="sunken")
widgets.view_p.configure(relief="link")
vars.view_type.set(4)
o.reset()
glRotatef(-90, 1, 0, 0)
if lathe:
glRotatef(90, 0, 1, 0)
if o.g:
mid = [(a+b)/2 for a, b in zip(o.g.max_extents, o.g.min_extents)]
glTranslatef(-mid[0], -mid[1], -mid[2])
size = [(a-b) for a, b in zip(o.g.max_extents, o.g.min_extents)]
o.set_eyepoint_from_extents(size[0], size[2])
else:
o.set_eyepoint(5.)
o.perspective = False
o.lat = -90
o.lon = 0
o.tkRedraw()
o.set_view_y()
def set_view_z(event=None):
widgets.view_z.configure(relief="sunken")
@ -1765,17 +1741,7 @@ class TclCommands(nf.TclCommands):
widgets.view_y.configure(relief="link")
widgets.view_p.configure(relief="link")
vars.view_type.set(1)
o.reset()
if o.g:
mid = [(a+b)/2 for a, b in zip(o.g.max_extents, o.g.min_extents)]
glTranslatef(-mid[0], -mid[1], -mid[2])
size = [(a-b) for a, b in zip(o.g.max_extents, o.g.min_extents)]
o.set_eyepoint_from_extents(size[0], size[1])
else:
o.set_eyepoint(5.)
o.perspective = False
o.lat = o.lon = 0
o.tkRedraw()
o.set_view_z()
def set_view_z2(event=None):
widgets.view_z.configure(relief="link")
@ -1784,19 +1750,7 @@ class TclCommands(nf.TclCommands):
widgets.view_y.configure(relief="link")
widgets.view_p.configure(relief="link")
vars.view_type.set(2)
o.reset()
glRotatef(-90, 0, 0, 1)
if o.g:
mid = [(a+b)/2 for a, b in zip(o.g.max_extents, o.g.min_extents)]
glTranslatef(-mid[0], -mid[1], -mid[2])
size = [(a-b) for a, b in zip(o.g.max_extents, o.g.min_extents)]
o.set_eyepoint_from_extents(size[1], size[0])
else:
o.set_eyepoint(5.)
o.perspective = False
o.lat = 0
o.lon = 270
o.tkRedraw()
o.set_view_z2()
def set_view_p(event=None):
@ -1806,32 +1760,7 @@ class TclCommands(nf.TclCommands):
widgets.view_y.configure(relief="link")
widgets.view_p.configure(relief="sunken")
vars.view_type.set(5)
o.reset()
o.perspective = True
if o.g:
mid = [(a+b)/2 for a, b in zip(o.g.max_extents, o.g.min_extents)]
glTranslatef(-mid[0], -mid[1], -mid[2])
size = [(a-b) for a, b in zip(o.g.max_extents, o.g.min_extents)]
size = sqrt(size[0] **2 + size[1] ** 2 + size[2] ** 2)
if size > 1e99: size = 5. # in case there are no moves in the preview
w = o.winfo_width()
h = o.winfo_height()
fovx = o.fovy * w / h
fov = min(fovx, o.fovy)
o.set_eyepoint((size * 1.1 + 1.0) / 2 / sin ( fov * pi / 180 / 2))
o.lat = -60
o.lon = 335
x = (o.g.min_extents[0] + o.g.max_extents[0])/2
y = (o.g.min_extents[1] + o.g.max_extents[1])/2
z = (o.g.min_extents[2] + o.g.max_extents[2])/2
glRotateScene(o, 1.0, x, y, z, 0, 0, 0, 0)
else:
o.set_eyepoint(5.)
o.lat = -60
o.lon = 335
glRotateScene(o, 1.0, o.xcenter, o.ycenter, o.zcenter, 0, 0, 0, 0)
o.tkRedraw()
o.set_view_p()
def estop_clicked(event=None):
s.poll()