[Bf-extensions-cvs] [6a5fcb65] master: Correction of several errors. Add operators to special menu (w).

Spivak Vladimir cwolf3d noreply at git.blender.org
Sat Nov 10 21:12:33 CET 2018


Commit: 6a5fcb65388fd329d30c6c55a3676b2e9d259d16
Author: Spivak Vladimir (cwolf3d)
Date:   Sat Nov 10 21:52:42 2018 +0200
Branches: master
https://developer.blender.org/rBA6a5fcb65388fd329d30c6c55a3676b2e9d259d16

Correction of several errors. Add operators to special menu (w).

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

M	add_curve_extra_objects/add_curve_simple.py

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

diff --git a/add_curve_extra_objects/add_curve_simple.py b/add_curve_extra_objects/add_curve_simple.py
index d8ff9ad7..15dd3e1a 100644
--- a/add_curve_extra_objects/add_curve_simple.py
+++ b/add_curve_extra_objects/add_curve_simple.py
@@ -122,13 +122,14 @@ def SimpleCircle(sides=4, radius=1.0):
 
     angle = radians(360) / sides
     newpoints.append([radius, 0, 0])
-    j = 1
-    while j < sides:
-        t = angle * j
-        x = cos(t) * radius
-        y = sin(t) * radius
-        newpoints.append([x, y, 0])
-        j += 1
+    if radius != 0 :
+        j = 1
+        while j < sides:
+            t = angle * j
+            x = cos(t) * radius
+            y = sin(t) * radius
+            newpoints.append([x, y, 0])
+            j += 1
 
     return newpoints
 
@@ -232,7 +233,7 @@ def SimpleSegment(sides=0, a=2.0, b=1.0, startangle=0.0, endangle=45.0):
     x = cos(endangle) * b
     y = sin(endangle) * b
     newpoints.append([x, y, 0])
-    j = sides
+    j = sides - 1
     while j > 0:
         t = angle * j
         x = cos(t + startangle) * b
@@ -434,6 +435,8 @@ def main(context, self, align_matrix):
     if self.Simple_Type == 'Circle':
         if self.Simple_sides < 4:
             self.Simple_sides = 4
+        if self.Simple_radius == 0:
+            return {'FINISHED'}
         verts = SimpleCircle(self.Simple_sides, self.Simple_radius)
         newSpline.use_cyclic_u = True
 
@@ -455,10 +458,8 @@ def main(context, self, align_matrix):
     if self.Simple_Type == 'Sector':
         if self.Simple_sides < sides:
             self.Simple_sides = sides
-
         if self.Simple_radius == 0:
             return {'FINISHED'}
