Delete empty visibility layers¶
This script delete visibility layers (also called geometry layers) that contains no surfaces.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
from p3dsdk import * def delete_layer_if_empty(layer: VisibilityLayer): sub_layers = layer.list_child_layers(recursive=False) for s in sub_layers: delete_layer_if_empty(s) have_surfaces = len(layer.list_surfaces()) > 0 have_sub_layers = len(layer.list_child_layers(recursive=False)) > 0 # Delete the layer if it contains no surfaces and no sub_layers # (they are already deleted if they were empty) if not have_surfaces and not have_sub_layers: layer.remove(True) with CurrentP3DSession(fallback_port=33900) as p3d: model = p3d.data.list_models() # Get the first model layers = model.list_visibility_layers(recursive=False) for layer in layers: delete_layer_if_empty(layer)
delete_layer_if_empty() is a post-order recursive function.
It does the following:
Recurse into direct sub layers of the layer.
Delete the layer if it contains no surfaces and no sub layers (i.e. it is empty). The empty child layers are already removed by the recursive step.