Logiciel libre de géométrie, d'analyse et de simulation multiplateforme par Yves Biton

Accueil Tutoriels Export html et LateX

Utiliser MathGraph32 en ligne et interagir avec la figure : Notions de base

modification jeudi 15 août 2023.


La façon la plus simple de mettre une figure MathGraph32 en ligne est d’utiliser des balises HTML : voir cet article

Mais les utilisateurs les plus avertis en JavaScript peuvent vouloir utiliser MathGraph32 dans leur propre application en ligne.

Nous allons expliquer dans ce premier article comment appeler le loader de MathGraph32 de façon à pouvoir interagir avec la figure.

Voici ci-dessous le code HTML d’une page lançant une figure MathGraph32 :

<!DOCTYPE html>
<html>
<head>
   <meta http-equiv="X-UA-Compatible" content="IE=9">
   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
   <meta name="generator" content="MathGraph32" /> <title>Feuille de travail dynamique MathGraph32</title>
        <style type="text/css">
       #errors {color: red;}
       svg {
           -webkit-user-select: none; /* Chrome all / Safari all */
           -moz-user-select: none; /* Firefox all */
           -ms-user-select: none; /* IE 10+ */
           -webkit-tap-highlight-color: transparent; /*Nécessaire sur ipad pour ne pas avoir de rectangle gris sélectionné lors des touch events */
       }
   </style>

</head>
<body>
<div id = "mtg32div">
</div>
<script type="text/javascript" src="https://www.mathgraph32.org/js/mtgLoad/mtgLoad.min.js"></script>
<script type="application/javascript">
 (function autostart() {
   var svgOptions = {
     idSvg: "mtg32svg", width : "900", height : "500"
   }

   var mtgOptions = {
     fig: "TWF0aEdyYXBoSmF2YTEuMAAAABM+TMzNAAJmcv###wEA#wEAAAAAAAAAAAUeAAACygAAAQEAAAAAAAAAAQAAAAb#####AAAAAQAKQ0NhbGNDb25zdAD#####AAJwaQAWMy4xNDE1OTI2NTM1ODk3OTMyMzg0Nv####8AAAABAApDQ29uc3RhbnRlQAkh+1RELRj#####AAAAAQAKQ1BvaW50QmFzZQD#####AAAAAAAQAAFPAAAAAAAAAAAAQAgAAAAAAAAAAAUAAUBtYAAAAAAAQG464UeuFHsAAAACAP####8AAAAAABAAAAAAAAAAAAAAAEAIAAAAAAAAAAAFAAFAdHAAAAAAAEBh+uFHrhR7#####wAAAAEACUNDZXJjbGVPQQD#####AAAAAAAAAAEAAAABAAAAAv####8AAAABAA5DU3VyZmFjZURpc3F1ZQD#####AAAA#wAAAAAABQAAAAMAAAACAP####8AAAD#ABAAAUEAAAAAAAAAAABACAAAAAAAAAAABQABQIHYAAAAAABAcA1wo9cKPv###############w==",
     isEditable: false
   }

   mtgLoad("mtg32div", svgOptions, mtgOptions).then(
     (mtgApp) => {
       console.log("mtg32 App loaded", mtgApp)
        /*
          Ecrire ici éventuellement des lignes de code pour interagir avec la figure MathGraph32
         L'application est passée en paramètre, ici nommé mtgApp et on peut ensuite utiliser cette application pour interagir avec la figure
        */
     }
   ).catch(
     // La ligne suivante sert à traiter une erreur éventuelle lors du lancement de MathGraph32
     (error) => {if (error) console.error(error)}
   )
 })()
</script>
</body>
</html>

Pour pouvoir utiliser MathGraph32 en ligne la présence de la ligne suivante est indispensable :

<script type="text/javascript" src="https://www.mathgraph32.org/js/mtgLoad/mtgLoad.min.js"></script>

Le chargement de l’application MathGraph32 se fait grâce à l’appel de la fonction mtgLoad("mtg32div", svgOptions, mtgOptions) qui renvoie une promesse qui, quand elle est résolue, lance la fonction suivante de la variable mtgApp : (mtgApp) => {}.
C’est dans cette fonction que vous devez utiliser l’application mtgApp pour interagir avec la figure.

