我们从Python开源项目中,提取了以下43个代码示例,用于说明如何使用bpy.utils()。
def draw_preset(self, context): """ Define these on the subclass: - preset_operator (string) - preset_subdir (string) Optionally: - preset_extensions (set of strings) - preset_operator_defaults (dict of keyword args) """ import bpy ext_valid = getattr(self, "preset_extensions", {".py", ".xml"}) props_default = getattr(self, "preset_operator_defaults", None) self.path_menu(bpy.utils.preset_paths(self.preset_subdir), self.preset_operator, props_default=props_default, filter_ext=lambda ext: ext.lower() in ext_valid)
def register(): from bpy.utils import register_class for mod in _modules_loaded: for cls in mod.classes: register_class(cls) bpy.types.Scene.ignit_panel = bpy.props.PointerProperty(type=_modules_loaded[0].classes[0]) bpy.types.Scene.custom_vertices = CollectionProperty(type=_modules_loaded[0].classes[1]) bpy.types.Scene.custom_vertices_index = IntProperty() bpy.types.Scene.custom_faces = CollectionProperty(type=_modules_loaded[1].classes[0]) bpy.types.Scene.custom_faces_index = IntProperty() bpy.types.Scene.custom_lines = CollectionProperty(type=_modules_loaded[2].classes[0]) bpy.types.Scene.custom_lines_index = IntProperty() bpy.types.Scene.custom_cylinder = CollectionProperty(type=_modules_loaded[3].classes[0]) bpy.types.Scene.custom_cylinder_index = IntProperty() bpy.types.Scene.custom_circle = CollectionProperty(type=_modules_loaded[4].classes[0]) bpy.types.Scene.custom_circle_index = IntProperty() bpy.utils.register_module(__name__) bpy.types.INFO_MT_file_export.append(menu_func_export)
def unregister(): from bpy.utils import unregister_class for mod in reversed(_modules_loaded): for cls in reversed(mod.classes): if cls.is_registered: unregister_class(cls) del bpy.types.Scene.custom_circle del bpy.types.Scene.custom_circle_index del bpy.types.Scene.custom_cylinder del bpy.types.Scene.custom_cylinder_index bpy.utils.unregister_module(__name__) bpy.types.INFO_MT_file_export.remove(menu_func_export) del bpy.types.Scene.ignit_panel # if __name__ == "__main__": # register()
def banner(context): sc = context.space_data version_string = sys.version.strip().replace('\n', ' ') add_scrollback("PYTHON INTERACTIVE CONSOLE %s" % version_string, 'OUTPUT') add_scrollback("", 'OUTPUT') add_scrollback("Command History: Up/Down Arrow", 'OUTPUT') add_scrollback("Cursor: Left/Right Home/End", 'OUTPUT') add_scrollback("Remove: Backspace/Delete", 'OUTPUT') add_scrollback("Execute: Enter", 'OUTPUT') add_scrollback("Autocomplete: Ctrl-Space", 'OUTPUT') add_scrollback("Zoom: Ctrl +/-, Ctrl-Wheel", 'OUTPUT') add_scrollback("Builtin Modules: bpy, bpy.data, bpy.ops, " "bpy.props, bpy.types, bpy.context, bpy.utils, " "bgl, blf, mathutils", 'OUTPUT') add_scrollback("Convenience Imports: from mathutils import *; " "from math import *", 'OUTPUT') add_scrollback("Convenience Variables: C = bpy.context, D = bpy.data", 'OUTPUT') add_scrollback("", 'OUTPUT') sc.prompt = PROMPT return {'FINISHED'} # workaround for readline crashing, see: T43491
def _setup_classes(self): import bpy assert(self._class_store is None) self._class_store = self.class_ignore() from bpy.utils import unregister_class for cls in self._class_store: unregister_class(cls)
def _teardown_classes(self): assert(self._class_store is not None) from bpy.utils import register_class for cls in self._class_store: register_class(cls) self._class_store = None
def update_panel(self, context): try: bpy.utils.unregister_class(TOOLS_PT_Archipack_PolyLib) bpy.utils.unregister_class(TOOLS_PT_Archipack_Tools) bpy.utils.unregister_class(TOOLS_PT_Archipack_Create) except: pass prefs = context.user_preferences.addons[__name__].preferences TOOLS_PT_Archipack_PolyLib.bl_category = prefs.tools_category bpy.utils.register_class(TOOLS_PT_Archipack_PolyLib) TOOLS_PT_Archipack_Tools.bl_category = prefs.tools_category bpy.utils.register_class(TOOLS_PT_Archipack_Tools) TOOLS_PT_Archipack_Create.bl_category = prefs.create_category bpy.utils.register_class(TOOLS_PT_Archipack_Create)
def unregister(): global icons_collection bpy.types.INFO_MT_mesh_add.remove(menu_func) bpy.utils.unregister_class(ARCHIPACK_create_menu) bpy.utils.unregister_class(TOOLS_PT_Archipack_PolyLib) bpy.utils.unregister_class(TOOLS_PT_Archipack_Tools) bpy.utils.unregister_class(TOOLS_PT_Archipack_Create) bpy.utils.unregister_class(Archipack_Pref) # unregister subs archipack_snap.unregister() archipack_manipulator.unregister() archipack_reference_point.unregister() archipack_autoboolean.unregister() archipack_door.unregister() archipack_window.unregister() archipack_stair.unregister() archipack_wall.unregister() archipack_wall2.unregister() # archipack_roof2d.unregister() archipack_slab.unregister() archipack_fence.unregister() archipack_truss.unregister() # archipack_toolkit.unregister() archipack_floor.unregister() archipack_rendering.unregister() if HAS_POLYLIB: archipack_polylib.unregister() bpy.utils.unregister_class(archipack_data) del WindowManager.archipack for icons in icons_collection.values(): previews.remove(icons) icons_collection.clear() addon_updater_ops.unregister() # bpy.utils.unregister_module(__name__)
def register_property_groups(): bpy.utils.register_class(OverrideCustomProperty) Override.custom_properties = CollectionProperty(type=OverrideCustomProperty) bpy.utils.register_class(Override) bpy.types.Scene.overrides = CollectionProperty(type=Override)
def unregister_property_groups(): del bpy.types.Scene.overrides bpy.utils.unregister_class(OverrideCustomProperty) bpy.utils.unregister_class(Override) # ======================================================================================
def path_menu(self, searchpaths, operator, props_default={}): layout = self.layout # hard coded to set the operators 'filepath' to the filename. import os import bpy.utils layout = self.layout if not searchpaths[0]: layout.label("* Missing Paths *") # collect paths else: files = [] for directory in searchpaths: files.extend([(f, os.path.join(directory, f)) for f in os.listdir(directory)]) files.sort() for f, filepath in files: if f.startswith("."): continue preset_name = bpy.path.display_name(f) props = layout.operator(operator, text=preset_name) for attr, value in props_default.items(): setattr(props, attr, value) props.filepath = filepath if operator == "palette.load_gimp_palette": props.menu_idname = self.bl_idname
def register(): bpy.utils.register_module(__name__) bpy.types.Scene.palette_props = PointerProperty( type=PaletteProps, name="Palette Props", description="" ) pass
def register(): bpy.types.INFO_MT_file_export.append(menu_func) from bpy.utils import register_class for cls in classes: register_class(cls)
def unregister(): bpy.types.INFO_MT_file_export.remove(menu_func) from bpy.utils import unregister_class for cls in reversed(classes): unregister_class(cls)
def draw(self, context): self.path_menu( bpy.utils.script_paths("templates_py"), "text.open", props_default={"internal": True}, )
def draw(self, context): self.path_menu( bpy.utils.script_paths("templates_osl"), "text.open", props_default={"internal": True}, )
def draw_ex(self, context, *, use_splash=False, use_default=False, use_install=False): import os layout = self.layout # now draw the presets layout.operator_context = 'EXEC_DEFAULT' if use_default: props = layout.operator("wm.read_homefile", text="Default") props.use_splash = True props.app_template = "" layout.separator() template_paths = bpy.utils.app_template_paths() # expand template paths app_templates = [] for path in template_paths: for d in os.listdir(path): if d.startswith(("__", ".")): continue template = os.path.join(path, d) if os.path.isdir(template): # template_paths_expand.append(template) app_templates.append(d) for d in sorted(app_templates): props = layout.operator( "wm.read_homefile", text=bpy.path.display_name(d), ) props.use_splash = True props.app_template = d if use_install: layout.separator() layout.operator_context = 'INVOKE_DEFAULT' props = layout.operator("wm.app_template_install")
def is_user_addon(mod, user_addon_paths): import os if not user_addon_paths: for path in (bpy.utils.script_path_user(), bpy.utils.script_path_pref()): if path is not None: user_addon_paths.append(os.path.join(path, "addons")) for path in user_addon_paths: if bpy.path.is_subdir(mod.__file__, path): return True return False
def unregister(): from bpy.utils import unregister_class for mod in reversed(_modules_loaded): for cls in reversed(mod.classes): if cls.is_registered: unregister_class(cls) # Define a default UIList, when a list does not need any custom drawing... # Keep in sync with its #defined name in UI_interface.h
def register(): from bpy.utils import register_class for mod in _modules_loaded: for cls in mod.classes: register_class(cls)
def unregister(): from bpy.utils import unregister_class for mod in reversed(_modules_loaded): for cls in reversed(mod.classes): if cls.is_registered: unregister_class(cls)
def unregister(): from bpy.utils import unregister_class for cls in classes: unregister_class(cls)
def unregister(cls): """ Called from the top-level :func:`robot_designer_plugin.unregister` function in the ``__init__.py`` of the plugin. Removes all data collected during import. """ report = ['\n'] try: for class_ in cls._registered_classes: bpy.utils.unregister_class(class_) report.append("\t- class {0:35} in {1:40}".format(class_.__name__, "/".join(class_.__module__.split('.')[1:]))) for prop, extends in cls._registered_properties: bpy.utils.unregister_class(prop) if extends in (bpy.types.Object, bpy.types.Scene, bpy.types.Bone): delattr(extends, "RobotEditor") for prop in cls._registered_bools: delattr(bpy.types.Scene, prop) core_logger.info("\n".join(report)) if cls._bl_icons_dict: bpy.utils.previews.remove(cls._bl_icons_dict) except Exception as e: report.append("Error occured during clean up. You should restart blender!") core_logger.info("\n".join(report) + '\n') core_logger.error(EXCEPTION_MESSAGE, type(e).__name__, e, log_callstack(), log_callstack(back_trace=True)) cls._registered_classes.clear() cls._property_groups_to_register.clear() cls._registered_bools.clear()
def register(): global icons_collection icons = previews.new() icons_dir = os.path.join(os.path.dirname(__file__), "icons") for icon in os.listdir(icons_dir): name, ext = os.path.splitext(icon) icons.load(name, os.path.join(icons_dir, icon), 'IMAGE') icons_collection["main"] = icons archipack_progressbar.register() archipack_material.register() archipack_snap.register() archipack_manipulator.register() archipack_reference_point.register() archipack_autoboolean.register() archipack_door.register() archipack_window.register() archipack_stair.register() archipack_wall.register() archipack_wall2.register() archipack_roof.register() archipack_slab.register() archipack_fence.register() archipack_truss.register() # archipack_toolkit.register() archipack_floor.register() archipack_rendering.register() if HAS_POLYLIB: archipack_polylib.register() bpy.utils.register_class(archipack_data) WindowManager.archipack = PointerProperty(type=archipack_data) bpy.utils.register_class(Archipack_Pref) update_panel(None, bpy.context) bpy.utils.register_class(ARCHIPACK_create_menu) bpy.types.INFO_MT_mesh_add.append(menu_func) addon_updater_ops.register(bl_info)
def unregister(): global icons_collection bpy.types.INFO_MT_mesh_add.remove(menu_func) bpy.utils.unregister_class(ARCHIPACK_create_menu) bpy.utils.unregister_class(TOOLS_PT_Archipack_PolyLib) bpy.utils.unregister_class(TOOLS_PT_Archipack_Tools) bpy.utils.unregister_class(TOOLS_PT_Archipack_Create) bpy.utils.unregister_class(Archipack_Pref) # unregister subs archipack_progressbar.unregister() archipack_material.unregister() archipack_snap.unregister() archipack_manipulator.unregister() archipack_reference_point.unregister() archipack_autoboolean.unregister() archipack_door.unregister() archipack_window.unregister() archipack_stair.unregister() archipack_wall.unregister() archipack_wall2.unregister() archipack_roof.unregister() archipack_slab.unregister() archipack_fence.unregister() archipack_truss.unregister() # archipack_toolkit.unregister() archipack_floor.unregister() archipack_rendering.unregister() if HAS_POLYLIB: archipack_polylib.unregister() bpy.utils.unregister_class(archipack_data) del WindowManager.archipack for icons in icons_collection.values(): previews.remove(icons) icons_collection.clear() addon_updater_ops.unregister()
def path_menu(self, searchpaths, operator, props_default={}): layout = self.layout # hard coded to set the operators 'filepath' to the filename. import os import bpy.utils layout = self.layout if not searchpaths[0]: layout.label("* Missing Paths *") # collect paths else : files = [] for directory in searchpaths: files.extend([(f, os.path.join(directory, f)) for f in os.listdir(directory)]) files.sort() for f, filepath in files: if f.startswith("."): continue preset_name = bpy.path.display_name(f) props = layout.operator(operator, text=preset_name) for attr, value in props_default.items(): setattr(props, attr, value) props.filepath = filepath if operator == "palette.load_gimp_palette": props.menu_idname = self.bl_idname
def register(): bpy.utils.register_module(__name__) bpy.types.Scene.palette_props = PointerProperty( type=PaletteProps, name="Palette Props", description="") pass
def unregister(): bpy.utils.unregister_module(__name__) del bpy.types.Scene.palette_props pass
def register(): try: unregister() bpy.utils .register_class(ColoringPanel) bpy.utils .register_class(ColorCompartment) except: print("Can't register Coloring Panel!") print(traceback.format_exc())
def unregister(): try: bpy.utils .unregister_class(ColoringPanel) bpy.utils .unregister_class(ColorCompartment) except: pass
def register(): bpy.utils.register_module(__name__) bpy.types.INFO_MT_mesh_add.append(menu_func)
def unregister(): bpy.types.INFO_MT_mesh_add.remove(menu_func) bpy.utils.unregister_module(__name__)
def load_icon(): import os import bpy import bpy.utils try: # if anything goes wrong, for example because we are not running 2.75+ we just ignore it import bpy.utils.previews pcoll = bpy.utils.previews.new() # the path is calculated relative to this py file inside the addon folder my_icons_dir = os.path.join(os.path.dirname(__file__), "icons") # load a preview thumbnail of the circle icon pcoll.load("circle_icon", os.path.join(my_icons_dir, "circle32.png"), 'IMAGE') preview_collections['icons'] = pcoll except Exception as e: pass
def register(): load_icon() bpy.utils.register_module(__name__) bpy.types.VIEW3D_MT_object.append(menu_func)
def unregister(): bpy.utils.unregister_module(__name__) bpy.types.VIEW3D_MT_object.remove(menu_func) for pcoll in preview_collections.values(): bpy.utils.previews.remove(pcoll) preview_collections.clear()
def register(): from bpy.utils import register_class for mod in _modules_loaded: for cls in mod.classes: register_class(cls) # space_userprefs.py from bpy.props import StringProperty, EnumProperty from bpy.types import WindowManager def addon_filter_items(self, context): import addon_utils items = [('All', "All", "All Add-ons"), ('User', "User", "All Add-ons Installed by User"), ('Enabled', "Enabled", "All Enabled Add-ons"), ('Disabled', "Disabled", "All Disabled Add-ons"), ] items_unique = set() for mod in addon_utils.modules(refresh=False): info = addon_utils.module_bl_info(mod) items_unique.add(info["category"]) items.extend([(cat, cat, "") for cat in sorted(items_unique)]) return items WindowManager.addon_search = StringProperty( name="Search", description="Search within the selected filter", options={'TEXTEDIT_UPDATE'}, ) WindowManager.addon_filter = EnumProperty( items=addon_filter_items, name="Category", description="Filter add-ons by category", ) WindowManager.addon_support = EnumProperty( items=[('OFFICIAL', "Official", "Officially supported"), ('COMMUNITY', "Community", "Maintained by community developers"), ('TESTING', "Testing", "Newly contributed scripts (excluded from release builds)") ], name="Support", description="Display support level", default={'OFFICIAL', 'COMMUNITY'}, options={'ENUM_FLAG'}, ) # done...
def register(cls): """ Called from the top-level :func:`robot_designer_plugin.register` function in the ``__init__.py`` of the plugin. Registers all data collected during import. """ report = ['\n'] try: for class_, dependencies in cls._classes_to_register: bpy.utils.register_class(class_) report.append('\t+ class {0:35} in {1:40}'.format(class_.__name__, "/".join(class_.__module__.split('.')[1:]))) cls._registered_classes.append(class_) core_logger.info('Done') core_logger.debug("Properties: %s", cls._property_groups_to_register) for prop, extends in cls._property_groups_to_register: report.append("\t+ propery {0:33} {1:8} in {2:40}".format(prop.__name__, "(%s)" % extends.__name__ if extends else '', "/".join(prop.__module__.split('.')[1:]))) bpy.utils.register_class(prop) if extends in (bpy.types.Object, bpy.types.Scene, bpy.types.Bone): setattr(extends, 'RobotEditor', bpy.props.PointerProperty(type=getattr(bpy.types, prop.__name__))) cls._registered_properties.append((prop, extends)) for i in cls._property_fields.items(): print(i) for prop in cls._bools_to_register: setattr(bpy.types.Scene, prop, bpy.props.BoolProperty()) cls._registered_bools.append(prop) if cls._icons_to_register: cls._bl_icons_dict = bpy.utils.previews.new() for icon in cls._icons_to_register: report.append("\t+ icon {0:36} from {1:40}".format(icon[0], icon[1])) cls._bl_icons_dict.load(*icon) core_logger.info("\n".join(report)) except Exception as e: report.append("Error occured") core_logger.info("\n".join(report)) core_logger.error(EXCEPTION_MESSAGE, type(e).__name__, e, log_callstack(), log_callstack(back_trace=True)) cls.clear()