def test05(self): """Verify can handle noops between moves""" base = TestProfile( "Inside", "CW", """ G0 X10 Y10 Z10 G1 Z0 G1 X20 G1 Y0 G1 X10 G1 Y10 G1 Z10 """, ) obj = TestFeature() db = PathDressupDogbone.ObjectDressup(obj, base) db.setup(obj, True) db.execute(obj, False) self.assertEqual(len(db.bones), 4) self.assertEqual("1: (20.00, 10.00)", self.formatBone(db.bones[0])) self.assertEqual("2: (20.00, 0.00)", self.formatBone(db.bones[1])) self.assertEqual("3: (10.00, 0.00)", self.formatBone(db.bones[2])) self.assertEqual("4: (10.00, 10.00)", self.formatBone(db.bones[3])) base = TestProfile( "Inside", "CW", """ G0 X10 Y10 Z10 G1 Z0 G1 X20 G1 Y0 G1 X10 G1 X10 G1 Y10 G1 Z10 """, ) obj = TestFeature() db = PathDressupDogbone.ObjectDressup(obj, base) db.setup(obj, True) db.execute(obj, False) self.assertEqual(len(db.bones), 4) self.assertEqual("1: (20.00, 10.00)", self.formatBone(db.bones[0])) self.assertEqual("2: (20.00, 0.00)", self.formatBone(db.bones[1])) self.assertEqual("3: (10.00, 0.00)", self.formatBone(db.bones[2])) self.assertEqual("4: (10.00, 10.00)", self.formatBone(db.bones[3]))
def test02(self): '''Verify bones are correctly generated for a Profile.''' doc = FreeCAD.newDocument("TestDressupDogbone") # This is a real world test to make sure none of the tool chain broke box0 = doc.addObject('Part::Box', 'Box') box0.Width = 100 box0.Length = 100 box0.Height = 10 box1 = doc.addObject('Part::Box', 'Box') box1.Width = 50 box1.Length = 50 box1.Height = 20 box1.Placement = FreeCAD.Placement(FreeCAD.Vector(25,25,-5), FreeCAD.Rotation(FreeCAD.Vector(0,0,1), 0)) doc.recompute() cut = doc.addObject('Part::Cut', 'Cut') cut.Base = box0 cut.Tool = box1 doc.recompute() for i in range(11): face = "Face%d" % (i+1) f = cut.Shape.getElement(face) if f.Surface.Axis == FreeCAD.Vector(0,0,1) and f.Orientation == 'Forward': break job = PathJob.Create('Job', cut, None) profile = PathProfileFaces.Create('Profile Faces') profile.Base = (cut, face) profile.StepDown = 5 profile.processHoles = True profile.processPerimeter = True doc.recompute() dogbone = PathDressupDogbone.Create(profile) doc.recompute() dog = dogbone.Proxy locs = sorted([bone[1] for bone in dog.bones], key=lambda xy: xy[0] * 1000 + xy[1]) def formatBoneLoc(pt): return "(%.2f, %.2f)" % (pt[0], pt[1]) # Make sure we get 8 bones, 2 in each corner (different heights) self.assertEquals(len(locs), 8) self.assertEquals("(27.50, 27.50)", formatBoneLoc(locs[0])) self.assertEquals("(27.50, 27.50)", formatBoneLoc(locs[1])) self.assertEquals("(27.50, 72.50)", formatBoneLoc(locs[2])) self.assertEquals("(27.50, 72.50)", formatBoneLoc(locs[3])) self.assertEquals("(72.50, 27.50)", formatBoneLoc(locs[4])) self.assertEquals("(72.50, 27.50)", formatBoneLoc(locs[5])) self.assertEquals("(72.50, 72.50)", formatBoneLoc(locs[6])) self.assertEquals("(72.50, 72.50)", formatBoneLoc(locs[7])) FreeCAD.closeDocument("TestDressupDogbone")
def test04(self): '''Verify can handle comments between moves''' base = TestProfile( 'Inside', 'CW', ''' G0 X10 Y10 Z10 G1 Z0 G1 X20 G1 Y0 G1 X10 G1 Y10 G1 Z10 ''') obj = TestFeature() db = PathDressupDogbone.ObjectDressup(obj, base) db.setup(obj, True) db.execute(obj, False) self.assertEqual(len(db.bones), 4) self.assertEqual("1: (20.00, 10.00)", self.formatBone(db.bones[0])) self.assertEqual("2: (20.00, 0.00)", self.formatBone(db.bones[1])) self.assertEqual("3: (10.00, 0.00)", self.formatBone(db.bones[2])) self.assertEqual("4: (10.00, 10.00)", self.formatBone(db.bones[3])) base = TestProfile( 'Inside', 'CW', ''' G0 X10 Y10 Z10 G1 Z0 G1 X20 G1 Y0 G1 X10 (some comment or other should not change the output) G1 Y10 G1 Z10 ''') obj = TestFeature() db = PathDressupDogbone.ObjectDressup(obj, base) db.setup(obj, True) db.execute(obj, False) self.assertEqual(len(db.bones), 4) self.assertEqual("1: (20.00, 10.00)", self.formatBone(db.bones[0])) self.assertEqual("2: (20.00, 0.00)", self.formatBone(db.bones[1])) self.assertEqual("3: (10.00, 0.00)", self.formatBone(db.bones[2])) self.assertEqual("4: (10.00, 10.00)", self.formatBone(db.bones[3]))
def test01(self): '''Verify bones are inserted if hole ends with rapid move out.''' base = TestProfile('Inside', 'CW', 'G0 X10 Y10 Z10\nG1 Z0\nG1 Y100\nG1 X12\nG1 Y10\nG1 X10\nG0 Z10') obj = TestFeature() db = PathDressupDogbone.ObjectDressup(obj, base) db.setup(obj, True) db.execute(obj, False) self.assertEqual(len(db.bones), 4) self.assertEqual("1: (10.00, 100.00)", self.formatBone(db.bones[0])) self.assertEqual("2: (12.00, 100.00)", self.formatBone(db.bones[1])) self.assertEqual("3: (12.00, 10.00)", self.formatBone(db.bones[2])) self.assertEqual("4: (10.00, 10.00)", self.formatBone(db.bones[3]))
def test00(self): '''Verify bones are inserted for simple moves.''' path = [] base = TestProfile('Inside', 'CW', 'G0 X10 Y10 Z10\nG1 Z0\nG1 Y100\nG1 X12\nG1 Y10\nG1 X10\nG1 Z10') obj = TestFeature() db = PathDressupDogbone.ObjectDressup(obj, base) db.setup(obj, True) db.execute(obj, False) self.assertEquals(len(db.bones), 4) self.assertEquals("1: (10.00, 100.00)", self.formatBone(db.bones[0])) self.assertEquals("2: (12.00, 100.00)", self.formatBone(db.bones[1])) self.assertEquals("3: (12.00, 10.00)", self.formatBone(db.bones[2])) self.assertEquals("4: (10.00, 10.00)", self.formatBone(db.bones[3]))
def test03(self): '''Verify no bone is inserted for straight move interrupted by plunge.''' base = TestProfile( 'Inside', 'CW', ''' G0 X10 Y10 Z10 G1 Z0 G1 X0 ( start) G1 Y0 G1 X15 G1 Y10 G1 X10 ( straight line move to start) G0 Z10 ''') obj = TestFeature() db = PathDressupDogbone.ObjectDressup(obj, base) db.setup(obj, True) db.execute(obj, False) self.assertEqual(len(db.bones), 0)
def test01(self): """Verify bones are inserted if hole ends with rapid move out.""" base = TestProfile( "Inside", "CW", """ G0 X10 Y10 Z10 G1 Z0 G1 Y100 G1 X12 G1 Y10 G1 X10 G0 Z10 """, ) obj = TestFeature() db = PathDressupDogbone.ObjectDressup(obj, base) db.setup(obj, True) db.execute(obj, False) self.assertEqual(len(db.bones), 4) self.assertEqual("1: (10.00, 100.00)", self.formatBone(db.bones[0])) self.assertEqual("2: (12.00, 100.00)", self.formatBone(db.bones[1])) self.assertEqual("3: (12.00, 10.00)", self.formatBone(db.bones[2])) self.assertEqual("4: (10.00, 10.00)", self.formatBone(db.bones[3]))
def test02(self): '''Verify bones are correctly generated for a Profile.''' doc = FreeCAD.newDocument("TestDressupDogbone") # This is a real world test to make sure none of the tool chain broke box0 = doc.addObject('Part::Box', 'Box') box0.Width = 100 box0.Length = 100 box0.Height = 10 box1 = doc.addObject('Part::Box', 'Box') box1.Width = 50 box1.Length = 50 box1.Height = 20 box1.Placement = FreeCAD.Placement( FreeCAD.Vector(25, 25, -5), FreeCAD.Rotation(FreeCAD.Vector(0, 0, 1), 0)) doc.recompute() cut = doc.addObject('Part::Cut', 'Cut') cut.Base = box0 cut.Tool = box1 doc.recompute() for i in range(11): face = "Face%d" % (i + 1) f = cut.Shape.getElement(face) if f.Surface.Axis == FreeCAD.Vector( 0, 0, 1) and f.Orientation == 'Forward': break PathJob.Create('Job', [cut], None) profile = PathProfileFaces.Create('Profile Faces') profile.Base = (cut, face) profile.StepDown = 5 # set start and final depth in order to eliminate effects of stock (and its default values) profile.setExpression('StartDepth', None) profile.StartDepth = 10 profile.setExpression('FinalDepth', None) profile.FinalDepth = 0 profile.processHoles = True profile.processPerimeter = True doc.recompute() dogbone = PathDressupDogbone.Create(profile) doc.recompute() dog = dogbone.Proxy locs = sorted([bone[1] for bone in dog.bones], key=lambda xy: xy[0] * 1000 + xy[1]) def formatBoneLoc(pt): return "(%.2f, %.2f)" % (pt[0], pt[1]) # Make sure we get 8 bones, 2 in each corner (different heights) # with start point changes it passes back over the same spot multiple times, so just make sure they are in the right locations # self.assertEqual(len(locs), 8) self.assertEqual("(27.50, 27.50)", formatBoneLoc(locs[0])) self.assertEqual("(27.50, 27.50)", formatBoneLoc(locs[1])) self.assertEqual("(27.50, 72.50)", formatBoneLoc(locs[2])) self.assertEqual("(27.50, 72.50)", formatBoneLoc(locs[3])) self.assertEqual("(72.50, 27.50)", formatBoneLoc(locs[4])) self.assertEqual("(72.50, 27.50)", formatBoneLoc(locs[5])) self.assertEqual("(72.50, 72.50)", formatBoneLoc(locs[6])) self.assertEqual("(72.50, 72.50)", formatBoneLoc(locs[7])) FreeCAD.closeDocument("TestDressupDogbone")