Aller au contenu

Messages recommandés

Posté(e)

Bonjour amis cadiens,

 

Connaissez vous un moyen pour gérer les onglets de présentation ?

 

:casstet: J'ai récupéré de mes chers collègues des fichiers avec plus d'une centaine d'onglets chacun (!!) et j'aimerai notamment les trier et les renommer.

 

Merci d'avance, :

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

Posté(e)

Au passage, je précise que ce n'est pas une centaine mais 255 présentations qu'ils ont créées !!!! J'en profite pour dire qu'il semble que c'est le maximum (ouf, heureusement pour moi...) dans autocad.

 

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

Posté(e)

La réponse du Tramber :

 

SCRIPT (d'ailleurs, elles ont peut-être été créés par un script, ces présentations !

 

PRESENTATION R layout1 lenouveaunomdelayout1

PRESENTATION R layout2 lenouveaunomdelayout2

PRESENTATION R layout3 lenouveaunomdelayout3

...etc

 

 

Un peu galère si les noms d'origine sont disparates, sinon, c'est la solution parfaite, avec l'aide d'un tableur.

Mais attention, les espaces sont mal tolérés, alors il faut programmer un lisp.

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Posté(e)

Je l'avais oubliée celle-là. Ca va me servir...

 

En fait, non, mes collègues les ont créées avec leurs petits doigts potelés. Ils en ont du courage (et du temps à perdre).

Bon, au boulot maintenant pour depatouiller ca...

 

Merci,

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

Posté(e)

En fait, j'ai des espaces...

 

Tu connais pas une autre bricole, genre, un tri auto ou autre chose ?

 

Pour le lisp tu fais comment, c'est compliqué ? Je suppose qu'il faut tenter de récupérer la liste des présentation, passer une boucle de tri et lui demander de les réagencer selon une nouvelle liste...?

Mais vu mon niveau 0 en lisp...

 

PS : oui, un jour je m'y mettrai au lisp....

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

Posté(e)

Bonjour,

Le lisp est un langage de programmation, ce n'est que de la logique

Si tu souhaites de perfectionner dans ce langage, Rimbo à fait deux cours et tu trouveras dans ce forum des corrigés avec des commentaires

(pour ton besoin, c'est avec la fonction layoutlist)

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

layoutlist ?

 

Ca serait pas mieux de commencer à bricoler en VB ?

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

Posté(e)

Vaste sujet....

Mais il me semble plus simple de faire du lisp, voir du visual lisp que du vba

 

La fonction layoutlist de donne tout tes présentations

par exemple

(setq listelay (layoutlist))

Les noms de toutes tes présentations sont stockés dans la variable listelay

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

Merci,

 

Je vais y travailler...

 

Au passage, en cherchant, j'ai trouvé le manuel de référence du LISP en PDF (426 pages) sur le web là :

http://gimel.inf.bi.rub.de/teaching/course/bauing/cad/download/cad/reference/AlispRef.pdf

et des bricoles à télécharger là :

http://www.dotsoft.com/freestuff.htm

dont un truc appelé "Layout Manager Lite"... en VB ;-)

 

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

Posté(e)

Pour continuer sur ma lancée...

 

Pour avoir une liste des calques aussi : lancer la commande : "PRESENTATION" et taper "?"

 

Ma question du moment : Est-ce qu'il y a quelque part une liste de "l'ordre" des presentations, associant le nom et le numero d'ordre - pour la modifier bien sur ?

 

Ma réflexion en cours : En fait, ce que j'aimerais dans mes rêves actuels, c'est avoir une boite de dialogue (réutilisable ailleurs) où je clique sur un bouton "renommer" en ayant sélectionné une présentation dans une liste, et un autre où je clique sur trier pour retrier ma liste de présentation, voire d'autres options sympa comme dans le Layout Manager Lite. Le truc, c'est que pour avoir la source c'est payant. A moi de jouer donc pour le redévelopper et y rajouter des trucs à ma sauce - si j'en ai le courage...

 

J'avais fait ça pour les feuilles excel un jour....Sans boite de dialogue mais qui permettait de les trier par ordre alphabétique. Très utile mais c'était en VBA. C'est pour ça que je m'intéressais à VBA.

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

Posté(e)

Dommage qu'il y ait des espaces, car avec le petit code de Patrick_35 et un script + un peu de travail dans le tableur et c'était réglé.

EXCEl peut traiter une liste et séparer les éléments, mais je reconnais que c'est du travail.

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Posté(e)

C'est vrai que c'est pas mal mais dès qu'il y a des espaces c'est fichu !! Ca servira quand meme je suis sur.

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

Posté(e)

Faudrait que je bosse ce point , je suis convaincu qu'il y a des solutions.

Jusqu'à présent, j'ai toujours fait + ou - des pirouettes pour ce problème.

 

Du côté des unicodes, Didier et d'autres amis m'avaient soufflé la réponse mais dans les scripts, je reste un peu en galère. J'ai oublié comment faire et ne suis pas contre quiconque pourrait m'aider à me rafraichir la mémoire....

 

Pour t'amuser avec les scripts, va voir ici et .

Malheureusement, il te faut acad 2004.

 

 

Salut ribbit, et amuses-toi bien avec tes présentations.

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Posté(e)

Merci Tramber (ca veut dire quoi au passage, Tramber ?). Je vais ruminer tout ca et si j'y arrive pas, eh bien, comme d'hab, on se debrouillera ! ;-)

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

