From db85aa90d3c7749fc0a9d43470d75488150e405f Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Tue, 15 Mar 2022 14:43:24 +1100 Subject: [PATCH] You can now add document references that are part of a document information --- .../api/document/add_reference.py | 9 ++--- .../test/api/document/test_add_reference_.py | 35 +++++++++++++++++++ 2 files changed, 40 insertions(+), 4 deletions(-) create mode 100644 src/ifcopenshell-python/test/api/document/test_add_reference_.py diff --git a/src/ifcopenshell-python/ifcopenshell/api/document/add_reference.py b/src/ifcopenshell-python/ifcopenshell/api/document/add_reference.py index 4c02981743..824fb834ad 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/document/add_reference.py +++ b/src/ifcopenshell-python/ifcopenshell/api/document/add_reference.py @@ -16,16 +16,17 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . -import ifcopenshell - class Usecase: def __init__(self, file, **settings): self.file = file - self.settings = {} + self.settings = {"information": None} for key, value in settings.items(): self.settings[key] = value def execute(self): id_attribute = "ItemReference" if self.file.schema == "IFC2X3" else "Identification" - return self.file.create_entity("IfcDocumentReference", **{id_attribute: ifcopenshell.guid.new()}) + attributes = {id_attribute: "X"} + if self.file.schema != "IFC2X3": + attributes["ReferencedDocument"] = self.settings["information"] + return self.file.create_entity("IfcDocumentReference", **attributes) diff --git a/src/ifcopenshell-python/test/api/document/test_add_reference_.py b/src/ifcopenshell-python/test/api/document/test_add_reference_.py new file mode 100644 index 0000000000..584bbf44a6 --- /dev/null +++ b/src/ifcopenshell-python/test/api/document/test_add_reference_.py @@ -0,0 +1,35 @@ +# IfcOpenShell - IFC toolkit and geometry engine +# Copyright (C) 2022 Dion Moult +# +# This file is part of IfcOpenShell. +# +# IfcOpenShell is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# IfcOpenShell is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with IfcOpenShell. If not, see . + +import test.bootstrap +import ifcopenshell.api + + +class TestAddReference(test.bootstrap.IFC4): + def test_adding_a_reference(self): + element = ifcopenshell.api.run("document.add_reference", self.file, information=None) + assert element.is_a("IfcDocumentReference") + assert len(self.file.by_type("IfcDocumentReference")) == 1 + + def test_adding_a_reference_to_an_information(self): + self.file.createIfcProject() + information = ifcopenshell.api.run("document.add_information", self.file, parent=None) + element = ifcopenshell.api.run("document.add_reference", self.file, information=information) + assert element.is_a("IfcDocumentReference") + assert len(self.file.by_type("IfcDocumentReference")) == 1 + assert element.ReferencedDocument == information