Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2011-06-27 12:20:29 +0400
committerCampbell Barton <ideasman42@gmail.com>2011-06-27 12:20:29 +0400
commit06605e9179bc7a2a8bc973330a3f00a50bc89e8e (patch)
treec02078e05ae96b9d17b05239f1c7dfc3b5b96aaa /space_view3d_spacebar_menu.py
parentb5b89b5de47c27f4b25165c499c2d25ab6aa1c3c (diff)
- update for change in blender api.
- replace line intersection function with mathutils one. - snap to edge intersection works with object transforms now. - clean whitespace
Diffstat (limited to 'space_view3d_spacebar_menu.py')
-rw-r--r--space_view3d_spacebar_menu.py98
1 files changed, 33 insertions, 65 deletions
diff --git a/space_view3d_spacebar_menu.py b/space_view3d_spacebar_menu.py
index 169a4021..3a0b4a8f 100644
--- a/space_view3d_spacebar_menu.py
+++ b/space_view3d_spacebar_menu.py
@@ -365,7 +365,7 @@ class VIEW3D_MT_Space_Dynamic_Menu(bpy.types.Menu):
# Toggle Objectmode
layout.operator("object.editmode_toggle", text="Enter Object Mode",
- icon='OBJECT_DATA')
+ icon='OBJECT_DATA')
# Delete block
layout.operator("mball.delete_metaelems", text="Delete Object",
@@ -416,7 +416,7 @@ class VIEW3D_MT_Space_Dynamic_Menu(bpy.types.Menu):
# Delete block - Can't delete any lattice stuff so not needed
#layout.operator("object.delete", text="Delete Object",
- # icon='CANCEL')
+ # icon='CANCEL')
if context.mode == 'PARTICLE':
# Particle menu
@@ -632,19 +632,20 @@ class VIEW3D_MT_Space_Dynamic_Menu(bpy.types.Menu):
# Edit Armature Toolkit
layout.menu("VIEW3D_MT_EditArmatureTK",
- icon='ARMATURE_DATA')
+ icon='ARMATURE_DATA')
layout.separator()
# Edit Armature Name
layout.menu("VIEW3D_MT_ArmatureName",
- icon='NEW')
+ icon='NEW')
layout.separator()
-
+
# Parent block
layout.menu("VIEW3D_MT_ParentMenu", icon='ROTACTIVE')
layout.separator()
- layout.operator_menu_enum("armature.flags_set", "mode",
+
+ layout.menu("VIEW3D_MT_bone_options_toggle",
text="Bone Settings")
# Edit Armature Specials
@@ -687,17 +688,17 @@ class VIEW3D_MT_Space_Dynamic_Menu(bpy.types.Menu):
# Transform Menu
layout.menu("VIEW3D_MT_TransformMenu", icon='MANIPUL')
- # Clear Transform
+ # Clear Transform
layout.menu("VIEW3D_MT_pose_transform")
- # Cursor Menu
+ # Cursor Menu
layout.menu("VIEW3D_MT_CursorMenu", icon='CURSOR')
layout.separator()
- # Pose Copy Block
+ # Pose Copy Block
layout.menu("VIEW3D_MT_PoseCopy", icon='FILE')
layout.separator()
-
+
if arm.draw_type in ('BBONE', 'ENVELOPE'):
layout.operator("transform.transform",
@@ -734,11 +735,11 @@ class VIEW3D_MT_Space_Dynamic_Menu(bpy.types.Menu):
layout.separator()
layout.menu("VIEW3D_MT_pose_showhide")
- layout.operator_menu_enum("pose.flags_set", 'mode',
+ layout.menu("VIEW3D_MT_bone_options_toggle",
text="Bone Settings")
layout.separator()
- # Select Pose Block
+ # Select Pose Block
layout.menu("VIEW3D_MT_SelectPoseMenu", icon='RESTRICT_SELECT_OFF')
# Toolshelf block
@@ -1087,7 +1088,7 @@ class VIEW3D_MT_PoseCopy(bpy.types.Menu):
def draw(self, context):
layout = self.layout
-
+
layout.operator("pose.copy")
layout.operator("pose.paste")
layout.operator("pose.paste",
@@ -1099,7 +1100,7 @@ class VIEW3D_MT_PoseNames(bpy.types.Menu):
def draw(self, context):
layout = self.layout
-
+
layout.operator_context = 'EXEC_AREA'
layout.operator("pose.autoside_names",
text="AutoName Left/Right").axis = 'XAXIS'
@@ -1437,49 +1438,15 @@ def abs(val):
return val
return -val
-def LineLineIntersect(p1, p2, p3, p4):
- # based on Paul Bourke's Shortest Line Between 2 lines
-
- min = 0.0000001
-
- v1 = Vector((p1.x - p3.x, p1.y - p3.y, p1.z - p3.z))
- v2 = Vector((p4.x - p3.x, p4.y - p3.y, p4.z - p3.z))
-
- if abs(v2.x) < min and abs(v2.y) < min and abs(v2.z) < min:
- return None
-
- v3 = Vector((p2.x - p1.x, p2.y - p1.y, p2.z - p1.z))
-
- if abs(v3.x) < min and abs(v3.y) < min and abs(v3.z) < min:
- return None
-
- d1 = v1.dot(v2)
- d2 = v2.dot(v3)
- d3 = v1.dot(v3)
- d4 = v2.dot(v2)
- d5 = v3.dot(v3)
-
- d = d5 * d4 - d2 * d2
-
- if abs(d) < min:
- return None
-
- n = d1 * d2 - d3 * d4
-
- mua = n / d
- mub = (d1 + d2 * (mua)) / d4
-
- return [Vector((p1.x + mua * v3.x, p1.y + mua * v3.y, p1.z + mua * v3.z)),
- Vector((p3.x + mub * v2.x, p3.y + mub * v2.y, p3.z + mub * v2.z))]
-
def edgeIntersect(context, operator):
-
+ from mathutils.geometry import intersect_line_line
+
obj = context.active_object
-
+
if (obj.type != "MESH"):
operator.report({'ERROR'}, "Object must be a mesh")
return None
-
+
edges = []
mesh = obj.data
verts = mesh.vertices
@@ -1487,36 +1454,37 @@ def edgeIntersect(context, operator):
is_editmode = (obj.mode == 'EDIT')
if is_editmode:
bpy.ops.object.mode_set(mode='OBJECT')
-
+
for e in mesh.edges:
if e.select:
edges.append(e)
+ if len(edges) > 2:
+ break
+
if is_editmode:
bpy.ops.object.mode_set(mode='EDIT')
-
+
if len(edges) != 2:
operator.report({'ERROR'},
"Operator requires exactly 2 edges to be selected.")
return
-
- line = LineLineIntersect(verts[edges[0].vertices[0]].co,
- verts[edges[0].vertices[1]].co, verts[edges[1].vertices[0]].co,
- verts[edges[1].vertices[1]].co)
- if (line is None):
+ line = intersect_line_line(verts[edges[0].vertices[0]].co,
+ verts[edges[0].vertices[1]].co,
+ verts[edges[1].vertices[0]].co,
+ verts[edges[1].vertices[1]].co)
+
+ if line is None:
operator.report({'ERROR'}, "Selected edges do not intersect.")
return
- point = ((line[0] + line[1]) / 2)
+ point = line[0].lerp(line[1], 0.5)
+ context.scene.cursor_location = point * obj.matrix_world
- context.scene.cursor_location = point
-
- return point
-
class VIEW3D_OT_CursorToEdgeIntersection(bpy.types.Operator):
"Finds the mid-point of the shortest distance between two edges"
-
+
bl_idname = "view3d.snap_cursor_to_edge_intersection"
bl_label = "Cursor to Edge Intersection"