Aller au contenu

Visual LISP, qu'es aquò ?


(gile)

Messages recommandés

Salut,

 

Le vocable "Visual LISP" est souvent employé pour nommer des concepts différents. La confusion étant présente jusque dans l'appellation et l'utilisation de ce forum.

 

Après le rachat par Autodesk de Vital LISP (qui comportait un Environnement de Développement Intégré -IDE- et l'accès à l'interface ActiveX Automation de Microsoft), cet 'addon' est renommé Visual LISP et intégré à AutoCAD dans la version 2000. Ce sera la dernière extension significative pour AutoLISP.

 

Avec Visual LISP, AutoLISP se voit doté de nouvelles capacités :

 

- Un Environnement de Développement Intégré (IDE) : l'éditeur Visual LISP dont je recommande fortement l'utilisation même s'il s'agit de débuter avec AutoLISP.

 

- Un compilateur qui permet de compiler les fichiers LISP (et DCL) en fichiers FAS ou VLX. À noter, les fonctions définies avec defun sont aussi compilées (objets SUBR ou USBR) lors de leur chargement (elles étaient conservées sous forme de listes avant Visual LISP, voir ici).

 

- De nouvelles fonctions natives préfixées vl-, vla-, vlax- et vlr.

Les premières (vl-*) ne se distinguent des premières fonctions AutoLISP que par ce préfixe, elles ont un comportement identique et ne nécessitent pas d'invoquer (vl-load-com) pour être chargées, ce que requièrent les suivantes.

 

L'expression (vl-load-com) charge les extensions Visual LISP, notamment l'interface COM/ActiveX Automation (interface utilisée par VBA et accessible pour .NET et ObjectARX).

 

Les fonctions vla-* permettent d'accéder aux objets de l'interface COM d'AutoCAD (comme le VBA AutoCAD). La syntaxe est un peu différente de la syntaxe fonctionnelle du LISP classique à cause de la structure de cette interface organisée en objets ayant des propriétés et des méthodes.

 

Les fonctions vlax-* se partagent entre fonctions d'accès à Microsoft (et AutoCAD) ActiveX Automation et fonctions directement issues d'ObjectARX (vlax-curve-* et vlax-ldata-*).

 

Les fonctions vlr-* concernent les réacteurs aux évènements dans AutoCAD et sont aussi issues d'ObjectARX.

 

Les fonctions vl-*, vlax-* et vlr-* sont documentées dans l'aide aux développeurs > AutoLISP Reference > AutoLISP Functions.

La documentation pour les fonctions vla-* est à extrapoler de : "ActiveX and VBA Reference" dans l'aide aux développeurs (rubrique disparue avec la nouvelle aide de la version 2011).

 

On a coutume de parler de Visual LISP (ou vlisp) par opposition à AutoLISP quand il s'agit de l'utilisation de ces fonctions (vla-*, vlax-* et vlr-*) et, malgré ce qu'aurait voulu Patrick (créateur de CADxp), c'est plus de ça dont il est question dans ce forum que de l'éditeur Visual LISP.

 

Personnellement je ne pense pas que ce soit dommageable, comme je le disais, je pense que l'éditeur est un outil à utiliser dès les débuts en LISP et que l'utilisation des fonctions 'vlisp' peut être considéré comme une étape ultérieure dans l'apprentissage (d'aucuns auront certainement remarqué des merveilles écrites en "pur AutoLISP"qui n'ont rien à envier à du code plus "moderne").

 

