Example #1
0
 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
Example #2
0
 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"}
Example #3
0
 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)
Example #4
0
 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()
Example #5
0
 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])
Example #7
0
    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()