rig_picker/core/addon_utils.py
2025-12-05 17:59:06 +01:00

65 lines
1.4 KiB
Python

import bpy
from .bl_utils import get_mat, get_collection_parents
def get_picker_collection(ob: bpy.types.Object | None = None):
"""Return the picker collection of an object"""
if not ob:
ob = bpy.context.object
if not ob:
raise Exception("No object in context")
for col in ob.users_collection:
if col.rig_picker.enabled:
return col
if picker_col := next(
(c for c in get_collection_parents(col) if c.rig_picker.enabled), None
):
return picker_col
def is_shape(ob):
scn = bpy.context.scene
canvas = scn.rig_picker.canvas
if not canvas or ob.hide_render:
return False
shapes = {ob for col in canvas.users_collection for ob in col.all_objects}
if ob.type in ("MESH", "CURVE", "FONT") and ob in shapes:
return True
return False
def get_object_color(ob):
if not ob.data.materials:
return
mat = get_mat(ob)
if not mat or not mat.node_tree or not mat.node_tree.nodes:
return
emit_node = mat.node_tree.nodes.get("Emission")
if not emit_node:
return
return emit_node.inputs["Color"].default_value
def get_operator_from_id(idname):
if not "." in idname:
return
m, o = idname.split(".")
try:
op = getattr(getattr(bpy.ops, m), o)
op.get_rna_type()
except Exception:
return
return op