laripaille Posté(e) le 27 mars 2014 Posté(e) le 27 mars 2014 Bonjour à tous je débute en LISP.... peut être dans le but de remplacer le VBA dans le lisp suivant, je souhaite "passer" à la commande ULS la valeur X qui correspond au fichier LAS à importer, retaurer. J'excute : (uls "PLANCHER", j'ai en retour NO FUNCTION DEFINITION Merci de votre aide ... (defun c:uLS ( x / vportlist vport) (layerstate-import (strcat "c:\\" x ".las")) (if (/= (getvar "ctab") "model") (progn (setq vportlist (vl-sort (vports) '(lambda (v1 v2) (< (car v1) (car v2))))) (if (> (length vportlist) 1) (progn (command "_mspace");activate vport (foreach vport (cdr vportlist) (setvar "cvport" (car vport)) (layerstate-restore x (vlax-vla-object->ename (vla-get-activepviewport (vla-get-activedocument (vlax-get-acad-object)))) 4);restore );foreach (command "_pspace");deactivate vport );progn );if );progn );if );defun
bryce Posté(e) le 27 mars 2014 Posté(e) le 27 mars 2014 Bonjour, Essaie avec (defun uLS...)au lieu de (defun c:uLS...);) Brice, formateur AutoCAD - Inventor - SolidWorks - ZWCad - DraftSight - SketchUp indépendant
(gile) Posté(e) le 27 mars 2014 Posté(e) le 27 mars 2014 Salut, Tu as cette erreur parce que le nom de ta fonction est : 'c:uls' et pas : 'uls'. Le fait de préfixer un nom de fonction LISP avec 'c:' est un artefact pour pouvoir appeler la fonction sans préfixe depuis la ligne commande commme une commande AutoCAD, mais dans ce cas la fonction ne peut pas avoir d'arguments. Quand on définit une fonction avec argument(s), on ne la préfixe pas avec 'c:' sauf, cas particulier, quand on veut exposer cette fonction à une application extérieure ObjectARX (ou .NET) qui pourra l'appeler avec acedInvoke (ou Invoke). Donc, si tu n'est pas dans ce cas particulier, il vaut mieux nommer ta fonction 'uls' tout simplement (defun uls ...).Sinon, pour l'appeler, il faut faire : (c:uls "PLANCHER") Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
(gile) Posté(e) le 27 mars 2014 Posté(e) le 27 mars 2014 Le beurre et l'argent du beurre. (defun c:uls (/ layerState lasFile) (uls (getstring "\nEntrez le nom de l'état de calque: ")) (princ) ) (defun uls (x / vportlist vport) (if (layerstate-import (strcat "c:\\" x ".las")) (if (/= (getvar "ctab") "model") (progn (setq vportlist (vl-sort (vports) '(lambda (v1 v2) (< (car v1) (car v2))))) (if (> (length vportlist) 1) (progn (command "_mspace") ;_ activate vport (foreach vport (cdr vportlist) (setvar "cvport" (car vport)) (layerstate-restore x (vlax-vla-object->ename (vla-get-activepviewport (vla-get-activedocument (vlax-get-acad-object)) ) ) 4 ) ;_ restore ) ;_ foreach (command "_pspace") ;_ deactivate vport ) ;_ progn ) ;_ if ) ;_ progn ) ;_ if ) ;_ if ) ;_ defun Tu peux entrer ULS en ligne de commande et tu seras invité à spécifier le nom de l'état de calque.Ou entrer directement (uls "PLANCHER") PS: j'ai ajouté un (if avant (layerstate-import ...) pour éviter une erreur au cas où le fichier n'existe pas. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
laripaille Posté(e) le 27 mars 2014 Auteur Posté(e) le 27 mars 2014 Merci à Brice et Gile, Entre temps j'avais trouvé en retirant que vous l'indiquez le c: Oups... c'est mon premier Lisp Pour info, j'avais besoin de ce code pour l'intégrer dans ma programmation existante détaillée ci-après :J'ai un plan d'intérieur (Autocad), un premier programme VB, analyse le plan en fonction d'une charte graphique donnée, alimente un base Access des diverses surfaces (SHOB, SHON, SUB, SUN, CAREZ, inf 1.80, PLANCHER.... Nature des espaces) Dans Access, j'ai un formulaire que permet de spécifier les couleurs des shadings pour chacun des types de surfaces, et également en fonction de la nature des espaces. Un autre programme VB, interroge Access pour générer les hachures classifiées dans des calques spécifiques, génère les espaces papiers, insère les cartouches légendes en renseignant les attributs (à partir des données d'Access), gère les ordres d'affichage..... Une mise en page, (liée à un type de surface et liée à un fichier LAS) doit intégrer la visibilité restrictive de certains calquesVotre aide m'est précieuse car maintenant je suis en mesure de lors du traitement des mises en page de charger dans l'objet du papier les fameux fichiers LAS...Il est important que je puisse appeler ce lisp en indiquant le nom du fichier LAS à restaurer. Il n'y a plus qu'à imprimer... même si cette dernière est également faite via un autre programme (impression sur imprimante ou en pdf dénommés en automatique et stockés dans une arborescence précise. Merci à vous deux, je ne manquerai pas de vous solliciter prochainement Mon objectif : peut-être porter tout mon vb en lisp B)
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