generated from stilobique/BlenderTemplate
93 lines
3.1 KiB
Python
93 lines
3.1 KiB
Python
import bpy
|
|
|
|
from ..properties.models import Outline
|
|
|
|
|
|
class ConfigBlendScene(bpy.types.Operator):
|
|
"""
|
|
This operator init a news blend file, or update it.
|
|
|
|
Prepare a set of collection (from the models in `properties/models/Outline`.
|
|
|
|
Hierarchy design give that:
|
|
- Placeholder
|
|
| ${StaticMesh}
|
|
| Socket (Optional)
|
|
- Icon
|
|
- Game Object
|
|
"""
|
|
bl_idname = 'graou.build_scene'
|
|
bl_label = 'Config or update the outline'
|
|
|
|
def __init__(self):
|
|
self._outline = Outline()
|
|
|
|
# Main property
|
|
self._settings = bpy.context.scene.graou_props
|
|
self._socket = self._settings.socket_collection
|
|
|
|
def execute(self, context):
|
|
for key, value in self._outline.collections.items():
|
|
collection = bpy.data.collections.get(key)
|
|
|
|
# Make the collection if this item not exist
|
|
if collection is None:
|
|
collection = bpy.data.collections.new(value.name)
|
|
context.scene.collection.children.link(collection)
|
|
|
|
# Check if the color are correctly setup, if not update-it
|
|
if collection.color_tag is not value.color:
|
|
collection.color_tag = value.color
|
|
|
|
# Check child collection color
|
|
if collection.children:
|
|
for child in collection.children:
|
|
if isinstance(child, bpy.types.Collection):
|
|
child.color_tag = value.color
|
|
|
|
# Set or update socket collection
|
|
if self._socket:
|
|
self.set_socket_collection()
|
|
else:
|
|
self.del_socket_collection()
|
|
|
|
return {'FINISHED'}
|
|
|
|
def set_socket_collection(self):
|
|
"""Make or update the socket collection"""
|
|
col_socket = bpy.data.collections.get(self._outline.socket.name)
|
|
col_placeholder = self._outline.get_placeholder_collection
|
|
col_game_object = self._outline.get_game_object_collection
|
|
|
|
if col_socket is None:
|
|
col_socket = bpy.data.collections.new(self._outline.socket.name)
|
|
|
|
# Attach to Placeholder and Game Icon if they collection exist
|
|
if col_placeholder.children.get(self._outline.socket.name) is None:
|
|
col_placeholder.children.link(col_socket)
|
|
|
|
if col_game_object.children.get(self._outline.socket.name) is None:
|
|
col_game_object.children.link(col_socket)
|
|
|
|
# Set the COLOR Tag
|
|
col_socket.color_tag = self._outline.socket.color
|
|
|
|
def del_socket_collection(self):
|
|
"""Remove the socket collection, however, if the collection doesn't exist, terminate the function"""
|
|
socket = bpy.data.collections.get(self._outline.socket.name)
|
|
if socket is not None:
|
|
bpy.data.collections.remove(socket)
|
|
|
|
|
|
class SetCollectionSocket(bpy.types.Operator):
|
|
"""Configure a/the collection with socket param"""
|
|
bl_idname = 'graou.collection.socket_setup'
|
|
bl_label = 'Set param to be socket functional'
|
|
|
|
def __init__(self):
|
|
self.socket = bpy.data.collections.get('Socket')
|
|
|
|
def execute(self, context):
|
|
# TODO
|
|
return {'FINISHED'}
|