Support export of people and organisations

This commit is contained in:
Dion Moult
2019-11-15 15:44:04 +11:00
parent 396979954f
commit 9659de6ebf
3 changed files with 98 additions and 0 deletions
@@ -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(