Skip to content

Commit 2949595

Browse files
committed
Terminology Shift. Valid JSON. Joins.
1 parent 1fe4952 commit 2949595

3 files changed

Lines changed: 71 additions & 75 deletions

File tree

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
setup(
88
name="vpype-gcode",
9-
version="0.4.0",
9+
version="0.5.0",
1010
description="vpype gcode plugin",
1111
long_description=readme,
1212
long_description_content_type="text/markdown",

vpype_gcode/bundled_configs.toml

Lines changed: 25 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,52 @@
11
[gwrite.ninja]
22
header = "G20\nG17\nG90\n"
3-
move = "M380\nG00 X{x:.4f} Y{y:.4f}\nM381\n"
4-
line = "G01 X{x:.4f} Y{y:.4f}\n"
3+
firstsegment = "M380\nG00 X{x:.4f} Y{y:.4f}\nM381\n"
4+
segment = "G01 X{x:.4f} Y{y:.4f}\n"
55
footer = "M2\n"
66
unit = "mm"
77

88
[gwrite.gcode]
99
header = "G20\nG17\nG90\n"
10-
move = "G00 X{x:.4f} Y{y:.4f}\n"
11-
line = "G01 X{x:.4f} Y{y:.4f}\n"
10+
firstsegment = "G00 X{x:.4f} Y{y:.4f}\n"
11+
segment = "G01 X{x:.4f} Y{y:.4f}\n"
1212
footer = "M2\n"
1313
unit = "mm"
1414

1515
[gwrite.gcode_relative]
1616
header = "G20\nG17\nG91\n"
17-
move = "G00 X{dx:.4f} Y{dy:.4f}\n"
18-
line = "G01 X{dx:.4f} Y{dy:.4f}\n"
17+
firstsegment = "G00 X{dx:.4f} Y{dy:.4f}\n"
18+
segment = "G01 X{dx:.4f} Y{dy:.4f}\n"
1919
footer = "M2\n"
2020
unit = "mm"
2121

2222
[gwrite.csv]
2323
header = "#Operation, X-value, Y-value\n"
24-
move = "Move, {x:f}, {x:f}\n"
25-
line = "Line-to, {x:f}, {x:f}\n"
26-
24+
firstsegment = "Move, {x:f}, {x:f}\n"
25+
segment = "Line-to, {x:f}, {x:f}\n"
26+
lastsegment = "Stop, {x:f}, {x:f}\n"
2727

2828
[gwrite.json]
29-
header = "{{\n"
29+
header = "{{"
3030
footer = "}}\n"
31-
prelayer = "\t\"Layer\": {{\n"
32-
preblock = "\t\t\"Block\": [\n"
33-
move = "\t\t{{\n\t\t\t\"X\": {ix:d},\n\t\t\t\"Y\": {iy:d}\n\t\t}}"
34-
line = ",\n\t\t{{\n\t\t\t\"X\": {ix:d},\n\t\t\t\"Y\": {iy:d}\n\t\t}}"
35-
postblock = "\n\t\t],\n"
36-
postlayer = "\t}},\n"
31+
linejoin = ","
32+
layerjoin = ","
33+
prelayer = "\n\t\"Layer\": {{"
34+
postlayer = "\t}}\n"
35+
preline = "\n\t\t\"LineCollection{index:d}\": [\n"
36+
postline = "\n\t\t]"
37+
segment = "\t\t{{\n\t\t\t\"X\": {ix:d},\n\t\t\t\"Y\": {iy:d}\n\t\t}},\n"
38+
lastsegment = "\t\t{{\n\t\t\t\"X\": {ix:d},\n\t\t\t\"Y\": {iy:d}\n\t\t}}"
39+
40+
3741

3842
[gwrite.isvg]
3943
header = """<?xml version="1.0" encoding="UTF-8" standalone="no"?>
4044
<svg xmlns="http://www.w3.org/2000/svg" xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:xlink="http://www.w3.org/1999/xlink">
4145
"""
4246
footer = "</svg>"
4347
prelayer = '<g fill="none" stroke="black">'
44-
preblock = '<path d="M '
45-
move = "{ix:d} {iy:d} l"
46-
line = "{idx:d} {idy:d} "
47-
postblock = '""/>'
48-
postlayer = "</g"
48+
preline = '<path d="M '
49+
firstsegment = "{ix:d} {iy:d} l"
50+
segment = "{idx:d} {idy:d} "
51+
postline = '"/>'
52+
postlayer = "</g>"

vpype_gcode/gwrite.py

Lines changed: 45 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -74,14 +74,16 @@ def gwrite(document: vp.Document, filename: str, profile: str):
7474

7575
# Read the config for the profile from the main vpype
7676
config = gwrite_config[profile]
77-
7877
header = config.get("header", None)
79-
move = config.get("move", None)
80-
line = config.get("line", None)
81-
preblock = config.get("preblock", None)
82-
postblock = config.get("postblock", None)
78+
firstsegment = config.get("firstsegment", None)
79+
segment = config.get("segment", None)
80+
lastsegment = config.get("lastsegment", None)
8381
prelayer = config.get("prelayer", None)
8482
postlayer = config.get("postlayer", None)
83+
layerjoin = config.get("layerjoin", None)
84+
preline = config.get("preline", None)
85+
postline = config.get("postline", None)
86+
linejoin = config.get("linejoin", None)
8587
footer = config.get("footer", None)
8688
unit = config.get("unit", "mm")
8789

@@ -100,68 +102,58 @@ def gwrite(document: vp.Document, filename: str, profile: str):
100102
last_y = 0
101103
xx = 0
102104
yy = 0
105+
lastlayer_index = len(document.layers.values()) - 1
103106
for layer_index, layer in enumerate(document.layers.values()):
104107
if prelayer is not None:
105108
f.write(prelayer.format(index=layer_index))
106-
for p_index, p in enumerate(layer):
107-
m = p * scale
108-
first = True
109-
if preblock is not None:
110-
f.write(preblock.format(index=p_index))
111-
for v_index, v in enumerate(m):
112-
x = v.real
113-
y = v.imag
109+
lastlines_index = len(layer) - 1
110+
for lines_index, lines in enumerate(layer):
111+
lines_scaled = lines * scale
112+
if preline is not None:
113+
f.write(preline.format(index=lines_index))
114+
lastsegment_index = len(lines_scaled) - 1
115+
for segment_index, seg in enumerate(lines_scaled):
116+
x = seg.real
117+
y = seg.imag
114118
dx = x - last_x
115119
dy = y - last_y
116120
idx = int(round(x - xx))
117121
idy = int(round(y - yy))
118122
xx += idx
119123
yy += idy
120-
if first:
121-
if move is not None:
122-
f.write(
123-
move.format(
124-
x=x,
125-
y=y,
126-
dx=dx,
127-
dy=dy,
128-
_x=-x,
129-
_y=-y,
130-
_dx=dx,
131-
_dy=dy,
132-
ix=xx,
133-
iy=yy,
134-
idx=idx,
135-
idy=idy,
136-
index=v_index,
137-
)
138-
)
139-
first = False
124+
if firstsegment is not None and segment_index == 0:
125+
seg_write = firstsegment
126+
elif lastsegment is not None and segment_index == lastsegment_index:
127+
seg_write = lastsegment
140128
else:
141-
if line is not None:
142-
f.write(
143-
line.format(
144-
x=x,
145-
y=y,
146-
dx=dx,
147-
dy=dy,
148-
_x=-x,
149-
_y=-y,
150-
_dx=dx,
151-
_dy=dy,
152-
ix=xx,
153-
iy=yy,
154-
idx=idx,
155-
idy=idy,
156-
index=v_index,
157-
)
158-
)
129+
seg_write = segment
130+
f.write(
131+
seg_write.format(
132+
x=x,
133+
y=y,
134+
dx=dx,
135+
dy=dy,
136+
_x=-x,
137+
_y=-y,
138+
_dx=dx,
139+
_dy=dy,
140+
ix=xx,
141+
iy=yy,
142+
idx=idx,
143+
idy=idy,
144+
index=segment_index,
145+
)
146+
)
159147
last_x = x
160148
last_y = y
161-
if postblock is not None:
162-
f.write(postblock.format(index=p_index))
149+
if postline is not None:
150+
f.write(postline.format(index=lines_index))
151+
if linejoin is not None and lines_index != lastlines_index:
152+
f.write(linejoin)
163153
if postlayer is not None:
164154
f.write(postlayer.format(index=layer_index))
155+
if layerjoin is not None and layer_index != lastlayer_index:
156+
f.write(layerjoin)
165157
if footer is not None:
166158
f.write(footer.format(filename=filename))
167159

0 commit comments

Comments
 (0)