コード例 #1
0
ファイル: glutil.py プロジェクト: xoryouyou/NetArgos
def screen_to_model(c):
    """
    Returns the 3D coordinate of given screen coordinate

    :param c: The screen coordinates for example
    :type c: 3-tuple of float  (x,y,0)

    :rtype: 3-tuple float (x,y,z)

    """
    m = (c_double*16)()
    glGetDoublev(GL_MODELVIEW_MATRIX, m)

    p = (c_double*16)()
    glGetDoublev(GL_PROJECTION_MATRIX, p)

    v = (c_int*4)()
    glGetIntegerv(GL_VIEWPORT, v)

    x, y, z = c_double(), c_double(), c_double()

    y.value = v[3] - y.value
    gluUnProject(c[0], c[1], c[2], m, p, v, x, y, z)

    return x, y, z
コード例 #2
0
 def get_modelview_mat(self, local_transform):
     mvmat = (GLdouble * 16)()
     if local_transform:
         glPushMatrix()
         # Rotate according to trackball
         glTranslatef(0, 0, -self.dist)
         glMultMatrixd(build_rotmatrix(self.basequat))  # Rotate according to trackball
         glTranslatef(- self.build_dimensions[3] - self.platform.width / 2,
                      - self.build_dimensions[4] - self.platform.depth / 2, 0)  # Move origin to bottom left of platform
         glGetDoublev(GL_MODELVIEW_MATRIX, mvmat)
         glPopMatrix()
     else:
         glGetDoublev(GL_MODELVIEW_MATRIX, mvmat)
     return mvmat
コード例 #3
0
ファイル: stlview.py プロジェクト: UCDBioe/Printrun
 def get_modelview_mat(self, local_transform):
     mvmat = (GLdouble * 16)()
     if local_transform:
         glPushMatrix()
         # Rotate according to trackball
         glTranslatef(0, 0, -self.dist)
         glMultMatrixd(build_rotmatrix(self.basequat))  # Rotate according to trackball
         glTranslatef(- self.build_dimensions[3] - self.platform.width / 2,
                      - self.build_dimensions[4] - self.platform.depth / 2, 0)  # Move origin to bottom left of platform
         glGetDoublev(GL_MODELVIEW_MATRIX, mvmat)
         glPopMatrix()
     else:
         glGetDoublev(GL_MODELVIEW_MATRIX, mvmat)
     return mvmat
コード例 #4
0
ファイル: panel.py プロジェクト: isabella232/printrun
 def mouse_to_ray(self, x, y, local_transform=False):
     x = float(x)
     y = self.height - float(y)
     pmat = (GLdouble * 16)()
     mvmat = (GLdouble * 16)()
     viewport = (GLint * 4)()
     px = (GLdouble)()
     py = (GLdouble)()
     pz = (GLdouble)()
     glGetIntegerv(GL_VIEWPORT, viewport)
     glGetDoublev(GL_PROJECTION_MATRIX, pmat)
     mvmat = self.get_modelview_mat(local_transform)
     gluUnProject(x, y, 1, mvmat, pmat, viewport, px, py, pz)
     ray_far = (px.value, py.value, pz.value)
     gluUnProject(x, y, 0., mvmat, pmat, viewport, px, py, pz)
     ray_near = (px.value, py.value, pz.value)
     return ray_near, ray_far
コード例 #5
0
ファイル: obj.py プロジェクト: HemuManju/shasta
    def convert_to_obj_coordinates(self, x, y):
        x = int(x) * self.rect._m_scale
        y = int(y) * self.rect._m_scale
        pmat = (gl.GLdouble * 16)()
        mvmat = (gl.GLdouble * 16)()
        viewport = (gl.GLint * 4)()

        # Model, projection and viewport matrices
        gl.glGetDoublev(gl.GL_MODELVIEW_MATRIX, mvmat)
        gl.glGetDoublev(gl.GL_PROJECTION_MATRIX, pmat)
        gl.glGetIntegerv(gl.GL_VIEWPORT, viewport)

        # Unproject
        point = [gl.GLdouble() for _ in range(3)]
        gl.gluUnProject(x, y, 1, mvmat, pmat, viewport, *point)
        obj_coord = [v.value for v in point]
        return obj_coord[0:2]
コード例 #6
0
ファイル: panel.py プロジェクト: pavlog/Printrun
 def mouse_to_ray(self, x, y, local_transform = False):
     x = float(x)
     y = self.height - float(y)
     pmat = (GLdouble * 16)()
     mvmat = (GLdouble * 16)()
     viewport = (GLint * 4)()
     px = (GLdouble)()
     py = (GLdouble)()
     pz = (GLdouble)()
     glGetIntegerv(GL_VIEWPORT, viewport)
     glGetDoublev(GL_PROJECTION_MATRIX, pmat)
     mvmat = self.get_modelview_mat(local_transform)
     gluUnProject(x, y, 1, mvmat, pmat, viewport, px, py, pz)
     ray_far = (px.value, py.value, pz.value)
     gluUnProject(x, y, 0., mvmat, pmat, viewport, px, py, pz)
     ray_near = (px.value, py.value, pz.value)
     return ray_near, ray_far