-
         verts = SimpleSector(
                     self.Simple_sides, self.Simple_radius,
                     self.Simple_startangle, self.Simple_endangle
@@ -468,12 +469,18 @@ def main(context, self, align_matrix):
     if self.Simple_Type == 'Segment':
         if self.Simple_sides < sides:
             self.Simple_sides = sides
-        if self.Simple_a == 0 or self.Simple_b == 0:
+        if self.Simple_a == 0 or self.Simple_b == 0 or self.Simple_a == self.Simple_b:
             return {'FINISHED'}
-        verts = SimpleSegment(
+        if self.Simple_a > self.Simple_b:
+            verts = SimpleSegment(
                     self.Simple_sides, self.Simple_a, self.Simple_b,
                     self.Simple_startangle, self.Simple_endangle
                     )
+        if self.Simple_a < self.Simple_b:
+            verts = SimpleSegment(
+                    self.Simple_sides, self.Simple_b, self.Simple_a,
+                    self.Simple_startangle, self.Simple_endangle
+                    )
         newSpline.use_cyclic_u = True
 
     if self.Simple_Type == 'Rectangle':
@@ -680,21 +687,27 @@ def main(context, self, align_matrix):
 
     if self.Simple_Type == 'Segment':
         i = 0
+        if self.Simple_a > self.Simple_b:
+            Segment_a = self.Simple_a
+            Segment_b = self.Simple_b
+        if self.Simple_a < self.Simple_b:
+            Segment_b = self.Simple_a
+            Segment_a = self.Simple_b
         for p1 in all_points:
             if i < n / 2 - 1:
                 p2 = all_points[i + 1]
-                u1 = asin(p1.co.y / self.Simple_a)
-                u2 = asin(p2.co.y / self.Simple_a)
+                u1 = asin(p1.co.y / Segment_a)
+                u2 = asin(p2.co.y / Segment_a)
                 if p1.co.x > 0 and p2.co.x < 0:
-                    u1 = acos(p1.co.x / self.Simple_a)
-                    u2 = acos(p2.co.x / self.Simple_a)
+                    u1 = acos(p1.co.x / Segment_a)
+                    u2 = acos(p2.co.x / Segment_a)
                 elif p1.co.x < 0 and p2.co.x > 0:
-                    u1 = acos(p1.co.x / self.Simple_a)
-                    u2 = acos(p2.co.x / self.Simple_a)
+                    u1 = acos(p1.co.x / Segment_a)
+                    u2 = acos(p2.co.x / Segment_a)
                 u = u2 - u1
                 if u < 0:
                     u = -u
-                l = 4 / 3 * tan(1 / 4 * u) * self.Simple_a
+                l = 4 / 3 * tan(1 / 4 * u) * Segment_a
                 v1 = Vector((-p1.co.y, p1.co.x, 0))
                 v1.normalize()
                 v2 = Vector((-p2.co.y, p2.co.x, 0))
@@ -713,18 +726,18 @@ def main(context, self, align_matrix):
                     p2.handle_left = v2
             elif i != n / 2 - 1 and i != n - 1:
                 p2 = all_points[i + 1]
-                u1 = asin(p1.co.y / self.Simple_b)
-                u2 = asin(p2.co.y / self.Simple_b)
+                u1 = asin(p1.co.y / Segment_b)
+                u2 = asin(p2.co.y / Segment_b)
                 if p1.co.x > 0 and p2.co.x < 0:
-                    u1 = acos(p1.co.x / self.Simple_b)
-                    u2 = acos(p2.co.x / self.Simple_b)
+                    u1 = acos(p1.co.x / Segment_b)
+                    u2 = acos(p2.co.x / Segment_b)
                 elif p1.co.x < 0 and p2.co.x > 0:
-                    u1 = acos(p1.co.x / self.Simple_b)
-                    u2 = acos(p2.co.x / self.Simple_b)
+                    u1 = acos(p1.co.x / Segment_b)
+                    u2 = acos(p2.co.x / Segment_b)
                 u = u2 - u1
                 if u < 0:
                     u = -u
-                l = 4 / 3 * tan(1 / 4 * u) * self.Simple_b
+                l = 4 / 3 * tan(1 / 4 * u) * Segment_b
                 v1 = Vector((-p1.co.y, p1.co.x, 0))
                 v1.normalize()
                 v2 = Vector((-p2.co.y, p2.co.x, 0))
@@ -1366,23 +1379,40 @@ class BezierDivide(Operator):
         # main function
         spline = bpy.context.object.data.splines.active
         selected_all = [p for p in spline.bezier_points if p.select_control_point]
-        h = subdivide_cubic_bezier(
-                    selected_all[0].co, selected_all[0].handle_right,
-                    selected_all[1].handle_left, selected_all[1].co, self.Bezier_t / 100
-                    )
-
+        selected = []
+        n = 0
+        for j in spline.bezier_points:
+            n += 1
+            if j.select_control_point:
+                selected.append(n)
         selected_all[0].handle_right_type = 'FREE'
         selected_all[0].handle_left_type = 'FREE'
         selected_all[1].handle_right_type = 'FREE'
         selected_all[1].handle_left_type = 'FREE'
-        bpy.ops.curve.subdivide(1)
-        selected_all = [p for p in spline.bezier_points if p.select_control_point]
-
-        selected_all[0].handle_right = h[0]
-        selected_all[1].co = h[2]
-        selected_all[1].handle_left = h[1]
-        selected_all[1].handle_right = h[3]
-        selected_all[2].handle_left = h[4]
+        if abs(selected[0] - selected[1]) == 1:
+            h = subdivide_cubic_bezier(
+                    selected_all[0].co, selected_all[0].handle_right,
+                    selected_all[1].handle_left, selected_all[1].co, self.Bezier_t / 100
+                    )
+            bpy.ops.curve.subdivide(1)
+            selected_all = [p for p in spline.bezier_points if p.select_control_point]
+            selected_all[0].handle_right = h[0]
+            selected_all[1].co = h[2]
+            selected_all[1].handle_left = h[1]
+            selected_all[1].handle_right = h[3]
+            selected_all[2].handle_left = h[4]
+        else:
+            h = subdivide_cubic_bezier(
+                    selected_all[1].co, selected_all[1].handle_right,
+                    selected_all[0].handle_left, selected_all[0].co, self.Bezier_t / 100
+                    )
+            bpy.ops.curve.subdivide(1)
+            selected_all = [p for p in spline.bezier_points if p.select_control_point]
+            selected_all[1].handle_right = h[0]
+            selected_all[2].co = h[2]
+            selected_all[2].handle_left = h[1]
+            selected_all[2].handle_right = h[3]
+            selected_all[0].handle_left = h[4]
 
         # restore pre operator undo state
         bpy.context.user_preferences.edit.use_global_undo = undo
@@ -1716,6 +1746,16 @@ def Simple_button(self, context):
     layout.separator()
     self.layout.menu("INFO_MT_simple_menu", icon="MOD_CURVE")
 
+class VIEW3D_MT_simple_edit_curve_menu(bpy.types.Menu):
+    bl_label = 'Simple edit'
+    
+    def draw(self, context):
+        self.layout.operator("curve.bezier_points_fillet", text="Fillet")
+        self.layout.operator("curve.bezier_spline_divide", text="Divide")
+
+def Simple_curve_edit_menu(self, context):
+    self.layout.menu('VIEW3D_MT_simple_edit_curve_menu')
+    self.layout.separator()
 
 def register():
     bpy.utils.register_class(Simple)
@@ -1727,6 +1767,7 @@ def register():
     bpy.utils.register_class(SimpleVariables)
 
     bpy.types.INFO_MT_curve_add.append(Simple_button)
+    bpy.types.VIEW3D_MT_edit_curve_specials.prepend(Simple_curve_edit_menu)
 
     bpy.types.Object.s_curve = PointerProperty(type=SimpleVariables)



More information about the Bf-extensions-cvs mailing list