diff --git a/src/blenderbim/blenderbim/bim/module/debug/operator.py b/src/blenderbim/blenderbim/bim/module/debug/operator.py index 4317e9f6b4..2656ef6171 100644 --- a/src/blenderbim/blenderbim/bim/module/debug/operator.py +++ b/src/blenderbim/blenderbim/bim/module/debug/operator.py @@ -378,10 +378,30 @@ class InspectFromObject(bpy.types.Operator): class PrintObjectPlacement(bpy.types.Operator): bl_idname = "bim.print_object_placement" bl_label = "Print Object Placement" + bl_options = {"REGISTER", "UNDO"} + bl_description = ( + "Print object placement to the system console.\n\n" + "ALT+CLICK create an empty object at that position" + ) step_id: bpy.props.IntProperty() + create_empty_object: bpy.props.BoolProperty(name="Create Empty Object", default=False, options={"SKIP_SAVE"}) + arrow_size: bpy.props.FloatProperty(name="Arrow Size", default=0.2, subtype="DISTANCE") + + def invoke(self, context, event): + # keep the viewport position on alt+click + # make sure to use SKIP_SAVE on property, otherwise it might get stuck + if event.type == "LEFTMOUSE" and event.alt: + self.create_empty_object = True + return self.execute(context) def execute(self, context): - print(ifcopenshell.util.placement.get_local_placement(IfcStore.get_file().by_id(self.step_id))) + placement = ifcopenshell.util.placement.get_local_placement(IfcStore.get_file().by_id(self.step_id)) + if self.create_empty_object: + bpy.ops.object.empty_add(type="ARROWS") + si_conversion = ifcopenshell.util.unit.calculate_unit_scale(tool.Ifc.get()) + context.active_object.matrix_world = placement.transpose() + context.active_object.matrix_world.translation *= si_conversion + context.active_object.empty_display_size = self.arrow_size + print(placement) return {"FINISHED"}