mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-10 09:48:32 +00:00
#2224 You can now specify element offset / limit ranges when loading models
This commit is contained in:
@@ -314,14 +314,19 @@ class IfcImporter:
|
||||
self.settings_2d.set_context_ids(self.plan_contexts)
|
||||
|
||||
def process_element_filter(self):
|
||||
offset = self.ifc_import_settings.element_offset
|
||||
offset_limit = offset + self.ifc_import_settings.element_limit
|
||||
|
||||
if self.ifc_import_settings.has_filter:
|
||||
self.elements = set(self.ifc_import_settings.elements)
|
||||
self.elements = self.ifc_import_settings.elements
|
||||
# TODO: enable filtering for annotations
|
||||
self.annotations = set(self.file.by_type("IfcAnnotation"))
|
||||
else:
|
||||
self.elements = set(self.file.by_type("IfcElement"))
|
||||
self.elements = self.file.by_type("IfcElement")
|
||||
self.annotations = set(self.file.by_type("IfcAnnotation"))
|
||||
|
||||
self.elements = set(self.elements[offset:offset_limit])
|
||||
|
||||
if self.ifc_import_settings.has_filter and self.ifc_import_settings.should_filter_spatial_elements:
|
||||
self.spatial_elements = self.get_spatial_elements_filtered_by_elements(self.elements)
|
||||
else:
|
||||
@@ -366,7 +371,7 @@ class IfcImporter:
|
||||
return True
|
||||
|
||||
if not self.ifc_import_settings.should_use_native_meshes:
|
||||
return False # Performance improvements only occur on edge cases currently
|
||||
return False # Performance improvements only occur on edge cases currently
|
||||
|
||||
# FacetedBreps (without voids) are meshes. See #841.
|
||||
if self.is_native_faceted_brep(representations):
|
||||
@@ -1924,6 +1929,8 @@ class IfcImportSettings:
|
||||
self.angular_tolerance = 0.5
|
||||
self.distance_limit = 1000
|
||||
self.false_origin = None
|
||||
self.element_offset = 0
|
||||
self.element_limit = 30000
|
||||
self.has_filter = None
|
||||
self.should_filter_spatial_elements = True
|
||||
self.elements = set()
|
||||
@@ -1949,11 +1956,9 @@ class IfcImportSettings:
|
||||
settings.deflection_tolerance = props.deflection_tolerance
|
||||
settings.angular_tolerance = props.angular_tolerance
|
||||
settings.distance_limit = props.distance_limit
|
||||
settings.false_origin = (
|
||||
[float(o) for o in props.false_origin.split(",")]
|
||||
if props.false_origin
|
||||
else None
|
||||
)
|
||||
settings.false_origin = [float(o) for o in props.false_origin.split(",")] if props.false_origin else None
|
||||
if settings.false_origin == [0, 0, 0]:
|
||||
settings.false_origin = None
|
||||
settings.element_offset = props.element_offset
|
||||
settings.element_limit = props.element_limit
|
||||
return settings
|
||||
|
||||
@@ -495,6 +495,7 @@ class LoadProject(bpy.types.Operator, IFCFileSelector):
|
||||
return {"FINISHED"}
|
||||
context.scene.BIMProperties.ifc_file = self.filepath
|
||||
context.scene.BIMProjectProperties.is_loading = True
|
||||
context.scene.BIMProjectProperties.total_elements = len(tool.Ifc.get().by_type("IfcElement"))
|
||||
if not self.is_advanced:
|
||||
bpy.ops.bim.load_project_elements()
|
||||
return {"FINISHED"}
|
||||
|
||||
@@ -130,6 +130,7 @@ class BIMProjectProperties(PropertyGroup):
|
||||
name="Filter Mode",
|
||||
update=update_filter_mode,
|
||||
)
|
||||
total_elements: IntProperty(name="Total Elements", default=0)
|
||||
filter_categories: CollectionProperty(name="Filter Categories", type=FilterCategory)
|
||||
active_filter_category_index: IntProperty(name="Active Filter Category Index")
|
||||
filter_query: StringProperty(name="Filter Query")
|
||||
@@ -144,6 +145,8 @@ class BIMProjectProperties(PropertyGroup):
|
||||
angular_tolerance: FloatProperty(name="Angular Tolerance", default=0.5)
|
||||
distance_limit: FloatProperty(name="Distance Limit", default=1000)
|
||||
false_origin: StringProperty(name="False Origin", default="0,0,0")
|
||||
element_offset: IntProperty(name="Element Offset", default=0)
|
||||
element_limit: IntProperty(name="Element Offset", default=30000)
|
||||
links: CollectionProperty(name="Links", type=Link)
|
||||
active_link_index: IntProperty(name="Active Link Index")
|
||||
export_schema: EnumProperty(items=get_export_schema, name="IFC Schema")
|
||||
|
||||
@@ -54,7 +54,7 @@ class BIM_PT_project(Panel):
|
||||
row.prop(pprops, "filter_mode")
|
||||
if pprops.filter_mode in ["DECOMPOSITION", "IFC_CLASS", "IFC_TYPE"]:
|
||||
row = self.layout.row(align=True)
|
||||
row.alignment = "RIGHT"
|
||||
row.label(text=f"Total: {pprops.total_elements}")
|
||||
row.operator("bim.toggle_filter_categories", text="", icon="CHECKBOX_HLT").should_select = True
|
||||
row.operator("bim.toggle_filter_categories", text="", icon="CHECKBOX_DEHLT").should_select = False
|
||||
self.layout.template_list(
|
||||
@@ -91,6 +91,12 @@ class BIM_PT_project(Panel):
|
||||
row = self.layout.row()
|
||||
row.prop(pprops, "false_origin")
|
||||
|
||||
row = self.layout.row()
|
||||
row.label(text="Element Range")
|
||||
row = self.layout.row(align=True)
|
||||
row.prop(pprops, "element_offset", text="")
|
||||
row.prop(pprops, "element_limit", text="")
|
||||
|
||||
row = self.layout.row(align=True)
|
||||
row.operator("bim.load_project_elements")
|
||||
row.operator("bim.unload_project", text="", icon="CANCEL")
|
||||
|
||||
Reference in New Issue
Block a user