| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | import unittest |
| | import math |
| |
|
| | import FreeCAD |
| | import TestSketcherApp |
| |
|
| | App = FreeCAD |
| |
|
| |
|
| | class TestMultiTransform(unittest.TestCase): |
| | def setUp(self): |
| | self.Doc = FreeCAD.newDocument("PartDesignTestMultiTransform") |
| | FreeCAD.ConfigSet("SuppressRecomputeRequiredDialog", "True") |
| |
|
| | def testMultiTransform(self): |
| | self.Body = self.Doc.addObject("PartDesign::Body", "Body") |
| | |
| | self.PadSketch = self.Doc.addObject("Sketcher::SketchObject", "SketchPad") |
| | self.Body.addObject(self.PadSketch) |
| | TestSketcherApp.CreateRectangleSketch(self.PadSketch, (0, 0), (10, 10)) |
| | self.Doc.recompute() |
| | self.Pad = self.Doc.addObject("PartDesign::Pad", "Pad") |
| | self.Body.addObject(self.Pad) |
| | self.Pad.Profile = self.PadSketch |
| | self.Pad.Length = 10 |
| | self.Doc.recompute() |
| | self.MultiTransform = self.Doc.addObject("PartDesign::MultiTransform", "MultiTransform") |
| | self.Doc.recompute() |
| | self.MultiTransform.Originals = [self.Pad] |
| | self.MultiTransform.Shape = self.Pad.Shape |
| | self.Body.addObject(self.MultiTransform) |
| | self.Doc.recompute() |
| | self.Mirrored = self.Doc.addObject("PartDesign::Mirrored", "Mirrored") |
| | self.Mirrored.MirrorPlane = (self.PadSketch, ["H_Axis"]) |
| | self.Body.addObject(self.Mirrored) |
| | self.LinearPattern = self.Doc.addObject("PartDesign::LinearPattern", "LinearPattern") |
| | self.LinearPattern.Direction = (self.PadSketch, ["H_Axis"]) |
| | self.LinearPattern.Length = 20 |
| | self.LinearPattern.Occurrences = 3 |
| | self.Body.addObject(self.LinearPattern) |
| | self.PolarPattern = self.Doc.addObject("PartDesign::PolarPattern", "PolarPattern") |
| | self.PolarPattern.Axis = (self.PadSketch, ["N_Axis"]) |
| | self.PolarPattern.Angle = 360 |
| | self.PolarPattern.Occurrences = 4 |
| | self.Body.addObject(self.PolarPattern) |
| | self.MultiTransform.Transformations = [self.Mirrored, self.LinearPattern, self.PolarPattern] |
| | self.Doc.recompute() |
| | self.assertAlmostEqual(self.MultiTransform.Shape.Volume, 20000) |
| |
|
| | def testMultiTransformDressup(self): |
| | |
| | Doc = self.Doc |
| | Body = Doc.addObject("PartDesign::Body", "Body") |
| | Body.AllowCompound = False |
| | |
| | PadSketch = Doc.addObject("Sketcher::SketchObject", "SketchPad") |
| | Body.addObject(PadSketch) |
| | xw = yw = zw = 10 |
| | TestSketcherApp.CreateRectangleSketch(PadSketch, (0, 0), (xw, yw)) |
| | Doc.recompute() |
| | Pad = Doc.addObject("PartDesign::Pad", "Pad") |
| | Body.addObject(Pad) |
| | Pad.Profile = PadSketch |
| | Pad.Length = zw |
| | Doc.recompute() |
| | MultiTransform = Doc.addObject("PartDesign::MultiTransform", "MultiTransform") |
| | Doc.recompute() |
| | MultiTransform.Originals = [Pad] |
| | MultiTransform.Shape = Pad.Shape |
| | Body.addObject(MultiTransform) |
| | Doc.recompute() |
| | Mirrored = Doc.addObject("PartDesign::Mirrored", "Mirrored") |
| | Mirrored.MirrorPlane = (Doc.getObject("XY_Plane"), [""]) |
| | Mirrored.Refine = True |
| | Body.addObject(Mirrored) |
| | Mirrored2 = Doc.addObject("PartDesign::Mirrored", "Mirrored") |
| | Mirrored2.MirrorPlane = (Doc.getObject("XZ_Plane"), [""]) |
| | Mirrored2.Refine = True |
| | Body.addObject(Mirrored2) |
| | MultiTransform.Transformations = [Mirrored, Mirrored2] |
| | MultiTransform.Refine = True |
| | Doc.recompute() |
| | Fillet = Doc.addObject("PartDesign::Fillet", "Fillet") |
| | Fillet.Base = (MultiTransform, ["Face1", "Face2"]) |
| | radius = 3 |
| | Fillet.Radius = radius |
| | Body.addObject(Fillet) |
| | |
| | |
| | cubeVolume = xw * yw * zw * 2 * 2 |
| | filletOuter = radius**2 * (xw - radius * 2) |
| | filletCorner = radius**3 |
| | qRoundArea = math.pi * radius**2 / 4 |
| | filletPrism = qRoundArea * (xw - radius * 2) |
| | fillet3Corner = ( |
| | math.pi * radius**3 * 4 / 3 / 8 |
| | ) |
| | fillet2Corner = radius**2 * 2 |
| | fillet1Corner = ( |
| | math.pi * radius**2 / 4 * radius |
| | ) |
| | extraFillet = qRoundArea * xw |
| | filletOuterExt = radius**2 * 10 |
| | rectBox = ( |
| | cubeVolume - (4 + 3) * (filletOuter + filletCorner) - 5 * filletOuterExt + filletCorner |
| | ) |
| | fillets = ( |
| | (4 + 3) * filletPrism |
| | + 5 * extraFillet |
| | + fillet3Corner * 2 |
| | + fillet2Corner * 4 |
| | + fillet1Corner * 0 |
| | ) |
| | volume = rectBox + fillets |
| | |
| | Link = Doc.addObject("App::Link", "Link001") |
| | Link.setLink(Doc.Body) |
| | Link.Label = "Body001" |
| | Doc.recompute() |
| | |
| | self.assertAlmostEqual(abs(Body.Shape.Volume), volume, 6) |
| | self.assertAlmostEqual(abs(Link.Shape.Volume), volume, 6) |
| |
|
| | def testMultiTransformBody(self): |
| | pass |
| | |
| | |
| | |
| | |
| |
|
| | def tearDown(self): |
| | |
| | FreeCAD.closeDocument("PartDesignTestMultiTransform") |
| | FreeCAD.ConfigSet("SuppressRecomputeRequiredDialog", "") |
| | |
| |
|