2025-12-01
This commit is contained in:
@@ -0,0 +1,127 @@
|
||||
# SPDX-FileCopyrightText: 2025 Blender Studio Tools Authors
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
import bpy
|
||||
from bl_ui.generic_ui_list import draw_ui_list
|
||||
from .operators import geomod_get_identifier
|
||||
from .prefs import get_addon_prefs
|
||||
|
||||
|
||||
class GNSK_UL_main(bpy.types.UIList):
|
||||
def draw_item(self, context, layout, data, item, _icon, _active_data, _active_propname):
|
||||
gnsk = item
|
||||
|
||||
if self.layout_type != 'DEFAULT':
|
||||
# Other layout types not supported by this UIList.
|
||||
return
|
||||
|
||||
split = layout.row().split(factor=0.66, align=True)
|
||||
|
||||
row = split.row()
|
||||
if gnsk.storage_object:
|
||||
row.prop(gnsk.storage_object, 'name', text="", emboss=False, icon='OBJECT_DATA')
|
||||
modifier = gnsk.modifier
|
||||
if not modifier:
|
||||
row.alert=True
|
||||
row.label(text="Error: Modifier was removed.")
|
||||
return
|
||||
identifier = geomod_get_identifier(modifier, "Factor")
|
||||
row = split.row(align=True)
|
||||
row.prop(modifier, f'["{identifier}"]', text="", emboss=True)
|
||||
row = row.row(align=True)
|
||||
row.alignment = 'RIGHT'
|
||||
ops = []
|
||||
ops.append(
|
||||
row.operator('object.geonode_shapekey_switch_focus', text="", icon='SCULPTMODE_HLT')
|
||||
)
|
||||
|
||||
other_target_objs = gnsk.other_affected_objects
|
||||
if len(other_target_objs) > 0:
|
||||
ops.append(
|
||||
row.operator(
|
||||
'object.geonode_shapekey_select_objects', text="", icon='RESTRICT_SELECT_OFF'
|
||||
)
|
||||
)
|
||||
for other_ob in other_target_objs:
|
||||
if other_ob in context.selected_objects:
|
||||
addon_prefs = get_addon_prefs(context)
|
||||
if addon_prefs.no_alt_key and len(gnsk.storage_object.geonode_shapekey_targets) > 1:
|
||||
ops.append(
|
||||
row.operator(
|
||||
'object.geonode_shapekey_influence_slider',
|
||||
text="",
|
||||
icon='ARROW_LEFTRIGHT',
|
||||
)
|
||||
)
|
||||
break
|
||||
|
||||
for op in ops:
|
||||
op.gnsk_index = gnsk.index
|
||||
|
||||
|
||||
class GNSK_PT_GeoNodeShapeKeys(bpy.types.Panel):
|
||||
"""Panel to draw the GeoNode ShapeKey UI"""
|
||||
|
||||
bl_label = "GeoNode Shape Keys"
|
||||
bl_idname = "GNSK_PT_GeoNodeShapeKeys"
|
||||
bl_space_type = 'PROPERTIES'
|
||||
bl_region_type = 'WINDOW'
|
||||
bl_parent_id = "DATA_PT_shape_keys"
|
||||
|
||||
@classmethod
|
||||
def poll(cls, context):
|
||||
ob = context.object
|
||||
|
||||
return ob.override_library or len(ob.geonode_shapekey_targets) > 0
|
||||
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
|
||||
ob = context.object
|
||||
if ob.geonode_shapekey_targets:
|
||||
layout.operator(
|
||||
'object.geonode_shapekey_switch_focus',
|
||||
icon='FILE_REFRESH',
|
||||
)
|
||||
return
|
||||
|
||||
list_ops = draw_ui_list(
|
||||
layout,
|
||||
context,
|
||||
class_name='GNSK_UL_main',
|
||||
unique_id='GNSK List',
|
||||
list_path='object.geonode_shapekeys',
|
||||
active_index_path='object.geonode_shapekey_index',
|
||||
insertion_operators=False,
|
||||
move_operators=False,
|
||||
)
|
||||
|
||||
list_ops.operator('object.add_geonode_shape_key', text="", icon='ADD')
|
||||
|
||||
row = list_ops.row()
|
||||
row.operator('object.remove_geonode_shape_key', text="", icon='REMOVE')
|
||||
|
||||
|
||||
def draw_gnsk_uvmap_op(self, context):
|
||||
layout = self.layout
|
||||
layout.operator('object.geonode_shapekey_ensure_uvmap')
|
||||
|
||||
|
||||
registry = [
|
||||
GNSK_UL_main,
|
||||
]
|
||||
|
||||
|
||||
def register():
|
||||
if hasattr(bpy.types.DATA_PT_shape_keys, 'replacement') and bpy.types.DATA_PT_shape_keys.replacement:
|
||||
GNSK_PT_GeoNodeShapeKeys.bl_parent_id = bpy.types.DATA_PT_shape_keys.replacement
|
||||
bpy.utils.register_class(GNSK_PT_GeoNodeShapeKeys)
|
||||
|
||||
bpy.types.MESH_MT_shape_key_context_menu.append(draw_gnsk_uvmap_op)
|
||||
|
||||
|
||||
def unregister():
|
||||
bpy.utils.unregister_class(GNSK_PT_GeoNodeShapeKeys)
|
||||
|
||||
bpy.types.MESH_MT_shape_key_context_menu.remove(draw_gnsk_uvmap_op)
|
||||
Reference in New Issue
Block a user