You can now create a new blank Brick project

This commit is contained in:
Dion Moult
2022-01-11 13:25:03 +11:00
parent f08ed629b5
commit c6966f9b39
8 changed files with 53 additions and 2 deletions
@@ -27,6 +27,7 @@ classes = (
operator.ConvertBrickProject,
operator.ConvertIfcToBrick,
operator.LoadBrickProject,
operator.NewBrickFile,
operator.RewindBrickClass,
operator.ViewBrickClass,
operator.ViewBrickItem,
@@ -154,3 +154,12 @@ class ConvertIfcToBrick(bpy.types.Operator, Operator):
if props.libraries:
library = tool.Ifc.get().by_id(int(props.libraries))
core.convert_ifc_to_brick(tool.Brick, namespace=props.namespace, library=library)
class NewBrickFile(bpy.types.Operator, Operator):
bl_idname = "bim.new_brick_file"
bl_label = "New Brick File"
bl_options = {"REGISTER", "UNDO"}
def _execute(self, context):
core.new_brick_file(tool.Brick)
@@ -35,8 +35,9 @@ class BIM_PT_brickschema(Panel):
self.props = context.scene.BIMBrickProperties
if not BrickschemaData.data["is_loaded"]:
row = self.layout.row()
row.operator("bim.load_brick_project")
row = self.layout.row(align=True)
row.operator("bim.new_brick_file", text="Create Project")
row.operator("bim.load_brick_project", text="Load Project")
return
row = self.layout.row(align=True)
+4
View File
@@ -87,3 +87,7 @@ def convert_ifc_to_brick(brick, namespace=None, library=None):
if not brick_class:
continue
brick.run_add_brick(obj=obj, namespace=namespace, brick_class=brick_class, library=library)
def new_brick_file(brick):
brick.new_brick_file()
+1
View File
@@ -63,6 +63,7 @@ class Brick:
def import_brick_classes(cls, brick_class): pass
def import_brick_items(cls, brick_class): pass
def load_brick_file(cls, filepath): pass
def new_brick_file(cls): pass
def pop_brick_breadcrumb(cls): pass
def run_add_brick(cls, obj=None, namespace=None, brick_class=None, library=None): pass
def run_assign_brick_reference(cls, obj=None, library=None, brick_uri=None): pass
+10
View File
@@ -248,6 +248,16 @@ class Brick(blenderbim.core.tool.Brick):
BrickStore.graph = brickschema.Graph().load_file(filepath) + BrickStore.schema
BrickStore.path = filepath
@classmethod
def new_brick_file(cls):
if not BrickStore.schema:
BrickStore.schema = brickschema.Graph()
cwd = os.path.dirname(os.path.realpath(__file__))
schema_path = os.path.join(cwd, "..", "bim", "schema", "Brick.ttl")
BrickStore.schema.load_file(schema_path)
BrickStore.graph = brickschema.Graph() + BrickStore.schema
BrickStore.graph.bind("digitaltwin", Namespace("https://example.org/digitaltwin#"))
@classmethod
def pop_brick_breadcrumb(cls):
crumb = bpy.context.scene.BIMBrickProperties.brick_breadcrumbs[-1]
+6
View File
@@ -151,3 +151,9 @@ class TestConvertIfcToBrick:
brick.get_convertable_brick_objects_and_elements().should_be_called().will_return([("obj", "element")])
brick.get_brick_class("element").should_be_called().will_return(None)
subject.convert_ifc_to_brick(brick, namespace="namespace", library="library")
class TestNewBrickFile:
def test_run(self, brick):
brick.new_brick_file().should_be_called()
subject.new_brick_file(brick)
+19
View File
@@ -298,6 +298,25 @@ class TestLoadBrickFile(NewFile):
assert BrickStore.graph
class TestNewBrickFile(NewFile):
def test_run(self):
# We stub the schema to make tests run faster
BrickStore.schema = brickschema.Graph()
cwd = os.path.dirname(os.path.realpath(__file__))
schema_path = os.path.join(cwd, "..", "files", "BrickStub.ttl")
BrickStore.schema.load_file(schema_path)
# This is the actual test
ns_alias = "digitaltwin"
ns_uri = "https://example.org/digitaltwin#"
subject.new_brick_file()
assert BrickStore.graph
for ns in BrickStore.graph.namespaces():
if ns[0] == ns_alias and ns[1].toPython() == ns_uri:
return
assert False
class TestPopBrickBreadcrumb(NewFile):
def test_run(self):
bpy.context.scene.BIMBrickProperties.brick_breadcrumbs.add().name = "foo"