Skip to content
Snippets Groups Projects
Commit 6b43b039 authored by rtsell's avatar rtsell
Browse files

Cursor Control 0.6.1

Updated to work with Blender 2.59


[[Split portion of a mixed commit.]]
parent b8fb1941
No related branches found
No related tags found
No related merge requests found
...@@ -21,10 +21,14 @@ ...@@ -21,10 +21,14 @@
geometry_utils.py geometry_utils.py
3d geometry calculations 3d geometry calculations
''' '''
from mathutils import geometry, Vector from mathutils import Vector, Matrix
from mathutils import geometry
# 3D Geometry # 3D Geometry
...@@ -136,7 +140,7 @@ class G3: ...@@ -136,7 +140,7 @@ class G3:
def closestP2CylinderAxis(cls, p, fv): def closestP2CylinderAxis(cls, p, fv):
n = G3.ThreePnormal(fv) n = G3.ThreePnormal(fv)
c = G3.circumCenter(fv) c = G3.circumCenter(fv)
if c is None: if(c==None):
return None return None
return G3.closestP2L(p, c, c+n) return G3.closestP2L(p, c, c+n)
...@@ -163,7 +167,7 @@ class G3: ...@@ -163,7 +167,7 @@ class G3:
#print ("G3.closestP2Sphere") #print ("G3.closestP2Sphere")
try: try:
c = G3.centerOfSphere(fv) c = G3.centerOfSphere(fv)
if c is None: if c==None:
return None return None
pc = p-c pc = p-c
if pc.length == 0: if pc.length == 0:
...@@ -178,7 +182,7 @@ class G3: ...@@ -178,7 +182,7 @@ class G3:
def closestP2Cylinder(cls, p, fv): def closestP2Cylinder(cls, p, fv):
#print ("G3.closestP2Sphere") #print ("G3.closestP2Sphere")
c = G3.closestP2CylinderAxis(p, fv) c = G3.closestP2CylinderAxis(p, fv)
if c is None: if c==None:
return None return None
r = (fv[0] - G3.centerOfSphere(fv)).length r = (fv[0] - G3.centerOfSphere(fv)).length
pc = p-c pc = p-c
...@@ -206,3 +210,6 @@ class G3: ...@@ -206,3 +210,6 @@ class G3:
#else: #else:
#pc.normalize() #pc.normalize()
#return c + (pc * G3.distanceP2P(c, fv[0])) #return c + (pc * G3.distanceP2P(c, fv[0]))
# -*- 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))
# -*- 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 #####
'''
ui_utils.py
Some UI utility functions
'''
class GUI:
@classmethod
def drawIconButton(cls, enabled, layout, iconName, operator, frame=True):
col = layout.column()
col.enabled = enabled
bt = col.operator(operator,
text='',
icon=iconName,
emboss=frame)
@classmethod
def drawTextButton(cls, enabled, layout, text, operator, frame=True):
col = layout.column()
col.enabled = enabled
bt = col.operator(operator,
text=text,
emboss=frame)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment