Пример #1
0
def testBlocJonc(filename, show):
#     show=True
    debug(titre="testBlocJonc()")
#     filename = Path(VALIDATION_DIR,'blocjonc.spl')
    name = filename.name
    debug(paragraphe="Construction et dump '%s'"%name)
    with open(filename,'r') as f :
        dump = eval(f.read())['dmodel']
        pprintSaufCpoints(dump)
    S = NSplineSimple(**dump)
#     debug(S)
    if show : S.plot(numbers=['1c'])
    filename = Path(VALIDATION_DIR,'blocjonc-compose.spl')
    Sc = NSplineComposee()
#     with open(filename,'r') as f :
#         dump = eval(f.read())
#     debug('dump')
#     pprintSaufCpoints (dump)

    Sc.open(filename)
    dump['methode'] = ('ius',3)
#     Sc = NSplineComposee(**dump)
# #     for s in Sc.splines :
# #         s.methode = 'ius',3
# #         s._update()
# #     Sc._update()
    debug(Sc)
#     exit()
#     Sc.plot(numbers=['1c'])
    debug(paragraphe="Split() et dump de '%s'"%name)

#     Sc.split([29,38,39,40,41,50,52,54,55,63,66,74,94,105])
#     debug(Sc)
    if show : Sc.plot()#, numbers=['1c'])
    debug("dump de '%s' apres split()"%name)
    pprintSaufCpoints(Sc.toDump())
    filename = Path(WORK_DIR,'blocjonc-compose-work.spl')
    Sc.save(filename)
    name = filename.name
    debug(paragraphe="Construction NSplineComposee a partir de '%s' (=le dump apres split)"%name)
    with open(filename,'r') as f :
        dump = eval(f.read())
    debug('>>>yeap, lecture de dump')
    pprintSaufCpoints(dump)
    Sc = NSplineComposee(**dump)
    for i,S in enumerate(Sc.splines) :
        debug("%d-eme composante de '%s'"%(i,name))
        print S
        if show : S.plot(titre='spline-%d'%i, numbers='c')
    if show :
        Sc.plot(numbers=['3c'])
        Sc.plotCourbure()
    debug(titre="Fin testBlocJonc()")
Пример #2
0
def testEchantillonnage(filename, trados, show=True):
    u"""echantillonnage entre ta et tb. [ta,tb]=[0,1] => echantillonnage complet"""
    #     s = NSplineSimple(points=pointsFromFile(filename))
    u"""Extraction intrados et extrados, normalisation"""
    debug(titre="testEchantillonnage %s-trados : %s" % (trados, filename.name))

    points = pointsFromFile(filename)
    corde, nba = -1.0, np.nan
    bf = points[0]
    for k, point in enumerate(points):
        d = dist2(bf, point)
        if d > corde: corde, nba = d, k
    corde = math.sqrt(corde)
    debug(corde=corde, nba=nba)
    points *= (1000 / corde)  #en mm
    corde = 1000
    if trados == 'e':  #Extrados
        methode = ('cubic', ((2, 0, 0), (1, 0, -corde / 2)))  #extrados
        c0 = points[:1 + nba]
    elif trados == 'i':  #Intrados
        methode = ('cubic', ((1, 0, -corde / 4), (2, 0, 0)))  #intrados
        c0 = points[nba:]
    u"""Construction et élagage de la spline d'interpolation du trados"""
    precision = 1000
    #     T0 = linspace(0,1,precision)
    s0 = NSplineSimple(cpoints=c0,
                       precision=precision,
                       methode=methode,
                       mode='courbure')
    #     s0.elaguer(1, replace=True)
    ne, ta, tb = 30, 0.2, 0.8
    s0.echantillonner(nbp=ne, ta=ta, tb=tb, mode='courbure')
    debug(Te=s0.tech)
    E = s0.epoints
    if show:
        s0.plot(more=[
            (E[:, 0], E[:, 1], 'y^',
             'echantillon \nn=%d, %.2f=>%.2f' % (ne, ta, tb)),
        ])


