[Bf-extensions-cvs] [e602139] master: Simplify rigify circle widget creation

Campbell Barton noreply at git.blender.org
Fri Apr 3 02:14:08 CEST 2015


Commit: e60213920931b3243a1ff1c45e9736294e98e26b
Author: Campbell Barton
Date:   Fri Apr 3 11:12:45 2015 +1100
Branches: master
https://developer.blender.org/rBAe60213920931b3243a1ff1c45e9736294e98e26b

Simplify rigify circle widget creation

patch by Jefferson Rausseo

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

M	rigify/utils.py

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

diff --git a/rigify/utils.py b/rigify/utils.py
index a4e588c..c4d14d9 100644
--- a/rigify/utils.py
+++ b/rigify/utils.py
@@ -354,6 +354,41 @@ def obj_to_bone(obj, rig, bone_name):
     obj.scale = (bone.length * scl_avg), (bone.length * scl_avg), (bone.length * scl_avg)
 
 
+def create_circle_polygon(number_verts, axis, radius=1.0, head_tail=0.0):
+    """ Creates a basic circle around of an axis selected.
+        number_verts: number of vertices of the poligon
+        axis: axis normal to the circle
+        radius: the radius of the circle
+        head_tail: where along the length of the bone the circle is (0.0=head, 1.0=tail)
+    """
+    verts = []
+    edges = []
+    angle = 2 * math.pi / number_verts
+    i = 0
+
+    assert(axis in 'XYZ')
+
+    while i < (number_verts):
+        a = math.cos(i * angle)
+        b = math.sin(i * angle)
+
+        if axis == 'X':
+            verts.append((head_tail, a * radius, b * radius))
+        elif axis == 'Y':
+            verts.append((a * radius, head_tail, b * radius))
+        elif axis == 'Z':
+            verts.append((a * radius, b * radius, head_tail))
+
+        if i < (number_verts - 1):
+            edges.append((i , i + 1))
+
+        i += 1
+
+    edges.append((0, number_verts - 1))
+
+    return verts, edges
+
+
 def create_widget(rig, bone_name, bone_transform_name=None):
     """ Creates an empty widget object for a bone, and returns the object.
     """
@@ -409,12 +444,11 @@ def create_circle_widget(rig, bone_name, radius=1.0, head_tail=0.0, with_line=Fa
     """
     obj = create_widget(rig, bone_name, bone_transform_name)
     if obj is not None:
-        v = [(0.7071068286895752, 2.980232238769531e-07, -0.7071065306663513), (0.8314696550369263, 2.980232238769531e-07, -0.5555699467658997), (0.9238795042037964, 2.682209014892578e-07, -0.3826831877231598), (0.9807852506637573, 2.5331974029541016e-07, -0.19509011507034302), (1.0, 2.365559055306221e-07, 1.6105803979371558e-07), (0.9807853698730469, 2.2351741790771484e-07, 0.19509044289588928), (0.9238796234130859, 2.086162567138672e-07, 0.38268351554870605), (0.8314696550369263, 1.788 [...]
-        verts = [(a[0] * radius, head_tail, a[2] * radius) for a in v]
+        verts, edges = create_circle_polygon(32, 'Y', radius, head_tail)
+
         if with_line:
-            edges = [(28, 12), (0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7), (7, 8), (8, 9), (9, 10), (10, 11), (11, 12), (12, 13), (13, 14), (14, 15), (15, 16), (16, 17), (17, 18), (18, 19), (19, 20), (20, 21), (21, 22), (22, 23), (23, 24), (24, 25), (25, 26), (26, 27), (27, 28), (28, 29), (29, 30), (30, 31), (0, 31)]
-        else:
-            edges = [(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7), (7, 8), (8, 9), (9, 10), (10, 11), (11, 12), (12, 13), (13, 14), (14, 15), (15, 16), (16, 17), (17, 18), (18, 19), (19, 20), (20, 21), (21, 22), (22, 23), (23, 24), (24, 25), (25, 26), (26, 27), (27, 28), (28, 29), (29, 30), (30, 31), (0, 31)]
+            edges.append((8, 24))
+
         mesh = obj.data
         mesh.from_pydata(verts, edges, [])
         mesh.update()
@@ -441,8 +475,20 @@ def create_sphere_widget(rig, bone_name, bone_transform_name=None):
     """
     obj = create_widget(rig, bone_name, bone_transform_name)
     if obj is not None:
-        verts = [(0.3535533845424652, 0.3535533845424652, 0.0), (0.4619397521018982, 0.19134171307086945, 0.0), (0.5, -2.1855694143368964e-08, 0.0), (0.4619397521018982, -0.19134175777435303, 0.0), (0.3535533845424652, -0.3535533845424652, 0.0), (0.19134174287319183, -0.4619397521018982, 0.0), (7.549790126404332e-08, -0.5, 0.0), (-0.1913416087627411, -0.46193981170654297, 0.0), (-0.35355329513549805, -0.35355350375175476, 0.0), (-0.4619397521018982, -0.19134178757667542, 0.0), (-0.5, 5.9 [...]
-        edges = [(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7), (7, 8), (8, 9), (9, 10), (10, 11), (11, 12), (12, 13), (13, 14), (14, 15), (0, 15), (16, 31), (16, 17), (17, 18), (18, 19), (19, 20), (20, 21), (21, 22), (22, 23), (23, 24), (24, 25), (25, 26), (26, 27), (27, 28), (28, 29), (29, 30), (30, 31), (32, 33), (33, 34), (34, 35), (35, 36), (36, 37), (37, 38), (38, 39), (39, 40), (40, 41), (41, 42), (42, 43), (43, 44), (44, 45), (45, 46), (46, 47), (32, 47)]
+        verts_x, edges_x = create_circle_polygon(16, 'X', 0.5)
+        verts_y, edges_y = create_circle_polygon(16, 'Y', 0.5)
+        verts_z, edges_z = create_circle_polygon(16, 'Z', 0.5)
+
+        verts = verts_x + verts_y + verts_z
+
+        edges = [
+            (0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7), (7, 8),
+            (8, 9), (9, 10), (10, 11), (11, 12), (12, 13), (13, 14), (14, 15), (0, 15),
+            (16, 17), (17, 18), (18, 19), (19, 20), (20, 21), (21, 22), (22, 23), (23, 24),
+            (24, 25), (25, 26), (26, 27), (27, 28), (28, 29), (29, 30), (30, 31), (16, 31),
+            (32, 33), (33, 34), (34, 35), (35, 36), (36, 37), (37, 38), (38, 39), (39, 40),
+            (40, 41), (41, 42), (42, 43), (43, 44), (44, 45), (45, 46), (46, 47), (32, 47),
+            ]
         mesh = obj.data
         mesh.from_pydata(verts, edges, [])
         mesh.update()
@@ -454,8 +500,10 @@ def create_limb_widget(rig, bone_name, bone_transform_name=None):
     """
     obj = create_widget(rig, bone_name, bone_transform_name)
     if obj is not None:
-        verts = [(-1.1920928955078125e-07, 1.7881393432617188e-07, 0.0), (3.5762786865234375e-07, 1.0000004768371582, 0.0), (0.1767769455909729, 0.5000001192092896, 0.17677664756774902), (0.20786768198013306, 0.5000001192092896, 0.1388925313949585), (0.23097014427185059, 0.5000001192092896, 0.09567084908485413), (0.24519658088684082, 0.5000001192092896, 0.048772573471069336), (0.2500002384185791, 0.5000001192092896, -2.545945676502015e-09), (0.24519658088684082, 0.5000001192092896, -0.04 [...]

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-extensions-cvs mailing list