aedc34a40832e7bebe9ff13213d880d7acb17c63
Stefan Schuermans initial version, DXFs can b...

Stefan Schuermans authored 11 years ago

1) /* drawing (DXF) to G-code (NGC) converter
2)  * Copyright 2013 Stefan Schuermans <stefan@schuermans.info>
3)  * Copyleft: CC-BY-SA http://creativecommons.org/licenses/by-sa/3.0/
4)  */
5) 
6) #include <vector>
7) 
8) #include "gcode.h"
9) #include "path.h"
10) #include "point.h"
11) #include "settings.h"
12) 
13) /**
14)  * @brief add a new point to the end of the path
15)  * @param[in] point point to add
16)  */
17) void Path::addPoint(const Point &point)
18) {
19)   mPoints.push_back(point);
20) }
21) 
22) /**
23)  * @brief add a new point to the end of the path
24)  * @param[in] x x coordinate of point to add
25)  * @param[in] y y coordinate of point to add
26)  */
27) void Path::addPoint(double x, double y)
28) {
29)   addPoint(Point(x, y));
30) }
31) 
Stefan Schuermans implement joining and impro...

Stefan Schuermans authored 11 years ago

32) /**
33)  * @brief prepend other path to this one
34)  * @param[in] other other path to prepend
35)  */
36) void Path::prependPath(const Path &other)
37) {
38)   mPoints.insert(mPoints.begin(),
39)                  other.mPoints.begin(), other.mPoints.end());
40) }
41) 
42) /**
43)  * @brief prepend other path in reverse to this one
44)  * @param[in] other other path to prepend
45)  */
46) void Path::prependReversedPath(const Path &other)
47) {
48)   mPoints.insert(mPoints.begin(),
49)                  other.mPoints.rbegin(), other.mPoints.rend());
50) }
51) 
52) /**
53)  * @brief append other path to this one
54)  * @param[in] other other path to appepend
55)  */
56) void Path::appendPath(const Path &other)
57) {
58)   mPoints.insert(mPoints.end(),
59)                  other.mPoints.begin(), other.mPoints.end());
60) }
61) 
62) /**
63)  * @brief append other path in reverse to this one
64)  * @param[in] other other path to appepend
65)  */
66) void Path::appendReversedPath(const Path &other)
67) {
68)   mPoints.insert(mPoints.end(),
69)                  other.mPoints.rbegin(), other.mPoints.rend());
70) }
71) 
72) /**
73)  * @brief remove points too close to each other
74)  * @param[in] eqDist maximum distance of two points to be considered equal
75)  */
76) void Path::removeEqPoints(double eqDist)
77) {
78)   Points::iterator pt = mPoints.begin();
79)   while (pt != mPoints.end()) {
80)     Points::iterator next = pt + 1;
81)     if (next != mPoints.end() && pt->equals(*next, eqDist))
82)       mPoints.erase(next);
83)     else
84)       pt++;
85)   }
86) }
87) 
Stefan Schuermans initial version, DXFs can b...

Stefan Schuermans authored 11 years ago

88) /**
89)  * @brief convert path to G-code
90)  * @param[in] settings G-code creation settings
Stefan Schuermans process each layer z step b...

Stefan Schuermans authored 11 years ago

91)  * @param[in] z z coordinate to use for G-code of path
Stefan Schuermans initial version, DXFs can b...

Stefan Schuermans authored 11 years ago

92)  * @param[in,out] gcode new G-code is appended to existing G-code
93)  */
Stefan Schuermans process each layer z step b...

Stefan Schuermans authored 11 years ago

94) void Path::toGCode(const Settings &settings, double z, GCode &gcode) const
Stefan Schuermans initial version, DXFs can b...

Stefan Schuermans authored 11 years ago

95) {
Stefan Schuermans add support for offset in x...

Stefan Schuermans authored 11 years ago

96)   Point offset(settings.offset_x, settings.offset_y);
97) 
Stefan Schuermans initial version, DXFs can b...

Stefan Schuermans authored 11 years ago

98)   // leave if no points
99)   if (mPoints.empty())
100)     return;
101) 
102)   // move up
103)   gcode.appendUp(settings.move_z);
104) 
Stefan Schuermans process each layer z step b...

Stefan Schuermans authored 11 years ago

105)   // move to start
Stefan Schuermans add support for offset in x...

Stefan Schuermans authored 11 years ago

106)   gcode.appendFast(mPoints.front() + offset);
Stefan Schuermans initial version, DXFs can b...

Stefan Schuermans authored 11 years ago

107) 
Stefan Schuermans process each layer z step b...

Stefan Schuermans authored 11 years ago

108)   // cut down
109)   gcode.appendFeed(settings.feed_drill);
110)   gcode.appendDown(z);
Stefan Schuermans initial version, DXFs can b...

Stefan Schuermans authored 11 years ago

111) 
Stefan Schuermans process each layer z step b...

Stefan Schuermans authored 11 years ago

112)   // cut along all points
113)   gcode.appendFeed(settings.feed_mill);
114)   Points::const_iterator pt = mPoints.begin();
115)   for (++pt; pt != mPoints.end(); ++pt)
Stefan Schuermans add support for offset in x...

Stefan Schuermans authored 11 years ago

116)     gcode.appendLinear(*pt + offset);
Stefan Schuermans initial version, DXFs can b...

Stefan Schuermans authored 11 years ago

117) 
Stefan Schuermans process each layer z step b...

Stefan Schuermans authored 11 years ago

118)   // move up
119)   gcode.appendUp(settings.move_z);