#     plt.plot(E[:,0],E[:,1],'y^','echantillon')
#         plt.show()
    debug(titre="Fin testEchantillonnage %s-trados : %s" %
          (trados, filename.name))
Пример #3
0
def testMethodes(filename, show=True):
    debug(titre='testMethodes(%s)' % filename.name)
    k = 0
    for methode in (
        ('cubic', 'not-a-knot'),
        ('cubic', 'periodic'),
        ('cubic', 'natural'),
        ('cubic', ((1, 0, -5), (1, 0, -5))),
        ('cubic', ((2, 0, 0), (1, 0, -5))),  #extrados
        ('cubic', ((1, 0, -5), (2, 0, 0))),  #intrados
    ):
        k += 1
        S = NSplineSimple(points=pointsFromFile(filename),
                          methode=methode,
                          mode='courbure',
                          name='SPLINE%d' % (k + 1))
        debug(S)
        if show: S.plot(titre=filename.name + str(methode))
        if show: S.plotCourbure()


#     filename=Path(VALIDATION_DIR,'simple','simple2d2.gnu')
    for methode, mode in (
            #                     (('ius',1),'linear'),
            #                     (('ius',2),'linear'),
            #                     (('ius',3),'courbure'),
        (('ius', 4), 'courbure'),
        (('ius', 7), 'courbure'),
        (('us', 1), 'linear'),
        (('us', 2), 'linear'),
        (('us', 3), 'courbure'),
        (('us', 4), 'courbure'),
        (('us', 7), 'courbure'),
    ):
        S = NSplineSimple(points=pointsFromFile(filename),
                          methode=methode,
                          mode=mode)
        debug(S)

        if show and methode[1] <= 5:  #pour k=7 ca plante
            S.plot(titre=filename.name + str(methode))
    debug(titre='Fin testMethodes(%s)' % filename.name)
Пример #4
0
def testConstructeurs(filename, show=False):
    debug(titre='testConstructeurs %s' % filename.name)
    p = NSplineSimple()
    debug(paragraphe='1. constructeur vide')
    debug(p=p)
    p = NSplineSimple(cpoints=np.zeros((1, 2)),
                      parent=None,
                      methode=('cubic', 'periodic'),
                      mode='rayon',
                      name='SPLINE1')
    debug(paragraphe='2. constructeur presque vide')
    print p
    # for point in p.qcpolygon :
    #     print point
    # for point in p.qdpolygon :
    #     print point
    debug(paragraphe='3. p vide => p.cpoints=points de %s' % filename.name)
    points = pointsFromFile(filename)
    p.cpoints = points
    if show: p.plot(titre='cpoints=pointsFromFile()')

    S0 = NSplineSimple(
        points=pointsFromFile(filename),
        methode=('cubic', 'periodic'),
        #                        mode='courbure',
        name=filename.name)
    debug(S0)
    if show: S0.plot(titre=filename.name)

    debug(paragraphe='4. S = NSplineSimple(**dump00) (points:%s)' %
          filename.name)
    dump00 = S0.toDump()
    debug("dump00")
    pprint(dump00)
    S = NSplineSimple(**dump00)
    dump01 = S.toDump()
    pprint(dump01)
    debug("dump00!=dump01 : %s" % dictsAreNotEqual(dump00, dump01))

    debug(paragraphe='4. S1 = S0.copy() (points:%s)' % filename.name)
    S = S0.copy()
    dump02 = S.toDump()
    debug("dump00!=dump02 : %s" % dictsAreNotEqual(dump00, dump02))
    filename = Path(RUNS_DIR, 'spline.npkl')
    S0.save(filename=filename)
    S0.open(filename)
    #     debug('S0.toDump()')
    #     pprint(S0.toDump())
    debug(S0)
    debug('S0.toDump()!=dump00', dictsAreNotEqual(S0.toDump(), dump02))
    if show: S0.plot(titre='open pkl')
    S1 = S0.copy()
    d0, d1 = dump00, S1.toDump()
    debug('d0!=d1', dictsAreNotEqual(d0, d1))
    if show: S1.plot(titre='copy')
    debug(titre='Fin testConstructeurs %s' % filename.name)
