paulo43 Posté(e) le 3 juillet 2015 Posté(e) le 3 juillet 2015 Bonjour à tous, J'ai trouvé sur ce forum un lisp qui permet de copier une présentation existante et en plus de faire un -p défini. Pour des présentation très tramées comme des profils en long c'est génial. Le seul hic ça ne fonctionne que pour une fenêtre sur la présentation, si il y a deux fenêtres il y en a qu'une qui se décale de -p, dans le cas d'une vue en plan + une coupe on est marron. Je n'arrive pas à modifier ce lisp pour qu'il sélectionne toutes les fenêtres. Je crois qu'un membre a modifié ce lisp mais je ne le retrouve pas. Merci pour votre aide Paul CLAYOUTT: (defun llayouts (/ acadobject ActDoc LAYOUTS LLAY n)(setq acadObject (vlax-get-acad-object))(setq ActDoc (vla-get-ActiveDocument (vlax-get-Acad-Object)))(setq LAYOUTS (vla-get-Layouts ActDoc))(setq LLAY nil)(vlax-for n LAYOUTS(setq LLAY (cons (vla-get-name n) LLAY)))LLAY) (defun NewNameLayout (OLDLAY NEWLAY)(setq RES nil)(while NEWLAY(setq ELEM (car NEWLAY))(setq NEWLAY (cdr NEWLAY))(if (not (member ELEM OLDLAY))(setq RES ELEM)))RES) (defun c:cy ()(vl-load-com)(setq NBPAGE (getint "\nNombre de copies : "))(repeat NBPAGE(setq OLDLLAY (llayouts))(command "_layout" "_c" "" "")(setq NEWLLAY (llayouts))(setq NNAME (NewNameLayout OLDLLAY NEWLLAY))(command "_layout" "_s" NNAME)(command "_MSPACE")(command "_-pan" "_non" '(0 0) "_non" '(0 50))(command "_PSPACE"))(princ))
bonuscad Posté(e) le 3 juillet 2015 Posté(e) le 3 juillet 2015 Bonjour, Essayes (testé succinctement) de remplacer ta fonction c:cy par celle-ci: (defun c:cy () (vl-load-com) (setq NBPAGE (getint "\nNombre de copies : ")) (repeat NBPAGE (setq OLDLLAY (llayouts)) (command "_layout" "_c" "" "") (setq NEWLLAY (llayouts)) (setq NNAME (NewNameLayout OLDLLAY NEWLLAY)) (command "_layout" "_s" NNAME) (command "_MSPACE") (if (setq ss (ssget "_X" (list (cons 0 "VIEWPORT") (if (getvar "CTAB") (cons 410 (getvar "CTAB")) (cons 67 (- 1 (getvar "TILEMODE"))) ) ) ) ) (foreach n (mapcar 'cdr (mapcar '(lambda (x) (assoc 69 x)) (mapcar 'entget (mapcar 'cadr (ssnamex ss))))) (if (not (eq n 1)) (progn (setvar "CVPORT" n) (command "_-pan" "_non" '(0 0) "_non" '(0 50)) ) ) ) ) (command "_PSPACE") ) (princ) ) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
paulo43 Posté(e) le 3 juillet 2015 Auteur Posté(e) le 3 juillet 2015 Bonsoir, Merci ça fonctionne très bien, il faut que je rajoute la valeur de -p à rentrer manuellement dans la barre de commande après la demande du nombre de page et le tour est joué. Merci beaucoup et bon week end Paul
paulo43 Posté(e) le 22 novembre 2016 Auteur Posté(e) le 22 novembre 2016 Bonjour à tous, Je me repenche sur ce lisp, et mes connaissances limitées en LISP ne me permettent pas de le modifier. Avec programme de "bonuscad" j'obtiens ce que je veux, mais je voudrais pouvoir rentrer le décalage en x ou en y après le nombre de page suivant ma présentation et que les noms d'onglet se suivent je m'explique: Aujourd'hui je commence avec l'onglet 01, il me créer l'onglet 01(2) et 01(3). je souhaiterais avois 01 puis 02 puis 03... Merci pour votre aide Bonne journée Paulo
zebzeb Posté(e) le 25 février 2017 Posté(e) le 25 février 2017 Bonjour, Je sais que le post date un peu, mais bon si ça peut en aider. Ce lisp n’est pas de moi, mais de Patrick => http://cadxp.com/topic/25537-renommer-onglets-en-chaine/ Je l’ai juste modifié pour nommer les présentations 01, 02, etc ;; Renommer les onglets en 01, 02 ... (defun c:ro01toXX (/ doc express lay lst n i txt txt1) (vl-load-com) (setq doc (vla-get-activedocument (vlax-get-acad-object)) n 0 i 1 prefix "0" txt nil long (itoa (- (length (layoutlist)) 1)) ) (vla-startundomark doc) (if (eval 'acet-ui-progress-done) (progn (acet-ui-progress-init "" (1- (vla-get-count (vla-get-layouts doc)))) (setq express T) ) (progn (princ "\nTravail en cours...") (princ) ) ) (vlax-for lay (vla-get-layouts doc) (setq lst (cons (list (vla-get-taborder lay) lay) lst)) ) (while (setq lay (assoc i lst)) (cond ((eq n 0) (setq txt "01")) ; DEBUT ((>= n 1) (setq txt1 (itoa (+ n 1))) (if (< (strlen txt1) 2) (setq txt1 (strcat "0" txt1)) ) (if (< (strlen long) 2) (setq long (strcat "0" long)) ) (setq txt txt1) ) ) (if (vl-catch-all-error-p (vl-catch-all-apply 'vla-put-name (list (cadr lay) txt)) ) (progn (vla-put-name (vla-item (vla-get-layouts doc) txt) (strcat "c" txt) ) (vla-put-name (cadr lay) txt) ) ) (and express (acet-ui-progress-safe i)) (setq n (1+ n) i (1+ i) ) ) (and express (acet-ui-progress-done)) (princ (strcat "\nRenumérotation de " (itoa (1+ n)) " présentation(s)." )) (vla-endundomark doc) (princ) ) Cordialement
paulo43 Posté(e) le 1 mars 2017 Auteur Posté(e) le 1 mars 2017 Bonjour, Merci pour le Lisp. Tu me donne l'occasion de vous montrer ce que j'ai fais depuis mon dernier post. Nous utilisons depuis la semaine dernière au bureau, 4 commandes que j'ai mis sous forme de barre d'outil. J'ai glané et modifié des Lisp pour arriver à ça et je dois dire que ça fonctionne plutôt bien. D'ailleurs un grand merci à toutes les personnes qui écrivent et qui partagent leurs Lisp. Dans un premier temps 2 commandes qui permettent de verrouiller ou de déverrouiller les fenêtres. C'est important pour pouvoir utiliser le programme "-P", il faut que les fenêtres soit bien déverrouillées. Verrouiller: (defun c:verr(/ fen n sel tot) (vl-load-com) (vla-startundomark (vla-get-activedocument (vlax-get-acad-object))) (if (setq sel (ssget "x" (list (cons 0 "VIEWPORT")))) (progn (setq n 0 tot 0) (while (ssname sel n) (if (and (= (logand (cdr (assoc 90 (entget (ssname sel n)))) 16384) 0) (/= (cdr (assoc 69 (entget (ssname sel n)))) 1)) (progn (setq fen (vlax-ename->vla-object (ssname sel n))) (vlax-put-property fen "displaylocked" :vlax-true) (setq tot (1+ tot)) ) ) (setq n (1+ n)) ) (princ (strcat "\n" (itoa tot) " fenêtre(s) de verrouillée(s)")) ) (princ "\nPas de fenêtres") ) (vla-endundomark (vla-get-activedocument (vlax-get-acad-object))) (princ) ) null .... Déverrouiller (defun c:unverr(/ doc ent n sel) (vl-load-com) (setq doc (vla-get-activedocument (vlax-get-acad-object)) n 0 ) (vla-startundomark doc) (if (ssget "_x" (list (cons 0 "VIEWPORT"))) (progn (vlax-for ent (setq sel (vla-get-activeselectionset doc)) (and (eq (vla-get-displaylocked ent) :vlax-true) (setq n (1+ n)) (vla-put-displaylocked ent :vlax-false) ) ) (vla-delete sel) ) ) (princ (strcat "\n" (itoa n) " fenêtre(s) de déverrouillée(s)")) (vla-endundomark doc) (princ) ) (setq nom_lisp "UNVERR") (if (/= app nil) (if (= (strcase (substr app (1+ (- (strlen app) (strlen nom_lisp))) (strlen nom_lisp))) nom_lisp) (princ (strcat "..." nom_lisp " chargé.")) (princ (strcat "\n" nom_lisp ".LSP Chargé.....Tapez " nom_lisp " pour l'éxecuter."))) (princ (strcat "\n" nom_lisp ".LSP Chargé......Tapez " nom_lisp " pour l'éxecuter."))) (setq nom_lisp nil) (princ) Ensuite le programme "-p" qui sert comme vous l’avez compris à automatiser les présentations de type phasag, profil en travers... - Dans un premier temps, faites une présentation de la phase 1 par exemple qui servira de modèle sans verrouiller les fenêtres - Cliquer sur l’icône « -P » - Saisir le nombre de copies (nombre de phases) - Le décalage en X - Le décalage en Y Comme nous partons toujours de la gauche vers la droite et du haut vers la bas, ne rentrez pas de signe (-). Presentation -P: (defun llayouts (/ acadobject ActDoc LAYOUTS LLAY n) (setq acadObject (vlax-get-acad-object)) (setq ActDoc (vla-get-ActiveDocument (vlax-get-Acad-Object))) (setq LAYOUTS (vla-get-Layouts ActDoc)) (setq LLAY nil) (vlax-for n LAYOUTS (setq LLAY (cons (vla-get-name n) LLAY)) ) LLAY ) (defun NewNameLayout (OLDLAY NEWLAY) (setq RES nil) (while NEWLAY (setq ELEM (car NEWLAY)) (setq NEWLAY (cdr NEWLAY)) (if (not (member ELEM OLDLAY)) (setq RES ELEM) ) ) RES ) (defun c:p- () (vl-load-com) (setq NBPAGE (getint "\nNombre de copies : ")) (setq DECALX (getreal "\nDécalage en X:")) (setq DECALY (getreal "\nDécalage en Y:")) (setq decx (rtos DECALX)) (setq decy (rtos DECALY)) (repeat NBPAGE (setq OLDLLAY (llayouts)) (command "_layout" "_c" "" "") (setq NEWLLAY (llayouts)) (setq NNAME (NewNameLayout OLDLLAY NEWLLAY)) (command "_layout" "_s" NNAME) (command "_MSPACE") (if (setq ss (ssget "_X" (list (cons 0 "VIEWPORT") (if (getvar "CTAB") (cons 410 (getvar "CTAB")) (cons 67 (- 1 (getvar "TILEMODE"))) ) ) ) ) (foreach n (mapcar 'cdr (mapcar '(lambda (x) (assoc 69 x)) (mapcar 'entget (mapcar 'cadr (ssnamex ss))))) (if (not (eq n 1)) (progn (setvar "CVPORT" n) (command "_pan" "0,0" (strcat "-" decx "," decy)) ) ) ) ) (command "_PSPACE") ) (princ) ) Et pour finir le Lisp pour renommer les onglets, celui que j'utilise nomme le premier onglet en Cartouche et ensuite 01,02,03.... (defun c:ron(/ doc express lay lst n i txt) (setq doc (vla-get-activedocument (vlax-get-acad-object)) n 0 i 1 ) (vla-startundomark doc) (if (eval 'acet-ui-progress-done) (progn (acet-ui-progress-init "" (1- (vla-get-count (vla-get-layouts doc)))) (setq express T) ) (progn (princ "\nTravail en cours...") (princ) ) ) (vlax-for lay (vla-get-layouts doc) (setq lst (cons (list (vla-get-taborder lay) lay) lst)) ) (while (setq lay (assoc i lst)) (if (eq n 0) (setq txt "Cart") (setq txt (itoa n)) ) (while (< (strlen txt) 2) (setq txt (strcat "0" txt)) ) (if (vl-catch-all-error-p (vl-catch-all-apply 'vla-put-name (list (cadr lay) txt))) (progn (vla-put-name (vla-item (vla-get-layouts doc) txt) (strcat "Temporaire__" txt)) (vla-put-name (cadr lay) txt) ) ) (and express (acet-ui-progress-safe i)) (setq n (1+ n) i (1+ i) ) ) Une fois que vous avez fini vos présentations vous pouvez Verrouiller les fenêtres avec le Lisp "Verr" Au bureau tout le monde trouve ça super, on gagne pas mal de temps de mise en page. Merci à tous pour votre aide Paulo
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