Aller au contenu

Copier une présentation existante avec -p


Messages recommandés

Posté(e)

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)

)

Posté(e)

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

Posté(e)

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

  • 1 an après...
Posté(e)

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

  • 3 mois après...
Posté(e)

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

Posté(e)

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

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é