Пример #5
0
def testSequenceBasique(filename, show=True):
    """Une séquence basique d'utilisation de spline"""
    debug(titre='testSequenceBasique %s' % filename.name)
    debug(show=show)
    #     exit()
    debug(paragraphe='0. NSplineSimple() ')
    S = NSplineSimple()
    debug(S=S)

    c, d, knots = S.cpoints, S.dpoints, S.knots
    print 'cpoints =', c, type(c), c.shape
    print 'dpoints =', d, type(d), d.shape
    print '  knots =', knots, type(knots), knots.shape
    debug(titre='differentes methodes %s' % filename.name)
    for k, methode in enumerate((
        ('us', 1),  #'linear'),
            #                                 ('us',2),#'linear'),
        ('us', 3),  #'courbure'),
            #                                 ('us',4),#'courbure'),
            #                                 ('us',7),#'courbure'),
        ('ius', 1),  #'courbure'),
        ('ius', 3),  #'courbure'),
            #                                 ('lsqus',1),#'linear'),
            #                                 ('lsqus',2),#'linear'),
            #                                 ('lsqus',3),#'courbure'),
            #                                 ('lsqus',4),#'courbure'),
        ('cubic', 'not-a-knot'),
        ('cubic', 'periodic'),
        ('cubic', 'natural'),
        ('cubic', ((1, 0, -5), (1, 0, -5))),
        ('cubic', ((2, 0, 0), (1, 0, -5))),  #extrados
        ('cubic', ((1, 0, -5), (2, 0, 0))),  #intrados
            #                                 ('ius',7),#'courbure'),
    )):
        debug(paragraphe='1. methode-%d=%s (fichier %s)' %
              (k, str(methode), filename.name))
        S = NSplineSimple(cpoints=pointsFromFile(filename),
                          methode=methode,
                          name=str(methode))
        debug(S)
        debug(u'    Normal, S.dpoint est calcule', lendpoints=len(S.dpoints))
        debug(paragraphe='2. S._update() methode-%d=%s  (fichier %s)' %
              (k, str(methode), filename.name))
        S._update()
        try:
            debug(S._dpoints)
        except AttributeError as msg:
            debug(u'    Normal pas de S._dpoints : %s' % str(msg))
        debug(u'    Normal, S.dpoint est calcule', lendpoints=len(S.dpoints))
        debug(S)
        if show:
            S.plot(show=True)
        debug('    Longueurs (c,d)=(%.5g,%.5g) ; nspline=%d' %
              (S.longueur('c'), S.longueur('d'), S.nbspline))

        i, p = len(S) / 2, S.centregravite
        debug(paragraphe='3. S[%d]=[%.3g, %.3g], methode-%d=%s  (fichier %s)' %
              (i, p[0], p[1], k, str(methode), filename.name))
        oldp = S[i].copy()
        S[i] = p
        debug(S[i], oldp=oldp)
        debug('    Longueurs (c,d)=(%.5g,%.5g) ; nspline=%d' %
              (S.longueur('c'), S.longueur('d'), S.nbspline))
        debug('    S(1)=%s' % S(1.0))  #ne donne pas tout a fait cpoints[-1]
        ac = absCurv(S._cpoints, normalise=True)
        print '    abscurv=', ac.shape, 'knots=', S.knots.shape, 'cpoints=', S._cpoints.shape
        print '    norm(S(ac)-S._cpoints)=', norm(S(ac) - S._cpoints)
        print '    norm(ac-S.knots)', norm(ac - S.knots)
        if show:
            S.plot(show=True,
                   titre='%s : modif S[%d]=[%.3g, %.3g]' %
                   (filename.name, i, p[0], p[1]))
        debug(S[i], oldp=oldp)
        S[i] = oldp
        debug(paragraphe='4. echantillonnage methode-%d=%s  (fichier %s)' %
              (k, str(methode), filename.name))
        S.nbpe = 120
        print 'mode=', S.mode, ', epoints=', S.epoints.shape
        e0, mode0 = S.epoints, S.mode
        print 'mode=', S.mode, ', epoints=', e0.shape
        print 'T = %s' % S.tech.tolist()
        S.mode = 'cos'  #efface tech et epoints
        e1, mode1 = S.epoints, S.mode
        print 'mode=', S.mode, ', epoints=', e0.shape
        print 'T = %s' % S.tech.tolist()
        #on regarde si ca se recalcule bien apres suppression epoints et tech
        del S._epoints, S._tech
        e2, mode2 = S.epoints, S.mode
        print 'mode=', S.mode, ', epoints=', e2.shape
        print 'T = %s' % S.tech.tolist()
        print 'epoints norme(e1-e2)=%.3g' % norm(e1 - e2)
        S.mode = 'x3'  #efface tech et epoints
        e2, mode2 = S.epoints, S.mode
        print 'mode=', S.mode, ', epoints=', e2.shape
        print 'T = %s' % S.tech.tolist()
        S.mode = 'courbure'  #efface tech et epoints
        mode3 = S.mode
        try:
            e3, mode3 = S.epoints, S.mode
            print 'mode=', S.mode, ', epoints=', e3.shape
            print 'T = %s' % S.tech.tolist()
            X3, Y3 = XY(e3)
        except ValueError as msg:  #normal
            debug('normal', str(msg))
            print 'methode %s, mode echantillonnage = %s : %s' % (str(
                S.methode), str(S.mode), str(msg))
            X3, Y3 = zeros((0, )), zeros((0, ))
        X0, Y0 = XY(e0)
        X1, Y1 = XY(e1)
        X2, Y2 = XY(e2)
        #         if show : S.plot(plt,show=True)
        if show:
            #             plt.plot(X0,Y0,'r.-',label='%s : mode=%s'%(S.name,mode0))
            plt.plot(X1, Y1, 'b.-', label='%s : mode=%s' % (S.name, mode1))
            #             plt.plot(X2,Y2,'k.-',label='%s : mode=%s'%(S.name,mode2))
            plt.plot(X3, Y3, 'm.-', label='%s : mode=%s' % (S.name, mode3))
            plt.legend()
            plt.axis('equal')
            plt.show()
    debug(titre='Fin testSequenceBasique %s' % filename.name)
