Daarz Posté(e) le 19 septembre 2016 Posté(e) le 19 septembre 2016 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.
(gile) Posté(e) le 19 septembre 2016 Posté(e) le 19 septembre 2016 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'overkillTu 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 : 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
Daarz Posté(e) le 19 septembre 2016 Auteur Posté(e) le 19 septembre 2016 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.
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