AutoCad - AYUDA RUTINA PARA SELECCIONAR Y PEGAR COMO BLOQUE

 
Vista:
sin imagen de perfil
Val: 13
Ha disminuido su posición en 3 puestos en AutoCad (en relación al último mes)
Gráfica de AutoCad

AYUDA RUTINA PARA SELECCIONAR Y PEGAR COMO BLOQUE

Publicado por Antonio José (6 intervenciones) el 22/06/2020 09:43:52
Buenos días a todos y gracias de antemano. Me llamo Antonio, soy delineante y trabajo con autocad 2017 y solidworks 2018.
Por desgracia no soy programador ni tengo conocimientos de visual basic, ni tengo la capacidad ni conocimientos para crearme una rutina que para mi trabajo diario sería increible.

He invertido varias horas intentando encontrar en diferentes foros una rutina que me pueda servir.. pero no encuentro lo que busco o no hacen exactamente lo que necesito.

En mi trabajo, necesito constantemente seleccionar diferentes entidades al mismo tiempo (bloques, lineas, polilineas, sombreados,...) , copiarlas con punto base y pegarlas como bloque exactamente en esa misma localización ( @0,0,0). Para ello realizo lo siguiente:
- Primero selecciono todas las entidades que me interesan,
- Después utilizo la combinación "Ctrl+shift+C" para ejecutar el "copiar con punto base" .
- Selecciono el punto, despues borro lo seleccionado "B+INTRO"
- Finalmente uso la combinación "Ctrl+Shift+V" para "Pegar como bloque" e indico el "@,0,0,0" como punto de inserción de dicho bloque para que se quede exactamente donde estaba.

