Partage
  • Partager sur Facebook
  • Partager sur Twitter

Importer une classe Python sous Matlab

    14 mai 2022 à 9:53:35

    Bonjour à tous je voudrais savoir s'il est possible d'importer les librairies ainsi que les fonctions de la classe ShowData dans Matlab pour effectuer des comparaisons de tracés dedans. Je vous met le code entier 

    from tkinter import*
    import matplotlib as mpl
    from mpl_toolkits.mplot3d import Axes3D
    import numpy as np
    import matplotlib.pyplot as plt
    import matplotlib.widgets as widgets
    import os
    
    
    class ShowData:
        
        def __init__(self, path, ext1, ext2):
            plt.close()
            plt.cla()
            plt.clf()
    
            #Positionnement qui ne marche pas de cette façon
            self.fig.subplots_adjust(
                top=0.94,
                bottom=0.08,
                left=0,
                right=0.988,
                hspace=0.612,
                wspace=0.579
            )
    #         C:\Users\adrie\OneDrive\Documents\Projet_Indus_ROB4\Projet-Industriel 2020\Projet_Industriel_FLR_ROB4\Programmes\Enregistrement C++\build\Debug\
            self.temps.clear(); self.x_pos.clear(); self.y_pos.clear(); self.z_pos.clear();
            self.w_orien.clear(); self.x_orien.clear(); self.y_orien.clear(); self.z_orien.clear();
            self.temps_f.clear(); self.x_pos_f.clear(); self.y_pos_f.clear(); self.z_pos_f.clear();
            self.w_orien_f.clear(); self.x_orien_f.clear(); self.y_orien_f.clear(); self.z_orien_f.clear();
            # path_inter = 'C:\Users\adrie\OneDrive\Documents\Projet_Indus_ROB4\';
            # path_inter_2 = 'Projet-Industriel 2020\Projet_Industriel_FLR_ROB4\Programmes\';
            # path_end = '\build\Debug';
            # path_inter + 'Enregistrement C++' + path_end +
            
            # Lecture du fichier (-camera)
            self.readFile(path + ext1 + ".txt", self.x_pos, self.y_pos, self.z_pos, self.w_orien, self.x_orien, self.y_orien, self.z_orien, self.temps)
            # Lecture du fichier (-pointe)
            self.readFile(path + ext2 + ".txt", self.x_pos_f, self.y_pos_f, self.z_pos_f, self.w_orien_f, self.x_orien_f, self.y_orien_f, self.z_orien_f, self.temps_f)
    
                #X Translation+
                
            ax2 = plt.subplot2grid(self.gridsize, (0, 3), colspan=2, rowspan=1)
            self.Curve(ax2, self.temps, 't/ms', self.x_pos, 'x/m', 'x=f(t)', self.sz_title_txt, self.sz_ax_txt, self.clr)
            self.Curve(ax2, self.temps_f, 't/ms', self.x_pos_f, 'x/m', 'x=f(t)', self.sz_title_txt, self.sz_ax_txt, self.clr_f)
                #Y Translation
            ax3 = plt.subplot2grid(self.gridsize, (1,3), colspan=2, rowspan=1)
            self.Curve(ax3, self.temps, 't/ms', self.y_pos, 'y/m', 'y=f(t)', self.sz_title_txt, self.sz_ax_txt, self.clr)
            self.Curve(ax3, self.temps_f, 't/ms', self.y_pos_f, 'y/m', 'y=f(t)', self.sz_title_txt, self.sz_ax_txt, self.clr_f)
                #Z Translation
            ax4 = plt.subplot2grid(self.gridsize, (2,3), colspan=2, rowspan=1)
            self.Curve(ax4, self.temps ,'t/ms', self.z_pos, 'z/m', 'z=f(t)', self.sz_title_txt, self.sz_ax_txt, self.clr)
            self.Curve(ax4, self.temps_f, 't/ms', self.z_pos_f, 'z/m', 'z=f(t)', self.sz_title_txt, self.sz_ax_txt, self.clr_f)
    
                #W Orientation    
            ax8 = plt.subplot2grid(self.gridsize, (3,5), colspan=2, rowspan=1)
            self.Curve(ax8, self.temps ,'t/ms', self.w_orien, 'w/m', 'tw = f(t)',self. sz_title_txt, self.sz_ax_txt, self.clr)
            self.Curve(ax8, self.temps_f, 't/ms', self.w_orien_f, 'x/m', 'tw = f(t)', self.sz_title_txt, self.sz_ax_txt, self.clr_f)
                #X Orientation
            ax5 = plt.subplot2grid(self.gridsize, (0,5), colspan=2, rowspan=1)
            self.Curve(ax5, self.temps ,'t/ms', self.x_orien, 'x/m', 'tx = f(t)', self.sz_title_txt, self.sz_ax_txt, self.clr)
            self.Curve(ax5, self.temps_f, 't/ms', self.x_orien_f, 'x/m', 'tx = f(t)', self.sz_title_txt, self.sz_ax_txt, self.clr_f)
                #Y Orientation
            ax6 = plt.subplot2grid(self.gridsize, (1,5), colspan=2, rowspan=1)
            self.Curve(ax6, self.temps ,'t/ms', self.y_orien, 'x/m', 'ty = f(t)', self.sz_title_txt, self.sz_ax_txt, self.clr)
            self.Curve(ax6, self.temps_f, 't/ms', self.y_orien_f, 'x/m', 'ty = f(t)', self.sz_title_txt, self.sz_ax_txt, self.clr_f)
                #Z Orientation
            ax7 = plt.subplot2grid(self.gridsize, (2,5), colspan=2, rowspan=1)
            self.Curve(ax7, self.temps ,'t/ms', self.z_orien, 'x/m', 'tz = f(t)', self.sz_title_txt, self.sz_ax_txt, self.clr)
            self.Curve(ax7, self.temps_f, 't/ms', self.z_orien_f, 'x/m', 'tz = f(t)', self.sz_title_txt, self.sz_ax_txt, self.clr_f)
    
        def readFile(self, path, x, y, z, tw, tx, ty, tz, temps):
            coord = []
            filepath = path
            print(path)
            
            nb_line = sum(1 for line in open(path))
            with open(filepath) as fp:
               line = fp.readline()
               cnt = 0
               while line:
                   line = fp.readline()
                   cnt += 1
                   coord = line.split('\t')
                   if cnt > 1 :
                       if cnt < nb_line:
                               temps.append(float(coord[0]))
                               x.append(float(coord[1]))
                               y.append(float(coord[2]))
                               z.append(float(coord[3]))
                               tw.append(float(coord[4]))
                               tx.append(float(coord[5]))
                               ty.append(float(coord[6]))
                               tz.append(float(coord[7]))
            fp.close()
    
        def show3DCurve(self, leg1, leg2): 
            ax1 = plt.subplot2grid(self.gridsize, (0,0), projection='3d', colspan=3, rowspan=3)
            ax1.set_title('3D curve of movement before and after treatment',
                  fontweight="bold",
                  fontsize=10)
            if leg2 == "":
                leg2 = 'filtre pointe'
                ax1.plot(self.x_pos_f, self.y_pos_f, self.z_pos_f, label=leg2, color='green')
            else :
                ax1.plot(self.x_pos, self.y_pos, self.z_pos, label=leg1, color='blue')
                ax1.plot(self.x_pos_f, self.y_pos_f, self.z_pos_f, label=leg2, color='green')
    
            
            ax1.legend(loc = 4)
            ax1.set_xlabel('x(t)',fontweight="bold", fontsize= 10)
            ax1.set_ylabel('y(t)',fontweight="bold", fontsize= 10)
            ax1.set_zlabel('z(t)',fontweight="bold", fontsize= 10)
            plt.show()
            
        def Curve(self, ax, hor, hor_title, ver, ver_title, title, sz_txt_title, sz_txt_axe, color):
            ax.plot(hor, ver, color)
            ax.set_title(title,fontweight="bold", fontsize=sz_txt_title)
            ax.set_xlabel(hor_title,fontweight="bold", fontsize= sz_txt_axe)
            ax.set_ylabel(ver_title,fontweight="bold", fontsize= sz_txt_axe)
                
        
                #ATTRIBUTS
        gridsize = (4, 7)
        sz_title_txt = 10
        sz_ax_txt = 7
        clr = 'b'
        clr_f = 'g'
            #Config de la fenetre
        fig = plt.figure(figsize=(14, 6),)
                #Datas
        temps = []; x_pos = []; y_pos = []; z_pos = []
        w_orien = []; x_orien = []; y_orien = []; z_orien = [];
        temps_f = []; x_pos_f = []; y_pos_f = []; z_pos_f = []
        w_orien_f = []; x_orien_f = []; y_orien_f = []; z_orien_f = [];
    
    def createCurve(path, ext1, ext2):
        test = ShowData(path, ext1, ext2)
        test.show3DCurve(ext1, ext2)
    
    def changeNameBasique(nameBef, nameAfter):
        os.rename(nameBef + '.txt', nameAfter + '.txt')
        
    def changeName(nameBef, nameAfter):
        os.rename(nameBef + '-filtre-pointe.txt', nameAfter + '-filtre-pointe.txt')
        os.rename(nameBef + '-filtre-camera.txt', nameAfter + '-filtre-camera.txt')
        
    
    def modeBasique():
        FBasique.pack(side=TOP, anchor=NE, padx=10, pady=10)
        bModeB.configure(bg = 'green')
        FTest.pack_forget()
        bModeT.configure(bg = 'red')
        
    def modeTest():
        FTest.pack(side=TOP, anchor=NE, padx=10, pady=10)
        bModeT.configure(bg = 'green')
        FBasique.pack_forget()
        bModeB.configure(bg = 'red')
    
    
    
        ## Screen
        # Configuration
    screen = Tk()
    screen.title('Affichage et Gestion de fichiers v.1.0.1')
    
    L_open = Label(screen, text = "MODE :")
    L_open.pack(side=TOP, anchor=NW, padx=5, pady=5)
        #Affichage basique
    bModeB = Button(screen, text = "Basique", fg='white', command= lambda: modeBasique())
    bModeB.configure(bg = 'green')
    bModeB.pack(side=TOP, anchor=NW, padx=5, pady=5)
        #Affichage Test
    bModeT = Button(screen, text = "Test", fg='white', command= lambda: modeTest())
    bModeT.configure(bg = 'red')
    bModeT.pack(side=TOP, anchor=NW, padx=5, pady=5)
    
    
    
        ## Frame Basique
    FBasique=Frame(screen,width=575,height=350,background='darkgray')
    
    L_open = Label(FBasique, text = "OUVERTURE DE FICHIER :")
    L_open.grid(column=0, row=2, ipadx=5, pady=5)
    
    L_Part1 = Label(FBasique, text = "RENOMMER UN FICHIER : ")
    L_Part1.grid(column=0, row=0, ipadx=5, pady=5)
    
    T_oldName = Label(FBasique, text = "Ancien nom : ")
    T_oldName.grid(column=2, row=1, ipadx=15, pady=5)
    
    nameBefB = StringVar()
    nameBefB.set("Ancien nom")
    nameInpBefB = Entry(FBasique, textvariable = nameBefB, width = 30)
    nameInpBefB.grid(column=3, row=1, ipadx=1, pady=5)
    
    T_newName = Label(FBasique, text = "Nouveau nom : ")
    T_newName.grid(column=2, row=2, ipadx=5, pady=5)
    
    nameAfterB = StringVar()
    nameAfterB.set("Nouveau nom")
    nameInpAfterB = Entry(FBasique, textvariable = nameAfterB, width = 30)
    nameInpAfterB.grid(column=3, row=2, ipadx=15, pady=5)
    
    bName = Button(FBasique, text = "Modifier", command= lambda: changeNameBasique(nameInpBefB.get(), nameInpAfterB.get()))
    bName.grid(column=3, row=3, ipadx=5, pady=5)
    
    nameTextB = StringVar()
    nameTextB.set("Entrez un nom de fichier")
    nameInputB = Entry(FBasique, textvariable = nameTextB, width = 30)
    nameInputB.grid(column=2, row=7, ipadx=5, pady=5)
    b1 = Button(FBasique, text = "Filtre - Pointe", command= lambda: createCurve(nameInputB.get(), "-pointe", "-filtre-pointe")) #
    b1.grid(column=3, row=8, ipadx=5, pady=5)
    
    FBasique.pack(side=TOP, anchor=NE, padx=10, pady=10)
    
    
    
        ## Frame Test
    FTest=Frame(screen,width=575,height=350,background='darkgray')
        
        #Renommer le fichier
    L_Part1 = Label(FTest, text = "RENOMMER UN FICHIER : ")
    L_Part1.grid(column=0, row=0, ipadx=5, pady=5)
    
    T_oldName = Label(FTest, text = "Ancien nom : ")
    T_oldName.grid(column=2, row=1, ipadx=15, pady=5)
    
    nameBef = StringVar()
    nameBef.set("Ancien nom")
    nameInpBef = Entry(FTest, textvariable = nameBef, width = 30)
    nameInpBef.grid(column=3, row=1, ipadx=1, pady=5)
    
    T_newName = Label(FTest, text = "Nouveau nom : ")
    T_newName.grid(column=2, row=2, ipadx=5, pady=5)
    
    nameAfter = StringVar()
    nameAfter.set("Nouveau nom")
    nameInpAfter = Entry(FTest, textvariable = nameAfter, width = 30)
    nameInpAfter.grid(column=3, row=2, ipadx=15, pady=5)
    
    bName = Button(FTest, text = "Modifier", command= lambda: changeName(nameInpBef.get(), nameInpAfter.get()))
    bName.grid(column=3, row=3, ipadx=5, pady=5)
    
        # Ouvrir un fichier
    L_Part2 = Label(FTest, text = "OUVERTURE DE FICHIER :")
    L_Part2.grid(column=0, row=6, ipadx=5, pady=5)
    nameText = StringVar()
    nameText.set("Entrez un nom de fichier")
    nameInput = Entry(FTest, textvariable = nameText, width = 30)
    nameInput.grid(column=2, row=7, ipadx=5, pady=5)
    
    b1 = Button(FTest, text = "Caméra - Pointe", command= lambda: createCurve(nameInput.get(), "-camera", "-pointe"))
    b1.grid(column=3, row=8, ipadx=5, pady=5)
    b2 = Button(FTest, text = "Filtre Caméra - Filtre Pointe", command= lambda: createCurve(nameInput.get(), "-filtre-camera", "-filtre-pointe"))
    b2.grid(column=3, row=9, ipadx=5, pady=5)
    b3 = Button(FTest, text = "Caméra - Filtre Camera", command= lambda: createCurve(nameInput.get(), "-camera", "-filtre-camera"))
    b3.grid(column=3, row=10, ipadx=5, pady=5)
    b4 = Button(FTest, text = "Pointe - Filtre Pointe", command= lambda: createCurve(nameInput.get(), "-pointe", "-filtre-pointe"))
    b4.grid(column=3, row=11, ipadx=5, pady=5)
    
    screen.mainloop()
    


    Merci d'avance pour votre réponse.

    -
    Edité par AdrienGalezowski 14 mai 2022 à 11:04:15

    • Partager sur Facebook
    • Partager sur Twitter
      14 mai 2022 à 10:57:49

      Bonjour, Pas d'image de code totalement inutilisable par copier/coller pour tests éventuels.

      Le message qui suit est une réponse automatique activée par un membre de l'équipe. Les réponses automatiques leur permettent d'éviter d'avoir à répéter de nombreuses fois la même chose, ce qui leur fait gagner du temps et leur permet de s'occuper des sujets qui méritent plus d'attention.
      Nous sommes néanmoins ouverts et si vous avez une question ou une remarque, n'hésitez pas à contacter la personne en question par Message Privé.

      Pour plus d'informations, nous vous invitons à lire les règles générales du forum

      Merci de colorer votre code à l'aide du bouton Code

      Les forums d'Openclassrooms disposent d'une fonctionnalité permettant de colorer et mettre en forme les codes source afin de les rendre plus lisibles et faciles à manipuler par les intervenants. Pour cela, il faut utiliser le bouton Code de l'éditeur, choisir un des langages proposés et coller votre code dans la zone prévue. Si vous utilisez l'éditeur de messages en mode Markdown, il faut utiliser les balises <pre class="brush: python;">Votre code ici</pre>.

      Merci de modifier votre message d'origine en fonction.

      Liens conseillés

      • Partager sur Facebook
      • Partager sur Twitter
        14 mai 2022 à 12:45:01

        Bonjour.

        Ça serait pas plutôt une question à poser dans un forum consacré à Matlab ?

        Après tu auras peut-être l´un des "forumers" qui aura déjà été confronté à cette problématique.

        • Partager sur Facebook
        • Partager sur Twitter

        PB68

        Importer une classe Python sous Matlab

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        • Editeur
        • Markdown