ribbit Posté(e) le 8 juin 2004 Auteur Posté(e) le 8 juin 2004 Hello, Moi aussi j'ai occupé mes soirées - challenge personnel... Mon code est encore un peu bancale, mais bon, il marche c'est l'essentiel... Il faut construire une fenetre (une "form" comme ils disent) avec 3 boutons (appellés BtFermer, BtActive, BtRename) et et une listbox (appellée LBNomPres). La liste est actualisée quand on lance la macro avec les présentations du dessin actif. On peut renommer, activer une présentation et fermer la boite (ben oui aussi !). Comme je suis débutant, il y a forcément des trucs qui vont pas, comme quand on annule après avoir cliqué sur renommer, mais bon, ca m'a bien servi et ça m'a appris à gérer un peu tout ca. Pour l'améliorer, il faudrait que je pige comment déplacer une présentation.... Des idées ? bon, maintenant, je vais installer et regarder les appli en lisp que vous avez généreusement faites... Option Explicit Public AutoCAD As AcadApplication Public ACAD_ADOC As AcadDocument Public Presentations As AcadLayouts Public PresAct As AcadLayout 'declaration variables globales Private Sub UserForm_Initialize() Set AutoCAD = AcadApplication 'recuperation de l'objet autocad Set ACAD_ADOC = ACAD.ActiveDocument 'recuperation de l'objet document actif Set Presentations = ACAD_ADOC.Layouts 'recuperation de l'objet presentations (collection) On Error Resume Next If ACAD_ADOC.ActiveSpace = acModelSpace Then _ ACAD_ADOC.ActiveSpace = acPaperSpace Set Presentations = ACAD_ADOC.Layouts For Each PresAct In Presentations If PresAct.Name <> "Objet" Then LBNomPres.AddItem (PresAct.Name) End If Next 'recuperation de la liste des présentations pour les mettre dans la listbox End Sub Private Sub BtFermer_Click() End End Sub Private Sub BtActive_Click() Dim numlayout As Integer Dim resultat As Integer Dim SelectedLayout As AcadLayout Dim test As Variant numlayout = LBNomPres.ListIndex 'récupere le numero d'index de la presentation Set SelectedLayout = Presentations.Item(numlayout) 'récupere la presentation sélectionnée Call ActiverLayout(SelectedLayout) 'Appelle la fonction pour activer la présentation designée End Sub Sub ActiverLayout(SLayout As AcadLayout) ACAD_ADOC.ActiveLayout = SLayout End Sub Private Sub BtRename_Click() Dim numlayout As Integer Dim nomlayout As String Dim resultat As Integer numlayout = LBNomPres.ListIndex 'récupere le numero d'index de la presentation nomlayout = InputBox("Nouveau nom", "Title", Presentations.Item(numlayout).Name) 'récupere le nouveau nom Call RnLayout(numlayout, nomlayout) 'Renomme la présentation designée End Sub Private Function RnLayout(i As Integer, nom As String) As Integer Presentations.Item(i).Name = nom End Function Ribbit."Une fois qu'on les a découvertes toutes les vérités sont faciles à comprendre; l'essentiel c'est de les découvrir."Version en cours : Autocad Map 2013
ribbit Posté(e) le 8 juin 2004 Auteur Posté(e) le 8 juin 2004 Hello, Je reconnais que là, le LISP c'est rapide, et ca marche très bien. Je pense que j'en resterai à ton fichier LISP ong1.00, Patrick, c'est quand même 'achement mieux... Mais bon, je voulais essayer ! MERCI !!!Un Ribbit très content. :hallucine: . PS : ca me motive pour me mettre au lisp tout ca.... Ribbit."Une fois qu'on les a découvertes toutes les vérités sont faciles à comprendre; l'essentiel c'est de les découvrir."Version en cours : Autocad Map 2013
lecrabe Posté(e) le 9 juin 2004 Posté(e) le 9 juin 2004 Bonjour Une simple remarque, lors de toutes mes formations je dis TOUJOURS : Essayer "si possible" de n'utiliser que les caractères suivants dans vos noms de:calque / styles / vue / bloc / etc ... A-Z 0-9 _ - et ainsi avec AUCUN caractère spécial (ni Espace), la vie est BEAUCOUP plus facile ... Il faudrait même essayer de faire la même chose avec les noms de fichiers ! Byebye Autodesk Expert Elite Team
Tramber Posté(e) le 9 juin 2004 Posté(e) le 9 juin 2004 IDEM 1. j'ai la nostalgie de Windows 3.1 (je me dis que ca tournerait grave sur ma machine en W3.1 !) 2.j'aime les scripts vite fait bien fait ! Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
ribbit Posté(e) le 10 juin 2004 Auteur Posté(e) le 10 juin 2004 Bonjour,Une simple remarque, lors de toutes mes formations je dis TOUJOURS : Essayer "si possible" de n'utiliser que les caractères suivants dans vos noms de:calque / styles / vue / bloc / etc ... A-Z 0-9 _ - et ainsi avec AUCUN caractère spécial (ni Espace), la vie est BEAUCOUP plus facile ... Il faudrait même essayer de faire la même chose avec les noms de fichiers ! Est-ce que ça s'applique à mon code ? Je ne comprend pas, à qui vous adressez vous ? Je ne pense pas avoir utilisé de caractères spéciaux ni d'espaces dans les noms de mes variables ??? 2.j'aime les scripts vite fait bien fait ! C'est une critique ??... Bon, je suis pas susceptible mais si vos remarques s'adressent à quelqu'un en particulier ce serait quand même plus constructif d'être plus explicites !! Ribbit. Ribbit."Une fois qu'on les a découvertes toutes les vérités sont faciles à comprendre; l'essentiel c'est de les découvrir."Version en cours : Autocad Map 2013
Tramber Posté(e) le 10 juin 2004 Posté(e) le 10 juin 2004 Non, t'inquiètes pas Ribbit. Mais, si la personne qui t'envoie ces fameux fichiers avec X présentations n'utilisait pas d'espace, tu ferais des scripts et le boulot serait déjà fini depuis longtemps. Les scripts, tout le monde peut en faire, sauf s'il y a trop de caractères spéciaux, mais va faire avec la nouvelle génération ! ...après on discute, on discute. Au milieu de nulle part. Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
ribbit Posté(e) le 10 juin 2004 Auteur Posté(e) le 10 juin 2004 Hello, En fait, c'est pas la nouvelle génération qui pose problème, c'est au contraire, celle qui y connait pas assez - l'intermédiaire, élevée à coup de windows admettant plus de 8 caractères+3.... En fait,le rpoblème vient de la plupart des gens qui ont mal appris par eux même et ne connaissent pas les rudiments de la prog et de ses impératifs de rigueur... Qui me mettent des accents et des CEDILLES dans des fichiers et autres en têtes de colonnes de BDD...GRRR. Pour ne pas parler des blocs définis n'importe comment (calque machin + style de trait 0.00mm etc...). Et n'oublions les traditionnels logiciels archi qui me mettent les entités en blocs dans des layers fantaisistes mélangés... Bonne journée,Ribbit. Ribbit."Une fois qu'on les a découvertes toutes les vérités sont faciles à comprendre; l'essentiel c'est de les découvrir."Version en cours : Autocad Map 2013
Patrick_35 Posté(e) le 10 juin 2004 Posté(e) le 10 juin 2004 Bonjour à tousCette fois-ci, le prog amélioré avec en ajout la possibilité de faire les mises en page et d'intégrer des gabaritsFichier ong.dcl ong : dialog { key = "total"; is_cancel = true; allow_accept = true; : row { : list_box {key = "present"; height = 20; width = 20;multiple_select = true;} : column { : button {key = "choisir"; label = "Choisir";} : button {key = "renommer"; label = "Renommer";} : button {key = "effacer"; label = "Effacer";} : button {key = "nouveau"; label = "Nouveau";} : button {key = "gabarit"; label = "Gabarit";} : button {key = "copier"; label = "Copier";} spacer; : button {key = "page"; label = "Mise en page";} : button {key = "tracer"; label = "Imprimer";} spacer; : button {key = "trier"; label = "Trier";} } } spacer; ok_button; } edi : dialog{ key = texte; allow_accept = true; : row { : edit_box {key = select; width = 20;} } spacer; ok_cancel; } Fichier ong.lsp (defun c:ong(/ cmd position resultat s) (defun *errong* (msg) (if (/= msg "Function cancelled") (if (= msg "quit / exit abort") (princ) (princ (strcat "\nErreur : " msg))) (princ)) (setq *error* s) (setvar "cmdecho" cmd) (princ)) (defun affiche_ong(/ choix fichier init_ong liste_lay n ptxy r resultat sel) (defun initialisation(pos) (setq liste_lay (layoutlist)) (if (vl-position "Model" liste_lay) (setq liste_lay (vl-remove "Model" liste_lay))) (setq liste_lay (append (list "Model") liste_lay) n 0) (if (= pos 1) (while (nth n liste_lay) (if (= (getvar "ctab") (nth n liste_lay)) (setq position (itoa n))) (setq n (1+ n))))) (if (findfile "Ong.ini") (progn (setq fichier (open (findfile "Ong.ini") "r")) (setq ptxy (list (atoi (read-line fichier))(atoi (read-line fichier)))) (close fichier)) (setq ptxy '(-1 -1))) (setq init_ong (load_dialog (findfile "Ong.dcl"))) (initialisation 1) (while (/= resultat 1) (new_dialog "ong" init_ong "" ptxy) (setq n 0) (start_list "present") (while (nth n liste_lay) (add_list (nth n liste_lay)) (setq n (1+ n))) (end_list) (set_tile "total" "Gestion des Onglets V2.00") (set_tile "present" position) (mode_tile "present" 2) (action_tile "present" "(setq position $value)") (action_tile "choisir" "(done_dialog 2)") (action_tile "renommer" "(done_dialog 3)") (action_tile "effacer" "(done_dialog 4)") (action_tile "nouveau" "(done_dialog 5)") (action_tile "gabarit" "(done_dialog 6)") (action_tile "copier" "(done_dialog 7)") (action_tile "page" "(done_dialog 8)") (action_tile "tracer" "(done_dialog 9)") (action_tile "trier" "(done_dialog 10)") (action_tile "accept" "(setq ptxy (done_dialog 1))") (action_tile "cancel" "(setq ptxy (done_dialog 0))") (setq resultat (start_dialog)) (cond ((= resultat 2) (setq position (itoa (read position))) (command "_.layout" "_set" (nth (atoi position) liste_lay))) ((= resultat 3) (setq sel position) (if (= (read position) 0) (alert "Impossible de renommer l'espace Objet") (progn (while (setq n (read sel)) (setq choix (nth n liste_lay)) (new_dialog "edi" init_ong) (set_tile "texte" "Renommer") (set_tile "select" choix) (mode_tile "select" 2) (action_tile "select" "(setq choix $value)") (action_tile "accept" "(done_dialog 1)") (action_tile "cancel" "(done_dialog 0)") (setq r (start_dialog)) (if (= r 1) (progn (if (vl-position choix liste_lay) (alert (strcat "Présentation " choix " existante")) (if (and choix (/= choix "") (/= choix (nth n liste_lay))) (progn (command "_.layout" "_ren" (nth n liste_lay) choix) (setq liste_lay (subst choix (nth n liste_lay) liste_lay))))))) (setq sel (substr sel (+ 2 (strlen (itoa n))))))))) ((= resultat 4) (if (= (read position) 0) (alert "Impossible d'effacer l'espace Objet") (progn (setq sel position) (while (setq n (read sel)) (command "_.layout" "_del" (nth n liste_lay)) (setq sel (substr sel (+ 2 (strlen (itoa n)))))) (initialisation 0) (while (not (nth (atoi position) liste_lay)) (setq position (itoa (1- (atoi position)))))))) ((= resultat 5) (setq position (itoa (read position))) (command "_.layout" "_new" "") (initialisation 0)) ((= resultat 6) (if (setq fichier (getfiled "Choisissez un fichier Gabarit" "template\\" "dwt" 4)) (progn (command "_.layout" "_temp" fichier "*") (initialisation 0)))) ((= resultat 7) (setq sel position) (while (setq n (read sel)) (command "_.layout" "_copy" (nth n liste_lay) "") (setq sel (substr sel (+ 2 (strlen (itoa n)))))) (initialisation 0)) ((= resultat 8) (setq sel position) (while (setq n (read sel)) (command "_.layout" "_set" (nth n liste_lay)) (command "_.pagesetup") (setq sel (substr sel (+ 2 (strlen (itoa n))))))) ((= resultat 9) (setq sel position) (while (setq n (read sel)) (command "_plot" "n" (nth n liste_lay) "" "" "n" "n" "o") (setq sel (substr sel (+ 2 (strlen (itoa n))))))) ((= resultat 10) (setq liste_lay (append (list "Model") (acad_strlsort (cdr liste_lay))))))) (unload_dialog init_ong) (setq fichier (open (vl-string-subst "Ong.ini" "Ong.lsp" (findfile "Ong.lsp")) "w")) (write-line (itoa (car ptxy)) fichier) (write-line (itoa (cadr ptxy)) fichier) (close fichier)) (setq s *error*) (setq *error* *errong*) (setq cmd (getvar "cmdecho")) (setvar "cmdecho" 0) (command "_.undo" "_group") (affiche_ong) (command "_.undo" "_end") (setq *error* s) (setvar "cmdecho" cmd) (princ)) Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
ribbit Posté(e) le 10 juin 2004 Auteur Posté(e) le 10 juin 2004 :hallucine: BIEN JOUE ! Dites, ça vaudrait pas un grand MERCI, ça ??? Patrick est pas ceinture noire pour rien..... :cool: C'est un bô :present: que tu fait aux gens désespérés des présentations..... !!! Ribbit Ribbit."Une fois qu'on les a découvertes toutes les vérités sont faciles à comprendre; l'essentiel c'est de les découvrir."Version en cours : Autocad Map 2013
Patrick_35 Posté(e) le 10 juin 2004 Posté(e) le 10 juin 2004 Merci, ça fait plaisir http://smileys.smileycentral.com/cat/3/3_4_24.gif @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
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