2024-05-21 18:00:49 +02:00
|
|
|
import bpy
|
|
|
|
|
|
|
|
|
|
|
|
def get_parent_collection_names(collection, parent_names):
|
|
|
|
for parent_collection in bpy.data.collections:
|
|
|
|
if collection.name in parent_collection.children.keys():
|
|
|
|
parent_names.append(parent_collection.name)
|
|
|
|
get_parent_collection_names(parent_collection, parent_names)
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
|
|
def turn_collection_hierarchy_into_path(obj):
|
|
|
|
parent_collection = obj.users_collection[0]
|
|
|
|
parent_names = []
|
|
|
|
parent_names.append(parent_collection.name)
|
|
|
|
get_parent_collection_names(parent_collection, parent_names)
|
|
|
|
parent_names.reverse()
|
|
|
|
return '\\'.join(parent_names)
|
|
|
|
|
|
|
|
def move_in_fontcollection(obj, fontcollection, scene):
|
|
|
|
# print(turn_collection_hierarchy_into_path(obj))
|
|
|
|
if scene.collection.objects.find(obj.name) >= 0:
|
|
|
|
scene.collection.objects.unlink(obj)
|
|
|
|
if fontcollection.objects.find(obj.name) < 0:
|
|
|
|
fontcollection.objects.link(obj)
|
2024-05-28 14:11:32 +02:00
|
|
|
# TODO: move in glyphs
|
|
|
|
# if fontcollection.objects.find("glyphs") < 0:
|
|
|
|
# empty = bpy.data.objects.new("glyphs", None)
|
|
|
|
# empty.empty_display_type = 'PLAIN_AXES'
|
|
|
|
# fontcollection.objects.link(empty)
|
|
|
|
# glyphs = fontcollection.objects.get("glyphs")
|
|
|
|
# if obj.parent != glyphs:
|
|
|
|
# obj.parent = glyphs
|
|
|
|
|
|
|
|
def ShowMessageBox(title = "Message Box", icon = 'INFO', message=""):
|
|
|
|
|
|
|
|
"""Show a simple message box
|
|
|
|
|
|
|
|
taken from `Link here <https://blender.stackexchange.com/questions/169844/multi-line-text-box-with-popup-menu>`_
|
|
|
|
|
|
|
|
:param title: The title shown in the message top bar
|
|
|
|
:type title: str
|
|
|
|
:param icon: The icon to be shown in the message top bar
|
|
|
|
:type icon: str
|
|
|
|
:param message: lines of text to display, a.k.a. the message
|
|
|
|
:type message: str or (str, str, ..)
|
|
|
|
|
|
|
|
TIP: Check `Link blender icons <https://docs.blender.org/api/current/bpy_types_enum_items/icon_items.html>`_ for icons you can use
|
|
|
|
TIP: Or even better, check `Link this addons <https://docs.blender.org/manual/en/latest/addons/development/icon_viewer.html>`_ to also see the icons.
|
|
|
|
|
|
|
|
usage:
|
|
|
|
.. code-block:: python
|
|
|
|
myLines=("line 1","line 2","line 3")
|
|
|
|
butils.ShowMessageBox(message=myLines)
|
|
|
|
|
|
|
|
or:
|
|
|
|
.. code-block:: python
|
|
|
|
butils.ShowMessageBox(title="",message=("AAAAAH","NOOOOO"),icon=)
|
|
|
|
|
|
|
|
"""
|
|
|
|
myLines=message
|
|
|
|
def draw(self, context):
|
|
|
|
if isinstance(myLines, str):
|
|
|
|
self.layout.label(text=myLines)
|
|
|
|
elif hasattr(myLines, "__iter__"):
|
|
|
|
for n in myLines:
|
|
|
|
self.layout.label(text=n)
|
|
|
|
bpy.context.window_manager.popup_menu(draw, title = title, icon = icon)
|