[Bf-extensions-cvs] [cca0db8] master: Clean Up and Update

Germano Cavalcante noreply at git.blender.org
Fri Dec 18 21:48:45 CET 2015


Commit: cca0db8034eb5208220824fac90127dbee728935
Author: Germano Cavalcante
Date:   Fri Dec 18 17:48:34 2015 -0300
Branches: master
https://developer.blender.org/rBACcca0db8034eb5208220824fac90127dbee728935

Clean Up and Update

===================================================================

M	mesh_snap_utilities_line.py

===================================================================

diff --git a/mesh_snap_utilities_line.py b/mesh_snap_utilities_line.py
index 0169701..e64420f 100644
--- a/mesh_snap_utilities_line.py
+++ b/mesh_snap_utilities_line.py
@@ -22,14 +22,14 @@
 bl_info = {
     "name": "Snap_Utilities_Line",
     "author": "Germano Cavalcante",
-    "version": (5, 6),
+    "version": (5, 7),
     "blender": (2, 75, 0),
     "location": "View3D > TOOLS > Snap Utilities > snap utilities",
     "description": "Extends Blender Snap controls",
     "wiki_url" : "http://blenderartists.org/forum/showthread.php?363859-Addon-CAD-Snap-Utilities",
     "category": "Mesh"}
     
-import bpy, bgl, bmesh, mathutils, math
+import bpy, bgl, bmesh
 from mathutils import Vector
 from mathutils.geometry import (
     intersect_point_line,
@@ -51,7 +51,7 @@ def get_units_info(scale, unit_system, separate_units):
 
     return (scale, scale_steps, separate_units)
 
-def convert_distance(val, units_info, PRECISION = 5):
+def convert_distance(val, units_info, precision = 5):
     scale, scale_steps, separate_units = units_info
     sval = val * scale
     idx = 0
@@ -62,10 +62,10 @@ def convert_distance(val, units_info, PRECISION = 5):
     factor, suffix = scale_steps[idx]
     sval /= factor
     if not separate_units or idx == len(scale_steps) - 1:
-            dval = str(round(sval, PRECISION)) + suffix
+            dval = str(round(sval, precision)) + suffix
     else:
             ival = int(sval)
-            dval = str(round(ival, PRECISION)) + suffix
+            dval = str(round(ival, precision)) + suffix
             fval = sval - ival
             idx += 1
             while idx < len(scale_steps):
@@ -297,11 +297,9 @@ def snap_utilities(self,
             self.len = vec.length
 
 def get_isolated_edges(bmvert):
-    linked = [c for c in bmvert.link_edges[:] if c.link_faces[:] == []]
-    for a in linked:
-        edges = [b for c in a.verts[:] if c.link_faces[:] == [] for b in c.link_edges[:] if b not in linked]
-        for e in edges:
-            linked.append(e)
+    linked = [e for e in bmvert.link_edges if not e.link_faces]
+    for e in linked:
+        linked += [le for v in e.verts if not v.link_faces for le in v.link_edges if le not in linked]
     return linked
 
 def draw_line(self, obj, Bmesh, bm_geom, location):
@@ -361,36 +359,30 @@ def draw_line(self, obj, Bmesh, bm_geom, location):
                 edge = Bmesh.edges.new([V1, V2])
                 self.list_edges.append(edge)
             else:
-                face = [x for x in V2.link_faces[:] if x in V1.link_faces[:]]
-                if face != []:# and self.list_faces == []:
-                    self.list_faces = face
+                link_two_faces = V1.link_faces and V2.link_faces
+                if link_two_faces:
+                    self.list_faces = [f for f in V2.link_faces if f in V1.link_faces]
                     
-                elif V1.link_faces[:] == [] or V2.link_faces[:] == []:
-                    if self.list_faces == []:
-                        if V1.link_faces[:] != []:
-                            Vfaces = V1.link_faces
-                            Vtest = V2.co
-                        elif V2.link_faces[:] != []:
-                            Vfaces = V2.link_faces
-                            Vtest = V1.co
-                        else:
-                            Vfaces = []
-                        for face in Vfaces:
-                            testface = bmesh.geometry.intersect_face_point(face, Vtest)
-                            if testface:
+                elif not self.list_faces:
+                    faces, co2 = (V1.link_faces, V2.co.copy()) if V1.link_faces else (V2.link_faces, V1.co.copy())
+                    for face in faces:
+                        if bmesh.geometry.intersect_face_point(face, co2):
+                            co = co2 - face.calc_center_median()
+                            if co.dot(face.normal) < 0.001:
                                 self.list_faces.append(face)
 
-                if self.list_faces != []:
+                if self.list_faces:
                     edge = Bmesh.edges.new([V1, V2])
                     self.list_edges.append(edge)
                     ed_list = get_isolated_edges(V2)
-                    for face in list(set(self.list_faces)):
+                    for face in set(self.list_faces):
                         facesp = bmesh.utils.face_split_edgenet(face, list(set(ed_list)))
                         self.list_faces = []
                 else:
                     if self.intersect:
-                        facesp = bmesh.ops.connect_vert_pair(Bmesh, verts = [V1, V2])
-                    if not self.intersect or facesp['edges'] == []:
+                        facesp = bmesh.ops.connect_vert_pair(Bmesh, verts = [V1, V2], verts_exclude=Bmesh.verts)
+                        print(facesp)
+                    if not self.intersect or not facesp['edges']:
                         edge = Bmesh.edges.new([V1, V2])
                         self.list_edges.append(edge)
                     else:   
@@ -466,9 +458,11 @@ class SnapUtilitiesLine(bpy.types.Operator):
 
     @classmethod
     def poll(cls, context):
+        preferences = context.user_preferences.addons[__name__].preferences
         return (context.mode in {'EDIT_MESH', 'OBJECT'} and
-                context.object is not None and
-                context.object.type == 'MESH')
+                preferences.create_new_obj or 
+                (context.object is not None and
+                context.object.type == 'MESH'))
 
     def modal_navigation(self, context, event):
         #TO DO:
@@ -841,9 +835,11 @@ class PanelSnapUtilities(bpy.types.Panel) :
 
     @classmethod
     def poll(cls, context):
+        preferences = context.user_preferences.addons[__name__].preferences
         return (context.mode in {'EDIT_MESH', 'OBJECT'} and
-                context.object is not None and
-                context.object.type == 'MESH')
+                preferences.create_new_obj or 
+                (context.object is not None and
+                context.object.type == 'MESH'))
 
     def draw(self, context):
         layout = self.layout



More information about the Bf-extensions-cvs mailing list