Fix #3757. Adding objects in offset models now correctly stores georeferenced coordinates.

This commit is contained in:
Dion Moult
2024-06-07 12:47:41 +10:00
parent 8f64ef4465
commit 698c648413
5 changed files with 13 additions and 3 deletions
@@ -748,6 +748,7 @@ class IfcImporter:
# positionally significant and is left alone. This handles
# scenarios where often spatial elements are left at 0,0,0 and
# everything else is at map coordinates.
obj.BIMObjectProperties.blender_offset_type = "NOT_APPLICABLE"
return mathutils.Matrix(matrix.tolist())
elif obj.data and obj.data.get("has_cartesian_point_offset", None):
obj.BIMObjectProperties.blender_offset_type = "CARTESIAN_POINT"
+1 -1
View File
@@ -441,7 +441,7 @@ class BIMObjectProperties(PropertyGroup):
collection: PointerProperty(type=bpy.types.Collection)
ifc_definition_id: IntProperty(name="IFC Definition ID")
blender_offset_type: EnumProperty(
items=[(o, o, "") for o in ["NONE", "OBJECT_PLACEMENT", "CARTESIAN_POINT"]],
items=[(o, o, "") for o in ["NONE", "OBJECT_PLACEMENT", "CARTESIAN_POINT", "NOT_APPLICABLE"]],
name="Blender Offset",
default="NONE",
)
@@ -33,6 +33,7 @@ def edit_object_placement(
return
geometry.clear_cache(element)
geometry.clear_scale(obj)
geometry.get_blender_offset_type(obj)
ifc.run("geometry.edit_object_placement", product=element, matrix=surveyor.get_absolute_matrix(obj))
geometry.record_object_position(obj)
+9 -1
View File
@@ -40,7 +40,7 @@ import blenderbim.bim.import_ifc
from math import radians, pi
from mathutils import Vector, Matrix
from blenderbim.bim.ifc import IfcStore
from typing import Union, Iterable
from typing import Union, Iterable, Optional
class Geometry(blenderbim.core.tool.Geometry):
@@ -982,3 +982,11 @@ class Geometry(blenderbim.core.tool.Geometry):
def delete_opening_object_placement(cls, placement):
model = tool.Ifc.get()
ifcopenshell.util.element.remove_deep2(model, placement)
@classmethod
def get_blender_offset_type(cls, obj: bpy.types.Object) -> Optional[str]:
props = bpy.context.scene.BIMGeoreferenceProperties
if props.has_blender_offset:
if (result := obj.BIMObjectProperties.blender_offset_type) == "NONE":
result = obj.BIMObjectProperties.blender_offset_type = "OBJECT_PLACEMENT"
return result
+1 -1
View File
@@ -28,7 +28,7 @@ class Surveyor(blenderbim.core.tool.Surveyor):
def get_absolute_matrix(cls, obj):
matrix = np.array(obj.matrix_world)
props = bpy.context.scene.BIMGeoreferenceProperties
if props.has_blender_offset and obj.BIMObjectProperties.blender_offset_type == "OBJECT_PLACEMENT":
if props.has_blender_offset and obj.BIMObjectProperties.blender_offset_type != "NOT_APPLICABLE":
unit_scale = ifcopenshell.util.unit.calculate_unit_scale(tool.Ifc.get())
matrix = np.array(
ifcopenshell.util.geolocation.local2global(