File size: 1,713 Bytes
340f198
 
 
b645147
340f198
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b645147
 
340f198
 
 
 
77529e7
340f198
 
b645147
 
340f198
77529e7
340f198
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import gradio as gr
from gradio.components import File as InputFile
from gradio.components import File as OutputFile
from gradio.components import Dataframe as OutputDataframe
from urllib.parse import urlparse
import ifcopenshell
import ifcopenshell.api
import pandas as pd

def getProps(ifc_file_path):

    ifc = ifcopenshell.open(ifc_file_path.name)

    # Get all entity types in the IFC file
    entity_types = ifc.types()

    ifcAll = []
    for entity_type in entity_types:
        # Get all entities of this type
        entities = ifc.by_type(entity_type)
        ifcAll.extend(entities)

    psetsColl = ifcopenshell.util.element.get_psets(ifc.by_type("IfcProject")[0])

    for element in ifcAll:
        psets = ifcopenshell.util.element.get_psets(element)
        psetsColl = {**psetsColl, **psets}
        psetsColl['General'] = {
            'GlobalId': "X", 
            'Name': "X"
        }

    for key in psetsColl:
        psetsColl[key] = {k: 'X' for k in psetsColl[key]}

    df = pd.DataFrame(psetsColl).transpose()
    df_transposed = df.transpose()

    df_transposed.to_excel(ifc_file_path.name.replace(".ifc", ".xlsx"), engine='openpyxl')

    df_transposed_reset = df_transposed.reset_index()
    return ifc_file_path.name.replace(".ifc", ".xlsx"), df_transposed_reset

iface = gr.Interface(
    fn=getProps, 
    inputs=[
        InputFile(label="Upload IFC File", file_count='single', file_types=[".ifc"]), 
    ],
    outputs=[
        OutputFile(label="Download XLSX"),
        OutputDataframe(label="IFC Property Sets")
    ],
    title="IFC Model Property Sets Extractor",
    description="Upload an IFC file to process and download the resulting XLSX file."
)

iface.launch()