mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-10 09:48:32 +00:00
Support export of people and organisations
This commit is contained in:
@@ -0,0 +1,13 @@
|
||||
[
|
||||
{
|
||||
"Name": "ACME",
|
||||
"Description": "Does everything",
|
||||
"Roles": [ { "Role": "ARCHITECT" } ],
|
||||
"Addresses": [{
|
||||
"Purpose": "OFFICE",
|
||||
"Description": "Headquarters",
|
||||
"ElectronicMailAddresses": ["acme@example.com"],
|
||||
"WWWHomePageURL": "https://example.com"
|
||||
}]
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,35 @@
|
||||
[
|
||||
{
|
||||
"Identification": "Moult",
|
||||
"FamilyName": "Moult",
|
||||
"GivenName": "Dion",
|
||||
"MiddleNames": ["Sebastian", "Isan", "Tan"],
|
||||
"PrefixTitles": ["Mr"],
|
||||
"SuffixTitles": ["UE"],
|
||||
"Roles": [{
|
||||
"Role": "ARCHITECT",
|
||||
"UserDefinedRole": null,
|
||||
"Description": "Draws the pretty pictures"
|
||||
}],
|
||||
"Addresses": [{
|
||||
"Purpose": "OFFICE",
|
||||
"Description": "Headquarters",
|
||||
"UserDefinedPurpose": null,
|
||||
"InternalLocation": "Cupboard under the stairs",
|
||||
"AddressLines": [ "221B Baker Street" ],
|
||||
"PostalBox": null,
|
||||
"Town": "MyTown",
|
||||
"Region": "Middle-Earth",
|
||||
"PostalCode": "42",
|
||||
"Country": "Narnia"
|
||||
}, {
|
||||
"Purpose": "OFFICE",
|
||||
"Description": "Headquarters",
|
||||
"UserDefinedPurpose": null,
|
||||
"TelephoneNumbers": ["0123456789"],
|
||||
"ElectronicMailAddresses": ["dion@thinkmoult.com"],
|
||||
"WWWHomePageURL": "https://thinkmoult.com",
|
||||
"MessagingIDs": ["irc://irc.freenode.net##architect"]
|
||||
}]
|
||||
}
|
||||
]
|
||||
@@ -98,6 +98,8 @@ class IfcParser():
|
||||
self.product_name_index_map = {}
|
||||
|
||||
self.units = {}
|
||||
self.people = []
|
||||
self.organisations = []
|
||||
self.psets = {}
|
||||
self.documents = {}
|
||||
self.classifications = []
|
||||
@@ -135,6 +137,8 @@ class IfcParser():
|
||||
def parse(self):
|
||||
self.units = self.get_units()
|
||||
self.unit_scale = self.get_unit_scale()
|
||||
self.people = self.get_people()
|
||||
self.organisations = self.get_organisations()
|
||||
self.convert_selected_objects_into_products(bpy.context.selected_objects)
|
||||
self.psets = self.get_psets()
|
||||
self.documents = self.get_documents()
|
||||
@@ -454,6 +458,14 @@ class IfcParser():
|
||||
}
|
||||
return results
|
||||
|
||||
def get_people(self):
|
||||
with open(self.data_dir + 'owner/person.json') as file:
|
||||
return json.load(file)
|
||||
|
||||
def get_organisations(self):
|
||||
with open(self.data_dir + 'owner/organisation.json') as file:
|
||||
return json.load(file)
|
||||
|
||||
def get_documents(self):
|
||||
documents = {}
|
||||
doc_path = self.data_dir + 'doc/'
|
||||
@@ -784,6 +796,8 @@ class IfcExporter():
|
||||
self.set_common_definitions()
|
||||
self.ifc_parser.parse()
|
||||
self.create_units()
|
||||
self.create_people()
|
||||
self.create_organisations()
|
||||
self.create_rep_context()
|
||||
self.create_project()
|
||||
self.create_documents()
|
||||
@@ -866,6 +880,42 @@ class IfcExporter():
|
||||
dimensional_exponents, '{}UNIT'.format(type.upper()),
|
||||
name, conversion_factor)
|
||||
|
||||
def create_people(self):
|
||||
for person in self.ifc_parser.people:
|
||||
if person['Roles']:
|
||||
person['Roles'] = self.create_roles(person['Roles'])
|
||||
if person['Addresses']:
|
||||
person['Addresses'] = self.create_addresses(person['Addresses'])
|
||||
self.file.create_entity('IfcPerson', **person)
|
||||
|
||||
def create_organisations(self):
|
||||
for organisation in self.ifc_parser.organisations:
|
||||
if organisation['Roles']:
|
||||
organisation['Roles'] = self.create_roles(organisation['Roles'])
|
||||
if organisation['Addresses']:
|
||||
organisation['Addresses'] = self.create_addresses(organisation['Addresses'])
|
||||
self.file.create_entity('IfcOrganization', **organisation)
|
||||
|
||||
def create_roles(self, roles):
|
||||
results = []
|
||||
for role in roles:
|
||||
results.append(self.file.create_entity('IfcActorRole', **role))
|
||||
return results
|
||||
|
||||
def create_addresses(self, addresses):
|
||||
results = []
|
||||
for address in addresses:
|
||||
is_postal_address = False
|
||||
for key in ['InternalLocation', 'AddressLines', 'PostalBox', 'Town',
|
||||
'Region', 'PostalCode', 'Country']:
|
||||
if key in address:
|
||||
is_postal_address = True
|
||||
if is_postal_address:
|
||||
results.append(self.file.create_entity('IfcPostalAddress', **address))
|
||||
else:
|
||||
results.append(self.file.create_entity('IfcTelecomAddress', **address))
|
||||
return results
|
||||
|
||||
def create_documents(self):
|
||||
for document in self.ifc_parser.documents.values():
|
||||
document['ifc'] = self.file.create_entity(
|
||||
|
||||
Reference in New Issue
Block a user