Le fichier acadauto.chm (rubrique ActiveX and VBA reference de l'aide aux développeurs) qui a été supprimé dans l'aide de la version 2011.

Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...

Merci (gile) pour ces intéressants détails concernant autolisp/Vlisp.

Pour ma part, je n'ai jamais utilisé l'Editeur Visual Lisp, je devrai m'y mettre pour essayer. Je suis habitué à l'Editeur SCITE.

Toute ma connaissance (ou presque) en LISP me vient de CADxp et je m'inspire beaucoup des exemples de codes que j'y trouve.

En ce moment, pendant mes temps libres, je fais une petite "CAO élec.", avec des symboles "pères" et "fils" dont les renvois sont automatiques.

Pour l'instant je me débrouille mais j'aurais peut-être besoin plus tard des lumières de pros de Lisp.

 

Mat

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

En tous cas, si tu veux une lumière en voici une : utilise l'éditeur VLISP (en tapant la commande). Au moins un peu.

Il est bourré de fonctions pratiques et dédiées. Comment fais-tu pour évaluer une à une tes expressions le cas échéant ?

Comment s'en passer ?

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Lien vers le commentaire
Partager sur d’autres sites

Salut Tramber,

 

J'évalue mes expressions directement dans AutoCAD lorsque je veux débugger mon code.

C'est sans doute plus facile avec l'Editeur VLISP mais je me contente de cette méthode depuis quelques années.

Mais promis, dès que j'aurais un peu de courage je me met à l'Editeur.

 

D'ailleurs je viens d'essayer et j'ai eu le message suivant en chargeant mon code:

; avertissement: symbole identique trouvé avant et après / dans la liste d'arguments: FILTRECAO

Erreur que je n'aurais sans doute jamais vu autrement.

 

Oui j'imagine que quand on commence à utiliser l'Editeur on ne peut plus s'en passer.

 

En fait je suis habitué à SCITE car je code parfois un peu en Common Lisp (CLISP) et je n'ai rien de mieux de SCITE pour cela...

 

Lien vers le commentaire
Partager sur d’autres sites

  • 2 ans après...

Bonjour,

 

Je ne suis pas très rompu aux syntaxes VLA...

 

Mais pour un VLA-OBJET quel serait la syntaxe pour lui changer son calque, exemple mon objet aurait comme nom : ENT à placer dans le calque : POUBELLE....

 

Merci pour votre aide.

 

Christian

Formateur, Consultant Expert AutoCAD, REVIT MEP, INVENTOR, télécharger , des Outils AutoCAD...

cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)

Lien vers le commentaire
Partager sur d’autres sites

Bonjour Christian,

 

Mais pour un VLA-OBJET quel serait la syntaxe pour lui changer son calque, exemple mon objet aurait comme nom : ENT à placer dans le calque : POUBELLE....

 

Pour l'exemple 3 syntaxes possible:

(vla-put-Layer (vlax-ename->vla-object (car (entsel))) "POUBELLE")
(vlax-put (vlax-ename->vla-object (car (entsel))) 'Layer "POUBELLE")
(vlax-put-property (vlax-ename->vla-object (car (entsel))) 'Layer "POUBELLE")

 

Un lien pertinant au sujet des syntaxes vlisp

https://cadxp.com/topic/34040-syntaxe-visual-lisp-vla-vlax/

 

A+ Bruno

Apprendre => Prendre => Rendre

Lien vers le commentaire
Partager sur d’autres sites

(vla-put-layer ENT "POUBELLE")

 

Edit: en retard

Aide au téléchargement du cadastre dgfip-download-helper
Insertion de photos géolocalisées exif https://www.dropbox.com/s/gkf6o9ac2hxen97/exifscr.zip?dl=0
Script correction BUG SPDC V2, propriétaire département 21 et 22 : https://greasyfork.org/scripts/442400-spdcv2/code/SPDCV2.user.js

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

Sinon pour ce qui est du changement de calque et pour mémoire l'équivalent Lisp serait:

(entmod (subst (cons 8 "POUBELLE") (assoc 8 (setq ent (entget (car (entsel))))) ent))

 

A ne pas "ringardiser" trop vite, car comme pour entmake, entmode crée le calque de destination, si il n'est pas présent dans le dessin.

 

A+ Bruno

Apprendre => Prendre => Rendre

Lien vers le commentaire
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité