System Information
Operating system: Windows 10 Pro
Graphics card: NVidia GTX 1070 Ti
Blender Version
Broken:
(example: 2.80, edbf15d3c044, blender2.8, 2018-11-28, as found on the splash screen)
Worked: (optional)
Short description of error
When used from a plugin, operator that uses wm.invoke_props_popup(self, event) to draw(and change) properties from a property group attached to an object (constantly) crashes the app.
When same code is used from the blender scripting area, the app does not crash, but after initial change of the param, the property is grayed out(seems like a bug as well).
Error : EXCEPTION_ACCESS_VIOLATION
Address : 0x00007FF7DDBEA080
Module : c:\Blender28\program\blender.exe
The terminal process terminated with exit code: 11
Exact steps for others to reproduce the error
- Create a testing_grounds.py file
- Fill it with code provided below
- Install as an addon
- Select an object
- Launch the operator(through space, typing "TEZZT")
- Change the value of the property by clicking and dragging the value;
- Repeat step (6) a few times if the app hasn't crashed yet
bl_info = {
"name" : "TestingGrounds",
"author" : "ChieVFX",
"description" : "",
"blender" : (2, 80, 0),
"location" : "",
"warning" : "",
"category" : "Generic"
}
import bpy
class SomeParams(bpy.types.PropertyGroup):
float_value : bpy.props.FloatProperty()
class TestOp(bpy.types.Operator):
bl_idname="testing_ground.tezzt"
bl_label="TEZZT"
bl_options={'REGISTER', 'UNDO'}
def invoke(self, context, event):
wm = context.window_manager
return wm.invoke_props_popup(self, event)
def execute(self, context):
print("Im fine")
return {'FINISHED'}
def draw(self, context):
layout : bpy.types.UILayout = self.layout
obj = context.object
some_params = obj.some_params
layout.prop(some_params, "float_value", text="Prop popup test")
classes = [
SomeParams,
TestOp
]
def register():
for cls in classes:
bpy.utils.register_class(cls)
bpy.types.Object.some_params = bpy.props.PointerProperty(type=SomeParams)
def unregister():
for cls in classes:
bpy.utils.unregister_class(cls)
if __name__ == "__main__":
register()
bpy.ops.testing_ground.tezzt('INVOKE_DEFAULT')