2026-01-01
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
import bpy
|
||||
|
||||
def popup_error(message: str):
|
||||
def _draw(self, context):
|
||||
self.layout.label(text=message)
|
||||
try:
|
||||
bpy.context.window_manager.popup_menu(_draw, title="HardHat", icon='ERROR')
|
||||
except Exception:
|
||||
print(f"ERROR: {message}")
|
||||
|
||||
|
||||
def selected_hair_meshes():
|
||||
names = (bpy.context.scene.get('HH_HairTargets') or '').split(';')
|
||||
names = [n for n in names if n]
|
||||
if names:
|
||||
objs = [bpy.data.objects.get(n) for n in names]
|
||||
return [o for o in objs if o and o.type == 'MESH']
|
||||
popup_error("No HardHat hair targets set. Click 'Set HardHat Hair Targets' first.")
|
||||
return []
|
||||
|
||||
|
||||
def ensure_basis(obj):
|
||||
if not obj.data.shape_keys:
|
||||
obj.shape_key_add(name='Basis', from_mix=False)
|
||||
|
||||
|
||||
def ensure_hardhat_key(obj):
|
||||
# Ensure Basis
|
||||
ensure_basis(obj)
|
||||
# Find or create HardHat shapekey
|
||||
key = obj.data.shape_keys.key_blocks.get('HardHat')
|
||||
if not key:
|
||||
key = obj.shape_key_add(name='HardHat', from_mix=False)
|
||||
key.value = 0.0
|
||||
return key
|
||||
|
||||
|
||||
def run():
|
||||
hair_objs = selected_hair_meshes()
|
||||
if not hair_objs:
|
||||
print("Error: Select hair mesh object(s) before running")
|
||||
return
|
||||
|
||||
for obj in hair_objs:
|
||||
ensure_hardhat_key(obj)
|
||||
print(f"Ensured 'HardHat' shapekey on '{obj.name}' (value=0.0)")
|
||||
|
||||
print("hh_shapekey: Done.")
|
||||
|
||||
|
||||
run()
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user