public void Initialize(float radius, float offset)
        {
            Radius    = radius;
            HitOffset = offset;

            float sx = Start.X;
            float sy = Start.Y;
            float ex = End.X;
            float ey = End.Y;

            // start point bounds
            StartBounds = new RectF(
                sx - radius - offset,
                sy - radius - offset,
                sx + radius + offset,
                sy + radius + offset);

            // end point bounds
            EndBounds = new RectF(
                ex - radius - offset,
                ey - radius - offset,
                ex + radius + offset,
                ey + radius + offset);

            // wire bounds
            int ps = 4;

            float[] px = new float[ps];
            float[] py = new float[ps];
            WireBounds = new PolygonF(px, py, ps);
            UpdateWireBounds(sx, sy, ex, ey);
        }
        private void DrawPolygon(Canvas canvas, Paint paint, PolygonF poly)
        {
            int   sides = poly.Sides;
            float x1, y1, x2, y2;

            int i, j = 0;

            for (i = 0, j = sides - 1; i < sides; j = i++)
            {
                x1 = poly.GetX(i);
                y1 = poly.GetY(i);
                x2 = poly.GetX(j);
                y2 = poly.GetY(j);

                canvas.DrawLine(x1, y1, x2, y2, paint);
            }
        }