1 #====================== BEGIN GPL LICENSE BLOCK ======================
3 # This program is free software; you can redistribute it and/or
4 # modify it under the terms of the GNU General Public License
5 # as published by the Free Software Foundation; either version 2
6 # of the License, or (at your option) any later version.
8 # This program is distributed in the hope that it will be useful,
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # GNU General Public License for more details.
13 # You should have received a copy of the GNU General Public License
14 # along with this program; if not, write to the Free Software Foundation,
15 # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 #======================= END GPL LICENSE BLOCK ========================
21 from .widgets
import create_widget
26 def create_line_widget(rig
, bone_name
, bone_transform_name
=None):
27 """ Creates a basic line widget, a line that spans the length of the bone.
29 obj
= create_widget(rig
, bone_name
, bone_transform_name
)
32 mesh
.from_pydata([(0, 0, 0), (0, 1, 0)], [(0, 1)], [])
36 def create_circle_widget(rig
, bone_name
, radius
=1.0, head_tail
=0.0, head_tail_x
=None, with_line
=False, bone_transform_name
=None):
37 """ Creates a basic circle widget, a circle around the y-axis.
38 radius: the radius of the circle
39 head_tail: where along the length of the bone the circle is (0.0=head, 1.0=tail)
40 head_tail_x: if not None, specifies a different value along the X axis to create a deformed circle
42 obj
= create_widget(rig
, bone_name
, bone_transform_name
)
44 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.7881393432617188e-07, 0.5555704236030579), (0.7071068286895752, 1.7881393432617188e-07, 0.7071070075035095), (0.5555702447891235, 1.7881393432617188e-07, 0.8314698934555054), (0.38268327713012695, 1.7881393432617188e-07, 0.923879861831665), (0.19509008526802063, 1.7881393432617188e-07, 0.9807855486869812), (-3.2584136988589307e-07, 1.1920928955078125e-07, 1.000000238418579), (-0.19509072601795197, 1.7881393432617188e-07, 0.9807854294776917), (-0.3826838731765747, 1.7881393432617188e-07, 0.9238795638084412), (-0.5555707216262817, 1.7881393432617188e-07, 0.8314695358276367), (-0.7071071863174438, 1.7881393432617188e-07, 0.7071065902709961), (-0.8314700126647949, 1.7881393432617188e-07, 0.5555698871612549), (-0.923879861831665, 2.086162567138672e-07, 0.3826829195022583), (-0.9807853698730469, 2.2351741790771484e-07, 0.1950896978378296), (-1.0, 2.365559907957504e-07, -7.290432222362142e-07), (-0.9807850122451782, 2.5331974029541016e-07, -0.195091113448143), (-0.9238790273666382, 2.682209014892578e-07, -0.38268423080444336), (-0.831468939781189, 2.980232238769531e-07, -0.5555710196495056), (-0.7071058750152588, 2.980232238769531e-07, -0.707107424736023), (-0.555569052696228, 2.980232238769531e-07, -0.8314701318740845), (-0.38268208503723145, 2.980232238769531e-07, -0.923879861831665), (-0.19508881866931915, 2.980232238769531e-07, -0.9807853102684021), (1.6053570561780361e-06, 2.980232238769531e-07, -0.9999997615814209), (0.19509197771549225, 2.980232238769531e-07, -0.9807847142219543), (0.3826850652694702, 2.980232238769531e-07, -0.9238786101341248), (0.5555717945098877, 2.980232238769531e-07, -0.8314683437347412)]
45 delta
= (head_tail_x
- head_tail
) if head_tail_x
is not None else 0
46 verts
= [(a
[0] * radius
, head_tail
+ delta
* a
[0] * a
[0], a
[2] * radius
) for a
in v
]
48 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)]
50 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)]
52 mesh
.from_pydata(verts
, edges
, [])
59 def create_cube_widget(rig
, bone_name
, radius
=0.5, bone_transform_name
=None):
60 """ Creates a basic cube widget.
62 obj
= create_widget(rig
, bone_name
, bone_transform_name
)
65 verts
= [(r
, r
, r
), (r
, -r
, r
), (-r
, -r
, r
), (-r
, r
, r
), (r
, r
, -r
), (r
, -r
, -r
), (-r
, -r
, -r
), (-r
, r
, -r
)]
66 edges
= [(0, 1), (1, 2), (2, 3), (3, 0), (4, 5), (5, 6), (6, 7), (7, 4), (0, 4), (1, 5), (2, 6), (3, 7)]
68 mesh
.from_pydata(verts
, edges
, [])
72 def create_chain_widget(rig
, bone_name
, cube
=False, radius
=0.5, invert
=False, bone_transform_name
=None, axis
="y", offset
=0.0):
73 """Creates a basic chain widget
75 obj
= create_widget(rig
, bone_name
, bone_transform_name
)
83 verts
= [(rh
, rh
, rh
), (r
, -r
, r
), (-r
, -r
, r
), (-rh
, rh
, rh
), (rh
, rh
, -rh
), (r
, -r
, -r
), (-r
, -r
, -r
), (-rh
, rh
, -rh
)]
85 verts
= [(r
, r
, r
), (rh
, -rh
, rh
), (-rh
, -rh
, rh
), (-r
, r
, r
), (r
, r
, -r
), (rh
, -rh
, -rh
), (-rh
, -rh
, -rh
), (-r
, r
, -r
)]
86 edges
= [(0, 1), (1, 2), (2, 3), (3, 0), (4, 5), (5, 6), (6, 7), (7, 4), (0, 4), (1, 5), (2, 6), (3, 7)]
88 mesh
.from_pydata(verts
, edges
, [])
90 from .widgets
import adjust_widget_axis
91 adjust_widget_axis(obj
, axis
=axis
, offset
=offset
)
95 def create_sphere_widget(rig
, bone_name
, bone_transform_name
=None):
96 """ Creates a basic sphere widget, three pependicular overlapping circles.
98 obj
= create_widget(rig
, bone_name
, bone_transform_name
)
100 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.962440319251527e-09, 0.0), (-0.4619397222995758, 0.1913418024778366, 0.0), (-0.35355326533317566, 0.35355350375175476, 0.0), (-0.19134148955345154, 0.46193987131118774, 0.0), (3.2584136988589307e-07, 0.5, 0.0), (0.1913420855998993, 0.46193960309028625, 0.0), (7.450580596923828e-08, 0.46193960309028625, 0.19134199619293213), (5.9254205098113744e-08, 0.5, 2.323586443253589e-07), (4.470348358154297e-08, 0.46193987131118774, -0.1913415789604187), (2.9802322387695312e-08, 0.35355350375175476, -0.3535533547401428), (2.9802322387695312e-08, 0.19134178757667542, -0.46193981170654297), (5.960464477539063e-08, -1.1151834122813398e-08, -0.5000000596046448), (5.960464477539063e-08, -0.1913418024778366, -0.46193984150886536), (5.960464477539063e-08, -0.35355350375175476, -0.3535533845424652), (7.450580596923828e-08, -0.46193981170654297, -0.19134166836738586), (9.348272556053416e-08, -0.5, 1.624372103492533e-08), (1.043081283569336e-07, -0.4619397521018982, 0.19134168326854706), (1.1920928955078125e-07, -0.3535533845424652, 0.35355329513549805), (1.1920928955078125e-07, -0.19134174287319183, 0.46193966269493103), (1.1920928955078125e-07, -4.7414250303745575e-09, 0.49999991059303284), (1.1920928955078125e-07, 0.19134172797203064, 0.46193966269493103), (8.940696716308594e-08, 0.3535533845424652, 0.35355329513549805), (0.3535534739494324, 0.0, 0.35355329513549805), (0.1913418173789978, -2.9802322387695312e-08, 0.46193966269493103), (8.303572940349113e-08, -5.005858838558197e-08, 0.49999991059303284), (-0.19134165346622467, -5.960464477539063e-08, 0.46193966269493103), (-0.35355329513549805, -8.940696716308594e-08, 0.35355329513549805), (-0.46193963289260864, -5.960464477539063e-08, 0.19134168326854706), (-0.49999991059303284, -5.960464477539063e-08, 1.624372103492533e-08), (-0.4619397521018982, -2.9802322387695312e-08, -0.19134166836738586), (-0.3535534143447876, -2.9802322387695312e-08, -0.3535533845424652), (-0.19134171307086945, 0.0, -0.46193984150886536), (7.662531942287387e-08, 9.546055501630235e-09, -0.5000000596046448), (0.19134187698364258, 5.960464477539063e-08, -0.46193981170654297), (0.3535535931587219, 5.960464477539063e-08, -0.3535533547401428), (0.4619399905204773, 5.960464477539063e-08, -0.1913415789604187), (0.5000000596046448, 5.960464477539063e-08, 2.323586443253589e-07), (0.4619396924972534, 2.9802322387695312e-08, 0.19134199619293213)]
101 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)]
103 mesh
.from_pydata(verts
, edges
, [])
107 def create_limb_widget(rig
, bone_name
, bone_transform_name
=None):
108 """ Creates a basic limb widget, a line that spans the length of the
109 bone, with a circle around the center.
111 obj
= create_widget(rig
, bone_name
, bone_transform_name
)
113 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.048772573471069336), (0.23097014427185059, 0.5000001192092896, -0.09567084908485413), (0.20786768198013306, 0.5000001192092896, -0.13889259099960327), (0.1767769455909729, 0.5000001192092896, -0.1767767071723938), (0.13889282941818237, 0.5000001192092896, -0.20786744356155396), (0.09567105770111084, 0.5000001192092896, -0.23096990585327148), (0.04877278208732605, 0.5000001192092896, -0.24519634246826172), (1.7279069197684294e-07, 0.5000000596046448, -0.25), (-0.0487724244594574, 0.5000001192092896, -0.24519634246826172), (-0.09567070007324219, 0.5000001192092896, -0.2309698462486267), (-0.13889241218566895, 0.5000001192092896, -0.20786738395690918), (-0.17677652835845947, 0.5000001192092896, -0.17677664756774902), (-0.20786726474761963, 0.5000001192092896, -0.13889244198799133), (-0.23096972703933716, 0.5000001192092896, -0.09567070007324219), (-0.24519610404968262, 0.5000001192092896, -0.04877239465713501), (-0.2499997615814209, 0.5000001192092896, 2.1997936983098043e-07), (-0.24519598484039307, 0.5000001192092896, 0.04877282679080963), (-0.23096948862075806, 0.5000001192092896, 0.09567108750343323), (-0.20786696672439575, 0.5000001192092896, 0.1388927698135376), (-0.1767762303352356, 0.5000001192092896, 0.17677688598632812), (-0.13889199495315552, 0.5000001192092896, 0.2078675627708435), (-0.09567028284072876, 0.5000001192092896, 0.23097002506256104), (-0.048771947622299194, 0.5000001192092896, 0.24519634246826172), (6.555903269145347e-07, 0.5000001192092896, 0.25), (0.04877324402332306, 0.5000001192092896, 0.24519622325897217), (0.09567153453826904, 0.5000001192092896, 0.23096966743469238), (0.13889318704605103, 0.5000001192092896, 0.20786714553833008)]
114 edges
= [(0, 1), (2, 3), (4, 3), (5, 4), (5, 6), (6, 7), (8, 7), (8, 9), (10, 9), (10, 11), (11, 12), (13, 12), (14, 13), (14, 15), (16, 15), (16, 17), (17, 18), (19, 18), (19, 20), (21, 20), (21, 22), (22, 23), (24, 23), (25, 24), (25, 26), (27, 26), (27, 28), (29, 28), (29, 30), (30, 31), (32, 31), (32, 33), (2, 33)]
116 mesh
.from_pydata(verts
, edges
, [])
120 def create_bone_widget(rig
, bone_name
, r1
=0.1, l1
=0.0, r2
=0.04, l2
=1.0, bone_transform_name
=None):
121 """ Creates a basic bone widget, a simple obolisk-esk shape.
123 obj
= create_widget(rig
, bone_name
, bone_transform_name
)
125 verts
= [(r2
, l2
, -r2
), (r1
, l1
, -r1
), (-r1
, l1
, -r1
), (-r2
, l2
, -r2
), (r2
, l2
, r2
), (r1
, l1
, r1
), (-r1
, l1
, r1
), (-r2
, l2
, r2
)]
126 edges
= [(1, 2), (0, 1), (0, 3), (2, 3), (4, 5), (5, 6), (6, 7), (4, 7), (1, 5), (0, 4), (2, 6), (3, 7)]
128 mesh
.from_pydata(verts
, edges
, [])
132 def create_pivot_widget(rig
, bone_name
, axis_size
=1.0, cap_size
=1.0, square
=True, bone_transform_name
=None):
133 """Creates a widget similar to Plain Axes empty, but with a cross or
134 a square on the end of each axis line.
136 obj
= create_widget(rig
, bone_name
, bone_transform_name
)
138 axis
= 0.5 * axis_size
139 cap
= 0.05 * cap_size
141 verts
= [(0, 0, -axis
), (-axis
, 0, 0), (0, 0, axis
), (axis
, 0, 0), (axis
, cap
, -cap
), (axis
, cap
, cap
),
142 (0, -axis
, 0), (0, axis
, 0), (cap
, axis
, cap
), (cap
, axis
, -cap
), (axis
, -cap
, -cap
), (axis
, -cap
, cap
),
143 (-cap
, axis
, cap
), (-cap
, axis
, -cap
), (-axis
, cap
, cap
), (-axis
, cap
, -cap
), (-axis
, -cap
, cap
), (-axis
, -cap
, -cap
),
144 (-cap
, -axis
, cap
), (-cap
, -axis
, -cap
), (cap
, -axis
, cap
), (cap
, -axis
, -cap
), (-cap
, -cap
, -axis
), (-cap
, cap
, -axis
),
145 (cap
, -cap
, -axis
), (cap
, cap
, -axis
), (-cap
, cap
, axis
), (-cap
, -cap
, axis
), (cap
, cap
, axis
), (cap
, -cap
, axis
) ]
146 edges
= [(10, 4), (4, 5), (8, 9), (0, 2), (12, 8), (6, 7), (11, 10), (13, 12), (5, 11), (9, 13),
147 (3, 1), (14, 15), (16, 14), (17, 16), (15, 17), (18, 19), (20, 18), (21, 20), (19, 21), (22, 23),
148 (24, 22), (25, 24), (23, 25), (26, 27), (28, 26), (29, 28), (27, 29) ]
150 verts
= [(0, 0, -axis
), (-axis
, 0, 0), (0, 0, axis
), (axis
, 0, 0), (-cap
, 0, -axis
), (-axis
, 0, -cap
),
151 (-axis
, 0, cap
), (-cap
, 0, axis
), (cap
, 0, axis
), (axis
, 0, cap
), (axis
, 0, -cap
), (cap
, 0, -axis
),
152 (0, -axis
, 0), (0, axis
, 0), (0, -cap
, -axis
), (0, -axis
, -cap
), (0, -axis
, cap
), (0, -cap
, axis
),
153 (0, cap
, axis
), (0, axis
, cap
), (0, axis
, -cap
), (0, cap
, -axis
), (-axis
, -cap
, 0), (-cap
, -axis
, 0),
154 (cap
, -axis
, 0), (axis
, -cap
, 0), (axis
, cap
, 0), (cap
, axis
, 0), (-cap
, axis
, 0), (-axis
, cap
, 0) ]
155 edges
= [(4, 0), (6, 1), (8, 2), (10, 3), (1, 5), (2, 7), (3, 9), (0, 11), (16, 12), (0, 21),
156 (2, 17), (20, 13), (12, 15), (0, 2), (18, 2), (13, 19), (12, 13), (1, 29), (22, 1), (3, 25),
157 (13, 27), (14, 0), (26, 3), (28, 13), (24, 12), (12, 23), (3, 1) ]
159 mesh
.from_pydata(verts
, edges
, [])