Mi petición es crear una rutina de autolisp, para que: seleccionando las entidades deseadas y escribiendo por ejemplo "sc" (specialCut) y dando al Intro automáticamente me pida indicar el punto base y una vez le selecciones ese vértice o punto medio automáticamente borre todo y me lo pegue en el sitio como bloque ( es decir que lo pegue en @0,0,0 como coordenada predefinida.

Para el nivel de conocimientos que hay en este foro no debe ser complicado.. a mi me parece "un mundo" y me ahorraría mucho la fatiga muscular de mi mano izq....

Un saludo y nuevamente gracias a todos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

AYUDA RUTINA PARA SELECCIONAR Y PEGAR COMO BLOQUE

Publicado por Raúl (1 intervención) el 22/06/2020 12:24:52
Hola, Antonio. Si en lugar de dar "Cntrl+Shift+C" das "Cntrl+Shift+X" lo que hace es cortar la selección, con lo que te ahorras borrarlo luego.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 13
Ha disminuido su posición en 3 puestos en AutoCad (en relación al último mes)
Gráfica de AutoCad

AYUDA RUTINA PARA SELECCIONAR Y PEGAR COMO BLOQUE

Publicado por Antonio José (6 intervenciones) el 22/06/2020 13:11:56
Gracias Raul, sinceramente esa opción la conozco, quizás podía haber ahorrado el paso en el enunciado de la pregunta. Te agradezco igualmente la respuesta. La rutina que solicito más bien es por ahorrar la totalidad de los pasos, no solo uno. Por ejemplo también puedo utilizar el menú contextual del ratón o crear iconos de accesos directos para hacer esas operaciones haciendo diversos clicks en distintos botones en donde cada botón sea una orden o comando diferente. Pero ese no es el objetivo, sino que mediante un único comando "sc" automáticamente me pida elementos a seleccionar, luego un punto y que automáticamente me pegue el bloque en el mismo sitio y poder repetir la operación con tan solo 2 pulsaciones de la barra espaciadora ( primera finaliza el comando y la siguiente repite el ultimo usado como ya todos sabeis si usais autocad) . Realizar la combinación de comandos por teclado , incluir el "@" que necesito con toda la mano estirada o el uso simultaneo de las 2 teniendo que soltar el ratón, así como lo alejado que queda el "0" de todo lo demás.. etc etc.. 8 horas diarias me deja los tendones de la mano izquierda hechos trizas. Por lo que aunque parezca una tontería de rutina lo que pido.. almenos en mi profesión y para lo que hago en mi trabajo, me daría la vida !!!.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 1.285
Oro
Ha mantenido su posición en AutoCad (en relación al último mes)
Gráfica de AutoCad

AYUDA RUTINA PARA SELECCIONAR Y PEGAR COMO BLOQUE

Publicado por Gerardo (987 intervenciones) el 04/07/2020 06:14:19
Hola
Quieres aprender a hacer una rutina de forma fácil?
Dicen que es mejor enseñar a pescar que regalar el pescado. Te doy ambas cosas:

Una función de Autolisp tiene esta estructura
1
2
3
(defun c:XXX nil
   -INSTRUCCIONES
)

donde XXX es el nombre del comando a definir, en NIL van los parametros pero por ahora puedes dejarlo así, con la palabra NIL e instrucciones es una serie de funciones entre paréntesis que definen las acciones. Por ahora te muestro un par de funciones:

COMMAND. Recibe una serie de textos y parametros en el orden en que los digitarías en linea de comandos y los envía a la consola como si lo estuvieras escribiendo manualmente. Por ejemplo:
1
(command "_Circle" "10,10" 5.2 "_chprop" "last" "" "color" 6 "")
dibuja un círculo de radio 5.2 y centro en 10,10. Una cadena vacía "" es como un intro para terminar una selección o elegir la opción por defecto.

Cuando los comandos tienen pausas para que el usuario seleccione un objeto o un punto se puede colocar la palabra PAUSE. Ejemplo:
1
(command "_Circle" "10,10" PAUSE "_chprop" "last" "" "color" 6 "")
Ese pondría el centro del circulo en 10,10, le pasaría el control al usuario para que este defina el radio y continuaría después con el cambio de color

SSGET. Esta sirve para pedirle al usuario que haga toda una seleccion, porque a veces el PAUSE funciona bien para seleccionar uno solo objeto pero no un conjunto
Un ejemplo con seleccion de multiples objetos:
1
2
3
(defun c:Prueba nil
    (command "_copy" (ssget) "" PAUSE "@18,0" "")
)
Esa copia lo que el usuario seleccione 18 unidades a la derecha

Aquí está tu función resuelta con ese método y los mismos comandos que tu usas:
1
2
3
(defun c:SC nil
	(command "_copybase" PAUSE (SSGET) "" "_erase" "_Previous" "" "_Pasteblock" "@0,0,0")
)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 1.285
Oro
Ha mantenido su posición en AutoCad (en relación al último mes)
Gráfica de AutoCad

AYUDA RUTINA PARA SELECCIONAR Y PEGAR COMO BLOQUE

Publicado por Gerardo (987 intervenciones) el 04/07/2020 07:23:14
Ahora unas acotaciones adicionales, por si alguna no la sabías y te interesa profundizar en el tema:

1-Fíjate que yo escribo los comandos en inglés (es como los conozco) y coloco un guion bajo antes. Esto es para que el comando en inglés sea reconocido en un cad en cualquier otro idioma. Entonces para que la rutina funcione en el ACad en español debe escribirse de alguna de estas formas:

(command "_copy" "_all" PAUSE PAUSE)
o
(command "copia" "todo" PAUSE PAUSE)


2-Mencionaste que sabes hacer botones. Puede meter esa misma secuencia de comandos en un botón. Así tendrías el comando en un solo click. En este caso el \ tendrá la misma limitación que el PAUSE, y en una macro de botón no puedes poner el (ssget), pero se soluciona con el comando "Select" para seleccionar primero y luego la opción "prevoius" (ultima seleccion)
Esta sería tu macro de botón:
^C^C_select \_copybase \_previous ;_erase _previous ;_pasteblock @0,0


3-Otra función que te servirá mucho:
SETQ Esta asigna un valor a una variable. Por ejemplo
1
(SETQ Var1 12)
guarda el valor 12 en la variable Var1. Si despues pones esto en linea de comandos (+ Var1 6) sumará 12 + 6 y te devolverá el 18.
1
(SETQ Seleccion (SSGET))
Tomará un conjunto seleccion del usuario y lo guardará en la variable Seleccion

Si vas a usar un valor varias veces puedes guardarlo en una variable y cada vez que se te pida el valor llamas la variable y será como poner el valor. Por ejemplo con tu misma rutina:

1
2
3
4
5
6
(defun c:test1 ()
	(setq seleccion (ssget)
			pt	(getpoint "Punto:")
	)
	(command "_copybase" pt seleccion "" "_erase" seleccion "" "_pasteblock" "_non" pt)
)
Esta primero guarda la seleccion y el punto. Así usa el punto guardado tanto para copiar como para pegar después, y la seleccion de objetos tanto para copiarla al portapapeles como para borrar los objetos después


4-Cuando usas puntos para insertar conviene colocar el "_non" para que el osnap no tome accidentalmente un punto magnético y te quede desplazada la inserción. Ahora, el procedimiento estandar para convertir tus objetos en bloques es el comando "Block", con la opción "Convert to block" para que de una vez se borre la selección y quede el bloque en el sitio. Este no tiene el problema del osnap, pero si que tiene algo adicional, requiere ponerle un nombre, en cambio el pasteblock le pone un nombre generico (que es la posicion de memoria donde se guardo el bloque - una vez en miles podría coincidir con otro bloque que se creó en la misma posición e insertar el bloque que ya existe. En 25 años me ha pasado solo una vez)
Que tal que queramos ponerle un nombre unico a un bloque, esta función crea una cadena juntando las variables cdate y millisecs, o sea, la fecha hora y milisegundo en que se ejecuta esa parte de la rutina:
1
2
3
4
5
6
(defun c:test2 ()
	(setq seleccion (ssget)
			nombre (strcat (rtos (getvar "CDATE") 2 16)(itoa (getvar "millisecs")))
	)
	(command "_-block" nombre "_O" "_C" PAUSE seleccion "")
)
Una ventaja de usar block en vez de copybase-pasteblock es que si tienes algo en el portapapeles de windows como un texto o celdas de excel, el autocad no las sobreescribe y se mantienen ahí.

Suerte!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 13
Ha disminuido su posición en 3 puestos en AutoCad (en relación al último mes)
Gráfica de AutoCad

AYUDA RUTINA PARA SELECCIONAR Y PEGAR COMO BLOQUE

Publicado por Antonio José (6 intervenciones) el 06/07/2020 09:43:35
Muchisimas gracias Gerardo, no sólo por la respuesta en sí, sino por tomarte la molestia de ENSEÑARME o darme unas clases prácticas de lo básico. Voy a guardarme todas estas explicaciones en un word aparte y guardarlo como oro jajaja
Descubrí una compañera de trabajo que hace unos 15 años que no enreda ni creaba rutinas pero que en su día había hecho unos cursos y de alguna cosa se acordaba. Entre tus indicaciones, lo que me aportó la compañera y mis propias indagaciones viendo y comparando muchas autolisp con usos parecidos he ideado una rutina que cumple perfectamente con lo que necesitaba.. hasta la adorne un poquito con alguna cosita extra:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
(defun c:ww()
(setq pto_base (getpoint "\nIndica el Punto Base:"))
 
    (prompt "\nIndica objetos:")
	(setq entidad_bloque (ssget ) ;"_:S")
    )
(setq nombre_b  (rtos (getvar "cdate") 2 6))
(command "_-block" nombre_b pto_base entidad_bloque "")
(command "-insert" nombre_b pto_base "1" "1" "0")
 
(prompt "\n--------------------------------------")
(prompt "\nBloque Creado Correctamente")
(prompt "\n--------------------------------------")
(prompt "\nRenombrando Bloque Nuevo")
(prompt "\n--------------------------------------")
 
(setq name_old nombre_b)
(setq name_new (getstring (strcat "\n Nombre actual < " (strcase name_old) " >  Nuevo Nombre (Sin Espacios) : " ) ) )
 
(command"_.rename""_b"name_old name_new)
(alert (strcat
    	"/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/"
    	"\n/_/ ··· PHB WESERHÜTE ··· RENOMBRA BLOQUES..._/_/"
	"\n/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/"
        "\n/_/"
    	"\n/_/ ][Nombre anterior][===> "(strcase name_old)
    	"\n/_/"
    	"\n/_/ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "
	"\n/_/"
   	"\n/_/ ][Nuevo nombre][====> "(strcase name_new)
    	"\n/_/"
	"\n/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/"
   	"\n______________________________________________________"
    	"\n Antonio Jose Moreno  © 2020   -   AMB "
      )
   )
(princ)
(princ)
)

