9dc02977ad3b4f9b8ff3dd70800372ead459f9ae
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"
Stefan Schuermans add support for dwell time...

Stefan Schuermans authored 11 years ago

14) #include "gdwell.h"
Stefan Schuermans initial version, DXFs can b...

Stefan Schuermans authored 11 years ago

15) #include "gfast.h"
16) #include "gfeed.h"
17) #include "glinear.h"
18) #include "point.h"
19) 
20) /// consturctor
21) GCode::GCode()
22) {
23) }
24) 
25) /// destructor
26) GCode::~GCode()
27) {
28)   GCmds::const_iterator gcmd;
29)   for (gcmd = mGCmds.begin(); gcmd != mGCmds.end(); ++gcmd)
30)     delete *gcmd;
31) }
32) 
33) /**
34)  * @brief append fast move up command
35)  * @param[in] z z coordinate to move up to
36)  */
37) void GCode::appendUp(double z)
38) {
39)   GFast *up = new GFast;
40)   up->mZ.set(z);
41)   mGCmds.push_back(up);
42) }
43) 
44) /**
45)  * @brief append fast move command
46)  * @param[in] pt point to move to
47)  */
48) void GCode::appendFast(const Point &pt)
49) {
50)   GFast *fast = new GFast;
51)   fast->mX.set(pt.mX);
52)   fast->mY.set(pt.mY);
53)   mGCmds.push_back(fast);
54) }
55) 
56) /**
57)  * @brief append set feed rate command
58)  * @param[in] feed feed rate
59)  */
60) void GCode::appendFeed(double feed)
61) {
62)   GFeed *gfeed = new GFeed;
63)   gfeed->mFeed = feed;
64)   mGCmds.push_back(gfeed);
65) }
66) 
67) /**
68)  * @brief append linear cut down command
69)  * @param[in] z z coordinate to cut down to
70)  */
71) void GCode::appendDown(double z)
72) {
73)   GLinear *down = new GLinear;
74)   down->mZ.set(z);
75)   mGCmds.push_back(down);
76) }
77) 
78) /**
79)  * @brief append linear cut command
80)  * @param[in] pt point to cut to
81)  */
82) void GCode::appendLinear(const Point &pt)
83) {
84)   GLinear *linear = new GLinear;
85)   linear->mX.set(pt.mX);
86)   linear->mY.set(pt.mY);
87)   mGCmds.push_back(linear);
88) }
89) 
Stefan Schuermans add support for dwell time...

Stefan Schuermans authored 11 years ago

90) /**
91)  * @brief append dwell command
92)  * @param[in] sec number of seconds to dwell (must be positive)
93)  */
94) void GCode::appendDwell(double sec)
95) {
96)   GDwell *dwell = new GDwell;
97)   dwell->mSec = sec;
98)   mGCmds.push_back(dwell);
99) }
100) 
Stefan Schuermans initial version, DXFs can b...

Stefan Schuermans authored 11 years ago

101) /**
102)  * @brief append custom command
103)  * @param[in] cmd custom command to append
104)  */
105) void GCode::appendCustom(const std::string &cmd)
106) {
107)   GCustom *custom = new GCustom;
108)   custom->mCmd = cmd;
109)   mGCmds.push_back(custom);
110) }
111) 
112) /**
113)  * @brief output G-code to stream
114)  * @param[in] strm stream to write G-code to
Stefan Schuermans configuration of precision

Stefan Schuermans authored 11 years ago

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

Stefan Schuermans authored 11 years ago

116)  */
Stefan Schuermans configuration of precision

Stefan Schuermans authored 11 years ago

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

Stefan Schuermans authored 11 years ago

118) {
Stefan Schuermans configuration of precision

Stefan Schuermans authored 11 years ago

119)   strm.precision(digits);
120)   strm << std::fixed;
121) 
Stefan Schuermans initial version, DXFs can b...

Stefan Schuermans authored 11 years ago

122)   GCmds::const_iterator gcmd;
123)   for (gcmd = mGCmds.begin(); gcmd != mGCmds.end(); ++gcmd)
124)     (*gcmd)->toStrm(strm);
125) }
126) 
127) /**
128)  * @brief output G-code to file
129)  * @param[in] strFileName name of file to write G-code to
Stefan Schuermans add support for dwell time...

Stefan Schuermans authored 11 years ago

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

Stefan Schuermans authored 11 years ago

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

Stefan Schuermans authored 11 years ago

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

Stefan Schuermans authored 11 years ago

134) {
135)   std::ofstream ofstrm(strFileName.c_str(), std::ios::out);
136)   if (!ofstrm.is_open()) {
137)     std::cerr << "could not open \"" << strFileName << "\" for writing"
138)               << std::endl;
139)     return false;
140)   }
141) 
Stefan Schuermans configuration of precision

Stefan Schuermans authored 11 years ago

142)   toStrm(ofstrm, digits);