BIM: add unit test for addSpaceBoundaries (#20146)

* BIM: add unit test for addSpaceBoundaries

* BIM: remove test dependency on FreeCADGui
This commit is contained in:
Furgo
2025-03-20 11:44:56 +01:00
committed by GitHub
parent e1c51becdc
commit a3fd9423ec

View File

@@ -27,12 +27,14 @@ import os
import unittest
import FreeCAD as App
from FreeCAD import Units
import Arch
import Draft
import Part
import Sketcher
import TechDraw
import WorkingPlane
from draftutils.messages import _msg
@@ -818,6 +820,51 @@ class ArchTest(unittest.TestCase):
App.ActiveDocument.recompute()
assert True
def test_addSpaceBoundaries(self):
"""Test the Arch.addSpaceBoundaries method.
Create a space and a wall that intersects it. Add the wall as a boundary to the space,
and check if the resulting space area is as expected.
"""
operation = " Add a wall face as a boundary to a space"
_msg(" Test '{}'".format(operation))
# Create the space
pl = App.Placement()
pl.Rotation.Q = (0.0, 0.0, 0.0, 1.0)
pl.Base = App.Vector(-2000.0, -2000.0, 0.0)
rectangleBase = Draft.make_rectangle(
length=4000.0, height=4000.0, placement=pl, face=True, support=None)
App.ActiveDocument.recompute()
extr = rectangleBase.Shape.extrude(App.Vector(0,0,2000))
Part.show(extr, 'Extrusion')
space = Arch.makeSpace(App.activeDocument().getObject('Extrusion'))
App.ActiveDocument.recompute() # To calculate area
# Create the wall
trace = Part.LineSegment(App.Vector (3000.0, 1000.0, 0.0),
App.Vector (-3000.0, 1000.0, 0.0))
wp = WorkingPlane.get_working_plane()
base = App.ActiveDocument.addObject("Sketcher::SketchObject","WallTrace")
base.Placement = wp.get_placement()
base.addGeometry(trace)
wall = Arch.makeWall(base,width=200.0,height=3000.0,align="Left")
wall.Normal = wp.axis
# Add the boundary
wallBoundary = [(wall, ["Face1"])]
Arch.addSpaceBoundaries(App.ActiveDocument.Space, wallBoundary)
App.ActiveDocument.recompute() # To recalculate area
# Assert if area is as expected
expectedArea = Units.parseQuantity('12 m^2')
actualArea = Units.parseQuantity(str(space.Area))
self.assertAlmostEqual(
expectedArea.Value,
actualArea.Value,
msg = (f"Invalid area value. " +
f"Expected: {expectedArea.UserString}, actual: {actualArea.UserString}"))
def test_SpaceFromSingleWall(self):
"""Create a space from boundaries of a single wall.
"""