[Bf-blender-cvs] [95fa303] master: Add default UV coordinates for torus primitive.

Sebastian Witt noreply at git.blender.org
Sat Oct 1 02:28:10 CEST 2016


Commit: 95fa303efd0b6e2963af423e601bb2869ac82520
Author: Sebastian Witt
Date:   Sat Oct 1 01:54:44 2016 +0200
Branches: master
https://developer.blender.org/rB95fa303efd0b6e2963af423e601bb2869ac82520

Add default UV coordinates for torus primitive.

Fixes T47489.

Reviewed By: brecht

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

M	release/scripts/startup/bl_operators/add_mesh_torus.py

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

diff --git a/release/scripts/startup/bl_operators/add_mesh_torus.py b/release/scripts/startup/bl_operators/add_mesh_torus.py
index 82014c8..303a8b0 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)




More information about the Bf-blender-cvs mailing list