ScoAD Posté(e) le 10 octobre 2008 Posté(e) le 10 octobre 2008 Rebonjour les pros du lisp.Je séche une fois de plus. Dans ma routine, je cree une nouvelle présentation: 1er probleme:Comment vérifier que que le nom de ma présentation n'existes pas déjà (Je ne peux pas utilsé comme pour les calque : (tblsearch "layer" "NomDuCalque") peut etre parce que je ne sais pas quoi mettre a la place de layer! je n'arrive pas utiliser la fonction (Entget(enlast) il ne renvoi les infos de l'élément créer juste avant le présentation (Une fenetres "viewports").2em probleme:Comment basculer sur ma nouvelle présentation. TILEMODE ne me premet que de passer de l'EO à l'EP utile si je n'est qu'un présentation dans mon fichier dwg. merci d'avance
phil_vsd Posté(e) le 10 octobre 2008 Posté(e) le 10 octobre 2008 Hello, Pour ta 2ème question : Si ta présentation s'appelle ALPHA, ta ligne lisp sera (setvar "CTAB" "ALPHA"). Pour la première... Je passe... essaie avec VIEW, remplace LAYER par VIEW. A+ "La ligne droite est le plus court chemin entre deux points, à condition que les deux points soient bien en face l'un de l'autre" P. Desproges.
Patrick_35 Posté(e) le 10 octobre 2008 Posté(e) le 10 octobre 2008 Salut Au plus simple Pour ta première question :Regarde la fonction layoutlist pour avoir toutes les présentationset pour tester si la présentation existe, avec la fonction member Pour la seconde, phil_vsd à donné la bonne réponse. Si tu veux aller plus loin, tu as aussi les fonctions vlisp @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
ScoAD Posté(e) le 10 octobre 2008 Auteur Posté(e) le 10 octobre 2008 Merci beaucoup, grace à vous j'ai reussi à pondre ça:(Ne rigoler pas, merci) (setq BOCLAYLSIT layoutlist)(member BOCLAYNAM (BOCLAYLSIT)) (if (/= BOCLAYNAM nil) (setq BOCLAYNAM (strcat (getvar "DWGNAME")"_01")) (setq BOCLAYNAM (strcat (getvar "DWGNAME")"_02")) )(Command "-presentation" "N" BOCLAYNAM) (setvar "CTAB" BOCLAYNAM) Cela fonctionne la premiere fois, mais apres cela continu d'aller sur ( "DWGNAME")"_01).Et de tout maniere si cela fonctionnait je serait coincé à la 3eme presentation . Concernant la fonction DWGNAME commen puis-je récupéré le nom sans le ".dwg à la fin"? AU SECOURS, LES SUPER LISPEURS
(gile) Posté(e) le 10 octobre 2008 Posté(e) le 10 octobre 2008 Salut, Plusieurs choses, L'expression (member BOCLAYNAM (BOCLAYLSIT)) est inutile si tu ne fais rien avec ce qu'elle retourne. L'expression :(if (/= BOCLAYNAM nil)(setq BOCLAYNAM (strcat (getvar "DWGNAME")"_01"))(setq BOCLAYNAM (strcat (getvar "DWGNAME")"_02")))retournera toujours (strcat (getvar "DWGNAME")"_01") si BOCLAYNAM n'est pas nil. En LISP le tiret est inutile pour avoir la commande en ligne de commande, par contre, il est préférable de prendre l'habitude d'utiliser les noms de commandes et d'options en langage international. Pour avoir le nom de fichier sans extension, il y a la fonction vl-filename-base. Ton code pourrait donc ressembler à ceci : ;; initialisation du nom de la présentation (setq boclayname (strcat (vl-filename-base (getvar "DWGNAME")) "_01")) ;; tester si la présentation existe déjà dans le dessin (if (member boclayname (layoutlist)) ;; si la présentation existe (setq boclayname (strcat (vl-filename-base (getvar "DWGNAME")) "_02")) ) ;; créer la présentation (command "_layout" "_new" boclayname) ;; activer la présentation (setvar "CTAB" boclayname) Mais cette méthode ne permet que la création de 2 présentations. pour incrémenter le nom de chaque nouvelle présentation, tu doit utiliser une boucle avec while par exemple. ;; initialisation du nom de la présentation (setq suffix 1 boclayname (strcat (vl-filename-base (getvar "DWGNAME")) "_1") ) ;; tant que la présentation existe déjà dans le dessin (while (member boclayname (layoutlist)) ;; incrémenter le suffixe (setq suffix (1+ suffix) boclayname (strcat (vl-filename-base (getvar "DWGNAME")) "_" (itoa suffix)) ) ) ;; créer la présentation (command "_layout" "_new" boclayname) ;; activer la présentation (setvar "CTAB" boclayname) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
ScoAD Posté(e) le 13 octobre 2008 Auteur Posté(e) le 13 octobre 2008 merci bien pour cette leçon.L'expression (member BOCLAYNAM (BOCLAYLSIT)) je compte m'en servir pour faire "presentation 1/2... " Merci encore à tous Comment peut t'on définir la mise en page (Imprimante, zone d'impression, echelle...)? Autrement je cherche à obtenir le nombre de presentation dans le plan, j'ai esssyer ça : (setq LAYOUTNUM (sslength (layoutlist))) , mais comme d'jab cela ne marche pas!Et pour finir: pour se qui suis me fonctionne pas! .... (if (= BOC_FOR1 "0") (Command "-inserer" "Z:\\Format_A0h_boc_confidentiel.dwg" "0,0,0" "1" "1" "0") ) (if (or (or (or (or (/= BOC_FOR1 "4") (/= BOC_FOR1 "3")) (/= BOC_FOR1 "2")) (/= BOC_FOR1 "1") (/= BOC_FOR1 "0")) (/= BOC_FOR1 "")) (progn (Alert (strcat "ATTENTION, opération annulée:\nVous vous etes trompées dans la saisie du format\nVous avez saisi : " BOC_FOR1 "\n\nLes seule entrées clavier possible sont: \n 0 / 1 / 2 / 3 / 4 ou entré")) (command "_layout" "EF" boclayname) (trap1) ) ) [Edité le 13/10/2008 par ScoAD]
(gile) Posté(e) le 13 octobre 2008 Posté(e) le 13 octobre 2008 Salut, La fonction sslength retourne le nombre d'éléments d'un jeu de sélection, pour une liste, il faut utiliser length. Pour la seconde question, je pense qu'il faudrait plutôt faire :(if (and (/= BOC_FOR1 "4") (/= BOC_FOR1 "3") (/= BOC_FOR1 "2") (/= BOC_FOR1 "1") (/= BOC_FOR1 "0") (/= BOC_FOR1 "") ) (progn ... ) ) ou encore :(if (not (member BOC_FOR1 '("0" "1" "2" "3" "4" "")) (progn ...)) mais, plus élégant pour le "Choix du format", regarde les fonctions getkword et initget. Exemple avec "0" comme valeur par défaut (Entrée) (initget "0 1 2 3 4") (or (setq BOC_FOR1 (getkword "\nSpécifiez le format [0/1/2/3/4] : ")) (setq BOC_FOR1 "0") ) [Edité le 13/10/2008 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
ScoAD Posté(e) le 14 octobre 2008 Auteur Posté(e) le 14 octobre 2008 merci pour cette nouvelle leçon.Et sinon pour: Comment peut t'on définir la mise en page (Imprimante, zone d'impression, echelle...)?a défaut de réponse, une autre question!pourquoi ce qui suit ne fontionne pas? : (setq boclayname (strcat (vl-filename-base (getvar "DWGNAME")) "_" (itoa suffix) "/" (getvar "BOC_FOR1")))[Edité le 14/10/2008 par ScoAD] [Edité le 20/10/2008 par ScoAD]
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