Bases: BlenderCreator
, AutoCreator
Workfile auto-creator.
The workfile instance stores its data on the AVALON_CONTAINERS
collection as custom attributes, because unlike other instances it doesn't have an instance node of its own.
Source code in client/ayon_blender/plugins/create/create_workfile.py
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118 | class CreateWorkfile(BlenderCreator, AutoCreator):
"""Workfile auto-creator.
The workfile instance stores its data on the `AVALON_CONTAINERS` collection
as custom attributes, because unlike other instances it doesn't have an
instance node of its own.
"""
identifier = "io.openpype.creators.blender.workfile"
label = "Workfile"
product_type = "workfile"
icon = "fa5.file"
def create(self):
"""Create workfile instances."""
workfile_instance = next(
(
instance for instance in self.create_context.instances
if instance.creator_identifier == self.identifier
),
None,
)
project_entity = self.create_context.get_current_project_entity()
project_name = project_entity["name"]
folder_entity = self.create_context.get_current_folder_entity()
folder_path = folder_entity["path"]
task_entity = self.create_context.get_current_task_entity()
task_name = task_entity["name"]
host_name = self.create_context.host_name
if not workfile_instance:
product_name = self.get_product_name(
project_name,
folder_entity,
task_entity,
task_name,
host_name,
)
data = {
"folderPath": folder_path,
"task": task_name,
"variant": task_name,
}
data.update(
self.get_dynamic_data(
project_name,
folder_entity,
task_entity,
task_name,
host_name,
workfile_instance,
)
)
self.log.info("Auto-creating workfile instance...")
workfile_instance = CreatedInstance(
self.product_type, product_name, data, self
)
self._add_instance_to_context(workfile_instance)
elif (
workfile_instance["folderPath"] != folder_path
or workfile_instance["task"] != task_name
):
# Update instance context if it's different
product_name = self.get_product_name(
project_name,
folder_entity,
task_entity,
self.default_variant,
host_name,
)
workfile_instance["folderPath"] = folder_path
workfile_instance["task"] = task_name
workfile_instance["productName"] = product_name
instance_node = bpy.data.collections.get(AVALON_CONTAINERS)
if not instance_node:
instance_node = bpy.data.collections.new(name=AVALON_CONTAINERS)
workfile_instance.transient_data["instance_node"] = instance_node
def collect_instances(self):
instance_node = bpy.data.collections.get(AVALON_CONTAINERS)
if not instance_node:
return
property = instance_node.get(AVALON_PROPERTY)
if not property:
return
# Create instance object from existing data
instance = CreatedInstance.from_existing(
instance_data=property.to_dict(),
creator=self
)
instance.transient_data["instance_node"] = instance_node
# Add instance to create context
self._add_instance_to_context(instance)
def remove_instances(self, instances):
for instance in instances:
node = instance.transient_data["instance_node"]
del node[AVALON_PROPERTY]
self._remove_instance_from_context(instance)
|
create()
Create workfile instances.
Source code in client/ayon_blender/plugins/create/create_workfile.py
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91 | def create(self):
"""Create workfile instances."""
workfile_instance = next(
(
instance for instance in self.create_context.instances
if instance.creator_identifier == self.identifier
),
None,
)
project_entity = self.create_context.get_current_project_entity()
project_name = project_entity["name"]
folder_entity = self.create_context.get_current_folder_entity()
folder_path = folder_entity["path"]
task_entity = self.create_context.get_current_task_entity()
task_name = task_entity["name"]
host_name = self.create_context.host_name
if not workfile_instance:
product_name = self.get_product_name(
project_name,
folder_entity,
task_entity,
task_name,
host_name,
)
data = {
"folderPath": folder_path,
"task": task_name,
"variant": task_name,
}
data.update(
self.get_dynamic_data(
project_name,
folder_entity,
task_entity,
task_name,
host_name,
workfile_instance,
)
)
self.log.info("Auto-creating workfile instance...")
workfile_instance = CreatedInstance(
self.product_type, product_name, data, self
)
self._add_instance_to_context(workfile_instance)
elif (
workfile_instance["folderPath"] != folder_path
or workfile_instance["task"] != task_name
):
# Update instance context if it's different
product_name = self.get_product_name(
project_name,
folder_entity,
task_entity,
self.default_variant,
host_name,
)
workfile_instance["folderPath"] = folder_path
workfile_instance["task"] = task_name
workfile_instance["productName"] = product_name
instance_node = bpy.data.collections.get(AVALON_CONTAINERS)
if not instance_node:
instance_node = bpy.data.collections.new(name=AVALON_CONTAINERS)
workfile_instance.transient_data["instance_node"] = instance_node
|