chrisvnz's picture
Update app.py
77529e7
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()