VL propriétés et méthodes

Propriétés et méthodes

Je ne parle que des "objets" Visual Lisp.
Dans Visual Lisp, les données d'un objet (paramètres ou attributs) sont appelées "propriétés", tandis que les différentes procédures pouvant fonctionner sur un objet sont appelées "méthodes".
Il est possible de changer la couleur d'un objet en changeant sa propriété COLOR.
Il est possible de déplacer un objet en utilisant la méthode MOVE.

 

Ne jamais oublier de commencer
un programme VLISP par cette ligne :
(vl-load-com)

 

FONCTION MÉMENTO
vlax-get-acad-object Accéder à "l'objet" AutoCAD
vlax-dump-object Propriétés d'un objet VLA
vlax-get-property Accéder à une propriété d'un objet VLA
vlax-get-object Accéder à un objet (externe)

 

 

 

 

 


vlax-get-acad-object

Accéder à "l'objet" AutoCAD

En fait "d'objet" AutoCAD il serait plus judicieux d'utiliser le terme "application", en effet ici on parle de l'application AutoCAD par elle-même

Syntaxe : (vlax-get-acad-object)

C'est une fonction sans argument.

(vlax-get-acad-object)

Renvoie : #<VLA-OBJECT IAcadApplication 000000013fd8a130> qui est donc un objet VLA et qu'il faudra mettre dans une variable pour pouvoir y faire référence chaque fois que nécessaire :

(setq acadApp (vlax-get-acad-object))

Cet objet VLA a des propriétés et l'une d'elle nous intéresse dans cet avant-propos c'est ce qui va suivre ...

 

Haut de page Retour menu Fonctions VL

 


vlax-dump-object

Lister propriétés et méthodes

Tous les "objets" VLA ont des propriétés et des méthodes, et cette fonction (vlax-dump-object) va permettre de les lister.
Ce n'est pas une fonction à utiliser dans un code de programmation car elle n'est qu'informative, toutefois elle est très utile pendant l'écriture du code pour connaître les "possibilités" de travailler avec l'objet passé en argument

Syntaxe : (vlax-dump-object obj [drapeau])

Arguments :
obj, un objet VLA
drapeau
: T ou nil, si T est fourni comme argument la fonction (vlax-dump-object) renvoie aussi les méthodes applicables à l'objet.

Valeur renvoyée : T ou nil.
En cas de succès ce qui est renvoyé permet de connaître toutes les possibilités de l'objet.
En voici un extrait :
; IAcadApplication: An instance of the AutoCAD application
; Valeurs de propriétés:
; ActiveDocument = #<VLA-OBJECT IAcadDocument 00000000286060d8>
; Application (RO) = #<VLA-OBJECT IAcadApplication 000000013fd8a130>
; Caption (RO) = "Covadis 14.0f - [Dessin1.dwg (1:200)]"
; Documents (RO) = #<VLA-OBJECT IAcadDocuments 000000003c2e18c0>
; FullName (RO) = "C:\\Program Files\\Autodesk\\AutoCAD 2015\\acad.exe"
; Height = 24
; HWND (RO) = 591396
; LocaleId (RO) = 1036
; MenuBar (RO) = #<VLA-OBJECT IAcadMenuBar 000000003c2e5fa8>
; MenuGroups (RO) = #<VLA-OBJECT IAcadMenuGroups 000000002118ea18>...

Faîtes le test et vous verrez que la liste est longue et que cette fonction est bavarde !
Pour mémoire (RO) signifie Read Only, lecture seule en français, on ne pourra pas modifier ce qui est (RO) qui n'est donné que comme "information".

Pour arriver à ce résultat, voici les lignes de code :

(setq acadApp (vlax-get-acad-object))
(vlax-dump-object acadApp T)

 

Haut de page Retour menu Fonctions VL

vlax-get-property

obtenir une propriété

Accéder au document actif dans un premier temps

