Utilisation des fonctions Visual LISP avec les méthodes ActiveX

Visual LISP contient un ensemble étendu de fonctions afin de fournir l'accès aux objets ActiveX. Les noms des fonctions sont précédés de vla- ; par exemple, vla-addCircle, vla-get-ModelSpace, vla-getColor. Chaque fonction vla- correspond à une méthode ou propriété ActiveX.


Visual LISP contient aussi des fonctions ActiveX qui commence par vlax-. Ce sont des fonctions spéciales ActiveX qui ont été conçu spécifiquement pour être utilisées avecVisual LISP.


Il y a des fonctions vla- pour toutes les méthodes et propriétés décrites dans l'Automation ActiveX Reference. Si votre dessin contient des objets ActiveX, vous pouvez utiliser les fonctions vlax-invoke, vlax-get, et vlax-put pour accéder a leurs méthodes et propriétés.


Trouver la fonction nécessaire

Les fontions Visual LISP ActiveX fournissent vraiment l'accès aux méthodes ActiveX. Par exemple, regardez cette expression AutoLISP, qui ajoute un cercle au dessin :


_$(setq Ccercle      (vla-addCircle Espace_Obj (vlax-3d-Point 10.0 10.0 0.0) 2.5))
#<VLA-OBJECT IAcadCircle 03ad067c>

La méthode appelée pour dessiner le cercle est vla-AddCircle.
Si vous ne connaissiez pas la fonction a utiliser pour ajouter un cercle à un dessin AutoCAD, vous pouviez arriver à comprendre en regardant dans ActiveX and VBA Reference d'AutoCAD. Chercher la défénition d'un objet cercle dans la liste des objets (Circle object).


Voici à quoi ressemble le résultat pour un cercle :



Quelquefois, comme dans le cas du Cercle, il y a un texte descriptif qui identifie la méthode dont vous avez besoin . Souvent, pourtant, vous aurez besoin de regarder dans la liste des Méthodes pour trouver celle qui correspond à l'action que vous désirez effectuer.


Une fois le nom de la méthode trouvée, ajoutez un prefixe vla- au nom de la méthode pour obtenir le nom de la fonction Visual LISP qui execute la méthode. Dans cet exemple, la fonction est vla-ajouter-cercle. Remarquez que, dans Visual LISP, le nom de la fonction n'est pas sensible (Maj/Min) : vla-addcircle est la même fonction que vla-AddCircle.


Comment l'appeler

Après avoir identifié la fonction Visual LISP dont vous avez besoin, il vous reste encore à déterminer comment l'appeler. Actuellement, il n'y a pas de référence disponible définissant la syntaxe AutoLISP pour chaque appel de fonction.. Vous avez besoin de chercher la méthode dans ActiveX and VBA Reference d'AutoCAD et y prendre la syntaxe.
Pour vous aider, vous trouverez dans la page Exercices Visual LISP du ce site, plusieurs références définissants la syntaxe des méthodes, propirétés et fonctions Visual LISP.


Par exemple, dans la page reference pour l'objet Cercle, cliquez sur l'hyperlien AddCircle afin de visualiser la définition de cette méthode :





Les définitions de la syntaxe dans ActiveX and VBA Reference s'appliquent au langage Visual Basic. Pour AddCircle la syntaxe est définie comme :


    RetVal = object.AddCircle(Center, Radius)

Comparez cette expression avec la fonction équivalente en Visual LISP :

   (setq MonCercle (vla-addCircle Espace_Obj (vlax-3d-Point 10.0 10.0 0.0) 2.5))

En Visual LISP, toutes les fois qu'un objet AutoCAD est retourné par une fonction ActiveX, il est mémorisé comme une donnée du type objet VLA.


L'objet indiqué avant le nom de la méthode (object.AddCircle) est toujours le premier argument dans l'appel d'une fonction vla. C'est l'objet que vous visualisez ou modifiez. Par exemple, vous ajoutez un cercle dans l'espace objet de dessin :

   (vla-addCircle Espace_Obj...)

Dans cet exemple, Espace_Obj se réfère à l'objet ModelSpace (voir Utilisation de l'Automation ActiveX avec des objets AutoCAD). L'objet ModelSpace fournit l'accès à l'espace objet du dessin courant.


Reste à déchiffrer les deux paramètres Center et Radius dans la définition de la methode. Center est un Variant (Tableau de 3 doubles) de type données, et Radius est un Double.
Center : une coordonée 3D SCG qui précise le centre du cercle.
Radius : Le rayon du cercle. Doit être un nombre positif.


ActiveX and VBA Reference explique la façon d'utiliser ces paramètres, mais les types de données indiqués pour ces paramètres sont des types de données du Visual Basic. Vous avez besoin de les convertir en types de données Visual LISP. La table suivante explique comment faire :


Visual Basic Visual LISP
Byte Integer (entier)
Boolean :vlax-true et :vlax-false
Integer Integer (entier)
Long Integer (entier)
Single Integer (entier), real (réel)
Double Integer (entier), real (réel)
Object vla-object
String String (chaîne de caractères)
Variant variant
Array Safe-array (tableau)

Voici un diagramme qui symbolise le passage du Visual Basic au Visual LISP :



Quand vous utilisez les fonctions ActiveX dans Visual LISP, vous devez toujours fournir des arguments qui sont du type de donnée définit dans les définitions des méthodes ActiveX.