WIP : added some graphics primitives in modgint + fonts on fxCG (same as fx9860G) + turtle/matplotl libraries + examples #2

Closed
Slyvtt wants to merge 2 commits from (deleted):dev into dev
First-time contributor

Hello Lephe,

voici quelques propositions d'ajouts sur PythonExtra destinées à répondre à quelques unes des demandes en cours (selon ton listing ici des requêtes ):

  • Fonction de dessin de cercle (Ptitjoz #194511) : fonctions ajoutées via deux fichiers sources primitives.h & primitives.c + ajout des callbacks dans modgint.c, c'est Ok pour fx9860G et fx-CG50, juste aucun tracé si les couleurs sont C_LIGHT ou C_DARKdans les fonctions sur fx9860G (mais OK pour Prizm)

  • Ajout des fontes de tailles différentes sur fx-CG50. Pour le moment j'ai mis les mêmes que pour la fx9860G, je ferai je pense une itération avec des fontes plus grosses, plus lisibles et spécifiques à la Prizm.

  • Compatibilité avec turtle (Tuper4 #194656) : j'ai créé deux librairies à partir de la version officielle de Casio. L'officiel est dans le fichier .zip et j'ai légèrement modifié pour que ça tourne sur le port micropython. Notamment la fonction round() de Python n'est pas couverte dans micropython, j'ai donc ajusté. C'est le fichier turtle.py dans ports/sh/examples/casioplot35 et casioplot90. Un example d'utilisation est donné dans testturtle.py. ATTENTION, à cause du bug des chemin relatif, ça ne fonctionne que quand tout est à la racine pour le moment. Testé et fonctionnel sur fx9860G et sur Prizm.

  • Compatibilité avec matplotl : là encore j'ai créé deux librairies à partir de la version officielle de Casio. En gros idem que pour turtle. C'est cette fois le fichier matplotl.py dans ports/sh/examples/casioplot35 et casioplot90. Un example d'utilisation est donné dans testmatplotl.py. ATTENTION, à cause du bug des chemin relatif, ça ne fonctionne que quand tout est à la racine pour le moment. Testé et fonctionnel sur Prizm par contre ne fonctionne pas sur fx9860G car pas assez de mémoire (le module est assez gros, je suis pas trop surpris de ce côté là. Si tu parviens à nous dégoter plus de RAM, ce sera à retester.

  • Moteur de gris (Ptitjoz #194757) : Rien de poussé ici, j'ai fait la base, mais manque de RAM, ça bloque le lancement de PythonExtra (pas de crash, mais juste la ligne "PythonExtra" s'affiche à l'écran, rien de plus, la seule action possible est de quitter l'addin).

  • Correction du bug des imports relatifs (Ptitjoz #194757) : je confirme le bug. Dès qu'on a un call a import dans un module importé depuis un sous répertoire, il cherche dans la racine au lieu du répertoire courant.

  • Bug sur l'émulateur (Ptitjoz #194519) : J'ai pas remarqué sur ma machine, je poursuis les investigations.

  • Correction de bug des fichiers mal fermés (Ptitjoz #194757) : idem, pas eu ce problème (encore), je poursuis les investigations.

  • Fonction de dessin d'image (Ena0 #194556, Tuper4 #194749) : pas regardé.

@+ Sly

Hello Lephe, voici quelques propositions d'ajouts sur PythonExtra destinées à répondre à quelques unes des demandes en cours (selon ton listing [ici des requêtes](https://www.planet-casio.com/Fr/forums/topic17202-8-beta-pythonextra.html#194764) ): - Fonction de dessin de cercle (Ptitjoz #194511) : fonctions ajoutées via deux fichiers sources `primitives.h` & `primitives.c` + ajout des callbacks dans `modgint.c`, c'est Ok pour `fx9860G` et `fx-CG50`, juste aucun tracé si les couleurs sont `C_LIGHT` ou `C_DARK`dans les fonctions sur `fx9860G` (mais OK pour `Prizm`) - Ajout des fontes de tailles différentes sur `fx-CG50`. Pour le moment j'ai mis les mêmes que pour la `fx9860G`, je ferai je pense une itération avec des fontes plus grosses, plus lisibles et spécifiques à la `Prizm`. - Compatibilité avec turtle (Tuper4 #194656) : j'ai créé deux librairies à partir de la version officielle de Casio. L'officiel est dans le fichier `.zip` et j'ai légèrement modifié pour que ça tourne sur le port micropython. Notamment la fonction `round()` de Python n'est pas couverte dans micropython, j'ai donc ajusté. C'est le fichier `turtle.py` dans `ports/sh/examples/casioplot35` et `casioplot90`. Un example d'utilisation est donné dans `testturtle.py`. ATTENTION, à cause du bug des chemin relatif, ça ne fonctionne que quand tout est à la racine pour le moment. Testé et fonctionnel sur `fx9860G` et sur `Prizm`. - Compatibilité avec matplotl : là encore j'ai créé deux librairies à partir de la version officielle de Casio. En gros idem que pour `turtle`. C'est cette fois le fichier `matplotl.py` dans `ports/sh/examples/casioplot35` et `casioplot90`. Un example d'utilisation est donné dans `testmatplotl.py`. ATTENTION, à cause du bug des chemin relatif, ça ne fonctionne que quand tout est à la racine pour le moment. Testé et fonctionnel sur `Prizm` par contre ne fonctionne pas sur `fx9860G` car pas assez de mémoire (le module est assez gros, je suis pas trop surpris de ce côté là. Si tu parviens à nous dégoter plus de RAM, ce sera à retester. - Moteur de gris (Ptitjoz #194757) : Rien de poussé ici, j'ai fait la base, mais manque de RAM, ça bloque le lancement de PythonExtra (pas de crash, mais juste la ligne "PythonExtra" s'affiche à l'écran, rien de plus, la seule action possible est de quitter l'addin). - Correction du bug des imports relatifs (Ptitjoz #194757) : je confirme le bug. Dès qu'on a un call a `import` dans un module importé depuis un sous répertoire, il cherche dans la racine au lieu du répertoire courant. - Bug sur l'émulateur (Ptitjoz #194519) : J'ai pas remarqué sur ma machine, je poursuis les investigations. - Correction de bug des fichiers mal fermés (Ptitjoz #194757) : idem, pas eu ce problème (encore), je poursuis les investigations. - Fonction de dessin d'image (Ena0 #194556, Tuper4 #194749) : pas regardé. @+ Sly
Slyvtt added 1 commit 2024-01-03 13:32:16 +01:00
Owner

Ouf, classiquement c'est un truc immense haha. Prenons les choses dans l'ordre.

Je vais commencer factoriser un chouille les primitives graphiques et les ajouter à gint. La dernière chose que je veux c'est avoir des fonctions du module gint de PythonExtra qui existent pas dans la lib de base. Je fais ça vite fait demain et je reviens vers toi juste après.

Ouf, classiquement c'est un truc immense haha. Prenons les choses dans l'ordre. Je vais commencer factoriser un chouille les primitives graphiques et les ajouter à gint. La dernière chose que je veux c'est avoir des fonctions du module gint de PythonExtra qui existent pas dans la lib de base. Je fais ça vite fait demain et je reviens vers toi juste après.
Author
First-time contributor

Salut,

oui c'était l'idée de base mais je voulais pas rajouter une PR dans gint. Idéalement, si tu sais les mettre les primitives dans un coin un peu spécifique de gint, cela permettrait de rajouter qq primitives au fil de l'eau (par exemple les polygones). J'aimerais à terme proposer les primitives simples disponibles dans SDL_gfx (le but n'étant pas de proposer une librairie qui fait tout, mais d'avoir qq fonctions de base pour faire des rendus simples).

C'est pour cela que j'ai fait des fichiers séparés primitives.c & .h. Juste en passant j'ai pas vérifié pour le dwindow, je passe par dline() et dpixel() donc je pense que c'est OK, mais j'ai pas checké.

Mais je te laisse gérer, tu es le boss :) We keep in touch ...

Salut, oui c'était l'idée de base mais je voulais pas rajouter une PR dans gint. Idéalement, si tu sais les mettre les primitives dans un coin un peu spécifique de gint, cela permettrait de rajouter qq primitives au fil de l'eau (par exemple les polygones). J'aimerais à terme proposer les primitives simples disponibles dans `SDL_gfx` (le but n'étant pas de proposer une librairie qui fait tout, mais d'avoir qq fonctions de base pour faire des rendus simples). C'est pour cela que j'ai fait des fichiers séparés primitives.c & .h. Juste en passant j'ai pas vérifié pour le dwindow, je passe par dline() et dpixel() donc je pense que c'est OK, mais j'ai pas checké. Mais je te laisse gérer, tu es le boss :) We keep in touch ...
Owner

Ah ben oui, c'est fait. J'ai ajouté deux fonctions dcircle() et dellipse() dans 18a7b9ae5b.

J'aimerais à terme proposer les primitives simples disponibles dans SDL_gfx (le but n'étant pas de proposer une librairie qui fait tout, mais d'avoir qq fonctions de base pour faire des rendus simples).

Ouais j'ai un peu longtemps dit que c'était pas le rôle de gint parce qu'il y avait pas de moyen facile d'avoir toutes les fonctionnalités qui vont bien... mais en fin de compte j'ai l'impression de bloquer un truc qui pourrait être parfois utile. Donc go. Je vois pas d'inconvénient à le mettre dans <gint/display.h> (comme je l'ai fait là), autant ne pas créer un header en plus.

Je vais pousser ça à côté. J'espère que m'en veux pas si je merge pas directement ta PR, comme il y a de tout (et des bouts comme primitives.{c,h} que je vais pas récupérer) c'est plus simple comme ça.

Ah ben oui, c'est fait. J'ai ajouté deux fonctions `dcircle()` et `dellipse()` dans https://gitea.planet-casio.com/Lephenixnoir/gint/commit/18a7b9ae5bac130d200f2f63aa7bdd59e2b4713a. > J'aimerais à terme proposer les primitives simples disponibles dans SDL_gfx (le but n'étant pas de proposer une librairie qui fait tout, mais d'avoir qq fonctions de base pour faire des rendus simples). Ouais j'ai un peu longtemps dit que c'était pas le rôle de gint parce qu'il y avait pas de moyen facile d'avoir toutes les fonctionnalités qui vont bien... mais en fin de compte j'ai l'impression de bloquer un truc qui pourrait être parfois utile. Donc go. Je vois pas d'inconvénient à le mettre dans `<gint/display.h>` (comme je l'ai fait là), autant ne pas créer un header en plus. Je vais pousser ça à côté. J'espère que m'en veux pas si je merge pas directement ta PR, comme il y a de tout (et des bouts comme `primitives.{c,h}` que je vais pas récupérer) c'est plus simple comme ça.
Author
First-time contributor

Yep, j'ai vu et ça me convient parfaitement cette manière de procéder.

Yep, j'ai vu et ça me convient parfaitement cette manière de procéder.
Owner

Ok, c3dc438b82 ajoute dcircle() et dellipse().

Au passage j'ai deux commits en plus :

  • 8823d1f473 : Ajout de keypressed(), keyreleased() et cleareventflips()
  • cccc2787b5 : Le fix des imports relatifs que j'avais déjà posté sur le forum mais pas encore poussé

Les polices 4x4, 4x6 et 5x7 n'ont de sens que sur la Graph mono. @Slyvtt As-tu le temps de voir si tu peux récupérer/reconstruire une image des autres polices du casioplot officiel? La plage ASCII devrait suffire dans un premier temps.

Ok, https://gitea.planet-casio.com/Lephenixnoir/PythonExtra/commit/c3dc438b82d4e61633860043fe0d7003a162daa4 ajoute `dcircle()` et `dellipse()`. Au passage j'ai deux commits en plus : - https://gitea.planet-casio.com/Lephenixnoir/PythonExtra/commit/8823d1f4737e80c3594a6e0757e523e9b98c45e6 : Ajout de `keypressed()`, `keyreleased()` et `cleareventflips()` - https://gitea.planet-casio.com/Lephenixnoir/PythonExtra/commit/cccc2787b51d81552f63e7ba6874c91f7f850d01 : Le fix des imports relatifs que j'avais déjà posté sur le forum mais pas encore poussé Les polices 4x4, 4x6 et 5x7 n'ont de sens que sur la Graph mono. @Slyvtt As-tu le temps de voir si tu peux récupérer/reconstruire une image des autres polices du casioplot officiel? La plage ASCII devrait suffire dans un premier temps.
Owner

Concernant turtle et matplotlib, je préférerais ne pas avoir deux versions séparées. On devrait supporter tout ce qui est nécessaire pour que le module marche tel quel puisque ça fait partie de la compatibilité avec l'appli Python officielle.

La fonction round() est un builtin, tu n'as pas besoin de l'importer - le module builtins est préchargé comme si le programme commençait par from builtins import *. Le problème que tu avais c'est que la version de round() qui était fournie ne permettait pas d'arrondir à un nombre variable de chiffres significatifs. J'ai activé cette fonctionnalité dans 5e2b33b148.

Avec ça les modules originaux de l'annonce sur Planète Casio chargent tels quels, sauf matplotlib sur 35+E II comme tu l'as vu.

Si une implémentation interne (comme le Python officiel) est envisagée un jour, on gagnera en mémoire / vitesse à le faire en C.

Concernant turtle et matplotlib, je préférerais ne pas avoir deux versions séparées. On devrait supporter tout ce qui est nécessaire pour que le module marche tel quel puisque ça fait partie de la compatibilité avec l'appli Python officielle. La fonction `round()` est un builtin, tu n'as pas besoin de l'importer - le module `builtins` est préchargé comme si le programme commençait par `from builtins import *`. Le problème que tu avais c'est que la version de `round()` qui était fournie ne permettait pas d'arrondir à un nombre variable de chiffres significatifs. J'ai activé cette fonctionnalité dans https://gitea.planet-casio.com/Lephenixnoir/PythonExtra/commit/5e2b33b148993976dca581eeb66c157ff97739d5. Avec ça les modules originaux de [l'annonce sur Planète Casio](https://www.planet-casio.com/Fr/forums/topic16243-3-rendu-graphique-en-python-partie-1-decouverte-de-matplotlib-et-turtle.html) chargent tels quels, sauf matplotlib sur 35+E II comme tu l'as vu. Si une implémentation interne (comme le Python officiel) est envisagée un jour, on gagnera en mémoire / vitesse à le faire en C.
Author
First-time contributor

Voici pour répondre à ta demande. 3 Fonts officielles de Casioplot :

  • Large : grille de 18x24 pixels, fichier Large.png
  • Medium : grille de 12x17 pixels, fichier Medium.png
  • Small : grille de 9x10 pixels, fichier Small.png

J'ai fait rapidos le fichier fxconv-metadata.txt, mais il faudra peut être vérifier les valeurs de padding que j'ai laissé à 1, mais j'ai un doute et j'ai pas pu essayer.

Cela correspond pour les 3 fontes au charset print, du chr(32) au chr(127) donc.

Voici pour répondre à ta demande. 3 Fonts officielles de Casioplot : - Large : grille de 18x24 pixels, fichier Large.png - Medium : grille de 12x17 pixels, fichier Medium.png - Small : grille de 9x10 pixels, fichier Small.png J'ai fait rapidos le fichier `fxconv-metadata.txt`, mais il faudra peut être vérifier les valeurs de `padding` que j'ai laissé à 1, mais j'ai un doute et j'ai pas pu essayer. Cela correspond pour les 3 fontes au charset `print`, du chr(32) au chr(127) donc.
7.9 KiB
Owner

Je viens de merger avec upstream (1.12.0 + des brouettes), ce qui inclut notamment la correction du bug de non-fermeture des fichiers en cas d'erreur. Je t'invite à re-tester mais ça devrait être bon.

Je viens de merger avec upstream (1.12.0 + des brouettes), ce qui inclut notamment la correction du bug de non-fermeture des fichiers en cas d'erreur. Je t'invite à re-tester mais ça devrait être bon.
Author
First-time contributor

Désolé hie j'ai eu un méga souci sur mon portable, ça m'a coûté un backup complet et une full réinstall. J'ai testé les fontes ce matin et ai remarqué des soucis. Voici donc la version corrigée (et testée) des fontes Casioplot (dans fichier Fonts Casioplot.tar.gz avec le fichier fxconv-metadata.txt correctement calé). J'en profite aussi pour te passer un mini addin de test qui montre le résultat dans fontAddin.tar.gz. Je testerai ce que tu as push avec la MaJ majeure de micropython durant le weekend normalement.

Désolé hie j'ai eu un méga souci sur mon portable, ça m'a coûté un backup complet et une full réinstall. J'ai testé les fontes ce matin et ai remarqué des soucis. Voici donc la version corrigée (et testée) des fontes Casioplot (dans fichier `Fonts Casioplot.tar.gz` avec le fichier `fxconv-metadata.txt` correctement calé). J'en profite aussi pour te passer un mini addin de test qui montre le résultat dans `fontAddin.tar.gz`. Je testerai ce que tu as push avec la MaJ majeure de micropython durant le weekend normalement.
Owner

Merci. Résumé de ce qu'il reste de cette issue/PR après 0.2.0-beta:

  • Moteur de gris (Ptitjoz #194757) : Rien de poussé ici, j'ai fait la base, mais manque de RAM, ça bloque le lancement de PythonExtra (pas de crash, mais juste la ligne "PythonExtra" s'affiche à l'écran, rien de plus, la seule action possible est de quitter l'addin).
  • Bug sur l'émulateur (Ptitjoz #194519) : J'ai pas remarqué sur ma machine, je poursuis les investigations.
  • Fonction de dessin d'image (Ena0 #194556, Tuper4 #194749) : pas regardé.
Merci. Résumé de ce qu'il reste de cette issue/PR après 0.2.0-beta: > - Moteur de gris (Ptitjoz #194757) : Rien de poussé ici, j'ai fait la base, mais manque de RAM, ça bloque le lancement de PythonExtra (pas de crash, mais juste la ligne "PythonExtra" s'affiche à l'écran, rien de plus, la seule action possible est de quitter l'addin). > - Bug sur l'émulateur (Ptitjoz #194519) : J'ai pas remarqué sur ma machine, je poursuis les investigations. > - Fonction de dessin d'image (Ena0 #194556, Tuper4 #194749) : pas regardé.
Slyvtt added 1 commit 2024-01-07 20:48:37 +01:00
Author
First-time contributor

Salut,

Pour le moteur de gris, je regarderai si le up de version plus les modifs apportées permettent de passer. Je pense que l'ajout des VRAM nécessaires au moteur rendent les ressources disponibles trop limites. Mais je vais checker.

Pour le bug de l'émulateur, perso j'arrive pas à reproduire, j'ai demandé des infos à Ptitjoz.

Pour dimage(), il me semble compliqué de repartir des fonctions actuelles d'imports de fichiers (via fxconv). Par contre je me demande si passer par une lib du style stb_image ne serait pas le bon truc. On pourrait ainsi charger une image_t en RAM directement via un fichier (avec la moulinette de conversion adhoc) et ensuite faire un dimage() de cette image via les fonctions de gint.

Y'aurait potentiellement la libPNGpour le faire direct sinon.

Salut, Pour le moteur de gris, je regarderai si le up de version plus les modifs apportées permettent de passer. Je pense que l'ajout des VRAM nécessaires au moteur rendent les ressources disponibles trop limites. Mais je vais checker. Pour le bug de l'émulateur, perso j'arrive pas à reproduire, j'ai demandé des infos à Ptitjoz. Pour `dimage()`, il me semble compliqué de repartir des fonctions actuelles d'imports de fichiers (via `fxconv`). Par contre je me demande si passer par une lib du style [stb_image](https://github.com/nothings/stb) ne serait pas le bon truc. On pourrait ainsi charger une `image_t` en RAM directement via un fichier (avec la moulinette de conversion adhoc) et ensuite faire un `dimage()` de cette image via les fonctions de `gint`. Y'aurait potentiellement la `libPNG`pour le faire direct sinon.
Author
First-time contributor

Cette PR peut être fermée, les éléments restants ont été repris dans les différents tickets individuels mis en place.

Cette PR peut être fermée, les éléments restants ont été repris dans les différents tickets individuels mis en place.
Slyvtt closed this pull request 2024-01-18 21:25:40 +01:00

Pull request closed

Sign in to join this conversation.
No reviewers
No Label
No Milestone
No project
No Assignees
2 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: Lephenixnoir/PythonExtra#2
No description provided.