Refactor context. See #1711.

This commit is contained in:
Dion Moult
2021-09-30 08:46:02 +10:00
parent beff90cd5e
commit 352a4866dd
7 changed files with 37 additions and 82 deletions
@@ -17,9 +17,8 @@
# along with BlenderBIM Add-on. If not, see <http://www.gnu.org/licenses/>. # along with BlenderBIM Add-on. If not, see <http://www.gnu.org/licenses/>.
import bpy import bpy
import ifcopenshell.api import blenderbim.tool as tool
import blenderbim.bim.tool import blenderbim.core.context as core
import blenderbim.core.context
from blenderbim.bim.ifc import IfcStore from blenderbim.bim.ifc import IfcStore
from ifcopenshell.api.context.data import Data from ifcopenshell.api.context.data import Data
@@ -36,12 +35,12 @@ class AddSubcontext(bpy.types.Operator):
return IfcStore.execute_ifc_operator(self, context) return IfcStore.execute_ifc_operator(self, context)
def _execute(self, context): def _execute(self, context):
blenderbim.core.context.AddContext( core.add_context(
blenderbim.bim.tool.Ifc, tool.Ifc(),
context=self.context or context.scene.BIMProperties.available_contexts, context=self.context or context.scene.BIMProperties.available_contexts,
subcontext=self.subcontext or context.scene.BIMProperties.available_subcontexts, subcontext=self.subcontext or context.scene.BIMProperties.available_subcontexts,
target_view=self.target_view or context.scene.BIMProperties.available_target_views, target_view=self.target_view or context.scene.BIMProperties.available_target_views,
).execute() )
Data.load(IfcStore.get_file()) Data.load(IfcStore.get_file())
return {"FINISHED"} return {"FINISHED"}
@@ -57,8 +56,6 @@ class RemoveSubcontext(bpy.types.Operator):
def _execute(self, context): def _execute(self, context):
self.file = IfcStore.get_file() self.file = IfcStore.get_file()
blenderbim.core.context.RemoveContext( core.remove_context(tool.Ifc(), context=self.file.by_id(self.ifc_definition_id))
blenderbim.bim.tool.Ifc, context=self.file.by_id(self.ifc_definition_id)
).execute()
Data.load(self.file) Data.load(self.file)
return {"FINISHED"} return {"FINISHED"}
+4 -21
View File
@@ -17,26 +17,9 @@
# along with BlenderBIM Add-on. If not, see <http://www.gnu.org/licenses/>. # along with BlenderBIM Add-on. If not, see <http://www.gnu.org/licenses/>.
class AddContext: def add_context(ifc, context=None, subcontext=None, target_view=None):
def __init__(self, ifc, context=None, subcontext=None, target_view=None): return ifc.run("context.add_context", context=context, subcontext=subcontext, target_view=target_view)
self.ifc = ifc
self.context = context
self.subcontext = subcontext
self.target_view = target_view
def execute(self):
return self.ifc.run(
"context.add_context",
context=self.context,
subcontext=self.subcontext,
target_view=self.target_view,
)
class RemoveContext: def remove_context(ifc, context=None):
def __init__(self, ifc, context=None): ifc.run("context.remove_context", context=context)
self.ifc = ifc
self.context = context
def execute(self):
self.ifc.run("context.remove_context", context=self.context)
+4
View File
@@ -0,0 +1,4 @@
[pytest]
markers =
context
owner
@@ -0,0 +1,14 @@
@context
Feature: Context
Manages geometric representation contexts and subcontexts
Scenario: Add subcontext
Given an empty IFC project
When I press "bim.add_subcontext(context='Model')"
Then nothing happens
Scenario: Remove subcontext
Given an empty IFC project
When the variable "context_id" is "IfcStore.get_file().by_type('IfcGeometricRepresentationContext')[0].id()"
And I press "bim.remove_subcontext(ifc_definition_id={context_id})"
Then nothing happens
@@ -1,3 +1,4 @@
@owner
Feature: Owner Feature: Owner
Covers ownership history, people, organisations, roles, and addresses. Covers ownership history, people, organisations, roles, and addresses.
@@ -1,40 +0,0 @@
# BlenderBIM Add-on - OpenBIM Blender Add-on
# Copyright (C) 2021 Dion Moult <dion@thinkmoult.com>
#
# This file is part of BlenderBIM Add-on.
#
# BlenderBIM Add-on is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# BlenderBIM Add-on 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with BlenderBIM Add-on. If not, see <http://www.gnu.org/licenses/>.
import test.bim.bootstrap
class TestAddSubcontext(test.bim.bootstrap.NewFile):
@test.bim.bootstrap.scenario
def test_adding_a_subcontext(self):
return """
Given an empty IFC project
When I press "bim.add_subcontext(context='Model')"
Then nothing interesting happens
"""
class TestRemoveSubcontext(test.bim.bootstrap.NewFile):
@test.bim.bootstrap.scenario
def test_removing_a_subcontext(self):
return """
Given an empty IFC project
And the variable "context_id" is "IfcStore.get_file().by_type('IfcGeometricRepresentationContext')[0].id()"
When I press "bim.remove_subcontext(ifc_definition_id={context_id})"
Then nothing interesting happens
"""
+8 -12
View File
@@ -16,23 +16,19 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with BlenderBIM Add-on. If not, see <http://www.gnu.org/licenses/>. # along with BlenderBIM Add-on. If not, see <http://www.gnu.org/licenses/>.
import blenderbim.core.context import blenderbim.core.context as subject
from test.core.bootstrap import Spec, subject, ifc, blender from test.core.bootstrap import ifc
@subject(blenderbim.core.context.AddContext) class TestAddContext:
class TestAddContext(Spec):
def test_adding_a_context(self, ifc): def test_adding_a_context(self, ifc):
self.construct_with(ifc, context="Model", subcontext="Body", target_view="MODEL_VIEW")
ifc.run( ifc.run(
"context.add_context", context="Model", subcontext="Body", target_view="MODEL_VIEW" "context.add_context", context="Model", subcontext="Body", target_view="MODEL_VIEW"
).should().be_called().return_with("context") ).should_be_called().will_return("context")
assert self.subject.execute() == "context" assert subject.add_context(ifc, context="Model", subcontext="Body", target_view="MODEL_VIEW") == "context"
@subject(blenderbim.core.context.RemoveContext) class TestRemoveContext:
class TestRemoveContext(Spec):
def test_removing_a_context(self, ifc): def test_removing_a_context(self, ifc):
self.construct_with(ifc, context="context") ifc.run("context.remove_context", context="context").should_be_called()
ifc.run("context.remove_context", context="context").should().be_called() subject.remove_context(ifc, context="context")
self.subject.execute()