diff options
Diffstat (limited to 'modules')
-rw-r--r-- | modules/geometry_utils.py | 15 | ||||
-rw-r--r-- | modules/misc_utils.py | 78 | ||||
-rw-r--r-- | modules/ui_utils.py | 51 |
3 files changed, 140 insertions, 4 deletions
diff --git a/modules/geometry_utils.py b/modules/geometry_utils.py index 413c24b8..e928ace2 100644 --- a/modules/geometry_utils.py +++ b/modules/geometry_utils.py @@ -21,10 +21,14 @@ geometry_utils.py 3d geometry calculations + + + ''' -from mathutils import geometry, Vector +from mathutils import Vector, Matrix +from mathutils import geometry # 3D Geometry @@ -136,7 +140,7 @@ class G3: def closestP2CylinderAxis(cls, p, fv): n = G3.ThreePnormal(fv) c = G3.circumCenter(fv) - if c is None: + if(c==None): return None return G3.closestP2L(p, c, c+n) @@ -163,7 +167,7 @@ class G3: #print ("G3.closestP2Sphere") try: c = G3.centerOfSphere(fv) - if c is None: + if c==None: return None pc = p-c if pc.length == 0: @@ -178,7 +182,7 @@ class G3: def closestP2Cylinder(cls, p, fv): #print ("G3.closestP2Sphere") c = G3.closestP2CylinderAxis(p, fv) - if c is None: + if c==None: return None r = (fv[0] - G3.centerOfSphere(fv)).length pc = p-c @@ -206,3 +210,6 @@ class G3: #else: #pc.normalize() #return c + (pc * G3.distanceP2P(c, fv[0])) + + + diff --git a/modules/misc_utils.py b/modules/misc_utils.py new file mode 100644 index 00000000..8b71d7d3 --- /dev/null +++ b/modules/misc_utils.py @@ -0,0 +1,78 @@ +# -*- 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)) diff --git a/modules/ui_utils.py b/modules/ui_utils.py new file mode 100644 index 00000000..e938efa9 --- /dev/null +++ b/modules/ui_utils.py @@ -0,0 +1,51 @@ +# -*- 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) + + + |