diff --git a/src/ifcopenshell-python/ifcopenshell/api/owner/add_actor.py b/src/ifcopenshell-python/ifcopenshell/api/owner/add_actor.py new file mode 100644 index 0000000000..eb413ca2c2 --- /dev/null +++ b/src/ifcopenshell-python/ifcopenshell/api/owner/add_actor.py @@ -0,0 +1,34 @@ +# 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 ifcopenshell +import ifcopenshell.api + + +class Usecase: + def __init__(self, file, **settings): + self.file = file + self.settings = {"actor": None, "ifc_class": "IfcActor"} + for key, value in settings.items(): + self.settings[key] = value + + def execute(self): + actor = ifcopenshell.api.run("root.create_entity", self.file, ifc_class=self.settings["ifc_class"]) + actor.TheActor = self.settings["actor"] + return actor diff --git a/src/ifcopenshell-python/ifcopenshell/api/owner/edit_actor.py b/src/ifcopenshell-python/ifcopenshell/api/owner/edit_actor.py new file mode 100644 index 0000000000..9a854ca9e2 --- /dev/null +++ b/src/ifcopenshell-python/ifcopenshell/api/owner/edit_actor.py @@ -0,0 +1,29 @@ +# 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 . + + +class Usecase: + def __init__(self, file, **settings): + self.file = file + self.settings = {"actor": None, "attributes": {}} + for key, value in settings.items(): + self.settings[key] = value + + def execute(self): + for name, value in self.settings["attributes"].items(): + setattr(self.settings["actor"], name, value) diff --git a/src/ifcopenshell-python/ifcopenshell/api/owner/remove_actor.py b/src/ifcopenshell-python/ifcopenshell/api/owner/remove_actor.py new file mode 100644 index 0000000000..bfa3c3642a --- /dev/null +++ b/src/ifcopenshell-python/ifcopenshell/api/owner/remove_actor.py @@ -0,0 +1,30 @@ +# 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 ifcopenshell.api + + +class Usecase: + def __init__(self, file, **settings): + self.file = file + self.settings = {"actor": None} + for key, value in settings.items(): + self.settings[key] = value + + def execute(self): + self.file.remove(self.settings["actor"]) diff --git a/src/ifcopenshell-python/test/api/owner/test_add_actor.py b/src/ifcopenshell-python/test/api/owner/test_add_actor.py new file mode 100644 index 0000000000..0d9af85100 --- /dev/null +++ b/src/ifcopenshell-python/test/api/owner/test_add_actor.py @@ -0,0 +1,34 @@ +# 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 TestAddActor(test.bootstrap.IFC4): + def test_adding_an_actor(self): + person = self.file.createIfcPerson() + actor = ifcopenshell.api.run("owner.add_actor", self.file, ifc_class="IfcActor", actor=person) + assert actor.is_a() == "IfcActor" + assert actor.TheActor == person + + def test_adding_an_occupant(self): + person = self.file.createIfcPerson() + actor = ifcopenshell.api.run("owner.add_actor", self.file, ifc_class="IfcOccupant", actor=person) + assert actor.is_a() == "IfcOccupant" + assert actor.TheActor == person diff --git a/src/ifcopenshell-python/test/api/owner/test_edit_actor.py b/src/ifcopenshell-python/test/api/owner/test_edit_actor.py new file mode 100644 index 0000000000..94227a055e --- /dev/null +++ b/src/ifcopenshell-python/test/api/owner/test_edit_actor.py @@ -0,0 +1,54 @@ +# 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 TestEditActor(test.bootstrap.IFC4): + def test_editing_an_actor(self): + person = self.file.createIfcPerson() + actor = ifcopenshell.api.run("owner.add_actor", self.file, ifc_class="IfcActor", actor=person) + ifcopenshell.api.run( + "owner.edit_actor", + self.file, + actor=actor, + attributes={"Name": "Name", "Description": "Description", "ObjectType": "ObjectType"}, + ) + assert actor.Name == "Name" + assert actor.Description == "Description" + assert actor.ObjectType == "ObjectType" + + def test_editing_an_occupant(self): + person = self.file.createIfcPerson() + actor = ifcopenshell.api.run("owner.add_actor", self.file, ifc_class="IfcOccupant", actor=person) + ifcopenshell.api.run( + "owner.edit_actor", + self.file, + actor=actor, + attributes={ + "Name": "Name", + "Description": "Description", + "ObjectType": "ObjectType", + "PredefinedType": "TENANT", + }, + ) + assert actor.Name == "Name" + assert actor.Description == "Description" + assert actor.ObjectType == "ObjectType" + assert actor.PredefinedType == "TENANT" diff --git a/src/ifcopenshell-python/test/api/owner/test_remove_actor.py b/src/ifcopenshell-python/test/api/owner/test_remove_actor.py new file mode 100644 index 0000000000..7a068d3735 --- /dev/null +++ b/src/ifcopenshell-python/test/api/owner/test_remove_actor.py @@ -0,0 +1,28 @@ +# 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 TestRemoveActor(test.bootstrap.IFC4): + def test_removing_an_actor(self): + person = self.file.createIfcPerson() + actor = ifcopenshell.api.run("owner.add_actor", self.file, ifc_class="IfcActor", actor=person) + ifcopenshell.api.run("owner.remove_actor", self.file, actor=actor) + assert len(self.file.by_type("IfcActor")) == 0