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)
python类utils()的实例源码
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 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, 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())