mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-28 19:27:10 +00:00
Only bundle Uniclass and Omniclass. Other systems can be downloaded online.
This commit is contained in:
File diff suppressed because it is too large
Load Diff
+12468
-12466
File diff suppressed because it is too large
Load Diff
@@ -1,63 +0,0 @@
|
|||||||
"""This script converts Graphisoft XML into an IFC file"""
|
|
||||||
|
|
||||||
import xml.etree.ElementTree as ET
|
|
||||||
import ifcopenshell
|
|
||||||
|
|
||||||
class IFC4Extractor:
|
|
||||||
def __init__(self, xml_file):
|
|
||||||
self.xml_file = xml_file
|
|
||||||
self.tree = ET.parse(self.xml_file)
|
|
||||||
self.root = self.tree.getroot()
|
|
||||||
self.ns = {'xs': 'http://www.w3.org/2001/XMLSchema'}
|
|
||||||
self.file = ifcopenshell.file()
|
|
||||||
self.source_map = {
|
|
||||||
'Uniclass 2015': 'RIBA Enterprises Ltd',
|
|
||||||
'OmniClass': 'OmniClass'
|
|
||||||
}
|
|
||||||
self.reference_tokens_map = {
|
|
||||||
'Uniclass 2015': ['_'],
|
|
||||||
'OmniClass': ['-', ' ']
|
|
||||||
}
|
|
||||||
|
|
||||||
def extract(self):
|
|
||||||
for system in self.tree.findall('Classification/System'):
|
|
||||||
parent = self.file.create_entity('IfcClassification', **{
|
|
||||||
'Source': self.source_map[system.find('Name').text],
|
|
||||||
'Edition': system.find('EditionVersion').text,
|
|
||||||
'EditionDate': self.get_edition_date(system),
|
|
||||||
'Name': system.find('Name').text,
|
|
||||||
'Description': system.find('Description').text,
|
|
||||||
'Location': system.find('Source').text,
|
|
||||||
'ReferenceTokens': self.reference_tokens_map[system.find('Name').text]
|
|
||||||
})
|
|
||||||
children = system.findall('Items/Item')
|
|
||||||
self.get_children(children, parent)
|
|
||||||
|
|
||||||
def get_children(self, children, parent):
|
|
||||||
for child in children:
|
|
||||||
reference = self.file.create_entity('IfcClassificationReference', **{
|
|
||||||
'Identification': child.find('ID').text,
|
|
||||||
'Name': child.find('Name').text,
|
|
||||||
'ReferencedSource': parent,
|
|
||||||
'Description': child.find('Description').text
|
|
||||||
})
|
|
||||||
children = child.find('Children')
|
|
||||||
if children:
|
|
||||||
self.get_children(children, reference)
|
|
||||||
|
|
||||||
def get_edition_date(self, system):
|
|
||||||
d = system.find('EditionDate')
|
|
||||||
return '{}-{:02}-{:02}'.format(
|
|
||||||
d.find('Year').text, int(d.find('Month').text), int(d.find('Day').text))
|
|
||||||
|
|
||||||
def export(self, filename):
|
|
||||||
self.file.write(filename)
|
|
||||||
|
|
||||||
filenames = [
|
|
||||||
'Uniclass2015_Jan2020',
|
|
||||||
'Omniclass_OCCS'
|
|
||||||
]
|
|
||||||
for filename in filenames:
|
|
||||||
extractor = IFC4Extractor(f'{filename}.xml')
|
|
||||||
extractor.extract()
|
|
||||||
extractor.export(f'{filename}.ifc')
|
|
||||||
Reference in New Issue
Block a user