@@ -121,24 +121,50 @@ function drawedge(ctx, scalefactor, edge, color) {
121
121
}
122
122
}
123
123
124
- function drawRoundRect ( ctx , color , size , radius , ctxmethod ) {
124
+ function drawChamferedRect ( ctx , color , size , radius , chamfpos , chamfratio , ctxmethod ) {
125
+ // chamfpos is a bitmask, left = 1, right = 2, bottom left = 4, bottom right = 8
125
126
ctx . beginPath ( ) ;
126
127
ctx . strokeStyle = color ;
127
- var x = size [ 0 ] * - 0.5 ;
128
- var y = size [ 1 ] * - 0.5 ;
129
128
var width = size [ 0 ] ;
130
129
var height = size [ 1 ] ;
130
+ var x = width * - 0.5 ;
131
+ var y = height * - 0.5 ;
132
+ var chamfOffset = Math . min ( width , height ) * chamfratio ;
131
133
ctx . moveTo ( x , 0 ) ;
132
- ctx . arcTo ( x , y + height , x + width , y + height , radius ) ;
133
- ctx . arcTo ( x + width , y + height , x + width , y , radius ) ;
134
- ctx . arcTo ( x + width , y , x , y , radius ) ;
135
- ctx . arcTo ( x , y , x , y + height , radius ) ;
134
+ if ( chamfpos & 4 ) {
135
+ ctx . lineTo ( x , y + height - chamfOffset ) ;
136
+ ctx . lineTo ( x + chamfOffset , y + height ) ;
137
+ ctx . lineTo ( 0 , y + height ) ;
138
+ } else {
139
+ ctx . arcTo ( x , y + height , x + width , y + height , radius ) ;
140
+ }
141
+ if ( chamfpos & 8 ) {
142
+ ctx . lineTo ( x + width - chamfOffset , y + height ) ;
143
+ ctx . lineTo ( x + width , y + height - chamfOffset ) ;
144
+ ctx . lineTo ( x + width , 0 ) ;
145
+ } else {
146
+ ctx . arcTo ( x + width , y + height , x + width , y , radius ) ;
147
+ }
148
+ if ( chamfpos & 2 ) {
149
+ ctx . lineTo ( x + width , y + chamfOffset ) ;
150
+ ctx . lineTo ( x + width - chamfOffset , y ) ;
151
+ ctx . lineTo ( 0 , y ) ;
152
+ } else {
153
+ ctx . arcTo ( x + width , y , x , y , radius ) ;
154
+ }
155
+ if ( chamfpos & 1 ) {
156
+ ctx . lineTo ( x + chamfOffset , y ) ;
157
+ ctx . lineTo ( x , y + chamfOffset ) ;
158
+ ctx . lineTo ( x , 0 ) ;
159
+ } else {
160
+ ctx . arcTo ( x , y , x , y + height , radius ) ;
161
+ }
136
162
ctx . closePath ( ) ;
137
163
ctxmethod ( ) ;
138
164
}
139
165
140
166
function drawOblong ( ctx , color , size , ctxmethod ) {
141
- drawRoundRect ( ctx , color , size , Math . min ( size [ 0 ] , size [ 1 ] ) / 2 , ctxmethod ) ;
167
+ drawChamferedRect ( ctx , color , size , Math . min ( size [ 0 ] , size [ 1 ] ) / 2 , 0 , 0 , ctxmethod ) ;
142
168
}
143
169
144
170
function drawPolygons ( ctx , color , polygons , ctxmethod ) {
@@ -205,7 +231,9 @@ function drawPad(ctx, pad, color, outline, hole) {
205
231
} else if ( pad . shape == "circle" ) {
206
232
drawCircle ( ctx , pad . size [ 0 ] / 2 , ctxmethod ) ;
207
233
} else if ( pad . shape == "roundrect" ) {
208
- drawRoundRect ( ctx , color , pad . size , pad . radius , ctxmethod ) ;
234
+ drawChamferedRect ( ctx , color , pad . size , pad . radius , 0 , 0 , ctxmethod ) ;
235
+ } else if ( pad . shape == "chamfrect" ) {
236
+ drawChamferedRect ( ctx , color , pad . size , pad . radius , pad . chamfpos , pad . chamfratio , ctxmethod )
209
237
} else if ( pad . shape == "custom" ) {
210
238
drawPolygons ( ctx , color , pad . polygons , ctxmethod ) ;
211
239
}
0 commit comments