private boolean _cleanupSpikes() { boolean bModified = false; for (int path = m_shape.getFirstPath(m_geometry); path != -1; ) { int vertex = m_shape.getFirstVertex(path); for (int vindex = 0, n = m_shape.getPathSize(path); vindex < n && n > 1; ) { int prev = m_shape.getPrevVertex(vertex); int next = m_shape.getNextVertex(vertex); if (m_shape.isEqualXY(prev, next)) { bModified = true; _beforeRemoveVertex(vertex, false); m_shape.removeVertex(vertex, true); // not internal, because // path is valid at this // point _beforeRemoveVertex(next, false); m_shape.removeVertex(next, true); vertex = prev; vindex = 0; n = m_shape.getPathSize(path); } else { vertex = next; vindex++; } } if (m_shape.getPathSize(path) < 2) { int vertexL = m_shape.getFirstVertex(path); for (int vindex = 0, n = m_shape.getPathSize(path); vindex < n; vindex++) { _beforeRemoveVertex(vertexL, false); vertexL = m_shape.getNextVertex(vertexL); } path = m_shape.removePath(path); bModified = true; } else path = m_shape.getNextPath(path); } return bModified; }