Aller au contenu

Console Lua

La console Lua de MindDev permet de créer des procédures de création et outils de modification des protocoles ouverts dans MindDev. Cette console permet d'étendre les fonctionnalités de productivité en créant des scripts Lua pouvant avoir des comportements très complexes et précis.

Image title 2

La console Lua de MindDev.

Console Lua

La console Lua permet d'exécuter des opérations complexes personnalisées.

Obtention des commandes de console

Une modification dans l'interface graphique provoque une écriture de la commande correspondante dans la fenêtre de la console LUA. C'est très utile lorsque l'on veut programmer son script LUA sans connaitre toutes les propriétés des objets.

Commandes de base

Voici la liste des commandes de base. Cette liste est non exhaustive et d'autres commandes sont disponibles.

Commande Exemple Description
Commands Commands() Affiche l'ensemble des commandes de base disponibles
Commands Commands("Tools") Affiche l'ensemble des commandes disponibles pour le jeu d'outil passé en paramètre
Print Print(Protocol.MaxTime) Affiche la valeur du paramètre
Get Get(Protocol.Children[0]) Retourne l'objet passé en paramètre
Create Create("TimerSuccess") Crée un objet du type passé en paramètre et le retourne
CreateNode CreateNode("TimerSuccess") Crée un objet du type passé en paramètre et le retourne (alias de Create)
Delete Delete(Selection) Supprime, si possible, l'objet passé en paramètre
DeleteNode DeleteNode(Selection) Supprime, si possible, l'objet passé en paramètre (alias de Delete)
Children Children(Selection) Affiche la liste des enfants de l'objet passé en paramètre
AddNode AddNode(Selection, enfant) Ajoute le second paramètre aux enfants du premier
Properties Properties(Protocol) Affiche les propriétés disponibles de l'objet passé en paramètre
Methods Methods(Protocol) Affiche les fonctions disponibles de l'objet passé en paramètre

Affichage de l'ensemble des commandes Lua

Les commandes spécifiques à MindDev commencent par une majuscule, tandis que les commandes de base de Lua commencent par des minuscules.

Print vs. print

La commande Print spécifique à MindDev permet l'écriture dans la console, par contre, la commande Lua de base print n'écrira rien.

Accès aux objets

L'accès aux objets se fait simplement à l'aide de quelques mots-clés :

Mot-clé Description
Protocol Donne accès au protocole en cours de conception
Selection Donne accès au nœud sélectionné
Trial Donne accès au nœud essai parent du nœud sélectionné (si disponible)
Experiment Donne accès au nœud expérimentation parent du nœud sélectionné (si disponible)
Nodes["nom_objet"] Donne accès à l'objet par son nom.

Accession de l'objet par son nom dans la console LUA

L'accession à un objet peut poser problème dans le cas ou plusieurs objets ont le même nom. Dans ce cas, il vaut mieux s'y référer via son chemin hierarchique

Un ensemble de commandes d'accès permet la navigation dans l'arbre de protocole :

Appel Exemple Description
GetChildByName Protocol.GetChildByName("Experiments") Retourne l'objet enfant par son nom
GetChild Selection.GetChild(0) Retourne l'objet enfant par son indice dans la liste des enfants
Parent Selection.Parent Retourne l'objet parent

Accès au logiciel

La commande Software donne accès à l'interface du logiciel.

Commandes Software

La commande Methods(Software) retourne l'ensemble des commandes du logiciel disponibles

Voici une liste de commandes logicielles importantes :

Commande Description
Software.CreateProtocol() Crée un nouveau protocole
Software.CreateVRProtocol() Crée un nouveau protocole VR
Software.GetCurrentProtocol() Obtient le protocole activé
Software.Help() Lance l'aide en ligne
Software.Undo() Annule
Software.Redo() Refait

Chargement de scripts au lancement du logiciel

Il est possible de précharger un ensemble de scripts au lancement du logiciel. Pour ce faire, il convient de placer ses fichiers Lua (extension .lua) dans le Scripts/Startup/ du dossier de données.

Chargement de scripts

Le chargement de script au démarrage ne permet pas l'exécution directe de commandes telles que Selection ou Protocol. Il sert principalement à la déclaration de fonctions qui peuvent contenir ces mots clés, mais qui seront appelées plus tard, dans un context donné.

Script Lua (Exemple)

Il est tout à fait possible de créer des scripts Lua pour effectuer des opérations non prévues dans les fonctionnalités générales du logiciel.

La console dispose d'un bouton permettant de charger un script Lua. Le chargement évaluera le fichier.

Chargement dynamique de script Lua

L'interface dispose d'un bouton de chargement de fichierr avec l'extension .lua. Il permet de tester rapidement un script externe.

Script Lua

Il est possible de créer des fonctions spécifiques en Lua afin de pouvoir les réutiliser plus tard.

Ce script est compatible avec une utilisation en préchargement au lancement du logiciel.


function GenerateStroopExperiment(trialCount, ratio, createNew)    

    --On creer un nouveau protocol ou on utilise le protocol selectionné
    local pp=Protocol;  
    if createNew then
        Software.CreateProtocol()
        pp = Software.GetCurrentProtocol()
    end


    --On recherche la liste d'Experiment
    local expList = pp.GetChildByName("Experiments")

    --On la vide
    expList.ClearList()

    --On ajoute une nouvelle experimentation
    expList.AddNode("StroopColorMatchExperiment")

    --On récupère cette nouvelle experimentation
    local stroopExp = pp.GetChildByName("Experiments").GetChild(0)

    --On récupère les essais
    local trials = stroopExp.GetChildByName("Trials")

    --On vide la liste
    trials.ClearList()

    --On creer une boucle pour creer les essais
    for i=0, trialCount-1 do    

        --Ajout d'un essai
        trials.AddNode("StroopColorMatchTrial")     
        local current = trials.GetChild(i)

        --Renommage
        current.Name="Stroop Trial" .. i

        --Ajout d'une description
        current.Description = "Lua Generated"

        --Configuration de l'essai
        current.LeftWordIndex = math.random(0,3);
        current.RightWordIndex = math.random(0,3);

        --Affectation du color Match/NoMatch
        if(math.random()>ratio) then
            current.WaitedAnswerButtonName="MatchAnswer"
            current.Name="[MATCH] Stroop Trial" .. i            
            current.GetChildByName("Custom Attributes").GetChild(0).Value = 1           
        else 
            current.WaitedAnswerButtonName="NoMatchAnswer"  
            current.Name="[NOMATCH] Stroop Trial" .. i              
            current.GetChildByName("Custom Attributes").GetChild(0).Value = 0
        end
    end
end

--Affichage d'une aide d'usage
Print("Usage : GenerateStroopExperiment(TrialCount, Ratio, createNewProtocol)")
Print("Example : GenerateStroopExperiment(20, 0.5, true)")