diff --git a/src/blenderbim/blenderbim/bim/handler.py b/src/blenderbim/blenderbim/bim/handler.py index 515f3cf504..32723669e0 100644 --- a/src/blenderbim/blenderbim/bim/handler.py +++ b/src/blenderbim/blenderbim/bim/handler.py @@ -141,14 +141,12 @@ def get_application(ifc): for element in ifc.by_type("IfcApplication"): if element.ApplicationIdentifier == "BlenderBIM" and element.Version == version: return element - return ifc.create_entity( - "IfcApplication", - **{ - "ApplicationDeveloper": create_application_organisation(ifc), - "Version": get_application_version(), - "ApplicationFullName": "BlenderBIM Add-on", - "ApplicationIdentifier": "BlenderBIM", - }, + return ifcopenshell.api.run( + "owner.add_application", + ifc, + version=get_application_version(), + application_full_name="BlenderBIM Add-on", + application_identifier="BlenderBIM", ) @@ -165,46 +163,6 @@ def get_application_version(): ) -def create_application_organisation(ifc): - return ifc.create_entity( - "IfcOrganization", - **{ - "Name": "IfcOpenShell", - "Description": "IfcOpenShell is an open source (LGPL) software library that helps users and software developers to work with the IFC file format.", - "Roles": [ifc.create_entity("IfcActorRole", **{"Role": "USERDEFINED", "UserDefinedRole": "CONTRIBUTOR"})], - "Addresses": [ - ifc.create_entity( - "IfcTelecomAddress", - **{ - "Purpose": "USERDEFINED", - "UserDefinedPurpose": "WEBPAGE", - "Description": "The main webpage of the software collection.", - "WWWHomePageURL": "https://ifcopenshell.org", - }, - ), - ifc.create_entity( - "IfcTelecomAddress", - **{ - "Purpose": "USERDEFINED", - "UserDefinedPurpose": "WEBPAGE", - "Description": "The BlenderBIM Add-on webpage of the software collection.", - "WWWHomePageURL": "https://blenderbim.org", - }, - ), - ifc.create_entity( - "IfcTelecomAddress", - **{ - "Purpose": "USERDEFINED", - "UserDefinedPurpose": "REPOSITORY", - "Description": "The source code repository of the software collection.", - "WWWHomePageURL": "https://github.com/IfcOpenShell/IfcOpenShell.git", - }, - ), - ], - }, - ) - - @persistent def setDefaultProperties(scene): global global_subscription_owner diff --git a/src/ifcopenshell-python/ifcopenshell/api/owner/add_application.py b/src/ifcopenshell-python/ifcopenshell/api/owner/add_application.py index d8f35991e2..e1a9b1dd8f 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/owner/add_application.py +++ b/src/ifcopenshell-python/ifcopenshell/api/owner/add_application.py @@ -1,9 +1,68 @@ +import ifcopenshell.api + + class Usecase: def __init__(self, file, **settings): self.file = file - self.settings = {"attributes": None} + self.settings = { + "application_developer": None, + "version": "0.6.0", + "application_full_name": "IfcOpenShell", + "application_identifier": "IfcOpenShell", + } for key, value in settings.items(): self.settings[key] = value def execute(self): - return self.file.create_entity("IfcApplication", **self.settings["attributes"]) + if not self.settings["application_developer"]: + self.settings["application_developer"] = self.create_application_organisation() + return self.file.create_entity( + "IfcApplication", + **{ + "ApplicationDeveloper": self.settings["application_developer"], + "Version": self.settings["version"], + "ApplicationFullName": self.settings["application_full_name"], + "ApplicationIdentifier": self.settings["application_identifier"], + }, + ) + + def create_application_organisation(self): + return self.file.create_entity( + "IfcOrganization", + **{ + "Name": "IfcOpenShell", + "Description": "IfcOpenShell is an open source (LGPL) software library that helps users and software developers to work with the IFC file format.", + "Roles": [ + self.file.create_entity("IfcActorRole", **{"Role": "USERDEFINED", "UserDefinedRole": "CONTRIBUTOR"}) + ], + "Addresses": [ + self.file.create_entity( + "IfcTelecomAddress", + **{ + "Purpose": "USERDEFINED", + "UserDefinedPurpose": "WEBPAGE", + "Description": "The main webpage of the software collection.", + "WWWHomePageURL": "https://ifcopenshell.org", + }, + ), + self.file.create_entity( + "IfcTelecomAddress", + **{ + "Purpose": "USERDEFINED", + "UserDefinedPurpose": "WEBPAGE", + "Description": "The BlenderBIM Add-on webpage of the software collection.", + "WWWHomePageURL": "https://blenderbim.org", + }, + ), + self.file.create_entity( + "IfcTelecomAddress", + **{ + "Purpose": "USERDEFINED", + "UserDefinedPurpose": "REPOSITORY", + "Description": "The source code repository of the software collection.", + "WWWHomePageURL": "https://github.com/IfcOpenShell/IfcOpenShell.git", + }, + ), + ], + }, + ) diff --git a/src/ifcopenshell-python/ifcopenshell/api/owner/settings.py b/src/ifcopenshell-python/ifcopenshell/api/owner/settings.py index 9b63baec04..92ff983ad0 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/owner/settings.py +++ b/src/ifcopenshell-python/ifcopenshell/api/owner/settings.py @@ -2,12 +2,15 @@ def get_person(ifc): - return ifc.by_type("IfcPerson")[0] + people = ifc.by_type("IfcPerson") or [None] + return people [0] def get_organisation(ifc): - return ifc.by_type("IfcOrganization")[0] + organisations = ifc.by_type("IfcOrganization") or [None] + return organisations[0] def get_application(ifc): - return ifc.by_type("IfcApplication")[0] + applications = ifc.by_type("IfcApplication") or [None] + return applications[0]