Hello,
When in the AOV editor, there is a visual indication (shade of grey) of whether a channel layer is in use or not in a 3d layer.
Is there a way to get that info in python?
Thanks
Sylvain
def get_layer3d(image_item, layer_name):
"""Get the Layer3d named `layer_name` in the given image item, or None if not found."""
layers = image_item.get_module().get_layers()
for i in range(layers.get_count()):
layer_obj = layers[i].get_object()
if layer_obj.is_kindof('Layer3d') and layer_obj.get_name() == layer_name:
return layer_obj
ix.log_warning('No Layer3d named "{}" in image "{}"'.format(layer_name, image.get_full_name()))
return None
def get_aovs(layer3d_obj):
"""Get all AOVs names present in the given Layer3d object, including disabled."""
aovs = ix.api.CoreStringArray()
layer3d_obj.get_attribute('selected_aov_list').get_values(aovs)
return aovs
def is_aov_enabled(layer3d_obj, aov_name):
"""Query if the given AOV is enabled in the Layer3d."""
aovs = get_aovs(layer3d_obj)
if aovs.exists(aov_name):
aov_index = aovs.get_index(aov_name)
enabled_values = ix.api.BoolArray()
layer3d_obj.get_attribute('enabled_aov_list').get_values(enabled_values)
assert aov_index < enabled_values.get_count()
return enabled_values[aov_index]
ix.log_warning('AOV "{}" not found in Layer3d "{}".'.format(aov_name, layer3d_obj.get_full_name()))
return False
# Usage example
image = ix.get_item('project://scene/image')
layer3d_obj = get_layer3d(image, 'background')
if layer3d_obj:
# Print all aov names and their enabled status
aovs = get_aovs(layer3d_obj)
ix.log_info('{} AOV(s) in Layer3d "{}"'.format(aovs.get_count(), layer3d_obj.get_full_name()))
for aov in aovs:
ix.log_info('- "{}": enabled = {}'.format(aov, is_aov_enabled(layer3d_obj, aov)))
def get_enabled_aovs(layer3d_obj):
"""Get all the names of AOVs that are enabled in the given Layer3d (eye icon enabled)."""
enabled_values = ix.api.BoolArray()
layer3d_obj.get_attribute('enabled_aov_list').get_values(enabled_values)
aovs = get_aovs(layer3d_obj)
enabled_names = []
for i in range(enabled_values.get_count()):
if enabled_values[i] == True:
enabled_names.append(aovs[i])
return enabled_names
# Usage example
image = ix.get_item('project://scene/image')
layer_name = 'background'
layer3d_obj = get_layer3d(image, layer_name)
if layer3d_obj:
ix.log_info('Enabled AOVs:')
ix.log_info(get_enabled_aovs(layer3d_obj))
def get_unavailable_aovs(layer3d_obj):
# get all added AOVs
added_aov_names = get_aovs(layer3d_obj)
# get all AOVs that can output data, including un-added AOVs (super-set of added AOVs)
available_aov_ids = layer3d_obj.get_module().get_available_aovs()
# now, build the list of aovs that are added but unavailable
cm = ix.application.get_channel_manager()
unavailable_aovs = []
for aov_name in added_aov_names:
aov_id = cm.get_layer_index(aov_name)
if available_aov_ids.exists(aov_id) == False:
unavailable_aovs.append(aov_name)
return unavailable_aovs