Sólo tengo una duda más, cuando aparece el cuadro informativo , por algún motivo me coloca una "Â" delante de algunos símbolos o caracteres en esta rutina que hice ( rutina frankstentein con ideas y consejos de varios sitios ) sin embargo en la rutina original de donde saque esta idea de agregar un cuadro informativo para confirmar los cambios aparece perfectamente y sin esos símbolos....

Captura

Que le falta a mi rutina de arriba? o que le sobra o por qué me mete autocad esos simbolos? adjunto foto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 1.285
Oro
Ha mantenido su posición en AutoCad (en relación al último mes)
Gráfica de AutoCad

AYUDA RUTINA PARA SELECCIONAR Y PEGAR COMO BLOQUE

Publicado por Gerardo (987 intervenciones) el 06/07/2020 10:58:57
Me alegro que te sirviera y además que te animaras a programar lo tuyo. Excelente iniciativa

Ese cambio de caracteres debe ser porque usas fuentes diferentes en el VLIDE y en el tema de Windows.

Los caracteres se guardan en bytes, o sea como números. Internamente la 'A' se guarda como 65 y la 'a' como 97 que son sus códigos ascii respectivos. Los tipos de letra transforman esos numeros en la gráfica de cada caracter para mostrarlo, y entre fuentes no estandarizadas para caracteres raros podrían haber inconsistencias.

El VLIDE se configura con una fuente que tu eliges, pero los diálogos dentro del Autocad no se les puede configurar fuente, usan necesariamente la misma que está configurada en Windows para todas las aplicaciones.

Revisando mi Winddows 7 y mi VLIDE (acad 2021) veo que ambos tienen la misma fuente, una llamada "Consolas". Cambié la del VLIDE por una llamada "Terminal" y ahí los puntos se cambiaron por esa A con tilde.

Revisa la tuya a ver si son diferentes y prueba a igualarlas ya sea en el panel de control para Windows o en el vlide
Untitled
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 13
Ha disminuido su posición en 3 puestos en AutoCad (en relación al último mes)
Gráfica de AutoCad

AYUDA RUTINA PARA SELECCIONAR Y PEGAR COMO BLOQUE

Publicado por Antonio José (6 intervenciones) el 07/07/2020 09:26:41
Arreglado, muchas gracias Gerardo.

Un saludo !!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 1.285
Oro
Ha mantenido su posición en AutoCad (en relación al último mes)
Gráfica de AutoCad

AYUDA RUTINA PARA SELECCIONAR Y PEGAR COMO BLOQUE

Publicado por Gerardo (987 intervenciones) el 07/07/2020 14:04:32
Con gusto .
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar