Cambiar nombre a la presentaciones (espacio papel) de manera automatizada

Cambiar nombre a la presentaciones (espacio papel) de manera automatizada

marc
Enthusiast Enthusiast
15.931 Vistas
47 Respuestas
Mensaje 1 de 48

Cambiar nombre a la presentaciones (espacio papel) de manera automatizada

marc
Enthusiast
Enthusiast

Hola Comunidad,

Muchas veces nos pasa que tenemos paginado un documento con muchas páginas (o presentaciones) ya nombradas, habitualmente con nº de página que queremos que ocupen en el documento, y entonces necesitamos más y se nos descuadra todo el documento, teniendo que cambiar o tener mal numeradas las páginas.

¿Hay alguna manera de cambiarles el nombre, que no sea una a una??

 

Muchas Gracias!

 

Captura.JPG


Marc Duran Studio
Marc Duran Fuster | Creative Director & Designer | marcduran.com


Soluciones aceptadas (1)
15.932 Vistas
47 Respuestas
Respuestas (47)
Mensaje 21 de 48

calderg1000
Mentor
Mentor

Estimada @Anonymous 

Luego de escribir los comandos Acad en tu archivo de texto correctamente ordenado, debes guardarlo como un archivo con extencion SCR.

Luego digitar en la barra de comandos Acad, SCR para cargar el archivo.

Te adjunto el siguiente link, donde se explica a detalle la forma de crear y ejecutar los archivos Scripts.

https://forums.autodesk.com/t5/autocad-espanol/macro-en-lt/td-p/8506130

Saludos.


Carlos Calderon G
EESignature
>Did you find this post helpful? Feel free to Like this post.
Did your question get successfully answered? Then click on the ACCEPT SOLUTION button.

0 Me gusta
Mensaje 22 de 48

calderg1000
Mentor
Mentor

Saludos @marc 

tal vez ya solucionaste el inconveniente con tu archivo SCRIPTS, pero de todas formas quisiera hacer una acotación al tema.

Es muy cierto que los usuarios de ACAD LT, no pueden acceder a ciertas utilidades de ACAD como es el caso de las Macros y Rutinas Autolisp pero tienen la alternativa de los SCRIPTS para automatizar algunos procedimientos. 

En tu caso acabo de observar bien y el mensaje que te sale y es debido a que en la tercera linea empezando desde arriba has puesto el texto presentacion7, cuando debió ser solo 01 y así sucesivamente para todos los casos.

Luego de ejecutar los cambios y guardarlo con extención SCSR, ejecutar nuevamente el SCRIPTS utilizando el alias del comando SCR.

Espero mis comentarios sean de utilidad para todos los usuarios de ACAD LT

 

 

 

 


Carlos Calderon G
EESignature
>Did you find this post helpful? Feel free to Like this post.
Did your question get successfully answered? Then click on the ACCEPT SOLUTION button.

Mensaje 23 de 48

fragudi
Explorer
Explorer

Hola @Anonymous la rutina LISP para renumerar las presentaciones funciona genial, y perdón por mi inexperiencia/torpeza, ¿pero que parte del código debería modificar y cómo debo hacerlo para poder añadir un prefijo?, de manera que por ejemplo la presentaciones quedaran así: PRE-01, PRE-02, PRE-03, etc... y si es posible, que al correr la rutina te pregunte cual debe ser ese prefijo y después numere automáticamente.

 

¿Habría posibilidad también de que solicite el numero inicial desde el que empezar a numerar?, este caso se me da cuando utilizo muchas presentaciones pero en archivos DWG distintos, aunque con presentaciones consecutivas entre ellas, el primer DWG tiene 10 presentaciones y el segundo DWG 5 (por ejemplo), entonces me interesaría que la primera presentación del segundo DWG empezara por PRE-06 (que sería la supuesta continuación del primer DWG, siguiendo con el ejemplo).

 

