[refactoring] Decouplage du maillage/ray casting/light mapping
Pour pouvoir implémenter le ray casting depuis des objets, je dois faire des modifications majeures dans le module light car actuellement une partie du code est spécifique à un maillage au sol et il n'est pas général. L'idée est de découpler la partie maillage / ray-casting / map-irradiance. Actuellement ces trois étapes sont relativement liées. Une conséquence de cette implémentation serait que les vieux codes (les anciens main.py) ne fonctionnent plus tel quel avec cette update car le workflow sera modifié.
Idée générale
Assembler les différents candidats au ray-casting afin d'invoquer un minimum de fois multi-ray-trace. L'assemblage des candidats conservent une trace de leur origine afin de pouvoir réaliser un post-processing des résultats propre à chaque application (culture, pv, capteur).
Pour cela une nouvelle classe est créée et la classe "Light_shade_scene" est adaptée
Détails
Classe "Mesh"
Cette classe a pour but objectif de proposer des méthodes pour créer à partir de différentes sources les points sources nécessaires au ray-casting. Par exemple la méthode M.Add_Plane_Ground_regular_meshes(X_min, X_max, Y_min, Y_max, X_increment, Y_increment,flag = "ground") va ajouter au sein de l'attribut dédié une liste de point sources créer par un maillage régulier. La classe va accumuler les points sources associé à leur flag provenant de l'invocation des différentes méthodes et in fine on pourra récupérer l'ensemble des points sources via la méthode Get_SourcePoints(). Cette implémentation permet au besoin de facilement ajouter des méthodes pour d'autres type d'objets (arbres, ...)
Exemple d'utilisation
M = Mesh()
M.Add_Plane_Ground_regular_meshes(0,1,0,3,0.1,1,flag = "ground")
M.Add_PV_Mesh(first_panel,flag = "PV")
M.Add_Sensor(0,1,1,flag="Pyranometre")
S = M.Get_SourcePoints()
La classe possède deux attributs principaux:
-
SourcesPoints type: numpy array (n x 4)
- Cette matrice reprend les coordonnées X,Y,Z des points sources ainsi que l'id de l'objet de départ
-
SourcesDict type: dictionnaire
- Ce dictionnaire fait le lien entre l'id de l'objet et son flag défini lors de l'invocation des méthodes Add...._
Classe "Light_shade_scene"
Cette classe sera mise à jour afin que les SourcesPoints défini dans la classe mesh soient utilisés comme input au côté de la géométrie en remplacement du meshgrid. Les méthodes direct_map et diffuse_map doivent être réécrites afin d'être plus généralistes, actuellement une carte 2D est générée en sortie cela n'a plus tellement de sens si l'ombrage sur l'ensemble des sources est considéré. Ces nouvelles méthodes devront fournir pour un ensemble de points sources le diffus et direct. Ensuite sur base du flag du pointsource il faudra utiliser le résultat de ce calcul dans différentes méthodes selon ce que l'on veut calculer. A partir du pointsourceID défini lors du maillage (4eme colonne), on peut facilement créer des subset de cette grande matrice de résultat diffus/direct. Ces subsets spécifiques pourront être ensuite envoyé dans des méthodes spécifiques à une application, par exemple calcul du productible PV, création de rapport pour les capteurs, ... Dans un premier temps les lignes de codes permettant de projeter les résultats sur des cartes 2D seront réutilisés dans une méthode. A voir a terme si cela ne devrait pas être déplacer dans une classe dédiée au post-processing.
Quelles conséquences ? Les anciens codes ne pourraient plus fonctionner en l'état mais je pense qu'ils peuvent être facilement adapté