Пример #6
0
def testDivers1(filename, show=True):
    #     show=True
    debug(titre="testDivers1 : %s" % filename.name)

    msg = u"""
    On teste les methodes NSplineSimple.projectionObj(obj) et
    NSplineSimple.projection(obj).
    """
    debug(msg)
    cpoints = pointsFromFile(filename)[::-1]
    #On recale le BA en 0,0
    corde, nba = computeCordeAndNBA(cpoints)
    debug(corde=corde, nba=nba, len_cpoints=len(cpoints))
    cpoints = cpoints - cpoints[nba]
    cpoints = cpoints[0:nba]
    #     cpoints = cpoints[0:nba+1]
    debug(BA=cpoints[-1], BF=cpoints[0], extrados=cpoints[nba / 2])
    #     S0 = NSplineSimple(cpoints=cpoints, name=filename.name)
    #     debug(S0)
    #     if show : S0.plot(show=True)
    ########################################
    #     dump = {'cpoints': [[0.5279636979103088, 0.07332829385995865], [0.7137287259101868, 0.3275330364704132], [1.268811468596966, 0.3365727279966774], [1.1390328407287598, 0.07332829385995865], [1.2571670716747245, 0.2148051133421408], [1.2206038430660453, -0.0507648238639925], [1.5545598268508911, -0.0048885527066886425]],
    # #             'methode': ('cubic', 'not-a-knot'),
    #             'methode': ('ius', 3),
    #             'name': u'test',
    #             'nbpe': 30,
    #             'precision': 1000,
    #             'mode': 'linear'}
    dump = {
        'classename': 'NSplineSimple',
        'cpoints': cpoints,
        'methode': ('cubic', 'not-a-knot'),
        'mode': 'rayon',
        'name': filename.name,
        'nbpe': 30,
        'precision': 1000,
        'role': 'NSplineSimple'
    }
    S = NSplineSimple(**dump)
    #     if show : S.plot(plt)

    #     p1, p2, p3 = [0.0,0.25], S.barycentre[0], S.centregravite
    p1, p2, p3 = [0.0, 0.25], [1.0, -0.1], [1.0, 0.1],
    debug(p1=p1, p2=p2, p3=p3)
    (t1, d1, n1,
     m1), (t2, d2, n2,
           m2), (t3, d3, n3,
                 m3) = S.projection(p1), S.projection(p2), S.projection(p3)
    pj1, pj2, pj3 = S(t1), S(t2), S(t3)

    debug(paragraphe="****  DISTANCE POINT-SPLINE discret=0  ****")
    print '    message=%-20s' % m1, 'd(S,p1)=%-10.3g' % d1, 't=%-10.3g' % t1, 'nb appels a fct=%d' % n1
    print '    message=%-20s' % m2, 'd(S,p2)=%-10.3g' % d2, 't=%-10.3g' % t2, 'nb appels a fct=%d' % n2
    print '    message=%-20s' % m3, 'd(S,p3)=%-10.3g' % d3, 't=%-10.3g' % t3, 'nb appels a fct=%d' % n3
    more = [([p1[0], pj1[0]], [p1[1],
                               pj1[1]], 'g-o', 'd(S,p1) : %.2g' % sqrt(d1)),
            ([p2[0], pj2[0]], [p2[1],
                               pj2[1]], 'g-o', 'd(S,p2) : %.2g' % sqrt(d2)),
            ([p3[0], pj3[0]], [p3[1],
                               pj3[1]], 'g-o', 'd(S,p3) : %.2g' % sqrt(d3))]

    if show:
        S.plot(more=more, titre='distance point-spline(continu)', show=True)

    (t1, d1, n1, m1) = S.projection(p1, discret=100)
    (t2, d2, n2, m2) = S.projection(p2, discret=100)
    (t3, d3, n3, m3) = S.projection(p3, discret=100)
    pj1, pj2, pj3 = S(t1), S(t2), S(t3)
    debug("paragraphe=****  DISTANCE POINT-SPLINE discret=100 ****")
    print '    message=%-20s' % m1, 'd(S,p1)=%-10.3g' % d1, 't=%-10.3g' % t1, 'nb appels a fct=%d' % n1
    print '    message=%-20s' % m2, 'd(S,p2)=%-10.3g' % d2, 't=%-10.3g' % t2, 'nb appels a fct=%d' % n2
    print '    message=%-20s' % m3, 'd(S,p3)=%-10.3g' % d3, 't=%-10.3g' % t3, 'nb appels a fct=%d' % n3
    if show:
        more = [([p1[0],
                  pj1[0]], [p1[1],
                            pj1[1]], 'g-o', 'd(S,p1) : %.2g' % sqrt(d1)),
                ([p2[0],
                  pj2[0]], [p2[1],
                            pj2[1]], 'g-o', 'd(S,p2) : %.2g' % sqrt(d2)),
                ([p3[0],
                  pj3[0]], [p3[1],
                            pj3[1]], 'g-o', 'd(S,p3) : %.2g' % sqrt(d3))]

        S.plot(more=more, titre='distance point-spline (discret)', show=True)
    T, D, N, _ = S.projectionObj(S.epoints, discret=100)
    print '    S.projectionObj(S.epoints) : norm(D)=%.3g, max(D)=%.3g' % (sqrt(
        sum(D)), sqrt(max(D)))
    #     P = asarray([p1,p2,p3])
    P = (rand(5, 2) - 0.3) / 10 + S.centregravite
    #     debug(P.tolist())
    T, D, N, _ = S.projectionObj(P, discret=1000)
    S.nbpd = 1000
    Pj = S(T)
    debug(paragraphe='Aleatoire : S.projectionObj(P,discret=%d)' % S.nbpd,
          T_D_N=zip(T, D, N))
    #     exit()

    if show:
        more = [([p[0], pj[0]], [p[1],
                                 pj[1]], 'g-o', 'd(S,p1) : %.2g' % sqrt(d))
                for p, pj, d in zip(P, Pj, D)]
        S.plot(more=more, titre='distance point-spline', show=True)
    debug(paragraphe=u'Elagage')
    s1, d, (n0, n1) = S.elaguer(eps=1.0, debog=show)
    if show:
        S.plot(titre=u'avant élagage', show=False)
        s1.plot(
            titre=
            u"Après élagage, distance=%.3g ; nb points contrôle : %d => %d" %
            (d, n0, n1),
            show=True)
    debug(titre="Fin testDivers1 : %s" % filename.name)

    return
