mirror of
https://github.com/drewcassidy/TexTools-Blender
synced 2024-09-01 14:54:44 +00:00
98 lines
2.8 KiB
Python
98 lines
2.8 KiB
Python
import bpy
|
|
import bmesh
|
|
import operator
|
|
from mathutils import Vector
|
|
from collections import defaultdict
|
|
from math import pi
|
|
|
|
from . import utilities_color
|
|
|
|
class op(bpy.types.Operator):
|
|
bl_idname = "uv.textools_color_assign"
|
|
bl_label = "Assign Color"
|
|
bl_description = "Assign color to selected objects or faces in edit mode."
|
|
bl_options = {'REGISTER', 'UNDO'}
|
|
|
|
index : bpy.props.IntProperty(description="Color Index", default=0)
|
|
|
|
@classmethod
|
|
def poll(cls, context):
|
|
if not bpy.context.active_object:
|
|
return False
|
|
|
|
if bpy.context.active_object not in bpy.context.selected_objects:
|
|
return False
|
|
|
|
if bpy.context.active_object.type != 'MESH':
|
|
return False
|
|
|
|
#Only in UV editor mode
|
|
if bpy.context.area.type != 'IMAGE_EDITOR':
|
|
return False
|
|
|
|
return True
|
|
|
|
def execute(self, context):
|
|
assign_color(self, context, self.index)
|
|
return {'FINISHED'}
|
|
|
|
|
|
|
|
def assign_color(self, context, index):
|
|
|
|
selected_obj = bpy.context.selected_objects.copy()
|
|
|
|
previous_mode = 'OBJECT'
|
|
if len(selected_obj) == 1:
|
|
previous_mode = bpy.context.active_object.mode
|
|
|
|
|
|
for obj in selected_obj:
|
|
# Select object
|
|
bpy.ops.object.mode_set(mode='OBJECT')
|
|
bpy.ops.object.select_all(action='DESELECT')
|
|
obj.select_set( state = True, view_layer = None)
|
|
bpy.context.view_layer.objects.active = obj
|
|
|
|
# Enter Edit mode
|
|
bpy.ops.object.mode_set(mode='EDIT')
|
|
bm = bmesh.from_edit_mesh(obj.data);
|
|
faces = []
|
|
|
|
#Assign to all or just selected faces?
|
|
if previous_mode == 'EDIT':
|
|
faces = [face for face in bm.faces if face.select]
|
|
else:
|
|
faces = [face for face in bm.faces]
|
|
|
|
if previous_mode == 'OBJECT':
|
|
bpy.ops.mesh.select_all(action='SELECT')
|
|
|
|
|
|
# Verify material slots
|
|
for i in range(index+1):
|
|
if index >= len(obj.material_slots):
|
|
bpy.ops.object.material_slot_add()
|
|
|
|
utilities_color.assign_slot(obj, index)
|
|
|
|
# Assign to selection
|
|
obj.active_material_index = index
|
|
bpy.ops.object.material_slot_assign()
|
|
|
|
|
|
#Change View mode to MATERIAL
|
|
# for area in bpy.context.screen.areas:
|
|
# if area.type == 'VIEW_3D':
|
|
# for space in area.spaces:
|
|
# if space.type == 'VIEW_3D':
|
|
# space.shading.type = 'MATERIAL'
|
|
|
|
# restore mode
|
|
bpy.ops.object.mode_set(mode='OBJECT')
|
|
bpy.ops.object.select_all(action='DESELECT')
|
|
for obj in selected_obj:
|
|
obj.select_set( state = True, view_layer = None)
|
|
bpy.ops.object.mode_set(mode=previous_mode)
|
|
|
|
bpy.utils.register_class(op) |