e231cedfb32ea2692b33e3c9fbb3e15c0e6270e3
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 <fstream>
7) #include <iostream>
8) #include <string>
9) #include <vector>
10) 
11) #include "gcmd.h"
12) #include "gcode.h"
13) #include "gcustom.h"
14) #include "gfast.h"
15) #include "gfeed.h"
16) #include "glinear.h"
17) #include "point.h"
18) 
19) /// consturctor
20) GCode::GCode()
21) {
22) }
23) 
24) /// destructor
25) GCode::~GCode()
26) {
27)   GCmds::const_iterator gcmd;
28)   for (gcmd = mGCmds.begin(); gcmd != mGCmds.end(); ++gcmd)
29)     delete *gcmd;
30) }
31) 
32) /**
33)  * @brief append fast move up command
34)  * @param[in] z z coordinate to move up to
35)  */
36) void GCode::appendUp(double z)
37) {
38)   GFast *up = new GFast;
39)   up->mZ.set(z);
40)   mGCmds.push_back(up);
41) }
42) 
43) /**
44)  * @brief append fast move command
45)  * @param[in] pt point to move to
46)  */
47) void GCode::appendFast(const Point &pt)
48) {
49)   GFast *fast = new GFast;
50)   fast->mX.set(pt.mX);
51)   fast->mY.set(pt.mY);
52)   mGCmds.push_back(fast);
53) }
54) 
55) /**
56)  * @brief append set feed rate command
57)  * @param[in] feed feed rate
58)  */
59) void GCode::appendFeed(double feed)
60) {
61)   GFeed *gfeed = new GFeed;
62)   gfeed->mFeed = feed;
63)   mGCmds.push_back(gfeed);
64) }
65) 
66) /**
67)  * @brief append linear cut down command
68)  * @param[in] z z coordinate to cut down to
69)  */
70) void GCode::appendDown(double z)
71) {
72)   GLinear *down = new GLinear;
73)   down->mZ.set(z);
74)   mGCmds.push_back(down);
75) }
76) 
77) /**
78)  * @brief append linear cut command
79)  * @param[in] pt point to cut to
80)  */
81) void GCode::appendLinear(const Point &pt)
82) {
83)   GLinear *linear = new GLinear;
84)   linear->mX.set(pt.mX);
85)   linear->mY.set(pt.mY);
86)   mGCmds.push_back(linear);
87) }
88) 
89) /**
90)  * @brief append custom command
91)  * @param[in] cmd custom command to append
92)  */
93) void GCode::appendCustom(const std::string &cmd)
94) {
95)   GCustom *custom = new GCustom;
96)   custom->mCmd = cmd;
97)   mGCmds.push_back(custom);
98) }
99) 
100) /**
101)  * @brief output G-code to stream
102)  * @param[in] strm stream to write G-code to
Stefan Schuermans configuration of precision

Stefan Schuermans authored 11 years ago

103)  * @param[in] digits number of digits to output after decimal point
Stefan Schuermans initial version, DXFs can b...

Stefan Schuermans authored 11 years ago

104)  */
Stefan Schuermans configuration of precision

Stefan Schuermans authored 11 years ago

105) void GCode::toStrm(std::ostream &strm, unsigned int digits) const
Stefan Schuermans initial version, DXFs can b...

Stefan Schuermans authored 11 years ago

106) {
Stefan Schuermans configuration of precision

Stefan Schuermans authored 11 years ago

107)   strm.precision(digits);
108)   strm << std::fixed;
109) 
Stefan Schuermans initial version, DXFs can b...

Stefan Schuermans authored 11 years ago

110)   GCmds::const_iterator gcmd;
111)   for (gcmd = mGCmds.begin(); gcmd != mGCmds.end(); ++gcmd)
112)     (*gcmd)->toStrm(strm);
113) }
114) 
115) /**
116)  * @brief output G-code to file
117)  * @param[in] strFileName name of file to write G-code to
Stefan Schuermans configuration of precision

Stefan Schuermans authored 11 years ago

118)    * @param[in] digits number of digits to output after decimal point
Stefan Schuermans initial version, DXFs can b...

Stefan Schuermans authored 11 years ago

119)  * @return if writing G-code was successful
120)  */
Stefan Schuermans configuration of precision

Stefan Schuermans authored 11 years ago

121) bool GCode::toFile(const std::string &strFileName, unsigned int digits) const
Stefan Schuermans initial version, DXFs can b...

Stefan Schuermans authored 11 years ago

122) {
123)   std::ofstream ofstrm(strFileName.c_str(), std::ios::out);
124)   if (!ofstrm.is_open()) {
125)     std::cerr << "could not open \"" << strFileName << "\" for writing"
126)               << std::endl;
127)     return false;
128)   }
129) 
Stefan Schuermans configuration of precision

Stefan Schuermans authored 11 years ago

130)   toStrm(ofstrm, digits);