Пример #7
0
def testDivers(filename, show=True):
    name = filename.name
    debug(titre="testDivers : %s" % name)

    msg = u"""Dans cet exemple, on a des points doubles p4=p5=p6 et p8=p9,
    donc la spline x(t) ne peut pas être construite.
    Que faire ?
    - supprimer p[6] <=== Oui c'est la solution adoptée ici
    - déplacer légèrement le point
    - faire une spline composée, splittée en 6
    """
    debug(msg)
    cpoints = pointsFromFile(filename)
    S0 = NSplineSimple(cpoints=cpoints, name=filename.name)
    debug(S0)
    if show: S0.plot(show=True)
    ########################################
    msg = u"""S est une NSplineSimple. Teste les méthodes :
    - S.absCurv(T) qui retourne les abscisses curvilignes VRAIES des points S(T)
    - S.longueur('x') =
        # longueur vraie(x=r) par intégration numérique
        # longueur du polyligne S.[cpoints,dpoints,epoints] 'x'=['c','d','e']
    - S.projection(p) et affiche le résultat pour 3 points
        Calcule la distance du point 'p' à la spline 'S' et le point 'h' de la spline
        le plus proche de 'p'. Retourne également la precision et le nb d'appels à fonction
        Utilise :
        "https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.minimize_scalar.html
    """
    dump = {
        'classename': 'NSplineSimple',
        'cpoints': cpoints,
        'methode': ('cubic', 'not-a-knot'),
        #             'mode': 'segment',
        #             'methode': ('ius', 1),
        'mode': 'rayon',
        #             'mode': 'cpoints',
        'name': filename.name,
        'nbpe': 30,
        'precision': 1000,
        'role': 'NSplineSimple'
    }
    dump = {
        'cpoints': [[0.5279636979103088, 0.07332829385995865],
                    [0.7137287259101868, 0.3275330364704132],
                    [1.268811468596966, 0.3365727279966774],
                    [1.1390328407287598, 0.07332829385995865],
                    [1.2571670716747245, 0.2148051133421408],
                    [1.2206038430660453, -0.0507648238639925],
                    [1.5545598268508911, -0.0048885527066886425]],
        #             'methode': ('cubic', 'not-a-knot'),
        'methode': ('ius', 3),
        'name':
        u'test',
        'nbpe':
        30,
        'precision':
        1000,
        'mode':
        'linear'
    }
    debug(msg)
    S = NSplineSimple(**dump)
    if show: S.plot()
    knots = S.knots
    acn = S.absCurv(knots)
    acr = S.absCurv(acn)
    debug('S.absCurv(None)', acn.tolist())
    debug('S.knots', knots.tolist())
    l = S.longueur()
    debug('(acr-acn)*longueur', (acr - acn * l).tolist())
    debug('longueur=%.10g' % l)
    lr = acr[-1]
    debug('vraie abscurv[-1]=%.10g' % lr)
    ln = acn[-1]
    debug('abscurv[-1]=%.10g' % ln)
    S.nbpd = 100
    ld3 = S.longueur('d')
    debug('S.dlongueur=%g' % ld3 + u"(calculé sur %d points)" % S.precision)
    S.nbpd = 1000
    ld4 = S.longueur('d')
    debug('S.dlongueur=%g' % ld4 + u"(calculé sur %d points)" % S.precision)
    S.nbpd = 10000
    ld5 = S.longueur('d')
    debug('S.dlongueur=%g' % ld5 + u"(calculé sur %d points)" % S.precision)
    le = S.longueur('e')
    debug('S.elongueur=%g' % le)
    lc = S.longueur('c')
    debug('S.clongueur=%g' % lc)

    if show:
        diff = [l - lr, l - ln, l - ld3, l - ld4, l - ld5, l - le, l - lc]
        plt.show()
        plt.bar(range(len(diff)), diff)
        plt.xticks(range(len(diff)), 'lr,ln,ld3,ld4,ld5,le,lc'.split(','))
        plt.title('differentes longueurs calculees')
    p1, p2, p3 = [0.2, 0.01], [1.1, 0.2], [-0.1, 0.3]
    res1, res2, res3 = S.projection(p1), S.projection(p2), S.projection(p3)
    pj1, pj2, pj3 = S(res1[0]), S(res2[0]), S(res3[0])
    #     debug(str(res))
    debug(paragraphe="****  DISTANCE POINT-SPLINE  ****")
    debug('message="%s"' % res1[3], 'd(S,p1)=%g' % res1[1], 't=%g' % res1[0],
          'nb appels a fct=%d' % res1[2])
    debug('message="%s"' % res2[3], 'd(S,p2)=%g' % res2[1], 't=%g' % res2[0],
          'nb appels a fct=%d' % res2[2])
    debug('message="%s"' % res3[3], 'd(S,p3)=%g' % res3[1], 't=%g' % res3[0],
          'nb appels a fct=%d' % res3[2])
    if show:
        more = [([p1[0],
                  pj1[0]], [p1[1],
                            pj1[1]], 'g-o', 'd(S,p1) : %.2g' % sqrt(res1[1])),
                ([p2[0],
                  pj2[0]], [p2[1],
                            pj2[1]], 'g-o', 'd(S,p2) : %.2g' % sqrt(res2[1])),
                ([p3[0],
                  pj3[0]], [p3[1],
                            pj3[1]], 'g-o', 'd(S,p3) : %.2g' % sqrt(res3[1]))]
        projections = [(pj1[0], pj1[1], 'y.', ''), (pj2[0], pj2[1], 'y.', ''),
                       (pj3[0], pj3[1], 'y.', '')]
        more += projections
        S.plot(more=more, titre='distance point-spline', show=True)


