# # # # # # # # # # # # # # Importation des bibliotheques/modules # # # # # # # # # # # # # # import numpy as np import time; import os from time import sleep import matplotlib as mpl from matplotlib.figure import Figure import matplotlib.pyplot as plt # # # # # # # # # # # # # # Conditions initiale # # # # # # # # # # # # # # FlagC=False FlagP=False secu1=False secu2=False mode = False nbAnnotation = 0 Annotation= [0]*999 FlagA = False contour = False mode1 = 0 drawing = False fig=plt.figure() #Definition d'une figure img = plt.imread('/home/pi/Desktop/reconstruction2D.png',0) #Lecture de l'image "reconstruction2D.png" presente sur le bureau plt.imshow(img,'gray') #Affichage de l'image plt.axis('off') #Suppression des axes figManager = plt.get_current_fig_manager() #Recuperation de la taille actuelle de la figure figManager.full_screen_toggle() #Modification de la taille actuelle de l'image pour la faire correspondre a la resolution du monteur a=plt.text(0.69,0.95,'a = Afficher/Masquer les raccourcis',fontsize=14,color='black',style='italic',transform=fig.transFigure) #Affichage du texte "a=Afficher/Masquer les raccourcis" # # # # # # # # # # # # # # Definition des fonctions # # # # # # # # # # # # # # def analyse(event): global secu1,secu2,CliqueGauche,CliqueDroit,Actions,Analyse,mode,xy,xytext,an0,F1,F2,F2bis,F3,an4,FlagA,legend,mode1,mode,sav,a,Annotation,nbAnnotation,FlagC,FlagP,DeplacementGras,DeplacementFin,ZoomGras,ZoomFin #Definition des variables en global pour pouvoir y acceder a partir des fonctions annexes #Fermeture de la fenetre if event.key == 'escape' : #Detection de l'appuie de la touche "echape" plt.close() #Fermeture de la figure #Suppression des annotations if event.key == 'delete' : #Detection de l'appuie de la touche "Suppr" Annotation[nbAnnotation].remove() #Suppression de la derniere annotation plt.draw() #Mise a jour de la figure #Mise a jour de la figure nbAnnotation = nbAnnotation - 1 #Decrementation dans le tableau nbAnnotation #Sauvegarde de la figure if event.key == 'b': #Detection de l'appuie de la touche "b" os.system('rm /home/pi/Desktop/PythonShell.txt') #Suppression du ficher "PythonShell.txt" os.system('rm /home/pi/Desktop/Figure1.txt') #Suppression du ficher "Figure1.txt" os.system('xdotool search --name "Python 3.5.3 Shell" >> /home/pi/Desktop/PythonShell.txt') #Creation d'un fichier contenant L'ID de la fenetre "Python Shell" os.system('xdotool search --name "Figure 1" >> /home/pi/Desktop/Figure1.txt') #Creation d'un fichier contenant L'ID de la fenetre "Figure1" shelltxt = open('/home/pi/Desktop/PythonShell.txt') #Ouverture du fichier "PythonShell.txt" shellID= shelltxt.readline() #Lecture de la premiere ligne du fichier "PythonShell.txt" figuretxt=open('/home/pi/Desktop/Figure1.txt') #Ouverture du fichier "Figure1.txt" figureID=figuretxt.readline() #Lecture de la premiere ligne du fichier "Figure1.txt" os.system('xdotool windowminimize %d'%(int(figureID))) #Minimisation de la fenetre "Figure1" os.system('wmctrl -ia %d'%(int(shellID))) #Mise en premier plan de la fenetre "Python 3.5.3 Shell" entre = input('Titre ? : ') #Demande de titre dans la console python os.system('xdotool windowminimize %d'%(int(shellID))) #Minimisation de la fenetre "Python 3.5.3 Shell" os.system('wmctrl -ia %d'%(int(figureID))) #Mise en premier plan de la fenetre "Figure1" titre = ('%s.png'%(entre)) #Implantation du titre donne dans une variable plt.imsave('/home/pi/Desktop/%s'%(titre),img[:,:,0],cmap=plt.cm.gray) #Sauvegarde de la figure avec le titre donne sav=plt.text(0.91,0.01,'Saving...',fontsize=28,color='black',style='italic',transform=fig.transFigure) #Affichage du texte "Saving..." plt.draw() #Mise a jour de la figure #Mise a jour de la figure plt.pause(1) #Temporisation sav.remove() #Suppression du texte "Saving..." plt.draw() #Mise a jour de la figure #Mise a jour de la figure #Animation en mode "Actions" if mode == False: #Detection du mode if event.key == 'p': #Detection de l'appuie de la touche "p" FlagP = not FlagP #Inversion de la variable "FlagP" if FlagC == True: #Detection de l'etat de la variable "FlagC" FlagC = not FlagC #Inversion de la variable "FlagC" ZoomGras.remove() #Suppression du texte "O : Zoom" CliqueGauche.remove() #Suppression du texte "Clique Gauche : Zoom +" CliqueDroit.remove() #Suppression du texte "Clique Droit : Zoom -" ZoomFin=plt.text(0,0.90,'O : Zoom',fontsize=13,color='gray',style='italic',transform=fig.transFigure) #Affichage du texte "O : Zoom" if FlagP == True : #Detection de l'etat de la variable "FlagP" DeplacementGras=plt.text(0,0.85,'P : Deplacement',fontsize=15,color='black',style='italic',transform=fig.transFigure) #Affichage du texte "P : Deplacement" DeplacementFin.remove() #Suppression du texte "P: Deplacement" plt.draw() #Mise a jour de la figure #Mise a jour de la figure if FlagP == False: #Detection de l'etat de la variable "FlagP" DeplacementGras.remove() #Suppression du texte "P : Deplacement" DeplacementFin=plt.text(0,0.85,'P : Deplacement',fontsize=13,color='gray',style='italic',transform=fig.transFigure) #Affichage du texte "P: Deplacement" plt.draw() #Mise a jour de la figure #Mise a jour de la figure if event.key == 'o': #Detection de l'appuir de la touche "o" FlagC = not FlagC #Inversion de la variable "FlagC" if FlagP == True: #Detection de l'etat de la variable "FlagP" FlagP = not FlagP #Inversation de la variable "FlagP" DeplacementGras.remove() #Suppression du texte "P : Deplacement" DeplacementFin=plt.text(0,0.85,'P : Deplacement',fontsize=13,color='gray',style='italic',transform=fig.transFigure) #Affichage du texte "P : Deplacement" if FlagC == True : #Detection de l'etat de la variable "FlagC" CliqueGauche=plt.text(0.3,0.97,'Clique Gauche : Zoom +',fontsize=13,color='gray',style='italic',transform=fig.transFigure) #Affichage du texte "Clique Gauche : Zoom +" CliqueDroit=plt.text(0.3,0.92,'Clique Droit : Zoom -',fontsize=13,color='gray',style='italic',transform=fig.transFigure) #Affichage du texte "Clique Droit : Zoom -" ZoomGras=plt.text(0,0.90,'O : Zoom',fontsize=15,color='black',style='italic',transform=fig.transFigure) #Affichage du texte "O : Zoom" ZoomFin.remove() #Suppression du texte "O : Zoom" plt.draw() #Mise a jour de la figure #Mise a jour de la figure if FlagC == False: #Detection de l'etat de la variable "FlagC" CliqueGauche.remove() #Suppression du texte "Clique Gauche : Zoom +" CliqueDroit.remove() #Suppression du texte "Clique Droit : Zoom -" ZoomGras.remove() #Suppression du texte "O : Zoom" ZoomFin=plt.text(0,0.90,'O : Zoom',fontsize=13,color='gray',style='italic',transform=fig.transFigure) #Affichage du texte "O : Zoom" plt.draw() #Mise a jour de la figure #Mise a jour de la figure if event.key == 'a': #Detection de l'appuie de la touche "a" FlagA = not FlagA #Inversion de l'etat de la variable "FlagA" if FlagA == True: #Detection de l'etat de la variable "FlagA" #Ecriture de la legende lines=plt.plot(0,0,'.',0,0,'.',0,0,'.',0,0,'.',color='black') plt.setp(lines[0],markersize=4) plt.setp(lines[1],markersize=4) plt.setp(lines[2],markersize=4) plt.setp(lines[3],markersize=4) legend=plt.legend(('echap : Quitter','b : Sauvegarde','suppr : Suppr annotation','r : Reset des mouvements'),loc='center left',bbox_to_anchor=(1,0.5),title='Raccourcis',framealpha=0,labelspacing=1) plt.draw() #Mise a jour de la figure if FlagA == False: legend.remove() #Suppression de la legende plt.draw() #Mise a jour de la figure #Animation en mode "Actions" if mode == True: #Detection de l'etat de la variable "mode" if event.key == 'f1': #Detection de l'appuie de la touche "F1" mode1 = 1 #La variable mode1 prend la valeur 1 F1.remove() #Suppression du texte "F1 : Annotation" F2.remove() #Suppression du texte "F2 : Deplacement" F2bis.remove() #Suppression du texte "Des annotations" F3.remove() #Suppression du texte "F3 : Contouring" F1=plt.text(0,0.90,'F1 : Annotation',fontsize=15,color='black',style='italic',transform=fig.transFigure) #Affichage du texte "F1 : Annotation" F2=plt.text(0,0.85,'F2 : Deplacement',fontsize=13,color='gray',style='italic',transform=fig.transFigure) #Affichage du texte "F2 : Deplacement" F2bis=plt.text(0,0.82,' des annotations',fontsize=13,color='gray',style='italic',transform=fig.transFigure) #Affichage du texte "des annotations" F3=plt.text(0,0.77,'F3 : Contouring',fontsize=13,color='gray',style='italic',transform=fig.transFigure) #Affichage du texte "F3 : Contouring" plt.draw() #Mise a jour de la figure if event.key == 'f2': #Detection de l'appuie de la touche "F2" mode1 = 2 #La variable mode1 prend la valeur 2 F1.remove() #Suppression du texte "F1 : Annotation" F2.remove() #Suppression du texte "F2 : Deplacement" F2bis.remove() #Suppression du texte "Des annotations" F3.remove() #Suppression du texte "F3 : Contouring" F1=plt.text(0,0.90,'F1 : Annotation',fontsize=13,color='gray',style='italic',transform=fig.transFigure) #Affichage du texte "F1 : Annotation" F2=plt.text(0,0.85,'F2 : Deplacement',fontsize=15,color='black',style='italic',transform=fig.transFigure) #Affichage du texte "F2 : Deplacement" F2bis=plt.text(0,0.82,' des annotations',fontsize=15,color='black',style='italic',transform=fig.transFigure) #Affichage du texte "des annotations"" F3=plt.text(0,0.77,'F3 : Contouring',fontsize=13,color='gray',style='italic',transform=fig.transFigure) #Affichage du texte "F3 : Contouring" plt.draw() #Mise a jour de la figure if event.key == 'f3': #Detection de l'appuie de la touche "F3" mode1 = 3 #La variable mode1 prend la valeur 3 F1.remove() #Suppression du texte "F1 : Annotation" F2.remove() #Suppression du texte "F2 : Deplacement" F2bis.remove() #Suppression du texte "Des annotations" F3.remove() #Suppression du texte "F3 : Contouring" F1=plt.text(0,0.90,'F1 : Annotation',fontsize=13,color='gray',style='italic',transform=fig.transFigure) #Affichage du texte "F1 : Annotation" F2=plt.text(0,0.85,'F2 : Deplacement',fontsize=13,color='gray',style='italic',transform=fig.transFigure) #Affichage du texte "F2 : Deplacement" F2bis=plt.text(0,0.82,' des annotations',fontsize=13,color='gray',style='italic',transform=fig.transFigure) #Affichage du texte "des annotations"" F3=plt.text(0,0.77,'F3 : Contouring',fontsize=15,color='black',style='italic',transform=fig.transFigure) #Affichage du texte "F3 : Contouring" plt.draw() #Mise a jour de la figure if event.key == 'm': #Detection de l'appuie de la touche "m" mode = not mode #Inversation de l'etat de la variable "mode" if mode == False: #Detection de l'etat de la variable "mode" secu1=False #La variable "secu1" passe a l'etat 'False' secu2=False #La variable "secu2" passe a l'etat 'False' mode1 = 0 #La variable "mode1" prend la valeur 0 F1.remove() #Suppression du texte "F1 : Annotation" F2.remove() #Suppression du texte "F2 : Deplacement" F2.remove() #Suppression du texte " des annotations" F3.remove() #Suppression du texte "F3 : Contouring" Actions.remove() #Suppression du texte "M : Changer de mode(Actions/ )" Analyse.remove() #Suppression du texte " Analyse" Actions=plt.text(0,0.04,'M : Changer de mode( /Analyse)',fontsize=15,color='black',style='italic',transform=fig.transFigure) #Affichage du texte "M : Changer de mode( /Analyse)" Analyse=plt.text(0,0.04,' Actions',fontsize=15,color='red',style='italic',transform=fig.transFigure) #Affichage du texte " Actions" DeplacementFin=plt.text(0,0.85,'P : Deplacement',fontsize=13,color='gray',style='italic',transform=fig.transFigure) #Affichage du texte "P : Deplacemen" ZoomFin=plt.text(0,0.90,'O : Zoom',fontsize=13,color='gray',style='italic',transform=fig.transFigure) #Affichage du texte "O : Zoom" plt.draw() #Mise a jour de la figure if mode == True : #Detection de l'etat de la variable "mode" if FlagC == False: #Detection de l'etat de la variable "FlagC" if FlagP == False: #Detection de l'etat de la variable "FlagP" ZoomFin.remove() #Suppression du texte "O : Zoom" DeplacementFin.remove() #Suppression du texte "P : Deplacement" Actions.remove() #Suppression du texte "M : Changer de mode( /Analyse)" Analyse.remove() #Suppression du texte " Actions" Actions=plt.text(0,0.04,'M : Changer de mode(Actions/ )',fontsize=15,color='black',style='italic',transform=fig.transFigure) #Affichage du texte "M : Changer de mode(Actions/ )" Analyse=plt.text(0,0.04,' Analyse',fontsize=15,style='italic',color='red',transform=fig.transFigure) #Affichage du texte " Analyse" F1=plt.text(0,0.90,'F1 : Annotation',fontsize=13,color='gray',style='italic',transform=fig.transFigure) #Affichage du texte "F1 : Annotation" F2=plt.text(0,0.85,'F2 : Deplacement',fontsize=13,color='gray',style='italic',transform=fig.transFigure) #Affichage du texte "F2 : Deplacement" F2bis=plt.text(0,0.82,' des annotations',fontsize=13,color='gray',style='italic',transform=fig.transFigure) #Affichage du texte " des annotations" F3=plt.text(0,0.77,'F3 : Contouring',fontsize=13,color='gray',style='italic',transform=fig.transFigure) #Affichage du texte "F3 : Contouring" plt.draw() #Mise a jour de la figure #Blocage du zoom/deplacement lorsqu'on est en mode "Analyse" if mode == True : #Detection de l'etat de la variable "mode" if FlagC == True: #Detection de l'etat de la variable "FlagC" CliqueGauche.remove() #Suppression du texte "Clique Gauche : Zoom +" CliqueDroit.remove() #Suppression du texte "Clique Droit : Zoom -" FlagC = not FlagC #Inversion de l'etat de la variable "FlagC" os.system('xdotool key o') #Forceage de l'appuie sur le touche "o" secu2 = True #La variable "secu2" passe a l'etat 'True' ZoomGras.remove() #Suppression du texte "O : Zoom" DeplacementFin.remove() #Suppression du texte "P : Deplacement" if FlagP == True: #Detection de l'etat de la variable "FlagP" FlagP = not FlagP #Inversion de l'etat de la variable "FlagP" os.system('xdotool key p') #Forceage de l'appuie sur le touche "p" secu1 = True #La variable "secu1" passe a l'etat 'True' DeplacementGras.remove() #Suppression du texte "P : Deplacement" ZoomFin.remove() #Suppression du texte "O : Zoom" if event.key == 'p': # Detection de l'appuie sur la touche "p" secu1 = not secu1 #Inversion de l'etat de la variable "secu1" if secu1 == True: #Detection de l'etat de la variable "secu1" time.sleep(0.5) #Temporisation de securite os.system('xdotool key p') #Forceage de l'appuie sur la touche "p" if event.key == 'o': #Detection de l'appuie sur la touche "o" secu2 = not secu2 #Inversion de l'etat de la variable "secu2" if secu2 == True: #Detection de l'etat de la variable "secu2" time.sleep(0.5) # Temporisation de securite os.system('xdotool key o') #Forceage de l'appuie sur la touche "o" #Fonctions permettant de place les annotations au niveau du curseur ainsi que de faire le contouring def souris(event): global ix,iy,fig,Annotation,nbAnnotation,contour #Declaration des variables en global pour pouvoir les manipuler quand on veut ix,iy=event.xdata,event.ydata #Recuperation des coordonees du pointeur de la souris if event.button == 1: #Detection de l'appuie du clique gauche de la souris #controle de la valeur de la variable "mode1" if mode1 == 1: nbAnnotation=nbAnnotation+1 #Incrementation de la variable "nbAnnotation" pour avance dans le tableau "Annotation" os.system('rm /home/pi/Desktop/PythonShell.txt') #Suppression du ficher "PythonShell.txt" os.system('rm /home/pi/Desktop/Figure1.txt') #Suppression du ficher "Figure1.txt" os.system('xdotool search --name "Python 3.5.3 Shell" >> /home/pi/Desktop/PythonShell.txt') #Creation d'un fichier contenant L'ID de la fenetre "Python Shell" os.system('xdotool search --name "Figure 1" >> /home/pi/Desktop/Figure1.txt') #Creation d'un fichier contenant L'ID de la fenetre "Figure1" shelltxt = open('/home/pi/Desktop/PythonShell.txt') #Ouverture du fichier "PythonShell.txt" shellID= shelltxt.readline() #Lecture de la premiere ligne du fichier "PythonShell.txt" figuretxt=open('/home/pi/Desktop/Figure1.txt') #Ouverture du fichier "Figure1.txt" figureID=figuretxt.readline() #Lecture de la premiere ligne du fichier "Figure1.txt" os.system('xdotool windowminimize %d'%(int(figureID))) #Minimisation de la fenetre "Figure1" os.system('wmctrl -ia %d'%(int(shellID))) #Mise en premier plan de la fenetre "Python 3.5.3 Shell" texte = input('Texte ? : ') #Demande du texte dans la console python couleurtexte = input ('Couleur du text ? : ') #Demande de la couleur du texte dans la console python couleurbox = input ("Couleur de l'encadrement ? : ") #Demande de la couleur de l'encadrement du texte dans la console python taille = input ('Taille ? : ') #Demande de la taille du texte dans la console python os.system('wmctrl -ia %d'%(int(figureID))) #Mise en premier plan de la fenetre "Figure1" os.system('xdotool windowminimize %d'%(int(shellID))) #Minimisation de la fenetre "Python 3.5.3 Shell" Annotation[nbAnnotation]=plt.text(ix,iy,texte,bbox=dict(facecolor=couleurbox,alpha=0.1),fontsize=taille,color=couleurtexte,style='italic') #Affichage de l'annotation plt.draw() #Mise a jour de la figure if mode1 == 2: Annotation[nbAnnotation].set_position((event.xdata,event.ydata)) #Placement de la derniere annotation au niveau de la position du curseur de la souris plt.draw() #Mise a jour de la figure if mode1 == 3: contour = True #Mise a l'etat 'True' de la variable "contour" if event.button == 3: #Detection de l'appuie du clique droit de la souris if mode == False: #Detection de l'etat de la variable "mode" os.system('xdotool key BackSpace') #Forceage sur l'appuie de la touche "Retour arriere" plt.draw() #Mise a jour de la figure #Detection du relachement du Clique def Relachement(event): global contour if event.button == 1: #Detection de l'appuie du clique gauche de la souris if mode1 == 3: contour = False #Contouring def Contouring(event): global contour #Declaration des variables en global pour pouvoir les manipuler quand on veut ix,iy=event.xdata,event.ydata #Recuperation des coordonees du pointeur de la souris if mode1 == 3: if contour == True : #Detection de l'etat de la variable "contour" plt.plot(ix,iy,marker='.',color='r') #Contouring en affichant des point au niveau du curseur de la souris plt.draw() #Mise a jour de la figure # # # # # # # # # # # # # # Liaison entre les fonctions et la figure # # # # # # # # # # # # # # plt.connect('button_release_event',Relachement) #Detection sur le relachement d'une touche du clavier plt.connect('motion_notify_event',Contouring) #Detection lors d'un mouvement de curseur plt.connect('key_press_event',analyse) #Detection sur l'appuie d'une touche du clavier plt.connect('button_press_event',souris) #Detection sur l'appuie d'un bouton de la souris # # # # # # # # # # # # # # Mise en place des annotations initial # # # # # # # # # # # # # # plt.subplots_adjust(left=0.125,right=0.7,bottom=0.1,top=0.9,wspace=0.2,hspace=0.2) #Ajustement de figure plt.text(0,0.97,'Mode : ',fontsize=19,color='gray',style='italic',transform=fig.transFigure) #Affichage du texte "Mode : " Actions=plt.text(0,0.04,'M : Changer de mode( /Analyse)',fontsize=15,color='black',style='italic',transform=fig.transFigure) #Affichage du texte "M : Changer de mode( /Analyse)" Analyse=plt.text(0,0.04,' Actions',fontsize=15,color='red',style='italic',transform=fig.transFigure) #Affichage du texte " Actions" DeplacementFin=plt.text(0,0.85,'P : Deplacement',fontsize=13,color='gray',style='italic',transform=fig.transFigure) #Affichage du texte "P : Deplacement" ZoomFin=plt.text(0,0.90,'O : Zoom',fontsize=13,color='gray',style='italic',transform=fig.transFigure) #Affichage du texte "O : Zoom" plt.draw() #Mise a jour de la figure plt.show() #Mise en place de l'ensemble