Remove create project library ability, as you should create a project first

This commit is contained in:
Dion Moult
2021-09-08 13:41:36 +10:00
parent d026fcc900
commit 177d46b7b6
6 changed files with 35 additions and 58 deletions
@@ -22,7 +22,6 @@ from . import ui, prop, operator
classes = (
operator.CreateProject,
operator.CreateProjectLibrary,
operator.SelectLibraryFile,
operator.ChangeLibraryElement,
operator.RefreshLibrary,
@@ -96,46 +96,6 @@ class CreateProject(bpy.types.Operator):
IfcStore.file = data["file"]
class CreateProjectLibrary(bpy.types.Operator):
bl_idname = "bim.create_project_library"
bl_label = "Create Project Library"
bl_options = {"REGISTER", "UNDO"}
def execute(self, context):
IfcStore.begin_transaction(self)
IfcStore.add_transaction_operation(self, rollback=self.rollback, commit=lambda data: True)
result = self._execute(context)
self.transaction_data = {"file": self.file}
IfcStore.add_transaction_operation(self, rollback=lambda data: True, commit=self.commit)
IfcStore.end_transaction(self)
return result
def _execute(self, context):
self.file = IfcStore.get_file()
if self.file:
return {"FINISHED"}
IfcStore.file = ifcopenshell.api.run(
"project.create_file", **{"version": context.scene.BIMProperties.export_schema}
)
self.file = IfcStore.get_file()
if self.file.schema == "IFC2X3":
bpy.ops.bim.add_person()
bpy.ops.bim.add_organisation()
project_library = bpy.data.objects.new("My Project Library", None)
bpy.ops.bim.assign_class(obj=project_library.name, ifc_class="IfcProjectLibrary")
bpy.ops.bim.assign_unit()
return {"FINISHED"}
def rollback(self, data):
IfcStore.file = None
def commit(self, data):
IfcStore.file = data["file"]
class SelectLibraryFile(bpy.types.Operator):
bl_idname = "bim.select_library_file"
bl_label = "Select Library File"
@@ -112,9 +112,6 @@ class BIM_PT_project(Panel):
row.prop(props, "volume_unit", text="Volume Unit")
row = self.layout.row()
row.operator("bim.create_project")
if props.export_schema != "IFC2X3":
row = self.layout.row()
row.operator("bim.create_project_library")
class BIM_PT_project_library(Panel):
+11 -7
View File
@@ -33,7 +33,6 @@ class NewFile:
def scenario(function):
def subfunction(self):
run(function(self))
return subfunction
@@ -45,7 +44,7 @@ def i_add_a_cube():
bpy.ops.mesh.primitive_cube_add()
def the_object_named_name_is_selected(name):
def the_object_name_is_selected(name):
obj = bpy.context.scene.objects.get(name)
if not obj:
assert False, 'The object "{name}" could not be selected'
@@ -62,7 +61,7 @@ def i_press_operator(operator):
exec(f"bpy.ops.{operator}()")
def the_object_named_name_exists(name):
def the_object_name_exists(name):
obj = bpy.data.objects.get(name)
if not obj:
assert False, f'The object "{name}" does not exist'
@@ -76,19 +75,24 @@ def an_ifc_file_exists():
return ifc
def the_object_named_name_is_an_ifc_class(name, ifc_class):
def the_object_name_is_an_ifc_class(name, ifc_class):
ifc = an_ifc_file_exists()
element = ifc.by_id(the_object_named_name_exists(name).BIMObjectProperties.ifc_definition_id)
element = ifc.by_id(the_object_name_exists(name).BIMObjectProperties.ifc_definition_id)
assert element.is_a(ifc_class), f'Object "{name}" is a {element.is_a()}'
def the_object_name_is_in_the_collection_collection(name, collection):
assert collection in [c.name for c in the_object_name_exists(name).users_collection]
definitions = {
"an empty IFC project": an_empty_ifc_project,
"I add a cube": i_add_a_cube,
'the object named "(.*)" is selected': the_object_named_name_is_selected,
'the object "(.*)" is selected': the_object_name_is_selected,
'I select "(.*)" in "(.*)"': i_select_value_in_prop,
'I press "(.*)"': i_press_operator,
'the object named "(.*)" is an "(.*)"': the_object_named_name_is_an_ifc_class,
'the object "(.*)" is an "(.*)"': the_object_name_is_an_ifc_class,
'the object "(.*)" is in the collection "(.*)"': the_object_name_is_in_the_collection_collection,
"an IFC file exists": an_ifc_file_exists,
}
@@ -25,8 +25,12 @@ class TestCreateProject(test.bim.bootstrap.NewFile):
return """
When I press "bim.create_project"
Then an IFC file exists
And the object named "IfcProject/My Project" is an "IfcProject"
And the object named "IfcSite/My Site" is an "IfcSite"
And the object named "IfcBuilding/My Building" is an "IfcBuilding"
And the object named "IfcBuildingStorey/My Storey" is an "IfcBuildingStorey"
And the object "IfcProject/My Project" is an "IfcProject"
And the object "IfcSite/My Site" is an "IfcSite"
And the object "IfcBuilding/My Building" is an "IfcBuilding"
And the object "IfcBuildingStorey/My Storey" is an "IfcBuildingStorey"
And the object "IfcProject/My Project" is in the collection "IfcProject/My Project"
And the object "IfcSite/My Site" is in the collection "IfcSite/My Site"
And the object "IfcBuilding/My Building" is in the collection "IfcBuilding/My Building"
And the object "IfcBuildingStorey/My Storey" is in the collection "IfcBuildingStorey/My Storey"
"""
@@ -19,14 +19,27 @@
import test.bim.bootstrap
class TestCreateProject(test.bim.bootstrap.NewFile):
class TestAssignClass(test.bim.bootstrap.NewFile):
@test.bim.bootstrap.scenario
def test_assigning_a_class_to_a_cube(self):
return """
Given an empty IFC project
When I add a cube
And the object named "Cube" is selected
And the object "Cube" is selected
And I select "IfcWall" in "scene.BIMRootProperties.ifc_class"
And I press "bim.assign_class"
And the object named "IfcWall/Cube" is an "IfcWall"
And the object "IfcWall/Cube" is an "IfcWall"
"""
@test.bim.bootstrap.scenario
def test_assigning_a_type_class_to_a_cube(self):
return """
Given an empty IFC project
When I add a cube
And the object "Cube" is selected
And I select "IfcElementType" in "scene.BIMRootProperties.ifc_product"
And I select "IfcWallType" in "scene.BIMRootProperties.ifc_class"
And I press "bim.assign_class"
And the object "IfcWallType/Cube" is an "IfcWallType"
And the object "IfcWallType/Cube" is in the collection "Types"
"""