def execute(self, context): package_name = __package__.split(".")[0] prefs = bpy.context.preferences.addons[package_name].preferences if not timers.is_registered(auto_evaluate_timer): timers.register(auto_evaluate_timer, persistent=True) prefs.auto_evaluation = True return {"FINISHED"}
def disable_kmi(cls, km_type='3D View', idname=None, type=None, value=None, alt=False, shift=False, ctrl=False, retries=3): if retries <= 0: raise ValueError("No matches or keymap wasn't ready") if not any((idname, type, value)): raise ValueError("Nothing to search for") kc = bpy.context.window_manager.keyconfigs.active km = kc.keymaps.get(km_type) if not km: raise KeyError("Keymap doesn't exist in active keyconfig") no_idname, no_type, no_value = not idname, not type, not value for kmi in km.keymap_items: if ((kmi.type == type or no_type) and (kmi.value == value or no_value) and (kmi.idname == idname or no_idname) and kmi.alt == alt and kmi.shift == shift and kmi.ctrl == ctrl): kmi.active = False if not hasattr(cls, "_disabled"): cls._disabled = [] return cls._disabled.append(kmi) from bpy.app.timers import register args = km_type, idname, type, value, alt, shift, ctrl, retries - 1 register(lambda: disable_kmi(*args), first_interval=0.2)
def register(): # register the classes for cls in classes_to_register: bpy.utils.register_class(cls) # add the property to the edit bones bpy.types.EditBone.editboneconstraint = bpy.props.PointerProperty( type=EditBoneConstraintProperties, name="Edit Bone Constraint Properties") # handle the keymap wm = bpy.context.window_manager km = wm.keyconfigs.addon.keymaps.new(name="3D View", space_type="VIEW_3D") kmi = km.keymap_items.new("editbone.constraint_add_with_targets", "C", "PRESS", ctrl=True, shift=True) addon_keymaps.append((km, kmi)) kmi = km.keymap_items.new("editbone.clear_constraints", "C", "PRESS", ctrl=True, alt=True) addon_keymaps.append((km, kmi)) # Timers if not timers.is_registered(auto_evaluate_timer): timers.register(auto_evaluate_timer, persistent=True)
def keymaps_ensure(register, keymaps): active = getattr(keymaps_ensure, "active", None) if active is None: active = bpy.context.window_manager.keyconfigs.active km = active.keymaps # All keymaps found, register addon. if all(km_name in km for km_name in keymaps): return register(ready=True) # If not ready, defer registration up to 30 times or roughly 6 seconds. elif setdefault(keymaps_ensure, "retries", 30) > 0: keymaps_ensure.retries -= 1 return defer_call(0.2, register) # If that fails, try default keyconfig as fallback. elif getattr(keymaps_ensure, "active", None) is None: kc = bpy.context.window_manager.keyconfigs keymaps_ensure.active = kc.default keymaps_ensure.retries = 30 return defer_call(0.2, register) # When all else fails, print the active keymap and what keymaps exist. else: print("Textension: Failed in finding default keymaps") for km_name in keymaps: if km_name not in km: print("Keymap %s missing in %s." % (km_name, kc.active.name)) print("Keymaps found:") print(km.keys())
def _update_cycles(): if timers.is_registered(_timer): global _again _again = True return global _first _first = True global _old _old = node().interpolation global _new if _old == 'Linear': _new = 'Cubic' else: _new = 'Linear' timers.register(_timer)
def defer_call(delay, func, *args, **kwargs): from bpy.app.timers import register register(lambda: func(*args, **kwargs), first_interval=delay)
def register(): for cls in classes: register_class(cls) nodeitems_utils.register_node_categories("AUDIONODES", node_categories) timers.register(handle_messages, first_interval=0.1, persistent=True)