adds find used ids feature to editor
This commit is contained in:
parent
f763479a64
commit
7b86199ee5
4 changed files with 85 additions and 1 deletions
|
|
@ -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 = [
|
||||||
|
|
|
||||||
13
src/menu/id_mask_editor_options.py
Normal file
13
src/menu/id_mask_editor_options.py
Normal 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)
|
||||||
63
src/operators/id_editor_find_used_ids.py
Normal file
63
src/operators/id_editor_find_used_ids.py
Normal 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'}
|
||||||
|
|
@ -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="")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue