work
update amznchartools
This commit is contained in:
@@ -8,14 +8,17 @@ print(f"Auto-execution enabled: {bpy.context.preferences.filepaths.use_scripts_a
|
||||
if not bpy.context.preferences.filepaths.use_scripts_auto_execute:
|
||||
print("WARNING: Auto-execution is disabled - drivers may not work properly")
|
||||
|
||||
# Get the active object
|
||||
# Get the active object and selected objects
|
||||
active_obj = bpy.context.active_object
|
||||
selected_objects = bpy.context.selected_objects
|
||||
|
||||
if not active_obj:
|
||||
print("✗ ERROR: No active object selected")
|
||||
print("Please select an object and run the script again")
|
||||
raise Exception("No active object - script aborted")
|
||||
|
||||
print(f"Found active object: {active_obj.name}")
|
||||
print(f"Found {len(selected_objects)} selected object(s): {[obj.name for obj in selected_objects]}")
|
||||
|
||||
# Find the armature object in the scene
|
||||
armature_obj = None
|
||||
@@ -92,61 +95,65 @@ print(f"✓ Created '{property_name}' custom property with library override supp
|
||||
print(f"Setting up drivers for {active_obj.name} object...")
|
||||
|
||||
try:
|
||||
# Clear any existing drivers
|
||||
try:
|
||||
active_obj.driver_remove('hide_render')
|
||||
print(" Removed existing hide_render driver")
|
||||
except:
|
||||
print(" No existing hide_render driver to remove")
|
||||
|
||||
try:
|
||||
active_obj.driver_remove('hide_viewport')
|
||||
print(" Removed existing hide_viewport driver")
|
||||
except:
|
||||
print(" No existing hide_viewport driver to remove")
|
||||
|
||||
# Create hide_render driver (hide when property = False, show when property = True)
|
||||
driver_fcurve = active_obj.driver_add('hide_render')
|
||||
driver = driver_fcurve.driver
|
||||
driver.type = 'SUM'
|
||||
|
||||
var = driver.variables.new()
|
||||
var.name = 'vis_val'
|
||||
var.type = 'SINGLE_PROP'
|
||||
var.targets[0].id_type = 'OBJECT'
|
||||
var.targets[0].id = armature_obj
|
||||
var.targets[0].data_path = f'pose.bones["Settings"]["{property_name}"]'
|
||||
|
||||
# Use polynomial modifier to invert: hide_render = 1 - vis_val
|
||||
mod = driver_fcurve.modifiers.new('GENERATOR')
|
||||
mod.mode = 'POLYNOMIAL'
|
||||
mod.poly_order = 1
|
||||
mod.coefficients = (1.0, -1.0) # 1 - x
|
||||
|
||||
print(f" ✓ Created hide_render driver for {active_obj.name}")
|
||||
|
||||
# Create hide_viewport driver (same logic)
|
||||
driver_fcurve = active_obj.driver_add('hide_viewport')
|
||||
driver = driver_fcurve.driver
|
||||
driver.type = 'SUM'
|
||||
|
||||
var = driver.variables.new()
|
||||
var.name = 'vis_val'
|
||||
var.type = 'SINGLE_PROP'
|
||||
var.targets[0].id_type = 'OBJECT'
|
||||
var.targets[0].id = armature_obj
|
||||
var.targets[0].data_path = f'pose.bones["Settings"]["{property_name}"]'
|
||||
|
||||
# Use polynomial modifier to invert: hide_viewport = 1 - vis_val
|
||||
mod = driver_fcurve.modifiers.new('GENERATOR')
|
||||
mod.mode = 'POLYNOMIAL'
|
||||
mod.poly_order = 1
|
||||
mod.coefficients = (1.0, -1.0) # 1 - x
|
||||
|
||||
print(f" ✓ Created hide_viewport driver for {active_obj.name}")
|
||||
|
||||
# Set up drivers for all selected objects
|
||||
for obj in selected_objects:
|
||||
print(f" Setting up drivers for {obj.name}...")
|
||||
|
||||
# Clear any existing drivers
|
||||
try:
|
||||
obj.driver_remove('hide_render')
|
||||
print(f" Removed existing hide_render driver")
|
||||
except:
|
||||
print(" No existing hide_render driver to remove")
|
||||
|
||||
try:
|
||||
obj.driver_remove('hide_viewport')
|
||||
print(" Removed existing hide_viewport driver")
|
||||
except:
|
||||
print(" No existing hide_viewport driver to remove")
|
||||
|
||||
# Create hide_render driver (hide when property = False, show when property = True)
|
||||
driver_fcurve = obj.driver_add('hide_render')
|
||||
driver = driver_fcurve.driver
|
||||
driver.type = 'SUM'
|
||||
|
||||
var = driver.variables.new()
|
||||
var.name = 'vis_val'
|
||||
var.type = 'SINGLE_PROP'
|
||||
var.targets[0].id_type = 'OBJECT'
|
||||
var.targets[0].id = armature_obj
|
||||
var.targets[0].data_path = f'pose.bones["Settings"]["{property_name}"]'
|
||||
|
||||
# Use polynomial modifier to invert: hide_render = 1 - vis_val
|
||||
mod = driver_fcurve.modifiers.new('GENERATOR')
|
||||
mod.mode = 'POLYNOMIAL'
|
||||
mod.poly_order = 1
|
||||
mod.coefficients = (1.0, -1.0) # 1 - x
|
||||
|
||||
print(f" ✓ Created hide_render driver for {obj.name}")
|
||||
|
||||
# Create hide_viewport driver (same logic)
|
||||
driver_fcurve = obj.driver_add('hide_viewport')
|
||||
driver = driver_fcurve.driver
|
||||
driver.type = 'SUM'
|
||||
|
||||
var = driver.variables.new()
|
||||
var.name = 'vis_val'
|
||||
var.type = 'SINGLE_PROP'
|
||||
var.targets[0].id_type = 'OBJECT'
|
||||
var.targets[0].id = armature_obj
|
||||
var.targets[0].data_path = f'pose.bones["Settings"]["{property_name}"]'
|
||||
|
||||
# Use polynomial modifier to invert: hide_viewport = 1 - vis_val
|
||||
mod = driver_fcurve.modifiers.new('GENERATOR')
|
||||
mod.mode = 'POLYNOMIAL'
|
||||
mod.poly_order = 1
|
||||
mod.coefficients = (1.0, -1.0) # 1 - x
|
||||
|
||||
print(f" ✓ Created hide_viewport driver for {obj.name}")
|
||||
|
||||
except Exception as e:
|
||||
print(f" Error creating {active_obj.name} drivers: {e}")
|
||||
print(f" Error creating drivers: {e}")
|
||||
|
||||
print("✓ Driver setup complete")
|
||||
|
||||
@@ -159,28 +166,31 @@ bpy.context.evaluated_depsgraph_get().update()
|
||||
|
||||
# Initial state (should be visible)
|
||||
print(f"Current state: {property_name} = {pose_bone[property_name]} (True=visible, False=hidden)")
|
||||
print(f" {active_obj.name}: hide_render={active_obj.hide_render}, hide_viewport={active_obj.hide_viewport}")
|
||||
for obj in selected_objects:
|
||||
print(f" {obj.name}: hide_render={obj.hide_render}, hide_viewport={obj.hide_viewport}")
|
||||
|
||||
# Test toggle to False (object hidden)
|
||||
print(f"\nToggling to False ({active_obj.name} hidden)...")
|
||||
# Test toggle to False (objects hidden)
|
||||
print(f"\nToggling to False (objects hidden)...")
|
||||
pose_bone[property_name] = False
|
||||
bpy.context.view_layer.update()
|
||||
bpy.context.evaluated_depsgraph_get().update()
|
||||
|
||||
print(f"New state: {property_name} = {pose_bone[property_name]}")
|
||||
print(f" {active_obj.name}: hide_render={active_obj.hide_render}, hide_viewport={active_obj.hide_viewport}")
|
||||
for obj in selected_objects:
|
||||
print(f" {obj.name}: hide_render={obj.hide_render}, hide_viewport={obj.hide_viewport}")
|
||||
|
||||
# Test toggle back to True (object visible)
|
||||
print(f"\nToggling to True ({active_obj.name} visible)...")
|
||||
# Test toggle back to True (objects visible)
|
||||
print(f"\nToggling to True (objects visible)...")
|
||||
pose_bone[property_name] = True
|
||||
bpy.context.view_layer.update()
|
||||
bpy.context.evaluated_depsgraph_get().update()
|
||||
|
||||
print(f"Final state: {property_name} = {pose_bone[property_name]}")
|
||||
print(f" {active_obj.name}: hide_render={active_obj.hide_render}, hide_viewport={active_obj.hide_viewport}")
|
||||
for obj in selected_objects:
|
||||
print(f" {obj.name}: hide_render={obj.hide_render}, hide_viewport={obj.hide_viewport}")
|
||||
|
||||
print("\n✓ Custom Visibility script completed successfully!")
|
||||
print(f"The '{property_name}' property is now available on the Settings bone as a checkbox")
|
||||
print(f"Use checkbox to toggle {active_obj.name} visibility")
|
||||
print(f" - {property_name} ON (checked): Shows {active_obj.name}")
|
||||
print(f" - {property_name} OFF (unchecked): Hides {active_obj.name}")
|
||||
print(f"Use checkbox to toggle visibility of {len(selected_objects)} selected object(s): {[obj.name for obj in selected_objects]}")
|
||||
print(f" - {property_name} ON (checked): Shows all selected objects")
|
||||
print(f" - {property_name} OFF (unchecked): Hides all selected objects")
|
||||
Reference in New Issue
Block a user