Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRyan Inch <mythologylover75@gmail.com>2021-01-13 06:30:16 +0300
committerRyan Inch <mythologylover75@gmail.com>2021-01-13 06:30:16 +0300
commit47820f66c255ce816c29fc50431b39a5148d8353 (patch)
treee62c44155b67a8ff88cffe4a2d2e983ad3d17f40 /object_collection_manager/operator_utils.py
parent589d13408a60cbec34a8bc3cc798c586043743ae (diff)
Collection Manager: Add ops for selected objects. Task: T69577
Add operators to isolate/disable the collections of selected objects.
Diffstat (limited to 'object_collection_manager/operator_utils.py')
-rw-r--r--object_collection_manager/operator_utils.py117
1 files changed, 117 insertions, 0 deletions
diff --git a/object_collection_manager/operator_utils.py b/object_collection_manager/operator_utils.py
index 8b637a57..820ab1bb 100644
--- a/object_collection_manager/operator_utils.py
+++ b/object_collection_manager/operator_utils.py
@@ -26,6 +26,7 @@ from . import internals
from .internals import (
update_property_group,
get_move_selection,
+ get_move_active,
)
mode_converter = {
@@ -244,6 +245,122 @@ def isolate_rto(cls, self, view_layer, rto, *, children=False):
cls.isolated = True
+def isolate_sel_objs_collections(view_layer, rto, caller, *, use_active=False):
+ selected_objects = get_move_selection()
+
+ if use_active:
+ selected_objects.add(get_move_active(always=True))
+
+ if not selected_objects:
+ return "No selected objects"
+
+ off = set_off_on[rto]["off"]
+ on = set_off_on[rto]["on"]
+
+ if caller == "CM":
+ history = internals.rto_history[rto+"_all"][view_layer]
+
+ elif caller == "QCD":
+ history = internals.qcd_history[view_layer]
+
+
+ # if not isolated, isolate collections of selected objects
+ if len(history) == 0:
+ keep_history = False
+
+ # save history and isolate RTOs
+ for item in internals.layer_collections.values():
+ history.append(get_rto(item["ptr"], rto))
+ rto_state = off
+
+ # check if any of the selected objects are in the collection
+ if not set(selected_objects).isdisjoint(item["ptr"].collection.objects):
+ rto_state = on
+
+ if history[-1] != rto_state:
+ keep_history = True
+
+ if rto == "exclude":
+ set_exclude_state(item["ptr"], rto_state)
+
+ else:
+ set_rto(item["ptr"], rto, rto_state)
+
+ # activate all parents if needed
+ if rto_state == on and rto not in ["holdout", "indirect"]:
+ laycol = item["parent"]
+ while laycol["id"] != 0:
+ set_rto(laycol["ptr"], rto, on)
+ laycol = laycol["parent"]
+
+
+ if not keep_history:
+ history.clear()
+
+ return "Collection already isolated"
+
+
+ else:
+ for x, item in enumerate(internals.layer_collections.values()):
+ set_rto(item["ptr"], rto, history[x])
+
+ # clear history
+ if caller == "CM":
+ del internals.rto_history[rto+"_all"][view_layer]
+
+ elif caller == "QCD":
+ del internals.qcd_history[view_layer]
+
+
+def disable_sel_objs_collections(view_layer, rto, caller):
+ off = set_off_on[rto]["off"]
+ on = set_off_on[rto]["on"]
+ selected_objects = get_move_selection()
+
+ if caller == "CM":
+ history = internals.rto_history[rto+"_all"][view_layer]
+
+ elif caller == "QCD":
+ history = internals.qcd_history[view_layer]
+
+
+ if not selected_objects and not history:
+ # clear history
+ if caller == "CM":
+ del internals.rto_history[rto+"_all"][view_layer]
+
+ elif caller == "QCD":
+ del internals.qcd_history[view_layer]
+
+ return "No selected objects"
+
+ # if not disabled, disable collections of selected objects
+ if len(history) == 0:
+ # save history and disable RTOs
+ for item in internals.layer_collections.values():
+ history.append(get_rto(item["ptr"], rto))
+
+ # check if any of the selected objects are in the collection
+ if not set(selected_objects).isdisjoint(item["ptr"].collection.objects):
+ if rto == "exclude":
+ set_exclude_state(item["ptr"], off)
+
+ else:
+ set_rto(item["ptr"], rto, off)
+
+
+ else:
+ for x, item in enumerate(internals.layer_collections.values()):
+ set_rto(item["ptr"], rto, history[x])
+
+ # clear history
+ if caller == "CM":
+ del internals.rto_history[rto+"_all"][view_layer]
+
+ elif caller == "QCD":
+ del internals.qcd_history[view_layer]
+
+
def toggle_children(self, view_layer, rto):
laycol_ptr = internals.layer_collections[self.name]["ptr"]
# clear rto history