| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | import unittest |
| | import math |
| |
|
| | import FreeCAD |
| | from FreeCAD import Base |
| | import Part |
| | import Sketcher |
| |
|
| |
|
| | class TestShapeBinder(unittest.TestCase): |
| | def setUp(self): |
| | self.Doc = FreeCAD.newDocument("PartDesignTestShapeBinder") |
| |
|
| | def testTwoBodyShapeBinderCase(self): |
| | self.Body = self.Doc.addObject("PartDesign::Body", "Body") |
| | self.Box = self.Doc.addObject("PartDesign::AdditiveBox", "Box") |
| | self.Box.Length = 1 |
| | self.Box.Width = 1 |
| | self.Box.Height = 1 |
| | self.Body.addObject(self.Box) |
| | self.Doc.recompute() |
| | self.Body001 = self.Doc.addObject("PartDesign::Body", "Body001") |
| | self.ShapeBinder = self.Doc.addObject("PartDesign::ShapeBinder", "ShapeBinder") |
| | self.ShapeBinder.Support = [(self.Box, "Face1")] |
| | self.Body001.addObject(self.ShapeBinder) |
| | self.Doc.recompute() |
| | self.assertIn("Box", self.ShapeBinder.OutList[0].Label) |
| | self.assertIn("Body001", self.ShapeBinder.InList[0].Label) |
| |
|
| | def tearDown(self): |
| | |
| | FreeCAD.closeDocument("PartDesignTestShapeBinder") |
| | |
| |
|
| |
|
| | class TestSubShapeBinder(unittest.TestCase): |
| | def setUp(self): |
| | self.Doc = FreeCAD.newDocument("PartDesignTestSubShapeBinder") |
| |
|
| | def tearDown(self): |
| | FreeCAD.closeDocument("PartDesignTestSubShapeBinder") |
| |
|
| | def testOffsetBinder(self): |
| | |
| | body = self.Doc.addObject("PartDesign::Body", "Body") |
| | box = self.Doc.addObject("PartDesign::AdditiveBox", "Box") |
| | body.addObject(box) |
| |
|
| | box.Length = 10.00000 |
| | box.Width = 10.00000 |
| | box.Height = 10.00000 |
| |
|
| | binder = body.newObject("PartDesign::SubShapeBinder", "Binder") |
| | binder.Support = [(box, ("Edge2", "Edge12", "Edge6", "Edge10"))] |
| | self.Doc.recompute() |
| |
|
| | self.assertAlmostEqual(binder.Shape.Length, 40) |
| |
|
| | binder.OffsetJoinType = "Tangent" |
| | binder.Offset = 5.00000 |
| | self.Doc.recompute() |
| |
|
| | self.assertAlmostEqual(binder.Shape.Length, 80) |
| |
|
| | def testBinderBeforeOrAfterPad(self): |
| | """Test case for PR #8763""" |
| | body = self.Doc.addObject("PartDesign::Body", "Body") |
| | sketch = body.newObject("Sketcher::SketchObject", "Sketch") |
| | sketch.AttachmentSupport = (self.Doc.XZ_Plane, [""]) |
| | sketch.MapMode = "FlatFace" |
| | self.Doc.recompute() |
| |
|
| | geoList = [] |
| | geoList.append( |
| | Part.LineSegment( |
| | Base.Vector(-21.762587, 19.904083, 0), Base.Vector(32.074337, 19.904083, 0) |
| | ) |
| | ) |
| | geoList.append( |
| | Part.LineSegment( |
| | Base.Vector(32.074337, 19.904083, 0), Base.Vector(32.074337, -27.458027, 0) |
| | ) |
| | ) |
| | geoList.append( |
| | Part.LineSegment( |
| | Base.Vector(32.074337, -27.458027, 0), Base.Vector(-21.762587, -27.458027, 0) |
| | ) |
| | ) |
| | geoList.append( |
| | Part.LineSegment( |
| | Base.Vector(-21.762587, -27.458027, 0), Base.Vector(-21.762587, 19.904083, 0) |
| | ) |
| | ) |
| | sketch.addGeometry(geoList, False) |
| |
|
| | conList = [] |
| | conList.append(Sketcher.Constraint("Coincident", 0, 2, 1, 1)) |
| | conList.append(Sketcher.Constraint("Coincident", 1, 2, 2, 1)) |
| | conList.append(Sketcher.Constraint("Coincident", 2, 2, 3, 1)) |
| | conList.append(Sketcher.Constraint("Coincident", 3, 2, 0, 1)) |
| | conList.append(Sketcher.Constraint("Horizontal", 0)) |
| | conList.append(Sketcher.Constraint("Horizontal", 2)) |
| | conList.append(Sketcher.Constraint("Vertical", 1)) |
| | conList.append(Sketcher.Constraint("Vertical", 3)) |
| | sketch.addConstraint(conList) |
| | del geoList, conList |
| |
|
| | self.Doc.recompute() |
| |
|
| | binder1 = body.newObject("PartDesign::SubShapeBinder", "Binder") |
| | binder1.Support = sketch |
| | self.Doc.recompute() |
| | pad = body.newObject("PartDesign::Pad", "Pad") |
| | pad.Profile = sketch |
| | pad.Length = 10 |
| | self.Doc.recompute() |
| | pad.ReferenceAxis = (sketch, ["N_Axis"]) |
| | sketch.Visibility = False |
| | self.Doc.recompute() |
| |
|
| | binder2 = body.newObject("PartDesign::SubShapeBinder", "Binder001") |
| | binder2.Support = [pad, "Sketch."] |
| | self.Doc.recompute() |
| |
|
| | self.assertAlmostEqual(binder1.Shape.BoundBox.XLength, binder2.Shape.BoundBox.XLength, 2) |
| | self.assertAlmostEqual(binder1.Shape.BoundBox.YLength, binder2.Shape.BoundBox.YLength, 2) |
| | self.assertAlmostEqual(binder1.Shape.BoundBox.ZLength, binder2.Shape.BoundBox.ZLength, 2) |
| |
|
| | nor1 = binder1.Shape.Face1.normalAt(0, 0) |
| | nor2 = binder2.Shape.Face1.normalAt(0, 0) |
| | self.assertAlmostEqual(nor1.getAngle(nor2), 0.0, 2) |
| |
|
| | def testBinderWithRevolution(self): |
| | doc = self.Doc |
| | body = doc.addObject("PartDesign::Body", "Body") |
| | doc.recompute() |
| | sketch = body.newObject("Sketcher::SketchObject", "Sketch") |
| | geoList = [] |
| | geoList.append(Part.LineSegment(Base.Vector(10, 10, 0), Base.Vector(30, 10, 0))) |
| | geoList.append(Part.LineSegment(Base.Vector(30, 10, 0), Base.Vector(30, 15, 0))) |
| | geoList.append(Part.LineSegment(Base.Vector(30, 15, 0), Base.Vector(10, 15, 0))) |
| | geoList.append(Part.LineSegment(Base.Vector(10, 15, 0), Base.Vector(10, 10, 0))) |
| | sketch.addGeometry(geoList, False) |
| | del geoList |
| | constraintList = [] |
| | constraintList.append(Sketcher.Constraint("Coincident", 0, 2, 1, 1)) |
| | constraintList.append(Sketcher.Constraint("Coincident", 1, 2, 2, 1)) |
| | constraintList.append(Sketcher.Constraint("Coincident", 2, 2, 3, 1)) |
| | constraintList.append(Sketcher.Constraint("Coincident", 3, 2, 0, 1)) |
| | constraintList.append(Sketcher.Constraint("Horizontal", 0)) |
| | constraintList.append(Sketcher.Constraint("Horizontal", 2)) |
| | constraintList.append(Sketcher.Constraint("Vertical", 1)) |
| | constraintList.append(Sketcher.Constraint("Vertical", 3)) |
| | sketch.addConstraint(constraintList) |
| | del constraintList |
| | doc.recompute() |
| | binder = body.newObject("PartDesign::SubShapeBinder", "Binder") |
| | binder.Support = sketch |
| | revolution = body.newObject("PartDesign::Revolution", "Revolution") |
| | revolution.Profile = ( |
| | binder, |
| | [ |
| | "", |
| | ], |
| | ) |
| | revolution.ReferenceAxis = (doc.getObject("Y_Axis"), [""]) |
| | revolution.Angle = 360.0 |
| | revolution.Reversed = 1 |
| | doc.recompute() |
| | revolution.Angle2 = 60.0 |
| | doc.recompute() |
| | self.assertAlmostEqual(binder.Shape.Area, 100) |
| | volume = 100 * math.pi * 2 * 20 |
| | self.assertAlmostEqual(revolution.Shape.Volume, volume) |
| |
|