Files
create/src/Mod/BIM/bimtests/TestArchBuildingPartGui.py
Furgo b23d580941 Add BIM workbench to .pre-commit-config.yaml (#21591)
* Add BIM workbench to .pre-commit-config.yaml

* pre-commit: ignore translations

* pre-commit: add additional ignore pattern

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2025-10-13 13:07:48 +02:00

80 lines
3.4 KiB
Python

import FreeCAD as App
import FreeCADGui
import Arch
import Draft
import Part
import Sketcher
from bimtests.TestArchBaseGui import TestArchBaseGui
class TestArchBuildingPartGui(TestArchBaseGui):
def testBuildingPart(self):
"""Create a BuildingPart from a wall with a window and check its shape."""
# Also regression test for:
# https://github.com/FreeCAD/FreeCAD/issues/6178
# operation = "Arch BuildingPart"
# _msg(" Test '{}'".format(operation))
# Most of the code below taken from testWindow function.
line = Draft.makeLine(App.Vector(0, 0, 0), App.Vector(3000, 0, 0))
wall = Arch.makeWall(line)
sk = App.ActiveDocument.addObject("Sketcher::SketchObject", "Sketch001")
sk.Placement.Rotation = App.Rotation(App.Vector(1, 0, 0), 90)
sk.addGeometry(Part.LineSegment(App.Vector(500, 800, 0), App.Vector(1500, 800, 0)))
sk.addGeometry(Part.LineSegment(App.Vector(1500, 800, 0), App.Vector(1500, 2000, 0)))
sk.addGeometry(Part.LineSegment(App.Vector(1500, 2000, 0), App.Vector(500, 2000, 0)))
sk.addGeometry(Part.LineSegment(App.Vector(500, 2000, 0), App.Vector(500, 800, 0)))
sk.addConstraint(Sketcher.Constraint("Coincident", 0, 2, 1, 1))
sk.addConstraint(Sketcher.Constraint("Coincident", 1, 2, 2, 1))
sk.addConstraint(Sketcher.Constraint("Coincident", 2, 2, 3, 1))
sk.addConstraint(Sketcher.Constraint("Coincident", 3, 2, 0, 1))
App.ActiveDocument.recompute()
win = Arch.makeWindow(sk)
Arch.removeComponents(win, host=wall)
App.ActiveDocument.recompute()
bp = Arch.makeBuildingPart()
# Wall visibility works when standalone
FreeCADGui.Selection.clearSelection()
FreeCADGui.Selection.addSelection(self.doc_name, wall.Name)
assert wall.Visibility
FreeCADGui.runCommand("Std_ToggleVisibility", 0)
App.ActiveDocument.recompute()
assert not wall.Visibility
FreeCADGui.runCommand("Std_ToggleVisibility", 0)
assert wall.Visibility
bp.Group = [wall]
App.ActiveDocument.recompute()
# Fails with OCC 7.5
# self.assertTrue(len(bp.Shape.Faces) == 16, "'{}' failed".format(operation))
# Wall visibility works when inside a BuildingPart
FreeCADGui.runCommand("Std_ToggleVisibility", 0)
App.ActiveDocument.recompute()
assert not wall.Visibility
FreeCADGui.runCommand("Std_ToggleVisibility", 0)
assert wall.Visibility
# Wall visibility works when BuildingPart Toggled
FreeCADGui.Selection.clearSelection()
FreeCADGui.Selection.addSelection(self.doc_name, bp.Name)
FreeCADGui.runCommand("Std_ToggleVisibility", 0)
assert not wall.Visibility
FreeCADGui.runCommand("Std_ToggleVisibility", 0)
assert wall.Visibility
# Wall visibiity works inside group inside BuildingPart Toggled
grp = App.ActiveDocument.addObject("App::DocumentObjectGroup", "Group")
grp.Label = "Group"
grp.Group = [wall]
bp.Group = [grp]
App.ActiveDocument.recompute()
assert wall.Visibility
FreeCADGui.runCommand("Std_ToggleVisibility", 0)
App.ActiveDocument.recompute()
assert not wall.Visibility
FreeCADGui.runCommand("Std_ToggleVisibility", 0)
App.ActiveDocument.recompute()
assert wall.Visibility