¿Seria posible?
Moderador: Moderadores
- Paco Fernandez
- Moderador
- Mensajes: 1018
- Registrado: Jue Jul 06, 2006 11:30 am
- Ubicación: BADAJOZ
- Contactar:
¿Seria posible?
Buenos dias a tod@s.
Os explico:
Uso con frecuencia el copia (control + c) y pega (contro + v), para crear bloques con el autocad, y me preguntaba si hay alguna rutina o similar, que al ir a pegar me de la opcion de cambiarle el nombre que por defecto le pone. Por norma pone un nombre a base de numeros y letras y mi idea era que se pudiese cambiar o designarlo yo antes de insertarlo.
Gracias y espero haya algo por ahi.
Os explico:
Uso con frecuencia el copia (control + c) y pega (contro + v), para crear bloques con el autocad, y me preguntaba si hay alguna rutina o similar, que al ir a pegar me de la opcion de cambiarle el nombre que por defecto le pone. Por norma pone un nombre a base de numeros y letras y mi idea era que se pudiese cambiar o designarlo yo antes de insertarlo.
Gracias y espero haya algo por ahi.
Wenas Paco Fernandez,
Hay varias soluciones a la cuestión que planteas, al menos que yo sepa, sobre todo en el de poder cambiar el nombre del bloque despues. Lo de cambiarlo antes tendía que mirar si adaptando un poco la aplicación que te pongo a continuación se podría hacer, aunque imagino que no habría problemas, creo,...
Atediendo al problema de podr cambair el nombre de los bloques que se crean una pez copias y pegados como bloque. Existe la orden de AutoCAD "_rename", la cual, te permitirá cambiar los nombres de bloques, capas, etc,... que selecciones. Más rá ( al menos a mi parecer para este caso) es la rutina Lisp que pongo, puesto que selecciónando el bloque del cual queremos cambair su nombre, ya se cambia directamente. Y tiene un control de errores mediante el cual, si el nombre del bloque nuevo que asignemos en el dibujo ya existe, no avisará de ello, para asignarle un nombre distinto:
Muestro la aplicación a continuación. La orden que la ejecuta es RBK o RK en método abreviado.
;; ///////////////////////////////////////////////////////////////////////////////////////
(defun err_rbk (msg)
(if msg
(princ (strcat " Error - " msg))
)
(setq *error* rbkerr rbkerr nil)
(princ)
(princ "\n\n* Teclee RBK o ENTER para volver a ejecutar el comando *")
) ;_end defun errcsup
;; ///////////////////////////////////////////////////////////////
(defun c:rbk (/ rbkerr sset_block block_name new_name)
(setq rbkerr *error* *error* err_rbk)
(if (/= (ssget "X" (list (cons 0 "INSERT"))) nil)
(progn
(while (/= (setq sset_block (car (entsel "\nDesigne BLOQUE a renombrar:"))) nil)
(setq block_name (cdr (assoc 2 (entget sset_block))))
(setq new_name (getstring (strcat "\nIndique nuevo NOMBRE de Bloque - (Actual; \"" block_name "\" ):")))
(if (or (= new_name nil) (= new_name "")) (setq new_name block_name) (setq new_name new_name))
(while (/= (setq ss_lon (ssget "X" (list (cons 0 "INSERT" ) (cons 2 new_name)))) nil)
(alert "El nombre de BLOQUE indicado ya existe en el dibujo actual \n Por favor, designe otro nombre distinto.")
(setq new_name (getstring (strcat "\nIndique nuevo NOMBRE de Bloque - (Actual; \"" block_name "\" ):")))
(if (or (= new_name nil) (= new_name "")) (setq new_name block_name) (setq new_name new_name))
);_end while
(command "_-rename" "_b" block_name new_name)
);_end while
) ;_end progn
(progn
(alert "No existen bloques en el dibujo\n actual para renombrar.")
(princ "\n\n* Teclee RBK o ENTER para volver a ejecutar el comando *")
(exit)
);_end progn
);_end if
(princ "\n\n* Teclee RBK o ENTER para volver a ejecutar el comando *")
(princ)
) ;end defun rbk
(princ "\n\n* Nuevo comando \"RBK\" cargado - Designed by J.S.R./santos_jsr@hotmail.com *")
(princ)
;; //////////////////////////////////////////////////////////////////////////////////
(defun c:RK ()
(c:rbk)
)
Espero que sirva de ayuda al menos. Un saludo
Hay varias soluciones a la cuestión que planteas, al menos que yo sepa, sobre todo en el de poder cambiar el nombre del bloque despues. Lo de cambiarlo antes tendía que mirar si adaptando un poco la aplicación que te pongo a continuación se podría hacer, aunque imagino que no habría problemas, creo,...
Atediendo al problema de podr cambair el nombre de los bloques que se crean una pez copias y pegados como bloque. Existe la orden de AutoCAD "_rename", la cual, te permitirá cambiar los nombres de bloques, capas, etc,... que selecciones. Más rá ( al menos a mi parecer para este caso) es la rutina Lisp que pongo, puesto que selecciónando el bloque del cual queremos cambair su nombre, ya se cambia directamente. Y tiene un control de errores mediante el cual, si el nombre del bloque nuevo que asignemos en el dibujo ya existe, no avisará de ello, para asignarle un nombre distinto:
Muestro la aplicación a continuación. La orden que la ejecuta es RBK o RK en método abreviado.
;; ///////////////////////////////////////////////////////////////////////////////////////
(defun err_rbk (msg)
(if msg
(princ (strcat " Error - " msg))
)
(setq *error* rbkerr rbkerr nil)
(princ)
(princ "\n\n* Teclee RBK o ENTER para volver a ejecutar el comando *")
) ;_end defun errcsup
;; ///////////////////////////////////////////////////////////////
(defun c:rbk (/ rbkerr sset_block block_name new_name)
(setq rbkerr *error* *error* err_rbk)
(if (/= (ssget "X" (list (cons 0 "INSERT"))) nil)
(progn
(while (/= (setq sset_block (car (entsel "\nDesigne BLOQUE a renombrar:"))) nil)
(setq block_name (cdr (assoc 2 (entget sset_block))))
(setq new_name (getstring (strcat "\nIndique nuevo NOMBRE de Bloque - (Actual; \"" block_name "\" ):")))
(if (or (= new_name nil) (= new_name "")) (setq new_name block_name) (setq new_name new_name))
(while (/= (setq ss_lon (ssget "X" (list (cons 0 "INSERT" ) (cons 2 new_name)))) nil)
(alert "El nombre de BLOQUE indicado ya existe en el dibujo actual \n Por favor, designe otro nombre distinto.")
(setq new_name (getstring (strcat "\nIndique nuevo NOMBRE de Bloque - (Actual; \"" block_name "\" ):")))
(if (or (= new_name nil) (= new_name "")) (setq new_name block_name) (setq new_name new_name))
);_end while
(command "_-rename" "_b" block_name new_name)
);_end while
) ;_end progn
(progn
(alert "No existen bloques en el dibujo\n actual para renombrar.")
(princ "\n\n* Teclee RBK o ENTER para volver a ejecutar el comando *")
(exit)
);_end progn
);_end if
(princ "\n\n* Teclee RBK o ENTER para volver a ejecutar el comando *")
(princ)
) ;end defun rbk
(princ "\n\n* Nuevo comando \"RBK\" cargado - Designed by J.S.R./santos_jsr@hotmail.com *")
(princ)
;; //////////////////////////////////////////////////////////////////////////////////
(defun c:RK ()
(c:rbk)
)
Espero que sirva de ayuda al menos. Un saludo
- Paco Fernandez
- Moderador
- Mensajes: 1018
- Registrado: Jue Jul 06, 2006 11:30 am
- Ubicación: BADAJOZ
- Contactar:
Gracias Afga, en cuanto tenga un momento de relax me pondre a probarlo, ahora me es imposible.
Lo de usar rename lo se pero para eso creo un bloque directamente que es lo mismo.
Quizas la solucion seria crea un macro que antes de pegar me abra directamente la opcion de crear bloque, o bien que fuese una rutina que me lo preguntase antes incluyendo el punto se inserccion. Esto es mas o menos lo que necesitaria, ( aun no he visto lo que me envias y a lo mejor me vale perfectamente ) en cuanto tenga un rato y termine el trabajo que tengo entre manos lo pruebo.
Gracias de nuevo. Un saludo
Lo de usar rename lo se pero para eso creo un bloque directamente que es lo mismo.
Quizas la solucion seria crea un macro que antes de pegar me abra directamente la opcion de crear bloque, o bien que fuese una rutina que me lo preguntase antes incluyendo el punto se inserccion. Esto es mas o menos lo que necesitaria, ( aun no he visto lo que me envias y a lo mejor me vale perfectamente ) en cuanto tenga un rato y termine el trabajo que tengo entre manos lo pruebo.
Gracias de nuevo. Un saludo
Weno, pues lo prometido es deuda.
Paco, muy rapidamente he realizado está pequeña rutina que permite indicar el nombre que se le desea dar al bloque antes de ser pegado como bloque porpiamente dicho, en el dibujo actual. Como digo la he desarrollado en un ratillo, así que si por algún casual la ves algún fallo dimelo para intentar rectificarlo.
El comando que la ejecuta es CV, por lo de CONTROL+V, que quizas así te sea más facil, no se, ya me dirás.
;; ///////////////////////////////////////////////////////////////////////////////////////
(defun err_cv (msg)
(if msg
(princ (strcat " Error - " msg))
)
(setq *error* cverr cverr nil)
(princ)
(princ "\n\n* Teclee CV o ENTER para volver a ejecutar el comando *")
) ;_end defun errcv
;; ///////////////////////////////////////////////////////////////
(defun c:cv (/ cverr blk_name blk_lon get_block)
(setq cverr *error* *error* err_cv)
(setq blk_name (getstring "\nIndique el NOMBRE que desea asignar al bloque: "))
(while (/= (setq blk_lon (ssget "X" (list (cons 0 "INSERT") (cons 2 blk_name)))) nil)
(alert "El nombre de BLOQUE indicado ya existe en el dibujo actual \n Por favor, designe un nombre distinto.")
(setq blk_name (getstring "\nIndique el NOMBRE que desea asignar al bloque: "))
)
(command "_pasteblock" pause)
(command "_-purge" "_b" "*" "_n")
(setq get_block (cdr (assoc 2 (entget (entlast)))))
(command "_-rename" "_b" get_block blk_name)
(princ "\n\n* Teclee CV o ENTER para volver a ejecutar el comando *")
(princ)
) ;end defun cv
(princ "\n\n* Nuevo comando \"CV\" cargado - Designed by J.S.R./santos_jsr@hotmail.com *")
(princ)
Espero que te sirva. Un saludo
Paco, muy rapidamente he realizado está pequeña rutina que permite indicar el nombre que se le desea dar al bloque antes de ser pegado como bloque porpiamente dicho, en el dibujo actual. Como digo la he desarrollado en un ratillo, así que si por algún casual la ves algún fallo dimelo para intentar rectificarlo.
El comando que la ejecuta es CV, por lo de CONTROL+V, que quizas así te sea más facil, no se, ya me dirás.
;; ///////////////////////////////////////////////////////////////////////////////////////
(defun err_cv (msg)
(if msg
(princ (strcat " Error - " msg))
)
(setq *error* cverr cverr nil)
(princ)
(princ "\n\n* Teclee CV o ENTER para volver a ejecutar el comando *")
) ;_end defun errcv
;; ///////////////////////////////////////////////////////////////
(defun c:cv (/ cverr blk_name blk_lon get_block)
(setq cverr *error* *error* err_cv)
(setq blk_name (getstring "\nIndique el NOMBRE que desea asignar al bloque: "))
(while (/= (setq blk_lon (ssget "X" (list (cons 0 "INSERT") (cons 2 blk_name)))) nil)
(alert "El nombre de BLOQUE indicado ya existe en el dibujo actual \n Por favor, designe un nombre distinto.")
(setq blk_name (getstring "\nIndique el NOMBRE que desea asignar al bloque: "))
)
(command "_pasteblock" pause)
(command "_-purge" "_b" "*" "_n")
(setq get_block (cdr (assoc 2 (entget (entlast)))))
(command "_-rename" "_b" get_block blk_name)
(princ "\n\n* Teclee CV o ENTER para volver a ejecutar el comando *")
(princ)
) ;end defun cv
(princ "\n\n* Nuevo comando \"CV\" cargado - Designed by J.S.R./santos_jsr@hotmail.com *")
(princ)
Espero que te sirva. Un saludo
- Paco Fernandez
- Moderador
- Mensajes: 1018
- Registrado: Jue Jul 06, 2006 11:30 am
- Ubicación: BADAJOZ
- Contactar:
PERFECTO Afga, va de maravilla.
Tambien puse este post en Hispacad y en Soportecad y hoy me han mandado una rutina lisp que funciona tambien perfectamente, la unica diferencia es que la rutina hay que cargarla antes de usarla, o bien hacerle que se cargue al iniciar el programa.
La verdad que no sabeis lo bueno que es saber hacer estas cosas, yo ni p***tera idea y me jode muchas veces tener que tirar de los sabios y maestros del lisp.
MUCHAS GRACIAS DE NUEVO.
P.D. Si alguien quiere la rutina que lo diga y se la mando.
SALUDOS.
Tambien puse este post en Hispacad y en Soportecad y hoy me han mandado una rutina lisp que funciona tambien perfectamente, la unica diferencia es que la rutina hay que cargarla antes de usarla, o bien hacerle que se cargue al iniciar el programa.
La verdad que no sabeis lo bueno que es saber hacer estas cosas, yo ni p***tera idea y me jode muchas veces tener que tirar de los sabios y maestros del lisp.
MUCHAS GRACIAS DE NUEVO.
P.D. Si alguien quiere la rutina que lo diga y se la mando.
SALUDOS.
- Paco Fernandez
- Moderador
- Mensajes: 1018
- Registrado: Jue Jul 06, 2006 11:30 am
- Ubicación: BADAJOZ
- Contactar:
Paco compruebalo bien como tienes todos los archivos, ... y me dices para intentar buscar mejor la respuesta, o si lo has cargado correctamente, etc,...
De todas formas te dejo lo que dice la ayuda de AutoCAD en cuanto a su modo de comportamiento a la hora de buscar, cargar y modificar los archivos MNU, MNC, MNS y MNL y el orden en los que los busca y actua sobre ellos. Quizas pueda depender de algo de esto, y por eso no vaya bien. Aunque es raro que si ayer te funcionó hoy no lo haga, compruebalo y nos dices.
Un saludo
De todas formas te dejo lo que dice la ayuda de AutoCAD en cuanto a su modo de comportamiento a la hora de buscar, cargar y modificar los archivos MNU, MNC, MNS y MNL y el orden en los que los busca y actua sobre ellos. Quizas pueda depender de algo de esto, y por eso no vaya bien. Aunque es raro que si ayer te funcionó hoy no lo haga, compruebalo y nos dices.
Código: Seleccionar todo
Trabajo con los distintos tipos de archivos de menús
Al editar o crear un archivo MNU, la siguiente vez que se carga, AutoCAD lo compila y genera ciertos archivos. El término archivo de menús se emplea para designar cualquier grupo de archivos que funcionan conjuntamente para definir la interfaz de usuario, tal como se describe en la siguiente tabla. Cuando se carga o descarga un archivo de menús, el cuadro de diálogo Seleccionar archivo de menús puede incluir archivos MNU, MNC o MNS. Puede seleccionar cualquiera de estos archivos para cargar el menú que desee.
Los tipos de archivos de menús y sus orígenes se describen en la tabla.
Tipo de archivo
Descripción
MNU
Archivo de menús ASCII original. Es el archivo que se suele editar o crear.
MNC
Archivo de menús compilado. Archivo binario que contiene las cadenas de comando y la sintaxis de menú que definen el funcionamiento y el aspecto del menú o de cualquier otro elemento de la interfaz. AutoCAD compila este archivo cuando carga un archivo MNU por primera vez.
MNR
Archivo de recursos de menús. Archivo binario que contiene los mapas de bits utilizados por el menú u otro elemento de la interfaz. AutoCAD genera este archivo siempre que compila un archivo MNC.
MNS
Archivo de menús fuente. Archivo ASCII idéntico al archivo MNU pero que no incluye comentarios ni formatos especiales. AutoCAD modifica este archivo siempre que cambia el contenido del archivo de menús.
MNT
Archivo de recursos de menús. Este archivo se genera únicamente cuando no está disponible el archivo MNR, como por ejemplo cuando es de sólo lectura.
MNL
Archivo de menús LISP. Contiene expresiones AutoLISP empleadas por el archivo de menús. El archivo se carga en la memoria cuando se va a cargar un archivo de menús que tiene el mismo nombre.
AutoCAD busca y carga el archivo especificado conforme a la siguiente secuencia. Esta misma secuencia se utiliza cuando AutoCAD carga un menú nuevo.
AutoCAD busca un archivo de menús fuente (MNS) con el nombre dado, siguiendo el procedimiento de búsqueda de biblioteca.
Si se encuentra un archivo MNS, AutoCAD busca en el mismo directorio un archivo de menús compilado (MNC) que tenga el mismo nombre. Si AutoCAD encuentra un archivo MNC que tenga una fecha y una hora iguales o posteriores a las del archivo MNC, carga el archivo MNC. De lo contrario, AutoCAD compila el archivo MNS, genera un nuevo archivo MNC en el mismo directorio y carga ese archivo.
Si no se encuentra un archivo MNS, AutoCAD busca un archivo de menús compilado (MNC) con el nombre especificado, siguiendo el procedimiento de búsqueda de biblioteca. Si AutoCAD encuentra el archivo MNC, lo carga.
Si no se encuentra ningún archivo MNS ni MNC, AutoCAD busca en la ruta de la biblioteca un archivo de plantilla de menús (MNU) que tenga el mismo nombre. Si no se encuentra el archivo, AutoCAD compila un archivo MNC, genera un archivo MNS y, a continuación, carga el archivo MNC.
Si no se encuentra ningún archivo con el mismo nombre, AutoCAD muestra un mensaje de error y pide al usuario que especifique otro nombre de archivo de menús.
Después de encontrar, compilar y cargar el archivo MNC, AutoCAD busca un archivo de menús LISP (MNL) siguiendo el procedimiento de búsqueda de biblioteca. Si lo encuentra, evalúa las expresiones AutoLISP de ese archivo.
El archivo acad.mnl contiene los códigos AutoLISP que usa el archivo de menús estándar acad.mnu. El archivo acad.mnl se carga cada vez que se carga el archivo acad.mnu.
Siempre que AutoCAD compila un archivo MNC, genera un archivo MNR (un archivo de recursos de menús que contiene los mapas de bits que usa el menú) y también un archivo MNS (un archivo ASCII que inicialmente es idéntico al archivo MNU, pero sin incluir comentarios ni formatos especiales). AutoCAD modifica el archivo MNS cada vez que, a través de la interfaz, se realizan cambios en el contenido del archivo de menús (por ejemplo, cuando se utiliza PERSONALIZAR para modificar el contenido de una barra de herramientas).
Aunque la posición inicial de las barras de herramientas se define en el archivo MNU o MNS, los cambios realizados en el estado mostrar/ocultar y anclada/flotante o en la posición de las barras de herramientas se graban en el registro del sistema. Una vez creado el archivo MNS, éste se utiliza como fuente para generar archivos MNC y MNR posteriores. Si modifica el archivo MNU después de generar un archivo MNS, debe usar el comando OPCIONES para cargar explícitamente el archivo MNU de manera que AutoCAD genere archivos de menús nuevos y reconozca los cambios efectuados.
Nota Si ha modificado las barras de herramientas mediante la interfaz, deberá cortar y pegar las partes editadas del archivo MNS en el archivo MNU antes de borrar el primero.
Comentarios?
-
- Jefe
- Mensajes: 442
- Registrado: Mié Ago 30, 2006 9:35 am
- Ubicación: Bizkaia-Nafarroa
- Contactar:
A mi me pasaba lo mismo...vaya! en cuanto tenga un momento, que no son demasiados, lo pruebo... por cierto, el saber aplicar las rutinas es muy complicado?kroke escribió:funciona muy bien, es una de esas cositas, que muchas veces me habia planteado a la hora de hacer un copia-pega que lo insertara con nombre para luego poder contarlos sin problemas o renombrarlos.
WEB: http://www.pulgarcitosegundamano.es/
TWITTER: @Pulgarcito2mano
FACEBOOK: http://www.facebook.com/pulgarcitosegundamano
TWITTER: @Pulgarcito2mano
FACEBOOK: http://www.facebook.com/pulgarcitosegundamano
Considero que no Akasha. Es cargar dicha aplicación como cualquier otra, y luego funciona como otro comando de AutoCAD. Por ejemplo la orden CV que mostré es muy sencillita, tan solo es seguir los pasos o dar los datos, que la propia aplicación te va solicitando.
Espero que sea a lo que te referias.
Espero que sea a lo que te referias.
- Paco Fernandez
- Moderador
- Mensajes: 1018
- Registrado: Jue Jul 06, 2006 11:30 am
- Ubicación: BADAJOZ
- Contactar:
¿Quién está conectado?
Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 33 invitados