Pour résumer, voici ce qui se passe entre VISION et un LDV :
0. Init (fait une seule fois au premier appel de l'utilisateur mettant en oeuvre les LDV). VISION charge la fonction GetLDVCapabilities de chaque LDV, appelle la fonction et mémorise les capacités de chaque LDV afin de limiter les futurs accès disque, puis décharge chaque LDV
1. VISION charge le LDV
2. Si spécifiée, VISION appelle la fonction GetParams
3. VISION appelle la fonction PreRun
4. VISION appelle la fonction Run (ou Preview)
5. VISION décharge le LDV
Prototype | LDV_INFOS * cdecl GetLDVCapabilities(VAPI *vapi) |
Paramètres | [IN] vapi : pointeur sur l'interface VAPI fournie par VISION. Ce pointeur doit être mémorisé pour un usage futur. |
Retour | Un pointeur sur la structure LDV_INFOS stockée dans le LDV (le squelette déclare la variable LdvInfos de type LDV_INFOS) |
Responsabilités | Cette fonction est entièrement ecrie dans le squelette, le travail à faire réside dans le remplissage de la structure de type LDV_INFOS du squelette LDV. |
Prototype | LDV_STATUS cdecl PreRun(LDV_IMAGE *in, LDV_PARAMS *params, LDV_IMAGE *out) |
Paramètres | [IN] in : pointeur sur
la structure LDV_IMAGE
décrivant l'image de VISION [IN / OUT] params : pointeur sur une structure LDV_PARAMS indiquant la zone à modifier |
Retour | Un code de succès ou d'erreur |
Responsabilités | Doit signaler à VISION
la mémoire à allouer et la partie à sauvegarder pour
la fonction UNDO :
Par défaut :
|
Prototype | LDV_STATUS cdecl Run(LDV_IMAGE *in, LDV_PARAMS *params, LDV_IMAGE *out) |
Paramètres | [IN] in : pointeur sur
la structure LDV_IMAGE
décrivant l'image source de VISION [IN] params : pointeur sur une structure LDV_PARAMS indiquant la zone à modifier [OUT] out : pointeur sur l'image destination, allouée par VISION grâce à un appel précédent à PreRun |
Retour | Un code de succès ou d'erreur |
Responsabilités / Remarques | Doit effectuer l'opération prévue pour
le LDV. VISION choisit automatiquement le format le plus adapté en essayant de minimiser la mémoire et en tenant compte du ou des formats gérés par le LDV (sachant que le plus économe est LDVF_SPECFORMAT) Le LDV peut modifier une autre zone que celle donnée dans les champs x1, y1, x2 et y2 de params à condition de l'avoir signalé auparavant par la fonction PreRun Ne JAMAIS allouer dans le LDV de la mémoire à destination de VISION, car celle-ci sera libérée dès que VISION déchargera le LDV (même si vous ne le faites pas explicitement, le compilateur ou le système s'en chargera).Par contre, rien ne vous interdit d'allouer de la mémoire à usage interne pour effectuer cette fonction, n'oubliez pas de la libérer ! Depuis la version 1.02 de VAPI, on peut maintenant annuler le traitement en cours depuis l'interface utilisateur (il suffit de fermer la fenêtre de progression ou d'appuyer sur Control-C), pour cela : * Ajouter LDVF_SUPPORTCANCEL dans le champ Flags de la structure LDV_CAPS présente dans la variable LdvInfos du LDV * Tester la valeur renvoyée par la fonction PrSetProgEx, si elle est non nulle, l'annulation est demandée * Sortir du traitement du LDV (ne pas oublier de libérer l'éventuelle mémoire allouée en interne) * Sortir de la fonction Run en renvoyant ELDV_CANCELLED Notes : Dès que la fonction PrSetProgEx a retourné une valeur non nulle, la fenêtre de progression est détruite, la demande d'annulation n'est donc pas seulement une demande mais une obligation ! Ne vous souciez pas de la libération de l'image destination ou de restaurer l'image source, VISION gère cela au travers du Undo. |
Prototype | LDV_STATUS cdecl Preview(LDV_IMAGE *in, LDV_PARAMS *params, LDV_IMAGE *out) |
Paramètres | Identiques à ceux de la fonction Run |
Retour | Un code de succès ou d'erreur |
Responsabilités / Remarques | Cette fonction est identique à la fonction Run, sauf qu'elle opère sur des images plus petites (112 x 112 en moyenne). Si la fonction Run est suffisamment rapide pour afficher le résultat en moins de 1 seconde, la fonction Preview devrait simplement l'appeler. Dans le cas contraire, on peut se permettre certaines approximations ou pré-calculs pour revenir en deça de la seconde. |
Prototype | LDV_STATUS cdecl GetParams(LDV_IMAGE *img, LDV_PARAMS *params, char *path) |
Paramètres | [IN] img : pointeur sur
la structure LDV_IMAGE
décrivant l'image source de VISION [IN] params : pointeur sur une structure LDV_PARAMS indiquant la zone à modifier [IN] path: chemin de chargement du LDV |
Retour | ELDV_NOERROR ou ELDV_CANCELLED |
Responsabilités / Remarques | Cette fonction est optionnelle.
Si votre LDV l'exporte, VISION
l'appellera en lieu et place de sa fonction interne de
saisie des paramètres. Si ELDV_NOERROR est renvoyé, VISION appellera ensuite la fonction Run Si ELDV_CANCELLED est renvoyé, la saisie est annulée (comme si vous aviez annulé la saisie au travers du formulaire standard proposé par VISION). Le paramètre params devient transparent pour VISION, il sera renvoyé sans changement lors de l'appel à la fonction Run. Votre LDV peut s'en servir pour stocker ses paramètres ou peut choisir de les mémoriser en interne. path permet de récupérer le fichier INI associé pour la description multi-langue des paramètres. Vous pouvez au choix utiliser un fichier INI (ou tout autre, c'est maintenant vous qui êtes maître). Si vous voulez gérer la description multi-langues, n'oubliez pas de scruter les répertoires de langues à partir de path. |
Le fichier INI associé à un LDV a deux buts:
3.6.1 Informations sur la langue
Les LDV sont multi-langues, c'est à dire que si vous avez défini une langue dans les préférences, VISION est capable d'exploiter cette information également pour les LDV, si l'information est disponible. Dans le répertoire LDV de VISION, on trouve les .LDV ainsi que les .INI associés. Par exemple, le fichier INVERT.INI est associé au fichier INVERT.LDV.Dans ce dossier LDV, doivent figurer les .INI les plus standards, c'est à dire en langue anglaise. Si par exemple, vous avez défini la langue "Français" dans les préférences de VISION, il suffit de créer le sous-répertoire "Français" dans le dossier LDV, et d'y inclure le fichier INVERT.INI traduit en français pour que VISION aille le chercher à la place de son équivalent directement sous le répertoire LDV.
Dans la section [Informations], VISION attend les clés suivantes:
Nom de la clé | Taille | Description |
ShortName | 15 caractères max. | Nom court du module apparaissant dans la liste des modules à sélectionner |
LongName | 31 caractères max. | Nom apparaissant lorsque on demande des détails sur ce LDV |
Description | 79 caractères max. | Description complète du module sur 3 lignes |
VISION permet la
saisie de jusqu'à 4 paramètres pour un LDV. Ces paramètres
sont saisis à l'aide d'ascenseurs GEM apparaissant ou non
suivant le nombre de paramètres que le LDV accepte en entrée.
Pour que VISION accepte d'afficher un
paramètre,une section nommée [ParameterN] (1 <= N <= 4)
doit être créee avec les clés suivantes:
Nom de la clé | Description |
Name | Nom de ce paramètre (15 caractères max.). Si le nom est absent, ce paramètre n'apparaitra pas |
Type | 1 : entier 16 bits (-32768 --> +32767) 2 : float (non géré actuellement) |
MinValue | Valeur minimale admissible pour ce paramètre |
DefautValue | Valeur par défaut présenté avec l'interface de VISION |
MaxValue | Valeur maximale admissible pour ce paramètre |
Si cela ne peut convenir au LDV que vous développez, vous pouvez spécifier une fonction de saisie spécifique avec la fonction GetParams.