No se si es posible hacer esto, creo que si, pero no dispongo de suficiente conocimiento ni soltura de las rutinas LISP como para poder hacerlo por mi mismo. Agradecería mucho tu ayuda o la de cualquier otro usuario. Gracias de antemano.

 


@Anonymous  ha escrito:

Yo no leí la discusión completa, pero sería eso?

(defun c:Renumber_all_layouts ( / l n )
    (vlax-for x (vla-get-layouts (vla-get-activedocument (vlax-get-acad-object)))
        (if (= :vlax-false (vla-get-modeltype x))
            (progn
                (vla-put-name x (vla-get-handle x))
                (setq l (cons x l))
            )
        )
    )
    (foreach x l
        (setq n (itoa (vla-get-taborder x)))
        (repeat (- 2 (strlen n)) (setq n (strcat "0" n)))
        (vla-put-name x n)
    )
    (princ)
)
(vl-load-com)(princ)
(defun c:RAL nil (c:Renumber_all_layouts))

RAL.gif

 

 


 

0 Me gusta
Mensaje 24 de 48

marc
Enthusiast
Enthusiast

Hola @bc.chiquito ,

No acabo de entender qué ARCHIVO quieres que te suba, para poder editarlo en castellano??

un .dwg??

un .srg??

 

Gracias!

 


Marc Duran Studio
Marc Duran Fuster | Creative Director & Designer | marcduran.com


0 Me gusta
Mensaje 25 de 48

marc
Enthusiast
Enthusiast

ey @Anonymous ,

Cómo lo llevas?

No encontraste una solución para lo mío??

 

Gracias!

😉


Marc Duran Studio
Marc Duran Fuster | Creative Director & Designer | marcduran.com


0 Me gusta
Mensaje 26 de 48

marc
Enthusiast
Enthusiast

Hola @calderg1000 ,

No acabo de entender/compartir lo que comentas, puesto que según @bc.chiquito lo que en castellano sería  "presentación7" vendría a ser lo que en inglés "layout7"... con lo que estoy indicando que el título que quiero cambiar es el de la presentación 7...no es así??

 

Saludos!


Marc Duran Studio
Marc Duran Fuster | Creative Director & Designer | marcduran.com


0 Me gusta
Mensaje 27 de 48

Anonymous
No aplicable

@fragudi  Simple, reemplaza la línea anterior por esa, Red = Prefijo

 

(foreach x l
        (setq n (itoa (vla-get-taborder x)))
        (repeat (- 2 (strlen n)) (setq n (strcat "0" n)))
        (vla-put-name x (strcat "PRE-" n))
    )
Mensaje 28 de 48

Anonymous
No aplicable

@marc Muchas disculpas, pero no encontré ninguna solución.

Mensaje 29 de 48

Anonymous
No aplicable

Hola @fragudi  

 

Te dejo el código de @Anonymous modificado para que solicite un prefijo inicial y luego solicite el valor numérico para comenzar, solo tiene un pequeño problema que quizás el mismo @Anonymous nos lo pueda solucionar y es que ordena la numeración en sentido inverso.

 

Saludos

 

(defun c:Renumber_all_layouts ( / l n )
    (vlax-for x (vla-get-layouts (vla-get-activedocument (vlax-get-acad-object)))
        (if (= :vlax-false (vla-get-modeltype x))
            (progn
                (vla-put-name x (vla-get-handle x))
                (setq l (cons x l))
            )
        )
    )
  
  (prompt "Indique la cadena inicial:")
  (setq m (getstring))
  (prompt "Indique el valor inicial:")
  (setq y (getint))

  (foreach x l
	(setq n (itoa (vla-get-taborder x)))
    	(repeat (- 2 (strlen n)) (setq v (strcat m (itoa y))))
    	(vla-put-name x v)
    	(setq y (+ 1 y))
    )
    (princ)
)

(vl-load-com)(princ)
(defun c:RAL nil (c:Renumber_all_layouts))

 

0 Me gusta
Mensaje 30 de 48

marc
Enthusiast
Enthusiast

