1 // TextPath.cpp
2
3 // copyright Dan Heeks, September 3rd 2009, license: GPL version 3 http://www.gnu.org/licenses/gpl-3.0.txt
4
5 #include "stdafx.h"
6 #include "TextPath.h"
7 #include <cmath>
8
CTextPath(const _TCHAR * txt_file,int format_style)9 CTextPath::CTextPath(const _TCHAR* txt_file, int format_style)
10 {
11 m_ofs = new ofstream(Ttc(txt_file));
12 m_number_format = format_style;
13 }
14
~CTextPath()15 CTextPath::~CTextPath()
16 {
17 delete m_ofs;
18 }
19
Failed()20 bool CTextPath::Failed()
21 {
22 return !(*m_ofs);
23 }
24
25 static char str_for_num[1024];
26
num1(double v)27 static const char* num1(double v)
28 {
29 int i = 0;
30 if(v<0)str_for_num[i] = '-';
31 else str_for_num[i] = '+';
32 i++;
33
34 double value = v;
35 value = fabs(value);
36 if(value > 99999)value = 99999;
37
38 double f = 10000.0;
39 for(int j = 0; j<8; j++)
40 {
41 double temp_v = value / f;
42 if(j == 7)temp_v += 0.5; // round up last one
43 int d = (int)temp_v;
44 sprintf(&str_for_num[i], "%d", d);
45 i++;
46 value -= d*f;
47 f *= 0.1;
48 if(j == 4){
49 str_for_num[i] = '.';
50 i++;
51 }
52 }
53
54 // end string
55 str_for_num[i] = 0;
56
57 return str_for_num;
58 }
59
num(double v)60 const char* CTextPath::num(double v)
61 {
62 switch(m_number_format)
63 {
64 case 1:
65 num1(v);
66 break;
67
68 default:
69 sprintf(str_for_num, "%g", v);
70 break;
71 }
72
73 return str_for_num;
74 }
75
OnRapidZ(double z)76 void CTextPath::OnRapidZ(double z)
77 {
78 (*m_ofs)<<"G0Z"<<num(z)<<"\n";
79 }
80
OnRapidXY(double x,double y)81 void CTextPath::OnRapidXY(double x, double y)
82 {
83 (*m_ofs)<<"G0X"<<num(x);
84 (*m_ofs)<<"Y"<<num(y)<<"\n";
85 }
86
OnFeedZ(double z)87 void CTextPath::OnFeedZ(double z)
88 {
89 (*m_ofs)<<"G1Z"<<num(z)<<"\n";
90 }
91
OnFeedXY(double x,double y)92 void CTextPath::OnFeedXY(double x, double y)
93 {
94 (*m_ofs)<<"G1X"<<num(x);
95 (*m_ofs)<<"Y"<<num(y)<<"\n";
96 }
97
OnArcCCW(double x,double y,double i,double j)98 void CTextPath::OnArcCCW(double x, double y, double i, double j)
99 {
100 (*m_ofs)<<"G3X"<<num(x);
101 (*m_ofs)<<"Y"<<num(y);
102 (*m_ofs)<<"I"<<num(i);
103 (*m_ofs)<<"J"<<num(j)<<"\n";
104 }
105
OnArcCW(double x,double y,double i,double j)106 void CTextPath::OnArcCW(double x, double y, double i, double j)
107 {
108 (*m_ofs)<<"G2X"<<num(x);
109 (*m_ofs)<<"Y"<<num(y);
110 (*m_ofs)<<"I"<<num(i);
111 (*m_ofs)<<"J"<<num(j)<<"\n";
112 }
113
114