#     plt.plot(p1[0],p1[1],'go', label='p1 : %g'%res1[1])
#     plt.legend()
#     if show : plt.show()
#     return
    debug('ORIGINAL', S=S)
    debug(rect=S.boundingRect())
    #     debug('CLONE', clone=S.clone())
    debug('COPY', clone=S.copy())
    S.hardScale((0.5, 0.5), S.centregravite)
    debug('APRES HARDSCALE', S=S)
    debug(rect=S.boundingRect())
    S.hardMove((10, 10))
    debug('APRES HARDMOVE', S=S)
    debug(rect=S.boundingRect())
    #     debug(top='%g'%rect.top(), left='%g'%rect.left(), width='%g'%rect.width(), height='%g'%rect.height(), )
    #     debug(bottom='%g'%rect.bottom(), top='%g'%rect.top())
    if show: S.plot(titre="**dump")
    debug(titre="Fin testDivers : %s" % filename.name)
Пример #8
0
def testModifLocales(filename, show=True):
    debug(titre="testModifLocales : %s" % filename.name)
    #     exit()
    S = NSplineSimple(points=pointsFromFile(filename),
                      methode=('cubic', ((2, 0, 0), (1, 0, -5))),
                      mode='courbure',
                      name='SPLINE01')
    mesure = mesures(S)
    debug('mesures')
    for key, value in mesure.items():
        exec('%s=%s' % (key, value))
        exec("print '%20s = %s'%(key,value)")
    if show: S.plot(titre=filename.name)

    try:
        i0 = S.insertPoint((0, 0))
        if show and isinstance(i0, int):
            S.plot(titre='insertPoint((0,0)) en position %d' % i0)
    except ValueError as msg:
        debug('normal', msg)

    try:
        i1 = S.appendPoint((2, 1.5))
        if show and isinstance(i1, int):
            S.plot(titre='appendPoint((2,1.5)) num=%d' % i1)
    except ValueError as msg:
        debug(msg)
        raise

    try:
        i2 = S.insertPoint((-2, 0))
        if show: S.plot(titre='insertPoint((2,-2)) en position %d' % i2)
    except ValueError as msg:
        debug(msg)
        raise

    try:
        i3 = S.insertPoint((6, 0), len(S) / 2)
        if show:
            S.plot(titre='insertPoint((6,0),%d) en position %d' %
                   (len(S) / 2, i3))
    except ValueError as msg:
        debug(msg)
        raise
    S.removePoint(i3)
    S.removePoint(i2)
    S.removePoint(i1)
    if show: S.plot(titre='removePoint(%d,%d,%d)' % (i3, i2, i1))

    S[1] = (4, -0.1)
    if show: S.plot(titre='S[1] = (4,-0.1)', show=True)
    print S[1]
    S._update()
    pprint(S.__dict__)
    dump = S.toDump()
    dump['methode'] = ('cubic', 'natural')
    S.load(dump)
    S.name = 'SPLINE3'
    if show: S.plot(titre='load(toDump())', show=True)
    print S
    debug(titre="Fin testModifLocales : %s" % filename.name)
