mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-28 19:27:10 +00:00
Implement workaround when importing ProStructures files that aggregate elements of different types together
This commit is contained in:
@@ -437,6 +437,8 @@ class IfcImporter():
|
|||||||
self.ifc_import_settings.should_ignore_site_coordinates = True
|
self.ifc_import_settings.should_ignore_site_coordinates = True
|
||||||
if self.is_ifc_class_far_away('IfcBuilding'):
|
if self.is_ifc_class_far_away('IfcBuilding'):
|
||||||
self.ifc_import_settings.should_ignore_building_coordinates = True
|
self.ifc_import_settings.should_ignore_building_coordinates = True
|
||||||
|
elif 'prostructures' in applications[0].ApplicationFullName.lower():
|
||||||
|
self.ifc_import_settings.should_allow_non_element_aggregates = True
|
||||||
elif applications[0].ApplicationFullName.lower() == '12d model':
|
elif applications[0].ApplicationFullName.lower() == '12d model':
|
||||||
self.ifc_import_settings.should_reset_absolute_coordinates = True
|
self.ifc_import_settings.should_reset_absolute_coordinates = True
|
||||||
elif 'Civil 3D' in applications[0].ApplicationFullName:
|
elif 'Civil 3D' in applications[0].ApplicationFullName:
|
||||||
@@ -1599,8 +1601,16 @@ class IfcImporter():
|
|||||||
self.add_related_objects(collection, rel_aggregate.RelatedObjects)
|
self.add_related_objects(collection, rel_aggregate.RelatedObjects)
|
||||||
|
|
||||||
def create_aggregates(self):
|
def create_aggregates(self):
|
||||||
rel_aggregates = [a for a in self.file.by_type('IfcRelAggregates')
|
if self.ifc_import_settings.should_allow_non_element_aggregates:
|
||||||
if a.RelatingObject.is_a('IfcElement')]
|
if self.file.schema == 'IFC2X3':
|
||||||
|
rel_aggregates = [a for a in self.file.by_type('IfcRelAggregates')
|
||||||
|
if not a.RelatingObject.is_a('IfcSpatialStructureElement')]
|
||||||
|
else:
|
||||||
|
rel_aggregates = [a for a in self.file.by_type('IfcRelAggregates')
|
||||||
|
if not a.RelatingObject.is_a('IfcSpatialElement')]
|
||||||
|
else:
|
||||||
|
rel_aggregates = [a for a in self.file.by_type('IfcRelAggregates')
|
||||||
|
if a.RelatingObject.is_a('IfcElement')]
|
||||||
for collection in self.project['blender'].children:
|
for collection in self.project['blender'].children:
|
||||||
if collection.name == 'Aggregates':
|
if collection.name == 'Aggregates':
|
||||||
self.aggregate_collection = collection
|
self.aggregate_collection = collection
|
||||||
@@ -2135,6 +2145,7 @@ class IfcImportSettings:
|
|||||||
settings.should_merge_by_material = scene_bim.import_should_merge_by_material
|
settings.should_merge_by_material = scene_bim.import_should_merge_by_material
|
||||||
settings.should_merge_materials_by_colour = scene_bim.import_should_merge_materials_by_colour
|
settings.should_merge_materials_by_colour = scene_bim.import_should_merge_materials_by_colour
|
||||||
settings.should_clean_mesh = scene_bim.import_should_clean_mesh
|
settings.should_clean_mesh = scene_bim.import_should_clean_mesh
|
||||||
|
settings.should_allow_non_element_aggregates = scene_bim.import_should_allow_non_element_aggregates
|
||||||
settings.should_offset_model = scene_bim.import_should_offset_model
|
settings.should_offset_model = scene_bim.import_should_offset_model
|
||||||
settings.model_offset_coordinates = [float(o) for o in scene_bim.import_model_offset_coordinates.split(',')] if scene_bim.import_model_offset_coordinates else (0, 0, 0)
|
settings.model_offset_coordinates = [float(o) for o in scene_bim.import_model_offset_coordinates.split(',')] if scene_bim.import_model_offset_coordinates else (0, 0, 0)
|
||||||
settings.deflection_tolerance = scene_bim.import_deflection_tolerance
|
settings.deflection_tolerance = scene_bim.import_deflection_tolerance
|
||||||
|
|||||||
@@ -1216,6 +1216,7 @@ class BIMProperties(PropertyGroup):
|
|||||||
import_should_clean_mesh: BoolProperty(name="Import and Clean Mesh", default=True)
|
import_should_clean_mesh: BoolProperty(name="Import and Clean Mesh", default=True)
|
||||||
import_deflection_tolerance: FloatProperty(name="Import Deflection Tolerance", default=0.001)
|
import_deflection_tolerance: FloatProperty(name="Import Deflection Tolerance", default=0.001)
|
||||||
import_angular_tolerance: FloatProperty(name="Import Angular Tolerance", default=0.5)
|
import_angular_tolerance: FloatProperty(name="Import Angular Tolerance", default=0.5)
|
||||||
|
import_should_allow_non_element_aggregates: BoolProperty(name="Import Non-Element Aggregates", default=False)
|
||||||
import_should_offset_model: BoolProperty(name="Import and Offset Model", default=False)
|
import_should_offset_model: BoolProperty(name="Import and Offset Model", default=False)
|
||||||
import_model_offset_coordinates: StringProperty(name="Model Offset Coordinates", default='0,0,0')
|
import_model_offset_coordinates: StringProperty(name="Model Offset Coordinates", default='0,0,0')
|
||||||
qa_reject_element_reason: StringProperty(name="Element Rejection Reason")
|
qa_reject_element_reason: StringProperty(name="Element Rejection Reason")
|
||||||
|
|||||||
@@ -1756,6 +1756,8 @@ class BIM_PT_mvd(Panel):
|
|||||||
|
|
||||||
layout.label(text='ProStructures Workarounds:')
|
layout.label(text='ProStructures Workarounds:')
|
||||||
|
|
||||||
|
row = layout.row()
|
||||||
|
row.prop(bim_properties, 'import_should_allow_non_element_aggregates')
|
||||||
row = layout.row()
|
row = layout.row()
|
||||||
row.prop(bim_properties, 'import_should_offset_model')
|
row.prop(bim_properties, 'import_should_offset_model')
|
||||||
row = layout.row()
|
row = layout.row()
|
||||||
|
|||||||
Reference in New Issue
Block a user