factor out view-setting code
This commit is contained in:
parent
8998af5573
commit
6d0b2ca739
2 changed files with 102 additions and 76 deletions
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
Loading…
Reference in a new issue