diff options
author | Sebastian Witt <> | 2016-10-01 02:54:44 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2016-10-01 02:56:16 +0300 |
commit | 95fa303efd0b6e2963af423e601bb2869ac82520 (patch) | |
tree | 2a7b5ad65c5b4898e0e395965699ca9c2b400460 /release/scripts/startup/bl_operators/add_mesh_torus.py | |
parent | 20c6d5e3cb71acb9e783ddcbce89a42914db9ec6 (diff) |
Add default UV coordinates for torus primitive.
Fixes T47489.
Reviewed By: brecht
Diffstat (limited to 'release/scripts/startup/bl_operators/add_mesh_torus.py')
-rw-r--r-- | release/scripts/startup/bl_operators/add_mesh_torus.py | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/release/scripts/startup/bl_operators/add_mesh_torus.py b/release/scripts/startup/bl_operators/add_mesh_torus.py index 82014c87be9..303a8b01192 100644 --- a/release/scripts/startup/bl_operators/add_mesh_torus.py +++ b/release/scripts/startup/bl_operators/add_mesh_torus.py @@ -23,6 +23,7 @@ from bpy.types import Operator from bpy.props import ( FloatProperty, IntProperty, + BoolProperty, ) from bpy.app.translations import pgettext_data as data_ @@ -81,6 +82,33 @@ def add_torus(major_rad, minor_rad, major_seg, minor_seg): return verts, faces +def add_uvs(mesh, minor_seg, major_seg): + mesh.uv_textures.new() + uv_layer = mesh.uv_layers.active + u_step = 1.0/major_seg + v_step = 1.0/minor_seg + vertex_index = 0 + + u = 0.5 + for major_index in range(major_seg): + v = 0.5 + for minor_index in range(minor_seg): + loops = mesh.polygons[vertex_index].loop_indices + if minor_index == minor_seg-1 and major_index == 0: + uv_layer.data[loops[1]].uv = (u, v) + uv_layer.data[loops[2]].uv = (u + u_step, v) + uv_layer.data[loops[0]].uv = (u, v + v_step) + uv_layer.data[loops[3]].uv = (u + u_step, v + v_step) + else: + uv_layer.data[loops[0]].uv = (u, v) + uv_layer.data[loops[1]].uv = (u + u_step, v) + uv_layer.data[loops[3]].uv = (u, v + v_step) + uv_layer.data[loops[2]].uv = (u + u_step, v + v_step) + v = (v + v_step) % 1.0 + vertex_index += 1 + u = (u + u_step) % 1.0 + + class AddTorus(Operator, object_utils.AddObjectHelper): """Add a torus mesh""" bl_idname = "mesh.primitive_torus_add" @@ -145,10 +173,18 @@ class AddTorus(Operator, object_utils.AddObjectHelper): subtype='DISTANCE', unit='LENGTH', ) + generate_uvs = BoolProperty( + name="Generate UVs", + description="Generate a default UV map", + default=False, + ) def draw(self, context): layout = self.layout + col = layout.column(align=True) + col.prop(self, 'generate_uvs') + col.separator() col.prop(self, 'view_align') col = layout.column(align=True) @@ -217,6 +253,10 @@ class AddTorus(Operator, object_utils.AddObjectHelper): mesh.polygons.foreach_set("loop_start", range(0, nbr_loops, 4)) mesh.polygons.foreach_set("loop_total", (4,) * nbr_polys) mesh.loops.foreach_set("vertex_index", faces) + + if self.generate_uvs: + add_uvs(mesh, self.minor_segments, self.major_segments) + mesh.update() object_utils.object_data_add(context, mesh, operator=self) |