Aller au contenu

Messages recommandés

Posté(e)

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

Posté(e)

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

Posté(e)

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

Posté(e)

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

 

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

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

Posté(e)

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

 

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

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

Posté(e)

Bonjour à tous

Cette fois-ci, le prog amélioré avec en ajout la possibilité de faire les mises en page et d'intégrer des gabarits

Fichier 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 Patrick

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

Joseph Joubert, 1754-1824

Posté(e)

: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

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é