@@ -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