def load_importer(self): self.ifc_file = tool.Ifc.get() self.logger = logging.getLogger("ImportIFC") ifc_import_settings = import_ifc.IfcImportSettings.factory( bpy.context, IfcStore.path, self.logger) self.ifc_importer = import_ifc.IfcImporter(ifc_import_settings) self.ifc_importer.file = self.ifc_file
def execute(self, context): self.props = context.scene.BIMProjectProperties self.file = IfcStore.get_file() start = time.time() logger = logging.getLogger("ImportIFC") path_log = os.path.join(context.scene.BIMProperties.data_dir, "process.log") if not os.access(context.scene.BIMProperties.data_dir, os.W_OK): path_log = os.path.join(tempfile.mkdtemp(), "process.log") logging.basicConfig( filename=path_log, filemode="a", level=logging.DEBUG, ) settings = import_ifc.IfcImportSettings.factory( context, context.scene.BIMProperties.ifc_file, logger) settings.has_filter = self.props.filter_mode != "NONE" settings.should_filter_spatial_elements = self.props.should_filter_spatial_elements if self.props.filter_mode == "DECOMPOSITION": settings.elements = self.get_decomposition_elements() elif self.props.filter_mode == "IFC_CLASS": settings.elements = self.get_ifc_class_elements() elif self.props.filter_mode == "WHITELIST": settings.elements = self.get_whitelist_elements() elif self.props.filter_mode == "BLACKLIST": settings.elements = self.get_blacklist_elements() settings.logger.info("Starting import") ifc_importer = import_ifc.IfcImporter(settings) ifc_importer.execute() settings.logger.info( "Import finished in {:.2f} seconds".format(time.time() - start)) print("Import finished in {:.2f} seconds".format(time.time() - start)) context.scene.BIMProjectProperties.is_loading = False return {"FINISHED"}
def import_material_from_ifc(self, element, context): self.file = IfcStore.get_file() logger = logging.getLogger("ImportIFC") ifc_import_settings = import_ifc.IfcImportSettings.factory( context, IfcStore.path, logger) ifc_importer = import_ifc.IfcImporter(ifc_import_settings) ifc_importer.file = self.file blender_material = ifc_importer.create_material(element) self.import_material_styles(blender_material, element, ifc_importer)
def load_ports(cls, ports): if not ports: return ifc_import_settings = import_ifc.IfcImportSettings.factory() ifc_importer = import_ifc.IfcImporter(ifc_import_settings) ifc_importer.file = tool.Ifc.get() ifc_importer.calculate_unit_scale() ports = set(ports) ports -= ifc_importer.create_products(ports) for port in ports or []: if tool.Ifc.get_object(port): continue ifc_importer.create_product(port) ifc_importer.place_objects_in_collections()
def _execute(self, context): logger = logging.getLogger("ImportIFC") self.ifc_import_settings = import_ifc.IfcImportSettings.factory( context, IfcStore.path, logger) self.file = IfcStore.get_file() element = self.file.by_id(int( context.scene.BIMDebugProperties.step_id)) settings = ifcopenshell.geom.settings() if self.should_include_curves: settings.set(settings.INCLUDE_CURVES, True) shape = ifcopenshell.geom.create_shape(settings, element) if shape: ifc_importer = import_ifc.IfcImporter(self.ifc_import_settings) ifc_importer.file = self.file mesh = ifc_importer.create_mesh(element, shape) else: mesh = None obj = bpy.data.objects.new("Debug", mesh) context.scene.collection.objects.link(obj) return {"FINISHED"}
def process(self): if not any(socket.is_linked for socket in self.outputs): return ifc_file = self.inputs['IFC'].sv_get(deepcopy=False)[0] if IfcStore.file: IfcStore.purge() IfcStore.file = ifc_file # delete any IfcProject/* collections for collection in bpy.data.collections: if re.match("^IfcProject/", collection.name): delete_collection(collection) # (re)build blender collections and geometry from IfcStore ifc_import_settings = import_ifc.IfcImportSettings.factory( bpy.context, "", logging.getLogger("ImportIFC")) ifc_importer = import_ifc.IfcImporter(ifc_import_settings) ifc_importer.execute() self.outputs['Status'].sv_set([True])
def import_type_from_ifc(self, element, context): self.file = IfcStore.get_file() logger = logging.getLogger("ImportIFC") ifc_import_settings = import_ifc.IfcImportSettings.factory( context, IfcStore.path, logger) type_collection = bpy.data.collections.get("Types") if not type_collection: type_collection = bpy.data.collections.new("Types") for collection in bpy.context.view_layer.layer_collection.children: if "IfcProject/" in collection.name: collection.collection.children.link(type_collection) collection.children["Types"].hide_viewport = True break ifc_importer = import_ifc.IfcImporter(ifc_import_settings) ifc_importer.file = self.file ifc_importer.type_collection = type_collection ifc_importer.material_creator.load_existing_materials() self.import_type_materials(element, ifc_importer) self.import_type_styles(element, ifc_importer) ifc_importer.create_type_product(element) ifc_importer.place_objects_in_collections()