Пример #1
0
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)
Пример #2
0
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