def offset(freemanCodes, pointIndex, closed = True): if closed: pointIndex = pointIndex % len(freemanCodes) dsl, ofs = geomap.tangentDSL(freemanCodes, pointIndex, closed) if not ofs: return Vector2(0, 0) fc1 = freemanCodes[pointIndex - ofs] count = len(freemanCodes) for crackIndex in range(pointIndex - ofs + 1, pointIndex + ofs): fc2 = freemanCodes[crackIndex % count] if fc2 != fc1: break q = quadrant(fc1, fc2) alpha = (2.*dsl.pos+dsl.b-1)/(2*dsl.b) if q == 0: return Vector2( alpha, -alpha) elif q == 1: return Vector2(-alpha, -alpha) elif q == 2: return Vector2(-alpha, alpha) else: return Vector2( alpha, alpha)
def crackEdgeTangent(freemanCodes, pointIndex, closed): dsl, ofs = geomap.tangentDSL(freemanCodes, pointIndex, closed) if not ofs: return dsl, ofs dsl = dsl.convertToFourConnected() fc1 = freemanCodes[pointIndex - ofs] count = len(freemanCodes) for crackIndex in range(pointIndex - ofs + 1, pointIndex + ofs): fc2 = freemanCodes[crackIndex % count] if fc2 != fc1: break q = quadrant(fc1, fc2) if q == 0: pass elif q == 1: dsl.mirrorX() elif q == 2: dsl.mirrorXY() else: dsl.mirrorY() return dsl, ofs