Hola @Anonymous ,

como bien ya sabe el mismo @Anonymous , esto a parte de ser fantástico es .lisp y no funciona en LT... Así que no puedo utilizarlo... por eso, justo hoty le preguntaba si había encontrado alguna solución en .src

 

Gracias!


Marc Duran Studio
Marc Duran Fuster | Creative Director & Designer | marcduran.com


0 Me gusta
Mensaje 31 de 48

Anonymous
No aplicable

@Anonymous  No hay necesidad de tantos "Prompt's" usted puede simplemente hacer eso: No olvide el T para permitir q usuarios dar "espacios"

 

(setq m (getstring T "\nIndique la cadena inicial: ")
	y (getint "\nIndique el valor inicial:")
	)

Pero la forma más elegante sería utilizar el vla-GetStrin.

 

Mensaje 32 de 48

Anonymous
No aplicable

Gracias @Anonymous 

 

Pero que adecuación abría que hacer al código modificado para que la numeración quede de forma correcta y así solucionar el problema de @fragudi 

 

Saludos

0 Me gusta
Mensaje 33 de 48

fragudi
Explorer
Explorer

Funciona  perfecto, muchas gracias  @Anonymous.

 

¿Me podrías ayudar también con lo de que solicite el numero inicial desde el que empezar a numerar?.

Gracias otra vez. Un saludo.

 


@Anonymous  ha escrito:

@fragudi  Simple, reemplaza la línea anterior por esa, Red = Prefijo

 

(foreach x l
        (setq n (itoa (vla-get-taborder x)))
        (repeat (- 2 (strlen n)) (setq n (strcat "0" n)))
        (vla-put-name x (strcat "PRE-" n))
    )

 

0 Me gusta
Mensaje 34 de 48

fragudi
Explorer
Explorer

Gracias por la ayuda @Anonymous, pero efectivamente numera hacia atrás, por ejemplo, PRES-05, PRES-04, y además en mi caso, sólo dos presentaciones, el resto no las renombra.

 


@Anonymous  ha escrito:

Hola @fragudi  

 

Te dejo el código de @Anonymous modificado para que solicite un prefijo inicial y luego solicite el valor numérico para comenzar, solo tiene un pequeño problema que quizás el mismo @Anonymous nos lo pueda solucionar y es que ordena la numeración en sentido inverso.

 

Saludos

 

(defun c:Renumber_all_layouts ( / l n )
    (vlax-for x (vla-get-layouts (vla-get-activedocument (vlax-get-acad-object)))
        (if (= :vlax-false (vla-get-modeltype x))
            (progn
                (vla-put-name x (vla-get-handle x))
                (setq l (cons x l))
            )
        )
    )
  
  (prompt "Indique la cadena inicial:")
  (setq m (getstring))
  (prompt "Indique el valor inicial:")
  (setq y (getint))

  (foreach x l
	(setq n (itoa (vla-get-taborder x)))
    	(repeat (- 2 (strlen n)) (setq v (strcat m (itoa y))))
    	(vla-put-name x v)
    	(setq y (+ 1 y))
    )
    (princ)
)

(vl-load-com)(princ)
(defun c:RAL nil (c:Renumber_all_layouts))

 


 

0 Me gusta
Mensaje 35 de 48

Anonymous
No aplicable

Hola @fragudi 

 

Haciendo memoria, recordé que en mis archivos tenia guardada una rutina que realiza lo que necesitas, en esa oportunidad alguien muy amable resolvió mi problema; ahora la comparto contigo, en este caso le agregue un par de lineas para que solicite la información del nombre del layout.

 

Espero que te sea útil.

 

Saludos

 

;;runtime created by Lee Mac 27/07/2016
;;edited by raulhmontanez 13/03/2019

