Index: trunk/src/find.c =================================================================== --- trunk/src/find.c (revision 9) +++ trunk/src/find.c (revision 10) @@ -770,7 +770,7 @@ } else if (TEST_FLAG (OCTAGONFLAG, &i->pv)) { - POLYAREA *oct = OctagonPoly (i->pv.X, i->pv.Y, i->pv.Thickness / 2); + POLYAREA *oct = OctagonPoly (i->pv.X, i->pv.Y, i->pv.Thickness / 2, GET_SQUARE(&i->pv)); if (isects (oct, polygon, true) && ADD_POLYGON_TO_LIST (i->layer, polygon)) longjmp (i->env, 1); @@ -1120,7 +1120,7 @@ } else if (TEST_FLAG (OCTAGONFLAG, pv)) { - POLYAREA *oct = OctagonPoly (pv->X, pv->Y, PIN_SIZE (pv) / 2); + POLYAREA *oct = OctagonPoly (pv->X, pv->Y, PIN_SIZE (pv) / 2, GET_SQUARE(pv)); if (isects (oct, &i->polygon, true) && ADD_PV_TO_LIST (pv)) longjmp (i->env, 1); } Index: trunk/src/polygon.c =================================================================== --- trunk/src/polygon.c (revision 9) +++ trunk/src/polygon.c (revision 10) @@ -380,31 +380,45 @@ POLYAREA * -OctagonPoly (Coord x, Coord y, Coord radius) +OctagonPoly (Coord x, Coord y, Coord radius, int style) { PLINE *contour = NULL; Vector v; double xm[8], ym[8]; + square_pin_factors(style, xm, ym); + +#warning TODO: rewrite this to use the same table as the square/oct pin draw function + /* point 7 */ v[0] = x + ROUND (radius * 0.5); v[1] = y + ROUND (radius * TAN_22_5_DEGREE_2); if ((contour = poly_NewContour (v)) == NULL) return NULL; + /* point 6 */ v[0] = x + ROUND (radius * TAN_22_5_DEGREE_2); v[1] = y + ROUND (radius * 0.5); poly_InclVertex (contour->head.prev, poly_CreateNode (v)); - v[0] = x - (v[0] - x); + /* point 5 */ + v[0] = x - ROUND (radius * TAN_22_5_DEGREE_2); + v[1] = y + ROUND (radius * 0.5); poly_InclVertex (contour->head.prev, poly_CreateNode (v)); + /* point 4 */ v[0] = x - ROUND (radius * 0.5); v[1] = y + ROUND (radius * TAN_22_5_DEGREE_2); poly_InclVertex (contour->head.prev, poly_CreateNode (v)); - v[1] = y - (v[1] - y); + /* point 3 */ + v[0] = x - ROUND (radius * 0.5); + v[1] = y - ROUND (radius * TAN_22_5_DEGREE_2); poly_InclVertex (contour->head.prev, poly_CreateNode (v)); + /* point 2 */ v[0] = x - ROUND (radius * TAN_22_5_DEGREE_2); v[1] = y - ROUND (radius * 0.5); poly_InclVertex (contour->head.prev, poly_CreateNode (v)); - v[0] = x - (v[0] - x); + /* point 1 */ + v[0] = x + ROUND (radius * TAN_22_5_DEGREE_2); + v[1] = y - ROUND (radius * 0.5); poly_InclVertex (contour->head.prev, poly_CreateNode (v)); + /* point 0 */ v[0] = x + ROUND (radius * 0.5); v[1] = y - ROUND (radius * TAN_22_5_DEGREE_2); poly_InclVertex (contour->head.prev, poly_CreateNode (v)); @@ -794,7 +808,7 @@ size = (thick + clear + 1) / 2; if (TEST_FLAG (OCTAGONFLAG, pin)) { - return OctagonPoly (pin->X, pin->Y, size + size); + return OctagonPoly (pin->X, pin->Y, size + size, GET_SQUARE(pin)); } } return CirclePoly (pin->X, pin->Y, size); Index: trunk/src/polygon.h =================================================================== --- trunk/src/polygon.h (revision 9) +++ trunk/src/polygon.h (revision 10) @@ -70,7 +70,7 @@ POLYAREA * PolygonToPoly (PolygonType *); POLYAREA * RectPoly (Coord x1, Coord x2, Coord y1, Coord y2); POLYAREA * CirclePoly (Coord x, Coord y, Coord radius); -POLYAREA * OctagonPoly(Coord x, Coord y, Coord radius); +POLYAREA * OctagonPoly(Coord x, Coord y, Coord radius, int style); POLYAREA * LinePoly(LineType *l, Coord thick); POLYAREA * ArcPoly(ArcType *l, Coord thick); POLYAREA * PinPoly(PinType *l, Coord thick, Coord clear); Index: trunk/src/thermal.c =================================================================== --- trunk/src/thermal.c (revision 9) +++ trunk/src/thermal.c (revision 10) @@ -366,8 +366,8 @@ Coord t = 0.5 * pcb->ThermScale * pin->Clearance; Coord w = pin->Thickness + pin->Clearance; - p = OctagonPoly (pin->X, pin->Y, w); - p2 = OctagonPoly (pin->X, pin->Y, pin->Thickness); + p = OctagonPoly (pin->X, pin->Y, w, GET_SQUARE(pin)); + p2 = OctagonPoly (pin->X, pin->Y, pin->Thickness, GET_SQUARE(pin)); /* make full clearance ring */ poly_Boolean_free (p, p2, &m, PBO_SUB); switch (style)