def draw_simple(text, xyz):
        fontid = FontManager._last_fontid
        blf.position(fontid, *xyz)

        # blf.draw overwrites blend settings!  store so we can restore
        bgl.glGetBooleanv(bgl.GL_BLEND_SRC_RGB, FontManager._pre_src_rgb)
        bgl.glGetIntegerv(bgl.GL_BLEND_DST_RGB, FontManager._pre_dst_rgb)
        bgl.glGetBooleanv(bgl.GL_BLEND_SRC_ALPHA, FontManager._pre_src_a)
        bgl.glGetIntegerv(bgl.GL_BLEND_DST_ALPHA, FontManager._pre_dst_a)
        bgl.glGetIntegerv(bgl.GL_BLEND, FontManager._pre_blend)

        ret = blf.draw(fontid, text)

        # restore blend settings!
        if FontManager._pre_blend[0]: bgl.glEnable(bgl.GL_BLEND)
        else: bgl.glDisable(bgl.GL_BLEND)
        bgl.glBlendFunc(FontManager._pre_src_rgb[0], FontManager._pre_dst_rgb[0])
        #bgl.glBlendEquationSeparate(FontManager._pre_src_rgb[0], FontManager._pre_dst_rgb[0], FontManager._pre_src_a[0], FontManager._pre_dst_a[0])

        return ret
Example #2
0
    def __init__(self, parent, configuration):
        base.Base.__init__(self, parent)

        try:
            if configuration['viewport'] is not None:
                self._viewport = configuration['viewport']
        except:
            pass

        self._focus = configuration['keep_focus']
        if self._focus:
            self.logger.info('Focus forced on this screen')

        buffers = configuration['graphic_buffer']
        self._buffers = {}
        self._users = []

        for information in buffers:
            user = self.BlenderVR.getUserByName(information['user'])
            if user not in self._users:
                self._users.append(user)
            if information['eye'] == 'left':
                eye = -1.0
            elif information['eye'] == 'right':
                eye = 1.0
            else:
                eye = 0
            self._buffers[information['buffer']] = {'user': user, 'eye': eye}

        stereo_mode = bgl.Buffer(bgl.GL_BYTE, 1)
        bgl.glGetBooleanv(bgl.GL_STEREO, stereo_mode)
        if ((not 'left' in self._buffers) or (not 'right' in self._buffers)) \
                and (stereo_mode == 1):
            raise exceptions.VirtualEnvironment('Stereo window but buffer '
                                                'is missing !')
        if (not 'middle' in self._buffers) and (stereo_mode == 0):
            raise exceptions.VirtualEnvironment('Monoscopic window but '
                                            '"middle" buffer is missing !')
Example #3
0
    def __init__(self, parent, configuration):
        super(Screen, self).__init__(parent)

        if 'viewport' in configuration:
            self._viewport = configuration['viewport']

        corners       = configuration['corners']
        self._buffers = {}
        for bufferName in configuration['buffers']:
            user = self.getBlenderCave().getUserByName(configuration['buffers'][bufferName]['user'])
            self._buffers[bufferName] = {'user' : user, 'eye': configuration['buffers'][bufferName]['eye']}

        stereo_mode = bgl.Buffer(bgl.GL_BYTE, 1)
        bgl.glGetBooleanv(bgl.GL_STEREO, stereo_mode)
        if ((not 'left' in self._buffers) or (not 'right' in self._buffers)) and (stereo_mode == 1):
            raise blender_cave.exceptions.VirtualEnvironment('Stereo window but buffer is missing !')
        if (not 'middle' in self._buffers) and (stereo_mode == 0):
            raise blender_cave.exceptions.VirtualEnvironment('Monoscopic window but "middle" buffer is missing !')

        # First, check corners validity !
        XVector = corners['topRightCorner'] - corners['topLeftCorner']
        if XVector.length < (corners['topRightCorner'][0] / 100000):
            raise blender_cave.exceptions.VirtualEnvironment("top right and left corners are same points !")
            return

        YVector = corners['topRightCorner'] - corners['bottomRightCorner']
        if YVector.length < (corners['topRightCorner'][0] / 100000):
            raise blender_cave.exceptions.VirtualEnvironment("top and bottom right corners are same points !")
            return

        ZVector = XVector.cross(YVector)
        if ZVector.length < (corners['topRightCorner'][0] / 100000):
            raise blender_cave.exceptions.VirtualEnvironment("Three corners are not perpendicular !")
            return
        corners['bottomLeftCorner'] = corners['topLeftCorner'] - YVector

        Center = (corners['bottomLeftCorner'] + corners['topRightCorner']) / 2.0

        XVector.normalize()
        YVector.normalize()
        ZVector.normalize()

        self._fromVehicleToLocalScreen = mathutils.Matrix()
        self._fromVehicleToLocalScreen[0][0] = XVector[0]
        self._fromVehicleToLocalScreen[1][0] = XVector[1]
        self._fromVehicleToLocalScreen[2][0] = XVector[2]

        self._fromVehicleToLocalScreen[0][1] = YVector[0]
        self._fromVehicleToLocalScreen[1][1] = YVector[1]
        self._fromVehicleToLocalScreen[2][1] = YVector[2]

        self._fromVehicleToLocalScreen[0][2] = ZVector[0]
        self._fromVehicleToLocalScreen[1][2] = ZVector[1]
        self._fromVehicleToLocalScreen[2][2] = ZVector[2]

        self._fromVehicleToLocalScreen.invert()

        self._fromVehicleToLocalScreen = self._fromVehicleToLocalScreen * mathutils.Matrix.Translation((-Center))

        self._cornersLocally = {}
        for key, value in corners.items():
            corners[key].resize_4d()
            self._cornersLocally[key] = self._fromVehicleToLocalScreen * corners[key]

        self._windowCoordinates = {}
        self._windowCoordinates['left'  ] = self._cornersLocally['topLeftCorner'][0]
        self._windowCoordinates['right' ] = self._cornersLocally['topRightCorner'][0]
        self._windowCoordinates['top'   ] = self._cornersLocally['topRightCorner'][1]
        self._windowCoordinates['bottom'] = self._cornersLocally['bottomRightCorner'][1]

