mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-24 20:00:02 +00:00
You can now configure the distance limit for false origin offsets
This commit is contained in:
@@ -270,7 +270,9 @@ class IfcImporter:
|
|||||||
|
|
||||||
def is_point_far_away(self, point, is_meters=True):
|
def is_point_far_away(self, point, is_meters=True):
|
||||||
# Locations greater than 1km are not considered "small sites" according to the georeferencing guide
|
# Locations greater than 1km are not considered "small sites" according to the georeferencing guide
|
||||||
limit = 1000 if is_meters else (1000 / self.unit_scale)
|
# Users can configure this if they have to handle larger sites but beware of surveying precision
|
||||||
|
limit = self.ifc_import_settings.distance_limit
|
||||||
|
limit = limit if is_meters else (limit / self.unit_scale)
|
||||||
coords = point
|
coords = point
|
||||||
if hasattr(point, "Coordinates"):
|
if hasattr(point, "Coordinates"):
|
||||||
coords = point.Coordinates
|
coords = point.Coordinates
|
||||||
@@ -392,7 +394,7 @@ class IfcImporter:
|
|||||||
props = bpy.context.scene.BIMGeoreferenceProperties
|
props = bpy.context.scene.BIMGeoreferenceProperties
|
||||||
if props.has_blender_offset:
|
if props.has_blender_offset:
|
||||||
return
|
return
|
||||||
if self.ifc_import_settings.should_offset_model:
|
if self.ifc_import_settings.false_origin:
|
||||||
return self.set_manual_blender_offset()
|
return self.set_manual_blender_offset()
|
||||||
if self.file.schema == "IFC2X3":
|
if self.file.schema == "IFC2X3":
|
||||||
project = self.file.by_type("IfcProject")[0]
|
project = self.file.by_type("IfcProject")[0]
|
||||||
@@ -408,9 +410,9 @@ class IfcImporter:
|
|||||||
|
|
||||||
def set_manual_blender_offset(self):
|
def set_manual_blender_offset(self):
|
||||||
props = bpy.context.scene.BIMGeoreferenceProperties
|
props = bpy.context.scene.BIMGeoreferenceProperties
|
||||||
props.blender_eastings = str(self.ifc_import_settings.model_offset_coordinates[0])
|
props.blender_eastings = str(self.ifc_import_settings.false_origin[0])
|
||||||
props.blender_northings = str(self.ifc_import_settings.model_offset_coordinates[1])
|
props.blender_northings = str(self.ifc_import_settings.false_origin[1])
|
||||||
props.blender_orthogonal_height = str(self.ifc_import_settings.model_offset_coordinates[2])
|
props.blender_orthogonal_height = str(self.ifc_import_settings.false_origin[2])
|
||||||
props.has_blender_offset = True
|
props.has_blender_offset = True
|
||||||
|
|
||||||
def guess_georeferencing(self, element):
|
def guess_georeferencing(self, element):
|
||||||
@@ -1868,8 +1870,8 @@ class IfcImportSettings:
|
|||||||
self.should_clean_mesh = True
|
self.should_clean_mesh = True
|
||||||
self.deflection_tolerance = 0.001
|
self.deflection_tolerance = 0.001
|
||||||
self.angular_tolerance = 0.5
|
self.angular_tolerance = 0.5
|
||||||
self.should_offset_model = False
|
self.distance_limit = 1000
|
||||||
self.model_offset_coordinates = (0, 0, 0)
|
self.false_origin = None
|
||||||
self.has_filter = None
|
self.has_filter = None
|
||||||
self.should_filter_spatial_elements = True
|
self.should_filter_spatial_elements = True
|
||||||
self.elements = set()
|
self.elements = set()
|
||||||
@@ -1893,10 +1895,12 @@ class IfcImportSettings:
|
|||||||
settings.should_clean_mesh = props.should_clean_mesh
|
settings.should_clean_mesh = props.should_clean_mesh
|
||||||
settings.deflection_tolerance = props.deflection_tolerance
|
settings.deflection_tolerance = props.deflection_tolerance
|
||||||
settings.angular_tolerance = props.angular_tolerance
|
settings.angular_tolerance = props.angular_tolerance
|
||||||
settings.should_offset_model = props.should_offset_model
|
settings.distance_limit = props.distance_limit
|
||||||
settings.model_offset_coordinates = (
|
settings.false_origin = (
|
||||||
[float(o) for o in props.model_offset_coordinates.split(",")]
|
[float(o) for o in props.false_origin.split(",")]
|
||||||
if props.model_offset_coordinates
|
if props.false_origin
|
||||||
else (0, 0, 0)
|
else None
|
||||||
)
|
)
|
||||||
|
if settings.false_origin == [0, 0, 0]:
|
||||||
|
settings.false_origin = None
|
||||||
return settings
|
return settings
|
||||||
|
|||||||
@@ -132,10 +132,10 @@ class BIMProjectProperties(PropertyGroup):
|
|||||||
should_merge_by_material: BoolProperty(name="Import and Merge by Material", default=False)
|
should_merge_by_material: BoolProperty(name="Import and Merge by Material", default=False)
|
||||||
should_merge_materials_by_colour: BoolProperty(name="Import and Merge Materials by Colour", default=False)
|
should_merge_materials_by_colour: BoolProperty(name="Import and Merge Materials by Colour", default=False)
|
||||||
should_clean_mesh: BoolProperty(name="Import and Clean Mesh", default=True)
|
should_clean_mesh: BoolProperty(name="Import and Clean Mesh", default=True)
|
||||||
deflection_tolerance: FloatProperty(name="Import Deflection Tolerance", default=0.001)
|
deflection_tolerance: FloatProperty(name="Deflection Tolerance", default=0.001)
|
||||||
angular_tolerance: FloatProperty(name="Import Angular Tolerance", default=0.5)
|
angular_tolerance: FloatProperty(name="Angular Tolerance", default=0.5)
|
||||||
should_offset_model: BoolProperty(name="Import and Offset Model", default=False)
|
distance_limit: FloatProperty(name="Distance Limit", default=1000)
|
||||||
model_offset_coordinates: StringProperty(name="Model Offset Coordinates", default="0,0,0")
|
false_origin: StringProperty(name="False Origin", default="0,0,0")
|
||||||
links: CollectionProperty(name="Links", type=Link)
|
links: CollectionProperty(name="Links", type=Link)
|
||||||
active_link_index: IntProperty(name="Active Link Index")
|
active_link_index: IntProperty(name="Active Link Index")
|
||||||
export_schema: EnumProperty(items=get_export_schema, name="IFC Schema")
|
export_schema: EnumProperty(items=get_export_schema, name="IFC Schema")
|
||||||
|
|||||||
@@ -82,9 +82,9 @@ class BIM_PT_project(Panel):
|
|||||||
row = self.layout.row()
|
row = self.layout.row()
|
||||||
row.prop(pprops, "angular_tolerance")
|
row.prop(pprops, "angular_tolerance")
|
||||||
row = self.layout.row()
|
row = self.layout.row()
|
||||||
row.prop(pprops, "should_offset_model")
|
row.prop(pprops, "distance_limit")
|
||||||
row = self.layout.row()
|
row = self.layout.row()
|
||||||
row.prop(pprops, "model_offset_coordinates")
|
row.prop(pprops, "false_origin")
|
||||||
|
|
||||||
row = self.layout.row(align=True)
|
row = self.layout.row(align=True)
|
||||||
row.operator("bim.load_project_elements")
|
row.operator("bim.load_project_elements")
|
||||||
|
|||||||
@@ -269,16 +269,14 @@ Scenario: Load project elements - load with the spatial decomposition collection
|
|||||||
Scenario: Load project elements - manual offset of object placements
|
Scenario: Load project elements - manual offset of object placements
|
||||||
Given an empty Blender session
|
Given an empty Blender session
|
||||||
And I press "bim.load_project(filepath='{cwd}/test/files/manual-geolocation.ifc', is_advanced=True)"
|
And I press "bim.load_project(filepath='{cwd}/test/files/manual-geolocation.ifc', is_advanced=True)"
|
||||||
When I set "scene.BIMProjectProperties.should_offset_model" to "True"
|
When I set "scene.BIMProjectProperties.false_origin" to "268388500, 5774506000, 21900"
|
||||||
And I set "scene.BIMProjectProperties.model_offset_coordinates" to "268388500, 5774506000, 21900"
|
|
||||||
And I press "bim.load_project_elements"
|
And I press "bim.load_project_elements"
|
||||||
Then the object "IfcPlate/1780 x 270 PRECAST WALL" is at "0,0,0"
|
Then the object "IfcPlate/1780 x 270 PRECAST WALL" is at "0,0,0"
|
||||||
|
|
||||||
Scenario: Load project elements - manual offset of cartesian points
|
Scenario: Load project elements - manual offset of cartesian points
|
||||||
Given an empty Blender session
|
Given an empty Blender session
|
||||||
And I press "bim.load_project(filepath='{cwd}/test/files/manual-geolocation-coords.ifc', is_advanced=True)"
|
And I press "bim.load_project(filepath='{cwd}/test/files/manual-geolocation-coords.ifc', is_advanced=True)"
|
||||||
When I set "scene.BIMProjectProperties.should_offset_model" to "True"
|
When I set "scene.BIMProjectProperties.false_origin" to "1990711,5971553,22700"
|
||||||
And I set "scene.BIMProjectProperties.model_offset_coordinates" to "1990711,5971553,22700"
|
|
||||||
And I press "bim.load_project_elements"
|
And I press "bim.load_project_elements"
|
||||||
Then the object "IfcBuildingElementProxy/NAME" is at "0,0,0"
|
Then the object "IfcBuildingElementProxy/NAME" is at "0,0,0"
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user