Add option to disable loading index maps #5848

As currently it might still might take too long
This commit is contained in:
Andrej730
2024-12-12 16:41:23 +05:00
parent ae61f28df7
commit e098a7c4fc
4 changed files with 24 additions and 5 deletions
+10 -2
View File
@@ -72,7 +72,8 @@ class MaterialCreator:
self.mesh = mesh self.mesh = mesh
self.obj = obj self.obj = obj
self.parsed_meshes.add(self.mesh.name) self.parsed_meshes.add(self.mesh.name)
self.load_texture_maps(shape_has_openings) if not self.ifc_import_settings.load_indexed_maps:
self.load_texture_maps(shape_has_openings)
self.assign_material_slots_to_faces() self.assign_material_slots_to_faces()
tool.Geometry.record_object_materials(obj) tool.Geometry.record_object_materials(obj)
del self.mesh["ios_materials"] del self.mesh["ios_materials"]
@@ -1069,7 +1070,12 @@ class IfcImporter:
verts = geometry.verts verts = geometry.verts
mesh["has_cartesian_point_offset"] = False mesh["has_cartesian_point_offset"] = False
return tool.Loader.convert_geometry_to_mesh(geometry, mesh, verts=verts) return tool.Loader.convert_geometry_to_mesh(
geometry,
mesh,
verts=verts,
load_indexed_maps=self.ifc_import_settings.load_indexed_maps,
)
except: except:
self.ifc_import_settings.logger.error("Could not create mesh for %s", element) self.ifc_import_settings.logger.error("Could not create mesh for %s", element)
import traceback import traceback
@@ -1155,6 +1161,7 @@ class IfcImportSettings:
self.context_settings: list[ifcopenshell.geom.main.settings] = [] self.context_settings: list[ifcopenshell.geom.main.settings] = []
self.gross_context_settings: list[ifcopenshell.geom.main.settings] = [] self.gross_context_settings: list[ifcopenshell.geom.main.settings] = []
self.elements: set[ifcopenshell.entity_instance] = set() self.elements: set[ifcopenshell.entity_instance] = set()
self.load_indexed_maps = False
@staticmethod @staticmethod
def factory(context=None, input_file=None, logger=None): def factory(context=None, input_file=None, logger=None):
@@ -1196,4 +1203,5 @@ class IfcImportSettings:
settings.element_limit_mode = props.element_limit_mode settings.element_limit_mode = props.element_limit_mode
settings.element_offset = props.element_offset settings.element_offset = props.element_offset
settings.element_limit = props.element_limit settings.element_limit = props.element_limit
settings.load_indexed_maps = props.load_indexed_maps
return settings return settings
@@ -217,6 +217,11 @@ class BIMProjectProperties(PropertyGroup):
) )
element_offset: IntProperty(name="Element Offset", default=0) element_offset: IntProperty(name="Element Offset", default=0)
element_limit: IntProperty(name="Element Offset", default=30000) element_limit: IntProperty(name="Element Offset", default=30000)
load_indexed_maps: BoolProperty(
name="Load Indexed Maps",
description="Load indexed maps (UV and color maps)",
default=True,
)
should_disable_undo_on_save: BoolProperty( should_disable_undo_on_save: BoolProperty(
name="Disable Undo When Saving (Faster saves, no undo for you!)", default=False name="Disable Undo When Saving (Faster saves, no undo for you!)", default=False
) )
@@ -173,6 +173,7 @@ class BIM_PT_project(Panel):
row.prop(pprops, "should_load_geometry") row.prop(pprops, "should_load_geometry")
row = self.layout.row() row = self.layout.row()
row.prop(pprops, "should_merge_materials_by_colour") row.prop(pprops, "should_merge_materials_by_colour")
self.layout.prop(pprops, "load_indexed_maps")
row = self.layout.row() row = self.layout.row()
row.prop(pprops, "geometry_library") row.prop(pprops, "geometry_library")
row = self.layout.row() row = self.layout.row()
+8 -3
View File
@@ -37,7 +37,7 @@ import numpy as np
import numpy.typing as npt import numpy.typing as npt
from mathutils import Vector, Matrix from mathutils import Vector, Matrix
from pathlib import Path from pathlib import Path
from typing import Union, Any from typing import Union, Any, Optional
# Progressively we'll refactor loading elements into Blender objects into this # Progressively we'll refactor loading elements into Blender objects into this
@@ -921,7 +921,12 @@ class Loader(bonsai.core.tool.Loader):
@classmethod @classmethod
def convert_geometry_to_mesh( def convert_geometry_to_mesh(
cls, geometry: ifcopenshell.geom.ShapeType, mesh: bpy.types.Mesh, verts=None cls,
geometry: ifcopenshell.geom.ShapeType,
mesh: bpy.types.Mesh,
verts: Optional[list[float]] = None,
*,
load_indexed_maps=True,
) -> bpy.types.Mesh: ) -> bpy.types.Mesh:
if verts is None: if verts is None:
verts = geometry.verts verts = geometry.verts
@@ -968,7 +973,7 @@ class Loader(bonsai.core.tool.Loader):
mesh.update() mesh.update()
rep_str: str = geometry.id rep_str: str = geometry.id
if "openings" not in rep_str: if load_indexed_maps and "openings" not in rep_str:
rep_id = rep_str.split("-", 1)[0] rep_id = rep_str.split("-", 1)[0]
rep = tool.Ifc.get().by_id(int(rep_id)) rep = tool.Ifc.get().by_id(int(rep_id))
# For now, not necessary to load maps in Item mode # For now, not necessary to load maps in Item mode