Posté(e)

 

Ribbit Bitrib

 

Tramber Bertrand

 

Facile non ?

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Posté(e)

Une routine qui permet de chosir une présenation et de la rendre active:

 

copier le code qui suit dand une fichier LAYOUT_SET.DCL

 

Plan_set : dialog {

value = "";

key = "action";

width = 50;

: list_box {

label = "- Plans - ";

mnemonic = "P";

allow_accept = true;

// multiple_select = true;

// value = "0";

key = "Listebloc";

height = 25;

}

spacer_1;

ok_cancel;

}

 

Copier le code qui suit dans un fichier LAYOUT_SET.LSP

 

(DEFUN c:Layout_set (/ Bliste Bl b BB I

Ok X a Fichier an_action

a_confirmer _active

)

(SETQ BL nil)

(SETQ olderr *error*

*error* myerror

) ;_ Fin de setq

(SETVAR "cmdecho" 0) ;desactive l'affichage des opérations

(SETQ _active "[sans effet!]")

(SETQ a (LAYOUTLIST))

 

(WHILE (/= nil a)

(PROGN

(SETQ b (CAR a))

(SETQ Bliste (ins (STRCASE b) bliste))

(SETQ a (CDR a))

) ;_ Fin de progn

) ;_ Fin de while

 

(IF (/= Bliste nil)

(PROGN

(SETQ Bliste (ins "@_ Model / Modèle _@" bliste))

(SETQ Fichier (LOAD_DIALOG "LAYOUT_SET.DCL"))

(SETQ an_action "Choix du Layout Courant.")

(ListeBox "SET" _active)

(IF (= OK 1)

(IF (/= bl nil)

(PROGN

(IF (= bl "@_ Model _@")

(COMMAND "_tilemode" "1")

(COMMAND "_Layout" "_set" Bl)

) ;_ Fin de if

) ;_ Fin de progn

(COMMAND "_tilemode" "1")

) ;_ Fin de if

) ;_ Fin de if

(UNLOAD_DIALOG Fichier)

) ;_ Fin de progn

 

(ALERT "Pas de Choix possible!")

) ;_ Fin de if

 

(SETQ *error* olderr) ; Restore old *error* handler

(SETVAR "cmdecho" ) ;reactive l'affichage des opérations

(PRINC)

) ;_ Fin de defun

 

La routine affiche une liste des Présentation triées.

J'ai force le "model" car il ne se trouve pas dans 'layoulist', en mettant l'@, il se trouve en première place.

Double click sur un nom pour activée la présentation.

Y a plus qu'a ajouter le reste. ;)

 

Posté(e)

Salut CoolMan

Ton lisp est intéressant, mais il ne fonctionne pas chez moi (pour une 2000) avec la fonction ins et en regardant comment tu as fait ton prog, j'ai remarqué aussi une fonction ListeBox que je ne connais pas (peut-être des fonctions que tu as développées pour ton espace de travail)

Mais ce n'est pas le but principal de mon post, je me suis penché comme toi sur une manière de gérer correctement les présentations. Les faire afficher selon une sélection, aucun soucis, les imprimer depuis la sélection ne devrait normalement pas poser de problème, mais en supprimer, renommer ou encore en créer, voilà un challenge intéressant. Je pense que la solution est en visual lisp, mais je sèche pour l'instant. Si tu as déjà fait quelque chose dans ce sens.

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

Moi non plus ca marche pas (merci quand même!!), mais bon, je suis têtu, je vais tenter de la faire en VBA. Je posterai si j'y arrive...

 

A plus,

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

Posté(e)

C'est facile d'effacer un message ou de l'éditer !

 

