-
Notifications
You must be signed in to change notification settings - Fork 0
/
gcode_to_canvas.js
123 lines (94 loc) · 2.58 KB
/
gcode_to_canvas.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
var GCodeCanvas = (function() {
function GCodeCanvas(canvas,platform) {
if (platform == undefined) {
var platform = {
length: 225.0,
width: 145.0,
height: 150.0
}
}
this.platform = platform;
this.scale = 2.0;
this.platform.length *= this.scale;
this.platform.width *= this.scale;
this.canvas = canvas;
// this.canvas.width(this.platform.length);
// this.canvas.height(this.platform.width);
this.origin = {
x: this.canvas.width() / 2,
y: this.canvas.height() / 2
};
this.context = this.canvas[0].getContext("2d");
this.context.lineWidth = 0.5; // * this.scale; // could be used to simulate "spread";
this.queue = [];
this.current = null;
this.running = false;
return this;
};
GCodeCanvas.prototype.enqueue = function(instruction) {
this.queue.push(instruction);
};
GCodeCanvas.prototype.getNextInstruction = function() {
var instruction = this.queue.shift();
this.current = {
gcode: instruction,
coordinates: null
}
this.current.coordinates = this._translate_coordinates();
return this.current;
};
GCodeCanvas.prototype.run = function() {
if (this.queue.length > 0) {
if (this.running == false) this.begin();
this.placePoint();
if (this.queue.length == 0) {
this.end();
return;
}
this.run()
};
};
GCodeCanvas.prototype.begin = function() {
this.running = true;
this.getNextInstruction();
var coords = this.current.coordinates;
var origin = this.origin;
var scale = 1.0; // this.scale;
var x = (origin.x * scale) - (coords.x * scale);
var y = (origin.y * scale) - (coords.y * scale);
this.context.beginPath();
this.context.moveTo(x, y);
};
GCodeCanvas.prototype.placePoint = function() {
this.getNextInstruction();
var coords = this.current.coordinates;
var origin = this.origin;
var scale = 1.0; // this.scale;
var x = (origin.x * scale) - (coords.x * scale);
var y = (origin.y * scale) - (coords.y * scale);
this.context.lineTo(x, y);
this.context.stroke();
};
GCodeCanvas.prototype.end = function() {
this.running = false;
}
GCodeCanvas.prototype._translate_coordinates = function() {
var instruction = this.current.gcode;
var parts = instruction.split(" ");
if (parts[0] != "G1") return;
var rawValues = {
x: parts[1],
y: parts[2],
z: parts[3]
}
function convert(rawValue) {
return parseFloat(rawValue.replace(/[XYZ]/, ''));
}
return {
x: convert(rawValues.x),
y: convert(rawValues.y),
z: convert(rawValues.z)
}
};
return GCodeCanvas;
})();