Aller au contenu

[Résolu] Numérotation de présentation


Messages recommandés

Posté(e)

Bonjour,

 

Je souhaiterais proposer à mon bureau d'étude un LISP permettant de :

 

- Effectuer un zoom étendu de l'espace objet avec un "overkill" pour supprimer les doublons est autres

- Effectuer un zoom étendu de chaque présentation en les numérotant sur le format "a.b" sachant que "a" est le numéro de la page de présentation courante et "b" la somme de toutes les pages de présentations et terminer par un zoom étendu

- Définir la vue courante sur la première page de présentation

 

C'est avec ces critères que j'ai débuter la rédaction du LISP avec le peu de notion que je possède :

 

(defun c:test (/ list_presentation x y)  

 (setq list_presentation (layoutlist) ; lister noms présentations dans variable list_Presentation

       x 0 ; variable x = 0
y 1 ; variable y = 1
 )

 ;Zoom étendu de l'espace object
 
 (command "tilemode" "1")
 (command "zoom" "ET")

 ;Zoom étendu et edition du nom des présentations
 
 (repeat (length list_Presentation) ; répéter nombre d'élément dans list_Presentation

   (command "presentation" "E" (nth x list_presentation)) ; rend courant la "x'ième" présentation dans list_Presentation  

   (command "zoom" "et") ; zoom étendu

   (command "-presentation" "renommer" "" y)

   (setq x (+ 1 x))  ; incrémente variable x de +1

   (setq y (+ 1 y)) ; incrémente varaible y de +1
 )
 
 (princ)
)

 

Hélas je ne trouve pas comment :

 

- renommer la présentation sous le format "a.b", avec cette syntaxe je n'obtient que "a".

 

- réaliser un CTRL+A pour sélectionner l'ensemble des objets du dessin pour ensuite effectuer l'overkill

 

Merci pour votre aide.

Posté(e)

Salut et bienvenue au club des lispeurs,

 

- renommer la présentation sous le format "a.b", avec cette syntaxe je n'obtient que "a".

Il faut concaténer (avec la fonction strcat) la valeur de x convertie en chaîne (avec itoa), le point (".") et la valeur de y convertie en chaîne :

(command "presentation" "renommer" "" (strcat (itoa x) "." (itoa y)))

Ainsi, les présentations seront renommées "0.1", "1.2", "2.3", ... mais il me semble que ce n'est pas ce que tu cherches à faire. Si pour 5 présentations, tu souhaites avoir "0.5", "1.5", "2.5", ..., il ne faut pas incrémenter la variable y mais lui donner comme valeur le nombre de présentations.

(setq y (length liste_presentation))

 

- réaliser un CTRL+A pour sélectionner l'ensemble des objets du dessin pour ensuite effectuer l'overkill

Tu n'as pas besoin de réaliser un CTRL+A, tu peux passer l'option "tout" (ou, mieux, "_all") à l'invite "Sélectionner les objets" :

(command "_-overkill" "_all" "" "")

 

Sinon, tu pourrais utiliser foreach plutôt que repeat pour parcourir les présentations.

Par ailleurs, je te conseille de prendre l'habitude d'utiliser les noms globaux (internationaux) des commandes et options.

 

Voilà à quoi pourrait ressembler ton code avec les suggestions ci dessus :

 

Lisp_Daarz.png

 

Je crains que, même si code fonctionne le renommage des présentations ne corresponde pas tout à fait à tes attentes parce que la fonction layoutlist retorune la listes présentations dans l'ordre alphabétique et pas dans l'ordre d'affichage.

 

Comme récupérer la liste des présentations dans l'ordre des onglets n'est pas vraiment du niveau débutant, je te donne la définition d'une fonction LISP à ajouter à ton fichier pour pouvoir simplement remplacer (layoutlist) par (orderedlayoutlist).

 

(defun orderedlayoutlist (/ acad_layout taborder)
 (setq acad_layout (cdr (assoc -1 (dictsearch (namedobjdict) "ACAD_LAYOUT"))))
 (defun taborder (layout)
   (cdr (assoc 71 (dictsearch acad_layout layout)))
 )
 (vl-sort (layoutlist) '(lambda (x y) (< (taborder x) (taborder y))))
)

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Merci pour cette réponse rapide !

 

En suivant votre conseils avisé et en bidouillant un petit peu j'ai pu obtenir un résultat satisfaisant avec ce code :

 


; Lisp pour sauvegarder correctement un plan

(defun c:fini (/ list_presentation x y v)

 (setq list_presentation (layoutlist) ; lister noms présentations dans variable list_Presentation

       x 0                                   ; variable x = 0
y (length list_presentation)          ; variable y = nombre de présentation
v 1                                   ; variable v = 1
 )

 ;Zoom étendu de l'espace object
 
 (command "tilemode" "1")
 (command "_zoom" "_extents")
 (command "_-overkill" "_all" "" "")

 ;Zoom étendu et edition du nom des présentations
 
 (foreach presentation list_Presentation

   (command "_layout" "_set" presentation)

   (command "_zoom" "_extents") ; zoom étendu

   (command "_layout" "_rename" presentation (strcat (itoa v) "." (itoa y)))

   (setq x (1+ x))  ; incrémente variable x de +1

   (setq v (1+ v))  ; incrémente variable v de +1
 )

 ;Activation de la premère présentation

 (command "_layout" "_set" (car (layoutlist)))
 
 (princ)
)

 

Encore merci et bonne continuation.

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é