# Update frame_type of the scene, otherwise, there will be black borders ...
        scene = bge.logic.getCurrentScene()
        scene.frame_type="scale"

        self._focus = configuration['focus']
        if self._focus:
            self.getLogger().info('Focus forced on this screen')
Example #4
0
    def __init__(self, parent, configuration):
        super(Screen, self).__init__(parent)

        if 'viewport' in configuration:
            self._viewport = configuration['viewport']

        corners = configuration['corners']
        self._buffers = {}
        for bufferName in configuration['buffers']:
            user = self.getBlenderCave().getUserByName(
                configuration['buffers'][bufferName]['user'])
            self._buffers[bufferName] = {
                'user': user,
                'eye': configuration['buffers'][bufferName]['eye']
            }

        stereo_mode = bgl.Buffer(bgl.GL_BYTE, 1)
        bgl.glGetBooleanv(bgl.GL_STEREO, stereo_mode)
        if ((not 'left' in self._buffers) or
            (not 'right' in self._buffers)) and (stereo_mode == 1):
            raise blender_cave.exceptions.VirtualEnvironment(
                'Stereo window but buffer is missing !')
        if (not 'middle' in self._buffers) and (stereo_mode == 0):
            raise blender_cave.exceptions.VirtualEnvironment(
                'Monoscopic window but "middle" buffer is missing !')

        # First, check corners validity !
        XVector = corners['topRightCorner'] - corners['topLeftCorner']
        if XVector.length < (corners['topRightCorner'][0] / 100000):
            raise blender_cave.exceptions.VirtualEnvironment(
                "top right and left corners are same points !")
            return

        YVector = corners['topRightCorner'] - corners['bottomRightCorner']
        if YVector.length < (corners['topRightCorner'][0] / 100000):
            raise blender_cave.exceptions.VirtualEnvironment(
                "top and bottom right corners are same points !")
            return

        ZVector = XVector.cross(YVector)
        if ZVector.length < (corners['topRightCorner'][0] / 100000):
            raise blender_cave.exceptions.VirtualEnvironment(
                "Three corners are not perpendicular !")
            return
        corners['bottomLeftCorner'] = corners['topLeftCorner'] - YVector

        Center = (corners['bottomLeftCorner'] +
                  corners['topRightCorner']) / 2.0

        XVector.normalize()
        YVector.normalize()
        ZVector.normalize()

        self._fromVehicleToLocalScreen = mathutils.Matrix()
        self._fromVehicleToLocalScreen[0][0] = XVector[0]
        self._fromVehicleToLocalScreen[1][0] = XVector[1]
        self._fromVehicleToLocalScreen[2][0] = XVector[2]

        self._fromVehicleToLocalScreen[0][1] = YVector[0]
        self._fromVehicleToLocalScreen[1][1] = YVector[1]
        self._fromVehicleToLocalScreen[2][1] = YVector[2]

        self._fromVehicleToLocalScreen[0][2] = ZVector[0]
        self._fromVehicleToLocalScreen[1][2] = ZVector[1]
        self._fromVehicleToLocalScreen[2][2] = ZVector[2]

        self._fromVehicleToLocalScreen.invert()

        self._fromVehicleToLocalScreen = self._fromVehicleToLocalScreen * mathutils.Matrix.Translation(
            (-Center))

        self._cornersLocally = {}
        for key, value in corners.items():
            corners[key].resize_4d()
            self._cornersLocally[
                key] = self._fromVehicleToLocalScreen * corners[key]

        self._windowCoordinates = {}
        self._windowCoordinates['left'] = self._cornersLocally[
            'topLeftCorner'][0]
        self._windowCoordinates['right'] = self._cornersLocally[
            'topRightCorner'][0]
        self._windowCoordinates['top'] = self._cornersLocally[
            'topRightCorner'][1]
        self._windowCoordinates['bottom'] = self._cornersLocally[
            'bottomRightCorner'][1]

        # Update frame_type of the scene, otherwise, there will be black borders ...
        scene = bge.logic.getCurrentScene()
        scene.frame_type = "scale"

        self._focus = configuration['focus']
        if self._focus:
            self.getLogger().info('Focus forced on this screen')