mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-19 06:39:13 +00:00
See #6501. Fix bug where wall alignment didn't strictly check for poll requirements prior to executing operator.
This commit is contained in:
@@ -286,6 +286,137 @@ Scenario: Split a wall which has a flipped door
|
||||
And I press "bim.hotkey(hotkey='S_K')"
|
||||
Then the object "IfcDoor/Door" is at "8.01,0.1,0"
|
||||
|
||||
Scenario: Align two walls - centerline
|
||||
Given an empty IFC project
|
||||
And I load the demo construction library
|
||||
And I set "scene.BIMModelProperties.ifc_class" to "IfcWallType"
|
||||
And the variable "element_type" is "[e for e in {ifc}.by_type('IfcWallType') if e.Name == 'WAL100'][0].id()"
|
||||
And I set "scene.BIMModelProperties.relating_type_id" to "{element_type}"
|
||||
And I press "bim.add_occurrence"
|
||||
And the variable "element_type" is "[e for e in {ifc}.by_type('IfcWallType') if e.Name == 'WAL300'][0].id()"
|
||||
And I set "scene.BIMModelProperties.relating_type_id" to "{element_type}"
|
||||
And the cursor is at "10,5,0"
|
||||
And I press "bim.add_occurrence"
|
||||
When the object "IfcWall/Wall.001" is selected
|
||||
And additionally the object "IfcWall/Wall" is selected
|
||||
And I press "bim.hotkey(hotkey='S_C')"
|
||||
Then the object "IfcWall/Wall" bottom left corner is at "0,0,0"
|
||||
And the object "IfcWall/Wall" top right corner is at "1,0.1,3"
|
||||
And the object "IfcWall/Wall.001" bottom left corner is at "10,-0.1,0"
|
||||
And the object "IfcWall/Wall.001" top right corner is at "11,0.2,3"
|
||||
|
||||
Scenario: Align two walls - interior
|
||||
Given an empty IFC project
|
||||
And I load the demo construction library
|
||||
And I set "scene.BIMModelProperties.ifc_class" to "IfcWallType"
|
||||
And the variable "element_type" is "[e for e in {ifc}.by_type('IfcWallType') if e.Name == 'WAL100'][0].id()"
|
||||
And I set "scene.BIMModelProperties.relating_type_id" to "{element_type}"
|
||||
And I press "bim.add_occurrence"
|
||||
And the variable "element_type" is "[e for e in {ifc}.by_type('IfcWallType') if e.Name == 'WAL300'][0].id()"
|
||||
And I set "scene.BIMModelProperties.relating_type_id" to "{element_type}"
|
||||
And the cursor is at "10,5,0"
|
||||
And I press "bim.add_occurrence"
|
||||
When the object "IfcWall/Wall.001" is selected
|
||||
And additionally the object "IfcWall/Wall" is selected
|
||||
And I press "bim.hotkey(hotkey='S_V')"
|
||||
Then the object "IfcWall/Wall" bottom left corner is at "0,0,0"
|
||||
And the object "IfcWall/Wall" top right corner is at "1,0.1,3"
|
||||
And the object "IfcWall/Wall.001" bottom left corner is at "10,-0.2,0"
|
||||
And the object "IfcWall/Wall.001" top right corner is at "11,0.1,3"
|
||||
|
||||
Scenario: Align two walls - exterior
|
||||
Given an empty IFC project
|
||||
And I load the demo construction library
|
||||
And I set "scene.BIMModelProperties.ifc_class" to "IfcWallType"
|
||||
And the variable "element_type" is "[e for e in {ifc}.by_type('IfcWallType') if e.Name == 'WAL100'][0].id()"
|
||||
And I set "scene.BIMModelProperties.relating_type_id" to "{element_type}"
|
||||
And I press "bim.add_occurrence"
|
||||
And the variable "element_type" is "[e for e in {ifc}.by_type('IfcWallType') if e.Name == 'WAL300'][0].id()"
|
||||
And I set "scene.BIMModelProperties.relating_type_id" to "{element_type}"
|
||||
And the cursor is at "10,5,0"
|
||||
And I press "bim.add_occurrence"
|
||||
When the object "IfcWall/Wall.001" is selected
|
||||
And additionally the object "IfcWall/Wall" is selected
|
||||
And I press "bim.hotkey(hotkey='S_X')"
|
||||
Then the object "IfcWall/Wall" bottom left corner is at "0,0,0"
|
||||
And the object "IfcWall/Wall" top right corner is at "1,0.1,3"
|
||||
And the object "IfcWall/Wall.001" bottom left corner is at "10,0,0"
|
||||
And the object "IfcWall/Wall.001" top right corner is at "11,0.3,3"
|
||||
|
||||
Scenario: Align two walls - centerline fail due to selection criteria
|
||||
Given an empty IFC project
|
||||
And I load the demo construction library
|
||||
And I set "scene.BIMModelProperties.ifc_class" to "IfcWallType"
|
||||
And the variable "element_type" is "[e for e in {ifc}.by_type('IfcWallType') if e.Name == 'WAL100'][0].id()"
|
||||
And I set "scene.BIMModelProperties.relating_type_id" to "{element_type}"
|
||||
And I press "bim.add_occurrence"
|
||||
When the object "IfcWall/Wall" is selected
|
||||
Then I press "bim.hotkey(hotkey='S_C')" and expect error "Error: At least two vertically layered elements must be selected to match alignments."
|
||||
|
||||
Scenario: Align two elements - centerline
|
||||
Given an empty IFC project
|
||||
And I load the demo construction library
|
||||
And I set "scene.BIMModelProperties.ifc_class" to "IfcDoorType"
|
||||
And the variable "element_type" is "[e for e in {ifc}.by_type('IfcDoorType') if e.Name == 'DT01'][0].id()"
|
||||
And I set "scene.BIMModelProperties.relating_type_id" to "{element_type}"
|
||||
And I press "bim.add_occurrence"
|
||||
And the cursor is at "10,5,0"
|
||||
And I press "bim.add_occurrence"
|
||||
And the object "IfcDoor/Door.001" is rotated by "0,0,90" deg
|
||||
When the object "IfcDoor/Door.001" is selected
|
||||
And additionally the object "IfcDoor/Door" is selected
|
||||
And I press "bim.hotkey(hotkey='S_C')"
|
||||
Then the object "IfcDoor/Door" bottom left corner is at "0,0,0"
|
||||
And the object "IfcDoor/Door" top right corner is at "1.01,0.1,2.145"
|
||||
And the object "IfcDoor/Door.001" bottom left corner is at "10,-0.455,0"
|
||||
And the object "IfcDoor/Door.001" top right corner is at "9.9,0.555,2.145"
|
||||
|
||||
Scenario: Align two elements - positive
|
||||
Given an empty IFC project
|
||||
And I load the demo construction library
|
||||
And I set "scene.BIMModelProperties.ifc_class" to "IfcDoorType"
|
||||
And the variable "element_type" is "[e for e in {ifc}.by_type('IfcDoorType') if e.Name == 'DT01'][0].id()"
|
||||
And I set "scene.BIMModelProperties.relating_type_id" to "{element_type}"
|
||||
And I press "bim.add_occurrence"
|
||||
And the cursor is at "10,5,0"
|
||||
And I press "bim.add_occurrence"
|
||||
And the object "IfcDoor/Door.001" is rotated by "0,0,90" deg
|
||||
When the object "IfcDoor/Door.001" is selected
|
||||
And additionally the object "IfcDoor/Door" is selected
|
||||
And I press "bim.hotkey(hotkey='S_V')"
|
||||
Then the object "IfcDoor/Door" bottom left corner is at "0,0,0"
|
||||
And the object "IfcDoor/Door" top right corner is at "1.01,0.1,2.145"
|
||||
And the object "IfcDoor/Door.001" bottom left corner is at "10,-0.910,0"
|
||||
And the object "IfcDoor/Door.001" top right corner is at "9.9,0.1,2.145"
|
||||
|
||||
Scenario: Align two elements - negative
|
||||
Given an empty IFC project
|
||||
And I load the demo construction library
|
||||
And I set "scene.BIMModelProperties.ifc_class" to "IfcDoorType"
|
||||
And the variable "element_type" is "[e for e in {ifc}.by_type('IfcDoorType') if e.Name == 'DT01'][0].id()"
|
||||
And I set "scene.BIMModelProperties.relating_type_id" to "{element_type}"
|
||||
And I press "bim.add_occurrence"
|
||||
And the cursor is at "10,5,0"
|
||||
And I press "bim.add_occurrence"
|
||||
And the object "IfcDoor/Door.001" is rotated by "0,0,90" deg
|
||||
When the object "IfcDoor/Door.001" is selected
|
||||
And additionally the object "IfcDoor/Door" is selected
|
||||
And I press "bim.hotkey(hotkey='S_X')"
|
||||
Then the object "IfcDoor/Door" bottom left corner is at "0,0,0"
|
||||
And the object "IfcDoor/Door" top right corner is at "1.01,0.1,2.145"
|
||||
And the object "IfcDoor/Door.001" bottom left corner is at "10,0,0"
|
||||
And the object "IfcDoor/Door.001" top right corner is at "9.9,1.01,2.145"
|
||||
|
||||
Scenario: Align elements - fail due to selection criteria
|
||||
Given an empty IFC project
|
||||
And I load the demo construction library
|
||||
And I set "scene.BIMModelProperties.ifc_class" to "IfcDoorType"
|
||||
And the variable "element_type" is "[e for e in {ifc}.by_type('IfcDoorType') if e.Name == 'DT01'][0].id()"
|
||||
And I set "scene.BIMModelProperties.relating_type_id" to "{element_type}"
|
||||
And I press "bim.add_occurrence"
|
||||
When the object "IfcDoor/Door" is selected
|
||||
Then I press "bim.hotkey(hotkey='S_C')" and expect error "Error: At least two objects must be selected to match alignments."
|
||||
|
||||
Scenario: Add a slab
|
||||
Given an empty IFC project
|
||||
And I load the demo construction library
|
||||
|
||||
@@ -1264,7 +1264,7 @@ def the_object_name_is_at_location(name, location):
|
||||
obj_location = the_object_name_exists(name).location
|
||||
assert (
|
||||
obj_location - Vector([float(co) for co in location.split(",")])
|
||||
).length < 0.1, f"Object is at {obj_location} instead of {location}"
|
||||
).length < 0.05, f"Object is at {obj_location} instead of {location}"
|
||||
|
||||
|
||||
@then(parsers.parse('the object "{name}" has a vertex at "{location}"'))
|
||||
@@ -1305,7 +1305,7 @@ def the_object_name_top_right_corner_is_at_location(name, location):
|
||||
obj_corner = obj.matrix_world @ Vector(obj.bound_box[6])
|
||||
assert (
|
||||
obj_corner - Vector([float(co) for co in location.split(",")])
|
||||
).length < 0.1, f"Object has top right corner {obj_corner} instead of {location}"
|
||||
).length < 0.05, f"Object has top right corner {obj_corner} instead of {location}"
|
||||
|
||||
|
||||
@then(parsers.parse('the object "{name}" bottom left corner is at "{location}"'))
|
||||
@@ -1314,7 +1314,7 @@ def the_object_name_bottom_left_corner_is_at_location(name, location):
|
||||
obj_corner = obj.matrix_world @ Vector(obj.bound_box[0])
|
||||
assert (
|
||||
obj_corner - Vector([float(co) for co in location.split(",")])
|
||||
).length < 0.1, f"Object has bottom left corner {obj_corner} instead of {location}"
|
||||
).length < 0.05, f"Object has bottom left corner {obj_corner} instead of {location}"
|
||||
|
||||
|
||||
@then(parsers.parse('the object "{name}" is contained in "{container_name}"'))
|
||||
|
||||
Reference in New Issue
Block a user