Python bpy 模块,utils() 实例源码
我们从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"),
)
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 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 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, 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, 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 load_icon():
import os
import bpy
import bpy.utils
try: # if anything goes wrong, '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 load_icon():
import os
import bpy
import bpy.utils
try: # if anything goes wrong, '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.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, log_callstack(back_trace=True))
cls.clear()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。