Encore un qui n'a pas lu le mode d'emploi !

 

Tu m'étonnes que je ne receuille pas tes suggestions à ce sujet !

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Posté(e)

Oui, j'avais lu mais le temps que je les efface, j'ai mis un message...le site est un peu lent ce soir....

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

Posté(e)
Salut CoolMan

Ton lisp est intéressant, mais il ne fonctionne pas chez moi (pour une 2000) avec la fonction ins et en regardant comment tu as fait ton prog, j'ai remarqué aussi une fonction ListeBox que je ne connais pas (peut-être des fonctions que tu as développées pour ton espace de travail)

Mais ce n'est pas le but principal de mon post, je me suis penché comme toi sur une manière de gérer correctement les présentations. Les faire afficher selon une sélection, aucun soucis, les imprimer depuis la sélection ne devrait normalement pas poser de problème, mais en supprimer, renommer ou encore en créer, voilà un challenge intéressant. Je pense que la solution est en visual lisp, mais je sèche pour l'instant. Si tu as déjà fait quelque chose dans ce sens.

 

@+

 

OOPS Mega OOPS

 

il manque la fonction suivante:

 

(DEFUN Ins (Ele Lis)

(COND

((NULL Lis) (LIST Ele))

((< Ele (CAR Lis)) (CONS Ele Lis))

(T (CONS (CAR Lis) (Ins Ele (CDR Lis))))

) ;_ Fin de cond

) ;_ Fin de defun

 

 

Posté(e)

 

OOPS Mega OOPS

 

il manque la fonction suivante:

 

(DEFUN Ins (Ele Lis)

(COND

((NULL Lis) (LIST Ele))

((< Ele (CAR Lis)) (CONS Ele Lis))

(T (CONS (CAR Lis) (Ins Ele (CDR Lis))))

) ;_ Fin de cond

) ;_ Fin de defun

 

 

OOPS Mega OOPS 2

 

(DEFUN ListeBox (_action_ _active_)

 

(IF (NOT (NEW_DIALOG "Plan_set" Fichier))

(EXIT)

) ;_ Fin de if

 

(SET_TILE "action" an_action)

(SET_TILE "_active_" (STRCAT "Confirmation " _active_))

(START_LIST "Listebloc" 3)

(MAPCAR 'ADD_LIST Bliste)

(END_LIST)

(SET_TILE "Listebloc" "0")

(ACTION_TILE "Listebloc" "(setq Bl (nth (atoi $value) Bliste))")

(ACTION_TILE "accept" "(done_dialog 1)")

(ACTION_TILE "cancel" "(done_dialog 0)")

(SETQ Ok (START_DIALOG))

) ;_ Fin de defun

 

 

Dangereux le copier/coller des routines pas bien documentée!!! :casstet:

Posté(e)

Bonjour,

 

Merci pour ta réponse coolman, mais pourrait tu eclairer ma lanterne? Je sais pas trop quoi faire avec ce que tu nous as proposé (oui, je sais, je suis un peu nul...). Dois-je tout mettre dans le même fichier layout_set.lsp ? Comment lancer le tout après - commande "layout_set" ? Est-ce qu'il faut mettre les fichiers dans un répertoire particulier ?

 

Merci beaucoup d'avance !!

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

Posté(e)

Tout le code lisp doit être dans le fichier Layout_set.lsp

 

Ensuite il faut que les deux fichiers *.lsp et *.dcl soient dans un des chemins de recherche d'Autocad. Habituellement dans ..\SUPPORT.

 

Personnellement je te conseille de créer ton propre répertoire où installer tes routines, et de l'ajouter dans le chemin de recherche d'autocad.

 

Pour charger l'application, soit tu passes par le menu "outil" "Charger application", soit tu utilise l'explorateur de fichiers pour faire glisser le fichier dans autocad.

 

Demarrer la commande par layout_set.

 

Posté(e)

Bonjour à tous

C'est bon, j'ai compris comment faire pour renommer,effacer,copier et imprimer des onglets avec une sélection multiple

fichier ong.dcl

ong : dialog {
 key = "total";
 is_cancel = true;
 allow_accept = true;
 : row {
   : list_box {key = "present"; height = 16; 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 = "copier";   label = "Copier";}
     spacer;spacer;
     : button {key = "tracer";   label = "Imprimer";}
     spacer;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))
     (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 V1.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 "copier"    "(done_dialog 6)")
     (action_tile "tracer"    "(done_dialog 7)")
     (action_tile "trier"     "(done_dialog 8)")
     (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)
         (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 7)
         (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 8)
         (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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

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é