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>2020-08-11 07:19:34 +0300
committerRyan Inch <mythologylover75@gmail.com>2020-08-11 07:19:34 +0300
commit559fbf908ba8721f4c9e72b6dc7c3bfa0863479f (patch)
tree4d2e48cce576ea04f6099bbe5445e38fe1bcdbcd /object_collection_manager/operator_utils.py
parent1d1bb1a707554ce51696d85d2feb9718e34a0220 (diff)
Collection Manager: Add Holdout & Indirect Only. Task: T69577
Add support for the Holdout and Indirect Only RTOs.
Diffstat (limited to 'object_collection_manager/operator_utils.py')
-rw-r--r--object_collection_manager/operator_utils.py130
1 files changed, 112 insertions, 18 deletions
diff --git a/object_collection_manager/operator_utils.py b/object_collection_manager/operator_utils.py
index ed7fce09..6f7ee83b 100644
--- a/object_collection_manager/operator_utils.py
+++ b/object_collection_manager/operator_utils.py
@@ -36,12 +36,67 @@ rto_path = {
"select": "collection.hide_select",
"hide": "hide_viewport",
"disable": "collection.hide_viewport",
- "render": "collection.hide_render"
+ "render": "collection.hide_render",
+ "holdout": "holdout",
+ "indirect": "indirect_only",
+ }
+
+set_off_on = {
+ "exclude": {
+ "off": True,
+ "on": False
+ },
+ "select": {
+ "off": True,
+ "on": False
+ },
+ "hide": {
+ "off": True,
+ "on": False
+ },
+ "disable": {
+ "off": True,
+ "on": False
+ },
+ "render": {
+ "off": True,
+ "on": False
+ },
+ "holdout": {
+ "off": False,
+ "on": True
+ },
+ "indirect": {
+ "off": False,
+ "on": True
+ }
+ }
+
+get_off_on = {
+ False: {
+ "exclude": "on",
+ "select": "on",
+ "hide": "on",
+ "disable": "on",
+ "render": "on",
+ "holdout": "off",
+ "indirect": "off",
+ },
+
+ True: {
+ "exclude": "off",
+ "select": "off",
+ "hide": "off",
+ "disable": "off",
+ "render": "off",
+ "holdout": "on",
+ "indirect": "on",
+ }
}
def get_rto(layer_collection, rto):
- if rto in ["exclude", "hide"]:
+ if rto in ["exclude", "hide", "holdout", "indirect"]:
return getattr(layer_collection, rto_path[rto])
else:
@@ -50,7 +105,7 @@ def get_rto(layer_collection, rto):
def set_rto(layer_collection, rto, value):
- if rto in ["exclude", "hide"]:
+ if rto in ["exclude", "hide", "holdout", "indirect"]:
setattr(layer_collection, rto_path[rto], value)
else:
@@ -76,13 +131,16 @@ def apply_to_children(parent, apply_function):
def isolate_rto(cls, self, view_layer, rto, *, children=False):
+ off = set_off_on[rto]["off"]
+ on = set_off_on[rto]["on"]
+
laycol_ptr = layer_collections[self.name]["ptr"]
target = rto_history[rto][view_layer]["target"]
history = rto_history[rto][view_layer]["history"]
# get active collections
active_layer_collections = [x["ptr"] for x in layer_collections.values()
- if not get_rto(x["ptr"], rto)]
+ if get_rto(x["ptr"], rto) == on]
# check if previous state should be restored
if cls.isolated and self.name == target:
@@ -100,7 +158,7 @@ def isolate_rto(cls, self, view_layer, rto, *, children=False):
active_layer_collections[0].name == self.name):
# activate all collections
for item in layer_collections.values():
- set_rto(item["ptr"], rto, False)
+ set_rto(item["ptr"], rto, on)
# reset target and history
del rto_history[rto][view_layer]
@@ -130,15 +188,15 @@ def isolate_rto(cls, self, view_layer, rto, *, children=False):
# isolate collection
for item in layer_collections.values():
if item["name"] != laycol_ptr.name:
- set_rto(item["ptr"], rto, True)
+ set_rto(item["ptr"], rto, off)
- set_rto(laycol_ptr, rto, False)
+ set_rto(laycol_ptr, rto, on)
- if rto != "exclude":
+ if rto not in ["exclude", "holdout", "indirect"]:
# activate all parents
laycol = layer_collections[self.name]
while laycol["id"] != 0:
- set_rto(laycol["ptr"], rto, False)
+ set_rto(laycol["ptr"], rto, on)
laycol = laycol["parent"]
if children:
@@ -156,7 +214,7 @@ def isolate_rto(cls, self, view_layer, rto, *, children=False):
apply_to_children(laycol_ptr, restore_child_states)
- else:
+ elif rto == "exclude":
# deactivate all children
def deactivate_all_children(layer_collection):
set_rto(layer_collection, rto, True)
@@ -183,6 +241,9 @@ def toggle_children(self, view_layer, rto):
def activate_all_rtos(view_layer, rto):
+ off = set_off_on[rto]["off"]
+ on = set_off_on[rto]["on"]
+
history = rto_history[rto+"_all"][view_layer]
# if not activated, activate all
@@ -190,12 +251,12 @@ def activate_all_rtos(view_layer, rto):
keep_history = False
for item in reversed(list(layer_collections.values())):
- if get_rto(item["ptr"], rto) == True:
+ if get_rto(item["ptr"], rto) == off:
keep_history = True
history.append(get_rto(item["ptr"], rto))
- set_rto(item["ptr"], rto, False)
+ set_rto(item["ptr"], rto, on)
if not keep_history:
history.clear()
@@ -233,12 +294,22 @@ def copy_rtos(view_layer, rto):
# copy
copy_buffer["RTO"] = rto
for laycol in layer_collections.values():
- copy_buffer["values"].append(get_rto(laycol["ptr"], rto))
+ copy_buffer["values"].append(get_off_on[
+ get_rto(laycol["ptr"], rto)
+ ][
+ rto
+ ]
+ )
else:
# paste
for x, laycol in enumerate(layer_collections.values()):
- set_rto(laycol["ptr"], rto, copy_buffer["values"][x])
+ set_rto(laycol["ptr"],
+ rto,
+ set_off_on[rto][
+ copy_buffer["values"][x]
+ ]
+ )
# clear rto history
rto_history[rto].pop(view_layer, None)
@@ -254,18 +325,41 @@ def swap_rtos(view_layer, rto):
# get A
swap_buffer["A"]["RTO"] = rto
for laycol in layer_collections.values():
- swap_buffer["A"]["values"].append(get_rto(laycol["ptr"], rto))
+ swap_buffer["A"]["values"].append(get_off_on[
+ get_rto(laycol["ptr"], rto)
+ ][
+ rto
+ ]
+ )
else:
# get B
swap_buffer["B"]["RTO"] = rto
for laycol in layer_collections.values():
- swap_buffer["B"]["values"].append(get_rto(laycol["ptr"], rto))
+ swap_buffer["B"]["values"].append(get_off_on[
+ get_rto(laycol["ptr"], rto)
+ ][
+ rto
+ ]
+ )
# swap A with B
for x, laycol in enumerate(layer_collections.values()):
- set_rto(laycol["ptr"], swap_buffer["A"]["RTO"], swap_buffer["B"]["values"][x])
- set_rto(laycol["ptr"], swap_buffer["B"]["RTO"], swap_buffer["A"]["values"][x])
+ set_rto(laycol["ptr"], swap_buffer["A"]["RTO"],
+ set_off_on[
+ swap_buffer["A"]["RTO"]
+ ][
+ swap_buffer["B"]["values"][x]
+ ]
+ )
+
+ set_rto(laycol["ptr"], swap_buffer["B"]["RTO"],
+ set_off_on[
+ swap_buffer["B"]["RTO"]
+ ][
+ swap_buffer["A"]["values"][x]
+ ]
+ )
# clear rto history