From fca90e9b0f43cb20f31ff6429f697cf6843962f3 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 8 Sep 2023 17:08:33 +0500 Subject: [PATCH] automatically adjust viewport camera on loading ifc It will make sure you'll be able to see the project's elements in viewport when it's loaded (same way as if you'd select all objects and hit "Numpad ."). Couldn't find any way to make it work without enablging / disabling selection - https://projects.blender.org/blender/blender/issues/112141 --- src/blenderbim/blenderbim/bim/import_ifc.py | 8 ++++++++ src/blenderbim/blenderbim/tool/blender.py | 3 ++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/blenderbim/blenderbim/bim/import_ifc.py b/src/blenderbim/blenderbim/bim/import_ifc.py index 5c20aea10c..f235f652d0 100644 --- a/src/blenderbim/blenderbim/bim/import_ifc.py +++ b/src/blenderbim/blenderbim/bim/import_ifc.py @@ -318,6 +318,7 @@ class IfcImporter: self.profile_code("Merging by colour") self.set_default_context() self.profile_code("Setting default context") + self.setup_viewport_camera() self.update_progress(100) bpy.context.window_manager.progress_end() @@ -1913,6 +1914,13 @@ class IfcImporter: obj.matrix_world = matrix_world tool.Geometry.record_object_position(obj) + def setup_viewport_camera(self): + context_override = tool.Blender.get_viewport_context() + with bpy.context.temp_override(**context_override): + bpy.ops.object.select_all(action="SELECT") + bpy.ops.view3d.view_selected() + bpy.ops.object.select_all(action="DESELECT") + class IfcImportSettings: def __init__(self): diff --git a/src/blenderbim/blenderbim/tool/blender.py b/src/blenderbim/blenderbim/tool/blender.py index 6f6bbd3628..20f825ab25 100644 --- a/src/blenderbim/blenderbim/tool/blender.py +++ b/src/blenderbim/blenderbim/tool/blender.py @@ -167,7 +167,8 @@ class Blender: when in real life you can have a couple of those but should work for the most cases. """ area = next(area for area in bpy.context.screen.areas if area.type == "VIEW_3D") - context_override = {"area": area} + region = next(region for region in area.regions if region.type == "WINDOW") + context_override = {"area": area, "region": region} return context_override @classmethod