Pymecavideo 8.0
Étude cinématique à l'aide de vidéos
preferences.py
1# -*- coding: utf-8 -*-
2
3licence = """
4 preferences is a a file of the project pymecavideo:
5 a program to track moving points in a video frameset
6 Copyright (C) 2007 Jean-Baptiste Butet <ashashiwa@gmail.com>
7
8 This program is free software: you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation, either version 3 of the License, or
11 (at your option) any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program. If not, see <http://www.gnu.org/licenses/>.
20"""
21
22# from interfaces.Ui_preferences import Ui_Dialog
23from PyQt6.QtCore import QObject, QTimer
24from PyQt6.QtWidgets import QMessageBox
25
26import os, re, configparser, io
27
28from version import Version
29from vecteur import vecteur
30
31class MonConfigParser(configparser.ConfigParser):
32 """
33 Analiseur de fichier de configuration qui sait triter les vecteurs
34 """
35 def __init__(self):
36 configparser.ConfigParser. __init__(self)
37 return
38
39 def getvecteur(self, section, option):
40 """
41 @param section la section où on cherche
42 @param option l'option que l'on cherche
43 @return la valeur sous forme de vecteur en cas de réussite
44 sinon par défaut, vecteur(0,0)
45 """
46 floatre = r"[+-]?(\d+(\.\d*)?|\.\d+)([eE][+-]?\d+)?"
47 m = re.match(f"\\(({floatre}),[ ]?({floatre})\\)", self[section][option])
48 if m:
49 return vecteur(float(m.group(1)), float(m.group(5)))
50 else:
51 return vecteur(0,0)
52
53class Preferences (QObject):
54 def __init__(self, parent):
55 QObject.__init__(self)
56
57 self.app = parent
58 self.app.dbg.p(3, "In : Preferences, preferences.py")
59
60 self.conffile = os.path.join(self.app._dir("conf"), "pymecavideo.conf")
61 self.config = MonConfigParser()
62
63 # ajuste les valeurs par défaut
64 d = self.defaults = self.config['DEFAULT']
65 d['version'] = f"pymecavideo {Version}"
66 d['proximite'] = "False" # vecteurs tracés près du curseur
67 d['lastVideo'] = "" # vidéo consultée précédement
68 d['videoDir'] = os.getcwd() # répertoire pour les vidéos
69 d['niveauDbg'] = "0" # niveau des messages de débogage
70 d['sens_X'] = "1" # sens dee abscisses
71 d['sens_Y'] = "1" # sens dee ordonnées
72 d['taille_image'] = "(320,240)" # dimension de l'image de vidéo
73 d['rotation'] = "0" # rotation de l'image
74 d['origine'] = "(320,240)" # origine pour les pointages
75 d['index_depart'] = "1" # première image pointée
76 d['etalon_m'] = "1.00" # longueur de l'étalon en mètre
77 d['etalon_px'] = "100" # longueur de l'étalon en pixel
78 d['etalon_org'] = "None" # point 1 de l'étalon sur l'image
79 d['etalon_ext'] = "None" # point 2 de l'étalon sur l'image
80 d['deltaT'] = "0.040" # intervalle de temps entre deux images
81 d['nb_obj'] = "1" # nombre d'objets suivis
82 # récupère les valeurs enregistrées
83 self.load()
84 return
85
86 def __str__(self):
87 """
88 donne une représentation lisible de la configuration
89 """
90 with io.StringIO() as outfile:
91 d = self.config["DEFAULT"]
92 self.config.write(outfile)
93 result = outfile.getvalue()
94 return result
95
96 def save(self):
97 """
98 Sauvegarde des préférences dans le fichier de configuration.
99 """
100 with open(self.conffile, "w") as outfile:
101 d = self.config["DEFAULT"]
102 d["version"] = f"pymecavideo {Version}"
103 d["lastvideo"] = str(self.app.pointage.filename)
104 self.config.write(outfile)
105 return
106
107 def load(self):
108 if os.path.exists(self.conffile):
109 try:
110 self.config.read(self.conffile)
111 except UnicodeDecodeError:
112 QTimer.singleShot(
113 50,
114 lambda: QMessageBox.information(
115 self.app,
116 self.tr("Erreur de lecture de la configuration"),
117 self.tr("Peut-être un ancien format de fichier de configuration ? On recommence avec une configuration neuve.")))
118 return
Analiseur de fichier de configuration qui sait triter les vecteurs.
Definition: preferences.py:34
def getvecteur(self, section, option)
Definition: preferences.py:45
def __str__(self)
donne une représentation lisible de la configuration
Definition: preferences.py:89
def save(self)
Sauvegarde des préférences dans le fichier de configuration.
Definition: preferences.py:99
une classe pour des vecteurs 2D ; les coordonnées sont flottantes, et on peut accéder à celles-ci par...
Definition: vecteur.py:44