2020-07-12 21:04:38 +08:00
import bpy , bmesh
from . import utils
2020-07-20 10:13:18 +08:00
class RailUVOperator ( bpy . types . Operator ) :
""" Create a UV for rail """
bl_idname = " ballance.rail_uv "
bl_label = " Create Rail UV "
bl_options = { ' UNDO ' }
@classmethod
def poll ( self , context ) :
return check_rail_target ( )
def execute ( self , context ) :
create_rail_uv ( )
return { ' FINISHED ' }
# ====================== method
def check_rail_target ( ) :
for obj in bpy . context . selected_objects :
if obj . type != ' MESH ' :
continue
if obj . mode != ' OBJECT ' :
continue
2020-08-31 21:56:08 +08:00
if obj . data . uv_layers . active is None :
2020-07-20 10:13:18 +08:00
continue
return True
return False
2020-07-12 21:04:38 +08:00
def create_rail_uv ( ) :
meshList = [ ]
2020-07-20 10:13:18 +08:00
ignoredObj = [ ]
2020-07-12 21:04:38 +08:00
for obj in bpy . context . selected_objects :
if obj . type != ' MESH ' :
2020-07-20 10:13:18 +08:00
ignoredObj . append ( obj . name )
continue
if obj . mode != ' OBJECT ' :
ignoredObj . append ( obj . name )
2020-07-12 21:04:38 +08:00
continue
2020-08-31 21:56:08 +08:00
if obj . data . uv_layers . active is None :
2020-07-20 10:13:18 +08:00
ignoredObj . append ( obj . name )
continue
2020-07-12 21:04:38 +08:00
meshList . append ( obj . data )
for mesh in meshList :
# vecList = mesh.vertices[:]
uv_layer = mesh . uv_layers . active . data
for poly in mesh . polygons :
for loop_index in range ( poly . loop_start , poly . loop_start + poly . loop_total ) :
# index = mesh.loops[loop_index].vertex_index
uv_layer [ loop_index ] . uv [ 0 ] = 0 # vecList[index].co[0]
uv_layer [ loop_index ] . uv [ 1 ] = 1 # vecList[index].co[1]
2020-07-20 10:13:18 +08:00
if len ( ignoredObj ) != 0 :
2020-08-31 21:56:08 +08:00
utils . ShowMessageBox ( " Following objects are not processed due to they are not suit for this function now: " + ' , ' . join ( ignoredObj ) , " Check result " , ' INFO ' )