AutoCad - DIR en autolisp

 
Vista:
Imágen de perfil de Juanma
Val: 171
Bronce
Ha mantenido su posición en AutoCad (en relación al último mes)
Gráfica de AutoCad

DIR en autolisp

Publicado por Juanma (140 intervenciones) el 19/08/2019 13:32:44
Buenas,

He creado una Lisp q te inserta todos los dwg de la carpeta en la q esté el archivo abierto.

El problema es que no consigo que funcione bien del todo.

En concreto esto:

(Command "dir" "/b */dwg > temp.xls")

Esto se supone que creaun Excel con una lista de los archivos dwg de la carpeta, para luego leerlo y poder copiarlos.

En AutoCAD 2007 si funciona, pero en el 2016 no hay manera ( un par de veces si funcionó)

Mensaje escrito desde móvil de memoria, pero el Código en la app esta bien escrito.
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
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

DIR en autolisp

Publicado por Gerardo (986 intervenciones) el 19/08/2019 18:49:39
Hola
No es recomendable utilizar comandos externos como dir, del, shell, etc en una rutina. Esto porque no están en el nucleo del autocad, sino que este los invoca desde el sistema operativo y muestra la salida, pero utilizar esta salida como parametro de otras funciones puede resultar en cualquier cosa.

Para eso autolisp tiene funciones como "vl-directory-files" que te lista todos los archivos de un directorio

Esta linea por ejemplo te listará todos los dwgs en la carpeta del archivo actual

1
(vl-directory-files (getvar "dwgprefix") "*.dwg" 1)

y esto que sigue insertaría todos los bloques de la carpeta en el dibujo actual. Fijate con el IF que debemos comprobar si los nombres son diferentes al del archivo actual, ya que el propio archivo actual aparecerá en la lista y tratar de insertarlo en él mismo te generaría un error de referencia cruzada

1
2
3
4
5
6
7
8
9
(foreach archivo
			(vl-directory-files (getvar "dwgprefix") "*.dwg" 1)
			(if (/= archivo (getvar "dwgname"))
				(progn
					(command "_-insert" archivo)
					(command)
				)
			)
)
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
Imágen de perfil de Juanma
Val: 171
Bronce
Ha mantenido su posición en AutoCad (en relación al último mes)
Gráfica de AutoCad

DIR en autolisp

Publicado por Juanma (140 intervenciones) el 19/08/2019 20:10:09
Muchas gracias Gerardo. Se nota muy mucho que realmente controlas el tema. Trataré de implementarlo en mi rutina (ponerle punto de inserción que cambia en cada bloque y poco más).
Podrías describir (un poco solo) entradas y retorno de ese comando? Es que no término de verlo del todo.

Tendrías un tutorial donde aprender de esas órdenes? Lo que encuentro es poco más que para sumar números y así ando pegándome tropezones. Y ya un manual sensillo del entorno de programación... Por que hasta ahora lo hago todo en el notepad.
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

DIR en autolisp

Publicado por Gerardo (986 intervenciones) el 20/08/2019 04:13:47
Te recomiendo consultar la ayuda del autocad, en la parte de autolisp hay una referencia ordenada de todas las funciones agrupadas por funcionalidad.

En el caso de vl-directory-files el primer parámetro es el directorio a consultar, el segundo es el filtro de nombres y el tercero es una bandera que tiene 3 posibles valores: -1, 0. 1
-1 Muestra solo directorios, 0 muestra directorios y archivos y 1 muestra solo archivos

Los 3 parametros son opcionales, por defecto viene el directorio actual, todos los archivos sin filtro y la bandera en 0
puedes hacer pruebas llamando a la funcion desde la consola del VLIDE o desde la linea de comandos del ACad, para ir viendo las diferentes salidas, y eso con cualquier función de autolisp

Por ejemplo si escribes solo
(vl-directory-files)

o si pones
(vl-directory-files "c:\\")
o
(vl-directory-files (getvar "dwgprefix") "*.bak" )

como verás dwgprefix es una variable del sistema que devuelve la ruta del archivo actual y dwgname devuelve el nombre del archivo actual. Estos no son funciones de autolisp, son variables del sistema, como orthomode, filletrad, lastpoint, etc...

Luego
En el ejemplo que te pasé hay dos llamadas seguidas a command. La primera inserta el archivo. La segunda sin argumentos cancela el comando insert. Con esto lo que logro es que los archivos de los bloques sean traídos a la base de datos del dibujo actual y quedan disponibles para insertar como bloques, pero no se insertan graficamente.

Y sobre lo de los tutoriales, el manual con el que yo aprendí está en este mismo sitio web, se llama "manual de programacion y personalizacion bajo autocad de Jonathan Prestamo" y el sitio más didactico que he visto, que siempre recomiendo es la pagina afralisp.net, está en inglés pero los ejemplos y explicaciones son muy claros y acertados. Y claro, siempre están los ejemplos que vienen en la misma ayuda del autocad
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
Imágen de perfil de Juanma
Val: 171
Bronce
Ha mantenido su posición en AutoCad (en relación al último mes)
Gráfica de AutoCad

DIR en autolisp

Publicado por Juanma (140 intervenciones) el 20/08/2019 16:24:09
Mil gracias, de afralisp precisamente saqué la idea del Comando dir que junto a una Lisp con Código para acceder aún Excel conseguia listar los nombres de los archivos, para luego ir los insertando... Hoy tendré que terminar de reinstalar el PC por que me ha petado y he tenido que formatear, pero en cuanto pueda, rehago mi rutina para unir los dwg con el Código que me has pasado. Ya os iré contando.

Saludos!!
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
Imágen de perfil de Juanma
Val: 171
Bronce
Ha mantenido su posición en AutoCad (en relación al último mes)
Gráfica de AutoCad

DIR en autolisp

Publicado por Juanma (140 intervenciones) el 24/08/2019 14:44:15
Ya tengo mi rutina funcionando a las mil maravillas gracias a Gerardo. incluso me crea un excel con los nombres de los archivos que copia.
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