Suivant la valeur du paramètre isEditable (booléen) l’application mtgApp fournie sera soit un player MathGraph32 (la figure est affichée, on peut interagir avec elle, bouger des points mobiles) soit un éditeur MathGraph32 (la figure est affichée dans une fenêtre contenant les outils du logiciel, on peut modifier la figure).

Examinons les trois paramètres passés à la fonction mtgLoad :

Voici ci-dessous ce que donne ce premier affichage de figure MathGraph32 :

Reprenons le même code que ci-dessus mais cette fois en modifiant la paramètre mtgOptions avec isEditable à true.

Voici ci-dessous ce qu’on obtient (il a fallu ici créer un autre div pour contenir cett application MathGraph32 puisqu’elle est dans la même page que la figure ci-dessus :

Les utilisateurs avertis remarqueront que, pour la deuxième figure, toutes les icônes de la barre d’outils horizontale ne sont pas visibles.

Nous avons la possibilité de rajouter un paramètre supplémentaire à l’objet mtgOptions, paramètre nommé zoomFactor. Il sera utilisé pour réduire la taille des icônes du logiciel s’il est compris entre 0 et 1 et les agrandir s’il est supérieur à 1.

Voici ce que donne alors la figure ci-dessus en remplaçant les lignes définissant le paramètre mtgOptions par les lignes suivantes :

   var mtgOptions = {
     fig: "TWF0aEdyYXBoSmF2YTEuMAAAABM+TMzNAAJmcv###wEA#wEAAAAAAAAAAAUeAAACygAAAQEAAAAAAAAAAQAAAAb#####AAAAAQAKQ0NhbGNDb25zdAD#####AAJwaQAWMy4xNDE1OTI2NTM1ODk3OTMyMzg0Nv####8AAAABAApDQ29uc3RhbnRlQAkh+1RELRj#####AAAAAQAKQ1BvaW50QmFzZQD#####AAAAAAAQAAFPAAAAAAAAAAAAQAgAAAAAAAAAAAUAAUBtYAAAAAAAQG464UeuFHsAAAACAP####8AAAAAABAAAAAAAAAAAAAAAEAIAAAAAAAAAAAFAAFAdHAAAAAAAEBh+uFHrhR7#####wAAAAEACUNDZXJjbGVPQQD#####AAAAAAAAAAEAAAABAAAAAv####8AAAABAA5DU3VyZmFjZURpc3F1ZQD#####AAAA#wAAAAAABQAAAAMAAAACAP####8AAAD#ABAAAUEAAAAAAAAAAABACAAAAAAAAAAABQABQIHYAAAAAABAcA1wo9cKPv###############w==",
     isEditable: true,
     zoomFactor: 0.95
   }

En diminuant nos icônes de 5% (zoomFactor à 0,95) nous avons maintenant toutes nos icônes visibles.

Pour la version éditeur de l’application, la seule icône qui puisse avoir un fonctionnement personnalisable est l’icône d’enregistrement.

Vous pouvez affecter à cette icône une fonction qui sera exécutée quand on cliquera dessus.

Cela se fait via l’objet mtgOptions qui possède deux options à cet effet :

Voici ci-dessous le code d’une page HTML qui va permettre d’éditer une figure et qui, si on clique sur l’icône d’enregistrement, affichera le code Base64 de la figure au moment où on a cliqué sur ce bouton.

<!DOCTYPE html>
<html>
<head>
   <meta http-equiv="X-UA-Compatible" content="IE=9">
   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
   <meta name="generator" content="MathGraph32" /> <title>Feuille de travail dynamique MathGraph32</title>
        <style type="text/css">
       #errors {color: red;}
       svg {
           -webkit-user-select: none; /* Chrome all / Safari all */
           -moz-user-select: none; /* Firefox all */
           -ms-user-select: none; /* IE 10+ */
           -webkit-tap-highlight-color: transparent; /*Nécessaire sur ipad pour ne pas avoir de rectangle gris sélectionné lors des touch events */
       }
   </style>

</head>
<body>
<div id = "mtg32div">
</div>
<script type="text/javascript" src="https://www.mathgraph32.org/js/mtgLoad/mtgLoad.min.js"></script>
<script type="application/javascript">
 (function autostart() {
   let app
   const svgOptions = {
     idSvg: "mtg32svg", width : "900", height : "500"
   }

   const mtgOptions = {
     fig: "TWF0aEdyYXBoSmF2YTEuMAAAABM+TMzNAAJmcv###wEA#wEAAAAAAAAAAAUeAAACygAAAQEAAAAAAAAAAQAAAAb#####AAAAAQAKQ0NhbGNDb25zdAD#####AAJwaQAWMy4xNDE1OTI2NTM1ODk3OTMyMzg0Nv####8AAAABAApDQ29uc3RhbnRlQAkh+1RELRj#####AAAAAQAKQ1BvaW50QmFzZQD#####AAAAAAAQAAFPAAAAAAAAAAAAQAgAAAAAAAAAAAUAAUBtYAAAAAAAQG464UeuFHsAAAACAP####8AAAAAABAAAAAAAAAAAAAAAEAIAAAAAAAAAAAFAAFAdHAAAAAAAEBh+uFHrhR7#####wAAAAEACUNDZXJjbGVPQQD#####AAAAAAAAAAEAAAABAAAAAv####8AAAABAA5DU3VyZmFjZURpc3F1ZQD#####AAAA#wAAAAAABQAAAAMAAAACAP####8AAAD#ABAAAUEAAAAAAAAAAABACAAAAAAAAAAABQABQIHYAAAAAABAcA1wo9cKPv###############w==",
         isEditable: true,
          zoomFactor: 0.95,
          avertOnSave: false,
          functionOnSave: () => {
            alert(app.getBase64Code())
          }
   }

   mtgLoad("mtg32div", svgOptions, mtgOptions).then(
     (mtgApp) => {
       console.log("mtg32 App loaded", mtgApp)
                app = mtgApp
     }
   ).catch(
     (error) => {if (error) console.error(error)}
   )
 })()
</script>
</body>
</html>

Un comportement analogue a été prévu dans la figure ci-dessus.

Vous remarquerez que si mtgApp est une application MathGraph32 (lecteur ou éditeur), la fonction getBase64Code() renvoie le code Base64 de la figure.

Voici ci-dessous les paramètres disponibles pour l’objet svgOptions passé en deuxième paramètre de la fonction mtgLoad :

Nom du paramètre Type Valeur par défaut Description
width nombre entier 900 Largeur du svg qui contiendra la figure (cas du player) ou l’application (cas de l’éditeur)
height nombre entier 650 Hauteur du svg qui contiendra la figure (cas du player) ou l’application (cas de l’éditeur)
idSvg string ’’ id du svg qui sera créé dans l’id fourni comme conteneur

Voici ci-dessous les paramètres disponibles pour l’objet mtgOptions passé en troisième paramètre de la fonction mtgLoad :

Nom du paramètre Type Valeur par défaut Description
fig string ou objet ’’ Dans le cas d’une string, code Base64 valide de la figure à afficher. Le cas objet est expliqué au-dessous de ce tableau et ne s’applique que pour l’éditeur
Cas d’une string : doit contenir un code Base64 valide d’une figure MathGraph32
Cas d’un objet : cet objet peut contenir les propriétés suivantes
isEditable booléen true Passer true pour lancer l’application complète MathGraph32, false pour l’afficher seulement sans possibilité d’édition (lecteur MathGrapj32)
zoomFactor nombre 1 Facteur d’agrandissement ou de réduction des icones (éditeur seulement)
level entier 3 Niveau de fonctionnement du logiciel (version éditeur seulement) : 0 pour élémentaire, 1 pour niveau collège, 2 pour niveau avancé sans nombres complexes, 3 pour niveau avancé avec nombres complexes
displayOnLoad booléen true lecteur seulement : passer false si on ne veut pas que la figure soit affichée dès qu’elle est prête
displayMeasures booléen true Editeur seulement : passer false si vous ne voulez pas que lors d’une mesure le résultat de la mesure soit affiché dans la figure automatiquement
isInteractive booléen true lecteur seulement : Passer false pour ne pas permettre de bouger les points mobiles (lecteur only)
loadApi booléen false Passer true pour donner la possibilité d’utiliser l’API de MathGraph32 (possibilité d’ajouter des objets sur la figure et d’affecter des écouteurs d’événements sur des objets)
loadCoreOnly booléen false Ne charge que les fonctions de base du lecteur MathGraph32 sans possibilité d’afficher une figure (pour par exemple n’utiliser que des fonctions de MathGraph32 liées au calcul)
loadCoreWithMathJax booléen false Ne charge que les fonctions de base du lecteur MathGraph32 sans possibilité d’afficher une figure mais avec chargement de MathJax (pour par exemple n’utiliser que des fonctions de MathGraph32 liées au calcul ou utiliser le contenu d’affichages LaTeX mais sans les afficher)
pointsAuto booléen false Editeur seulement : passer true pour créer automatiquement un point quand on clique sur un endroit vide (avec certains outils)
randomOnInit booléen false lecteur seulement : passer true pour lancer l’aléatoire à l’initialisation de la figure
stylePointCroix booléen false Editeur seulement : Passer true pour que le style de point au démarrage soit la grande croix
codeBase64 booléen true Passer false pour retirer l’outil permettant d’obtenir le code Base64 de la figure
open booléen true Passer false pour retirer l’outil permettant d’ouvrir une figure
save booléen true Passer false pour retirer l’outil permettant de sauvegarder une figure
newFig booléen true Passer false pour retirer l’outil permettant de créer une nouvelle figure
options booléen true Passer false pour retirer l’outil permettant de changer les options de la figure (ajouter ou retirer des outils par exemple)
onlyPoints booléen false Passer true pour que les outils de transformation ne s’appliquent qu’à des points
dys booléen false Passer true pour démarrer l’interface avec un affichage adapté aux utilisateurs "dys" (traits épais, points en grande croix, taille des noms plus grande)
functionOnSave fonction null callBack appelée au clic sur le bouton d’enregistrement
avertOnSave booléen true si functionOnSave est présent et si avertOnSave est false, il n’y aura pas de message d’avertissement quand on clique sur le bouton d’enregistrement (true par défaut)
callBackAfterReady fonction null callBack appelée lorsque la figure est chargée et affichée, les méthodes de MtgApp peuvent alors être utilisées (inutile pour player et coreOnly)
bplayer booléen false Passer true pour ajouter une propriété player (de type MtgAppLecteur) à l’objet MtgApp retourné (utile pour les exercices de construction)
language string ’’ Passer fr ou en ou es pour forcer la langue (sinon détection automatique d’après les headers envoyés par le navigateur)
electron booléen false Editeur only : passer true si destiné à fonctionner avec la version electron
construction booléen false Si on édite un exercice de construction il faut que ce paramètre soit true (ex param edition)
loadApi booléen false true si on veut pouvoir ajouter des éléments à la figure par programmation ou interagir avec la figure en associant des écouteurs d’événements sur des objets de la figure.

Compléments pour le paramètre fig dans le cas éditeur :

Dans le cas éditeur, la paramètre fig peut être une string (code Base64 d’une figure valide) ou un objet.

Dans le cas d’un objet, celui-ci est défini par trois propriétés du type string :

Pour en faire plus, il nous reste maintenant à apprendre comment interagir avec les figures ou lui rajouter des objets par programmation JavaScript.

Pour cela il faut utiliser l’api de MathGraph32 en mettant la propriété addApi du paramètre mtgOptions à true.

Nous allons expliquer cela dans les articles suivants.

Une remarque : si vous ne souhaitez pas utiliser l’api de MathGrap32, ne mettez pas le paramètre addApi à true car cela fait grossir inutilement le code JavaScript de l’application.