Fix layer nav operator
4.0.1 - fixed: layer nav operator on page up/down
This commit is contained in:
@@ -162,6 +162,33 @@ def layer_active_index(gpl):
|
||||
'''
|
||||
return next((i for i, l in enumerate(gpl) if l == gpl.active), None)
|
||||
|
||||
def get_top_layer_from_group(gp, group):
|
||||
upper_layer = None
|
||||
for layer in gp.layers:
|
||||
if layer.parent_group == group:
|
||||
upper_layer = layer
|
||||
return upper_layer
|
||||
|
||||
def get_closest_active_layer(gp):
|
||||
'''Get active layer from GP object, getting upper layer if in group
|
||||
if a group is active, return the top layer of this group
|
||||
if group is active but no layer in it, return None
|
||||
'''
|
||||
|
||||
if gp.layers.active:
|
||||
return gp.layers.active
|
||||
## No active layer, return active from group (can be None !)
|
||||
return get_top_layer_from_group(gp, gp.layer_groups.active)
|
||||
|
||||
def closest_layer_active_index(gp, fallback_index=0):
|
||||
'''Get active layer index from GP object, getting upper layer if in group
|
||||
if a group is active, return index at the top layer of this group
|
||||
if group is active but no layer in it, return fallback_index (0 by default, stack bottom)'''
|
||||
closest_active_layer = get_closest_active_layer(gp)
|
||||
if closest_active_layer:
|
||||
return next((i for i, l in enumerate(gp.layers) if l == closest_active_layer), fallback_index)
|
||||
return fallback_index
|
||||
|
||||
## Check for nested lock
|
||||
def is_locked(stack_item):
|
||||
'''Check if passed stack item (layer or group) is locked
|
||||
@@ -1200,6 +1227,38 @@ def iterate_selector(zone, attr, state, info_attr = None, active_access='active'
|
||||
|
||||
return info, bottom
|
||||
|
||||
def iterate_active_layer(gpd, state):
|
||||
'''Iterate active GP layer in stack
|
||||
gpd: Grease Pencil Data
|
||||
'''
|
||||
layers = gpd.layers
|
||||
l_count = len(layers)
|
||||
|
||||
if state: # swap
|
||||
# info = None
|
||||
# bottom = None
|
||||
|
||||
## Get active layer index
|
||||
active_index = closest_layer_active_index(gpd, fallback_index=None)
|
||||
if active_index == None:
|
||||
## fallback to first layer if nothing found
|
||||
gpd.layers.active = layers[0]
|
||||
return
|
||||
|
||||
target_index = active_index + state
|
||||
new_index = target_index % l_count
|
||||
|
||||
## set active layer
|
||||
gpd.layers.active = layers[new_index]
|
||||
|
||||
if target_index == l_count:
|
||||
bottom = 1 # bottom reached, cycle to first
|
||||
elif target_index < 0:
|
||||
bottom = -1 # up reached, cycle to last
|
||||
|
||||
# info = gpd.layers.active.name
|
||||
# return info, bottom
|
||||
|
||||
# -----------------
|
||||
### Curve handle
|
||||
# -----------------
|
||||
|
||||
Reference in New Issue
Block a user