def find_objects_using_resource(root, proxy_type, resource_name):
"""Find all objects that use a specific resource via proxy."""
# Find the proxy
proxy = find_proxy_by_name(root, proxy_type, resource_name)
if not proxy:
return []
# Get referenced object IDs
referenced_ids = proxy.referencedIds if hasattr(proxy, 'referencedIds') else []
# Find objects by applicationId
objects = []
for obj in traverse_all_objects(root):
if hasattr(obj, 'applicationId') and obj.applicationId in referenced_ids:
objects.append(obj)
return objects
def find_proxy_by_name(root, proxy_type, name):
"""Find a proxy by type and name."""
proxies = get_proxies(root, proxy_type)
for proxy in proxies:
if hasattr(proxy, 'name') and proxy.name == name:
return proxy
return None
def get_proxies(root, proxy_type):
"""Get all proxies of a specific type from root collection."""
if not hasattr(root, 'elements'):
return []
proxies = []
for item in root.elements:
if hasattr(item, 'speckle_type') and proxy_type in item.speckle_type:
proxies.append(item)
return proxies
# Usage: Find all objects using "Concrete" material
concrete_objects = find_objects_using_resource(
root,
"RenderMaterial",
"Concrete"
)