Index: work/polybloat/bloat.sh =================================================================== --- work/polybloat/bloat.sh (revision 19440) +++ work/polybloat/bloat.sh (revision 19441) @@ -3,6 +3,7 @@ awk -v "bloat=$1" -v "target_edge=$2" ' +# Draw a polygon as wireframe function draw(POLY ,n) { printf("lines") @@ -12,6 +13,7 @@ print "" } +# make sure n is between 0 and len function pwrap(POLY, n) { if (n < 0) n+=POLY["len"] @@ -19,7 +21,8 @@ return n } -function edge_shift(POLY, bloat, n0 ,x0,y0,xp,yp,x1,y1,xn,yn, dx,dy,l,nx,ny ,ax,ay,al) +# offset-shift an edge using the neighbour edges +function edge_shift(POLY, bloat, n0 ,x0,y0,xp,yp,x1,y1,xn,yn, dx,dy,l,nx,ny ,ax,ay,al,a1l,a1x,a1y) { x0 = POLY[n0, "x"] y0 = POLY[n0, "y"] @@ -42,13 +45,11 @@ # previous edge offset ax = x0 - xp ay = y0 - yp - al = sqrt(ax*ax + ay*ay) ax /= al ay /= al a1l = ax*nx + ay*ny; - a1x = bloat/a1l*ax a1y = bloat/a1l*ay @@ -58,14 +59,11 @@ # next edge offset ax = xn - x1 ay = yn - y1 - - al = sqrt(ax*ax + ay*ay) ax /= al ay /= al a1l = ax*nx + ay*ny; - a1x = bloat/a1l*ax a1y = bloat/a1l*ay @@ -78,6 +76,7 @@ POLY[pwrap(POLY, n0+1), "y"] = y1 } +# offset shift the target edge or all edges function poly_bloat(POLY, bloat, n) { if (target_edge == "") Index: work/polybloat/tri.p =================================================================== --- work/polybloat/tri.p (revision 19440) +++ work/polybloat/tri.p (revision 19441) @@ -1,3 +1,4 @@ +# generic, non-axis-aligned triangle 5 2 2 6 7 7