Cela va être nécessaire pour interroger, créer, modifier des entités car comme au départ on a fait référence à l'application AutoCAD, maintenant on va affiner et dans l'application, on va mémoriser dans une variable l'objet "document"
pour ça on va utiliser cette fonction (vla-get-property).

Syntaxe : (vlax-get-property obj propriete)

Arguments :
objun objet VLA
propriete
: de type Symbol ou chaîne de caractères (string) contenant le nom de la propriété à interroger.

Valeur renvoyée  : la propriété concernée sous forme possible de :
- Nombre entier (integer)
- Nombre réel (real)
- Liste (list)
- VLA-Object
- Variant
- Safearray
- T ou nil.

La propriété qui va nous intéresser donc dans un premier temps est le document actif.

(setq acadDocument (vlax-get-property acadApp 'ActiveDocument))

Renvoie dans le contenu de la variable acadDocument :
#<VLA-OBJECT IAcadDocument 00000000286060d8>

obj est "acadAPP" et propriete est "ActiveDocument"
(notez bien l'apostrophe (quote) devant le nom de la propriété)


Les syntaxes suivantes sont équivalentes :

1
2
3
4
5
(vlax-get acadApp "ActiveDocument")
(vlax-get acadApp 'ActiveDocument)
(vlax-get-property acadApp "ActiveDocument")
(vlax-get-property acadApp 'ActiveDocument)
(vla-get-ActiveDocument acadApp)

Les noms de "propriétés" ne sont pas sensibles à la casse, j'ai pris l'habitude de mettre la première lettre en majuscule pour facilité de lecture, et même si ces trois expression font la même j'ai tendance à préférer la première qui est la plus "lisible" :

1
2
3
(vlax-get-property objLine “Length)
(vlax-get-property objLine ‘Length)
(vla-get-Length objLine)

Qu'en pensez-vous ? ah oui !, c'est vrai que je parle tout seul (hihi)

Haut de page Retour menu Fonctions VL

vlax-get-object

Accéder à un objet (externe)

 

La communication entre applications est un point fort de VLISP et cette fonction (vlax-get-object) va permettre de créer un "objet" qui va pointer vers un programme tiers.

Syntaxe : (vlax-get-object IdProg)

Argument : un seul argument :
IdProg : chaîne de caractères (string).

Identification de l'objet d'application visé
Le format de IdProg est : Nom d'application.Type d'application

Exemple :

Créer un objet qui pointe vers Excel :

(vlax-get-object "Excel.Application")

Renvoie : #<VLA-OBJECT _Application 000000003c2bc178>, un objet VLA

Et maintenant qu'on a l'objet... on va faire appel à une de ses propriétés pour le rendre visible à l'écran :

(setq ObjExcel (vlax-get-object "Excel.Application"))
(vla-put-visible ObjExcel 1))

YES !! Excel a démarré, elle est pas belle la vie en VLISP ?


Cette fonction va pointer vers un "objet" Excel mais pour le créer cet objet "Excel" il faudra utiliser : (vlax-create-object) qui va vraiment le créer,  avec la syntaxe :

(setq ObjExcel (vlax-create-object "Excel.Application"))

Il est nécessaire de créer l'objet "application" avant de pouvoir pointer dessus.

La fonction (vlax-get-or-create-object) qui pourrait faire croire avec son nom qu'elle fait les deux, créer et pointer, fonctionne en fait de cette façon :

(if 
   (not 
      (setq ObjExcel (vlax-get-object "Excel.Application"))
   )
  (setq ObjExcel (vlax-create-object "Excel.Application"))
)

Ce qui revient à dire : si l'objet n'existe pas : le créer mais ce n'est pas une création systématique comme je l'avais écrit précédemment et je m'en excuse.
Merci à Patrick_35 (pseudo CadXP) de m'avoir contacté pour me corriger.

(setq ObjExcel (vlax-get-or-create-object "Excel.Application"))

 

Haut de page Retour menu Fonctions VL

 

 

mai 2018