pierrevigneux Posté(e) le 12 décembre 2010 Posté(e) le 12 décembre 2010 Bonjour à tous! Question ? Dans un menu avec plusieurs commandes en lisp. Existe-t-il une autre façon d'ouvrir une commande sans être obligé de le charger au départ du dessin? Acadnadien
(gile) Posté(e) le 12 décembre 2010 Posté(e) le 12 décembre 2010 Salut, Je ne comprends pas bien la question. Pour pouvoir utiliser une commande définie en LISP dans un dessin, le fichier LISP dans lequel est défini cette commande doit être chargé. En ce qui concerne le chargement automatique des fichiers LISP, on peut avoir un contrôle plus fin de ces chargements en utilisant les fichiers de chargement automatique des routines LISP qu'avec la "valise" de la commande APPLOAD.Voir ici et l'aide : Guide de personnalisation >> Introduction aux interfaces de programmation >> AutoLISP et VisualLISP >> Chargement et exécution automatiques des routines AutoLISP. Donc dans un ficher acaddoc.lsp (à créer) ou un fichier MNL du même nom qu'un fichier CUI(X) (on peut utiliser AutoCAD.mnl) on peut écrire des expressions LISP qui utilisent les fonctions load ou autoload : load charge immédiatement le fichier LISP qui lui est passé comme premier argument : le nom du fichier (ou son chemin complet s'il n'est pas dans les chemins de recherche) et accepte un second argument (optionnel) : une expression LISP qui sera exécutée si le chargement échoue (en général une chaîne de caractères qui indique que le chargement a échoué.Exemple :(load "toto.lsp" "toto non chargé") autoload ne charge le fichier LISP qu'au premier appel d'une des commandes définies dans ce fichier. autoload requiert 2 arguments : le nom du fichier et la liste des commandes.Exemple où Cmd1 et Cmd2 sont les noms des commandes définies dans toto.lsp :(autoload "toto.lsp" '("Cmd1" "Cmd2")) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
pierrevigneux Posté(e) le 12 décembre 2010 Auteur Posté(e) le 12 décembre 2010 Bonjour (gile) Merci pou ta réponse. Si j'ai bien compris ton explication. Dans mon menu perso, je devrais écrire [Calcule volume de contours](autoload "vol.lsp" ' ( "vol") [Edité le 12/12/2010 par pierrevigneux] Acadnadien
(gile) Posté(e) le 12 décembre 2010 Posté(e) le 12 décembre 2010 Non, c'est dans un fichier de chargement automatique des routines LISP (acaddoc.lsp ou AutoCAD.mnl) qu'il faut mettre les expressions (autoload ...). Dans ton menu, tu met simplement une macro qui appelle la commande :^C^Cvol; Ou, si tu ne veux pas utiliser les fichiers de chargement automatique, tu peux charger le LISP au moment de lancer la commande : ^C^C(load "vol.lsp");(c:vol); Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
pierrevigneux Posté(e) le 13 décembre 2010 Auteur Posté(e) le 13 décembre 2010 Merci gile) Ou, si tu ne veux pas utiliser les fichiers de chargement automatique, tu peux charger le LISP au moment de lancer la commande : ^C^C(load "vol.lsp");(c:vol); Je crois que je vais opter pour cette méthode, mais le point virgule à la fin est-il nécessaire ? Acadnadien
pierrevigneux Posté(e) le 14 décembre 2010 Auteur Posté(e) le 14 décembre 2010 Bonsoir! Dans mon menu j'ai essayé les commandes suivantes à tout le menu. [coordonnée nord,est]^C^C(if (not c:coord_mod) (load"coords1)) COORDS1 Et ça ne fonctionne, pas à toutes mes commandes, on dirais que le lisp ne ce charge pas ,j'aimerais savoir ou est l'erreur. Merci! Acadnadien
(gile) Posté(e) le 15 décembre 2010 Posté(e) le 15 décembre 2010 Je crains qu'il n'y ait quelque confusion et il manque des guillemets fermants dans l'expression LISP. Soit un fichier LISP nommé toto.lsp, dans le quel la commandes faisle est définie par la fonction : c:faisle (rappel : un nom de fonction LISP préfixé avec c: permet d'appeler cette fonction, par son nom sans le préfixe, directement depuis AutoCAD comme une commandes native). (defun c:faisle () (alert "Salut le monde !") (princ)) Dans ce cas la macro doit être :^C^C(if (not c:faisle) (load "toto"));faisle; Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
pierrevigneux Posté(e) le 15 décembre 2010 Auteur Posté(e) le 15 décembre 2010 Merci beaucoup gile Je vais suivre ton conseil dès que possible. ^C^C(if (not c:faisle) (load "toto")) [surligneur] ;faisle;[/surligneur] Salutations ! Acadnadien
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant