コード例 #1
0
def projectdetaillinesF(sporigin, sptriangle, xpart, uvtranslistCcolumns,
                        uspacing, vspacing, battendetaillines):
    cc = findcctriangleinmesh(sptriangle, xpart, uvtranslistCcolumns)
    if cc is None:
        return []
    if abs(cc["cpt"][0] -
           sptriangle.u) > uspacing or abs(cc["cpt"][1] -
                                           sptriangle.v) > vspacing:
        return []
    vc = sporigin - cc["cpt"]
    vcp = cc["urvec"] * vc.u + cc["vrvec"] * vc.v
    vcs = cc["vj"] * vcp.u + cc["vj1"] * vcp.v  # should be same as vc
    vcsT = cc["vjT"] * vcp.u + cc["vj1T"] * vcp.v

    # use the 6mm expansion on either side of this line to our advantage
    ccLeft = findcctriangleinmesh(sptriangle - P2(5, 0), xpart,
                                  uvtranslistCcolumns)
    ccRight = findcctriangleinmesh(sptriangle + P2(5, 0), xpart,
                                   uvtranslistCcolumns)
    assert ccLeft != None and ccRight != None, (ccLeft, ccRight)

    trailingedgevecL = P2.ZNorm(ccLeft["vjT"] * ccLeft["urvec"].u +
                                ccLeft["vj1T"] * ccLeft["urvec"].v)
    trailingedgevecR = P2.ZNorm(ccRight["vjT"] * ccRight["urvec"].u +
                                ccRight["vj1T"] * ccRight["urvec"].v)
    #trailingedgevec = P2.ZNorm(cc["vjT"]*cc["urvec"].u + cc["vj1T"]*cc["urvec"].v)
    trailingedgevec = P2.ZNorm(trailingedgevecL + trailingedgevecR)
    #print("trailingedge angles ", trailingedgevecL.Arg(), trailingedgevecR.Arg())
    trailingedgevecPerp = P2.ZNorm(cc["vjT"] * cc["vrvec"].u +
                                   cc["vj1T"] * cc["vrvec"].v)
    #trailingedgevec = P2.CPerp(trailingedgevecPerp)

    battendetails = []
    for lsp in battendetaillines:
        battendetails.append(vcsT + cc["cptT"] + trailingedgevec * lsp.u +
                             trailingedgevecPerp * lsp.v)
    return battendetails
コード例 #2
0
def applyconsistenrotationtoflats(surfacemesh):
    ptsF = surfacemesh["fpts"] * (
        1, -1)  # reflect in Y using numpy.array multiplication
    offsetloopuv = surfacemesh["offsetloopuv"]
    offsetloopptsF = [
        P2(ptsF[i][0], ptsF[i][1]) for i in surfacemesh["offsetloopI"]
    ]
    offsetloopuvCentre = sum(offsetloopuv, start=P2(
        0, 0)) * (1.0 / len(offsetloopuv))
    offsetloopptsFCentre = sum(offsetloopptsF, start=P2(
        0, 0)) * (1.0 / len(offsetloopptsF))
    voff = offsetloopuvCentre - offsetloopptsFCentre

    # this proves all the polygons are reflected
    orientOrg = orientation(surfacemesh["uvpts"], surfacemesh["offsetloopI"])
    orientReflFlatttened = orientation(ptsF, surfacemesh["offsetloopI"])
    assert orientOrg == orientReflFlatttened

    # try and rotate so we align with the first edge
    i0 = surfacemesh["offsetloopI"][-10]
    i1 = surfacemesh["offsetloopI"][-5]
    if surfacemesh["patchname"] == "US2":
        i0 = surfacemesh["offsetloopI"][10]
        i1 = surfacemesh["offsetloopI"][15]
    if surfacemesh["patchname"] == "TSR":
        i0 = surfacemesh["offsetloopI"][150]
        i1 = surfacemesh["offsetloopI"][155]

    #v = P2(*surfacemesh["uvpts"][i1]) - offsetloopuvCentre
    #vF = P2(*ptsF[i1]) - offsetloopptsFCentre
    v = P2(*surfacemesh["uvpts"][i1]) - P2(*surfacemesh["uvpts"][i0])
    vF = P2(*ptsF[i1]) - P2(*ptsF[i0])

    xv = P2.ZNorm(P2(P2.Dot(vF, v), P2.Dot(P2.APerp(vF), v)))
    yv = P2.APerp(xv)

    explodev = (offsetloopuvCentre - P2(3, 0)) * 0.8
    if surfacemesh["patchname"] == "TSM3":
        offsetloopuvCentre -= P2(1.0, -0.3)

    def transF(p):
        p0 = p - offsetloopptsFCentre
        return xv * p0[0] + yv * p0[1] + offsetloopuvCentre + explodev

    surfacemesh["fptsT"] = fptsT = numpy.array([transF(p) for p in ptsF])
    vFT = P2(*surfacemesh["fptsT"][i1]) - P2(*surfacemesh["fptsT"][i0])
    #print(v.Arg(), vF.Arg(), vFT.Arg())
    surfacemesh["textpos"] = offsetloopuvCentre + explodev