2
# ***************************************************************************
3
# * Copyright (c) 2019 sliptonic <shopinthewoods@gmail.com> *
5
# * This program is free software; you can redistribute it and/or modify *
6
# * it under the terms of the GNU Lesser General Public License (LGPL) *
7
# * as published by the Free Software Foundation; either version 2 of *
8
# * the License, or (at your option) any later version. *
9
# * for detail see the LICENCE text file. *
11
# * This program is distributed in the hope that it will be useful, *
12
# * but WITHOUT ANY WARRANTY; without even the implied warranty of *
13
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
14
# * GNU Library General Public License for more details. *
16
# * You should have received a copy of the GNU Library General Public *
17
# * License along with this program; if not, write to the Free Software *
18
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
21
# ***************************************************************************
26
import Path.Main.Job as PathJob
27
import Path.Op.Helix as PathHelix
28
import Tests.PathTestUtils as PathTestUtils
30
Path.Log.setLevel(Path.Log.Level.INFO, Path.Log.thisModule())
31
# Path.Log.trackModule(Path.Log.thisModule())
34
class TestPathHelix(PathTestUtils.PathTestBase):
39
self.doc = FreeCAD.open(FreeCAD.getHomePath() + "Mod/CAM/Tests/test_holes00.fcstd")
40
self.job = PathJob.Create("Job", [self.doc.Body])
43
FreeCAD.closeDocument(self.doc.Name)
46
"""Verify Helix does not throw an exception."""
48
op = PathHelix.Create("Helix")
52
"""Verify Helix generates proper holes from model"""
54
op = PathHelix.Create("Helix")
59
pos = proxy.holePosition(op, model, sub)
60
self.assertRoughly(round(pos.Length / 10, 0), proxy.holeDiameter(op, model, sub))
63
"""Verify Helix generates proper holes for rotated model"""
65
self.job.Tools.Group[0].Tool.Diameter = 0.5
67
op = PathHelix.Create("Helix")
69
model = self.job.Model.Group[0]
71
for deg in range(self.RotateBy, 360, self.RotateBy):
72
model.Placement.Rotation = FreeCAD.Rotation(deg, 0, 0)
76
pos = proxy.holePosition(op, model, sub)
77
# Path.Log.track(deg, pos, pos.Length)
79
round(pos.Length / 10, 0), proxy.holeDiameter(op, model, sub)
83
"""Verify Helix generates proper holes for rotated base model"""
85
for deg in range(self.RotateBy, 360, self.RotateBy):
87
self.doc = FreeCAD.open(FreeCAD.getHomePath() + "Mod/CAM/Tests/test_holes00.fcstd")
88
self.doc.Body.Placement.Rotation = FreeCAD.Rotation(deg, 0, 0)
90
self.job = PathJob.Create("Job", [self.doc.Body])
91
self.job.Tools.Group[0].Tool.Diameter = 0.5
93
op = PathHelix.Create("Helix")
95
model = self.job.Model.Group[0]
100
pos = proxy.holePosition(op, model, sub)
101
# Path.Log.track(deg, pos, pos.Length)
103
round(pos.Length / 10, 0), proxy.holeDiameter(op, model, sub)
107
"""Verify Helix generates proper holes for rotated clone base model"""
108
for deg in range(self.RotateBy, 360, self.RotateBy):
110
self.doc = FreeCAD.open(FreeCAD.getHomePath() + "Mod/CAM/Tests/test_holes00.fcstd")
111
self.clone = Draft.clone(self.doc.Body)
112
self.clone.Placement.Rotation = FreeCAD.Rotation(deg, 0, 0)
114
self.job = PathJob.Create("Job", [self.clone])
115
self.job.Tools.Group[0].Tool.Diameter = 0.5
117
op = PathHelix.Create("Helix")
119
model = self.job.Model.Group[0]
124
pos = proxy.holePosition(op, model, sub)
125
# Path.Log.track(deg, pos, pos.Length)
127
round(pos.Length / 10, 0), proxy.holeDiameter(op, model, sub)