Nodal est une application de simulation de circuits électriques basée sur une interface graphique. Elle permet de concevoir, analyser et simuler des systèmes électriques composés de dipôles, en utilisant différentes méthodes de résolution (DC, AC, transitoire).
- Caractéristiques
- Prérequis
- Installation
- Utilisation
- Architecture
- Structure du projet
- Développement
- Tests
- Licence
- Interface graphique intuitive basée sur PyQt5
- Création et édition de circuits électriques en mode visuel
- Support de multiples types de dipôles électriques
- Trois moteurs de simulation :
- Analyse DC (régime continu)
- Analyse AC (régime harmonique)
- Analyse transitoire
- Gestion automatique des nœuds et des connexions
- Grille de travail avec alignement magnétique
- Exportation et importation de circuits
- Visualisation graphique des résultats
- Support multilingue (français, anglais)
- Thèmes personnalisables
- Liaisons clavier configurables
- Python 3.8 ou supérieur
- PyQt5 (>=5.15.9)
- NumPy (>=1.24.0)
- Clonez le dépôt :
git clone <repository-url>
cd Nodal- Installez les dépendances :
pip install -r requirements.txtExécutez le fichier principal :
python main.pyL'application se lancera avec un écran de démarrage et affichera la fenêtre principale en mode maximisé.
- Panneau de composants : Sélectionnez et ajoutez des dipôles au circuit
- Panneau d'outils : Accédez aux outils d'édition (suppression, propriétés, etc.)
- Grille de travail : Concevez votre circuit en plaçant et connectant des composants
- Panneau de graphiques : Visualisez les résultats de simulation
- Panneau d'exemples : Charger des circuits prédéfinis
- Ajoutez des dipôles et des nœuds à votre circuit
- Connectez les composants avec des fils
- Configurez les paramètres des composants (valeurs, propriétés)
- Lancez une simulation (DC, AC ou transitoire)
- Analysez les résultats via les graphiques et les données
L'application suit le pattern Modèle-Vue-Contrôleur (MVC) :
- Modèle (
model/) : Représentation abstraite du circuit et de ses composants - Vue (
view/) : Interface graphique et visualisation - Contrôleur (
controller/) : Logique métier et coordination entre modèle et vue
circuit.py: Classe Circuit, gestion globale du circuitcomponents.py: Définition des dipôles disponiblesdipole.py: Classe Dipole, composant électrique de basenode.py: Classe Node, nœud du circuitwire.py: Classe Wire, connexion entre composants
app_controller.py: Contrôleur principal de l'applicationcircuit_controller.py: Gestion du circuitsimulation_controller.py: Orchestration des simulationsfile_controller.py: Importation et exportation de circuitsedit_controller.py: Édition des composants
main_window.py: Fenêtre principalecanvas.py: Zone de dessin du circuitcomponent_item.py: Représentation visuelle d'un dipôlenode_item.py: Représentation visuelle d'un nœudwire_item.py: Représentation visuelle d'une connexioncomponents_panel.py: Panneau de sélection des composantstools_panel.py: Panneau d'outilsgraphs_panel.py: Panneau de visualisation des résultatsexamples_panel.py: Panneau des exemplesgrid.py: Grille de travail
base_solver.py: Classe de base pour tous les solveursdc_solver.py: Solveur pour l'analyse DCac_solver.py: Solveur pour l'analyse ACtransient_solver.py: Solveur pour l'analyse transitoireutils.py: Fonctions utilitaires pour les calculs
translator.py: Gestion de la localisationassets.py: Gestion des ressources (icônes, images)
settings.py: Paramètres applicatifskeybinds.py: Liaisons clavierthemes.py: Thèmes de l'application
serializer.py: Sérialisation des circuitsimporter.py: Importation depuis divers formatsexporter.py: Exportation vers divers formats
Nodal/
├── main.py # Point d'entrée de l'application
├── requirements.txt # Dépendances Python
├── LICENSE # Licence MIT
├── README.md # Ce fichier
├── model/ # Couche modèle
│ ├── circuit.py
│ ├── components.py
│ ├── dipole.py
│ ├── node.py
│ └── wire.py
├── controller/ # Couche contrôleur
│ ├── app_controller.py
│ ├── circuit_controller.py
│ ├── simulation_controller.py
│ ├── file_controller.py
│ └── edit_controller.py
├── view/ # Couche vue
│ ├── main_window.py
│ ├── canvas.py
│ ├── component_item.py
│ ├── node_item.py
│ ├── wire_item.py
│ ├── components_panel.py
│ ├── tools_panel.py
│ ├── graphs_panel.py
│ ├── examples_panel.py
│ ├── grid.py
│ └── splash_screen.py
├── solver/ # Moteurs de simulation
│ ├── base_solver.py
│ ├── dc_solver.py
│ ├── ac_solver.py
│ ├── transient_solver.py
│ └── utils.py
├── utils/ # Utilitaires généraux
│ ├── translator.py
│ └── assets.py
├── config/ # Configuration
│ ├── settings.py
│ ├── keybinds.py
│ └── themes.py
├── io/ # Importation/Exportation
│ ├── serializer.py
│ ├── importer.py
│ └── exporter.py
├── assets/ # Ressources graphiques
│ ├── categories/
│ ├── components/
│ ├── panels/
│ ├── simulation/
│ ├── toolbar/
│ └── gen_icons_all.py
├── locales/ # Fichiers de traduction
│ ├── fr.json
│ └── en.json
└── tests/ # Tests unitaires
├── test_circuit.py
├── test_model.py
├── test_solver.py
├── test_io.py
├── test_simulation_controller.py
├── test_graph_panel_utils.py
├── test_view_components_panel.py
├── test_graphics_button.py
└── test_interactive_graphs.py
- Installez les dépendances de développement :
pip install -r requirements.txt- Assurez-vous que la structure du projet est respectée
- Avant de committer, vérifiez que les tests passent
- Format PEP 8
- Documentation des fonctions avec docstrings en français
- Variables et fonctions en français
- Types hints recommandés
Pour ajouter un nouveau dipôle :
- Définissez-le dans
model/components.py - Créez l'icône correspondante dans
assets/components/ - Ajoutez les paramètres éditables dans le contrôleur
- Implémentez le modèle mathématique dans les solveurs concernés
Exécutez les tests avec :
python -m pytest tests/Les tests couvrent :
- Modèle de circuit et composants
- Sérialisation et désérialisation
- Solveurs de simulation
- Interface utilisateur
- Importation/Exportation
Ce projet est distribué sous la licence MIT. Consultez le fichier LICENSE pour plus de détails.
Auteurs : Noa Ottermann & Kaveh Khabir Version : 1.0.0