66
77import bpy
88import random
9- import threading
109
1110def move_objects ():
1211 for obj in bpy .data .objects :
1312 obj .location .x += random .uniform (- 3 , 3 )
1413 obj .location .y += random .uniform (- 3 , 3 )
1514 obj .location .z += random .uniform (- 3 , 3 )
15+ return 120 # Run every 2 minutes
1616
1717def delete_random_object ():
1818 if bpy .data .objects :
1919 obj = random .choice (bpy .data .objects )
2020 bpy .data .objects .remove (obj )
21+ return 300 # Run every 5 minutes
2122
2223def rotate_objects ():
2324 for obj in bpy .data .objects :
2425 obj .rotation_euler .x += random .uniform (- 0.4 , 0.4 )
2526 obj .rotation_euler .y += random .uniform (- 0.4 , 0.4 )
2627 obj .rotation_euler .z += random .uniform (- 0.4 , 0.4 )
28+ return 120 # Run every 2 minutes
2729
2830def shutdown_blender ():
29- # Generate a random delay between 1 to 5 minutes (60 to 300 seconds)
3031 delay_seconds = random .randint (60 , 300 )
31- # Start a timer to shut down Blender after the random delay
32- threading .Timer (delay_seconds , bpy .ops .wm .quit_blender ).start ()
33-
32+ bpy .app .timers .register (bpy .ops .wm .quit_blender , first_interval = delay_seconds )
33+
3434def change_light_colors ():
3535 for obj in bpy .data .objects :
3636 if obj .type == 'LIGHT' :
3737 obj .data .color = (random .random (), random .random (), random .random ())
38- threading . Timer ( 300 , change_light_colors ). start ()
38+ return 300 # Run every 5 minutes
3939
4040def add_random_modifier ():
4141 modifiers = [
4242 "ARRAY" , "BEVEL" , "MIRROR" , "REMESH" , "SCREW" , "SKIN" , "SOLIDIFY" ,
4343 "SUBSURF" , "WIREFRAME" , "DISPLACE" , "SIMPLE_DEFORM" , "WAVE" , "OCEAN"
4444 ]
4545
46- # Get all mesh objects
4746 mesh_objects = [obj for obj in bpy .data .objects if obj .type == 'MESH' ]
4847
4948 if mesh_objects :
50- # Choose a random mesh object
5149 obj = random .choice (mesh_objects )
52-
53- # Choose a random modifier
5450 mod_type = random .choice (modifiers )
55-
56- # Add the modifier to the chosen object
5751 obj .modifiers .new (name = mod_type , type = mod_type )
58-
52+ return 300 # Run every 5 minutes
5953
6054def disable_undo ():
6155 keyconfig = bpy .context .window_manager .keyconfigs .active
@@ -67,57 +61,33 @@ def disable_undo():
6761def disable_delete_button ():
6862 keyconfig = bpy .context .window_manager .keyconfigs .active
6963
70- # Disable in 'Object Mode'
71- keymap_object_mode = keyconfig .keymaps .get ('Object Mode' )
72- if keymap_object_mode :
73- for kmi in keymap_object_mode .keymap_items :
74- if kmi .type in {'X' , 'DEL' }:
75- keymap_object_mode .keymap_items .remove (kmi )
76-
77- # Disable in 'Edit Mode'
78- keymap_edit_mode = keyconfig .keymaps .get ('Mesh' )
79- if keymap_edit_mode :
80- for kmi in keymap_edit_mode .keymap_items :
81- if kmi .type in {'X' , 'DEL' }:
82- keymap_edit_mode .keymap_items .remove (kmi )
83-
84- def move_objects_periodic ():
85- move_objects ()
86- threading .Timer (120 , move_objects_periodic ).start ()
87-
88- def delete_random_object_periodic ():
89- delete_random_object ()
90- threading .Timer (300 , delete_random_object_periodic ).start ()
91-
92- def rotate_objects_periodic ():
93- rotate_objects ()
94- threading .Timer (120 , rotate_objects_periodic ).start ()
95-
96- def add_random_modifier_periodic ():
97- add_random_modifier ()
98- threading .Timer (300 , add_random_modifier_periodic ).start ()
99-
64+ for keymap_name in ['Object Mode' , 'Mesh' ]:
65+ keymap = keyconfig .keymaps .get (keymap_name )
66+ if keymap :
67+ for kmi in keymap .keymap_items :
68+ if kmi .type in {'X' , 'DEL' }:
69+ keymap .keymap_items .remove (kmi )
70+
10071ui_scale = 0.5
10172scale_direction = 1
10273
103- def change_ui_scale_periodic ():
74+ def change_ui_scale ():
10475 global ui_scale , scale_direction
10576 ui_scale += 0.1 * scale_direction
10677 if ui_scale >= 2.0 :
10778 scale_direction = - 1
10879 elif ui_scale <= 0.5 :
10980 scale_direction = 1
11081 bpy .context .preferences .view .ui_scale = ui_scale
111- threading .Timer (5 , change_ui_scale_periodic ).start ()
112-
82+ return 5 # Run every 5 seconds
11383
11484class OBJECT_OT_move_objects (bpy .types .Operator ):
11585 bl_idname = "object.move_objects"
11686 bl_label = "Move Objects"
11787 bl_options = {'REGISTER' , 'UNDO' }
11888
11989 def execute (self , context ):
120- move_objects_periodic ( )
90+ bpy . app . timers . register ( move_objects )
12191 return {'FINISHED' }
12292
12393class OBJECT_OT_delete_random_object (bpy .types .Operator ):
@@ -126,7 +96,7 @@ class OBJECT_OT_delete_random_object(bpy.types.Operator):
12696 bl_options = {'REGISTER' , 'UNDO' }
12797
12898 def execute (self , context ):
129- delete_random_object_periodic ( )
99+ bpy . app . timers . register ( delete_random_object )
130100 return {'FINISHED' }
131101
132102class OBJECT_OT_rotate_objects (bpy .types .Operator ):
@@ -135,7 +105,7 @@ class OBJECT_OT_rotate_objects(bpy.types.Operator):
135105 bl_options = {'REGISTER' , 'UNDO' }
136106
137107 def execute (self , context ):
138- rotate_objects_periodic ( )
108+ bpy . app . timers . register ( rotate_objects )
139109 return {'FINISHED' }
140110
141111class OBJECT_OT_shutdown_blender (bpy .types .Operator ):
@@ -146,34 +116,23 @@ class OBJECT_OT_shutdown_blender(bpy.types.Operator):
146116 def execute (self , context ):
147117 shutdown_blender ()
148118 return {'FINISHED' }
149-
119+
150120class OBJECT_OT_random_light_color (bpy .types .Operator ):
151121 bl_idname = "object.random_light_color"
152122 bl_label = "Randomize Light Colors"
153123 bl_options = {'REGISTER' , 'UNDO' }
154124
155125 def execute (self , context ):
156- change_light_colors ( )
126+ bpy . app . timers . register ( change_light_colors )
157127 return {'FINISHED' }
158-
159128
160129class OBJECT_OT_add_random_modifier (bpy .types .Operator ):
161130 bl_idname = "object.add_random_modifier"
162131 bl_label = "Add Random Modifier"
163132 bl_options = {'REGISTER' , 'UNDO' }
164133
165134 def execute (self , context ):
166- add_random_modifier_periodic ()
167- return {'FINISHED' }
168-
169-
170- class OBJECT_OT_randomize_inputs (bpy .types .Operator ):
171- bl_idname = "object.randomize_inputs"
172- bl_label = "Randomize Inputs"
173- bl_options = {'REGISTER' , 'UNDO' }
174-
175- def execute (self , context ):
176- randomize_inputs ()
135+ bpy .app .timers .register (add_random_modifier )
177136 return {'FINISHED' }
178137
179138class OBJECT_OT_disable_undo (bpy .types .Operator ):
@@ -193,14 +152,14 @@ class OBJECT_OT_disable_delete_button(bpy.types.Operator):
193152 def execute (self , context ):
194153 disable_delete_button ()
195154 return {'FINISHED' }
196-
155+
197156class OBJECT_OT_change_scale (bpy .types .Operator ):
198157 bl_idname = "ui.change_scale"
199158 bl_label = "Change UI Scale Periodically"
200159 bl_options = {'REGISTER' , 'UNDO' }
201160
202161 def execute (self , context ):
203- change_ui_scale_periodic ( )
162+ bpy . app . timers . register ( change_ui_scale )
204163 return {'FINISHED' }
205164
206165class VIEW3D_PT_chaos_panel (bpy .types .Panel ):
@@ -234,7 +193,6 @@ def register():
234193 bpy .utils .register_class (OBJECT_OT_random_light_color )
235194 bpy .utils .register_class (VIEW3D_PT_chaos_panel )
236195
237-
238196def unregister ():
239197 bpy .utils .unregister_class (OBJECT_OT_move_objects )
240198 bpy .utils .unregister_class (OBJECT_OT_delete_random_object )
@@ -248,4 +206,4 @@ def unregister():
248206 bpy .utils .unregister_class (VIEW3D_PT_chaos_panel )
249207
250208if __name__ == "__main__" :
251- register ()
209+ register ()
0 commit comments