From 1e4593aac0f0d6a7aab7fcb8277f75de50b286fe Mon Sep 17 00:00:00 2001 From: Roy-043 <70520633+Roy-043@users.noreply.github.com> Date: Thu, 10 Sep 2020 15:13:15 +0200 Subject: [PATCH] Arch: Arch_Wall fix MultiMaterial alignment bug (unit test) Added the testWallMultiMatAlign unit test. Have kept the testWall test. Changed the code to 'import FreeCAD as App'. --- src/Mod/Arch/TestArch.py | 148 +++++++++++++++++++++++++-------------- 1 file changed, 96 insertions(+), 52 deletions(-) diff --git a/src/Mod/Arch/TestArch.py b/src/Mod/Arch/TestArch.py index ab2f59144d..fdf8fe0170 100644 --- a/src/Mod/Arch/TestArch.py +++ b/src/Mod/Arch/TestArch.py @@ -26,14 +26,14 @@ import os import unittest -import FreeCAD +import FreeCAD as App import Arch import Draft import Part import Sketcher -if FreeCAD.GuiUp: +if App.GuiUp: import FreeCADGui brepArchiCAD = """ @@ -381,33 +381,78 @@ class ArchTest(unittest.TestCase): def setUp(self): # setting a new document to hold the tests - if FreeCAD.ActiveDocument: - if FreeCAD.ActiveDocument.Name != "ArchTest": - FreeCAD.newDocument("ArchTest") + if App.ActiveDocument: + if App.ActiveDocument.Name != "ArchTest": + App.newDocument("ArchTest") else: - FreeCAD.newDocument("ArchTest") - FreeCAD.setActiveDocument("ArchTest") + App.newDocument("ArchTest") + App.setActiveDocument("ArchTest") def testWall(self): - FreeCAD.Console.PrintLog ('Checking Arch Wall...\n') - l=Draft.makeLine(FreeCAD.Vector(0,0,0),FreeCAD.Vector(-2,0,0)) + App.Console.PrintLog ('Checking Arch Wall...\n') + l=Draft.makeLine(App.Vector(0,0,0),App.Vector(-2,0,0)) w = Arch.makeWall(l) self.failUnless(w,"Arch Wall failed") + def testWallMultiMatAlign(self): + App.Console.PrintLog ('Checking Arch Wall with MultiMaterial and 3 alignments...\n') + matA = Arch.makeMaterial() + matB = Arch.makeMaterial() + matMulti = Arch.makeMultiMaterial() + matMulti.Materials = [matA, matB] + matMulti.Thicknesses = [100, 200] # total width different from default 200 + pts = [App.Vector(0, 0, 0), + App.Vector(1000, 0, 0), + App.Vector(1000, 1000, 0), + App.Vector(2000, 1000, 0)] + # wall based on wire: + wire = Draft.makeWire(pts) + wallWire = Arch.makeWall(wire) + wallWire.Material = matMulti + # wall based on sketch: + sketch = App.activeDocument().addObject('Sketcher::SketchObject','Sketch') + sketch.addGeometry([Part.LineSegment(pts[0], pts[1]), + Part.LineSegment(pts[1], pts[2]), + Part.LineSegment(pts[2], pts[3])]) + wallSketch = Arch.makeWall(sketch) + wallSketch.Material = matMulti + + alignLst = ["Left", "Center", "Right"] + checkLst = [[App.Vector(0, -300, 0), App.Vector(2000, 1000, 0)], + [App.Vector(0, -150, 0), App.Vector(2000, 1150, 0)], + [App.Vector(0, 0, 0), App.Vector(2000, 1300, 0)]] + result = True + for i in range(3): + wallWire.Align = alignLst[i] + wallSketch.Align = alignLst[i] + App.ActiveDocument.recompute() + for box in [wallWire.Shape.BoundBox, wallSketch.Shape.BoundBox]: + ptMin = App.Vector(box.XMin, box.YMin, 0) + if not ptMin.isEqual(checkLst[i][0], 1e-8): + result = False + break + ptMax = App.Vector(box.XMax, box.YMax, 0) + if not ptMax.isEqual(checkLst[i][1], 1e-8): + result = False + break + if result == False: + break + self.failUnless(result, "Arch Wall with MultiMaterial and 3 alignments failed") + def testStructure(self): - FreeCAD.Console.PrintLog ('Checking Arch Structure...\n') + App.Console.PrintLog ('Checking Arch Structure...\n') s = Arch.makeStructure(length=2,width=3,height=5) self.failUnless(s,"Arch Structure failed") def testRebar(self): - FreeCAD.Console.PrintLog ('Checking Arch Rebar...\n') + App.Console.PrintLog ('Checking Arch Rebar...\n') s = Arch.makeStructure(length=2,width=3,height=5) - sk = FreeCAD.ActiveDocument.addObject('Sketcher::SketchObject','Sketch') + sk = App.ActiveDocument.addObject('Sketcher::SketchObject','Sketch') sk.Support = (s,["Face6"]) - sk.addGeometry(Part.LineSegment(FreeCAD.Vector(-0.85,1.25,0),FreeCAD.Vector(0.75,1.25,0))) - sk.addGeometry(Part.LineSegment(FreeCAD.Vector(0.75,1.25,0),FreeCAD.Vector(0.75,-1.20,0))) - sk.addGeometry(Part.LineSegment(FreeCAD.Vector(0.75,-1.20,0),FreeCAD.Vector(-0.85,-1.20,0))) - sk.addGeometry(Part.LineSegment(FreeCAD.Vector(-0.85,-1.20,0),FreeCAD.Vector(-0.85,1.25,0))) + sk.addGeometry(Part.LineSegment(App.Vector(-0.85,1.25,0),App.Vector(0.75,1.25,0))) + sk.addGeometry(Part.LineSegment(App.Vector(0.75,1.25,0),App.Vector(0.75,-1.20,0))) + sk.addGeometry(Part.LineSegment(App.Vector(0.75,-1.20,0),App.Vector(-0.85,-1.20,0))) + sk.addGeometry(Part.LineSegment(App.Vector(-0.85,-1.20,0),App.Vector(-0.85,1.25,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)) @@ -416,20 +461,20 @@ class ArchTest(unittest.TestCase): self.failUnless(r,"Arch Rebar failed") def testFloor(self): - FreeCAD.Console.PrintLog ('Checking Arch Floor...\n') + App.Console.PrintLog ('Checking Arch Floor...\n') s = Arch.makeStructure(length=2,width=3,height=5) f = Arch.makeFloor([s]) self.failUnless(f,"Arch Floor failed") def testBuilding(self): - FreeCAD.Console.PrintLog ('Checking Arch Building...\n') + App.Console.PrintLog ('Checking Arch Building...\n') s = Arch.makeStructure(length=2,width=3,height=5) f = Arch.makeFloor([s]) b = Arch.makeBuilding([f]) self.failUnless(b,"Arch Building failed") def testSite(self): - FreeCAD.Console.PrintLog ('Checking Arch Site...\n') + App.Console.PrintLog ('Checking Arch Site...\n') s = Arch.makeStructure(length=2,width=3,height=5) f = Arch.makeFloor([s]) b = Arch.makeBuilding([f]) @@ -437,15 +482,15 @@ class ArchTest(unittest.TestCase): self.failUnless(si,"Arch Site failed") def testWindow(self): - FreeCAD.Console.PrintLog ('Checking Arch Window...\n') - l=Draft.makeLine(FreeCAD.Vector(0,0,0),FreeCAD.Vector(-2,0,0)) + App.Console.PrintLog ('Checking Arch Window...\n') + l=Draft.makeLine(App.Vector(0,0,0),App.Vector(-2,0,0)) w = Arch.makeWall(l) - sk = FreeCAD.ActiveDocument.addObject('Sketcher::SketchObject','Sketch001') + sk = App.ActiveDocument.addObject('Sketcher::SketchObject','Sketch001') sk.Support = (w,["Face3"]) - sk.addGeometry(Part.LineSegment(FreeCAD.Vector(-1.80,1.30,0),FreeCAD.Vector(-0.90,1.30,0))) - sk.addGeometry(Part.LineSegment(FreeCAD.Vector(-0.90,1.30,0),FreeCAD.Vector(-0.90,0.25,0))) - sk.addGeometry(Part.LineSegment(FreeCAD.Vector(-0.90,0.25,0),FreeCAD.Vector(-1.80,0.25,0))) - sk.addGeometry(Part.LineSegment(FreeCAD.Vector(-1.80,0.25,0),FreeCAD.Vector(-1.80,1.30,0))) + sk.addGeometry(Part.LineSegment(App.Vector(-1.80,1.30,0),App.Vector(-0.90,1.30,0))) + sk.addGeometry(Part.LineSegment(App.Vector(-0.90,1.30,0),App.Vector(-0.90,0.25,0))) + sk.addGeometry(Part.LineSegment(App.Vector(-0.90,0.25,0),App.Vector(-1.80,0.25,0))) + sk.addGeometry(Part.LineSegment(App.Vector(-1.80,0.25,0),App.Vector(-1.80,1.30,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)) @@ -455,26 +500,26 @@ class ArchTest(unittest.TestCase): self.failUnless(win,"Arch Window failed") def testRoof(self): - FreeCAD.Console.PrintLog ('Checking Arch Roof...\n') + App.Console.PrintLog ('Checking Arch Roof...\n') r = Draft.makeRectangle(length=2,height=-1) ro = Arch.makeRoof(r) self.failUnless(ro,"Arch Roof failed") def testAxis(self): - FreeCAD.Console.PrintLog ('Checking Arch Axis...\n') + App.Console.PrintLog ('Checking Arch Axis...\n') a = Arch.makeAxis() self.failUnless(a,"Arch Axis failed") def testSection(self): - FreeCAD.Console.PrintLog ('Checking Arch Section...\n') + App.Console.PrintLog ('Checking Arch Section...\n') s = Arch.makeSectionPlane([]) v = Arch.makeSectionView(s) self.failUnless(v,"Arch Section failed") def testSpace(self): - FreeCAD.Console.PrintLog ('Checking Arch Space...\n') + App.Console.PrintLog ('Checking Arch Space...\n') sb = Part.makeBox(1,1,1) - b = FreeCAD.ActiveDocument.addObject('Part::Feature','Box') + b = App.ActiveDocument.addObject('Part::Feature','Box') b.Shape = sb s = Arch.makeSpace([b]) self.failUnless(s,"Arch Space failed") @@ -483,30 +528,30 @@ class ArchTest(unittest.TestCase): shape = Part.Shape() shape.importBrepFromString(brepArchiCAD) bborig = shape.BoundBox - FreeCAD.Console.PrintLog ("Original BB: "+str(bborig)) - baseobj = FreeCAD.ActiveDocument.addObject("Part::Feature","brepArchiCAD_body") + App.Console.PrintLog ("Original BB: "+str(bborig)) + baseobj = App.ActiveDocument.addObject("Part::Feature","brepArchiCAD_body") baseobj.Shape = shape space = Arch.makeSpace(baseobj) space.recompute() bbnew = space.Shape.BoundBox - FreeCAD.Console.PrintLog ("New BB: "+str(bbnew)) + App.Console.PrintLog ("New BB: "+str(bbnew)) self.failUnless(checkBB(bborig,bbnew),"Arch Space has wrong Placement") def testStairs(self): - FreeCAD.Console.PrintLog ('Checking Arch Stairs...\n') + App.Console.PrintLog ('Checking Arch Stairs...\n') s = Arch.makeStairs() self.failUnless(s,"Arch Stairs failed") def testFrame(self): - FreeCAD.Console.PrintLog ('Checking Arch Frame...\n') - l=Draft.makeLine(FreeCAD.Vector(0,0,0),FreeCAD.Vector(-2,0,0)) + App.Console.PrintLog ('Checking Arch Frame...\n') + l=Draft.makeLine(App.Vector(0,0,0),App.Vector(-2,0,0)) p = Draft.makeRectangle(length=.5,height=.5) f = Arch.makeFrame(l,p) self.failUnless(f,"Arch Frame failed") def testEquipment(self): - FreeCAD.Console.PrintLog ('Checking Arch Equipment...\n') - box = FreeCAD.ActiveDocument.addObject("Part::Box", "Box") + App.Console.PrintLog ('Checking Arch Equipment...\n') + box = App.ActiveDocument.addObject("Part::Box", "Box") box.Length = 500 box.Width = 2000 box.Height = 600 @@ -514,37 +559,36 @@ class ArchTest(unittest.TestCase): self.failUnless(equip,"Arch Equipment failed") def testPipe(self): - FreeCAD.Console.PrintLog ('Checking Arch Pipe...\n') + App.Console.PrintLog ('Checking Arch Pipe...\n') pipe = Arch.makePipe(diameter=120, length=3000) self.failUnless(pipe,"Arch Pipe failed") def testAdd(self): - FreeCAD.Console.PrintLog ('Checking Arch Add...\n') - l=Draft.makeLine(FreeCAD.Vector(0,0,0),FreeCAD.Vector(2,0,0)) + App.Console.PrintLog ('Checking Arch Add...\n') + l=Draft.makeLine(App.Vector(0,0,0),App.Vector(2,0,0)) w = Arch.makeWall(l,width=0.2,height=2) sb = Part.makeBox(1,1,1) - b = FreeCAD.ActiveDocument.addObject('Part::Feature','Box') + b = App.ActiveDocument.addObject('Part::Feature','Box') b.Shape = sb - FreeCAD.ActiveDocument.recompute() + App.ActiveDocument.recompute() Arch.addComponents(b,w) - FreeCAD.ActiveDocument.recompute() + App.ActiveDocument.recompute() r = (w.Shape.Volume > 1.5) self.failUnless(r,"Arch Add failed") def testRemove(self): - FreeCAD.Console.PrintLog ('Checking Arch Remove...\n') - l=Draft.makeLine(FreeCAD.Vector(0,0,0),FreeCAD.Vector(2,0,0)) + App.Console.PrintLog ('Checking Arch Remove...\n') + l=Draft.makeLine(App.Vector(0,0,0),App.Vector(2,0,0)) w = Arch.makeWall(l,width=0.2,height=2) sb = Part.makeBox(1,1,1) - b = FreeCAD.ActiveDocument.addObject('Part::Feature','Box') + b = App.ActiveDocument.addObject('Part::Feature','Box') b.Shape = sb - FreeCAD.ActiveDocument.recompute() + App.ActiveDocument.recompute() Arch.removeComponents(b,w) - FreeCAD.ActiveDocument.recompute() + App.ActiveDocument.recompute() r = (w.Shape.Volume < 0.75) self.failUnless(r,"Arch Remove failed") def tearDown(self): - FreeCAD.closeDocument("ArchTest") + App.closeDocument("ArchTest") pass -