adds find used ids feature to editor

This commit is contained in:
Michel Fedde 2024-02-01 12:42:47 +01:00
parent f763479a64
commit 7b86199ee5
4 changed files with 85 additions and 1 deletions

View file

@ -1,8 +1,10 @@
import bpy import bpy
from src.menu import id_mask_select_menu from src.menu import id_mask_select_menu
from src.menu.id_mask_editor_options import IDEDITOR_IDMaskEditorOptionsMenu
from src.operators.create_id_mask import CreateIDMaskOperator from src.operators.create_id_mask import CreateIDMaskOperator
from src.operators.id_editor_create_id import IDEDITOR_CreateIDOperator from src.operators.id_editor_create_id import IDEDITOR_CreateIDOperator
from src.operators.id_editor_find_used_ids import IDEDITOR_FindUsedIDsOperator
from src.operators.id_editor_paint import IDEDITOR_PaintIDMaskOperator from src.operators.id_editor_paint import IDEDITOR_PaintIDMaskOperator
from src.operators.id_editor_remove_id import IDEDITOR_RemoveIDOperator from src.operators.id_editor_remove_id import IDEDITOR_RemoveIDOperator
from src.operators.id_mask_select import IDEDITOR_SelectIDMaskOperator from src.operators.id_mask_select import IDEDITOR_SelectIDMaskOperator
@ -41,7 +43,9 @@ classes = (
IDEDITOR_CreateIDOperator, IDEDITOR_CreateIDOperator,
IDEDITOR_RemoveIDOperator, IDEDITOR_RemoveIDOperator,
IDEDITOR_PaintIDMaskOperator, IDEDITOR_PaintIDMaskOperator,
IDEDITOR_SelectIDMaskOperator IDEDITOR_SelectIDMaskOperator,
IDEDITOR_FindUsedIDsOperator,
IDEDITOR_IDMaskEditorOptionsMenu
) )
menu_additions = [ menu_additions = [

View file

@ -0,0 +1,13 @@
import bpy
from src.operators.id_editor_find_used_ids import IDEDITOR_FindUsedIDsOperator
class IDEDITOR_IDMaskEditorOptionsMenu(bpy.types.Menu):
bl_idname = "VIEW3D_MT_idmask_editor_options"
bl_label = "Options"
def draw(self, context):
layout = self.layout
layout.operator(IDEDITOR_FindUsedIDsOperator.bl_idname)

View file

@ -0,0 +1,63 @@
import bpy
class IDEDITOR_FindUsedIDsOperator(bpy.types.Operator):
bl_idname = "id_mask_editor.find_used_ids"
bl_label = "Find used colors"
bl_description = "Searches the current ID-mask for colors and adds them to the id-list"
@classmethod
def poll(cls, context):
obj = context.active_object
if obj.type != 'MESH':
return False
if not obj.data:
return False
mesh = obj.data
properties = mesh.id_mask_editor_properties
if not properties.target_attribute:
return False
return True
def execute(self, context):
obj = context.active_object
old_mode = bpy.context.object.mode
if old_mode != "OBJECT":
bpy.ops.object.mode_set(mode='OBJECT', toggle=False)
mesh = obj.data
properties = mesh.id_mask_editor_properties
color_attribute = mesh.color_attributes.get(properties.target_attribute)
colors = []
for color_data in color_attribute.data:
colors.append((color_data.color[0], color_data.color[1], color_data.color[2]))
i = 0
set_colors = set(colors)
for color in set_colors:
has_color = False
for color_id in properties.possible_ids:
has_color = (color_id.color.r == color[0] and
color_id.color.g == color[1] and
color_id.color.b == color[2])
if has_color:
break
if has_color:
continue
color_identifier = properties.possible_ids.add()
color_identifier.color = (color[0], color[1], color[2])
color_identifier.name = "Imported ID " + str(i + 1)
i += 1
if old_mode != "OBJECT":
bpy.ops.object.mode_set(mode=old_mode, toggle=False)
return {'FINISHED'}

View file

@ -1,5 +1,6 @@
import bpy import bpy
from src.menu.id_mask_editor_options import IDEDITOR_IDMaskEditorOptionsMenu
from src.operators.create_id_mask import CreateIDMaskOperator from src.operators.create_id_mask import CreateIDMaskOperator
from src.operators.id_editor_create_id import IDEDITOR_CreateIDOperator from src.operators.id_editor_create_id import IDEDITOR_CreateIDOperator
from src.operators.id_editor_paint import IDEDITOR_PaintIDMaskOperator from src.operators.id_editor_paint import IDEDITOR_PaintIDMaskOperator
@ -74,6 +75,9 @@ class IDMaskEditorPanel(bpy.types.Panel):
col = row.column(align=True) col = row.column(align=True)
col.operator(IDEDITOR_CreateIDOperator.bl_idname, icon='ADD', text="") col.operator(IDEDITOR_CreateIDOperator.bl_idname, icon='ADD', text="")
col.operator(IDEDITOR_RemoveIDOperator.bl_idname, icon='REMOVE', text="") col.operator(IDEDITOR_RemoveIDOperator.bl_idname, icon='REMOVE', text="")
col.separator()
col.menu(IDEDITOR_IDMaskEditorOptionsMenu.bl_idname, icon='DOWNARROW_HLT', text="")