-
Bastien Montagne authoredBastien Montagne authored
misc_utils.py 2.03 KiB
# -*- coding: utf-8 -*-
# ##### BEGIN GPL LICENSE BLOCK #####
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# ##### END GPL LICENSE BLOCK #####
"""
misc_util.py
Miscellaneous helper methods.
"""
import bpy
from cursor_utils import *
from mathutils import Vector, Matrix
class BlenderFake:
@classmethod
def forceUpdate(cls):
if bpy.context.mode == 'EDIT_MESH':
bpy.ops.object.mode_set(mode='OBJECT')
bpy.ops.object.mode_set(mode='EDIT')
@classmethod
def forceRedraw(cls):
CursorAccess.setCursor(CursorAccess.getCursor())
# Converts 3D coordinates in a 3DRegion
# into 2D screen coordinates for that region.
# Borrowed from Buerbaum Martin (Pontiac)
def region3d_get_2d_coordinates(context, loc_3d):
# Get screen information
mid_x = context.region.width / 2.0
mid_y = context.region.height / 2.0
width = context.region.width
height = context.region.height
# Get matrices
view_mat = context.space_data.region_3d.perspective_matrix
total_mat = view_mat
# order is important
vec = total_mat * Vector((loc_3d[0], loc_3d[1], loc_3d[2], 1.0))
# dehomogenise
vec = Vector((
vec[0] / vec[3],
vec[1] / vec[3],
vec[2] / vec[3]))
x = int(mid_x + vec[0] * width / 2.0)
y = int(mid_y + vec[1] * height / 2.0)
z = vec[2]
return Vector((x, y, z))