(defun c:relays ( / idx lst lyc obj pre srt )
   (vlax-for lay (setq lyc (vla-get-layouts (vla-get-activedocument (vlax-get-acad-object))))
       (if (= :vlax-false (vla-get-modeltype lay))
           (setq lst (cons (vla-get-name     lay) lst)
                 srt (cons (vla-get-taborder lay) srt)
                 obj (cons lay obj)
           )
       )
   )
   (if (setq pre (getstring t "\nSpecify prefix <none>: ")
             srt (vl-sort-i srt '<)
	     int (1- (getint "Specify init number: "))
             obj (mapcar '(lambda ( n ) (nth n obj)) srt)
             idx (LM:listbox "Select Layouts to Rename" (mapcar '(lambda ( n ) (nth n lst)) srt) 3)
       )   
       (progn
           ;; Temporary rename to free up keys held by other layouts in the selection
           (foreach n idx (vla-put-name (nth n obj) (vla-get-handle (nth n obj))))
           (foreach n idx (vla-put-name (nth n obj) (getname lyc pre int)))
       )
   )
   (princ)
)
(defun getname ( lyc pre int / rtn )
   (while
       (not
           (vl-catch-all-error-p
               (vl-catch-all-apply 'vla-item
                   (list lyc
                       (setq int (1+ int)
                             rtn (strcat pre (if (< 9 int) (itoa int) (strcat "0" (itoa int))))
                       )
                   )
               )
           )
       )
   )
   rtn
)

;; List Box  -  Lee Mac
;; Displays a DCL list box allowing the user to make a selection from the supplied data.
;; msg - [str] Dialog label
;; lst - [lst] List of strings to display
;; bit - [int] 1=allow multiple; 2=return indexes
;; Returns: [lst] List of selected items/indexes, else nil

(defun LM:listbox ( msg lst bit / dch des tmp rtn )
   (cond
       (   (not
               (and
                   (setq tmp (vl-filename-mktemp nil nil ".dcl"))
                   (setq des (open tmp "w"))
                   (write-line
                       (strcat "listbox:dialog{label=\"" msg "\";spacer;:list_box{key=\"list\";multiple_select="
                           (if (= 1 (logand 1 bit)) "true" "false") ";width=50;height=15;}spacer;ok_cancel;}"
                       )
                       des
                   )
                   (not (close des))
                   (< 0 (setq dch (load_dialog tmp)))
                   (new_dialog "listbox" dch)
               )
           )
           (prompt "\nError Loading List Box Dialog.")
       )
       (   t     
           (start_list "list")
           (foreach itm lst (add_list itm))
           (end_list)
           (setq rtn (set_tile "list" "0"))
           (action_tile "list" "(setq rtn $value)")
           (setq rtn
               (if (= 1 (start_dialog))
                   (if (= 2 (logand 2 bit))
                       (read (strcat "(" rtn ")"))
                       (mapcar '(lambda ( x ) (nth x lst)) (read (strcat "(" rtn ")")))
                   )
               )
           )
       )
   )
   (if (< 0 dch)
       (unload_dialog dch)
   )
   (if (and tmp (setq tmp (findfile tmp)))
       (vl-file-delete tmp)
   )
   rtn
)

(vl-load-com) (princ?)
Mensaje 36 de 48

fragudi
Explorer
Explorer

La rutina es perfecta @Anonymous , muchísimas gracias de verdad, hace justo lo que necesito. Me ahorrará mucho trabajo cuando tenga que renumerar/renombrar gran cantidad de presentaciones. Gracias otra vez. Un saludo.

 

 


@Anonymous  ha escrito:

Hola @fragudi 

 

Haciendo memoria, recordé que en mis archivos tenia guardada una rutina que realiza lo que necesitas, en esa oportunidad alguien muy amable resolvió mi problema; ahora la comparto contigo, en este caso le agregue un par de lineas para que solicite la información del nombre del layout.

 

Espero que te sea útil.

 

Saludos

 

;;runtime created by Lee Mac 27/07/2016
;;edited by raulhmontanez 13/03/2019

(defun c:relays ( / idx lst lyc obj pre srt )
   (vlax-for lay (setq lyc (vla-get-layouts (vla-get-activedocument (vlax-get-acad-object))))
       (if (= :vlax-false (vla-get-modeltype lay))
           (setq lst (cons (vla-get-name     lay) lst)
                 srt (cons (vla-get-taborder lay) srt)
                 obj (cons lay obj)
           )
       )
   )
   (if (setq pre (getstring t "\nSpecify prefix <none>: ")
             srt (vl-sort-i srt '<)
	     int (1- (getint "Specify init number: "))
             obj (mapcar '(lambda ( n ) (nth n obj)) srt)
             idx (LM:listbox "Select Layouts to Rename" (mapcar '(lambda ( n ) (nth n lst)) srt) 3)
       )   
       (progn
           ;; Temporary rename to free up keys held by other layouts in the selection
           (foreach n idx (vla-put-name (nth n obj) (vla-get-handle (nth n obj))))
           (foreach n idx (vla-put-name (nth n obj) (getname lyc pre int)))
       )
   )
   (princ)
)
(defun getname ( lyc pre int / rtn )
   (while
       (not
           (vl-catch-all-error-p
               (vl-catch-all-apply 'vla-item
                   (list lyc
                       (setq int (1+ int)
                             rtn (strcat pre (if (< 9 int) (itoa int) (strcat "0" (itoa int))))
                       )
                   )
               )
           )
       )
   )
   rtn
)

;; List Box  -  Lee Mac
;; Displays a DCL list box allowing the user to make a selection from the supplied data.
;; msg - [str] Dialog label
;; lst - [lst] List of strings to display
;; bit - [int] 1=allow multiple; 2=return indexes
;; Returns: [lst] List of selected items/indexes, else nil

(defun LM:listbox ( msg lst bit / dch des tmp rtn )
   (cond
       (   (not
               (and
                   (setq tmp (vl-filename-mktemp nil nil ".dcl"))
                   (setq des (open tmp "w"))
                   (write-line
                       (strcat "listbox:dialog{label=\"" msg "\";spacer;:list_box{key=\"list\";multiple_select="
                           (if (= 1 (logand 1 bit)) "true" "false") ";width=50;height=15;}spacer;ok_cancel;}"
                       )
                       des
                   )
                   (not (close des))
                   (< 0 (setq dch (load_dialog tmp)))
                   (new_dialog "listbox" dch)
               )
           )
           (prompt "\nError Loading List Box Dialog.")
       )
       (   t     
           (start_list "list")
           (foreach itm lst (add_list itm))
           (end_list)
           (setq rtn (set_tile "list" "0"))
           (action_tile "list" "(setq rtn $value)")
           (setq rtn
               (if (= 1 (start_dialog))
                   (if (= 2 (logand 2 bit))
                       (read (strcat "(" rtn ")"))
                       (mapcar '(lambda ( x ) (nth x lst)) (read (strcat "(" rtn ")")))
                   )
               )
           )
       )
   )
   (if (< 0 dch)
       (unload_dialog dch)
   )
   (if (and tmp (setq tmp (findfile tmp)))
       (vl-file-delete tmp)
   )
   rtn
)

(vl-load-com) (princ?)

 

0 Me gusta
Mensaje 37 de 48

maratovich
Advisor
Advisor

1 question = 1 topic. Do not mix questions.
This topic is about LT!

 

---------------------------------------------------------------------
Software development
Automatic creation layouts and viewport. Batch printing drawings from model.
www.kdmsoft.net
0 Me gusta
Mensaje 38 de 48

maratovich
Advisor
Advisor

Work in LT requires complexity.
Attach the example files - source and as it should.

---------------------------------------------------------------------
Software development
Automatic creation layouts and viewport. Batch printing drawings from model.
www.kdmsoft.net
Mensaje 39 de 48

Anonymous
No aplicable

@maratovich  Perfect!!! 

0 Me gusta
Mensaje 40 de 48

Anonymous
No aplicable

@Anonymous  ¡Me gustó mucho su código! Corazón

0 Me gusta