コード例 #7
0
ファイル: panel.py プロジェクト: isabella232/printrun
 def mouse_to_3d(self, x, y, z=1.0, local_transform=False):
     x = float(x)
     y = self.height - float(y)
     # The following could work if we were not initially scaling to zoom on
     # the bed
     # if self.orthographic:
     #    return (x - self.width / 2, y - self.height / 2, 0)
     pmat = (GLdouble * 16)()
     mvmat = self.get_modelview_mat(local_transform)
     viewport = (GLint * 4)()
     px = (GLdouble)()
     py = (GLdouble)()
     pz = (GLdouble)()
     glGetIntegerv(GL_VIEWPORT, viewport)
     glGetDoublev(GL_PROJECTION_MATRIX, pmat)
     glGetDoublev(GL_MODELVIEW_MATRIX, mvmat)
     gluUnProject(x, y, z, mvmat, pmat, viewport, px, py, pz)
     return (px.value, py.value, pz.value)
コード例 #8
0
ファイル: panel.py プロジェクト: pavlog/Printrun
 def mouse_to_3d(self, x, y, z = 1.0, local_transform = False):
     x = float(x)
     y = self.height - float(y)
     # The following could work if we were not initially scaling to zoom on
     # the bed
     # if self.orthographic:
     #    return (x - self.width / 2, y - self.height / 2, 0)
     pmat = (GLdouble * 16)()
     mvmat = self.get_modelview_mat(local_transform)
     viewport = (GLint * 4)()
     px = (GLdouble)()
     py = (GLdouble)()
     pz = (GLdouble)()
     glGetIntegerv(GL_VIEWPORT, viewport)
     glGetDoublev(GL_PROJECTION_MATRIX, pmat)
     glGetDoublev(GL_MODELVIEW_MATRIX, mvmat)
     gluUnProject(x, y, z, mvmat, pmat, viewport, px, py, pz)
     return (px.value, py.value, pz.value)
コード例 #9
0
ファイル: core.py プロジェクト: Knio/miru
def _worldobj_on_translate(control, target, x, y, dx, dy):

    from miru.context import context
    from miru import camera
    
    self = control


    if isinstance(context.camera, camera.MetaCamera):
        context.camera.focussed.render()

    viewport = (gl.GLint * 4)()
    mvmatrix = (gl.GLdouble * 16)()
    projmatrix = (gl.GLdouble * 16)()
    gl.glGetIntegerv(gl.GL_VIEWPORT, viewport)
    gl.glGetDoublev(gl.GL_MODELVIEW_MATRIX, mvmatrix)
    gl.glGetDoublev(gl.GL_PROJECTION_MATRIX, projmatrix)
    wx = gl.GLdouble()
    wy = gl.GLdouble()
    wz = gl.GLdouble()

    sz = gl.GLdouble()
    ex = target.pos.x
    ey = target.pos.y
    ez = target.pos.z
    gl.gluProject(ex, ey, ez, mvmatrix, projmatrix,
            viewport, wx, wy, sz)
    gl.gluUnProject(x, y, sz,
            mvmatrix, projmatrix, viewport, wx, wy, wz)

    if self.axis == self.AXIS_X:
        target.pos = (wx.value, wz.value, target.pos.z)
    elif self.axis == self.AXIS_Y:
        target.pos = (target.pos.x, wy.value, wz.value)
    elif self.axis == self.AXIS_Z:
        tz = dy * 0.01
        tz += (dx * 0.01)
        target.pos += (0, 0, tz)
    else:
        target.pos = (wx.value, wy.value, wz.value)
コード例 #10
0
ファイル: glutil.py プロジェクト: xoryouyou/NetArgos
def model_to_screen(c):
    """
    Returns the screen point of given 3D coordinate

    :param c: The 3D coordinates
    :type c: 3-tuple of float (x,y,z)

    :rtype: 3-tuple float (x,y,z)

    """
    m = (c_double*16)()
    glGetDoublev(GL_MODELVIEW_MATRIX, m)

    p = (c_double*16)()
    glGetDoublev(GL_PROJECTION_MATRIX, p)

    v = (c_int*4)()
    glGetIntegerv(GL_VIEWPORT, v)

    x, y, z = c_double(), c_double(), c_double()
    gluProject(c[0], c[1], c[2], m, p, v, x, y, z)

    return x, y, z
コード例 #11
0
ファイル: panel.py プロジェクト: isabella232/printrun
 def get_modelview_mat(self, local_transform):
     mvmat = (GLdouble * 16)()
     glGetDoublev(GL_MODELVIEW_MATRIX, mvmat)
     return mvmat
コード例 #12
0
ファイル: utils.py プロジェクト: ranjian0/triggered_python
def get_gl_translation():
    """ return global gl translation """
    arr = ctypes.c_double * 16
    mat = arr(*list(range(16)))
    gl.glGetDoublev(gl.GL_MODELVIEW_MATRIX, mat)
    return list(mat)[-4:-1]
コード例 #13
0
ファイル: panel.py プロジェクト: pavlog/Printrun
 def get_modelview_mat(self, local_transform):
     mvmat = (GLdouble * 16)()
     glGetDoublev(GL_MODELVIEW_MATRIX, mvmat)
     return mvmat