Пример #9
0
def testModifGlobales(filename, show=True):
    debug(titre="testModifGlobales : %s" % filename.name)
    #     numfig = 0
    #     plt.figure(numfig)
    S0 = NSplineSimple(points=pointsFromFile(filename),
                       methode=('cubic', ((2, 0, 0), (1, 0, -5))),
                       precision=1000,
                       mode='courbure',
                       name='SPLINE01')
    if show: S0.plot(titre='NSplineSimple(points=pointsFromFile(filename),...')
    #     numfig += 1
    #     plt.figure(numfig)
    S0.cpoints = pointsFromFile(filename)
    debug(initial=mesures(S0))
    if show: S0.plot(titre=filename.name + 'cpoints = pointsFromFile()')

    #     numfig += 1
    #     plt.figure(numfig)
    S0.symetriser(0)
    debug(symetriser_0=mesures(S0))
    if show: S0.plot(titre='symetriser(0)')

    #     numfig += 1
    #     plt.figure(numfig)
    S0.symetriser(1)
    debug(symetriser_1=mesures(S0))
    if show: S0.plot(titre='symetriser(1)')

    #     numfig += 1
    #     plt.figure(numfig)
    S0.hardRotate(30)  #en degres par defaut
    debug(hardRotate_30=mesures(S0))
    if show: S0.plot(titre='hardRotate(30)')

    #     numfig += 1
    #     plt.figure(numfig)
    S0.hardScale((2, 0.5))
    debug(hardScale_2_0point5=mesures(S0))
    if show: S0.plot(titre='hardScale((2,0.5))')

    #     numfig += 1
    #     plt.figure(numfig)
    S0.translate((2, 3))
    debug(translate_2_3=mesures(S0))
    if show: S0.plot(titre='translate((2,3))')
    #     if show : plt.show()
    debug(titre="Fin testModifGlobales : %s" % filename.name)