Está en la página 1de 576

CURSO PRCTICO DE PERSONALIZACIN Y

PROGRAMACIN BAJO AutoCAD 14


(vlido para el nuevo AutoCAD 2000)

CADENCIA DE APARICIN DE MDULOS y APNDICES EN WEB:
Mdulo 1 en ENERO 1999
Mdulo 2 en FEBRERO 1999
Mdulos 3 y 4 en MARZO 1999
Mdulo 5 en ABRIL 1999
Mdulo 6 en MAYO 1999
Mdulos 7 y 8 en J UNIO 1999
Mdulo 9 en J ULIO 1999
Mdulo 10 en AGOSTO 1999
Mdulo 11 en SEPTIEMBRE 1999 (dividido en 8 partes, dos cada semana del mes)
Mdulo 12 en OCTUBRE 1999 (dividido en 8 partes, dos cada semana del mes)
Mdulo 13 en NOVIEMBRE 1999
Apndices A, B, C y D en DICIEMBRE 1999
Apndices E, F, G y H en ENERO 2000


PROGRAMACIN DEL CURSO:

PARTE PRIMERA
MDULO UNO: Personalizacin de mens.
UNO.1. INTRODUCCIN
UNO.2. EL ARCHIVO ACAD.MNU
UNO.2.1. Las secciones ***BUTTONS y ***AUX
UNO.2.2. Mens desplegables (secciones ***POP)
UNO.2.3. Las barras de herramientas (la seccin ***TOOLBARS)
UNO.2.4. La seccin ***IMAGE de mens de imgenes
UNO.2.5. El arcaico men de pantalla de AutoCAD bajo la seccin ***SCREEN
UNO.2.6. Configuracin del tablero digitalizador bajo las secciones ***TABLET
UNO.2.7. ***HELPSTRINGS; las cadenas de ayuda
UNO.2.8. Teclas rpidas bajo ***ACCELERATORS
UNO.3. SUBMENS
UNO.3.1. Referencias a submens
UNO.3.1.1. Llamadas a los submens de las distintas secciones
UNO.4. CARACTERES ESPECIALES, DE CONTROL Y OTROS MECANISMOS
UNO.4.1. Caracteres Especiales
UNO.4.2. Caracteres de Control
UNO.4.3. Otros mecanismos y apuntes
UNO.4.3.1. Opciones de men mediante DIESEL
UNO.4.3.2. Variable MENUCTL
UNO.4.3.3. Creacin y uso de mens de macros
UNO.4.3.3.1. Funcionamiento de MC.EXE
UNO.4.4. Uso de la orden externa EDIT
UNO.5. CARGA Y DESCARGA DE MENS EN AutoCAD
UNO.6. EJEMPLOS PRCTICOS DE MENS
UNO.6.1. Men desplegable simple
UNO.6.2. Mens desplegables
UNO.6.3. Men de imagen y desplegable
UNO.6.4. Men completo de cartografa
UNO.FIN.EJERCICIOS PROPUESTOS
EJERCICIOS RESUELTOS DEL MDULO UNO
MDULO DOS: Personalizacin de barras de herramientas desde AutoCAD 14.
DOS.1. INTRODUCCIN
DOS.2. EL PRIMER ACERCAMIENTO
DOS.3. NUESTRA BARRA DE HERRAMIENTAS
DOS.3.1. Aadiendo botones a la barra
DOS.3.2. Aadiendo un botn vaco
DOS.3.3. Editar el icono del botn
DOS.4. BOTONES DESPLEGABLES
DOS.5. COPIA Y DESPLAZAMIENTO DE BOTONES
DOS.6. COMPROBANDO EL .MNS
DOS.7. EJEMPLOS PRCTICOS DE BOTONES
DOS.7.1. Insertar DWG's en el 0,0
DOS.7.2. Matriz de pentgonos
DOS.7.3. Insercin de formatos desplegable
DOS.FIN. EJERCICIOS PROPUESTOS
EJERCICIOS RESUELTOS DEL MDULO DOS
MDULO TRES: Creacin de tipos de lnea.
TRES.1. TIPOS DE LNEA EN AutoCAD 14
TRES.2. PODEMOS CREAR O PERSONALIZAR UN .LIN
TRES.2.1. Examinando el ACADISO.LIN
TRES.2.2. Sintaxis de personalizacin
TRES.2.2.1. Creacin desde un editor ASCII
TRES.2.2.2. Tipos de lnea complejos
TRES.2.2.3. Creacin desde la lnea de comandos
TRES.3. CARGAR TIPOS DE LNEA CREADOS
TRES.4. EJEMPLOS PRCTICOS DE TIPOS DE LNEA
TRES.4.1. Tipo simple 1
TRES.4.2. Tipo simple 2
TRES.4.3. Tipo complejo 1
TRES.4.4. Tipo complejo 2
TRES.4.5. Tipo complejo 3
TRES.FIN. EJERCICIOS PROPUESTOS
EJERCICIOS RESUELTOS DEL MDULOS TRES
MDULO CUATRO: Creacin de patrones de sombreado.
CUATRO.1. PATRONES DE SOMBREADO
CUATRO.2. SINTAXIS DE LA DEFINICIN
CUATRO.3. TCNICA DE CREACIN
CUATRO.4. UTILIZANDO EL PATRN DEFINIDO
CUATRO.4.1. Iconos del men de imagen
CUATRO.5. EJEMPLOS PRCTICOS DE PATRONES DE SOMBREADO
CUATRO.5.1. Patrn slido
CUATRO.5.2. Patrn simple inclinado
CUATRO.5.3. Patrn de lneas cruzadas a 90 grados
CUATRO.5.4. Patrn de hexgonos
CUATRO.FIN. EJERCICIOS PROPUESTOS
EJERCICIOS RESUELTOS DEL MDULOS CUATRO
MDULO CINCO: Definicin de formas y tipos de letra.
CINCO.1. INTRODUCCIN
CINCO.2. ARCHIVOS DE FORMAS PROPIOS
CINCO.2.1. Sintaxis de creacin de formas
CINCO.2.2. Cmo cargar e insertar formas
CINCO.2.3. Compilando el fichero .SHP
CINCO.2.4. Cdigos especiales
CINCO.3. ARCHIVOS DE TIPOS DE LETRA
CINCO.3.1. Utilizar los tipos de letras creados
CINCO.3.2. Tipos de letra Unicode
CINCO.3.3. Tipos de letra grande y grande extendido
CINCO.3.3.1. Utilizar estos tipos de letra grande
CINCO.3.4. Soporte PostScript
CINCO.4. EJEMPLOS PRCTICOS DE FORMAS Y TIPOS DE LETRA
CINCO.4.1. Cuadrado con diagonales
CINCO.4.2. Subforma anterior y tringulos
CINCO.4.3. Nmero ocho simple
CINCO.4.4. Letra G mayscula romnica
CINCO.4.5. Letra n minscula gtica
CINCO.FIN. EJERCICIOS PROPUESTOS
EJERCICIOS RESUELTOS DEL MDULOS CINCO
MDULO SEIS: Creacin de archivos de ayuda.
SEIS.1. INTRODUCCIN A LOS ARCHIVOS DE AYUDA
SEIS.2. LA AYUDA DE AutoCAD 14. FORMATO .AHP
SEIS.2.1. Visualizacin del archivo en AutoCAD
SEIS.2.2. Introduciendo ms temas
SEIS.2.3. Retornos suaves, tabulaciones y sangras
SEIS.2.4. Vnculos de hipertexto
SEIS.2.5. Archivos de ayuda en directorios de slo lectura
SEIS.3. FORMATO WINDOWS. ARCHIVOS .HLP
SEIS.3.1. Microsoft Help Workshop
SEIS.3.2. Aadiendo temas a la pestaa Contenido
SEIS.3.3. Aadiendo temas a ndice y Buscar
SEIS.3.4. Utilizar los archivos .HLP desde AutoCAD
SEIS.4. AYUDA EN FORMATO HTML
SEIS.4.1. Aadiendo temas HTML a Contenido
SEIS.5. EJEMPLOS PRCTICOS DE ARCHIVOS DE AYUDA
SEIS.5.1. Ayuda a nuevos comandos creados
SEIS.5.2. Documentacin sobre un comando nuevo
SEIS.FIN. EJERCICIOS PROPUESTOS
EJERCICIOS RESUELTOS DEL MDULOS SEIS
MDULO SIETE: Creacin de rdenes externas, redefinicin y abreviaturas a comandos.
SIETE.1. INTRODUCCIN
SIETE.2. DEFINICIN DE COMANDOS EXTERNOS
SIETE.2.1. Comandos externos a nivel MS-DOS
SIETE.2.2. Reiniciar el archivo ACAD.PGP
SIETE.2.3. Comandos externos Windows
SIETE.3. ABREVIATURAS A COMANDOS
SIETE.4. REDEFINICIN DE COMANDOS DE AutoCAD
SIETE.5. EJEMPLOS PRCTICOS DE COMANDOS EXTERNOS Y ABREVIATURAS
SIETE.5.1. Comandos externos MS-DOS
SIETE.5.2. Comandos externos Windows
SIETE.FIN. EJERCICIOS PROPUESTOS
EJERCICIOS RESUELTOS DEL MDULO SIETE
MDULO OCHO: Fotos, fototecas y archivos de guin.
OCHO.1. LAS FOTOS DE AutoCAD 14
OCHO.1.1. Fotos de mayor rendimiento
OCHO.2. FOTOTECAS O BIBLIOTECAS DE FOTOS
OCHO.3. UTILIZACIN DE FOTOS Y FOTOTECAS
OCHO.3.1. En lnea de comandos de AutoCAD
OCHO.3.2. En macros
OCHO.3.3. En mens de imgenes
OCHO.3.4. En patrones de sombreado. El programa SlideManager
OCHO.4. ARCHIVOS DE GUIN
OCHO.4.1. Ejecutando archivos scripts
OCHO.4.2. Retardos con RETARDA
OCHO.4.3. Repeticiones con RSCRIPT
OCHO.4.4. Reanudar con REANUDA
OCHO.4.5. Carga de fotos antes de su visualizacin
OCHO.4.6. Otros archivos de guin
OCHO.4.7. Ejecucin de guiones en el arranque
OCHO.5. EJEMPLOS PRCTICOS DE ARCHIVOS DE GUIN
OCHO.5.1. Ejemplo 1
OCHO.5.2. Ejemplo 2
OCHO.FIN. EJERCICIOS PROPUESTOS
EJERCICIOS RESUELTOS DEL MDULO OCHO
PARTE SEGUNDA
MDULO NUEVE: Lenguaje DIESEL y personalizacin de la lnea de estado.
NUEVE.1. INTRODUCCIN
NUEVE.2. LA VARIABLE MODEMACRO
NUEVE.3. EL LENGUAJE DIESEL
NUEVE.3.1. Catlogo de funciones DIESEL
NUEVE.3.2. DIESEL para la lnea de estado
NUEVE.3.3. Expresiones DIESEL en mens
NUEVE.3.3.1. DIESEL entre corchetes
NUEVE.3.3.2. DIESEL en la macro
NUEVE.3.4. Expresiones DIESEL en botones
NUEVE.3.5. Expresiones DIESEL en archivos de guin
NUEVE.3.6. Variables USERn1 a USERn5 y MACROTRACE
NUEVE.4. EJEMPLOS PRCTICOS EN DIESEL
NUEVE.4.1. Lnea de estado 1
NUEVE.4.2. Lnea de estado 2
NUEVE.4.3. Lnea de estado 3
NUEVE.4.4. Visibilidad de objetos Proxy
NUEVE.4.5. Orden de objetos
NUEVE.4.6. Ventanas en mosaico y flotantes
NUEVE.FIN. EJERCICIOS PROPUESTOS
EJERCICIOS RESUELTOS DEL MDULO NUEVE
MDULO DIEZ: Lenguaje DCL; personalizacin y creacin de letreros de dilogo.
DIEZ.1. LENGUAJE DCL
DIEZ.2. ESTRUCTURA JERARQUIZADA DE DISEO
DIEZ.3. TCNICA DE DISEO
DIEZ.4. LAS HERRAMIENTAS
DIEZ.4.1. Los tiles o elementos
DIEZ.4.2. Los atributos predefinidos
DIEZ.4.2.1. Atributos de ttulo, clave y valor inicial
DIEZ.4.2.2. Atributos de tamao
DIEZ.4.2.3. Atributos de limitaciones de uso
DIEZ.4.2.4. Atributos de funcionalidad
DIEZ.4.3. Los tiles y sus atributos
DIEZ.4.3.1. Grupos de componentes
DIEZ.4.3.2. Componentes individuales de accin
DIEZ.4.3.3. Componentes decorativos e informativos
DIEZ.4.3.4. Botones de salida y componentes de error
DIEZ.4.4. Elementos predefinidos
DIEZ.5. PROGRAMANDO CUADROS DCL
DIEZ.5.1. Ejemplo sencillo: letrero informativo
DIEZ.5.1.1. Cmo cargar y visualizar el cuadro
DIEZ.5.2. Ejemplo con casillas de verificacin
DIEZ.5.3. Letrero de control de variables de AutoCAD
DIEZ.5.4. Parmetros de control de una curva
DIEZ.FIN. EJERCICIOS PROPUESTOS
Ejercicios resueltos del MDULO DIEZ
PARTE TERCERA
MDULO ONCE: Programacin en AutoLISP.
ONCE.1. INTRODUCCIN
ONCE.1.1. AutoLISP, ADS, ARX, VBA y Visual Lisp
ONCE.1.1.1. Entorno AutoLISP
ONCE.1.1.2. Entorno ADS
ONCE.1.1.3. Entorno ARX
ONCE.1.1.4. Entorno VBA
ONCE.1.1.5. Entorno Visual Lisp
ONCE.2. CARACTERSTICAS DE AutoLISP
ONCE.2.1. Tipos de objetos y datos en AutoLISP
ONCE.2.2. Procedimientos de evaluacin
ONCE.2.3. Archivos fuente de programas
ONCE.2.4. Variables predefinidas
ONCE.3. PROGRAMANDO EN AutoLISP
ONCE.3.1. Convenciones de sintaxis
ONCE.4. OPERACIONES NUMRICAS Y LGICAS
ONCE.4.1. Aritmtica bsica
ONCE.4.2. Matemtica avanzada
ONCE.4.3. Operaciones relacionales
ONCE.4.4. Operaciones lgicas
ONCE.5. CREAR Y DECLARAR VARIABLES
ONCE.5.1. A vueltas con el apstrofo (')
ONCE.6. PROGRAMANDO EN UN ARCHIVO ASCII
ONCE.7. CAPTURA Y MANEJO BSICO DE DATOS
ONCE.7.1. Aceptacin de puntos
ONCE.7.2. Captura de datos numricos
ONCE.7.3. Distancias y ngulos
ONCE.7.4. Solicitud de cadenas de texto
ONCE.7.5. Establecer modos para funciones GET...
ONCE.7.5.1. Palabras clave
ONCE.8. ACCESO A VARIABLES DE AutoCAD 14
ONCE.9. ESTRUCTURAS BSICAS DE PROGRAMACIN
ONCE.10. MANEJO DE LISTAS
ONCE.11. FUNCIONES DE CONVERSIN DE DATOS
ONCE.11.1. Conversin de unidades
ONCE.11.1.1. Personalizar el archivo ACAD.UNT
ONCE.11.1.2. Ejemplos de CVUNIT
ONCE.12. MANIPULACIN DE CADENAS DE TEXTO
ONCE.13. NGULOS Y DISTANCIAS
ONCE.14. RUTINAS DE CONTROL DE ERRORES
ONCE.14.1. Definir una funcin de error
ONCE.14.2. Otras caractersticas del control de errores
ONCE.15. CARGA Y DESCARGA DE APLICACIONES
ONCE.15.1. ACADR14.LSP, ACAD.LSP y *.MNL
ONCE.15.1.1. Configuraciones mltiples
ONCE.15.1.2. Definir funcin como S::STARTUP
ONCE.15.2. Aplicaciones ADS
ONCE.15.3. Aplicaciones ARX
ONCE.15.4. Acceso a comandos externos
ONCE.15.4.1. Comandos programados en AutoLISP
ONCE.15.4.2. Comandos de transformaciones 3D
ONCE.15.4.3. Calculadora de geometras
ONCE.15.4.4. Intercambios en formato PostScript
ONCE.15.4.5. Proyeccin de slidos en ventanas
ONCE.15.4.6. Comandos de Render
ONCE.15.4.7. Intercambio con 3D Studio
ONCE.15.4.8. Comandos de ASE
ONCE.15.5. Inicio de aplicaciones Windows
ONCE.16. INTERACCIN CON CUADROS DE DILOGO
ONCE.16.1. Carga, muestra, inicio, fin y descarga
ONCE.16.2. Gestin de elementos del letrero
ONCE.16.3. Gestin de componentes de imagen
ONCE.16.4. Gestin de casillas de lista y listas desplegables
Primeros ejercicios resueltos del MDULO ONCE
ONCE.17. OTRAS FUNCIONES DE MANEJO DE LISTAS
ONCE.18. MISCELNEA DE FUNCIONES TILES
ONCE.18.1. Asegurndonos ciertos datos
ONCE.18.2. Acceso a pantalla grfica
ONCE.18.3. Lectura de dispositivos de entrada
ONCE.18.4. Atribuir expresin a smbolo literal
ONCE.19. ACCESO A OTRAS CARACTERSTICAS
ONCE.19.1. Modos de referencia
ONCE.19.2. El redibujado
ONCE.19.3. Transformacin entre Sistemas de Coordenadas
ONCE.19.4. Ventanas y vistas
ONCE.19.5. Calibracin del tablero digitalizador
ONCE.19.6. Control de elementos de men
ONCE.19.7. Letrero de seleccin de color
ONCE.19.8. Funciones de manejo de ayuda
ONCE.19.9. Expresiones DIESEL en programas AutoLISP
ONCE.19.10. Macros AutoLISP en mens y botones
ONCE.19.11. Macros AutoLISP en archivos de guin
ONCE.19.12. Variables de entorno
ONCE.20. ACCESO A LA BASE DE DATOS DE AutoCAD
ONCE.20.1. Organizacin de la Base de Datos
ONCE.20.1.1. Introduccin
ONCE.20.1.2. Estructura para entidades simples
ONCE.20.1.3. Estructura para entidades compuestas
ONCE.20.1.3.1. Polilneas no optimizadas
ONCE.20.1.3.2. Inserciones de bloque con atributos
ONCE.20.1.4. Estructura para objetos no grficos
ONCE.20.1.4.1. Capa
ONCE.20.1.4.2. Estilo de texto
ONCE.20.1.4.3. Tipo de lnea
ONCE.20.1.4.4. Definicin de bloque
ONCE.20.1.5. Cdigos de acceso a Base de Datos
ONCE.20.2. Funciones de gestin de la Base de Datos
ONCE.20.2.1. Crear un conjunto de seleccin
ONCE.20.2.2. Obtener el nombre de una entidad
ONCE.20.2.3. Extraer la lista de una entidad
ONCE.20.2.4. Actualizar lista y Base de Datos
ONCE.20.2.5. Nombre de entidad por un punto
ONCE.20.2.6. Aadir, eliminar y localizar entidades
ONCE.20.2.7. Aplicar y determinar pinzamientos
ONCE.20.2.8. Obtener nombre con modo de seleccin
ONCE.20.2.9. Otras formas de obtener nombres
ONCE.20.2.10. Borrar/recuperar entidades
ONCE.20.2.11. Obtener rectngulo de texto
ONCE.20.2.12. Construccin de una entidad
ONCE.20.2.13. Manejo de tablas de smbolos
ONCE.20.2.14. Funciones relativas a datos extendidos
Segundos ejercicios resueltos del MDULO ONCE

Parte [10/12]
ONCE.21. ACCESO A ARCHIVOS
ONCE.21.1. Fundamento terico somero sobre el acceso a archivos
ONCE.21.2. Funciones para el manejo de archivos
ONCE.22. FUNCIONES DE CHEQUEO
ONCE.22.1. Rastreo
Parte [11/12]
ONCE.23. OPERACIONES BINARIAS LGICAS
ONCE.24. GESTION DE LA MEMORIA
Parte [12/12]
ONCE.25. CDIGOS Y MENSAJES DE ERROR
ONCE.25.1. Cdigos de error
ONCE.25.2. Mensajes de error
ONCE.FIN. EJERCICIOS PROPUESTOS
Terceros ejercicios intermedios resueltos del MDULO ONCE
MDULO DOCE: Programacin en Visual Basic orientada a AutoCAD 14 (VBA).
Parte [1/8]
DOCE.1. INTRODUCCIN
DOCE.2. Visual Basic Y ActiveX Automation
DOCE.2.1. La lnea de productos de Visual Basic
DOCE.3. EL MDULO VBA DE AutoCAD 14
DOCE.4. COMENZANDO CON VBA
DOCE.4.1. La plantilla de objetos
DOCE.4.2. Comenzar un programa
DOCE.5. DIBUJO Y REPRESENTACIN DE ENTIDADES
DOCE.5.1. Lneas
DOCE.5.2. Crculos
DOCE.5.3. Elipses
DOCE.5.4. Arcos
DOCE.5.5. Puntos
DOCE.5.6. Texto en una lnea
Parte [2/8]
DOCE.5.7. Objetos de polilnea
DOCE.5.7.1. Polilneas de antigua definicin
DOCE.5.7.2. Polilneas optimizadas
DOCE.5.8. Polilneas 3D
DOCE.5.9. Rayos
DOCE.5.10. Lneas auxiliares
DOCE.5.11. Trazos
DOCE.5.12. Splines
DOCE.5.13. Texto mltiple
DOCE.5.14. Regiones
DOCE.5.15. Slidos 3D
DOCE.5.15.1. Prisma rectangular
DOCE.5.15.2. Cono
DOCE.5.15.3. Cilindro
DOCE.5.15.4. Cono elptico
DOCE.5.15.5. Cilindro elptico
DOCE.5.15.6. Esfera
DOCE.5.15.7. Toroide
DOCE.5.15.8. Cua
DOCE.5.15.9. Extrusin
DOCE.5.15.10. Extrusin con camino
DOCE.5.15.11. Revolucin
DOCE.5.15.12. Propiedades y mtodos de los slidos 3D
DOCE.5.16. Caras 3D
DOCE.5.17. Mallas poligonales
DOCE.5.18. Imgenes de trama
Parte [3/8]
DOCE.5.19. Slidos 2D
DOCE.5.20. Formas
DOCE.5.21. Acotacin, directrices y tolerancias
DOCE.5.21.1. Cotas alineadas
DOCE.5.21.2. Cotas angulares
DOCE.5.21.3. Cotas diamtricas
DOCE.5.21.4. Cotas por coordenadas
DOCE.5.21.5. Cotas radiales
DOCE.5.21.6. Cotas giradas
DOCE.5.21.7. Directrices
DOCE.5.21.8. Tolerancias
DOCE.5.22. Sombreado
DOCE.5.23. Referencias a bloques
DOCE.5.24. Atributos de bloques
DOCE.5.24.1. Referencias de atributos
DOCE.5.24.2. Objeto de atributo
Parte [4/8]
DOCE.6. LA APLICACIN AutoCAD
DOCE.7. EL DOCUMENTO ACTUAL ACTIVO
DOCE.8. LAS COLECCIONES Y SUS OBJETOS
DOCE.8.1. Coleccin de objetos de Espacio Modelo
DOCE.8.2. Coleccin de objetos de Espacio Papel
EJ ERCICIOS RESUELTOS DEL MDULO ONCE

Parte [5/8]
DOCE.8.3. Coleccin de bloques y el objeto bloque
DOCE.8.4. Coleccin de diccionarios y el objeto diccionario
DOCE.8.5. Coleccin de estilos de acotacin y el objeto estilo de acotacin
DOCE.8.6. Coleccin de grupos y el objeto grupo
DOCE.8.7. Coleccin de capas y el objeto capa
DOCE.8.8. Coleccin de tipos de lnea y el objeto tipo de lnea
DOCE.8.9. Coleccin de aplicaciones registradas y el objeto aplicacin registrada
DOCE.8.10. Coleccin de conjuntos de seleccin y el objeto conjunto de seleccin
DOCE.8.11. Coleccin de estilos de texto y el objeto estilo de texto
DOCE.8.12. Coleccin de SCPs y el objeto SCP
DOCE.8.13. Coleccin de vistas y el objeto vista
DOCE.8.14. Coleccin de ventanas y el objeto ventana
DOCE.8.14.1. Ventanas del Espacio Papel
Parte [6/8]
DOCE.9. UTILIDADES VARIAS (EL OBJETO UTILITY)
Primeros ejercicios intermedios resueltos del MDULO DOCE

Parte [7/8]
DOCE.10. EL TRAZADO
DOCE.11. EL OBJETO DE PREFERENCIAS
DOCE.11.1. Preferencias de archivos
DOCE.11.2. Preferencias de rendimiento
DOCE.11.3. Preferencias de compatibilidad
DOCE.11.4. Preferencias generales
Parte [8/8]
DOCE.11.5. Preferencias de visualizacin
DOCE.11.6. Preferencia de dispositivo
DOCE.11.7. Preferencia de perfil
DOCE.11.8. Mtodos del objeto de preferencias
DOCE.12. ALGUNOS TRUCOS ActiveX Automation PARA AutoCAD 14
DOCE.12.1. Compilacin de programas con un compilador de Visual Basic externo
DOCE.12.1.1. Objeto de aplicacin en programas compilados
DOCE.12.2. Ejecucin de programas VBA desde AutoLISP y en macros
DOCE.12.3. Enviar cadenas a la lnea de comandos desde VBA
DOCE.13. COMO APUNTE FINAL
DOCE.FIN. EJERCICIOS PROPUESTOS
Segundos ejercicios intermedios resueltos del MDULO DOCE

MDULO TRECE: Entorno de programacin Visual Lisp.
TRECE.1. Visual Lisp ES...
TRECE.2. PROCESO DE CREACIN DE UN PROGRAMA
TRECE.3. INSTALACIN E INICIACIN
TRECE.3.1. Carga y ejecucin de programas
TRECE.4. ESCRITURA DEL CDIGO FUENTE
TRECE.4.1. Ventana de Consola
TRECE.4.2. Editor de texto
TRECE.4.2.1. La herramienta Apropos
TRECE.4.2.2. Utilidades de gestin de texto
TRECE.4.2.3. Formateado del cdigo fuente
TRECE.4.2.4. Chequeo de errores de sintaxis
TRECE.5. DEPURACIN DE PROGRAMAS
TRECE.5.1. Modo de depuracin Break Loop
TRECE.5.2. Modo de depuracin Trace
TRECE.5.3. Ventana de seguimiento Watch
TRECE.5.4. Cuadro de dilogo de servicio de smbolos Symbol Service
TRECE.5.5. Ventana de inspeccin de objetos Inspect
TRECE.6. CONSTRUCCIN Y GESTIN DE APLICACIONES
TRECE.6.1. Compilacin de archivos de programa
TRECE.6.2. Creacin de mdulos de aplicacin
TRECE.6.3. Gestin de proyectos
TRECE.7. UTILIZACIN DE OBJETOS ActiveX
TRECE.7.1. Funciones Visual Lisp
EJ ERCICIOS RESUELTOS DEL MDULO DOCE

APNDICES
APNDICE A: Comandos y abreviaturas de AutoCAD 14.
APNDICE B: Variables de sistema y acotacin.
APNDICE C: Bibliotecas suministradas.
APNDICE D: Rutinas de Bonus suministradas.
Descargar Apndices A, B, C y D
APNDICE E: Tipos de archivos del programa.
APNDICE F: Cdigos ASCII.
APNDICE G: Instalacin de AutoCAD 14.
APNDICE H: Configuracin general del programa.
PARTE PRI MERA
MDULO UNO
Personalizacin de mens
UNO.1. INTRODUCCIN
Un men de AutoCAD es una secuencia de rdenes del programa agrupadas en un archivo de
texto que podemos visualizar con cualquier editor ASCII. Los archivos de men, en principio,
tienen la extensin . MNU, adems existen otros que ya se comentarn ms adelante. El archivo
de mens que proporciona AutoCAD es el llamado ACAD. MNU, que se encuentra en el directo-
rio \ SUPPORT\ del programa. En l residen todas las definiciones necesarias para el funciona-
miento de los mens desplegables de AutoCAD, de las barras de herramientas, el men de
pantalla, los botones del ratn (o los del dispositivo sealador correspondiente), mens de
imgenes, textos auxiliares de ayuda y algunas teclas rpidas. Este men es susceptible de ser
editado y alterado al gusto, as como tambin tenemos la posibilidad de crear nuestros propios
mens personalizados para AutoCAD.
La mejor forma de aprender cmo funcionan estos mens es recurriendo al ya proporcionado
por Autodesk es su programa estrella. Para ello, nicamente debemos abrir ACAD. MNU, como
ya se ha dicho con cualquier editor ASCII. Recordemos que se encuentra en el directorio
\ SUPPORT\ de AutoCAD 14.
UNO.2. EL ARCHIVO ACAD.MNU
Como podemos apreciar, lo primero que nos encontramos en este archivo de men, es una
serie de lneas en las que Autodesk explica la forma de proveer este archivo y que es posible
modificarlo a nuestro gusto. Generalmente, este texto estar escrito en ingls. Pero fijmonos
en los dos primeros caracteres impresos en cada lnea (/ / ). Estos dos caracteres de barra se-
guidos indican que lo que viene a continuacin es un texto explicativo o una aclaracin que no
debe ser procesada por AutoCAD. Todo lo que se escriba tras / / ser ignorado por el progra-
ma. Adems, tambin podemos introducir lneas blancas completas para separar sin que Au-
toCAD interprete nada en ellas. Pero ojo, no deberemos abusar de ello ya que, en estas expli-
caciones entre secciones no significan nada, pero ms adelante, bajo cada seccin, pueden
significar mucho. Es decir, abusar si se quiere, pero con control de dnde. Deberemos tener
tambin en cuenta que un alto contenido de explicaciones o lneas blancas aumentar el tama-
o del fichero y, por lo tanto, el tiempo empleado por AutoCAD para procesarlo.
La primera lnea que, podramos decir, tiene sentido para AutoCAD es la que dice
***MENUGROUP=ACAD. Los caracteres *** son indicativo de categora seccin. Un archivo . MNU
de AutoCAD puede tener hasta 31 secciones distintas. Los 31 nombres que adoptan esta serie
de secciones son normalizados y no pueden alterarse. Cada uno de ellos hace referencia a un
dispositivo y debe ocupar una sola lnea en el archivo.
Concretamente, este ***MENUGROUP= especifica el nombre de grupo de archivos de men, en
este caso ACAD (nombre del archivo). Este nombre es una cadena de 32 caracteres como m-
ximo y que no puede contener ni espacios ni signos de puntuacin. Su nombre no ha de coin-
cidir obligatoriamente con el nombre del archivo que lo contiene, pero es conveniente para
evitar fallos o equivocaciones por nuestra parte.
UNO.2.1. Las secciones ***BUTTONS y ***AUX
Las cuatro secciones siguientes, desde ***BUTTONS1 hasta ***BUTTONS4, definen la actuacin
de los pulsadores del dispositivo sealador de AutoCAD (ratn, lpiz ptico o digitalizador de
tableta). Concretamente ***BUTTONS1 define el modo de actuar de todos los botones del dis-
positivo. Bajo esta seccin se escribe una lnea por cada botn configurado, adems de la ac-
cin que debe realizar al ser pulsado. Esto a partir del segundo pulsador, ya que el primero es
reservado para la entrada de datos y eleccin de rdenes y es el pulsador principal por defecto
del sistema. Esto nos lleva a pensar que, en el caso de un dispositivo tipo lpiz digitalizador, el
cual slo posee un pulsador, todas las dems definiciones de botones sern ignoradas.
Lo dems que encontramos bajo esta seccin son las referencias a submens o a alias necesa-
rias para que los pulsadores funcionen. Estas referencias sern explicadas ms adelante. Por lo
general, esta seccin de ***BUTTONS1 en concreto, y tambin las siguientes secciones
***BUTTONS, no han de ser modificadas por el usuario, ya que puede ser molesto tener que
acostumbrarse a un nuevo juego con los pulsadores diferente al actual.
***BUTTONS2 a ***BUTTONS4, por su lado, especifican la accin combinada de ciertas teclas
con los pulsadores del dispositivo. Concretamente sus definiciones son las siguientes:
***BUTTONS2 - - > SHI FT + botn
***BUTTONS3 - - > CTRL + botn
***BUTTONS4 - - > CTRL + SHI FT + botn
Las secciones siguientes que nos encontramos en ACAD. MNU son las cuatro que van desde
***AUX1 hasta ***AUX4. El funcionamiento de ellas es exactamente el mismo que el de las
secciones ***BUTTONS, pero con las particularidad de que estn orientadas a los dispositivos
sealadores de entornos Macintosh y estaciones de trabajo.
UNO.2.2. Mens desplegables (secciones
***POP)
A continuacin topamos con las secciones ***POP. Las secciones ***POP definen la apariencia
de los mens desplegables y de cascada de AutoCAD 14, as como las rdenes que se ejecu-
tarn al hacer clic en cada elemento.
Las secciones ***POP1 a ***POP16 guardan las definiciones de los mens desplegables de la
barra de mens de AutoCAD (Ar chi vo, Edi ci n, Ver ,... ,?). En el archivo ACAD. MNU estn
definidas de la ***POP1 a la ***POP10, correspondindose con cada uno de los elementos que
nos encontramos en dicha barra de mens. Podemos definir, entonces, hasta un mximo de
***POP16. Adems de esto, disponemos de otras dos secciones especiales: ***POP0, que defi-
ne el men de cursor de referencia a objetos (el que aparece al pulsar el botn central del ra-
tn o SHI FT + botn derecho o CTRL + botn derecho) y ***POP17, que define el men de cur-
sor contextual de pinzamientos (el aparecido al pulsar botn derecho tras mostrar los puntos
de pinzamiento).
Despus del indicativo de seccin, podemos apreciar otro que comienza con dos asteriscos
(**). El indicativo ** es categora de submen, pero en este caso, en la seccin ***POP, es lo
que se denomina alias. Estos alias definen un nombre para el men desplegable segn su fun-
cin (no son obligatorios). Despus, podremos referenciar dicho men desplegable por su
identificador de seccin o por su alias (ya se ver ms adelante).
Lo siguiente que vemos, la primera lnea tras el indicativo de seccin o tras el de seccin y
alias si lo hubiera es el ttulo del men desplegable. Para este ttulo se permiten 14 caracte-
res como mximo, pero es conveniente limitar este nmero debido a la posterior alineacin en
la barra de mens de AutoCAD. Si esta lnea en la que se indica el ttulo no existiera, el men
no funcionara. Adems, ha de ser la inmediatamente posterior al indicativo de seccin o alias,
esto es, no puede haber un espacio en blanco. Decir tambin que, este ttulo, no puede conte-
ner comandos asignados, esto es, no se puede utilizar como una opcin lo que se explica a
continuacin.
Tras el ttulo del desplegable se describen las diferentes opciones que se desplegarn. Como
vemos, el ttulo de cada una de ellas, lo que se ver en pantalla, va encerrado entre corchetes,
aunque esto no es estrictamente necesario. La diferencia estriba en que la colocacin de cor-
chetes permite la introduccin de un mximo de 78 caracteres para el primer men (el situado
ms a la izquierda). Al desplegarse los nombres aparecen alineados por la izquierda. Si no se
escribieran los corchetes, AutoCAD truncara todos los nombres a 8 caracteres. Por supuesto,
la opcin ms larga determina el ancho de persiana desplegada.
Los ttulos de opciones pueden contener una letra subrayada, la cual ser el acceso a la opcin
por medio del teclado. As mismo, el nombre de ttulo puede contener tambin una letra sub-
rayada para acceder a l mediante ALT + letra. Este carcter subrayado se consigue antepo-
niendo el smbolo & (ampersand) al carcter en cuestin. As:
[ &Ar chi vo] = Ar chi vo
[ &Nuevo] = Nuevo
[ C&oor denada] = Coor denada
[ Al &t ur a] = Al t ur a
NOTA: Exista antiguamente otra forma de indicar el subrayado de una de las letras de la ca-
dena, y era especificar cul de ellas iba a ser la subrayada, de la siguiente forma:
[ / AAr chi vo] . Cuidado, porque esto ya no funciona (o no debera).
Debemos tener muy en cuenta no repetir dentro de un mismo men desplegable la misma
letra subrayada para dos opciones diferentes, ya que, en el peor de los casos, slo funcionara
la opcin que antes se encuentre, y eso no nos interesa. Lo mismo ha de comprobarse con los
desplegable dentro de un mismo archivo de men, e incluso en diversos archivos de men
parciales cargados al mismo tiempo.
La sintaxis de estas opciones no es complicada. Veamos un ejemplo:
I D_Li ne [ &L nea] ^C^C_l i ne
Lo situado ms a la izquierda (I D_Li ne) es una simple etiqueta que despus utilizaremos para
referenciar determinados textos de ayuda rpida que aparecen en la barra o lnea de estado
(en la seccin ***HELPSTRI NG) y para referenciar teclas rpidas (en la seccin
***ACCELERATORS). No es necesario incluir esta etiqueta, pero puede servir como veremos.
Tras ello, y luego de un espacio o tabulador (da igual el nmero de espacios, todos se interpre-
tan como uno), aparece la definicin textual (entre corchetes) que ser la visualizada en pan-
talla ([ &L nea] ). Como podemos apreciar, aparecer con el primer carcter subrayado.
Por ltimo, se escribe la orden en cuestin de AutoCAD que ser ejecutada al pinchar con el
cursor del dispositivo sealador en la opcin correspondiente. Adems, suelen incluirse dos
caracteres CTRL+C seguidos (^C^C) para anular cualquier orden anterior en proceso no termi-
nada (tecla ESC en Windows), excepto en comandos transparentes.
La orden que se ejecutar podr indicarse en castellano si trabajamos con la edicin espao-
la de AutoCAD o con su equivalente inglesa antecedida por un guin de subrayado (_)
tanto si trabajamos con la versin espaola como con la inglesa. Tngase en cuenta que lo
que se indica tras el ltimo corchete de cierre es lo mismo que si se escribiera en la lnea de
comandos de AutoCAD. As, las siguientes rdenes son anlogas:
[ &C r cul o] ^C^Cci r cul o (slo versin castellana)
[ &C r cul o] ^C^C_ci r cl e (versiones castellana e inglesa)
[ &C r cul o] ^C^Cci r cl e (slo versin inglesa)
Existe la posibilidad de presentar alguna de estas opciones, en algn momento, con un tono
apagado (gris claro), con el fin de indicar que, en ese momento, la opcin no est disponible.
Para realizar esto deberemos escribir una tilde (~) antes del nombre propio de la opcin. Por
ejemplo:
[ ~A&t r i but os nuevos]
Recordemos que el carcter tilde se corresponde con el cdigo ASCII 126 y se escribe mante-
niendo pulsada la tecla ALT y tecleando 126 en el teclado numrico.
Este tipo de opciones apagadas han de ir envueltas bajo una condicin, es decir, la opcin es-
tar apagada siempre y cuando se cumpla determinada condicin y si, por el contrario, no se
cumple, se encender o viceversa. Este tipo de ordenes aprenderemos a realizarlas ms
adelante.
Tambin podemos introducir una lnea separadora entre grupos de comandos. Esta lnea po-
demos conseguirla aadiendo una opcin de men que sea exclusivamente dos guiones entre
corchetes, esto es [ - ] . Una igual la podemos observar en ACAD. MNU, en la seccin ***POP1,
entre la opcin [ &Abr i r ] y [ &Guar dar ] . Esta lnea, luego en pantalla, tendr una longitud
igual a la opcin ms larga, siempre que sta no sobrepase los 39 caracteres.
A veces, es conveniente indicar al lado del nombre de opcin, y con un espacio tabulado, la
combinacin de teclas (si las hubiere) rpidas para acceder a dicha opcin de una forma acele-
rada. Esto se consigue con el mecanismo \ t de la forma que vemos a continuacin como
ejemplo del archivo que estamos estudiando:
[ &Nuevo. . . \ t Ct r l +N] ^C^C_new
De esta manera (sin incluir ningn espacio) se indica que la combinacin CTRL+N tambin ac-
cede al cuadro de dilogo Nuevo. Esta combinacin de teclas rpidas puede ser definida en la
ltima seccin de un archivo de mens, llamada ***ACCELERATORS (explicada ms adelante).
NOTA: Aprciese que, en los mens desplegables, a las opciones que abren cuadros de dilogo
se les suelen aadir tres puntos suspensivos detrs del nombre. Esto no es obligatorio, pero se
ha convertido en un estndar de Windows para discriminar este tipo de opciones de las que se
ejecutan nada ms seleccionarlas. En AutoCAD tampoco es as exactamente, ya la inmensa
mayora de las rdenes no se ejecutan directamente y piden opciones en la lnea de comandos,
pero la tcnica se utiliza de todos modos para las que abren cuadros de dilogo.
En este archivo ACAD. MNU tambin podemos apreciar otro juego de caracteres propios de las
secciones ***POP de los archivos de men de AutoCAD. Estos caracteres son: - >, que indica
el principio de un men de cascada y <- , que indica el final del men de cascada. Es el caso
siguiente del ACAD. MNU:
[ - >Fi &l t r os par a punt os]
[ . X] . X
[ . Y] . Y
[ . Z] . Z
[ - ]
[ . XY] . XY
[ . XZ] . XZ
[ <- . YZ] . YZ
. . .
NOTA: Como podemos comprobar en este ejemplo, las rdenes invocadas (. X, . Y...) no son
antecedidas por caracteres ^C. Esto se debe a que son comandos transparentes de AutoCAD y
no sera conveniente cerrar el proceso de la orden en curso para ejecutarlos, sino todo lo con-
trario. Cuidado con los comandos transparentes que son precedidos de apstrofo ( ) y su co-
rrespondiente no transparente no lo lleva; hay que utilizarlos tal y como se utilizaran en la
lnea de comandos.
Los dos caracteres de apertura - > (guin y mayor que) indican el ttulo de una opcin de men
que se desplegar en men de cascada. Al representarse en los men de AutoCAD, aparecer
una pequea flecha negra, indicando hacia la derecha, que muestra la presencia de un men
de cascada posterior y que se despliega a partir de ah. Los dos caracteres de final de men de
cascada <- (guin y menor que) han de colocarse en la ltima opcin de dicho submen de
cascada e indican la vuelta al men desplegable.
Se pueden anidar (meter unos dentro de otros) diversos mens de cascada, pero con la parti-
cularidad de que, al final, debern aparecer tanto caracteres <- como niveles de anidamiento
se hayan producido. Veamos otro ejemplo del archivo por defecto de mens de AutoCAD:
I D_MnDr awi ng [ - >Ay&udas al di buj o]
I D_Audi t [ &Revi sar ] ^C^C_audi t
I D_Recover [ R&ecuper ar . . . ] ^C^C_r ecover
[ - - ]
I D_MnPur ge [ - >L&i mpi ar ]
I D_Pur geAl l [ &Todo] ^C^C_pur ge _a
[ - - ]
I D_Pur geLay [ &Capas] ^C^C_pur ge _l a
I D_Pur geLi n [ Ti pos &l nea] ^C^C_pur ge _l t
I D_Pur geTxt [ &Est i l os de t ext o] ^C^C_pur ge _st
I D_Pur geDi m [ Est i l os de &acot aci n] ^C^C_pur ge _d
I D_Pur geMl n [ Est i l os l nea &ml t i pl e] ^C^C_pur ge _m
I D_Pur geBl k [ &Bl oques] ^C^C_pur ge _b
I D_Pur geShp [ <- <- &For mas] ^C^C_pur ge _sh
. . .
Como podemos apreciar, al existir un doble anidamiento, hemos de cerrarlo al final con dos
grupos de caracteres de cierre (<- <- ). En conclusin, deber haber tantos <- como - > haya.
Adems conviene terminar cualquier men o submen con una lnea en blanco, de esta forma,
cualquier men que se referencie (ya lo veremos) se superpondr totalmente al anterior.
NOTA: Ntese que, a partir de la siguiente lnea al segundo anidamiento, cada comando
_pur ge est separado de su parmetro u opcin (_a, _l t , _m...) por un espacio blanco. Como
ya se dijo, escribir las rdenes aqu es como hacerlo en la lnea de comandos, y en ella, escri-
biramos el comando, pulsaramos I NTRO (= Bar r a Espaci ador a o carcter espacio) y escribi-
ramos la abreviatura de la opcin correspondiente. Tras esto, volveramos a pulsar I NTRO.
Este ltimo I NTRO se corresponde con el ltimo carcter de retorno de carro de cada lnea, es
decir, al acabar de escribir cada una de las lneas hay que pulsar ENTER (tambin en la ltima
del archivo si fuera una instruccin u orden).
En conclusin, podramos decir que las diversas sintaxis que se inscriben bajo esta seccin se
pueden generalizar como las que siguen:
etiqueta [ nombre_del_desplegable]
etiqueta [ opcin_de_men] ^C^Corden_de_AutoCAD
etiqueta [ - >entrada_a_men_de_cascada]
etiqueta [ <- salida_de_men_de_cascada]
[ - - ]
UNO.2.3. Las barras de herramientas (la sec-
cin ***TOOLBARS)
La seccin ***TOOLBARS describe el aspecto y funcin de todas las barras de herramientas in-
cluidas en ACAD. MNU. Nosotros podremos modificarlas o crear nuevas barras, ya sea dentro de
este archivo de mens o dentro de uno propio. Cada barra de herramientas se define como un
submen de la seccin ***TOOLBARS, es decir, con el indicativo de submen (**).
Es posible especificar cinco tipos distintos de elementos en la creacin de barras de herramien-
tas. La sintaxis general de dichos tipos es que sigue (lo indicado en letra itlica se corres-
ponde con variables que se sustituirn por valores o palabras claves):
etiqueta [ _Tool bar ( " nombre_barra" , _orient, _visible, valx, valy, filas) ]
etiqueta [ _But t on( " nombre_botn" , id_pequeo, id_grande) ] macro
etiqueta [ _Fl yout ( " nombr e_botn_desplegable" , id_pequeo, id_grande,
_icono, alias) ] macro
etiqueta [ _Cont r ol ( _elemento) ]
[ - - ]
La etiqueta realiza la misma funcin explicada en las secciones ***POP de mens desplega-
bles, es decir, es un identificador para referenciar pequeos textos de ayuda que aparecen en
la lnea de estado de AutoCAD y que se definen en los archivos de mens en la seccin
***HELPSTRI NGS, que veremos posteriormente. Tambin se utiliza en la seccin
***ACCELERATORS. Esta etiqueta de referencia puede incluirse o no.
Tras la etiqueta aparece el tipo de elemento, con sus modificadores o parmetros entre parn-
tesis, entre corchetes. Vamos a explicar cada uno de ellos por separado y en el orden indicado.
El primero, _Tool bar , establece las caractersticas de la definicin de barra de herramientas.
Sus opciones tienen el siguiente significado:
"nombre_barra". Cadena alfanumrica que define el nombre de la barra de herramientas.
Se permiten espacios y caracteres de guin (- ) y guin de subrayado (_) como nicos sm-
bolos de puntuacin. Debe ir encerrada entre comillas dobles (" " ).
_orient. Es una palabra clave de orientacin. Puede ser _Fl oat i ng, _Top, _Bot t om, _Lef t
o _Ri ght . Indica dnde aparece la barra de herramientas al arrancar AutoCAD: flotando
sobre el rea de dibujo, en la parte superior, en la inferior, a la izquierda o a la derecha.
Aunque todo depende de la siguiente opcin. Puede ser escrito en maysculas o minsculas.
_visible. Debe ser una palabra clave de visibilidad. Puede ser _Show o _Hi de, segn se
quiera visible u oculta. Maysculas o minsculas.
valx. Es un valor numrico que especifica la coordenada X (en pixeles) desde el lado iz-
quierdo de la pantalla hasta el lado izquierdo de la barra de herramientas.
valy. es otro valor numrico que indica la coordenada Y (en pixeles) desde el lado superior
de la pantalla hasta la parte superior de la barra.
filas. Un valor que indica el nmero de filas de la barra de herramientas.
Unos ejemplo de ACAD. MNU son los siguientes:
I D_TbDi mensi [ _Tool bar ( " Acot ar " , _Fl oat i ng, _Hi de, 100, 130, 1) ]
I D_TbDr aw [ _Tool bar ( " Di buj o" , _Lef t , _Show, 0, 0, 1) ]
I D_TbModi f I I [ _Tool bar ( " Modi f i car I I " , _Fl oat i ng, _Hi de, 100, 270, 1) ]
I D_TbModi f y [ _Tool bar ( " Modi f i car " , _Lef t , _Show, 1, 0, 1) ]
NOTA: No olvidar los espacios tras las comas.
El segundo elemento es _But t on. ste define un botn de la barra de herramientas. Sus op-
ciones tienen el significado siguiente:
"nombre_botn". Es una cadena alfanumrica que define el nombre del botn; se permiten
el guin (- ) y el guin de subrayado (_) como nicos caracteres de puntuacin. Esta cadena
es la que se muestra como pista o tip amarillo cuando el cursor se sita encima del botn.
Entre comillas.
id_pequeo. Es una cadena alfanumrica que define el recurso de imagen pequea (mapa
de bits de 16 15), esto es, cul es el icono que se representar en el botn. Podemos crear
iconos nuevos en formato . BMP y referenciarlo, pero esto ya lo veremos ms adelante, desde
el propio AutoCAD. La cadena en cuestin puede contener los caracteres y _.
id_grande. Cadena que define el recurso de imagen grande (24 22). Por lo dems, igual
al anterior.
macro. es la macroinstruccin o, instruccin simple, que ejecuta los comandos, o el coman-
do, en cuestin de AutoCAD asignada al botn.
Los ejemplos siguientes son definiciones de botones en ACAD. MNU:
I D_Li ne [ _But t on( " L nea" , I CON_16_LI NE, I CON_24_LI NE) ] ^C^C_l i ne
I D_Ar c [ _But t on( " Ar co" , I CON_16_ARC3PT, I CON_24_ARC3PT) ] ^C^C_ar c
I D_I mage [ _But t on( " I magen" , I CON_16_I MAGE, I CON_24_I MAGE) ] ^C^C_i mage
I D_Xr ef [ _But t on( " Ref X" , I CON_16_XREATT, I CON_24_XREATT) ] ^C^C_xr ef
NOTA: No olvidar los espacios tras las comas.
El tercer elemento que vamos a explicar es _Fl yout , que define un botn desplegable en una
barra de herramientas. Las opciones y su significado son las que siguen:
"nombre_botn_desplegable". Cadena alfanumrica que define el nombre del botn des-
plegable; puede contener como nicos caracteres de puntuacin el guin normal (- ) y el
guin de subrayado (_). Este nombre es el que aparece como pista o tip amarillo al situar el
cursor encima del botn. Entre comillas.
id_pequeo. Es una cadena alfanumrica que define el recurso de imagen pequea (mapa
de bits de 16 15), esto es, cul es el icono que se representar en el botn. Podemos crear
iconos nuevos en formato . BMP y referenciarlo, pero esto ya lo veremos ms adelante, desde
el propio AutoCAD. La cadena en cuestin puede contener los caracteres y _.
id_grande. Cadena que define el recurso de imagen grande (24 22). Por lo dems, igual
al anterior.
_icono. Debe ser una palabra clave que controla si en el botn principal (el que siempre
est a la vista) debe visualizarse el icono propio o el ltimo seleccionado. Acepta slo
_OwnI con (icono propio) u _Ot her I con (otro icono), ya sea en maysculas o minsculas.
alias. Hace referencia a la barra de herramientas que debe mostrarse tras el desplegado.
El alias referencia a un submen de barra de herramientas definido con la sintaxis estndar
**nombre_submen. Este submen, evidentemente, puede ser uno de AutoCAD o uno pro-
pio creado por el usuario. El nombre del alias estar formado por el nombre del grupo de
mens, seguido de un punto y del propio nombre del submen. Por ejemplo, ACAD. TB_ZOOM.
macro. Cadena de comando. No es imprescindible si en el submen referenciado estn to-
dos los botones definidos. De todas formas, an as, puede interesar ejecutar uno o varios
comandos.
Ejemplos del tipo _Fl yout son (de ACAD. MNU):
I D_TbZoom[ _Fl yout ( " Zoom" , I CON_16_ZOOM, I CON_24_ZOOM, _Ot her I con,
ACAD. TB_ZOOM) ]
I D_TbI nser t [ _Fl yout ( " Bl oque" , I CON_16_BLOCK, I CON_24_BLOCK, _Ot her I con,
ACAD. TB_I NSERT) ]
I D_TbUcs [ _Fl yout ( " SCP" , I CON_16_UCS, I CON_24_UCS, _Ot her I con,
ACAD. TB_UCS) ]
I D_TbI nqui r y [ _Fl yout ( " Consul t ar " , I CON_16_LI ST, I CON_24_LI ST, _Ot her I con,
ACAD. TB_I NQUI RY) ]
NOTA: No olvidar los espacios tras las comas.
Como cuarto elemento en la creacin de barras de herramientas tenemos _Cont r ol . _Cont r ol
define un elemento de control especial. El nico parmetro modificador es:
_elemento. Puede tener tres valores, ya sea en mayscula o en minscula: _Layer ,
_Li net ype o _Col or .
_Layer especifica el elemento de control de capas. Este elemento es una lista desplegable
desde la cual se controlan las capas actuales del dibujo.
_Linetype, por su lado, especifica el elemento de control de tipo de lnea, que es una lista
desplegable que controla los tipos de lnea.
_Color es el elemento de control de color. Despliega una lista desde la que se controlan los
colores de los objetos (ejecuta el comando de AutoCAD DDCOLOR).
Estos tres elementos son los tpicos que aparecen en la barra de herramientas de Propiedades
de objetos. Sus definiciones en ACAD. MNU son las siguientes:
I D_Ct r l Layer [ _Cont r ol ( _Layer ) ]
I D_Ct r l Col or [ _Cont r ol ( _Col or ) ]
I D_Ct r l Li net [ _Cont r ol ( _Li net ype) ]
El quinto y ltimo elemento es [ - - ] . Al igual que en los mens desplegables, lo que hace este
elemento es separar grupos, en este caso, de botones. Ahora, en lugar de ser una lnea diviso-
ria, es un pequeo intersticio o espacio vaco entre botones de iconos ya sea en horizontal o
vertical, dependiendo de la posicin que adopte la barra de herramientas.
UNO.2.4. La seccin ***IMAGE de mens de
imgenes
Los mens de imgenes de AutoCAD son aquellos que se nos presentan en una ventana en la
que podemos elegir una imagen, o icono, o su correspondiente nombre. Un ejemplo, de los
tres que incluye AutoCAD en ACAD.MNU, es el cuadro de objetos 3D predefinidos (cubo, cono,
cua, etc.) y que podemos abrir bajo Dibujo>Superficies>Superficies 3D...
Las especificaciones necesarias para la creacin de este tipo de mens se encuentran recogi-
das en la seccin ***I MAGE. La manera general de crear este tipo de mens es similar a la que
se ha estudiado en la seccin de desplegables ***POP, la diferencia reside en la presentacin
de las opciones, ya que en estos mens el proceso que realizar una opcin se representa me-
diante un elemento grfico. Dicho elemento no es otro que un archivo de foto de AutoCAD o
un elemento de una fototeca (la creacin de bibliotecas de fotos se explica en el MDULO
NUEVE de este curso).
Estos mens de iconos son visualizados en una ventana dividida en dos partes en la que se
muestra, por un lado y a la izquierda, una lista de los trminos correspondientes a los iconos
y, por otro lado y a la derecha, los iconos propiamente dichos. Esta parte derecha la componen
cinco filas de cuatro iconos cada una. Evidentemente, si incluimos ms iconos tenemos la posi-
bilidad de visualizar otras ventanas ms navegando con los botones creados a tal efecto.
Veamos un ejemplo del ACAD.MNU:
[ acad( Box3d, Pr i sma r ect ang. ) ] ^C^Cai _box
El texto que se presenta entre corchetes ([ ] ) corresponde a la llamada a la foto en este caso
dentro de una fototeca que, adems, permite incluir una cadena que ser la que se presente
el la zona izquierda del men de imagen. Lo que sigue a todo ello, como sabemos ya, es la
orden o comando de AutoCAD que debe ejecutarse. As, las opciones de sintaxis, en cuanto al
texto entre corchetes, que podemos utilizar bajo esta seccin y su resultado en pantalla son
las siguientes:
Sintaxis rea de iconos rea de texto
[ nombre_de_foto]
foto nombre del fichero
[ nombre_de_foto, texto]
foto texto
[ fototeca( foto) ]
foto nombre de la foto
[ fototeca( foto, texto) ]
foto texto
[ espacio_blanco]
vaco espacio blanco
[ texto]
vaco texto
El caso anterior expuesto se correspondera con la cuarta sintaxis de la lista.
El ttulo del men ser visualizado en la barra de ttulo de la ventana de men con un mximo
de 40 caracteres. Este ttulo se corresponde con la primera lnea de la seccin o submen (en-
tre corchetes) tras el propio indicador de seccin o submen. Ejemplo:
**i mage_pol y
[ Def i ni ci n de var i abl es Spl i ne]
[ acad( pm- quad, Mal l a cuadr t i ca) ] ' _sur f t ype 5
[ acad( pm- cubi c, Mal l a cbi ca) ] ' _sur f t ype 6
[ acad( pm- bezr , Mal l a Bzi er ) ] ' _sur f t ype 8
[ acad( pl - quad, Pol i l nea cuadr t i ca) ] ' _spl i net ype 5
[ acad( pl - cubi c, Pol i l nea cbi ca) ] ' _spl i net ype 6
El texto [ Def i ni ci n de var i abl e Spl i ne] es el ttulo de cuadro de men.
UNO.2.5. El arcaico men de pantalla de Auto-
CAD bajo la seccin ***SCREEN
En los "tiempos heroicos" de AutoCAD, el nico acceso a los comandos del programa, aparte
de la lnea de comandos, era un men formado por una columna de rdenes, que se iban su-
perponiendo mientras las ejecutbamos, y sito en la parte derecha del rea de dibujo del pro-
grama. Hoy en da, para nostlgicos de aquellas versiones, seguimos disponiendo de una parte
configurable en archivos de men con el fin de utilizar ste de pantalla. Por defecto, al correr
AutoCAD 14, no se muestra dicho men, sin embargo, podemos visualizarlo desde
Herr.>Preferencias..., en la pestaa Visual., activando la opcin Mostrar men de pantalla de
AutoCAD en la ventana de dibujo.
La seccin ***SCREEN, podramos decir que es la opcin "por defecto" en un archivo de mens.
Esto significa que, si al principio de un fichero . MNU no aparece un indicativo de seccin, todas
las opciones sin especificador de seccin (hasta que aparezca uno) son asignadas al identifica-
dor de pantalla ***SCREEN.
La sintaxis es muy parecida a la de los mens desplegables, obviando la etiqueta que aqu no
se puede utilizar:
[texto]comando
El primer submen que se presenta bajo el identificador de seccin es el que aparecer prime-
ro al cargar el archivo de men. Obviamente, ste ha de ser el que contenga las referencias
ms generales, si es que hay otros submens. As, el primer submen que incorpora ACAD. MNU
es:
**SCREEN
[ Aut oCAD ] ^C^C^P( ai _r oot menus) ^P
[ * * * * ] $S=ACAD. OSNAP
[ ARCHI VO ] $S=ACAD. 01_FI LE
[ EDI CI N ] $S=ACAD. 02_EDI T
[ VER 1 ] $S=ACAD. 03_VI EW1
[ VER 2 ] $S=ACAD. 04_VI EW2
[ I NSERTAR] $S=ACAD. 05_I NSERT
[ FORMATO ] $S=ACAD. 06_FORMAT
[ HERRAM 1] $S=ACAD. 07_TOOLS1
[ HERRAM 2] $S=ACAD. 08_TOOLS2
[ DI BUJ O 1] $S=ACAD. 09_DRAW1
[ DI BUJ O 2] $S=ACAD. 10_DRAW2
[ ACOTAR ] $S=ACAD. 11_DI MENSI ON
[ MODI F 1 ] $S=ACAD. 12_MODI FY1
[ MODI F 2 ] $S=ACAD. 13_MODI FY2
[ AYUDA ] $S=ACAD. 14_HELP
Desde l se hacen referencia a los otros submens incluidos (veremos esto al hablar de sub-
mens). Los dems submens mantienen la sintaxis indicada, por ejemplo:
[ Nuevo ] ^C^C_new
[ Abr i r ] ^C^C_open

[ Guar dar ] ^C^C_qsave
[ Guar como] ^C^C_saveas
[ Expor t ar ] ^C^C_expor t

[ Conf i g ] ^C^C_conf i g
[ I mpr i mi r ] ^C^C_pl ot
. . .
El texto entre corchetes es el que se presentar en pantalla. Este texto est limitado, bajo esta
seccin de men, a ocho caracteres.
Como hemos dicho, los comandos se colocan en formato de columna. El nmero de lneas
permitidas en dicha columna depender del monitor de vdeo y, evidentemente, de la tarjeta
grfica instalada en el equipo. De esta forma, el fichero suministrado por Autodesk con Auto-
CAD prev un mximo de 26 lneas. Cuando no se puedan introducir todas las opciones nece-
sitadas en una sola columna, se introducen referencias a diferentes pginas del mismo subme-
n para poder visualizar todo.
La siguiente tabla muestra una relacin entre las tarjetas de vdeo y el nmero de lneas m-
ximo permitido:
Tarjeta Lneas
CGA color 21
CGA monocromo 22
EGA 21
VGA 26
Los sistemas SuperVGA y otros de alta resolucin permite mayor nmero de lneas en pantalla.
Un men de pantalla se despliega sobre el anterior visualizado. En principio, lo hace desde la
primera lnea til, superponiendo sus opciones a todas las anteriores. Si deseamos que esta
superposicin comience desde otra lnea, para dejar opciones generales al descubierto por
ejemplo, nicamente deberemos indicar tras el submen, y luego de un espacio en blanco, el
nmero de lnea desde el que queremos que empiece a desplegarse. Este es el caso de todos
los submens incluidos en ACAD. MNU (excepto el primero) que comienzan su visualizacin en la
lnea 3. Veamos algn ejemplo:
**ASSI ST 3
**06_FORMAT 3
**101_SOLI DS 3
**AREA 3
De esta forma se impide sobreescribir las dos primeras lneas del men general: Aut oCAD y *
* * *, que hacen referencia al propio submen principal o general y al submen de modos de
referencia a objetos, respectivamente.
Repasando el archivo ACAD. MNU, podemos apreciar tambin unos grandes espacios en blanco
entre un submen y otro. El objeto de este espaciado se corresponde con la necesidad de ta-
par las opciones de un submen anterior cuando otro, ms corto, se superpone. Como norma
general, se ampliarn los submens con tantas lneas blancas como sean necesarias para
completar el cmputo total de lneas. De esta manera, nos aseguramos de que ninguna opcin
de ningn submen permanezca visible al llamar a otro submen.
Apreciamos tambin en este archivo, que todos los submens se completan con lneas blancas,
pero no hasta la ltima (26) sino hasta la antepenltima (24). La misin de esta tctica consis-
te en que las dos ltimas opciones del submen general (ASI STI R y LTI MO) queden, tambin,
siempre visibles.
De la misma forma, se hace conveniente rellenar con espacios blancos todos los nombres de
opciones dentro de los corchetes has ocho caracteres. As evitamos la desagradable visin de
comandos "montados" sobre otros, y todas las opciones taparn a las anteriores perfectamen-
te:
[ VER 1 ]
[ AYUDA ]
[ DESDE ]
[ Redi buj ]
[ Ref X ]
Por ltimo, decir que toda seccin ***SCREEN ha de terminar con un indicador de submen
**ENDSCREEN para que todo funcione correctamente y el ltimo submen real no tenga pro-
blemas en saber dnde termina.
UNO.2.6. Configuracin del tablero digitaliza-
dor bajo las secciones ***TABLET
Bajo las cuatro secciones posibles del men de tableta, ***TABLET1 a ***TABLET4, se en-
cuentran las definiciones necesarias para el funcionamiento de la tableta o tablero digitaliza-
dor.
Las casillas o celdas de la plantilla suministrada con AutoCAD 14 debern coincidir con las
especificaciones de estas secciones. Esta plantilla la podemos encontrar, preparada para im-
primir o trazar a escala natural y pegar o fijar a la tableta, bajo el nombre de archivo TA-
BLET14. DWG en el directorio \ SAMPLE\ de AutoCAD 14. An as, podemos modificar los trmi-
nos de funcionamiento del tablero.
NOTA: Modificar estas secciones, as como las que hacan referencia a los pulsadores del dis-
positivo sealador, no es buena idea, ya que cambiara la forma y el hbito adquirido de traba-
jar con AutoCAD. En el caso de la seccin que nos ocupa, habra que variar hasta los iconos
de sitio en la plantilla por ello nos la entregan como fichero de dibujo o modificarla por
completo. No tiene mucho sentido, a no ser que sean cambios justificados y que reviertan co-
modidad y productividad en el dibujo y diseo.
En las reas del tablero digitalizador, la configuracin de cada una de ellas (comando TABLERO
de AutoCAD, opcin CFG) determina el nmero de casillas en que se encuentra dividida (nme-
ro de filas nmero de columnas). Internamente, estas casillas se ordenan de izquierda a de-
recha y de arriba abajo. El orden en que se encuentran las opciones en las secciones
***TABLET en el archivo de men es lo que determina a qu casilla concreta del tablero se
asocia. Basta con pinchar en dicha casilla para que se ejecute el contenido de la lnea del ar-
chivo de men asociado.
Bajo ***TABLET1 se encuentran las definiciones del primer men de tableta, esto es, el corres-
pondiente al rea superior de la plantilla; concretamente englobado por 25 columnas (1 a 25)
y 9 filas (A a I ). Bajo ***TABLET2, las definiciones del men segundo, el del extremo izquierdo
de 11 columnas (1 a 11) y 9 filas (J a R). Bajo ***TABLET3, las de men tercero; las que se
corresponden con 3 columnas (23 a 25) y 9 filas (J a R). Lo que queda en la plantilla corres-
ponde al rea grfica de dibujo.
Por lo dems, decir que su funcionamiento es igual al de los dems mens, con la particulari-
dad de que, en ste, los textos entre corchetes no tienen ningn efecto visual en pantalla, por
lo que slo se escriben sin ser necesario como referencias o aclaraciones de posicin.
Hoy da, con el uso del ratn y la versatilidad de los mens desplegables y la barras de herra-
mientas, el uso de las tabletas digitalizadoras se reduce escasamente a la digitalizacin o al
"calcado" de planos y poco ms.
UNO.2.7. ***HELPSTRINGS; las cadenas de ayuda
Si seguimos examinando detenidamente ACAD. MNU, nos encontramos, casi al final del mismo,
con la seccin ***HELPSTRI NGS. Esta seccin es la encargada de recoger todos aquellos pe-
queos textos de ayuda a comandos que son identificados por su etiqueta I D. Esta lnea de
ayuda es la que se presenta en la lnea de estado de AutoCAD cuando nos posicionamos con
el cursor sobre un botn de barra de herramientas o sobre una opcin de men desplegable.
La etiqueta I D es la que se ha comentado al hablar de la seccin ***POP y de la seccin
***TOOLBARS. Estas secciones, adems de ***ACCELERATORS, ***SCREEN y ***TABLET, son
las nicas donde tienen sentido las etiquetas identificadoras.
La sintaxis bajo la seccin ***HELPSTRI NGS es asaz sencilla:
etiqueta [texto_de_ayuda]
As, los siguientes ejemplos son lo suficientemente demostrativos:
I D_Li ne [ Cr ea segment os de l nea r ect a: l i nea]
I D_Pan [ Despl aza l a vi st a del di buj o en l a vent ana gr f i ca act ual : encua-
dr e]
I D_Repl ay [ Vi sual i za una i magen BMP, TGA o TI FF: r epr oduci r ]
I D_Rot at e [ Despl aza l os obj et os al r ededor de un punt o base: gi r a]
La etiqueta I D ha de coincidir, evidentemente, con la que sealemos antes de los comandos
correspondientes tanto en mens desplegables como en barras de herramientas. De este mo-
do, la etiqueta I D_Li ne (helpstring de la orden de dibujo de lneas simples) del primer ejem-
plo, coincide exactamente con las etiquetas que se corresponden con la orden LI NEA de la sec-
cin ***POP: I D_Li ne [ &L nea] ^C^C_l i ne y con el botn anlogo de la seccin ***TOOLBARS:
I D_Li ne [ _But t on( " L nea" , I CON_16_LI NE, I CON_24_LI NE) ] ^C^C_l i ne.
Como vemos en estos casos del archivo de mens por defecto de AutoCAD, la cadena de ayu-
da est formada por un pequeo texto aclaratorio de la funcin del comando, adems del co-
rrespondiente comando textual que habramos de introducir por teclado para obtener el mismo
efecto. Nosotros podemos escribir el texto que deseemos, siempre teniendo en cuenta no so-
brepasar el ancho de la pantalla. Adems, decir tambin que no es obligatorio que las etique-
tas comiencen por I D_, pero que aclaran mucho la interpretacin general de un archivo de
mens si as lo hacen, ya que podramos confundir comandos con lneas y etctera.
UNO.2.8. Teclas rpidas bajo ***ACCELERATORS.
Bajo esta ltima seccin del ACAD. MNU se encuentra la definicin de teclas rpidas o acelerado-
ras Windows. El uso de estas combinaciones o no de teclas proporcionan al usuario un r-
pido acceso a los comandos ms utilizados de AutoCAD 14.
Como sabemos, por ejemplo, la combinacin CTRL+A produce los mismos efectos que el co-
mando ABRE en la lnea de comandos. Tambin podemos acceder a este comando mediante el
men desplegable Archivo>Abrir... o a travs del botn correspondiente en la barra de herra-
mientas Estndar o en la tableta (casilla T-25).
La manera en que est especificada esta combinacin de teclas rpidas en la seccin
***ACCELERATORS del archivo de mens ACAD. MNU es la siguiente:
I D_Open [ CONTROL+" A" ]
Hay dos modos de definir teclas aceleradoras. La primera consiste en utilizar un identificador
de etiqueta ya existente seguido de un ttulo, entre corchetes, formado por uno o varios modi-
ficadores (separados mediante el smbolo de adicin +) un smbolo + y carcter nico o una
cadena de tecla virtual especial entre comillas dobles. Es decir, con las siguientes sintaxis:
etiqueta [ modif+modif...+" carcter" ]
etiqueta [ modif+modif...+" tecla_virtual" ]
Algunos ejemplos son los siguientes:
I D_Li ne [ CONTROL+" L" ]
I D_Ci r cl e [ CONTROL+SHI FT+" C" ]
I D_Cancel [ " ESCAPE" ]
I D_El l i pse [ SHI FT+" F11" ]
La segunda forma consiste en utilizar un ttulo con un modificador y una cadena de tecla se-
guido de una secuencia de comandos. Podemos definir as, combinaciones de teclas que no
tienen referencia de etiqueta. Sus sintaxis generales podran ser las siguientes:
[ modif+modif...+" carcter" ] ^C^Ccomando_de_AutoCAD
[ modif+modif...+" tecla_virtual" ] ^C^Ccomando_de_AutoCAD
Algunos ejemplos:
[ CONTROL+" Q" ] ^C^C_qui t
[ SHI FT+CONTROL+" HOME" ] ^C^C_move
[ " ESCAPE" ] ^C^C_qui t
De esta forma indicamos el comando que queremos que se ejecute tras la pulsacin de la
combinacin de teclas.
Los modificadores aceptados son los que se ven en la tabla siguiente:
Cadena Descripcin
CONTROL
Tecla Cont r ol de la mayora de los teclados
SHI FT
Tecla Mayscul as, izquierda o derecha
COMMAND
Tecla APPLE de los ordenadores Macintosh
META
Tecla META en teclado UNIX
Y las teclas virtuales especiales son las siguientes:
Cadena Descripcin
F1
Tecla F1
F2
Tecla F2
F3
Tecla F3
F4
Tecla F4
F5
Tecla F5
F6
Tecla F6
F7
Tecla F7
F8
Tecla F8
F9
Tecla F9
F10
Tecla F10
F11
Tecla F11
F12
Tecla F12
HOME
Tecla I ni ci o
END
Tecla Fi n
I NSERT
Tecla I nser t
DELETE
Tecla Supr
NUMPAD0
Tecla 0 del teclado numrico
NUMPAD1
Tecla 1 del teclado numrico
NUMPAD2
Tecla 2 del teclado numrico
NUMPAD3
Tecla 3 del teclado numrico
NUMPAD4
Tecla 4 del teclado numrico
NUMPAD5
Tecla 5 del teclado numrico
NUMPAD6
Tecla 6 del teclado numrico
NUMPAD7
Tecla 7 del teclado numrico
NUMPAD8
Tecla 8 del teclado numrico
NUMPAD9
Tecla 9 del teclado numrico
UP
Tecla cursor Ar r i ba
DOWN
Tecla cursor Abaj o
LEFT
Tecla cursor I zqui er da
RI GHT
Tecla cursor Der echa
ESCAPE
Tecla Esc
NOTA: Como veremos mucho ms adelante, las etiquetas o identificadores I D tambin sirven
para poder cambiar el estado de una opcin de men (activado/desactivado o marcado/no
marcado) desde macros de mens o mediante AutoLISP. Tambin para su utilizacin como
argumento en el acceso a archivos de ayuda personalizados (tambin se ver).
UNO.3. SUBMENS
Un submen, como ya se ha comentado, es aquel que, debajo de una seccin, define un nuevo
men o subseccin. Estos submens son identificables por comenzar con dos asteriscos (**)
en lugar de tres (***), que era categora de seccin. A este identificador le sigue un nombre
que identifica al submen. Este nombre puede contener hasta 33 caracteres alfanumricos,
adems de algunos especiales como $ (smbolo de dlar), - (guin) o _ (guin de subrayado).
El identificador debe estar en una sola lnea del archivo de men y puede contener espacios en
blanco.
Todas las opciones que se escriban tras el identificador de submen hasta el siguiente identi-
ficador de submen o de seccin pertenecen a dicho submen. Los nombres de submen
habrn de ser nicos; no puede haber dos repetidos. Es posible, sin embargo, dar varios nom-
bres a un mismo submen.
En el archivo ACAD.MNU podemos identificar muchos submens como los siguientes:
**SNAP
**I NSERT
**TB_I NQUI RY
**i mage_pol y
**01_FI LE
Todos ellos se encuentran en diferentes secciones de men y tienen la propiedad de dividir la
informacin en grupos de caractersticas homlogas. As, bajo la seccin ***TOOLBARS, cada
barra de herramientas definida se encuentra bajo un submen.
Esto, en principio, no es obligatorio, pero es que la caracterstica ms importante de la divisin
en submens, reside en la posibilidad de hacer referencia a ellos desde cualquier punto del
archivo de mens. Esto vara un poco en la secciones ***POP, ***AUX y ***BUTTONS, ya que
ellas no admiten submens; los ttulos que comienzan con ** bajo estas secciones no son
submens, sino una especie de nombres mnemotcnicos para su mejor comprensin llamados,
como ya se coment, alias. Sin embargo pueden ser referenciadas, desde la versin 14 de Au-
toCAD, las propias secciones o, incluso, el nombre de alias.
UNO.3.1. Referencias a submens
Como hemos apuntado, se puede llamar (activar) a un submen desde cualquier punto del
archivo de men. La forma de hacerlo responde a la siguientes sintaxis:
$inicial=nombre_grupo_mens. nombre_submen
Esto es, primero el smbolo de dlar ($) seguido de la inicial del identificador de seccin al que
pertenece el submen, el smbolo de igual (=), el nombre del grupo de mens (identificador
***MENUGROUP=), un punto (. ) y, por ltimo, el nombre completo del submen referenciado.
Las iniciales de los identificadores de seccin son las siguientes:
Iniciales Seccin
B1 B4 ***BUTTONS1 a ***BUTTONS4 (mens de pulsadores)
A1 A4 ***AUX1 a ***AUX4 (mens auxiliares)
P0
***POP0 (men de cursor)
P1 P16 ***POP1 a ***POP16 (mens desplegables)
S
***SCREEN (men de pantalla)
I
***I MAGE (mens de imgenes)
T1 T4 ***TABLET1 a ***TABLET4 (mens de tableta)
As, si quisiramos realizar una llamada al submen **Bl oques_Sani t ar i os situado bajo la
seccin ***I MAGE de un archivo del mens con nombre de grupo ***MENUGROUP=BLOQUES, es-
cribiramos lo siguiente:
$I =BLOQUES. Bl oques_Sani t ar i os
Las maysculas y minsculas son indiferentes en todo el archivo . MNU, ya que AutoCAD con-
vierte todo a maysculas excepto contenidos textuales que sern mostrados como tales al
compilar el archivo (se explicar ms adelante), pero es conveniente realizar distinciones entre
secciones y submens nicamente para obtener mayor claridad.
NOTA: Antiguamente no era necesario indicar el nombre de grupo en una llamada a un sub-
men, hoy s. La razn estriba en que, como ya veremos, AutoCAD 14 puede tener ms de
un archivo de men cargado y, al referenciar un submen, deberemos indicarle en qu archivo
de men de los cargados se encuentra. Si nicamente existiera un men cargado, no hara
falta indicar este nombre de grupo, pero siempre conviene hacerlo por los futuros mens par-
ciales que se puedan cargar; evitando as errores venideros.
Cada vez que se activa un submen (slo los de pantalla), AutoCAD guarda en una pila el
men o submen desde el cual se ha llamado al nuevo. Si se desea salir del nuevo submen
para volver al anterior (proceso muy frecuente), basta introducir en el archivo una llamada sin
identificador de submen. De esta forma, si se encontrara activado un submen y se produjera
una llamada a un nuevo submen as:
$S=COTAS_HOR
el nuevo submen queda activado y el anterior se almacena en pila. Si entre las opciones de
este nuevo submen se encuentra una llamada del tipo:
$S=
en el momento en que esa llamada es leda por el programa (al ejecutar la opcin en que se
encuentre), se abandona el submen correspondiente mostrndose el anterior.
UNO.3.1.1. Llamadas a los submens de las
distintas secciones
Las referencias a los submens se realizan de forma muy parecida en cada una de las seccio-
nes de un archivo de men. Lo nico que diferencia los procesos son pequeas variaciones que
vamos a comentar ahora.
Cuando se invoca a un submen que se encuentra bajo la seccin ***SCREEN de men de pan-
talla, se da lugar a un despliegue en persiana que superpone al men anterior. Por defecto,
este despliegue se realiza desde la primera lnea vlida del men, visualizndose los textos de
las opciones, uno debajo de otro, en el orden en que fueron escritos. Si se quiere que esto no
suceda as esto ya se coment se puede especificar el nmero de lnea donde queremos
que empiece, despus del identificador de submen y tras un espacio:
**I ns_Bl oq 3
De esta manera, si quisiramos llamar a este submen desde otro punto del archivo . MNU,
normalmente desde una opcin del propio men de pantalla, podramos hacer lo siguiente:
[ I nser t ar ] $S=BLOQUES. I ns_Bl oq
Segn este mtodo, y siempre que el nombre de grupo del archivo de mens que contiene
dicho submen tuviera por nombre BLOQUES, al seleccionar (pinchar) la opcin I nser t ar se
activara (se mostrara) el submen **I ns_Bl oq a partir de la tercera lnea.
Podemos tambin realizar varias llamadas que, en el caso del men de pantalla, habrn de
superponerse sin taparse aadiendo las lneas en blanco pertinentes y, a la vez, ejecutar
un comando:
[ MATRI Z: ] $S=X $S=ARRAY ^C^C_ARRAY
Las llamadas a submens en el men de tablero, secciones ***TABLET, se utilizan de igual
modo, pero hay existe una pequea puntualizacin que se explica en la seccin UNO.4.3.3.
Por su parte, los mens desplegables bajo las secciones ***POP, tienen un tratamiento espe-
cial. No se admiten submens en secciones ***POP, pero se puede hacer referencia a la sec-
cin propiamente dicha, de la siguiente forma:
$Pn=*
siendo n el nmero de la seccin ***POP. Un ejemplo puede ser el siguiente:
[ Despl egar Men Her r ami ent as] $P6=*
De esta forma, al seleccionar esta opcin, se desplegar el men correspondiente y se escon-
der el actual (si se llama desde otra parte de una seccin ***POP).
NOTA: Tambin podemos referenciar el alias de la seccin.
Una lnea en blanco despus de cada submen anula todas las opciones que puedan quedar
del men anterior. Para que todo men referenciado anule completamente al anterior es buena
costumbre incluir, al final de cada seccin o submen, la citada lnea en blanco. Ejemplo:
***MENUGROUP=BLOQUES
***POP1
**Pr i nc
[ BLOQUES]
[ Mecni ca] $P2=*
[ El ect r i ci dad] $P3=*
[ Pi pi ng] $P4=*
***POP2
**Meca
[ MECNI CA]
[ Tor ni l l o] ^C^C_i nser t Tor ni l l o
[ Tuer ca] ^C^C_i nser t Tuer ca
[ Ar andel a] ^C^C_i nser t Ar andel a
***POP3
**El ec
[ ELECTRI CI DAD]
[ Tr af o] ^C^C_i nser t Tr af o
[ Di odo] ^C^C_i nser t Di odo
[ Conmut ador ] ^C^C_i nser t Conmut
***POP4
**Pi p
[ PI PI NG]
[ Vl vul a] ^C^C_i nser t Val vul
[ Sopl ador ] ^C^C_i nser t Sopl ador
[ Tuber a] ^C^C_i nser t Tubo
NOTA: Recordar dos cosas ya explicadas. La primera que es conveniente teclear las rdenes en
ingls con el carcter de subrayado delante; de esta forma podr ser interpretado por cual-
quier versin de AutoCAD cualquiera que sea su idioma. Y la segunda, distinguir secciones de
submens, o caracteres de control, de comandos, etctera, con maysculas y minsculas a
nuestro gusto, por dar mayor claridad y comprensin. Por ltimo, decir que ejemplos como el
anterior no son muy utilizados, pero son perfectamente lcitos.
En los mens de imgenes bajo la seccin ***I MAGE las referencias a submens se realizan de
la forma siguiente. Para llamar a un submen de imagen desde otro cualquiera (imagen, des-
plegable, pantalla...) hay que referenciarlo y despus activarlo para que se visualice. Lo ms
lgico parece ser referenciar un men de imagen desde un desplegable o un botn de barra de
herramientas; de la siguiente manera, por ejemplo:
***MENUGROUP=ROCA
***POP1
**Sani t ar i os
[ Sani t ar i os de Roca]
[ Bl oques] $I =ROCA. Bl oques $I =ROCA. *
***TOOLBARS
**TB_Sani t ar i os
[ _But t on( " Bl oques" , " I CON1. BMP" , " I CON2. BMP" ) ] $I =ROCA. Bl oques $I =ROCA. *
***I MAGE
**Bl oques
[ Rocaf ot ( f ot o- 1, Lavabo) ] ^C^C_i nser t l avabo
[ Rocaf ot ( f ot o- 2, Baer a) ] ^C^C_i nser t baer a
[ Rocaf ot ( f ot o- 3, Bi d) ] ^C^C_i nser t bi de
[ Rocaf ot ( f ot o- 4, I nodor o) ] ^C^C_i nser t i nodor o
Bajo las secciones ***BUTTONS (men de pulsadores) las llamadas a submens se utilizan de
igual modo, teniendo en cuenta, que si llamamos a un alias o una seccin que est bajo
***POP o a un submen que est bajo ***I MAGE, habremos de activarlos con los mtodos ex-
plicados. En estas secciones de ***BUTTONS no se admiten submens.
Una clara referencia a submens en el men de pulsadores lo observamos en el archivo
ACAD. MNU (el siguiente ejemplo puede variar en dicho archivo, ya que para el botn derecho se
establece una condicional en DIESEL):
***BUTTONS1
;
$P0=*
Como ya hemos comentado, bajo ***BUTTONS1 se establecen las funciones de todos los pulsa-
dores accionados de manera sencilla comenzando por el segundo; el primero es para aceptar
datos y no se puede redefinir. En este caso del ratn del sistema, el segundo pulsador (bo-
tn derecho) realiza un I NTRO carcter punto y coma (; ) y, el tercero (botn central) llama
a la seccin ***POP0 (con alias **SNAP); men de cursor de modos de referencia a objetos.
Como vemos, en ***BUTTONS2 y ***BUTTONS3 se hace referencia al mismo submen en la
primera, y nica, probablemente, lnea; ciertamente, al pulsar SHI FT + botn derecho o CTRL
+ botn derecho se activa el men de cursor. ***BUTTONS4, normalmente, estar vaco.
Adems, en los mens de pulsadores podemos utilizar la contrabarra para introducir las coor-
denadas del cursor automticamente. Por ejemplo:
***BUTTONS2
_l i ne \
La forma de actuar en mens bajo ***AUX es la misma.
UNO.4. CARACTERES ESPECIALES, DE CONTROL
Y OTROS MECANISMOS
A parte de todo lo estudiado, existen otro tipo de caracteres especiales, caracteres de control y
otros mecanismos de edicin de mens que se indican a continuacin.
UNO.4.1. Caracteres especiales
En todas las secciones de un archivo de men podemos incluir diversos caracteres especiales
que AutoCAD reconoce como tales. Estos caracteres especiales son:
;
igual a un I NTRO o a un espacio blanco
+
determina la continuidad en otra lnea del archivo ASCII de una opcin
\
interrumpe la opcin para que el usuario introduzca un dato
_
antepuesto a un comando en ingls, hace que se admita el comando en
cualquier versin idiomtica de AutoCAD
<<
ngulos en grados sexagesimales
*
repeticin de opciones completas de men
AutoCAD aade automticamente a cada opcin de men un espacio en blanco al final. Esto
lo realiza para aceptar la orden como si hubiera sido introducida por teclado. Los espacios en
blancos pueden ser sustituidos por caracteres punto y coma (; ), siendo a veces necesaria esta
eleccin. Por ejemplo, la siguiente opcin de men escribe un texto en pantalla:
[ ACABADO] ^C^C_t ext ; 80, 20; 3. 5; 0; Exent o de r ebabas; ; ; en car a vi st a;
El texto en cuestin comienza con el comando _t ext . Tras l, escribimos un ; para aceptar el
comando (=I NTRO), luego las coordenadas del punto de inicio y otro ; para entrarlas. Des-
pus, la altura del texto y la rotacin con sus correspondientes ; detrs de cada uno para
aceptar. Ms tarde, el texto en cuestin. Los tres caracteres ; que le siguen son tres I NTROS
para, primero, entrar el texto; segundo, repetir la orden TEXTO y, tercero, situar el punto de
inicio bajo el anterior (formato prrafo alineado a la izquierda). Introducimos el final del texto
y, luego, un ; para acabar la orden.
De esta forma, vemos que se hace necesario la introduccin de un carcter ; al final de la op-
cin, ya que, al estar escribiendo texto, Aut oCAD interpretara un espacio en blanco como lo
que es: un espacio en blanco. Lo mismo ocurre con los tres ; seguidos.
NOTA: Como vemos, estos caracteres nos permiten crear verdaderas macroinstrucciones en
opciones de men. Es muy importante conocer bien las rdenes de AutoCAD y qu es exac-
tamente lo que solicita el programa, as como el orden en el cual lo solicita, en cada momento.
Por supuesto, es necesario dominar los comandos de teclado del programa, esto es, aquellos
que slo pueden ser introducidos por teclado o aquellos que, teniendo varios formatos, tienen
un modo de teclado en el que se nos solicitan todos los datos en la lnea de comandos.
Los caracteres ; del ejemplo anterior podan haber sido sustituidos por espacios blancos (ex-
cepto el ltimo y los tres seguidos). Lo que ocurre es que se suelen alternar ambos mtodos
para dar mayor claridad a la macro.
Por su parte, el carcter +, se utiliza para separar macros u opciones de men complicadas en
varias lneas. As, el ejemplo anterior podra haberse escrito:
[ ACABADO] ^C^C_t ext ; 80, 20; 3. 5; 0; +
Exent o de r ebabas; +
; ; en car a vi st a;
El carcter \ detiene la ejecucin de la macro y solicita un dato al usuario en un momento da-
do. Si en el ejemplo anterior queremos dejar a eleccin del usuario la entrada de un valor para
las coordenadas de inicio del texto y otro para el ngulo de rotacin, la macro habra quedado
de la siguiente forma:
[ ACABADO] ^C^C_t ext ; \ 3. 5; \ Exent o de r ebabas; ; ; en car a vi st a;
De esta manera, y tras ejecutarse la orden TEXTO, AutoCAD se detendra a preguntarnos por
el dato donde est el carcter contrabarra (\ ), es decir, las coordenadas de inicio. Nosotros,
introduciramos las coordenadas y pulsaramos ENTER; la macro contina y da el valor de 3. 5 a
la altura de texto, lo introduce o acepta (; ) y vuelve a detenerse para preguntarnos el ngulo
de rotacin. Lo introducimos y pulsamos I NTRO y, la macroinstruccin, contina hasta el final
como anteriormente.
Por ltimo, decir que la introduccin de los caracteres <<, precediendo al valor de un ngulo,
hace que ste se tome en grados sexagesimales, con el origen y sentido normales de la trigo-
nometra plana, independientemente de lo establecido con el comando UNI DADES de AutoCAD.
Por ejemplo:
[ ACABADO] ^C^C_t ext 80, 20 3. 5 <<135 Exent o de r ebabas; ; ; en car a vi st a;
Tambin existe el carcter * (asterisco) que repite la opcin completa de un men de forma
automtica hasta que se pulsa ESC. Es muy poco utilizado; la forma de manejarlo es la
siguiente:
[Centro, &Dimetro]*^C^C_circle \_d
NOTA: Del carcter de subrayado (_) ya se ha hablado ampliamente, por ello, no se explicar
de nuevo aqu.
NOTA: En la lneas del archivo que terminan con un carcter de control (que veremos ahora),
una contrabarra (\ ), un signo ms (+) o un punto y coma (; ), AutoCAD no aade espacios en
blanco.
UNO.4.2. Caracteres de control
Adems de los caracteres especiales, podemos incluir en archivos de mens diversos caracte-
res de control ASCII. Estos caracteres se introducen mediante el acento circunflejo o signo
de intercalacin para AutoCAD ^, seguido del carcter correspondiente. El carcter ^ repre-
senta la tecla CTRL, por ello se llaman caracteres de control a los formados por dicho smbolo y
un carcter.
Nosotros ya conocemos uno, que es ^C. ^C representa un ESC o cancelacin (viene de los
tiempos de MS-DOS). Esta combinacin anula rdenes en curso; algunas rdenes necesitan de
dos cancelaciones para ser anuladas, por eso es conveniente, como ya hemos explicado, la
introduccin de ^C^C en todas las opciones de men para que, de este modo, anulen por com-
pleto cualquier comando anterior, sea cual sea. Otros comandos, los cuales permiten una in-
troduccin transparente (ZOOM, ENCUADRE, CAL...) no necesitarn de estos caracteres y s del
oportuno de transparencia ( ).
Existen otros caracteres de control, como ^H que representa un retroceso de cursor, esto es,
borra el ltimo carcter introducido. Puede ser necesario en opciones que no deseemos que
AutoCAD coloque un espacio blanco al final de la lnea, y tambin en otros casos. Seguida-
mente se muestra una lista con todos los caracteres de control posibles:
^B
activa/desactiva el Forzcursor
^C
cancela el comando en curso (ESC)
^D
activa/desactiva coordenadas (CTRL+D)
^E
define el siguiente plano isomtrico (CTRL+E)
^F
activa/desactiva la referencia a objetos (CTRL+F)
^G
activa/desactiva el modo Rejilla.
^H
ejecuta retroceso
^I
ejecuta un tabulado (TAB)
^M
ejecuta entrada de datos (I NTRO)
^O
activa/desactiva el modo Orto (CTRL+O)
^P
activa/desactiva el eco de mensajes (MENUECHO)
^Q
transmite todos los mensajes, listas de estado y datos de entrada a la
impresora (CTRL+Q)
^T
activa/desactiva la tableta (CTRL+T)
^V
cambia la venta grfica actual (CTRL+V)
^Z
carcter nulo que suprime la adicin automtica de un espacio en blanco
al final de un elemento de men
Existe otro modo de activar o desactivar modos si no conocemos su carcter de control, y es
introduciendo el comando en forma de macro (quiz no lo podamos hacer en una sola opcin).
Es decir, los dos grupos de opciones siguientes realizan la misma accin:
[ Cambi a Or t o] ^O
[ Cambi a Or t o ON] _or t ho _on
[ Cambi a Or t o OFF] _or t ho _of f
NOTA: Como veremos, tenemos otros mtodos condicionales para poder realizar lo mismo en
una sola lnea.
UNO.4.3. Otros mecanismos y apuntes
UNO.4.3.1. Opciones de men mediante DIE-
SEL
Sobre el lenguaje DIESEL hablaremos ampliamente en el MDULO ONCE del presente curso,
sin embargo, existe una forma de definir opciones de men casi siempre mediante mtodos
condicionales por medio de este lenguaje. Estudiemos la siguiente proposicin condicional:
[ $( i f , $( get var , t i l emode) , ~) Esp. Papel ] espaci op
La opcin propiamente dicha podra reducirse a: [ Esp. Papel ] espaci op, es decir, al pinchar
sobre ella cambiaramos al Espacio Papel de AutoCAD. El problema es que, como deberamos
saber, la posibilidad de cambiar de modo de espacio depende del valor de la variable TI LEMODE
(mantenida en esta versin del programa por razones de compatibilidad con versiones anti-
guas).
Lo que nos dice la condicin es que, si TI LEMODE tiene valor 1, se cumple y, entonces, se inclu-
ye el carcter tilde (~) que, como estudiamos, hace que la opcin quede inutilizada y la escribe
en un tono gris "apagado".
NOTA: No debemos ahora preocuparnos por la sintaxis de la lnea, ya que se estudiar a fondo
en su parte correspondiente.
Existe la posibilidad de visualizar en las opciones de un men una seal o marca indicativa
(tpica de Windows) de que est activada esa opcin ( ). Para ello deberemos incluir en dicha
opcin el carcter de cerrar exclamacin (! ) seguido de un punto (. ), de la siguiente manera:
[ ! . texto_de_la_opcin]
En dispositivos grficos que no admiten la seal o marca mencionada, se puede incluir otro
carcter, por ejemplo:
[ ! ctexto_de_la_opcin]
que visualizar una seal con forma de letra "c".
La forma de utilizar esta seal consiste en incluirla en una condicional DIESEL que establezca o
no su visualizacin. Por ejemplo:
[ $( i f , $( get var , gr i dmode) , ! . ) Rej i l l a] ^G
[ $( i f , $( get var , or t homode) , ! . ) Or t o] ^O
[ $( i f , $( get var , snapmode) , ! . ) For zcur sor ] ^B
que visualizar una seal de activacin en cada modo cuando se seleccione o est activado.
Se puede combinar la utilizacin de ! . y ~ para mostrar seales en opciones no disponibles de
la siguiente forma:
[ ~! . texto_de_la_opcin]
La visualizacin de opciones no disponibles y marcas aparecer siempre qu se despliegue el
men que las contiene. Cuando interesa que esa visualizacin se haga desde una llamada de-
terminada a men, y no en las dems, se debe indicar en la lnea de llamada de la siguiente
forma:
$Pn. i=opciones
$Pn es la abreviatura del desplegable; i es el nmero de orden de la opcin cuya visualizacin
se va a cambiar; opciones es el tipo de visualizacin: ~ o ! . o ambas. El nmero de orden (i)
empieza a contar desde el nombre del submen, el cual tendr el nmero 1, hacia abajo, sien-
do las opciones consiguientes 2, 3, 4... En el siguiente submen, por ejemplo, el nmero de
orden de la opcin [ TC] es el 5.
**Bl oques
[ Ladr i l l o]
[ Robl n]
[ TAR]
[ TC]
[ Ar andel a]
. . .
Por ejemplo, una llamada $P4. 6=~! . visualiza como no disponible la opcin numerada con el 6
del desplegable ***POP4 y le aade una seal. Para eliminar marcas y visualizaciones como no
disponible, se incluirn llamadas de la forma, siguiendo con el anterior ejemplo:
$P4. 6=
Si en vez de una llamada a un submen concreto se desea llamar al ltimo submen o a la
ltima opcin utilizada, se puede emplear el carcter arroba (@) as:
$P@. @=opciones
que se refiere a la ltima opcin de men desplegable utilizada, o as:
$P@. i=opciones
que se refiere a la opcin de nmero i en el ltimo men desplegable utilizado (aunque no sea
la ltima opcin usada).
UNO.4.3.2. Variable MENUCTL
Si la variable de sistema MENUTCL tiene valor 1, se establece que, cuando se utilice una orden
de AutoCAD, automticamente en el men de pantalla aparezca el submen que corresponde
a dicha orden.
UNO.4.3.3. Creacin y uso de mens de macros
Ocurre con frecuencia que, en un archivo de men, se repiten constantemente determinadas
cadenas de texto a lo largo del mismo. El empleo de macros de texto permite abreviarlos defi-
niendo una especie de abreviatura para que luego, cuando aparezca dicho texto en el men, se
sustituya por el nombre de la macro.
El archivo de men que contiene macros es esencialmente igual que el . MNU, pero debe ser
forzosamente guardado con la extensin . MND. Despus habremos de compilarlo con la utilidad
MC. EXE que proporciona AutoCAD y que trocar dicho archivo en otro del mismo nombre pero
con extensin . MNU, esto es, apto para ser manejado por AutoCAD 14.
NOTA: MC. EXE se encuentra en el directorio \ SUPPORT\ de AutoCAD 14.
La manera de definir una macro de texto es la siguiente:
{nombre_macro}=texto
Las definiciones deben ocupar una sola lnea y comenzar por el primer carcter de la primera
lnea del archivo. El nombre de la macro debe ir encerrado entre llaves ({}) y puede contener
de uno a 31 caracteres en maysculas o minsculas. texto es la cadena de caracteres que la
macro sustituye.
La macro puede albergarse en cualquier punto del archivo de mens. En dicho punto, al ser
compilado el archivo, se sustituir por el texto completo con el que se ha definido. Un ejemplo
de definicin puede ser:
{i mp}=capa; def ; 0; co; por capa; t l ; por capa;
Se pueden definir, las macros, de forma recursiva, es decir, anidar unas dentro de otras, de la
siguiente forma:
{r ep}=zoom; e; {i mp}
De esta forma, todas las macros anidadas se sustituirn por sus textos equivalentes, formado
una macroinstruccin (no confundir con la macro de texto) de longitud variable.
Existe otra caracterstica del compilador de mens muy importante, adems del uso de las
macros. Es la posibilidad de indicar el nmero de lnea o lneas del archivo de men en que se
desea colocar una opcin concreta. Esto es particularmente til en las secciones de men de
tablero ***TABLET. Como se ha explicado ya, una vez configurada cada rea de tablero en un
determinado nmero de casillas, ser el orden en que aparecen las opciones en el archivo lo
que determina a qu casilla concreta corresponde cada opcin. Esto implica que si una orden
debe ocupar ms de una casilla en el tablero, toda la instruccin de men se deba repetir en
las lneas del archivo que correspondan.
Tambin se puede evitar el tener que contar las lneas del archivo para saber a qu casilla co-
rresponden. Para ello, basta con indicar al principio de cada opcin la lnea o lneas en que se
desea situarla, de la forma siguiente:
<nmero, nmero...>instruccin
Por ejemplo, si se desea situar la orden REDI BUJ A en las casilla 20, 21, 22, 98, 99 y 100 de un
rea de men de tableta, se puede poner en cualquier lugar dentro de la seccin ***TABLET:
<20, 21, 22, 98, 99, 100>r edi buj a
o bien:
<20, 21, 22, 98, 99, 100>_r edr aw
Al compilar el archivo . MND, el comando en cuestin se situar automticamente en todas y
cada una de las lneas especificadas por sus nmeros de orden.
El archivo de men suministrado por AutoCAD 14 contiene un submen alternativo llamado
**TABLET1ALT perteneciente al rea primera del tablero (***TABLET1) sin aplicaciones, total-
mente reservado para opciones de men que sean creadas por el propio usuario. La plantilla
est pensada en principio para una configuracin de 25 columnas por 9 filas, y una utilizacin
prevista de 200 casillas.
El usuario puede personalizar esta rea de men editando el archivo ACAD. MND y modificando
las lneas del submen correspondiente. Tambin se podra editar el ACAD. MNU, pero es prefe-
rible el . MND por la posibilidad comentada de referir casillas por sus nmeros de orden.
El submen **TABLET1ALT presenta en principio el siguiente aspecto:
<1>[ T1- 1]
<2>[ T1- 2]
<3>[ T1- 3]
<4>[ T1- 4]
. . .
<200>[ T1- 200]
Para incluir opciones de men propias, basta con introducirlas a continuacin de los nmeros
de casilla que interesen. Por ejemplo, si se desea que la casilla 176 contenga la orden REGEN,
entonces la lnea correspondiente del archivo quedar como sigue:
<176>[ T1- 176] ^C^Cr egen
Esto puede hacerse con todas las casillas necesarias. Una vez modificado el . MND, ser preciso
compilarlo de nuevo.
Por otro lado, el empleo de submens de tablero es una caracterstica que brinda grandes po-
sibilidades a la hora de personalizar el tablero digitalizador para aplicaciones especficas. Es
habitual encontrar un campo del diseo en el que se requiera el empleo de amplias bibliotecas
de bloques para ser insertados. Es el caso, por ejemplo, de dibujos de electrnica, electricidad,
piping, etc..., y, en general, todos los dibujos de circuitera. En estos casos resulta particular-
mente til el uso de submens de tablero. Con ellos se puede habilitar por ejemplo el rea de
tableta primera, citada anteriormente, para diversos submens.
Supongamos, por ejemplo, que se va a utilizar la primera rea de tablero del men suminis-
trado por AutoCAD, con vistas a su empleo en diseos electrnicos. En primer lugar, se utili-
zarn las 200 casillas previstas para las opciones y procedimientos generales (control especfi-
co de capas, instrucciones espaciales de dibujo, de edicin, de visualizacin, utilidades de Au-
toLISP, etctera).
Una plantilla colocada encima de esa rea informar con texto o smbolos de la opcin conteni-
da en cada casilla. En el momento en que se precise insertar un bloque predefinido de una
biblioteca de bloques (un transistor, un diodo, una puerta lgica, etc.), se puede llamar a un
submen, dentro de esa misma seccin, que habilite otras 200 casillas para nuevas opciones
de insercin de bloques.
Supongamos que el nombre del submen es BL- ELEC y la opcin que permite llamarlo se sita
en la casilla 200. Habr que escribir en esa lnea del submen **TABLET1ALT lo siguiente:
<200>[ T1- 200] $T1=bl - el ec
Cada vez que sea seleccionada la casilla 200, se activar el submen BL- ELEC que, en este
caso, habilitar las casillas para insertar bloques de la biblioteca. Bastar entonces colocar una
nueva plantilla sobre el rea de men, con los dibujos o los nombres de los bloques impresos
en ella, para que se sepa en qu casilla se inserta cada uno.
El submen creado BL- ELEC se situar en el archivo de men al final de la seccin ***TABLET1
y contendr todas las opciones de insercin de bloques. Por ejemplo:
**BL- ELEC
<1, 2, 26, 27>^C^C_i nser t ; t r ans \ l ; ; 0
<3, 4, 28, 28>^C^C_i nser t ; di odo; \ l 0
<5, 6, 7, 8, 30, 31, 32, 33>^C^C_i nser t nano \ l ; ; 0
. . .
Lgicamente, cada submen llamado debe contener opciones que permitan pasar de un sub-
men a otro y, tambin, al principal. Si se utilizan las ltimas casillas, stas podran contener,
por ejemplo:
<199>$T1=
<200>$T1=pr i nc
de forma que, pinchando sobre la casilla 199 se volver al submen precedente y, sobre la
200, al principal. Para ello es preciso aadir inmediatamente despus del identificador de sec-
cin ***TABLET1 la lnea **PRI NC.
Sera til que en la pantalla se visualizara un mensaje que indicara cundo se ha entrado en
un nuevo submen de tablero, como advertencia para cambiar de plantilla. Esto lo podemos
realizar con una instruccin de AutoLISP (ALERT) que ya se estudiar en el momento adecua-
do.
UNO.4.3.3.1. Funcionamiento de MC.EXE
El compilador MC. EXE (en \ SUPPORT\ ) se emplea desde MS-DOS. Su sintaxis es la siguiente:
MC [opciones] nombre_archivo
nombre_archivo es el nombre del fichero . MND que contiene las macros de texto (no hay que
especificar la extensin). Las opciones del comando no son obligatorias y son las que siguen:
- D
Lista definiciones de macros
- I
Lista texto de entrada
- M
Desactiva caracterstica de macro
Indicar solamente MC da como resultado un texto de ayuda explicativo.
Ejemplos:
MC TOPOGRAF
MC C: \ ACAD\ MI PRO\ MEN\ BLOQUES
MC D PI PI NG
MC D M A: \ MENS\ CARTOG
UNO.4.4. Uso de la orden externa EDIT
Esta orden permite el uso del editor del sistema operativo MS-DOS (Edi t ) sin interrumpir la
edicin del dibujo en curso. Es muy til para la edicin de mens de forma gil.
UNO.5. CARGA Y DESCARGA DE MENS EN Au-
toCAD
Como hemos aprendido, un archivo de men de AutoCAD consiste en una serie de secuencias
de comandos que se ejecutan segn determinadas condiciones. Existen diversos archivos de
men, algunos ASCII que podemos modificar y otros no. Los diversos archivos son los siguien-
tes:
.MNU
Llamado men de plantilla por ser el archivo de mens base. Es un archivo ASCII y po-
demos generarlo o modificarlo a nuestro gusto pero, al tenerlo totalmente terminado,
es preferible no volver a tocarlo por si deshacemos algo importante, y realizar las sub-
siguientes pruebas en el . MNS.
.MNS
Archivo de men fuente. Generado por AutoCAD con el mismo nombre que el . MNU y
muy parecido a ste. Lo nico que vara es la falta de la mayora de los comentarios y
de las secciones no utilizadas. Es el archivo que debemos modificar al realizar las prue-
bas y el que modifica AutoCAD al, por ejemplo, crear una barra de herramientas o un
botn desde el propio programa.
.MNC
Archivo compilado (por lo tanto no es ASCII) directamente del . MNU, que crea AutoCAD
al cargar un . MNU para manejarlo ms rpidamente.
.MNR
Archivo llamado de recursos de men. En l se albergan todos los mapas de bits que
utiliza el men en cuestin, por ejemplo, los de los iconos creados para botones de ba-
rras de mens.
.MNL
Archivo ASCII de men con rutinas en AutoLISP que necesita el archivo de men en
cuestin creado.
.MND
Archivo ASCII de definicin de mens. Contiene macros para utilizar con el men crea-
do. Debe ser compilado externamente mediante la utilidad MC. EXE.
La secuencia de carga y obtencin de los diferentes archivos de men por parte de AutoCAD,
al indicarle un nombre de archivo, es la siguiente:
1. AutoCAD empieza buscan el archivo fuente . MNS. En caso de localizarse, busca a con-
tinuacin el archivo de men compilado . MNC con el mismo nombre. Si su fecha y hora
es posterior al . MNS, se carga. En caso de no encontrarse, o de ser su fecha y su hora
anterior, se compila automticamente y se obtiene un men . MNC actualizado, que es el
que carga.
2. Si AutoCAD no ha podido encontrar el nombre de men . MNS especificado, intenta lo-
calizar un archivo . MNC con el mismo nombre y lo carga.
3. Si AutoCAD no encuentra ningn men . MNS ni . MNC con el nombre especificado, bus-
ca un archivo de plantilla . MNU con el mismo nombre. Si lo encuentra, crea un . MNS y
compila un . MNC, cargando este ltimo.
4. Una vez cargado un archivo . MNC con cualquiera de los procedimientos anteriores, Au-
toCAD genera el archivo de recursos . MNR y busca un archivo . MNL con el mismo nom-
bre (si se necesita). Si lo encuentra evala las expresiones AutoLISP contenidas en l.
5. Si AutoCAD no encuentra ningn archivo . MNS, . MNC o . MNU con el nombre especifica-
do muestra un mensaje de error y solicita otro nombre de men para cargar.
Tenemos dos mtodos para cargar un men: realizar una carga completa o una carga parcial.
La carga completa se realiza con el comando MENU de AutoCAD desde la lnea de comando.
Por defecto AutoCAD buscar archivos . MNS o . MNC. Podemos indicarle el tipo . MNU en la ca-
silla del cuadro de dilogo Archivos del tipo:. Al cargar un archivo de men con esta orden, el
nuevo men sustituir por completo al actual. Si cargamos un archivo de mens de plantilla
(. MNU), AutoCAD muestra una advertencia sobre la necesidad de sobreescribir y redefinir el
archivo fuente . MNS. Si aceptamos, este archivo de renovar y perderemos los cambios reali-
zados en l.
Esto nos lleva a recordar que el archivo . MNS es en el que podemos realizar todos los cambios
y modificaciones que deseemos en un men. Si perdemos este fichero o lo modificamos de
forma que no es de nuestro agrado, siempre tendremos en archivo de plantilla . MNU para re-
cuperar el original. Debemos advertir tambin que, las modificaciones de barras de herramien-
tas realizadas desde AutoCAD (que ya veremos) se guardan, como ya explicamos, en el ar-
chivo . MNS, por ello, al cargar el . MNU se perdern. Si queremos conservarlas deberemos es-
cribirlas (copiar/cortar y pegar) en el archivo de plantilla . MNU.
Por su lado, el mtodo de carga parcial de mens proporciona un mayor control a la hora de
cargar un archivo. Este mtodo se realiza con el comando CARGARMENU (MENULOAD en ingls)
desde la lnea de comando, desde Herr.>Personalizar mens... o pinchando en la casilla Y-9
del tablero digitalizador.
De esta forma se carga un men parcial que se aade al men actual base (ACAD. MNU u otro
cargado mediante la orden MENU). Las secciones de estos mens (***POP, ***TOOLBARS,
***I MAGE o ***HELPSTRI NGS) permiten aadir o reorganizar los mens del men base sin mo-
dificar el resto de secciones de ste.
El comando visualiza un cuadro de dilogo con dos pestaas que permiten gestionar los mens
que sern cargados. El procedimiento que debemos seguir para cargar un men es el siguien-
te:
1. En la pestaa Grupos de mens pinchar en Examinar... y buscar el archivo que quera-
mos cargar. Por defecto se buscan archivos . MNS y . MNC. Podemos cambiar esto, con
las mismas consecuencias explicadas en la carga de mens base.
2. Una vez elegido el fichero, pinchar en Cargar para cargar el men. Debe aparecer en el
cuadro superior que lleva por ttulo Grupos de mens: (con el nombre del
***MENUGROUP=).
3. Pasar a la siguiente pestaa (Barra de mens) y elegir, si no estuviera ya, el men car-
gado elegido en la lista desplegable Grupo de mens:.
4. Bajo el cuadro Mens: escoger el/los que deseamos incluir en la barra de mens.
5. Bajo el cuadro Barra de mens: escoger el men de la barra actual delante del cual
queremos insertar el elegido en el punto anterior (normalmente ir antes del ltimo, el
de ayuda, ?).
6. Pinchar en Insertar>>.
7. Pinchar en Cerrar.
Tras todo este proceso, el men estar cargado y operativo.
La manera de descargar un men es anloga. El comando por teclado de DESCARGARMENU (ME-
NUUNLOAD en ingls). Desde la barra de mens y dems se accede de igual forma que para
cargar un men parcial.
Para descargar un men deberemos designarlo bajo Grupo de mens: en la pestaa Grupo de
mens y pinchar en Descargar. Podemos tambin suprimir ciertas porciones de mens desde
la otra pestaa pinchando en <<Suprimir.
La finalidad de que existan dos comandos por teclado para el mismo cuadro de dilogo es para
su utilizacin en lnea de comandos (por el usuario, macros, rutinas AutoLISP...).
NOTA: Si queremos cargar un men que ya est cargado, hemos de descargarlo antes.
NOTA: Podemos especificar o cambiar los caminos de bsqueda o rutas de acceso a archivos
de men desde Herr.>Preferencias..., en la pestaa Archivos y bajo Archivos de men, ayuda,
registro y otros>Archivo de mens.
UNO.6. EJEMPLOS PRCTICOS DE MENS
UNO.6.1. Men desplegable simple
***MENUGROUP=SI MPLE
***POP1
[ Me&n Si mpl e]
[ - >&Di buj o]
[ &L nea] ^C^C_l i ne
[ &Pol i l nea] ^C^C_pol
[ &C r cul o] ^C^C_ci r cl e
[ &Ar co] ^C^C_ar c
[ P&ol gono] ^C^C_pol ygon
[ &El i pse] ^C^C_el l i pse
[ &Spl i ne] ^C^C_spl i ne
[ Pu&nt o] ^C^C_poi nt
[ <- &Text o] ^C^C_mt ext
[ - - ]
[ - >&Edi ci n]
[ &Bor r a] ^C^C_er ase
[ Co&pi a] ^C^C_copy
[ &Si met r a] ^C^C_mi r r or
[ &Equi di st anci a] ^C^C_of f set
[ &Mat r i z] ^C^C_ar r ay
[ &Despl aza] ^C^C_move
[ &Gi r a] ^C^C_r ot at e
[ &Recor t a] ^C^C_t r i m
[ &Al ar ga] ^C^C_ext end
[ C&haf l n] ^C^C_chamf er
[ E&mpal me] ^C^C_f i l l et
[ <- Desco&mponer ] ^C^C_expl ode
[ - - ]
[ - >&Vi sual i zaci n]
[ - >&Zoom]
[ &Vent ana] ' _zoom_w
[ &Di nmi co] ' _zoom_d
[ &Todo] ' _zoom_a
[ &Ext ensi n] ' _zoom_e
[ <- Ti empo &Real ] ' _zoom;
[ - - ]
[ <- &Encuadr e Ti empo Real ] ' _pan
NOTAS INTERESANTES:
1. Ntese que no importa que el desplegable se llame ***POP1 aunque exista un ***POP1
en el men base y ste lo carguemos como parcial. Cada ***POP1 corresponde a su
men y no habr conflictos.
2. La opcin Ti empo r eal del comando ZOOMse ejecuta con el propio comando (_zoom),
un espacio para aceptar el comando y un ; (que podra ser otro espacio) como I NTRO
para aceptar la opcin por defecto de ZOOM, que es Ti empo r eal .
3. Prubese a cambiar la opcin [ <- Ti empo &Real ] por [ <- <- Ti empo &Real ] para dife-
renciar el efecto y comprender el mecanismo perfectamente.
4. Si no se incluye un ***MENUGROUP= aunque sugerimos incluirlo siempre, y a veces es
necesario se tomar, como nombre de grupo, la ruta y nombre de archivo de men.
UNO.6.2. Mens desplegables
***MENUGROUP=DESPLEG
***POP1
**Bl oques
[ &Bl oques]
[ - >&Puer t as]
I D_phj 1 [ &1 Hoj a] ^C^C_i nser t hj 1. dwg
I D_phj 2 [ <- &2 Hoj as] ^C^C_i nser t hj 2. dwg
[ - >&Vent anas]
I D_vhj 1 [ &1 Hoj a] ^C^C_i nser t hj 1. dwg
I D_vhj 2 [ <- &2 Hoj a] ^C^C_i nser t hj 2. dwg
[ - >&Mobi l i ar i o]
I D_si l l a [ &Si l l a] ^C^C_i nser t si l l a. dwg
I D_mesa [ &Mesa] ^C^C_i nser t mesa. dwg
I D_cami l l a [ Mesa &Cami l l a] ^C^C_i nser t cami l l a. dwg
I D_sof a [ So&f ] ^C^C_i nser t sof a. dwg
I D_ar mar [ <- &Ar mar i o] ^C^C_i nser t ar mar . dwg
***POP2
**Modi f i car
[ Her r ami ent as B&l oques]
I D_cr ea [ &Cr ear bl oque. . . ] ^C^C_bmake
I D_l i mpi a [ &Li mpi ar bl oque] ^C^C_pur ge b \ _n;
[ - - ]
[ - >&Ot r as]
I D_Edat r [ Def i ni r a&t r i but os. . . ] ^C^C_ddat t def
[ - >&Base]
I D_base00 [ Base en el &0, 0] ^C^C_base 0, 0;
I D_baseus [ <- <- Base de &usuar i o] ^C^C_base
[ - - ]
I D_bor r t d [ &Bor r ar t odo] ^C^C_er ase _al l ; ;
***HELPSTRI NGS
I D_phj 1 [ I nser t a una puer t a de 1 hoj a. ]
I D_phj 2 [ I nser t a una puer t a de 2 hoj as. ]
I D_vhj 1 [ I nser t a una vent a de 1 hoj a. ]
I D_vhj 2 [ I nser t a una vent a de 2 hoj as. ]
I D_si l l a [ I nser t a una si l l a. ]
I D_mesa [ I nser t a una mesa cuadr ada. ]
I D_cami l l a [ I nser t a una mesa cami l l a. ]
I D_sof a [ I nser t a un sof . ]
I D_ar mar [ I nser t a un ar mar i o empot r ado. ]
I D_cr ea [ Def i ne un bl oque. ]
I D_l i mpi a [ Li mpi a el bl oque o l os bl oques especi f i cados. ]
I D_Edat r [ Def i ne at r i but os par a un bl oque. ]
I D_base00 [ Si t a el punt o base de i nser ci n en el 0, 0, 0. ]
I D_baseus [ Si t a el punt o base de i nser ci n en el i ndi cado por el usuar i o. ]
I D_bor r t d [ Bor r a t odos l o obj et os del di buj o act ual . ]

NOTAS INTERESANTES:
1. Evidentemente, los bloques habrn de estar en alguno de los directorios de soporte de
AutoCAD o en algn otro especificado en alguna de las rutas de bsqueda bajo
Herr.>Preferencias..., en la pestaa de Archivos. Se puede aadir un directorio a estas
rutas de bsqueda (normalmente a los archivos de soporte).
2. Ntese que se pueden ordenar las diferentes opciones de men mediante tabuladores
y/o espaciados, pero las etiquetas siempre han de estar a partir del primer carcter de
lnea de men. (En el ejemplo no estn ordenadas, pero debera hacerse as).
3. No es necesario que las etiquetas de un men comiencen por I D_ (de IDentificador),
pero parece una forma lgica y simple de distinguirlas a simple vista y, as, llevar una
mejor organizacin del archivo de men.
4. Revsense y asimlense las tres pequeas macroinstrucciones (que casi ni lo son) de es-
te men. Para realizarlas hay que seguir estrictamente la secuencia que se reproducira
al introducir las rdenes y opciones por teclado (I NTROS incluidos).
UNO.6.3. Men de imagen y desplegable
/ / Aqu comi enza el ar chi vo de mens.
***MENUGROUP=MOBI L
/ / Ahor a si gue el men despl egabl e.
***POP12
[ &Mobi l i ar i o]
[ - >&Coci na]
[ &Mesas] $I =MOBI L. Coci naMesa $I =MOBI L. *
[ &Si l l as] $I =MOBI L. Coci naSi l l a $I =MOBI L. *
[ <- M&uebl es] $I =MOBI L. Coci naMuebl e $I =MOBI L. *
[ - >&Sal n]
[ &Sof s] $I =MOBI L. Sal nSof $I =MOBI L. *
[ &Mesas] $I =MOBI L. Sal nMesa $I =MOBI L. *
[ <- M&uebl es] $I =MOBI L. Sal nMuebl e $I =MOBI L. *
[ - >&Bao]
[ &Lavabos] $I =MOBI L. BaoLavabo $I =MOBI L. *
[ &Baer as] $I =MOBI L. BaoBaer a $I =MOBI L. *
[ Bi &ds] $I =MOBI L. BaoBi d $I =MOBI L. *
[ &I nodor os] $I =MOBI L. BaoI nodor o $I =MOBI L. *
[ <- &Muebl es] $I =MOBI L. BaoMuebl e $I =MOBI L. *
[ - >Habi t aci n]
[ &Mesi l l as] $I =MOBI L. Habi t aci nMesi l l a $I =MOBI L. *
[ &Camas] $I =MOBI L. Habi t aci nCama $I =MOBI L. *
[ <- <- M&uebl es] $I =MOBI L. Habi t aci nMuebl e $I =MOBI L. *
/ / Lo que vi ene ahor a es el men de i magen.
***I MAGE
**Coci naMesa
[ Mesas de coci na]
[ mobf ot ( mesc01, Mesa cuadr ada) ] ^C^C_i nser t C: / BI BLI O/ BLOQ/ COCI NA/ MESA/ mesc01. dwg
[ mobf ot ( mesc02, Mesa r ect ag. ) ] ^C^C_i nser t C: / BI BLI O/ BLOQ/ COCI NA/ MESA/ mesc02. dwg
[ mobf ot ( mesc03, Mesa ci r cul ar ) ] ^C^C_i nser t C: / BI BLI O/ BLOQ/ COCI NA/ MESA/ mesc03. dwg
[ mobf ot ( mesc04, Mesa ext ens. ) ] ^C^C_i nser t C: / BI BLI O/ BLOQ/ COCI NA/ MESA/ mesc04. dwg
**Coci naSi l l a
[ Si l l as de coci na]
[ mobf ot ( si l c01, Si l l a 1) ] ^C^C_i nser t C: / BI BLI O/ BLOQ/ COCI NA/ SI LLA/ si l c01. dwg
[ mobf ot ( si l c02, Si l l a 2) ] ^C^C_i nser t C: / BI BLI O/ BLOQ/ COCI NA/ SI LLA/ si l c02. dwg
[ mobf ot ( si l c03, Si l l a 3) ] ^C^C_i nser t C: / BI BLI O/ BLOQ/ COCI NA/ SI LLA/ si l c03. dwg
**Coci naMuebl e
[ Muebl es de coci na]
[ mobf ot ( mobc01, Muebl e 1) ] ^C^C_i nser t C: / BI BLI O/ BLOQ/ COCI NA/ MUEBL/ mobc01. dwg
[ mobf ot ( mobc02, Muebl e 2) ] ^C^C_i nser t C: / BI BLI O/ BLOQ/ COCI NA/ MUEBL/ mobc02. dwg
**Sal nSof
[ Sof s]
[ mobf ot ( sof s01, Sof dos pi ezas) ] ^C^C_i nser t c: / BI BLI O/ BLOQ/ SAL/ SOF/ sof s01. dwg
[ mobf ot ( sof s02, Sof una pi eza) ] ^C^C_i nser t c: / BI BLI O/ BLOQ/ SAL/ SOF/ sof s02. dwg
[ mobf ot ( sof s03, Sof en ngul o) ] ^C^C_i nser t c: / BI BLI O/ BLOQ/ SAL/ SOF/ sof s03. dwg
[ mobf ot ( sof s04, Esqui ner o) ] ^C^C_i nser t c: / BI BLI O/ BLOQ/ COCI NA/ SOF/ sof s04. dwg
**Sal nMesa
[ Mesas de sal n]
[ mobf ot ( mess01, Mesa oval ada) ] ^C^C_i nser t c: / BI BLI O/ BLOQ/ SAL/ MESA/ mess01. dwg
[ mobf ot ( mess02, Mesa r ect ang. ) ] ^C^C_i nser t c: / BI BLI O/ BLOQ/ SAL/ MESA/ mess02. dwg
**Sal nMuebl e
[ Muebl es de sal n]
[ mobf ot ( mobs01, Muebl e t el ev. ) ] ^C^C_i nser t c: / BI BLI O/ BLOQ/ SAL/ MUEBL/ mobs01. dwg
[ mobf ot ( mobs02, Muebl e 3 mdul . ) ] ^C^C_i nser t c: / BI BLI O/ BLOQ/ SAL/ MUEBL/ mobs02. dwg
**BaoLavabo
[ Lavabos]
[ mobf ot ( l avb01, ROCA- 1) ] ^C^C_i nser t c: / BI BLI O/ BLOQ/ BAO/ LAV/ l avb01. dwg
[ mobf ot ( l avb02, ROCA- 2) ] ^C^C_i nser t c: / BI BLI O/ BLOQ/ BAO/ LAV/ l avb02. dwg
[ mobf ot ( l avb03, ROCA- 3) ] ^C^C_i nser t c: / BI BLI O/ BLOQ/ BAO/ LAV/ l avb03. dwg
**BaoBaer a
[ Baer as]
[ mobf ot ( bab01, ROCA- 1) ] ^C^C_i nser t c: / BI BLI O/ BLOQ/ BAO/ BAERA/ bab01. dwg
[ mobf ot ( bab02, ROCA- 2) ] ^C^C_i nser t c: / BI BLI O/ BLOQ/ BAO/ BAERA/ bab02. dwg
[ mobf ot ( bab03, ROCA- 3) ] ^C^C_i nser t c: / BI BLI O/ BLOQ/ BAO/ BAERA/ bab01. dwg
**BaoBi d
[ Bi ds]
[ mobf ot ( bi db01, ROCA- 1) ] ^C^C_i nser t c: / BI BLI O/ BLOQ/ BAO/ BI D/ bi db01. dwg
[ mobf ot ( bi db02, ROCA- 2) ] ^C^C_i nser t c: / BI BLI O/ BLOQ/ BAO/ BI D/ bi db02. dwg
[ mobf ot ( bi db03, ROCA- 3) ] ^C^C_i nser t c: / BI BLI O/ BLOQ/ BAO/ BI D/ bi db03. dwg
**BaoI nodor o
[ I nodor os]
[ mobf ot ( i nob01, ROCA- 1) ] ^C^C_i nser t c: / BI BLI O/ BLOQ/ BAO/ I NOD/ i nob01. dwg
[ mobf ot ( i nob02, ROCA- 2) ] ^C^C_i nser t c: / BI BLI O/ BLOQ/ BAO/ I NOD/ i nob02. dwg
[ mobf ot ( i nob03, ROCA- 3) ] ^C^C_i nser t c: / BI BLI O/ BLOQ/ BAO/ I NOD/ i nob03. dwg
**BaoMuebl e
[ Muebl es de bao]
[ mobf ot ( mobb01, Muebl e 1) ] ^C^C_i nser t c: / BI BLI O/ BLOQ/ BAO/ MUEBL/ mobb01. dwg
[ mobf ot ( mobb02, Muebl e 2) ] ^C^C_i nser t c: / BI BLI O/ BLOQ/ BAO/ MUEBL/ mobb02. dwg
**Habi t aci nMesi l l a
[ Mesi l l as de noche]
[ mobf ot ( mesh01, Mesi l l a cuadr ada) ] ^C^C_i nser t c: / BI BLI O/ BLOQ/ HAB/ MESA/ mesh01. dwg
[ mobf ot ( mesh02, Mesi l l a ci r cul ar ) ] ^C^C_i nser t c: / BI BLI O/ BLOQ/ HAB/ MESA/ mesh02. dwg
**Habi t aci nCama
[ Camas]
[ mobf ot ( camh01, Cama 1. 20) ] ^C^C_i nser t c: / BI BLI O/ BLOQ/ HAB/ CAMA/ camh01. dwg
[ mobf ot ( camh02, Cama 1. 60) ] ^C^C_i nser t c: / BI BLI O/ BLOQ/ HAB/ CAMA/ camh02. dwg
[ mobf ot ( camh03, Cama 1. 90) ] ^C^C_i nser t c: / BI BLI O/ BLOQ/ HAB/ CAMA/ camh03. dwg
[ mobf ot ( camh04, Cama 2. 10) ] ^C^C_i nser t c: / BI BLI O/ BLOQ/ HAB/ CAMA/ camh04. dwg
**Habi t aci nMuebl e
[ Muebl es de habi t aci n]
[ mobf ot ( mobh01, Muebl e 1) ] ^C^C_i nser t c: / BI BLI O/ BLOQ/ HAB/ MUEBL/ mobh01. dwg
[ mobf ot ( mobh02, Muebl e 2) ] ^C^C_i nser t c: / BI BLI O/ BLOQ/ HAB/ MUEBL/ mobh02. dwg
/ / Fi n del ar chi vo de mens.
NOTAS INTERESANTES:
1. En este ejemplo vemos claramente la utilizacin de llamadas a submens de imgenes,
con su correspondiente activacin. Prubese a quitar dicha activacin de alguna de las
llamadas para comprobar el resultado.
2. Las llamadas a los diferentes submens de imgenes se realizan desde un men des-
plegable. Es posible, tambin, llamar a un men de imgenes desde otro men de im-
genes. Para hacer esto, en lugar de asociar a cada imagen un comando de insercin de
bloque, como en este ejemplo, debemos asociarle una referencia a otro submen; sen-
cillo.
3. Los comentarios con las dos barras inclinadas (/ / ) pueden incluirse en cualquier punto
del archivo de men, como podemos apreciar.
4. En el men de imagen y segn lo estudiado, mobf ot o es la librera de fotos, o fototeca,
donde se encuentran todas las fotos guardadas; la siguiente cadena (tras la apertura de
parntesis) es el nombre de la foto incluida en la fototeca (mesc01, mess02, mobs02,
camh04...); la cadena siguiente (tras la coma) es el nombre que veremos en la lista de
la izquierda del men de imagen. Despus de todo esto, viene el comando de insercin
de bloques con la ruta de acceso y el bloque propiamente dicho que se insertar. En es-
te caso, se han hecho las fotos con el mismo nombre que los bloques a los que corres-
ponden, pero, evidentemente, con extensin . SLD. Vase el MDULO NUEVE, el cual
se refiere a la obtencin de fotos y a la creacin de bibliotecas de fotos.
5. Aprciese que los caminos o rutas de acceso a archivos deben introducirse con barras
inclinadas normales (/), y no con barras inversas o contrabarras (\) como es habitual
en sistemas MS-DOS y Windows. Esta notacin que recuerda a UNIX y, por ende, a la
manera de indicar URLs en los navegadores Web, direcciones FTP, etctera se debe
aqu a la necesidad de la contrabarra o barra inversa (\ ) como smbolo especial para
entrada de datos por parte del usuario en una macroinstruccin (ya estudiado).
6. Evidentemente, tanto archivos . DWG como la fototeca . SLB debern estar el los directo-
rios indicados, en el directorio actual o en algn directorio o ruta de soporte de Auto-
CAD 14.
UNO.6.4. Men completo de cartografa
/ /
/ / Aut oCAD ar chi vo de mens - C: \ MENS\ CARTOGR. MNU
/ /
/ / NOTA I MPORTANTE:
/ / Par a gar ant i zar el acceso a l os ar chi vos de sopor t e de est e men,
/ / por medi o del comando PREFERENCI AS del men HERR, en l a pest aa
/ / ARCHI VOS se debe aadi r como CAMI NO DE BSQUEDA DE ARCHI VO DE SOPORTE
/ / el si gui ent e:
/ / C: \ MENS
***MENUGROUP=CARTOGR
***POP1
[ Ut i l s- Car t o]
I D_Pol _Gr osor [ Pol i l nea gr osor 0] ^C^C_pl i ne \ _w 0 0
I D_Pol _Cur 1 [ Pol cur vas1] ^C^C_l ayer _set cur vas1; ; _pl i ne \ _w 0 0
I D_Pol _Cur 10 [ Pol cur vas10] ^C^C_l ayer _set cur vas10; ; _pl i ne \ _w . 5 . 5
[ - - ]
I D_Bor r ar 1 [ Bor r ar 1] *^C^C_er ase \ ;
I D_Edi t pol 1 [ Edi t pol ] ^C^C_pedi t $s=edi t pol
I D_Cur va_B [ Cur va B] ^C^C_pedi t \ _s; ;
I D_Copi as [ Copi as] $S=X $s=desi gna ^C^C_sel ect \ _copy _p; ; _m
I D_Par t e1 [ Par t e @] *^C^C_br eak \ _f \ @
[ - >Cambi ar ]
I D_Cambi ar [ Cambi ar ] $S=X $s=desi gna ^C^C_change
I D_Cambi ar _col [ Cambi ar col or ] $S=X $s=desi gna _sel ect \ _change _p; ; _p _col ; \ ;
I D_Cambi ar _t xt [ Cambi ar t ext o] *^C^C_change; \ ; ; ; ; ; ;
I D_Cambi ar _capa [ <- Cambi ar capa] $S=X $s=desi gna ^C^C_sel ect \ _change _p; ; _p
_l ayer ; \ ;
[ - - ]
I D_ayuda_car t [ Ayuda] ^C^C( hel p " c: / mens/ car t ogr af . ahp" )
[ Bl oques- Car t o]
I D_I nser t ar [ I NSERTAR] ^C^C_DDI NSERT
[ banco] ^C^C_i nser t banco
[ f ar ol a] ^C^C_i nser t f ar ol a
[ qui osco] ^C^C_i nser t ki osko
[ pozo] ^C^C_i nser t pozo
[ r bol ] ^C^C_i nser t ar bol
[ cabi na] ^C^C_i nser t cabi na
[ f uent e] ^C^C_i nser t f uent e
[ caset a] ^C^C_i nser t caset a
[ t or r e] ^C^C_i nser t t or r e
[ post e] ^C^C_i nser t post e
[ er mi t a] ^C^C_i nser t er mi t a
***POP3
[ Capas- Car t o]
I D_Capas [ Gest i n de Capas] ^C^C_DDLMODES
[ Edi f i ci os] ^C^C_l ayer _set edi f i ci os; ;
[ Medi aner as] ^C^C_l ayer _set medi aner i as; ;
[ Acer as] ^C^C_l ayer _set acer as; ;
[ Cur vas1] ^C^C_l ayer _set cur vas1; ;
[ Cur vas10] ^C^C_l ayer _set cur vas10; ;
[ Car r et er as ] ^C^C_l ayer _set car r et er as; ;
[ Cami nos] ^C^C_l ayer _set cami nos; ;
[ Fer r ocar r i l ] ^C^C_l ayer _set f er r ocar r i l ; ;
[ R os] ^C^C_l ayer _set r i os; ;
[ Ar r oyos] ^C^C_l ayer _set ar r oyos; ;
[ Ar bol ado] ^C^C_l ayer _set ar bol ado; ;
[ Cul t i vos] ^C^C_l ayer _set cul t i vos; ;
[ T. el ct r i co] ^C^C_l ayer _set t _el ect r i co; ;
***TOOLBARS
**CARTOGRAFI A
**CARTOGRAF A
I D_Car t ogr af a [ _Tool bar ( " Car t ogr af a" , _Fl oat i ng, _Show, 238, 156, 1) ]
I D_L nea_1 [ _But t on( " L nea" , " I CON_16_LI NE" , " I CON_24_LI NE" ) ] ^C^C_l i ne
I D_Cent r o_Radi o_1 [ _But t on( " Cent r o Radi o" , " I CON_16_CI RRAD" ,
" I CON_24_CI RRAD" ) ] ^C^C_ci r cl e
I D_Pol i l nea_1 [ _But t on( " Pol i l nea" , " I CON_16_PLI NE" ,
" I CON_24_PLI NE" ) ] ^C^C_pl i ne
[ - - ]
I D_Bor r ar _1 [ _But t on( " Bor r ar " , " I CON_16_ERASE" , " I CON_24_ERASE" ) ] ^C^C_er ase
I D_Edi t ar _pol i l nea_1 [ _But t on( " Edi t ar pol i l nea" , " I CON_16_PEDI T" ,
" I CON_24_PEDI T" ) ] ^C^C_pedi t
I D_Equi di st anci a_1 [ _But t on( " Equi di st anci a" , " I CON_16_OFFSET" ,
" I CON_24_OFFSET" ) ] ^C^C_of f set
[ - - ]
I D_i nser _car t [ _But t on( " S mbol os" , " I CON5705. bmp" ,
" I CON_24_BLANK" ) ] ^C^C$I =car t ogr . Si mb_car t o $I =*
[ - - ]
I D_ayuda_car t [ _But t on( " Ayuda" , " I CON4464. bmp" , " I CON_24_BLANK" ) ] ^C^C( hel p
" c: / mens/ car t ogr af . ahp" )
[ - - ]
I D_Ct r l _Lyr _1 [ _Cont r ol ( _Layer ) ]
***I MAGE
**SI MB_CARTO
[ Bl oques de Car t ogr af a]
[ si mbcar t ( banco, Banco) ] ^C^C_i nser t banco
[ si mbcar t ( f ar ol a, Far ol a) ] ^C^C_i nser t f ar ol a
[ si mbcar t ( qui osco, Qui osco) ] ^C^C_i nser t ki osko
[ si mbcar t ( pozo, Pozo) ] ^C^C_i nser t pozo
[ si mbcar t ( ar bol , r bol ) ] ^C^C_i nser t ar bol
[ si mbcar t ( cabi na, Cabi na) ] ^C^C_i nser t cabi na
[ si mbcar t ( f uent e, Fuent e) ] ^C^C_i nser t f uent e
[ si mbcar t ( caset a, Caset a) ] ^C^C_i nser t caset a
[ si mbcar t ( t or r e, Tor r e) ] ^C^C_i nser t t or r e
[ si mbcar t ( post e, Post e) ] ^C^C_i nser t post e
[ si mbcar t ( er mi t a, Er mi t a) ] ^C^C_i nser t er mi t a
***HELPSTRI NGS
I D_POL_GROSOR [ Di buj a una pol i l nea de gr osor 0]
I D_POL_CUR1 [ Di buj a una pol i l nea en l a capa Cur vas1 con gr osor 0]
I D_POL_CUR10 [ Di buj a una pol i l nea en l a capa Cur vas1O con gr osor 0. 5]
I D_BORRAR1 [ Supr i me un ni co obj et o del di buj o cada vez]
I D_EDI TPOL1 [ Edi t a pol i l neas y mal l as pol i gonal es t r i di mensi onal es: edi t pol ]
I D_CURVA_B [ Convi er t e una pol i l nea en cur va B]
I D_COPI AS [ Real i za var i as copi as de l os obj et os desi gnados]
I D_PARTE1 [ Par t e un obj et o por un sl o punt o]
I D_CAMBI AR [ Comando Cambi a]
I D_CAMBI AR_COL [ Cambi a el col or de l os obj et os desi gnados]
I D_CAMBI AR_TXT [ Modi f i ca un t ext o i nser t ado en el di buj o]
I D_CAMBI AR_CAPA [ Cambi a l a capa de l os obj et os desi gnados]
I D_I NSERTAR [ Per mi t e l a i nser ci n de bl oques en el di buj o]
I D_CAPAS [ Accede al cuadr o de di l ogo par a l a gest i n de capas: Ddl modes]
I D_CARTOGRAF A [ Men espec f i co par a l a apl i caci n de car t ogr af a]
I D_L NEA_1 [ Cr ea segment os de l nea r ect a: l nea]
I D_CENTRO_RADI O_1 [ Cr ea c r cul os medi ant e el cent r o y el r adi o: c r cul o]
I D_POLI L NEA_1 [ Cr ea pol i l neas bi di mensi onal es: pol ]
I D_BORRAR_1 [ Supr i me obj et os de un di buj o: bor r a]
I D_EDI TAR_POLI L NEA_1 [ Edi t a pol i l neas y mal l as pol i gonal es t r i di mensi onal es:
edi t pol ]
I D_EQUI DI STANCI A_1 [ Cr ea c r cul os concnt r i cos y l neas y cur vas par al el as: eq-
di st ]
I D_I NSER_CART [ I nser ci n de si mbol og a medi ant e un men de i conos]
I D_AYUDA_CART [ Ayuda sobr e l a apl i caci n de car t ogr af a]
I D_CTRL_LYR_1 [ Gest i n de capas medi ant e bot n despl egabl e especi al ]
/ /
/ / Fi nal de Aut oCAD ar chi vo de mens - C: \ MENS\ CARTOGR. MNU
/ /
NOTAS INTERESANTES:
1. Este es un ejemplo muy jugoso de men parcial para AutoCAD. En l estn incluidos
tres mens desplegables, un men de imgenes o iconos, la definicin de una barra de
herramientas y una seccin ***HELPSTRI NGS.
2. Ntese que todos los elementos de este men debern estar almacenados en disco, pa-
ra su correcto funcionamiento, y en la carpeta actual o en alguna de soporte, ya que no
se indican rutas de acceso a archivos en casi ningn punto del archivo.
3. Algunos de los conceptos an no han sido estudiados, como la personalizacin y crea-
cin de archivos de ayuda tipo Windows, o ciertas notaciones que podemos encontrar
en el ejemplo. No hay que preocuparse por esto, ya se ver en su momento todo.
UNO.FIN. EJERCICIOS PROPUESTOS
I. Revsese el ltimo ejemplo explicado (men de cartografa) y analcense ciertos espa-
cios en blanco incluidos en algunas lneas. Que ocurrira si no existieran dichos espa-
cios?
II. Crear un archivo de men de AutoCAD 14 que, mediante mens desplegables y de
persiana, permita la insercin de bloques cualesquiera en un dibujo, con la escala
predeterminada para todos ellos de 1:5.
III. Realizar un archivo de mens en el que, desde un men desplegable, se llame a un
men de imagen y, desde ste, a otros mens de imagen (ms de cuatro). Contemplar
la posibilidad de retornar al men principal desde cada uno de ellos. NOTA: Al no haber
sido estudiado el apartado de fotos y fototecas, los mens de imagen pueden quedar
vacos, pero slo en sus cuadros de iconos.
IV. Modificar el men de pantalla de AutoCAD 14 aadindole nuevas opciones que permi-
tan el cambio interactivo de los modos ortogonal (Orto), forzado de cursor (Forzcursor)
y la rejilla (Rejilla) del programa, as como el cambio de valores de la variable TI LEMODE
y la permutacin entre Espacio Modelo Mosaico y Espacio Papel/Modelo Flotante de Au-
toCAD 14. Pemitir la vuelta al men anterior.
V. Modificar las definiciones de las secciones ***BUTTONS (o ***AUX) del archivo de mens
de AutoCAD 14 para permutar o variar al gusto las funciones de los pulsadores del
dispositivo sealador actual del sistema.
VI. Crear un archivo de men con las definiciones de una barra de herramientas que con-
tenga cuatro botones, los cuales realizarn las siguientes funciones respectivamente:
dibujar polilneas (por el usuario) con grosor 3; dibujar rectngulos de tamao variable
y achaflanados en sus cuatro esquinas; limpiar bloques sin pedir confirmacin; dibujar
una polilnea (por el usuario), copiar el resultado mltiples veces a los puntos indicados
(por el usuario) y realizar una regeneracin del dibujo.
VII. Crear un botn desplegable con la barra de herramientas anterior.
VIII. Crear una serie de teclas rpidas que ejecuten diversos comandos de AutoCAD
que carezcan de ellas.
IX. Modificar la seccin ***TABLET del archivo de mens de AutoCAD 14 asignando la in-
sercin de bloques a diferentes casillas.
X. Crear un archivo de men completo con todas las definiciones necesarias para un ofici-
na tcnica de calderera y piping.
EJERCICIOS RESUELTOS DEL MDULO UNO
EJERCICIO I
Analicemos la lnea siguiente:
[ f ar ol a] ^C^C_i nser t f ar ol a
Los espacios que se encuentran antes de f ar ol a simplemente estn para sangrar las lneas de
estas opciones dentro del desplegable; cuestin de esttica.
NOTA: Parece ser que, por error visual al comprimir la fuente para que todas las letras entren
en una lnea, no aparecen los guiones de subrayado antes de los comandos y opciones en in-
gls (_i nser t , por ejemplo). Esto es slo eso, un error visual al ser representado en pantalla,
ya que al imprimir la pgina s aparecern. Pero ojo, no existe ni puede existir ningn espacio
entre ^C^C y el comando de AutoCAD, porque de ser as, se ejecutara un I NTRO y se repetira
el comando anterior. La macro sera fallida.
EJERCICIO II
***MENUGROUP=BLOQUES
***POP1
[ Bl o&ques]
[ - >&Mecni ca]
[ &Tuer ca] ^C^C_i nser t c: / bl oques/ t uer ca. dwg \ 1. 5; ; ;
[ T&or ni l l o] ^C^C_i nser t c: / bl oques/ t or ni l l o. dwg \ 1. 5; ; ;
[ &Ar andel a] ^C^C_i nser t c: / bl oques/ ar andel a. dwg \ 1. 5; ; ;
[ <- &J unt a] ^C^C_i nser t c: / bl oques/ j unt a. dwg \ 1. 5; ; ;
[ - >&El ect r ni ca]
[ &Di odo] ^C^C_i nser t c: / bl oques/ di odo. dwg \ 1. 5; ; ;
[ &Resi st enci a] ^C^C_i nser t c: / bl oques/ r esi st . dwg \ 1. 5; ; ;
[ <- &Condensador ] ^C^C_i nser t c: / bl oques/ cond. dwg \ 1. 5; ; ;
[ - >&Pi pi ng]
[ &Tubo] ^C^C_i nser t c: / bl oques/ t ubo. dwg \ 1. 5; ; ;
[ &Codo] ^C^C_i nser t c: / bl oques/ codo. dwg \ 1. 5; ; ;
[ <- &Vl vul a] ^C^C_i nser t c: / bl oques/ val vul . dwg \ 1. 5; ; ;
[ - >&Topogr af a]
[ &Vr t i ce] ^C^C_i nser t c: / bl oques/ ver t i ce. dwg \ 1. 5; ; ;
[ &r bol ] ^C^C_i nser t c: / bl oques/ ar bol . dwg \ 1. 5; ; ;
[ &Casa] ^C^C_i nser t c: / bl oques/ casa. dwg \ 1. 5; ; ;
[ <- <- &Est aci n] ^C^C_i nser t c: / bl oques/ est aci on. dwg \ 1. 5; ; ;
EJERCICIO III
***MENUGROUP=I MAGEN
***POP1
[ &Bl oques]
[ &I nser t ar ] $I =I MAGEN. I nser bl q $I =I MAGEN. *
***I MAGE
**I nser bl q
[ Gr upos]
[ Gr upo 1] $I =I MAGEN. Gr 1 $I =I MAGEN. *
[ Gr upo 2] $I =I MAGEN. Gr 2 $I =I MAGEN. *
[ Gr upo 3] $I =I MAGEN. Gr 3 $I =I MAGEN. *
[ Gr upo 4] $I =I MAGEN. Gr 4 $I =I MAGEN. *
[ Gr upo 5] $I =I MAGEN. Gr 5 $I =I MAGEN. *
**Gr 1
[ Bl oques Gr upo 1]
[ Bl oque 11] ^C^C_i nser t bl 11
[ Bl oque 21] ^C^C_i nser t bl 21
[ Bl oque 31] ^C^C_i nser t bl 31
[ Vol ver ] $I =I MAGEN. I nser bl q $I =I MAGEN. *
**Gr 2
[ Bl oques Gr upo 2]
[ Bl oque 12] ^C^C_i nser t bl 12
[ Bl oque 22] ^C^C_i nser t bl 22
[ Bl oque 32] ^C^C_i nser t bl 32
[ Bl oque 42] ^C^C_i nser t bl 42
[ Vol ver ] $I =I MAGEN. I nser bl q $I =I MAGEN. *
**Gr 3
[ Bl oques Gr upo 3]
[ Bl oque 13] ^C^C_i nser t bl 13
[ Bl oque 23] ^C^C_i nser t bl 23
[ Vol ver ] $I =I MAGEN. I nser bl q $I =I MAGEN. *
**Gr 4
[ Bl oques Gr upo 4]
[ Bl oque 14] ^C^C_i nser t bl 14
[ Bl oque 24] ^C^C_i nser t bl 24
[ Bl oque 34] ^C^C_i nser t bl 34
[ Bl oque 44] ^C^C_i nser t bl 44
[ Bl oque 54] ^C^C_i nser t bl 54
[ Vol ver ] $I =I MAGEN. I nser bl q $I =I MAGEN. *
**Gr 5
[ Bl oques Gr upo 5]
[ Bl oque 15] ^C^C_i nser t bl 15
[ Bl oque 25] ^C^C_i nser t bl 25
[ Bl oque 35] ^C^C_i nser t bl 35
[ Bl oque 45] ^C^C_i nser t bl 45
[ Vol ver ] $I =I MAGEN. I nser bl q $I =I MAGEN. *
NOTA: Recurdese introducir un I NTRO al final de la ltima lnea de los archivos de men, de
otra forma no funcionarn correctamente.
EJERCICIO IV
Bajo ***SCREEN y **S
[ MODOS ] $S=ACAD. Modos
Despus
**Modos 3
[ Or t o ] ^O
[ For zcoor ] ^B
[ Rej i l l a ] ^G
[ TI LE 1 ] TI LEMODE 1
[ TI LE 0 ] TI LEMODE 0
[ EspPAPEL] EP
[ EspMODEL] EM
[ VOLVER] $I =ACAD.
NOTA: Recurdese la importancia de los amplios espaciados.
EJERCICIO V
Bajo ***BUTTONS1 o ***AUX1
$P0=SNAP $p0=*
^C^C_l i ne
Bajo ***BUTTONS2 o ***AUX2
^O
^B
Bajo ***BUTTONS3 o ***AUX3
(vaco)
Bajo ***BUTTONS4 o ***AUX4
^C^C_pol \ _w 3 3
^C^C_pur ge
EJERCICIO VI
***MENUGROUP=Bar r a
***TOOLBARS
**Var i os
I D_Var i os [ _Tool bar ( " Var i os" , _Fl oat i ng, _Show, 400, 50, 0) ]
I D_PG3 [ _But t on( " Pol gr osor 3" , " I CPol P. BMP" , " I CPol G. BMP" ) ] ^C^C_pol \ _w 3 3
I D_Rect [ _But t on( " Rect chaf l n" , " I CRecP. BMP" , " I CRecG. BMP" ) ] ^C^Cr ect ang c 5 5
I D_PC [ _But t on( " Pol yCopy" , " I CPCP. bmp" , " I CPCG.BMP" ) ] ^C^Cpol \ \ \ copi a u m@\ \
r egen
I D_LB [ _But t on( " Li mpi aBl oque" , " I CLBP. BMP " , " I CLBG. BMP" ) ] ^C^C_pur ge b; ; n
***HELPSTRI NGS
I D_Var i os [ Bar r a de var i as her r ami ent as]
I D_PG3 [ Di buj a pol i l neas de gr osor 3]
I D_Rect [ Di buj a r ect ngul os achaf l anados]
I D_PC [ Di buj a y copi a pol i l neas]
I D_LB [ Li mpi a bl oques si n pedi r conf i r maci n]
EJERCICIO VII
***MENUGROUP=Bar r a
***TOOLBARS
**DESPLEG
D_DV [ _Fl yout ( " Despl egabl e Var i os" , VP. BMP, VG. BMP, _Ot her I con, BARRA. Var i os) ]
***HELPSTRI NGS
I D_DV [ Bot n despl egabl e de l a bar r a VARI OS]
EJERCICIO VIII
***ACCELERATORS
I D_Li ne [ SHI FT+CONTROL+" L" ]
I D_Qui t [ " ESCAPE" ]
I D_Ci r cl e [ SHI FT+" HOME" ]
I D_Pur ge [ CONTROL+" F12" ]
[ SHI FT+" DOWN" ] ^C^C_scp _w
[ " NUMPAD9" ] ^C^C_t absur f
EJERCICIO IX
***TABLET1
. . .
**TABLET1ALT
**BL1
<1>[ T1- 1] ^C^C_i nser t c: / bl oques/ bl 0001. dwg
<2>[ T1- 2] ^C^C_i nser t c: / bl oques/ bl 0002. dwg
<4>[ T1- 4] ^C^C_i nser t c: / bl oques/ bl 0004. dwg
<6>[ T1- 6] ^C^C_i nser t c: / bl oques/ bl 0006. dwg
<34>[ T1- 34] ^C^C_i nser t c: / bl oques/ bl 0034. dwg
<35>[ T1- 35] ^C^C_i nser t c: / bl oques/ bl 0035. dwg
<70>[ T1- 70] ^C^C_i nser t c: / bl oques/ bl 0070. dwg
<175>[ T1- 175] ^C^C_i nser t c: / bl oques/ bl 0175. dwg
<182>[ T1- 182] ^C^C_i nser t c: / bl oques/ bl oq0182. dwg
<183>[ T1- 183] ^C^C_i nser t c: / bl oques/ bl oq0183. dwg
<184>[ T1- 184] ^C^C_i nser t c: / bl oques/ bl oq0184. dwg
<185>[ T1- 185] ^C^C_i nser t c: / bl oques/ bl oq0185. dwg
<199>[ T1- 199] ^C^C_i nser t c: / bl oques/ bl oq0199. dwg
<200>[ T1- 200] $T1=ACAD. B2
EJERCICIO X
(Ejercicio completo para resolver por tcnicos y/o especialistas).


Autor: J onathan Prstamo Rodrguez

MDULO DOS
Personalizacin de barras de he-
rramientas desde AutoCAD 14
DOS.1. INTRODUCCIN
En el MDULO UNO vimos la posibilidad de introducir en los archivos de mens las definicio-
nes necesarias para el funcionamiento de las barras de herramientas de AutoCAD. Si recor-
damos, estas definiciones eran difciles de comprender y llevar a la prctica por el simple he-
cho de introducirlas como lneas de cdigo puro. Por ello, y para una realizacin ms intuitiva
de estas barras de herramientas, AutoCAD 14 provee al usuario de una interfaz sencilla en su
manejo que nos proporciona un total dominio sobre su creacin.
DOS.2. EL PRIMER ACERCAMIENTO
Bajo Ver>Barras de herramientas... entramos en la interfaz dicha. De esta forma se abre el
cuadro de dilogo Barras de herramientas. En este cuadro tenemos varios elementos que pa-
samos a comentar a continuacin.

En el cuadro principal Barras de herramientas: podemos visualizar todas la barras incluidas en
el grupo de mens indicado bajo dicho cuadro (Grupo de mens:). Si cambiamos el archivo de
men en esta lista desplegable, evidentemente los nombres de barras de herramientas varia-
rn, visualizndose las correspondientes al archivo elegido. Las barras de men se presentan
identificadas por su nombre y con una casilla de verificacin a su izquierda. Si dicha casilla
est activada () la barra ser visible en pantalla; si no lo est () la barra permanecer
oculta. Desde este cuadro activaremos (visualizaremos) o no las diversas barras de herramien-
tas de AutoCAD.
En la parte inferior del cuadro de dilogo aparecen dos casillas de verificacin. Botones gran-
des, muestra los botones de barras de herramientas en su formato grande (refirase al M-
DULO anterior para comprender esto) en monitores de pantalla grande y/o configurados en
alta resolucin. Mostrar pistas activa o desactiva la pista o tip amarillo que aparece al situar el
puntero del ratn sobre cualquiera de los botones de una barra de herramientas.
A la derecha del cuadro aparecen unos botones que se explican a continuacin. Cerrar cierra el
cuadro de dilogo actual. Con Nueva... empezaremos con la creacin de una nueva barra de
herramientas; lo veremos ms adelante. Suprimir elimina la barra designada en el cuadro de
la izquierda (Barras de herramientas:). Con Personalizar... (que ya veremos) aadimos o qui-
tamos botones a nuestra barra de herramientas o a una ya creada. El botn Propiedades...
muestra la propiedades de la barra designada. Estas propiedades son las que siguen:
Propiedad: Explicacin
Nombre: Es el nombre de la barra y el que aparece en la lista Barras de herramientas... del
cuadro principal Barras de herramientas.
Ayuda: Es el texto que aparece en la lnea de estado de AutoCAD al situar el puntero del ra-
tn sobre una barra de herramientas, esto es, sobre un intersticio o pequeo espacio vaco, y
no sobre un botn.
Alias: Es el nombre interno que utiliza AutoCAD para la barra de herramientas. Este nombre
est formado por el nombre del archivo de men donde se encuentra definida la barra, un
punto y el nombre de alias dado a la propia barra en el archivo de men. Por ejemplo, -
ACAD. TB_DI MENSI ON es el alias para la barra de herramientas de acotacin, includa en el -
ACAD. MNU.
Por ltimo, el botn Ayuda del cuadro Barras de herramientas muestra la ayuda correspon-
diente a esta cuadro del fichero de ayuda de AutoCAD 14.
NOTA: El cuadro de dilogo de manejo de barras de herramientas tambin puede ser arranca-
do mediante el comando BARRAHERR (abrebiado BH), su correspondiente equivalencia sajona
TOOLBAR (abrebiado TB) para versiones inglesas (_TOOLBARS para las dems versiones idiom-
ticas del programa) o mediante la casilla X-7 de la plantilla de AutoCAD 14 para el tablero
digitalizador.
DOS.3. NUESTRA BARRA DE HERRAMIENTAS
Para la creacin de nuestra primera barra de herramientas vamos a exponer un ejemplo prc-
tico, de esta manera conseguiremos un total comprendimiento del proceso que debemos se-
guir. As pues, vamos a crear un barra de herramientas que contenga un solo botn que cree
polilneas con grosor 3.
Para todo ello vamos a crear un archivo de men donde se guardarn las definiciones de la
barra. Podramos crearla directamente en el grupo de mens ACAD, pero conviene no mezclar
nuestra propias barras con las del programa para que cada cosa est en su sitio. Dicho archivo
de men se llamar NUEVO. MNU y nicamente tendr escrita la lnea siguiente:
***MENUGROUP=NUEVO
De esta forma, creamos un archivo de men vaco y preparado. Lo guardaremos y lo cargare-
mos en AutoCAD como aprendimos en el MDULO UNO.
Accedemos ahora al cuadro Barras de herramientas y pulsamos el botn Nueva.... Se abre
entonces un nuevo cuadro denominado Nueva barra de herramientas. En este cuadro le dare-
mos un nombre a nuestra nueva barra (POLGROSOR, por ejemplo) en la casilla Nombre de la
barra de herramientas: y elegiremos el grupo donde queramos introducir sus definiciones en la
lista desplegable Grupo de mens:. Es importante asegurarse de que estamos en el grupo de
mens adecuado. Pulsamos el botn Aceptar. Nuestra barra ha sido ya creada, la veremos
superpuesta a la barra de herramientas de AutoCAD 14 Propiedades de objetos, an sin bo-
tones, sobre el cuadro de dilogo actual.
NOTA: Si al entrar en el cuadro Nueva barra de herramientas, en el cuadro Barra de herra-
mientas tenamos elegido un grupo de mens que no es el que nos interesa para nuestra ba-
rra, al volver atrs pulsado el botn Aceptar podemos ver incluida nuestra barra en el grupo de
mens que no es, o sea, en el que estbamos antes de pulsar Nueva.... Esto es slo un efecto
visual (pequeo bug de AutoCAD 14 quizs), ya que si elegimos ahora el grupo de mens
adecuado podremos ver como nuestra barra se ha incluido donde debe; si volvemos al grupo
anterior apreciaremos que ya no se encuentra all.
DOS.3.1. Aadiendo botones a la barra
El siguiente paso consiste en agregar botones (uno en nuestro caso) a la recin creada barra
de herramientas. Para ello deberemos pulsar el botn Personalizar... del cuadro Barras de he-
rramientas teniendo designada nuestra barra. Al pulsar dicho botn se abre un nuevo cuadro
llamado Personalizar barras de herramientas. En l podemos apreciar varias zonas: la lista
desplegable Categoras:, donde se encuentran todas las barras de AutoCAD 14 por categoras
y algunas extra que ahora explicaremos; un cuadro bajo la lista anterior que muestra todos los
botones incluidos en la categora elegida; y un cuadro de descripcin donde podemos leer un
pequeo texto explicativo de cada botn al pulsarlo.

Desde este cuadro podemos aadir botones a nuestra barra de herramientas personalizada. La
forma de hacerlo es, una vez escogida la categora y el botn que vamos a aadir, arrastrarlo
(pinchar, mantener, mover y soltar) a la nueva barra. As, podemos crear una barra personali-
zada con los comandos que ms utilicemos de AutoCAD. Para hacer una prueba podemos
arrastrar el botn del comando que dibuja lneas (LI NEA). Una vez colocado en su sitio, pulse-
mos sobre l con el botn derecho del ratn. Al hacer esto aparece un nuevo cuadro de dilogo
denominado Propiedades del botn. Estas propiedades son similares a las de las barra de he-
rramienta antes explicadas, y son las siguientes:

Propiedad - Explicacin
Nombre: Es el nombre que le damos al botn. Es el que aparece en forma de pequea pista o
tip amarillo al posicionar el cursor sobre el botn (si estas pistas estn activadas, como hemos
visto).
Ayuda: Es el texto que aparece en la lnea de estado de AutoCAD al situar el puntero del ra-
tn sobre un botn cualquiera.
Macro: Es la macroinstruccin, o instruccin simple, que determina el funcionamiento del bo-
tn, esto es, la accin o serie de acciones que realizar al ser pulsado.
Icono del botn - Es el icono que ir representado sobre el botn. Puede ser uno cualquiera de
AutoCAD 14 o uno propio personalizado. Esto ltimo lo conseguimos pulsando el botn Edi-
tar... del cuadro de dilogo (se explica ms adelante).
DOS.3.2. Aadiendo un botn vaco
Pero como nosotros queremos aadir un botn propio sin ninguna definicin, deberemos recu-
rrir a otro mtodo.
NOTA: No deberemos cambiar las propiedades de un botn de AutoCAD, a no ser que lo ha-
gamos con conocimiento de causa, ya que no se pueden "guardar como" y lo que haramos
sera cambiar las definiciones originales del botn.
Lo primero que haremos ser eliminar el botn de la orden LI NEA que habamos agregado a
nuestra barra de herramientas. Para ello, y teniendo en pantalla el cuadro de dilogo Persona-
lizar barras de herramientas de otra forma no funciona, arrastraremos dicho botn desde
la barra a la pantalla grfica de AutoCAD, esto es, como dejndolo "caer al vaco"; el botn
desaparecer (internamente se eliminarn su definiciones del archivo de men correspondien-
te). Esta es la forma de eliminar botones de una barra de herramientas de AutoCAD.
NOTA: No lo "dejemos caer" sobre otra barra de herramientas, ya que de esa manera de aa-
dir a dicha barra.
Para agregar ahora un botn vaco a nuestra barra, dentro del cuadro Personalizar barras de
herramientas, elegiremos la categora Personalizar. Dentro de esta categora existen dos tipos
de botn: uno simple y otro desplegable. De los botones desplegables hablaremos ms adelan-
te; aadamos ahora segn el mtodo explicado un botn simple a la barra.
Como hemos expuesto anteriormente, hacemos clic sobre este nuevo botn con el botn dere-
cho del ratn; aparecer el cuadro Propiedades del botn explicado. Como nombre le damos,
por ejemplo, POLGR 3. Esta casilla deber estar obligatoriamente rellena, si no AutoCAD da un
mensaje de error. En la casilla de Ayuda: escribimos, por ejemplo, Di buj a pol i l neas con
gr osor 3. Y la macroinstruccin sera la siguiente:
^C^C_pol \ _w 3 3
La explicacin es bien sencilla: ^C^C para anular cualquier otro comando en curso (lo pone
AutoCAD por defecto); _pol y un espacio (o punto y coma) para escribir y aceptar la orden de
dibujo de polilneas; \ para dejar introducir al usuario el primer punto de la polilnea; _w y es-
pacio (o punto y coma) para escribir y aceptar la opcin de grosor; 3 y espacio (o punto y co-
ma) y otro 3 para escribir y aceptar el grosor inicial y final (en este caso de 3 unidades de di-
bujo). El resto ya corre a cargo del usuario, pues deber ir introduciendo diferentes puntos
(hasta acabar con I NTRO) como en el comando original.
NOTA: Todos los caracteres especiales introducibles en macroinstrucciones estn explicados en
el MDULO UNO de este curso. Como vimos en l, podemos introducir macros en mens de
AutoCAD, pero donde realmente cobran sentido estos pequeos "programas" es en la defini-
cin de botones.
NOTA: Como sabemos, los caracteres ^C^C pueden eliminarse de estas macros (simplemente
borrndolos) si no nos interesan.
DOS.3.3. Editar el icono del botn
El ltimo paso en la creacin de un botn consiste en darle una figura o icono representativo
del mismo. Tenemos varias opciones: dejarlo vaco (no es conveniente), asignarle un icono de
AutoCAD 14 (tampoco es muy conveniente por razones obvias), editar o modificar un icono
de AutoCAD 14, crear uno propio mediante el editor incluido o asignarle uno creado en otro
editor de mapas de bits (MS Paint por ejemplo). Todas estas operaciones las elegimos desde el
rea Icono del botn del cuadro de dilogo Propiedades del botn.
En la lista de iconos de esta rea podemos escoger uno de los iconos de AutoCAD 14 o, inclu-
so, uno vaco. El mtodo ms recomendable ser elegir uno existente o uno vaco y editarlo
(modificar o crear desde cero) por medio del editor de iconos incluido en el programa. Este
editor se arranca, una vez elegido el icono, con el botn Editar... del cuadro de dilogo.
El Editor de botones es una interfaz sencilla e intuitiva para la creacin de iconos. Pasamos
ahora a describir sus reas.

En la parte de la derecha tenemos el rea de la paleta de colores. En ella existen 16 cuadros
con igual nmero de colores que podemos aplicar a nuestro icono. Una de estas casillas deber
ser designada antes o despus de cualquiera de las cuatro siguientes herramientas de dibujo.
Las herramientas de dibujo, en la parte superior del cuadro, son, de izquierda a derecha, la de
dibujo pixel a pixel, dibujo de lneas, dibujo de crculos y borrado pixel a pixel.
En la zona izquierda tenemos, arriba del todo, una presentacin preliminar de la figura del ico-
no en pequeo y, debajo de sta, una casilla de verificacin llamada Rejilla. Esta casilla, cuan-
do est activada, despliega un cuadriculado en la figura del icono (situada en medio y en for-
mato ampliado) que facilita las operaciones de modificacin y dibujo del mismo. Bajo esta casi-
lla existen tres botones: Borrar, que borra la figura del icono; Abrir..., que permite cargar un
icono existente en un archivo de extensin . BMP (mapa de bits); y Deshacer, que elimina la
ltima operacin realizada.
NOTA: Al editar un icono para AutoCAD en un editor de mapas de bits habr de tenerse muy
en cuenta el formato de dichos iconos, es decir, el tamao en pixeles de 16 de ancho por 15
de alto (icono pequeo estndar). Con el editor incluido en el programa no se pueden crear
iconos de formato grande (24 de ancho por 22 de alto), habremos de crearlos, si se necesitan,
con un editor externo e incluir la referencia al . BMP en el archivo de men.
Por ltimo, en el rea inferior del cuadro de dilogo, nos encontramos cuatro botones que, de
izquierda a derecha, son: Guardar como..., que guarda el icono con un nombre y en un direc-
torio elegido por nosotros y con la extensin . BMP; Guardar, que simplemente guarda el icono,
lo hace el propio AutoCAD con un nombre interno y, en principio, en el directorio donde se
encuentre el archivo de men que encierra las definiciones de la barra de herramientas crea-
da; Cerrar, que cierra el cuadro preguntando si no se han guardado los cambios; y Ayuda, que
arranca la ayuda en lnea de AutoCAD 14 en la seccin correspondiente al Editor de botones.
NOTA: Si se deja un icono vaco o si AutoCAD no encuentra el archivo . BMP al iniciarse, el
botn recibir por defecto un simptico icono en forma de pequeo smiley, o cara sonriente,
con gafas de sol.
NOTA: A veces AutoCAD guarda, junto al icono creado, otro archivo . BMP con un icono vaco;
no debemos preocuparnos de ello ya que son acciones internas del programa.
Y lo que queda ahora es la propia pericia del usuario dibujando iconos. Recomendamos exami-
nar los propios iconos de AutoCAD para aprehender las tcnicas de suavizado (con colores
ms oscuros adyacentes a los principales), relieve, dimensin, etctera.
Al acabar de dibujar el icono, guardamos los cambios, cerramos el cuadro, pulsamos Aplicar en
el cuadro Propiedades del botn, lo cerramos (con la X de la ventana) y pulsamos Cerrar en el
cuadro Barras de herramientas. El proceso habr finalizado, AutoCAD recargar los mens y
podremos utilizar nuestro nuevo botn.
NOTA: Para acceder rpidamente a la propiedades de un botn creado, o de uno de los de Au-
toCAD 14, nicamente deberemos realizar doble clic con el botn derecho del ratn en dicho
botn.
DOS.4. BOTONES DESPLEGABLES
Como sabemos, en AutoCAD, adems de los botones simples existen una serie de botones
desplegables. Estos, como por ejemplo el de Vi st as con nombr e o el del SCP, son botones
que, al ser pulsados y mantenidos, despliegan una lista de botones (barra de herramientas)
que lleva implcita el que cada uno de los botones que incluye suele tener similitud con el re-
sto, en cuestin de accin o ejecucin de comandos. Estos botones tambin pueden ser crea-
dos y/o modificados en AutoCAD 14. La manera la explicaremos en seguida, pero antes, va-
mos a ver la propiedades de un botn desplegable cualquiera haciendo doble clic en l con el
botn derecho del ratn. Estas propiedades tambin son similares a las de las barras de
herramientas y a las de los botones simples; son las que siguen:
Propiedad - Explicacin
Nombre: Es el nombre que le damos al botn. Aparecer como pista o tip amarillo dependien-
do de la casilla de verificacin Mostrar el icono de este botn.
Ayuda: Es el texto que aparece en la lnea de estado de AutoCAD y se corresponde con el de
la barra de herramientas asociada si est activada la casilla comentada.
Barra de herramientas asociada: Es la barra de herramientas que desplegar el botn al ser
pulsado. Viene identificada por el nombre de grupo de mens (***MENUGROUP= en el archivo),
un punto (. ) y el nombre en s de la barra. Aparecern en la lista todas las barras de todos los
archivos de men cargados.
Icono del botn: Al igual que en el cuadro de propiedades de botones simples, desde aqu po-
demos elegir o editar un icono para nuestro botn desplegable.
Mostrar el icono de este botn: Casilla de verificacin que, activada hace que el icono actual
visualizado sea el propio del botn; desactivada hace que se visualice en el botn desplegable
la ltima herramienta utilizada de la barra asociada (tpico de los botones desplegables de Au-
toCAD).
La manera de crear un botn desplegable es asaz similar a la creacin de un botn simple.
nicamente habremos de elegir el icono de botn desplegable de la categora Personalizar del
cuadro Personalizar barras de herramientas y arrastrarlo a una barra creada. Despus, pulsa-
remos con el botn derecho del ratn sobre l para acceder al cuadro comentado Propiedades
de los iconos desplegables. Rellenaremos las casillas (la del nombre obligatoriamente), desig-
naremos qu barra queremos asociar a su despliegue y editaremos un botn o elegiremos ac-
tivar la casilla inferior para que el icono vare segn qu herramienta se use. Aceptamos, ce-
rramos todo y listo.
DOS.5. COPIA Y DESPLAZAMIENTO DE BOTO-
NES
En la creacin de barras de herramientas desde AutoCAD 14 podemos evitarnos la ardua ta-
rea de tener que editar muchos botones que contengan casi la misma definicin de macro y
slo cambie una pequea porcin. Y es que podemos copiar botones dentro de una misma ba-
rra de herramientas o de una barra a otra. La manera es sencilla y conocida.
Cuando queremos copiar un archivo arrastrndolo de una carpeta a otra dentro del mismo
disco duro y en Windows, al estar realizndose la operacin dentro de la misma unidad de dis-
co, por defecto el archivo tender a moverse, no a copiarse (as como tiende a copiarse, y no a
moverse, cuando se realiza la operacin entre unidades de disco diferentes, ya sean locales o
remotas). Y, qu es lo que hacemos para decirle al sistema que queremos copiar y no mover?
Pues pulsar la tecla CTRL a la vez que arrastramos y soltamos.
En la copia de botones ocurre lo mismo. Si queremos copiar un botn de una barra de herra-
mientas a otra, o dentro de la misma barra, solamente deberemos tener pulsada la tecla CTRL
mientras arrastramos y soltamos. De esta forma, el botn ser copiado, as como todas sus
propiedades internas. Esto es un buen mtodo, como decamos, para no andar creando boto-
nes a diestro y siniestro, que tengan todos ellos unas macros de veinte lneas y en las que ni-
camente vare un par de caracteres o un valor. Copiaramos el botn las veces que haga falta y
slo habramos de cambiar lo indispensable de la macro, as como, probablemente, su icono
seguramente no mucho.
Pero, como las aplicaciones de software no son perfectas, AutoCAD 14 no va a ser menos que
las dems y tiene un pequeo error de programacin (subsanable).
El bug (si lo es) es el siguiente. Si en una barra de herramientas tengo un solo botn y deseo
copiarlo al lado de s mismo, ser incapaz. Y es que AutoCAD cree que lo queremos es mover-
lo hacia un lado y, al no haber ms que un botn, no puede desplazarse hacia ninguno de los
lados. El truco que utilizaremos es sencillo. Slo tenemos que introducir otro botn (cualquiera
de cualquier categora) al lado del nuestro, copiar ste al otro lado del botn introducido
ahora s podremos y eliminar el botn del medio. Sencillo.
NOTA: Esto con el cuadro Personalizar barras de herramientas abierto, si no, no funcionar.
Tras esta operacin, y si queremos copiar ms veces el botn, ya podremos hacerlo sin pro-
blemas. Pero ojo, siempre copiando el primero de los botones, porque si intentamos copiar el
segundo al lado de s mismo (o el tercero, cuarto...), por mucho que pulsemos la tecla CTRL, el
botn slo se mover. Frustrante.
Si lo que queremos es copiar otro botn, ya no tendremos ningn problema porque hay ms
en la barra. Pero recordando que no podremos copiarlo al lado de s mismo, sino a otro sitio
para luego moverlo al lado.
Como habremos deducido, la operacin de mover botones dentro de una barra de herramien-
tas consiste en arrastrarlos hacia uno de los lados para que queden separados por un pequeo
hueco libre con respecto a los dems. Esto nicamente se realiza por esttica o agrupacin de
funciones. Recordemos que se codificar en el archivo de men como [ - - ] .
DOS.6. COMPROBANDO EL .MNS
Como sabemos, o deberamos saber ya, las especificaciones de control de barras de herra-
mientas se guardan en el archivo . MNS del grupo de mens, es decir, en el archivo fuente. En
estos archivos es donde debemos realizar pruebas, sin miedo a cometer errores graves, ya
que, si esto ocurriera, para ello tendramos el archivo de plantilla de men . MNU como salva-
guarda. Slo cuando sepamos de buena tinta que queremos conservar una barra de herra-
mientas con un men, para su distribucin o para lo que sea, deberemos copiarla al . MNU. Re-
cordar que cuando carguemos el . MNU, al crearse un nuevo . MNS se eliminarn todas las confi-
guraciones de barras de herramientas existentes en l.
Pues bien, tras crear nuestra propia barra de herramientas la que hemos hecho antes con un
botn, por ejemplo podemos comprobar las definiciones que se ha incluido en el . MNS, en
nuestro caso NUEVO. MNS. stas habrn sido escritas bajo la seccin ***TOOLBARS y, si existen
ayudas, bajo la seccin ***HELPSTRI NGS. Sern algo as:
***TOOLBARS
**POLGROSOR
I D_Pol gr osor _0 [ _Tool bar ( " Pol gr osor " , _Fl oat i ng, _Show, 400, 50, 0) ]
I D__0 [ _But t on( " Pol gr 3" , " I CON. bmp" , " I CON_24_BLANK" ) ] ^C^C_pol / _w 3 3
***HELPSTRI NGS
I D_POLGROSOR_0 [ Bar r a de pol i l neas con gr osor ]
I D__0 [ Pol i l neas con gr osor 3]
DOS.7. EJEMPLOS PRCTICOS DE BOTONES
DOS.7.1. Insertar DWGs en el 0,0
Nombre del botn: I nser t DWG
Ayuda: I nser t a un DWG en el 0, 0
Macro:
^C^C_i nser t \ 0, 0; ; ; ;
NOTAS INTERESANTES:
1. Este es un ejemplo sencillo con una pequea macro comprensible. Se ejecuta el co-
mando I NSERT y se pregunta por el nombre de archivo . DWG (o bloque) que ser inser-
tado. Luego se introduce el 0,0 como punto de insercin y se le da un I NTRO para cada
una de las siguientes preguntas del comando.
DOS.7.2. Matriz de pentgonos
Nombre del botn: Mat r i z de pent gonos
Ayuda: Cr ea una mat r i z de pent gonos ci r cunscr i t os en un c r cul o de r adi o 10
Macro:
^C^C_pol ygon 5 \ _c 10; _ar r ay _l _r 10 10 25 25
NOTAS INTERESANTES:
1. Ntese que se utiliza un espacio (o varios) para un producir un I NTRO (o varios) entre
opciones del mismo comando. Los puntos y coma (; ) se reservan para producir un I N-
TRO cuando empieza otro comando, para separar, o para el final de la macro. Todo esto
se realiza por claridad a la vista, ya que es lo mismo un espacio que un punto y coma.
1. Entre la opcin _l (last = ltimo) y la opcin _r (rectangular) hay dos espacios. El pri-
mer I NTRO es para aceptar la designacin del pentgono (ltimo objeto dibujado) y el
segundo para dejar de designar objetos.
2. La macro debemos escribirla de forma continua, sin retornos y saltos de carro (I NTRO).
En el momento en que lleguemos al final del cuadro, el cursor saltar automticamente
a la lnea siguiente.
DOS.7.3. Insercin de formatos desplegable
Botn 1
Nombre del botn: DI N A1
Ayuda: I nser t a una l mi na f or mat o A1
Macro: ^C^C_i nser t c: / di seo/ f or mat os/ di na1 0, 0; ; ; ;
Botn 2
Nombre del botn: DI N A2
Ayuda: I nser t a una l mi na f or mat o A2
Macro: ^C^C_i nser t c: / di seo/ f or mat os/ di na2 0, 0; ; ; ;
Botn 3
Nombre del botn: DI N A3
Ayuda: I nser t a una l mi na f or mat o A3
Macro: ^C^C_i nser t c: / di seo/ f or mat os/ di na3 0, 0; ; ; ;
Botn 4
Nombre del botn: DI N A4
Ayuda: I nser t a una l mi na f or mat o A4
Macro: ^C^C_i nser t c: / di seo/ f or mat os/ di na4 0, 0; ; ; ;
NOTAS INTERESANTES:
1. Ntese la necesidad de incluir las rutas de acceso con la barra normal (/ ) estilo UNIX,
ya que la contrabarra o barra inversa (\ ) est reservada. Esto ya se coment en el
MDULO anterior.
2. Este ltimo ejemplo es prctico sobremanera. Precisamente, la necesidad de los boto-
nes radica en la utilidad que se les d, es decir, conviene utilizarlos para ahorrarnos
trabajo a la hora de realizar tareas repetitivas, o largas, o para comandos de AutoCAD
a los que no se pueda acceder ms que desde la lnea de comandos.
3. No olvidarnos de que, antes de crear un botn, habr que crear la barra de herramien-
tas donde ser incluido o que, en su defecto, habr que incluirlo en una barra ya creada
dentro de un grupo de mens.
DOS.FIN. EJERCICIOS PROPUESTOS
I. Crear una barra de herramientas con 3 botones que permitan conmutar entre los esta-
dos activado y desactivado del modo Orto, activado y desactivado del modo Forzcusor y
activado y desactivado de la Rejilla.
II. Disear un botn que abra el navegador de Internet configurado por defecto en el sis-
tema y acceda a "La Web del Programador". (No tiene mucho sentido porque se puede
configurar AutoCAD para que realice eso con su propio botn del browser, pero bueno,
es un modo de practicar).
III. Crear una barra de herramientas con 3 botones que, respectivamente, impriman un gi-
ro en torno a los ejes X, Y y Z del SCP de la ventana actual. Se requerir la entrada del
ngulo al usuario.
IV. Crese un botn desplegable con los botones simples del ejemplo anterior.
V. Partiendo de una configuracin de tres ventanas en Espacio Modelo Mosaico, disese
una pareja de botones que, el primero ample a pantalla grfica completa la ventana
actual y, el segundo retorne a la configuracin inicial de tres ventanas con las vistas
primitivas guardadas.
VI. Prtase de una configuracin de cuatro ventanas en Espacio Modelo Mosaico como la si-
guiente: ventana inferior izquierda es la vista superior (planta); ventana superior iz-
quierda es la vista frontal (alzado); ventana superior derecha es la vista izquierda (per-
fil); ventana inferior derecha es perspectiva isomtrica SE. Crear un botn que realice
un ZOOM EXTENSI N en todas las ventanas grficas y, adems, en todas ellas, a excep-
cin de la perspectiva, se "aleje" un poco para que no quede el dibujo muy pegado a los
bordes.
VII. De todos es sabido que el comando ESCALA de AutoCAD no permite escalar los
objetos independientemente en X y en Y. Se trata de disear un botn que tenga esta
caracterstica, es decir, que escale un objeto con factores diferentes respecto al eje X y
al eje Y. (Este ejercicio es para pensar un poco).
VIII. Crear una juego completo de barras de herramientas para su utilizacin en un
estudio de arquitectura.
EJERCICIOS RESUELTOS DEL MDULO DOS
EJERCICIO I
Botn 1
Nombre del botn: Or t o
Ayuda: ACT/ DES el modo Or t o
Macro: ^O
Botn 2
Nombre del botn: For zcur sor
Ayuda: ACT/ DES el modo For zcur sor
Macro: ^B
Botn 3
Nombre del botn: Rej i l l a
Ayuda: ACT/ DES l a Rej i l l a
Macro: ^G
NOTA: Cuidado al escribir ^O. Si tecleamos el carcter ^ y luego el carcter O aparecer ;
habremos de teclear ^, un espacio y, luego, O.
EJERCICIO II
Nombre del botn: Web del pr ogr amador
Ayuda: Abr e La Web del Pr ogr amador en el navegador por def ect o
Macro: ^C^C_br owser ht t p: / / www. casar r amona. com/ mt / pr ogr amador / i ndex. ht m
EJERCICIO III
Botn 1
Nombre del botn: SCP X
Ayuda: Gi r a el SCP sobr e X
Macro: ^C^C_ucs x \
Botn 2
Nombre del botn: SCP Y
Ayuda: Gi r a el SCP sobr e Y
Macro: ^C^C_ucs y \
Botn 3
Nombre del botn: SCP Z
Ayuda: Gi r a el SCP sobr e Z
Macro: ^C^C_ucs z \
EJERCICIO IV
Nombre del botn: SCP X, Y y Z
Ayuda: Bot n de gi r os del SCP act ual
Barra de herramientas asociada: CURSO. SCPGi r os
NOTA: Este ejemplo supone un nombre de SCPGi r os para la barra anterior y un nombre de
CURSO para el grupo de men ( ***MENUGROUP) del archivo donde est guardada.
EJERCICIO V
Botn 1
Nombre del botn: Ampl a
Ayuda: Est abl ece l a vent ana act ual como vent ana ni ca
Macro: ^C^C_vpor t s _s 3d _y; _vpor t s _si
Botn 2
Nombre del botn: Rest i t uye
Ayuda: Est abl ece l a ant i gua conf i gur aci n de 3 vent anas
Macro: ^C^C_vpor t s _r 3d
NOTA: Este ejemplo supone ya guardada la configuracin de nuestras 3 ventanas con el nom-
bre 3d. Si no realizamos este paso previo los botones no funcionarn correctamente. Una vez
guardada dicha configuracin podemos utilizarlos tranquilamente. Sera til guardar la configu-
racin de 3 ventanas (si las usamos a menudo) en un archivo de plantilla . DWT, de esta mane-
ra se cargar al cargar la plantilla y podremos utilizar los botones del ejemplo.
EJERCICIO VI
Nombre del botn: ZoomExt ensi n4V
Ayuda: Real i za ZoomExt ensi n en 4 vent anas y se al ej a
Macro: ^C^C_cvpor t 3 _z _e _z . 9x; _cvpor t 2 _z _e; _cvpor t 4 _z _e _z . 9x; _cvpor t
4 _z _e _z . 9x
NOTA: La varible de sistema CVPORT almacena el nmero de la ventana actual. Podemos acce-
der a las distintas ventanas, adems de por los mtodos conocidos, indicando su nmero de
CVPORT (desde la lnea de comandos). AutoCAD no da un orden lgico de numeracin a las
ventanas, comienza por el nmero 2 (el 1 lo reserva para Espacio Papel) y le da nmeros con-
secutivos a ventanas alternas, sin orden lgico aparente. nicamente deberemos teclear
CVPORT en la ventana actual para saber qu nmero tiene asignado (o con el comando VENTA-
NAS, VPORT en ingls, y la opcin ?) y personalizar este ejemplo para saber cul es nuestra
ventana en isomtrico y que no se aleje en ella (CVPORT 2 aqu). De todas formas, si no se
guarda la configuracin de las ventanas en una plantilla, por ejemplo, perderemos la fun-
cionalidad de este botn, ya que al crear otras nuevas en otra sesin de dibujo, los identifica-
dores CVPORT variarn. Veremos mucho ms adelante que con AutoLISP podemos obtener un
mayor control en esta faceta.
EJERCICIO VII
Nombre del botn: Escal aXY
Ayuda: Escal a obj et os i ndependi ent ement e en X e Y
Macro: ^C^C_sel ect \ _bl ock obj \ _p ; _i nser t obj @ \ \ 0; _expl ode _l ; _pur ge _b obj
_n
NOTA: Este ejemplo ofrece mucho juego a la hora de escalar objetos porque, como decamos
al proponer el ejercicio, permite escalar en X y en Y de una manera independiente; cosa que el
comando ESCALA (SCALE) de AutoCAD no hace. La mecnica es bien simple: sabemos que al
insertar un bloque s se nos permite escalar de modo diferente en X que en Y (e incluso en Z).
Pues slo tenemos que crear un bloque con el objeto que se quiere escalar e insertarlo. La ma-
cro pide primero un conjunto de seleccin (comando DESI GNA, SELECT en ingls; muy utilizado
en las macros y en la programacin en general). Permite designar una serie de objetos a los
que luego se acceder con el modo de designacin de objetos PREVI O (PREVI OUS en ingls), o
su abreviatura P. Crea un bloque con los objetos al que llama OBJ , lo inserta y da la posibilidad
de escalar en X y en Y de forma independiente. Tras esto, descompone el bloque para recupe-
rar los objetos simples y lo limpia, indicando que no se pregunte para verificar. Lo dicho: para
pensar un poco.
EJERCICIO VIII
(Ejercicio completo para resolver por tcnicos y/o especialistas).

Autor: J onathan Prstamo Rodriguez
Para: La Web del Programador

MDULO TRES
Creacin de tipos de lnea
TRES.1. TIPOS DE LNEA EN AutoCAD 14
Los tipos de lnea de AutoCAD no son otra cosa que las definiciones de cada una de las lneas,
en un archivo ASCII con extensin . LI N. Estas bibliotecas sern ledas por el programa en el
momento que lo necesite.
Los archivos de tipos de lnea suministrados por AutoCAD 14 se encuentran en el directorio
\ SUPPORT\ del programa y son dos: ACAD. LI N y ACADI SO. LI N. Ambos contienen las mismas
definiciones de lneas, la diferencia estriba en que, en ACAD. LI N estas definiciones estn en
pulgadas y, en ACADI SO. LI N estn adaptados, los tipos de lnea, a unidades mtricas decima-
les ser el que utilicemos habitualmente. La distincin, por parte de AutoCAD, a la hora
de cargar uno u otro como predeterminado, se realiza al inicio de una sesin (si est as confi-
gurado) o al comenzar un dibujo nuevo en los cuadros de dilogo Inicio y Crear nuevo dibujo,
respectivamente. Si no se permite abrir o se cancela alguno de estos cuadros, AutoCAD
arrancar con la ltima configuracin de tipos de lnea, o sea, con el ltimo archivo de tipos de
lnea (ACAD. LI N o ACADI SO. LI N) que se utiliz antes de cerrar la ltima sesin. De todas for-
mas, en cualquier momento podemos cargar cualquier tipo de lnea de cualquiera de los archi-
vos, pero teniendo en cuenta sus unidades de creacin y escalado.
Estos archivos del programa contienen ocho tipos de lneas bsicos en tres versiones para cada
uno de ellos: escala normal, escala 0,5X (la mitad) y escala 2X (el doble); un total de 24.
Adems, 14 tipos de lnea bajo norma ISO 128 (ISO/DIS 12011) y siete tipos ms de lneas
complejas (ahora incluidos en estos archivos; en la versin 13 se encontraban en el archivo
LTYPESHP. LI N). Todos ellos hacen un total de 45 tipos de lnea.
TRES.2. PODEMOS CREAR O PERSONALIZAR UN
.LIN
En cualquier caso, si no se amoldan a nuestras apetencias o necesidades todos estos tipos de
lnea, o si nos vemos obligados a dibujar ciertos objetos con ciertos tipos de lnea que no con-
tiene AutoCAD 14, siempre podemos personalizar una de las bibliotecas . LI N del programa o
crear nuestros propios archivos aparte.
Y es que AutoCAD permite una completa personalizacin de los tipos de lnea, en tanto en
cuanto nos deja variar las definiciones de sus propias lneas o crear otras nuevas que se adap-
ten a nuestro gusto, trabajo o necesidad.
TRES.2.1. Examinando el ACADISO.LIN
Para empezar a ver cmo se crean los tipos de lnea, vamos a abrir con cualquier editor ASCII
el archivo ACADI SO. LI N.
Lo primero que vamos a apreciar es lo siguiente:
; ;
; ; Ar chi vo de def i ni ci n de t i pos de l nea de Aut oCAD
; ; Ver si n 2. 0
; ; Copyr i ght 1991, 1992, 1993, 1994, 1996 por Aut odesk, I nc.
; ;
Es la serie de comentarios a los que nos tienen acostumbrados los archivos ASCII de Auto-
CAD. Si recordamos, en los archivos de men los comentarios los introducamos con una doble
barra (/ / ), pues aqu, en archivos de definicin de tipos de lnea, se introducen con un punto y
coma (; ). Pero cuidado, no nos confundamos; con un solo punto y coma es suficiente, lo que
ocurre es que los diseadores de Autodesk parece ser que, por mayor claridad, han decidido
incluir dos caracteres seguidos. De esta forma, al primer golpe de vista podemos distinguir
donde estn los comentarios. Pero repetimos, con uno es suficiente, en el ejemplo anterior el
que vale es el primero.
Podemos poner tantos comentarios como queramos y en la parte del archivo que deseemos,
pero tengamos en cuenta lo de siempre: a mayor nmero de lneas, mayor tiempo de proceso.
Lo siguiente que os encontramos ya es una definicin de tipo de lnea:
*MORSE_G, Mor se G __ __ . __ __ . __ __ . __ __ . __ __ .
A, 12. 7, - 6. 35, 12. 7, - 6. 35, 0, - 6. 35
Con dos renglones se define un tipo de lnea. No hacen falta ms ni est permitido ni se
pueden utilizar menos. Pero, qu significado tienen estas dos lneas?
TRES.2.2. Sintaxis de personalizacin
Existen dos maneras de crear tipos de lneas, una desde un editor ASCII externo a AutoCAD
y, la otra, desde la propia lnea de comandos de AutoCAD, con el comando TI POLI N. Asimis-
mo, existen dos clases de tipos de lnea generalizados, los tipos de lnea sencillos y los comple-
jos.
Primero vamos a ver la creacin de tipos sencillos y complejos desde un editor ASCII; despus
nos acercaremos al comando TI POLI N, con su opcin Cr ea, para estudiar cmo crear los tipos
de lnea sencillos desde el propio AutoCAD.
NOTA: Desde AutoCAD, y por medio de TI POLI N, no se pueden crear tipos de lnea complejos.
TRES.2.2.1. Creacin desde un editor ASCII
La manera de crear tipos de lnea desde un editor ASCII, como ya hemos visto, es con dos
lneas para cada definicin. El archivo donde lo vayamos a guardar puede contener varias defi-
niciones, puede llamarse con cualquier nombre y debe tener la extensin . LI N obligatoriamen-
te.
La primera lnea de la definicin es una lnea de encabezamiento. Su sintaxis es la que sigue
(los corchetes en itlica indican la no obligatoriedad del parmetro):
*nombre_tipo_lnea[, descripcin]
El asterisco (*) siempre ha de preceder a este encabezamiento de definicin de tipo de lnea.
nombre_tipo_lnea es un nombre obligatorio para el tipo de lnea que vamos a crear; es el
nombre que aparecer en AutoCAD al cargar o elegir el tipo de lnea. descripcin es una
descripcin, que puede ser textual y/o grfica (por medio de caracteres ASCII) del tipo de l-
nea; esta descripcin es opcional y, si se introduce, debe ir separada del nombre del tipo de
lnea por una coma (, ) y ocupar como mximo 47 caracteres. Dentro de esta descripcin po-
demos introducir espacios blancos en cualquier posicin. Esta descripcin aparecer al cargar
el tipo de lnea y en el cuadro de propiedades de los tipos de lnea.
NOTA: En nombre_tipo_lnea es conveniente no escribir espacios blancos, as como procurar
reducir a ocho los caracteres del nombre. Todo esto puede parecer arcaico y, no es que no se
pueda, pero se debe tener en cuenta esta serie de recomendaciones. AutoCAD 14 es un pro-
grama perfectamente integrado en Windows pero, como sabemos, los nombres de bloque, por
ejemplo, tienen ciertos problemas a la hora de tratar nombres largos o con caracteres no per-
mitidos. Como veremos en el siguiente MDULO, a la hora de crear patrones de sombreado
tendremos muy en cuenta sus nombres, ya que utilizaremos una pequea aplicacin basada
en MS-DOS para introducir las nuevas fotos en la fototeca de AutoCAD para patrones de
sombreado. Por todo ello, es conveniente acostumbrarnos a utilizar aunque a veces no haga
falta sintaxis MS-DOS para todo tipos de nombres en archivos ASCII de personalizacin, ya
sean mens, definiciones de tipos de lnea, de patrones de sombreado, aplicaciones AutoLISP,
etctera.
As por ejemplo, el encabezado de un definicin de tipo de lnea de trazos, podra ser de cual-
quiera de la siguientes maneras (o de otras tambin):
*TRAZOS, L nea de t r azos - - - - - - - -
*TRAZOS, L nea de t r azos __ __ __ __ __ __ __ __
*TRAZOS, L nea de t r azos
*TRAZOS
La segunda lnea de la definicin es la que realmente define cmo ser el tipo de lnea creado.
Su sintaxis es la siguiente:
A, def_traz, def_traz, def_traz, ...
El carcter A del inicio es el tipo de alineamiento o alineacin. Este carcter nicamente puede
ser uno, A. No se admite cualquier otro carcter de alineacin en esta posicin; AutoCAD slo
reconoce ste. Esta alineacin hace referencia a la propiedad de AutoCAD de alinear el patrn
de tipo de lnea con los puntos extremos de lneas, crculos y arcos individuales, esto es, cuan-
do dibujamos una lnea de un punto a otro con un tipo de lnea de trazo y punto, por ejemplo,
en los dos puntos extremos siempre se fuerza un trazo continuo; nunca quedar en un extre-
mo un espacio vaco.
Los sucesivos def_traz son la propia definicin de las dimensiones de trazos, espacios y pun-
tos del patrn. Han de introducirse en el mismo orden en que van a aparecer en la lnea. Estas
dimensiones estn en unidades de dibujo y han de aproximarse a las medidas de trazos y es-
pacios del archivo ACADI SO. LI N (o ACAD. LI N, dependiendo de cul utilicemos) para que se
guarde un proporcin con ellos al luego aplicrseles un factor de escala global a todos (en el
cuadro de la propiedades de los tipos de lnea o con el comando ESCALATL, LTSCALE en ingls).
Estos guarismos definitorios van separados por comas y pueden incluirse entre ellas y los n-
meros que las siguen espacios blancos para darle claridad a la definicin. Los valores de estas
definiciones se entendern de la siguiente forma:
Valor Explicacin
Positivo Longitud de un trazo.
Negativo Longitud de un espacio en blanco.
Cero (0) Posicin de un punto.
Por ejemplo, y siguiendo con la anterior lnea de trazos, su definicin completa sera:
*TRAZOS, L nea de t r azos __ __ __ __ __ __ __ __
A, 10, - 5
Esto quiere decir, un trazo de 10 unidades de dibujo y un espacio de 5 unidades de dibujo de
longitud. Como ya hemos dicho, el alineamiento siempre A.
Como se puede apreciar, el patrn de tipo de lnea hace referencia nicamente al mnimo con-
junto de trazos, espacios y/o puntos cuya repeticin sucesiva va a generar el tipo de lnea. Se
pueden especificar hasta un mximo de doce valores separados por comas, siempre que que-
pan en una lnea de texto de 80 caracteres.
As, en esta definicin anterior, con un trazo y un espacio es ms que suficiente; el resto es
repeticin de lo mismo continuamente.
NOTA: El tipo de alineamiento A requiere que el primer valor del patrn sea positivo (lo que
corresponde a un trazo) o 0 (correspondiente a un punto). El segundo valor debe ser negativo
(espacio en blanco). Se deben especificar, como mnimo, dos valores en el patrn de tipo de
lnea.
Veamos otros dos ejemplos. Analicemos el siguiente:
*Tr azo_Punt os, Tr azos y punt os __ . . __ . . __ . . __ . . __
A, 10, - 5, 0, - 5, 0, - 5
O sea, un trazo de 10 unidades de dibujo (10), un espacio de 5 (- 5), un punto (0), otro espa-
cio, otro punto y un ltimo espacio. A partir de ah se repite de nuevo comenzando por el tra-
zo.
Veamos el segundo:
*Nuevo_Ti po, ____ __ . __ ____ __ . __ ____
A, 20, - 5, 10, - 5, 0, - 5, 10, - 5
Esto significa, trazo grande de 20, espacio de 5, trazo pequeo de 10, espacio de 5, el punto,
espacio de 5, trazo de 10, espacio de 5 y vuelta a empezar.
NOTA: Conviene hacer un pequeo boceto del tipo de lnea en un papel, o servirnos, siempre
que podamos, del esquema incluido en la descripcin de la primera lnea, para ir desgranando
trazos, huecos y puntos uno por uno.
TRES.2.2.2. Tipos de lnea complejos
Un tipo de lnea complejo es una lnea sencilla (como las estudiadas) que contiene smbolos
intercalados. Estos smbolos pueden ser textos o formas de AutoCAD. Vamos a ver primero
los tipos de lneas de texto intercalado.
Para introducir un texto en la definicin de un lnea hay que utilizar la siguiente sintaxis, de-
ntro de la propia de la lnea:
["cadena",estilo,S=factor_escala,R| A=ang_rotacin,X=despl_X,Y=despl_Y]
Toda la definicin aparecer encerrada entre corchetes ([ ] ); los diferentes parmetros separa-
dos por comas (, ) y sin espacios blancos.
cadena. Es el texto que se incluir intercalado en la lnea. Debe ir entre comillas.
estilo. Se corresponde con el estilo de texto con el que se dibujar el mismo. Generalmente
se utilizar el estilo STANDARD de AutoCAD, ya que es el definido por defecto y el que siem-
pre existe. Utilizando otro estilo no tenemos la completa seguridad de que est creado, a no
ser que lo hayamos creado con alguna rutina de AutoLISP o macroinstruccin de men y el
tipo de lnea forme parte de una distribucin completa de personalizacin.
S=factor_escala. Es el factor de escala que se le aplicar al texto.
R| A=ang_rotacin. ngulo de rotacin que ser imprimido al texto en cuestin. No se utili-
zan ambos modificadores a la vez (R y A) sino uno u otro. R se refiere a la rotacin relativa
del texto y A a la rotacin absoluta.
X=despl_X. Es el desplazamiento en X medido en el sentido de la lnea. Lo utilizaremos para
centrar el texto en un hueco (ya se ver).
Y=despl_Y. Es el desplazamiento en Y medido en sentido perpendicular a la lnea. Lo utiliza-
remos tambin para centrar en texto perpendicularmente a la lnea (tambin se ver).
NOTA: No es necesario incluir todos los modificadores en una definicin, sino que pueden exis-
tir algunos y otros no. Eso s, la cadena de texto y el estilo son obligatorios.
Veamos un ejemplo:
*Agua_Cal i ent e, __ HW__ HW__ HW__
A, . 5, - . 2, [ " HW" , STANDARD, S=. 1, R=0, X=- 0. 1, Y=- . 05] , - . 2
Lo primero que tenemos es un trazo de 0,5 y un hueco de 0,2. Lo siguiente es la definicin del
texto: HWcomo cadena literal (lo que aparecer), en estilo STANDARD, a escala 0,1 (10 veces
ms pequeo), con un ngulo de rotacin relativo de 0, un desplazamiento en X de 0,1 hacia
"atrs" (negativo) y un desplazamiento en Y de 0,05 hacia "abajo" (negativo).
Los huecos en la lneas de AutoCAD no son realmente objetos dentro del propio objeto de la
lnea, esto es, es un espacio en el que no hay nada (por ello a veces no se puede designar un
lnea por un hueco o no se designa correctamente una interseccin entre dos lneas si existe
un hueco o ms en la misma, aunque AutoCAD recalcula la lnea para que esto no suceda).
Los textos en tipos de lnea complejos no tiene reserva de hueco, por lo que hay que reservr-
selo premeditadamente. As, si definimos una lnea de la siguiente manera:
*Tr azo_Text o, Tr azos y t ext o
A, 1, [ " Text o" , STANDARD, S=1]
el resultado ser el siguiente:
Text oText oText oText o
Por eso, en el ejemplo del agua caliente, se reserva un hueco de 0,2 + 0,2 (al principio y al
final) para el texto. An as, si no definiramos un desplazamiento en X negativo, el resultado
producira el texto superpuesto en el principio del segundo hueco (aunque ms bien es este
hueco el que se superpone al texto), ya que este va justo detrs del hueco anterior y, como
hemos dicho, no se reserva hueco para el texto. Por ello, hemos de centrarlo en el hueco, con-
cretamente 0,1 unidades de dibujo hacia "atrs" en el sentido de la lnea para dejar un espacio
de 0,1 por cada lado. Al estar el texto a escala 0,1 (mide 0,1 del alto y 0,1 de ancho, ya que el
texto base es de 1 1) se consigue perfectamente este efecto. Si no se tiene esto en cuenta,
el texto se colocar justo detrs del primer espacio (en su posicin), pero el segundo se hueco
superpondr al texto al no haber reserva, como hemos dicho.
Con respecto a la rotacin, y continuando con este ejemplo del agua caliente, se le da una ro-
tacin relativa de 0 grados. La diferencia entre la rotacin relativa y la absoluta es que, la rela-
tiva rota el texto con respecto a la posicin actual de la lnea y la absoluta le imprime un ngu-
lo fijo de rotacin. As pues, al haberle dado un ngulo relativo de 0 grados, el texto siempre
se fijar a 0 grados con respecto a la lnea; si dibujramos una lnea a 90 grados con este pa-
trn, el texto estara rotado tambin 90 grados. Si le hubisemos puesto rotacin absoluta (A)
de 0 grados, el texto siempre se dibujara con una inclinacin de 0 grados, fuese cual fuese la
inclinacin de la lnea trazada.
De esta manera, un texto con rotacin absoluta de 45 grados, en una lnea perpendicular al
eje X (90 grados) estara 45 grados inclinado. Un texto con una rotacin relativa de 45 grados,
en la misma lnea estara 135 grados inclinado.
Y respecto a la escala, decir que es muy importante elegir un factor adecuado, ya que con una
escala muy pequea puede no llegar a verse el texto en pantalla.
Vamos a tratar ahora los tipos de lnea con formas intercaladas. Las formas son pequeos ob-
jetos de AutoCAD que se definen en un archivo de extensin . SHP, el cual se compila luego
para obtener un . SHX manejable por el programa. Para visualizar las formas de un archivo de
formas deberemos cargarlo primero con el comando CARGA (LOAD) y luego insertarlas con FOR-
MA (SHAPE). Podemos ver sus nombres con la opcin ?, y luego *, de este ltimo comando.
NOTA: En el MDULO CI NCO se tratar por completo la creacin y personalizacin de archi-
vos de formas.
AutoCAD 14 provee un archivo con formas creadas. Este archivo se llama LTYPESHP. SHX y
podemos acceder tambin al archivo fuente LTYPESHP. SHP. Ambos se encuentran en el direc-
torio \ SUPPORT\ del programa y han sido creados precisamente para que sus formas sean in-
cluidas en patrones de tipos de lnea.
Nosotros podemos intercalar en los tipos de lnea de AutoCAD formas, al igual que textos. La
sintaxis, dentro de la propia de la lnea, para realizar esto es la que se muestra a continuacin:
... [nom-
bre_forma,nombre_archivo,S=factor_escala,R| A=ang_rotacin,X=despl_X,Y=despl_Y] ...
Toda la definicin aparecer encerrada entre corchetes ([ ] ); los diferentes parmetros separa-
dos por comas (, ) y sin espacios blancos.
Los parmetros de escala (S), rotacin (R o A), desplazamiento en X (X) y desplazamiento en Y
(Y) siguen siendo los mismos, y con la misma funcin, que en los tipos de lnea complejos con
texto intercalado. Desaparece, evidentemente, el estilo de texto y aparecen dos nuevas entra-
das.
nombre_forma. Es el nombre de la forma que se encuentra dentro del archivo de definicin
de formas.
nombre_archivo. Es el nombre del archivo de formas donde se encuentra dicha forma. Debe
ser el . SHX, no el . SHP.
NOTA: No es necesario incluir todos los modificadores en una definicin, sino que pueden exis-
tir algunos y otros no, al igual que con los textos. Eso s, el nombre de la forma y el archivo
donde se encuentra incluida son obligatorios.
NOTA: Las formas del archivo LTYPESHP. SHX son: BAT ( , con los tramos verticales rectos),
CI RC1 (), ZI G (^), TRACK1 (|) y BOX ().
Vamos a ver tres ejemplos:
*VI AS, __ | __ | __ | __ | __
A, . 15, [ TRACK1, l t ypeshp. shx, S=. 25] , . 15
El resultado sera algo como lo que sigue:
| | | | | | | | | | | | | | | | | | |
Otro ejemplo:
*CI RC, - oooooo-
A, 1, [ CI RC1, l t ypeshp. shx, S=. 1] , - . 2
Al igual que en los tipos de lnea con textos, el espacio para las formas no se reserva. Es por
ello que debemos indicrselo nosotros explcitamente. Hay veces en los que dicho espacio o
hueco no nos interesar, como en el primer ejemplo (el de las vas), pero otras el segundo
ejemplo s se necesitar. En este ltimo ejemplo, primero se dibuja un trazo de 1 y, despus
se intercala la forma. Dicha forma es un crculo unitario (radio 1) que, al aplicrsele un factor
de escala de 0,1 unidades, se convierte en un crculo de 0,1 de radio, esto es, dimetro 0,2.
Por eso, hay que indicar al final un hueco de 0,2 unidades de dibujo para que el siguiente trazo
se comience a dibujar tras la forma.
NOTA: Como veremos en su momento, todas las formas han de ser unitarias, o sea, en este
caso, el crculo es de radio 1, el cuadrado tiene lado 1, la barra vertical mide 1, etctera.
ltimo ejemplo:
*Li m_Ter r
A, 1, [ LI MI T, t opogr af . shx, S=. 1, R=45, X=- . 25, Y=- . 35] , - 1. 5
Como ltimo apunte diremos que, en la creacin de tipos de lnea complejos es posible interca-
lar ms de un texto o ms de una forma en cada lnea. El mtodo es idntico. Por ejemplo:
*CUARCI R
A, 1, [ CI RC1, l t ypeshp. shx, S=. 1] , - . 2, 1, [ BOX, l t ypeshp. shx, S=. 1] , - . 2
*ELEC
A, 1, - . 3, [ " ELEC" , STANDARD, S=. 1, A=45, X=- . 17, Y=- . 17] , - . 3, . 5, [ " 1" , STANDARD, S=. 1] , -
. 5
O incluso, textos y formas combinados:
*ELEC2
A, 1, - . 3, [ " ELEC" , STANDARD, S=. 1, A=45, X=- . 17, Y=- . 17] , -
. 3, . 5, [ BOX, l t ypeshp. shx, S=. 1] , - . 2
NOTA: No se puede comenzar una definicin de tipos de lnea con carcter complejo (sea texto
o forma) o con hueco. Deberemos de empezar con trazo o con punto. Tampoco es recomenda-
ble terminar con carcter complejo (aunque se puede).
NOTA: Es irrelevante la utilizacin de maysculas o minsculas en cualquiera de las dos lneas
del patrn.
NOTA: La coma anterior al corchete de apertura, en tipos de lnea complejos, y la posterior al
corchete de cierre han de estar pegadas a ellos, esto es, sin espacios. Por lo dems, sabemos
que podemos introducir espacios aclaratorios (siempre despus de comas; nunca entre nme-
ro y coma).
TRES.2.2.3. Creacin desde la lnea de coman-
dos
Los tipos de lnea simples tambin podemos crearlos desde la propia lnea de comandos de
AutoCAD 14, no as los tipos complejos. La forma de crear tipos de lnea simples as es me-
diante el comando TI POLI N (LI NETYPE en ingls). Para utilizarlo desde la lnea de comandos
deberemos introducirlo precedido de un guin: - TI POLI N (- LI NETYPE), ya que de otra forma,
lo que har es mostrar el cuadro de dilogo Propiedades de las capas y de los tipos de lnea,
en su pestaa Tipo lnea.
NOTA: Esta caracterstica del guin se vio en el MDULO UNO. Existen muchos comandos de
AutoCAD que tienen un doble formato de uso, uno con cuadro de dilogo y otro desde la lnea
de comandos. En estos casos (cuando el nombre del comando es el mismo para los dos), se
antepone un guin (- ) al comando para que se ejecute su versin de lnea de comandos. Estos
comandos suelen utilizarse casi exclusivamente para macros de mens, botones de barras de
herramientas y dems.
Pues bien, tras ejecutar el comando de la forma indicada en la lnea de comandos aparece:
?/ cRear / Car gar / Def :
La opcin ? lista todos los tipos de lnea, con sus correspondientes comentarios si los hay, con-
tenidos en un archivo que hay que indicar. La opcin Car gar carga el tipo o tipos de lnea indi-
cados en un archivo que hay que especificar. La opcin Def establece un tipo de lnea cargado
como actual. Pero, la que nos interesa es la opcin cRear que va a servirnos para la creacin
de estos tipos de lnea simples.
Pues bien, una vez introducida la R para activar la opcin aparecer lo siguiente:
Nombr e del t i po de l nea a cr ear :
donde introduciremos el nombre en s de la lnea que se pretende crear (lo que en los archivos
de definicin estudiados se encuentra inmediatamente despus del asterisco (*)).
Una vez hecho esto se muestra el cuadro de dilogo Crear o aadir archivo de tipo de lnea,
donde elegiremos un archivo para aadirle la nueva definicin o crearemos uno nuevo, sim-
plemente eligiendo ubicacin y dndole un nombre no existente. Si creamos uno nuevo, el
programa indica en lnea de comandos Cr eando ar chi vo nuevo, si anexamos las definiciones
a uno que ya existe se indica Esper e, compr obando si el t i po de l nea est ya def i ni -
do. . . . Si el tipo de lnea ya existe en el archivo especificado, AutoCAD mostrar su descrip-
cin preguntando si se desea modificar. Ante una respuesta negativa, el programa solicitar
otro nombre de tipo de lnea.
El siguiente paso es indicarle el texto opcional de descripcin (revisemos las definiciones estu-
diadas) tras el mensaje:
Text o de descr i pci n:
Podremos darle I NTRO para no escribir ninguno y, si no, deberemos acordarnos de no sobrepa-
sar los 47 caracteres.
Por ltimo se nos pregunta por el patrn:
I nt r oduci r pat r n ( en l a l nea si gui ent e) :
A,
Como vemos, AutoCAD escribe por defecto el alineamiento y una coma (A, ) lo dems corre
de nuestro cargo. Slo hemos de seguir las mismas explicaciones que al crear un patrn de
tipo de lnea desde un editor ASCII.
NOTA: Podemos introducir aqu tambin espacios blancos a modo de ordenamiento visual. Si
AutoCAD detecta algn error en el tipo de lnea, el proceso se aborta y habr que empezar
desde el principio.
TRES.3. CARGAR TIPOS DE LNEA CREADOS
La manera de cargar uno o varios tipos de lnea creados es conocida por todos, ya que no di-
fiere apenas de la forma de cargar los tipos de lnea que trae AutoCAD 14.
Desde Formato>Tipo de lnea..., desde el botn Tipo de lnea de la barra de herramientas de
AutoCAD 14 Propiedades de objetos, desde la lnea de comandos mediante TI POLI N (en in-
gls LI NETYPE) o, incluso, desde el botn de control de capas y luego cambiando de pestaa,
accedemos al cuadro Propiedades de las capas y los tipos de lnea, en su pestaa Tipo lnea.
En este cuadro existe, a la derecha, un botn llamado Cargar.... Pulsndolo accedemos a un
nuevo cuadro de dilogo, denominado ste Cargar o volver a cargar tipos de lnea. En el cua-
dro bajo Tipos de lnea disponibles se encuentran todos los tipos de lnea cargados correcta-
mente (los errneos no aparecern) que estn definidos en el archivo de definicin de tipos de
lnea indicado en la casilla superior, a la derecha del botn Archivo.... Adems, las barras su-
periores Tipo lnea y Descripcin permiten ordenar A-Z y Z-A tpico en entorno Windows
tanto los nombres de las lneas como sus descripciones.
Si pulsamos el botn Archivos... mencionado podremos elegir el archivo de definicin del que
queremos cargar tipos de lnea. Es el cuadro estndar de eleccin para apertura de archivos de
Windows con el nombre Seleccionar archivo de tipo de lnea. Una vez buscado y elegido, pul-
samos Abrir y volveremos al cuadro anterior donde se mostrarn los tipos de lnea que contie-
ne el archivo.
NOTA: Si existe algn error en alguna lnea del archivo de definicin, el tipo de lnea en con-
creto no se cargar (AutoCAD mostrar un mensaje), pero los dems, si estn correctos, s.
Ahora nicamente debemos elegir el tipo o los tipos de lnea que queremos cargar de dicho
archivo. Podemos utilizar la tecla CTRL y la tecla SHI FT para elegir archivos al estilo Windows.
Pulsamos Aceptar y ya estn los nuevos tipos cargados.
NOTA: Si intentamos cargar un tipo de lnea ya cargado, AutoCAD muestra un mensaje di-
ciendo que ya est cargado y si queremos recargarlo. Esto es til cuando se trabaja interacti-
vamente con AutoCAD 14 y el editor en que se tiene abierto el archivo . LI N. Podemos editar
nuestro tipo de lnea, volver a AutoCAD y recargarlo, sin la necesidad de borrarlo primero con
el botn Borrar del cuadro de dilogo principal. Un ltimo apunte, este botn Borrar no borra
las definiciones del archivo, sino que descarga lo tipos de lnea cargados y seleccionados.
Tras cargarlo, slo debemos probarlo y utilizarlo de la manera ms sencilla: trazando lneas.
Antes deberemos haber escogido el tipo de lnea de la lista desplegable Control de tipos de
lnea de la barra de herramientas de AutoCAD Propiedades de objetos, o habrselo asignado a
una capa establecida como actual y con el tipo de lnea PORCAPA, etctera.
Otra manera de cargar tipos de lnea es con la opcin Car gar del comando - TI POLI N (desde la
lnea de comandos) antes visto. Se elige primero el tipo o tipos que sern cargados y luego el
archivo . LI N.
NOTA: Desde Herr.>Preferencias..., en la pestaa Archivos del cuadro Preferencias, en la op-
cin Camino de bsqueda de archivos de soporte, podemos especificar la ruta de bsqueda a
archivos de definicin de tipos de lnea que no se encuentren en el directorio actual.
TRES.4. EJEMPLOS PRCTICOS DE TIPOS DE
LNEA
TRES.4.1. Tipo simple 1
*L nea_1, __ . . _ . . __
A, 10, - 5, 0, - 5, 0, - 5, 5, - 5, 0, - 5, 0, - 5
NOTAS INTERESANTES:
1. Ntese la separacin puramente decorativa entre diversos grupos de trazos, huecos o
puntos dentro del mismo patrn de tipo de lnea. Su misin es nicamente dar claridad.
2. Al final de un archivo completo de definicin de tipos de lnea (tenga las definiciones
que tenga), y como ocurra con los archivos de men, es necesario introducir un I NTRO
al final del ltimo carcter de la ltima lnea para que todo funcione correctamente.
TRES.4.2. Tipo simple 2
*L nea_2, _ . . . . _ . . . . _
A, 5, - 5, 0, - 5, 0, - 5, 0, - 5, 0, - 5
TRES.4.3. Tipo complejo 1
*AGUA_FRI A, Ci r cui t o de agua f r a __ AF __ AF __ AF __
A, . 5, - . 2, [ " AF" , STANDARD, S=. 1, R=0, X=- . 1, Y=- . 05] , - . 2
TRES.4.4. Tipo complejo 2
*ELEC, ___ ELEC ___ ELEC ___ ( i ncl i nado)
A, 1, - . 3, [ " ELEC" , STANDARD, S=. 1, A=45, X=- . 17, Y=- . 17] , - . 3
TRES.4.5. Tipo complejo 3
*MI XTO, Cuadr ados y c r cul os
A, 1, [ CI RC1, l t ypeshp. shx, s=. 1] , - . 2, 1, [ BOX, l t ypeshp. shx, s=. 1] , - . 2
TRES.FIN. EJERCICIOS PROPUESTOS
I. Crear un tipo de lnea simple compuesta por los siguientes elementos y en el siguiente
orden: trazo largo, hueco, punto, hueco, trazo corto, hueco y vuelta a empezar. Las
dimensiones como se elijan. (__ . _ __ . _ __ . _ __).
II. Disese un tipo de lnea con un texto justificado a la izquierda dentro de un hueco
flanqueado por trazos de longitud cualquiera. (__Text o __Text o __Text o __).
III. Crear un tipo de lnea que incluya un texto a 90 grados con respecto a la lnea (ngulo
relativo). El texto habr de estar perfectamente centrado en un hueco, en cuyos extre-
mos habr sendos puntos. El resto de la lnea a gusto del creador. El estilo y la escala
tambin a gusto del creador. (__ . Text o . __, con el texto girado 90 grados).
IV. Disear un tipo de lnea que incluya diversas formas perfectamente alineadas y pegadas
a la lnea. (- - - ^- - - ^- - - ^- ).
V. Crear un tipo de lnea que incluya una forma y un texto, ste ltimo, girado 30 grados
de manera absoluta y perfectamente centrado en su hueco. (- - Text o- - Text o- ,
el texto girado lo estipulado).
VI. Desarrollar un juego completo de patrones de tipos de lnea para su manejo por profe-
sionales de la topografa.


EJERCICIOS RESUELTOS DEL MDULO TRES
EJERCICIO I
*Mul t , __ . _ __ . _ __ . _
A, 2, - 1, 0, - 1, 1, - 1
EJERCICIO II
*J ust i f , __Text o __Text o __
A, 3, - 4, [ " TEXTO" , STANDARD, S=1, R=0, X=- 2. 5, Y=- . 5] , - 4
EJERCICIO III
*Rel at v
A, 2, - 1, 0, - 3. 5, [ " TEXTO" , STANDARD, S=1, R=90, X=. 5, Y=- . 5] , - 3. 5, 0, - 1
EJERCICIO IV
*For mas
A, 2, [ BOX, l t ypeshp. shx, S=1] , - 2, 2, [ CI RC1, l t ypeshp. shx, S=1] , - 2, 2, [ ZI G,
l t ypeshp. shx, S=1] , - 2
EJERCICIO V
*For Tex, Combi naci n de f or ma y t ext o
A, 1, [ CI RC1, l t ypeshp. shx, S=1] , - 2, 2, [ " TEXTO" , STANDARD, S=1, A=30, X=0. 5, Y=- 1. 5] , -
4, 1
EJERCICIO VI
(Ejercicio completo para resolver por tcnicos y/o especialistas).

Autor: J onathan Prstamo Rodr-
guez
Para: La Web del Programador

MDULO CUATRO
Creacin de patrones de sombrea-
do
CUATRO.1. PATRONES DE SOMBREADO
Al igual que los tipos de lnea, en AutoCAD es posible definir nuestros propios patrones de
sombreado. Adems, la tcnica es muy parecida a la creacin de lneas y no ser difcil asimi-
larla si se adquirieron los conocimientos suficientes en el MDULO anterior.
Un patrn de sombreado de AutoCAD 14 es un conjunto de caracteres ASCII que se guarda
en un archivo de extensin . PAT especfico. Contrariamente a lo que ocurra con los tipos de
lnea, las definiciones de los patrones de sombreado no podemos guardarlas en cualquier ar-
chivo y darle la extensin . PAT, sino que deberemos guardarlas en uno los archivos que Auto-
CAD 14 proporciona con los patrones de sombreado predefinidos. Estos archivos son dos y, al
igual que los tipos de lnea, uno dice referencia a los patrones en pulgadas (ACAD. PAT) y, el
otro, a los mismos patrones en unidades mtricas a escala segn normas ISO (ACADI SO. PAT).
Ambos ficheros se encuentran recogidos en el directorio \ SUPPORT\ del programa.
AutoCAD 14 provee al usuario de 54 patrones bsicos de sombreado, adems de 14 relacio-
nados con tipos de lnea segn norma ISO/DIS 12011. Esto hace un total de 68 patrones de
sombreado distintos.
NOTA: Como habremos podido comprobar, en el cuadro de dilogo para la eleccin de patro-
nes de sombreado no existe una opcin que nos lleve a una bsqueda de archivos propios de
definicin. Esta es la razn por la que habremos de incluir nuestros patrones propios en uno de
los dos archivos de soporte correspondientes de AutoCAD.
CUATRO.2. SINTAXIS DE LA DEFINICIN
Como hemos dicho, habiendo comprendido completamente la definicin de tipos de lnea, te-
nemos medio camino recorrido a la hora de definir patrones de sombreado. Si examinamos
atentamente el archivo ACADI SO. PAT, podremos comprobar la semejanza que tiene con ACADI -
SO. LI N.
El carcter punto y coma (; ) se utiliza aqu tambin para la escritura de comentarios. Como se
explic en el MDULO TRES, un solo carcter ; es suficiente para definir una lnea de comen-
tarios. Lo que ocurre es que, a veces, se incluyen dos para dar mayor claridad al archivo. Po-
demos incluir tantos comentarios como queramos, teniendo en cuenta el tiempo de proceso
que se invertir si existen demasiados. Estas lneas sern directamente ignoradas por Auto-
CAD.
Aparte de los comentarios, y de lneas blancas de separacin por claridad, el resto de renglo-
nes en un archivo de definicin de patrones de sombreado se refieren a la propia definicin del
patrn.
Un patrn de sombreado se define con dos o ms lneas dentro de un archivo. La primera lnea
obligatoria tiene la sintaxis siguiente (los corchetes en itlica indican la no obligatoriedad del
parmetro):
*nombre_patrn_sombreado[, descripcin]
El carcter asterisco (*) es obligatorio en esta primera lnea como ocurra con los tipos de
lnea. Este asterisco le dice al programa que lo que viene a continuacin es una definicin de
un patrn de sombreado. nombre_patrn_sombreado se refiere al nombre que le damos al
patrn en cuestin. Este nombre es el que aparece en la lista izquierda del men de imagen de
eleccin de patrones de sombreado (al pulsar en el botn Patrn... en el cuadro principal de
sombreo Sombreado por contornos). Asimismo, aparece tambin en la lista desplegable Pa-
trn: del cuadro Sombreado por contornos.
NOTA: Recordar que el cuadro Sombreados por contornos es el que aparece al elegir Dibu-
jo>Sombreado..., al pulsar sobre el icono correspondiente en la barra de herramientas Dibujo,
con los comandos de lnea SOMBCONT (SB o SBC) o BHATCH (BH o H, en ingls) o desde la casilla
P-9 de la plantilla original de AutoCAD 14 para tableta digitalizadora. Es el cuadro principal
para la edicin de sombreados.
Por ltimo, y en esta primera lnea, se puede incluir una descripcin tras una coma del
patrn de sombreado. A diferencia de los tipos de lnea, esta descripcin no suele ser grfica
en modo ASCII, ya que resulta poco menos que imposible dibujar de este modo algo que se
asemeje a un patrn de sombreado. Dicha descripcin se limita a un texto que explique el
sombreado; no es obligatoria. Este texto aparecer al ejecutar desde la lnea de comandos la
orden SOMBREA (HATCH) y elegir la opcin ?.
Las siguientes lneas son las que definen propiamente el patrn. Su sintaxis es la que sigue:
ngulo, origen_X, origen_Y, desfase, distancia[, tipo_lnea]
De esta forma quedan declarados todos los parmetros necesarios para la definicin de cada
lnea de rayado o sombreado. Para conseguir comprender como se genera un sombreado es
bice explicar el concepto de barrido.
Un sombreado se compone de uno o varios barridos de lneas. Un barrido es un conjunto de
lneas paralelas entre s y, una lnea de cada barrido es suficiente para definir ste. Por lo tan-
to, para definir un patrn de sombreado bastar definir cada una de las lneas que genera cada
uno de los barridos. Esto puede parecer un poco lioso pero, en el momento en que se entienda
bien resulta lgico y sencillo. Vamos a intentar explicarlo con un ejemplo.
Supongamos el ejemplo siguiente. Un tipo de sombreado que represente una sombra de trin-
gulos equilteros. Considerando un tringulo equiltero podemos dividirlo en sus tres lados,
cada uno es un segmento de una determinada longitud y todos ellos de la misma. Dibujaremos
en la imaginacin uno de los segmentos de dicho tringulo en un papel de transparencias. Otro
de los segmentos en otro papel igual, de forma que, al superponerlos, coincidan perfectamente
en un punto y formen dos de los lados del tringulo. En un tercer papel transparente del mis-
mo formato dibujaremos el tercer lado, cuidando dibujarlo en el lugar adecuado tambin para
que, al superponer las tres trasparencias se pueda ver el tringulo representado de manera
perfecta.
Si ahora, en cada trasparencia dibujramos lneas paralelas a las existentes en cada una de
ellas, todas a la misma distancia, con las mismas inclinaciones y con las mismas distancia que
en cada una de ellas, al superponer todas las hojas obtendramos un tramado de tringulos,
esto es, un sombreado.
Pues bien, cada una de las hojas trasparentes (con sus correspondientes lneas paralelas) es lo
que asemejaremos con un barrido. Todos los barridos juntos formarn el sombreado. sta es
la explicacin.
Lo que ocurre es que no ser necesario dibujar todas y cada una de las lneas de cada barrido,
ya que son paralelas e iguales, sino nicamente las suficientes para la definicin, adems de la
distancia que habr hasta sus semejantes y otros pocos datos.
Todo esto se realiza con los parmetros de la sintaxis antes expuesta. Cada uno de ellos se
explica por separado a continuacin.
ngulo. Es el ngulo formado por la lnea de rayado con la referencia de 0 grados. Los signos
son los trigonomtricos, es decir, el antihorario es el positivo.
origen_X y origen_Y. Son las coordenadas del punto de origen de la lnea de rayado. Se
explicar ms detalladamente un poco ms adelante.
desfase. Dice relacin al desplazamiento que tendr cada lnea de rayado con la siguiente
del conjunto que forma el barrido. Slo tiene sentido en lneas de trazo discontinuo y es medi-
do en el sentido de la propia lnea de rayado. Lo veremos enseguida.
distancia. La separacin entre cada lnea que forma el barrido.
tipo_lnea. Descripcin del patrn de tipo de lnea en cuestin. Esta definicin se construye
de exactamente la misma manera que lo estudiado en el MDULO TRES. Si no se incluye, ya
que es optativo, se supone una lnea continua.
Tras ver todo esto, vamos a intentar construir un sombreado de cuadrados; dejaremos el ex-
puesto anteriormente de los tringulos por ser ms complejo para empezar. Siempre que va-
yamos a definir un patrn de sombreado habremos de tener muy en cuenta el nmero de ba-
rridos que lo forman, es decir, deberemos descomponer dicho sombreado en un nmero de
barridos vlido. A veces, un tipo de rayado o sombreado se puede construir con distinto nme-
ro de barridos (como en este caso). En estos caso, parece lgico utilizar el menor nmero de
lneas de definicin para el archivo . PAT, esto es, el menor nmero de barridos.
Lo primero de todo, la lnea de encabezado y descripcin. Por ejemplo:
*LOSAS, Sombr eado de cuadr ados de l ado 1
NOTA: Tendremos las mismas consideraciones, respecto a nombres y caracteres, para esta
lnea que las explicadas para los encabezados de los tipos de lnea en el MDULO anterior.
Una trama de cuadrados la podemos definir con cuatro barridos (uno para cada lado del cua-
drado), sin embargo, parece ms lgico utilizar nicamente dos, ya que los lados de un cua-
drado son todos iguales y paralelos dos a dos. Nuestro sombreado, pues, estar formado por
cuadrados de lado 1 y con distancia de uno a otro de 1 unidad de dibujo tambin. Las dos l-
neas definidoras de sendos barridos seran:
0, 0, 0, 0, 1, 1, - 1
90, 0, 0, 0, 1, 1, - 1
Por lo que la definicin completa quedara as:
*LOSAS, Sombr eado de cuadr ados de l ado 1
0, 0, 0, 0, 1, 1, - 1
90, 0, 0, 0, 1, 1, - 1
NOTA: Con la definicin de uno de los cuadrados es suficiente, ya que luego se repiten. Esto
mismo ocurra con los trazos de los patrones de tipos de lnea.
Vamos a explicar todos los pasos. El primero de los renglones propios de la definicin (tras el
encabezado) se refiere a todas las lneas horizontales de los cuadrados. Es por ello que le da-
mos un ngulo de 0 grados.
Despus se indica el punto de partida de dichas lneas; el origen X y el origen Y. Este origen se
hace necesario a la hora de definir sombreados compuestos de varios barridos. Supongamos
que dibujamos en una hoja el rayado que queremos conseguir, accin muy aconsejable, por
cierto. Al punto inferior izquierdo de nuestro cuadrado le vamos a dar el valor terico de 0,0.
Desde ese punto partir la lnea. Podemos colocar el 0,0 en cualquier otro punto, tenindolo
luego en cuenta a la hora de dibujar los barridos restantes.
Tras el origen se indica un desfase de 0 unidades de dibujo. Un desfase hace que cada lnea
paralela del mismo barrido se incremente una distancia con respecto al punto de origen, o sea,
que comience en otro punto. Lneas sin desfasar seran las siguientes:
- . - . - . - . - . - . -
- . - . - . - . - . - . -
- . - . - . - . - . - . -
- . - . - . - . - . - . -
Y lneas desfasadas estas otras:
- . - . - . - . - . - . -
. - . - . - . - . - . - . -
- . - . - . - . - . - . -
. - . - . - . - . - . - . -
NOTA: El desfase, evidentemente, slo tiene sentido en tipos de lnea discontinuos.
Volviendo a nuestro ejemplo, no indicamos desfase porque nos interesa que cada cuadrado
tenga todos sus lados coincidentes.
La distancia de 1 unidad de dibujo, siguiente parmetro, se refiere a la existente entre cada
lnea paralela del mismo barrido.
Y, por ltimo, slo queda indicar el patrn de tipo de lnea, en este caso una lnea discontinua
de un trazo de 1 y un hueco de 1.
NOTA: Revsese si es necesario el MDULO TRES sobre creacin de tipos de lnea.
Toda esta primera lnea de definicin, por lo tanto, produce un barrido tal que as:
- - - - - - - - - -
- - - - - - - - - -
- - - - - - - - - -
...
La segunda lnea, por su lado, es de idntica definicin. nicamente vara el ngulo de la lnea,
que es de 90 grados. De esta manera, el barrido producido por esta segunda lnea sera el si-
guiente:
| | | | | | | | | | | | | | |
| | | | | | | | | | | | | | |
| | | | | | | | | | | | | | |
...
Ambos barridos juntos completaran el sombreado de cuadrados.
NOTA: Es muy importante tener en cuenta el punto de origen de cada barrido. Como punto de
partida se suele utilizar siempre el 0,0. Esto significa que el punto que nosotros escojamos
como punto de partida, y si se hace un sombreado en las inmediaciones del 0,0 de AutoCAD
lo podemos comprobar, estar en esa coordenada. Aunque el sombreado no ronde este origen
seguir dibujndose correctamente, nicamente se da esta referencia para que todos los barri-
dos coincidan y el dibujo final sea el esperado.
Una vez construido este sombreado, no nos ser difcil realizar y entender otros como el que
sigue:
*DOBLE, L neas cr uzadas
45, 0, 0, 0, 1
135, 0, 0, 0, 1
NOTA: Ntense un par de aspectos. El primero es la separacin mediante espacios blancos de
grupos de nmeros de definicin. Esto se hace nicamente para aclarar el sentido de la lnea.
Pueden separarse los grupos (ngulo, coordenadas, distancia...) para darle ms claridad a la
definicin (se pueden introducir tantos espacios como se quiera). Como segundo aspecto, no-
tar la ausencia en este ltimo ejemplo de definicin del patrn de tipo de lnea. Esto es posible
hacerlo y significa, como hemos comentado al principio, que es una lnea continua.
Este patrn muestra un entramado de lneas que se cortan a 90 grados. Cada barrido est in-
clinado 45 y 135 grados respectivamente.
Como conclusin, recordar que el patrn de sombreado tendr tantos renglones como barridos
formen el sombreado. Cada rengln de definicin tendr como mximo seis combinaciones de
trazos, espacios y puntos (seis valores numricos en la descripcin del archivo de texto).
NOTA: Al igual que en los tipos de lnea y en los archivos ASCII de definicin de mens, en el
archivo de patrones de sombreado se hace necesario un I NTRO al final de la ltima lnea para
que el ltimo patrn funcione perfectamente.
CUATRO.3. TCNICA DE CREACIN
La tcnica que debemos seguir a la hora de crear un patrn de sombreado, sobre todo al prin-
cipio, ha de ser meticulosa para no tener demasiados problemas.
Tras decidir cmo queremos que sea el rayado o trama que vamos a definir, habremos de di-
bujarlo en un papel para su mejor comprensin. En dicho dibujo decidiremos el punto de ori-
gen del patrn, as como las medidas, segn la escala elegida, de los trazos y huecos (si los
hubiera), la situacin de los puntos (si los hubiera, tambin), la distancia entre barridos, el
ngulo y el desfase.
Una vez hecho esto, iremos definiendo el patrn lnea por lnea si es muy complejo en un
editor ASCII y probndolo en AutoCAD, pero sin aceptar del todo su dibujado, es decir, reali-
zando una previsualizacin y cancelando. El problema, a la hora de aceptar por completo el
dibujado de un patrn de sombreado, es que AutoCAD se quedar utilizando el archivo co-
rrespondiente (ACAD. PAT o ACADI SO. PAT) y, aunque lo borremos, no podremos guardar ms
cambios en el archivo ASCII si no salimos de AutoCAD. Esto ocurre tambin cuando se nos
produce un error de definicin a la hora de utilizar un sombreado, as que hay que tener mu-
cho cuidado. Si, an as, ocurriera, slo deberamos salir de AutoCAD para poder guardar los
cambios en el archivo y volver a correr el programa.
CUATRO.4. UTILIZANDO EL PATRN DEFINIDO
Para utilizar un patrn de sombreado recin creado, slo debemos escogerlo como el resto de
los patrones inherentes al programa. Esto lo podemos realizar de, al menos, dos maneras dife-
rentes: desde la lnea de comandos y desde el cuadro de dilogo preparado a tal efecto. Lo
ms usual es que utilicemos esta ltima opcin, desde Dibujo>Sombreado... (comando SOMB-
CONT).
Desde este cuadro de dilogo elegiremos nuestro patrn en la lista desplegable llamada Pa-
trn:, o accediendo al men de imagen Paleta de patrones de sombreado pinchando en el bo-
tn Patrn... del mismo cuadro.
NOTA: En este cuadro, como sabemos, tenemos que elegir una escala adecuada al patrn que
se va a dibujar. De todas maneras, y al igual que en los tipos de lnea, es lgico indicar las
medidas de la definicin en el archivo . PAT similares a las de los patrones incluidos en el mis-
mo.
CUATRO.4.1. Iconos del men de imagen
El cuadro de eleccin de patrones de sombreado Paleta de patrones de sombreado no es otra
cosa que un men de imagen propio de AutoCAD 14 que contiene todos los patrones de som-
breados definidos por defecto. Al incluir un patrn nuevo en el archivo ACADI SO. PAT (o en
ACAD. PAT), la lista se actualiza con el nombre del nuevo patrn incluido. En dicha lista, apare-
cer el nuevo patrn en el lugar donde haya sido introducido por el creador.
NOTA: Si modificamos alguna definicin en el fichero . PAT sin salir del cuadro de dilogo de
sombreado (SOMBCONT), dicho cambio no surtir efecto hasta que salgamos y volvamos a en-
trar en ese cuadro.
Pero, como habremos percibido, la pequea imagen relacionada con nuestro patrn, y que
aparece a la derecha del men de imagen comentado, no existe. Esta imagen es una foto de
AutoCAD 14 que deberemos sacar y deberemos incluir en la fototeca correspondiente
(acad. sl b). Como se trata de aadir una imagen a una biblioteca de fotos, no podremos ha-
cerlo correctamente con el programa de manejo de fototecas que proporciona AutoCAD 14,
esto es sl i del i b. exe, sino que tendremos que utilizar otro.
Pero como todo lo referente a fotos y fototecas ser comentado en el MDULO OCHO de este
curso, vamos a dejar este pequeo aspecto para dicha parte posterior. Por ahora, y como hi-
cimos con los mens de imagen del MDULO UNO, conformmonos con el texto de la lista
izquierda y sin foto.
Debido a esta caracterstica de utilizar programas basados en MS-DOS para el manejo de foto-
tecas, es conveniente que demos nombres de menos de ocho caracteres y con smbolos
permitidos a los patrones de sombreado. Como se ha comentado ms de una vez, estos
nombres basados en MS-DOS debern ser los tpicos que utilicemos en cualquier archivo per-
sonalizable de AutoCAD 14.
CUATRO.5. EJEMPLOS PRCTICOS DE PATRO-
NES DE SOMBREADO
CUATRO.5.1. Patrn slido
*SOLI DO, Sombr eado sl i do
0, 0, 0, 0, . 1
NOTAS INTERESANTES:
1. Ntese que no se puede definir un sombreado completamente slido (con distancia
igual a 0). AutoCAD devolvera siempre un error de sombreado demasiado denso, fue-
se cual fuese la escala. Hay que simularlo con distancias muy pequeas entre lneas.
2. Como se ve, no es necesario incluir definicin de tipo de lnea si sta es continua. Las
dems definiciones son todas obligatorias.

CUATRO.5.2. Patrn simple inclinado
*ANG, Sombr eado i ncl i nado a 30 gr ados
30, 0, 0, 0, 1
CUATRO.5.3. Patrn de lneas cruzadas a 90
grados
*Cr uz, Cr uzadas a 90 gr ados
0, 0, 0, 0, 1
90, 0, 0, 0, 1
CUATRO.5.4. Patrn de hexgonos
*HEX, hexgonos
0, 0, 0, 0, 5. 49926, 3. 175, - 6. 35
120, 0, 0, 0, 5. 49926, 3. 175, - 6. 35
60, 3. 175, 0, 0, 5. 49926, 3. 175, - 6. 35
CUATRO.FIN. EJERCICIOS PROPUESTOS
I. Crear un patrn de sombreado compuesto por lneas de un trazo y dos puntos, inclina-
das 45 grados y desfasadas una cantidad de unidades de dibujo entre s.
II. Crear un patrn formado por 3 lneas continuas que se crucen.
III. Disese un patrn de sombreado compuesto por lneas continuas a 90 grados agrupa-
das de dos en dos. Existir un espacio X entre dos lneas y un espacio mayor que X
desde cada grupo de dos lneas al siguiente.
IV. Disear un patrn de sombreado que dibuje cuadrados de lado 1 y que posea un inters-
ticio de 0,5 unidades de dibujo entre cuadrado y cuadrado.
V. Crese un patrn que represente una trama de ladrillos. Dimensiones a gusto del dise-
ador.
VI. Disear un patrn de sombreado que represente estrellas de seis puntas.
VII. Crear el conjunto de patrones normalizados de sombreado necesario para su uti-
lizacin en los rayados de los diferentes materiales y elementos del mundo de la cons-
truccin.

EJERCICIOS RESUELTOS DEL MDULO CUATRO
EJERCICIO I
*TRAZOPUN, Tr azos y dos punt os i ncl i nadas
45, 0, 0, 1, 1, 1, - . 5, 0, - . 5, 0, - . 5
EJERCICIO II
*CRUZADAS, L neas cont i nuas que se cr uzan
0, 0, 0, 0, 1. 414213562373
45, 0, 0, 0, 1
135, 0, 0, 0, 1
EJERCICIO III
*GRUP, Gr upos de l neas cont i nuas
90, 0, 0, 0, 2
90, . 5, 0, 0, 2
EJERCICIO IV
*Cel os, Cuadr os de l ado 1 y espaci o 0. 5
0, 0, 0, 0, 1. 5, 1, - . 5
0, 0, 1, 0, 1. 5, 1, - . 5
90, 0, 0, 0, 1. 5, 1, - . 5
90, 1, 0, 0, 1. 5, 1, - . 5
EJERCICIO V
*Ladr i l l os, Tr ama de l adr i l l os
0, 0, 0, 0, . 25
90, 0, 0, . 25, . 25, . 25, - . 25
EJERCICIO VI
*Est r el l as, Est r el l as de sei s punt as
0, 0, 0, 0, 5. 49926, 3. 175, - 3. 175
60, 0, 0, 0, 5. 49926, 3. 175, - 3. 175
120, 1. 5875, 2. 74963, 0, 5. 49926, 3. 175, - 3. 175
EJERCICIO VII
(Ejercicio completo para resolver por tcnicos y/o especialistas).
Autor: J onathan Prstamo Rodr-
guez
Para: La Web del Programador

MDULO CINCO
Definicin de formas y tipos de le-
tra
CINCO.1. INTRODUCCIN
Despus de vista la creacin y personalizacin de mens de todo tipo para AutoCAD 14 (des-
plegables, de imagen, etctera), de barras de herramientas y botones, de tipos de lnea y de
patrones de sombreado, parece lgico pensar que tenemos la posibilidad de crear archivos de
formas y de tipos de letras de AutoCAD, as como de personalizar los ya existentes proporcio-
nados por el programa. Pues as es, esa posibilidad es tangible y es precisamente lo que va-
mos a estudiar en este MDULO CI NCO.
Los archivos de formas de AutoCAD, de los cuales hablamos por encima al introducir formas
en determinados tipos de lnea (vase el MDULO TRES), son ficheros de texto ASCII con
extensin . SHP que, posteriormente, habremos de compilar desde AutoCAD con el comando
COMPI LA (en ingls COMPI LE) para producir los correspondientes archivos de extensin . SHX,
que son con los que el programa trabaja.
Por otro lado, y refirindonos ahora a los archivos de fuentes de tipos de letra, decir que exis-
ten tres tipos integrados en AutoCAD 14: los archivos de fuentes escalables WYSIWYG (What
You See Is What You Get, lo que ves es lo que obtienes), esto es, las fuentes True Type con
extensin . TTF gracias a la integracin en Windows, los archivos . SHX que reciben el mis-
mo tratamiento que los archivos de formas, en cuanto a creacin desde un . SHP y posterior
compilacin, y los archivos de fuentes con tecnologa PostScript, de extensin . PFB y tambin
personalizables para AutoCAD 14. Los que vamos a tratar en este MDULO son los archivos
. SHX exclusivamente.
Los dos tipos principales, sin meternos en la tecnologa PostScript, son las fuentes True Type y
los archivos . SHX. La diferencia entre ambos tipos de fuentes de letras es evidente. La fuentes
True Type, como hemos dicho, son fuentes escalables, es decir, podemos aumentar su tamao
sin que disminuya la resolucin, ya sea en pantalla o a la hora de imprimir. Esto se consigue
gracias a la tecnologa WYSIWYG, que produce una visualizacin en pantalla perfectamente
similar a lo que despus obtendremos por una impresora o trazador. La programacin de fuen-
tes True Type para Windows requiere conocimientos amplios que escapan a los objetivos de
este curso, as como la tecnologa PostScript y el diseo de fuentes que la utilicen.
Las fuentes . SHX de AutoCAD, son tipos de letra vectorizados los cuales, al aumentar de esca-
la pierden definicin y terminan por verse todos los trazos o vectores rectos que las forman.
Estos tipos de letra, por el contrario, son los ms recomendados a las hora de materializar un
texto en un plano o dibujo. La razn es que su regeneracin y procesado no implica tanta car-
ga de memoria y de tiempo al sistema. Adems, para una letra de tamao pequeo, como por
ejemplo nmeros de cota en un plano mecnico, industrial, de construccin y dems, o textos
de un cajetn o lista de materiales, u otros, producen un efecto muy deseado y no se aprecia
su vectorizacin. Por otro lado, hemos de pensar que muchos de estos tipos de letra que con-
tiene AutoCAD 14 siguen rigurosamente normas ISO de rotulacin necesarias para muchos
tipos de planos.
En resumen, utilizaremos textos . SHX casi siempre en la rotulacin de planos tcnicos y deja-
remos la fuentes True Type para ttulos, cajetines, planos no normalizados y textos en general
que han de producir una presentacin visual impactante. Recordemos que AutoCAD es un
programa de dibujo estndar; es factible de ser utilizado por un ingeniero tcnico en topografa
o por un publicista.
La tecnologa PostScript slo podremos utilizarla con medios de impresin o trazado que la
admitan.
Comencemos pues aprendiendo a disear ahora nuestros propios archivos fuente de formas.
CINCO.2. ARCHIVOS DE FORMAS PROPIOS
Las formas de AutoCAD son esos pequeos dibujos que se utilizan, ms que nada, a la hora
de disear tipos de lnea. Tambin podemos insertarlos como leyenda de planos o como sim-
bologa esquemtica de otros, por ejemplo de calderera o electrnica (vlvulas, condensado-
res...). Tambin pueden ser utilizados como smbolos propios de alguna caracterstica de re-
presentacin, como tolerancias geomtricas.
Los archivos de formas, como ya hemos explicado, son archivos ASCII que contiene las defini-
cin de una o varias formas que, luego, podremos utilizar a la hora de definir, por ejemplo,
tipos de lneas o insertarlas como tales. El archivo fuente ASCII ha de tener la extensin . SHP.
Veamos, desde un editor de texto, las definiciones contenidas en el archivo LTYPESHP. SHP que
se proporciona junto a AutoCAD 14 y preparado para la inclusin de sus formas en patrones
de tipos de lnea. Este archivo es ms o menos de la siguiente forma:
; ; ;
; ; ; l t ypeshp. SHP - shapes f or compl ex l i net ypes
; ; ;
*130, 6, TRACK1
014, 002, 01C, 001, 01C, 0

*131, 3, ZI G
012, 01E, 0
*132, 6, BOX
014, 020, 02C, 028, 014, 0

*133, 4, CI RC1
10, 1, - 040, 0
*134, 6, BAT
025, 10, 2, - 044, 02B, 0
Como viene siendo habitual en los archivos que estudiamos ltimamente, el carcter punto y
coma (; ) establece la situacin de un comentario que ser ignorado por AutoCAD. Al igual
que en los archivos de tipos de lnea y de patrones de sombreado, con un slo carcter ; es
suficiente para definir una lnea de comentario. La inclusin de ms de uno solamente produce
comodidad a la hora de examinar el fichero en s. Adems, los espaciados interlineales pueden
ser usados para dar claridad al texto general y separar las formas por grupos o entre s.
Nosotros podemos incluir nuevas formas en este archivo o, por el contrario y siendo una tcni-
ca ms lgica, crear nuestro propio fichero . SHP de formas desde un editor ASCII. Para ello
habremos de asimilar la sintaxis de creacin.
CINCO.2.1. Sintaxis de creacin de formas
Una forma se define en dos o ms lneas dentro del archivo de definicin. En realidad, con dos
lneas es suficiente. Lo que ocurre es que, a veces, por la excesiva extensin de la segunda de
ellas que es la que realmente define la forma se suele separar en ms de una por comodi-
dad.
La primera de las lneas es el encabezado y tiene la sintaxis:
*nmero_forma, octetos_definicin, nombre_forma
El asterisco (*) es obligatorio para indicar a AutoCAD que lo siguiente es la definicin de una
forma. A continuacin, nmero_forma es un nmero entre 1 y 255 que identifica a cada forma
del archivo. Podemos escoger cualquiera dentro del rango, pero no podemos repetir cualquiera
de ellos dentro el mismo archivo de definicin de formas; evidente. As, podemos deducir f-
cilmente cuntas formas se nos permite incluir, en principio, en un solo archivo: doscientas
cincuenta y seis. Si se duplica el nmero de una forma, AutoCAD proporcionar un mensaje
de error al respecto a la hora de compilar el archivo (que ya veremos).
octetos_definicin es el nmero de octetos necesarios para definir la forma, es decir, el
nmero de octetos que se utilizan en la segunda lnea de definicin. Y nombre_forma es el
nombre que le damos a la forma creada, el que la identificar. Con este nombre cargaremos
despus la forma desde el programa; ha de ser obligatoriamente un nombre en maysculas
para que, posteriormente, AutoCAD lo almacene en memoria. Si no es as, no se producir
ningn error en la compilacin, pero AutoCAD no reconocer la forma al cargar el archivo e
intentar insertarla.
Todos los parmetros han de ir separados por comas (, ). Se pueden incluir espacios o tabula-
dores entre los diversos parmetros, tanto en esta lnea como en las dems, excepto inmedia-
tamente antes del nombre de la forma, ya que no se reconocer despus, e intentar incluir un
espacio antes del nombre al llamar a la forma desde el editor de dibujo producir un I NTRO no
deseado.
NOTA: Aunque los nombres pueden ser largos, recomendamos, como hemos dicho muchas
veces, utilizar nombres en formato MS-DOS para todos los nombres en archivos de personali-
zacin de AutoCAD.
Veamos entonces uno de los ejemplos, el tercero, del archivo expuesto anteriormente:
*132, 6, BOX
014, 020, 02C, 028, 014, 0
Como vemos, tras el asterisco obligatorio, se indica el nmero que se le asigna (132), el n-
mero de octetos de definicin de la segunda lnea, esto es 6 (014, 020, 02C, 028, 014, 0) y, por
ltimo, el nombre de la forma (BOX). Pero, qu definen estos octetos y cmo lo hacen? Vamos
a pasar a explicarlo seguidamente.
Los octetos que definen la forma en s contienen la direccin y longitud de cada vector (lnea o
arco) de la misma. Los octetos han de ir todos ellos separados por comas y, como ya se ha
dicho, pueden existir espaciados o tabulaciones de separacin.
Si el primer dgito de un octeto es 0, como en el ejemplo anterior 014, 020, 02C..., se entiende
que est expresado en notacin hexadecimal (que es lo ms habitual); en caso contrario esta-
ra en decimal.
La primera parte del octeto, tras el 0 hexadecimal, es la longitud del vector. Dicha longitud
ser generalmente unitaria, es decir, igual a 1, debido a que a ella se le aplicar posteriormen-
te el factor de escala de la forma. Como se utiliza la primera parte del octeto para la longitud,
sta ser como mucho igual a 15 (0F en hexadecimal). En el ejemplo, las longitudes son los
segundos dgitos indicados (despus del 0).
La segunda mitad del octeto es la direccin del vector en cuestin. Esta direccin se indica por
un dgito hexadecimal, correspondiente a 16 direcciones predefinidas, como se muestra en la
tabla siguiente:
NOTA: En la siguiente tabla se expresa la direccin teniendo en cuenta que el ngulo de 0 gra-
dos sexagesimales est en la direccin Este (las 3 en la esfera de un reloj) y que el sentido
positivo es el trigonomtrico (el antihorario). De todas formas, se aclara con la indicacin de
una direccin conocida; las direcciones de las bisectrices se refieren a la parte que tiene el
sentido que escapa del centro de coordenadas.
Dgito - Direccin

0 -- 0 grados (direccin de la parte positiva del eje X)
1 -- 22,5 grados (direccin de la bisectriz al primer octante)
2 -- 45 grados (direccin de la bisectriz al primer cuadrante)
3 -- 67,5 grados (direccin de la bisectriz al segundo octante)
4 -- 90 grados (direccin de la parte positiva del eje Y)
5 -- 112,5 grados (direccin de la bisectriz al tercer octante)
6 -- 135 grados (direccin de la bisectriz al segundo cuadrante)
7 -- 157,5 grados (direccin de la bisectriz al cuarto octante)
8 -- 180 grados (direccin de la parte negativa del eje X)
9 -- 202,5 grados (direccin de la bisectriz al quinto octante)
A -- 225 grados (direccin de la bisectriz al tercer cuadrante)
B -- 247,5 grados (direccin de la bisectriz al sexto octante)
C -- 270 grados (direccin de la parte negativa del eje Y)
D -- 292,5 grados (direccin de la bisectriz al sptimo octante)
E -- 315 grados (direccin de la bisectriz al cuarto cuadrante)
F -- 337,5 grados (direccin de la bisectriz al octavo octante)
NOTA: Los vectores diagonales se consideran siempre de la misma longitud que los que estn
en las direcciones X e Y.
Volvamos sobre el ejemplo anterior. La explicacin al primer octeto (014), una vez vista la sin-
taxis correspondiente, es: un 0 que indica notacin hexadecimal, una longitud 1 y una direc-
cin 4 (90 grados). De esta manera se dibuja un trazo unitario perpendicular al eje X y hacia
arriba.
El siguiente octeto (020) es: 0 hexadecimal, trazo de longitud 2 y direccin 0 (0 grados); dibu-
ja un trazo recto partiendo del punto final del anterior horizontal hacia la derecha y de dos
unidades de dibujo de longitud.
Tras estos dos octetos, aparecen otros tres que, si los estudiamos detenidamente de la misma
forma anterior, podemos ver que van dibujando un cuadrado cuyo semilado es igual a 1 ().
Por ltimo, un octeto final que slo contiene 0, acaba la definicin. Este ltimo octeto debe
estar presente al final de todas las definiciones de formas; es un cdigo especial que indica el
final de la definicin. Un poco ms adelante hablaremos de estos cdigos especiales.
Vamos a ver otro ejemplo del archivo LTYPESHP. SHP:
*131, 3, ZI G
012, 01E, 0
La primera lnea indica el nmero de forma, el nmero de octetos de definicin (2 ms el 0
final) y el nombre asignado, adems del asterisco inicial. La segunda lnea, en su primer octe-
to, especifica un trazo unitario en la direccin 2 (45 grados) y, en su segundo octeto, un trazo
unitario en la direccin E (315 grados). Al final se encuentra el 0 de fin de definicin. Esta for-
ma representa un smbolo similar al del acento circunflejo (^).
CINCO.2.2. Cmo cargar e insertar formas
Para poder insertar una forma en el dibujo actual, debemos cargar antes el archivo que contie-
ne dicha forma. As pues, para poder acceder a las formas contenidas en el archivo que hemos
puesto de ejemplo en la seccin anterior, deberemos cargarlo antes en memoria.
Para cargar un archivo de formas se utiliza el comando CARGA (o LOAD en versiones inglesas)
en lnea de comandos. Este comando llama a un cuadro de dilogo desde el que se elige la
forma que deseamos cargar. Pero atencin, nicamente podemos cargar archivos de extensin
. SHX, es decir, los archivos de formas compilados, y no los fuente . SHP.
NOTA: Posteriormente veremos la manera de compilar nuestros . SHP.
Una vez cargado el archivo, y si no se produce ningn error de carga, se proceder a insertar
las formas con el comando FORMA (en ingls SHAPE) desde la lnea de comandos tambin. Este
comando proporciona la posibilidad de escribir el nombre de una forma (el ltimo parmetro
de la primera lnea de definicin) o de listar los nombres de todas o algunas de las formas car-
gadas en memoria.
NOTA: Puede haber ms de un archivo de formas cargado en memoria.
Al insertar las forma se nos pedir el punto se insercin, la altura de la forma y ngulo rota-
cin. En este punto, debemos recordar la necesidad de disear formas unitarias para luego
proporcionarles una altura o factor de escala en esta entrada. El punto de donde viene "engan-
chada" la forma a la hora de insertarla, es el primer punto de definicin de la misma, es decir,
desde donde se comenz a dibujar en el primer octeto.
Vamos entones a crear nuestro primer archivo de formas. Para este ejercicio disearemos una
forma que representar un cuadrado con una de sus diagonales dibujada.
Tras abrir un editor de texto ASCII procederemos a escribir lo siguiente:
*1, 6, CUADRADO
014, 010, 01C, 018, 012, 0
La explicacin es bien sencilla. Le proporcionamos un nmero 1 a la forma y le indicamos que
va a ser descrita con 6 octetos (este nmero lo sabremos siempre al final de escribir la forma,
lgicamente) y que se llamar CUADRADO. Comenzando desde la esquina inferior izquierda, tra-
zamos (siempre trazos unitarios) un vector vertical hacia arriba, otro horizontal hacia la dere-
cha, otro vertical hacia abajo, otro horizontal hacia la izquierda y un ltimo vector inclinado (la
diagonal) desde el punto inicial del cuadrado (donde ha acabado tambin el ltimo vector) has-
ta el final del segundo vector (a 45 grados). Recordemos que los vectores diagonales han de
considerarse todos de la misma longitud que los que no son diagonales, por ello tienen todos
los vectores la misma medida en este ejemplo.
NOTA: Conviene hacer un pequeo boceto o esquema de la forma que queremos disear, ano-
tando un punto de origen y la direccin y longitud de cada vector, para guiarnos.
NOTA: Al final de un archivo de definicin de formas, como en todos los archivos vistos hasta
ahora en este curso, deberemos introducir un I NTRO (tras el ltimo carcter de la ltima lnea)
para que el archivo funcione correctamente. De no ser as, no ser reconocido como archivo de
formas vlido.
Guardaremos nuestro archivo (como archivo de texto si estamos en un editor que admite texto
con formato; esto debemos tenerlo en cuenta, como deberamos saber ya, en todos los archi-
vos de personalizacin y programacin de AutoCAD 14) con el nombre que deseemos y ex-
tensin . SHP.
CINCO.2.3. Compilando el fichero .SHP
Para poder insertar nuestra forma recin creada debemos cargar el archivo de definicin, como
hemos explicado. Pero para ello, habremos de compilarlo previamente para convertirlo en un
archivo . SHX y que sea vlido para AutoCAD.
Los archivos de formas fuente . SHP se compilan en AutoCAD 14 desde la lnea de comandos
con la orden COMPI LA (COMPI LE en ingls). Este comando abre un cuadro Windows de bsque-
da de archivos que permite localizar el . SHP fuente para compilarlo. En la casilla desplegable
Archivos de tipo: debe especificar *.shp, de los otros archivos se habla ms adelante en este
mismo MDULO.
Una vez escogido, pulsamos el botn Abrir y el archivo, si no encuentra ningn error el pro-
grama, ser compilado con xito. A partir de aqu, nicamente deberemos cargarlo e insertar
la forma creada como se ha indicado anteriormente. El archivo se compilar con el mismo
nombre que tena el fuente, pero con extensin . SHX.
Al compilar un archivo de definicin de formas se nos indicar en lnea de comandos el nombre
del archivo de salida (compilado) y su ubicacin, as como el nmero de bytes que contiene u
ocupa. Si existe algn error, adems del correspondiente mensaje se nos proporcionar el n-
mero de la lnea en el archivo ASCII que produce el fallo.
NOTA: Si intentamos cargar un archivo . SHX y nos aparece un error de AutoCAD que dice
algo as como: Ruta_y_nombre_de_archivo es un ar chi vo de f uent e de t ext o nor mal ,
no un ar chi vo de f or mas, quiere decir que estamos intentado cargar como archivo de for-
mas un archivo de tipos de letra (que veremos despus). Estos archivos no se pueden cargar
de esta manera.
Ahora, vamos a ver algn ejemplo prctico ms. La siguiente forma dibuja un smbolo parecido
a una seal de trfico de las que indican la direccin a algn sitio dentro de una poblacin (mi-
rando a la derecha):
*12, 6, DI RECC
014, 020, 01E, 01A, 028, 014, 0
La siguiente definicin dibuja una forma que representa una flecha mirando a la derecha:
*56, 6, FLECHA
020, 014, 02F, 029, 014, 0
NOTA: Podemos cargar archivos de formas que contengan nmeros iguales asignados a las
definiciones, pero no puede haber nmeros idnticos dentro del mismo archivo como ya se
ha comentado. Si se cargan archivos que contengan formas con nombres idnticos, sola-
mente se podr insertar la forma que resida en el primer archivo cargado. Si se carga un ar-
chivo con dos formas que tengan el mismo nombre, slo se podr insertar la que est definida
antes.
NOTA: Al editar un archivo de definicin de formas y cambiar sus lneas, recordemos volver a
compilarlo y volver a cargarlo para comprobar sus variaciones. Pero ojo, para volver a cargarlo
deberemos entrar en un dibujo nuevo para que AutoCAD descargue de memoria las antiguas
definiciones, de otra manera, no veramos cambios en nuestras formas.
CINCO.2.4. Cdigos especiales
Aparte de las orientaciones que definen los vectores, se puede indicar a modo de octetos una
serie de cdigos especiales que realizan algunas operaciones adicionales para facilitarnos el
dibujado de formas. Estos cdigos comienzan por el 0 hexadecimal (que ya hemos visto) y
llegan al 0E hexadecimal. En decimal van, evidentemente, del 0 al 14. Suele ser norma lgica
especificar estos cdigos en decimal para distinguirlos de los de direccin bsica de vectores
en hexadecimal.
Los cdigos especiales y su explicacin vamos a ir vindolos a continuacin uno por uno.
Cdigo 0 (0 hexadecimal). Termina la definicin de una forma. Ya lo hemos visto antes y,
como sabemos, ha de acabar siempre una definicin.
Cdigo 1 (01 hexadecimal). Activa el modo de dibujo. Los vectores que se indiquen en los
octetos que le sigan sern dibujados normalmente. Acta como si se bajara una pluma conec-
tada al cursor que traza la forma y slo tiene sentido despus del siguiente cdigo.
Cdigo 2 (02 hexadecimal). Desactiva el modo de dibujo. Los vectores que se indiquen a con-
tinuacin de este cdigo no se dibujarn; se recorrer la distancia indicada pero no se trazar
ninguna lnea o arco. Acta como si se levantar una pluma conectada al cursor que traza la
forma; para volver a activar el modo de dibujo se recurre al cdigo anterior.
De esta forma con estos cdigos 01 y 02, podemos dibujar trazos un poco ms complejos
que los estudiados hasta ahora, ya que no hace falta que pasemos varias veces por un mismo
sitio para llegar a un punto. Por ejemplo, la siguiente forma se corresponde con el smbolo de
una cruz:
*10, 11, CRUZ
010, 014, 002, 01C, 001, 01C, 002, 014, 001, 010, 0
Expliqumosla un poco; es muy simple. Dibujamos un trazo de una unidad de dibujo en el sen-
tido horizontal hacia la derecha (010) y otro trazo unitario hacia arriba (014). En este momen-
to, y para seguir dibujando la cruz por el medio, desactivamos el modo de dibujo (002). De-
bemos indicar el primer 0 porque es notacin hexadecimal, como se explic. Ahora, recorre-
mos el espacio inverso al ltimo tramo dibujado pero sin trazar (01C), volvemos a activar el
modo de dibujo (001) y trazamos el tramo inferior vertical (01C). A continuacin, desactivamos
el dibujo de nuevo (002) para volver al centro (014), lo volvemos a activar (001) y realizamos
el ltimo tramo horizontal hacia la derecha (010). Acabamos con el 0 de rigor.
Si hubiramos indicado los cdigos especiales en decimal habra sido as:
*11, 11, CRUZ
010, 014, 2, 01C, 1, 01C, 2, 014, 1, 010, 0
Cdigo 3 (03 hexadecimal). Divide la longitud de los vectores a partir de l por el factor indi-
cado en el octeto siguiente.
Cdigo 4 (04 hexadecimal). Multiplica la longitud de los vectores a partir de l por el factor
indicado en el octeto siguiente.
El efecto de estos dos cdigos es acumulativo si se utilizan repetidas veces. Para anular el
efecto de uno de ellos de utiliza el otro, es decir, si establecemos que todas las longitudes si-
guientes se dividan entre dos, por ejemplo, para paliar este efecto y volver a las medidas ori-
ginales en otros vectores, debemos multiplicar por dos su longitud. Veamos un ejemplo:
*1, 13, CUA2
014, 3, 2, 010, 01C, 4, 2, 018, 3, 2, 01C, 010, 0
El primer trazo es unitario y vertical hacia arriba (014), luego se define que todos los trazos
siguientes habrn de ser divididos (3) entre dos (2). Ahora se indica un trazo de 1 horizontal
hacia la derecha (010), pero se dibujar de 0,5 unidades de dibujo porque ser dividido en-
tre dos: 1 / 2 = 0,5. A continuacin, un trazo unitario vertical hacia abajo (01C), pero ser
tambin de 0,5. Luego se especifica que todos los trazos siguientes se multipliquen (4) por dos
(2), esto es, se deshace la operacin anterior, por lo que ahora los trazos medirn la longitud
indicada. Se traza un tramo de 1 horizontal hacia la izquierda (018) y se vuelve a establecer la
especificacin de divisin (3) entre dos (2). Se termina con dos trazos de 0,5 hacia abajo y
hacia la derecha (01C y 010), y con el 0 final. El resultado son dos cuadrados unidos por sus
vrtices inferior izquierdo y superior derecho, respectivamente.
Cdigo 5 (05 hexadecimal). Memoriza la posicin actual del cursor de dibujo en un acumula-
dor o pila. Este acumulador puede almacenar hasta cuatro posiciones. Todos los valores alma-
cenados en la pila deben despus ser extrados con el cdigo siguiente y no debe quedar nin-
guno almacenado al terminar la definicin de la forma.
Cdigo 6 (06 hexadecimal). Toma la posicin actual del acumulador. sta debe haber sido
previamente almacenada con el cdigo anterior. Vamos a ver un ejemplo:
*10, 9, CRUZ
010, 5, 014, 6, 5, 01C, 6, 010, 0
Este ejemplo se corresponde con el anterior estudiado de la cruz, pero realizado aqu de una
manera ms simple. Tras realizar el primer trazo hacia la derecha (010) de guarda la posicin
del cursor en el acumulador esta posicin ser la del final del trazo, es decir, el centro de la
cruz. Dibuja el trazo vertical hacia arriba (014) y vuelve a la posicin anterior guardada en el
acumulador (6). Antes de dibujar nada guarda esta posicin de nuevo (5), dibuja el trazo ver-
tical inferior de la cruz (01C) y vuelve a la posicin guardada (6). Finaliza dibujando el ltimo
trazo horizontal derecho y con el 0 ltimo.
NOTA: Ntese que hemos de guardar una posicin para poder luego recuperarla, es decir, con
guardar una sola vez no podemos recuperar luego varias, aunque sea la misma posicin como
en este caso anterior. Cada vez que se llama al acumulador se pierde la posicin. En resumen,
habr tanto cdigos 6 como 5 haya; ni ms 6 que 5, ni ms 5 que 6.
NOTA: Las posiciones pueden estar anidadas: podemos llamar tres veces y luego ir recuperan-
do los valores uno a uno y empezando por el ltimo guardado hacia el primero. Como mximo
puede haber cuatro niveles de anidacin (los cuatro valores que guarda el acumulador como
mucho).
Cdigo 7 (07 hexadecimal). Llama a una subrutina consistente en una forma ya definida, o
sea, una subforma de la forma actual. El octeto siguiente al de este cdigo debe ser el nmero
asignado (entre 1 y 255) a la subforma en el mismo archivo de definicin. Una vez dibujada la
subforma, se reanuda el dibujo del resto de octetos de la forma actual en curso. El siguiente es
un archivo de ejemplo (con dos formas) en el que se usa este cdigo:
; Ej empl o de f or ma con una subf or ma i ncl ui da
*134, 11, CRUZ
5, 014, 5, 014, 6, 5, 018, 6, 010, 6, 0
*201, 17, CUACRUZ
024, 020, 02C, 028, 2, 010, 1, 7, 134, 01C, 3, 2, 5, 018, 6, 010, 0
Aqu (CUACRUZ) se dibuja un cuadrado de lado igual a 2 y se inserta (7) la forma CRUZ (134) en
el medio (subforma), dividindolo en cuatro cuadrantes. Luego se dibuja una especie de pie al
conjunto. El resto de la definicin tiene que comprenderse ya perfectamente.
NOTA: Ntese en el ejemplo anterior que la subforma se dibujar comenzando en el punto en
el que acabe la forma principal y desde el punto de inicio de dibujo de la subforma. La forma
principal se reiniciar en el punto en el que acabe la subforma. Por eso hay que tener muy
presente los puntos de inicio y final de las subformas, as como los puntos intermedios donde
se van a insertar dentro de las formas principales. Y es por ello que la cruz de este ejemplo no
se dibuja de la misma manera que la de ejemplos anteriores.
NOTA: Ntese tambin la tcnica de anidamiento de memorizaciones y llamadas al acumulador
en la subforma CRUZ.
Cdigo 8 (08 hexadecimal). Permite dibujar un vector en cualquier direccin y con cualquier
longitud. De esta forma, evitamos las limitaciones impuestas por los octetos bsicos de defini-
cin que, como sabemos, slo nos permiten una longitud mxima de 15 en 16 orientaciones
predeterminadas. Los dos octetos que siguen a este cdigo se toman como incrementos en X e
Y del vector que va ser definido. Por ejemplo:
*1, 6, HOLA
024, 8, - 7, 18, 020, 0
Esta forma define un trazo vertical hacia arriba de dos unidades y, posteriormente, indica un
vector (8) con sendos incrementos X (- 7) e Y (18). Despus acaba con un trazo horizontal ha-
cia la derecha de dos unidades de dibujo, y el 0 final.
Estos vectores, como vemos, estn definidos por coordenadas cartesianas: desde el ltimo
punto trazado, una distancia en X y otra distancia en Y. Trazando una recta paralela imaginaria
al eje Y que pase por dicho punto en X, y otra paralela imaginaria al eje X que pase por el pun-
to en Y, donde se corten ambas rectas se producir un punto que, unido con el inicio (el final
del vector anterior), dar la direccin del vector actual propuesto, y tendr como sentido el
tomado desde el inicio hacia el final.
Para mayor claridad de los datos, se admiten parntesis en la definicin entre ambos valores
de X e Y. As el ejemplo anterior podra haberse escrito:
*1, 6, EJ EMPLO1
014, 8, ( - 7, 18) , 010, 0
NOTA: Aprciese que, aunque vayan los vectores entre parntesis, el nmero de octetos sigue
siendo el mismo, esto es, el nmero de valores entre comas; o el nmero de comas ms uno.
Cdigo 9 (09 hexadecimal). Permite indicar varios valores seguidos de vectores personales
con incrementos X e Y, tal como se ha explicado en el cdigo anterior. De esta forma, nos aho-
rramos el tener que especificar continuamente este cdigo anterior, ya que todos los pares de
valores que sigue al cdigo 9 se toman como incrementos en X y en Y (respectivamente) hasta
un par 0, 0 que debe terminar siempre la secuencia. Se admite tambin la inclusin de parn-
tesis. Por ejemplo:
*2, 9, EJ EMPLO2
9, ( 7, - 5) , ( 16, - 8) , ( - 2, 21) , ( 0, 0)
Cdigo 10 (0A hexadecimal). Permite definir un arco octante mediante los dos octetos si-
guientes. Un arco octante abarca un ngulo mltiplo de 45 grados y empieza y termina siem-
pre en los lmites de uno de los octantes de la circunferencia. Esto no quiere decir que sola-
mente pueda ocupar un octante, sino que pueden ser varios los que abarque. El primer octeto
que sigue a este cdigo especifica el radio del arco y, el segundo, contiene dos datos: la pri-
mera mitad del octeto es el octante inicial y, la segunda mitad, el nmero de octantes cubier-
tos de 0 a 7; 0 significa 8 octantes, es decir, la circunferencia completa. Si el arco se genera en
sentido antihorario o trigonomtrico no deberemos indicar signo. Por el contrario, si se genera
en sentido horario habr que indicar signo negativo (- ). Se admiten parntesis por claridad.
Veamos un ejemplo:
*10, 6, EMPALME
034, 10, ( 2, - 043) , 02E, 0
Este ejemplo indica lo siguiente: un primer trazo vertical hacia arriba de tres unidades de dibu-
jo (034), ahora comienza la definicin de un arco de octantes (10) de radio dos unidades (2),
que se dibujar en sentido horario (signo - ), que comenzar en el octante cuarto, es decir en
180 grados, y abarcar tres octantes, es decir 135 grados (043). Despus se traza un tramo
vertical hacia abajo (02E) y se acaba con 0. Esta forma asimila a dos lneas unidas con un em-
palme o enlazadas tangentemente.
El siguiente ejemplo traza un crculo completo:
*1, 4, CI RCUL
10, ( 2, 010) , 0
NOTA: Indiquemos siempre el segundo octeto de los parntesis en formato hexadecimal, es
decir, comenzando con el 0. Lo mismo para el cdigo siguiente.
Cdigo 11 (0B hexadecimal). Permite definir arcos que no comienzan ni terminan en octan-
tes. Los cinco octetos siguientes a la especificacin del cdigo son utilizados para definir el ar-
co. Los parmetros de dichos cinco octetos son:
desplazamiento inicial: la distancia a la que empieza el arco desde el ltimo octante
completo que abarca. Se indica en fraccin de octeto, multiplicado por 256 para que d un
valor de 0 a 255.
desplazamiento final: la distancia a la que termina el arco desde el ltimo octante com-
pleto que abarca. Se indica igual que el anterior.
radio mayor: el octeto de mayor valor del radio. Ser 0 salvo en los casos en que el ra-
dio exceda de 255.
radio menor: el radio del arco, tal como se ha explicado en el cdigo anterior (10).
octante inicial y nmero de octantes: el mismo significado que con el cdigo 10.
Como vemos, con este cdigo se indica tambin un octante de arranque y un nmero de oc-
tantes cubierto, as como el radio del crculo. La nica diferencia es que hay que especificar los
desplazamientos necesarios con respecto a los lmites de los octantes del crculo. De ah que se
pueda trazar cualquier arco. El siguiente ejemplo muestra un arco construido de esta manera:
*255, 7, ARCO
11, ( 85, 171, 0, 5, 012) , 0
Veamos la explicacin, ya que este cdigo resulta un poco rido al principio. Lo primero que se
indica es el cdigo (11) para trazar el arco. Despus, y como hemos expuesto antes, el despla-
zamiento inicial. El arco comienza en un ngulo de 60 - 45 = 15 grados del primer octante.
Esto supone una fraccin de 15 / 45 = 1 / 3 de octante. Expresado en un octeto de definicin
se obtiene una cifra de 0,3333 * 256 = 85 (85).
El desplazamiento final es el siguiente octeto. Se obtiene de igual modo que el desplazamiento
inicial, esto es, el arco termina en 120 - 90 = 30 grados del segundo octante. Luego el valor es
(30 / 45) * 256 = 171 (171).
Como el radio es inferior a 255, el valor del radio mayor es 0 (0). El radio del arco, que se re-
presenta como radio menor es 5 (5) y, por ltimo, se indica el octante inicial que es 1 (1), ya
que empieza una fraccin despus del primer octante, y el octante final que es 2 (2), ya que
empieza una fraccin despus del segundo octante.
La manera de trazar un crculo completo con este cdigo sera la que sigue:
*1, 7, CI R
11, ( 0, 0, 0, 10, 010) , 0
Cdigo 12 (0C hexadecimal). Permite definir arcos mediante incrementos en X e Y, aplicando
un factor de curvatura (tres octetos). Los incrementos indican el punto final del arco y, el fac-
tor de curvatura es el resultado de 2 * H / D, siendo H la flecha del arco y D la cuerda. Como
el factor se indica en un octeto con signo (+ si es antihorario y - si es horario), la curvatura
debe multiplicarse por 127. Los incrementos tambin se indican en un octeto con signo, por lo
tanto van de -127 a 127. Por ejemplo:
*1, 5, SEMI CI R
12, ( 0, 5, 127) , 0
Este ejemplo dibuja una forma que es un semicrculo. Los incrementos, 0 en X y 5 en Y, se
refieren, como hemos dicho, al punto final del arco, por lo que, en este caso, ser un arco de
dimetro igual a 5. Al ser un semicrculo, la flecha es igual al radio, por lo que 2 * 2,5 / 5 = 1;
o sea, 1 127 = 127 (curvatura).
Cdigo 13 (0D hexadecimal). Al igual que el cdigo 9 permita indicar varios vectores segui-
dos para no tener que especificar continuamente el cdigo 8, este cdigo 13 permite definir
varios arcos seguidos de la forma explicada en el cdigo anterior. De esta manera no habre-
mos de repetir el cdigo 12 de forma continua cuando se quiera definir ms de un arco segui-
do. De la misma forma que en aquel caso, deberemos acabar la secuencia con el par 0, 0.
Veamos un ejemplo que dibuja una forma que es similar a una letra S con los extremos alar-
gados en dos segmentos:
*120, 12, ESE
020, 13, ( 0, 5, 127) , ( 0, 5, - 127) , ( 0, 0) , 020, 0
Cdigo 14 (0E hexadecimal). Es una seal de procesamiento vertical. Se utiliza slo en des-
cripciones de tipos de letra que enseguida veremos que pueden tener generacin vertical.
Establece una alternativa, de forma que el cdigo siguiente se procesa o se salta, segn se
est dibujando el texto con generacin vertical o no.
NOTA: Los parntesis pueden ser usados como aclaracin en cualquier parte de la definicin,
no exclusivamente donde se ha indicado aqu; AutoCAD no los procesar.
NOTA: AutoCAD 14 proporciona otros archivos de formas adicionales (aparte del LTY-
PESHP. SHX) que pueden encontrarse en el directorio \ ACAD\ BONUS\ FONTS\ del CD-ROM de ins-
talacin (probablemente no habrn sido copiados a disco duro). Esos archivos de ejemplo son
ES. SHX y PC. SHX (con sus correspondientes . SHP). Podemos revisar dichos archivos para com-
prender mejor el proceso de creacin de una forma.
CINCO.3. ARCHIVOS DE TIPOS DE LETRA
Los tipos de letra . SHX son archivos de formas de AutoCAD que se definen siguiendo el mismo
mtodo explicado hasta este punto. nicamente hay que tener una serie de consideraciones
que vamos a indicar a continuacin.
En archivos fuente de tipos de letra, el parmetro nmero_forma que se especifica en la sin-
taxis no puede ser cualquier valor, como ocurra con las formas, sino el cdigo ASCII corres-
pondiente al carcter que se defina. Este cdigo lo podemos introducir tanto en decimal como
en hexadecimal. As por ejemplo, 70 (046 hexadecimal) se correspondera con la letra F (ma-
yscula), 106 (06A hexadecimal) con la j (minscula) y 91 (05B hexadecimal) con el carcter
corchete de apertura ([ ).
NOTA: Recordemos que los cdigos en hexadecimal han de llevar un 0 delante, como mnimo.
Los cdigos imprimibles comienzan desde el 32 (020 hexadecimal), que se corresponde con el
espacio. Los anteriores son cdigos de control que no son utilizados en la creacin de tipos de
letra, excepto el 10 (00A hexadecimal) que representa una interlnea o retorno de carro (pasa
a la siguiente lnea sin dibujar). Es el que se conoce en el mundo de la informtica como lf; es
un I NTRO en la escritura.
NOTA: Al final de este curso, en el APNDI CE F, se proporciona una lista completa de cdigos
ASCII y sus correspondencias. De todas formas, podemos revisar los archivos . SHP proporcio-
nados por AutoCAD 14 de los tipos de letra suministrados para revisar las definiciones y ver
los cdigos ASCII de cada carcter. Estos archivos fuente no se copian al disco duro durante el
proceso de instalacin y han de buscarse en el directorio \ ACAD\ BONUS\ FONTS\ del CD-ROM de
instalacin.
Adems los tipos de letra han de incluir una definicin de forma especial al comienzo del archi-
vo, la cual contiene informacin general sobre la fuente creada. Esta forma especial tiene n-
mero 0 (nul) y su sintaxis ha de ser la siguiente:
*0, 4, nombre_tipo_letra
arriba, abajo, modos, 0
Como vemos, el asterisco (*), el nmero de forma 0 y el 4 (4 octetos) siempre se escriben,
son obligatorios. nombre_tipo_letra es el nombre que le damos a nuestro tipo de letra, y ha
de ser el mismo que el que tiene el archivo . SHX correspondiente.
Por su lado, arriba indica el nmero de longitudes de vector que ocupan las maysculas por
encima de la lnea base. abajo indica el nmero de longitud de vectores que las "astas" verti-
cales de la minsculas descienden por debajo de la lnea base (en las letras q, y, p y j). Esta
lnea base se entiende como la lnea imaginaria donde se apoya el texto en general.
Y modos debe ser 0 para los tipos de letra de generacin normal y 2 si admite tambin genera-
cin vertical (de arriba a abajo o de abajo arriba). En este punto entra en juego el cdigo 14
explicado en la seccin anterior. Se dijo que nicamente se utilizaba como seal de procesa-
miento vertical, y aqu lo podremos comprobar. Este cdigo slo se toma en consideracin
cuando modos est definido como 2.
Por ltimo, decir que el nombre que asignemos a cada forma que defina una letra del conjunto
habr de escribirse, por norma general, en minsculas, no como en el caso de las formas. Esto
se hace as para que AutoCAD no guarde los nombres en memoria (recordar que en las for-
mas se escriban en maysculas precisamente para que se guardaran en la memoria) y no
ocupen espacio. Los nombres en minscula no se guardan en memoria y AutoCAD dibuja los
caracteres de texto segn sus cdigos ASCII (nmeros de forma) y no segn sus nombres, por
lo que funcionarn perfectamente.
Todas las dems consideraciones han de tomarse idnticas a las de la creacin de formas, en
cuestin de comentarios, definicin unitaria, etctera.
La siguiente definicin de un carcter para un tipo de letra se corresponde con una "D" mays-
cula:
*68, 13, dmayus
1, 030, 012, 044, 016, 038, 2, 010, 1, 06C, 2, 050, 0
Los octetos de definicin se interpretan de la misma manera que al dibujar formas. Primero se
activa el modo de dibujo por si estuviera desactivado (1). Se comienza a dibujar con un
trazo de tres unidades horizontal a la derecha (030), luego un trazo unitario a 45 grados hacia
arriba a la derecha (012), un trazo vertical hacia arriba de cuatro unidades de dibujo (044),
otro unitario a 45 grados hacia arriba a la izquierda (016) y uno de tres unidades horizontal a
la izquierda (038). Despus se desactiva el modo de dibujo (2) y se recorre el camino inverso
al ltimo tramo en una unidad y sin dibujar (010). Se vuelve a activar el modo de dibujo (1) y
se dibuja la lnea vertical hacia abajo que cierra la letra (06C). Por ltimo, se vuelve a desacti-
var el modo de dibujo (2) y se recorren cinco unidades horizontalmente a la derecha (050).
Esto ltimo se hace para situar el siguiente carcter que se escriba, controlando as el espacia-
do entre letras. Se acaba con el 0 de final de definicin.
En cuanto a la primera lnea, se establece que se va a disear una letra "D" mayscula me-
diante su cdigo ASCII en decimal (68) y tras el asterisco. Despus se indica que se dibujar
en trece octetos (13) y se le da un nombre (dmayus) significativo.
Otro ejemplo. La siguiente serie de definiciones corresponde a fragmentos de un archivo de
tipos de letra. En l se utilizan nmeros hexadecimales para los cdigos ASCII. Vemoslo:
; Mi s pr opi as f uent es en Aut oCAD
*0, 4, Mi Fuent e
1, 2, 0, 0

*0A, 7, l f
2, 0AC, 14, 8, ( 9, 10) , 0
*020, 7, spc
2, 060, 14, 8, ( - 6, - 8) , 0
. . .
*030, 34, num0
2, 14, 3, 2, 14, 8, ( - 3, - 12) , 14, 4, 2, 010, 1, 016, 044, 012, 010, 01E, 04C, 01A,
018, 2, 040, 14, 3, 2, 14, 8, ( - 7, - 6) , 14, 4, 2, 0

*031, 18, num1
2, 14, 8, ( - 1, - 6) , 054, 1, 012, 06C, 2, 018, 1, 020, 2, 020, 14, 03A, 0
*032, 23, num2
2, 14, 8, ( - 2, - 6) , 054, 1, 012, 020, 01E, 01C, 01A, 028, 01A, 02C, 040, 2, 020,
14, 8, ( - 4, - 3) , 0
. . .
*041, 21, amayus
2, 14, 8, ( - 2, - 6) , 1, 024, 043, 04D, 02C, 2, 047, 1, 040, 2, 02E, 14, 8, ( - 4, - 3) , 0
*042, 29, bmayus
2, 14, 8, ( - 2, - 6) , 1, 030, 012, 014, 016, 028, 2, 020, 1, 012, 014, 016, 038, 2,
010, 1, 06C, 2, 050, 14, 8, ( - 4, - 3) , 0
. . .

*061, 24, ami nus
2, 14, 04B, 020, 1, 018, 016, 024, 012, 010, 01E, 02C, 01A, 2, 012, 1, 01E, 2, 020,
14, 8, ( - 4, - 3) , 0
*062, 25, bmi nus
2, 14, 8, ( - 2, - 6) , 1, 064, 2, 04C, 1, 022, 010, 01E, 02C, 01A, 018, 026, 2, 02C,
060, 14, 8, ( - 4, - 3) , 0
. . .
Evidentemente faltaran muchos caracteres por definir aqu. La primera definicin es el enca-
bezado del archivo con la informacin general ya explicada. Despus se definen el retorno de
carro con salto de lnea y el espacio. Luego los caracteres 0, 1 y 2. Por ltimo, los caracteres A
y B (maysculas) y los caracteres a y b (minsculas). Como decimos, faltaran todos los de-
ms: resto de nmeros y letras maysculas y minsculas y resto de diversos caracteres
signos de puntuacin, tanto por ciento, dlar....
Si se define un archivo de tipo de letra en el que faltan caracteres, estos no podrn ser mos-
trados en pantalla al teclearlos mediante algn comando de dibujo de textos de AutoCAD 14,
si se tiene elegido dicho tipo de letra en el estilo de texto actual. Adems, en la lnea de co-
mandos aparecer un mensaje de error advirtiendo que no se encuentra la definicin del ca-
rcter en cuestin.
Por ello, es lgico definir todos los caracteres imprimibles en un archivo de tipos de letra.
NOTA: Estdiense, en el ltimo ejemplo, ms a fondo las definiciones de salto de lnea con
retorno de carro y del espaciado. Ntese que lo primero que hacen es desactivar el modo de
dibujo (con el cdigo 2) porque no interesa trazar y, a continuacin, describen el vector de
desplazamiento. Revsese tambin la manera de emplear el cdigo 14 de procesamiento verti-
cal.
La forma de compilar estos archivos es exactamente la misma que la utilizada para los archi-
vos de formas.
CINCO.3.1. Utilizar los tipos de letra creados
As como se compilan de la misma manera que los archivos de formas, los archivos de tipos de
letra no se pueden cargar como se haca con aquellos. La manera de utilizarlos es simplemente
eligiendo el tipo de letra creado (una vez compilado) desde Formato>Estilo de texto..., en el
rea Tipo de letra en la casilla desplegable Nombre del tipo de letra. Desde aqu se establecen
las caractersticas generales de la fuente asociada a un estilo de texto. Luego, nicamente ha-
bremos de escoger dicho estilo para escribir con cualquiera de los comandos de dibujo de tex-
tos (TEXTO, TEXTODI N o TEXTOM, cuyas correspondencias inglesas son TEXT, MTEXT y DTEXT,
respectivamente).
Para que nuestro archivo de texto aparezca en la lista indicada, dicho archivo habr de encon-
trarse en uno de los directorios de soporte del programa. Recordamos que desde
Herr.>Preferencias..., en la pestaa Archivos y en la carpeta Camino de bsqueda de archivos
de soporte, se pueden aadir carpetas o directorios de soporte que el programa reconocer
como tales.
El tipo de letra tambin se puede escoger con el comando ESTI LO (STYLE en ingls) tecleado
en la lnea de comandos aparecer el mismo cuadro expuesto o con su equivalente del
mismo nombre para manejo desde lnea se comandos, - ESTI LO (- STYLE).
CINCO.3.2. Tipos de letra Unicode
Existe un juego de caracteres bsico comunes a todos los idiomas, los cuales se introducen
directamente desde cualquier teclado y de la misma forma. Pero tambin existen otros carac-
teres que son especficos de cada idioma, como letras acentuadas (, , , ...) o con diresis
(, , , ...) u otros. Estos caracteres cambian la funcionalidad de algunas teclas, segn en el
idioma en que se est trabajando.
Internamente, los tipos de letra estndar de AutoCAD 14 corresponden a la asignacin de
caracteres usada por el sistema operativo base. Esto se debe a que los caracteres se almace-
nan directamente en la base de datos con el formato adquirido en el teclado. Se utilizan los
mismos cdigos de carcter para generar los tipos de letra. Esto puede convertirse en un pro-
blema si se emplean, por ejemplo, caracteres acentuados (de 8 bits) para los que existen mu-
chas normas de codificacin.
Las limitaciones de la asignacin de caracteres han obligado a incluir este juego de tipos de
letra para las diferentes pginas de cdigos usadas por AutoCAD. Aunque en esencia estos
tipos de letra son iguales, algunos de sus caracteres se encuentran en posiciones distintas,
segn la pgina de cdigos para la que estn definidos. Si la codificacin de tipo de letra no se
corresponde con la del texto del dibujo, es posible que se dibujen caracteres errneos.
Con los tipos de letra Unicode, las cadenas de texto se convierten a este cdigo antes de dibu-
jarse. Esto garantiza una correcta generacin de textos procedentes de otros idiomas, sin que
aparezcan caracteres extraos o no reconocidos. De esta forma ya no se necesitan tipos de
letra adicionales para otros idiomas o plataformas. Gracias a su amplio juego de caracteres, un
solo tipo de letra Unicode permite utilizar cualquier idioma y plataforma. Para el usuario esta
funcin resulta transparente porque, en caso necesario (debido a las distintas pginas de cdi-
gos), los dibujos se convierten a la pgina de cdigos de sistema de AutoCAD 14 durante el
proceso de carga. Los dibujos siempre se guardan en la pgina de cdigos de sistema de Au-
toCAD.
NOTA: Dado que Unicode no permite usar todos los idiomas asiticos, algunas o todas las ver-
siones asiticas tendrn que utilizar tipos de letra grandes, los cuales sern explicados ms
adelante.
La sintaxis de los archivos de definicin de tipos de letra Unicode es prcticamente idntica a
la de los archivos de definicin de tipos habituales ya explicados. La principal diferencia se en-
cuentra en la sintaxis del encabezamiento de tipo de letra, como lo indica este cdigo:

*UNI FONT, 6, nombre_tipo_letra
arriba, abajo, modos, codificacin, tipo, 0
Los parmetros nombre_tipo_letra, arriba, abajo y modos son iguales a los de los tipos de
letra habituales. Por su lado, codificacin es un valor que indica la codificacin del tipo de
letra segn la tabla siguiente:
Valor - Codificacin


0 - Unicode
1 - Multibyte comprimido 1
2 - Archivo de forma
Y tipo es la informacin de incrustacin de tipo de letra. Este parmetro especifica si el tipo de
letra tiene licencia. Los tipos de letra con licencia no pueden modificarse ni intercambiarse. Los
valores segn la tabla que sigue:
Valor - Informacin de incrustacin


0 - Puede incrustarse
1 - No puede incrustarse
2 - Incrustacin de slo lectura
Otra diferencia adicional entre estas definiciones y las habituales son los nmeros de forma.
Las definiciones con Unicode utilizan siempre nmeros de forma hexadecimales en lugar de
valores decimales. Cada tipo de letra se especifica mediante un cdigo de la forma:
\ U+nnnn
donde nnnn es el nmero de cdigo hexadecimal. Esto no es necesario, pero conveniente para
establecer correspondencia entre los nmeros de forma y los valores de carcter de control
\ U+. Lo que s es necesario es establecer los nmeros de forma en hexadecimal. Las dos lneas
siguientes son equivalentes:
*00031, 18, num1
*\ U+031, 18, num1
CINCO.3.3. Tipos de letra grande y grande ex-
tendido
Algunos idiomas, como el japons, utilizan tipos de letra de texto con miles de caracteres que
no son ASCII. Con AutoCAD 14 es posible crear dibujos con este tipo de texto mediante un
archivo de definicin de forma especial denominado archivo de tipo de letra grande.
Un tipo de letra con tantos caracteres como el mencionado, debe manipularse de manera dife-
rente a nuestros tipos de letra basados en un cdigo ASCII de 256 caracteres (de 0 a 127 b-
sicos y de 128 a 255 extendidos). Adems de utilizar tcnicas de bsqueda de archivos ms
complejas, AutoCAD necesita un mtodo para representar caracteres con cdigos de dos by-
tes como de uno. Ambos aspectos se resuelven colocando cdigos especiales al principio de un
archivo de definicin de tipo de letra, convirtindolo en un archivo de definicin de tipo de letra
grande.
La primera lnea pues de un archivo de este tipo habr de tener la sintaxis siguiente:
*BI GFONT nmero_caracteres, nmero_rangos, i1, f1, i2, f2, . . .
nmero_caracteres es el nmero aproximado de definiciones de caracteres del juego. Si este
nmero se rebasa en aproximadamente ms de un diez por ciento, la velocidad o el tama-
o del archivo pueden verse perjudicados.
Podemos utilizar el resto de la lnea para especificar cdigos de carcter especiales (cdigos de
escape) que indiquen el inicio de un cdigo de dos bytes. Por ejemplo, en los ordenadores ja-
poneses, los caracteres Kanyi comienzan con cdigos hexadecimales en el rango 90 a AF o E0 a
FF. Cuando el sistema operativo detecta uno de estos cdigos, lee el byte siguiente y combina
los dos bytes en un cdigo para un carcter Kanyi.
nmero_rangos indica cuntos rangos contiguos de nmeros se utilizan como cdigos de esca-
pe, y i1, f1, i2, f2, etctera, definen los cdigos inicial y final de cada rango. En consecuen-
cia, el encabezamiento de un archivo de tipo de letra grande japons puede tener el formato
siguiente:
*BI GFONT 4000, 2, 090, 0AF, 0E0, 0FF
Despus de esta lnea, la definicin de tipo de letra es idntica a la de un tipo de letra de texto
de AutoCAD estndar, con la diferencia que los cdigos de carcter (nmeros de forma) pue-
den tener valores de hasta 65535.
Para reducir el tamao de los caracteres Kanyi compuestos, se puede definir un archivo de tipo
de letra grande extendido. Los tipos de letra grandes extendidos utilizan el cdigo de subfor-
ma, seguido inmediatamente de un 0.
La primera lnea de un archivo de tipo de letra grande extendido es idntica a la de un archivo
de tipo de letra grande estndar. ste es el formato del resto de las lneas del archivo:
*0, 5, nombre_letra
altura_carcter, 0, modos, anchura_carcter, 0
. . .
*nmero_forma, bytes_def, nombre_forma
. . .
cdigo, 0, primitiva#, punto_base_X, punto_base_Y, anchura, altura,
. . .
cdigo, 0, primitiva#, punto_base_X, punto_base_Y, anchura, altura,
. . .
terminador
A continuacin se explican todos lo parmetros.
altura_carcter. Se utiliza con la anchura de carcter (anchura_carcter) para indicar el
nmero de unidades que definen los caracteres del tipo de letra.
anchura_carcter. Utilizada con la altura de carcter (altura_carcter) para indicar el
nmero de unidades que definen los caracteres del tipo de letra. Los valores de altu-
ra_carcter y anchura_carcter se usan para escalar las primitivas del tipo de letra. En este
contexto, las primitivas son los puntos, lneas, polgonos o cadenas de caracteres del tipo de
letra orientado geomtricamente en un espacio bidimensional. Un carcter Kanyi est formado
por varias primitivas usadas de forma repetida en diferentes escalas y combinaciones.
modos. Igual que para los tipos de letra de texto estndar.
nmero_forma. Cdigo de carcter.
bytes_def. Tamao en bytes. Son siempre 2 bytes, que constituyen un cdigo hexadecimal
o una combinacin de cdigos decimales y hexadecimales.
nombre_forma. Nombre del carcter.
cdigo. Cdigo especial de descripcin de la forma. Este cdigo siempre se define en 7 para
que pueda usar la funcin de subforma.
primitiva#. Referencia al nmero de subforma. Esta referencia siempre se define como 2.
punto_base_X. Origen X de la primitiva.
punto_base_Y. Origen Y de la primitiva.
anchura. Escala de la anchura de la primitiva.
altura. Escala de la altura de la primitiva.
terminador. Indicador de fin de archivo de la definicin de forma; siempre es 0.
Para llegar al factor de escala, AutoCAD reduce la escala de la primitiva a una unidad cuadra-
da y despus la multiplica por la altura y la anchura para obtener la forma del carcter. Los
cdigos de carcter (nmeros de forma) del archivo de definicin de formas de tipo de letra
grande pueden tener valores hasta 65535. En la tabla siguiente se describen los campos del
archivo de tipo de letra grande extendido:
Variable Valor Tamao en bytes Descripcin
nmero_forma
XXXX 2 bytes Cdigo de caracteres
cdigo 7
2 bytes Definicin de tipo de letra extendido
primitiva#
XXXX 2 bytes Referencia al nmero de subforma
punto_base_X
1 byte Origen X de la primitiva
punto_base_Y
1 byte Origen Y de la primitiva
anchura
1 byte Escala de la anchura de la primitiva
altura
1 byte Escala de la altura. de la primitiva
terminador 0
1 byte Final de definicin de forma
NOTA: No todos los tipos de letra se definen en matrices cuadradas, algunos se definen en
matrices rectangulares.
A continuacin se muestra un ejemplo de un archivo de definicin de forma para un tipo de
letra grande extendido.
*BI GFONT 50, 1, 080, 09e
*0, 5, Ti po de l et r a ext endi do
15, 0, 2, 15, 0
*08D91, 31, si n especi f i car
2, 0e, 8, - 7, - 15, 7, 0, 08cf b, 0, 0, 16, 16, 7, 0, 08bca, 2, 3, 12, 9, 2, 8, 18, 0, 2, 0e, 8,
- 11, - 3, 0
*08CD8, 31, si n especi f i car
2, 0e, 8, - 7, - 15, 7, 0, 08be0, 0, 0, 8, 16, 7, 0, 08cc3, 8, 0, 8, 16, 2, 8, 18, 0, 2, 0e, 8,
- 11, - 3, 0
*08ADF, 31, si n especi f i car
2, 0e, 8, - 7, - 15, 7, 0, 089a4, 0, 0, 8, 16, 7, 0, 08cb3, 8, 0, 8, 16, 2, 8, 18, 0, 2, 0e, 8,
- 11, - 3, 0
*08CE8, 39, si n especi f i car
2, 0e, 8, - 7, - 15, 7, 0, 089a4, 0, 1, 5, 14, 7, 0, 08cc3, 5, 2, 5, 14, 7, 0, 08c8e, 9, 0, 7,
16, 2, 8, 18, 0, 2, 0e, 8, - 11, - 3, 0
*089A4, 39, pr i mi t i va
2, 0e, 8, - 7, - 15, 2, 8, 1, 14, 1, 0c0, 2, 8, - 11, - 6, 1, 0a0, 2, 8, - 12, - 7, 1, 0e0,
2, 8, 7, 13, 1, 0dc, 2, 8, 11, - 1, 2, 0e, 8, - 11, - 3, 0
*08BCA, 41, pr i mi t i va
2, 0e, 8, - 7, - 15, 2, 8, 1, 14, 1, 0c0, 2, 8, - 11, - 6, 1, 0a0, 2, 8, - 12, - 8, 1, 0e0,
2, 0e5, 1, 0ec, 2, 063, 1, 8, 2, - 3, 2, 06f , 2, 0e, 8, - 11, - 3, 0
*08BE0, 81, pr i mi t i va
2, 0e, 8, - 7, - 15, 2, 8, 3, 9, 1, 080, 2, 8, - 10, - 4, 1, 0c0, 2, 8, - 13, - 5, 1, 0e0, 2, 8,
- 7, 9, 1, 09c, 2, 8, - 1, 14, 1, 8, - 6, - 5, 2, 8, 8, 5, 1, 8, 6, - 5, 2, 8, - 11, - 6, 1, 8, 1,
- 3, 2, 8, 7, 3, 1, 8, - 1, - 3, 2, 8, - 3, 15, 1, 01a, 2, 012, 1, 01e, 2, 8, 10, - 14, 2, 0e, 8,
- 11, - 3, 0
*08C8E, 44, pr i mi t i va
2, 0e, 8, - 7, - 15, 2, 8, 3, 15, 1, 090, 0f c, 038, 2, 8, - 6, 11, 1, 090, 2, 8, - 9, - 5, 1,
090, 2, 096, 1, 0ac, 8, - 1, - 3, 01a, 01a, 2, 8, 18, 0, 2, 0e, 8, - 11, - 3, 0
*08CB3, 61, pr i mi t i va
2, 0e, 8, - 7, - 15, 2, 042, 1, 02b, 02a, 018, 2, 0d0, 1, 012, 034, 2, 069, 1, 01e, 040, 2, 8,
- 8, 6, 1, 02b, 2, 8, 4, 5, 1, 08c, 2, 8, - 3, 8, 1, 03c, 2, 8, - 5, 3, 1, 0e0, 2, 8, - 12, 5, 1,
0a0, 2, 8, 6, - 14, 2, 0e, 8, - 11, - 3, 0
*08CC3, 34, pr i mi t i va
2, 0e, 8, - 7, - 15, 2, 0c1, 1, 06c, 0a8, 064, 0a0, 2, 8, - 5, 9, 1, 09c, 2, 8, - 7, 5, 1, 0e0, 2, 8, 4,
- 11, 2, 0e, 8, - 11, - 3, 0
*08CFB, 22, pr i mi t i va
2, 0e, 8, - 7, - 15, 2, 0d2, 1, 0cc, 0c8, 0c4, 0c0, 2, 8, 5, - 13, 2, 0e, 8, - 11, - 3, 0
NOTA: Ntese que las letras de los nmeros en hexadecimal pueden escribirse en mayscula,
como hacamos antes, o en minscula, como en este caso.
En algunas disciplinas de esbozo, muchos smbolos especiales pueden aparecer en cadenas de
texto. Es posible extender los tipos de letra de texto estndar de AutoCAD para incluir dichos
smbolos, si bien esta operacin de extensin tiene algunos lmites.
Cada archivo de tipo de letra puede contener 255 formas como mximo. El juego de caracteres
estndar utiliza casi la mitad de los nmeros de forma disponibles. Slo es posible usar los
cdigos 1-9, 11-31 y 130-255. Para utilizar varios tipos de letra de texto, es necesario duplicar
las definiciones de smbolo de cada tipo de letra. Para usar un smbolo especial, es necesario
indicar %%nnn, donde nnn representa el nmero de forma del smbolo.
Con el tipo de letra grande se evitan estos problemas. Podemos seleccionar uno o varios carac-
teres poco usados como la tilde (~) o la barra vertical (| ) como cdigos de escape y utilizar
el carcter siguiente para escoger el smbolo especial apropiado. Por ejemplo, se puede em-
plear el siguiente archivo de tipo de letra grande para dibujar letras griegas indicando una ba-
rra vertical (cdigo ASCII 124) seguida de la letra latina equivalente. Dado que el primer byte
de cada carcter es 124, los cdigos de carcter se incrementan en 124 256, o lo que es lo
mismo, en 31744. Vemoslo.
*BI GFONT 60, 1, 124, 124
*0, 4, gr eek
encima, debajo, modos, 0
*31809, n, amy
. . . def i ni ci n Al f a en mayscul as, act i vada con " | A"
*31810, n, bmy
. . . def i ni ci n Bet a en mayscul as, act i vada con " | B"
*31841, n, amn
. . . def i ni ci n Al f a en mi nscul as, act i vada con " | a"
*31842, n, bmn
. . . def i ni ci n Bet a en mi nscul as, act i vada con " | b"
*31868, n, bar r av
. . . def i ni ci n de bar r a ver t i cal , act i vada con " | | "
. . .
CINCO.3.3.1. Utilizar estos tipos de letra gran-
de
Si deseamos utilizar un tipo de letra grande para dibujar texto, debemos definir un estilo de
texto y especificar el nombre de un archivo de tipo de letra que admita letra grande. Esto lo
podemos comprobar cuando en el cuadro Estilo de texto est disponible la casilla Usar tipos de
letra grandes. Si as es, la activaremos y elegiremos el tipo de letra grande en la lista desple-
gable Tipo de letra grande:.
Si se hace desde la lnea de comandos, con las rdenes de AutoCAD 14 expuestas anterior-
mente, debe indicarse el tipo de letra grande separado con una coma del tipo normal, as:
t xt , gr eek
AutoCAD supone que el primer nombre corresponde al tipo de letra estndar y que el segundo
es del tipo de letra grande. Si slo se escribe un nombre, AutoCAD supone que se trata del
tipo de letra estndar y suprime cualquier tipo de letra grande asociado.
Si utilizamos comas iniciales o finales al especificar los nombres de archivo de tipo de letra,
podemos cambiar un tipo de letra y dejar los dems intactos, como se indica en la tabla si-
guiente.
Entrada -- Resultado

estndar, grande: Se especifica el tipo de letra estndar y grande.
estndar, : Slo se especifica el tipo de letra estndar (el grande permanece intacto).
, grande: Slo se especifica el tipo de letra grande (el estndar permanece intacto).
Est ndar : Slo se especifica el tipo de letra estndar (si es necesario se suprime el grande).
I NTRO (respuesta nula): Ningn cambio.
Cuando utiliza el comando - ESTI LO (- STYLE), con su opcin ?, para presentar los estilos o re-
visar uno existente, AutoCAD muestra el archivo de tipo de letra estndar, una coma y el ar-
chivo de tipo de letra grande. Si el estilo slo tiene un archivo de tipo de letra grande, aparece
con una coma inicial, como en , gr eek.
AutoCAD primero busca los caracteres de una cadena de texto en el archivo de tipo de letra
grande. Si no los localiza, los busca en el archivo de tipo de letra estndar.
CINCO.3.4. Soporte PostScript
Sabemos que AutoCAD 14 contiene funciones de soporte PostScript. Estas funciones, adems
de muchas otras cosas, permite utilizar tipos de letra que utilicen la tecnologa PostScript.
El archivo de soporte ACAD. PSF, en el directorio \ SUPPORT\ de AutoCAD 14, es un fichero AS-
CII que contiene las asignaciones de archivos de forma a tipos de letra PostScript y las defini-
ciones y procedimientos de codificacin para dichos tipos de letra, entre otras. Los archivos de
definiciones de tipos de letra PostScript tiene la extensin . PFB y hay que compilarlos con el
mismo comando que los archivos de formas o tipos de letra estndar.
Por otro lado decir que el archivo de mapa de tipos de letra de AutoCAD 14 (FONTMAP. PS) es
un catlogo, o mapa, de todos los tipos de letra reconocidos por el intrprete PostScript de
AutoCAD 14 (ACADPS. ARX). Cuando se ejecuta CARGAPS, este archivo ASCII asigna los nom-
bres de tipo de letra de idioma PostScript a los nombres de los archivos de definicin de tipo
de letra (. PFB) correspondientes. Los tipos de letra que han de cargarse automticamente al
especificarlos deben declararse en FONTMAP. PS.
Cuando se importa un archivo . EPS (PostScript Encapsulado) con CARGAPS, ACADPS. ARX usa
FONTMAP. PS para localizar los archivos . PFB correspondientes a los tipos de letra indicados en
el archivo . EPS. Si ACADPS. ARX encuentra un archivo . PFB en FONTMAP. PS pero no en el siste-
ma, la aplicacin muestra un mensaje de advertencia y utiliza un tipo de letra por defecto. Por
lo que es posible declarar tipos de letra no instalados sin problema alguno.
El archivo FONTMAP. PS suministrado hace referencia a un juego de tipos de letra Type 1 pro-
porcionado con AutoCAD, as como a los tipos de letra distribuidos con Adobe Type Manager
for Windows, Adobe Plus Pack y Adobe Font Pack 1. Si se han adquirido otros tipos de letra, se
puede editar el archivo de mapa de tipos de letra y declararlos de la misma manera que los
existentes.
Para obtener ms informacin, vase el contenido del archivo FONTMAP. PS, incluidos los co-
mentarios que explican la sustitucin de tipos de letra.
CINCO.4. EJEMPLOS PRCTICOS DE FORMAS Y
TIPOS
DE LETRA
CINCO.4.1. Cuadrado con diagonales
*1, 9, CUADI A2
014, 010, 01C, 5, 018, 012, 6, 016, 0
CINCO.4.2. Subforma anterior y tringulos
*2, 11, TRI CUA
5, 7, 1, 3, 2, 012, 01E, 6, 01E, 012, 0
CINCO.4.3. Nmero ocho simple
*00038, 16, OCHO
13, ( 0, 5, 127) , ( 0, 5, - 127) , ( 0, - 5, - 127) , ( 0, - 5, 127) , ( 0, 0) , 0
CINCO.4.4. Letra G mayscula romnica
*00047, 102, gmayus
2, 14, 3, 2, 14, 8, ( - 23, - 42) , 14, 4, 2, 14, 5, 8, ( 17, 18) , 1, 8, ( 1, - 3) , 064,
8, ( - 1, - 3) , 026, 8, ( - 3, 1) , 028, 8, ( - 3, - 1) , 02A, 02B, 8, ( - 1, - 3) , 05C,
8, ( 1, - 3) , 02D, 02E, 8, ( 3, - 1) , 020, 8, ( 3, 1) , 022, 2, 8, ( - 7, 18) , 1, 029, 02A,
02B, 8, ( - 1, - 3) , 05C, 8, ( 1, - 3) , 02D, 02E, 02F, 2, 8, ( 7, 8) , 1, 08C, 2, 8, ( 1, 8) ,
1, 08C, 2, 085, 1, 070, 2, 8, ( 2, - 8) , 14, 6, 14, 3, 2, 14, 8, ( 23, - 18) , 14, 4, 2, 0
CINCO.4.5. Letra n minscula gtica
*0006E, 80, nmi nus
2, 14, 8, ( - 9, - 14) , 14, 5, 8, ( 2, 12) , 1, 010, 01E, 08C, 029, 010, 02F, 01E, 2, 8,
( - 2, 13) , 1, 01E, 0AC, 02F, 2, 8, ( - 5, 11) , 1, 022, 02E, 09C, 02F, 02A, 2, 0B4, 1,
8, ( 3, 1) , 021, 012, 01E, 02F, 010, 029, 08C, 01E, 010, 2, 8, ( - 5, 11) , 1, 02F,
0AC, 01E, 2, 8, ( - 5, 11) , 1, 010, 02F, 09C, 02E, 022, 2, 8, ( 2, - 2) , 14, 6,
14, 8, ( 9, - 9) , 0
CINCO.FIN. EJERCICIOS PROPUESTOS
I. Crear una forma que represente un arco y una flecha.
II. Crear una forma con el smbolo base para mecanizados.
III. Crese una forma que represente un jaln con banderola, apta para situar estaciones
topogrficas.
IV. Disear una forma que represente un helipuerto.
V. Disear una forma que represente un vrtice geodsico.
VI. Crear una forma con el smbolo elctrico para una resistencia.
VII. Crear una letra f minscula sencilla.
VIII. Disese una letra Q mayscula sencilla.
IX. Crese una letra K mayscula itlica.
X. Crear un letra alfa griega minscula.
XI. Disear un archivo con mltiples formas y una fuente de tipo de letra nueva completa
con todos los caracteres y signos necesarios para la acotacin normalizada de un deli-
neante mecnico. Inclyanse en ambos archivos smbolos de tolerancia, smbolos de
mecanizado, smbolos de acotacin, flechas de cota y letras normalizadas.

EJERCICIOS RESUELTOS DEL MDULO CINCO
EJERCICIO I
*1, 17, ARCFLE
12, ( 0, 4, 127) , 02C, 05, 02C, 06, 05, 028, 06, 040, 05, 016, 06, 01A, 0
EJERCICIO II
*2, 6, MECA
05, 015, 06, 013, 020, 0
EJERCICIO III
*3, 4, J AL
034, 01F, 019, 0
EJERCICIO IV
*4, 20, HELI
054, 010, 02C, 020, 024, 010, 05C, 018, 024, 028, 02C, 018, 02, 01A, 01, 074, 060, 07C, 068, 0
EJERCICIO V
*5, 34, GEO
05, 018, 06, 05, 014, 06, 05, 010, 06, 01C, 02, 01C, 01, 05, 12, ( 0, 4, 127) , 06, 05, 12,
( 0, 4, - 127) , 06, 02, 01C, 01, 038, 064, 060, 06C, 038, 0
EJERCICIO VI
*6, 15, RESI S
03, 2, 010, 04, 2, 013, 02D, 023, 02D, 023, 01D, 03, 2, 010, 0
EJERCICIO VII
*00066, 22, f mi nus
2, 14, 8, ( - 2, - 6) , 034, 1, 030, 2, 023, 1, 016, 018, 01A, 05C, 2, 050, 14, 8, ( - 4, - 3) , 0
EJERCICIO VIII
*00051, 25, qmayus
2, 14, 8, ( - 2, - 6) , 022, 1, 01E, 01A, 018, 016, 044, 012, 020, 01E, 03C, 01A, 01E, 2, 020,
14, 8, ( - 4, - 3) , 0
EJERCICIO IX
*0004B, 83, kmayi t
2, 14, 3, 2, 14, 8, ( - 25, - 42) , 14, 4, 2, 8, ( 9, 21) , 1, 8, ( - 6, - 21) , 2, 8, ( 7, 21) ,
1, 8, ( - 6, - 21) , 2, 8, ( 19, 21) , 1, 8, ( - 17, - 13) , 2, 8, ( 7, 4) , 1, 8, ( 4, - 12) , 2,
8, ( - 5, 12) , 1, 8, ( 4, - 12) , 2, 8, ( - 10, 21) , 1, 070, 2, 060, 1, 060, 2,
8, ( - 25, - 21) , 1, 070, 2, 060, 1, 060, 2, 040, 14, 3, 2, 14, 8, ( - 21, - 21) , 14, 4, 2,
0

EJERCICIO X
*97, 93, al f mi n
2, 14, 3, 2, 14, 8, - 23, - 28, 14, 4, 2, 14, 5, 8, 10, 14, 1, 8, - 3, - 1, 42, 43, 8, - 1, - 3, 60, 45,
8, 3, - 1, 32, 33, 50, 8, 2, 3, 67, 8, 1, 3, 2, 152, 1, 41, 42, 43, 8, - 1, - 3, 60, 45, 47, 2, 8, 3,
14, 1, 32, 47, 45, 8, 2, - 8, 45, 30, 2, 229, 1, 30, 45, 8, 2, - 8, 45, 47, 16, 2, 8, 3, 0, 14, 6, 14,
3, 2, 14, 8, 23, - 18, 14, 4, 2, 0
EJERCICIO XI
(Ejercicio completo para resolver por tcnicos y/o especialistas).

Autor: J onathan Prstamo Rodr-
guez
Para: La Web del Programador

MDULO SEIS
Creacin de archivos de ayuda
SEIS.1. INTRODUCCIN A LOS ARCHIVOS DE
AYUDA
Imaginemos que, una vez aprendido todo lo necesario para crear una aplicacin vertical para
AutoCAD 14, con una base AutoLISP/DCL o VBA y unos archivos de definicin de mens, de
tipos de lnea, letras, formas y dems que la acompaen, necesitamos informar al usuario de
cules son los entresijos del conjunto que presentamos. Los tipos de comandos creados y su
funcionamiento, el manejo de ciertos aspectos complejos etctera, ser necesario incluirlos en
un archivo de ayuda para que el usuario de nuestro software sepa cmo manejarse con l.
Todos los programas, todas la aplicaciones, todo el software en general que se precie posee
ficheros de ayuda que explican paso a paso unos, o ms someramente otros, el funcionamien-
to del programa en s. En este MDULO SEI S vamos a aprender a realizar archivos de ayuda
para AutoCAD que acompaarn a nuestros diseos de aplicaciones o personalizaciones. Co-
mentaremos algn que otro mtodo, aunque a fondo nicamente veremos el propio de Auto-
CAD para creacin de archivos de ayuda especficos del programa.
SEIS.2. LA AYUDA DE AutoCAD 14. FORMATO
.AHP
Los archivos de ayuda propios de AutoCAD se escriben en archivos ASCII que deben tener la
extensin . AHP. Toda la informacin contenida en un archivo . AHP ha de ser organizada por
temas. Cada tema incluir una serie de lneas de texto denominadas directrices que, a su vez,
poseen un identificador de cdigo y opcionalmente un ttulo y/o una serie de palabras clave. A
continuacin se exponen todos lo cdigos posibles de forma conjunta y, despus, iremos co-
mentado cada uno mientras revisamos un ejemplo prctico. Veamos la tabla de cdigos:
Cd. de directriz Funcin Aparece en...
\ #
Identificador de
tema
Se utiliza internamente (el usuario no puede verlo)
\ $
Ttulo Lista del historial y bsqueda de temas
\ K
Palabras clave Lista de bsqueda
\ E
Final de archivo Final de archivo de ayuda (el el usuario no puede verlo)
\ espacio_blanco
Comentario Comentarios internos (se ignoran durante la visualiza-
cin de la ayuda en pantalla)
Vamos a ver un ejemplo para esclarecer el tema. Imaginemos que queremos crear un archivo
de ayuda para explicar una serie de comandos nuevos que hemos programado en AutoLISP.
Los comandos en cuestin sern HLI CE, TUERCA y TORNI LLO, cada uno dibuja el objeto que
describe su nombre, solicitando al usuario los datos necesarios.
Lo primero que haremos es crear un ndice en el que se describirn todos los temas incluidos
en la ayuda. Para ello, y en un editor ASCII escribiremos las siguientes lneas:
\ #i ndex
\ $ NDI CE DE CONTENI DOS
\ K ndi ce
1. Nuevo comando HLI CE. \
2. Nuevo comando TUERCA. \
3. Nuevo comando TORNI LLO. \
\ E
Vamos a explicarlas ahora. Lo primero que nos encontramos es el identificador interno del te-
ma. Tras el cdigo \ #, la palabra i ndex (elegida por nosotros) identifica a lo que le sigue has-
ta encontrar otro identificador similar. Estos identificadores sern utilizados por AutoCAD para
encontrar los diferentes temas, as como tambin los utilizaremos nosotros, como veremos
ms adelante. Son obligatorios antes de cada tema y han de ser nombres nicos no se pue-
den repetir en un mismo archivo de ayuda, evidentemente y sin espacios.
\ $ NDI CE DE CONTENI DOS ser la cadena que aparecer a la hora de buscar un tema, como
explicaremos a continuacin. Parecido ocurre con la palabra clave ndi ce, despus del cdigo
\ K.
A continuacin escribimos el texto del tema en s. Un carcter contrabarra (\ ) especifica la
unin de lneas de distintos prrafos. Si al final de cada lnea pulsamos simplemente I NTRO, en
un archivo . AHP esto se interpreta como cambio de prrafo, es decir, se deja una lnea en
blanco intermedia. Si no queremos que esto suceda habremos de introducir al final de la lnea
directriz dicho carcter de contrabarra.
El lector de la ayuda de AutoCAD est diseado para trabajar con texto en formato DOS o
UNIX EOL. Es decir, las lneas de texto del archivo fuente de ayuda deben concluir con una
secuencia de retorno de carro. No se garantiza un correcto funcionamiento de archivos de
ayuda escritos con otros protocolos EOL. El archivo fuente puede escribirse en ASCII de 7 u 8
bits, lo que significa que es fcilmente localizable. El lector de la ayuda de AutoCAD formatea
el texto en el espacio disponible dentro del cuadro de lista de desplazamiento e inserta una
lnea en blanco entre prrafos. La ayuda de AutoCAD utiliza I NTRO (secuencia CRLF) como
separador de prrafos.
Por ltimo introducimos el cdigo \ E de fin de archivo de ayuda. El archivo an no est termi-
nado, pero si queremos probarlo que es lo que vamos a hacer deberemos introducir este
cdigo para indicar el final de fichero y no producir un error.
NOTA: Ntese como los identificadores, los ttulos y dems han de ir inmediatamente despus
de los cdigos, sin espacios en blanco. Por otro lado, decir que se pueden introducir espacios
interlineales para aclarar el archivo en su conjunto, aunque los espaciados reales entre prra-
fos vendrn definidos por la inclusin o no de los caracteres contrabarra explicados. Al final del
archivo (tras \ E) no es necesario introducir un I NTRO para que funcione correctamente, como
ocurra en otros archivos ASCII de definicin de AutoCAD 14.
NOTA: Los cdigos en archivos . AHP han de escribirse obligatoriamente en maysculas.
SEIS.2.1. Visualizacin del archivo en AutoCAD
Llegados a este punto conviene explicar la manera de cargar nuestro incipiente archivo de
ayuda desde AutoCAD. Como hemos visto, estos archivos son simples ficheros de texto AS-
CII, sin embargo para poder ser utilizados habrn de ser manejados desde una aplicacin Au-
toLISP (o ARX). Por ello, mencionaremos simplemente aqu la funcin AutoLISP que nos permi-
te visualizar estos archivos de ayuda, dejando su estudio en profundidad para el MDULO de
programacin en AutoLISP.
La funcin en cuestin es HELP, y habr de ser introducida en la lnea de comandos de Auto-
CAD 14 en el formato adecuado, es decir entre parntesis. A esta funcin hay que proporcio-
narle como argumento el nombre del archivo . AHP de ayuda entre comillas (por ser una cade-
na de texto) y, opcionalmente y si fuera necesario, la ruta de acceso. As, una vez guardado el
archivo con la extensin . AHP, lo cargaremos introduciendo lo siguiente en lnea de comandos
(suponemos que se llama PRUEBA. AHP):
( HELP " pr ueba. ahp" )
La extensin . AHP no es necesaria, aunque el autor de este curso siempre recomienda incluir
todas la extensiones an no siendo obligatorio, y todo ello por claridad.
Pero cuidado, ya que si tenemos que introducir una ruta de acceso o camino, la manera de
hacerlo ha de ser en formato AutoLISP, esto es, escribiendo barras normales (/ ) en lugar de
contrabarras (\ ) para separar directorios o carpetas. Por ejemplo:
( HELP " c: / aut ocad/ ayuda/ pr ueba. ahp" )
Tambin pueden ser utilizadas dos contrabarras seguidas (\ \ ); la primera representa el carc-
ter de introduccin de cdigos de control en AutoLISP y la segunda el propio carcter contra-
barra en s. Por ejemplo:
( HELP " c: \ \ aut ocad\ \ ayuda\ \ pr ueba. ahp" )
De cualquiera de las formas sera vlida la entrada.
NOTA: Como ya hemos de saber, para que un archivo no requiera ruta de acceso ha de encon-
trarse en uno de los directorios de soporte de AutoCAD 14 definidos bajo
Herr>Preferencias....
NOTA: Esta funcin de AutoLISP para llamar a archivos de ayuda puede ser incluida como ma-
croinstruccin en opciones de men o en botones de barras de herramientas, por ejemplo. De
esta manera el usuario no habr de escribir la lnea explicada para recurrir a la ayuda de un
programa nuevo. Como veremos ms adelante, puede ser ms conveniente en programas pe-
queos que manejen una interfaz de cuadro de dilogo en DCL o VBA, incluir la funcin de
ayuda en un propio botn del cuadro, por ejemplo.
Tras cargar un archivo . AHP en AutoCAD, en el mismo directorio donde se encuentra dicho
archivo se crea otro con el mismo nombre y de extensin . HDX. Este archivo es el denominado
de ndice de ayuda y es creado para gestionar con mayor rapidez la ayuda. Siempre se reco-
mienda eliminar este archivo al introducir cambios en el . AHP para garantizar su actualizacin,
sin embargo esto no es en absoluto necesario y puede llegar a resultar algo pesado. An as, al
terminar por completo la edicin de un fichero . AHP de ayuda de AutoCAD, se puede borrar y
volver a cargar la ayuda para conseguir un . HDX final nuevo y actualizado.
Una vez realizado esto, y si no hay ningn problema, debera aparecer en pantalla la ventana
de ayuda (Ayuda de AutoCAD) con nuestro ndice creado. En la parte superior de esta ventana
podemos distinguir cuatro botones principales. El botn ndice siempre nos llevar al primer
tema definido en el archivo . AHP (bajo el primer identificador \ #). Es por ello que suele ser
prctica conveniente establecer un primer tema como ndice de los dems.
El botn Buscar, por su lado, abre una segunda ventana en la que aparecen varios campos. La
utilizacin de este cuadro es bien sencilla. Deberemos escoger cualquier palabra del cuadro de
lista superior y pulsar el botn Mostrar temas. Las palabras que aparecern en este cuadro de
lista sern las indicadas como palabras clave tras los cdigos \ K en el archivo . AHP de defini-
cin. Una vez pulsado el botn aparecern en el siguiente cuadro de lista (el inferior) todos los
temas relacionados con la palabra clave en cuestin. Estos temas son los especificados tras los
cdigos \ $. Para visualizar un tema deberemos escogerlo de este segundo cuadro de lista y
pulsar el botn Ir a. Tambin podemos introducir una cadena en la casilla de edicin superior.
Por lo que se ha dicho se comprende que es posible introducir la misma palabra clave en dife-
rentes temas de archivo. Este es el tpico funcionamiento de un archivo de ayuda Windows:
tras introducir una palabra clave (\ K) se nos muestran todos los temas (\ $) con los que est
relacionada, es decir, donde est especificada.
El botn Atrs solamente estar disponible en el caso de que se haya visitado algn tema ya.
Si as es, este botn nos llevar al tema anterior visualizado.
Y el botn Historial despliega otro cuadro de dilogo en el que se muestran todos los temas
visitados y el orden en que fueron visionados. As podemos elegir cualquiera de los vistos ante-
riormente y volver a l pulsado el botn Ir a.
En la parte central de la ventana de ayuda se muestra el texto correspondiente al tema en
cuestin en el que nos hallamos. El cuadro general se cierra con el botn Aceptar.
NOTA: Cuando se estudie la funcin HELP de AutoLISP a fondo en el MDULO correspondien-
te, veremos otras caractersticas, como hacer que la ayuda arranque directamente en la ven-
tana de bsqueda, por ejemplo.
SEIS.2.2. Introduciendo ms temas
Por ahora slo hemos escrito un ndice en nuestro archivo de ayuda. Vamos ahora pues a in-
troducir los diferentes temas que proporcionarn la ayuda real. El tema para el primer nuevo
comando podra ser el siguiente:
\ #hel i ce
\ $Nuevo comando HLI CE
\ Khl i ce; comandos nuevos; di buj o; paso; al t ur a; pr eci si n; vuel t as; cent r o; r adi o
COMANDO HLI CE\
- - - - - - - - - - - - - -
Est e comando di buj a una cur va hel i coi dal en 3D medi ant e una\
3DPOL. Par a el l o se si r ve de un cuadr o de di l ogo que l e\
sol i ci t ar l os si gui ent es dat os:
* Radi o i ni ci al \
* Radi o f i nal ( si es di f er ent e al i ni ci al ) \
* Al t ur a o paso\
* Nmer o de vuel t as\
* Pr eci si n de cada vuel t a en punt os
* Cent r o de l a hl i ce
Una vez i nt r oduci dos l os dat os, pul se el bot n " Acept ar " \
y l a cur va ser di buj ada.
Si se pr oduce al gn er r or en l a i nt r oducci n de dat os, \
el pr ogr ama pr esent ar un mensaj e de er r or en el pr opi o\
cuadr o de di l ogo, y no se podr cont i nuar hast a que\
se subsane.
Aqu podemos apreciar la manera de separar entre s las diferentes palabras clave, esto es con
un carcter punto y coma (; ). Las lneas se han sangrado con tabulaciones que, posteriormen-
te sern de cuatro caracteres de longitud en la ventana de ayuda.
Si ahora nos fijamos en la ventana de bsqueda, podremos observar todas las nuevas palabras
clave introducidas ordenadas por orden alfabtico. Al elegir una de ellas aparecer en la si-
guiente lista el tema asociado (al igual que en la lista del historial de temas visitados).
NOTA: El recurso de la contrabarra no se utiliza como se ha indicado aqu. Bajo el siguiente
epgrafe de este MDULO se explicar su uso real.
Veamos la ayuda al siguiente comando nuevo creado:

\ #t uer ca
\ $Nuevo comando TUERCA
\ Kt uer ca; comandos nuevos; di buj o; r adi o; cent r o
COMANDO TUERCA\
- - - - - - - - - - - - - -
Est e comando di buj a una t uer ca en pl ant a. \
Par a el l o se si r ve de un cuadr o de di l ogo que l e\
sol i ci t ar l os si gui ent es dat os:
\ +++ Ahor a se muest r an l os dat os que se pr egunt ar n +++
* Radi o i nt er i or \
* Radi o ext er i or \
* Cent r o de l a t uer ca
Una vez i nt r oduci dos l os dat os, pul se el bot n " Acept ar " \
y l a t uer ca ser di buj ada.
\ +++ Ahor a se expl i ca el t r at ami ent o de er r or es del cuadr o +++
Si se pr oduce al gn er r or en l a i nt r oducci n de dat os, \
el pr ogr ama pr esent ar un mensaj e de er r or en el pr opi o\
cuadr o de di l ogo, y no se podr cont i nuar hast a que\
se subsane.
Fijmonos ahora en la lista de bsqueda al pulsar Mostrar temas tras elegir, por ejemplo, la
clave comando nuevo o la clave r adi o. Como ambas claves se encuentran definidas en ambos
temas escritos hasta ahora, en la lista de estos aparecern los dos. Tras elegir uno de ellos
pulsaremos Ir a para visualizarlo.
Observando el cdigo del archivo podemos ver tambin que se han introducido dos comenta-
rios aclaratorios. Como hemos dicho estos comentarios hay que precederlos del carcter con-
trabarra y de un espacio blanco (\ ) como mnimo. Los comentarios en un archivo . AHP pue-
den colocarse en cualquier punto, a excepcin de inmediatamente detrs de la directriz que
contenga el cdigo de claves \ K, es decir, justo donde habra de comenzar el texto de la ayu-
da. Si as se hace, el comentario no ser ignorado y aparecer en pantalla.
Como ltimo tema del archivo de ayuda de nuestro ejemplo, introduciremos el correspondiente
al nuevo comando TORNI LLO. As, al final, el archivo . AHP completo sera el que se muestra a
continuacin:
\ #i ndex
\ $ NDI CE DE CONTENI DOS
\ K ndi ce
1. Nuevo comando HLI CE. \
2. Nuevo comando TUERCA. \
3. Nuevo comando TORNI LLO. \

\ #hel i ce
\ $Nuevo comando HLI CE
\ Khl i ce; comandos nuevos; di buj o; paso; al t ur a; pr eci si n; vuel t as; cent r o; r adi o
COMANDO HLI CE\
- - - - - - - - - - - - - -
Est e comando di buj a una cur va hel i coi dal en 3D medi ant e una\
3DPOL. Par a el l o se si r ve de un cuadr o de di l ogo que l e\
sol i ci t ar l os si gui ent es dat os:
* Radi o i ni ci al \
* Radi o f i nal ( si es di f er ent e al i ni ci al ) \
* Al t ur a o paso\
* Nmer o de vuel t as\
* Pr eci si n de cada vuel t a en punt os
* Cent r o de l a hl i ce
Una vez i nt r oduci dos l os dat os, pul se el bot n " Acept ar " \
y l a cur va ser di buj ada.
Si se pr oduce al gn er r or en l a i nt r oducci n de dat os, \
el pr ogr ama pr esent ar un mensaj e de er r or en el pr opi o\
cuadr o de di l ogo, y no se podr cont i nuar hast a que\
se subsane.

\ #t uer ca
\ $Nuevo comando TUERCA
\ Kt uer ca; comandos nuevos; di buj o; r adi o; cent r o
COMANDO TUERCA\
- - - - - - - - - - - - - -
Est e comando di buj a una t uer ca en pl ant a. \
Par a el l o se si r ve de un cuadr o de di l ogo que l e\
sol i ci t ar l os si gui ent es dat os:
\ +++ Ahor a se muest r an l os dat os que se pr egunt an +++
* Radi o i nt er i or \
* Radi o ext er i or \
* Cent r o de l a t uer ca
Una vez i nt r oduci dos l os dat os, pul se el bot n " Acept ar " \
y l a t uer ca ser di buj ada.
\ +++ Ahor a se expl i ca el t r at ami ent o de er r or es del cuadr o +++
Si se pr oduce al gn er r or en l a i nt r oducci n de dat os, \
el pr ogr ama pr esent ar un mensaj e de er r or en el pr opi o\
cuadr o de di l ogo, y no se podr cont i nuar hast a que\
se subsane.
\ #t or ni l l o
\ $Nuevo comando TORNI LLO
\ Kt or ni l l o; comandos nuevos; di buj o; r adi o; cent r o; vst ago; l ongi t ud
COMANDO TORNI LLO\
- - - - - - - - - - - - - - - -
Est e comando di buj a un t or ni l l o en al zado. \
Par a el l o se si r ve de un cuadr o de di l ogo que l e\
sol i ci t ar l os si gui ent es dat os:
* Mt r i ca\
* Longi t ud del vst ago\
* Ti po
Una vez i nt r oduci dos l os dat os, pul se el bot n " Acept ar " \
y el t or ni l l o ser di buj ado.
Si se pr oduce al gn er r or en l a i nt r oducci n de dat os, \
el pr ogr ama pr esent ar un mensaj e de er r or en el pr opi o\
cuadr o de di l ogo, y no se podr cont i nuar hast a que\
se subsane.
\ +++ Fi nal del ar chi vo de def i ni ci n +++
\ E
NOTA: Como ya hemos comentado se podan haber introducido diferentes espaciados interli-
neales para dar una mayor claridad al archivo.
SEIS.2.3. Retornos suaves, tabulaciones y san-
gras
El lector de ayuda de AutoCAD 14 reconoce diferentes formatos especiales de escritura que
luego interpreta para generar una presentacin en pantalla. Dos de estos formatos ya los he-
mos visto: el retorno suave, que se sirve de la contrabarra (\ ) para evitar el interlineado blan-
co entre prrafos, y las tabulaciones, las cuales son convertidas a espaciados de cuatro carac-
teres en la ventana de ayuda de AutoCAD. El tercer formato dice relacin a las sangras de
prrafo y puede ser asaz interesante para formatear nuestro texto.
Con respecto al retorno suave, comentar que, como ya hemos dicho, no se utiliza exactamente
como se ha explicado anteriormente. La contrabarra realiza la unin entre dos prrafos dife-
rentes. Si introducimos una contrabarra al final de cada lnea estamos indicando que cambia-
mos de prrafo cada vez, y eso no es real.
La manera de escribir cada prrafo en un archivo . AHP es de forma continua, es decir, sin pro-
ducir saltos de lnea con retorno de carro hasta cambiar de prrafo. Comenzamos a escribir
por ejemplo en un editor como Microsoft Bloc de notas y continuamos aunque se produzca
un desplazamiento horizontal de la pantalla hacia la izquierda y ya no veamos el comienzo de
la lnea. En el momento en que queramos cambiar de prrafo podemos pulsar I NTRO.
NOTA: Como sabemos, si en editores tipo Bloc de notas activamos la opcin Ajuste de lnea
(en Bloc de notas se llama as, en otros puede que reciba otro nombre), la longitud de las l-
neas se adapta al tamao de la ventana de texto, sea sta cual sea. De este modo tenemos
una total visualizacin del texto representado en varias lneas, aunque internamente slo se
encuentre en una (sin saltos de lnea con retorno de carro).
Al escribir el texto as, posteriormente AutoCAD se encarga de darle el formato adecuado se-
gn las dimensiones de la ventana de ayuda. Aparentemente parece que el resultado es el
mismo hacindolo as o con caracteres contrabarra (\ ), sin embargo podremos comprobar que
si queremos darle al texto algn formato especial como una sangra (que ahora veremos), slo
funcionar si lo hacemos correctamente, es decir, todo en una lnea. Esto es evidente ya que si
separamos con contrabarra se entiende que es otro prrafo.
Con respecto a las tabulaciones no haremos ningn comentario ms que lo explicado, ya que
es lo nico relevante, es decir, que al introducir una tabulacin en nuestro texto, sta se inter-
pretar y representar como un espaciado de cuatro caracteres.
Y por ltimo, las sangras de prrafo son interpretadas tambin de una manera especial por el
lector de ayuda de AutoCAD. Para ajustar estos prrafos con sangra, el lector de la ayuda
alinea el texto segn la ltima tabulacin. Este formato maneja las listas de puntos y las nu-
meradas bastante bien, pero precisa de una tcnica especial cuando la etiqueta inicial es ms
larga de lo habitual. En el siguiente ejemplo vemos cmo conseguir una sangra francesa de un
prrafo (los smbolos indican la situacin de una tabulacin del usuario; los smbolos indi-
can la situacin de un I NTRO del usuario, donde no haya este smbolo no se produce salto de
lnea con retorno de carro):
1. Est o es un ej empl o de una sangr a f r ancesa. La maner a de ut i l i zar
est e mt odo consi st e en l a i nt r oducci n de una t abul aci n al pr i nci pi o de
l a l nea, una et i quet a si gni f i cat i va y ot r a t abul aci n. A cont i nuaci n se
escr i be el t ext o compl et o en una l nea, es deci r , si n sal t os de car r o. \
2. Ahor a podemos comenzar ot r a l nea, y as sucesi vament e. . .
El resultado de este cdigo sera el siguiente:
1. Est o es un ej empl o de una sangr a f r ancesa. La maner a de
ut i l i zar est e mt odo consi st e en l a i nt r oducci n de una
t abul aci n al pr i nci pi o de l a l nea, una et i quet a
si gni f i cat i va y ot r a t abul aci n. A cont i nuaci n se escr i be
el t ext o compl et o en una l nea, es deci r , si n sal t os de car r o.
2. Ahor a podemos comenzar ot r a l nea, y as
sucesi vament e. . .
Como sabemos, si no hubiramos introducido la contrabarra al final del primer prrafo, ambos
prrafos habran estado separados por una lnea en blanco.
Con las etiquetas de longitud de caracteres mayor de lo habitual la sangra no queda correcta
si se utiliza este mtodo. Es por ello que se recurre a un pequeo truco para amoldarlas a un
formato agradable. Veamos un ejemplo (se utiliza la convencin de smbolos mencionada ante-
riormente):
PUNTO PRI MERO En est e ej empl o se muest r a l a t cni ca pr eci sa par a\
r eal i zar una sangr a de et i quet as ampl i as. Est a t cni ca consi st e
en escr i bi r l a et i quet a e i nt r oduci r una t abul aci n. A cont i nuaci n se
escr i be l a l ongi t ud apr oxi mada de una l nea y se r eal i za un cambi o de
pr r af o si n espaci ado i nt er l i neal , est o es con el car ct er cont r abar r a.
En l a si gui ent e l nea se i nt r oducen t r es t abul aci ones y se cont i na escr i -
bi endo t odo en una sol a l nea ( si n I NTRO hast a el f i nal del pr r af o) .
PUNTO SEGUNDO Ahor a podemos cont i nuar con ot r o pr r af o r eal i zando\
l a mi sma oper aci n. . .
El resultado sera:
PUNTO PRI MERO En est e ej empl o se muest r a l a t cni ca pr eci sa par a
r eal i zar una sangr a de et i quet as ampl i as. Est a t cni ca
consi st e en escr i bi r l a et i quet a e i nt r oduci r una
t abul aci n. A cont i nuaci n se escr i be l a l ongi t ud apr oxi mada
de una l nea y se r eal i za un cambi o de pr r af o si n
espaci ado i nt er l i neal , est o es con el car ct er cont r abar r a.
En l a si gui ent e l nea se i nt r oducen t r es t abul aci ones y se
cont i na escr i bi endo t odo en una sol a l nea ( si n I NTRO hast a
el f i nal del pr r af o) .
PUNTO SEGUNDO Ahor a podemos cont i nuar con ot r o pr r af o r eal i zando
l a mi sma oper aci n. . .
Con todo lo explicado el principio del archivo de ayuda de nuestro ejemplo que hemos desarro-
llado anteriormente sera ms lgico escribirlo de la siguiente forma (se utiliza la misma con-
vencin explicada para los smbolos):
\ #i ndex
\ $ NDI CE DE CONTENI DOS
\ K ndi ce
1. Nuevo comando HLI CE. \
2. Nuevo comando TUERCA. \
3. Nuevo comando TORNI LLO. \

\ #hel i ce
\ $Nuevo comando HLI CE
\ Khl i ce; comandos nuevos; di buj o; paso; al t ur a; pr eci si n; vuel t as; cent r o;
r adi o
COMANDO HLI CE\
- - - - - - - - - - - - - -
Est e comando di buj a una cur va hel i coi dal en 3D medi ant e una
3DPOL. Par a el l o se si r ve de un cuadr o de di l ogo que l e
sol i ci t ar l os si gui ent es dat os:
* Radi o i ni ci al \
* Radi o f i nal ( si es di f er ent e al i ni ci al ) \
* Al t ur a o paso\
* Nmer o de vuel t as\
* Pr eci si n de cada vuel t a en punt os
* Cent r o de l a hl i ce
Una vez i nt r oduci dos l os dat os, pul se el bot n " Acept ar "
y l a cur va ser di buj ada.
Si se pr oduce al gn er r or en l a i nt r oducci n de dat os,
el pr ogr ama pr esent ar un mensaj e de er r or en el pr opi o
cuadr o de di l ogo, y no se podr cont i nuar hast a que
se subsane.

\ #t uer ca
\ $Nuevo comando TUERCA
\ Kt uer ca; comandos nuevos; di buj o; r adi o; cent r o

. . .
SEIS.2.4. Vnculos de hipertexto
Una caracterstica muy interesante de los archivos . AHP de ayuda de AutoCAD 14 es la posi-
bilidad de incluir vnculos de hipertexto en los mismos. Estos vnculos se visualizarn encerra-
dos entre pares de corchetes angulares (<< y >>) y al hacer doble clic sobre ellos mostrarn la
pantalla de ayuda que tengan enlazada.
Existen dos tipos de vnculos de hipertexto para archivos . AHP: los denominados de salto de
tema y los desplegables. La sintaxis para los primeros es:
<<Texto_del_hipervculo>>Identificador_de tema>
y la sintaxis para los desplegables es:
<<Texto_del_hipervculo>>Identificador_de tema]
La diferencia entre ambos es que los de salto de tema muestran la ayuda en la misma ventana
del visor de ayuda de AutoCAD, mientras que los desplegables abren otra ventana para reali-
zar la misma operacin.
As por ejemplo, nos habremos percatado al visualizar nuestro ejemplo de este MDULO, que
resulta engorroso tener el ndice delante y no poder acceder a los diferentes temas desde ah
mismo. Lo que hacamos era dirigirnos a la ventana de bsqueda para visualizar los diferentes
temas segn palabras clave. De esta forma, si escribiramos el ndice as:
\ #i ndex
\ $ NDI CE DE CONTENI DOS
\ K ndi ce
<<1. Nuevo comando HLI CE. >>hel i ce>\
<<2. Nuevo comando TUERCA. >>t uer ca>\
<<3. Nuevo comando TORNI LLO. >>t or ni l l o>\
en la pantalla se mostraran las lneas encerradas entre los pares de corchetes angulares signi-
ficando la presencia de un hiperenlace. Para acceder al tema enlazado segn su identificador
(la cadena tras \ #) slo hemos de hacer doble clic en la misma lnea. Veremos como aparece
en la misma ventana de ayuda. Otra forma de acceder es haciendo un solo clic en la lnea
veremos que se activa el texto debajo de la zona de texto de ayuda que dice Escoger el te-
ma: y pulsar el botn Ir a de la derecha inferior del cuadro (que hasta ahora no habamos
comentado).
Si, por el contrario, hubiramos escrito el ndice con enlaces desplegables as:
\ #i ndex
\ $ NDI CE DE CONTENI DOS
\ K ndi ce
<<1. Nuevo comando HLI CE. >>hel i ce] \
<<2. Nuevo comando TUERCA. >>t uer ca] \
<<3. Nuevo comando TORNI LLO. >>t or ni l l o] \
los temas implcitos no apareceran en la misma ventana de ayuda, sino en otra que se abre
sobre la anterior llamada Ms ayuda sobre AutoCAD. Para cerrar esta ventana habremos de
pulsar el botn Cerrar inferior. De esta forma se cierra esta ltima ventana dejando al descu-
bierto la anterior con el tema que tuviera en pantalla (en este caso el ndice).
Como ya hemos podido dilucidar, los vnculos de salto de tema se utilizan para acceder a dife-
rentes secciones desde un ndice, por ejemplo, mientras que los vnculos desplegables se usan
a la hora de mostrar aclaraciones o ayuda complementaria sobre un tema.
Si un hipervnculo o hiperenlace ocupa varias lneas, podemos hacer doble clic en cualquiera de
la lneas (o un solo clic y pulsando el botn Ir a) para acceder a su tema enlazado. Por ejem-
plo:
<<Est e v ncul o al Tema t er cer o\
ocupa var i as l neas en el ar chi vo\
de def i ni ci n de ayuda>>t ema3>
Y si existen varios vnculos en una sola lnea, habremos de elegir cul queremos visitar rotando
entre temas con el botn Siguiente de la parte inferior del cuadro de ayuda (tampoco comen-
tado hasta ahora), y pulsando al final Ir a. Mientras pulsemos Siguiente, a la izquierda irn
apareciendo los diferentes enlaces incluidos en la lnea de definicin (a la derecha de la etique-
ta Escoger tema:); cuando hayamos elegido, como decimos, pulsaremos Ir a. Evidentemente,
en estos casos un doble clic en una lnea con varios enlaces implcitos no tendr ningn efecto.
NOTA: No se pueden incluir vnculos en pantallas nacidas desplegables de otros vnculos, es
decir, en una ventana Ms ayuda sobre AutoCAD no se pueden escribir hiperenlaces; ojo, s se
puede, pero no funcionarn. Por lo tanto no interesa.
SEIS.2.5. Archivos de ayuda en directorios de
slo lectura
Como ya sabemos, por defecto AutoCAD crea el archivo de ndice (. HDX) en el mismo directo-
rio que el archivo de ayuda. No obstante, si se est utilizando un archivo de ayuda que se en-
cuentra en un directorio de slo lectura (como en una unidad de red restringida o en un CD-
ROM), no se puede crear el archivo de ndice. Para solucionar este problema habremos de
crear un archivo de ndice ficticio en otro directorio (con escritura permitida) del camino de
soporte, as AutoCAD crear el archivo de ndice real en ese otro directorio. Por ejemplo, si se
introducen los siguientes comandos tras el prompt de MS-DOS, se crea un archivo de ndice
ficticio para el archivo MI AYUDA. AHP en el directorio \ SUPPORT\ del programa:
echo dummy > \ aut oca~1\ suppor t \ mi ayuda. hdx
A continuacin se describe cmo AutoCAD 14 ubica el archivo . HDX. Se puede determinar que
AutoCAD site dicho archivo en cualquier sitio de la ruta de soporte, colocando un . HDX ficti-
cio en dicho directorio. Veamos la descripcin:
Primero se busca el archivo de ayuda de AutoCAD. Si se puede escribir un archivo de ndice
en ese directorio se hace, de lo contrario, se contina con lo siguiente. Se busca un archivo de
ndice con ese nombre en el camino de soporte. Si se encuentra un archivo de ndice existente
y se puede abrir para modificar se hace, de lo contrario, contina buscando en el camino de
soporte. Si no encuentra un archivo de ndice que se pueda escribir, se contina con lo si-
guiente. Se busca el archivo ACAD14. CFG en el camino de soporte. Si se encuentra y puede
escribirse el archivo de ndice en dicho directorio se hace, en caso contrario AutoCAD no po-
dr escribir un archivo de ndice y no se mostrar el archivo de ayuda. Todas las veces que se
intente cargar el archivo de ayuda se producir el mismo proceso.
De todo ello se desprende que, al crear un archivo ficticio en un directorio de soporte, Auto-
CAD 14 no tendr problema alguno para crear en dicho directorio el archivo . HDX real.
NOTA: El mensaje Hel p i ndex i n: XXXXXX, siendo XXXXXX el camino donde se encuentra el
archivo de ndice, aparece en la lnea de comandos para indicar dnde se ha escrito el archivo.
SEIS.3. FORMATO WINDOWS. ARCHIVOS .HLP
Los denominados archivos de ayuda WinHelp son los originales archivos . HLP de Microsoft
Windows 95/98 y Windows NT. Estos archivos de ayuda podemos encontrrnoslos casi en el
100% de la aplicaciones que corren bajo entorno Windows y resultan muy cmodos de crear y
visualizar.
NOTA: La norma sobre el formato de presentacin de los textos de ayuda en Windows 98 ha
variado con respecto a Windows 95, si embargo el fundamento sigue siendo el mismo.
Los archivos . HLP pueden contener texto, imgenes y objetos multimedia, por lo que la ayuda
se transforma en un sistema eficaz de aprendizaje. Adems, se puede potenciar su funcionali-
dad mediante macros WinHelp y funciones API, convirtindolos en una poderosa herramienta
de documentacin. Estos archivos suponen el formato ideal para documentacin que no se
actualiza con frecuencia.
NOTA: Las llamadas al API de Windows son llamadas a bibliotecas DLL. Cualquiera que entien-
da algo de programacin visual para Windows sabr a qu nos estamos refiriendo. Aunque
tampoco nos importa demasiado.
Para crear archivos . HLP necesitamos una aplicacin denominada Microsoft Help Workshop.
sta es capaz de compilar archivos en formato RTF (texto enriquecido) para convertirlos en
archivos WinHelp . HLP. Para conseguir esta aplicacin nos podemos dirigir directamente a Mi-
crosoft; adems tambin se proporciona en entornos de desarrollo como Microsoft Visual Basic
5.0.
NOTA: En esta seccin no se pretende proporcionar un manual completo sobre el funciona-
miento de Microsoft Help Workshop, sino sentar unas bases o directrices para la utilizacin de
archivos de ayuda WinHelp propios con AutoCAD 14. La poltica que ha seguido el autor de
este curso con respecto a la personalizacin y la programacin de AutoCAD, consiste en expli-
car profundamente todo aquello que podemos tener a nuestro alcance, es decir, que se pro-
porciona junto con AutoCAD 14. El resto excepto honrosas excepcionesescapa a los obje-
tivos del curso en s y siempre ser comentado, evidentemente est ah, pero con menor al-
cance.
SEIS.3.1. Microsoft Help Workshop
Microsoft Help Workshop, como hemos dicho, compila archivos . HLP a partir de archivos de
texto de formato enriquecido . RTF (con cdigos especficos). Este formato en uno de los es-
tndares de salida de Microsoft Word, por lo que esta aplicacin se ha convertido en abandera-
do de desarrolladores de ayuda en formato WinHelp. No obstante es posible codificar estos
archivos manualmente o con otras aplicaciones.
Justo antes de compilar un archivo de ayuda se crea un llamado archivo de proyecto . HPJ que
contiene las definiciones la todos los archivos . RTF que se incluirn en el . HLP final, adems de
otros parmetros como ubicaciones de archivos grficos, definiciones de macros, colores de la
ventana de ayuda, etctera.
Los archivos WinHelp . HLP, y aunque parezca lo contrario, no son ejecutables, es decir, no
pueden ejecutarse por s solos. Necesitan de una aplicacin llamada Ayuda de Windows, cuyo
ejecutable es WI NHLP32. EXE, para poder ser corridos. Lo que ocurre es que podemos hacer
doble clic en ellos porque su extensin (. HLP) est asociada con dicha aplicacin. Esto ocurre
con casi todos los archivos de las diferentes aplicaciones (y se puede personalizar en Win-
dows), al igual que con los . DWG de AutoCAD.
Estos archivos . HLP utilizan el cuadro de dilogo Temas de ayuda de la aplicacin Ayuda de
Windows para mostrar en un principio las pestaas Contenido, ndice y Buscar. La pestaa
contenido proporciona una interfaz con los diferentes temas de ayuda contenidos en uno o
varios archivos . HLP. Las entradas y presentacin de la pestaa Contenido estn definidas en
un archivo . CNT de contenido. La potencia de personalizacin de estos archivos nos permitir
aadir nuevos temas a esta pestaa de contenidos, que no sern otra cosa que nuestros pro-
pios archivos . HLP.
SEIS.3.2. Aadiendo temas a la pestaa Conte-
nido
Para aadir nuevos temas (archivos . HLP) a la pestaa Contenido del cuadro de ayuda propio
de AutoCAD 14, lo que debemos hacer el crear un archivo de contenido llamado I NCLUDE. CNT
en el subdirectorio \ HELP\ de AutoCAD 14. Este archivo contendr nicamente secuencias
: I NCLUDE para llamar a otros archivos . CNT contenedores de los temas en cuestin; de la si-
guiente manera:
: I NCLUDE nombre_archivo. CNT
As, las siguientes lneas de un archivo I NCLUDE. CNT incluiran los temas definidos en los dife-
rentes archivos . CNT en la pestaa Contenido de la ayuda de AutoCAD:
: I ncl ude mi ayuda. cnt
: I ncl ude hel p123. cnt
: I ncl ude NCHl i ce. cnt
: Tuer caHel p. cnt
NOTA: Despus de modificar el archivo I NCLUDE. CNT o cualquier otro archivo . CNT al que se
haga referencia, es necesario eliminar el archivo ACAD. GI D para que los cambios surtan efecto.
Ms adelante se comentar la misin de cada tipo de archivo.
SEIS.3.3. Aadiendo temas a ndice y Buscar
Evidentemente tambin disponemos de la posibilidad de aadir nuestros archivos adicionales a
las listas de bsqueda por palabras clave y de ndice. Para ello utilizaremos la secuencia
: I NDEX en la forma expuesta en el siguiente ejemplo:
: I ndex Est ndar es=est ndar . hl p
1 Est ndar es de of i ci na
2 Ar qui t ect ur a
3 Vi st a gener al =ar q_pr esen@est ndar . hl p
3 Di seo=ar q_di seo@est ndar . hl p
3 Di buj o=ar q_di buj o@est ndar . hl p
3 I nf or mes=ar q_i nf or @est ndar . hl p
2 I ngeni er a
3 Vi st a gener al =i ng_pr esen@est ndar . hl p
3 Di seo=i ng_di seo@est ndar . hl p
3 Di buj o=i ng_di buj o@est ndar . hl p
3 I nf or mes=i ng_i nf or @est ndar . hl p
2 Asesor a del per sonal
3 Vi st a gener al =per s_pr esen@est ndar . hl p
As se facilita el acceso al archivo ESTNDAR. HLP. No deberemos olvidar incluir una lnea como
la que sigue en el archivo I NCLUDE. CNT dentro de la carpeta \ HELP\ del directorio de AutoCAD
14:
: I ncl ude est ndar . cnt
NOTA: Los nmeros del ejemplo representan niveles de anidacin: 1 es un tema de contiene
otros tres temas los tres nmeros 2, y los nmeros 3 son los documentos de la ayuda.
Tampoco olvidaremos suprimir el archivo ACAD. GI D.
A continuacin se muestra una tabla con los tipos de archivos que utiliza el sistema de ayuda
de Windows 95/98:
Tipo de archivo Descripcin
. RFT
Archivo fuente para Microsoft Help Workshop.
. HPJ
Archivo de proyecto de Microsoft Help Workshop.
. HLP
Archivo objeto compilado de ayuda WinHelp.
. CNT
Archivo de contenido de Microsoft Help Workshop.
. GI D
Archivo de configuracin WinHelp. Archivo binario creado por el eje-
cutable WI NHLP32. EXE. Contiene informacin sobre el archivo de
ayuda que incluye vnculos de los archivos de contenido, nombres
de todos los archivos de ayuda incluidos, palabras clave y ubicacin
de los archivos.
. FTS
Archivo de bsqueda de texto en la pestaa ndice. Archivo binario
creado por el ejecutable WI NHLP32. EXE la primera vez que ejecuta
una bsqueda de texto en el ndice.
. FTG
Archivo de grupos de bsqueda de texto. Archivo binario creado por
el ejecutable WI NHLP32. EXE.
Y a continuacin se proporciona otra tabla que muestra los diferentes archivos de ayuda bsi-
cos que proporciona AutoCAD 14 en su paquete de software:
Archivo Contenido
ACAD. CNT
Contenido de temas de ayuda
ACAD. HLP
Referencia de comandos
ACAD_CG. HLP
Manual de personalizacin
ACAD_I G. HLP
Manual de instalacin
ACAD_UG. HLP
Manual del usuario
ACAD_AG. HLP
Manual de ActiveX Automation
ACADAUTO. HLP
Referencia de ActiveX Automation
README. HLP
Documento Readme
DOCCHECK. HLP
Publicaciones tcnicas de AutoCAD
SEIS.3.4. Utilizar los archivos .HLP desde Auto-
CAD
Existen varias formas de llamar a un . HLP desde una macro de un botn, una opcin de men,
un programa de AutoLISP o un programa VBA, entre otros. A lo largo de este curso se vern
diferentes funciones y comandos que nos ayudarn a hacerlo. Por ahora digamos nicamente
que con los archivos . HLP se puede utilizar la funcin HELP de AutoLISP al igual que con los
. AHP.
Tambin veremos que incluso podemos crear una orden externa de AutoCAD 14 que ejecute
la ayuda.
Por ltimo, decir que en el CD-ROM de instalacin de AutoCAD 14, en el directorio
\ BONUS\ UTI LS\ existe un pequeo programa que corre bajo MS-DOS llamado AHP2HLP. EXE.
Este programa convierte archivos . AHP de ayuda de AutoCAD a archivos WinHelp . HLP. Evi-
dentemente, el compilador HCW. EXE (Help Compiler Workshop) de Microsoft Help Workshop ha
de estar presente, o en su defecto el HCP. EXE. Es muy fcil de utilizar.
SEIS.4. AYUDA EN FORMATO HTML
Este es el ltimo tipo de formato de ayuda para AutoCAD 14 que vamos a estudiar. Parece
ser que ltimamente se est produciendo un furor no muy generalizado an por la presen-
tacin de la documentacin en lnea de las aplicaciones en formato HTML, esto es, en el mismo
lenguaje que se definen los diferentes elementos de una pgina Web. Categricamente HTML
no puede ser considerado como un lenguaje de programacin, ya que no posee las caracters-
ticas propias de estos (posibilidad de definir y declarar variables y/o constantes, escritura de
estructuras alternativas, de estructuras repetitivas, de estructuras condicionales y un largo
etctera). Sin embargo, el Lenguaje de Marcas de Hipertexto es una herramienta potente y
verstil para la presentacin de documentos en pantalla; con la posibilidad de introduccin de
textos e imgenes, as como de elementos multimedia.
La nica desventaja que no lo es de HTML es la imperiosa necesidad de poseer instalado
en nuestro equipo un navegador WWW o browser del tipo Microsoft Internet Explorer o Nets-
cape Navigator (ambos gratuitos, por lo que por lo menos desembolso econmico no nos su-
pondr).
Amn de todo esto, los archivos HTML son fcilmente actualizables sin necesidad de reinstalar
o actualizar aspecto alguno en el sistema local. Adems de la propia actualizacin on-line va
Internet.
SEIS.4.1. Aadiendo temas HTML a Contenido
Podemos aadir archivos HTML propios o vnculos a pginas Web de Internet a la pestaa Con-
tenido del sistema de ayuda de AutoCAD, de forma similar a como lo hacamos con los fiche-
ros . HLP. Por ejemplo, para poder acceder con facilidad a la documentacin HTML TEMA1. HTM,
TEMA2. HTMy TEMA3. HTM, adems de a varias pginas Web de la Red de Redes, crearemos el
archivo MASAYUDA. CNT, por ejemplo, con el contenido siguiente:
1 Ayuda adi ci onal
2 Nuest r a i nf or maci n
3 Tema 1=! EF( " t ema1. ht m" , " " , 4)
3 Tema 2=! EF( " t ema2. ht m" , " " , 4)
3 Tema 3=! EF( " t ema3. ht m" , " " , 4)
2 Si t i os r el aci onados con l a WWW
3 Codi f I nf o=! EF( " ht t p: / / www. Codi f I nf o. com" , " " , 4)
3 Vi gasRUs=! EF( " ht t p: / / www. Vi gasRUs. com" , " " , 4)
3 LosOt r osCol abor ador es=! EF( " ht t p: / / www. ot r os. es" " , 4)
A continuacin aadiremos lo siguiente al archivo I NCLUDE. CNT, en el directorio \ HELP\ de Au-
toCAD 14:
: I ncl ude masayuda. cnt
Ahora, suprimiremos el archivo ACAD. GI D. La prxima vez que se ejecute el archivo ACAD. HLP,
seleccionando por ejemplo Temas de Ayuda de AutoCAD desde el men ?, aparecern las nue-
vas entradas a continuacin de las existentes.
La forma de utilizar estos archivos es la misma que la anteriormente expuesta.
Y por ltimo, recordar que en la seccin ***HELPSTRI NGS de los archivos de definicin de me-
ns se pueden introducir diferentes textos (pequeas cadenas) de ayuda contextual. No es lo
mismo que definir un archivo completo de ayuda en lnea, pero s habr de servir como com-
plemento.
SEIS.5. EJEMPLOS PRCTICOS DE ARCHIVOS
DE AYUDA
NOTA: Se utilizan las mismas convenciones de sintaxis explicadas: para las tabulaciones y
para los I NTRO; en el final de lnea sin este ltimo smbolo no se da un salto de lnea con re-
torno de carro.
SEIS.5.1. Ayuda a nuevos comandos creados
\ #i ndi c
\ $ ndi ce
\ K ndi ce
<<Nuevo comando ESPI RAL. >>espi r al >\
<<Nuevo comando CI RCCON. >>ci r ccon>\
<<Nuevo comando ESTRELLA. >>est r el l a>\
<<Nuevo comando HLI CE3D. >>hel i c3d>\

\ #espi r al
\ $Nuevo comando ESPI RAL
\ Kespi r al ; semi c r cul os; paso; r adi o; espi r al , comandos nuevos:
COMANDO ESPI RAL\
- - - - - - - - - - - - - - -
ESPI RAL di buj a una f al sa espi r al f or mada por semi c r cul os. Se gener a
si empr e en sent i do hor ar i o, a par t i r de un cent r o, con un r adi o i ni ci al y
un paso.
Abr evi at ur a del comando: ESP\
Comando r el aci onado: <<HLI CE3D>>hel i c3d>

\ #ci r ccon
\ $Nuevo comando CI RCCON
\ Kci r ccon; c r cul os; concnt r i cos; r adi o; ci r ccon, comandos nuevos:
COMANDO CI RCCON\
- - - - - - - - - - - - - - -
CI RCCON di buj a c r cul os concnt r i cos r espect o a un punt o cent r al .
El pr ogr ama sol i ci t a el nmer o de c r cul os concnt r i cos que ser n
gener ados. Se seal a l uego el punt o cent r al y despus l os r adi os i nt er i or
y ext er i or . El pr ogr ama di st r i buye l os c r cul os concnt r i cos de f or ma
equi di st ant e.
Abr evi at ur a del comando: CC

\ #est r el l a
\ $Nuevo comando ESTRELLA
\ Kest r el l a; punt as; est r el l a, cent r o de; r adi o; est r el l a, comandos nuevos:
COMANDO ESTRELLA\
- - - - - - - - - - - - - - - -
ESTRELLA di buj a una est r el l a a base de l neas, i ndi cando el cent r o, l os
dos r adi os ent r e l os que se di st r i buyen l as punt as y el nmer o de st as.
Segn ambos r adi os t engan el mi smo si gno o se i ndi que uno de el l os
negat i vo, el aspect o de l a est r el l a r esul t ant e cambi a.
Abr evi at ur a del comando: ET

\ #hel i c3d
\ $Nuevo comando HLI CE3D
\ Khl i ce3d; cabl e; paso; secci n; hl i ce3d, comandos nuevos:
COMANDO HLI CE3D\
- - - - - - - - - - - - - - - -
HLI CE3D di buj a una hl i ce o ar r ol l ami ent o de cabl e en 3 di mensi ones
medi ant e SUPREGLA. Pr esent a opci ones par a i ndi car un paso de hl i ce
const ant e, un paso pr opor ci onal al aument o o di smi nuci n de l a secci n, o
un api l ami ent o del cabl e.
Abr evi at ur a del comando: 3DH\
Comando r el aci onado: <<ESPI RAL>>espi r al >

\ *** / / \ \ Fi nal del f i cher o / / \ \ ***

\ E
SEIS.5.2. Documentacin sobre un comando
nuevo
. . .

\ #cu
\ $CU
\ KCU; Conver si n de uni dades
( CU) Est a r ut i na of r ece un men de conver si n de uni dades,
of r eci endo l as que se encuent r an def i ni das en el ar chi vo
<<ACAD. UNT>>unt ] . Se puede ut i l i zar en mi t ad de un comando cuando st e
sol i ci t a un val or numr i co, l l amando a ( cu) . La f unci n ( cu) no es un
nuevo comando de Aut oCAD si no una <<f unci n de usuar i o>>f unusr ]
que puede ser l l amada desde mi t ad de un comando.
La f unci n exami na si exi st e el ar chi vo <<ACAD. UNT>>unt ] y en caso
af i r mat i vo l l ama a l a f unci n de bsqueda de gr upos de uni dades y, despus
sol i ci t a sel ecci onar l a opci n. Ll ama a cont i nuaci n a l a f unci n de
l i st ado de uni dades di sponi bl es en el gr upo sel ecci onado y por l t i mo a l a f un-
ci n
que sol i ci t a l as uni dades de or i gen y dest i no. La l t i ma expr esi n r eal i za l a
conver si n medi ant e <<CVUNI T>>cvuni t ] y el val or obt eni do es el devuel t o por
( cu) .

\ #unt
\ $ACAD. UNT
\ KACAD. UNT; Conver si n de uni dades
ACAD. UNT Est e ar chi vo guar da l as def i ni ci ones de conver si n de
uni dades par a l a f unci n CVUNI T de Aut oLI SP. El ar chi vo es ASCI I y, por
l o t ant o t ot al ment e edi t abl e y per sonal i zabl e. La maner a de cr ear nuevos
gr upos de conver si n de uni dades se expl i ca en el mi smo ar chi vo.

\ #f unusr
\ $Funci n de usuar i o
\ KFunci n de usuar i o; Conver si n de uni dades
Funci n de usuar i o Es una f unci n con un det er mi nado comet i do,
def i ni da por el pr ogr amador en una apl i caci n Aut oLI SP medi ant e l a
f unci n i nher ent e o " subr " DEFUN.

\ #cvuni t
\ $CVUNI T
\ KCVUNI T; Conver si n de uni dades
CVUNI T Es una f unci n i nher ent e o subr de Aut oLI SP que convi er t e un
val or de un t i po de uni dades a ot r as. Su si nt axi s es l a si gui ent e:
( CVUNI T val or uni dad_1 uni dad_2)
si endo uni dad_1 l as uni dades act ual es de val or y uni dad_2 l as uni dades al as cua-
l es se desea conver t i r di cho val or .
. . .
\ E
SEIS.FIN. EJERCICIOS PROPUESTOS
I. Crear un archivo de ayuda de AutoCAD sencillo; cualquiera.
II. Crear un archivo de ayuda con tabulaciones y sangrados.
III. Disear un documento de ayuda con tabulaciones, sangrados y retornos suaves.
IV. Disear un archivo . AHP con hipervnculos de las dos clases existentes.
V. Disear una serie de documentos completos de ayuda para AutoCAD 14 que expliquen
el diseo de los patrones de sombreado creados para el mundo de la construccin en el
ltimo ejercicio propuesto del MDULO CUATRO.
EJERCICIOS RESUELTOS DEL MDULO SEIS
NOTA: Se utilizan las mismas convenciones de sintaxis explicadas en el MDULO anterior:
para las tabulaciones y para los I NTRO; en el final de lnea sin este ltimo smbolo no se da
un salto de lnea con retorno de carro.
EJERCICIO I
\ #r ut i nas
\ $Rut i nas Ext r aBonus
\ KRut i nas Ext r aBonus 2000; Ext r aBonus; 2000; ORBI TA; GI RATR; DESPLAZATR; ANULASOL;
CAMBI ASOL

Bi bl i ot eca de r ut i nas Ext r aBonus 2000\
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Las nuevas r ut i nas Ext r aBonus 2000 aadi das han si do di seadas par a r eal i zar l e
ms f ci l su t r abaj o di ar i o en 3D con Aut oCAD. En l a bi bl i ot eca podemos
encont r ar ci nco comandos nuevos aadi dos, t odos el l os f or mados por ot r os t ant os
pr ogr amas en Aut oLI SP y Vi sual C++. El acceso a est os pr ogr amas se r eal i za
medi ant e l os nuevos comandos di seados o medi ant e l os mens nuevos
despl egabl es y/ o bar r as de her r ami ent as.

A cont i nuaci n se pr esent a una l i st a con l as di f er ent es nuevas r ut i nas,
i ndi cando el nombr e del nuevo comando asoci ado a l a der echa:

RUTI NA COMANDO\
- - - - - - - - - - - - - - - - - - - - - -
ORBI TA. ARX ORBI TA\
GI RA. ARX GI RATR\
DSPLZTR. ARX DESPLAZATR\
ANUSOL. LSP ANULASOL\
CHGSOL. LSP CAMBI ASOL\

\ E
EJERCICIO II
\ #pur ge
\ $Li mpi eza del di buj o act ual desde l a l nea de comandos
\ KLi mpi a; Pur ge; Li mpi eza; Mscar a; Fi l t r o; Comod n

Pr i mer paso Escr i ba l a or den " LI MPI A" o " _PURGE" en l a l nea de comandos. \
El i j a ahor a l o que qui er e l i mpi ar : bl oques, est i l os de acot aci n,
t i pos de l nea, et ct er a.

Segundo paso Ahor a debe el egi r l os nombr es de el ement os que desea l i mpi ar \
Puede usar mscar as t i po comodi nes de MS- DOS, por ej empl o *, t r *,
*capa00*, capa?, t a??1*, et c. . .

Ter cer paso El i j a si desea conf i r mar cada el ement o que se el i mi nar \
Tr as est o, sl o pr ocede i r el i mi nando uno a uno o t odos a l a vez,
dependi endo de l o el egi do.

\ E
EJERCICIO III
\ #bl oques
\ $Di l ogo de i nser ci n de bl oques
\ KDi l ogo de i nser ci n de bl oques; I nser ci n; Bl oque

1. Tecl ee el comando I NSERBLOQ par a ar r ancar el cuadr o de di l ogo
" I nser ci n de bl oques" . Tambi n puede ut i l i zar su cor r espondenci a en el men
despl egabl e " Bl oques" , en el men de pant al l a en l a secci n " Bl oques" o en l a
bar r a de her r ami ent as " Bl oques" . \
2. Par a el egi r un di r ect or i o con bl oques pul se el bot n " Exami nar . . . "
Busque y escoj a el di r ect or i o en el cuadr o de di l ogo cor r espondi ent e. \
3. Al vol ver al l et r er o el i j a el bl oque que desea i nser t ar de l os
i conos que ver en l a zona der echa. \
4. Pul se el bot n " Desi gnar <" par a desi gnar un punt o de i nser ci n en
pant al l a. \
5. Al vol ver al cuadr o, pul se " Acept ar " par a i nser t ar el bl oque. \

\ E
EJERCICIO IV
\ #ayuda
\ $Ayuda de Aut oCAD
\ KAyuda de Aut oCAD; Ayuda; AHP; HLP; HTML

<<1. Los ar chi vos . AHP>>ahp>\
<<2. Los ar chi vos . HLP>>hl p>\
<<3. Los ar chi vos . HTML>>ht ml >\

\ #ahp
\ $Ar chi vos . AHP
\ KAyuda de Aut oCAD; Ayuda; AHP

Los ar chi vos . AHP son ar chi vos de t ext o ASCI I f ci l ment e def i ni bl es y que
pueden pr opor ci onar una muy val i osa ayuda. Est os ar chi vos t i enen l a capaci dad
de admi t i r una ser i e de di r ect r i ces de f or mat eo de t ext o, as como t ambi n
es f act i bl e l a i ncl usi n de <<enl aces de hi per t ext o>>hi per ] par a que r esul t e
senci l l a l a " navegaci n" por el document o compl et o de ayuda.
Vanse l os f or mat os <<. HLP>>hl p> y <<. HTML>>ht ml >.

\ #hl p
\ $Ar chi vos . HLP
\ KAyuda de Aut oCAD; Ayuda; HLP

Los ar chi vos . HLP se pr oducen medi ant e compi l aci n de ar chi vos de <<t ext o
enr i queci do>>r t f ] . RTF. Par a el l o, es necesar i o un pr ogr ama l l amado " Mi cr osof t
Hel p Wor kshop" , el cual r eal i za l a compi l aci n y nos ayuda a mej or ar el
document o, aadi endo i mgenes, <<enl aces de hi per t ext o>>hi per ] o ndi ces de
cont eni dos, por ej empl o.
Vanse l os f or mat os <<. AHP>>ahp> y <<. HTML>>ht ml >.

\ #ht ml
\ $Ar chi vos . HTML
\ KAyuda de Aut oCAD; Ayuda; HTML

Los ar chi vos . HTML son l os i ndi cados par a l a r epr esent aci n de pgi nas Web
en l a WWW. Son ar chi vos f ci l ment e i nt egr abl es en Aut oCAD y que, adems,
per mi t en un ampl i o j uego de posi bi l i dades; como l a i nser ci n de i mgenes
o car act er st i cas mul t i medi a.
Vanse l os f or mat os <<. AHP>>ahp> y <<. HLP>>hl p>.

\ #hi per
\ $Enl aces de hi per t ext o
\ KEnl aces de hi per t ext o

Los enl aces de hi per t ext o per mi t en sal t ar de un t ema a ot r o dent r o de un
ar chi vo de ayuda. As mi smo, t ambi n pueden abr i r una pant al l a auxi l i ar par a
most r ar acl ar aci ones a t r mi nos o concept os.

\ #r t f
\ $Ar chi vos de t ext o enr i queci do
\ KAr chi vos de t ext o enr i queci do

Los ar chi vos de t ext o enr i queci do cont i enen cdi gos espec f i cos que ser n
i nt er pr et ados de det er mi nada maner a por Mi cr osof t Hel p Wor kshop a l a hor a de
compi l ar l os, f or mado as un f i cher o obj et o f i nal . HLP.

\ E
EJERCICIO V
(Ejercicio completo para resolver por tcnicos y/o especialistas).

Autor: J onathan Prstamo Rodrguez
Para: La Web del Programador

MDULO SIETE
Creacin de rdenes externas, re-
definicin y abreviaturas a coman-
dos
SIETE.1. INTRODUCCIN
En este MDULO se van estudiar varias caractersticas de AutoCAD que nos permitirn acce-
der desde la lnea de comandos a las llamadas rdenes externas, es decir, a la ejecucin de
comandos que nada tienen que ver con AutoCAD 14. Estos comandos pueden llamar a aplica-
ciones externas como un editor de texto o una base de datos de Windows, o incluso a coman-
dos a nivel de sistema operativo MS-DOS, los cuales pueden resultarnos tiles en determina-
dos momentos de la edicin de un dibujo. Y todo ello desde el propio AutoCAD.
Asimismo se explicar la forma simple sobremanera de redefinir los comandos del progra-
ma, esto es, de asignar a las propias rdenes de AutoCAD 14 funciones diferentes o amplia-
das con respecto a las que ya poseen. De la misma manera veremos la posibilidad de seguir
accediendo a la definicin antigua de dichas rdenes, as como de anular la nueva definicin
creada.
Por ltimo veremos la caracterstica de creacin de abreviaturas desde el teclado a los coman-
dos ms usados de AutoCAD. Podremos crear nuestros propios alias, modificar los existentes
y/o aadir ms definiciones a los actuales. Todo ello, acompaado de los habituales ejemplos
explicativos, as como de los ejercicios de autoevaluacin, nos ocupar la extensin de este
MDULO SI ETE.
SIETE.2. DEFINICIN DE COMANDOS EXTER-
NOS
Como ya se ha dicho, desde AutoCAD tenemos la posibilidad de realizar llamadas a comandos
de MS-DOS y a utilidades y aplicaciones Windows, todo ello en tiempo de ejecucin. Para que
esas llamadas, escritas en la lnea de comandos de AutoCAD 14, surtan el efecto deseado,
deberemos definir un cdigo que las realice efectivas. Las definiciones de llamadas a comandos
externos se realizan en un archivo llamado ACAD. PGP, el cual se encuentra en el directorio
\ SUPPORT\ del programa.
ACAD. PGP es un archivo ASCII, por lo que resulta fcilmente modificable y personalizable. Este
archivo se busca en los directorios de soporte del programa y se carga (el primero que se en-
cuentra si hay varios) cada vez que comenzamos un dibujo nuevo, abrimos uno existente o,
evidentemente, arrancamos AutoCAD. En l se encuentran ya definidos los comandos exter-
nos que por defecto se suministran con AutoCAD 14, as como las abreviaturas a comandos
que ms adelante, y en este mismo MDULO, estudiaremos. Al abrir este archivo con cual-
quier editor ASCII, encontraremos primero la tpica presentacin de Autodesk, seguida prime-
ramente de las definiciones de comandos externos. Se proporciona tambin una pequea ex-
plicacin para la creacin de estos.
SIETE.2.1. Comandos externos a nivel MS-DOS
Una de las lnea primeras de definicin que podemos encontrar puede ser la siguiente:
CATALOGO, DI R / W, 0, Especi f i caci n de ar chi vos: ,
Pero, qu significa todo esto? Cmo se definen estos comandos realmente? Vamos pues a
explicar los diferentes parmetros de la definicin.
Lo primero que tenemos que comentar es la posibilidad de introducir comentarios en este ar-
chivo, recurriendo, como en otros muchos casos de archivos de definicin de AutoCAD, al ca-
rcter punto y coma (; ) al principio de la lnea. Al igual que en otros casos, con un solo punto
y coma es suficiente. Las lneas que comiencen con ; sern ignoradas por AutoCAD a la hora
de leer el archivo ACAD. PGP. Adems, disponemos tambin de la ventaja de introducir lneas
blancas como separadores interlineales para imprimir claridad a los textos, sin que esto afecte
tampoco a su posterior proceso.
La sintaxis de definicin de comandos externos MS-DOS en el archivo ACAD. PGP es la siguien-
te:
Nombre_comando, [solicitud_DOS], Indicador_bit, [*][Mensaje],
Pasaremos ahora a comentar cada uno de los parmetros incluidos.
NOTA: Las comas (, ) son todas obligatorias.




Nombre_comando. Es el nombre que le asignamos al comando que estamos creando. Este
nombre ser posteriormente reconocido por AutoCAD (como comando externo), por lo que
no debe coincidir con el nombre de ningn comando inherente al programa.
Solicitud_DOS. Se refiere al comando a nivel MS-DOS que se ejecutar el llamar desde
AutoCAD a Nombre_comando. Es el nombre de una orden, proceso o programa con sus pa-
rmetros y modificadores si los necesitara. Es un parmetro opcional (ya veremos por
qu).
Indicador_bit. Es un bit con los siguientes significados base:
0 (bit cero): inicia la aplicacin y espera a que termine.
1 (primer bit): no espera a que termine la aplicacin.
2 (segundo bit): ejecuta la aplicacin minimizada.
4 (tercer bit): ejecuta la aplicacin en modo "oculto".
Algunos valores de bit pueden ser sumados, integrndose as unas acciones con otras. De
esta forma, un valor de bit de 3 ejecutara la aplicacin minimizada y no esperara a que
terminara, y un valor de 5 la ejecutara en modo oculto y no esperara.
Todos los valores indicados (0, 1, 2 y 4) ms las combinaciones expuestas (3 y 5) repre-
sentan todos los valores posibles que podemos dar a Indicador_bit, ya que no se pueden
realizar ms combinados porque los bits 2 y 4 se excluyen mutuamente. Adems, estos dos
valores suelen evitarse, ya que hacen que AutoCAD no se encuentre disponible hasta que
la aplicacin haya finalizado.
Mensaje. Permite definir un mensaje para la lnea de comandos de AutoCAD que se mos-
trar al llamar a la orden externa. Lo que se escriba como respuesta a dicho mensaje ser
pasado como parmetro adicional al comando de DOS que se ejecutar. Es por ello, que di-
cho mensaje ha de ser claro en su peticin. Es opcional, aunque casi siempre necesario.
Si se prev que en algn momento, los modificadores que introduzca el usuario en lnea de
comando como respuesta a dicho mensaje pueden incluir algn espacio en blanco entre
ellos, habremos de preceder el parmetro Mensaje con un asterisco (*). ste va marcado
como opcional en la sintaxis porque nicamente se utiliza en estos casos.
NOTA: La ltima coma (, ) tras Mensaje, al igual que las dems, es obligatoria. Esta coma se
escribe al final por compatibilidad con antiguas versiones de AutoCAD. En dichas versiones se
inclua un parmetro ms que era un cdigo de retorno interno.
Una vez visto esto, vamos a estudiar algunos ejemplos.
La siguiente lnea en el archivo ACAD. PGP define un nuevo comando FORMATO que permite dar
formato a una unidad de disco desde AutoCAD:
FORMATO, FORMAT, 0, Uni dad a l a que dar f or mat o: ,
NOTA: Como vemos se pueden incluir espacios entre los parmetros para dar claridad a la l-
nea. El espacio tras el mensaje lo que hace es dejar un espacio en la lnea de comandos des-
pus del mensaje; as no se juntar ste con lo que escribamos despus. Con los dems pa-
rmetros no se pueden incluir espacios blancos antes de la siguiente coma (slo despus).
El comando nuevo de AutoCAD 14 ser FORMATO; la llamada a MS-DOS es FORMAT (comando
que da formato a discos); el indicador de bit es 0; el mensaje va al final seguido de la ltima
coma.
El siguiente comando externo elimina el archivo indicado desde AutoCAD:
BORRA, DEL, 4, Ar chi vo que se el i mi nar : ,
Se indica el indicador de bit 4 para que la eliminacin del archivo se ejecute en un segundo
plano no visible (no se muestra la ventana de MS-DOS).
NOTA: La utilizacin de maysculas o minsculas en la sintaxis es indiferente.
Veamos un ltimo ejemplo:
SHELL, , 1, *Comando Si st ema Oper at i vo: ,
Este ejemplo de SHELL es el nico que no ha de llevar un nombre de comando, porque se lo
proporciona el usuario en lnea de comandos tras el mensaje.
De esta forma sencilla podemos definir una serie de comandos externos DOS que nos interese
particularmente para trabajar.
NOTA: Aunque no se incluya un parmetro opcional, hay que especificar la coma correspon-
diente.
NOTA: Como comentario de paso, decir que existe una aplicacin ARX denominada DOS-
LI B14. ARX que se encuentra en el directorio \ BONUS\ CADTOOLS\ en la carpeta donde tengamos
instalado AutoCAD 14. Al cargarla proporciona una serie de funciones que representan todos
los comandos de MS-DOS. Nada del otro mundo.
SIETE.2.2. Reiniciar el archivo ACAD.PGP
Cada vez que editemos y modifiquemos el archivo ACAD. PGP no es necesario volver a abrir un
dibujo nuevo o existente, ni muchsimo menos cerrar y arrancar AutoCAD nuevamente para
comprobar los cambios. Existe un comando de AutoCAD 14 llamado REI NI CI A (REI NI T en
ingls) que permite realizar una reinicializacin de tres parmetros: el puerto de Entra-
da/Salida de la tableta digitalizadora, su archivo y el archivo ACAD. PGP. Si no disponemos de
digitalizador configurado, sus casillas estarn inhabilitadas.
As pues, nicamente debemos escribir el comando, activar la casilla de verificacin Archivo
PGP en el cuadro de dilogo y pulsar el botn Aceptar. ACAD. PGP se carga de nuevo y ya po-
demos comprobar los cambios escribiendo algn nuevo comando definido.
SIETE.2.3. Comandos externos Windows
De parecida forma a los comandos MS-DOS, las aplicaciones Windows pueden ser ejecutadas
desde AutoCAD mediante un comando externo.
La sintaxis de creacin de estas definiciones en ACAD. PGP es:
Nombre_comando, START Solicitud_Windows, 1, [*][Mensaje],
Como se puede observar los parmetros son parecidos a los ya explicados para comandos MS-
DOS. La nica diferencia es que el nombre de la aplicacin Windows (Solicitud_Windows) ha
de ir precedido del comando START de MS-DOS; y que el indicador de bit siempre ha ser 1.
START, como decimos, se refiere al comando START de MS-DOS, no a una definicin START co-
mo comando externo en ACAD. PGP. Por lo que si eliminamos esa definicin (que viene por de-
fecto con AutoCAD 14) siguen funcionando las llamadas a programas Windows. El indicador
de bit 1 hace que cuando se salga del programa llamado, el control se devuelva a AutoCAD.
Cuando existe un mensaje casi siempre habremos de especificar el asterisco. Esto es debido a
que hasta una simple ruta de acceso puede incluir espacios blancos en Windows.
NOTA: Como vemos esta definicin es un caso particular de la anterior personalizada para
aplicaciones Windows.
Veamos algunos ejemplos:
BLOC, START NOTEPAD, 1, *Ar chi vo que edi t ar : ,
CALC, START CALC, 1, ,
PAI NT, START PBRUSH 1, ,
NOTA: Evidentemente, para escribir rdenes externas para AutoCAD, es necesario tener un
mnimo conocimiento de cmo funcionan los comandos de MS-DOS, as como las llamadas a
aplicaciones Windows en su caso.
SIETE.3. ABREVIATURAS A COMANDOS
Adems de poder definir rdenes externas, en el archivo ACAD. PGP se definen tambin las
abreviaturas que utilizamos comnmente en lnea de comandos. As, el poder escribir L en lu-
gar de LI NEA, C en vez de CI RCULO o RR en lugar de recorta, obedece a una lnea de definicin
en el archivo ACAD. PGP.
La sintaxis para la creacin de estas abreviaturas es:
Abreviatura, *Comando_equivalente
As por ejemplo, la abreviatura de la orden LI NEA viene definida as:
L, *LI NEA
Como se ve, se pueden incluir espaciados o tabulaciones tras la coma para mayor legibilidad.
La coma (, ) y el asterisco (*) son obligatorios.
Veamos otros ejemplos que se podran incluir en el archivo:
TX, *TEXTODI N
VM, *VMULT
RT, *REDI BT
RN, *REI NI CI A
Evidentemente, bajo aplicaciones de AutoCAD en ingls, el comando deber ser el correspon-
diente anglosajn.
NOTA: Existe un truco para poder introducir comandos en castellano en una versin de Auto-
CAD en ingls. Precisamente consiste en definir, en el ACAD. PGP, los comandos en castellano
como abreviaturas de los comandos en ingls, por ejemplo: CI RCULO, *CI RCLE; LI M-
PI A, *PURGE; ACERCA, *ABOUT... Esto hace que AutoCAD tenga que procesar un ACAD. PGP muy
grande, pero en un equipo medianamente rpido no se nota falta de velocidad alguna. Ade-
ms, los comandos transparentes los podremos ejecutar en castellano sin ms, colocando el
apstrofo de rigor delante de la equivalencia en castellano, por ejemplo ' ACERCA.
Unos consejos para crear abreviaturas son:
No crear abreviaturas de ms de tres caracteres; no merece la pena.






Procrese indicar la primera letra del comando, a poder ser, si no las dos primeras, las tres
primeras, etctera.
Tambin conviene indicar letras que recuerden al comando.
bviense las letras DD en comandos que abren cuadros de dilogo y las poseen.
Una abreviatura o alias deber acortar el comando en al menos dos caracteres si dicho co-
mando tiene 4 5, y cuatro o cinco en comandos largos.
Los comandos con tecla aceleradora asignada, tecla de funcin o acceso en la barra de es-
tado no necesitan abreviaturas.
Utilizar el guin (- ) para diferenciar entre comandos del mismo nombre que ejecuten rde-
nes de lnea de comandos y de letrero de dilogo.
NOTA: Se pueden indicar tambin en estas abreviaturas comandos definidos mediante Auto-
LISP o ADS, as como rdenes propias del gestor grfico que se est utilizando.
Existe una pequea utilidad denominada AutoCAD Alias Editor que se proporciona con las
rutinas de Bonus. Se puede ejecutar desde el men desplegable (si est cargado) Bo-
nus>Tools>Command Alias Editor..., y el ejecutable (ALI AS. EXE) se puede encontrar en el
directorio \ BONUS\ CADTOOLS\ de la carpeta donde se haya instalado AutoCAD 14.
Esta utilidad propone una interfaz grfica para la creacin de alias o abreviaturas de comandos
y de rdenes externas. Digna de tener en cuenta.
NOTA: En el archivo ACAD. PGP da lo mismo definir antes las abreviaturas que los comandos
externos, que al revs.
SIETE.4. REDEFINICIN DE COMANDOS DE Au-
toCAD
NOTA: Esta ltima parte de este MDULO no tiene nada que ver con el archivo ACAD. PGP,
pero por similitud temtica con las definiciones que en l se encuentran (sobre creacin de
comandos y abreviaturas, como hemos visto) se ha incluido aqu.
Existe la posibilidad de redefinir cualquiera de la rdenes o comandos inherentes de AutoCAD
14, es decir, de proporcionar una definicin totalmente diferente a la actual a un comando y
hacer que al escribir su nombre realice la nueva funcin. Esto es lo que se conoce como rede-
finicin de comandos.
De esta forma, podramos "decirle" a AutoCAD que el comando LI NEA ya no dibuje lneas co-
mo haca, sino que haga lo que a nosotros nos interese. Al escribir la orden en la lnea de co-
mandos, o acceder a ella desde mens, macros o cualquier otro mtodo vlido, el efecto ser
el nuevo aplicado. De la misma manera, podremos eliminar la definicin creada o, tambin,
continuar accediendo a la definicin base del comando aunque est redefinido.
La definicin nueva para un comando de AutoCAD ha de ser un programa AutoLISP o ADS. Es
por ello que aqu explicaremos el mtodo, pero no podremos darle una aplicacin real hasta
dominar, por ejemplo, la programacin en AutoLISP, cosa que se aprender en su momento
(MDULO ONCE).
El proceso de redefinicin de un comando pasa por la anulacin de la definicin actual base.
Para ello se utiliza el comando ANULADEF de AutoCAD (UNDEFI NE para las versiones sajonas).
Al teclear este comando se nos solicitar el nombre del comando de AutoCAD que queremos
redefinir. Una vez introducido dicho nombre, el comando en cuestin estar inoperativo.
Antes o despus de anular una definicin deberemos cargar en memoria (mediante APPLOAD)
el programa que sustituir a la definicin base. Este programa deber contener una funcin de
usuario con el mismo nombre que el comando que redefiniremos. As por ejemplo, para anular
la orden LI NEA con una rutina AutoLISP, sta deber tener una funcin C: LI NEA. De esta ma-
nera, al llamar a LI NEA se ejecutar el programa implcito.
A pesar de todo ello, siempre es posible acceder a la antigua y habitual definicin de un co-
mando de AutoCAD redefinido. Para esto, nicamente deberemos escribir un punto (. ) delan-
te del comando en cuestin a la hora de llamarlo (desde lnea de comandos, mens...), as por
ejemplo:
. LI NEA
NOTA: Esta forma de llamar a comandos, junto con el guin bajo que hace que se acepte en
cualquier versin idiomtica del programa, es la tpica que ha de utilizarse en la creacin de
macros, programas AutoLISP y dems. De esta forma, nos aseguramos la compatibilidad en
cualquier ordenador del mundo; sea cual fuere la versin idiomtica de AutoCAD que se utili-
ce y aunque los comandos en ella estn redefinidos. Por ejemplo: _. LI NE.
Para volver a la definicin habitual de un comando redefinido, utilizaremos la orden REDEFI NE
(igual en ingls) de AutoCAD. A la pregunta del nombre de la orden, introduciremos el nom-
bre de la anulada anteriormente mediante ANULADEF.
A partir de este momento, la orden funciona de forma habitual y el programa que sustitua su
accin queda sin efecto.
NOTA: La manera de comportarse un programa AutoLISP, a la hora de abrir un dibujo nuevo
o de rearrancar AutoCAD que redefine un comando es igual a la de las aplicaciones externas
en general. Por ello, al cerrar AutoCAD la redefinicin se perder, as como puede perderse al
abrir nuevos dibujos si un parmetro de configuracin del programa est establecido con un
determinado valor. Todo ello y las maneras de evitarlo se estudiar oportunamente ms ade-
lante.
SIETE.5. EJEMPLOS PRCTICOS DE COMANDOS
EXTERNOS Y ABREVIATURAS
SIETE.5.1. Comandos externos MS-DOS
CREADI R, MKDI R, 1, *Rut a y nombr e: ,
OCULTAR, ATTRI B +H, 4, Nombr e del ar chi vo: ,
DI RACAD, DI R " C: \ Aut oCAD R14, 0, ,
SMART, C: \ DOS\ STARTDRV, 4, Uni dad: ,
SETI ME, TI ME, 0, Hor a: ,
SIETE.5.2. Comandos externos Windows
ESPACI O, START CLEANMGR, 1, ,
PAI NT, START PBRUSH, 1, *Ar chi vo de mapa de bi t s: ,
I MAGEN, START C: \ ACD\ ACDSEE32, 1, *Di r ect or i o: ,
VB, START C: \ VB\ VB5, 1, *Ar chi vo de pr oyect o: ,
C: , START C: , 1, ,
ACAD, START " C: \ Aut oCAD R14" , 1, ,
SIETE.FIN. EJERCICIOS PROPUESTOS
I. Crear un comando externo MS-DOS que permita comparar todos los archivos . LSP del
directorio de trabajo actual con otro dado por el usuario (comando FC de MS-DOS).
II. Crear un comando externo MS-DOS que elimine todos los archivos actuales en la cola
de impresin (comando PRI NT de MS-DOS con su modificador / T).
III. Crear un comando externo MS-DOS que cambie el dispositivo terminal actual para tra-
bajar desde un terminal remoto (comando CTTY de MS-DOS con su parmetro AUX).
IV. Crear un comando externo MS-DOS que muestre la memoria libre del equipo (comando
MEMde MS-DOS). Ofrecer la posibilidad de presentar la respuesta paginada (filtro | MORE
de MS-DOS).
V. Crear un comando externo MS-DOS que ejecute el archivo de proceso por lotes indicado
por el usuario.
VI. Crear un comando externo MS-DOS que permita abrir la unidad de disco especificada
por el usuario.
VII. Crear un comando externo Windows que ejecute Telnet con una conexin al sis-
tema remoto indicado por el usuario (nombre de archivo TELNET. EXE).
VIII. Crear un comando externo Windows que acceda a un sitio de la WWW indicado
por el usuario mediante Microsoft Internet Explorer (nombre de archivo I EXPLORE. EXE).
IX. Crear un comando externo Windows que ejecute el programa Informacin del sistema
de Microsoft (nombre de archivo MSI NFO32. EXE).
X. Disese un completo grupo de rdenes externas para ejecutar desde AutoCAD todo el
juego de comandos de MS-DOS. Asimismo, crese una batera de comandos externos,
en la forma preferida por el creador, para ejecutar los programas ms tpicos para Win-
dows 95/98. Hgase tambin un nuevo conjunto de abreviaturas o alias que abarque
todo el grupo de comandos de AutoCAD 14.
EJERCICIOS RESUELTOS DEL MDULO SIETE
EJERCICIO I
COMPARA, START FC *. LSP, 1, Ar chi vo que desea compar ar : ,
EJERCICIO II
VAC ACOLA, START PRI NT / T, 0, ,
EJERCICIO III
TERMI NAL, CTTY AUX, 0, ,
EJERCICIO IV
MEMLI BRE, START MEM, 0, ( Escr i bi r | MORE par a pagi naci n o I NTRO) ,
EJERCICIO V
BATCH, , 1, Ar chi vo de pr oceso por l ot es: ,
EJERCICIO VI
UNI DAD, START, 1, Uni dad de di sco: ,
EJERCICIO VII
TELNET, START Tel net , 1, Conexi n: ,
EJERCICIO VIII
WWW, START I Expl or e, 1, ht t p: / / ,
EJERCICIO IX
I NFO, START MSI nf o32, 1, ,
EJERCICIO X
(Ejercicio completo para resolver por tcnicos y/o especialistas).
MDULO OCHO
Fotos, fototecas y archivos de
guin
OCHO.1. LAS FOTOS DE AutoCAD 14
Una foto de AutoCAD no es sino un archivo con extensin . SLD que guarda una fotografa o
instantnea de la visualizacin actual en pantalla grfica. No puede considerarse como un ar-
chivo editable por el programa, ya que no se puede modificar ni imprimir, sino como una vi-
sualizacin destinada a la presentacin de un proyecto o, inclusive, al intercambio con otras
aplicaciones de autoedicin o grficos. Como decimos, AutoCAD slo permite su visualizacin
en pantalla.
La manera de obtener un archivo de foto pasa por la utilizacin del comando SACAFOTO (MSLI -
DE en versiones inglesas del programa). SACAFOTO obtiene pues una instantnea de la visuali-
zacin actual en pantalla, que puede ser un detalle de un dibujo, el dibujo completo, una vista,
etctera, y lo guarda en un archivo con extensin . SLD, cuyo nombre y localizacin solicita al
usuario mediante el letrero de dilogo correspondiente. SACAFOTO produce un redibujado de la
pantalla antes de guardar el archivo en cuestin, por lo que nicamente los objetos visualiza-
dos en dicho momento formarn parte de la fotografa.
Dicha foto podr ser utilizada posteriormente para mostrar en pantalla diversas visualizaciones
de un proyecto, por ejemplo, sin necesidad de recurrir a la apertura de los correspondientes
dibujos . DWG -que puede llevar largo tiempo- ni a la aplicacin de puntos de vista a posteriori
(o definidos anteriormente). El comando para visualizar fotos guardadas es MI RAFOTO (VSLI DE
en ingls), el cual solicita al usuario el archivo y localizacin de la foto que desea mostrar (ha-
br de ser un archivo . SLD) mediante un cuadro de dilogo.
Al mostrar una foto mediante MI RAFOTO, susodicha aparecer en pantalla ocultando el dibujo
de la sesin actual. Esta foto es una especie de pelcula que se interpone entre el dibujo y el
usuario, es decir, el dibujo no desaparece, sino que podramos decir que est "debajo". Po-
dremos dibujar sobre ella cualquier objeto, pero con un simple redibujado desaparecer, man-
tenindose los objetos de dibujo realizados sobre ella (si los hubiera) y apareciendo de nuevo
el dibujo actual. La foto muestra exactamente la visualizacin, proporcin y colocacin de los
objetos a los que se hizo SACAFOTO anteriormente.
Supongamos un ejemplo prctico. Tenemos varios dibujos de un proyecto completo que nece-
sitamos presentar a un superior o en un concurso pblico de diseos. La prctica ilgica del
nefito se correspondera con acarrear todos los archivos . DWG del proyecto (los cuales pueden
ocupar varios megas de espacio en disco), llegar al ordenador de presentacin, copiar o des-
comprimir todos los archivos del proyecto e ir abrindolos uno a uno, mostrando lo que inter-
ese mostrar (con ZOOM, ENCUADRE, PTOVI STA, DDVPOI NT...). Esto puede llevar mucho tiempo de
presentacin, sobre todo si los archivos son extensos y tardan en ser procesados por Auto-
CAD.
Lo lgico sera sacar fotos tranquilamente en nuestra casa o puesto de trabajo, eligiendo vis-
tas, encuadres, acercamientos, y llevar nicamente los archivos . SLD para ir abriendo uno a
uno de manera rpida e interactiva. Los archivos de foto ocupan muy poco y pueden ser pro-
cesados por AutoCAD en pocos segundos bajo plataformas lentas; dcimas de segundo, o
incluso menos, en ordenadores un poco rpidos.
NOTA: Como veremos ms adelante, este proceso se puede automatizar mediante archivos de
guin.
Pero las fotos de AutoCAD tambin pueden servirnos para otros propsitos importantes, ya
que, como se coment en su momento, los mens de imgenes poseen fotos en sus reas de
iconos (como el cuadro de eleccin de patrones de sombreado) y los cuadros de dilogo en
DCL, como veremos, utilizan fotos para representar imgenes. La manera de utilizarlas en es-
tos casos se ha estudiado o se estudiar en su momento.
OCHO.1.1. FOTOS DE MAYOR RENDIMIENTO
Aunque parezca sencilla la obtencin de una foto, la verdad es que puede llegar a complicarse
a la hora de introducirla en un men de imagen o en un cuadro de dilogo en DCL.
Sacar la foto en s no tiene ningn secreto, el problema se presenta cuando dicha foto no se
visualiza como deseamos en un cuadro tan pequeo como puede ser el de un men de imagen
o, como decimos, el rea de imagen de un cuadro DCL. Para ello, existe un truco poco divul-
gado que consiste en lo siguiente.
Una vez comprobado el espacio que disponemos para la inclusin de la foto, la obtencin de
sta pasa por el encogimiento de la ventana de AutoCAD (la ventana general, normalmente).
Esto se consigue haciendo clic en el botn Restaurar (el situado en el centro de los botones de
control de la ventana cuando sta est maximizada, en la barra de ttulo) y adaptando la ven-
tana (arrastrando por los bordes) hasta conseguir un rea grfica de dimensiones similares en
proporcin al cuadro de imagen en cuestin. Una vez conseguido esto, con la imagen bien cen-
trada, procederemos a la obtencin de la foto.
Si esto no se realiza as, puede que sobre un gran trozo de rea grfica alrededor del dibujo
que se desea fotografiar. Al representar luego la foto en su cuadro de imagen, se adapta a l
comprimindose uniformemente, por lo que el resultado final no ser el esperado en absoluto.
Ahora, y antes de nada ms, hemos de asimilar el concepto de fototeca.
OCHO.2. FOTOTECAS O BIBLIOTECAS DE FO-
TOS
Una fototeca o biblioteca de fotos es una agrupacin o conjunto de fotos (. SLD) en un solo
archivo de extensin . SLB (no confundir ambas extensiones). La generacin de fototecas se
realiza mediante un pequeo programa, que funciona bajo MS-DOS y que proporciona Auto-
CAD 14 (versin 2.1), llamado SLIDELIB, cuyo ejecutable puede ser encontrado en el directo-
rio \ SUPPORT\ de AutoCAD 14; dicho ejecutable se llama SLI DELI B. EXE.
La manera de manejar SLIDELIB es bien sencilla. El programa no posee interfaz grfica alguna
y se maneja desde la lnea de comandos de MS-DOS. Su sintaxis es la siguiente:
SLI DELI B fototeca [<archivo_fotos]
donde SLI DELI B es el nombre del ejecutable de la aplicacin en cuestin, fototeca el nombre
de la biblioteca de fotos que se pretende formar y archivo_fotos un parmetro opcional que
dice relacin a un archivo de texto ASCII que contendr los nombres y, en su caso, las rutas
de acceso o caminos de los archivos de fotos que se incluirn en la fototeca. Si especificamos
este ltimo parmetro es obligatorio incluir el carcter de redireccionamiento MS-DOS <, que
permite que SLIDELIB lea el contenido del archivo directamente y cree la fototeca.
Por ejemplo, si utilizamos SLIDELIB as:
SLI DELI B MI FOT
el programa utilitario permitir ir aadiendo el nombre de una foto en cada lnea. Para finalizar
habremos de pulsar CTRL+Z e I NTRO un par de veces. Al final se crear una fototeca continen-
te del grupo de fotos llamada MI FOT. SLB.
Cada nombre de foto que introduzcamos puede ir acompaado de su ruta de acceso si es ne-
cesario. Asimismo, podemos indicar un camino para la creacin de la fototeca, por ejemplo:
SLI DELI B C: \ ACAD\ FOTOS\ MI FOT
sin necesidad de incluir la extensin . SLB, como vemos. Tampoco es necesario incluir la exten-
sin . SLD a la hora de introducir las fotos.
De la misma manera, y para evitar algn error al introducir los nombres de las fotos -ya que
no se puede subsanar-, la prctica habitual aconseja utilizar el segundo mtodo, es decir, la
inclusin del parmetro archivo_fotos (con el carcter <). De esta forma, nicamente ha-
bremos de incluir en un archivo de texto -con cualquier extensin- el nombre y camino (si es
necesario ste) de todas y cada una de las fotos (una foto en cada lnea), para luego llamarlo
desde la lnea de comandos de la forma siguiente, por ejemplo:
SLI DELI B C: \ ACAD\ FOTOS\ MI FOT. SLB<C: \ ACAD\ FOTOS\ MI FOTTX. TXT
Como vemos, disponemos de la posibilidad de incluir ruta de acceso al archivo de texto tam-
bin.
Lo que se suele hacer normalmente, para no liar mucho el proceso, es copiar a un directorio en
el que trabajaremos todas las fotos, el archivo de texto con sus nombres y el ejecutable SLI -
DELI B. EXE. As el contenido de un archivo de texto llamado FOTOS. FOT podra ser:
FOTO1. SLD
FOTO2. SLD
FOTO3. SLD
FOTO4. SLD
FOTO5. SLD
FOTO6. SLD
FOTO7. SLD
FOTO8. SLD
FOTO9. SLD
Y luego, en lnea de comandos de MS-DOS escribiramos simplemente:
SLI DELI B FTECA. SLB<FOTOS. FOT
NOTA: Como siempre resulta lgico escribir las extensiones para no confundirnos, aunque,
como sabemos, no son obligatorias.
Un archivo de biblioteca de fotos ocupa aproximadamente el mismo espacio en disco que la
suma de los espacios que ocupan las fotos, pero al compactarse la informacin en nico archi-
vo, puede ocurrir que en una fototeca con muchos archivos de foto el tamao resultante sea
considerablemente menor.
En cualquier caso, una vez creada la fototeca, se deben eliminar del disco los archivos de foto
(quiz tras haber hecho copias de seguridad), si no la informacin estara duplicada y el uso de
la fototeca no tendra sentido alguno.
NOTA: Existe un pequeo truco para aadir rpidamente el conjunto de los nombres de las
fotos al archivo de texto que luego procesar SLIDELIB. Este truco consiste en escribir en lnea
de comandos MS-DOS, y en el directorio donde estn las fotos:
DI R/ B>FOTOS. FOT
siendo FOTOS. FOT el nombre del archivo ASCII de texto y su extensin. Con DI R/ B invocamos
al comando de MS-DOS DI R con su modificador / B, que hace que en la lista de archivos del
directorio aparezcan nicamente los nombres y extensiones de los mismos (sin nmero de
bytes, fecha de la ltima modificacin, cabecera de volumen, etc.). El carcter MS-DOS de
redireccionamiento > hace que la lista se escriba en un archivo de salida (en este caso), el
cual ser el que le indiquemos. Ingenioso.
OCHO.3. UTILIZACIN DE FOTOS Y FOTOTECAS
OCHO.3.1. En lnea de comandos de AutoCAD
Como ya se ha comentado, la manera de visualizar una foto desde AutoCAD es invocando al
comando MI RAFOTO (VSLI DE). Sin embargo, de esta manera no se pueden visualizar fotos que
se encuentren incluidas en una biblioteca de fotos o fototeca.
OCHO.3.2. En macros
La manera de visualizar fotos desde una macro de un men, de un botn de barra de herra-
mientas o de un archivo de guin (que enseguida veremos) es similar a la utilizada desde la
lnea de rdenes, es decir, con la llamada a MI RAFOTO, pero en este caso es posible visualizar
una foto que se encuentre incluida en una fototeca. La sintaxis para ello es la siguiente:
MI RAFOTO fototeca( foto)
As pues, una macro de botn o men que hiciera visualizar una foto de una fototeca podra
ser:
^C^C_MI RAFOTO C: / MI FOT/ FTECA( FOTO1)
NOTA: Recordar la manera de indicar caminos con la barra normal, no la inversa.
OCHO.3.3. En mens de imgenes
Cmo se utilizan fotos y fototecas en mens de imgenes ya se explic en el MDULO UNO
(vase), nicamente emplazamos en aquel momento al lector a este MDULO para aprender
la creacin de las mismas. La sintaxis nos recuerda a la de la utilizacin en macros, ya que la
llamada a fototecas siempre se realiza de igual forma: con el nombre de la fototeca y el nom-
bre de la foto seguido y entre parntesis. Veamos un par de ejemplos recogidos en un subme-
n, uno con fototeca y otro sin ella:
***I MAGE
**Bl oques
[ Rocaf ot ( f ot o- 1, Lavabo) ] ^C^C_i nser t l avabo
[ f ot o- 23, Ar bust o) ] ^C^C_i nser t ar bust o
. . .
NOTA: La fotos y las fototecas a las que llaman los mens de imagen han de encontrarse obli-
gatoriamente en el directorio \ SUPPORT\ de AutoCAD 14.
OCHO.3.4. En patrones de sombreado. El pro-
grama SlideManager
Como se coment en su momento (vase el MDULO CUATRO) la inclusin de nuestros pro-
pios patrones de sombreado en AutoCAD 14 pasa por la necesidad de introducir la definicin
correspondiente en uno de los archivos de patrones de sombreado de AutoCAD, esto es, y
segn necesidades, en el ACAD. PAT o en el ACADI SO. PAT. Es por ello, que las fotos que repre-
sentan dichos patrones nicamente pueden ser integradas en la fototeca del programa:
ACAD. SLB.
El problema reside en que las posibilidades de SLIDELIB son muy limitadas, ya que no es ca-
paz de aadir o suprimir fotos a y de una biblioteca de fotos ya creada. Es por ello, que si de-
seamos aadir la foto al men de imagen de patrones de sombreado de AutoCAD deberemos
utilizar otro programa capaz de realizar dichas funciones. Existen varios, pero sin duda el ms
utilizado y difundido es el llamado SlideManager -cuyo archivo ejecutable se denomina
SLDMGR. EXE-, el cual no se proporciona con AutoCAD 14, pero puede ser fcilmente conse-
guido en el CD-ROM de cualquier revista especializada o en Internet.
[Haz clic aqu para descargar SlideManager]
SlideManager 5.15a (la versin que utilizaremos para la explicacin) es una pequea aplicacin
basada en MS-DOS que posee una interfaz grfica bastante intuitiva (esta versin est en in-
gls). Aqu no se explicar el programa al completo, sino nicamente sus funciones ms im-
portantes y caractersticas. El usuario que desee profundizar en l no tiene ningn problema
en aprender ms simplemente manejndolo, ya que es muy sencillo.
NOTA: Si al correr el programa da un error diciendo que no encuentra el archivo de ayuda, con
un simple I NTRO podremos entrar y el programa funcionar al 100%. Algunas distribuciones
obvian este archivo.
El mtodo de trabajo para aadir una foto a una fototeca existente es el siguiente (se trabaja
con las teclas del cursor y/o con las teclas rpidas indicadas en los mens desplegables en otro
color y con la tecla I NTRO):
1. Desde el men File se elige Open Library para abrir la fototeca deseada.
2. Se recorren los directorios hasta encontrar la biblioteca en cuestin, la cual se designa-
r y aceptar con I NTRO. En el cuadro Current Settings y tras la etiqueta Selected Li-
brary aparecer el nombre y ruta de acceso de la fototeca.
3. Desde el men File se escoge ahora Open Silde, para abrir la foto que queremos incluir
en la fototeca ya seleccionada.
4. Se recorren los directorios hasta encontrar la foto en cuestin, la cual se designar y
aceptar con I NTRO. En el cuadro Current Settings y tras la etiqueta Selected Slide apa-
recer el nombre y ruta de acceso de la foto.
5. Para aadir la foto a la fototeca, se elige Add Slide del men Library. Si no hay ningn
problema, la foto quedar aadida a la biblioteca de fotos.
El mtodo para eliminar una foto de una biblioteca de fotos existente es:
1. Desde el men File elegir Open Library para abrir la fototeca.
2. Desde el mismo men File escoger Select Library Entry, para as seleccionar una de la
entradas (fotos) de la fototeca.
3. Aparece un nuevo men de persiana a la derecha representando todos y cada uno de
los nombres de las fotos de la fototeca. Elegimos uno pulsando I NTRO.
4. En el cuadro Current Settings habr aparecido tanto la fototeca como la foto seleccio-
nada.
5. Elegiremos ahora Delete Entry del men Library; la foto quedar eliminada de la fotote-
ca.
Como vemos, el programa utilitario es bastante sencillo de manejar, slo hemos de desplazar-
nos con los cursores (o teclas rpidas) y seleccionar con I NTRO.
Existen otras posibilidades de SlideManager; comentaremos las ms importantes:
Change Directory (men File) cambia el directorio por defecto del programa. Se utiliza
para situarnos en un directorio y no tener que andar buscando las fotos continuamente.
En el cuadro Current Settings, tras la etiqueta Default Dir aparecer el directorio selec-
cionado.
Close Slide y Close Library (men File) cierran la foto y la fototeca actual respectiva-
mente.
Update Entry (men Library) actualiza una foto ya incluida en la fototeca existente.
Extract Entry (men Library) extrae una foto de la fototeca, pero no la borra como De-
lete Entry, sino que la convierte en un archivo unitario de foto . SLD.
Explode Library (men Library) descompone una fototeca, obteniendo los consiguientes
archivos unitarios de foto . SLD de cada una de las fotos incluidas.
Merge Libraries (men Library) junta varias fototecas en una sola.
List Library (men Library) lista el contenido de una fototeca (el nombre de los archivos
de foto incluidos), ya sea en pantalla o en impresora, segn elijamos.
Browse Library (men Library) permite visualizar todas las fotos de una fototeca una a
una, recorrindolas con los cursores o las teclas Re Pg y Av Pg.
Show Slide (men Display) muestra la foto seleccionada.
Desde el men Output se pueden elegir distintas salidas para la foto: impresora, archi-
vo . DXF, etctera.
Desde el men Settings se configuran distintos parmetros del sistema para optimizar
el trabajo con SlideManager: impresora, puerto en paralelo LPT, colores, visualizacin...
La opcin de men Quit (no se despliega) sale de SlideManager.
El programa SlideManager tambin puede ser utilizado desde la lnea de comandos de MS-
DOS, aadiendo al nombre del ejecutable distintos parmetros (es ms sencillo ejecutarlo con
interfaz). A continuacin se muestra un lista con las ms importante opciones:
Parmetro Descripcin
A
Aadir una foto a una fototeca
D
Eliminar una foto de una fototeca
E
Extraer una foto de una fototeca
L
Listar fotos de una fototeca
M
Juntar fototecas
U
Actualizar una foto de una fototeca
X
Descomponer una fototeca
OCHO.4. ARCHIVOS DE GUIN
Un archivo de guin de AutoCAD, tambin llamado script, es un archivo de texto ASCII que
contiene una secuencia de comandos del programa. Al ser corrido, los comandos se van ejecu-
tando uno por uno, al igual que lo haramos en lnea de comandos. Son pues archivos de au-
tomatizacin de procesos, con extensin . SCR.
Hemos incluido la explicacin de estos scripts en este MDULO debido a su relacin casi ex-
clusiva con los archivos de foto y fototecas. Y es que los archivos de guin apenas se utilizan,
excepto para presentaciones de fotos en pantalla.
Decamos al comienzo de este MDULO que para realizar una presentacin de un proyecto, lo
lgico era obtener archivos de foto mediante SACAFOTO para luego visualizarlos uno por uno
con MI RAFOTO. An as, decamos, puede resultar un tanto engorroso ir abriendo una por una
todas las fotos en AutoCAD. Para automatizar este proceso podemos utilizar un archivo de
guin.
Imaginemos un ejemplo. Deseamos mostrar en una presentacin una serie de fotos de Auto-
CAD que hemos obtenido de unas cuantas vistas de un dibujo. Para ello, y con las fotos saca-
das, escribiremos un archivo de texto en cualquier editor ASCII (cuidando guardarlo como ar-
chivo de texto ASCII), as:
MI RAFOTO C: / FOTOS/ FOTO1
MI RAFOTO C: / FOTOS/ FOTO2
MI RAFOTO C: / FOTOS/ FOTO3
MI RAFOTO C: / FOTOS/ FOTO4- 1
MI RAFOTO C: / FOTOS/ FOTO4- 2
MI RAFOTO C: / FOTOS/ FOTO5
MI RAFOTO C: / FOTOS/ FOTO6
Este archivo lo guardamos con el nombre PRESEN. SCR (siempre esta extensin).
Si las fotos estuvieran dentro de un fototeca, la manera de llamarlas sera la indicada para
macros en la seccin OCHO.3.2.. As, por ejemplo:
MI RAFOTO C: / FOTOS/ FOTECA( FOTO1)
MI RAFOTO C: / FOTOS/ FOTECA( FOTO2)
MI RAFOTO C: / FOTOS/ FOTECA( FOTO3)
MI RAFOTO C: / FOTOS/ FOTECA( FOTO4- 1)
MI RAFOTO C: / FOTOS/ FOTECA( FOTO4- 2)
MI RAFOTO C: / FOTOS/ FOTECA( FOTO5)
MI RAFOTO C: / FOTOS/ FOTECA( FOTO6)
NOTA: Si el programa AutoCAD donde se ejecutar el guin est en ingls, deberemos escri-
bir los comandos en ingls (en este ejemplo VSLI DE). Tambin podemos utilizar la notacin
internacional (_) y la notacin por si los comandos estuvieran redefinidos (. ).
Como vemos, esto nos recuerda mucho a las macros de botones o mens. La ms importante
diferencia estriba en que estos archivos son verdaderos scripts de AutoCAD, es decir, un con-
junto de rdenes que se ejecutan de forma continuada (al igual que los archivos de procesa-
miento por lotes . BAT de MS-DOS o los scripts de UNIX), pero no son macros. Por ello, aqu no
podemos incluir caracteres de punto y coma para simular un I NTRO, por ejemplo; el I NTRO se
corresponde aqu solamente con el espacio blanco. Tampoco podemos introducir contrabarras
para solicitar datos al usuario ni otras tantas ventajas de las macros.
En los archivos de guin todo ha de ir seguido como si de la lnea de comandos de AutoCAD
se tratara, o ms o menos.
Tambin nos percatamos de la utilizacin de la barra inclinada normal (/ ) en lugar de la con-
trabarra o barra inversa (\ ) para separar directorios. As mismo, al igual que en todos los pro-
gramas Windows, podemos introducir las rutas de acceso al estilo MS-DOS:
C: / Ar chi v~1/ Cabece~1. sl d
o utilizando nombres largos de Windows, con comillas dobles:
" C: / Ar chi vos de pr ogr ama/ Cabecer o del pr t i co. sl d"
Como podemos observar tambin, la inclusin de la extensin . SLD de archivo de foto no es
necesaria (aunque s conveniente).
Como ltimo detalle inicial, decir que al final del archivo, tras la ltima letra de la ltima lnea
debe introducirse un retorno de carro o I NTRO, para que todo funcione correctamente. Esto lo
hemos visto en la mayora de archivos ASCII para AutoCAD que influyen en aspectos de per-
sonalizacin.
OCHO.4.1. Ejecutando archivos scripts
La manera de ejecutar un archivo de guin es mediante el comando SCRI PT (igual en ingls)
de AutoCAD (la abreviatura por defecto es SR en castellano y SCR en ingls). Tambin se pue-
de escoger la opcin de men Herr.>Ejecutar guin.... En ambos casos se abre un cuadro de
dilogo de gestin de archivos para buscar y seleccionar el archivo que deseamos ejecutar.
Si ejecutamos alguno de los ejemplos propuestos, veremos que las fotos se van mostrando
una por una, pero cada una permanece muy poco tiempo en pantalla; apenas se puede seguir
una visualizacin coherente. Para remediar esto se recurre al siguiente comando de AutoCAD.
OCHO.4.2. Retardos con RETARDA
El comando RETARDA (DELAY en ingls) de AutoCAD se utiliza nica y exclusivamente para
introducir una pausa o retardo en la ejecucin de un archivo de guin, con una duracin espe-
cificada.
Basta introducir un nmero tras RETARDA, especificando el retardo en milisegundos, para pro-
vocar una pausa antes de ejecutar el comando siguiente del guin. En nuestro primer ejemplo
podramos hacer as:
MI RAFOTO C: / FOTOS/ FOTO1
RETARDA 2000
MI RAFOTO C: / FOTOS/ FOTO2
RETARDA 2000
MI RAFOTO C: / FOTOS/ FOTO3
RETARDA 2000
MI RAFOTO C: / FOTOS/ FOTO4- 1
RETARDA 2000
MI RAFOTO C: / FOTOS/ FOTO4- 2
RETARDA 2000
MI RAFOTO C: / FOTOS/ FOTO5
RETARDA 2000
MI RAFOTO C: / FOTOS/ FOTO6
Lo que provocara una pausa de dos segundos (2000 milisegundos) tras mostrar cada foto y
antes de mostrar la anterior. Esto hace que cada una de ellas permanezca en pantalla 2 se-
gundos (excepto la ltima que se queda fija al final).
El nmero mximo de retardo que se puede incluir es 32767 (equivalente a casi 33 segundos).
OCHO.4.3. Repeticiones con RSCRIPT
El comando RSCRI PT se utiliza para volver a iniciar la ejecucin del ltimo archivo de guin
ejecutado. RSCRI PT se puede utilizar desde la lnea de comandos de AutoCAD, provocando un
reinicio del ltimo script ejecutado -sin necesidad de volver a buscarlo-. Sin embargo, lo ms
comn es utilizarlo dentro del propio archivo de guin. De esta manera, se provoca que al lle-
gar al final se produzca un bucle al inicio, repitindose indefinidamente el guin de forma au-
tomtica. En estos casos, evidentemente RSCRI PT deber colocarse al final (en la ltima lnea)
del archivo de guin. De cualquier otra forma, se producira una vuelta al comienzo en un pun-
to medio, evitando que se ejecuten los comandos que se encuentran por debajo.
En nuestro ejemplo anterior, podramos hacer que las fotos se muestren continuamente y que,
al llegar al final, se comience de nuevo por el principio. As:
MI RAFOTO C: / FOTOS/ FOTO1
RETARDA 2000
MI RAFOTO C: / FOTOS/ FOTO2
RETARDA 2000
MI RAFOTO C: / FOTOS/ FOTO3
RETARDA 2000
MI RAFOTO C: / FOTOS/ FOTO4- 1
RETARDA 2000
MI RAFOTO C: / FOTOS/ FOTO4- 2
RETARDA 2000
MI RAFOTO C: / FOTOS/ FOTO5
RETARDA 2000
MI RAFOTO C: / FOTOS/ FOTO6
RETARDA 2000
RSCRI PT
Ntese que se ha incluido un nuevo comando RETARDA, para evitar el paso repentino de la l-
tima foto a la primera (al igual que en los dems casos intermedios).
La manera de detener un guin en ejecucin, sea por su condicin de infinito (como acabamos
de ver) sea por apetencia del usuario, es mediante la pulsacin de la tecla ESC o de la tecla
RETROCESO. An as, el mismo archivo de guin detenido puede ser reanudado. Para ello se
utiliza el siguiente comando de AutoCAD.
OCHO.4.4. Reanudar con REANUDA
Este comando permite continuar con la ejecucin de un archivo de guin despus de haber
sido interrumpido mediante la tecla ESC o la tecla RETROCESO. REANUDA se utiliza exclusivamen-
te en lnea de comandos.
Tambin se puede producir una interrupcin cuando existe algn error en la secuencia de co-
mandos del archivo. En este caso, el guin se interrumpe involuntariamente en el punto del
error. El usuario subsana dicho error introduciendo la opcin o dato correcto para teclear des-
pus REANUDA y retomar la ejecucin del script en el punto inmediatamente posterior a donde
se produjo el error.
Este puede ser un procedimiento til de depuracin de archivos de guin, es decir, para locali-
zar posibles errores y continuar la ejecucin del guin, corrigiendo al final en el archivo todos
los errores de una vez.
OCHO.4.5. Carga de fotos antes de su visuali-
zacin
En estos casos especiales en los que los guiones muestran fotos en pantalla (que son prcti-
camente los nicos en los que se utilizan estos archivos), puede que se produzca un ligero re-
traso desde que una foto desaparece de la pantalla hasta que se carga y visualiza la siguiente.
Para solucionar esto, AutoCAD ofrece la posibilidad de escribir un carcter asterisco (*) antes
del nombre de la foto o de su ruta -o de la fototeca o de su ruta, en su caso-. De esta manera,
la siguiente foto se carga mientras se visualiza la actual, producindose un ahorro de tiempo.
El script que estamos utilizando como ejemplo se escribira as:
MI RAFOTO C: / FOTOS/ FOTO1
MI RAFOTO *C: / FOTOS/ FOTO2
RETARDA 2000
MI RAFOTO
MI RAFOTO *C: / FOTOS/ FOTO3
RETARDA 2000
MI RAFOTO
MI RAFOTO *C: / FOTOS/ FOTO4- 1
RETARDA 2000
MI RAFOTO
MI RAFOTO *C: / FOTOS/ FOTO4- 2
RETARDA 2000
MI RAFOTO
MI RAFOTO *C: / FOTOS/ FOTO5
RETARDA 2000
MI RAFOTO
MI RAFOTO *C: / FOTOS/ FOTO6
RETARDA 2000
MI RAFOTO
RETARDA 2000
RSCRI PT
La explicacin es la siguiente. Se visualiza FOTO1 y a la vez se carga en memoria FOTO2. Se
produce el retardo de dos segundos y con el comando MI RAFOTO sin nombre de archivo se vi-
sualiza la ltima foto cargada, es decir FOTO2; pero a la vez, se carga en memoria FOTO3. Se
produce el retardo y se visualiza dicha FOTO3; a la vez se carga FOTO4, y as sucesivamente. El
nico lapso de tiempo en blanco se puede notar nicamente entre la ltima y la primera de las
fotos, evidentemente.
NOTA: Inexplicablemente los nombres largos tipo Windows no se pueden utilizar con el carc-
ter asterisco en estos casos. Habr que utilizar los truncados MS-DOS: los seis primeros carac-
teres, el carcter de tilde ~ (ALT+126) y un nmero de orden dependiendo de si el nombre
truncado existe ya o no. Vaya usted a saber.
OCHO.4.6. Otros archivos de guin
Aunque, como ya se ha comentado, la aplicacin principal de los archivos de guin se restringe
a la visualizacin de fotos en cadena, estos archivos pueden contener cualquier comando de
AutoCAD 14, formando una secuencia que ejecute diversas operaciones como, por ejemplo,
limpiar todos los bloques de un dibujo. Evidentemente, desde que existe la creacin de macros
en botones o mens, estos scripts son mucho menos utilizados.
De todos modos, sirviendo de ejemplo podemos ver el siguiente script que crea un efecto sim-
ptico en pantalla:
NOTA IMPORTANTE DE SINTAXIS: Es importantsimo colocar bien los espacios blancos que
representan I NTRO y procurar no confundirse, ya que aqu no se puede utilizar el punto y coma
para realizar la misma accin. A continuacin los espacios se representan por el smbolo pa-
ra su fcil localizacin; se representa el retorno de carro con el smbolo .
DESPLAZAU3, 0
RSCRI PT
Antes de ejecutarlo dibujemos un objeto en pantalla (crculo, lnea...). Veremos como se des-
plaza hacia la derecha simulando un movimiento continuo. Si dibujamos varios objetos, prime-
ro se "marchar" el ltimo dibujado y, cuando desaparezca de pantalla, ocurrir lo mismo con
el anterior; y as sucesivamente. Este efecto es debido a que el filtro de designacin ULTI MO
slo captura el ltimo dibujado pero que se encuentre visible en pantalla. En el momento en
que ya no est, y como el script se repite, se coge como ltimo el anterior dibujado que est
visible.
Como podemos comprobar, cualquier comando de AutoCAD 14 se puede incluir en un archivo
de guin; o mejor digamos casi cualquiera, por lo que pueda pasar... Incluso el propio coman-
do SCRI PT para ejecutar guiones puede se incluido en un archivo de guin. De esta manera se
puede llamar a un archivo script desde otro. Cuando esto ocurra, el lugar correcto para incluir-
lo ser la ltima lnea el archivo, ya que cuando el control de la secuencia de comandos pasa al
segundo guin, ya no es posible volver atrs, es decir, al terminar la ejecucin de este segun-
do guin no se devuelve el control al primero o padre (podramos llamarlo as).
Como ltimo apunte final, decir que todos los comandos vistos en esta seccin (SCRI PT, RE-
TARDA, RSCRI PT y REANUDA) son transparentes, por lo que con cualquier comando en ejecucin,
y mediante la antecesin del apstrofo (' ), se puede utilizar cualquiera de estas tcnicas de
creacin de archivos de guin.
NOTA: La escritura de maysculas o minsculas en archivos de guin es irrelevante.
NOTA: Una variable de sistema que puede venir bien a la hora de crear macros (mens, boto-
nes y/o guiones) es EXPERT. EXPERT controla la eliminacin de determinadas preguntas para
que no se visualicen durante la ejecucin de un comando. En el APNDI CE B, en la lista de
variables de sistema, se pueden consultar todos los valores posibles de esta variable.
NOTA: Como veremos en su momento, en los archivos de guin tambin pueden ser incluidas
expresiones DIESEL y/o AutoLISP.
OCHO.4.7. Ejecucin de guiones en el arranque
Si se desea ejecutar automticamente un archivo de guin en el momento de entrar en Auto-
CAD 14, se debe emplear el parmetro de arranque / b. As, para ejecutar un script que se
encuentre en un directorio de soporte y se llame I NI C. SCR al iniciar el programa, en las pro-
piedades del acceso directo a AutoCAD (botn derecho en el icono), en la pestaa Acceso di-
recto, en la casilla Destino:, habra que escribir (se supone directorio de instalacin del pro-
grama por defecto):
" C: \ Ar chi vos de pr ogr ama\ Aut oCAD R14\ acad. exe" / b I ni c
NOTA: Los parmetros de arranque de AutoCAD 14 se estudian todos ellos en el APNDI CE
H de este curso.
OCHO.5. EJEMPLOS PRCTICOS DE ARCHIVOS
DE
GUIN
NOTA: Se emplea la misma sintaxis que en el ejemplo propuesto anteriormente: espacios re-
presentados por el smbolo y localizacin de un I NTRO con el smbolo .
OCHO.5.1. Ejemplo 1
col or r oj o
pol 170, 160170, 280340, 280340, 160c
r et ar da2000
despl azau- 45, - 72
r et ar da2000
edi t pol ug3
OCHO.5.2. Ejemplo 2
_open_yc: / mi sdoc~1/ aut ocad/ pr oyec~1/ pasador 1. dwg
_audi t _y
_pur ge_a*_n
_z_e
NOTAS INTERESANTES:
1. Como se puede apreciar, disponemos aqu tambin de la posibilidad de crear guiones
factibles de ser ejecutados en cualquier versin idiomtica de AutoCAD.
2. Normalmente en macros -y tambin en programacin- no es necesario incluir el guin
que llama a la orden basada en lnea de comandos (aunque para eso se inventaron y
crearon), ya que al ser ejecutado exteriormente lo hace directamente sin cuadro de di-
logo. En el caso de OPEN (ABRE) no existe el mismo comando con guin, sino que hay
que establecer a 0 la variable de sistema FI LEDI A.
OCHO.FIN. EJERCICIOS PROPUESTOS
I. Ser capaz de visualizar las fotos en los mens de imagen de los ejercicios propuestos
del MDULO UNO que as lo requieran.
II. Ser capaz de introducir la fotos necesarias (y despus visualizarlas) en el archivo co-
rrespondiente de AutoCAD 14, de los patrones de sombreado propuestos en el M-
DULO CUATRO.
III. Crear un archivo de guin que dibuje dos objetos en pantalla y, a continuacin, aplique
las propiedades del ltimo dibujado al primero.
IV. Crear un archivo de guin que dibuje una lnea en pantalla y alinee el SCP con respecto
a ella.
V. Hgase un archivo de guin que presente en pantalla un cubo de lado 50 en perspectiva
isomtrica.
VI. Disese un conjunto de archivos de guin o scripts que rentabilicen el trabajo en un
estudio de diseo de interiores.

EJERCICIOS RESUELTOS DEL MDULO OCHO
NOTA: Se emplea la misma sintaxis que en los ejemplos del MDULO OCHO: espacios repre-
sentados por el smbolo y localizacin de un I NTRO con el smbolo .
EJERCICIO I
(...)
EJERCICIO II
(...)
EJERCICIO III
ci r cl e 100, 100 10
sel ect l
l i ne 10, 125 250, 10
mat chpr op l p
EJERCICIO IV
l i ne 140, 172 260, 57
ucs ob l
EJERCICIO V
box 10, 10, 10 c 50
vpoi nt non *1, - 1, 1
EJERCICIO VI
(Ejercicio completo para resolver por tcnicos y/o especialistas).

Autor: J onathan Prstamo Rodrguez
Para: La Web del Programador

PARTE SEGUNDA
MDULO NUEVE
Lenguaje DIESEL y personalizacin
de la lnea de estado
NUEVE.1. INTRODUCCIN
En AutoCAD, adems todo lo visto hasta ahora, es posible personalizar y modificar la lnea de
estado. Nos da la impresin, visto lo visto y en espera de lo que queda por ver, que AutoCAD
14 no tiene casi ningn aspecto que no pueda ser personalizado; y efectivamente as es: los
mens desplegables y contextuales, el men de pantalla, las barras de herramientas, la accin
de los botones del dispositivo sealador en cuestin, los tipos de lnea, los patrones de som-
breado, las formas y las fuentes, los archivos de ayuda, los comandos externos, las abreviatu-
ras e incluso los propios comandos inherentes al programa pueden ser editados, modificados o
personalizados sin mayor problema, como hemos visto. Pues ahora tambin la lnea de estado.
Y an as, la verdadera potencia de personalizacin vendr con la creacin de letreros de di-
logo en DCL y de programas utilitarios en AutoLISP o VBA.
La lnea de estado, en los programas basados en Windows, es la que se encuentra ocupando la
parte inferior de la pantalla. Adems slo suele ocupar una lnea, de ah su nombre. Esta rea
de pantalla proporciona informacin al usuario acerca de los parmetros y condiciones del pro-
grama.
En AutoCAD 14, la lnea de estado muestra lo siguiente, de izquierda a derecha:
- Coordenadas del cursor, que adems es botn de conmutacin entre coordenadas rectangu-
lares absolutas/polares relativas/Desactivado.
- Forzado de cursor, botn de Activado/Desactivado.
- Rejilla, botn de Activado/Desactivado.
- Modo Orto, botn de Activado/Desactivado.
- Modos de referencia, botn de Activado/Desactivado. Si no hay modos prefijados, el botn
accede al comando REFENT (OSNAP en ingls) para fijar modos.
- Espacio Modelo Flotante/Papel, en entorno Espacio Papel.
- Variable TI LEMODE, cambia entre Espacio Modelo Mosaico y Espacio Papel/Modelo Flotante.
Pues bien, esta el la lnea de estado por defecto, pero nosotros podemos personalizarla aa-
dindole elementos por la izquierda. Para ello utilizamos la variable de AutoCAD MODEMACRO.
NUEVE.2. LA VARIABLE MODEMACRO
La variable de sistema de AutoCAD MODEMACRO almacena una cadena de texto, la cual se re-
fiere a la configuracin de la lnea de estado. Por defecto est vaca, lo cual indica que la lnea
de estado mantiene la configuracin inicial bsica (la anteriormente descrita).
Esta configuracin bsica no se puede modificar inicialmente, sino aadirle elementos por su
izquierda. Para ello editaremos la variable MODEMACRO -como se sabr, esto se puede hacer
escribiendo directamente su nombre o con el comando MODI VAR de AutoCAD (SETVAR en in-
gls)- y le daremos un valor nuevo.
Una forma elemental de personalizar la lnea de estado es aadiendo un texto fijo a la izquier-
da. Para ello, dicho texto lo habremos de introducir en la variable MODEMACRO. Por ejemplo,
podemos editar la variable y escribir:
Per sonal i zaci n de l a l nea de est ado
Ahora, a la izquierda de las coordenadas (en una casilla semejante) aparecer el texto fijo
Per sonal i zaci n de l a l nea de est ado.
En principio la longitud de una cadena para MODEMACRO es de 255 caracteres, aunque mediante
concatenacin de cadenas en AutoLISP se pueden introducir ms, como veremos en su mo-
mento. Sin embargo, y lo estudiaremos enseguida, todo lo que se introduzca en esta variable
no quiere decir que vaya a ser mostrado en la lnea de comandos. As que, el texto que apare-
cer no tiene longitud de cadena fija, sino la impuesta quiz por el gestor grfico configurado y
las dimensiones del monitor, as como la configuracin de fuentes y dems. De todas formas,
si la cadena es muy larga, las casillas por defecto irn desapareciendo por la derecha a medida
que crece nuestra propia configuracin por la izquierda.
Para introducir una cadena nula habremos de escribir un punto (. ) ms un I NTRO tras la solici-
tud de MODEMACRO.
La variable MODEMACRO no se guarda, y al comenzar un nuevo dibujo, abrir uno existente o
arrancar AutoCAD se establece como nula. Por ello, las definiciones que se realicen en ella se
perdern en dichos casos. Para que esto no ocurra habremos de recurrir a mtodos del tipo de
la funcin S: : STARTUP o del archivo ACAD. LSP. Todo esto se explica claramente en la seccin
ONCE.15.1. del MDULO ONCE sobre programacin en AutoLISP.
Como decimos, no todo lo que se introduce en MODEMACRO ha de ser texto fijo, sino que pode-
mos construir cadenas que extraigan valores de variables y se actualicen en consecuencia, por
ejemplo; u otras que segn qu condiciones, muestren una cosa u otra. Ello se consigue con la
definicin de MODEMACRO mediante un lenguaje basado en cadenas de texto llamado DIESEL.
NUEVE.3. EL LENGUAJE DIESEL
El leguaje DIESEL (Direct Interpretively Evaluated String Expression Language) es un lenguaje
de cadenas de texto que se interpreta y evala por AutoCAD directamente. En este leguaje
todas las expresiones son cadenas de texto, y los resultados tambin lo son.
La sintaxis general de las expresiones DIESEL es la siguiente:
$( funcin, argumento1, argumento2, ...)
Como podemos apreciar es un lenguaje basado en signos de dlar $, parntesis ( ) y comas
, . El carcter $ especifica que se trata de una expresin DIESEL, es un identificador especial
para ello. A continuacin ir siempre un parntesis de apertura y el nombre de la funcin DIE-
SEL en cuestin. Tras una coma, toda la serie de argumentos necesitados por la funcin, sepa-
rados todos ellos por comas tambin. Estos argumentos pueden ser valores, cadenas u otras
expresiones DIESEL. Para finalizar, un parntesis de cierre acaba la expresin.
NUEVE.3.1. Catlogo de funciones DIESEL
Veremos ahora el juego de funciones DIESEL de las que disponemos para construir expresio-
nes. En ellas se indicar el nombre de la funcin en maysculas y los argumentos en cursiva y
minsculas. Los argumentos entre corchetes cursivos definen parmetros opcionales. Estn
ordenadas alfabticamente.
NOTA: El nmero mximo de parmetros o argumentos admitidos en una funcin DIESEL es
de diez, incluyendo el propio nombre de la funcin.
$( +, valor1 [, valor2, ... valor9])
Efecta la suma de todos los valores indicados.
$( - , valor1 [, valor2, ... valor9])
Resta del primer valor indicado, todos los dems.
$( *, valor1 [, valor2, ... valor9])
Efecta el producto de todos los valores indicados.
$( / , valor1 [, valor2, ... valor9])
Divide el primer valor indicado entre todos los dems.
$( =, valor1, valor2)
Compara ambos valores indicados. Si los valores son iguales el resultado es 1 (la condicin es
cierta); en caso contrario el resultado es 0 (la condicin es falsa).
$( <, valor1, valor2)
Compara ambos valores indicados. Si el valor primero es menor que el segundo el resultado es
1 (la condicin es cierta); en caso contrario el resultado es 0 (la condicin es falsa).
$( >, valor1, valor2)
Compara ambos valores indicados. Si el valor primero es mayor que el segundo el resultado es
1 (la condicin es cierta); en caso contrario el resultado es 0 (la condicin es falsa).
$( ! =, valor1, valor2)
Compara ambos valores indicados. Si los valores son diferentes el resultado es 1 (la condicin
es cierta); en caso contrario el resultado es 0 (la condicin es falsa).
$( <=, valor1, valor2)
Compara ambos valores indicados. Si el valor primero es menor o igual que el segundo el re-
sultado es 1 (la condicin es cierta); en caso contrario el resultado es 0 (la condicin es falsa).
$( >=, valor1, valor2)
Compara ambos valores indicados. Si el valor primero es mayor o igual que el segundo el re-
sultado es 1 (la condicin es cierta); en caso contrario el resultado es 0 (la condicin es falsa).
$( AND, valor1 [, valor2, ... valor9])
Operador lgico Y.
$( ANGTOS, valor [, modo, precisin])
El valor es editado como ngulo (lo convierte en) en el formato indicado en modo y con la pre-
cisin indicada en precisin. Los valores de modo posibles son:
Valor ------- Descripcin
-----------------------------------------------------------
0 ----------- Grados sexagesimales
1 ----------- Grados/minutos/segundos
2 ----------- Grados centesimales
3 ----------- Radianes
4 ----------- Orientacin geogrfica (N, S, E u O)
$( EDTI ME, hora, formato)
La hora o fecha indicada se edita con el formato indicado en formato. Los posibles valores pa-
ra formato son (se proporciona un ejemplo de devolucin de la funcin):
Valor ------- Tipo ---------------------- Ejemplo de salida
-----------------------------------------------------------------------
D - - - - - - - - - da --------------------------- 8
DD - - - - - - - - da --------------------------- 08
DDD - - - - - - - da --------------------------- J ue
DDDD - - - - - - da --------------------------- J ueves
M - - - - - - - - - mes ------------------------- 7
MO - - - - - - - - mes ------------------------- 07
MON ---------- mes ------------------------- J ul
MONTH - - - - - mes ------------------------- J ul i o
YY - - - - - - - - ao -------------------------- 99
YYYY - - - - - - ao -------------------------- 1999
H - - - - - - - - - horas ------------------------ 4
HH - - - - - - - - horas ------------------------ 04
MM - - - - - - - - minutos ---------------------- 53
SS - - - - - - - - segundos -------------------- 17
MSEC - - - - - - milsimas de segundo ------ 506
AM/ PM - - - - - maana/tarde -------------- AM
am/ pm- - - - - maana/tarde -------------- am
A/ P - - - - - - - maana/tarde -------------- A
a/ p - - - - - - - maana/tarde -------------- a
La fecha y la hora actual se extraen de la variable DATE de AutoCAD. Esta variable, si inten-
tamos mostrar su resultado directamente en la lnea de estado -con la funcin GETVAR que ve-
remos enseguida- (o guardarlo en una variable desde AutoLISP), devolver un nmero real.
Para convertirlo necesitamos utilizar la funcin EDTI ME.
$( EQ, valor1, valor2)
Compara si ambas cadenas son idnticas. Si lo son devuelve 1 (condicin verdadera), si no
devuelve 0 (condicin falsa).
$( EVAL, cadena)
La cadena indicada es evaluada por DIESEL, obteniendo el resultado correspondiente de esa
evaluacin.
$( FI X, valor)
Devuelve la parte entera del valor especificado.
$( GETENV, variable_entorno)
Extrae el valor de la variable de entorno indicada.
$( GETVAR, variable_sistema)
Extrae el valor de la variable de sistema de AutoCAD indicada.
$( I F, condicin, accin_se_cumple [,accin_no_se_cumple])
Evala la expresin indicada en condicin y, segn sea cierta (1) o no (0), efecta las accio-
nes indicadas.
$( I NDEX, ndice, cadena)
Si cadena es una expresin DIESEL con elementos separados por comas, esta funcin extrae el
elemento indicado segn el orden en ndice. El primer elemento tiene ndice 0, el segundo 1,
el tercero 2, y as sucesivamente.
$( LI NELEN)
Extrae el nmero mximo de caracteres que se pueden visualizar en la actual lnea de estado
de la pantalla grfica. Se suele utilizar antes de modificar MODEMACRO, por ejemplo.
$( NTH, ndice, argumento1 [, argumento2,... argumento8])
Evala el argumento cuyo ndice se indica y obtiene su resultado. El primer argumento tiene
ndice 0, el segundo 1, el tercero 2, y as sucesivamente.
$( OR, valor1 [, valor2,... valor9])
Operador lgico O.
$( RTOS, valor [, modo, precisin])
El valor es editado como nmero real (lo convierte en) en el formato indicado en modo y con la
precisin indicada en precisin. Los valores de modo posibles son:
Valor ------- Descripcin
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1 ----------- Cientfico
2 ----------- Decimal
3 ----------- Pies y pulgadas I (fraccin decimal)
4 ----------- Pies y pulgadas II (fraccin propia)
5 ----------- Fraccional
$( STRLEN, cadena)
Extrae la longitud en caracteres de la cadena indicada.
$( SUBSTR, cadena, inicio [, longitud])
Extrae una subcadena de la cadena indicada, comenzando por el nmero de carcter indicado
en inicio y con la longitud en caracteres indicada en longitud. El primer carcter empieza a
numerarse desde 1. Si se omite la longitud, se obtiene todo el resto de la cadena a partir del
carcter especificado.
$( UPPER, cadena)
Convierte a maysculas la cadena indicada.
$( XOR, valor1 [, valor2,... valor9])
Operador lgico O exclusivo.
DIESEL, entre otras utilidades que tambin veremos, es eminentemente utilizado para pasar
cadenas de personalizacin de lnea de estado a la variable MODEMACRO. Si embargo, con DIE-
SEL tambin podemos crear efectos muy interesantes en los mens desplegables o utilizarlo
para ciertos menesteres en AutoLISP. Todo ello se estudiar en su preciso momento.
NUEVE.3.1. DIESEL para la lnea de estado
Habiendo comprendido la funcionalidad de la variable MODEMACRO y las funciones DIESEL dispo-
nibles, podremos percatarnos de que podemos conjugar ambos conocimientos para personali-
zar la lnea de estado de AutoCAD de una manera mucho ms eficiente que con un solo texto
fijo.
Por ejemplo, si queremos mostrar continuamente en la lnea de comandos una serie de textos
fijos, pero adems el nombre del dibujo actual y el nombre de la capa actual, a la solicitud de
MODEMACRO podramos escribir:
DI BUJ O ACTUAL Nombr e: $( get var , dwgname) | Capa: $( get var , cl ayer )
Los espacios que utilicemos fuera de las expresiones DIESEL sern interpretados y representa-
dos por AutoCAD como tales. Sin embargo, en las expresiones en s se pueden dejar diversos
espacios, pero slo despus de cada carcter de coma (, ) como aclaracin. Si se utilizan en
otro sitio (tras el smbolo $, despus del parntesis de abrir o antes del parntesis de cerrar)
DIESEL no reconoce la sintaxis y puede que represente smbolos extraos en la lnea de esta-
do, adems de dos signos de interrogacin final (??) como mensaje de error. Las escritura en
maysculas o minsculas es indiferente.
En el ejemplo propuesto de establecen varios textos como fijos, adems de espaciados de se-
paracin. Por otro lado se introducen dos funciones GETVAR de DIESEL que tienen la capacidad
de extraer el valor de las variables de sistema de AutoCAD. La primera variable extrada es
DWGNAME, que guarda el nombre del dibujo actual, y la segunda es CLAYER que guarda el nom-
bre de la capa actual. Todo ello, con los textos por delante y por detrs, podra quedar as -en
determinado momento- en la lnea de estado:
DI BUJ O ACTUAL Nombr e: CABLE. DWG | Capa: SOMBREADO
Si durante la actual sesin de dibujo se cambia de capa, se abre un dibujo guardado o se
guarda al actual con otro nombre, la variable MODEMACRO es reevaluada y la lnea de estado se
actualiza instantnea y automticamente.
Sigamos con el mismo ejemplo. El problema es que, dependiendo de cmo hayamos guardado
nuestro dibujo, puede ser que el nombre aparezca totalmente en minsculas. Para evitar esto
y asegurarnos que el resultado ser el mostrado un poco ms arriba, escribiramos el siguiente
valor ms competo para MODEMACRO:
DI BUJ O ACTUAL Nombr e: $( upper , $( get var , dwgname) ) | Capa: $( get var , cl ayer )
De esta manera extraemos el valor de la variable DWGNAME con GETVAR, pero lo filtramos con
UPPER para que lo convierta a maysculas. Con la capa no es necesario, ya que siempre se
guarda en maysculas.
NOTA: Hemos de procurar no olvidarnos de ninguna coma, ya que si no DIESEL no reconoce la
expresin y funciona como no es debido, adems de mostrar sus caracteres ?? de error.
La funcin de DIESEL para la lnea de estado casi se reduce exclusivamente a la captura de
valores de variables de AutoCAD y proceso posterior. Veamos un ejemplo ms:
Guar dar cada $( get var , savet i me) mi nut os.
Este valor de MODEMACRO har que aparezca en la lnea de estado el mensaje del texto fijo con
el valor de la variable SAVETI ME, que guarda el valor de los minutos entre guardado y guarda-
do automtico.
Pero las expresiones DIESEL se pueden ir complicando un poco:
Vent ana $( i f , $( =, $( get var , cvpor t ) , 1) , Papel . , Model o $( get var , cvpor t ) . )
En este caso se escribe el texto fijo Vent ana, despus se comprueba con la funcin condicional
I F si la variable CVPORT es igual a 1. Si as fuera se escribe Papel . , lo que quedara Vent ana
Papel . , indicndonos que estamos en Espacio Papel. Si CVPORT es distinto de 1, escribe Mode-
l o y luego un nmero que es el de la propia ventana, lo que podra quedar Vent ana Model o
3. . Los puntos que se aprecian son de final de lnea, dependiendo con qu termine: con Papel
o con Model o y nmero de ventana.
Al cambiar de ventana, sea Mosaico o Flotante, o entre Espacio Modelo y Papel, los valores se
actualizarn.
Y las expresiones DIESEL se pueden complicar an ms:
NOTA IMPORTANTE DE SINTAXIS: La expresiones que sean muy largas y no puedan ser intro-
ducidas correctamente en este formato (como la siguiente) se dividen en varias lneas, aunque
el usuario debe saber que ha de formar una sola lnea en la entrada de MODEMACRO.
DI ESEL S. A. $( i f , $( get var , snapmode) , For zcur sor :
X=$( r t os, $( i ndex, 0, $( get var , snapuni t ) ) , 2, 0)
Y=$( r t os, $( i ndex, 1, $( get var , snapuni t ) ) , 2, 0)
ngul o=$( angt os, $( get var , snapang) ) )
Esta expresin escribe un texto fijo de una empresa imaginaria llamada DI ESEL S. A. . A conti-
nuacin comprueba si la variable SNAPMODE est activada (igual a 1), es decir si est activado
el Forzcursor. Esto se hace simplemente as: $( i f , $( get var . . . , esto es, no es necesario utili-
zar un operador de comparacin, porque en realidad se determina si la variable existe, si es
igual a 1. Si es 0, es como si no existiera y no se detecta.
Si el forzado de cursor no est activado no se hace nada ms, simplemente se mantiene el
texto inicial. En el momento en que se active esta caracterstica, aparece un nuevo texto For z-
cur sor : X= que muestra el valor del intervalo en X, extrado como primer elemento (ndice 0
en I NDEX) de la variable SNAPUNI T, convertido a cadena (RTOS), ya que, como sabemos, a
DIESEL slo hay que darle cadenas, y estos valores son nmeros reales, y pasado a decimal
con precisin nula, sin decimales (modo 2 y precisin 0 de la funcin RTOS).
Posteriormente se escribe otro texto Y=, que muestra el intervalo en Y del Forzcursor y que
est extrado de la misma manera que el anterior, pero ahora utilizando un ndice 1 (segundo
valor) para I NDEX.
Por ltimo, se escribe el ltimo texto ngul o= y se extrae el ngulo de forzado de la variable
SNAPANG pasndolo a cadena con la funcin RTOS. Al final se coloca el smbolo de grados sexa-
gesimales ().
NOTA: Cuando hay que escribir estas funciones DIESEL tan extensas es fcil que nos equivo-
quemos y tengamos que repetir desde el principio. Existe un pequeo truco para evitar esta
molestia, y es escribir la serie de funciones en un editor o procesador de texto, eso s todo en
una lnea o, en su defecto, sin introducir caracteres I NTRO. Al final, slo habremos de copiar y
luego pegar la lnea en la lnea de comandos de AutoCAD, tras la solicitud de MODEMACRO. Si
existe algn error, la editaremos tranquilamente y volveremos a repetir la operacin.
NUEVE.3.2. Expresiones DIESEL en mens
Ya al hablar de la creacin de mens para AutoCAD, en el MDULO UNO, se explic por en-
cima la posibilidad de incluir expresiones DIESEL en sus definiciones. Y es que el lenguaje
DIESEL no slo sirve para personalizar la lnea de estado, sino que tambin puede ser incluido,
en forma de funciones, en la definicin de cualquier tipo de men, como decimos.
Dentro de un archivo de men pueden aparecer expresiones en DIESEL fundamentalmente en
dos reas o elementos: entre los corchetes de la cadena textual que ser mostrada o fuera de
ellos, esto ltimo es, en la macro de ejecucin de la opcin de men.
NUEVE.3.2.1. DIESEL entre corchetes
Esta parte fue la explicada someramente en el MDULO de creacin de mens.
Como vimos all, una serie de funciones DIESEL pueden ser indicadas, entre los corchetes que
almacenan el texto que aparecer en el men en pantalla, casi exclusivamente para realizar
que una opcin est disponible o no y/o para colocar un smbolo de activacin delante de ella.
Y decimos casi exclusivamente porque, aparte de este uso, no se le suele dar otro al lenguaje
DIESEL en la definicin de mens entre los corchetes.
Para no redundar en lo ya explicado, simplemente veremos el ejemplo que se expona un poco
ampliado:
[ $( i f , $( get var , t i l emode) , ~) Esp. Papel ] espaci op
[ $( i f , $( get var , t i l emode) , ~) Esp. Model o] espaci om
Estas opciones dentro de un men harn que los textos Esp. Papel y Esp. Model o se en-
cuentren no disponibles cuando o mientras TI LEMODE tenga valor 1 (nos encontremos en el
Espacio Modelo Mosaico). Recordemos que el carcter tilde (~), que sale pulsando la tecla ALT
y, a la vez, 126 en el teclado numrico, hace que una opcin se encuentre no disponible (gris o
"apagada") dentro de un men, con lo que no realizar accin alguna al ser pulsada.
En el momento en que TI LEMODE valga 0 (pasemos a Espacio Papel/Modelo Flotante), las ex-
presiones DIESEL se vuelven a evaluar y las opciones se encontrarn disponibles. Al estar am-
bas activas, si hacemos clic en cualquiera de ella se ejecutar el comando asociado, en este
caso ESPACI OP para cambiar a Papel en la primera opcin, y ESPACI OMpara cambiar a Modelo
Flotante en la segunda.
Sabemos tambin que, adems de estar disponible o no una opcin, tenemos la posibilidad de
incluir una marca de verificacin ( ) delante de la misma, dependiendo de si se encuentra
activada o no. Para ello, hay que utilizar los caracteres de fin de exclamacin y punto seguidos
(! . ). Veamos un ejemplo:
[ $( i f , $( get var , gr i dmode) , ! . ) Rej i l l a] ^G
[ $( i f , $( get var , or t homode) , ! . ) Or t o] ^O
[ $( i f , $( get var , snapmode) , ! . ) For zcur sor ] ^B
Estas opciones de men harn que delante de cada texto (Rej i l l a, Or t o o For zcur sor ) se
coloque o no una marca de verificacin, dependiendo si estn activadas o no. Para saber esto
se recurre a la extraccin de los valores correspondientes con GETVAR de las variables asocia-
das a cada caracterstica.
Veamos un ltimo ejemplo en el se utilizan los dos mtodos. Un men desplegable, por ejem-
plo, podra ser as:
***POP1

[ &Guar dado]
[ - >&Guar dar cada]
[ $( i f , $( =, $( get var , savet i me) , 20) , ! . ) &20 mi n. ] ' savet i me 20
[ $( i f , $( =, $( get var , savet i me) , 30) , ! . ) &30 mi n. ] ' savet i me 30
[ $( i f , $( =, $( get var , savet i me) , 45) , ! . ) &45 mi n. ] ' savet i me 45
[ <- $( i f , $( =, $( get var , savet i me) , 60) , ! . ) &60 mi n. ] ' savet i me 60
[ - - ]
[ $( i f , $( =, $( get var , savet i me) , 0) , ~) &No guar dar ] ' savet i me 0
Este ejemplo crea un men de frecuencia de guardado automtico, en el que se puede elegir el
tiempo de esta caracterstica de AutoCAD 14. Las cuatro primeras opciones establecen la va-
riable SAVETI ME a 20, 30, 45 60 minutos. Adems, comparando el valor que se acaba de
introducir en la variable con l mismo, se activan o no las distintas marcas de verificacin, que
indican cul de las opciones est activa. La ltima opcin, establece SAVETI ME a 0 minutos y se
desactiva a s misma. Esto se hace para que no est disponible hasta que se elija otra vez una
de las otras, evidentemente.
Por ltimo, recordar que ambas estructuras de opciones de men, ya sea la de estar disponible
o no o la de la marca de verificacin, se pueden combinar dentro de una misma opcin conca-
tenando los signos (~! . ). Tambin decir que en los dispositivos grficos que no admiten la
seal , se puede utilizar cualquier otro carcter, como la letra c, por ejemplo (! c).
NUEVE.3.2.2. DIESEL en la macro
Como decimos, una expresin DIESEL puede aparecer tambin en una macro de men (o in-
cluso de un botn de barra de herramientas).
La manera de realizar estas llamadas es similar a la que utilizbamos para los submens, pero
empleando un nombre de seccin especial M, e incluyendo a continuacin la expresin DIESEL.
La sintaxis pues sera:
$M=expresin_DIESEL
Veamos un ejemplo. La siguiente expresin define una opcin de men que es un conmutador
entre Espacio Modelo Flotante y Espacio Papel:
[ EM/ EP] ^C^C^P$M=$( i f , $( and, $( =, $( get var , t i l emode) , 0) ,
$( =, $( get var , cvpor t ) , 1) ) , Espaci om, Ti l emode 0 Espaci op)
Primeramente se efectan dos cancelaciones y se desactiva el eco de men (^C^C^P). A conti-
nuacin viene la llamada a la expresin DIESEL ($M=). Dicha expresin incluye una funcin
condicional I F que examina los valores de TI LEMODE y CVPORT. Si es 0 TI LEMODE, y al mismo
tiempo CVPORT vale 1, esto significa que nos encontramos en el entorno Espacio Papel, por lo
que se conmuta a Espacio Modelo Flotante con el comando ESPACI OM. En caso contrario, se
desactiva TI LEMODE (por si se encontrara con valor 1) y se cambia a Espacio Papel con el co-
mando ESPACI OP de AutoCAD.
NUEVE.3.3. Expresiones DIESEL en botones
La manera de utilizacin de expresiones en DIESEL en la macro de un botn de una barra de
herramientas es exactamente la misma que la vista para la macro de una opcin de men. Por
ejemplo, el ltimo ejemplo explicado (conmutador EM/ EP), podra haber sido incluido con la
misma sintaxis (excepto, evidentemente, la opcin de men en s) en una macro dentro de la
definicin de un botn.
NUEVE.3.4. Expresiones DIESEL en archivos de
guin
Decir que tambin es posible escribir funciones DIESEL dentro de un archivo de guin o script.
Estos archivos como sabemos, ejecutan por lotes las lneas incluidas en ellos como si de su
escritura en la lnea de comando se tratara, por lo que habr que invocar a la variable MODEMA-
CRO anteriormente. Por ejemplo:
MODEMACRO
Capa act ual : $( get var , cl ayer )
NUEVE.3.5. Variables USERn1 a USERn5 y MACRO-
TRACE
Como hemos podido comprobar, el lenguaje DIESEL es muy limitado con respecto a otros en-
tornos de desarrollo mucho ms avanzados. Y es que en un principio, para AutoCAD, se inclu-
y como apoyo a los dems aspectos personalizables. Por no disponer, no disponemos en DIE-
SEL ni de la ventaja de declarar variables de usuario y asignarles valores posteriormente.
Se incluyen en AutoCAD quince variables independientes de usuario que son: de USERI 1 a
USERI 5, de USERR1 a USERR5 y de USERS1 a USERS5. Las variables USERI pueden almacenar
valores enteros, USERR valores reales y USERS cadenas de texto. Estas ltimas son las que ms
nos interesan, ya que DIESEL es un lenguaje que trabaja con cadenas de texto, como ya sa-
bemos.
Dichas variables podemos utilizarlas en cualquier momento, ya sea para almacenar un dato y
despus recuperarlo, ya sea para cualquier otro menester; estn a disposicin del usuario. As
mismo pueden ser utilizadas a la hora de programar en DIESEL, ya que a ellas se puede acce-
der como a cualquier otra variable de sistema en AutoCAD 14. Todas ellas se vacan igual que
MODEMACRO, esto es, con un punto (e INTRO).
En DIESEL no existe ninguna funcin que permita editar o modificar los valores de las variables
de sistema, por lo que habremos de recurrir al comando MODI VAR (SETVAR en el programa en
ingls) de AutoCAD. An as, todo este proceso resulta muy engorroso y asaz limitado en el
fondo, ya que slo puede utilizarse en macros y combinando la rutina DIESEL con las llamadas
a MODI VAR.
Simplemente que quede la idea de estas quince variables que podemos utilizar como memoria
temporal.
NOTA: Las variables USERS1 a USERS5 se utilizan tambin para pasar valores de AutoLISP a
expresiones DIESEL.
Por otro lado, decir que la variable MACROTRACE es una herramienta de depuracin para expre-
siones DIESEL. Al activarse (valor 1), todas las expresiones, incluidas las utilizadas en los me-
ns (y botones) y en la lnea de estado, son evaluadas. De esta manera se comprueba si se
han escrito correctamente. No obstante, conviene evitar la evaluacin excesiva.
NUEVE.4. EJEMPLOS PRCTICOS EN DIESEL
NUEVE.4.1. Lnea de estado 1
Usuar i o: $( get var , l ogi nname) | Cdi go de i di oma I SO: $( get var , l ocal e)

NUEVE.4.2. Lnea de estado 2
l t i mo punt o: $( get var , l ast poi nt ) | l t i mo ngul o: $( i f , $( <=, $( get var ,
l ast angl e) , 0) , negat i vo o cer o, $( get var , l ast angl e) )
NUEVE.4.3. Lnea de estado 3
Ver si n de Aut oCAD: $( subst r , $( get var , acadver ) , 1, 2) | Di r ect or i o r a z
de i nst al aci n: $( subst r , $( get var , acadpr ef i x) , 1, 3)
NUEVE.4.4. Visibilidad de objetos Proxy
***POP1

[ &Obj et os Pr oxy]
[ $( i f , $( =, $( get var , pr oxyshow) , 1) , ! . ) &Todo] ' pr oxyshow 1
[ $( i f , $( =, $( get var , pr oxyshow) , 2) , ! . ) &Bor de] ' pr oxyshow 2
[ - - ]
[ $( i f , $( =, $( get var , pr oxyshow) , 0) , ! . ~) &Nada] ' pr oxyshow 0
NUEVE.4.5. Orden de objetos
***POP15

[ &Or denaci n de obj et os]
[ $( i f , $( =, $( get var , sor t ent s) , 1) , ! . , $( i f , $( =, $( get var , sor t ent s) , 0) , ~) )
Or dena par a l a &desi gnaci n] ' sor t ent s 1
[ $( i f , $( =, $( get var , sor t ent s) , 2) , ! . , $( i f , $( =, $( get var , sor t ent s) , 0) , ~) )
Or dena par a l a &r ef er enci a] ' sor t ent s 2
[ $( i f , $( =, $( get var , sor t ent s) , 4) , ! . , $( i f , $( =, $( get var , sor t ent s) , 0) , ~) )
Or dena par a el r e&di buj ado] ' sor t ent s 4
[ $( i f , $( =, $( get var , sor t ent s) , 8) , ! . , $( i f , $( =, $( get var , sor t ent s) , 0) , ~) )
Or dena par a l as &f ot os] ' sor t ent s 8
[ $( i f , $( =, $( get var , sor t ent s) , 16) , ! . , $( i f , $( =, $( get var , sor t ent s) , 0) , ~) )
Or dena par a el r e&gener ado] ' sor t ent s 16
[ $( i f , $( =, $( get var , sor t ent s) , 32) , ! . , $( i f , $( =, $( get var , sor t ent s) , 0) , ~) )
Or dena par a l a &t r azado] ' sor t ent s 32
[ $( i f , $( =, $( get var , sor t ent s) , 64) , ! . , $( i f , $( =, $( get var , sor t ent s) , 0) , ~) )
Or dena par a l a &Post Scr i pt ] ' sor t ent s 64
[ - - ]
[ $( i f , $( =, $( get var , sor t ent s) , 0) , ! . ) De&sact i ado] ' sor t ent s 0
[ $( i f , $( ! =, $( get var , sor t ent s) , 0) , ! . ) Act i &vado] ' sor t ent s 1
NOTAS INTERESANTES:
1. Este ejemplo no contempla todos los posibles valores de la variable SORTENTS, ya que
se admite la suma de bits para la compaginacin.
NUEVE.4.6. Ventanas en mosaico y flotantes
***POP1

[ &Vent anas]
[ Mosai c&o/ Fl ot ant es] ^C^C$M=$( i f , $( =, $( get var , t i l emode) , 0) , _mvi ew, _vpor t s)

NUEVE.FIN. EJERCICIOS PROPUESTOS
I. Aadir a la lnea de estado un texto que especifique si el modo de forzado del cursor
(Forzcursor) est o no activado, as como si est establecido en isomtrico o no.
II. Aadir a la lnea de estado de AutoCAD un texto que indique la coordenada X y la co-
ordenada Y del centro de la vista de la ventana grfica actual. As mismo, y por delante,
se indicar que nmero de ventana es.
III. Aadir a la lnea de estado la fecha y hora actuales en el formato deseado por el crea-
dor.
IV. Crear un men desplegable que permita seleccionar las distintas modalidades de som-
bra. Al elegir cada una de ellas se activar por delante una marca de verificacin. Ade-
ms, habr una opcin que permita realizar el SOMBRA con la opcin elegida.
V. Disese un men desplegable que permita ejecutar los comandos de configuracin de
ventanas en mosaico y mltiples o flotantes. Segn nos encontremos en Espacio Mode-
lo Mosaico o Espacio Papel/Modelo Flotante, la opcin correspondiente estar activa y la
otra no.
VI. Crear un conmutador en un men para alternar entre sombreado de doble o simple ra-
yado para patrones de usuario.
VII. Crear un completo conjunto de expresiones DIESEL para la lnea de estado que
permita informar en diversos momentos de distintas situaciones del programa. La vi-
sualizacin de unas u otras se controlar desde un men cualquiera. Deber estar per-
sonalizado para un tcnico en diseo de jardines.
EJERCICIOS RESUELTOS DEL MDULO NUEVE
NOTA IMPORTANTE DE SINTAXIS: La expresiones que sean muy largas y no puedan ser intro-
ducidas correctamente en este formato se dividen en varias lneas, aunque el usuario debe
saber que ha de formar una sola lnea en la entrada de MODEMACRO.
EJERCICIO I
For zado: $( i f , $( =, $( get var , snapmode) , 0) , DESACTI VADO, ACTI VADO) | Est i l o:
$( i f , $( =, $( get var , snapst yl ) , 0) , ESTNDAR, I SOMTRI CO)
EJERCICIO II
I D de Vent ana: $( get var , cvpor t ) | Cent r o de Vent ana, X: $( i n-
dex, 0, $( get var , vi ewct r ) ) Y: $( i ndex, 1, $( get var , vi ewct r ) )
EJERCICIO III
$( edt i me, $( get var , dat e) , DDD" , " DD MON YYYY - H: MMam/ pm)
EJERCICIO IV
***POP1
[ Som&br a]
[ $( i f , $( =, $( get var , shadedge) , 0) , ! . ) &256 col or es] ' shadedge 0
[ $( i f , $( =, $( get var , shadedge) , 1) , ! . ) 256 &r esal t ar ] ' shadedge 1
[ $( i f , $( =, $( get var , shadedge) , 2) , ! . ) &16 ocul t ar ] ' shadedge 2
[ $( i f , $( =, $( get var , shadedge) , 3) , ! . ) 16 r e&l l enar ] ' shadedge 3
[ - - ]
[ &Sombr a] ^C^C_. shade
EJERCICIO V
***POP7
[ &Vent anas]
[ $( i f , $( =, $( get var , t i l emode) , 0) , ~) En &mosai co] ^C^C_. vpor t s
[ $( i f , $( =, $( get var , t i l emode) , 1) , ~) &Fl ot ant es] ^C^C_. mvi ew
EJERCICIO VI
***POP3
[ Som&br eado]
[ Dobl e/ Si mpl e r ayado] ^C^C$M=$( i f , $( =, $( get var , hpdoubl e) , 0) , ' hpdoubl e1, ' hpdoubl e
0)
EJERCICIO VII
(Ejercicio completo para resolver por tcnicos y/o especialistas).
Autor: J onathan Prstamo Rodrguez
Para: La Web del Programador

MDULO DIEZ
Lenguaje DCL; personalizacin y
creacin de cuadros de dilogo
DIEZ.1. LENGUAJE DCL
A partir de la versin 12 de AutoCAD existe un lenguaje de programacin de letreros de di-
logo denominado DCL, el cual nos permitir crear los cuadros necesarios para que nuestras
aplicaciones AutoLISP sean ms vistosas y coherentes. El lenguaje AutoLISP ser estudiado en
el siguiente MDULO de este curso.
Con DCL (Dialog Control Language, lenguaje de control de letreros de dilogo) se crean archi-
vos de texto ASCII con extensin . DCL que contienen el diseo geomtrico aparente completo
de un cuadro de dilogo que queremos crear. No obstante, los elementos definidos en estos
archivos han de controlarse desde rutinas en AutoLISP o C. Por esto, en este MDULO vamos
a estudiar en profundidad cmo crear un cuadro de dilogo, e incluso lo cargaremos e iniciali-
zaremos para verlo en AutoCAD, pero hacerlo funcionar, no se explicar hasta el MDULO
ONCE, en un apartado dedicado a tal efecto.
El aspecto de los cuadros definidos en cuanto a la forma de presentar las casillas, los recua-
dros, la flecha del cursor, etc., depende del dispositivo grfico conectado. Lo que el usuario
disea mediante DCL es la distribucin de los diferentes tipos de elementos o componentes
dentro del cuadro.
Para simplificar el nmero de parmetros que definen la forma y distribucin de los elementos
dentro del cuadro, existen posiciones predefinidas en filas y columnas (no es necesario indicar
coordenadas X e Y). Adems, existe una herramienta de PDB (Programmable Dialogue Box)
con elementos (tiles) predefinidos, que se pueden utilizar en la creacin de cuadros personali-
zados.
DIEZ.2. ESTRUCRURA JERARQUIZADA DE DI-
SEO
La estructura de un fichero DCL es un frrea disposicin jerrquica de elementos o tiles que,
desde un comienzo comn, se van subdividiendo en otros elementos hasta llegar a la parte
mnima de representacin. Por ejemplo, observemos el cuadro de la pgina siguiente.
La manera de estructurar este cuadro sera la siguiente. Esencialmente est dividido en cuatro
filas: la primera se corresponde con la de las reas Mallas y Slidos (de izquierda a derecha),
la segunda corresponde a la casilla de verificacin Dilogo al imprimir, la tercera a la casilla
Gestin de archivos y la cuarta, y ltima, a la de los botones Aceptar y Cancelar.
A su vez, la primera fila se subdivide en dos columnas, el rea Mallas y el rea Slidos. Y a su
vez, cada rea se vuelve a subdividir en otros elementos: el rea Mallas en dos casillas de edi-
cin y un botn (3 elementos), y el rea Slidos en dos casillas de edicin, una casilla de veri-
ficacin y un botn (4 elementos). Las dems filas ya no se dividen ms.
Pues bien, la forma de disear un fichero . DCL se basa precisamente en esa divisin estructu-
rada, evidentemente recurriendo a la sintaxis propia del lenguaje. Esta sintaxis recuerda un
tanto a la de programacin en C o C++.

DCL se basa en la escritura de lo que se denominan tiles, componentes o elementos. Estos
componentes que iremos viendo poco a poco son nombres mnemotcnicos precedidos de
un carcter de dos puntos (: ). Tras el tile se escribe una llave de apertura ({) que englobar a
todos los argumentos y tiles incluidos que contenga el anterior, acabando con una llave de
cierre (}). Dichos elementos incluidos, o los propios argumentos del elemento externo, se se-
paran con caracteres punto y coma (; ). Los comentarios se pueden indicar con una doble ba-
rra (/ / ) al principio de la lnea o en la forma / *comentario*/ para incluirlos en la mitad de una
lnea. Adems, se suelen sangrar la lneas para mostrar claramente el carcter de anidacin de
elementos. Estn admitidos espacios y tabuladores como separadores por claridad.
DIEZ.3. TCNICA DE DISEO
La organizacin bsica de los diversos componentes de un cuadro es en filas y columnas. Estas
se definen con los elementos : r ow y : col umn. La utilidad de programacin distribuye los com-
ponentes dentro de ellas, de manera que tiendan a ocupar todo el espacio de manera simtrica
y ordenada. Es por ello que deberemos distribuir la informacin del cuadro para que quede
simtrica. As por ejemplo, en el cuadro mostrado al principio de esta pgina, las dos reas de
la primera fila no contienen el mismo nmero de elementos, por eso no queda muy vistoso.
Determinados atributos como f i xed_wi dt h o f i xed_hei ght permiten restringir el espacio
ocupado por los componentes.
Existen algunas reglas que debemos (podemos) seguir para el correcto diseo esttico y fun-
cional de los cuadros, que se resumen en los siguientes puntos:
Distribuir los elementos en una disposicin que facilite su empleo, de forma que resulte c-
modo con el cursor desplazarse de uno a otro. Por ejemplo, para una serie de botones exclu-
yentes es preferible disponerlos en una columna que en una fila. El cursor recorre ms espacio
entre botn y botn en el ltimo caso. Respetar el orden natural de introduccin de datos, co-
mo por ejemplo X, Y y Z para las coordenadas.
Repartir los elementos de manera homognea por la superficie del cuadro, sin apelotona-
mientos. Respetar la coherencia con los cuadros existentes en AutoCAD. As, las casillas que
llaman a un subcuadro tienen un ttulo que termina en puntos suspensivos como Mostrar... y
las que ocultan el cuadro para sealar algo en pantalla tienen un carcter < como en Designar
<. El ttulo de casillas de edicin termina en dos puntos. Tambin conviene que la primera le-
tra de los ttulos se ponga en maysculas. No poner un punto al final de los ttulos de casillas.
Asegurar que los cuadros son reversibles, es decir, que el usuario pueda hacer pruebas sin
miedo a cometer actos irreparables. Informarle en todo momento de las consecuencias de su
utilizacin, en forma de avisos o errores en la lnea inferior del cuadro (elemento er r t i l e) o
cuadros de advertencia en los casos graves mediante la funcin de AutoLISP ALERT (se estu-
diar en el siguiente MDULO). Examinar todos los datos introducidos por el usuario para
detectar valores fuera de rango. Desactivar componentes cuando proceda, para que el usuario
vea que no puede utilizarlos.
Disponer de teclas rpidas para la mayora de elementos del cuadro. Estas se indican me-
diante el carcter & (como en los mens) dentro del texto del atributo l abel . Si hay que incluir
abreviaturas en los textos, que sean fcilmente comprensibles. Incluir en las casillas valores
por defecto razonables.
Tener en cuenta que el tamao de los cuadros se mide en nmero de caracteres. Influye
decisivamente la fuente de letra y la resolucin especificada en el gestor grfico. Una mayor
resolucin hace que se puedan mostrar cuadros ms grandes. Pero una fuente de letra grande,
hace que los cuadros ocupen ms superficie en pantalla. As, un mismo cuadro podra no caber
en determinadas configuraciones grficas. Procurar si es posible que el cuadro quepa en la
resolucin bsica de VGA o SVGA(640 800 puntos).
Todo esto puede sonarnos raro o no entender algo de momento, pero poco a poco iremos re-
pasndolo e incidiendo en ello mientras creemos nuestros propios cuadros de dilogo.
DIEZ.4. LAS HERRAMIENTAS
A partir de aqu vamos a ir explicando las caractersticas y componentes propios del lenguaje
DCL, es decir la manera de llevar a la prctica todo lo expuesto hasta ahora.
La forma elegida para explicar este lenguaje de programacin es, al entender del autor de este
curso, la ms coherente. En un principio vamos a explicar todos los tiles que existen para pro-
gramar en DCL, despus se detallarn los argumentos que podemos utilizar con dichos tiles y,
por ltimo, se establecer una correspondencia entre los tiles y los argumentos, es decir, con
cules de ellos podemos usar qu argumentos.
Tras todo esto, podemos empezar a volcar lo aprendido en la creacin de cuadros de dilogo.
Lo haremos con mltiples ejemplos. Este MDULO no est previsto para un aprendizaje de
principio a fin, sino ms bien para empezar estudiando los ejemplos y, mientras se estudian y
comprenden las explicaciones de ellos, ir continuamente atrs a conocer la sintaxis de cada
elemento y de cada argumento. Al final el aprendizaje ser ptimo.
Las convenciones utilizadas para las sintaxis en este MDULO van a ser las siguientes:
Nombres de tiles y argumentos predefinidos en minsculas normales.
Texto en itlica minscula indica un nombre representativo.
Puntos suspensivos en itlica indican la posibilidad de indicar ms argumentos.
Una barra vertical indica doble posibilidad.
Comencemos pues.
DIEZ.4.1. Los tiles o elementos
Existe distintos tipos de tiles que vamos a ir viendo a lo largo de este MDULO DI EZ. Todos
ellos se pueden clasificar en cuatro grandes grupos o categoras:
1. Grupos de componentes (Tile Clusters): No se puede seleccionar el grupo sino slo los
componentes individuales dentro del grupo. No pueden tener acciones asignadas, salvo los
grupos de botones excluyentes. Son los siguientes:
Cuadro de dilogo en su conjunto, : di al og
Columna, : col umn
Columna encuadrada o enmarcada, : boxed_col umn
Fila, : r ow
Fila encuadrada o enmarcada, : boxed_r ow
Columna de botones de seleccin excluyentes, : r adi o_col umn
Columna de botones excluyentes enmarcada, : boxed_r adi o_col umn
Fila de botones de seleccin excluyentes, : r adi o_r ow
Fila de botones excluyentes enmarcada, : boxed_r adi o_r ow
2. Componentes individuales de accin (Tiles): al ser seleccionados, se ejecuta la accin
asignada. Esta accin se asigna a travs de la clave (atributo key) que identifica cada compo-
nente. Son los siguientes:
Casilla de activacin o conmutador, : t oggl e
Botn de accin, : but t on
Botn excluyente, : r adi o_but t on
Casilla de edicin, : edi t _box
Botn de imagen o icono, : i mage_but t on
Casilla o recuadro de lista, : l i st _box
Lista desplegable, : popup_l i st
Barra de exploracin o deslizador, : sl i der
3. Componentes decorativos e informativos: no realizan acciones ni pueden designarse.
Muestran informacin en forma de texto o imgenes. Son:
Croquis o Imagen, : i mage
Texto, : t ext
Componente en blanco, spacer
Componente sin tamao, spacer _0
Componente de tamao 1, spacer _1
Concatenacin de textos, : concat enat i on
Partes de una concatenacin, : t ext _par t
Prrafo de textos, : par agr aph
4. Botones de salida y componentes de error: realizan las acciones de validar o anular el
cuadro y el tratamiento de errores. Son:
Mensaje de error, er r t i l e
Casilla de Aceptar, ok_onl y
Casillas Aceptar y Cancelar, ok_cancel
Casillas Aceptar, Cancelar y Ayuda..., ok_cancel _hel p
Las tres casillas, ms mensaje de error, ok_cancel _hel p_er r t i l e
Las tres casillas, ms casilla informacin, ok_cancel _hel p_i nf o
Pasamos ahora a ver los atributos y, luego, se explicar cada uno de los tiles y se indicar qu
atributos admite.
DIEZ.4.2. Los atributos predefinidos
Los atributos de un componente de cuadro definen su aspecto y funcionalidad. Su nombre est
normalizado en ingls y cada uno acepta un valor que puede ser uno de los siguientes:
Valor entero: generalmente representa un tamao en nmero de caracteres. Por ejemplo
wi dt h=18.
Valor real: en estos casos hay que indicar el dgito correspondiente a la unidad (no vale .7
sino que debe ser 0.7). Por ejemplo aspect _r at i o=0. 85.
Cadena de texto entrecomillada: se distinguen las maysculas y minsculas. No es lo mismo
key=" def ect o" que key=" Def ect o" . Si la cadena contiene comillas en su interior, hay que
indicarlas mediante el cdigo de control \ " . Adems, se admite \ \ para indicar el carcter con-
trabarra, \ n para indicar un cambio de lnea y \ t para indicar una tabulacin.
Palabra reservada: son trminos normalizados en ingls, que se indican sin comillas. Tam-
bin se distinguen maysculas y minsculas. No es lo mismo al i gnment =cent er ed que al i gn-
ment =Cent er ed. Normalmente todas se indican en minsculas, la vlida es la primera.
Adems de los atributos predefinidos, el usuario puede crear sus propios atributos. Todos los
valores asignados a elementos del cuadro, y los obtenidos desde un cuadro tras la actuacin
del usuario, son siempre cadenas de texto. Por este motivo, en los programas de AutoLISP que
hacen funcionar el cuadro, se recurre a las funciones de conversin desde y a cadenas de tex-
to, como ATOI , ATOF, I TOA, RTOS, etctera, que ya estudiaremos.
Cada tipo de elemento admite varios atributos, pero no todos. Existen atributos especficos,
como por ejemplo edi t _l i mi t que slo se utiliza en las casillas de edicin (elemento
: edi t _box).
A continuacin se vern todos los atributos disponibles con sus correspondientes explicaciones.
DIEZ.4.2.1. Atributos de ttulo, clave y valor
inicial
l abel =" cadena" ;
Puede ser el ttulo del cuadro, una fila o columna enmarcada, una casilla, una imagen, etc. El
valor es un texto entre comillas. La tecla aceleradora se indica mediante & (el atributo mnemo-
ni c tambin sirve para especificar una tecla aceleradora). El ttulo puede ser un espacio en
blanco o una cadena nula.
key=" cadena" ;
Permite definir la accin que se efectuar sobre o desde el elemento en el programa AutoLISP
que hace funcionar el cuadro. Es un texto entre comillas. Debe especificarse en todos aquellos
componentes que actan. Debido a que distingue maysculas, conviene indicarlo siempre en
minsculas para que no haya problemas, aunque puede hacerse de otro modo si luego no nos
equivocamos en el programa AutoLISP.
val ue=" cadena" ;
Es el valor presentado al inicializar el cuadro. Se indica como un texto entre comillas. En gene-
ral, se modificar durante la utilizacin del cuadro por parte del usuario.
l i st =" cadena" ;
Lneas de texto que situar inicialmente en las listas desplegables o casillas de lista (componen-
tes : popup_l i st y : l i st _box). Se presentan al inicializar el cuadro, aunque pueden ser modi-
ficados durante la utilizacin del mismo. Para separar las diferentes lneas de texto, se emplea
el cdigo de cambio de lnea \ n. Dentro de las lneas se puede incluir el carcter tabulador \ t .
al i gnment =palabra_reservada;
Controla la justificacin de un componente dentro de su grupo. As, una casilla puede estar
centrada en el espacio disponible de una fila, o alineada a la derecha por ejemplo. Los valores
posibles son l ef t , r i ght o cent er ed para la justificacin horizontal y t op, bot t omo cent er ed
para la justificacin vertical. Si no se indica, los valores por defecto son l ef t y cent er ed res-
pectivamente.
chi l dr en_al i gnment =palabra_reservada;
Controla la alineacin de todos los componentes de un grupo, por ejemplo dentro de una fila o
columna enmarcada, o una fila o columna de botones excluyentes. Los valores posibles son los
mismos que para al i gnment .
col or =valor_entero| palabra_reservada;
Slo se utiliza con elementos : i mage e : i mage_but t on. Puede ser un valor entero (nmero de
color de AutoCAD) o una de las palabras reservadas que se indican en la siguiente tabla:
Palabra reservada ------- Color
---------------------------------------------------------------------------
di al og_l i ne ------------ Color de lnea actual de los cuadros de dilogo.
di al og_f or egr ound ----- Color de primer plano del cuadro de dilogo
------------------------- actual (para texto).
di al og_backgr ound ----- Color de fondo del cuadro de dilogo actual.
gr aphi cs_backgr ound --- Fondo actual de la pantalla de grficos de
------------------------- AutoCAD (normalmente equivale a 0).
gr aphi cs_f or egr ound --- Primer plano actual de la pantalla de grficos de
------------------------- AutoCAD (normalmente equivale a 7).
bl ack ------------------ Color 0 de AutoCAD (negro).
r ed --------------------- Color 1 de AutoCAD (rojo).
yel l ow ----------------- Color 2 de AutoCAD (amarillo).
gr een ------------------ Color 3 de AutoCAD (verde).
cyan -------------------- Color 4 de AutoCAD (ciano).
bl ue -------------------- Color 5 de AutoCAD (azul).
magent a ----------------- Color 6 de AutoCAD (magenta).
whi t e ------------------- Color 7 de AutoCAD (blanco).
i s_bol d=palabra_reservada;

Los valores posibles son t r ue (texto en negrita) o f al se (texto normal, valor por defecto).
passwor d_char =" carcter" ;
Se utiliza para evitar que otros usuarios vean el valor introducido en la casilla (por ejemplo, en
una casilla de solicitud de contrasea). En sta aparecer el carcter especificado en pass-
wor d_char , en lugar de los caracteres introducidos por el usuario durante la utilizacin del
cuadro.
l ayout =palabra_reservada;
Los valores posibles son hor i zont al (por defecto) y ver t i cal . Para : sl i der .
DIEZ.4.2.2. Atributos de tamao
wi dt h=valor;
Es un nmero (puede ser real, aunque generalmente se usa entero) que especifica la anchura
mnima en nmero de caracteres de texto. Esta anchura se ampliar automticamente si el
componente lo necesita, a no ser que se indique un atributo del tipo fixed_.... Si se omite, el
componente utiliza la anchura mnima para que quepa.
hei ght =valor;
Tiene el mismo significado y formato que wi dt h. En las casillas y botones de imagen debe es-
pecificarse.
f i xed_wi dt h=palabra_reservada;
Especifica si la anchura de un componente puede rellenar el espacio disponible. Los valores
son t r ue y f al se (por defecto). Si se indica t r ue, el componente mantiene su tamao sin am-
pliarse para ocupar el espacio disponible.
f i xed_hei ght =palabra_reservada;
Especifica si la altura de un componente puede rellenar el espacio disponible. Tiene el mismo
significado y opciones que f i xed_wi dt h.
f i xed_wi dt h_f ont =palabra_reservada;
Especifica si un cuadro de lista o lista desplegable mostrar texto con un tipo de letra de cau-
dal fijo, es decir, la separacin entre caracteres es siempre la misma (por ejemplo la "i" y la
"m" ocupan el mismo espacio). Se utiliza para facilitar la alineacin de las columnas con tabu-
laciones. Los valores son t r ue y f al se (por defecto).
edi t _wi dt h=valor;
Es la anchura en caracteres de la parte visible de edicin o introduccin de datos para las casi-
llas de edicin. Controla los caracteres que se muestran en la ventana de la casilla, aunque el
usuario podra introducir ms. Si no se indica, la casilla ocupa todo el espacio. En caso contra-
rio, la casilla se alinea por la derecha. Puede ser un nmero real, aunque generalmente sea un
entero.
chi l dr en_f i xed_wi dt h=palabra_reservada;
Especifica si todos los componentes de un grupo pueden ocupar toda la anchura disponible. Si
algn componente tiene atribuida una anchura especfica mediante wi dt h sta se respeta. Los
valores posibles son t r ue y f al se (por defecto). En principio, conviene no utilizar este atribu-
to.
chi l dr en_f i xed_hei ght =palabra_reservada;
Especifica si todos los componentes de un grupo pueden ocupar toda la altura disponible. Tiene
el mismo significado y opciones que chi l dr en_f i xed_wi dt h.
aspect _r at i o=valor_real;
Es el cociente entre la anchura y la altura de la imagen en una casilla o botn de imagen. Si se
indica 0, el componente toma el tamao de la imagen.
DIEZ.4.2.3. Atributos de limitaciones de uso
edi t _l i mi t =valor_entero;
Es el nmero mximo de caracteres que el usuario puede introducir en una casilla de edicin.
Se indica un nmero entero entre 1 y 256. Por defecto es un valor 132. El nmero de caracte-
res visibles en la casilla (controlado por edi t _wi dt h) ser generalmente menor. Si el usuario
introduce ms caracteres, stos se irn desplazando en la ventana visible de la casilla, acep-
tndose todos hasta llegar al mximo establecido por edi t _l i mi t .
mi n_val ue=valor_entero;
Es el valor mnimo de un deslizador en su extremo o tope inicial. Se indica un nmero entero
con signo. Valor por defecto = 0. El mnimo posible es - 32768.
max_val ue=valor_entero;
Es el valor mximo de un deslizador en su extremo o tope final. Se indica un nmero entero
con signo. El valor por defecto es 10000. El mximo posible es 32767. El formato es el mismo
que mi n_val ue.
smal l _i ncr ement =valor_entero;
Es el valor incremental mnimo para el desplazamiento del cursor deslizante. Se obtiene pul-
sando las flechas en los extremos del deslizador. Por defecto es una centsima del rango total.
As, un deslizador cuyos valores permitidos son entre 0 y 100, ofrecer un incremento mnimo
de 1 en un principio.
bi g_i ncr ement =valor_entero;
Es el valor incremental mayor para el desplazamiento del cursor deslizante. Se obtiene pulsan-
do a un lado y otro del cursor deslizante, sobre la barra del deslizador. El valor por defecto es
un dcimo del rango total. Un deslizador cuyos valores son entre 0 y 100, ofrecer un incre-
mento de 10 por defecto. El formato es el mismo que smal l _i ncr ement .
DIEZ.4.2.4. Atributos de funcionalidad
act i on=" ( expresin_AutoLISP) " ;
Expresin de AutoLISP que ejecuta la accin que se efectuar cuando se pulsa el componente.
Tambin se denomina "retorno de llamada". Debe ir entre comillas. Si desde el programa en
AutoLISP se utiliza ACTI ON_TI LE (se ver en el prximo MDULO) sta tiene preferencia so-
bre la accin especificada en act i on.
mnemoni c=" carcter" ;
Carcter de tecla aceleradora para el componente. Debe ser una cadena de un slo carcter
entre comillas. El carcter debe ser uno de los que forman el ttulo (atributo l abel ). Si el
usuario pulsa la tecla con ese carcter (da igual maysculas o minsculas), se activa el com-
ponente pero no se selecciona. Resulta ms sencillo indicar las teclas aceleradoras mediante &
(al igual que en los mens hacamos) en el ttulo especificado en l abel .
i ni t i al _f ocus=" cadena" ;
Identificacin clave o key (argumento key) del componente del cuadro que se presenta ilumi-
nado al entrar en el cuadro y que por lo tanto recibe la pulsacin inicial del teclado.
al l ow_accept =palabra_reservada;
El componente se activa al pulsar la tecla de aceptacin (normalmente I NTRO). Los valores
posibles son t r ue y f al se (por defecto). Al aceptar un cuadro, se considera pulsado tambin
el botn por defecto (aqul que tiene definido i s_def aul t como t r ue).
i s_def aul t =palabra_reservada;
El componente se selecciona al pulsar I NTRO. Los valores posibles son t r ue y f al se (por de-
fecto). Slo un componente del cuadro puede tener este atributo como t r ue (por defecto, es la
casilla de validacin Aceptar).
i s_cancel =palabra_reservada;
El componente se selecciona al cancelar con ESC. Los valores posibles son t r ue y f al se (por
defecto). Slo un componente del cuadro puede tener este atributo como t r ue (por defecto es
la casilla de cancelacin Cancelar). El formato es el mismo que el de i s_def aul t .
i s_enabl ed=palabra_reservada;
El componente aparece habilitado o no inicialmente. Los valores posibles son t r ue (por defec-
to) y f al se. Si se define como f al se, el componente se muestra atenuado en gris, indicando
que se encuentra inhabilitado.
i s_t ab_st op=palabra_reservada;
El componente se activa al desplazarse el usuario por el cuadro mediante el tabulador. Los
valores posibles son t r ue (por defecto) y f al se. Si se define como f al se, el componente no
se activa con la tecla de tabulado y sta lo pasa por alto.
t abs =" cadena" ;
Posiciones de tabulacin en nmero de caracteres. Se utiliza en las casillas de lista y listas
desplegables para alinear verticalmente columnas de texto (por ejemplo en el cuadro de con-
trol de capas, la casilla de lista con los nombres, estados, colores y tipos de lnea). Se indica
una cadena de texto con las posiciones de tabulacin.
t ab_t r uncat e=palabra_reservada;
Los valores posibles son t r ue y f al se (por defecto). Si se define como t r ue, el texto de un
cuadro de lista o lista desplegable se truncar al rebasar la posicin de una tabulacin existen-
te.
mul t i pl e_sel ect =palabra_reservada;
Establece la posibilidad de seleccionar ms de un elemento en una lista de casilla o lista des-
plegable. Los valores posibles son t r ue y f al se (por defecto). Si se indica t r ue se permite
iluminar o seleccionar varios elementos. En caso contrario slo uno.
DIEZ.4.3. Los tiles y sus atributos
DIEZ.4.3.1. Grupos de componentes
: di al og {atributos...}
Es el componente que engloba a todos los dems y define el cuadro de dilogo. Los atributos
permitidos son:
l abel -- Ttulo en el borde superior del letrero.
val ue -- Ttulo opcional; invalida al anterior.
i ni t i al _f ocus -- Clave (atributo key) del elemento que se activa inicialmente al desplegarse
el cuadro en
----------------- pantalla.
: col umn {atributos...}
Agrupa en una columna a todos los componentes incluidos en su definicin. Los atributos per-
mitidos son:
l abel -- Ttulo en el borde superior de la columna.
wi dt h -- Anchura mnima.
hei ght -- Altura mnima.
f i xed_wi dht -- Anchura fija.
f i xed_hei ght -- Altura fija.
chi l dr en_ f i xed_wi dht -- Anchura fija para todos los componentes.
chi l dr en_ f i xed_hei ght -- Altura fija para todos los componentes.
al i gnment -- Alineacin si est incluida en otro elemento.
chi l dr en_al i gnment -- Alineacin para todos los componentes.
: boxed_col umn {atributos...}
Agrupa a todos los componentes incluidos en su definicin en una columna enmarcada o en-
cuadrada mediante un rectngulo. Los atributos permitidos son los mismos que los de
: col umn. l abel indica el ttulo en el borde superior del marco. Si se indica como ttulo un es-
pacio en blanco, l abel = " " , se deja un espacio encima de la columna. Si se indica cadena
nula, l abel = " " , no existe ese espacio.
: r ow {atributos...}
Agrupa en una fila a todos los componentes incluidos en su definicin. Los atributos posibles y
su funcionalidad son los mismos que para : col umn.
: boxed_r ow {atributos...}
Agrupa a todos los componentes incluidos en su definicin en una fila enmarcada o encuadrada
mediante un rectngulo. Los atributos y la consideracin para l abel , igual que en
: boxed_col umn.
: r adi o_col umn {atributos...}
Agrupa en una columna a una serie de botones de accin excluyentes. Cada botn ser un
componente : r adi o_but t on. Slo uno de los botones puede encontrarse activado cada vez.
key -- Clave de accin para la columna. Se puede indicar una clave, al contrario que en
: col umn o ----
------ : boxed_col umn.
val ue -- Valor de clave (atributo key) del botn inicialmente activado.
: boxed_r adi o_col umn {atributos...}
Agrupa a una serie de botones de accin excluyentes en una columna enmarcada dentro de un
rectngulo. Su funcionamiento es similar al de : r adi o_col umn.
l abel -- Ttulo en el borde superior del marco. Las mismas posibilidades que en
: boxed_col umn.
key -- Clave de accin para la columna. Se puede indicar una clave, al contrario que en
: col umn o
: boxed_col umn.

val ue -- Valor de clave (atributo key) del botn inicialmente activado.
: r adi o_r ow {atributos...}
Agrupa en una fila a una serie de botones de accin excluyentes. Cada botn ser un elemento
: r adi o_but t on. Su funcionamiento y atributos son los de : r adi o_col umn.
: boxed_r adi o_r ow {atributos...}
Agrupa a una serie de botones de accin excluyentes, en una fila enmarcada dentro de un rec-
tngulo. Cada botn ser un elemento : r adi o_but t on. Su funcionamiento y atributos son los
de : boxed_r adi o_col umn.
DIEZ.4.3.2. Componentes individuales de ac-
cin
: t oggl e {atributos...}
Casilla de activacin o conmutador que puede valer 0 1. Si se encuentra activada, se mues-
tra con una seal en su interior en forma de o .
l abel -- Ttulo a la derecha de la casilla.
val ue -- Estado inicial de la casilla. Por defecto es 0, desactivada. Si es 1 la casilla est activa-
da.
key -- Clave de accin asignada a la casilla.
act i on - - Accin asignada por defecto a la casilla.
wi dt h -- Anchura mnima.
hei ght - - Altura mnima.
f i xed_wi dt h -- Anchura fija.
f i xed_hei ght - - Altura fija.
al i gnment -- Alineacin de la casilla, respecto al elemento en el que estincluida.
i s_enabl ed -- Estado de habilitacin.
i s_t ab_st op -- Tabulador tiene o no en cuenta esta casilla.
: but t on {atributos...}
Botn con un texto en su interior que efecta una accin al ser pulsado. Los atributos posibles
y su funcionalidad son los mismos que para : t oggl e aadindose los siguientes y con su ca-
racterstica propia en l abel :
mnemoni c -- Carcter de tecla mnemotcnica para seleccionar.
i s_def aul t -- Botn seleccionado o no al pulsar I NTRO.
i s_cancel -- Botn seleccionado o no al pulsar ESC.
l abel -- Texto que aparece dentro del botn.
: r adi o_but t on {atributos...}
Botn componente dentro de una fila o columna de botones excluyentes. Su valor puede ser 0
1. Como slo uno de ellos puede estar activado en cada grupo del tipo :...radio... se ac-
tivar el ltimo al que se haya asignado valor 1. Atributos los de : t oggl e, con las siguientes
puntualizaciones y excepciones:
l abel -- Ttulo a la derecha del botn.
val ue -- Estado inicial del botn. Por defecto es 0, desactivado. Si es 1 el botn est activado.
mnemoni c -- Carcter de tecla mnemotcnica.
: edi t _box {atributos...}

Casilla para que el usuario introduzca datos, con un ttulo a su izquierda, y una ventana donde
el usuario escribe valores o modifica los existentes. El ttulo se justifica por la derecha. Atribu-
tos los de : t oggl e ms las siguientes puntualizaciones y aadidos:
l abel -- Ttulo a la izquierda de la casilla.
val ue -- Contenido inicial de la casilla. Aparece justificado a la izquierda.
mnemoni c -- Carcter mnemotcnico.
al l ow_accept -- La casilla se activa al pulsar I NTRO.
edi t _wi dt h -- Anchura en caracteres de la ventana de edicin.
edi t _l i mi t -- Nmero mximo de caracteres que el usuario puede introducir.
: i mage_but t on {atributos...}
Presenta una imagen o icono en lugar de texto. Al ser designado, se devuelven las coordena-
das del punto de designacin. Esto resulta til para asignar diferentes acciones a zonas de la
imagen. Por ejemplo, este mecanismo se utiliza en el cuadro del comando de AutoCAD 14
DDVPOI NT. El tamao se especifica mediante una anchura y altura, o mediante uno de ambos
atributos y aspect _r at i o. Atributos los de : t oggl e ms los siguientes:
mnemoni c -- Carcter mnemotcnico.
al l ow_accept -- Activado o no a pulsar INTRO.
aspect _r at i o -- Relacin entre altura y anchura de la imagen.
col or -- Color de fondo de la imagen.
: l i st _box {atributos...}
Casilla que contiene una lista de trminos organizados en filas. Si hay ms filas de las que ca-
ben en el tamao de la casilla, se despliega un cursor deslizante para moverse por la lista. El
atributo val ue contiene los nmeros de orden de todos los trminos inicialmente iluminados o
seleccionados en la lista. Sus atributos son los de : t oggl e, teniendo en cuenta las siguientes
consideraciones:
l abel -- Ttulo encima de la casilla de lista.
val ue -- Cadena entrecomillada que contiene cero (" " ) o ms nmeros enteros separados por
espacios. ----
-------- Cada nmero es un ndice (se empieza a contar desde 0) que designa el elemento de
la lista que
-------- aparece seleccionado inicialmente. Si mul t i pl e_sel ect es f al se, slo un elemento
puede estar
-------- seleccionado.
mnemoni c -- Carcter de tecla mnemotcnica.
al l ow_accept -- Activada o no al pulsar I NTRO.
l i st -- Lista de trminos inicialmente incluidos en la casilla.
t abs -- Posiciones de tabulacin para presentar los trminos en columnas.
: popup_l i st {atributos...}
Casilla con una flecha a su derecha que, al sealarse despliega una lista. Slo uno de los tr-
minos de la lista puede estar designado. Sus atributos y funcionalidad son los mismos que pa-
ra : l i st _box, exceptuando al l ow_accept y mul t i pl e_sel ect , y aadiendo edi t _wi dt h:
l abel -- Ttulo a la izquierda de la casilla.
val ue -- Cadena entrecomillada que contiene un nmero entero (por defecto 0) con el ndice
del elemento de
-------- la lista que aparece seleccionado inicialmente en la ventana de la casilla, cuando no
-------- est desplegada la lista.
edi t _wi dt h -- Anchura en caracteres de la ventana de lista.
: sl i der {atributos...}
Barra deslizante, con un cursor que se desplaza y flechas en sus extremos. Los atributos son
los mismos que para : t oggl e, con las siguientes consideraciones y aadidos:
val ue -- Cadena entrecomillada que contiene un nmero entero con el valor inicial del cursor
deslizante. Por
--------- defecto es el establecido en mi n_val ue.
l ayout -- Orientacin horizontal o vertical de la barra.
mi n_val ue -- Valor mnimo en el extremo inicial.
max_val ue -- Valor mximo en el extremo final.
smal l _i ncr ement -- Incremento mnimo al pulsar las flechas de los extremos.
bi g_i ncr ement -- Incremento mayor al sealar la barra a ambos lados del cursor.
DIEZ.4.3.3. Componentes decorativos e infor-
mativos
: i mage {atributos...}
Rectngulo en el que se presenta una imagen vectorial (debe ser un archivo . SLD de foto de
AutoCAD). Se debe especificar una anchura y altura, o bien uno de ambos atributos y as-
pect _r at i o. Sus atributos son los mismos que para : i mage_but t on excepto al l ow_accept .
: t ext {atributos...}
Componente que muestra una cadena de texto. Para los textos fijos, se especifica un atributo
l abel con su contenido. Para los textos variables, se especifica una clave de accin mediante
el atributo key. Los atributos posibles son los siguientes:
l abel -- Texto fijo.
key -- Clave para texto variable.
val ue -- Estado inicial.
hei ght -- Altura mnima.
wi dt h -- Anchura mnima.
f i xed_hei ght - - Altura fija.
f i xed_wi dt h -- Anchura fija.
al i gnment - - Alineacin respecto a donde est incluido.
i s_bol d -- Si es t r ue muestra el texto en negrita.
: concat enat i on {: t ext _par t ... }
Lnea de texto formada por varios componentes : t ext _par t sucesivos. Se utiliza para presen-
tar un mensaje que consta de varias partes que pueden variar independientemente entre s en
tiempo real. No tiene atributos.
: t ext _par t {atributos...}
Componente de texto que forma parte de : concat enat i on. Los atributos que puede incluir son
l abel , con el contenido del texto, y key.
: par agr aph {: t ext _par t ...| : concat enat i on...}
Conjunto de componentes : t ext _par t o : concat enat i on dispuestos en vertical. Se utiliza
para construir prrafos. No tiene atributos.
: spacer {atributos... }
Componente en blanco que se utiliza para mejorar el aspecto cuando la distribucin homog-
nea y simtrica de los elementos de un cuadro no ofrece una esttica adecuada. El tamao se
especifica mediante los atributos hei ght , wi dt h, f i xed_hei ght , f i xed_wi dt h y al i gnment .
spacer _0;
Se trata de un componente predefinido (por eso se indica como los atributos, sin llaves, sin : y
con ; al final) sin tamao concreto, que se inserta para situar un espacio en una zona deter-
minada y ensanchar el resto de componentes.
spacer _1;
Componente predefinido de tamao unitario, es decir, el mnimo visible para el usuario. Se
utiliza por los mismos motivos que spacer _0.
DIEZ.4.3.4. Botones de salida y componentes
de error
er r t i l e;
Componente predefinido (se indica como los atributos, sin llaves, sin : y con ; al final) de
error que aparece como una lnea de texto en la parte inferior del cuadro. Tiene asignada la
clave (atributo key) er r or .
ok_onl y;
Componente predefinido que contiene una : r ow con el botn de validacin Aceptar. Tiene
asignada la clave accept .
ok_cancel ;
Componente predefinido que contiene una : r ow con los botones Aceptar y Cancelar. Tienen
asignadas las claves accept y cancel .
ok_cancel _hel p;
Componente predefinido que contiene una : r ow con los botones Aceptar, Cancelar y Ayuda....
Tienen asignadas las claves accept , cancel y hel p.
ok_cancel _hel p_er r t i l e;
Componente predefinido que contiene dos : r ow, una con los botones Aceptar, Cancelar y Ayu-
da... y otra con el componente de error. Tienen asignadas las claves accept , cancel , hel p y
er r or . Es la combinacin ms habitual en la mayora de cuadros de dilogo.
ok_cancel _hel p_i nf o;
Componente predefinido que contiene una : r ow con los botones Aceptar, Cancelar, Ayuda... e
Info.... Tienen asignadas las claves accept , cancel , hel p e i nf o.
NOTA: Uno de estos elementos ok_... habr de exitir siempre en un cuadro de dilogo para
que ste funcione correctamente. La no presencia de uno de ellos, producir un error al car-
garse el letrero.
DIEZ.4.4. Elementos predefinidos
Para mayor facilidad existen, como acabamos de ver, unos aspectos y tamaos predefinidos de
cuadros, que AutoCAD asume por defecto, y que estn almacenados en dos archivos: BA-
SE. DCL y ACAD. DCL (en el directorio \ SUPPORT\ ).
Los elementos o componentes predefinidos se indican como si fueran un atributo ms. Por
ejemplo, el elemento predefinido para incluir la casilla de validacin Aceptar. Este elemento se
llama ok_but t on y en la versin espaola de AutoCAD se ha cambiado el texto que visualiza
por Aceptar, en lugar de OK. Su definicin en el archivo BASE. DCL llama a otro elemento pre-
definido en el mismo archivo, como se muestra a continuacin:
r et i r ement _but t on : but t on {
f i xed_wi dt h = t r ue;
wi dt h = 8;
al i gnment = cent er ed;
}
ok_but t on : r et i r ement _but t on {
l abel = " Acept ar " ;
key = " accept " ;
i s_def aul t = t r ue;
}
En primer lugar, el elemento : r et i r ement _but t on define una casilla (instruccin DCL
: but t on), con el atributo f i xed_wi dt h = t r ue para que la casilla no se extienda todo el espa-
cio disponible en el cuadro sino slo el tamao del texto Aceptar, con el atributo wi dt h = 8
que es la longitud de la casilla, y con el atributo al i gnment = cent er ed para que la casilla
ocupe el centro de la fila del cuadro en que se utiliza. El atributo key asocia una clave de ac-
cin al elemento. Desde el programa en AutoLISP que controla el cuadro, el valor accept per-
mitir especificar una accin para efectuar al salir del cuadro. Ese valor predefinido del atributo
key hace referencia siempre a las casillas de validacin de todos los cuadros.
A continuacin, el elemento ok_but t on llama a : r et i r ement _but t on con sus atributos y aa-
de tres nuevos atributos: l abel = " Acept ar " que es el texto en el interior de la casilla, key =
" accept " que es el texto asociado a la aplicacin, e i s_def aul t = t r ue para que acepte la
casilla al terminar el cuadro con I NTRO.
De forma similar, el elemento ok_cancel se definira:
ok_cancel : r et i r ement _but t on {
l abel = " Cancel ar " ;
key = " cancel " ;
i s_cancel = t r ue;
}
La casilla ok_but t on existe en un componente predefinido llamado ok_onl y. Ambas casillas
juntas, existen en un grupo predefinido en fila, con el nombre ok_cancel . Aadiendo una ter-
cera casilla Ayuda..., existe tambin como grupo predefinido con el nombre ok_cancel _hel p.
De esta forma, a base de mdulos incluidos unos en otros, se pueden utilizar en los cuadros
elementos comunes predefinidos.
DIEZ.5. PROGRAMANDO CUADROS DCL
Una vez llegado a este punto, y tras ver todos los tiles y argumentos que podemos utilizar,
vamos a llevar todo a la prctica comenzando a programar nuestros propios letreros de dilo-
go. Como ya hemos comentado, estos letrero por ahora no funcionarn, porque hay que con-
trolarlos desde AutoLISP, tema que se explicar en el MDULO ONCE. Pero podremos ver
como quedan en pantalla y, una vez dominado el proceso de diseo, podremos subir un esca-
ln ms y hacer que funcionen, como decimos, desde un programa en AutoLISP.
El primer ejemplo que vamos a estudiar es el ms sencillo que podemos encontrar. Se trata de
un cuadro de dilogo que simplemente muestre un texto dentro de l y un botn Aceptar para
cerrarlo.
DIEZ.5.1. Ejemplo sencillo: letrero informativo
Lo que queremos conseguir es el cuadro de dilogo de la figura siguiente:

Lo primero que vamos a ver es un esquema jerrquico de la divisin del cuadro en elementos.
Este esquema conviene hacerlo siempre antes de disear un cuadro, sobre todo cuando es
complejo, para ir guindonos a la hora de escribir el cdigo en DCL. A continuacin examina-
remos dicho cdigo perteneciente a este cuadro, acompaado de una explicacin que se pro-
porciona.
Anlisis jerrquico
: di al og
- - - |__ : r ow
- - - - - - |__ : col umn
- - - - - - - - - |__ : t ext
- - - - - - - - - |__ ok_onl y
Cdigo
pr ueba: di al og {l abel =" Pr ueba en DCL" ;
: r ow {
: col umn {
: t ext {l abel =" Est o es una pr ueba" ; al i gnment =cent er ed; }
ok_onl y;
}
}
}
Explicacin
Lo primero que se hace es comenzar el cuadro con el tile : di al og, el cual ha de ir siempre
precedido del nombre identificador que le queremos dar al cuadro. Este nombre ser el que
luego se maneje desde AutoLISP. Un carcter { abre dicho tile para introducir todo el resto del
programa. : di al og siempre habr de estar al principio de un programa en DCL y lo contendr
por completo. El atributo l abel para : di al og da un nombre al letreto de dilogo en su parte
superior (barra de ttulo); es la zona de color generalmente azul (navy). Al final, siempre un
carcter ; que separa argumentos.
A continuacin, y sin indicar otros atributos para : di al og porque no nos interesa, definimos
una fila con : r ow. Dentro de ella se encuentra una columna definida con : col umn. Dentro de
esta columna, un texto centrado en ella (al i gnment =cent er ed) que dice Esto es una prueba
(l abel ). Entre argumentos seguimos separando con ; , incluso al final, ya que lo que venga
despus, en el fondo, son argumentos del tile que engloba a todo, de : di al og.
Dentro de la misma columna insertamos tambin un botn Aceptar, el cual, al ser un elemento
predefinido no comienza con : , y se centra automticamente. Al final cerramos todas la llaves
abiertas, la de : col umn, la de : r ow y la de : di al og.
Por qu hemos definido los elementos dentro de una columna, que se encuentra a su vez de-
ntro de una fila, y no dentro de dos filas separadas? La razn es simple. Si el cdigo de este
programa hubiera sido as:
pr ueba: di al og {l abel =" Pr ueba en DCL" ;
: r ow {
: t ext {l abel =" Est o es una pr ueba" ; al i gnment =cent er ed; }
}
: r ow {
ok_onl y;
}
}
tanto el texto como el botn Aceptar se situaran donde se encuentran en el ejemplo anterior,
es decir, uno debajo del otro, pero alineados ambos a la izquierda. Por qu? Sencillamente
porque se encuentran situados en dos filas y, al indicar que queden centrados (al i gnment para
el texto y por defecto en ok_onl y), se centrarn con respecto a la fila, es decir con una justifi-
cacin vertical centrada.
Si se centra un elemento con respecto a una columna, se centrar dejando espacio a su iz-
quierda y a su derecha (se coloca en el centro de la columna). Por el contrario, si se centra un
elemento con respecto a una fila, se centrar dejando espacio arriba y abajo (se coloca en el
centro de la fila). El resultado del programa anterior es el siguiente:


Por otro lado, los elementos ok_... se centran tambin si no se encuentran dentro de ninguna
fila ni columna. As, el ejemplo vlido (no este anterior) tambin poda haberse conseguido as:
pr ueba: di al og {l abel =" Pr ueba en DCL" ;
: r ow {
: col umn {
: t ext {l abel =" Est o es una pr ueba" ; al i gnment =cent er ed; }
}
}
ok_onl y;
}
NOTA: Para que un cuadro funcione, y como hemos dicho ya anteriormente, siempre debe
existir alguno de los elementos ok_....
Hablando ahora de la disposicin del cdigo en el archivo ASCII, decir que lo ms lgico es
indicarlo como se muestra en estos ejemplos. Los tiles que se encuentren dentro de otros sue-
len separarse de los anteriores por un I NTRO, y cuando un tile supone el fin de una ramifica-
cin del rbol jerrquico, se coloca entero en una lnea (con sus atributos y llave de fin). Ade-
ms, se pueden indicar tabuladores y espaciados para sangrar lneas (como se ve en prueba.zip)
y proporcionar claridad a la jerarqua. Tambin puede haber espacio de claridad en cualquier
otro punto: despus y antes de los caracteres =, entre argumentos y etctera.
Por ltimo, decir que el ; tras ok_onl y es necesario, aunque despus no aparezcan ms argu-
mentos.
DIEZ.5.1.1. Cmo cargar y visualizar el cuadro
En el MDULO siguiente trataremos todo lo referente a la interaccin de AutoLISP con los
cuadros de dilogo en DCL. Sin embargo, y para que podamos ver nuestro nuevo cuadro en
pantalla, vamos a explicar muy por encima los pasos que debemos seguir para cargar un cua-
dro en AutoCAD.
1. Guardar nuestro archivo de definicin con extensin . DCL, por ejemplo, PRUEBA. DCL, y en
un directorio de un disco, por ejemplo en C: \ DCL\ del disco duro.
2. En la lnea de comandos de AutoCAD 14 escribir la siguiente lnea de AutoLISP y pulsar
I NTRO (hay que escribirla como se indica: con los parntesis, espacios, comillas, barras incli-
nadas normales y dems):
( l oad_di al og " c: / dcl / pr ueba. dcl " )
Evidentemente, la ruta de acceso y el archivo correspondern a nuestro nombre y ubicacin
propios.
Esto devolver un ndice de carga (un nmero en la lnea de comandos). Por ejemplo 64. La
primera vez que se cargue un cuadro ser 1, luego 2, 3, 4...
3. Escribir esta otra lnea ahora:
( new_di al og " pr ueba" 64) ( st ar t _di al og)
Lo que ahora aqu es " pr ueba" se corresponde con el nombre indicado inmediatamente antes
del tile : di al og, no con el nombre de archivo. De todas formas, se recomienda hacer coincidir
estos dos nombres para evitar confusiones. Lo que aqu es 64 es el ndice devuelto en la ope-
racin anterior realizada. Deberemos indicar el que nos haya devuelto AutoLISP a nosotros.
Entre el primer parntesis de cierre y el segundo de apertura no hay espacio.
Tras esto el cuadro se muestra en pantalla y responde.
DIEZ.5.2. Ejemplo con casillas de verificacin
En el siguiente ejemplo vamos a definir un cuadro de dilogo como el siguiente:

Anlisis jerrquico
: di al og
|__ : r ow
|---|__ : boxed_col umn
|---| |__ : t oggl e
|---| |__ : t oggl e
|---| |__ : t oggl e
|---|__ : boxed_col umn
|------|__ : t oggl e
|------|__ : t oggl e
|------|__ : t oggl e
|__ spacer _1
|__ : r ow
|---|__ : t oggl e
|__ : r ow
|---|__ : t oggl e
|__ spacer _1
|__ ok_cancel
Cdigo
/ / Ej empl o con casi l l as de ver i f i caci n
ver i f : di al og {l abel =" Casi l l as" ;
: r ow {
: boxed_col umn {l abel =" Pr i mer as casi l l as" ;
: t oggl e {l abel =" Casi l l a 1" ; val ue=1; }
: t oggl e {l abel =" Casi l l a 2" ; }
: t oggl e {l abel =" Casi l l a 3" ; }
}
: boxed_col umn {l abel =" Segundas casi l l as" ;
: t oggl e {l abel =" Casi l l a 4" ; }
: t oggl e {l abel =" Casi l l a 5" ; val ue=1; i s_t ab_st op=f al se; }
: t oggl e {l abel =" Casi l l a 6" ; val ue=1; i s_t ab_st op=f al se; }
}
}
spacer _1;
: r ow {: t oggl e {l abel =" Ot r a casi l l a en ot r a f i l a" ; val ue=1; i s_enabl ed=f al se; }}
: r ow {: t oggl e {l abel =" Ot r a casi l l a ms en l a l t i ma f i l a" ; }}
spacer _1;
ok_cancel ;
}
/ / Fi n del ej empl o

(El ejemplo correctamente sangrado lo tienes en ejemplo.zip)
Explicacin
Como podemos ver este ejemplo ya est un poco ms elaborado. Tras el comienzo de rigor,
podemos ver en la estructura jerrquica proporcionada que este letrero de dilogo se divide
principalmente en tres filas. La primera fila est a su vez dividida en dos columnas, que en
este caso son enmarcadas (: boxed_col umn), cada una con su ttulo superior y con tres casillas
de verificacin dentro.
Las otras dos filas no se subdividen en columnas y nicamente tienen un elemento : t oggl e
cada una. Al final existe un tile predefinido ok_cancel , que muestra los botones de Aceptar y
Cancelar.
Apreciamos algo nuevo en este cuadro con respecto al anterior; es la introduccin de dos ele-
mentos predefinidos spacer _1, los cuales introducen una lnea (altura de 1 carcter) para se-
parar las dos casilla inferiores tanto de las : boxed_col umn (por arriba) como de los botones de
ok_cancel (por abajo). Como ya hemos comentado anteriormente, los cuadros de dilogo se
"autocomponen" en el espacio que ocupan, es decir, el hecho de que indiquemos dos lneas en
blanco con spacer _1 no quiere decir que el cuadro vaya a resultar ms grande, sino que los
elementos incluidos en l se apelotonarn entre s para dejar dicho espacio libre.
La diferencia que existe entre spacer _1 y spacer _0, es que ste ltimo no tiene un tamao
concreto como spacer _1 de tamao un carcter sino que se inserta para situar un espacio
en una zona determinada y ensanchar el resto de los componentes.
NOTA: Prubese a definir el cuadro sin los tiles spacer _1.
Vemos tambin en el ejemplo, que algunas casillas aparecen por defecto sealadas. Esto se
consigue haciendo el atributo val ue igual a 1. val ue hace que al iniciar el cuadro los elemen-
tos tengan el valor de la cadena indicada por defecto. Un elemento : t oggl e no contiene cade-
nas, ya que es una especie de conmutador, y todos estos conmutadores tienen dos estados:
sealado o no sealado, valor 1 y valor 0 respectivamente.
De todas formas, en ejemplos como el que veremos a continuacin, el cual contiene conmuta-
dores para variables de AutoCAD, lo ms lgico sera que el cuadro se inicializara mostrando
por defecto los valores actuales en el sistema. Esto slo se consigue desde AutoLISP y ser
tratado en el prximo MDULO.
Lo siguiente que podemos apreciar a simple vista es la no disponibilidad de la penltima de las
casillas, la que dice Otra casilla en otra fila. Esto es debido al atributo i s_enabl ed=f al se. Este
atributo permite habilitar o inhabilitar al inicio del cuadro los diversos componentes que lo ad-
miten. Ntese que, aunque est inhabilitado, la casilla est activada (val ue=1), esto es perfec-
tamente factible.
En la prctica, lo ms lgico ser inhabilitar o habilitar los elementos segn qu condiciones
del sistema desde AutoLISP.
Por ltimo existe otra caracterstica en la que quiz no hemos reparado al observar el cuadro
pero que est ah. Slo debemos pulsar repetidamente la tecla TAB para recorrer cada uno de
los elementos del letrero (como es tpico en cuadros tipo Windows) para darnos cuenta de que
tanto Casilla 5 como Casilla 6 las pasa por alto. El atributo que define esta caracterstica es
i s_t ab_st op cuando es igual a f al se. Por defecto es t r ue en todos los tiles; solamente es
false en los que se indica expresamente como aqu o en los que estn inhabilitados con
i s_enabl ed=f al se, que acabamos de comentar.
DIEZ.5.3. Letrero de control de variables de
AutoCAD

Veamos ahora un pequeo ejemplo de cuadro en el que se combinan varios elementos. Se
corresponde con el primer ejemplo que aparece en este MDULO (figura primera), el de con-
trol de variables de AutoCAD denominado Variables y que se encuentra en la pgina segunda
de este MDULO DI EZ.
Existen numerosas variables de sistema de AutoCAD 14 que, o bien no se encuentra definido
ningn acceso directo a ellas en ningn cuadro de dilogo, o bien nos los encontramos dichos
accesos desperdigados por entre los mens o botones de las barras de herramientas del pro-
grama. El cuadro que estudiaremos a continuacin recoge una serie de estas variables, pro-
porcionando un buen y rpido acceso a las mismas.
Anlisis jerrquico
: di al og
|__ : r ow
|---|__ : boxed_col umn
|---|---|__ : edi t _box
|---|---|__ : edi t _box
|---|---|__ spacer _1
|---|---|__ : but t on
|---|__ : boxed_col umn
|-------|__ : edi t _box
|-------|__ : edi t _box
|-------|__ spacer _1
|-------|__ : t oggl e
|-------|__ : but t on
|__ : r ow
|---|__ : t oggl e
|__ : r ow
|---|__ : t oggl e
|__ : r ow
|__ ok_cancel
Cdigo
/ / Ar chi vo . DCL de cont r ol de var i abl es de Aut oCAD.
var i abl es: di al og {l abel =" Var i abl es" ;
: r ow {
: boxed_col umn {l abel =" Mal l as" ;
: edi t _box {l abel =" SURFTAB&1" ; edi t _wi dt h=3; edi t _l i mi t =3; key=" Sur f 1" ; }
: edi t _box {l abel =" SURFTAB&2" ; edi t _wi dt h=3; edi t _l i mi t =3; key=" Sur f 2" ; }
spacer _1;
: but t on {l abel =" De&f ect o" ; f i xed_wi dt h=t r ue; al i gnment =cent er ed; key=" Def 1" ; }
}
: boxed_col umn {l abel =" Sl i dos" ;
: edi t _box {l abel =" I sol neas" ; edi t _wi dt h=2; edi t _l i mi t =2; key=" I so" ;
mnemoni c=" s" ; }
: edi t _box {l abel =" Suavi zado" ; edi t _wi dt h=4; edi t _l i mi t =8; key=" Suav" ;
mnemoni c=" v" ; }
spacer _1;
: t oggl e {l abel =" Si &l uet a" ; key=" Si l " ; }
: but t on {l abel =" Def e&ct o" ; f i xed_wi dt h=t r ue; al i gnment =cent er ed; key=" Def 2" ; }
}
}
spacer _1;
: r ow {: t oggl e {l abel =" &Di l ogo al i mpr i mi r " ; key=" Di a" ; }}
: r ow {: t oggl e {l abel =" &Gest i n de ar chi vos" ; key=" Ges" ; }}
spacer _1;
: r ow {ok_cancel _hel p; }
}

(El ejemplo correctamente sangrado lo tienes en variables.zip)
Explicacin
Descubrimos aqu otro nuevo tile, : edi t _box. : edi t _box define una casilla de edicin en la
que el usuario introducir datos, en este caso valores a las variables en cuestin. A estas casi-
llas, entre otros, casi siempre les acompaan dos argumentos muy tpicos para ellas, los cua-
les son edi t _wi t h y edi t _l i mi t . edi t _wi t h controla el tamao fsico de la casilla, o sea, el
tamao en caracteres que nosotros veremos en el letrero de dilogo. Pero, como sabemos, a
veces el tamao fsico aparente poco tiene que ver con el nmero de caracteres que podemos
introducir en una casilla.
Muchas veces, como decimos, una casilla tiene una longitud aparentemente pequea y, sin
embargo, debemos introducir en ella una cadena de caracteres extensa. Lo que ocurre es que,
al llegar escribiendo al final aparente de la casilla, se produce un scroll o desplazamiento hacia
la izquierda y, mientras se van escondiendo los primeros caracteres introducidos, podemos
seguir escribiendo por la derecha hasta un tope. Este tope real de escritura es el que se con-
trola mediante edi t _l i mi t , argumento tambin indicado en las casillas editables del ejemplo.
Un nuevo argumento que podemos observar es key. key define una palabra clave para cada
elemento del cuadro que luego ser utilizada desde AutoLISP para controlar dicho elemento.
Todos los componentes que interactan en un letrero de dilogo deben poseer un argumento
key. As, y despus en AutoLISP, podremos indicar que "tal elemento con determinada key
realice tal accin" al determinarse unas caractersticas concretas en la sesin actual de dibujo.
NOTA: Todo esto se estudiar en el MDULO siguiente, por ahora que quede afianzada la
idea.
Con respecto a la clave introducida en el atributo key, decir que se realiza distincin entre ma-
ysculas y minsculas. Por ejemplo, si le damos una clave " Suav" a un tile y, despus, desde
AutoLISP indicamos " suav" , el elemento no ser reconocido y no funcionar correctamente.
Examinemos ahora los elementos : but t on introducidos. Estos elemento definen botones que,
al ser pulsados realizarn una determinada accin controlada desde AutoLISP. El argumento
l abel indica el nombre que ocupar el espacio del botn. El argumento f i xed_wi dt h, por su
lado, indica si un elemento tiende o no a ocupar el espacio disponible. En este caso, si se esta-
blece como t r ue, o no se establece (t r ue es la opcin predeterminada), el botn ocupar todo
el espacio del que dispone de lado a lado de : boxed_col umn. El efecto no es muy atractivo
prubese a quitarle dicho atributo o a declararlo como t r ue por lo que se suele establecer
como f al se f i xed_wi dt h en los botones de accin, lo que hace que el tamao fsico de los
mismos se trunque con respecto al tamao de texto que lleva dentro.
En el cdigo que define este cuadro de dilogo podemos apreciar los caracteres & introducidos
en las cadenas de etiquetas l abel . Estos caracteres funcionan de la misma manera que lo ha-
can en la definicin de mens, vista en el MDULO UNO de este curso. Es decir, el carcter
que sigue a & ser una definicin de tecla rpida o mnemotcnica (que aparecer subrayada)
la cual, con solo ser pulsada (o con ALT dependiendo del momento), har acceder directamen-
te al elemento que la lleve en su definicin. Pero ojo, es una acceso rpido no una tecla de
accin. Por ejemplo, los botones definidos que estableceran una configuracin por defecto de
las variables del cuadro, al pulsar una de las teclas mnemotcnicas que llevan implcitos sern
designados (se dibuja una pequea lnea de puntos alrededor del texto) pero no pulsados. Para
pulsarlos habra que presionar I NTRO.
Las consideraciones que debemos observar a la hora de definir estas teclas son las mismas
que en los mens. Por ejemplo, no podemos definir dos iguales en un mismo letrero (si existen
dos iguales slo funcionar la primera definida en el archivo . DCL o irn rotando), ni letras
acentuadas, etctera.
Otra forma de definir estas teclas mnemotcnicas es con el atributo mnemoni c. Podemos ver un
par de ejemplos en el cdigo anterior (en las : edi t _box Isolneas y Suavizado). mnemoni c se
hace igual a un carcter (si se indica ms de uno nicamente se toma el primero) que ha de
corresponder con uno existente en el atributo l abel . Si no existe en la cadena de l abel dicho
carcter, la definicin ser ignorada. Si existen dos caracteres iguales en l abel , se toma como
vlido el primero.
NOTA: Cuidado con los botones Ayuda e Info... que vienen con los caracteres "u" e "I" predefi-
nidos como teclas mnemotcnicas.
Por ltimo decir que el tile predefinido ok_but t on_hel p, que muestra los tres botones corres-
pondientes, est introducido dentro de la definicin de una : r ow. Como sabemos esto no es
necesario, pero se suele establecer as por mayor estructuracin y claridad.
NOTA: En este cuadro de este ltimo ejemplo existen un par de aspectos que demuestran lo
que nunca se debe hacer a la hora de disear un letrero de dilogo, y si queremos que resulte
vistoso. No es que quede mal del todo, pero aprciese la falta de gusto al incluir ms elemen-
tos en la : boxed_col umn de la derecha que en la de la izquierda. Tambin aprciese lo des-
igual de las dos : edi t _box de la : boxed_col umn derecha. Podan haberse hecho iguales limi-
tando despus su tamao real mediante edi t _l i mi t .
DIEZ.5.4. Parmetros de control de una curva
Vamos a crear ahora un cuadro que controla los parmetros de creacin de una curva helicoi-
dal en 3D mediante una polilnea. El programa AutoLISP que controla por completo este cuadro
se explicar, como ejemplo tambin, en el MDULO siguiente. El letrero es el siguiente:

Anlisis jerrquico
: di al og
|__ : r ow
|---|__ : i mage
|---|__ : boxed_col umn
|-------|__ : r adi o_r ow
|-------|---|__ : r adi o_but t on
|-------|---|__ : r adi o_but t on
|-------|__ : edi t _box
|-------|__ : edi t _box
|__ : r ow
|---|__ : boxed_col umn
|---|---|__ : edi t _box
|---|---|__ : popup_l i st
|---|__ : boxed_col umn
|-------|__ : r adi o_r ow
|-------|---|__ : r adi o_but t on
|-------|---|__ : r adi o_but t on
|-------|__ : edi t _box
|-------|__ : edi t _box
|__ : r ow
|---|__ ok_cancel
|__ : r ow
|__ er r t i l e

Cdigo
hel i ce: di al og {l abel =" Hl i ce con Pol i l nea 3D" ;
: r ow {
: i mage {wi dt h=20; aspect _r at i o=0. 8; col or =0; f i xed_hei ght =t r ue; key=i mg; }
: boxed_col umn {l abel =" Radi os" ;
: r adi o_r ow {
: r adi o_but t on {l abel =" &I gual es" ; val ue=" 1" ; key=i gu; }
: r adi o_but t on {l abel =" &Di f er ent es" ; key=di f ; }
}
: edi t _box {l abel =" Radi o i &ni ci al : " ; edi t _wi dt h=6; f i xed_wi dt h=t r ue; key=r adi n; }
: edi t _box {l abel =" Radi o &f i nal : " ; edi t _wi dt h=6; f i xed_wi dt h=t r ue;
i s_enabl ed=f al se; key=r adi f ; }
spacer _1;
}
}
: r ow {
: boxed_col umn {l abel =" Vuel t as" ; f i xed_wi dt h=t r ue;
: edi t _box {l abel =" N &vuel t as: " ; edi t _wi dt h=2; edi t _l i mi t =2; key=nv; }
: popup_l i st {l abel =" &Pr eci si n: " ; edi t _wi dt h=8; l i st =" 8 pt os. \ n16 pt os. \ n24
pt os. \ n32 pt os. " ; key=pr e; }
spacer _1;
}
: boxed_col umn {l abel =" Paso/ Al t ur a" ;
: r adi o_r ow {
: r adi o_but t on {l abel =" P&aso" ; val ue=" 1" ; key=bpas; }
: r adi o_but t on {l abel =" Al t u&r a" ; key=bal t ; }
}
: edi t _box {l abel =" Pas&o: " ; edi t _wi dt h=8; key=pas; }
: edi t _box {l abel =" Al &t ur a: " ; edi t _wi dt h=8; i s_enabl ed=f al se; key=al t ; }
}
}
: r ow {ok_cancel ; }
: r ow {er r t i l e; }
}

(El ejemplo correctamente sangrado lo tienes en helice.zip)


Explicacin
El cuadro es muy parecido a los anteriores, nicamente se ha pretendido introducir elementos
que no se haban visto an. Como hemos podido venir comprobando, la estructura de un cua-
dro de dilogo es siempre la misma. Como los argumentos son comunes a todos los tiles, sim-
plemente hemos de adaptar su significado a cada uno de ellos.
En este ltimo ejemplo que vamos a comentar se han introducido, como decimos, elementos
nuevos. El primero con el que nos tropezamos es : i mage. Este tile define un hueco para inser-
tar una imagen que ser una foto . SLD de AutoCAD. Los argumentos mnimos para definir un
hueco de imagen son los que se corresponden a la altura y a la anchura. Esto podemos definir-
lo con wi dt h y hei ght , o con cualquiera de los dos y aspect _r at i o. La diferencia consiste en
que, con los dos argumentos wi dt h y hei ght damos a la imagen una altura y una anchura
numrica como tal, y con cualquiera de estos y aspect _r at i o, le proporcionamos una altura o
una anchura y un factor de proporcin de aspecto que har que el cuadro y por ende la ima-
gen sea ms o menos cuadrado o ms o menos rectangular. Un aspect _r at i o de 1 define
un cuadrado.
Lo normal es introducir tambin un atributo col or con : i mage para darle un color de fondo.
El atributo f i xed_hei gt h=t r ue ajusta el cuadro un poco. Y es que, como sabemos, la tcnica
de construccin de un letrero de dilogo mediante DCL no es una ciencia exacta. Al final, el
cuadro se reajusta y establece un poco a s mismo dependiendo de los valores mayores de una
columna y/o una fila, del nmero de elementos, etctera.
Otro nuevo tile es : r adi o_r ow. : r adi o_r ow define una fila de botones excluyentes. stos son
esas pequeas casillas circulares que slo puede estar una activada en cada grupo. Cada ele-
mento de una : r adi o_r ow ha de ser un : r adi o_but t on. Estos ltimos se definen con su l abel
correspondiente y, en este caso, con un val ue=1 en uno de los botones para que aparezca
sealado al abrir el cuadro. Al otro no hace falta ponerle val ue=0, pues al ser botones exclu-
yentes aparecer sin sealar por defecto. Existe tambin una : r adi o_col umn con el mismo
significado que : r adi o_r ow pero en formato de columna.
Tambin hemos introducido el elemento : popup_l i st , que define una lista desplegable. Aparte
de otros argumentos ya conocidos, : popup_l i st introduce el argumento l i st , que declara
todos lo elementos que contiene la lista desplegable. Estos elementos han de ir seguidos y
separados por el cdigo de control \ n que define un salto de lnea.
Por ltimo tenemos un elemento predefinido muy utilizado que es er r t i l e. er r t i l e define al
final de cuadro de dilogo (normalmente) una lnea de errores. Simplemente deja un hueco en
el que irn apareciendo los errores pertinentes segn cometa algn fallo el usuario. Todo esto,
evidentemente, se controla desde AutoLISP.
As como el botn de Aceptar tiene definida la clave (atributo key) accept , el botn Cancelar la
clave cancel , el botn Ayuda... la clave hel p y el botn Info... la clave i nf o, la lnea de error
er r t i l e tiene definida la clave er r or . Todo esto lo utilizaremos para interactuar desde Auto-
LISP.
NOTA: Los tres espacios blancos en Radio final: hacen que las casillas : edi t _box queden ali-
neadas.
NOTA: Al cargar un archivo DCL y cuando se produce un error, a veces se crea un archivo de-
nominado ACAD. DCE que puede ayudarnos a depurar errores de sintaxis.
Pues bien, hasta aqu este MDULO de programacin en DCL. Cierto es que no se han mos-
trado ejemplos de todos los elementos, pero quedan todos explicados. Es trabajo del lector
aplicar lo aprendido a diversos ejemplos propios de letreros de dilogo. La mecnica es en to-
dos la misma y quien hace uno no tiene ningn problema en hacer ms. En el MDULO ON-
CE, sobre programacin en AutoLISP, se estudiar la manera de hacer que estos cuadros que
hemos diseado funcionen en condiciones. All se ver algn ejemplo ms de algn letrero de
dilogo.
DIEZ.FIN. EJERCICIOS PROPUESTOS
I. Escrbase el cdigo DCL necesario para mostrar los siguientes letreros de dilogo ex-
puestos:
a)
b-1)
b-2)
(Este cuadro saldr al pinchar el botn Mostrar... del anterior.)
c)


EJERCICIOS RESUELTOS DEL MDULO DIEZ

EJERCICIO I

Letrero a)

aguj er os: di al og {l abel =" I nser ci n de aguj er os" ;
: r ow {
: i mage {wi dt h=15; aspect _r at i o=0. 8; col or =0; key=" i magen" ; }
: boxed_r adi o_col umn {l abel =" Ti po de aguj er o" ; key=" t i po" ;
: r adi o_but t on {l abel =" &Si n caj er a" ; key=" si n" ; }
: r adi o_but t on {l abel =" &Con caj er a r ect a" ; key=" r ect a" ; }
: r adi o_but t on {l abel =" Con caj er a a&vel l anada" ; key=" avel l a" ; }
}
}
: r ow {
: boxed_col umn {l abel =" Aguj er o" ;
: edi t _box {l abel =" &Di met r o: " ; edi t _wi dt h=6; edi t _l i mi t =16;
key=" di amagu" ; }
: edi t _box {l abel =" &Pr of undi dad: " ; edi t _wi dt h=6; edi t _l i mi t =16;
key=" pr of agu" ; }
spacer _1;
}
: boxed_col umn {l abel =" Caj er a" ; key=" caj er a" ;
: edi t _box {l abel =" Di &met r o: " ; edi t _wi dt h=6; edi t _l i mi t =16;
key=" di amcaj " ; }
: edi t _box {l abel =" Pr o&f undi dad: " ; edi t _wi dt h=6; edi t _l i mi t =16;
key=" pr of caj " ; }
spacer _1;
}
}
spacer _1;
ok_cancel ;
er r t i l e;
}


Letreros b-1 y b-2)

i nser di r : di al og {l abel =" I nser ci n de bl oques en un di r ect or i o" ;
: r ow {
: col umn {
spacer _0;
: l i st _box {l abel =" Nombr e de bl oque: " ; key=" l i st a" ;
f i xed_hei ght =t r ue; hei ght =16; }
spacer _0;
: but t on {l abel =" &Most r ar . . . " ; key=" most r ar " ;
f i xed_wi dt h=t r ue; al i gnment =cent er ed; }
}
: col umn {
: i mage_but t on {key=" i mg0" ; wi dt h=11; aspect _r at i o=0. 8; col or =0; }
: i mage_but t on {key=" i mg4" ; wi dt h=11; aspect _r at i o=0. 8; col or =0; }
: i mage_but t on {key=" i mg8" ; wi dt h=11; aspect _r at i o=0. 8; col or =0; }
: i mage_but t on {key=" i mg12" ; wi dt h=11; aspect _r at i o=0. 8; col or =0; }
}
: col umn {
: i mage_but t on {key=" i mg1" ; wi dt h=11; aspect _r at i o=0. 8; col or =0; }
: i mage_but t on {key=" i mg5" ; wi dt h=11; aspect _r at i o=0. 8; col or =0; }
: i mage_but t on {key=" i mg9" ; wi dt h=11; aspect _r at i o=0. 8; col or =0; }
: i mage_but t on {key=" i mg13" ; wi dt h=11; aspect _r at i o=0. 8; col or =0; }
}
: col umn {
: i mage_but t on {key=" i mg2" ; wi dt h=11; aspect _r at i o=0. 8; col or =0; }
: i mage_but t on {key=" i mg6" ; wi dt h=11; aspect _r at i o=0. 8; col or =0; }
: i mage_but t on {key=" i mg10" ; wi dt h=11; aspect _r at i o=0. 8; col or =0; }
: i mage_but t on {key=" i mg14" ; wi dt h=11; aspect _r at i o=0. 8; col or =0; }
}
: col umn {
: i mage_but t on {key=" i mg3" ; wi dt h=11; aspect _r at i o=0. 8; col or =0; }
: i mage_but t on {key=" i mg7" ; wi dt h=11; aspect _r at i o=0. 8; col or =0; }
: i mage_but t on {key=" i mg11" ; wi dt h=11aspect _r at i o=0. 8col or =0; }
: i mage_but t on key=" i mg15" ; wi dt h=11; aspect _r at i o=0. 8; col or =0; }
}
}
spacer _1;
: r ow {chi l dr en_f i xed_wi dt h=t r ue;
: but t on {l abel =" &Pr ecedent e" ; key=" pr e" ; }
: but t on {l abel = " &Si gui ent e" ; key=" si g" ; }
: spacer {wi dt h=9; }
ok_cancel ;
}
er r t i l e;
}

muest r a: di al og {l abel =" Muest r a ampl i ada del bl oque" ;
: col umn {
: i mage {wi dt h=48; aspect _r at i o=0. 8; key=" muest r a" ; col or =0; }
ok_onl y;
}
}


Letrero c)

model ar : di al og {l abel =" Model i zaci n de i mgenes" ;
: r ow {
: col umn {
: boxed_r adi o_col umn {l abel =" Modal i dad de sombr a" ;
key=" r adi o_edge" ;
: r adi o_but t on {l abel =" 256 col or es &si n ar i st as" ; key=" edge0" ; }
: r adi o_but t on {l abel =" 256 col or es &con ar i st as" ; key=" edge1" ;
val ue=1; }
: r adi o_but t on {l abel =" &Ocul t ar l neas" ; key=" edge2" ; }
: r adi o_but t on {l abel =" Col or es &pl anos con ar i st as" ;
key=" edge3" ; }
}
: spacer {}
: but t on {l abel =" &Val or es por def ect o" ; key=" def ect o" ;
f i xed_wi dt h=t r ue; al i gnment =cent er ed; }
: spacer {}
: boxed_col umn {l abel =" Luz di f usa" ;
: boxed_r adi o_r ow {l abel =" Val or es pr edet er mi nados" ;
f i xed_wi dt h=t r ue; al i gnment =cent er ed;
: r adi o_but t on {l abel =" &30" ; key=" di f 30" ; }
: r adi o_but t on {l abel =" &50" ; key=" di f 50" ; }
: r adi o_but t on {l abel =" &70" ; key=" di f 70" ; val ue=1; }
: r adi o_but t on {l abel =" &90" ; key=" di f 90" ; }
}
: boxed_r ow {l abel =" Val or de usuar i o" ;
: col umn {
: spacer {}
: t ext {l abel =" M n Mx" ; al i gnment =cent er ed; }
: spacer {}
: sl i der {mi n_val ue=0; max_val ue=100; smal l _i ncr ement =1;
key=" desl i za" ; val ue=70; }
}
: col umn {
spacer _1;
: edi t _box {l abel =" " ; al i gnment =cent er ed; edi t _wi dt h=3;
edi t _l i mi t =3; key=" val or " ; val ue=70; }
}
}
spacer _1;
}
}
: boxed_col umn {l abel =" Vent ana de muest r a" ;
: r adi o_r ow {key=" muest r a" ;
: r adi o_but t on {l abel =" &Esf er a" ; key=" esf er a" ; val ue=1; }
: r adi o_but t on {l abel =" Cu&bo" ; key=" cubo" ; }
}
: i mage {key=" i magen" ; wi dt h=18; f i xed_wi dt h=t r ue;
aspect _r at i o=0. 85; col or =gr aphi cs_backgr ound; }
: t ext {l abel =" Luz di f usa = 70" ; }
: but t on {l abel =" &Most r ar " ; key=" most r ar " ; f i xed_wdt h=t r ue;
al i gnment =cent er ed; }
spacer _0;
}
}
spacer _1;
ok_cancel ;
er r t i l e;
}




Autor: Jonathan Prstamo Rodrguez
Para: La Web del Programador

PARTE TERCERA
MDULO ONCE
Programacin en AutoLISP
ONCE.1. INTRODUCCIN
A parte de todo lo visto en cuestin de personalizacin, AutoCAD 14 ofrece al usuario la posi-
bilidad de crear programas y aplicaciones verticales totalmente funcionales. Estos programas
podrn ser distribuidos por el creador, eso s, siempre corrern bajo AutoCAD.
La capacidad para hacer un programa nos lleva mucho ms all de la simple personalizacin
de mens o patrones de sombreado, nos lleva a un mundo totalmente integrado en AutoCAD
desde donde podremos disear nuestros propios comandos, manipular dibujos o incluso acce-
der a la Base de Datos interna del programa.
AutoCAD 14 proporciona diversas interfaces de programacin de aplicaciones que vamos a
comentar ahora de forma somera.

ONCE.1.1. AutoLISP, ADS, ARX, VBA y Visual
Lisp
ONCE.1.1.1. Entorno AutoLISP
Dentro de lo que es la programacin existen diversas interfaces para crear programas para
AutoCAD. El ms antiguo y, quiz el ms utilizado hasta ahora, es AutoLISP. AutoLISP es una
adaptacin del lenguaje de programacin LISP que forma parte ntima e integrada con Auto-
CAD, esto es, AutoCAD posee internamente un propio intrprete de LISP.
El lenguaje LISP est basado en lo que se denominan listas de smbolos. Es un lenguaje de alto
nivel (como BASIC) y que, en principio, fue diseado para la investigacin en el campo de la
inteligencia artificial. AutoLISP es un lenguaje evaluado, es decir, est a un paso entre los len-
guajes interpretados, por un lado, y los lenguajes compilados, por otro.
Como hemos dicho, AutoCAD provee al usuario de un propio intrprete de AutoLISP interno.
Este intrprete, al que habra que llamarle evaluador, se encarga precisamente de evaluar
las expresiones incluidas en el cdigo fuente de un programa. Estos programas pueden intro-
ducirse directamente desde la lnea de comandos de AutoCAD, o bien cargarse en memoria a
partir de un programa completo escrito es un archivo de texto ASCII. Dichos archivos tendrn
habitualmente la extensin . LSP.
De la programacin en AutoLISP hablaremos largo y tendido en este MDULO.

ONCE.1.1.2. Entorno ADS
ADS (AutoCAD Development System) es un entorno de programacin el lenguaje C para Au-
toCAD. Las aplicaciones programadas de esta manera han de ser llamadas desde un propio
programa AutoLISP, ya que AutoCAD las considera como funciones externas.
El cdigo fuente de estas aplicaciones ha de escribirse y compilarse en un compilador externo
de C, es decir, AutoCAD no provee de un entorno de programacin para estas aplicaciones,
como ocurre con AutoLISP o VBA. El programa objeto ejecutable . EXE (normalmente), produc-
to de la compilacin del fuente, podr ser cargado desde AutoCAD.
NOTA: Este entorno est ya obsoleto en la versin 14 y los programas desarrollados en l de-
bern adaptarse a ARX mediante el entorno ADSRX.
ONCE.1.1.3. Entorno ARX
ARX (AutoCAD Runtime Extension) es desde la versin 13 de AutoCAD otro entorno de pro-
gramacin C que posibilita, al contrario que ADS, una comunicacin directa de las aplicaciones
con AutoCAD. De esta forma, no es necesaria la intervencin de AutoLISP como intermedia-
rio. La aplicacin Render, en RENDER. ARX, es un ejemplo de programa en este formato.
La no integracin de un entorno de programacin en C dentro del software de AutoCAD ha
hecho que su utilizacin para desarrollar aplicaciones para el programa no est muy extendida.
Es necesario, pues, adquirir un compilador de C complementario para poder desarrollar en este
lenguaje aplicaciones ADS o ARX, lo que no ocurre con AutoLISP o VBA. Por este motivo, tam-
poco se tratar en este curso.
NOTA: En la versin 14 de AutoCAD existe el comando ARX para cargar, descargar y obtener
informacin sobre aplicaciones ARX sin necesidad de utilizar AutoLISP.
ONCE.1.1.4. Entorno VBA
VBA (Visual BASIC for Applications) es un novedoso entorno, incluido en la versin 14, que
parece hacer furor entre los programadores ltimamente. La programacin en Visual BASIC
para Windows viene siendo, desde hace unos aos, una de las herramientas ms verstiles y,
a la vez, ms sencillas y utilizadas en el mundo de la programacin informtica. El usuario
puede desarrollar sus programas en un compilador Visual BASIC externo o utilizar el propio
mdulo VBA que incluye AutoCAD 14. Este mdulo contiene la sintaxis del lenguaje, un depu-
rador y un entorno de desarrollo. As, el programador, puede programar rutinas VBA e ir pro-
bndolas en una sesin de AutoCAD mientras se van depurando.
VBA ser ampliamente tratado en el MDULO DOCE.
ONCE.1.1.5. Entorno Visual Lisp
A partir de la Versin 14 existe un nuevo entorno de desarrollo denominado Visual Lisp que
permite realizar aplicaciones en AutoLISP de una manera ms rpida y efectiva. Este entorno
proporciona herramientas para desarrollar y depurar las rutinas y compilarlas como aplicacio-
nes ARX. Tambin dispone de su propio evaluador, que emula al de AutoLISP, adems de un
completo control de codificacin y seguridad de las rutinas creadas.
El entorno de Visual Lisp es un mdulo que se carga bajo demanda. No est incluido en el pro-
pio ncleo de AutoCAD, como ocurre con el evaluador de AutoLISP. El nuevo conjunto de fun-
ciones incorporadas en Visual Lisp permite trabajar en diferentes reas y niveles que incluyen
funciones aadidas de AutoLISP, funciones de acceso al sistema operativo y E/S de archivos,
funciones de carga y vinculacin de objetos y bases de datos, almacenamiento directo de listas
en un archivo de dibujo, acceso al conjunto de objetos ActiveX de AutoCAD y tecnologa ba-
sada en ObjectARX que no necesita la presencia de AutoCAD para su ejecucin.
De esta manera, el entorno de Visual Lisp permite a los desarrolladores la programacin en
ARX y ActiveX.

ONCE.2. CARACTERSTICAS DE AutoLISP
Como ya hemos dicho, LISP (LISt Processing) es un lenguaje de programacin que se remonta
a los aos cincuenta y que fue desarrollado para la investigacin de inteligencia artificial. La
base de su funcionamiento es el manejo de listas, en lugar de datos numricos como otros
lenguajes. AutoLISP es una implantacin LISP en AutoCAD.
Una lista es un conjunto de smbolos. El smbolo es la unidad mnima bsica de una lista, y
puede ser una variable, una funcin inherente a AutoLISP, una funcin de usuario, un dato
constante... Las listas elaboradas mediante smbolos son evaluadas y procesadas para obtener
un resultado.
Para programar en AutoCAD, este lenguaje proporciona una serie de posibilidades como la
facilidad para manejar objetos heterogneos (nmeros, caracteres, funciones, entidades u ob-
jetos de dibujo, etctera), la facilidad para la interaccin en un proceso de dibujo, la sencillez
del lenguaje y su sintaxis, y otras que hacen de l una herramienta muy til y sencilla de ma-
nejar y aprender.
Como tambin hemos dicho ya, el lenguaje AutoLISP (y LISP) es un lenguaje evaluado, y no
interpretado o compilado. Los lenguajes interpretados son ledos palabra a palabra por el or-
denador, al ser introducidas, y cada una de ellas convertida a lenguaje mquina. Esto hace que
sea sencilla su edicin y deteccin de errores de sintaxis u otros; por el contrario, hace que
sean muy lentos (ejemplo: Microsoft QBASIC). Los cdigos de los lenguajes compilados son
escritos por completo y, antes de su ejecucin final, es necesario compilarlos, convirtindolos
as en cdigo fuente ejecutable y comprensible por la mquina. Este tipo de lenguajes hace
que su ejecucin sea ms rpida y pura pero, en contra, resulta ms difcil su depuracin
(ejemplos: Microsoft QuickBASIC o Borland C++).
Los lenguajes evaluados AutoLISP estn a caballo entre unos y otros. No son tan rpidos
como los compilados pero son ms flexibles e interactivos que estos. Es posible, por ejemplo,
construir un programa con AutoLISP que sea capaz de modificarse a s mismo bajo determina-
das circunstancia; sta es la base de los llamados Sistema Expertos.
El mecanismo evaluador de AutoLISP es la propia lista: conjunto de smbolos separados entre
s por, al menos, un espacio blanco y encerrados entre parntesis. Esto es, desde el momento
que existe una expresin encerrada entre parntesis, AutoLISP la evala e intenta ofrecer un
resultado.
AutoLISP es un subconjunto del lenguaje Common LISP. Como ha sido diseado para trabajar
desde AutoCAD, se han seleccionado las caractersticas de LISP ms adecuadas para este fin
y, adems, se han aadido otras nuevas, sobre todo en la manipulacin de objetos de dibujo,
acceso a la Base de Datos de AutoCAD e interaccin grfica general.
Los programas en AutoLISP son simples archivos de texto ASCII, con la extensin habitual
. LSP. Una vez hecho el programa, habremos de cargarlo desde el propio editor de dibujo de
AutoCAD. Tambin es posible escribir lneas de cdigo AutoLISP desde la lnea de comandos
del programa, como veremos en breve.
Es posible la creacin de rdenes nuevas que llamen a programas en AutoLISP, as como la
redefinicin de comandos propios de AutoCAD, como por ejemplo LI NEA o DESPLAZA. Pero una
de las ms importantes potencialidades de AutoLISP es el acceso directo a la Base de Datos
interna de AutoCAD. Toda la informacin de un dibujo, como deberamos saber, no se guarda
como objetos de dibujo en s, o sea, cuando salvamos un . DWG, en disco no se guardan los
crculos, lneas, etctera, sino una relacin o base de datos donde se dice dnde aparece un
crculo o una lnea, con qu coordenadas de origen y final, con qu radio o dimetro, tipo de
lnea, color... Podremos pues desde AutoLISP acceder a dicha base de datos para modificarla,
editarla o para exportar datos, por ejemplo, a una base de datos externa.
ONCE.2.1. Tipos de objetos y datos en Auto-
LISP
Atendiendo a sus caractersticas podemos definir varios tipos de objetos y datos en AutoLISP,
que son los de la tabla siguiente:
Objeto o dato ------------------------ Descripcin
------------------------------------------------------------------------------------------------------------
Lista ---------------------------------- Objeto compuesto de un parntesis de aper-
--------------------------------------- tura, uno o ms elementos separados por, al
--------------------------------------- menos, un espacio en blanco y un parntesis
--------------------------------------- de cierre. Los elementos de una lista pueden
--------------------------------------- ser smbolos, valores concretos (constantes
--------------------------------------- numricas o cadenas) o listas incluidas. Por
--------------------------------------- ejemplo: ( DEFUN seno ( x) ( SETQ xr ( * PI ( / x
180. 0) ) ) ( SETQ
--------------------------------------- s ( SI N xr ) ) ) , se trata de una lista que contiene cinco
elemen-
--------------------------------------- tos: una funcin inherente de AutoLISP
--------------------------------------- DEFUN, un nombre de funcin de usuario
--------------------------------------- seno, una lista con un nico elemento ( x) y
--------------------------------------- dos listas SETQ con tres elementos cada una.
Elemento ----------------------------- Cualquiera de los componentes de una lista.
Smbolo ------------------------------- Cualquier elemento de una lista que no sea
--------------------------------------- una constante. Puede ser el nombre de una
--------------------------------------- variable, un nombre de funcin definida por
--------------------------------------- el usuario o un nombre de funcin de AutoLISP.
Enteros ------------------------------- Valores numricos enteros, sin punto deci-
--------------------------------------- mal. Internamente son nmeros de 32 bits
--------------------------------------- con signo, sin embargo, en la transferencia
--------------------------------------- de datos con AutoCAD son valores de 16 bits
--------------------------------------- con signo, comprendidos por lo tanto entre
--------------------------------------- -32768 y 32767.
Reales -------------------------------- Valores numricos con coma flotante de do-
--------------------------------------- precisin. Esto representa un mnimo de 14
--------------------------------------- dgitos representativos. Se pueden expresar
--------------------------------------- en notacin cientfica exponencial mediante e o E.
Cadenas ----------------------------------- Valores textuales que contienen cadenas de
--------------------------------------- caracteres en cdigo ASCII. Deben ir entre
--------------------------------------- comillas y se permite una longitud mxima
--------------------------------------- de 132 caracteres. Se pueden construir cadenas
--------------------------------------- mayores como veremos.
Descriptores de archivo --------------- Valores que representan un archivo abierto
--------------------------------------- para lectura o escritura.
Nombres de objetos de dibujo ---------- Valores que representan el "nombre" hexade-
--------------------------------------- cimal de un objeto de la Base de Datos.
Conjuntos designados de AutoCAD ----- Valores que representan un conjunto de se-
--------------------------------------- leccin de objetos de dibujo.
Funciones de usuario --------------------- Smbolo que representa el nombre de una
--------------------------------------- funcin definida por el usuario.
Funcin inherente o subrutina ----------- Smbolo con el nombre de una funcin prede-
--------------------------------------- finida de AutoLISP. Se suelen denominar con
--------------------------------------- la abreviatura inglesa subrs. Pueden ser in-
--------------------------------------- ternas o externas.
ONCE.2.2. Procedimientos de evaluacin
La base de todo intrprete de LISP es su algoritmo evaluador. ste analiza cada lnea de pro-
grama y devuelve un valor como resultado. La evaluacin slo se realizar cuando se haya
escrito una lista completa y sta podr ser cargada desde un archivo de texto o tecleada direc-
tamente en la lnea de comandos de AutoCAD 14.
El primer elemento de la lista es comparado con todos los nombres de funciones inherentes
base o subrs internas de AutoLISP, con todos los nombres de subrs externas cargadas desde
aplicaciones ADS o ARX y en su caso con todos los nombres de funciones de usuario cargadas
en memoria. Si el nombre es reconocido, se realiza la evaluacin de la expresin de AutoLISP.
Esta puede consistir en asignar un valor a una variable, cargar en memoria una funcin de
usuario, escribir un resultado en pantalla o en un archivo, dibujar un objeto grfico, etc.
El primer elemento de la lista debe ser por tanto un nombre de funcin. El resto de elementos
se consideran argumentos de dicha funcin. La evaluacin en AutoLISP se realiza de acuerdo a
las siguientes reglas.
Primera:
Las listas se evalan quedando determinadas por el primer elemento. Si ste es un nombre de
funcin inherente o subrutina, los elementos restantes de la lista son considerados como los
argumentos de esa funcin. En caso contrario se considera como un nombre de funcin defini-
da por el usuario, tambin con el resto de elementos como argumentos. Cuando los elementos
de una lista son a su vez otras listas, stas se van evaluando desde el nivel de anidacin infe-
rior (las listas ms "interiores"). El valor resultante en cada evaluacin de las listas "interio-
res", es utilizado por las listas "exteriores". Por ejemplo:
( SETQ sx ( SI N ( * PI ( / x 180. 0) ) ) )
La lista ms "interior" contiene como primer elemento el nombre de la funcin de AutoLISP /
que realiza el cociente o divisin del siguiente elemento entre los restantes. La evaluacin de
dicha lista devuelve el resultado del cociente, en este caso el valor contenido en la variable x
dividido entre el nmero real 180. 0. Dicho valor es utilizado como elemento en la lista circun-
dante que empieza por la funcin de AutoLISP * que realiza una multiplicacin o producto. Es-
ta lista se evala ofreciendo como resultado el producto de PI (3,14159) por el valor anterior.
A su vez el resultado interviene como argumento en la lista que empieza por la funcin de Au-
toLISP SI N, que es evaluada obtenindose el seno. Este interviene por ltimo como argumento
de la lista ms exterior que empieza por la funcin de AutoLISP SETQ , cuyo resultado es asig-
nar o almacenar en la variable sx el valor del seno. Este valor es devuelto por la lista de SETQ
como resultado final.
Segunda:
Puesto que cada lista contiene un parntesis de apertura y otro de cierre, cuando existen listas
incluidas en otras, todos los parntesis que se vayan abriendo deben tener sus correspondien-
tes de cierre. Si se introduce desde el teclado una expresin en AutoLISP a la que falta por
cerrar algn parntesis, se visualiza un mensaje del tipo n> donde n es un nmero que indica
cuntos parntesis faltan por cerrar. Se pueden introducir por teclado esos parntesis y subsa-
nar el error. Por ejemplo:
Comando: ( SETQ sx ( SI N ( * PI ( / x 180. 0) )
2> ) )
0. 523599

Tercera:
Tambin es posible evaluar directamente un smbolo (extraer por ejemplo el valor actual con-
tenido en una variable), introduciendo por teclado el signo de cerrar admiracin seguido del
nombre del smbolo. Esta evaluacin se puede producir incluso en mitad de un comando. Por
ejemplo, para suministrar como ngulo para un arco el valor contenido en la variable x, se
responde a la solicitud de AutoCAD con ! x. Por ejemplo:
Comando: ! sx
0. 523599

Cuarta:

Los valores enteros, reales, cadenas de texto y descriptores de archivos, devuelven su propio
valor como resultado. Los nombres de funciones inherentes o subrutinas de AutoLISP devuel-
ven un nmero interno hexadecimal (suele cambiar de una sesin de dibujo a otra). Por ejem-
plo:
! 72. 5 devuelve 72. 5
! " I ni ci o" devuelve " I ni ci o"
! SETQ devuelve <Subr : #1a93e24>

Quinta:
Los smbolos de variables participan con el valor que contienen (que les est asociado) en el
momento de la evaluacin. Por ejemplo:
! x devuelve 30
! sx devuelve 0. 523599

Sexta:
Determinadas funciones de AutoLISP pueden devolver un valor nulo, que se representa me-
diante la expresin ni l . Por ejemplo:
Comando: ( PROMPT " Bi enveni do a Aut oLI SP\ n" )
Bi enveni do a Aut oLI SP
ni l
La funcin PROMPT escribe en la lnea de comando el mensaje especificado y devuelve ni l . El
cdigo \ n equivale a I NTRO.
ONCE.2.3. Archivos fuente de programas
Las expresiones contenidas en un programa de AutoLISP pueden introducirse directamente
desde el teclado durante la edicin de un dibujo de AutoCAD, escribirlas en un fichero de tex-
to ASCII o ser suministradas por una variable del tipo cadena, como ya se ha dicho varias ve-
ces.
Para una correcta evaluacin, las expresiones deben cumplir unos requisitos de sintaxis, que
se pueden resumir en los siguientes puntos:
Una expresin puede ser tan larga como se quiera. Puede ocupar varias lneas del archivo
de texto.
Los nombres de smbolos pueden utilizar todos los caracteres imprimibles (letras, nmeros,
signos de puntuacin, etc.) salvo los prohibidos que son: ( ) . ' " ;

Los nombres de smbolos no son sensibles a las maysculas. As, seno y SENO representan
el mismo nombre. Los nombres pueden contener nmeros, pero no estar formados exclusiva-
mente por nmeros. As, 1pt , pt - 1, p12 son vlidos como nombres de variables, pero no 21,
que ser interpretado como un valor numrico constante.
Los caracteres que terminan un nombre de smbolo o un valor explcito (una constante nu-
mrica o de texto) son: parntesis de apertura y cierre, apstrofo, comillas, punto y coma,
espacio en blanco o final de lnea en el archivo. Estos caracteres sirven de separacin entre
elementos de una lista.
Los espacios en blanco de separacin entre smbolos son interpretados como un solo espa-
cio entre cada par de smbolos. Se recuerda que es necesario un espacio en blanco para sepa-
rar un smbolo del siguiente, siempre que no haya parntesis, apstrofo, comillas o punto y
coma. Debido a la longitud de las expresiones de AutoLISP y a la profusin de parntesis que
dificultan su lectura, suele ser norma habitual realizar sangrados en las lneas del archivo de
texto, para resaltar los parntesis interiores de los exteriores. Todos los espacios aadidos son
interpretados como uno solo.
Los valores explcitos (constantes) de nmeros pueden empezar con el carcter + o - que es
interpretado como el signo del nmero.
Los valores de constantes de nmeros reales deben empezar con una cifra significativa. El
carcter punto (. ) se interpreta como el punto decimal. Tambin se admite + o - para el signo
y e o E para notacin exponencial o cientfica. No es vlida la coma decimal, ni tampoco abre-
viar como en . 6 (hay que escribir 0. 6).
Los valores de constantes con cadenas de texto son caracteres que empiezan y terminan
por comillas. Dentro de las cadenas se pueden incluir caracteres de control mediante la con-
trabarra (\ ). Los cdigos permitidos son:
\ \ - - - - - - Carcter contrabarra (\ ).
\ " - - - - - - Carcter comillas (" ).
\ e - - - - - - Carcter de escape.
\ n - - - - - - Nueva lnea o retorno de carro.
\ r - - - - - - I NTRO
\ t - - - - - - Carcter de tabulador TAB
\ nnn - - - - - - Carcter cuyo cdigo octal (no ASCII, que es decimal) es nnn.
\ U+xxxx - - - - - - Secuencia de caracteres de cdigo Unicode.
\ M+nxxxx - - - - - - Secuencia de caracteres multibyte.
Los cdigos deben ir en minsculas. Para incluir en una cadena un cdigo ASCII hay que calcu-
lar su valor octal. Por ejemplo, el carcter dlar $ es ASCII 36; su valor octal ser 44 y en la
cadena habr que indicar el cdigo de control \ 44.
El apstrofo ( ) se puede utilizar como abreviatura del comando QUOTE. El comando QUOTE
devuelve el literal del smbolo. Es decir, cuando en una expresin un smbolo aparece precedi-
do por apstrofo o se le aplica la funcin de AutoLISP QUOTE, no se evala con el valor que
contiene en ese momento sino que devuelve el propio nombre literal del smbolo.
Se pueden incluir comentarios en un archivo de texto con programas y expresiones en Au-
toLISP, comenzando la lnea del archivo con un punto y coma (; ). A partir de donde se en-
cuentre un punto y coma hasta el final de la lnea, AutoLISP considera que son comentarios y
no los tiene en cuenta. Tambin se pueden incluir comentarios en mitad de una lnea u ocu-
pando varias de ellas, si se sitan entre los caracteres ; | y | ; . Por ejemplo:
; Funci n de est ado act ual del di buj o.
( DEFUN f unci on_1 ( x / pt 1 pt 2)
( SETQ r ef nt 0 ; | modos de r ef er enci a act ual ment e
act i vados | ; ( GETVAR " osmode" ) )
. . .
Los comentarios son tiles tanto para el autor del programa como para futuros usuarios que
accedan al archivo con el fin de modificarlo. Suele ser habitual situar al principio del archivo el
ttulo, autor y fecha de creacin. Posteriormente, una explicacin general del programa, expli-
caciones particulares de cada funcin intermedia, usos de variables, etc. Como muchas de las
configuraciones de pantalla de texto disponen de un ancho de 80 columnas, conviene que las
lneas del archivo de texto no sobrepasen los 80 caracteres.
ONCE.2.4. Variables predefinidas
Existen unos valores de smbolos de AutoLISP predefinidos. Son los siguientes:
PI . Es el valor del nmero real PI, es decir: 3,141592653589793.
PAUSE. Es una cadena de texto que consta de un nico carcter contrabarra. Se utiliza para
interrumpir un comando de AutoCAD despus de haberlo llamado mediante la funcin de Au-
toLISP COMMAND. Esto permite al usuario introducir algn dato.
T. Es el smbolo de True, es decir, cierto o verdadero (valor 1 lgico). Se utiliza para estable-
cer que determinadas condiciones se cumplen.
Por ltimo el valor de nada, vaco o falso (0 lgico) se representa en AutoLISP por ni l . Este
valor aparece siempre en minsculas y no es propiamente un smbolo, ya que no est permiti-
do acceder a l.
ONCE.3. PROGRAMANDO EN AutoLISP
A partir de ahora vamos a comenzar a ver poco a poco la manera de ir haciendo nuestros pro-
gramas en AutoLISP. Vamos a seguir un orden lgico de menor a mayor dificultad, por lo que
la estructura puede llegar a parecer un poco catica para alguien que conozca el lenguaje.
Tampoco es objetivo de este curso profundizar en un mtodo complejo de programacin, sino
proponer unas bases para comenzar a programar que, con imaginacin y horas de trabajo,
podr convertirnos en programadores expertos de AutoLISP.
Todo lo visto hasta ahora resulta la parte rida de la programacin; parece que no sirven de
mucho esos conocimientos tericos mientras no pasemos a la prctica. De aqu en adelante
podremos ir entendiendo las 2 primeras secciones de este MDULO y, si algo se qued en el
tintero o algo hay que repetir de todo lo expuesto hasta aqu, se completar y se explicar o
repetir.
Comencemos, pues, con la programacin en AutoLISP para AutoCAD 14.

ONCE.3.1. Convenciones de sintaxis
Las convenciones utilizadas para las sintaxis en este MDULO van a ser las siguientes:

Nombre del comando o funcin AutoLISP en maysculas.
Argumentos en minscula itlica, representados por un nombre mnemotcnico.
Argumentos opcionales encerrados entre corchetes itlicos (que no han de escribirse).
Puntos suspensivos en itlica indican la posibilidad de indicar ms argumentos.
ONCE.4. OPERACIONES NUMRICAS Y LGICAS
Explicaremos aqu la manera en que se realizan en AutoLISP las operaciones matemticas, de
comparacin y lgicas. El buen aprendizaje de ests tcnicas nos ser tremendamente til a la
hora de lanzarnos a la programacin pura.
ONCE.4.1. Aritmtica bsica
Para realizar las cuatro operaciones aritmticas bsicas existen cuatro funciones AutoLISP que
son +, - , * y / , estas se corresponden con la suma, resta, multiplicacin y divisin.
La funcin de suma tiene la siguiente sintaxis:
( + [valor1 valor2 valor3...])
Esto es, primero se indica el nombre de la funcin, como siempre en AutoLISP, que en este
caso es + y luego los argumentos de la misma, es decir, aqu los valores de los distintos su-
mandos.
Esta funcin devuelve el resultado aditivo de todos los valores numricos especificados como
argumentos de la funcin. Por ejemplo:
( + 14 10 20)
devolvera el valor 44. Para hacer la prueba nicamente debemos escribir dicho rengln en la
lnea de comandos de AutoCAD, pulsar I NTRO y comprobar el resultado.
NOTA: Al introducir el primer carcter de apertura de parntesis, AutoCAD reconoce que se
est escribiendo una expresin en AutoLISP, por lo que nos permitir utilizar los espacios ne-
cesarios de la sintaxis sin que se produzca un I NTRO cada vez, como es habitual. Recordemos
que todos los elementos de una lista de AutoLISP han de ir separados por lo menos con un
espacio blanco. Probemos diferentes sintaxis utilizando ms espacios, o tabuladores, y com-
probemos que el resultado es el mismo; se interpretan los espacios o tabuladores como un
nico carcter de espacio en blanco.
NOTA: Hagamos la prueba de no introducir el parntesis final de la lista indicada. Comproba-
remos lo explicado en la segunda regla de la seccin ONCE.2.2.
Con la funcin + podemos indicar valores enteros o reales. Si todos los valores son enteros el
resultado ser entero, pero si uno o varios de ellos son reales o todos ellos, el resultado
ser real. Esto significa que nicamente es necesario introducir un valor real para recibir una
respuesta real. Por ejemplo, si introducimos la siguiente lnea en la lnea de comandos en Au-
toCAD:
( + 14 10 20. 0)
el resultado ser:
44. 0
o sea, un nmero real.
Esto aqu parece irrelevante, pero comprenderemos su utilidad al hablar, por ejemplo, de la
divisin.
Si indicamos un solo sumando con esta funcin, el resultado es el valor del propio sumando.
Por ejemplo:
( + 23)
devuelve:
23

Y si se escribe la funcin sin argumentos, el resultado es 0 (funcin sin argumentos: ( +) ).
Los valores indicados en la funcin de suma pueden ser directamente valores numricos o
nombres de variables numricas declaradas anteriormente, por ejemplo:
( + 10. 0 x t ot al )
En esta funcin, 10. 0 es un valor constante real y x y t ot al son dos nombres de variables que
han debido ser anteriormente declaradas; ya aprenderemos a declarar variables. Si la variable
no existiera se producira un error bad argument type de AutoLISP.
Otros ejemplos con nmeros negativos:
( + 10 23) devuelve 13
( + - 10 10) devuelve - 20
NOTA: Si se produce algn error de sintaxis u otro, podemos acudir al final de este MDULO
para ver una relacin de los mensajes de error de AutoLISP.
La funcin de resta, por su lado, tiene la siguiente sintaxis:
( - [valor1 valor2 valor3...])
Esta funcin devuelve la diferencia del primer valor con todos los dems indicados. As por
ejemplo:
( - 10 5)
da como resultado 5 y la siguiente expresin:
( - 10 5 2)

da como resultado 3. Esto es producto de restar 10 5 = 5 y, luego, 5 2 = 3; o lo que es lo
mismo 10 (5 + 2) = 3.
Al igual que en la suma, si se indican valores enteros el resultado ser entero, si se indica uno
real (con uno es suficiente) el resultado es real, si se indica un solo valor se devuelve el mismo
valor y si se escribe la funcin sin argumentos se devuelve 0. As pues, si queremos un resul-
tado real efectuado con nmeros enteros para posteriores operaciones, deberemos indicar uno
de los valores entero; de la siguiente manera, por ejemplo:
( - 10 5. 0 2)
o cualquier otra combinacin posible de uno o ms nmeros enteros.
Como se ha explicado para la suma, los valores de los argumentos para la resta pueden ser
constantes, eso s, siempre numricas, o variables:
( - t ot num1 num2)
Llegados a este punto, podemos suponer ya las diferentes combinaciones que podremos reali-
zar con las distintas funciones aritmticas. Por ejemplo, es factible la evaluacin de la siguiente
expresin:
( + 12 ( - 2 - 3) )
cuyo resultado es 11. O sea, y como hemos explicado, se realizarn las operaciones de dentro
a fuera. En este ejemplo, se suma la cantidad de 12 a la diferencia 2 3, esto es, 12 + (2 3)
= 11. Como vemos, existen dos listas, una interior anidada a la otra que es, a la vez, argu-
mento de la lista exterior. Ocurre lo mismo con nombres de variables:
( - f er 1 ( + - sum1 sum2) 23. 44)
Con respecto al producto su sintaxis es la siguiente:
( * [valor1 valor2 valor3...])
Se evala el producto de todos los valores numricos indicados como argumentos. Como ante-
riormente, si un valor es real el resultado es real. Un solo valor como argumento devuelve el
mismo valor. Ningn valor devuelve 0. Veamos un ejemplo:
( * 12 3 4 - 1)
El resultado es - 144. Veamos otros ejemplos:
( * 2 3)
( * val ( - vax vad) )
( - ( * 12 2) 24)
( + ( - - 10 - 5) ( * 3 t ot al 23) )

NOTA: Si escribimos ms parntesis de los necesarios por la derecha se nos mostrar un men-
saje de error. Recordar que si no los escribimos nos da la opcin de escribirlos despus, as
como el nmero de ellos que faltan. De todas forma, consltese el final del MDULO para la
explicacin de los mensajes de error.
La sintaxis de la divisin es la que sigue:
( / [valor1 valor2 valor3...])
La funcin / realiza el cociente del primer valor numrico por todos los dems, es decir, divide
el primer nmero por el producto de los dems. Por ejemplo:
( / 10 2)
da como resultado 5. Y el ejemplo siguiente:
(/ 100 5 5)
da como resultado 4, es decir, 100 / 5 = 20 y, luego, 20 / 5 = 4; o lo que es lo mismo, 100 /
(5 * 5) = 4.
Otros dos ejemplos:
( / 24 ( * ( + 10. 0 2) 12) )
( / 12 2 1)
Con respecto al cociente debemos realizar las mismas observaciones anteriores, esto es, si se
indica un solo valor se devuelve el mismo valor, si se indica la funcin sin argumentos se de-
vuelve 0 y si se indican valores enteros slo se devuelven valores enteros. Esto ltimo cobra
especial sentido en el caso de las divisiones, ya que el cociente entre dos nmeros enteros
puede ser un nmero real. Veamos el siguiente ejemplo:
( / 15 7)
Si introducimos esta lnea el resultado ser 2. El motivo es que, como hemos especificado va-
lores enteros, el resultado se muestra en forma de nmero entero, con la parte decimal o
mantisa truncada. Para asegurarnos de recibir una respuesta correcta (con decimales significa-
tivos), deberemos introducir uno de los valores o todos ellos, pero con uno es suficiente
como valor real, de la siguiente forma:
( / 15 7. 0)
Ahora el resultado ser 2. 14286. El nmero entero podra haber sido el otro:
( / 15. 0 7)
Esto debemos tenerlo muy en cuenta a la hora de realizar operaciones cuyo resultado vaya a
ser parte integrante de otra operacin o no que puede devolver decimales. Vemos otros
ejemplos de divisiones:

( / - 12. 0 7. 8 210)
( / ( + ( - 23. 3 32) 12. 03) ( / ( * ( + 1. 01 2. 01) 100) ) )
( + dat os ( / gr upo ( * 100 2) ) )
NOTA: Evidentemente, la divisin por 0 produce un error de AutoLISP: divide by zero.
1 fase intermedia de ejercicios
Realizar mediante AutoLISP las siguientes operaciones aritmticas (estn expresadas en no-
tacin informtica sencilla de una lnea):
(50 + 5) / 2
(200 * 5 3) / (4 / 2)
(10.23 (12.03 / 3)) * (12 + (2 * -2) ((12.5 / 2) * 2.65))
(19 + 23) / (10 + (23 / (23 / 19)))
((-20 / 5) 1) / (15.5 * ((15.5 1) / 12))
ONCE.4.2. Matemtica avanzada
Fuera aparte de las funciones aritmticas de nivel bsico, programando en AutoLISP podemos
realizar operaciones matemticas complejas como races cuadradas o senos. Vamos a explicar
aqu las funciones que controlan estas operaciones.

Las dos primeras que veremos son sencillas de entender y utilizar. Ambas se refieren al incre-
mento, positivo o negativo, de una unidad a un valor numrico.
( 1+ valor)
Esta sintaxis corresponde a la funcin de incremento positivo de una unidad al valor indicado.
As, si queremos incrementar en 1 el valor 576, haremos:
( 1+ 576)
Esto equivale a ( + 576 1) pero es de una forma ms cmoda; el resultado es 577.
NOTA: La funcin se denomina 1+ en s, por lo que no existe espacio entre 1 y +.
Podemos realizar estos incrementos con nombres de variable:
( 1+ n)
lo que incrementar en una unidad el valor de n. Esto puede ser especialmente necesario para
controlar los llamados contadores-suma en programacin, del tipo:
( SETQ sum( 1+ sum) )
Esto ya lo veremos a la hora de declarar variables.
La siguiente funcin resta (incremento negativo) una unidad al valor numrico indicado. Equi-
vale a ( - valor 1) , pero de una forma ms cmoda.
( 1- valor)
Por ejemplo:
( 1- 32)
suyo resultado es 31.
Otros ejemplos de estas dos funciones:
( 1- n)
( 1- 67. 90)
( 1- - 23)
( 1+ - 34. 0)
( 1+ ( + t ut t ot 1)
( 1- ( * 2 2) )
( 1- ( * ( / 32 2) ( + 10 1. 0) ) )
( ABS valor)
Esta funcin ABS devuelve el valor absoluto del nmero indicado o expresin indicada. De esta
forma, la siguiente expresin:
( ABS 23)
devuelve 23.
Las siguientes expresiones tienen el siguiente efecto indicado:
( ABS 25. 78) devuelve 25. 78
( ABS 45) devuelve 45
( ABS 0) devuelve 0
( ABS 13) devuelve 13
( ABS ( / 2 3. 0) ) devuelve 0. 666667
( ABS ( / 2 - 3. 0) ) devuelve 0. 666667
( FI X valor)
FI X trunca un valor a su parte entera (positiva o negativa), es decir, de un nmero real con
decimales devuelve nicamente su parte entera. Pero, cuidado, no se produce redondeo, slo
un truncamiento.
Ejemplos:
( FI X 32. 79) devuelve 32
( FI X 12. 45) devuelve 12
( FI X ( / 10 3. 0) ) devuelve 3
( FI X ( / 10 3. 0) ) devuelve 3

( REM valor1 valor2 [valor3...])
Esta funcin AutoLISP devuelve el resto del cociente (mdulo) de los dos valores introducidos
en principio. Por ejemplo, la siguiente expresin devuelve 6 como resultado:
( REM 20 7)
Dicho 6 es el resto que resulta de dividir 20 / 7. Si aplicamos la regla de la divisin (dividendo
es igual a divisor por cociente ms resto): 20 = 7 * 2 + 6, vemos que se cumple correctamen-
te.
Si se especifican ms de dos valores, el resto anterior es dividido entre el actual, devolviendo
el nuevo resto de la nueva divisin. Por ejemplo:
( REM 20 7 4)
da como resultado 2. El primer resto 6 se calcula de la forma explicada en el ejemplo anterior
y, el resultado final 2, se produce al dividir dicho primer resto entre el tercer valor 4. Al dividir
6 / 4, nos da un resultado (que es igual a 1) y un resto 2 (valor final obtenido). Y as sucesi-
vamente.
Otros ejemplos:
( REM 1 2)
( REM 0 23)
( REM ( * 23 2) ( - ( + 1 1) 45. 5) )
( REM 54 ( * 3 - 4) )
Pasemos ahora a ver las funciones trigonomtricas, esto es, cmo calcularlas mediante Auto-
LISP. La primera sintaxis se refiere al seno de un ngulo y es la siguiente:
( SI N ngulo)
La funcin SI N devuelve el seno de un ngulo expresado en radianes. Ejemplos:
( SI N 1) devuelve 0. 841471
( SI N ( / PI 2) ) devuelve 1. 0
NOTA: Como sabemos PI es un constante de AutoLISP, por lo que no hace falta declararla co-
mo variable; ya tiene valor propio y es 3. 14159. An as, se puede calcular su valor exacto
mediante la expresin: PI = 4 * arctag 1.
( COS ngulo)
COS devuelve el coseno de un ngulo expresado en radianes. Ejemplos:
( COS PI ) devuelve 1. 0
( COS ( * 3 4) ) devuelve 0. 843854
NOTA: Ntese que PI es un valor real, por lo que el resultado ser real.
( ATAN valor1 [valor2])
Esta funcin ATAN devuelve el arco cuya tangente es val or 1 expresada en radianes, es decir,
realiza el arco-tangente de dicho valor. Por ejemplo:
( ATAN 1. 5) devuelve 0. 98
Si se indica un segundo valor (val or 2), ATAN devuelve el arco-tangente de val or 1 dividido por
val or 2. Esto permite indicar la razn entre los lados de un tringulo recto, es decir, escribir la
tangente directamente como cociente del seno entre el coseno. Si val or 2 es 0, el valor de-
vuelto ser igual a PI / 2 o a PI / 2 radianes, dependiendo del signo de val or 1.
Ejemplos:
( ATAN 1 1)
( ATAN 1 ( * 2 - 4. 5) )
Estas son las tres funciones trigonomtricas de AutoLISP. En este punto se nos plantean un
par de problemas: cmo calculo las restantes funciones trigonomtricas? y cmo convierto
grados sexagesimales en radianes y viceversa?
La segunda cuestin es sencilla, ya que basta aplicar al frmula rad = grados * PI / 180 para
convertir grados en radianes. La operacin inversa en fcilmente deducible.
La primera pregunta tiene una respuesta no menos sencilla, y es que en la mayora por no
decir todos de los lenguajes de programacin nicamente nos proporcionan estas funciones
trigonomtricas bsicas y, a partir de ellas, podemos calcular las funciones trigonomtricas
derivadas inherentes. La manera se explica a continuacin mediante notacin sencilla de una
lnea:
Funcin derivada --------- Notacin
-------------------------------------------------------------------------------------
Secante (sec x) ------------ 1 / cos (x)
Cosecante (cosec x) ------- 1 / sen (x)
Arco-seno (arcsen x) ------- arctag (x / (1 x ^ 2))
Arco-coseno (arccos x) ----- 1.5707633 arctag (x / (1 x ^ 2))
Arco-secante (arcsec x) ---- arctag ( (x ^ 2 1)) + signo (x) 1) * 1.5707633
Arco-cosecante (arccos x) -- arctag (1/ (x ^ 2 1)) + signo (x) 1) * 1.570763
Arco-cotang. (arccotag x) --- 1.5707633 arctag (x)
NOTA: El smbolo ^ significa exponenciacin. es raz cuadrada. signo (x) se refiere al signo
del valor; si ste es positivo signo (x) valdr 1, si es negativo valdr 1 y si es cero valdr 0.
No debemos preocuparnos ahora por esto, ya que aprenderemos en breve o ms adelante
con mayor soltura a realizar exponenciaciones, races cuadradas y operaciones con signos.
Sigamos, pues, ahora con otras diferentes funciones que nos ofrece AutoLISP a la hora de rea-
lizar operaciones matemticas. La siguiente dice referencia a las races cuadradas; su sintaxis
es:
( SQRT valor)
Esta funcin devuelve el resultado de la raz cuadrada del valor indicado, ya sea un guarismo
simple o una expresin matemtica, como siempre. As por ejemplo, veamos unas expresiones
con sus correspondientes evaluaciones:
( SQRT 4) devuelve 2. 00
( SQRT 2) devuelve 1. 4142
( SQRT ( * 2 6) ) devuelve 3. 4641
La intencin de extraer una raz cuadrada de un nmero negativo produce el error function
undefined for argument de AutoLISP.
Por otro lado, la sintaxis para la funcin exponencial es la siguiente:
( EXPT base exponente)
EXPT devuelve el valor de base elevado a exponente. De esta forma, para elevar 5 al cubo
(igual a 125), por ejemplo, escribiremos:
( EXPT 5 3)
Otro ejemplo:
( EXPT 2. 3 7. 23)
De esta forma, como sabemos, podemos resolver el resto de races (cbicas, cuartas, quin-
tas...) existentes. Ya que raz cbica de 32 es lo mismo que 32 elevado a 1 / 3, podemos es-
cribir la siguiente expresin:
( EXPT 32 ( / 1 3) )
As tambin:
( EXPT 20 ( / 1 5) )
( EXPT 10 ( / ( + 2 4) ( - v23 r t sw2) )
( EXPT 3 ( / 1 2) )
NOTA: El intento de extraer races negativas de cualquier ndice producir el mismo error ex-
plicado en SQRT.
( EXP exponente)
Esta funcin devuelve la constante (nmero) e elevada al exponente indicado. Se corresponde
con el antilogaritmo natural. Por ejemplo:
( EXP 1) devuelve 2. 71828
( LOG valor)
LOG devuelve el logaritmo neperiano o natural (en base e) del valor indicado. Por ejemplo:
( LOG 4. 5) devuelve 125. 0000
( GCD valor_entero1 valor_entero2)
Esta sintaxis se corresponde con la funcin de AutoLISP GCD, que devuelve el mximo comn
denominador de los dos valores indicados. Estos valores han de ser obligatoriamente enteros,
de no ser as, AutoLISP devuelve bad argument type como mensaje de error. Veamos unos
ejemplos:
( GCD 45 80) devuelve 5
( GCD 80 70) devuelve 10
( GCD ( * 10 10) ( / 70 2) ) devuelve 5
Si se indica un entero negativo el mensaje de error de AutoLISP es improper argument.
Las dos ltimas funciones matemticas que veremos pueden sernos de gran ayuda a la hora
de programar. Una de ellas (MAX) devuelve el mayor de todos los nmeros indicados en la lis-
ta. Su sintaxis es:

( MAX valor1 valor2...)
Los valores pueden ser nmeros enteros o reales, y tambin expresiones matemtico-
aritmticas. As por ejemplo:
( MAX 78. 34 12 789 7)
devolver 789. 0, ya que es el nmero mayor. Lo devuelve como real por la aparicin de deci-
males en el elemento 78. 34. Como sabemos, con la sola aparicin de un valor real en una lis-
ta, el resultado es real.
Si el elemento mayor de la lista es un expresin matemtica, se devolver su resultado, no la
expresin en s, por ejemplo:
( MAX ( * 10 10) 5)
devolver 100 como resultado (10 * 10).
Otro ejemplo:
( MAX 5 7 9)
devolver 5.
( MI N valor1 valor2...)
La funcin MI N, por su lado, devuelve el menor de todos los valores indicados en lista. Las de-
ms consideraciones son anlogas a la funcin anterior. Ejemplos:
( MI N 1 2 3 4 7) devuelve 1
( MI N 23. 3 7 0) devuelve 0. 0
( MI N ( / 7 3) 0. 56) devuelve 0. 56

Ejemplos de MAX y MI N con variables:
( MI N x y z)
( MI N ( + x1 x2) ( + y1 y2) ( + w1 w2) ( + z1 z2) )
Y hasta aqu todas las funciones que tienen que ver con operaciones matemticas. Pasaremos,
tras unos ejercicios propuestos, a ver las operaciones de comparacin, muy interesantes y
sencillas de comprender.
2 fase intermedia de ejercicios
Realizar mediante AutoLISP las siguientes operaciones matemticas (estn expresadas en
notacin sencilla de una lnea):

((20 3) * (8 2))
1 + 78.8 + ((78.8 ^ 2) / 2) + ((78.8 ^ 3) / 3)
(sen ( (80 * 28.002) cos (PI / 2))) / (PI (1 / 2))
arccos (100 / 2)
(124.6589 * (e ^ 2.3)) / (7 * 2)
ln (45 * (7 / 2))
(23.009 / 78.743) ^ (56.00123 1)
Realcense ejercicios de clculo de valores mayores y menores de listas, as como de mxi-
mos comunes denominadores.
Realizar un par de ejercicios de incremento y decremento de una unidad a valores.
NOTA: Las operaciones en general siguen en AutoLISP la jerarqua de las operaciones mate-
mticas: parntesis internos, parntesis externos, operadores unitarios (signos), potenciacin,
multiplicacin y divisin, suma y resta, operadores relacionales (mayor que, menor que...) y
operadores lgicos (lgebra de Boole). Y cuando existen varios operadores en el mismo nivel,
se ejecutan de izquierda a derecha. Ahora mismo veremos operadores relacionales o de com-
paracin y, luego, el lgebra de Boole en AutoLISP.
ONCE.4.3. Operaciones relacionales
Las funciones que veremos a continuacin se denominan relacionales o de comparacin, y es
que comparan valores, ya sean numricos o textuales (cadenas) emitiendo un resultado ver-
dadero o falso, segn la comparacin. Estas funciones son conocidas por todos (igual, mayor
que, menor o igual que...), slo queda determinar cmo se utilizan y cul es su sintaxis en
AutoLISP.
Como hemos dicho el resultado de la evaluacin solo puede ser uno de dos: T (True) que re-
presenta el verdadero o cierto, o ni l que representa el falso o nulo.
NOTA: Con la devolucin ni l por parte de AutoLISP nos empezamos a familiarizar ahora y la
veremos muchas veces.
Comencemos por el igual o igual que, cuya sintaxis es la siguiente:
( = valor1 [valor2...])
La funcin = compara todos los valores especificados uno como mnimo, devolviendo T si
son todos iguales o ni l si encuentra alguno diferente. Los valores pueden ser nmeros, cade-
nas o variables (numricas o alfanumricas). As por ejemplo:
( = 5 5) devuelve T
( = 65 65. 0) devuelve T
( = 7 54) devuelve ni l
( = 87. 6 87. 6 87. 6) devuelve T
( = 34 34 34 34) devuelve ni l

Veamos ahora algn ejemplo con cadenas:
( = " hol a" " hol a" ) devuelve T
( = " casa" " cAsa" ) devuelve ni l
( = " H" " H" " H" " H" ) devuelve T
( = " hol a ahor a" " hol a ahor a" ) devuelve ni l

NOTA: Ntese, como adelanto, que las cadenas literales han de ir encerradas entre comillas,
como en casi todos los lenguajes de programacin.

Con variables declaradas, que ya veremos, sera de la misma forma. Si slo se indica un valor
en la lista, AutoLISP devuelve T.
NOTA: Hay que tener en cuenta que esta funcin slo compara valores y no listas o expresio-
nes. Si, por ejemplo, se tienen dos variables pt 1 y pt 2 con dos puntos que son listas de tres
elementos (una coordenada X, una coordenada Y y una coordenada Z), para comparar la
igualdad de ambos habra que recurrir a una funcin lgica como EQUAL, que veremos un poco
ms adelante.
( / = valor1 [valor2...])
Esta funcin / = (distinto o desigual que) devuelve T si alguno o algunos de los valores compa-
rados de la lista son diferentes o distintos de los dems, por ejemplo en los siguientes casos:
( / = 2 3)
( / = " t ext o" " t ext os" )
( / = ( * 2 2) ( * 2 4) ( * 2 3)
Devuelve ni l si todos los valores son iguales, por ejemplo:
( / = " casa" " casa" " casa" )
( / = " 1 2 3" " 1 2 3" " 1 2 3" " 1 2 3" " 1 2 3" )
( / = 32 32 32 32)
( / = ( * 10 10) ( * 25 4) )
Si nicamente se indica un valor, AutoLISP devuelve T.
( < valor1 [valor2...])
Esta sintaxis se corresponde con la comparacin menor que. Es una funcin AutoLISP que de-
vuelve T si efectivamente el primer valor comparado es menor que el segundo. Si existen di-
versos valores, cada uno ha de ser menor que el siguiente para que AutoLISP devuelva T. Si
no se devuelve ni l . Veamos algunos ejemplos:
( < 2 3) devuelve T
( < 3 4 5 89 100) devuelve T
( < 3 4 5 6) devuelve ni l
( < ( * 2 2) ( / 5 3) ) devuelve ni l
En el caso de cadenas o variables alfanumricas (las que contienen cadenas), la comparacin
se efecta segn el valor de los cdigos ASCII. Por lo tanto, ser el orden alfabtico ascenden-
te (de la A a la Z) la manera de considerar de menor a mayor los caracteres, teniendo en
cuenta que el espacio blanco es el carcter de menor valor y que las letras maysculas son de
menor valor que las minsculas. Ejemplos:
( < " a" " b" ) devuelve T
( < " z" " h" ) devuelve ni l
( < " A" " a" " b" ) devuelve T
( < " f " " S" ) devuelve ni l
Si las cadenas tienen ms caracteres se comparan de la misma forma:
( < " abc" " abd" ) devuelve T
( < " abc" " ab" ) devuelve ni l
No es posible comparar cadenas literales con nmeros; AutoLISP devuelve un mensaje de
error que dice bad ar gument t ype. Con variables que contienen valores numricos o literales
se realizara de la misma manera:
( < val or 1 val or 2 t ot al )
( < - 12 7 kmhr s)
( < aut or 1 aut or 2 aut or 3 aut o4 aut or 5)
( <= valor1 [valor2...])
Esta es la funcin menor o igual que. Funciona de la misma forma que la anterior pero tenien-
do en cuenta que devolver T si cada valor es menor o igual que el anterior. Si no devolver
ni l . He aqu unos ejemplos:
( <= 10 30 30 40 50 50) devuelve T
( <= 12. 23 12. 23 14) devuelve T
( <= 56 57 57 55) devuelve ni l
Las dems consideraciones son idnticas a las de la funcin precedente.
( > valor1 [valor2...])
Al igual que en la comparacin de menor que, pero de manera inversa, esta funcin devuelve T
si cada valor especificado, sea numrico sea cadena, es mayor que el siguiente, esto es, si se
encuentran ordenados de mayor a menor. Si no devuelve ni l . Por ejemplo:
( > 10 5 4. 5 2) devuelve T
( > " z" " gh" " ab" ) devuelve T
( > 23 45) devuelve ni l
Otros ejemplos:
( > sal do di vi d)
( > ppl ant a ppi so pcubi er t a)
( >= valor1 [valor2...])
Similar a los anteriores, establece la comparacin mayor o igual que. Se devolver T si y slo
si cada valor es mayor o igual que el que le sucede, si no, ni l . Las dems consideraciones son
idnticas a las otras funciones similares explicadas. Ejemplos:
( >= 33 23 23 12 12 54) devuelve ni l
( >= 24 24 24 23 23 0. 01 3) devuelve T
3 fase intermedia de ejercicios
Indicar el resultado de AutoLISP (T o ni l ) ante las siguientes proposiciones:
( = 23 23. 0)
( = 48. 0 ( * 6 8) )
( = " Aut oLI SP" " aut ol i sp" " aUt Ol I sP" )
( / = ( / 7 2) ( / 2 7) )
( / = " l i br o" " l i br o " )
( < 3 5 6 ( + 5 67) )
( <= " A" " A" " bc" " zk" " zk" )
( > " coche" " mesa" )
( >= " coche" " cocheci t o" )
( >= " cochu" " coche" " coche" " cocha" )
( >= " " " " " a" )

ONCE.4.4. Operaciones lgicas
Adems de lo estudiado hasta ahora, existen cuatro operaciones lgicas referidas al lgebra de
Boole. Estas operaciones son el Y lgico, el O lgico, la identidad y el NO lgico. Adems, exis-
te una quinta funcin que veremos al final denominada de identidad de expresiones y que es
un poco especial.
Las cuatro funciones que vamos a ver actan como operadores lgicos y devuelven, al igual
que las anteriores, nicamente los resultados T (cierto) o ni l (falso).
( AND expresin1 [expresin2...])

Esta funcin realiza el Y lgico de una serie de expresiones indicadas que representan otras
tantas condiciones. Esto significa que evala todas las expresiones y devuelve T si ninguna de
ellas es ni l . En el momento en que alguna es ni l , abandona la evaluacin de las dems y
devuelve ni l . Es decir, se deben cumplir todas y cada una de las condiciones. Veamos un
ejemplo:
( AND ( <= 10 10) ( >= 10 10) ) devuelve T
Esto significa que, si se cumple la condicin de la primera lista ( <= 10 10) y, adems, se
cumple la de la segunda lista ( >= 10 10) devolver T. Como esto es as, devuelve T.
De otra forma, si una de las condiciones no se cumple, devuelve ni l , por ejemplo en el si-
guiente caso:
( AND ( = 10 10) ( > 10 10) )
La primera condicin en verdadera (10 es igual a 10), pero la segunda es falsa (10 no es ma-
yor que 10). Como una ya no se cumple se devuelve ni l . Han de cumplirse todas las condicio-
nes para que sea el resultado verdadero. Veamos otros dos ejemplos:
( AND ( = 10 10) ( > 23 22. 9) ( / = " cami n" " cami onet a" ) ) devuelve T
( AND ( <= " A" " a" ) ( = 5 7) ) devuelve ni l
No tiene mucho sentido indicar una sola expresin con esta funcin. Las dos siguientes son
idnticas y producen el mismo resultado:
( AND ( = 20 - 20) )
( = 20 - 20)
Ambas devuelven ni l .
( OR expresin1 [expresin2...])

Realiza un O lgico de una serie de expresiones que representan otras tantas condiciones.
Evala las expresiones y devuelve ni l si todas ellas son ni l . En el momento en que encuentre
una respuesta distinta de ni l , abandona la evaluacin y devuelve T. sta es precisamente la
mecnica del O lgico, es decir, basta que se cumpla una de las condiciones para que la res-
puesta sea verdadera o cierta.
El siguiente ejemplo compara nmeros y devuelve ni l :
( OR ( < 20 2) ( > 20 2) )
O sea, si es menor 20 que 2 que no lo es o si es mayor 20 que dos que s lo es, de-
vuelve T. El cumplirse una de las dos condiciones es condicin suficiente para que devuelva T.
Veamos otro ejemplo:
( OR ( = 20 2) ( > 2 20) ) devuelve ni l
En este caso ninguna de las dos condiciones se cumplen (ambas son ni l ), as que el resultado
final ser ni l .
Como en el caso de la funcin AND, no tiene sentido utilizar una sola expresin, ya que el resul-
tado sera el mismo que al escribirla sola. Veamos otros ejemplos:
( OR ( >= 30 30 20 5) ( <= - 5 5 4 0) ) devuelve T
( OR ( < ( * 2 8) ( * 2 3) ) ( = ( / 8 2) ( * 4 1) ) ) devuelve T
( OR ( = " car r o" " car r et a" ) ( = " casa" " caset a" ) ( = 2 3) devuelve ni l
Recapitulando, y para afianzar estos dos ltimos conocimientos, decir que AND obliga a que se
cumplan todas las condiciones para devolver T. Sin embargo, a OR le basta con que una de
ellas se cumpla para devolver T. Digamos, en lenguaje coloquial, que AND es "si se cumple es-
to, y esto, y esto, y... es vlido", y OR es "si se cumple esto, o esto, o esto, o... es vlido".
Veamos ahora otra funcin lgica para comparar expresiones. Se llama EQUAL y su sintaxis es
la siguiente:
( EQUAL expresin1 expresin2 [aproximacin])
Esta funcin compara las dos expresiones indicadas, si son idnticas devuelve T, si difieren en
algo devuelve ni l .
A primera vista puede parecer igual a la funcin = (igual que) estudiada, sin embargo, sta
nicamente comparaba valores; EQUAL tiene la capacidad de poder comparar cualquier expre-
sin o lista de expresiones. De esta forma, podemos utilizar EQUAL de la misma forma que =,
as:
( EQUAL 2 2) devuelve T
( EQUAL 3 5) devuelve ni l
Pero no tiene mucho sentido, ya que tenemos la funcin =. Reservaremos EQUAL para lo ex-
puesto, es decir, para la comparacin de listas de expresiones.
As pues, y adelantndonos a algo que veremos un poco ms tarde, diremos que la expresin
de las coordenadas de un punto 3D se escribira de la siguiente forma:
( 20 20 10)
El apstrofo es la abreviatura de la funcin QUOTE de AutoLISP, que toma como literales, y sin
evaluar, las expresiones que le siguen. De esta forma, para comparar la identidad de dos pun-
tos haramos, por ejemplo:
( EQUAL ( 20 20 10) ( 20 20 10) ) devuelve T
( EQUAL ( 20 5 10) ( 20 20 10) ) devuelve ni l
NOTA: La funcin QUOTE se ve ampliada en la seccin ONCE.5.1.
El argumento optativo aproximacin se utiliza cuando se comparan expresiones cuyos resul-
tados son nmeros reales y puede haber una pequea diferencia decimal que no queramos
considerar desigual. Con este argumento suministramos a la funcin un valor de aproximacin
decimal respecto al cual se creern iguales los resultados. Por ejemplo:
( EQUAL 23. 5147 23. 5148) devuelve ni l
( EQUAL 23. 5147 23. 5148 0. 0001) devuelve T
( NOT expresin)
La funcin NOT devuelve el NO lgico, es decir, si algo es verdadero devuelve falso y viceversa.
As, cuando el resultado sea distinto de ni l (T), devolver ni l ; cuando el resultado sea ni l ,
devolver T. Por ejemplo:
( NOT ( = 2 2) ) devuelve ni l
( NOT ( / = 2 2) ) devuelve T
( EQ expresin1 expresin2)
Esta funcin no es propiamente lgica, sino que se denomina de identidad de expresiones. An
as, la introducimos en este apartado por su similitud con las anteriores.
EQ compara las dos expresiones (slo dos y ambas obligatorias) indicadas y devuelve T si am-
bas son idnticas o ni l en caso contrario. Se utiliza sobre todo para comparar listas y ver si
hay igualdad estructural.
La diferencia de EQ con EQUAL es que sta ltima compara los resultados de evaluar las expre-
siones, mientras que EQ compara la identidad estructural de las expresiones sin evaluar. Por
ejemplo, y adelantando la funcin SETQ que enseguida veremos, podemos hacer lo siguiente:
( SETQ l i st 1 ( x y z) )
( SETQ l i st 2 ( x y z) )
( SETQ l i st 3 l i st 2)
( EQ l i st 1 l i st 2) devuelve T
( EQ l i st 2 l i st 3) devuelve ni l
Se observa que l i st 1 y l i st 2 son exactamente la misma lista por definicin, estn declaradas
con SETQ y por separado, siendo sus elementos iguales. Pero l i st 3 es, por definicin, igual a
l i st 2 y no a l i st 3, aunque sus elementos sean iguales. Es por ello que, en la segunda eva-
luacin, EQ devuelve ni l .
NOTA: Comprenderemos enseguida el funcionamiento y base de la funcin SETQ, no hay pre-
ocuparse.
4 fase intermedia de ejercicios
Indicar el resultado de AutoLISP (T o ni l ) ante las siguientes proposiciones:

( AND ( = ( * 20 20) ( / 800 2) ) ( > 300 200 500) )
( AND ( >= " a" " a" ) ( >=" z" " a" ) ( >= " " " " ) ( >= " " " " ) )
( AND ( OR ( = 2 2) ( > 3 6) ) ( OR ( = 7 5) ( = 0 0) ) )
( EQUAL ( AND ( = 1 10) ( = 1 1) ) ( OR ( >= 3 2 1 0) ( <= 0 2) ) )
( OR ( AND ( = 1 1) ( = 2. 0 2) ) ( OR ( NOT ( = 1 1) ) ( = 2. 0 2) ) )
NOTA: Aprciese la capacidad de poder anidar y combinar expresiones.
Y hasta aqu llega esta parte de funciones matemticas, lgicas y de comparacin. Probable-
mente el lector estar pensando que de poco sirve lo expuesto hasta ahora: qu ms dar que
una expresin matemtica me d un resultado si luego no puedo operar con l; que importar
que una proposicin lgica me devuelva T o ni l si no me sirve para otra cosa.
Paciencia... En el mundo de la programacin hay que empezar desde abajo y, aseguramos que
un buen dominio abstracto de lo visto hasta ahora proporcionar un gran nivel de soltura a la
hora de programar de verdad. Seguramente, adems, aquella persona que sepa programar en
algn lenguaje existente, habr comprendido algo ms ya que todos son muy parecidos. El
nefito comenzar a ver las cosas claras inmediatamente.
A partir de la siguiente seccin comenzaremos a ver para qu sirve todo esto y cmo utilizarlo
prcticamente en programas propios.

ONCE.5. CREAR Y DECLARAR VARIABLES
Una vez visto lo visto, vamos a ver como podemos introducir valores en variables para no per-
derlos. A esto se le llama declarar variables.
Una variable es un espacio en memoria donde se guardar, con un nombre que indiquemos,
un valor concreto, una cadena de texto, un resultado de una expresin, etctera. El comando
para declarar variables en AutoLISP es SETQ y su sintaxis es la que sigue:
( SETQ nombre_variable1 expresin1 [nombre_variable2 expresin2...])
De esta manera introducimos valores en nombres de variables, por ejemplo:
( SETQ x 12. 33)
Esta proposicin almacena un valor real de 12,33 unidades en una variable con nombre x.
Al escribir una funcin SETQ atribuyendo a una variable un valor, AutoLISP devuelve dicho va-
lor al hacer I NTRO. AutoLISP siempre tiene que devolver algo al ejecutar una funcin.
Como indica la sintaxis, podemos dar ms de un valor a ms de un nombre de variable a la
vez en una funcin SETQ, por ejemplo:
( SETQ x 54 y 12 z 23)
En este caso, AutoLISP devuelve el valor de la ltima variable declarada. Esto no es muy re-
comendable si las expresiones o elementos de la lista son muy complicados, ya que puede dar
lugar a errores. A veces, aunque no siempre, es preferible utilizar tantas SETQ como variables
haya que declarar que hacerlo todo en una sola lnea.
Si declaramos una variable que no exista, se crea y se guarda en memoria con su valor; si la
variable ya exista cambiar su valor por el nuevo.
NOTA: Al comenzar un dibujo nuevo, abrir uno existente o salir de AutoCAD, el valor de las
variables se pierde de la memoria.
Podemos, como hemos dicho, atribuir valores de cadena a variables de la siguiente forma:
( SETQ ci udad " Bi l bao" )
y combinar cadenas con valores numricos y/o expresiones:
( SETQ ci udad " Bi l bao" x ( + 23 45 23) v1 77. 65)
De esta forma, se guardar cada contenido en su sitio. Las variables que contienen cadenas
textuales han de ir entre comillas dobles (" " ). A estas variables se las conoce en el mundo de
la informtica como variables alfanumricas o cadenas, y pueden contener cualquier carcter
ASCII. Las otras variables son numricas, y nicamente contendrn datos numricos.
NOTA: De forma diferente a otros lenguajes de programacin, en AutoLISP no hay que dife-
renciar de ninguna manera los nombres de variables numricas de los de variables alfanumri-
cas o cadenas.
Para comprobar nosotros mismos el valor de una variable declarada, y como se expuso al prin-
cipio de este MDULO ONCE, podemos evaluarla directamente introduciendo su nombre, en
la lnea de comandos, precedido del carcter de cierre de exclamacin (! ). Por ejemplo, decla-
radas las variables anteriores (ci udad, x y v1), podemos examinar su valor de la siguiente
manera:
! ci udad devuelve " Bi l bao"
! x devuelve 91
! v1 devuelve 77. 65

As pues, imaginemos que queremos escribir unas pequeas lneas de cdigo que calculen el
rea y el permetro de un crculo, segn unos datos fijos proporcionados. Podramos escribir la
siguiente secuencia en orden, acabando cada lnea con I NTRO:
( SETQ Radi o 50)
( SETQ Ar ea ( * PI Radi o Radi o) )
( SETQ Per i m( * 2 PI Radi o) )
De esta forma, si ahora tecleamos lo siguiente se producen las evaluaciones indicadas:
! ar ea devuelve 7853. 98
per i mdevuelve 314. 159
NOTA: Como sabemos es indiferente el uso de maysculas y minsculas. Adems, decir que
podemos (lo podramos haber hecho con la variable Ar ea) introducir tildes y/o ees en nom-
bres de variable pero, por compatibilidad, es lgico y mucho mejor no hacerlo.
NOTA: Es posible declarar variables con nombres de funciones inherentes de AutoLISP, pero
cuidado, si hacemos estos perderemos la definicin propia de la misma y ya no funcionar, a
no ser que cambiemos de sesin de dibujo. As mismo, tampoco debemos reasignar valores
diferentes a constantes (que en realidad son variables, porque podemos cambiarlas) propias
de AutoLISP como PI . La siguiente funcin que veremos nos ayudar a evitar esto.
NOTA: Si queremos ver el valor de una variable no declarada, AutoLISP devuelve ni l .
Al estar los valores guardados en variables, podemos utilizarlos para otras operaciones sin ne-
cesidad de volver a calcularlos. Teniendo en cuenta el ltimo ejemplo, podramos hacer:
( + ar ea per i m)
para que devuelva el resultado de la adicin de las dos variables. O incluso, podemos guardar
dicho resultado en otra variable, para no perderlo, as por ejemplo:
( SETQ t ot al ( + ar ea per i m) )
Despus podremos comprobar su valor escribiendo ! t ot al .
Lo que no podemos es realizar, por ejemplo, operaciones matemticas con variables alfanum-
ricas entre s, o con numricas y alfanumricas mezcladas (aunque las cadenas contengan
nmeros no dejan de ser cadenas textuales). Veamos la siguiente secuencia y sus resultados:
( SETQ x 34) devuelve 34
( SETQ y " ami " ) devuelve " ami "
( SETQ z " gui t os" ) devuelve " gui t os"
( SETQ w " 12" ) devuelve " 12"
( SETQ p 10) devuelve 10
( + x p) devuelve 44
( + p y) devuelve er r or : bad ar gument t ype
( + x w) devuelve er r or : bad ar gument t ype
( + y z) devuelve er r or : bad ar gument t ype
En otros lenguajes de programacin podemos concatenar cadenas de texto con el smbolo de
suma +, en AutoLISP no. AutoLISP ya posee sus propios mecanismos que ya estudiaremos
para realizar esta funcin. Tampoco podemos, como vemos, operar con cadenas y valores nu-
mricos, sean como sean y contuvieren lo que contuvieren.
Veamos algunos ejemplos ms de SETQ:
( SETQ ancho ( * l k) l ar go ( + x1 x2) al t o ( * ancho 2) )

NOTA: Como vemos, podemos definir una variable con una expresin que incluya el nombre de
otra definida anteriormente, aunque sea en la misma lnea.
( SETQ x ( = 20 20) )
Esta variable x guardara el valor verdadero (T).
( SETQ zon ( * ( / 3 2) 24 ( EXPT 10 4) ) )
( SETQ f ( 1+ f ) )
Este ltimo ejemplo es lo que se denomina, en el mundo de la programacin informtica, un
contador-suma. Guarda el valor de f ms una unidad en la propia variable f (se autosuma 1).
Cambiando a otra cosa, vamos a comentar la posibilidad de perder la definicin de una funcin
AutoLISP por declarar una variable con su nombre. Existe una funcin que muestra todos los
smbolos actuales definidos. Esta funcin es:
( ATOMS- FAMI LY formato [lista_smbolos])
ATOMS- FAMI LY, como decimos, muestra una lista con todos los smbolos definidos actualmente.
En esta lista entran tanto las subrs (funciones inherentes) de AutoLISP como las funciones y
variables definidas y declaradas por el usuario cargadas en la actual sesin de dibujo. De esta
forma podemos consultar dicha lista para ver si tenemos la posibilidad de dar ese nombre de
variable que estamos pensando. Ah tendremos todas las funciones propias e inherentes, ade-
ms de las variables ya creadas.
Como podemos observar en la sintaxis, esta funcin necesita un parmetro o argumento obli-
gatorio llamado formato. formato slo puede tomar dos valores: 0 1. Si es 0, los smbolos
se devuelven en una lista, separando cada nombre de otro por un espacio en blanco. Si es 1,
los smbolos se devuelven entre comillas (separados tambin por espacios blancos) para su
mejor comparacin y examen. Cuestin de gustos; la verdad es que no se encuentra un sm-
bolo tan fcilmente entre la marabunta de trminos.
Pero con el argumento optativo podemos depurar o filtrar al mximo la bsqueda; de esta ma-
nera es de la que ms se utiliza. Con l i st a_s mbol os hacemos que se examinen solamente
los nombres que incluyamos en la lista. Estos smbolos habrn de ir encerrados entre comillas
y ser precedidos del apstrofo ( ) por ser una lista literal. El resultado es otra lista en la que,
los smbolos ya existentes aparecen en su sitio, en el mismo lugar de orden donde se escribie-
ron y, en el lugar de los no existentes aparece ni l .
Si por ejemplo queremos saber si el nombre de variable t ot al existe ya como smbolo, sea
funcin inherente, propia o variable ya declarada, y deseamos el resultado como simple lista
escribiremos:
( ATOMS- FAMI LY 0 ( " t ot al " ) )
y AutoLISP, si no existe el smbolo, devolver:
( ni l )
Si an no hemos declarado ninguna variable y escribimos:
( ATOMS- FAMI LY 0 ( " t ot " " set q" " w" " >=" " sqr t " " suma" ) )
AutoLISP devolver:
( ni l SETQ ni l >= SQRT ni l )
Y si lo escribimos as (con 1 para formato):
( ATOMS- FAMI LY 1 ( " t ot " " set q" " w" " >=" " sqr t " " suma" ) )
AutoLISP devolver:
( ni l " SETQ" ni l " >=" " SQRT" ni l )
ONCE.5.1. A vueltas con el apstrofo ()
Ya hemos utilizado un par de veces este smbolo y, tambin, hemos explicado por encima su
funcin. Vamos ahora a ampliar esa informacin.
El smbolo de apstrofo ( ) no es otra cosa, como ya se coment, que una abreviatura de la
funcin QUOTE de AutoLISP. Dicha funcin tiene la siguiente sintaxis de programacin:
( QUOTE expresin)
o tambin:
( expresin)

NOTA: Ntese que tras QUOTE hay un espacio pero, si se utiliza el apstrofo no hay que intro-
ducirlo.
Esta funcin se puede utilizar con cualquier expresin de AutoLISP. Lo que hace es evitar que
se evalen los smbolos y los toma como literales. Devuelve siempre el literal de la expresin
indicada, sin evaluar. Por ejemplo:
( QUOTE ( SETQ x 22. 5) ) devuelve ( SETQ x 22. 5)
( QUOTE hol a) devuelve HOLA
( QUOTE ( + 3 3 3) ) devuelve ( + 3 3 3)

Hay que tener cuidado al utilizar el apstrofo de abreviatura de QUOTE, ya que desde la lnea
de comandos no lo vamos a poder utilizar. Recordemos que AutoCAD slo reconoce que es-
tamos escribiendo algo en AutoLISP en la lnea de comandos cuando comenzamos por el pa-
rntesis de apertura ( , o a lo sumo por la exclamacin final ! , para evaluar variables directa-
mente. Expresiones como las siguientes:
( DEFUN di bl i n ( ) " Nada" )
a
var 12
slo podremos introducirlas desde un archivo ASCII (como veremos en seguida).
Pues este comando es muy utilizado a la hora de introducir directamente, por ejemplo, las co-
ordenadas de un punto, ya que estas coordenadas son en el fondo una lista y que no ha de ser
evaluada. Por ejemplo ( 50 50) .
Lo mismo nos ha ocurrido con la lista de ATOMS- FAMI LY. sta no ha de evaluarse (no tiene
otras funciones aadidas, es simplemente un grupo de cadenas), por lo que ha de introducirse
como literal.
Una lista que no tiene funcin aadida, por ejemplo ( 50 50 23) produce un error de bad
f unct i on en AutoLISP, a no ser que se introduzca como literal:
( QUOTE ( 50 50 23) ) devuelve ( 50 50 23)
NOTA: En la mayora de las funciones de AutoLISP, al introducir un literal de expresin la ha-
remos con el apstrofo directamente, ya que con QUOTE no funcionar. QUOTE slo tendr vali-
dez cuando se utilice solo, sin ms funciones.
ONCE.6. PROGRAMANDO EN UN ARCHIVO AS-
CII
Hasta ahora hemos visto muchos ejemplos de funciones en AutoLISP, pero todos ellos los he-
mos tecleado desde la lnea de comandos de AutoCAD. Esto resulta un poco engorroso, ya
que si quisiramos volver a teclearlos tendramos que escribirlos de nuevo. Sabemos que exis-
te la posibilidad de copiar y pegar en lnea de comandos, an as es pesado tener que volver a
copiar y pegar cada una de las lneas introducidas.
Existe la posibilidad de crear archivos ASCII con una serie de funciones AutoLISP (programa)
que se vayan ejecutando una detrs de otra al ser cargado, el programa, en AutoCAD. sta es
la verdadera forma de trabajar con AutoLISP. La escritura en lnea de comandos est relegada
a pruebas de funcionamiento de funciones.
Con este mtodo, no slo tenemos la posibilidad de editar unas lnea y correrlas (ejecutarlas)
bajo AutoCAD, sino que adems podremos elaborar programas extensos que tendremos la
posibilidad de cargar desde disco en cualquier sesin de dibujo, en cualquier momento.
Incluso, como veremos, es factible la creacin de rdenes o comandos para AutoCAD 14 que,
siendo no otra cosa que programas en AutoLISP, podremos ejecutar con slo teclear su nom-
bre. Estos programas manejarn la Base de Datos de AutoCAD, operarn con objetos de dibu-
jo, utilizarn cuadros de dilogo o no como interfaz, y un largusimo etctera. La programacin
en AutoLISP, unida a estructuras de mens, tipos de lnea, patrones de sombreado y dems
estudiado en este curso, nos permitir llegar a crear verdaderas aplicaciones verticales para
AutoCAD 14.
Pero para desarrollar un programa en un archivo ASCII y luego poder cargarlo en AutoCAD,
no debemos simplemente escribir las expresiones que ya hemos aprendido y punto. Hay que
seguir una lgica y hay que indicarle a AutoCAD, al principio del programa, que estamos es-
cribiendo un programa en AutoLISP, precisamente.
Un archivo ASCII puede contener varios programas o funciones de usuario en AutoLISP. Se
suelen escribir procurando no sobrepasar los 80 caracteres por lnea para su edicin ms c-
moda y, adems, se suelen sangrar en mayor o menor medida las entradas de algunas lneas,
dependiendo de la funcin ya nos iremos familiarizando con esto para dar claridad al pro-
grama.
Un programa de AutoLISP se compone de una serie de funciones AutoLISP que se ejecutan
una detrs de la otra produciendo diferentes resultados. El caso sera el mismo que ir introdu-
ciendo rengln a rengln en la lnea de comandos. Pero en un archivo ASCII hay que introducir
todas las funciones dentro de la lista de argumentos de otra que las engloba. Esta funcin es
DEFUN y su sintaxis es:
( DEFUN nombre_funcin lista_argumentos expresin1 [expresin2...])
DEFUN define una funcin de usuario. Su parntesis de apertura es lo primero que debe apare-
cer en un programa AutoLISP y su parntesis de cierre lo ltimo tras todas las funciones in-
termedias (despus puede haber otros DEFUN).
nombre_funcin es el nombre que le vamos a dar a nuestra funcin y lista_argumentos es
una lista de argumentos globales o locales para la funcin. Los argumentos o variables globa-
les son aquellos que se almacenan en memoria y permanecen en ella; son todas las variables
que hemos definiendo hasta ahora. Estas variables pueden ser utilizadas por otros programas
AutoLISP o ser evaluadas directamente en lnea de comandos mediante el carcter ! .
Los smbolos locales son variables temporales. Estas se almacenan en memoria slo de mane-
ra temporal, hasta que se termina la funcin en curso. Una vez ocurrido esto desaparecen y no
pueden ser utilizados por otros programas ni evaluados en lnea de comandos. Estos smbolos
locales han de estar indicados en la lista despus de una barra (/ ). Esta barra tiene que estar
separada del primer smbolo local por un espacio en blanco y del ltimo smbolo global si lo
hubiera por un espacio blanco tambin. Veamos unos ejemplos:
( DEFUN f unc ( x) . . . variable global: x
( DEFUN f unc ( x y) . . . variables globales: x y
( DEFUN f unc ( x / u z) . . . variable global: x variables locales: u z
( DEFUN f unc ( / x s) . . . variables locales: x s
Si el smbolo local se encontrara ya creado antes de ser utilizado en la funcin definida, recu-
pera el valor que tena al principio una vez terminada la funcin. Si no se especifican como
locales al definir una funcin, todos los smbolos declarados con SETQ dentro de ella son globa-
les.
NOTA: De momento vamos a olvidarnos de variables globales y locales, ya que todas las fun-
ciones que definamos por ahora tendrn una lista de argumentos vaca. Ms adelante se pro-
fundizar en este tema.
Despus de esto, aparecern todas las expresiones del programa, o sea, las funciones de Au-
toLISP o de usuario ya definidas que formen el conjunto del programa. Al final, deber cerrar-
se el parntesis de DEFUN.
As pues, ya podemos crear nuestro primer programa en AutoLISP. Este programa calcular la
raz cuadrada de un nmero, definidos anteriormente en una variables. Veamos cmo es el
pequeo programa:
( DEFUN ( ) Rai z
- - ( SETQ X 25)
- - ( SQRT X)
)

NOTA IMPORTANTE DE SINTAXIS: EN LOS PROGRAMAS INCLUIREMOS LOS SANGRANDOS EN
FORMA DE GUIONES, PERO ESTOS NO DEBEN SER INCLUIDOS REALMENTE EN EL CDIGO,
SINO QUE SERN SUSTITUIDOS POR ESPACIOS BLANCOS.

Vamos a comentarlo un poco. Definimos, lo primero, la funcin llamada Rai z con una lista de
argumento vaca. A continuacin, asignamos con SETQ el valor 25 a la variable X y calculamos
su raz cuadrada. Al final, cerramos el parntesis de DEFUN. Simple.
NOTA: La razn para sangrar las lneas se debe a la comodidad de ver qu parntesis cierran a
qu otros. De un golpe de vista se aprecia perfectamente.
NOTA: Es irrelevante la utilizacin de maysculas o minsculas en la programacin en Auto-
LISP (excepto en cadenas literales, lgicamente).
Podamos haber hecho el programa sin variable, simplemente poniendo el valor tras la funcin
de la raz cuadrada, pero es otro modo de recordar y practicar. Escribmoslo y guardmoslo
con extensin . LSP. Como nombre es recomendable darle el mismo que a la funcin, es decir,
que el nombre del archivo quedara as: RAI Z. LSP. Esto no tiene por qu sentar ctedra.
Vamos ahora a cargar nuestra nueva funcin en AutoCAD. El procedimiento es sencillo y
siempre el mismo. Desde Herr.>Cargar aplicacin... accedemos al cuadro Cargar archivos Au-
toLISP, ADS y ARX. En este cuadro, pinchando en Archivo... se nos abre un nuevo cuadro para
buscar y seleccionar el archivo. Tras seleccionarlo (y pulsar Abrir) volveremos al cuadro ante-
rior donde pulsaremos el botn Cargar. De esta forma cargamos el archivo para poder ser uti-
lizado.
NOTA: Si en este cuadro comentado activamos la casilla Guardar lista, tendremos accesibles
en la lista Archivos a cargar todos los archivos cargados desde la activacin de la casilla. De
esta forma podremos modificar un archivo . LSP y, rpidamente, volver a cargarlo escogindolo
de esta lista y pulsando Cargar. Realmente la lista se guarda en un archivo llamado AP-
PLOAD. DFS y que estar guardado en el directorio al que haga referencia el acceso directo que
arranca AutoCAD en su casilla Iniciar en:.
El botn Descargar descarga de memoria la aplicacin designada y, el botn Suprimir, elimina
una entrada de la lista.
NOTA: Este cuadro de dilogo aparece tambin con el comando APPLOAD de AutoCAD 14.
Una vez cargada la funcin slo queda ejecutarla. Para ello deberemos indicarla entre parnte-
sis, esto es (en la lnea de comandos):

( RAI Z)
y AutoCAD devuelve:
2. 23607
La razn de que haya que ejecutarlas entre parntesis es porque es una funcin AutoLISP; es
una funcin definida por el usuario, pero no deja de ser AutoLISP. Pero existe una forma de no
tener que escribir los parntesis para ejecutar una nueva orden de usuario. Esta forma consis-
te en colocar justo delante del nombre de la nueva funcin los caracteres C: (una ce y dos
puntos). De la siguiente manera quedara con el ejemplo anterior:
( DEFUN ( ) C: Rai z
- - ( SETQ X 25)
- - ( SQRT X)
)
As, nicamente habramos de escribir en la lnea de comandos:
RAI Z
para que devuelva el mismo resultado. De esta forma, RAI Z es un nuevo comando totalmente
integrado en AutoCAD, el cual podramos ejecutar desde la lnea de comandos o hacer una
llamada a l desde un botn de una barra de herramientas, o desde una opcin de men, etc-
tera.
NOTA: Las funciones definidas mediante este mtodo no admiten variables globales, slo loca-
les.
NOTA: Las maysculas o minsculas son tambin irrelevantes a la hora de llamar a un funcin
de usuario, al igual que ocurre con los comandos de AutoCAD.
5 fase intermedia de ejercicios
Realizar un programa AutoLISP que calcule la suma de los diez primeros nmeros.
Realizar un programa que compare valores mayores.
Realizar un programa que asigne valores a 3 variables y luego las multiplique todas entre s.
ONCE.7. CAPTURA Y MANEJO BSICO DE DA-
TOS
ONCE.7.1. Aceptacin de puntos
Tras lo estudiado parece ser que vamos entrando poco a poco y de lleno en el mundo de la
programacin en AutoLISP. Sin embargo, an puede parecernos algo ilgico el poder realizar
un programa que calcule una serie operaciones con cantidades fijas, sin poder variar de nme-
ros cada vez que se ejecute el programa, por ejemplo. En esta seccin ONCE.7. vamos a
aprender la forma que tenemos de pedirle datos al usuario para luego operar con ellos. Co-
menzaremos por los puntos.
Todo lo que se refiere a captura de datos, tiene en AutoLISP un nombre propio que es GET....
Si nos damos cuenta, se ha indicado con punto suspensivos porque "GET" como tal no existe
como funcin, sino una serie de ellas que comienzan con esas letras. Pues bien, todas estas
funciones del tipo GET... nos proporcionarn las posibilidad de preguntar al usuario por un
texto, por el valor de una distancia, por la situacin de un punto, etc. para luego operar a
nuestro antojo con dichos valores.
La primera funcin de este tipo que vamos a estudiar tiene la sintaxis:
( GETPOI NT [punto_base] [mensaje])

GETPOI NT solicita un punto al usuario. Esta funcin aguarda a que se introduzca un punto, bien
sea por teclado o sealando en pantalla como habitualmente lo hacemos con AutoCAD, y de-
vuelve las coordenadas de dicho punto en forma de lista de tres valores reales (X, Y y Z). Para
probarla podemos escribir en la lnea de comandos:
( GETPOI NT)
A continuacin, sealamos un punto (o lo digitamos) y AutoLISP devuelve las coordenadas de
dicho punto. Estas coordenadas, como hemos dicho, estn en forma de lista, es decir, entre
parntesis y separadas entre s por espacios en blanco (es una tpica lista de AutoLISP como
hemos visto alguna ya).
La potencia de esta funcin se desarrolla al guardar las coordenadas indicadas en una variable,
para que no se pierdan. En el momento en que capturamos los datos y los almacenamos en
una variable ya podemos utilizarlos posteriormente. Para almacenar los datos utilizaremos la
funcin SETQ estudiada, de la siguiente manera por ejemplo:
( DEFUN C: Capt ur aPunt o ( )
- - ( SETQ Punt o ( GETPOI NT) )
)
Como sabemos, para ejecutar esta nueva orden habr que escribir en la lnea de comandos de
AutoCAD:
CAPTURAPUNTO
Con el argumento opcional mensaje de GETPOI NT tendremos la posibilidad de incluir un mensa-
je en la lnea de comandos a la hora de solicitar un punto. As, podramos variar un poco el
programa anterior de la siguiente manera:
( DEFUN C: Capt ur aPunt o ( )
- - ( SETQ Punt o ( GETPOI NT " I nt r oduci r un punt o: " ) )
)
De esta forma se visualizar el mensaje indicado (siempre entre comillas) a la hora de solicitar
el punto.
El argumento punto_base permite introducir un punto base de coordenadas (2D 3D), a partir
del cual se visualizar una lnea elstica hasta que indiquemos un punto. Viene a ser algo as
como la manera de dibujar lneas en AutoCAD: se indica un punto y la lnea se "engancha" a
l hasta sealar el segundo. De todas formas no tiene nada que ver. Para indicar este punto de
base lo podemos hacer mediante una variable que contenga un punto o directamente con una
lista sin evaluar (con apstrofo), como vimos:
( GETPOI NT ( 50 50) " I nt r oduci r un punt o: " )
NOTA: Aprciese el espacio tras . . . punt o: . Es puramente decorativo. Producira mal efecto
al aparecer en pantalla el mensaje si no estuviera este espacio. Prubese.
Pero, qu hacemos ahora con este punto? Hemos comenzado a ver la manera de obtener da-
tos del usuario, pero poco podremos hacer si no somos capaces de procesarlos despus, al
margen de las tpicas que no intiles operaciones matemticas y de comparacin. Para
avanzar un poco ms, vamos a hacer un inciso en la manera de capturar datos y vamos a ver
la funcin COMMAND de AutoLISP.
La funcin COMMAND permite llamar a comandos de AutoCAD desde AutoLISP. Sus argumentos
son las propias rdenes de AutoCAD y sus opciones correspondientes. La manera de indicarle
estas rdenes y opciones del programa a la funcin COMMAND es entre comillas dobles (" "),
aunque tambin podremos indicar puntos en forma de lista (o no), valores en formato de ex-
presin matemtica y otros. La sintaxis de COMMAND es la siguiente:
( COMMAND [comando] [opciones...])
As por ejemplo, podemos ejecutar la siguiente funcin desde la lnea de comandos:
( COMMAND " l i nea" ( 50 50) ( 100 100) " " )
Esto es, ejecutar el comando LI NEA, darle 50,50 como primer punto y 100,100 como segundo
punto. Al final, un I NTRO (" " ) para acabar la orden. La base es exactamente la misma que
cuando escribamos la macro de un botn: hay que ir escribiendo comandos y opciones como
si fuera directamente en lnea de comandos. La diferencia es que no hay que introducir ningn
carcter para indicar un I NTRO, simplemente al escribir " LI NEA" se ejecuta el comando, o al
escribir ( 50 50) se introduce el punto. Es por ello que, al final haya que escribir un par de
comillas dobles (sin espacio intermedio) para acabar la orden LI NEA, y es que estas comillas
indican un I NTRO.
Como vemos, la manera de escribir las coordenadas de un punto es mediante un lista sin eva-
luar (con apstrofo). Pero es perfectamente lcito (slo con la funcin COMMAND) introducirlas
como algo que se escribira por teclado, es decir, de la siguiente forma:
( COMMAND " l i nea" " 50, 50" " 100, 100" " " )
como ocurre con el comando LI NEA. Esto no lo podremos hacer con el resto de funciones.
NOTA: Al igual que en las macros y en los mens, sera ms recomendable, por aquello del
soporte idiomtico del programa en AutoLISP, escribir funciones como la anterior de esta otra
forma: ( COMMAND " _l i ne" ( 50 50) ( 100 100) " " ) .
As pues, podramos reciclar nuestro ejemplo de GETPOI NT de la siguiente forma:
( DEFUN C: Di bCi r c ( )
- - ( SETQ Cent r o ( GETPOI NT " I nt r oduci r un punt o: " ) )
- - ( COMMAND " _ci r cl e" Cent r o " 10" )
)

Este programa pedir un punto al usuario y dibujar un crculo de radio 10 con centro en dicho
punto. Sencillo.
NOTA: Si damos un nombre de un comando de AutoCAD a una funcin definida por nosotros,
recordar lo explicado en el MDULO NUEVE sobre redefinicin de rdenes. Y si queremos
realizar un programa que sea totalmente compatible con todas las versiones idiomticas de
AutoCAD y, adems, evitar la posibilidad de que en una mquina haya rdenes predefinidas,
utilizaremos los comandos con el guin de subrayado y el punto juntos, de la forma: _. l i ne.
NOTA: Las rdenes de AutoCAD que leen directamente informacin del teclado, como TEXTO-
DI N (DTEXT) o BOCETO (SKETCH), no funcionan correctamente con la funcin COMMAND, por lo
que no se pueden utilizar. Si se utiliza una llamada a la orden SCRI PT mediante COMMAND debe-
r ser la ltima llamada.
Al principio de este MDULO vimos que existan tres variables o smbolos predefinidos de Au-
toLISP. Entre ellas estaba PAUSE, y dijimos que se utilizaba con la funcin COMMAND. La forma
de hacerlo es introducir este smbolo predefinido como argumento de COMMAND, esto har que
el comando en curso, al que haya llamado la funcin, se interrumpa para que el usuario intro-
duzca algn dato. La mecnica es la misma que se utilizaba al escribir un carcter de contra-
barra en las macros de los mens o los botones de barras de herramientas. Por ejemplo:
( COMMAND " _ci r cl e" ( 50 50) pause)
Este ejemplo situar el centro de un crculo en el punto de coordenadas 50,50 y esperar a
que el usuario introduzca el radio (o dimetro), sea por teclado o indicando en pantalla. Pode-
mos hacer zooms, encuadres y dems (siempre transparentes) hasta introducir lo solicitado,
momento en el cual se devolver el control a la funcin COMMAND y terminar el comando.
NOTA: De hecho, el smbolo PAUSE contiene el valor predefinido de contrabarra. nicamente
deberemos evaluarlo en lnea de comandos (! pause) para comprobarlo. El resultado de esta
evaluacin ser " \ \ " , ya que \ \ , como est indicado en el punto 8. de la seccin ONCE.2.3.
(en este MDULO), es el cdigo para el carcter contrabarra. Por compatibilidad, podemos
introducir la cadena " \ \ " en lugar de PAUSE con funciones COMMAND.
Terminado el inciso de la funcin COMMAND, vamos a seguir explicando otra funcin similar a
GETPOI NT. Esta nueva se llama GETCORNER y su sintaxis es la siguiente:
( GETCORNER punto_base [mensaje])
La misin de GETCORNER es exactamente la misma que la de GETPOI NT (solicitar y aceptar un
punto), la nica diferencia es la forma de visualizar dinmicamente el arrastre. Con GETCOR-
NER, en lugar de ser una lnea elstica (como ocurra con GETPOI NT con punto base), es un
rectngulo elstico. Esto nos lleva a deducir que esta funcin necesita obligatoriamente que se
indique un punto de base para el rectngulo (vemos en la sintaxis que es argumento obligato-
rio). As:
( GETCORNER ( 50 50) )
situar la esquina primera del rectngulo elstico en coordenadas 50,50 y esperar que se
seale, o se indique por teclado, el punto opuesto por la diagonal. Devolver el punto sealado
por el usuario en forma de lista.
El punto base se expresa respecto al SCP actual. Si se indica un punto de base 3D no se tiene
en cuenta su coordenada Z, evidentemente: siempre se toma como tal el valor actual de la
elevacin.
El argumento mensaje funciona de la misma forma que con GETPOI NT, es decir, escribe el tex-
to en lnea de comandos al solicitar el punto. Veamos un pequeo ejemplo con esta funcin:
( DEFUN C: Caj a ( )
- - ( SETQ Esq1 ( 100 100) )
- - ( SETQ Esq2 ( GETCORNER Esq1 " I ndi que 2 punt o de l a di agonal del
- - r ect ngul o: " ) )
- - ( COMMAND " r ect ang" Esq1 Esq2)
)
Este ejemplo dibuja un rectngulo cuya diagonal se sita entre el punto 100,100 y el designa-
do por el usuario. Al final, AutoLISP devuelve ni l . Esto no significa que haya habido algn fa-
llo, sino que, como dijimos, AutoLISP siempre ha de devolver algo, cuando no hay nada que
devolver, el resultado ser ni l .
La separacin en dos de la tercera lnea es nicamente problema de espacio en estas pginas.
Al escribirlo en un archivo ASCII deberemos hacerlo todo seguido, en este caso. En otros ca-
sos, si el mensaje que presentaremos en pantalla excede el nmero de caracteres que caben
en la lnea de comandos, podemos recurrir al cdigo \ n, expuesto al principio de este MDU-
LO con el resto de los cdigos admitidos. \ n representa un salto de lnea con retorno de carro,
pero no un I NTRO. De esta forma, el programa anterior mostrara la siguiente lnea en panta-
lla:
I ndi que 2 punt o de l a di agonal del r ect ngul o:
Pero si lo escribimos de la siguiente forma, por ejemplo:
( DEFUN C: Caj a ( )
- - ( SETQ Esq1 ( 100 100) )
- - ( SETQ Esq2 ( GETCORNER Esq1 " I ndi que 2 punt o\ nde l a di agonal \ ndel
- - r ect ngul o: " ) )
( COMMAND " r ect ang" Esq1 Esq2)
)
mostrar:
I ndi que 2 punt o
de l a di agonal
del r ect ngul o:
NOTA IMPORTANTE DE SINTAXIS: Mientras no se indique lo contrario, si se separan las lneas
en la escritura de los programas de estas pginas, es exclusivamente por falta de espacio. En
la prctica, al escribir un programa en un editor ASCII, cada vez que damos un I NTRO para
saltar a la lnea siguiente, para el intrprete de AutoLISP es un espacio en blanco. Por eso si
escribimos lo siguiente:
( DEFUN C: Mi Pr og
- - ( SETQ X 5)
- - ( COMM
- - AND " l i nea" X ( 10 10) " " )
)
el resultado de la tercera lnea, que podemos ver en el historial de la lnea de comandos pul-
sando F2 para conmutar a pantalla de texto, ser el siguiente:
( COMM AND " l i nea" X ( 10 10) " " )
lo que producir un error nul l f unct i on de AutoLISP. Sin embargo, si el programa fuera:
( DEFUN C: Mi Pr og
- - ( SETQ X 5)
- - ( COMMAND
- - " l i nea" X ( 10 10) " " )
)
y siempre que tras COMMAND no exista ningn espacio, el resultado sera:
( COMMAND " l i nea" X ( 10 10) " " )

que es perfectamente correcto. Si lo que queremos es separar en lneas textos literales que
aparecern por pantalla (por que no caben en una sola lnea), utilizaremos el cdigo \ n expli-
cado. Por lo general, escribiremos todas las lnea seguidas en el archivo de texto, a no ser que
nos resulte incmoda su extremada longitud para la edicin.
ONCE.7.2. Captura de datos numricos
Siguiendo con las funciones de solicitud de datos, vamos a pasar ahora a explicar cmo pre-
guntar por datos numricos al usuario. Para este tipo de misin disponemos en AutoLISP de
dos funciones, GETI NT y GETREAL.
( GETI NT [mensaje])
La funcin GETI NT cuya sintaxis se indica solicita y acepta un nmero entero introducido
por el usuario. El valor de dicho nmero ha de estar comprendido entre 32768 y 32767. Si se
introduce un valor real o un dato no numrico, AutoLISP devuelve un mensaje de error indi-
cando que ha de ser un nmero entero y solicita un nuevo nmero. El mensaje de error pro-
porcionado es similar (aunque no igual) al que produce el comando MATRI Z (ARRAY en ingls)
de AutoCAD 14 al introducir un nmero con decimales (real) cuando pregunta por nmero de
filas o de columnas.
mensaje proporciona la posibilidad de escribir un mensaje a la hora de solicitar el valor; es
opcional. Como todos los textos literales y cadenas, el mensaje indicado ir encerrado entre
comillas dobles. Un ejemplo:
( GETI NT " I nt r oduzca el nmer o de vuel t as de l a r osca: " )
( GETREAL [mensaje])

GETREAL es totalmente similar a la funcin anterior, salvo que acepta nmero reales. Estos
nmeros pueden tener todos los decimales que se quiera introducir, separado de la parte ente-
ra por el punto decimal (. ). Si se introduce un nmero entero se toma como real, es decir, con
un decimal igual a 0 (28 = 28.0) y, si se introduce un carcter no numrico se produce un
error de AutoLISP, proporcionando la opcin de repetir la entrada. El argumento mensaje fun-
ciona igual que con GETI NT.
Veamos un ejemplo de un pequeo programa con GETI NT y GETREAL:
; Pr ogr ama que r eal i za el pr oduct o
; ent r e un nmer o ent er o y un nmer o r eal .
( DEFUN C: Pr oduct o ( ) ; Comi enzo de l a f unci n de usuar i o.
- - ( SETQ Ent ( GETI NT " I nt r oduzca un nmer o ent er o: " ) ) ; Nmer o ent er o.
- - ( SETQ Real ( GETREAL " I nt r oduzca un nmer o r eal : " ) ) ; Nmer o r eal .
- - ( * Ent Real ) ; Pr oduct o.
) ; Fi n de f unci n de usuar i o.
; Fi n del pr ogr ama
Como vemos, los comentarios (precedidos del carcter ; ) se pueden incluir en cualquier parte
del programa. Como se explic en el punto 10. de la seccin ONCE.2.3., tambin podemos
incluir comentarios en medio de las lneas utilizando los caracteres ; | para la apertura y | ;
para el cierre (son los caracteres de punto y coma y barra vertical). De la siguiente forma:
( SETQ X ; | se guar da en x | ; 5 ; | el val or 5| ; )
O incluso en varias lneas:
( SETQ X ; | se guar da
en x | ; 5 ; | el val or 5| ; )

NOTA: Al contrario de cmo ocurra en los archivos ASCII de personalizacin, en un archivo de
cdigo AutoLISP no se hace necesario un I NTRO al final de la ltima lnea para que funcione el
programa. Aunque no viene mal introducirlo por comodidad y para no perder la costumbre.
ONCE.7.3. Distancias y ngulos
Las tres funciones siguientes nos permitirn solicitar distancias y ngulos al usuario. La funcin
GETDI ST acepta el valor de una distancia introducida y su sintaxis es la siguiente:
( GETDI ST [punto_base] [mensaje])
El valor de la distancia puede ser introducida por teclado o directamente indicando dos puntos
en pantalla, como muchas distancias en AutoCAD. Si se introduce por teclado el formato ha
de ser el establecido por el comando UNI DADES (UNI TS). Pero independientemente de este
formato, GETDI ST devuelve siempre un nmero real.
mensaje funciona como en todas las funciones explicadas. Y punto_base permite incluir un
punto de base a partir del cual se visualizar una lnea elstica hasta introducir un segundo
punto para la distancia.
Veamos un ejemplo con GETDI ST:
( DEFUN C: Ci r cul o2 ( )
- - ( SETQ Cent r o ( GETPOI NT " I nt r oduzca el cent r o del c r cul o: " ) )
- - ( SETQ Radi o ( GETDI ST Cent r o " I nt r oduzca el r adi o del c r cul o: " ) )
- - ( COMMAND " _ci r cl e" Cent r o Radi o)
)
Este ejemplo pide el centro de un futuro crculo y, al pedir el radio ya est "enganchado" a
dicho centro; se introduce el segundo punto del radio y el crculo se dibuja. Al final AutoLISP
devuelve ni l .
NOTA: Prubese que podemos utilizar los modos de referencia a objetos (Punto Final, Punto
Medio, Centro...), los filtros (.XY, .YZ...) y dems con todos los pequeos programas que es-
tamos aprendiendo a hacer.
( GETANGLE [punto_base] [mensaje])
GETANGLE espera a que el usuario introduzca un ngulo y devuelve su valor. Dicho ngulo pue-
de ser introducido por teclado segn formato actual de UNI DADES (UNI TS) o mediante dos
puntos en pantalla con el cursor. El valor devuelto siempre ser un nmero real en radianes.
Hay que tener en cuenta que los ngulos se devuelven considerando como origen el indicado
en la variable de AutoCAD ANGBASE, pero medidos en el sentido antihorario (independiente-
mente de lo que especifique la variable ANGDI R). Se utiliza esta funcin sobre todo para medir
ngulos relativos.
NOTA: El orden de introduccin de los puntos (si se hace con el dispositivo sealador) influye
en el ngulo medido. Por ejemplo, si desde un punto A a otro B de miden 30 grados, desde el
punto B al A se medirn 210 grados.
Si se indica un punto base se muestra la tpica lnea elstica. Si se escribe un punto de base
3D, el ngulo se mide sobre el plano XY actual nicamente. Si no se indica punto de base se
solicitan los dos puntos y se calcula el ngulo de la lnea que une ambos en radianes.
mensaj e funciona como en las funciones anteriores. Veamos un pequeo ejemplo:
( DEFUN C: Gi r aSCP ( )
- - ( SETQ AngRad ( GETANGLE " I nt r oduzca un ngul o: " ) )
- - ( SETQ AngGr ad ( / ( * AngRad 180) PI ) )
( COMMAND " _ucs" " _x" AngGr ad)
)

El programa solicita el ngulo para imprimir un giro al SCP con respecto al eje X y lo guarda en
AngRad (como sabemos el resultado de GETANGLE es en radianes). Despus guarda en AngGr ad
la conversin del ngulo pedido a grados sexagesimales. Por ltimo, gira el SCP el ngulo en
cuestin alrededor del eje X.
( GETORI ENT [punto_base] [mensaje])
La funcin inherente a AutoLISP GETORI ENT funciona de forma parecida a la anterior. La dife-
rencia con GETANGLE estriba en que, GETORI ENT devuelve los ngulos con el origen 0 grados
siempre en la posicin positiva del eje X del SCP actual y el sentido positivo antihorario, inde-
pendientemente de los valores de las variables ANGBASE y ANGDI R de AutoCAD. Se utiliza esta
funcin sobre todo para medir ngulos absolutos.
Al igual que con GETANGLE, el valor devuelto es siempre en radianes y, si el punto de base es
3D, el ngulo de mide sobre el plano XY actual.
Para comprender bien la diferencia entre ambas funciones de captura de ngulos vamos a ver
un ejemplo simple. Si tuviramos el origen de ngulos definido en el eje Y negativo y el senti-
do positivo como horario, lo que entendemos por un ngulo de 45 grados (con respecto a la
horizontal), producira un valor de 45 grados con la funcin GETORI ENT y un valor de 135 gra-
dos con la funcin GETANGLE (ambos en radianes).
Si indicamos dos puntos en pantalla que unidos describan una lnea a 45 grados (con respecto
a la horizontal), el ngulo se mide desde el origen indicado en UNI DADES (UNI TS) con GETANGLE
y desde el lado positivo del eje X con GETORI ENT (las 3 de la esfera de un reloj) hasta dicha
lnea y siempre en sentido antihorario (con ambas funciones). De ah los dos tipos de resulta-
do.
Evidentemente, si indicamos un ngulo por teclado el resultado siempre ser el mismo.
El ejemplo de la funcin anterior puede aplicarse a sta. Habremos de tener mucho cuidado a
la hora de entrar los ngulos sealando puntos, debido a las caractersticas de ambas funcio-
nes, ya que pueden generar resultados errneos de giro del SCP.
ONCE.7.4. Solicitud de cadenas de texto
Con AutoLISP tambin tenemos la posibilidad de solicitar, y posteriormente procesar, cadenas
de texto. La funcin para realizar esto es GETSTRI NG. Podemos ver su sintaxis a continuacin:
( GETSTRI NG [T] [mensaje])
GETSTRI NG acepta una cadena de caracteres introducida por teclado y devuelve dicha cadena,
precisamente en forma de cadena (entre comillas). Ejemplo:
( GETSTRI NG)
Si introducimos las siguientes cadenas devuelve lo que se indica:
AutoCAD devuelve " Aut oCAD"
123456 devuelve " 123456"
INTRO devuelve " "

El argumento opcional T (o equivalente) de la funcin especifica la posibilidad de introducir
espacios blancos en la cadena. T es el smbolo predefinido del que hemos hablado ms de una
vez; es el carcter de cierto o verdadero. Si no se incluye, o se incluye otro u otros cualesquie-
ra, GETSTRI NG no aceptar espacios blancos y, en momento en que se introduzca uno se toma-
r como un I NTRO y se acabar la funcin. Si se incluye este argumento, GETSTRING aceptar
espacios blancos y slo ser posible terminar con I NTRO.
mensaje acta como siempre. Veamos unos ejemplos:

( GETSTRI NG " I nt r oduce un t ext o si n espaci os: " )
( GETSTRI NG T " I nt r oduce cual qui er t ext o: " )
( GETSTRI NG ( = 3 3) " I nt r oduce cual qui er t ext o: " )
( GETSTRI NG ( / = 3 3) " I nt r oduce un t ext o si n espaci os: " )
Si se introduce una contrabarra (\ ) en cualquier posicin, en dicha posicin se devuelven dos
contrabarras (\ \ ) que, como sabemos, es el cdigo para el carcter contrabarra. Esto ser til
a la hora del manejo de archivos, que ya estudiaremos.

NOTA: Como se ha visto en el tercero de los primeros ejemplos de esta funcin, si se introduce
un I NTRO (o un espacio tambin si no se admiten), AutoLISP devuelve una cadena vaca ("" ).
Si se admiten espacios y slo se teclean espacios, se devuelven dichos espacios como cadena.
NOTA: Si se introducen ms de 132 caracteres, AutoLISP slo devuelve los 132 primeros, des-
echando los restantes.
ONCE.7.5. Establecer modos para funciones
GET...
Antes de ver la ltima funcin de este tipo, y para comprender su funcionamiento, hemos de
introducir una nueva funcin AutoLISP muy utilizada y verstil. Esta funcin es I NI TGET y su
sintaxis es:
( I NI TGET [modo] [palabras_clave])
La funcin I NI TGET especifica el modo en que va a operar la siguiente funcin del tipo GET...,
esto es, la primera que se encuentre tras ella. Este modo se indica con el argumento modo, y
es un nmero entero cuyo valor especifica un bit de control que determina los valores no per-
mitidos para la siguiente funcin GET.... Los valores son los que siguen:
Valor de bit --------- Modo
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - -
1 ------------------ No admite valores nulos, es decir, I NTRO como respuesta.
2 ------------------ No admite el valor cero (0).
4 ------------------ No admite valores negativos.
8 ------------------ No verifica lmites, aunque estn activados.
16 ----------------- (No se utiliza).
32 ----------------- Dibuja la lnea o el rectngulo elsticos con lnea de trazos en
-------------------- lugar de continua.
64 ----------------- Hace que la funcin GETDI ST devuelva distancias 2D.
128 ---------------- Permite introducir datos arbitrarios por teclado. Tiene prioridad
-------------------- sobre el valor 1.
Para ver la manera de utilizar esto pongamos un ejemplo. Imaginemos que queremos solicitar
un nmero al usuario para realizar una cierta copia de objetos. Dicho nmero, evidentemente,
habr de ser entero (utilizaremos GETI NT), pero adems no puede ser negativo (no podemos
copiar un objeto 24 veces). Pues para controlar dicho filtro, escribiremos lo siguiente:

( I NI TGET 4) ; Est abl ece que el si gui ent e GETI NT no admi t a val or es negat i vos
( GETI NT " I nt r oduzca el nmer o de copi as: " ) ; Sol i ci t a el nmer o de copi as
De esta forma, si el usuario introduce un nmero negativo, AutoLISP devuelve un mensaje de
error diciendo que el nmero ha de ser positivo, y vuelve a solicitarlo.
Pero siguiendo con nuestro ejemplo, nos percatamos de que tampoco se podra introducir un
valor de cero, porque no se puede copiar un objeto 0 veces. Habremos de indicarle tambin a
GETI NT que tampoco admita el cero como respuesta. Para especificar varios valores a la vez
debemos sumarlos. As pues, como el modo de no admitir negativos es el 4 y el de no admitir
el cero es el 2, el valor final del bit sera un 6 (4 + 2 = 6). De esta forma haramos:
( I NI TGET 6)
( GETI NT " I nt r oduzca nmer o de copi as: " )
Y para "redondear" el ejemplo, que menos que evitar que introduzca un I NTRO a la pregunta,
es decir, obligar al usuario a introducir un valor:
( I NI TGET 7)
( GETI NT " I nt r oduzca nmer o de copi as: " )
Esto es resultado de sumar los tres valores de bits correspondientes (1 + 2 + 4 = 7).
El modo en I NI TGET tambin puede indicarse como suma de valores de bits. Por ejemplo, el
ltimo caso podra haberse escrito as:
( I NI TGET ( + 1 2 4) )
( GETI NT " I nt r oduzca nmer o de copi as: " )
Si se vuelve a utilizar ahora otra funcin del tipo GET... habra que especificar otro I NI TGET si
fuera necesario, ya que cada uno slo afecta a la funcin GET... que le sigue y solamente a
esa.
NOTA: I NI TGET siempre devuelve ni l .
Los modos establecidos con I NI TGET slo se tienen en cuenta para las funciones GET... con
las cuales tienen sentido. As, no tiene sentido establecer un modo que no admita valores ne-
gativos con una funcin GETPOI NT, puesto que sta devuelve un punto como una lista de tres
elementos y las listas no pueden ser negativas por definicin. En la siguiente tabla se mues-
tran los modos que tienen sentido con las diferentes funciones tipo GET....
Funcin Valores de bits de modo con sentido para la funcin
-------------------------------------------------------------------------------------
GETI NT 1 - - - 2 - - - 4 - - - - - - - - - - - - - - - - - - - - - 128
GETREAL 1 - - - 2 - - - 4 - - - - - - - - - - - - - - - - - - - - - 128
GETDI ST 1 - - - 2 - - - 4 - - - - - - - - - 32 - - - 64 - 128
GETANGLE 1 - - - 2 - - - - - - - - - - - - - - - 32 - - - - - - - - 128
GETORI ENT 1 - - - 2 - - - - - - - - - - - - - - 32 - - - - - - - - 128
GETPOI NT 1 - - - - - - - - - - - - - - - 8 - - - 32 - - - - - - - - 128
GETCORNER 1 - - - - - - - - - - - - - - - 8 - - - 32 - - - - - - - - 128
GETSTRI NG - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GETKWORD 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 128

El valor 128 es el ms especifico. Se utiliza para tener la posibilidad de responder a una solici-
tud de funcin GET... por ejemplo con una expresin AutoLISP. sta se aceptara como una
cadena de texto y se podra evaluar posteriormente mediante la funcin EVAL (tal como vere-
mos). Como el valor 128 tiene prioridad sobre el valor de bit 1, se aceptara tambin un I NTRO
en la forma de una cadena de texto vaca " " .
Veamos un pequeo programa de ejemplo de todo esto e intentemos comprenderlo. El listado
es el que sigue:
; Nuevo comando Ci r cEj es de Aut oCAD
( DEFUN Ci r cEj es ( / Cent r o Radi o)
- - ( I NI TGET 1)
- - ( SETQ Cent r o ( GETPOI NT " Cent r o del c r cul o: " ) )
- - ( I NI TGET ( + 1 2 4) )
- - ( SETQ Radi o ( GETDI ST Cent r o " Radi o del c r cul o: " ) )
- - ( COMMAND " _ci r cl e" Cent r o Radi o)
- - ( I NI TGET 1)
- - ( COMMAND " _l i ne" Cent r o " _qua" " \ \ " " " )
- - ( COMMAND " _l i ne" Cent r o " _qua" " \ \ " " " )
- - ( COMMAND " _l i ne" Cent r o " _qua" " \ \ " " " )
- - ( COMMAND " _l i ne" Cent r o " _qua" " \ \ " " " )
)
( DEFUN C: Ci r cEj es ( )
- - ( Ci r cEj es)
)
; Fi n de Ci r cEj es

En este ejemplo se observan algunas prcticas habituales a la hora de desarrollar programas
en AutoLISP. La primera dice relacin a la estructuracin de programas. Como se ve, primero
se define una funcin de usuario Ci r cEj es y luego el propio comando de AutoCAD
(C: Ci r cEj es) con el mismo nombre. Esto se suele realizar as, primero por estructurar los
programas: la definicin de la orden de usuario (C: Ci r cEj es) no contiene la secuencia de ruti-
nas del programa en s, sino una llamada a las funciones de usuario (en este caso slo una,
Ci r cEj es) necesarias para ejecutar la orden. Y, segundo, por claridad estructural a la hora de
observar el listado de un programa: podemos acceder directamente al comando de usuario
(C: Ci r cEj es) para ver como va llamando sucesivamente a diferentes funciones e ir compro-
bando cada una de ellas. Por lo tanto, bajo la definicin del comando en s, nicamente apare-
cern llamadas a funciones (entre parntesis porque son funciones de AutoLISP sin los carac-
teres C: ) y algunas otras funciones que ya veremos; por ejemplo para establecer valores de
variables antes y despus de las llamadas, etctera.
Por otro lado tambin podemos apreciar la declaracin de las dos variables que utilizar el
programa como locales en los argumentos de DEFUN. Como se explic, la manera de declarar
variables locales es con una barra y, despus de un espacio, sus nombres separados tambin
por espacios. Y la diferencia que haba con las globales, es que las locales desaparecen de
memoria en cuanto se acaba de ejecutar el programa, o sea, no ocuparn memoria intilmen-
te. Si al acabar el programa intentamos evaluar alguna en la lnea de comandos mediante el
carcter ! , el resultado ser ni l .
Otra de las caractersticas importantes de definir, por un lado la funcin de usuario y por el
otro el comando de AutoCAD, es la posibilidad de introducir variables globales en los argu-
mentos de las funciones creadas con DEFUN. Recordemos que si definimos con DEFUN una fun-
cin del tipo C: (comando de AutoCAD) no se pueden introducir variables globales en sus ar-
gumentos. Recordemos tambin que si no se introduce argumento alguno, todas las variables
declaradas con SETQ sern globales (seguirn en memoria al terminar el programa). Esto pue-
de ser til cuando otro programa AutoLISP necesita de esas variables para funcionar.
Por ltimo, hemos de recordar tambin que si introducimos variables globales y locales juntas
como argumentos de DEFUN, entre la ltima global y la barra, y entre la barra y la primera lo-
cal habr de haber un espacio blanco. Adems siempre estarn en el orden global-local.
El programa del ejemplo en s es un poco rudimentario, pero con los conocimientos que po-
seemos hasta ahora no podemos hacer ms. Simplemente dibuja (de un modo un poco chapu-
cero y manual) un crculo con sus cuatro ejes slo hasta el crculo, sin sobresalir. Pide el
centro y el radio, dibuja el crculo y, luego, va dibujando lneas (cuatro) desde el centro hasta
un punto que ha de indicar el usuario. El punto que debe indicarse ha de ser un cuadrante
(aunque no es obligatorio, pero si no se indica el programa no funcionar bien). El modo de
referencia Cuadrante se activa automticamente tras "engancharse" la lnea al centro del cr-
culo.
ONCE.7.5.1. Palabras clave
Hemos dejado un poco colgada la explicacin de I NI TGET, a falta de explicar el segundo de sus
argumentos palabras_clave. Vamos a ver para que sirve exactamente.
El argumento palabras_clave es una cadena de texto que define una serie de respuestas al-
ternativas para las funciones del tipo GET.... Vamos a ver un ejemplo para entender esto.
Imaginemos que queremos solicitar un punto para el final de una lnea, lo haremos con GET-
POI NT. Sabemos que dicho punto lo podemos introducir directamente en pantalla o por tecla-
do. Pero, en este caso, tambin nos interesa que se acepten otros caracteres, por ejemplo una
"H" para deshacer el tramo ltimo y una "C" para cerrar. Como bien sabemos, si introducimos
un carcter no numrico con GETPOI NT AutoLISP nos dar un mensaje de error. Pero si defini-
mos qu caracteres se pueden aceptar (los expuestos) GETPOI NT los capturar sin ningn pro-
blema. Esto lo realizamos desde I NI TGET. Vamos a ver el ejemplo:
( I NI TGET 1 " H C" )
( GETPOI NT " I nt r oduci r nuevo punt o: " )
En este caso GETPOI NT no acepta I NTRO como respuesta (valor de bit 1), pero si aceptar un
carcter H o un carcter C (da lo mismo maysculas que minsculas). Los caracteres han de
indicarse entre comillas es una cadena y separados entre s por un espacio blanco.
Si las respuestas posibles tienen una o varias letras como abreviatura mnima necesaria para
identificar dicha respuesta, se indican esas letras en maysculas en I NI TGET y el resto en mi-
nsculas. Por ejemplo:
( I NI TGET " desHacer Cer r ar " )
Este ejemplo aceptar como respuesta vlida H (o h), C (o c) y las palabras completas DES-
HACER y CERRAR (tanto maysculas como minsculas). Es exactamente lo mismo que podemos
apreciar en el comando MATRI Z (ARRAY en ingls) de AutoCAD, por ejemplo. Tras teclearlo y
designar los objetos correspondientes, el comando expone:
Mat r i z Rect angul ar o Pol ar ( <R>/ P) :
Podemos escribir R, P, Rect angul ar o Pol ar , cualquiera de las opciones. Si sta fuera una or-
den de usuario, la funcin I NI TGET podra haber sido:
( I NI TGET " Rect angul ar Pol ar " )
Hemos de tener cuidado con esto de las abreviaturas porque a veces, incluso con los propios
mensajes que emite AutoCAD, parece que hay mucha gente que tiene problemas. En el caso
siguiente:
( I NI TGET " DESact i var " )
no se admite ni D ni DE, sino DES (como abreviatura vlida) y la palabra completa DESACTI VAR;
tanto maysculas como minsculas todas las opciones.
La abreviatura es pues el mnimo nmero de caracteres en que debe coincidir la respuesta del
usuario con la alternativa indicada en I NI TGET. A partir de ah, se admiten ms caracteres por
parte del usuario hasta la longitud de la respuesta alternativa completa. Por ejemplo:
( I NI TGET 1 " Cont " )
admitira C, CO, CON o CONT (maysculas o minsculas), pero no CONTI NUA o CONTI NUAR.
NOTA: Es norma lgica indicar, como mnimo, el bit 1 en estos tipos de I NI TGET con palabras
clave para que no se admita el I NTRO como respuesta, ya que es necesaria una de las opcio-
nes.
Tambin el posible indicar la abreviatura junto a la respuesta completa en maysculas y sepa-
rada por una coma (aunque recomendamos el mtodo anterior). Por ejemplo:
( I NI TGET 1 " DESACTI VAR, DES" )
equivale a
( I NI TGET 1 " DESact i var " )
NOTA: Todas las funciones GET... admiten palabras clave.
Un ejemplo sencillo aunque no funcional:
( DEFUN C: Pr ueba ( )
- - ( I NI TGET 1 " desHacer Cer r ar " )
( GETPOI NT " desHacer / Cer r ar / <Pr i mer punt o>: " )
)
Este ejemplo no realiza nada, y es que an no hemos aprendido a procesas estos datos de
palabras clave. Pero es una buena muestra de lo que sera un mensaje tpico de AutoCAD en
la lnea de comandos. El programa muestra:

desHacer / Cer r ar / <Pr i mer punt o>:
La opcin por defecto (entre corchete angulares) es sealar un punto en pantalla (o por tecla-
do), aunque podemos acceder a otras dos opciones alternativas mediante los caracteres H y C
(o sus palabras completas) respectivamente. Al acceder a estas opciones el programa no hace
nada y es que, como decimos, hace falta procesar esta entrada de usuario (ya se ver).
Al indicar cualquiera de las opciones anteriores, AutoLISP devuelve la palabra clave, entre co-
millas, correspondiente indicada en I NI TGET.
Pues vista esta caracterstica de las palabras clave, ya podemos estudiar la ltima de las fun-
ciones GET..., la cual emplazamos para despus de I NI TGET y es GETKWORD. La sintaxis de
GETKWORD es:
( GETKWORD [mensaje])
Esta funcin solicita nicamente una de una serie de palabras clave indicadas en I NI TGET de la
forma explicada. Slo sirve para palabras clave, y nada ms. Solicitar dichas palabras y, si no
se introduce alguna de ellas, da un mensaje de error y vuele a indicar la solicitud. Por ejemplo:
( I NI TGET 1 " S No" )
( GETKWORD " Cer r ar el mur o ( S / No) : " )
Tras esta pregunta podramos teclear, como sabemos, o S o N o S o NO (incluso el "s" sin tilde
y tanto maysculas como minsculas). Pero slo podramos realizar dichas entradas, ninguna
ms.
La funcin GETKWORD devuelve, como cadena de texto, la opcin especificada tal y como se
indic en I NI TGET. Si no se especific ninguna devuelve ni l .
6 fase intermedia de ejercicios
Realizar un programa que dibuje aros (arandelas sin relleno) solicitando el centro, el dime-
tro interior y el dimetro exterior.
Realizar el mismo ejercicio anterior pero solicitando el centro, el radio intermedio del aro (mi-
tad entre interior y exterior) y el grosor del mismo.
Practicar la caracterstica de palabras clave con algn ejercicio inventado, aunque no se pro-
cesen las entradas de estas palabras.

[3/13]
ONCE.8. ACCESO A VARIABLES DE AutoCAD 14
Vamos a explicar ahora, en esta seccin, el control que podemos tener desde AutoLISP con
respecto a las variables de sistema de AutoCAD 14.
Para lo que se refiere a este control tenemos a nuestra disposicin dos funciones muy impor-
tantes y utilizadas en la programacin en AutoLISP. Esta funciones son GETVAR y SETVAR. Si
revisamos el MDULO NUEVE de este curso, acerca de la programacin en lenguaje DIESEL,
recordaremos la misin que realizaba la funcin GETVAR de este lenguaje. Pues exactamente la
misma (y con el mismo nombre) realiza bajo AutoLISP. Lo nico que vara es la sintaxis de la
funcin, debido a las exigencias propias de AutoLISP, pero tampoco demasiado, es la siguien-
te:
( GETVAR nombre_variable)
Con GETVAR extraemos o capturamos el valor actual de la variable de sistema o acotacin de
AutoCAD 14 indicada en nombre_variable, o sea, de cualquier variable del programa.
Como sabemos, AutoCAD funciona internamente con multitud de variables (APNDI CE B)
que controlan prcticamente todos los aspectos del programa. El que posea el conocimiento y
habilidad de manejo de las variables de AutoCAD, se puede decir que posee el control casi al
100% sobre l. Pues desde AutoLISP accederemos al contenido de dichas variables para luego
procesarlo, o simplemente como informacin.
El nombre de la variable habr de ir entre comillas, por ser cadena. Vemos un ejemplo:
( GETVAR " pi ckf i r st " )
Esta expresin devolver el valor de la variable de sistema de AutoCAD 14 PI CKFI RST, que
controla la llamada designacin Nombre-Verbo.
Otros ejemplos:
( GETVAR " bl i pmode" )
( GETVAR " aper t ur e" )
( GETVAR " bl i pmode" )
( GETVAR " di mt ad" )
( GETVAR " modemacr o" )
NOTA: Si la variable indicada no existe, AutoLISP devuelve ni l .
Por su lado, SETVAR realiza la accin contraria, es decir, introduce o asigna un valor a una va-
riable de AutoCAD. Su sintaxis es:
( SETVAR nombre_variable valor)
SETVAR asignar valor a nombre_variable, segn esta sintaxis, y devolver valor como res-
puesta. El nombre de la variable en cuestin deber ir entre comillas, al igual que con GETVAR,
y el valor que se le asigne deber ser coherente con la informacin que puede guardar la va-
riable. Si no es as, AutoLISP devuelve el error Aut oCAD r ej ect ed f unct i on.
NOTA: En el APNDI CE B, adems de la lista de las variables de sistema y acotacin de Au-
toCAD 14, se muestra tambin el significado de cada una de ellas y el tipo de valor que pue-
den guardar, as como el rango de ste o las opciones disponibles.
Veamos algn ejemplo:
( SETVAR " f i l l et r ad" 2)
( SETVAR " pr oxygr aphi cs" 0)
( SETVAR " at t di a" 1)
Si no existe la variable se devuelve el mismo error que si se le introduce un valor errneo.
El funcionamiento de SETVAR cuando un comando se encuentra en curso es completamente
transparente, es decir, sera como utilizar el comando MODI VAR (SETVAR en ingls, igual que la
funcin) de AutoCAD de manera transparente, con el apstrofo delante. En estos casos puede
suceder que la modificacin de la variable slo surta efecto en la siguiente orden o en la si-
guiente regeneracin.
Un ejemplo de total trasparencia podra ser:
( COMMAND " _er ase" ) ( SETVAR " pi ckbox" 2)
COMMAND llama al comando BORRA (ERASE) de AutoCAD, el cual se queda esperando en Desi g-
nar obj et os:. Despus SETVAR cambia el valor de la mira de designacin a un valor de 2. Este
cambio se efecta de manera trasparente, y la orden BORRA sigue pidiendo designar objetos,
pero ahora visualiza la mirilla con el nuevo tamao de mira de designacin.
Evidentemente no se puede cambiar el valor de una variable que sea de slo lectura. Si se
intenta, se producir el mismo error antes comentado en dos ocasiones.
NOTA: Para algunas variables como ANGBASE y SNAPANG, el valor de las mismas se interpreta
en radianes al acceder mediante AutoLISP, mientras que si se accede con MODI VAR, desde la
lnea de comandos (o tecleando el nombre de la variable), su valor se considera en grados.
Cuidado con esto. La misma consideracin para GETVAR.
Un ejemplo prctico y muy usado es la posibilidad de desactivar el eco de la lnea de comandos
en la ejecucin de programas AutoLISP. Este eco (variable CMDECHO) evitar que las funciones
de AutoLISP vayan devolviendo nmeros, cadenas y dems a lo largo de la ejecucin. Y anta-
o, cuando las marcas auxiliares (variable BLI PMODE) venan activadas por defecto en Auto-
CAD, se utilizaba mucho la posibilidad de desactivarlas para producir unas rutinas "limpias".
Veamos en uno de los ejemplos vistos hace poco:
( DEFUN Ci r cEj es ( / Cent r o Radi o)
- - ( I NI TGET 1)
- - ( SETQ Cent r o ( GETPOI NT " Cent r o del c r cul o: " ) )
- - ( I NI TGET ( + 1 2 4) )
- - ( SETQ Radi o ( GETDI ST Cent r o " Radi o del c r cul o: " ) )
- - ( COMMAND " _ci r cl e" Cent r o Radi o)
- - ( I NI TGET 1)
- - ( COMMAND " _l i ne" Cent r o " _qua" " \ \ " " " )
- - ( COMMAND " _l i ne" Cent r o " _qua" " \ \ " " " )
- - ( COMMAND " _l i ne" Cent r o " _qua" " \ \ " " " )
- - ( COMMAND " _l i ne" Cent r o " _qua" " \ \ " " " )
)
( DEFUN C: Ci r cEj es ( )
- - ( SETVAR " cmdecho" 0)
- - ( SETVAR " bl i pmode" 0)
- - ( Ci r cEj es)
- - ( SETVAR " cmdecho" 1)
- - ( SETVAR " bl i pmode" 1)
)
Podemos observar otra aplicacin a la hora de estructurar la programacin. El comando de
AutoCAD (C: Ci r cEj es) slo contiene la llamada a la funcin que realiza toda la tarea y las
definiciones de los valores de las variables pertinentes antes de la propia llamada; restaurando
sus valores al final del programa (tras la ejecucin de la funcin).
ONCE.9. ESTRUCTURAS BSICAS DE PROGRA-
MACIN
En el mundo de los lenguajes de programacin existen un par de estructuras que, con todas
sus variantes, son consideradas las estructuras bsicas o elementales a la hora de programar.
Esta estructuras son las condicionales (o alternativas) y las repetitivas. Dentro de cada una de
ellas pueden existir variantes, como decimos, que realicen el trabajo de distinta forma. Por
ejemplo, y si sabemos programar algo en BASIC (QuickBASIC) pensaremos en IF... THEN...
ELSE, WHILE... WEND o SELECT CASE como estructuras alternativas o condicionales y en
FOR... NEXT o GOSUB... RETURN como estructuras repetitivas. Hay ms, en este y en todos
los lenguajes, cada una operando a su manera, pero todas dentro del mismo grupo.
Pues en AutoLISP tambin disponemos de una serie de funciones que nos van a permitir jugar
con la posibilidad de ejecutar determinados tramos de nuestro programa si se da una condi-
cin, o repetir una serie de funciones un determinado nmero de veces, etctera.
Vamos a empezar pues con la primera.
( I F condicin accin_se_cumple [accin_no_se_cumple])
La funcin I F establece una condicin en forma de expresin evaluada. Si dicha condicin se
cumple, es decir si el resultado es distinto de ni l , entonces pasa a evaluar la expresin conte-
nida en accin_se_cumple. En este caso devuelve el resultado de esta expresin.
Si la condicin no se cumple, es ni l , entonces pasa a evaluar el contenido de la expresin en
accin_no_se_cumple, si es que existe (es opcional). El contenido en este caso de la accin si
es que se cumple sera obviado, al igual que el contenido de la accin si no se cumple cuando
se cumple.
Si no se indica accin_no_se_cumple y la condicin no se cumple (no evala ac-
cin_se_cumple), AutoLISP devuelve ni l .
Veamos un ejemplo para aclararnos un poco:
( DEFUN C: Per sonal ( )
- - ( SETQ Nombr e ( GETSTRI NG T " I nt r oduce t u nombr e: " ) )
- - ( I F ( = Nombr e " J onat han" )
- - - - ( SETVAR " bl i pmode" 0)
- - - - ( SETVAR " bl i pmode" 1)
- - )
)
Este pequeo programa ha podido ser diseado para que pregunte por un nombre, que guar-
dar en la variable (global) Nombr e. Despus se pregunta: si Nombr e es igual a J onat han, en-
tonces se establece la variable BLI PMODE a 0, si no, se establece BLI PMODE a 1. Dependiendo
del nombre que tecleemos se realizar una accin u otra.
Otro ejemplo:
( DEFUN C: Compar a ( )
- - ( SETQ Punt o1 ( GETPOI NT " Pr i mer punt o: " ) )
- - ( SETQ Punt o2 ( GETPOI NT " Segundo punt o: " ) )
- - ( I F ( EQUAL Punt o1 Punt o2)
- - - - ( PROMPT " Son i gual es. " )
- - - - ( PROMPT " No son i gual es. " )
- - )
)
Este ejemplo acepta dos puntos introducidos por el usuario. Si dichos punto son iguales (com-
parados con EQUAL) el resultado de la comparacin es cierto (T) por lo que se escribe el men-
saje Son i gual es. (accin_se_cumple); si no lo son, el resultado es ni l y pasa directamente
a escribir No son i gual es. (accin_no_se cumple).
NOTA: Hemos conjeturado el funcionamiento de PROMPT. An as, lo veremos inmediatamente.
Como ya se ha dicho, la accin que se realiza si no se cumple la condicin no es obligatorio
ponerla. As, podemos realizar un pequeo ejercicio en el que no haga nada ni no se cumple la
condicin:
( DEFUN C: Pr ueba ( )
- - ( SETQ X ( GETDI ST " Di st anci a pr i mer a: " ) )
- - ( SETQ Y ( GETDI ST " Di st anci a segunda: " ) )
- - ( I F ( >= X Y)
- - - - ( SETQ X ( 1+ X) )
- - )
)
Este ejemplo pregunta por dos distancias, si la primera es mayor o igual que la segunda, in-
crementa en una unidad esa distancia primera, si no, no se realiza absolutamente nada.
La funcin I F debe llevar dos argumentos como mnimo, la condicin o comparacin y la ac-
cin si dicha condicin se cumple. La accin si no se cumple es opcional, como sabemos. Por
ello, si lo que queremos es indicar una opcin si no se cumple y evitar que realice algo si se
cumple, habremos de indicar una lista vaca en este primero argumento:
( I F ( EQUAL Pt o1 Pt o2) ( ) ( PROMPT " No son i gual es. " ) )
Si no se hace esto, tomara la segunda accin como primera y no producira el resultado espe-
rado.
Existe una pequea restriccin en torno a la funcin I F, y es que nicamente permite un ele-
mento o expresin en cada uno de sus argumentos. Por ejemplo, si hubiramos querido indicar
en el ejemplo C: Pr ueba un incremento de uno para X y, adems un incremento de 7. 5 para Y,
todo ello si la condicin se cumple, no habramos podido hacerlo todo seguido. Para subsanar
este pequeo inconveniente existe una funcin que enseguida veremos.
Antes vamos a explicar esa funcin PROMPT que hemos dejado un poco en el aire.
( PROMPT cadena)
PROMPT escribe la cadena de texto especificada en la lnea de comandos de AutoCAD y de-
vuelve ni l . Ejemplos:
( PROMPT " Hol a" ) devuelve Hol ani l
( PROMPT " Hol a, soy yo" ) devuelve Hol a, soy yoni l
( PROMPT " 1 + 2" ) devuelve 1 + 2ni l
( PROMPT " " ) devuelve ni l
( PROMPT " " ) devuelve ni l
Se observa que el mensaje se devuelve sin comillas.
NOTA: En configuraciones de dos pantallas, PROMPT visualiza el mensaje en ambas. Es por ello
preferible a otras funciones de escritura que ya veremos ms adelante.
Volvamos ahora sobre el siguiente ejemplo, ya expuesto anteriormente:
( DEFUN C: Compar a ( )
- - ( SETQ Punt o1 ( GETPOI NT " Pr i mer punt o: " ) )
- - ( SETQ Punt o2 ( GETPOI NT " Segundo punt o: " ) )
- - - - ( I F ( EQUAL Punt o1 Punt o2)
- - - - ( PROMPT " Son i gual es. " )
- - - - ( PROMPT " No son i gual es. " )
- - )
)
Podemos apreciar, al correr este programa, un par de cosas. La primera es que no existe salto
de lnea en ningn momento de la ejecucin. Una salida final de este ejercicio podra aparecer
as (tras indicar los dos puntos en pantalla):

Pr i mer punt o: Segundo punt o: No son i gual es. ni l
Esto hace realmente poco vistoso el desarrollo de una aplicacin.
El segundo problema es la devolucin de ni l al final de una funcin PROMPT. Al igual que en el
caso anterior, desmejora la vistosidad del programa. Para solucionar estos dos problemas va-
mos a exponer dos funciones, TERPRI y PRI N1. La primera (TERPRI ) la explicamos a continua-
cin y, la segunda (PRI N1), indicamos donde escribirla y no vamos a decir nada ms de ella,
porque la comentaremos a fondo cuando estudiemos las operaciones con archivos, que es para
lo realmente sirve.
( TERPRI )
Como apreciamos, TERPRI es una funcin sin argumentos. La misin que tiene es la de mover
el cursor al comienzo de una nueva lnea. Se utiliza para saltar de lnea cada vez que se escri-
be algn mensaje en el rea de comandos de AutoCAD, a no ser que la funcin que escriba el
mensaje salte de lnea por s sola, que las hay, ya veremos.
As por ejemplo, podemos variar el ejemplo anterior as:
( DEFUN C: Compar a ( )
- - ( SETQ Punt o1 ( GETPOI NT " Pr i mer punt o: " ) ) ( TERPRI )
- - ( SETQ Punt o2 ( GETPOI NT " Segundo punt o: " ) ) ( TERPRI )
- - ( I F ( EQUAL Punt o1 Punt o2)
- - - - ( PROMPT " Son i gual es. " )
- - - - ( PROMPT " No son i gual es. " )
- - )
)
El resultado ser bastante ms claro, al saltar a la lnea siguiente despus de cada peticin.
NOTA: Podramos haber escrito cada funcin TERPRI en un rengln aparte del programa, pero
se suelen indicar as por estructuracin: para especificar despus de qu mensaje salta a una
nueva lnea.
Existe otro mtodo, como deberamos saber ya (ver el principio de este MDULO) para saltar
de lnea. Es la inclusin de los caracteres \ n. Pero esto se utiliza para separar cadenas en dife-
rentes lneas. As, el ejemplo que venimos proponiendo podemos escribirlo:
( DEFUN C: Compar a ( )
- - ( SETQ Punt o1 ( GETPOI NT " Pr i mer punt o: \ n" ) )
- - ( SETQ Punt o2 ( GETPOI NT " Segundo punt o: \ n" ) )
- - ( I F ( EQUAL Punt o1 Punt o2)
- - - - ( PROMPT " Son i gual es. " )
- - - - ( PROMPT " No son i gual es. " )
- - )
)
Pero el resultado es distinto: hace la peticin del punto y salta a una nueva lnea antes de que
lo introduzcamos.
Por otra parte, la funcin PRI N1 la escribiremos como norma general al final de cada programa
para producir un final "limpio" del mismo:
( DEFUN C: Compar a ( )
- - ( SETQ Punt o1 ( GETPOI NT " Pr i mer punt o: " ) ) ( TERPRI )
- - ( SETQ Punt o2 ( GETPOI NT " Segundo punt o: " ) ) ( TERPRI )
- - ( I F ( EQUAL Punt o1 Punt o2)
- - - - ( PROMPT " Son i gual es. " )
- - - - ( PROMPT " No son i gual es. " )
- - )
- - ( PRI N1)
)
De esta forma evitamos el mensaje ni l al final de la ejecucin.
NOTA: Como ya hemos comentado, hablaremos profundamente de PRI N1 cuando llegue el
momento, ya que tiene diversas funciones y sta es una caracterstica especial derivada de
ellas. Por ahora, tomemos como norma lo dicho y cremonoslo sin ms.
Siguiendo ahora con las estructuras alternativas que habamos apartado un poco para ver es-
tas funciones de escritura y salto de lnea, pasemos al estudio de PROGN.
( PROGN expresin1 [expresin2...])
Esta funcin admite como argumentos todas las expresiones indicadas y las evala secuen-
cialmente, devolviendo el valor de la ltima evaluada.
La siguiente expresin:
( PROGN ( + 2 3) ( - 1 2) ( / = 23 23) ( SETQ s 5. 5) )
equivale a indicar todas las expresiones que incluye en sus argumentos de forma separada y
continuada dentro de un programa o en la lnea de comandos. Es decir, los siguientes dos
ejemplos son idnticos, en cuanto a resultado:
( DEFUN C: Ej em1 ( )
- - ( SETQ X 5 Y 23. 3)
- - ( + X Y)
- - ( - X Y)
- - ( / X Y)
- - ( * X Y)
)
y
( DEFUN C: Ej em2 ( )
- - ( PROGN
- - - - ( SETQ X 5 Y 23. 3)
- - - - ( + X Y)
- - - - ( - X Y)
- - - - ( / X Y)
- - - - ( * X Y)
- - )
)
Entonces, para qu puede servir PROGN? PROGN se utiliza en funciones cuyo formato slo ad-
mite una expresin en determinados argumentos y nosotros deseamos indicar ms. Un ejem-
plo muy claro es el de la funcin I F. Como hemos explicado, existe esa pequea restriccin de
I F que nicamente permite especificar una expresin en cada uno de sus argumentos. Con
PROGN tendremos la posibilidad de especificar ms de una accin, tanto si se cumple la condi-
cin como si no. Veamos un pequeo ejemplo primero y despus otro ms elaborado que ser-
vir de pequeo repaso de muchos aspectos vistos hasta ahora.
( DEFUN C: Condi c ( )
- - ( SETQ Val or ( GETREAL " I nt r oduce un val or : " ) )
- - ( I F ( > Val or 100)
- - - - ( PROGN
- - - - - - ( PROMPT " Es un val or mayor de 100. " ) ( TERPRI )
- - - - )
- - - - ( PROGN
- - - - - - ( PROMPT " Es un val or menor de 100, " ) ( TERPRI )
- - - - - - ( PROMPT " qu t e par ece?" )
- - - - )
- - )
( PRI N1)
)
De esta manera, cada argumento de la funcin I F ejecuta no slo una expresin, sino varias.
En realidad nicamente ejecuta una, PROGN, que es lo que admite I F, pero ella es una que
permite evaluar ms una dentro de s misma.
Veamos ahora el ejemplo siguiente. Tiene relacin con un ejercicio propuesto anterior, pero
con mucho ms jugo.
( DEFUN Ar o ( / Cent r o Radi o Gr osor Ri nt Rext Di nt Dext Op)
- - ( SETQ Cent r o ( GETPOI NT " Cent r o del ar o: " ) ) ( TERPRI )
- - ( SETQ Radi o ( GETDI ST " Radi o i nt er medi o: " ) ) ( TERPRI )
- - ( SETQ Gr osor ( GETDI ST " Gr osor del ar o: " ) ) ( TERPRI )
- - ( I NI TGET " Hueco Rel l eno" )
- - ( SETQ Op ( GETKWORD " Ar o Hueco o Rel l eno ( <H>/ R) : " ) ) ( TERPRI )
- - ( I F ( OR ( = Op " Hueco" ) ( = Op \ n) )
- - - - ( PROGN
- - - - - - ( SETQ Ri nt ( - Radi o ( / Gr osor 2) ) )
- - - - - - ( SETQ Rext ( + Radi o ( / Gr osor 2) ) )
- - - - - - ( COMMAND " _ci r cl e" Cent r o Rext )
- - - - - - ( COMMAND " _ci r cl e" Cent r o Ri nt )
- - - - )
- - - - ( PROGN
- - - - - - ( SETQ Di nt ( * ( - Radi o ( / Gr osor 2) ) 2) )
- - - - - - ( SETQ Dext ( * ( + Radi o ( / Gr osor 2) ) 2) )
- - - - - - ( COMMAND " _donut " Di nt Dext Cent r o " " )
- - - - )
- - )
)
( DEFUN C: Ar o ( )
- - ( SETVAR " cmdecho" 0)
- - ( Ar o)
- - ( SETVAR " cmdecho" 1)
- - ( PRI N1)
)
( PROMPT " Nuevo comando Ar o def i ni do. " ) ( PRI N1)
Expliquemos el ejemplo. El programa dibuja aros, huecos o rellenos, solicitando el centro del
mismo, su radio intermedio y su grosor.
Se crea un nueva funcin de usuario a la que se atribuyen una serie de variables locales las
que luego sern utilizadas. Se pregunta por los tres datos determinantes para el dibujo de
aro (centro, radio intermedio y grosor), los cuales se guardan en tres variables (Cent r o, Radi o
y Gr osor ). A continuacin se inicializa (I NI TGET) el siguiente GETKWORD para que admita dos
palabras claves (Hueco y Rel l eno) con sus respectivas abreviaturas. Ntese que no se indica
ningn cdigo para que no admita un I NTRO por respuesta, ya que luego nos ser til.
Pregunta el programa si el aro que va a dibujar ser hueco o relleno. Por defecto se nos ofrece
la opcin correspondiente a hueco (entre corchetes angulares <> para indicarlo como los co-
mandos tpicos de AutoCAD). Aqu para tomar la opcin por defecto podremos pulsar directa-
mente I NTRO (lo normal en AutoCAD), por ello nos interesaba antes poder aceptar un I NTRO.
Adems podremos elegir teclear la opcin segunda o la primera.
Seguidamente hemos de controlar la entrada del usuario que se ha guardado en la variable Op.
Para ello utilizamos una funcin I F que nos dice que, si Op es igual a Hueco (o a h, hu, hue,
huec, tanto maysculas como minsculas; recordemos que la salida de GETKWORD es la indica-
da completa en el I NI TGET) o (OR) igual a un I NTRO (\ n, opcin por defecto), se realizar todo
lo contenido en el primer PROGN. Si no, se pasar a evaluar lo contenido en el segundo PROGN
(argumento accin_no_se_cumple de I F). De esta forma el usuario slo tiene dos alternati-
vas, aro hueco o aro relleno. Si escribe otra cosa no ser aceptada por GETKWORD. As, al indi-
car luego en el I F que si la opcin no es la de aro hueco pase por alto el primer argumento,
sabremos de buena tinta que lo que no es Hueco ha de ser forzosamente Rel l eno.
En la secuencia de funciones para un aro hueco, se calculan el radio interior y exterior del
mismo y se dibujan dos crculos concntricos que representan el aro. Por su lado, en la se-
cuencia para un aro relleno, se calculan los dimetros interior y exterior y se dibuja una aran-
dela. La razn para calcular dimetros aqu es que el comando ARANDELA (DONUT en ingls) de
AutoCAD solicita dimetros y no radios.
Tras cerrar todos los parntesis necesarios el del ltimo PROGN, el del I F y el de DEFUN se
pasa a crear el comando propio para AutoCAD (C: Ar o). De desactiva el eco de mensajes en la
lnea de comandos, se llama a la funcin ( Ar o) , se vuelve a activar el eco y se introduce una
expresin PRI N1 para un final "limpio" del programa (sin ni l ni ningn otro eco o devolucin
de AutoLISP).
Por ltimo, y fuera de cualquier DEFUN, se introduce una funcin PROMPT que escribe un men-
saje en la lnea de comandos. Todas las funciones de AutoLISP que no estn contenidas dentro
de los DEFUN en un programa se ejecutan nada ms cargar ste. Por ello, al cargar este pro-
grama aparecer nicamente el mensaje Nuevo comando Ar o def i ni do. Y al ejecutar el co-
mando, escribiendo Ar o en lnea de comandos, este PROMPT no se evaluar al no estar dentro
de ningn DEFUN.
El PRI N1 detrs de este ltimo PROMPT hace que no devuelva ni l . Tampoco se ejecutar al
correr el programa, ya que est fuera de los DEFUN, sino slo al cargarlo. Es por ello, que para
el programa en s se utilice otro PRI N1, el expuesto antes e incluido en el segundo DEFUN.
( COND ( condicin1 resultado1) [( condicin2 resultado2) ...])
La funcin COND de AutoLISP que vamos a ver ahora establece varias condiciones consecutivas
asignando diferentes resultados a cada una de ellas. Es decir, es una generalizacin de la fun-
cin I F que, sin embargo, resulta ms cmoda a la hora de establecer diversas comparacio-
nes. Veamos un ejemplo sencillo:
( DEFUN Compar a ( )
- - ( SETQ X ( GETREAL " I nt r oduce el val or de X ent r e 1 y 2: " ) )
- - ( COND ( ( = X 1) ( PROMPT " Es un 1. " ) ( TERPRI ) )
- - - - - - - - ( ( = X 2) ( PROMPT " Es un 2. " ) ( TERPRI ) )
- - - - - - - - ( ( < X 1) ( PROMPT " Es menor que 1, no val e. " ) ( TERPRI ) )
- - - - - - - - ( ( > X 2) ( PROMPT " Es mayor que 2, no val e. " ) ( TERPRI ) )
- - - - - - - - ( T ( PROMPT " Es deci mal ent r e 1 y 2. " ) ( TERPRI ) )
- - )
)
Se establecen una serie de comparaciones que equivaldra a una batera de funciones I F se-
guidas. En la ltima condicin no es una lista, sino el valor de cierto T. Esto garantiza que, si
no se han evaluado las expresiones anteriores se evalen las de esta ltima lista. Y es que
COND no evala todas las condiciones, sino que va inspeccionndolas hasta que encuentra una
que sea diferente de ni l . En ese momento, evala las expresiones correspondientes a esa
condicin y sale del COND, sin evaluar las siguientes condiciones aunque sean T.
Si se cumple una condicin y no existe un resultado (no est especificado), COND devuelve el
valor de esa condicin.
Una aplicacin muy tpica de COND es el proceso de las entradas por parte del usuario en un
GETKWORD. Por ejemplo:
( DEFUN Pr oceso ( )
- - ( I NI TGET 1 " Const ant e Gr adual Pr opor ci onal Ni nguno" )
- - ( SETQ Op ( GETKWORD " Const ant e/ Gr adual / Pr opor ci onal / Ni nguno: " )
- - ( COND ( ( = Op " Const ant e" ) ( Const ant e) )
- - - - - - - - ( ( = Op " Gr adual " ) ( Gr adual ) )
- - - - - - - - ( ( = Op " Pr opor ci onal " ) ( Pr opor ci onal ) )
- - - - - - - - ( ( = Op " Ni nguno" ) ( Ni nguno) )
- - )
)
. . .
En este ejemplo se toman como condiciones las comparaciones de una respuesta de usuario
frente a GETKWORD, haciendo llamadas a funciones diferentes dentro del mismo programa se-
gn el resultado.
NOTA: Como podemos observar, los parntesis indicados en la sintaxis tras COND son obligato-
rios (luego cerrarlos antes de la segunda condicin). Estas listas engloban cada condicin y
resultado por separado.
NOTA: Como observamos en el primer ejemplo, con COND podemos especificar ms de una
expresin para el resultado de una comparacin, y sin necesidad de PROGN. La primera lista se
toma como condicin y todas las dems, hasta que se cierre el parntesis que engloba a una
condicin con sus respectivos resultados, se toman como resultados propios de dicha condi-
cin.
Y continuando con las estructuras bsicas de la programacin, vamos a ver ahora una muy
recurrida y usada; se trata de REPEAT. REPEAT representa la estructura repetitiva en AutoLISP
y sus sintaxis es la siguiente:
( REPEAT veces expresin1 [expresin2...])
Esta funcin repite un determinado nmero de veces (especificado en veces) la expresin o
expresiones que se encuentren a continuacin, hasta el parntesis de cierre de REPEAT. El n-
mero de repeticiones ha de ser positivo y entero. REPEAT evaluar dicho nmero de veces las
expresiones contenidas y devolver el resultado de la ltima evaluacin. Veamos un ejemplo:
(DEFUN Pol i gonal ( )
- - ( SETQ Ver t ( GETI NT " Nmer o de vr t i ces de l a pol i gonal : " ) )
- - ( SETQ Li n ( - Ver t 1) )
- - ( SETQ Pt o1 ( GETPOI NT " Punt o pr i mer o: " ) )
- - ( REPEAT Li n
- - - - ( SETQ Pt o2 ( GETPOI NT " Si gui ent e punt o: " ) )
- - - - ( COMMAND " _l i ne" Pt o1 Pt o2 " " )
- - - - ( SETQ Pt o1 Pt o2)
- - )
)
El ejemplo pide el nmero de vrtices de una poligonal que se dibujar con lneas. Evidente-
mente el nmero de lneas que se dibujarn ser el nmero de vrtices menos uno, por lo que
se establece en la variable Li n dicho valor. Tras pedir el primer punto se comienza a dibujar
las lneas en la estructura repetitiva (tantas veces como lneas hay). Lo que hace la lnea
( SETQ Pt o1 Pt o2) es actualizar la variable Pt o1 con el valor de Pt o2 cada vez que se dibuja
una lnea. De esta forma se consigue tomar como punto de la primera lnea el punto final de la
anterior.
( WHI LE condicin expresin1 [expresin2...])
La funcin WHI LE establece estructuras repetitivas al igual que REPEAT. La diferencia estriba en
que WHI LE proporciona un control sobre la repeticin, ya que la serie de expresiones (o nica
expresin como mnimo) se repetir mientas se cumpla una determinada condicin especifica-
da en condicin.
Mientras el resultado de la condicin sea diferente de ni l (o sea T), WHI LE evaluar las expre-
siones indicadas. En el momento en que la condicin sea igual a ni l , WHI LE terminar, dejan-
do de repetirse el ciclo. Veamos el anterior ejemplo de REPEAT un poco ms depurado con
WHI LE:
(DEFUN Pol i gonal ( )
- - ( SETQ Ver t ( GETI NT " Nmer o de vr t i ces de l a pol i gonal : " ) )
- - ( SETQ Li n ( - Ver t 1) )
- - ( SETQ Pt o1 ( GETPOI NT " Punt o pr i mer o: " ) )
- - ( WHI LE ( > Li n 0)
- - - - ( SETQ Pt o2 ( GETPOI NT " Si gui ent e punt o: " ) )
- - - - ( COMMAND " _l i ne" Pt o1 Pt o2 " " )
- - - - ( SETQ Pt o1 Pt o2)
- - - - ( SETQ Li n ( 1- Li n) )
- - )
)
De esta forma se establece una estructura repetitiva controlada por el nmero de lneas, el
cual va decrementndose en -1: ( SETQ Li n ( 1- Li n) ) cada vez que se repite el proceso.
Mientras Li n sea mayor de 0 se dibujarn lneas, en el momento en que no sea as se termina-
r el proceso.
WHI LE se utiliza mucho para controlar entradas de usuario y procesar errores, por ejemplo:
. . .
( SETQ Di aCj ( GETREAL " Di met r o de l a caj er a: " )
( SETQ Di a ( GETREAL " Di met r o del aguj er o: " ) )
( WHI LE ( > Di a Di aCj )
- - ( PROMPT " El di met r o del aguj er o debe ser menor que el de l a caj er a. \ n" )
- - ( SETQ Di a ( GETREAL " Di met r o del aguj er o: " ) )
)
. . .
Existe una forma muy particular de usar funciones como WHI LE o I F. Vemos el ejemplo si-
guiente:
( DEFUN Haz ( / pt b pt )
- - ( I NI TGET 1)
- - ( SETQ pt b ( GETPOI NT " Punt o de base: " ) ) ( TERPRI )
- - ( WHI LE ( SETQ pt ( GETPOI NT pt b " Punt o f i nal ( I NTRO par a t er mi nar ) : " ) ) ( TERPRI )
- - ( COMMAND " _l i ne" pt b pt " " )
)
El ejemplo dibuja segmentos rectos en forma de haz de rectas desde un punto de base a di-
versos puntos que es usuario introduce. Examinemos cmo se realiza la comparacin en el
WHI LE. De suyo la comparacin no existe como tal, pero sabemos que WHI LE contina mientras
no obtenga ni l . Ah est el truco. En el momento en el pulsemos I NTRO, pt guardar ni l , por
lo que WHI LE no continuar. Si introducimos puntos, WHI LE no encuentra ni l por lo que realiza
el bucle.
A continuacin vamos a ver tres funciones que no se refieren a repeticin de expresiones en s,
sino a repeticiones de proceso con elementos de listas. Estas tres funciones son FOREACH, AP-
PLY y MAPCAR.
( FOREACH variable lista expresin)
Esta funcin procesa cada elemento de una lista (lista) aplicndole una expresin (expre-
sin) indicada. Para ello se utiliza un smbolo (variable) que debe aparecer en dicha expre-
sin. El funcionamiento es el siguiente: se toma cada elemento de la lista y se hace intervenir
en la expresin en los lugares donde aparece el smbolo. Despus se evala cada una de las
expresiones resultantes para cada elemento de la lista. Vamos a estudiar un ejemplo:
( FOREACH Var ( 10 20 30) ( * 2 Var ) )
Lo que se pretende aqu es multiplicar cada uno de los elementos de la lista por 2. De esta
forma, y como hemos explicado, en principio se define una variable (Var ). Esta variable ser
sustituida por cada uno de los elementos de la lista que sigue en la expresin del final. As, Var
es sustitua por 10, por 20 y por 30 respectivamente en la expresin del producto que se indica
en ltimo lugar.
Al final, FOREACH devuelve el resultado de la ltima expresin evaluada.
Veamos otro ejemplo que dibuja lneas desde el punto 0,0 hasta cuatro puntos 2D indicados en
una lista:
( FOREACH Pt o ( ( 10 10) ( 20 20) ( 25 40) ( 100 170) ) ( COMMAND " _l i ne" " 0, 0" Pt o
" " ) )
( APPLY funcin lista)
APPLY aplica la funcin indicada a todos los elementos de una lista tambin indicada. Ejemplo:
( APPLY * ( 2 3 4) )
Este ejemplo aplica la funcin * inherente a AutoLISP a la lista especificada. El resultado habra
sido el mismo que si hubiramos escrito:
( * 2 3 4)
aunque en determinadas situaciones puede ser interesante su uso.
Se aprecia que tanto la lista (como ya sabamos) como la funcin indicada han de llevar un
apstrofo delante al ser literales. La funcin puede ser una subr de AutoLISP o una funcin
definida previamente por el usuario.
( MAPCAR funcin lista1... listan)
Por su lado, MAPCAR aplica la funcin indicada a elementos sucesivos de listas. Por ejemplo,
supongamos n listas cada una con un nmero m de elementos. MAPCAR aplicar la funcin es-
pecificada al primer elemento (1-1, 2-1,... n-m) de cada lista (lista1, lista2,... listan) y el resul-
tado ser guardado como primer elemento de la lista de resultado. Despus realiza lo mismo
con los m elementos de las n listas. El resultado final ser una lista cmulo de los resultados
parciales. Veamos un ejemplo sencillo:
( MAPCAR + ( 8 2 3) ( 2 1 1) ( 0 0 0) )
El resultado ser:
( 10 3 4)
Las mismas consideraciones en cuanto a literales que para APPLY.
A continuacin vamos a estudiar aqu una funcin que no es que tenga que ver con estas lti-
mas, pero se suele utilizar con ellas, sobre todo con APPLY y MAPCAR. Esta funcin es:
( LAMBDA argumentos expresin1 [expresin2...])
LAMBDA define una funcin de usuario sin nombre. Su formato y funcionamiento es el mismo
que DEFUN, pero al no tener nombre slo puede utilizarse en el momento de definirla y no pue-
de ser llamada posteriormente. Se utiliza cuando se necesita definir una funcin slo momen-
tneamente y no se desea ocupar espacio en memoria de manera innecesaria.
LAMBDA devuelve el valor de la ltima expresin evaluada, lo mismo que DEFUN. Se puede usar
en combinacin con APPLY y MAPCAR como decamos para aplicar una funcin temporal a
los elementos de una o varias listas:
( APPLY ( LAMBDA ( x y z) ( / ( - x y) z) )
- - ( 25 5 2)
)
En el ejemplo se define una funcin temporal con tres variables. Su cometido es restarle y a x
y dividir el resultado entre z. Se aplica esa funcin con APPLY a la lista que suministra los tres
argumentos requeridos. El resultado ser (25 - 5) / 2, es decir 10.
De manera similar se utiliza con MAPCAR, cuando se quiere obtener una lista de resultados. Por
ejemplo una funcin para dibujar lneas entre una serie de puntos iniciales y una serie de pun-
tos finales podra ser:
( MAPCAR ' ( LAMBDA ( pi n pf ) ( COMMAND " l i nea" pi n pf " " ) )
- - ( LI ST pi n1 pi n2 pi n3)
- - ( LI ST pf 1 pf 2 pf 3)
)
7 fase intermedia de ejercicios
Realizar un programa que dibuje crculos concntricos. La aplicacin solicitar el centro de la
serie de crculos, al nmero de crculos y el radio interior y exterior del conjunto. Los crculos
se dispondrn de manera equidistante.
Realizar un programa que dibuje crculos concntricos a partir de un crculo base. Los radios
de los dems crculos se irn introduciendo a medida que se dibujan (por el usuario).
ONCE.10. MANEJO DE LISTAS
En esta seccin, y avanzando un poco ms en este curso, vamos a ver una serie de funciones
de AutoLISP muy sencillas que se utilizan para el manejo de listas. Ya hemos visto en varios
ejemplos tipos de listas, como las de las coordenadas de un punto, por ejemplo. Aprendere-
mos ahora a acceder o capturar todo o parte del contenido de una lista, as como a formar
listas con diversos elemento independientes. El tema es corto y fcilmente asimilable, pero no
por ello menos importante, ya que esta caracterstica se utiliza mucho en la programacin de
rutinas AutoLISP, sobre todo a la hora de acceder a la Base de Datos interna de AutoCAD.
Lo primero que vamos a ver es cmo acceder a elementos de una lista. Para ello disponemos
de una serie de funciones que iremos estudiando desde ahora.
( CAR lista)
La funcin CAR de AutoLISP devuelve el primer elemento de una lista. Si se indica una lista
vaca ( ) se devuelve ni l , si no se devuelve al valor del elemento. Veamos un ejemplo. Si que-
remos capturar la coordenada X, para su posterior proceso, de un punto introducido por el
usuario, podramos introducir las lneas siguientes en nuestro programas:
( SETQ Coor d ( GETPOI NT " I nt r oduce un punt o: " ) )
( SETQ X ( CAR Coor d) )
De esta manera, guardamos en la variable X el primer elemento de la lista guardada en Coor d,
es decir la coordenada X del punto introducido por el usuario.
Recordemos que si se emplean listas directamente, stas han de ir indicadas como literales
(precedidas del apstrofo):
( CAR ( 5 20 30) )
Si la lista slo tiene un elemento se devuelve dicho elemento. Vemos unos ejemplos:
( CAR ( ( / 1 2. 2) - 80. 2 - 23. 002 ( * 2 3. 3) ) ) devuelve ( / 1 2. 2)
( CAR ( 34. 45 dci mo - 12) ) devuelve 34. 45
( CAR ( x y z) ) devuelve X
( CAR ( 3) ) devuelve 3
( CDR lista)
Esta funcin devuelve una lista con los elementos segundo y siguientes de la lista especificada.
Esto es, captura todos los elementos de una lista excepto el primero (desde el segundo, inclu-
sive, hasta el final) y los devuelve en forma de lista. Si se especifica una lista vaca, CDR de-
vuelve ni l . Ejemplos:
( CDR ( 8 80. 01 - 23. 4 23 34. 67 12) ) devuelve ( 80. 01 - 23. 4 23 34. 67 12)
( CDR ( x y z) ) devuelve ( Y Z)
( CDR ( CAR ( ( 1 2 4) ( 3 5 7) ( 8 1 2) ) ) ) devuelve ( 2 4)
Si se indica un lista con dos elementos, CDR devuelve el segundo de ellos pero, como sabemos,
en forma de lista. Para capturar una segunda coordenada Y de un punto 2D por ejemplo, ha-
bramos de recurrir a la funcin CAR vista antes para obtener dicho punto. Vanse estos
dos ejemplos:
( CDR ( 30 20) ) devuelve ( 20)
( CAR ( CDR ( 30 20) ) ) devuelve 20
De esta manera, es decir, con la mezcla de estas dos funciones se puede obtener la coordena-
da Y de cualquier punto, o el segundo elemento de cualquier lista, que es lo mismo:
( CAR ( CDR ( 20 12. 4 - 3) ) ) devuelve 12. 4
( CAR ( CDR ( 34 - 23. 012 12. 33) ) ) devuelve - 23. 012
( CAR ( CDR ( 23 12) ) ) devuelve 12
( CAR ( CDR ( 10 20 30 40 50 60) ) ) devuelve 20
Si se especifica una lista con slo un elemento, al igual que con listas vacas se devuelve ni l .
NOTA: Si la lista es un tipo especial de lista denominado par punteado con slo dos elementos
(se estudiar ms adelante), CDR devuelve el segundo elemento sin incluirlo en lista alguna.
Este tipo de listas es fundamental en la Base de Datos de AutoCAD, como se ver en su mo-
mento, y de ah la importancia de estas funciones para acceder a objetos de dibujo y modifi-
carlos.
Las funciones siguientes son combinaciones permitidas de las dos anteriores.

( CADR lista)
Esta funcin devuelve directamente el segundo elemento de una lista. Equivale por completo a
( CAR ( CDR lista) ) . De esta forma resulta mucho ms cmoda para capturar segundos ele-
mentos, como por ejemplo coordenadas Y. Ejemplos:
( CADR ( 10 20 34) ) devuelve 20
( CADR ( 23 - 2 1 34 56. 0 ( + 2 2) ) ) devuelve - 2
( CADR ( 19 21) ) devuelve 21
( CADR ( 21) ) devuelve ni l
( CADR ( ) ) devuelve ni l
El resto de las funciones ms importante se explicarn con un solo ejemplo, el siguiente:
( SETQ Li st aEl em ( ( a b) ( x y) ) )
( CAAR lista)
( CAAR Li st aEl em) devuelve A
Equivale a ( CAR ( CAR Li st aEl em) ) .
( CDAR lista)
( CDAR Li st aEl em) devuelve ( B)
Equivale a ( CDR ( CAR Li st aEl em) ) .
( CADDR lista)
( CADDR Li st aEl em) devuelve ni l
Equivale a ( CAR ( CDR ( CDR Li st aEl em) ) ) .
( CADAR lista)
( CADAR Li st aEl em) devuelve B
Equivale a ( CAR ( CDR ( CAR Li st aEl em) ) ) .
( CADDAR lista)
( CADDAR Li st aEl em) devuelve A
Equivale a ( CAR ( CDR ( CDR ( CAR Li st aEl em) ) ) ) .
Y as todas las combinaciones posibles que podamos realizar. Como se ha visto, para obtener
el tercer elemento (coordenada Z por ejemplo) de una lista utilizaremos CADDR:
( CADDR ( 30 50 75) ) devuelve 75
En el ejemplo anterior, esta funcin habamos visto que devolva ni l . Esto es porque era una
lista de dos elementos, y si el elemento buscado no existe se devuelve, ni l . Por ejemplo:
( CDDDR ( 30 60 90) ) devuelve ni l
La manera de construir funciones derivadas es bien sencilla. Todas comienzan con C y termi-
nan con R. En medio llevan la otra letra, ya sea la A de CAR o la D de CDR, tantas veces como
se repita la funcin y en el mismo orden. Veamos unos ejemplos:
CAR-CAR-CAR = CAAAR, p.e. ( CAR ( CAR ( CAR Li st aEl em) ) )
CDR-CDR-CDR-CAR = CDDDAR, p.e. ( CDR ( CDR ( CDR ( CAR Li st aEl em) ) ) )
CAR-CDR-CAR-CAR-CDR-CDR = CADAADDR, p.e. ( CAR ( CDR ( CAR ( CAR ( CDR ( CDR Li st aE-
l em) ) ) ) ) )
Y as sucesivamente. Todas esta combinaciones son extremadamente tiles, tanto para mane-
jar listas en general como para gestionar directamente la Base de Datos de AutoCAD.
Veamos ahora otra funcin muy til y verstil.
( LI ST expresin1 [expresin2...])
La funcin LI ST rene todas las expresiones indicadas y forma una lista con ellas, la cual de-
vuelve como resultado. Se debe indicar al menos una expresin.
Imaginemos que queremos formar una lista de las tres coordenadas de un punto obtenidas por
separado y guardadas en tres variables llamadas X, Y y Z. X vale 10, Y vale 20 y Z vale 30. Si
hacemos:
( SETQ Punt o ( X Y Z) )
AutoLISP devuelve er r or : bad f unct i on. AutoLISP intenta evaluar el parntesis porque es
una lista. Al comenzar comprueba que X no es ninguna funcin y da el mensaje de error.
Si hacemos:
( SETQ Punt o ( X Y Z) )
La lista con las tres coordenadas se guarda en Punt o, pero ojo, como un literal. Si introduci-
mos ahora lo siguiente el resultado ser el indicado:
! Punt o devuelve ( X Y Z)
Para ello tenemos la funcin LI ST por ejemplo. Hagamos ahora lo siguiente:
( SETQ Punt o ( LI ST X Y Z) )
Y ahora, al hacer lo que sigue se devuelve lo siguiente:
! Punt o devuelve ( 10 20 30)
Hemos conseguido introducir valores independientes en una lista asignada a una variable.
Vamos a ver un ejemplo de un programa que utiliza estas funciones. El listado del cdigo es el
siguiente:
( DEFUN Bor nes ( / pt i di a pt f pt m)
- - ( I NI TGET 1)
- - ( SETQ pt i ( GETPOI NT " Punt o i ni ci al de conexi n: " ) ) ( TERPRI )
- - ( I NI TGET 5)
- - ( SETQ di a ( GETREAL " Di met r o de bor nes: " ) ) ( TERPRI )
- - ( WHI LE ( SETQ pt f ( GETPOI NT " Punt o de bor ne ( I NTRO par a t er mi nar ) : " ) )
- - - - ( TERPRI )
- - - - ( SETQ pt m( LI ST ( CAR pt i ) ( CADR pt f ) ) )
- - - - ( COMMAND " _l i ne" pt i " _non" pt m" _non" pt f " " )
- - - - ( COMMAND " _donut " " 0" ( + di a 0. 0000001) " _non" pt f " " )
- - )
)
( DEFUN c: bor nes ( )
- - ( SETVAR " cmdecho" 0)
- - ( Bor nes)
- - ( SETVAR " cmdecho" 1) ( PRI N1)
)
( PROMPT " Nuevo comando BORNES def i ni do" ) ( PRI N1)
NOTA: En programas que definan ms de una funcin (este no es el caso), sin contar la que
empieza con C: , deberemos de poner cuidado a la hora definir variables locales. Si lo hacemos
por ejemplo en un DEFUN y luego otro necesita de esas variables, el segundo no funcionar.
Las variables locales nicamente funcionan para su funcin, es decir para su DEFUN. La forma
de conseguir que fueran variables locales compartidas slo dentro del propio programa
sera declarndolas en el DEFUN que sea comando de AutoCAD (C: ).
Este ltimo ejemplo solicita los datos necesarios y comienza el bucle de WHI LE. La condicin es
un tanto extraa pero fcil de comprender. Sabemos que WHILE acepta una condicin como
vlida si no devuelve ni l , por lo tanto la condicin es el propio valor de la variable pt f . Al dar-
le un valor mediante GETPOI NT, WHI LE continuar. En el momento en que pulsemos I NTRO para
terminar el programa, pt f no tendr valor, ser ni l , por lo que WHI LE no prosigue y acaba.
El bucle lo que realiza es guardar en la variable pt mel valor de una lista, formada mediante la
funcin LI ST, y que guarda el primer elemento de la lista guardada en pt i (punto inicial de
conexin), es decir la coordenada X, y el segundo elemento de la lista guardada en pt f (punto
de situacin del borne), la coordenada Y. Despus se dibujan la lnea vertical y horizontal de
conexin y el borne en el extremo (mediante ARANDELA).
8 fase intermedia de ejercicios
Realizar un programa que dibuje rectngulos con grosor y con esquinas redondeadas. Se
solicitar al usuario el grosor del rectngulo, el radio de redondeo de las esquinas y la primera
y segunda esquina del rectngulo en s.
Realcese un programa que dibuje ventanas con celosa en cruz. Al usuario se le solicitar el
grosor de rectngulo exterior y la anchura de los marcos. As tambin, evidentemente, la posi-
cin de dos vrtices opuestos por una de las diagonales del rectngulo.
ONCE.11. FUNCIONES DE CONVERSIN DE DA-
TOS
De lo que hablaremos en esta seccin es de la posibilidad que tenemos mediante AutoLISP de
conversin de los tipos de datos disponibles para utilizar, esto es, valores enteros, valores re-
ales, ngulos, distancias y cadenas de texto alfanumrico. Adems, y en ltimo trmino, se
explicar una funcin que es capaz de convertir cualquier valor de un tipo de unidades a otro.
Con lo que comenzaremos ser con una funcin capaz de convertir cualquier valor (entro o
real) en un valor real. Esta funcin es la siguiente:
( FLOAT valor)
valor determina el nmero que queremos convertir. Si es real lo deja como est, si el entero
lo convierte en real. Veamos unos ejemplos:
( FLOAT 5) devuelve 5. 0
( FLOAT 5. 25) devuelve 5. 25
( FLOAT - 3) devuelve - 3. 0
( FLOAT 0) devuelve 0
( I TOA valor_entero)
Esta otra funcin convierte un valor entero, y slo entero, en una cadena de texto que contie-
ne a dicho valor. Por ejemplo:
( I TOA 5) devuelve " 5"
( I TOA - 33) devuelve " - 33"
I TOA reconoce el signo negativo si existe y lo convierte en un guin.
Esta funcin resultar especialmente til cuando se explique en este mismo MDULO la inter-
accin con letreros de dilogo en DCL. Adems, puede servir para introducir valores de varia-
bles en una concatenacin de cadenas, por ejemplo, que prximamente veremos.
NOTA: Si se especifica un nmero real o una cadena como argumento de I TOA se produce un
error de AutoLISP.
( RTOS valor_real [modo [precisin]])
RTOS convierte valores reales en cadenas de texto. Al contrario que I TOA, RTOS admite nme-
ros enteros. Veamos algn ejemplo:
( RTOS 33. 4) devuelve " 33. 4"
( RTOS - 12) devuelve " - 12"
El argumento modo se corresponde con la variable de AutoCAD 14 LUNI TS. Es decir, solamen-
te puede ser un nmero entero entre 1 y 5 cuyo formato es el que se indica:
Modo -------- Formato
-----------------------------------------------------------------
1 ----------- Cientfico
2 ----------- Decimal
3 ----------- Pies y pulgadas I (fraccin decimal)
4 ----------- Pies y pulgadas II (fraccin propia)
5 ----------- Fraccionario
Si no se especifica se utiliza el formato actual de la variable en cuestin. As:
( RTOS 34. 1 1) devuelve " 3. 4100E+01"
( RTOS 34. 1 2) devuelve " 34. 1"
( RTOS 34. 1 3) devuelve " 2' - 10. 1' ' "
( RTOS 34. 1 4) devuelve " 2' - 10 1/ 8"
( RTOS 34. 1 5) devuelve " 34 1/ 8"
El argumento precisin se corresponde con la variable LUPREC e indica la precisin en decima-
les para la cadena de texto que se desea obtener. Si no se indica, y al igual que con el argu-
mento modo, se supone el valor de variable en la sesin actual de dibujo. As:
( RTOS ( / 1 3) 2 0) devuelve " 0"
( RTOS ( / 1 3) 2 1) devuelve " 0. 3"
( RTOS ( / 1 3) 2 4) devuelve " 0. 3333"
( RTOS ( / 1 3) 2 13) devuelve " 0. 3333333333333"
( RTOS ( / 1 3) 2 16) devuelve " 0. 3333333333333333"
NOTA: Como deberamos saber, AutoCAD internamente trabaja siempre con 16 decimales,
indique lo que se le indique, otra cosa es la forma en que nos devuelva los resultados. Es por
ello que a RTOS podemos indicarle una precisin superior a diecisis, pero lo mximo que nos
va a devolver sern esos diecisis decimales.
Otros ejemplos:

( RTOS 2. 567 1 2) devuelve " 2. 57E+00"
( RTOS - 0. 5679 5 3) devuelve " - 5/ 8"
( RTOS 12 3 12) devuelve " 1' "
NOTA: La variable UNI TMODE tiene efecto en los modos 3, 4 y 5.
( ANGTOS valor_angular [modo [precisin]])
Esta subr de AutoLISP toma el valor de un ngulo y lo devuelve como cadena de texto. Dicho
valor habr de ser un nmero en radianes.
El argumento modo se corresponde con la variable AUNI TS de AutoCAD 14. Sus valores estn
en el intervalo de 0 a 4 segn la siguiente tabla:
Modo ------------ Formato
---------------------------------
0 ----------- Grados
1 ----------- Grados/minutos/segundo
2 ----------- Grados centesimales
3 ----------- Radianes
4 ----------- Unidades geodsicas
Por su lado, precisin se corresponde con la variable AUPREC de AutoCAD. Especifica el nme-
ro de decimales de precisin. Veamos algunos ejemplos:

( ANGTOS PI 0 2) devuelve " 180"
( ANGTOS 1. 2 3 3) devuelve " 1. 2r "
( ANGTOS ( / PI 2. 0) 0 4) devuelve " 90"
( ANGTOS 0. 34 2 10) devuelve " 21. 6450722605g"
( ANGTOS - 0. 34 2 10) devuelve " 378. 3549277395g"
El ngulo indicado puede ser negativo, pero el valor es siempre convertido a positivo entre 0 y
2.
NOTA: La variable UNI TMODE afecta slo al modo 4.
Veamos ahora las funciones inversas o complementarias a estas tres ltimas explicadas.
( ATOI cadena)
ATOI convierte la cadena especificada en un nmero entero. Si la cadena contiene decimales la
trunca. Ejemplos:
( ATOI " 37. 4" ) devuelve 37
( ATOI " 128" ) devuelve 128
( ATOI " - 128" ) devuelve - 128
Si ATOI encuentra algn carcter ASCII no numrico en la cadena, nicamente convierte a
numrico hasta dicho carcter. Si no hay ningn carcter numrico y son todos no numricos,
ATOI devuelve 0. Por ejemplo:
( ATOI " - 12j 4" ) devuelve - 12
( ATOI " casi t a" ) devuelve 0
( ATOF cadena)

Convierte cadenas en valores reales. Admite el guin que convertir en signo negativo. Las
mismas consideraciones con respecto a caracteres no numricos que para ATOI . Ejemplos:
( ATOF " 35. 78" ) devuelve 35. 78
( ATOF " - 56" ) devuelve - 56. 0
( ATOF " 35, 72" ) devuelve 35. 0
( ATOF " 23. 3h23) devuelve 23. 3
( ATOF " pescado" ) devuelve 0. 0

( DI STOF cadena [modo])
DI STOF convierte una cadena en nmero real. El argumento modo especifica el formato del
nmero real y sus valores son los mismos que los explicados para RTOS. Si se omite modo se
toma el valor actual de LUNI TS. Se pueden probar los ejemplos inversos a RTOS, son comple-
mentarios.
( ANGTOF cadena [modo])
Convierte una cadena de texto, que representa un ngulo en el formato especificado en modo,
en un valor numrico real. modo admite los mismo valores que ANGTOS. Si se omite modo se
toma el valor actual de la variable AUNI TS. Se pueden probar los ejemplos inversos a ANGTOS,
son complementarios.
ONCE.11.1. Conversin de unidades
Veamos ahora una ltima funcin un poco diferente. CVUNI T convierte un valor indicado de un
tipo de unidades a otro, ambos tambin especificado en la sintaxis. Dicha sintaxis es la que
sigue:
( CVUNI T valor unidad_origen unidad_destino)
valor representa el valor numrico que se desea convertir. unidad_origen y unidad_destino
son, respectivamente, la unidades actuales del valor y la unidades a las que se quiere conver-
tir.
Estos dos argumentos ltimos hay que especificarlos como cadenas (entre comillas dobles).
Los nombres que contengan dichas cadenas debern existir en el archivo ACAD. UNT, archivo de
conversin de unidades suministrado con AutoCAD 14 precisamente para el buen funciona-
miento de esta funcin de AutoLISP. Este archivo es ASCII y puede ser editado y personaliza-
do, por ello, vamos a estudiar aqu y ahora cmo crear nuestras propias definiciones de con-
versin de unidades.
ONCE.11.1.1. Personalizar el archivo ACAD.UNT
Al abrir este archivo mediante un editor ASCII podremos observar que se asemeja completa-
mente a muchos de los archivos personalizables de AutoCAD 14 que ya hemos aprendido a
modificar y crear en otros MDULOS de este curso, como por ejemplo a los de definiciones de
tipos de lnea, patrones de sombreado o formas. El motivo de que se haya dejado esta explica-
cin para este punto es la relacin entre este archivo ACAD. UNT y la funcin CVUNI T de Auto-
LISP.
El archivo de definicin de unidades de AutoCAD, ACAD. UNT, permite definir factores para
convertir datos de un sistema de unidades a otro. Estas definiciones, que son utilizadas por la
funcin de conversin de unidades CVUNI T de AutoLISP, deben incluirse en este archivo en
formato ASCII.
Cada definicin consta de dos lneas en el archivo: el nombre de la unidad y su definicin. La
primera lnea debe llevar un asterisco (*) en la primera columna, seguido del nombre de la
unidad. Este nombre puede llevar varias abreviaturas o formas de escritura alternativas sepa-
radas por comas. El siguiente formato permite incluir un nombre de unidad en singular y en
plural:
*[ [ comn] [ ( [ singular. ] plural) ] ] . . .
Pueden especificarse varias expresiones (singular y plural). No es necesario que vayan situa-
das al final de la palabra, y tampoco es necesario incluir la forma en plural. Ejemplos:
*pul gada( s)
*mi l eni ( o. os)
*pi ( e. es)
*met r o( s) , met er ( s) , met r e( s) , m
En esta ltima lnea por ejemplo, la unidad definida permite llamarla despus como argumento
de CVUNI T de las formas siguientes: met r o, met r os, met er , met er s, met r e, met r es o m. En el
caso de la unidad de medida en pies del ejemplo: pi e o pi es.
La lnea que sigue a esta primera define la unidad como fundamental o derivada. Una unidad
fundamental es una expresin formada por constantes. Toda lnea que siga a la del nombre de
la unidad y no empiece por un signo igual, define una unidad fundamental. Consta de cinco
enteros y dos nmeros reales, de la siguiente forma:
c, e, h, k, m, r1, r2

Los cinco enteros corresponden a los exponentes de estas cinco constantes:
Constante --- Significado
--------------------------------------------------------
C ------------ Velocidad de la luz en el vaco
E ------------ Carga del electrn
H ------------ Constante de Planck
K ------------ Constante de Boltzman
M ------------ Masa del electrn en reposo
Todos estos exponentes juntos definen la magnitud medida por la unidad: longitud, masa,
tiempo, volumen, etctera.
El primer nmero real (r1) es un multiplicador, mientras que el segundo (r2) es un desplaza-
miento de escala aditivo que slo se utiliza para conversiones de temperatura. La definicin de
una unidad fundamental permite escribir el nombre de distintas formas (por ejemplo, met r o y
m) y no importa que est en maysculas o en minsculas. A continuacin se define una unidad
fundamental a modo de ejemplo:
*met r o( s) , met r o( s) , m
- 1, 0, 1, 0, - 1, 4. 1214856408e11, 0
En este ejemplo, las constantes que forman un metro son
((1 / c) * h * ( 1 / m)) * (4.1214856 * (10 ^ 11))
Las unidades derivadas se definen en funcin de otras unidades. Si la lnea que sigue a la del
nombre de la unidad comienza con un signo igual (=) se trata de una unidad derivada. Los
operadores vlidos para estas definiciones son * (multiplicacin), / (divisin), + (suma), -
(resta) y ^ (exponenciacin). Puede hacerse referencia a las unidades predefinidas bien por su
nombre o bien por sus abreviaturas (si tienen). Los elementos que componen la frmula se
multiplican todos, a menos que se especifique lo contrario mediante el operador correspon-
diente. Por ejemplo, la base de datos de unidades define los nombres de mltiplos y submlti-
plos sin magnitudes, por lo que pueden especificarse unidades como micropulgadas introdu-
ciendo mi cr opul gada. A continuacin ofrecemos algunas definiciones de unidades derivadas a
modo de ejemplo.

; Uni dades de super f i ci e
*t ownshi p( s)
=93239571. 456 met er ^2
Se define una ciudad (township) como 93.239.571,456 metros cuadrados. Como vemos, las
unidades cuadradas o cbicas se indican mediante un nombre de unidad definido, el signo de
exponenciacin y el exponente. Metros cuadrados podra ser: met er ^2, m^2, met r os^2 y todas
las dems combinaciones posibles; metros cbicos: m^3, met r o^3,...
; Uni dades el ect r omagnt i cas
*vol t i o( s) , v
=vat i o/ amper i o
En este ejemplo se define un voltio como el resultado de dividir un vatio por un amperio. En el
archivo ACAD. UNT, tanto los vatios como los amperios estn definidos como unidades funda-
mentales.
Como podemos observar, para incluir comentarios basta con colocar al principio de la lnea un
punto y coma. El comentario contina hasta el final de la lnea.
ONCE.11.1.2. Ejemplos de CVUNIT
Se pueden convertir de unas unidades a otras no slo valores numricos sino tambin valores
de punto (listas de dos o tres coordenadas). Veamos algunos ejemplos:
( CVUNI T 180 " degr ee" " r adi an" ) devuelve 3. 14159
( CVUNI T 10 " cm" " i nch" ) devuelve 3. 93701
( CVUNI T 25 " cel si us" " kel vi n" ) devuelve 298. 15
( CVUNI T 1. 25 " hor as" " segundos" ) devuelve 4500
( CVUNI T 2500 " m^2" " acr e" ) devuelve 0. 617763
( CVUNI T 15 " kg" " l i br as" ) devuelve 33. 0693
( CVUNI T ( 2 5 7) " mm" " pul gadas" ) devuelve ( 0. 0787432 0. 19685 0. 275591)
( CVUNI T 760 " gr ados" " c r cul o" ) devuelve 2. 11111
Para la conversin de unidades, AutoLISP necesita acceder cada vez al archivo ACAD. UNT y leer
su contenido. Esto resulta asaz lento, por eso, si un programa requiere efectuar una conver-
sin de diversos valores a las mismas unidades, es preferible calcular un factor con CVUNI T
para un valor 1 y, despus emplear este factor con los dems valores numricos.
NOTA: Si alguna de las unidades no existe o la conversin resulta incoherente, AutoLISP de-
vuelve ni l .
9 fase intermedia de ejercicios
Realcense diversos ejercicios de conversin de datos y unidades.
Desarrollar un programa que dibuje una curva helicoidal tridimensional sin grosor mediante
una spline. Se indicar el radio inicial, radio final, precisin en puntos en cada vuelta, nmero
de vueltas y paso o altura (se dar para elegir). La curva se generar en el plano XY del SCP
actual y alineada con el eje Z.
Autor: J onathan Prstamo Rodrguez.
Para: La Web del Programador

ONCE.12. MANIPULACIN DE CADENAS DE
TEXTO
Explicaremos a continuacin todo lo referente a las funciones de AutoLISP para el manejo de
cadenas de texto. Es frecuente en un programa la aparicin de mensajes en la lnea de co-
mandos, para la solicitud de datos por ejemplo. Pues bien, muchas veces nos interesar utili-
zar las funciones que aprenderemos a continuacin para que dichos mensajes sean ms inte-
resantes o prcticos. Adems, determinadas especificaciones de un dibujo en la Base de Datos
de AutoCAD se encuentran almacenadas como cadenas de texto, lase nombres de capa, esti-
los de texto, variables de sistema, etctera. Por todo ello, ser muy interesante asimilar bien
los conocimientos sobre cadenas de texto para ascender un escalafn ms en la programacin
en AutoLISP para AutoCAD 14.
Comencemos pues, sin ms dilacin, con una funcin sencilla:
( STRCASE cadena [opcin])
STRCASE toma la cadena de texto especificada en cadena y la convierte a maysculas o mins-
culas segn opcin. Al final se devuelve el resultado de la conversin.
Si opcin no existe o es ni l , la cadena se convierte a maysculas. Si opcin es T, la cadena de
convierte a minsculas. Veamos unos ejemplos:
( STRCASE " Est o es un ej empl o" ) devuelve "ESTO ES UN EJ EMPLO"
( STRCASE " Est o es un ej empl o" ni l ) devuelve " ESTO ES UN EJ EMPLO"
( STRCASE " Est o es un ej empl o" T) devuelve " est o es un ej empl o"
( STRCASE " Est o es un ej empl o" ( = 3 3) ) devuelve " est o es un ej empl o"
( STRCASE " Est o es un ej empl o" ( / = 3 3) ) devuelve " ESTO ES UN EJ EMPLO"
( STRCASE " MI NSCULAS" T) devuelve " mi nscul as"
( STRCASE " mayscul as" ) devuelve " MAYSCULAS"
La siguiente funcin es muy usada a la hora de programar, como veremos. STRCAT, que as se
llama, devuelve una cadena que es la suma o concatenacin de todas las cadenas especifica-
das. Veamos su sintaxis:
( STRCAT cadena1 [cadena2...])
Un ejemplo puede ser el siguiente:
( SETQ cad1 " Est o es un " )
( SETQ cad2 " ej empl o de" )
( SETQ cad3 " concat enaci n " )
( SETQ cad4 " de cadenas. " )
( STRCAT cad1 cad2 cad3)
Esto devuelve lo siguiente:
" Est o es un ej empl o de concat enaci n de cadenas. "
Como vemos, ya sea en un lado o en otro, hemos de dejar los espacios blancos convenientes
para que la oracin sea legible. Un espacio es un carcter ASCII ms, por lo que se trata igual
que los dems.
Los argumentos de STRCAT han de ser cadenas forzosamente, de lo contrario AutoLISP mostra-
r un mensaje de error.
NOTA: Recordamos que al final de este MDULO existe una seccin en la que se muestran
todos los mensajes de error de AutoLISP con sus significados correspondientes.
Cada cadena nicamente puede contener 132 caracteres, sin embargo es posible concatenar
varios textos hasta formar cadenas ms largas.
Una utilidad muy interesante de esta funcin es la de visualizar mensajes que dependen del
contenido de ciertas variables, por ejemplo:
( SETQ Nombr eBl oque ( GETSTRI NG " Nombr e del bl oque: " ) )
( SETQ Punt oI ns ( GETPOI NT ( STRCAT " Punt o de i nser ci n del
bl oque " Nombr eBl oque " : " ) )
Y tambin con variables de tipo numrico, que deberemos convertir antes en un cadena con
alguna de las funciones aprendidas en la seccin anterior:
( SETQ Var 1 ( GETI NT " Radi o del c r cul o base: " ) )
( SETQ Var 2 ( GETI NT ( STRCAT " Nmer o de c r cul os de r adi o " ( I TOA Var 1)
" que se di buj ar n en una l nea" ) ) )
De esta manera, pensemos que podemos introducir, en esa pequea cua que es la variable
dentro del texto, el ltimo dato introducido por el usuario como valor por defecto, por ejemplo.
Lo veremos en algn ejemplo o ejercicio a lo largo de este MDULO.
( SUBSTR cadena posicin [longitud...])
Esta funcin extrae longitud caracteres de cadena desde posicin inclusive. Esto es, devuel-
ve una subcadena, que extrae de la cadena principal, a partir de la posicin indicada y hacia la
derecha, y que tendr tantos caracteres de longitud como se indique.
Tanto la posicin de inicio como la longitud han de ser valores enteros y positivos. Veamos
unos ejemplos:
( SETQ Cadena " Buenos d as" )
( SUBSTR Cadena 2 3) devuelve " uen"
( SUBSTR Cadena 1 7) devuelve " Buenos "
( SUBSTR Cadena 7 1) devuelve " "
( SUBSTR Cadena 11 1) devuelve " s"
( SUBSTR Cadena 11 17) devuelve " s"
( SUBSTR Cadena 1 77) devuelve " Buenos d as"
( STRLEN [cadena1 cadena2...])
STRLEN devuelve la longitud de la cadena indicada. Si no se indica ninguna o se indica una ca-
dena vaca (" " ), STRLEN devuelve 0. El valor de la longitud es un nmero entero que expresa
el total de caracteres de la cadena. Si se indican varias cadenas devuelve la suma total de ca-
racteres. Ejemplos:
( STRLEN " Buenos d as" ) devuelve 11
( STRLEN " Hol a" " Buenos d as" ) devuelve 15
( STRLEN) devuelve 0

( SETQ C1 " Hol a, " C2 " buenos d as. " )
( STRLEN ( STRCAT C1 C2) ) devuelve 18
( ASCI I cadena)
ASCI I devuelve un valor entero que es el cdigo decimal ASCII del primer carcter de la cade-
na indicada. Veamos unos ejemplos:
( ASCI I " d" ) devuelve 100
( ASCI I " 7" ) devuelve 55
( ASCI I " +" ) devuelve 43
( ASCI I " Aut oLI SP" ) devuelve 65
( ASCI I " Pr ogr amaci n" ) devuelve 80
Esta funcin puede ser interesante a la hora de capturar pulsaciones de teclas. Veamos el si-
guiente ejemplo:
( SETQ Tecl a ( GETSTRI NG " Tecl ee un r adi o o I NTRO par a t er mi nar : " ) )
- - ( WHI LE ( / = ( ASCI I Tecl a) 0)
- - ( PROMPT " An no t er mi namos. . . " )
- - ( SETQ Tecl a ( GETSTRI NG " \ nTecl ee un r adi o o I NTRO par a t er mi nar : " ) )
)
( PROMPT " FI N. " )
En el momento en que pulsemos I NTRO, Tecla guardar una respuesta nula cuyo cdigo ASCII
es 0. En ese momento el programa acabar. No confundir con el cdigo ASCII del I NTRO que
es el 13, que no podramos utilizar porque lo que se guarda en Tecla que es lo que se com-
para al pulsar I NTRO es una cadena vaca " " .
( CHR cdigo_ASCII)
CHR funciona complementariamente a ASCII, es decir, devuelve el carcter cuyo cdigo ASCII
coincide con el valor especificado. Ejemplos:
( CHR 54) devuelve " 6"
( CHR 104) devuelve " h"
( CHR 0) devuelve " "
NOTA: Aprciese que CHR devuelve cadenas de texto entrecomilladas.
( WCMATCH cadena filtro)
Esta funcin aplica un filtro o patrn a la cadena de texto. Se compara pues la cadena con di-
cho patrn indicado y se devuelve T si lo cumple; si no se devuelve ni l .
La manera de formar filtros es mediante un conjunto de caracteres globales o comodn, que
algunos recuerdan a la forma de trabajo al ms puro estilo MS-DOS. La relacin y significado
de los posibles filtros utilizables se muestra en la siguiente tabla:
Carcter ---- Nombre ----------- Definicin
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# ------------ Almohadilla -------- Cualquier dgito numrico.
@------------ A de arroba ------- Cualquier carcter alfabtico.
. ------------ Punto ------------- Cualquier carcter no alfanumrico.
* ------------ Asterisco --------- Cualquier secuencia de caracteres, incluida una vaca.
? ------------ Signo de interrogacin - Cualquier carcter.
~ ------------ Tilde (ALT+126) --- Si es el primer carcter del patrn, cualquier elemento ex-
cepto el patrn.
[ ...] - - - - - - Corchetes quebrados - Cualquiera de los caracteres encerrados.
[ ~...] ------ ~ + [] ------------- Cualquiera de los caracteres no encerrados.
- ------------ Guin ------------ Entre corchetes siempre para especificar un rango para
----------------------------------- un carcter nico.
, ------------ Coma -------------- Separa dos patrones.
------------ Apstrofo invertido -- Omite caracteres especiales (lee el siguiente carcter de
forma literal).
Nota: Si la cadena es muy larga se comparan slo del orden de 500 caracteres.
Veamos una serie de ejemplos:
Detectar si una cadena comienza con la letra "B":
( WCMATCH " Bl oques" " B*" ) devuelve T
Detectar si una cadena tiene cinco caracteres:
( WCMATCH " Bl oques" " ?????" ) devuelve ni l
Detectar si una cadena contiene la letra "q":
( WCMATCH " Bl oques" " *q*" ) devuelve T
Detectar si una cadena no contiene ninguna letra "q":
( WCMATCH " Bl oques" " ~*q*" ) devuelve ni l
Detectar si una cadena contiene una coma (hay que indicar el literal de la coma):
( WCMATCH " Bl oques, ar mar i o" " * , *" ) devuelve T
Detectar si una cadena comienza con la letra "B" o "b":
( WCMATCH " Bl oques" " B*, b*" ) devuelve T
Detectar si una cadena comienza por un carcter en mayscula (cualquiera):
( WCMATCH " Bl oques" " [ A- Z] *" ) devuelve T
( READ [cadena])
Veamos una funcin muy til. READ devuelve la primera expresin de la cadena indicada. Si la
cadena no contiene ningn parntesis y es un texto con espacios en blanco, READ devuelve el
trozo de texto hasta el primer espacio (en general ser la primera palabra del texto).
Si la cadena contiene parntesis, se considera su contenido como expresiones en AutoLISP,
por lo que devuelve la primera expresin. Se recuerda que los caracteres especiales que sepa-
ran expresiones en AutoLISP son: espacio blanco, ( , ) , , " y ; . A continuacin se ofrecen
unos ejemplos:
( READ " Buenos d as" ) devuelve BUENOS
( READ " Hol a; buenas" ) devuelve HOLA
( READ " Est oy( ms o menos) bi en" devuelve ESTOY
Hay un aspecto muy importante que no debemos pasar por alto, y es que READ examina la
cadena de texto pero analiza su contenido como si fueran expresiones AutoLISP. Por ello de-
vuelve no una cadena de texto, sino una expresin de AutoLISP. De ah que los ejemplos ante-
riores devuelvan un resultado que est en maysculas.
Y es que la utilidad real de READ no es analizar contenidos textuales, sino expresiones de Auto-
LISP almacenadas en cadenas de texto. Por ejemplo:
( READ " ( set q x 5) " ) devuelve ( SETQ X 5)
( READ " ( Set Q Y ( * 5 3) ) ( Set Q Z 2) " ) devuelve ( SETQ Y ( * 5 3) )
Es decir que devuelve siempre la primera expresin AutoLISP contenida en la cadena de texto.
Si slo hay una devolver esa misma.
Estas expresiones pueden ser posteriormente evaluadas mediante la funcin EVAL cuya sin-
taxis es:
( EVAL expresin)
Esta funcin evala la expresin indicada y devuelve el resultado de dicha evaluacin. As por
ejemplo:
( EVAL ( SETQ x 15) )
devuelve
15
Esto equivale a hacer directamente ( SETQ x 15) , por lo que parece que en principio no tiene
mucho sentido. Y es que la funcin EVAL nicamente cobra sentido al utilizarla junto con la
funcin READ.
Vamos a ver un ejemplo que ilustra perfectamente el funcionamiento de READ y EVAL juntos.
Aunque la verdad es que no es un ejemplo muy prctico, ya que requiere conocimientos de
AutoLISP por parte del usuario del programa, pero examinmoslo (ms adelante se mostrar
otro ejemplo mejor). Adems este programa nos ayudar a afianzar conocimientos ya apre-
hendidos:
( DEFUN dat os_cur va ( / mens f un f undef pi ni pf i n y1)
- - ( I F f un0 ( ) ( SETQ f un0 " " ) )
- - ( SETQ mens
- - ( STRCAT " Expr esi n de l a f unci n en X <" f un0 " >: " ) )
- - ( I F ( = " " ( SETQ f un ( GETSTRI NG T mens) ) ) ( SETQ f un f un0) ) ( TERPRI )
- - ( SETQ f undef ( STRCAT " ( def un cur vaf ( x) " f un " ) " ) )
- - ( EVAL ( READ f undef ) )
- - ( I NI TGET 1)
- - ( SETQ pi ni ( GETPOI NT " I ni ci o de cur va en X: " ) ) ( TERPRI )
- - ( SETQ x1 ( CAR pi ni ) yb ( CADR pi ni ) )
- - ( SETQ y1 ( + yb ( cur vaf x1) ) )
- - ( SETQ p1 ( LI ST x1 y1) )
- - ( SETQ f un0 f un)
- - ( SETQ or t o0 ( GETVAR " or t homode" ) ) ( SETVAR " or t homode" 1)
- - ( I NI TGET 1)
- - ( SETQ pf i n ( GETPOI NT pi ni " Fi nal de cur va en X: " ) ) ( TERPRI )
- - ( SETQ xf ( CAR pf i n) )
- - ( WHI LE ( = xf x1)
- - - - ( PROMPT " Deben ser dos punt os di f er ent es. " ) ( TERPRI )
- - - - ( I NI TGET 1)
- - - - ( SETQ pf i n ( GETPOI NT pi ni " Fi nal de cur va en X: " ) ) ( TERPRI )
- - - - ( SETQ xf ( CAR pf i n) )
- - )
- - ( I NI TGET 7)
- - ( SETQ pr x ( GETREAL " Pr eci si n en X: " ) ) ( TERPRI )
- - ( I F ( < xf x1) ( SETQ pr x ( - pr x) ) )
- - ( SETQ n ( ABS ( FI X ( / ( - xf x1) pr x) ) ) )
)
( DEFUN cur va ( / x2 y2 p2)
- - ( COMMAND " _pl i ne" p1)
- - ( REPEAT n
- - - - ( SETQ x2 ( + x1 pr x) )
- - - - ( SETQ y2 ( + yb ( cur vaf x2) ) )
- - - - ( SETQ p2 ( LI ST x2 y2) )
- - - - ( COMMAND p2)
- - - - ( SETQ x1 x2 p1 p2)
- - )
)
( DEFUN ul t _cur va ( / p2 yf )
- - ( SETQ yf ( + yb ( cur vaf xf ) ) )
- - ( SETQ p2 ( l i st xf yf ) )
- - ( COMMAND p2 " " )
)
( DEFUN C: Cur va ( / xf yb pr x p1 n x1)
- - ( SETVAR " cmdecho" 0)
- - ( SETQ r ef nt 0 ( GETVAR " osmode" ) ) ( SETVAR " osmode" 0)
- - ( COMMAND " _undo" " _begi n" )
- - ( dat os_cur va)
- - ( cur va)
- - ( ul t _cur va)
- - ( COMMAND " _undo" " _end" )
- - ( SETVAR " osmode" r ef nt 0) ( SETVAR " cmdecho" 1) ( PRI N1)
)
( PROMPT " Nuevo comando CURVA def i ni do. " ) ( PRI N1)
El programa dibuja el trazado de la curva de una funcin cualquiera del tipo y = f (x). Para ello
se solicita al usuario la expresin de la curva, que habr de introducir con el formato de una
expresin de AutoLISP; por ejemplo ( + ( * 5 x x) ( - ( * 7 x) ) 3) se correspondera con la
funcin y = 5x
2
7x + 3. El programa tambin solicita el punto inicial y final de la curva, as
como el grado de precisin de la misma, ya que se dibujar con tramos rectos de polilnea.
Esta precisin viene a ser la distancia entre puntos de la polilnea.
El primer paso del programa consiste en desactivar el eco de los mensajes, guardar en r ef nt 0
el valor de los modos de referencia activados (variable OSMODE) para luego restaurarlo, y poner
dicha variable a 0, y colocar una seal de inicio del comando DESHACER. Tras ejecutar todas la
funciones, se coloca una seal de fin y todo esto para que se puedan deshacer todas las ope-
raciones del programa con un solo H o un solo DESHACER.

Esto es una prctica normal en los programas AutoLISP. Lo que ocurre es que los programas
realizan una serie de ejecuciones de comandos de AutoCAD pero en el fondo, todo se encuen-
tra soterrado transparentemente bajo un nico comando. Si no estuviramos conformes con el
resultado de una ejecucin de un programa, al utilizar el comando H slo se deshara el ltimo
comando de la serie de comandos de la rutina. De la forma explicada se deshace todo el pro-
grama.
Lo primero que realiza el programa, tras lo explicado, es comprobar, con una funcin I F, si la
variable f un0 contiene alguna expresin o no. La forma de realizarlo es similar a un ejemplo
de WHI LE que ya se explico. En esta variable se guardar la ltima expresin introducida por el
usuario y se utilizar como valor por defecto en la solicitud (siguientes lneas).
Lo que hace el I F es comprobar si f un0 devuelve T o ni l . Si devuelve T es que contiene algo,
por lo que no hace nada (lista vaca ( ) ). Por el contrario, si devuelve ni l es que est vaca, es
decir, es la primera vez que se ejecuta el programa, por lo que la hace igual a una cadena va-
ca " " . Esto se realiza as para que al imprimir el valor por defecto en pantalla, no se produzca
ningn error al ser dicha variable ni l . Es un mtodo muy manido en la programacin en Auto-
LISP.
NOTA: Ntese que la variable f un0 no ha sido declarada como local en los argumentos de DE-
FUN. Esto es debido a que necesita ser global para guardarse en memoria y utilizarse en todas
la ejecuciones del programa.
A continuacin, el programa presenta el mensaje de solicitud de la funcin en la lnea de co-
mandos. Por defecto se presentar la ltima funcin introducida (f un0) si existe, si no los cor-
chetes angulares estarn vacos, pero no habr ningn error. La manera de presentar este
mensaje es mediante una concatenacin de cadenas y un posterior GETSTRI NG sin texto. La
funcin introducida por el usuario se guarda en f un. Luego, con el I F siguiente nos asegura-
mos de darle a f un el valor de f un0 si f un es igual a una cadena vaca, es decir si se ha pulsa-
do I NTRO para aceptar la funcin por defecto.
Seguidamente se forma, mediante una concatenacin de cadenas, la funcin completa, aa-
dindole un ( DEFUN CURVAF ( X) por delante y un ) por detrs. De esta manera tendremos
una funcin de usuario evaluable por AutoLISP.
NOTA: Esta manera de definir funciones con una variable asociada se expone al final de esta
explicacin del ejercicio.
A continuacin se evala mediante EVAL la funcin contenida en la cadena f undef que se lee
con la funcin de AutoLISP READ. El resultado es que se ejecuta el DEFUN y la funcin cur vaf
queda cargada en memoria para su posterior utilizacin.
Ahora se pide el punto de inicio de la curva en X, y se capturan sus coordenadas X e Y en las
variables x1 e yb mediante las funciones CAR y CADR. Inmediatamente se calcula el inicio en Y
(y1) llamando a la recin creada funcin cur vaf y se guarda el punto como una lista de sus
coordenadas (LI ST) en p1. Despus se guarda en f un0 el valor de f un para que en prximas
ejecuciones del programa aparezca como opcin por defecto.
A continuacin se guarda en or t o0 el valor de ORTHOMODE para despus restaurar y se es-
tablece a 1 para activarlo. De esta forma se indica que la curva se trazar con una base hori-
zontal. Se pregunta por la coordenada X final y se introduce el control del WHI LE para que las
coordenadas X inicial y final sean diferentes. Se restablece le valor de ORTHOMODE.
Por ltimo en cuestin se solicitud de datos se solicita la precisin en X. Si el punto final est a
la izquierda del inicial se establece la precisin negativa. El programa calcula el nmero de
tramos de polilnea que almacena en n. FI X toma el valor entero del cociente; este valor es el
nmero de tramos completos. Para dibujar el ltimo tramo con intervalo incompleto se utiliza
la funcin ul t - cur va.
A continuacin, y ya en la funcin cur va, se produce el dibujado de los tramos completos de la
curva y, en la funcin ul t - cur va, del ltimo tramo incompleto. Fin de la aplicacin.
Llegados a este punto toca explicar la nueva manera de definir funciones de usuario con DE-
FUN. Veamos el siguiente ejemplo:
( DEFUN Seno ( x)
- - ( SETQ xr ( * PI ( / x 180. 0) ) )
- - ( SETQ s ( SI N xr ) )
)
Como vemos, este ejemplo utiliza una variable global, pero que luego es utilizada como argu-
mento de la operacin cociente sin estar definida. Esto no es del todo cierto, la variable est
definida en el DEFUN, lo que ocurre es que no tiene valor. Este tipo de variables se denominan
asociadas, ya que se asocian a una expresin.
As, al ejecutar este programa desde AutoCAD no podramos hacer simplemente:
( seno)
ya que producira un mensaje de error, sino que habra que introducir un valor directamente a
su variable asociada, por ejemplo:
( seno 90)
lo que calculara el seno de 90 grados sexagesimales. Veamos otro ejemplo:
( DEFUN Suma ( x y z)
- - ( SETQ Sum( + x y z) )
)
Con este ejemplo habramos de escribir en la lnea de comandos, por ejemplo:
( suma 13 56. 6 78)
10 fase intermedia de ejercicios
Realizar un programa que facilite la edicin de los archivos ASCII de AutoLISP. La rutina soli-
citar el nombre del archivo que se desea editar, proponiendo por defecto el ltimo editado
que se aceptar pulsando I NTRO. Tras esto, el programa correr el Bloc de notas de Microsoft
(suministrado con Microsoft Windows) con el fichero especificado abierto.
Realizar un programa que sea capaz de distribuir un texto introducido por el usuario en for-
ma de arco: alrededor de un centro y con un radio especificado. El texto se generar en senti-
do horario.
ONCE.13. NGULOS Y DISTANCIAS
Tras el estudio de cadenas vamos a estudiar un pequeo grupo de funciones que nos permiten
manejar dos de los tipos de datos ms utilizados por AutoCAD: los ngulos y las distancias.
Recordemos aqu que dentro de AutoLISP los ngulos se miden siempre en radianes (como en
casi todos los lenguajes de programacin existentes).
Comenzamos por una funcin que se encarga de medir ngulos. Esta funcin es:
( ANGLE punto1 punto2)
ANGLE devuelve el ngulo determinado por la lnea que une los dos puntos especificados (pun-
t o1 y punt o2) y la direccin positiva del actual eje X en el dibujo. As pues, entre punt o1 y
punt o2 se traza una lnea imaginaria y, el ngulo es el formado por esa lnea con respecto al
eje X positivo.
Como sabemos, el ngulo se mide en radianes y su sentido positivo es el antihorario o trigo-
nomtrico. Veamos un pequeo ejemplo:
( SETQ I ni ci o ( GETPOI NT " Pr i mer punt o: " ) )
( SETQ Fi nal ( GETPOI NT I ni ci o " Segundo punt o: " ) )
( SETQ Ang ( ANGLE I ni ci o Fi nal ) )
Para pasar este valor a grados sexagesimales, como comentamos ya, habra que hacer:
( SETQ AngSex ( / ( * 180 Ang) PI ) )
Vemos que es una funcin muy similar a GETANGLE o GETORI ENT. La diferencia estriba en que
estas dos solicitan un ngulo, ya sea marcando dos puntos para calcularlo o por teclado, y AN-
GLE calcula el ngulo entre dos puntos. Si se indican dos puntos en pantalla con GETORI ENT o
GETANGLE el resultado es el mismo que con dos GETPOI NT y la funcin ANGLE.
Es importante tener cuidado a la hora de introducir ambos puntos, argumentos de la funcin
ANGLE. El orden en que sean introducidos determina la medida de un ngulo que no coincidir
en absoluto si se indica su posicin de manera inversa. As por ejemplo, si en el caso anterior
se hubiera escrito ( SETQ Ang ( ANGLE Fi nal I ni ci o) ) , el ngulo devuelto no se corresponde-
ra con el que se devuelve al escribir ( SETQ Ang ( ANGLE I ni ci o Fi nal ) ) . Esto mismo ocurra
con GETANGLE y GETORI ENT.
NOTA: Si los puntos introducidos son en 3D, se proyectan ortogonalmente en el plano XY ac-
tual.
( DI STANCE punto1 punto2)
Esta funcin devuelve la distancia 3D entre los dos puntos especificados. Lgicamente, con
DI STANCE es indiferente el orden de introduccin de puntos. Funciona de la misma manera,
con dos GETPOI NT, que GETDI ST. Pero DI STANCE se puede utilizar para calcular la distancia en-
tre dos puntos cualesquiera del proceso de un programa, es decir, que no hayan sido solicita-
dos directamente al usuario. Veamos un ejemplo:
( DI STANCE ( GETPOI NT " Pr i mer punt o: " ) ( GETPOI NT " Segundo punt o: " ) )
El valor devuelto por DI STANCE es un nmero real, distancia 3D entre ambos puntos de acuer-
do a sus coordenadas en el SCP actual.
Las unidades son siempre decimales, independientemente de la configuracin de unidades ac-
tual en el dibujo. Si uno de los puntos especificado es 2D (no se indica su coordenada Z), se
ignorar la coordenada Z del otro punto y se devolver una distancia 2D. Evidentemente si los
dos puntos son 2D, la distancia es tambin 2D.
( POLAR punto ngulo distancia)
La funcin POLAR devuelve un punto obtenido mediante coordenadas relativas polares a partir
del punto especificado, es decir, se devuelven las coordenadas de un punto. Desde punto se
lleva distancia en la direccin marcada por ngulo. Como siempre, el ngulo introducido se
considera en radianes y positivo en sentido trigonomtrico. Aunque el punto introducido como
argumento pueda ser 3D, el valor del ngulo (argumento tambin) se toma siempre respecto
al plano XY actual.
Veamos un pequeo programa ejemplo de POLAR:
( DEFUN C: Bal da ( / Punt o1 Punt o2 Or t ho0 Di st )
- - ( SETQ Or t ho0 ( GETVAR " or t homode" ) ) ( SETVAR " or t homode" 1)
- - ( SETQ Punt o1 ( GETPOI NT " Pr i mer punt o de l a bal da: " ) ) ( TERPRI )
- - ( SETQ Punt o2 ( GETCORNER Punt o1 " Segundo punt o de l a bal da: " ) ) ( TERPRI )
- - ( COMMAND " _r ect ang" Punt o1 Punt o2)
- - ( SETQ Di st ( GETDI ST Punt o1 " Di st anci a a l a si gui ent e bal da: " ) ) ( TERPRI )
- - ( COMMAND " _sel ect " " _l " " " )
- - ( WHI LE ( / = Di st ni l )
- - - - ( COMMAND " _copy" " _p" " " Punt o1 ( POLAR Punt o1 ( / PI 2) Di st ) )
- - - - ( SETQ Di st ( GETDI ST Punt o1 " Di st anci a a l a si gui ent e bal da: " ) )
- - )
- - ( SETVAR " or t homode" Or t ho0)
)
Este programa dibuja baldas a distancias perpendiculares a la horizontal indicadas por el usua-
rio. Tras el comienzo de la funcin se guarda el valor del modo Orto para restaurarlo poste-
riormente y se establece como activado. Se pregunta por el primer y segundo punto de la di-
agonal del rectngulo que formar la primera balda. Una vez hecho esto, se dibuja la balda.
La siguiente fase consiste en copiar dicha balda las veces que se necesite en perpendicular.
Para ello se pregunta por la distancia a la siguiente balda; el punto de base siempre ser la
primera esquina dibujada de la primera balda. A continuacin se establece el ltimo objeto
dibujado (la primera balda) como conjunto de seleccin para recurrir a l despus como pre-
vio.
Ya dentro del bucle se van copiando baldas a los puntos designados por el usuario cada vez.
Para ello se utiliza la funcin POLAR. Como punto de inicio se utiliza siempre el de la esquina
primera de la primera balda como ya se ha dicho, como ngulo PI / 2, es decir, 90 grados
sexagesimales, y como distancia la que cada vez indique el usuario (variable Di st ).
De este programa se sale pulsando I NTRO cuando se nos pregunte por una distancia. Esto lo
controla el bucle WHI LE de la forma que ya se ha explicado alguna vez. En el momento en que
se pulse I NTRO, Di st ser igual a ni l y WHI LE no continuar. Se saldr del bucle y se restable-
cer el valor original de Orto para acabar.
Veamos la ltima de este tipo de funciones. Es I NTERS y se utiliza para obtener puntos por
interseccin entre dos lneas. No es exactamente una funcin que calcule ngulos o distancias,
pero por su similitud de funcionamiento con ellas se ha incluido aqu. Su sintaxis es:
( I NTSERS punto1 punto2 punto3 punto4 [prolongacin])

Esta funcin toma los puntos punto1 y punto2 como extremos de una lnea (aunque no lo se-
an), los puntos punto3 y punto4 como extremos de otra, y calcula el punto interseccin de
ambas, el cual devuelve. Veamos un ejemplo:
( I NTERS ( 10 10) ( 20 20) ( 15 10) ( 0 50) )
esto devuelve
( 13. 6364 13. 6364)
que es el punto interseccin.
El argumento prolongacin es optativo. Si su valor es ni l , la funcin I NTERS considera las
lneas como infinitas y devuelve su punto de interseccin no slo entre los lmites indicados,
sino tambin en su prolongacin (si se cortan evidentemente). En este caso todas las lneas 2D
tendran interseccin, salvo que fueran paralelas.
Si prolongacin no se indica o su valor es diferente de ni l , entonces el punto de interseccin
slo se devuelve si se encuentra entre los lmites indicados.
Si las rectas se cortan en su prolongacin pero no est indicado el parmetro necesario, o si no
se cortan de ninguna manera, I NTERS devuelve ni l . Veamos unos ejemplos:
( I NTERS ( 10 10) ( 20 20) ( 15 10) ( 20 0) ) devuelve ni l
( I NTERS ( 10 10) ( 20 20) ( 15 10) ( 20 0) ni l ) devuelve ( 13. 3333 13. 3333)
( I NTERS ( 10 10) ( 20 20) ( 15 10) ( 20 0) T) devuelve ni l
( I NTERS ( 10 10) ( 20 20) ( 15 10) ( 20 0) ( / = 2 2) ) devuelve ( 13. 3333 13. 3333)
Hay que tener cuidado en indicar los cuatro puntos en el orden correcto, pues en caso contra-
rio, las lneas cuya interseccin calcula I NTERS sern diferentes. Evidente.
11 fase intermedia de ejercicios
Crese un nuevo Modo de Referencia a Objetos que se "enganche" de puntos medios virtua-
les, es decir de puntos medios cualesquiera entre otros dos puntos que se habrn de sealar.
Realizar un programa que dibuje nmeros de marca de despieces. Se solicitar el dimetro
del punto de sealizacin, el dimetro del crculo de marca, los puntos de situacin y el nme-
ro de marca. Tras esto, se dibujar respetando dichos datos.
ONCE.14. RUTINAS DE CONTROL DE ERRORES
Se va a explicar bajo esta seccin una parte muy importante de la programacin en cualquier
lenguaje, slo que aqu orientada al lenguaje que nos ocupa, orientada a AutoLISP. Esta parte
a la cual nos referimos es el tratamiento de errores en un programa.
Con todo lenguaje de programacin existe una funcin muy importante que debe realizar un
programador a la hora de disear su aplicacin. Esta funcin es la que se refiere al depura-
miento o depuracin de un programa, es decir, a la total eliminacin de los errores de sintaxis
o programacin que pudiera contener un programa. Una vez hecho esto se puede decir que el
programa funciona correctamente, pero es esto cierto? Una depuracin exhaustiva no consis-
te nicamente en revisar lnea por lnea de cdigo buscando errores de sintaxis, variables mal
declaradas, etc. Al programa hay que lograr ponerlo bajo las condiciones ms duras de traba-
jo, hay que hacer que ejecute su listado al borde de los lmites y ms all. En definitiva, hay
que suponer todos los casos con los que se va encontrar un futuro usuario al ejecutar la apli-
cacin.
Entre todos estos casos a los que nos referimos existen multitud de situaciones inestables que
producen error en un programa y hacen que ste aborte su ejecucin inesperadamente. Estas
situaciones son las que debe prever el programador.
Un programa puede llegar a abortar no por un mal diseo de su cdigo, sino simplemente por-
que se intente buscar un archivo para ser abierto en la unidad de disco flexible, por ejemplo, y
el disco no est introducido. El programador no puede adivinar la voluntad "maliciosa" de un
usuario que no desea introducir el disco en la disquetera para que el programa "casque", o el
olvido, o simplemente el despiste del manejador del programa. Sin embargo puede suponer
que el caso puede producirse e introducir una rutina que controle dicho error y no deje abortar
al programa.
En AutoLISP el problema es un poco diferente; no disponemos de las instrucciones o funciones
potentes de control de errores que disponen otros lenguajes de programacin. Y es que con
AutoLISP siempre se disearn aplicaciones, rutinas, comandos, etctera que corran bajo Au-
toCAD, y que un programa nuestro aborte no quiere decir que vaya a abortar AutoCAD. Sim-
plemente habr sido un comando fallido.
Examinemos, por ejemplo, qu ocurre cuando intentamos extruir una polilnea abierta. Tras
solicitarnos todos los datos pertinentes, AutoCAD intenta extruir el objeto y, cuando llega a la
conclusin de que no puede, nos muestra un mensaje de error que nos indica la imposibilidad
de realizar esa operacin con ese objeto. Podra habernos dicho que no poda ser al designar la
polilnea, pero no, ha ocurrido al final. Qu es lo que ha sucedido internamente? Pensemos en
ello.
AutoCAD contiene un comando interno que posibilita la extrusin de objetos planos con su-
perficie para convertirlos en slidos. Este comando responde a un programa que ejecuta una
serie de operaciones hasta llegar al resultado final. Si nosotros designamos, como en este ca-
so, un objeto que no puede ser extrudo, AutoCAD "se lo traga" en un principio, es decir, no
comprueba si el objeto designado es factible de ser extrudo o no. Pero al realizar las operacio-
nes pertinentes un error (evidente) se produce en su cdigo interno. El caso es que este error
no se nos materializa de forma escandalosa haciendo que aborte AutoCAD o que el sistema
quede inoperante que as podra haber sido si no estuviera controlado, sino que simple-
mente nos advierte "amablemente" que a susodicho objeto no se le puede aplicar una extru-
sin. Y acaba la orden.
Este es un buen ejemplo del control de errores que deberemos realizar nosotros. En AutoLISP
no pretenderemos que un comando creado no aborte, porque siempre lo har si encuentra
algn problema, sino que procuraremos canalizar ese error para que no parezca tan grave o
aparatoso y simplemente acabe de manera "limpia" el programa o, por ejemplo, nos ofrezca la
posibilidad de volver a ejecutar el comando (que no es lo normal).
Veremos por ejemplo que con Visual Basic el control de errores ser mucho ms exhaustivo y
real.
NOTA: Los comandos y aplicaciones que realicemos para AutoCAD 14 en AutoLISP siempre
deben ser lo ms parecido a los propios comandos y aplicaciones nativos del programa. Tanto
en solicitud de opciones, como en control de errores, como en diseo de cuadros de dilogo,
debemos guardar esa lnea tan caracterstica que distingue a AutoCAD de todos los dems.
Veamos pues la manera de aplicar esto con AutoLISP.
ONCE.14.1. Definir una funcin de error
La manera de definir una funcin de error en AutoLISP es, precisamente, con la funcin para
definir funciones de usuario, con DEFUN. La funcin que concretamente hemos de definir no
puede ser cualquiera, sino que ha de ser una concreta llamada *er r or *. La sintaxis para esta
funcin especial se corresponde con cualquier definicin de funcin, nicamente hemos de sa-
ber que el argumento siempre ser la declaracin de una variable global que guardar el texto
del mensaje devuelto por AutoLISP en un evento de error.
La funcin *er r or * es una funcin predefinida de manipulacin de errores. Al comenzar una
sesin de dibujo, esta funcin tiene un tratamiento de errores por defecto. Cada vez que ocu-
rre un error al ejecutarse un programa AutoLISP, se realiza el tratamiento incluido en ella. Lo
que vamos a hacer nosotros simplemente es redefinirla para personalizar dicho tratamiento a
nuestro gusto. Veamos un ejemplo:
( DEFUN *er r or * ( cader )
- - ( I F ( = cader " t i po de ar gument o er r neo" ) ( er r _ar g) )
)
En este ejemplo, al producirse un error, AutoLISP suministra el texto con su descripcin como
argumento a la funcin *er r or *. En este caso la variable cader almacena el valor de ese tex-
to. Se examina haber si esa cadena es " t i po de ar gument o er r neo" y, en caso afirmativo
se llama a una determinada funcin de tratamiento, en este caso er r _ar g, que har lo que
tenga que hacer.
Un tratamiento estndar sera el siguiente cdigo:
( DEFUN *er r or * ( Cadena)
- - ( PRI NC " Er r or : " ) ( PRI NC Cadena) ( TERPRI )
- - ( PROMPT " *No vl i do. *" ) ( PRI N1)
)
Cuando se produce un error de AutoLISP en un programa, ste queda abortado y se nos de-
vuelve la parte del listado del programa donde se ha producido dicho error, adems de todas
las funciones que engloban esa parte, es decir, hasta el parntesis ms externo que es nor-
malmente un DEFUN. Este listado puede resultar molesto y desagradable a los ojos del usuario.
Una rutina sencilla para evitarlo es sta expuesta aqu.
Al producirse un error, el texto de ese error se escribe con PRI NC (que ya veremos en su mo-
mento) y, en lugar de ofrecer el listado, se ofrece un mensaje *No vl i do*. En general ser
necesario realizar un control ms profundo como el que vamos a explicar ahora.
Sea el ejemplo siguiente, ya explicado anteriormente pero un poco mejorado con detalles que
ya conocemos:

( DEFUN Ar o ( / Cent r o Radi o Gr osor Ri nt Rext Di nt Dext )
- - ( I NI TGET 1)
- - ( SETQ Cent r o ( GETPOI NT " Cent r o del ar o: " ) ) ( TERPRI )
- - ( I NI TGET 7)
- - ( SETQ Radi o ( GETDI ST Cent r o " Radi o i nt er medi o: " ) ) ( TERPRI )
- - ( I NI TGET 7)
- - ( SETQ Gr osor ( GETDI ST " Gr osor del ar o: " ) ) ( TERPRI )
- - ( I NI TGET " Hueco Rel l eno" )
- - ( SETQ Op ( GETKWORD " Ar o Hueco o Rel l eno ( <H>/ R) : " ) ) ( TERPRI )
- - ( I F ( OR ( = Op " Hueco" ) ( = Op \ n) )
- - - - ( PROGN
- - - - - - ( SETQ Ri nt ( - Radi o ( / Gr osor 2) ) )
- - - - - - ( SETQ Rext ( + Radi o ( / Gr osor 2) ) )
- - - - - - ( COMMAND " _ci r cl e" Cent r o Rext )
- - - - - - ( COMMAND " _ci r cl e" Cent r o Ri nt )
- - - - )
- - - - ( PROGN
- - - - - - ( SETQ Di nt ( * ( - Radi o ( / Gr osor 2) ) 2) )
- - - - - - ( SETQ Dext ( * ( + Radi o ( / Gr osor 2) ) 2) )
- - - - - - ( COMMAND " _donut " Di nt Dext Cent r o " " )
- - - - )
- - )
)
( DEFUN C: Ar o ( )
- - ( SETVAR " cmdecho" 0)
- - ( COMMAND " _undo" " _begi n" )
- - ( Ar o)
- - ( COMMAND " _undo" " _end" )
- - ( SETVAR " cmdecho" 1)
- - ( PRI N1)
)

( TERPRI )
( PROMPT " Nuevo comando Ar o def i ni do. " ) ( PRI N1)
Este programa dibuja aros huecos o rellenos, segn se indique. Mientras todo funcione correc-
tamente y los datos introducidos no sean descabellados, no habr problema alguno. Pero pro-
bemos a pulsar ESC cuando se nos pida un dato. El resultado en lnea de comandos ser el
siguiente, por ejemplo:
er r or : Funct i on cancel l ed
( COMMAND " _ci r cl e" CENTRO REXT)
( PROGN ( SETQ RI NT ( - RADI O ( / GROSOR 2) ) ) ( SETQ REXT ( + RADI O ( / GROSOR 2) ) )
( COMMAND " _ci r cl e" CENTRO REXT) ( COMMAND " _ci r cl e" CENTRO RI NT) )
( I F ( OR ( = OP " Hueco" ) ( = OP \ N) ) ( PROGN ( SETQ RI NT ( - RADI O ( / GROSOR 2) ) )
( SETQ REXT ( + RADI O ( / GROSOR 2) ) ) ( COMMAND " _ci r cl e" CENTRO REXT) ( COMMAND
" _ci r cl e" CENTRO RI NT) ) ( PROGN ( SETQ DI NT ( * ( - RADI O ( / GROSOR 2) ) 2) ) ( SETQ
DEXT ( * ( + RADI O ( / GROSOR 2) ) 2) ) ( COMMAND " _donut " DI NT DEXT CENTRO " " ) ) )
( ARO)
( C: ARO)

Di amet er / <Radi us> <19. 6581>:
NOTA: Aqu se trabaja con los mensajes en ingls, pero con la versin castellana el modo de
hacer es el mismo.
Vemos que el programa ha sido abortado. El texto de error que lanza AutoLISP es Funct i on
cancel l ed (detrs de er r or : ). Estos son los mensajes que guardar la variable asociada a la
funcin de control de errores. Vamos pues a intentar controlar este error.
A la funcin que define el comando de AutoCAD (C: Ar o) le vamos a aadir la lnea siguiente:
( SETQ er r or 0 *er r or * *er r or * Cont r ol Er r or es) , justo detrs de la desactivacin del eco
de la lnea de comandos (variable CMDECHO) por razones obvias. Con esto lo que hacemos es,
primero guardar la definicin predeterminada de la funcin predefinida *er r or * (en er r or 0)
para volver a restaurarla despus; as nos aseguramos de dejarlo todo como estaba. Y segun-
do, una vez salvaguardado el contenido de esta funcin, asignarle el valor de la nueva funcin
de control errores Cont r ol Er r or es, que enseguida definiremos. Todo ello lo hacemos en un
solo SETQ, que no despiste, lo podramos haber hecho en dos.
Como siguiente paso evidente definiremos la nueva funcin Cont r ol Er r or es as:
( DEFUN Cont r ol Er r or es ( CadenaEr r or )
- - ( SETQ *er r or * er r or 0)
- - ( I F ( = CadenaEr r or " Funct i on cancel l ed" )
- - - - ( PROMPT " La f unci n ha si do i nt er r umpi da por el usuar i o. " )
- - )
- - ( TERPRI )
- - ( PRI N1)
)
De esta manera asociamos la variable CadenaEr r or a la funcin, lo que har que se guarde en
dicha variable el contenido de la cadena de error lanzada por AutoLISP (si un error se produje-
ra). A continuacin restauramos el valor de la funcin predefinida *er r or *. Despus compa-
ramos el valor de CadenaEr r or con el texto que proporciona AutoLISP si se presiona ESC a una
peticin y, si el valor es cierto, se muestra el mensaje del PROMPT. Por fin, realizamos un salto
de lnea con TERPRI para que el *Cancel * que devuelve AutoLISP no quede pegado a nuestro
mensaje y acabamos con PRI N1.
Con esta funcin habremos controlado la salida de una pulsacin de ESC. Podremos deducir
fcilmente cmo hacer para que la pulsacin de ESC devuelva nicamente el mensaje por de-
fecto de AutoCAD, es decir el *Cancel *, sin nada ms (como ocurre con los comandos del
programa).
Si quisiramos controlar as todos los errores, la rutina sera un tanto extensa. Por ello, lo que
siempre se suele hacer es definir una rutina de tratamiento como la que sigue, por ejemplo:
( DEFUN Cont r ol Er r or es ( CadenaEr r or )
- - ( SETQ *er r or * er r or 0)
- - ( I F ( = CadenaEr r or " qui t / exi t abor t " )
- - - - ( PRI NC " \ nDat os no vl i dos. Fi n del pr ogr ama. " )
- - - - ( PRI NC ( STRCAT " \ nEr r or : " CadenaEr r or " . " ) )
- - )
- - ( TERPRI )
- - ( PRI N1)
)
De esta forma controlamos si el error ha sido producido por una funcin QUI T o EXI T de Auto-
LISP (que enseguida veremos) o por cualquier otra circunstancia. Si el caso es el primero se
muestra un mensaje fijo y, si es el segundo se muestra el mensaje Er r or : y a continuacin el
propio error de AutoLISP. De esta manera tenemos cubiertas todas las posibilidades.
Estos mensajes se pueden personalizar para cada tipo de error o incluso definir diversas fun-
ciones de tratamiento de errores para cada funcin del programa, por ejemplo. As, si sabemos
que el usuario habr de introducir una serie de datos que, al final, pueden producir una divi-
sin entre 0, si este error ocurre el mensaje podra indicar especficamente que el programa no
ha podido continuar porque se ha intentado realizar una divisin entre cero no permitida (algo
parecido a lo que explicbamos que haca EXTRUSI ON).
Pero an nos queda algn problema por resolver. Si nos fijamos en el ejemplo del listado de-
vuelto tras un mensaje de error (antes de controlar) que hemos proporcionado anteriormente,
al final del listado vemos que AutoCAD reanuda el comando CI RCULO pidiendo nuevos datos.
Con el control que hemos proporcionado ya no aparecera, pero fijmonos en el ejemplo si-
guiente:
( DEFUN C: Escr i beHol a ( )
- - ( COMMAND " _t ext " " _s" " f ant ast i c" " \ \ " " \ \ " " \ \ " " Hol a" )
)
Este pequeo ejemplo escribe Hol a con el punto de insercin, la altura de texto y el ngulo de
rotacin proporcionados por el usuario (recordemos que " \ \ " es igual que pause, y espera en
medio de un comando una introduccin de un dato por el usuario). El problema es que si el
estilo de texto FANTASTI C no existe el programa queda abortado pero AutoCAD sigue solici-
tando datos del comando TEXTO.
La manera de solucionar esto es incluyendo en la funcin de tratamiento de errores una llama-
da a la funcin COMMAND sin argumentos. De esta forma se cancela cualquier comando en curso
(algo parecido a los caracteres ^C^C que incluamos en macros de mens y botones de barras
de herramientas). As nuestra rutina de control de errores quedara:
( DEFUN Cont r ol Er r or es ( CadenaEr r or )
- - ( SETQ *er r or * er r or 0)
- - ( I F ( = CadenaEr r or " qui t / exi t abor t " )
- - - - ( PRI NC " \ nDat os no vl i dos. Fi n del pr ogr ama. " )
- - - - ( PRI NC ( STRCAT " \ nEr r or : " CadenaEr r or " . " ) )
- - )
- - ( COMMAND)
- - ( TERPRI )
- - ( PRI N1)
)
Y otro problema que queda en el aire es la restauracin de las variables cambiadas, as como
la colocacin de la marca de final del comando DESHACER. Cuando un programa queda aborta-
do se cede el control a la funcin de tratamiento de errores y ya no vuelve a pasar por el resto
de las funciones. Por eso todo aquello que hayamos variado habremos de restaurarlo antes de
terminar. Una forma, y siempre dependiendo del programa, podra ser:
( DEFUN Cont r ol Er r or es ( CadenaEr r or )
- - ( SETQ *er r or * er r or 0)
- - ( I F ( = CadenaEr r or " qui t / exi t abor t " )
- - - - ( PRI NC " \ nDat os no vl i dos. Fi n del pr ogr ama. " )
- - - - ( PRI NC ( STRCAT " \ nEr r or : " CadenaEr r or " . " ) )
- - )
- - ( COMMAND " _undo" " _end" )
- - ( SETVAR " bl i pmode" bl i p0) ( SETVAR " osmode" r ef nt 0)
- - ( SETVAR " cmdecho" 1)
- - ( COMMAND)
- - ( TERPRI )
- - ( PRI N1)
)
As tambin, si el programa hubiera dibujado ya algo en pantalla antes de producirse el error,
se podra hacer que lo deshiciera todo para no dejar rutinas a medias.
Ntese que hemos dicho que un el programa cede el control a la rutina de tratamiento de erro-
res al producirse un error, no que aborte inesperadamente. Por lgica se puede deducir que
podemos realizar un control tal que el programa, por ejemplo, vuelva a reiniciarse por comple-
to o ceda el control a la funcin fallida para volver a introducir datos o lo que sea.
Como sabemos y ya hemos dicho, los comandos de AutoCAD no vuelven a repetirse si se da
un error de estas magnitudes. S lo hacen a la hora de introducir datos, porque los vuelven a
pedir si son errneos, pero eso ya lo controlamos con los I NI TGET. Por lo tanto, lo ms lgico
ser coincidir con la lnea de AutoCAD y salir de la rutina, eso s, de una forma controlada y
vistosa.
Adems de todo lo expuesto decir que la variable de sistema ERRNO almacena un valor cuando
una llamada de funcin de AutoLISP provoca un error que AutoCAD detecta despus. Las apli-
caciones de AutoLISP pueden consultar el valor actual de ERRNO mediante GETVAR para obtener
informacin de las causas de un error. A no ser que se consulte inmediatamente despus de
que una funcin AutoLISP informe de un error, el error que su valor indica puede ser engao-
so. Esta variable siempre se inicializa a cero al empezar o abrir un dibujo.
NOTA: Si siempre utilizamos la misma rutina de control de errores, podemos escoger incluirla
en el archivo ACAD. LSP para que siempre est definida de la misma forma. La funcin de este
archivo se estudiar en la seccin ONCE.15..
NOTA: Al final de este MDULO existe una relacin completa de todos los cdigos de error
existentes (variable ERRNO) y de todos los mensajes devueltos por AutoLISP (funcin *er r or *).
ONCE.14.2. Otras caractersticas del control de
errores
Existen tres funciones en AutoLISP que tambin se utilizan a la hora de detectar y procesar un
error. La primera de ellas es ALERT, cuya sintaxis es:
( ALERT mensaje)
ALERT presenta un sencillo letrero de dilogo con el mensaje de advertencia especificado en el
argumento mensaje. El letrero slo contiene un botn Aceptar que, al pulsarlo har que des-
aparezca el cuadro. Ejemplo:
( ALERT " Pr ocedi mi ent o no per mi t i do" )
Incluyendo el cdigo de control \ n podemos separar el mensaje en varias lneas:
( ALERT " Pr ocedi mi ent o no\ nper mi t i do" )
El nmero de lneas de estos cuadros de advertencia y su longitud dependen de la plataforma,
el dispositivo y la ventana utilizada. AutoCAD trunca las cadenas cuya longitud supere el ta-
mao del cuadro advertencia dependiendo de la plataforma.
ALERT puede ser utilizado en el momento que se detecta un error para presentar una adver-
tencia en pantalla y, por ejemplo, solicitar de nuevo los datos. Veamos un ejemplo:
( DEFUN Dat os1 ( )
- - ( SETQ Punt oI ni ci o ( GETPOI NT " Punt o de i ni ci o: " ) ) ( TERPRI )
- - ( SETQ Radi o ( GETDI ST Punt oI ni ci o " Radi o: " ) ) ( TERPRI )
)

( DEFUN Dat os_Vuel t ( )
- - ( I F ( SETQ Vuel t as ( GETI NT " Nmer o de vuel t as: " ) )
- - - - ( )
- - - - ( PROGN
- - - - - - ( ALERT " Debe i nt r oduci r un nmer o de vuel t as" )
- - - - - - ( Dat os_Vuel t )
- - - - )
- - )
)
. . .
( DEFUN C: Vuel t ( )
- - ( Dat os1)
- - ( Dat os_Vuel t )
. . .
)
Las otras dos funciones que comentaremos son EXI T y QUI T. Sus respectivas sintaxis son:
( EXI T)
y
( QUI T)
Ambas producen el mismo efecto, esto es, interrumpen la aplicacin actual en el momento en
el que son ledas, devolviendo el mensaje de error qui t ar / sal i r abandonar (en ingls es
qui t / exi t abor t , como ya hemos visto).
Se pueden utilizar para acabar el programa directamente en el momento en que se detecte un
error. Podremos utilizarlos de la manera siguiente, por ejemplo:
( DEFUN Dat os1 ( )
- - ( SETQ Punt oI ni ci o ( GETPOI NT " Punt o de i ni ci o: " ) ) ( TERPRI )
- - ( SETQ Radi o ( GETDI ST Punt oI ni ci o " Radi o: " ) ) ( TERPRI )
)
( DEFUN Dat os_Vuel t ( )
- - ( SETQ Vuel t as ( GETI NT " Nmer o de vuel t as: " ) )
- - ( I F ( < ( SETQ Vuel t as ( GETI NT " Nmer o de vuel t as: " ) ) 1)
- - - - ( QUI T)
- - )
)
. . .
( DEFUN C: Vuel t ( )
- - ( Dat os1)
- - ( Dat os_Vuel t )
. . .
)
Claro que habra que controlar la salida como ya hemos explicado.
NOTA: Normalmente estas funciones se utilizan tambin en la depuracin de un programa.
Detenemos la ejecucin con QUI T o EXI T para evaluar distintas variables y dems.
12 fase intermedia de ejercicios
Programar una rutina AutoLISP que dibuje remates de tubos cortados en 2D. Se solicitarn
los datos convenientes y se aadir una rutina de control de errores.
Realizar un programa con control de errores que dibuje puertas en planta cortando tabiques
y muros. Solicitar los datos pertinentes.

ONCE.15. CARGA Y DESCARGA DE APLICACIO-
NES
Hasta ahora hemos hablado de la forma de cargar nuestras aplicaciones o rutinas AutoLISP
desde AutoCAD 14. Tras haber escrito el archivo de texto correspondiente, accedamos a
Herr.>Cargar Aplicacin... y desde all cargbamos nuestro programa. Esto equivale a ejecutar
el comando APPLOAD en lnea de comandos. Pues bien, existe una serie de funciones de Auto-
LISP para manejar esta carga de programas desde otros programas AutoLISP. Esas funciones
son las que vamos a estudiar seguidamente.
La primera funcin que veremos es LOAD. Su sintaxis es:
( LOAD nombre_archivo [fallo])
Esta funcin carga en memoria el archivo AutoLISP especificado y devuelve su nombre. Como
sabemos, estos archivos podrn o no estar en uno de los caminos de soporte del programa. Si
s estuvieran, con indicar el nombre es suficiente, si no habra que escribir la ruta de acceso o
camino completo.
NOTA: Recordemos que los archivos de soporte los configuramos desde Herr.>Preferencias....
El nombre del archivo en cuestin no hace falta indicarlo con la extensin . LSP aunque se
aconseja por claridad en programas grandes que llamen a archivos . LSP, . DCL y/o a otros si
tiene esta extensin; si tuviera otra hay que especificarla obligatoriamente, ya que AutoCAD
le coloca el . LSP detrs en el momento en que no existe. Veamos algn ejemplo:
( LOAD " ci r cul " )
( LOAD " escal er a. l sp" )
( LOAD " vent ana. mi o" )
( LOAD " ci r cui t . t xt " )
NOTA: Como se ve, los nombres de archivo han de ir entrecomillados por ser cadenas.

La ruta de acceso indicada se establece al estilo MS-DOS, pero con la particularidad de que no
podemos utilizar caracteres contrabarra (\ ) como separadores de directorios o carpetas. Esto
es debido a que, como sabemos, la contrabarra es un carcter de control en AutoLISP. Y si
revisramos el comienzo de este MDULO, cuando hablbamos de los caracteres de control,
veramos que la contrabarra hemos de indicarla con dos caracteres contrabarra (\ \ ). Precisa-
mente el primero es el carcter de control y el segundo la contrabarra en s. Por ejemplo:
( LOAD " c: \ \ aut ocad\ \ pr ogr am\ \ r ut i n\ \ cal der a. l sp" )
Por compatibilidad con sistemas UNIX, las rutas o caminos de acceso se pueden indicar con el
carcter de barra inclinada normal (/ ). Esto casi siempre resulta ms cmodo que el mtodo
anterior:
( LOAD " c: / aut ocad/ pr ogr am/ r ut i n/ cal der a. l sp" )
El argumento fallo ser devuelto si el programa fracasa a la hora de ser cargado. Si este ar-
gumento no existe y el programa falla al ser cargado, AutoLISP de volver un mensaje de
error propio. Por ejemplo:
( LOAD " a: / mi pr og. l sp" " El ar chi vo no se encuent r a o el di sco no est en l a uni -
dad" )
Este argumento tambin ha de ser indicado como cadena y se devuelve como tal, es decir,
entre comillas dobles.
La funcin LOAD la podemos usar para llamar a programas de AutoLISP desde otro programa,
cargndolo antes con ella. Por ejemplo:
( DEFUN Pr og1 ( )
- - ( SETQ Pt o1 ( GETPOI NT " Punt o 1: " ) )
- - ( SETQ Pt o2 ( GETPOI NT " Punt o 2: " ) )
- - ( LOAD " c: / l i sp/ pr og2. l sp" )
- - ( pr og2)
- - ( SETQ Resul t ( / ( - NewPt o1 NewPt o2) 2. 0) )
)
En este caso, el programa llega a la funcin LOAD, carga el programa y lo ejecuta a continua-
cin. Tras haber acabado el otro programa se devuelve el control a este primero.
NOTA: Mucho cuidado al declarar variables en este tipo de estructuras de llamadas a progra-
mas. Si las variables son locales y las necesita el otro programa, ste no funcionar. Declara-
remos pues como locales nicamente aquellas que no vayan a ser utilizadas ms que en la
rutina actual.
NOTA: Las aplicaciones AutoLISP hoy por hoy no se pueden descargar de memoria.
( AUTOLOAD nombre_archivo lista_comandos)
La funcin AUTOLOAD por su lado har que ahorremos memoria mientras no estemos utilizando
los programas o rutinas AutoLISP. Esta funcin efecta la carga del archivo especificado en
nombre_archivo al igual que LOAD, pero nicamente la primera vez que se utilice uno de los
comandos indicados en lista_comandos. As por ejemplo:
( AUTOLOAD " c: / l i sp/ r osca. l sp" ( " r osca" " r c" ) )
Al ser una lista el segundo argumento debe ir indicado como tal. Y los trminos deben ir entre-
comillados.
Esta lnea har que se cargue y ejecute automticamente el programa guardado en r osca. l sp
al escribir en lnea de comandos r osca o r c. Si no se hace esto el programa no se cargar, con
el consiguiente ahorro de memoria.
Deberemos tener un par de consideraciones. La primera es que las palabras con las cuales
podemos llamar al programa indicado deben ser el nombre de funciones contenidas en dicho
archivo. Y la segunda es que todas las funciones implicadas debern estar definidas como co-
mandos de AutoCAD, es decir con C: delante del nombre. As por ejemplo, para que la lnea
anterior funcionara, el archivo ROSCA. LSP debera contener lo siguiente:
( DEFUN C: Rosca ( )
. . .
)
( DEFUN C: Rc ( )
- - ( c: r osca)
)
Es decir, los comandos con los que se puede acceder, uno de ellos definido como abreviatura,
pero definido en el propio archivo.
Con respecto a los directorios de soporte, las mismas consideraciones que para la funcin LO-
AD.
NOTA: Desactivando la casilla Volver a cargar aplicaciones de AutoLISP entre dibujos, sita en
la pestaa Compatibilidad del cuadro de dilogo Preferencias, al que se accede bajo
Herr.>Preferencias..., haremos que cada vez que entremos en un dibujo nuevo no se pierdan
los programas y variables globales de AutoLISP cargados en memoria. El texto de la casilla es
confuso sobremanera, as que cuidado: la casilla activada hace que no se guarden estos pro-
gramas en memoria. Esta misma caracterstica, denominada de AutoLISP persistente, se con-
trola mediante la variable LI SPI NI T de AutoCAD 14.
Pero tener que teclear lneas de estas cada vez que entramos en AutoCAD es un poco pesado.
Si lo que queremos es que nada ms cargar AutoCAD, o nada ms entrar en un dibujo o abrir
uno nuevo, se carguen en memoria determinadas rutinas o funciones, utilizaremos los archivos
que vamos a explicar a continuacin.
ONCE.15.1. ACADR14.LSP, ACAD.LSP y *.MNL
Existen dos archivos, entre otros muchos, que se cargan nada ms arrancar AutoCAD, y tam-
bin cada vez que abrimos un dibujo o comenzamos uno nuevo (si est activada la casilla de
AutoLISP persistente antes mencionada). Estos dos archivos son el ACADR14. LSP y el
ACAD. LSP. ACADR14. LSP es un archivo que se suministra con AutoCAD 14 y en el que pode-
mos encontrar una serie de rutinas que los desarrolladores de Autodesk han incluido ah para
que se carguen nada ms comenzar un dibujo. Por normal general este archivo no lo modifica-
remos, ni tampoco aadiremos lneas de cdigo a l.
Para la misma caracterstica disponemos de un archivo ACAD. LSP. Este archivo se carga de
manera igual al comenzar cualquier dibujo, pero est pensado para que los usuarios introduz-
camos en l nuestras modificaciones. Probablemente no exista en un equipo en el que nunca
haya sido creado, sea por el usuario o sea por aplicaciones verticales para AutoCAD 14. Si no
existe nicamente deberemos crearlo, eso s, con dicho nombre y extensin.
NOTA: El archivo ACAD. LSP ha de estar en un directorio de soporte para que sea cargado. Si
existe ms de un ACAD. LSP en uno o varios directorios de soporte, AutoCAD slo carga el
primero que encuentra.
Podemos suponer pues que todas las definiciones de cdigo AutoLISP incluidas en estos archi-
vos se cargarn nada ms entrar en AutoCAD y al comenzar nuevos dibujos o abrir dibujos
existentes. Por ello, si en ellos incluimos funciones LOAD, los programas a los que llamen sern
cargados nada ms abrir el editor de dibujo.
Mucho ms lgico, y en la prctica es lo que se hace, es introducir funciones AUTOLOAD, que
guarden una o varias palabras que, al ser escritas, cargarn programas AutoLISP y los ejecu-
tarn automticamente.
NOTA: Si la casilla de AutoLISP persistente est desactivada, como hemos dicho los programas
y variables globales permanecern en memoria, pero no se cargarn los archivos ACAD. LSP y
ACADR14. LSP al entrar en un nuevo dibujo o en uno existente, sino slo al arrancar AutoCAD.
Sin embargo si la casilla est activada, estos archivos se cargan siempre al cambiar de dibujo,
pero los programas y variables globales no permanecern en memoria. Dios lo entiende... Pa-
rece que la prctica ms habitual consiste en activar dicha casilla e incluir funciones LOAD o
AUTOLOAD en el ACAD. LSP. De esta manera dispondremos de las rutinas y programas en me-
moria (o preparados) en cualquier momento y sesin de dibujo.
Los archivos ACAD. LSP y ACADR14. LSP funcionan como cualquier otro archivo de AutoLISP
normal, es decir, lo que no est dentro de ningn DEFUN se evala automticamente al ser
cargado el programa; lo que est dentro de algn DEFUN se evaluar cuando se llame a la fun-
cin en cuestin.
Por ltimo hemos de recordar en este punto la utilidad de los archivos . MNL de mens. Estos
archivos contienen normalmente las rutinas necesarias para el funcionamiento de opciones de
un nuevo men creado (si las necesita). Es decir, si un men llama a comandos programados
en AutoLISP, el cdigo de estos comandos se puede introducir en un archivo que tenga el
mismo nombre que el men y la extensin . MNL.
Si el cdigo es muy extenso, o por mayor organizacin, se pueden incluir en este archivo lla-
madas a los programas necesarios con LOAD o AUTOLOAD. Los . MNL funcionan de la misma for-
ma que el ACAD. LSP y el ACADR14. LSP, y se cargan en memoria al cargar el men correspon-
diente o al abrir un dibujo que lleve implcitamente cargado ese men.
ONCE.15.1.1. Configuraciones mltiples
Si un usuario trabaja con mltiples configuraciones de AutoCAD, o hay varios usuarios utili-
zando AutoCAD en un mismo puesto de trabajo, puede ser necesario cargar diferentes rutinas
en cada caso. Esto se consigue fcilmente estableciendo un directorio o carpeta de inicio dife-
rente para cada configuracin y definiendo en ella un archivo ACAD. LSP con las instrucciones
requeridas.
La carpeta de inicio se establece desde el acceso directo a AutoCAD 14 en Windows, como
sabemos. Si en el momento de iniciar la sesin, AutoCAD detecta un archivo ACAD. LSP en
dicha carpeta, carga automticamente su contenido. De esta manera, pueden coexistir en dis-
co duro varios archivos ACAD. LSP situados en diferentes carpetas.
De hecho, ste es el procedimiento ms sencillo que utilizan los desarrolladores de aplicacio-
nes. Al instalarse una aplicacin que funciona sobre AutoCAD, se crea una carpeta propia con
un archivo ACAD. LSP y un acceso directo que inicia AutoCAD desde esa carpeta.
ONCE.15.1.2. Definir funcin como S::STARTUP
Llegado este momento vamos a explicar esta forma un poco especial de definir una funcin.
Como sabemos, dentro de los archivos comentados anteriormente las funciones LOAD y AUTO-
LOAD hacen que se carguen programas automticamente al arrancar AutoCAD. Pero si tam-
bin queremos que algunas funciones se ejecuten automticamente al abrir el programa debe-
remos incluirlas bajo una funcin definida como S: : STARTUP de la siguiente forma:
( DEFUN S: : STARTUP ( )
. . .
)
Todo lo que haya entre los dos parntesis del DEFUN se ejecutar automticamente. Viene a
ser lo mismo que dejarlo fuera de cualquier DEFUN, pero de manera ms ordenadas y clara.
Veamos un ejemplo:
( DEFUN S: : STARTUP ( )
- - ( COMMAND " _pur ge" " _al l " " " " _n" )
)
De esta manera, al entrar en cualquier dibujo se limpiar automticamente todo lo no utiliza-
do: capas, estilos de texto, tipos de lnea...
El prefijo S: : de esta funcin especial debe considerarse como reservado y es mejor no utili-
zarlo en ninguna funcin de usuario.
Veamos otro ejemplo ms utilizado:
( DEFUN c: guar dar r ( )
. . .
)
( DEFUN c: guar dar como ( )
. . .
)
( DEFUN S: : STARTUP ( )
- - ( COMMAND " anul adef " " guar dar r " )
- - ( COMMAND " anul adef " " guar dar como" )
)
Si quisiramos redefinir estos comandos de AutoCAD, de la versin castellana del producto,
podramos haber escrito esto en el ACAD. LSP. As cargaran en memoria las nuevas definiciones
de los comandos GUARDARR y GUARDARCOMO y, al ejecutarse automticamente S: : STARTUP, con
el comando de AutoCAD ANULADEF se anularan las actuales definiciones de esos dos coman-
dos. Para recuperar las definiciones normales de ambos comandos, basta emplear el comando
de AutoCAD REDEFI NE. Se recuerda aqu que para utilizar la definicin habitual de comandos
de AutoCAD redefinidos, basta preceder su nombre de un punto (para ms informacin de-
bemos dirigirnos al MDULO SI ETE de este curso).
ONCE.15.2. Aplicaciones ADS
Hay una serie de funciones de AutoLISP para gestionar las aplicaciones ADS (ya obsoletas). En
esta seccin las vamos a explicar.
( XLOAD nombre_archivo [fallo])
Funciona de la misma manera que LOAD para las aplicaciones AutoLISP. En este caso de aplica-
ciones ADS, al mismo tiempo que se cargan se comprueban si son compatibles con AutoLISP.
En el caso de detectarse incorrecciones el proceso quedara abortado.
( AUTOXLOAD nombre_archivo lista_comandos)
Funciona de la misma manera de AUTOLOAD para las aplicaciones AutoLISP.
( XUNLOAD nombre_archivo [fallo])
Descarga aplicaciones ADS de la memoria. El nombre en nombre_archivo debe ser el mismo
que el que se utiliz al cargar la aplicacin con XLOAD. Si se indic un camino de directorios al
cargar con XLOAD, es posible omitirlo al descargar la misma aplicacin con XUNLOAD. Si la apli-
cacin se descarga correctamente se devuelve el nombre de la misma, si no un mensaje de
error; a no ser que se indique algo en el argumento optativo fallo.
( ADS)
Devuelve una lista con los nombres y rutas de acceso (si hiciera falta) de las aplicaciones ADS
actualmente cargadas. Por ejemplo:
( ADS) podra devolver ( " c: \ \ l sp\ \ pr g. exp" " r ut . exe" " vent n. exe" )

( GETCFG nombre_parmetro)
El archivo ACAD14. CFG almacena la configuracin de AutoCAD. Se trata de un archivo de texto
al cual se puede acceder para aadir especificaciones o modificar las existentes. Contiene una
seccin denominada AppDat a que permite a los usuarios y programadores almacenar informa-
cin relativa a la configuracin de sus aplicaciones.
La funcin GETCFG recupera el valor del parmetro cuyo nombre se indique. Este nombre debe
ser una cadena de texto en la forma:
" AppDat a/ nombre_aplicacin/ nombre_seccin/ .../ nombre_parmetro"
( SETCFG nombre_parmetro valor)
Esta funcin es complementaria de la anterior y permite escribir un valor concreto en la sec-
cin AppDat a del archivo de configuracin ACAD14. CFG para el parmetro cuyo nombre se indi-
que. Este parmetro debe especificarse en una cadena de texto cuyo formato es el mismo que
para la funcin GETCFG.
ONCE.15.3. Aplicaciones ARX
Existe tambin una serie de funciones de AutoLISP para gestionar las aplicaciones ARX. Vamos
a verlas.
( ARXLOAD nombre_archivo [fallo])
Funciona de la misma manera que XLOAD para las aplicaciones ADS y LOAD para aplicaciones
AutoLISP. Tambin se comprueba la compatibilidad del archivo con AutoLISP como con XLOAD.
( AUTOARXLOAD nombre_archivo lista_comandos)
Funciona de la misma manera de AUTOXLOAD para aplicaciones ADS y que AUTOLOAD para las
aplicaciones AutoLISP.
( ARXUNLOAD nombre_archivo [fallo])
Funciona de la misma manera de XUNLOAD para la aplicaciones ADS.
( ARX)
Devuelve una lista con los nombres y rutas de acceso (si hiciera falta) de las aplicaciones ARX
actualmente cargadas. Por ejemplo:
( ARX) podra devolver ( " acadapp. ar x" " ol eapr ot . ar x" )
ONCE.15.4. Acceso a comandos externos
(Toda esta seccin se proporciona en el archivo comext.zip para su ptima visualizacin).
ONCE.15.5. Inicio de aplicaciones Windows
Existe una funcin que nos permite iniciar aplicaciones basadas en plataforma Windows desde
AutoLISP. Esta funcin es:
( STARTAPP aplicacin [archivo])
aplicacin dice referencia al programa que queremos iniciar y archivo al archivo que que-
remos abrir directamente con dicho programa. Si no se indica una ruta de acceso completa, la
aplicacin se busca en la ruta de bsqueda especificada en la variable de entorno PATH del
sistema operativo. Veamos tres de ejemplos:
( STARTAPP " not epad" " ej empl o. t xt " )
( STARTAPP " c: / wi ndows/ app/ mi pr og. exe" )
( STARTAPP " wor dpad" " a: \ \ l i sp\ \ t uer ca. l sp" )
Si STARTAPP se evala correctamente devuelve un nmero entero, en caso contrario devuelve
ni l .
13 fase intermedia de ejercicios
Probar las diferentes funciones estudiadas en estas secciones anteriores con rutinas que lla-
men a otras rutinas, programas que utilicen los comandos externos comentados y dems. Per-
sonalcese tambin un archivo ACAD. LSP como prctica.

ONCE.16. INTERACCIN CON LETREROS EN
DCL
Desde la versin 12 de AutoCAD el usuario tiene la posibilidad de elaborar sus propios cua-
dros o letreros de dilogo en lenguaje DCL para formar parte de aplicaciones personales. Todo
lo referente al diseo de estos cuadros ya ha sido estudiado en el MDULO DI EZ de este cur-
so. Pero como se dijo entonces, con DCL elaboramos la parte visible del cuadro, es decir su
diseo grfico aparente nicamente. Para hacer que funcionen y para controlarlos debemos
recurrir, por ejemplo, a aplicaciones programadas en AutoLISP.
En la presente seccin vamos a explicar todas las funciones del lenguaje AutoLISP referentes
al control de letreros de dilogo programados en DCL. Se estudiarn todos los mtodos para
controlar un cuadro y se dispondrn diversos ejemplos que harn referencia al funcionamiento
de los cuadros diseados en el MDULO DI EZ. Empecemos sin ms dilacin.
ONCE.16.1. Carga, muestra, inicio, fin y des-
carga
Las primeras funciones que vamos a estudiar las hemos comentado ya a la hora de hablar del
diseo en DCL. Son las utilizadas para cargar, visualizar y activar un cuadro de dilogo.
Como sabemos, para que un programa DCL funcione hace falta utilizar como mnimo tres ex-
presiones AutoLISP: una para cargar el diseo del cuadro en memoria LOAD_DI ALOG, otra para
mostrarlo en pantalla NEW_DI ALOG y otra para activarlo START_DI ALOG.
( LOAD_DI ALOG archivo_DCL)
LOAD_DI ALOG carga en memoria el archivo . DCL de definicin de cuadros de dilogo especifica-
do. Un archivo . DCL puede tener ms de una definicin de cuadros de dilogo, en este caso se
cargaran todas ellas. De la misma forma, es posible utilizar varias veces LOAD_DI ALOG para
cargar varios archivos . DCL, cada uno con uno o ms diseos de letreros. archivo_DCL es la
ruta y nombre del archivo en cuestin; es una cadena. Ejemplos:
( LOAD_DI ALOG " pr ueba" )
( LOAD_DI ALOG " c: / ar chi vs/ l i sp/ cuadr o. dcl " )
( LOAD_DI ALOG " c: \ \ mi sl sp\ \ hel i c- pol . dcl " )
NOTA: No es imprescindible indicar la extensin, pero es conveniente por claridad.
Si la carga del archivo es fructfera se devuelve un nmero entero positivo que es un ndice de
carga que luego utilizaremos. Este ndice comienza en 1, la primera vez que se carga un archi-
vo con esta funcin, y contina con 2, 3, 4, 5... Si la carga resulta fallida, se devuelve cero (0)
o un nmero negativo.
NOTA: Todas estas indicaciones, a lo largo de este curso, acerca de lo que devuelve una fun-
cin (si falla, si no falla, si encuentra o no un archivo, etc.) no son puro capricho, sino muy
tiles a la hora de programar. Ntese que, tras haber estudiado el control de errores, podemos
utilizar estas respuestas de AutoLISP para controlar el normal flujo de un programa. En este
caso que nos ocupa, el hecho de que LOAD_DI ALOG devuelva 0 si el proceso de carga falla, nos
ofrece la posibilidad de controlar desde el propio programa AutoLISP la correcta o incorrecta
carga en memoria de un archivo . DCL; tomando las oportunas decisiones en consecuencia.
El hecho de que LOAD_DI ALOG devuelva un ndice de carga nos hace pensar la manera de cap-
turarlo para utilizarlo luego con la siguiente funcin. La manera es bien sencilla, ya que se ha-
ce mediante un simple SETQ. Esta ser la forma habitual de suministrar esta funcin, por
ejemplo:
( SETQ I nd ( LOAD_DI ALOG " c: / l i sp/ t or no. dcl " ) )
De esta forma guardamos en una variable el ndice que devuelva LOAD_DI ALOG.

( NEW_DI ALOG nombre_letrero ndice_carga [accin [punto_pantalla]])
Esta funcin muestra en pantalla el letrero cuyo nombre se indique. No hemos de confundir
este nombre de letrero con el nombre del archivo . DCL que, si el archivo slo contiene una
definicin de cuadro de dilogo coincidir habitualmente. El nombre del letrero es el que pre-
cede a : di al og en el archivo . DCL. Tengamos en cuenta que, como ya hemos dicho, un archi-
vo puede contener la definicin de varios letreros, por eso hay que indicar el nombre del que
queremos visualizar. Con LOAD_DI ALOG suministrbamos el nombre del archivo . DCL.
Tambin habremos de indicar obligatoriamente con NEW_DI ALOG el ndice de carga devuelto por
LOAD_DI ALOG. As, una manera tpica de utilizar esta funcin tras usar LOAD_DI ALOG y haber
guardado el ndice de carga en una variable llamada I nd (como en el ejemplo anterior), sera:
( NEW_DI ALOG " t or no" I nd)
NOTA: Aqu vemos como puede coincidir el nombre del archivo . DCL con el nombre del letrero
(ver ejemplo anterior).
El argumento accin especifica la accin por defecto, en forma de expresin de AutoLISP, que
se asignar a todos los elementos del cuadro que no tengan una accin asignada en el pro-
grama. Volveremos sobre este argumento de NEW_DI ALOG cuando expliquemos mejor esto de
las acciones.
El argumento punto_pantalla es un punto en 2D que especifica la posicin inicial del letrero
en pantalla, generalmente por la esquina superior izquierda. La posicin por defecto es el cen-
tro de la pantalla, aunque hablaremos un poco ms de este tema cuando se estudie la funcin
DONE_DI ALOG.
Si NEW_DI ALOG se evala correctamente devuelve T, si no devuelve ni l .
NOTA: En Windows el letrero queda ya inicializado con NEW_DI ALOG, antes de utilizar la si-
guiente funcin. Hay que tener en cuenta este aspecto a la hora de hacer llamadas interactivas
de NEW_DI ALOG cuando hay casillas de un letrero que llaman a otro.
( START_DI ALOG)
START_DI ALOG inicializa el letrero de dilogo anteriormente mostrado en pantalla con
NEW_DI ALOG.
Una vez utilizada esta funcin, la cual no tiene argumentos, el letrero permanece activo hasta
que el usuario seale un elemento que lleve asociada una accin de final de letrero (DO-
NE_DI ALOG) que lo cierre. Esta accin suele estar asociada habitualmente a los botones Acep-
tar y Cancelar.
START_DI ALOG devuelve el estado en el que se ha cerrado el letrero. Si se ha hecho mediante
la casilla Aceptar devuelve 1; si se ha pulsado Cancelar devuelve 0; si haba letreros super-
puestos y se han cerrado todos a la vez mediante TERM_DI ALOG devuelve - 1.
Por ltimo, decir que, como enseguida veremos, en cada llamada a DONE_DI ALOG se puede
indicar un estado de terminacin. Si as se ha hecho, START_DI ALOG devuelve ese nmero de
estado.
NOTA: mientras un cuadro permanece activo no es posible llamar a funciones de AutoLISP que
afectan a la pantalla o requieren entradas del usuario que no tienen que ver con el cuadro.
Esto ocurre por ejemplo con COMMAND y con todas las funciones GET.... La funcin SSGET ya
veremos se puede utilizar, siempre que no sea una de sus opciones interactivas que solicita
la accin del usuario.
( DONE_DI ALOG [estado])
Esta funcin cierra el letrero activo actual. Debe ser llamada desde una expresin de control de
los componentes de un letrero. Generalmente ser llamada desde la funcin que defina la ac-
cin del botn Aceptar (enseguida veremos todo esto).
La funcin DONE_DI ALOG devuelve las coordenadas X e Y (generalmente de la esquina superior
izquierda) correspondientes a la posicin del letrero en el momento de cerrarse. Estas coorde-
nadas pueden ser utilizadas para luego proporcionarlas en sucesivas llamadas a NEW_DI ALOG
que, como hemos comentado antes, admite como argumento unas coordenadas.
Entonces, si calculramos un valor por defecto para las coordenadas de un cuadro a la hora de
abrirse por primera vez (siempre que no exista ya un valor de coordenadas) y capturramos la
salida de DONE_DI ALOG as, por ejemplo:
( SETQ Coor Cuadr o ( DONE_DI ALOG) )
podramos luego llamar al mismo cuadro utilizando dichas coordenadas. De esta manera el
cuadro siempre aparecera en el ltimo lugar en pantalla en el que se cerr. A veces esto pue-
de resultar til y a veces molesto.
Si se especifica un argumento en estado, debe ser un valor entero positivo. Este argumento
indica un estado de terminacin que ser el que se devuelva en sucesivas llamadas a
START_DI ALOG. De esta forma se podr asignar una accin diferente dependiendo desde qu
casilla o botn se haya realizado el cierre.
( TERM_DI ALOG)
Esta funcin cancela todos los letreros anidados en pantalla, si los hubiera. Siempre devuelve
ni l . START_DI ALOG, que ha activado el primer letrero desde el que despus han salido los de-
ms, devuelve en este caso - 1 una vez cancelados todos.
( UNLOAD_DI ALOG ndice_carga)
Una vez utilizado el diseo del cuadro DCL, es decir una vez mostrado en pantalla, el cuadro
puede ser descargado mediante la funcin UNLOAD_DI ALOG (aunque se siga interactuando con
l). O sea, el cuadro puede ser descargado inmediatamente despus de utilizar START_DI ALOG
(para liberar espacio en memoria). UNLOAD_DI ALOG siempre devuelve ni l .

A modo de resumen podramos decir que el epgrafe de esta seccin ONCE.16.1. describe
muy bien la manera bsica de manejo de cuadros desde AutoLISP. Veamos un ejemplo simpli-
ficado:
( SETQ I nd ( LOAD_DI ALOG " ar chi vo" ) ) ; Car ga
( NEW_DI ALOG " cuadr o" I nd) ; Muest r a
. . .
( START_DI ALOG) ; I ni ci o
( UNLOAD_DI ALOG I nd) ; Descar ga
. . .
( DONE_DI ALOG) ; Fi n
. . .
ONCE.16.2. Gestin de elementos del letrero
Una vez estudiada la manera de iniciar y terminar un cuadro en pantalla, vamos a ver cmo
gestionar sus componentes incluidos, estableciendo as valores por defecto en el inicio, extra-
yendo del letrero dichos valores para su proceso, asignando acciones a botones, etctera.
Adems afianzaremos lo aprendido anteriormente viendo ya ejemplos prcticos.
Para todo ello vamos a ir desarrollando un ejemplo al cual se referirn todas las explicaciones.
Este ejemplo se corresponde con uno de los explicados en el MDULO DI EZ, concretamente
el de control de variables de AutoCAD 14. Para mayor comodidad mostramos aqu el letrero
de dilogo y su cdigo en DCL (un poco variado al final):
NOTA: Los ejemplos que mostremos irn precedidos de epgrafes que estarn identificados por
nmero de ejemplo y nmero de parte.
Letrero 1

Cdigo DCL 1 VARIABLES.DCL
dcl1.zip
La funcin con la que comenzaremos es SET_TI LE. SET_TI LE asigna un valor al elemento cuya
clave atributo key de DCL se indica. El atributo valor es una cadena de texto que especifi-
ca el valor que se asignar a determinado tile o elemento, como ya hemos dicho, identificado
por su key.
Todo texto que aparece en un letrero de dilogo ha de ser una cadena, es decir, texto alfanu-
mrico en formato ASCII, y no valores numricos en formato numrico. As por ejemplo:
( SET_TI LE " Num" " 23. 32" )
( SET_TI LE " Tel ef " " 944661234" )
( SET_TI LE " Val Text " " Mar ca de mol et eado" )
Ser muchas veces prctica habitual rellenar casillas de un cuadro con valores del sistema por
defecto. En este caso, si el valor corresponde a una variable alfanumrica (de AutoCAD o del
usuario) no habr ningn problema en especificar, por ejemplo:
( SET_TI LE " Est i l o" ( GETVAR " t ext st yl e" ) )
lo que coger el valor de la variable de AutoCAD 14 TEXTSTYLE y la introducir en el elemento
con key=" Est i l o" , que podra ser una : edi t _box. Pero si el valor es numrico, habremos de
convertirlo antes a formato ASCII para despus introducirlo en el elemento en cuestin. Esto lo
realizaremos con cualquiera de las funciones a tal efecto ya estudiadas, por ejemplo:
( SET_TI LE " Ti empSal " ( I TOA ( GETVAR " savet i me" ) ) )
lo que coger el valor de SAVETI ME, que es numrico entero, lo convertir a cadena ASCII con
la funcin I TOA y lo asignar al tile identificado por Ti empSal .
NOTA: En la relacin de variables de AutoCAD 14 que aparece en el APNDI CE B de este
curso, se especifica para cada una el tipo de formato de datos, as como los valores que admi-
te. De toda maneras, para saber si una variable es numrica o alfanumrica nicamente debe-
remos teclear su nombre. Si al preguntarnos por el nuevo valor (si no es de slo lectura) el
valor por defecto aparece entrecomillado, es una cadena o variable alfanumrica; si no, es
numrica.
Lo primero que debemos hacer en un programa AutoLISP que controla un letrero de dilogo, y
despus de cargarlo y mostrarlo en pantalla, es rellenar sus casillas con valores por defecto,
activar las opciones de casillas de activacin y botones excluyentes por defecto, etctera. Co-
mo sabemos, esto lo podemos hacer en el propio archivo . DCL (atributo val ue), pero es pre-
ferible realizarlo desde AutoLISP.
Si inicializramos elementos desde DCL y posteriormente desde AutoLISP, se dara una redun-
dancia no deseada. Por ejemplo, si inicializamos una casilla de edicin : edi t _box en DCL, que
contiene una valor de una variable de AutoCAD, como val ue=" 25" y luego, desde AutoLISP la
volvemos a inicializar con el valor de la variable en el momento de mostrar el cuadro (que es
lo lgico), se producir un instantneo "baile" de nmeros (entre el de val ue y el actual, si no
coinciden) que no es vistoso para el usuario. Por ello, normalmente desecharemos la asigna-
cin por defecto desde DCL y la realizaremos desde AutoLISP.
Todas la operaciones de relleno de casillas, asignacin de acciones a botones, y en general
todos los acceso al cuadro de dilogo (que ya veremos) se introducen antes de la funcin
START_DI ALOG y despus de NEW_DI ALOG, si no no funcionar. Veamos ahora entonces cmo
comenzaramos el ejemplo de programa que nos ocupa.
Cdigo AutoLISP 1 VARIABLES.LSP (primera parte)
lisp1-1.zip
Comentarios al cdigo AutoLISP 1 VARIABLES.LSP (primera parte)
Lo primero que hacemos aqu es definir una funcin que es comando de AutoCAD (Var ); co-
mo sabemos podramos haber definido una funcin interna para luego llamarla desde otra que
sea comando de AutoCAD.
Posteriormente cargamos el cuadro de dilogo con LOAD_DI ALOG guardando en la variable I nd
el ndice de carga. A continuacin, mostramos el cuadro en pantalla con NEW_DI ALOG propor-
cionando el ndice devuelto por la funcin anterior y guardado en I nd.
Una vez hecho esto tenemos que inicializar todas las casillas, introduciendo correlativamente
en cada elemento, identificado por su key, el valor correspondiente. Ntese que este caso son
valores de variables numricas de AutoCAD, por lo que debemos utilizar funciones I TOA y
RTOS (esta ltima en el caso del suavizado por ser valor real) para convertir los datos a cade-
nas de texto.
NOTA: Como ya dijimos en el MDULO DI EZ, en DCL se realiza distincin entre maysculas y
minsculas, por lo que al identificar las key hay que introducir el mismo nombre que se escri-
bi en el archivo . DCL; no es lo mismo Suav que suav.
Como sabemos, en el caso de casillas de activacin : t oggl e (y de otros elementos como boto-
nes excluyentes), un valor de 0 significa desactivado y un valor de 1 significa activado. An
as, 1 y 0 siguen siendo valores numricos enteros, por lo que se utiliza para su conversin la
funcin I TOA.
( ACTI ON_TI LE clave accin)
Esta es la siguiente subr de AutoLISP que vamos a explicar. ACTI ON_TI LE asigna una expre-
sin AutoLISP indicada en accin al elemento o tile expresado por la clave de su atributo key
en el diseo DCL. Ambos argumentos han de expresarse entre comillas dobles (" " ) por ser
cadenas. Por ejemplo:
( ACTI ON_TI LE " bot 1" " ( SETQ Var 1 12) ( SETQ Var 2 0) " )
Lo ms lgico parece ser indicar bastantes ms acciones que realizar en una asignacin con
ACTI ON_TI LE. Por eso, la prctica habitual aconseja asignar como accin una llamada a una
subrutina o funcin interna dentro del programa AutoLISP, as:
( ACTI ON_TI LE " bot 1" " ( Acc1) " )
De esta forma asignamos al tile que tenga como key bot 1 una secuencia de acciones conteni-
das en la funcin Acc1. Esta funcin deber estar definida posteriormente, y ya detrs de
START_DI ALOG, con su DEFUN particular. Sigamos con nuestro ejemplo para entenderlo mejor.
Cdigo AutoLISP 1 VARIABLES.LSP (segunda parte)
lisp1-2.zip
Comentarios al cdigo AutoLISP 1 VARIABLES.LSP (segunda parte)
Los dos primeros ACTI ON_TI LE que se definen asignan a cada unos de los botones de valores
por defecto del letrero un par de acciones, englobadas ellas en sendas subrutinas que luego se
definirn. El tercer y ltimo ACTI ON_TI LE asigna al botn Aceptar (recordemos que se le da
predeterminadamente accept como key) otra subrutina denominada Chequear . sta compro-
bar la existencia de errores en las entradas realizadas por el usuario en el cuadro y, cuando
termine, ceder el control a la siguiente funcin, al I F. Si er r or es, que es una variable que
definiremos despus, tiene algn valor no se realizar nada (slo se mostrar un mensaje de
error que veremos luego en la funcin Chequear ). Si er r or es es ni l , es decir si no hay erro-
res (como veremos), se pasa a la funcin Acept ar , que terminar el cuadro (como veremos).
NOTA: No slo podemos asignar acciones a los botones, sino a casi cualquier elemento de un
letrero de dilogo. Imaginemos, por ejemplo, la posibilidad de realizar una serie de acciones al
activar una casilla : t oggl e (mostrar otro cuadro, comprobar valores...), aunque no sea muy
usual.
A continuacin, y tras la definicin y asignacin de valores y acciones en el cuadro, se activa
con START_DI ALOG y se descarga de memoria con UNLOAD_DI ALOG, pues ya no interesa ocupar
memoria con l.
Como ya se dijo, y ahora comprenderemos, con la funcin NEW_DI ALOG se puede indicar una
accin por defecto. Esta accin por defecto se aplicar a todos aquellos elementos que no ten-
gan despus una accin asignada. As si deseamos asignar la misma accin a varios elementos
de un cuadro, podemos hacerlos en NEW_DI ALOG, ahorrndonos espacio en el archivo AutoLISP
y su consiguiente memoria en el sistema.
NOTA: Si un elemento tiene asignada una accin con ACTI ON_TI LE, sta se efecta ignorando
la opcin por defecto de NEW_DI ALOG. Es posible una tercera manera de asignar una accin a
un elemento: el atributo act i on dentro de un archivo en DCL. Tambin en este caso AC-
TI ON_TI LE tiene prioridad sobre act i on. Como norma general usaremos ACTI ON_TI LE para
asignar acciones a los diversos tiles de un letrero de dilogo.
La expresin de accin asignada a un elemento puede acceder a una serie de variables que
informan sobre el estado del elemento o la manera en que el usuario ha modificado dicho ele-
mento. Estas variables son de slo lectura y pueden verse en la tabla siguiente:
Variable ---- Significado
--------------------------------------------------------------------------------------------
$key -------- Se ha seleccionado el atributo key del componente. Esta variable se aplica
a todas las acciones.
$val ue ------ Es el valor actual del componente expresado como cadena. Esta variable se
aplica a todas las acciones. Si el componente es una casilla de edicin : edi t _box
se mostrar su valor como cadena; si es una casilla de verificacin : t oggl e o un botn exclu-
yente : r adi o_but t on, se mostrar una cadena " 0" , para el componente desactivado, o una
cadena " 1" , para el componente activado. Si el componente es un cuadro de lista : l i st _box o
una lista desplegable : popup_l i st y ningn elemento se encuentra seleccionado, el valor de
$val ue ser ni l .
$dat a -------- Son los datos gestionados por la aplicacin (si los hay) establecidos justo des-
pus de NEW_DI ALOG mediante CLI ENT_DATA_TI LE (se ver). Esta variables se aplica a todas
las acciones, pero no tiene sentido amenos que la aplicacin ya la haya inicializado llamando
aCLI ENT_DATA_TI LE.
$r eason ------ Es el cdigo de razn que indica la accin del usuario que ha provocadola ac-
cin. Se emplea con los tiles : edi t _box, : l i st _box, : i mage_but t on y : sl i der . Esta variable
indica por qu se ha producido la accin. Su valor se define para cualquier tipo de accin, pero
slo hace falta inspeccionarla cuando dicha accin est asociada a alguno de los componente
comentados.
$x ------------- La coordenada X de una seleccin de : i mage_but t on. Es la cadena que contie-
ne la coordenada X del punto designado por el usuario al escoger un componente
: i mage_but t on. No tiene ningn significado para los dems tiles. La coordenada X forma parte
del rango que devuelve DI MX_TI LE para el componente, que ya estudiaremos.
$y -------------- Lo mismo que la anterior pero para la coordenada Y. Forma parte del rango de
DI MY_TI LE.
Por ejemplo, si se quiere detectar cul es el botn concreto que ha seleccionado un usuario, se
asigna la misma expresin (variable) a los botones, incluyendo en ella la variable $key:
( ACTI ON_TI LE " bot n1" " ( SETQ el em$key) ( DONE_DI ALOG) " )
( ACTI ON_TI LE " bot n2" " ( SETQ el em$key) ( DONE_DI ALOG) " )
En cuanto el usuario seala un botn, $key devuelve la clave asociada a dicho elemento, que
se almacena en la variable el emy se cierra el cuadro. Al salir, examinando la variable el emse
puede averiguar qu botn ha sido pulsado.
Ejemplo con $val ue:
( ACTI ON_TI LE " casi l l a" " ( SETQ val $val ue) " )
En este segundo ejemplo, al introducir el usuario un valor en una casilla de edicin cuya clave
key es casi l l a la variable $val ue devuelve ese valor y la expresin de accin lo almacena en
val .
La variable $r eason devuelve el cdigo de razn que indica el tipo de accin que el usuario ha
realizado sobre el elemento. La mayora de las veces el valor devuelto es 1, que indica que se
ha designado dicho elemento. Pero hay cuatro tipos de elementos que pueden expresar otras
acciones del usuario que la simple designacin: casillas de edicin, listas, imgenes y desliza-
dores. A continuacin se explican de una manera ms detallada los cdigos de razn que pue-
de devolver $r eason (tambin denominados de retorno de llamada).
Cdigo 1: El usuario ha designado el elemento, o ha pulsado I NTRO si se trataba del elemen-
to por defecto. Se aplica a todos los elementos, pero slo es necesario examinar este valor
para los cuatro tipos enumerados ms arriba, puesto que en los dems es el nico valor posi-
ble.
Cdigo 2: Se aplica a casillas de edicin. Significa que el usuario ha entrado en la casilla, ha
realizado modificaciones en el texto contenido, pero ha salido de ella pulsando tabulador o se-
leccionando otro componente. Conviene comprobar en este caso la validez del valor de la casi-
lla antes de realizar ninguna accin, pues el usuario podra haber dejado incompleta su modifi-
cacin del texto.
Cdigo 3: Se aplica a cursores deslizantes. Significa que el usuario ha arrastrado el cursor
deslizante, pero no ha realizado una seleccin final. En este caso conviene mostrar el valor en
que ha dejado el usuario el cursor, bien mediante un texto o en la casilla de edicin que pueda
haber junto al deslizador, pero sin realizar la accin asignada al elemento por si el usuario mo-
difica posteriormente el cursor deslizante.
Cdigo 4: Se aplica a cuadros de lista y casilla de imagen. En el caso de cuadros de lista sig-
nifica que el usuario ha realizado una doble pulsacin sobre uno de los nombres de la lista. Si
el cuadro de lista es el elemento principal de un cuadro, la doble pulsacin debe tener asociada
la seleccin del nombre y adems el cierre del cuadro. En este caso, la accin asignada debe
distinguir el cdigo de razn 1 (una simple pulsacin que selecciona el nombre de la lista pero
no cierra el cuadro) del cdigo 4 (seleccin del nombre y cierre). Si el cuadro de lista es un
elemento que acompaa a otros en el cuadro, la doble y la simple pulsacin se traducen en el
mismo efecto de seleccionar un nombre, con lo que la accin asignada no tendra por qu dis-
tinguir en principio los dos cdigos posibles. En el caso de casilla de imagen, tambin significa
que el usuario ha realizado una doble pulsacin sobre ella. La accin asignada puede as dis-
tinguir una simple de una doble pulsacin y realizar operaciones diferentes si procede.

( GET_TI LE clave)
La funcin GET_TI LE extrae el valor actual del elemento del cuadro de dilogo identificado por
su key en clave.
Suele ser habitual emplear GET_TI LE a la hora de realizar la accin asignada al botn Aceptar.
De esta forma extraemos los valores ltimos introducimos por el usuario hacindolos efectivos.
Tambin se puede utilizar en la funcin que controle los errores del cuadro para escribir un
mensaje en la lnea de errores (key er r or ). Lo veremos enseguida en nuestro primer ejemplo,
a continuacin de MODE_TI LE.
( MODE_TI LE clave modo)
MODE_TI LE establece un modo para el elemento cuya clave se indique. Los valores de modo se
expresan en la siguiente tabla:
Modo -- Descripcin
------------------------------------------------------
0. Habilita el elemento (lo pone en negro).
1. Inhabilita el elemento (lo pone en gris).
2. Ilumina, resalta o hace que parpadee el elemento.
3. Selecciona el contenido de una casilla de edicin : edi t _box.
4. Resalta una casilla de imagen o anula el resaltado.
Esta funcin podemos utilizarla para controlar el aspecto de determinados elementos con res-
pecto a otros, por ejemplo si al seleccionar una casilla de seleccin nos interesa que otra de-
terminada se inhabilite, porque son incompatibles. Lo vemos ahora en la siguiente parte de
nuestro ejemplo.
Cdigo AutoLISP 1 VARIABLES.LSP (ltima parte)
lisp1-3.zip
Comentarios al cdigo AutoLISP 1 VARIABLES.LSP (ltima parte)
A partir de donde lo habamos dejado, el siguiente paso consiste en crear las funciones a las
que llaman las diferentes acciones de los botones.
Las funciones Def ect o1 y Def ect o2, correspondientes a la pulsacin de uno de los dos botones
que rellenan su parte de cuadro con los valores por defecto, contienes funciones SET_TI LE que
colocan en cada casilla o cuadro de edicin un valor que nosotros hemos considerado por de-
fecto para cada variable. Adems, contienen una ltima funcin SET_TI LE que asigna una ca-
dena vaca a la lnea de error, identificada por la key er r or , como sabemos. De esto hablare-
mos ahora mismo al comentar la funcin Chequear .
La funcin Chequear lo primero que hace es iniciar una variable denominada er r or es como
nula, sin valor (ni l ). Esto se hace por si el cuadro ya haba sido utilizado y la variable valiera T
(haber cometido un error y salir con Cancelar sin arreglarlo), lo cual sera antiproducente para
nuestros objetivos.
A continuacin se extrae mediante GET_TI LE el valor de cada uno de los elementos del cuadro
de dilogo, guardndolos en variables de usuario (previa transformacin en valores numricos
enteros o reales, con ATOI o ATOF respectivamente), y se comparan mediante I F con los valo-
res permitidos por AutoCAD para cada variable de sistema. Es decir, si SURFTAB1 es menor de
2, por ejemplo, sabemos que AutoCAD produce un error. Lo mismo con los valores o rangos
de las dems variables.
NOTA: Recordar que en el APNDI CE B de este curso se ofrecen todos los valores posibles a
todas las variables de AutoCAD 14. An as, si introducimos un valor descabellado a la pre-
gunta de una variable en la lnea de comandos, normalmente se nos ofrece un mensaje de
error acompaado del rango de valores aceptados.
NOTA: La razn de que en este ejemplo no se controlen los valores altos de variables como
SURFTAB1 o SURFTAB2, es porque desde un principio se limit la entrada en las casillas de edi-
cin a un nmero mximo de 3 caracteres (argumento edi t _l i mi t ). Por ello no es necesario
un control tan exhaustivo. Para que el programa fuera completo, habra que permitir dichos
valores y controlar sus entradas, aqu no se hizo porque valores de SURFTAB1 o SURFTAB2 ma-
yores de 999 son realmente exagerados (ambos admiten hasta 32766). Si se quisieran introdu-
cir valores ms altos habra que hacerlo desde lnea de comandos.
Seguimos. Si se introduce un valor no vlido en una casilla, se establece er r or es como T y se
imprime un mensaje en la lnea de errores. Esto se logra con SET_TI LE, asignando a la key
er r or un mensaje entre comillas. A continuacin, se establece con MODE_TI LE un modo 2 para
el elemento que contiene el error, es decir, que se iluminar (generalmente en azul).
Todo esto se realiza al pulsar el botn Aceptar. Al terminar la funcin de chequeo de errores, el
programa devuelve el control a la siguiente instruccin desde donde fue llamada dicha funcin,
al I F del principio. Si errores tiene un valor no ocurre nada (lista vaca), se muestra el error
pertinente (ya estaba mostrado) y no se sale del cuadro.
Al corregir el error y volver a pulsar Aceptar se repite todo el proceso. Si no hay ningn error
se puede seguir adelante. Tambin por ello al iniciar la rutina de control de errores hay que
restablecer errores a ni l .
Cuando todo est bien se pasa a la subrutina Acept ar , la cual introduce finalmente los valores
vlidos en las variables de sistema mediante SETVAR, extrayndolas de los correspondientes
tiles mediante GET_TI LE (previa transformacin a valores numricos como anteriormente he-
mos explicado).
Al final es necesario acabar con DONE_DI ALOG. Como sabemos, la key accept es predefinida y
lleva una funcin predeterminada inherente. Al asociar nosotros accept con una rutina Acep-
t ar , lo que hacemos es sobreescribir la rutina por defecto de accept que lleva ya implcito
un DONE_DI ALOG. Es por eso que debemos incluir DONE_DI ALOG, porque si no el cuadro no se
cerrara. El botn Cancelar cierra el cuadro sin ms.
Existen un par de funciones ms dentro de este grupo que no hemos explicado por no estar
incluidas en el ejemplo, aunque una la hemos mencionado de pasada. Son CLI ENT_DATA_TI LE
y GET_ATTR. La sintaxis de la primera (CLI ENT_DATA_TI LE) es la siguiente:
( CLI ENT_DATA_TI LE clave datos_cliente)
Esta funcin asocia datos procesados mediante una aplicacin a un elemento de un letrero de
dilogo. El argumento datos, as como el argumento clave, debe ser una cadena de texto.
Una accin asignada al elemento puede hacer referencia a estos datos a travs de la variables
$dat a.
Una aplicacin tpica es la asignacin de datos en una lista a una casilla desplegable:
( CLI ENT_DATA_TI LE " mod_sombr a" " 256_col or es 256_col _r esal t ar _16_col _r esal t ar
16_col _r el l enar " )
De esta manera se asignan a la casilla con clave mod_sobr a los cuatro elementos especificados
lista.
Posteriormente, y mediante ACTI ON_TI LE, es posible referirse a la lista a travs de la variable
$dat a, y/o al elemento o elementos seleccionados a travs de la variables $val ue.
( GET_ATTR clave atributo)
Cuando definimos un archivo en DCL utilizamos diversos atributos asignados a los diversos
elementos o tiles del letrero de dilogo. Con GET_ATTR podemos capturar los valores de esos
atributos (l abel , val ue, wi dt h, edi t _l i mi t , key...) de cada elemento, indicando el valor de
su clave o atributo key. Tanto clave como atributo son cadenas.
Por ejemplo, para extraer el valor por defecto con el que fue inicializado el cuadro en determi-
nado componente, podramos hacer:
( GET_ATTR " casi l l a" " val ue" )
ONCE.16.3. Gestin de componentes de imagen
En esta siguiente seccin se van a explicar unas funciones especiales para el control de las
imgenes de los letreros DCL. Para ello recurriremos a un segundo ejemplo que viene como el
anterior de uno de los ejemplos del MDULO DI EZ. En este caso utilizaremos el la creacin
de una curva helicoidal o hlice 3D mediante un polilnea 3D.
NOTA: El cdigo de este programa (sin letrero de dilogo) se puede examinar en uno de los
ejercicios resueltos de este mismo MDULO. Aqu, evidentemente, variar un tanto para
adaptarlo a la introduccin de datos desde el letrero.
Pero antes de comenzar con el ejemplo mostraremos antes el cdigo AutoLISP de la primera
parte del programa, el cual se refiere al relleno de casillas y control de valores por defecto.
Esta parte todava no incluye control de imgenes, por lo que dejaremos este tema para des-
pus.
Para mayor comodidad, se muestra aqu tambin tanto el letrero de dilogo en s como el c-
digo DCL que lo define.
Letrero 2

Cdigo DCL 2 HELICE-POL.DCL
dcl2.zip
Cdigo AutoLISP 2 HELICE-POL.LSP (primera parte)
lisp2-1.zip

Comentarios al cdigo AutoLISP 2 HLICE-POL.LSP (primera parte)
Lo primero que hacemos, como ya hemos de saber, es cargar y mostrar el letrero en pantalla.
Seguidamente, y entre NEW_DI ALOG y START_DI ALOG se introduce toda la batera de funciones
AutoLISP para rellenar el cuadro, establecer los valores por defecto y declarar las funciones de
accin. Vamos a ir paso por paso.
La manera que se ha utilizado en este programa para rellenar los elementos del cuadro es un
tanto diferente a la usada en el ejemplo anterior. Recurdese que en dicho ejemplo lo que ha-
camos era leer el valor de cada variable del sistema y rellenar las casillas. En ste la tcnica
es diferente, porque no son variables de sistema y tenemos que darle un valor por defecto.
Para ello, nos inventamos unas variables (las acabadas en 0) que guardarn los valores por
defecto o los ltimos introducidos al volver a abrir el cuadro. Esta tcnica ya se ha utilizado en
otros ejemplos de programas hasta ahora. Se comprueba si la variable existe y, si no se le da
un valor por defecto. La prxima vez que se abra el cuadro, la variable ya tendr un valor (el
dado por el usuario la ltima vez).
Nos inventamos tambin otras tres variables (op1, op2 y op3) que contendrn los valores por
defecto de las dos : r adi o_r ow y de la : popup_l i st .
op1 se refiere a los botones excluyentes de Iguales y Diferentes. Entonces, si op1 no tiene va-
lor (no existe; igual a ni l ), se le da un valor por defecto de 1. Inmediatamente despus se
comprueba el valor de op1; si es 1 se activa la casilla de Iguales y se llama a la subrutina
I gual es; si no es 1 se activa la casilla Diferentes y se llama a la subrutina Di f er ent es. Ambas
subrutinas se mostrarn ms adelante (contienen los MODE_TI LE para que se inhabilite o no la
casilla del radio final dependiendo si ambos son iguales o diferentes).
op2 se refiere a la lista desplegable Precisin:. Si no tiene un valor se le da por defecto 0. A
continuacin se asigna dicho valor a la lista desplegable. En las listas desplegables y cajas de
lista, el primer valor es identificado como 0, el segundo como 1, el tercero como 2, y as suce-
sivamente. De esta forma aprovechamos esta nomenclatura para declarar la variable.
Por su lado, op3 funciona de manera igual que op1. Ms adelante en el programa incluiremos
las funciones necesarias que lean el cuadro a la hora de cerrarlo para actualizar todos estos
valores por los indicados por el usuario.
A continuacin se asignan las subrutinas de accin a los elementos que las necesitan, es decir,
al botn Aceptar y a los elementos : r adi o_but t on, que debern inhabilitar o no determinadas
casillas segn qu condiciones.
Por ltimo de incluye el START_DI ALOG y la llamada a la subrutina que realiza el dibujo final de
la hlice. Veremos luego por qu se escribe aqu.
A continuacin se explican las funciones para controlar componentes de imagen y se sigue
despus con el ejemplo.
( START_I MAGE clave)

Esta funcin inicia la creacin de una imagen en un cuadro de imagen. Hay que suministrarle
como argumento la clave o atributo key de la casilla de imagen correspondiente en el archivo
en DCL.
Las llamadas al resto de funciones que gestionen el componente de imagen se realizarn entre
START_I MAGE y END_I MAGE, la cual enseguida veremos.
( SLI DE_I MAGE X Y anchura altura archivo_foto)

SLI DE_I MAGE visualiza una foto de AutoCAD en la casilla de imagen que se ha inicializado con
START_I MAGE.
Los argumento X e Y se refieren al vrtice superior izquierdo de la imagen de la foto con res-
pecto al origen de la casilla, es decir, especifican un desfase de la posicin de la foto en refe-
rencia a la casilla que la contiene. Evidentemente, si se indican ambos como 0, el vrtice supe-
rior izquierdo de la foto coincide con el de la casilla.
Los argumentos anchura y altura especifican ambos tamaos de la imagen de foto. Y por
ltimo se escribe el nombre de la foto de AutoCAD y la ruta de acceso si es necesario. Si la
foto se encuentra en una biblioteca de fotos o fototeca, hay que indicar el nombre de esta y,
despus, el nombre de la foto entre parntesis. Este ltimo argumento ir entre comillas por
ser una cadena. La extensin . SLD no es obligatoria, pero conveniente por claridad.
Veamos unos ejemplos:
( SLI DE_I MAGE 0 0 10 10 " pl ant a" )
( SLI DE_I MAGE 1 0 12 45 " c: / dcl / f ot os/ pl ant a. l sd" )
( SLI DE_I MAGE 0 0 100 100 " c: \ \ dcl \ \ f ot os\ \ f ot os1( pl ant a) " )
Con respecto a la altura y la anchura de la foto, se puede pensar que puede resultar un poco
complicado calcularlas, ya que en DCL se miden las distancias en caracteres y nunca sabremos
exactamente cunto darle a cada valor, porque el resultado final es un tanto arbitrario. Para
ahorrarnos dicho clculo, podemos hacer que AutoLISP calcule por nosotros ambas medidas.
Esto se realiza con las dos siguientes funciones que explicamos.
( DI MX_TI LE X clave)
y
( DI MY_TI LE X clave)

Estas dos funciones de AutoLISP devuelven la anchura o dimensin X (DI MX_TI LE) y la altura o
dimensin Y (DI MY_TI LE) del elemento DCL cuya clave se indica. Podemos utilizarlo con cual-
quier tile, aunque habitualmente se usan con los que implican imgenes.
El origen de la casilla siempre se considera el vrtice superior izquierdo. Los valores devueltos
son siempre relativos a ese origen, por eso hay que considerarlos hacia la derecha y hacia
abajo. De esta manera podramos escribir una muestra de imagen con SLI DE_I MAGE as:
( SLI DE_I MAGE 0 0 ( DI MX_TI LE " casi l l a" ) ( DI MY_TI LE " casi l l a" ) " f ot o1. sl d" )
De esta forma no habremos de preocuparnos por calcular el ancho y el alto que debe ocupar la
foto.
Existe otra forma de utilizar estas dos funciones. Como sabemos tambin hay un elemento que
no es slo una imagen, sino un botn de imagen. Normalmente esta casilla de imagen se utili-
za como un simple botn, es decir, su designacin da lugar a una accin. Sin embargo, se
pueden definir regiones o zonas de la casilla, de manera que la accin que haya que efectuar
sea diferente segn en qu zona seala el usuario. El retorno de llamada de una casilla de
imagen, es la posicin X e Y del punto en que ha sealado el usuario. Esta posicin se puede
obtener de las variables $x y $y ya vistas. Examinando las dimensiones de la casilla, se averi-
gua en qu zona se ha sealado. Este mecanismo se utiliza por ejemplo en el cuadro de
DDVPOI NT para seleccionar los dos ngulos del punto de vista.
Por ejemplo, se dispone de una casilla de imagen cuya clave es vent anas y se desea conside-
rar cuatro zonas diferenciadas, todas del mismo tamao:
( ACTI ON_TI LE " vent anas" " ( sel _vent ana $x $y) " )
. . .
( DEFUN sel _vent ana ( x y)
- - ( SETQ mi t adx ( / ( DI MX_TI LE " vent anas" ) 2) mi t ady ( / ( DI MY_TI LE " vent anas" ) 2) )
- - ( COND
- - - - ( AND ( < x mi t adx) ( > y mi t ady) ) ( SETQ acci n " I I " ) )
- - - - ( AND ( < x mi t adx) ( < y mi t ady) ) ( SETQ acci n " SI " ) )
- - - - ( AND ( > x mi t adx) ( > y mi t ady) ) ( SETQ acci n " I D" ) )
- - - - ( AND ( > x mi t adx) ( < y mi t ady) ) ( SETQ acci n " SD" ) )
- - )
)

La accin asignada a la casilla vent anas es la funcin sel _vent ana que tiene dos variables
dependientes x e y. Al sealar en la casilla, las variables $x y $y devuelven las coordenadas
del punto de sealamiento, siempre referidas al origen en el vrtice superior izquierdo de la
casilla. La funcin sel _vent ana se ejecuta con esos dos valores como variables dependientes o
asociadas. Calcula en primer lugar la mitad de tamao en X y en Y de la casilla. A continuacin
examina los valores de las variables x e y que son las devueltos por $x y $y. En funcin de que
las coordenadas del punto sealado sean mayores o menores que las de la mitad de la casilla,
tanto en X como en Y, se averigua en qu cuadrante ha sealado el usuario. La variable ac-
ci n almacenar el resultado como una cadena de texto con las iniciales combinadas de infe-
rior, superior, izquierda y derecha.
( FI LL_I MAGE X Y anchura altura color)
Esta funcin rellena con un color plano uniforme la casilla inicializada con START_I MAGE. Hemos
de indicar tambin un origen en X y en Y y una altura y anchura (normalmente con las dos
funciones vistas anteriormente).
El argumento color especifica el color de AutoCAD (0 a 255) con el que se realizar el relleno.
Adems es posible indicar un nmero de color lgico segn se indica en la siguiente tabla:
Color lgico ------- Significado
--------------------------------------------------------------------------------
-2 ----------------- Color de fondo actual de la pantalla grfica de AutoCAD.
-15 ---------------- Color de fondo del letrero de dilogo actual.
-16 ---------------- Color de primer plano (del texto) del letrero de dilogo actual.
-18 ---------------- Color de lneas del letrero de dilogo actual.
As podremos, por ejemplo, hacer que desaparezca una casilla de imagen rellenndola con el
color de fondo del letrero, o eliminar una foto representada para representar otra (sino se su-
perpondran).
( END_I MAGE)

Simplemente finaliza la gestin de un cuadro de imagen.
Por lo tanto podramos resumir el proceso principal de gestin de una imagen as, por ejemplo:
( START_I MAGE " cl avei mg" )
( SLI DE_I MAGE 0 0 ( DI MX_TI LE " cl avei mg" ) ( DI MY_TI LE " cl avei mg" ) " f ot o" )
. . .
( END_I MAGE)
Cdigo AutoLISP 2 HELICE-POL.LSP (segunda parte)
lisp2-2.zip

Comentarios al cdigo AutoLISP 2 HLICE-POL.LSP (segunda parte)
Tras lo ya comentado, aqu definimos las dos primeras funciones internas de accin. En cada
una de ellas se inicializa la casilla de imagen definida en el archivo DCL. A continuacin se re-
llena de negro (color con el que se defini). Esto se hace porque, al cambiar entre radios igua-
les y diferentes queremos que la foto vare, presentndose as una hlice recta o una hlice
cnica segn el caso. Por eso debemos hacer un relleno de negro, para que al cambiar de foto
no se superponga a la que anteriormente haba.
Despus se muestra la imagen correspondiente una u otra y se finaliza con END_I MAGE. Por
ltimo, se utiliza MODE_TI LE para activar o desactivar la casilla del radio final segn convenga.
NOTA: Aprciese la utilizacin de DI MX_TI LE y DI MY_TI LE.
NOTA: Un truco para sacar las fotos en AutoCAD, las cuales luego rellenarn casillas de im-
genes en cuadros de dilogo, es minimizar la sesin y ajustar la ventana del programa lo ms
posible a una equivalencia al cuadro que contendr la imagen (a escala mayor). Si no hacemos
esto, la foto se sacar en un formato que nada tiene que ver con el de la casilla en cuestin y,
probablemente, se ver pequea o descentrada.
Cdigo AutoLISP 2 HELICE-POL.LSP (tercera parte)
lisp2-3.zip
Comentarios al cdigo AutoLISP 2 HLICE-POL.LSP (tercera parte)
Una vez establecidas las acciones para el cuadro de imagen, se definen las restantes, es decir
la del paso y la de la altura. En este caso, nicamente se habilitan o inhabilitan las casillas co-
rrespondientes segn el caso.
Despus se define la funcin que controla los errores introducidos en el cuadro de dilogo al
pulsar el botn Aceptar. Esto se hace de manera anloga al primer ejemplo explicado.
Por ltimo, se define la funcin de aceptacin. Lo que hace sta es, primero asignar a las va-
riables correspondientes los valores capturados de las casillas del paso y de la altura. Segun-
do, realiza lo mismo con las variables op1, op2 y op3. Tercero, extrae el valor de op2 (el de la
precisin) y, segn dicho valor, asigna una precisin u otra a la variable pv que se utilizar
despus en el dibujado de la hlice. Al final, se acaba con DONE_DI ALOG y se asignan los valo-
res pertinentes de las variables que se utilizan para guardar los valores por defecto a las va-
riables que se usarn en la rutina de dibujo.
NOTA: Ntese que si los valores de la lista desplegable no hubieran sido cadenas con texto (8
ptos., 16 ptos., etc.), sino cadenas con un valor simple (8, 16...), podramos haber capturado
directamente el valor actual designado con la variable $val ue de ACTI ON_TI LE y asignrselo
como tal (pasndolo a valor numrico) a la variable pv.
Como ya hemos comentado, mientras un cuadro de dilogo est activo no se pueden realizar
operaciones de dibujo en el rea grfica. Cuando se ejecuta un programa AutoLISP como el
que estamos viendo, tras leerse el principio, se queda "esperando" en el START_DI ALOG hasta
que se produzca un DONE_DI ALOG y un final de letrero, realizando las llamadas a las subrutinas
necesarias en cada momento. Sin embargo, hasta que el cuadro no est cerrado del todo no se
puede realizar ningn proceso ms. Esto es, cuando se produce el DONE_DI ALOG, el control se
devuelve a la siguiente instruccin de START_DI ALOG y es entonces cuando el cuadro estar
perfecta y completamente cerrado.
Si hubiramos puesto la llamada a la subrutina de dibujo (Di buj ar _Hl i ce) despus del DO-
NE_DI ALOG (en la rutina Acept ar ), el cuadro no habra estado cerrado por completo, por lo que
no se dibujara la hlice y se producira un mensaje de error. Al colocar susodicha llamada in-
mediatamente despus de START_DI ALOG, se produce el DONE_DI ALOG, se devuelve el control a
START_DI ALOG y, ahora, el cuadro ya est cerrado, pudindose realizar la llamada y el consi-
guiente proceso de dibujado de la hlice.
La razn para la inclusin de la comparacin con el I F es que, si sale con el cdigo 1 de DO-
NE_DI ALOG es que viene el control de la rutina de aceptacin, por lo que proseguir el progra-
ma; si sale con un cdigo distinto (0 en este caso) es que se ha pulsado Cancelar, por lo que
no se proseguir el programa.
Cdigo AutoLISP 2 HELICE-POL.LSP (ltima parte)
lisp2-4.zip

Comentarios al cdigo AutoLISP 2 HLICE-POL.LSP (ltima parte)
Por ltimo, se define la rutina de dibujo, la de control de errores en tiempo de corrida y la que
define el nuevo comando HLI CE de AutoCAD 14.
Existe una funcin ms de gestin de imgenes de cuadros de dilogo que no hemos visto por
no estar incluida en el ejemplo. Vemosla ahora:
( VECTOR_I MAGE X1 Y1 X2 Y2 color)

La funcin AutoLISP VECTOR_I MAGE dibuja un vector en la casilla de imagen cuyo proceso se
haya iniciado mediante START_I MAGE.
Para el dibujo de dicho vector se indican unas coordenadas X e Y de origen (argumentos X1 e
Y1), unas coordenadas X e Y de destino (argumentos X2 e Y2) y un color (argumento color).
Las coordenadas siempre referidas al vrtice superior izquierdo de la casilla de imagen; el co-
lor puede ser cualquiera de los de AutoCAD o cualquiera de los colores lgicos expuestos en la
tabla de la funcin FI LL_I MAGE.
Esta funcin se puede utilizar para representar dibujos sencillos en las casillas o para dividirlas
en cuadrantes, por ejemplo.
ONCE.16.4. Gestin de casillas de lista y listas
desplegables
Al igual que lo visto hasta ahora, existen tambin tres funciones especficas para el manejo de
casillas o cajas de listas y de listas desplegables. En este tipo de elementos del letrero, el pro-
grama de control AutoLISP debe tener acceso por un lado a la lista completa asignada al ele-
mento y, por otro lado debe disponer de un retorno de llamada que especifique el elemento o
elementos de la lista designados por el usuario.
La diferencia entre ambos elementos es que en las casillas con listados es posible permitir va-
rias designaciones al tiempo, mientras que en las listas desplegables slo es posible una.
Las funciones en concreto las veremos a enseguida y, para ello, vamos a utilizar un pequeo
ejemplo de prueba cuyo cdigo DCL se muestra a continuacin del cuadro en s.
Letrero 3

Cdigo DCL 3 PRUEBA.DCL
dcl3.zip
Antes de ver el ejemplo en AutoLISP vamos a explicar estas tres funciones de control de cua-
dros de lista y listas desplegables.

( START_LI ST clave [operacin [ndice]])
Esta funcin START_LI ST inicia el proceso de control de una lista de casilla o desplegable. Ha
de encontrarse situada entre NEW_DI ALOG y START_DI ALOG.
El argumento clave suministra la clave o atributo key del elemento en cuestin. Por su lado,
operacin es un nmero entero que puede tener uno de los valores siguientes:
Operacin --- Significado
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1 Cambiar contenido seleccionado de la lista.
2 Aadir nueva entrada a la lista.
3. Suprimir lista actual y crear una nuevo (es el valor por defecto).
Estos valores de operacin controlan la manera en que sucesivas funciones ADD_LI ST (que
ahora veremos) van a modificar la lista. El argumento ndice slo tiene efecto si se ha indica-
do un cdigo 1 para operacin. En este caso, ndice especifica el nmero de orden (comen-
zando desde 0 como sabemos) del elemento de la lista que ser cambiado en la posterior utili-
zacin de ADD_LI ST. Veamos un ejemplo:
( START_LI ST " l i st aobj et os" 1 4)
- - ( ADD_LI ST " Obj et o1" )
( END_LI ST)
Este ejemplo cambia el elemento quinto de la casilla por uno nuevo denominado Obj et o1.
Otro ejemplo:
( SETQ Li st aObj s ( " Obj et o1" " Obj et o2" " Obj et o3" ) )
( START_LI ST " l i st aobj et os" 2)
( MAPCAR ADD_LI ST Li st aObj s)
Este ejemplo aade varios elementos al final de la lista ya existente.
ltimo ejemplo:
( SETQ Li st aObj s ( " Obj et o1" " Obj et o2" " Obj et o3" ) )
( START_LI ST " l i st aobj et os" )
( MAPCAR ADD_LI ST Li st aObj s)
Este ejemplo reemplaza todos los elementos de la lista existente por los de la lista proporcio-
nada. Se podra haber indicado el ndice 3.
NOTA: No es posible eliminar o insertar en medio un elemento nuevo en la lista. Para hacerlo
habra que reconstruir la lista desde el primer elemento.
( ADD_LI ST cadena)

Esta funcin realiza una u otra funcin segn el cdigo de operacin explicado en START_LI ST.
Slo se puede incluir una cadena por cada ADD_LI ST. Para aadir ms de un elemento a una
lista, por ejemplo, habra que hacer sucesivas llamadas a ADD_LI ST.
( END_LI ST)
Finaliza el proceso de control de caja de lista o lista desplegable iniciado por START_LI ST.
Siempre ir la ltima tras sta y ADD_LI ST.
Por lo tanto, la manera genrica de utilizar estas tres funciones es:
( START_LI ST " l i st a" )
- - ( ADD_LI ST " cadena" )
( END_LI ST)
Veamos ahora pues el cdigo AutoLISP de nuestro ejemplo:
Cdigo AutoLISP 3 PRUEBA.LSP (primera parte)
lisp3-1.zip

Comentarios al cdigo AutoLISP 3 PRUEBA.LSP (primera parte)
En esta primera del cdigo en AutoLISP todava no se utilizan las funciones de cajas de listas y
listas desplegables, sino que se preparan dos lista para luego aadir a las predefinidas en el
archivo . DCL.
Se le pide al usuario el nmero de trminos que va a aadir a la caja de lista y, posteriormen-
te, el nmero de trminos que va a aadir a la lista desplegable. Para cada trmino se va soli-
citando un valor con el que se ir formando cada lista. Si es el primer valor se forma una lista
con l, en los sucesivos se van aadiendo trminos a la primera lista.
NOTA: La funcin APPEND an no la hemos estudiado, pero se puede deducir fcilmente se fun-
cionamiento.
Cdigo AutoLISP 3 PRUEBA.LSP (ltima parte)
lisp3-2.zip

Comentarios al cdigo AutoLISP 3 PRUEBA.LSP (ltima parte)
A continuacin de lo anterior, se inicializa el cuadro y los distintos elementos tambin. Adems
se declaran los ACTI ON_TI LE necesarios para el funcionamiento de los elementos con accin
asociada. Estos elementos son el botn Aceptar, el cul inicializar de nuevo lo elementos con
su valores originales y cerrar el cuadro; la caja de lista, en la que al seleccionar un elemento
se escribir su nmero de orden en la casilla de edicin inferior; y la lista desplegable, que
realiza lo mismo que la caja de lista en la casilla inferior a ella. Estas acciones las podemos ver
definidas en las subrutinas correspondientes; vase el funcionamiento y utilizacin de la varia-
ble $val ue.
La manera de aadir los elementos nuevos en la lista es la explicada en al teora. nicamente
explicar que se utiliza la funcin NTH que va cogiendo cada elemento de la lista por su nmero
de orden (empezando por el cero). Esta funcin se explicar en breve.
Por ltimo, se define el nuevo comando de AutoCAD Pr ueba.
14 fase intermedia de ejercicios
Desarrllese un programa AutoLISP para controlar y hacer funcionar cada uno de los cuadros
de dilogo de los ejercicios propuestos del MDULO DI EZ.

faltan ejercicios resueltos 1

ONCE.17. OTRAS FUNCIONES DE MANEJO DE
LISTAS
En la seccin ONCE.10. ya se explic una serie de funciones las cuales tenan como cometido
manejar listas. Ahora veremos un complemento a lo ya aprendido.
Las funciones que vamos a estudiar manejan listas de la misma forma que las mencionadas en
dicha seccin ONCE.10., pero stas son mucho ms completas y funcionales. Descubriremos
maneras de realizar trabajos, que antes podan resultar tediosos, de forma sencilla, rpida y
eficaz. Pero sobre todo, aprenderemos las funciones bsicas que luego nos permitirn acceder
a la Base de Datos interna de AutoCAD que, como ya se comentar, est estructurada en
forma de listas y sublistas.
Todo esto no quiere decir que hemos de olvidar las otras funciones de manejo de listas estu-
diadas, pues dependiendo del ejercicio que se deba realizar pueden ser tiles. Adems, ciertos
problemas nicamente pueden resolverse con ellas.
Comencemos pues con la primera de estas nuevas funciones, llamada ASSOC; su sintaxis es la
siguiente:
( ASSOC elemento_clave lista_asociaciones)
ASSOC busca el elemento especificado en elemento_clave en la lista especificada en lis-
ta_asociaciones; devuelve la lista asociada cuyo primer elemento es el especificado. Para
ello, esta lista debe ser una lista de asociaciones, es decir, que contenga sublistas incluidas
con elementos asociados, si no no funcionar.
Veamos un ejemplo sencillo. Supongamos una lista que contenga varias sublistas de asocia-
ciones y definida de la siguiente forma:
( SETQ mi l i st a ( LI ST ( l ar go 10) ( ancho 20) ( al t o 30) ) )
es decir, que el valor de la lista Mi Li st a es un conjunto de listas de asociacin. Las siguientes
funciones ASSOC devolveran lo que se indica:
( ASSOC l ar go mi l i st a) devuelve ( LARGO 10)
( ASSOC ancho mi l i st a) devuelve ( ANCHO 20
( ASSOC al t o mi l i st a) devuelve ( ALTO 30
( ASSOC vol umen mi l i st a) devuelve ni l
Veremos ahora otra tambin muy utilizada cuya sintaxis es:
( CONS primer_elemento lista)
Esta funcin toma la lista indicada y le aade un nuevo primer elemento, devolviendo la lista
resultante. As, si tenemos una lista definida de la manera siguiente:
( SETQ mi l i st a ( 10 20 30) )
podemos hacer:
( CONS 5 mi l i st a) devuelve ( 5 10 20 30)
Pero atencin; este comando aade el elemento y devuelve la lista completa, pero el cambio
no es permanente. Si queremos actualizar la lista para futuros usos, la manera sera:
( SETQ mi l i st a ( CONS 5 mi l i st a) )
Tambin, evidentemente podramos hacer algo como lo siguiente (sin ningn problema):
( SETQ l i st a3 ( CONS ( CAR l i st a1) ( CDR l i st a2) ) )
De esta forma, aadimos a la lista l i st a2 (exceptuando el primer elemento) el primer ele-
mento de la lista l i st a1. Todo ello lo guardamos en l i st a3.
Existe un modo particular de trabajar con la funcin CONS. Y es que si como argumento l i st a
no especificamos una lista, sino un valor concreto o el nombre de una variable definida, la fun-
cin construye un tipo especial de lista de dos elementos llamado par punteado (se denomina
as por tener un punto de separacin entre ambos elementos). Los pares punteados ocupan
menos memoria que las listas normales y son muy utilizados en la Base de Datos de Auto-
CAD. As:
( CONS cl ase 1) devuelve ( CLASE . 1)
( CONS nombr e ant oni o) devuelve ( NOMBRE . ANTONI O)
( CONS not a 5. 5) devuelve ( NOTA . 5. 5)
NOTA: A estos elementos de par punteado se accede directamente con las funcionas CAR (para
el primero) y CDR (para el segundo), no CADR.
( SUBST elemento_nuevo elemento_antiguo lista)
El cometido de esta funcin es sustituir un elemento de una lista. Para ello, busca en la lista
indicada como ltimo argumento (lista) el elemento indicado como segundo argumento
(elemento_antiguo) y lo sustituye por el elemento indicado como primer argumento (elemen-
to_nuevo).
Por ejemplo, la variable l i n contiene una lista que es el par punteado ( 8 . " 0" ) y queremos
cambiar su segundo elemento:
( SETQ l i n ( SUBST " pi eza" " 0" l i n) )
El nuevo par punteado ser ( 8 . " PI EZA" ) .
NOTA: Sin querer acabamos de ver un ejemplo en el que cambiamos a una lnea de capa, ya
que 8 es el cdigo de la Base de Datos de AutoCAD 14 para el nombre de la capa y se expre-
sa como una sublista de asociaciones (porque asocia un valor a un cdigo), que es un par pun-
teado. La mecnica bsica es sta, entre otras operaciones, pero ya lo veremos ampliamente
ms adelante. Sirva de introduccin.
La funcin siguiente APPEND rene todos los elementos de las listas especificadas en una sola
lista que los engloba. Su sintaxis es la siguiente:
( APPEND lista1 lista2...)
Veamos un ejemplos:
( APPEND ( e1 e2) ( e3 e4) ) devuelve ( E1 E2 E3 E4)
NOTA: Obsrvese que no se devuelve ( ( E1 E2) ( E3 E4) ) . Es decir, lo que rene son los ele-
mentos de las listas y no las listas mismas. As:
( APPEND ( e1 ( e2 e3) ) ( e4 ( e5) ) ) devuelve ( E1 ( E2 E3) E4 ( E5) )
ya que ( e2 e3) y ( e5) son sublistas que, en realidad, son elementos de las listas que los con-
tienen.
Los argumentos de APPEND han de ser siempre listas. Esto es lo que diferencia a esta funcin
de LI ST ya estudiada, que rene elementos sueltos y forma una lista. Es por ello que a
APPEND no se le pueda indicar como lista elementos de una lista extrados con CAR o CDR por
ejemplo. Habramos de formar listas previas con ellos para luego utilizarlas con esta funcin
APPEND.
NOTA: APPEND no funciona con pares punteados directamente.
Estas cuatro funciones vistas hasta aqu (ASSOC, CONS, SUBST y APPEND) son las ms habitua-
les en la gestin de la Base de Datos de AutoCAD. Veremos a continuacin otras tambin muy
interesantes.
( LENGTH lista)
Esta funcin devuelve la longitud de la lista indicada, es decir, su nmero de elementos. La
devolucin de LENGTH ser siempre un nmero entero, evidentemente. Veamos uno ejemplos:
( LENGTH ( 10 n es 14 5 o) ) devuelve 6
( LENGTH ( 10 20 ( 10 20 30) ) ) devuelve 3
( LENGTH ( ) ) devuelve 0
NOTA: LENGTH no funciona con pares punteados directamente.
( LAST lista)
Esta funcin devuelve el ltimo elemento de la lista especificada. Veamos unos ejemplos:
( LAST ( 10 n es 14 5 o) ) devuelve O
( LAST ( 10 20 ( 10 20 30) ) ) devuelve ( 10 20 30)
( LAST ( nombr e) ) devuelve NOMBRE
( LAST ( ) ) devuelve ni l
Aunque parezca evidente, LAST no es nada aconsejable para devolver la coordenada Z de una
lista que represente un punto. Y es que si el punto slo tuviera las coordenadas X e Y (punto
2D sin Z=0), LAST devolvera la Y. En cambio, con CADDR ya estudiado tenemos la seguri-
dad de obtener siempre la coordenada Z, pues devolvera ni l en caso de no existir.
NOTA: LAST no funciona con pares punteados directamente.
( MEMBER elemento lista)
MEMBER busca el elemento especificado en la lista indicada y devuelve el resto de la lista a par-
tir de ese elemento, incluido l mismo. Veamos algunos ejemplos:

( MEMBER x ( n h x s u w) ) devuelve ( X S U W)
( MEMBER d1 ( n d1 x d1 u) ) devuelve ( D1 X D1 U)
( MEMBER ( 3 4) ( ( 1 2) ( 3 4) 5) ) devuelve ( ( 3 4) 5)
Como vemos en el segundo ejemplo, si el elemento en cuestin se repite en la lista se toma la
primera aparicin.
Si el elemento buscado no existe, MEMBER devuelve ni l .
NOTA: MEMBER no funciona con pares punteados directamente.
( NTH nmero_orden lista)
NTH devuelve el elemento de la lista lista que se encuentre en la posicin nmero_orden.
Esta funcin puede resultar harto interesante a la hora de acceder a elementos "lejanos" en
una lista, ya que evitaremos el uso de las combinaciones de CAR y CDR que pueden dar lugar a
confusin.
Debemos tener en cuenta que el primer elemento de la lista para NTH es el 0, luego el 1, el 2,
etctera. Si la posicin especificada es mayor que la posicin del ltimo elemento de la lista,
NTH devuelve ni l . Vamos a ver algn ejemplo:
( NTH 2 ( 10 20 30) ) devuelve 30
( NTH 0 ( 10 20 30) ) devuelve 10
( NTH 1 ( 10 ( 10 20) 20) ) devuelve ( 10 20)
( NHT 3 ( 10 20 30) ) devuelve ni l
NOTA: NTH no funciona con pares punteados directamente.

( REVERSE lista)
REVERSE tiene como misin nica y exclusiva devolver la lista indicada con todos sus elemen-
tos invertidos en el orden. Ejemplos:
( REVERSE ( 10 20 30 40) ) devuelve ( 40 30 20 10)
( REVERSE ( x y ( 10 20) z) ) devuelve ( Z ( 10 20) Y X)
( REVERSE ( nombr e) ) devuelve ( NOMBRE)
( REVERSE ( ) ) devuelve ni l
NOTA: REVERSE no funciona con pares punteados directamente.
( ACAD_STRLSORT lista)
Toma la lista especificada, ordena las cadenas de texto contenidas alfabticamente y devuelve
la lista resultante. La lista slo puede contener cadenas entre comillas. Ejemplos:
( ACAD_STRLSORT ( " z" " s" " a" " g" " p" ) ) devuelve ( " a" " g" " p" " s" " z" )
( ACAD_STRLSORT ( " zar " " ai r e" " 12" " 4" ) ) devuelve ( " 12" " 4" " ai r e" " zar " )
( ACAD_STRLSORT ( " sol " " sal " " s" " s" ) ) devuelve ( " s" " s" " sal " " sol " )
NOTA: Como se puede observar, los nmeros se ordenan como las palabras, es decir, comen-
zando por el primer dgito, siguiendo con el segundo y as sucesivamente (tipo Windows).
NOTA: ACAD_STRLSORT no funciona con pares punteados directamente.
Para terminar vamos a ver un ejemplo de un programa que, aunque nicamente utiliza una de
las funciones vistas en esta seccin, puede resultar muy jugoso como ejemplo. A la hora de
estudiar el acceso a la Base de Datos de AutoCAD, ser cuando comencemos a sacar partido
de estas funciones. Por ahora, slo queda que el lector practique particularmente con ellas;
son muy sencillas de comprender.
El ejemplo que veremos se corresponde con un programa que permite dibujar tornillos norma-
lizados rpidamente. Este programa maneja un cuadro de dilogo, por lo tanto se proporciona
tambin el mismo, as como su cdigo DCL. El cuadro del programa es el siguiente:


A continuacin se muestra el cdigo DCL de este cuadro de dilogo en el siguiente archivo.
Como se puede apreciar, el cuadro posee varias reas para solicitar los datos necesarios al
usuario y as dibujar el tornillo. En el rea de la norma nicamente hay una lista desplegable
que slo posee una sola norma invariable (DIN 931), no se ha diseado para ms. Es por ello
que el contenido de esa lista lo aadimos en el cdigo DCL; los componentes de las dems
listas sern agregados en la rutina AutoLISP. Vemosla pues en el archivo siguiente.
Como vemos, el programa carga el cuadro de dilogo (tras las tpicas operaciones), as como
la foto (que evidentemente deberemos tener). Despus inicializa las listas y las rellena y relle-
na los dems elementos con valores por defecto.
Es interesante ver cmo maneja el cuadro las salidas con DONE_DI ALOG y START_DI ALOG, sobre
todo en el botn de designar un punto de insercin, que sale del letrero y vuele a entrar (con-
servando valores). El truco est en asignar a una variable la devolucin de START_DI ALOG (en
este caso SD) y controlar la pulsacin de cada botn mediante dicha variable (asignando un
nmero de salida a cada DONE_DI ALOG). Evidentemente, al volver a entrar en el cuadro tras
designar un punto de insercin, la variable ha de hacerse ni l (vase).
Otro tema interesante es el control de la carga o no del cuadro en memoria. Al volver a entrar
en el letrero despus de designar un punto de insercin, el cuadro no ha de cargarse en me-
moria de nuevo ya est cargado, sino simplemente mostrarse. Esto se controla averiguan-
do si existe ya o no un punto de insercin.
De la misma manera se controlan y se escriben las coordenadas de dicho punto de insercin
encima del botn para designar.
La manera de asignar valores de mtrica y longitud se realiza recurriendo a la funcin NTH,
vista en esta seccin. Con ella se extrae cada valor de cada lista y, previa conversin a valor
numrico entero, se asigna a la variable correspondiente. De esta forma tendremos la posibili-
dad de variar el mbito de valores de rango del programa simplemente cambiando unas cuan-
tas lneas.
Lo restante dice relacin al propio dibujo del tornillo, as como al control de errores tpico, tan-
to de DCL como del programa AutoLISP en s, y a funciones de "embellecimiento" del progra-
ma. Entre esta ltimas existe una que an no hemos estudiado, es GRAPHSCR. Se ha incluido
porque la veremos enseguida, en la siguiente seccin, con otras anlogas.
15 fase intermedia de ejercicios
Indicar el resultado de AutoLISP ante las siguientes proposiciones:
( ASSOC x ( ( t y u) ( r s e) ( x g f ) ( 12 34) ) )
( CONS ( CADR ( 14 56 45) ) ( CDR ( 34 56 78 65. 6) ) )
( CONS ( NTH 1 ( vi vo r esi do) ) ( aqu mi smo) )
( CONS t i po 32)
( SUBST 5 78 ( 45 32 78 2 4) )
( APPEND ( 12 er 45 f g) ( dr f r 54 3. 45) ( ( 12 34) ( df f r ) ) )
( LENGTH ( 23 hg 78 ( t y gh) 89 ( j u hg gf t 89) ed 34. 56 t ) )
( LAST ( yh yh hy yh) )
( LAST ( 12. 3 78. 87 ( 23. 45 54. 43) ) )
( MEMBER t 1 ( n 1 ( t 1 t 2) 1) )
( NTH 4 ( c1 cd c4 cf c5 g6 hy7 ( f r 45) ) )
( NTH 3 ( 12 34. 43 56) )
( REVERSE ( mi smo aqu r esi do) )
( ACAD_STRLSORT ( " as" " aw" " h" " per r o" " per r a" " 12" " 01" " 02" ) )
ONCE.18. MISCELNEA DE FUNCIONES TILES
Se ha querido incluir esta seccin aqu por aquello de que vamos a estudiar una serie de fun-
ciones que, sin bien no pueden englobarse en un grupo general, son muy tiles a la hora des-
arrollar programas mnimamente presentables. Es tiempo ahora, una vez aprendida la base y
algo ms de la programacin en AutoLISP, de que comencemos a hurgar un poco ms pro-
fundo en el acceso a las caractersticas de AutoCAD.
Con estas nuevas funciones podremos forzar la aparicin de la ventana de texto de AutoCAD,
visualizar la versin numrica e idiomtica del programa y etctera. Comenzamos.
ONCE.18.1. Asegurndonos de ciertos datos
( GRAPHSCR)

Esta funcin no tiene argumentos y su utilidad es conmutar a pantalla grfica. Tiene el mismo
efecto que pulsar F2 mientras se est en el modo de pantalla de texto. Si ya estamos en pan-
talla grfica, simplemente se queda como est.
Se utiliza para asegurarnos de que AutoCAD se encuentra en pantalla grfica cuando es preci-
so procesar objetos de dibujo. Como hemos visto la hemos utilizado en el ltimo ejemplo,
aunque en ese caso no hara falta, pues al arrancar un cuadro de dilogo siempre se conmuta
a pantalla grfica automticamente.
En configuraciones con dos pantallas, una grfica y otra de texto, esta funcin no tiene efecto.
( TEXTSCR)

Esta funcin no tiene argumentos y su utilidad es conmutar a pantalla de texto. Tiene el mis-
mo efecto que pulsar F2 mientras se est en el modo de pantalla grfica. Si ya estamos en
pantalla de texto, simplemente se queda como est.
Se utiliza para asegurarnos de que AutoCAD se encuentra en pantalla de texto cuando es pre-
ciso mostrar listados de capas, objetos, propiedades, etc. De esta forma, por ejemplo, para
mostrar una lista de todos los objetos designados deberamos utilizarla, ya que con una confi-
guracin de dos o tres lneas en lnea de comandos (que viene a ser lo tpico) no se vera nada.
Y as, adems, evitamos que el usuario tenga que pulsar F2 al aparecer la lista. Algunos co-
mandos de AutoCAD (LI ST por ejemplo) as lo hacen.
En configuraciones con dos pantallas, una grfica y otra de texto, esta funcin no tiene efecto.
( TEXTPAGE)
TEXTPAGE conmuta a pantalla de texto, de manera similar a TEXTSCR. La diferencia radica en
que TEXTPAGE efecta adems un borrado o limpiado de pantalla, es decir, el cursor se sita al
principio de la pantalla de texto.

Esta funcin resulta til cuando se escriben listados y no se desea el efecto de scroll o persiana
en la pantalla.
( VER)
VER es una funcin de AutoLISP sin argumentos y meramente informativa. Devuelve una ca-
dena de texto que contiene el nmero de versin actual y dos letras entre parntesis que indi-
can el idioma de la misma, adems de un texto fijo.
Por ejemplo, en una versin en castellano de AutoCAD 14, VER devolvera:
" Aut oLI SP Ver si n 14. 0 ( es) "
y en una versin inglesa devolvera:
" Aut oLI SP Rel ease 14. 0 ( en) "
VER se suele utilizar para comparar la compatibilidad entre programas. Por ejemplo, imagine-
mos que hemos diseado un programa en AutoLISP 14 que utiliza funciones inherentes que no
existan en la versin 13. Lo primero que podra hacer el programa es comprobar el texto que
muestra la funcin VER para obtener el nmero de versin. Si no es la 14 mostrara un mensa-
je de error y acabara.
Otra utilidad sera capturar el idioma y, dependiendo de que sea uno u otro, escribir determi-
nados textos en dicho idioma.
ONCE.18.2. Acceso a pantalla grfica

( GRCLEAR)
NOTA: Esta funcin se encuentra obsoleta en la versin 14 de AutoCAD, esto es, no realiza su
funcin. An as, se mantiene por compatibilidad con programas escritos para versiones ante-
riores. En AutoCAD 14 simplemente devuelve ni l , sin efecto alguno aparente. En versiones
anteriores realizaba la funcin que aqu se expone a continuacin.
GRCLEAR despeja la pantalla grfica actual. El efecto es el mismo que utilizar, por ejemplo, el
comando MI RAFOTO de AutoCAD para mostrar una foto sin objeto alguno, es decir, "en blan-
co". Se puede volver luego a la situacin actual con un simple redibujado.
Esta funcin slo afecta al rea grfica, no a la lnea de estado, lnea de comandos o rea de
men de pantalla.
( GRDRAWinicio fin color [resaltado])

Esta funcin dibuja un vector virtual en el rea grfica de la pantalla, entre los dos puntos indi-
cados en inicio y fin. Los puntos, como siempre, son listas de dos o tres nmeros reales; las
coordenadas se refieren al SCP actual del dibujo.
El vector de visualiza con el color especificado nmero entero por el tercer argumento (co-
lor). Si se indica 1 como nmero de color, el vector se visualiza como tinta XOR ("O exclusi-
vo"), es decir, se complementa al dibujarse por encima de algo y se suprime si se dibuja algo
nuevo por encima de l.

Si se especifica un argumento resaltado diferente a ni l , el vector se visualiza destacado como
vdeo inverso, brillo, lnea de trazos u otro sistema.
Los vectores dibujados con esta funcin son virtuales como ya se ha dicho es decir, no
forman parte del dibujo y desaparecern con un redibujado o una regeneracin. Ejemplo:
( GRDRAW ( 50 50) ( 200 200) 1 T)
( GRVECS lista_vectores [transformacin])
Permite dibujar en pantalla una serie de vectores virtuales. El primer argumento lis-
ta_vectores es una lista con el color para los vectores y sus coordenadas inicial y final. El
ejemplo siguiente dibuja un cuadrado de 10 10 con cada lnea de un color diferente:

( GRVECS ( 2 ( 10 10) ( 20 20)
- - - - - - - - - - - - 4 ( 20 10) ( 20 20)
- - - - - - - - - - - - 1 ( 20 20) ( 10 20)
- - - - - - - - - - - - 3 ( 10 20) ( 10 10)
- - - - - - - - - )
)
El primer color especificado (2 en el ejemplo) se aplicar a los vectores siguientes dentro de la
lista hasta que se indique otro color. Si el valor del color es mayor de 255, se dibujarn en
tinta XOR; si es menor de 0, el vector quedar resaltado segn el dispositivo de visualizacin,
normalmente en lnea discontinua.
El segundo argumento, optativo, es una matriz de transformacin que aplicada a la lista de
vectores, permite cambiar el emplazamiento y la escala de los vectores que se generarn. Por
ejemplo:
( ( 2. 0 0. 0 0. 0 30. 0)
- - - ( 0. 0 2. 0 0. 0 45. 0)
- - - ( 0. 0 0. 0 2. 0 0. 0)
- - - ( 0. 0 0. 0 0. 0 1. 0)
)
Esta matriz, aplicada al ejemplo anterior, dibujara un cuadrado al doble de su tamao y a 30
unidades de desplazamiento en X y 45 en Y.
( GRTEXT [rectngulo texto [resaltado]])
Esta funcin se utiliza para escribir textos virtuales en las reas de texto de la pantalla grfica
de AutoCAD. Segn en cul de las tres reas de texto se quiera escribir, se utilizar la funcin
de manera diferente.
rea del men de pantalla.
Se indica el nmero de casilla del rea de men. Este nmero debe ser un entero positivo 0.
Las casillas se numeran de arriba abajo empezando por el 0, hasta el nmero mximo de l-
neas permitidas por la interfaz grfica. Por ejemplo una tarjeta grfica VGA permite hasta 26
lneas en esta rea del men; por lo tanto las casillas se numeran de 0 a 25.
Una vez indicado el nmero de casilla, se especifica el texto (entre comillas) que se desea vi-
sualizar en esa casilla. El texto se truncar si no cabe entero en la casilla, o se completar con
blancos en el caso de que sobren caracteres.
Si se indica el argumento resaltado (debe ser un nmero entero) y su valor es diferente de 0,
el texto se pondr de relieve en la casilla correspondiente. Si su valor es 0, el texto vuelve a su
visualizacin normal. Al indicar un argumento de resaltado, no cambia el texto de la casilla
sino slo su visualizacin. Por ejemplo:
( GRTEXT 8 " HOLA" )
( GRTEXT 8 " QU TAL" 1)
La primera utilizacin de GRTEXT escribe el texto HOLA en la casilla 8. En la segunda utilizacin
se produce un resaltado en esa casilla, pero el texto sigue siendo HOLA, no ha cambiado. Por
eso hay que escribir primero el texto que se desee y despus resaltarlo:
( GRTEXT 8 " HOLA" )
( GRTEXT 8 " HOLA" 1)
En este caso, para poner de relieve el texto de la casilla 8, se ha indicado el mismo texto que
ya tiene escrito. Si se suministra un valor de texto diferente, se pueden producir comporta-
mientos anmalos del programa en AutoLISP.
El texto escrito en la casilla indicada es virtual, no modifica la opcin de men contenida deba-
jo. En cuanto se cambie de submen o se produzca un redibujado del rea de men, desapa-
recern los textos virtuales escritos con GRTEXT. Como el men de pantalla suministrado por
AutoCAD utiliza hasta 26 lneas, todo lo que se escriba ms abajo con GRTEXT si hay sitio,
permanecer normalmente en pantalla. La variable de AutoCAD SCREENBOXES almacena el
nmero de casillas disponibles.
Lnea de estado (rea de modos)
Para visualizar un texto en la lnea de estado, en el rea donde se escriben los modos activa-
dos, rejilla, forzado de cursor, etc., hay que especificar un nmero de casilla - 1. La longitud
mxima del texto depende de la tarjeta grfica (generalmente se admiten ms de 40 caracte-
res). El argumento de resaltado no tiene efecto. Normalmente el texto se situar a la izquierda
del rea de coordenadas. Cualquier actuacin sobre los modos eliminar el texto.
( GRTEXT - 1 " DI SEO ASI STI DO POR ORDENADOR" )
Lnea de estado (rea de coordenadas)
Para escribir el texto en la lnea de estado, en la zona de visualizacin de coordenadas, hay
que indicar un nmero de casilla - 2. El argumento de resaltado no tiene efecto. Para que se
vea el texto, debe estar desactivado el seguimiento de coordenadas. En cuanto se active o se
acte sobre los modos, se eliminar el texto.
( GRTEXT - 2 " EJ ECUTANDO Aut oLI SP" )

Por ltimo, si se llama a GRTEXT sin argumentos, se restablecern todas las reas a su estado
original, desapareciendo todos los textos virtuales que se hayan escrito.
ONCE.18.3. Lectura de dispositivos de entrada
( GRREAD [seguimiento] [claves [tipo_cursor]])

Esta funcin permite la lectura directa de dispositivos de entrada. Si se suministra el argumen-
to seguimiento con un valor diferente de ni l , se activa la lectura continua de dispositivos se-
aladores en movimiento. En este caso GRREAD acepta el primer valor del dispositivo, sin espe-
rar a que se pulsen botones selectores.
El segundo argumento claves deber ser un nmero entero con los siguientes valores posi-
bles:
Clave ------ Significado
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
1 ------ Devuelve las coordenadas en modo arrastre, segn la posicin del cursor.
2 ------ Devuelve todos los valores de las teclas y no desplaza el cursor cuando se pulse una
tecla de cursor.
4 ------ Utiliza el valor del tercer argumento tipo_cursor.
8 ------ Omite el mensaje de error:console break cuando se pulsa CTRL+C.
El tercer argumento tipo_cursor establece el tipo de cursor con tres valores posibles:
Tipo ------- Significado
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
0 ------- Muestra el cursor en cruz habitual.
1 ------- Omite el cursor.
2 ------- Muestra en el cursor la mira de designacin de objetos.
En todos los casos GRREAD devuelve una lista cuyo primer elemento es un cdigo que indica el
tipo de dato que viene a continuacin. El segundo elemento es el dato concreto que se trate.
Los cdigos son los de la tabla de este archivo:
NOTA: Para poder utilizar convenientemente estas ltimas funciones es necesario estudiar el
acceso a la Base de Datos de AutoCAD, cosa que se ver en su momento oportuno. Ser en-
tonces cuando se proponga un ejemplo explicativo.
ONCE.18.4. Atribuir expresin a smbolo literal
( SET smbolo_literal expresin)
La funcin SET no es muy utilizada, por lo que se propone aqu ya que es interesante verla.
SET atribuye el valor de una expresin especificada a un literal de un smbolo. Este smbolo se
considera sin evaluar. La diferencia de SET con SETQ es que aqu se atribuye o asocia el valor
de la expresin al literal del smbolo, haciendo ambos equivalentes. Con SETQ se almacena,
como sabemos ya, valores en smbolos de variables no literales. Veamos un ejemplo. Si hace-
mos primero:
( SET x a)
y luego:
( SET x 25)
atribuimos al smbolo x el valor del smbolo a. Si extraemos el valor asociado a x:
! x
AutoLISP devolver:
A
Si extraemos ahora el valor de a:
! a
AutoLISP devolver:

25
16 fase intermedia de ejercicios
Responder a las siguientes preguntas:
Qu funcin AutoLISP nos permite cambiar a pantalla grfica?
Y a pantalla de texto?
Para qu se utilizan ambas?
Qu devolvera la funcin VER en AutoCAD 14 versin americana?
Qu diferencia hay entre SET y SETQ?
ONCE.19. ACCESO A OTRAS CARACTERSTICAS
En su momento estudiamos el acceso a variables de AutoCAD, a comandos externos, a aplica-
ciones, etctera. As mismo, acabamos de ver el acceso a la pantalla grfica. Lo que en esta
seccin se tratar es el acceso a otras caractersticas del programa, como pueden ser los me-
ns desplegables, la tableta digitalizadora, los modos de referencia a objetos o los archivos de
ayuda (visto esto ltimo por encima en el MDULO SEI S, sobre creacin de archivos de ayu-
da).
ONCE.19.1. Modos de referencia
Empezaremos por los modos de referencia, aplicacin que nos permitir manejar esta caracte-
rstica de AutoCAD en determinados momentos.
( OSNAP punto modo)
Esta funcin aplica el modo o modos de referencia indicados al punto especificado. OSNAP de-
vuelve un punto como resultado. El modo ser una cadena de texto, por lo que habr de ir
entre comillas. Si se indican varios modos, estos irn separados por comas. Un ejemplo:
( SETQ Punt oMedi o ( OSNAP ( 10 10 0) " med" )
Esto equivaldra a haber seleccionado un modo de referencia Punto medio y haber sealado
con el cursor en el punto indicado. Como sabemos, dependiendo del valor del punto de mira de
los modos de referencia (variable APERTURE), si se encuentra un objeto dentro de dicha mirilla,
su punto medio quedara almacenado en la variable Punt oMedi o. En caso de no encontrar nin-
gn objeto o no existir un punto medio. devuelve ni l .
NOTA: No confundir el valor APERTURE de la mirilla (cruceta) de modos de referencia a objetos,
con el valor PI CKBOX de la mira (cuadrado) de designacin de objetos. La mira de referencia
acta de la siguiente forma: cuando tenemos un modo de referencia a objetos activado, por
ejemplo el Punto medio, al pasar cerca de objetos, la mira captura o se "engancha" a sus pun-
tos medios (aparece el marcador triangular si la caracterstica AutoSnap est activada). Lo
"cerca" que ha de pasar para que esto ocurra es precisamente el tamao de dicha mirilla.
Se observa entonces que el hecho de que se encuentre o no el punto buscado depende en gran
medida del valor actual de la variable APERTURE. Un valor demasiado pequeo dificulta la ope-
racin; un valor demasiado grande puede atrapar otro punto prximo que no interese.
La tcnica mejor que impone la costumbre no consiste en ampliar o reducir el valor de APER-
TURE en tiempo de ejecucin, sino el asegurar siempre que se pueda puntos reales de los
objetos. Por ejemplo, si dibujamos una lnea y queremos guardar en una variable su punto
medio, porque luego nos interesa, lo lgico es proporcionarle a OSNAP un punto conocido de la
lnea:
( COMMAND " _l i ne" ( 0 0) ( 100 100) " " )
As dibujamos la lnea. Ahora guardaremos su punto medio en la variable Pt oMed:
( SETQ Pt oMed ( OSNAP ( 100 100) " _mi d" ) )
De esta manera podremos dibujar ahora, por ejemplo, un crculo con centro en el punto medio
de la lnea:
( COMMAND " _ci r cl e" Pt oMed 25)
Al indicar un punto de la lnea, APERTURE siempre lo va a englobar, por muy baja que est de-
finida, ya que es un punto exacto coincidente pues con el cruce de los ejes del cursor.
NOTA: Se observa que los modos de referencia son cadenas que llaman a los modos incluidos
en AutoCAD 14, por lo que dependiendo de la versin idiomtica del programa habremos de
introducirlos en un idioma o en otro. Existe la posibilidad, como vemos, de especificarlos con el
guin bajo de subrayado para cualquier versin en cualquier idioma.
Como hemos dicho, si queremos aplicar ms de un modo de referencia a la funcin OSNAP,
hemos de especificarlos entre comas:
( SETP PI n ( OSNAP Pt o1 " med, i nt , f i n" ) )
NOTA: Los modos pueden introducirse con su nombre completo o con su abreviatura por con-
venio. As, valdra igual medi o que med.
La variable que controla los modos de referencia actualmente activados en AutoCAD es OSMO-
DE. Esta variable ya la hemos utilizado en algn programa, accediendo a ella para guardar su
valor, estableciendo otro y recuperando el valor inicial al terminar el programa.
OSMODE representa los modos almacenados como fijos con los comandos REFENT (OSNAP en
ingls) o DDOSNAP. Estos modos se pueden cambiar con REFENT (OSNAP), que abre el mismo
cuadro de dilogo que DDOSNAP o, desde la lnea de comandos, con REFENT (- OSNAP en ver-
siones inglesas), introduciendo el guin (- ) para ello. Desde lnea de comandos se introducen
como con la funcin OSNAP de AutoLISP, con trminos literales (aqu sin comillas) y separados
por comas si hay ms de uno.
Pero lo ms lgico de un programa en AutoLISP es acceder a la variable OSMODE y cambiar su
valor, para as variar los modos establecidos como fijos. Los valores posibles para OSMODE son
los de esta tabla:
Hay que tener en cuenta que el modo Rpido no puede establecerse aisladamente sino en
combinacin con algn otro modo de referencia, evidentemente.
Los modos con OSMODE se establecen sumando valores; as Punto medio, Insercin, Tangente y
Cuadrante activados, daran un valor para la variable de 338 (2 + 64 + 256 + 16).
Tengamos tambin en cuenta que en sucesivas llamadas a OSMODE (que haremos con GETVAR y
SETVAR evidentemente) los modos no se acumulan. As si una vez le hemos dado un valor de
12 para activar Punto y Centro, si posteriormente le damos 1 para activar Punto final, los dos
anteriores se eliminarn y slo quedar activado el ltimo. Para anular todos ellos, utilizare-
mos el modo Ninguno (valor 0 para OSMODE).
Las siguientes lneas suelen ser tpicas en muchos programas. Al iniciar:
. . .
( SETQ Modos ( GETVAR " osmode" ) )
( SETVAR " osmode" 1)
. . .
Se guarda en una variable la actual configuracin de modos de referencia y se especifica la
que nos interesa. Y al acabar el programa (sea naturalmente o en rutina de control de erro-
res):
. . .
( SETVAR " osmode" Modos)
. . .
Para restituir la configuracin primitiva del usuario y ste no aprecie nada.
Veamos ahora un mtodo que tenemos bastante completo de redibujado de objetos.
ONCE.19.2. El redibujado
( REDRAW[nombre_entidad [modo]])
La funcin REDRAWefecta un redibujado total al igual que el comando de AutoCAD de
toda de ventana grfica actual si se suministra sin argumento alguno:
( REDRAW)
Si se indica un nombre de entidad solamente se redibujar esa entidad. Para especificar dicho
nombre habremos de extraerlo de la lista de definicin de la entidad en Base de Datos, cosa
que se ver ms adelante.
Si se ha despejado la ventana grfica con la funcin GRCLEAR (ya estudiada en la seccin ON-
CE.18.2.), con REDRAWse pueden redibujar las entidades que se deseen y slo ellas se harn
visibles en pantalla. Por ejemplo, si en un dibujo de circuitera electrnica se desea averiguar
cuntos bloques de un componente determinado se encuentran insertados, se extrae de la
Base de Datos del dibujo todas las inserciones de bloque (se ver), se despeja la pantalla de
GRCLEAR y se redibujan con REDRAWslo las entidades capturadas.
Si adems de un nombre se suministra el argumento modo, se puede controlar la manera en
que se hace el redibujado, de acuerdo a la tabla siguiente:
Modo ------- Efecto
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

1 ----------- Redibuja la entidad en pantalla.
2 ----------- Elimina la entidad de la pantalla, es decir, la oculta. Reaparece con 1.
3 ----------- Visualiza la entidad en relieve (vdeo inverso o doble intensidad).
4 ----------- Suprime la visualizacin en relieve.

Si el nombre de la entidad indicado se corresponde con un objeto compuesto (bloque con atri-
buto, polilnea no optimizada...), el efecto de REDRAWse extiende a sus componentes simples.
Sin embargo, si el cdigo de modo se indica con signo negativo (- 1, - 2, - 3 4), el efecto de
REDRAWslo afectar a la entidad principal.
Esta funcin es muy utilizada en el manejo de la Base de Datos del programa. Veremos ahora
TRANS, que tambin se usa mucho en dicho menester.
ONCE.19.3. Transformacin entre Sistemas de
Coor
denadas
( TRANS punto sistema_origen sistema_destino [desplazamiento])
Esta funcin convierte un punto o un vector de desplazamiento desde un Sistema de Coorde-
nadas a otro. El valor del punto o del desplazamiento se indica como una lista de tres nmero
reales. Si se indica el argumento desplazamiento y su valor es diferente de ni l , entonces la
lista de tres nmeros reales se considera un vector de desplazamiento.
Los argumentos para los Sistemas de Coordenadas se pueden especificar de tres maneras dife-
rentes. La primera es mediante un cdigo especificativo; los cdigos son:
Cdigo ----- Sistema de Coordenadas
--------------------------------------------------------------------------------------------------

0 ----------- Sistema de Coordenadas Universal (SCU)
1 ----------- Actual Sistema de Coordenadas Personal (SCP)
2 ----------- Actual Sistema de Coordenadas de la Vista (SCV)
3 ----------- Sistema de Coordenadas del Espacio Papel (slo en combinacin con 2)
La segunda forma es mediante un nombre de entidad que indica el Sistema de Coordenadas de
la Entidad (SCE) relativo o Sistema de Coordenadas del Objeto (SCO), segn convencin.
Esto es equivalente a la opcin Objeto del comando SCP de AutoCAD.
La tercera y ltima manera es con un vector de altura de objeto 3D, indicado como lista de
tres nmeros reales. Este vector expresa la orientacin de la altura de objeto en el nuevo SCP
con respecto al SCU. Este procedimiento no sirve cuando la entidad ha sido dibujada en el SCU
(su SCE coincide con el SCU).
La funcin TRANS devuelve el punto o vector de desplazamiento como una lista de tres elemen-
tos expresada en el nuevo Sistema de Coordenadas indicado en sistema_destino. Por ejem-
plo, si el SCP actual se ha obtenido girando desde el SCU 90 grados sobre el eje Y:
( TRANS ( 1 2 3) 0 1) devuelve ( - 3. 0 2. 0 1. 0)
( TRANS ( - 3 2 1) 1 0) devuelve ( 1. 0 2. 0 3. 0)
En el primer caso, el punto ( 1 2 3) en el SCU (cdigo 0) se expresa en el SCP actual (cdigo
1) como ( - 3 2 1) . En el segundo caso se hace la operacin inversa.
A la hora de introducir coordenadas o desplazamientos para utilizar comandos de AutoCAD,
hay que tener muy presente que siempre se consideran respecto al SCP actual (salvo que va-
yan precedidas de asterisco). Por eso si se dispone de unas coordenadas calculadas en otro
sistema, hay que pasarlas siempre al SCP actual mediante TRANS.
En la Base de Datos de AutoCAD los puntos caractersticos de cada entidad se encuentran
expresados en el Sistema de coordenadas del Objeto (SCO). Es necesario siempre tener en
cuenta cul es el SCP actual y utilizar el comando TRANS para convertir esos puntos. Para ello,
como ya se ha dicho, se indica el nombre de la entidad en vez de un cdigo. Se ver.

El Sistema de Coordenadas de la Vista (SCV) es el sistema hacia el cual se convierten las im-
genes antes de ser visualizadas en pantalla. Su origen es el centro de la pantalla y el eje Z la
lnea de visin (perpendicular hacia la pantalla). Es importante cuando se pretende controlar
cmo van a visualizarse las entidades. Por ejemplo, si el usuario seala un punto y se desea
averiguar a qu extremo de una lnea existente se encuentra ms prximo, se convierte el
punto sealado desde el SCP actual al SCV de la forma:
( TRANS punto 1 2)
Despus, para efectuar la comparacin, hay que convertir cada uno de los puntos finales de la
lnea (extrados de la Base de Datos tal como se explicar ms adelante) al SCV tambin.
( TRANS punto_final1 nombre_de_lnea 2)
( TRANS punto_final2 nombre_de_lnea 2)
Una vez hecho esto, ya se pueden calcular las distancias entre el punto del usuario y los dos
puntos finales, medida en el SCV, para determinar cul es la menor.
Si el punto o vector de desplazamiento indicado en TRANS es en 2D, la propia funcin lo con-
vierte en 3D suministrando la coordenada Z que falta. Esta coordenada Z depender de cul es
el Sistema de Coordenadas desde el cual se considera el punto:
Si es el Universal (SCU), la coordenada Z es 0. 0.
Si es el Personal actual (SCP), la coordenada Z es el valor de la elevacin actual.
Si es el Sistema de Coordenadas de Objeto (SCO), Z es 0. 0.
Si es el Sistema Coordenadas de la Vista (SCV) en Espacio Modelo o Papel, el valor
de Z es la proyeccin del punto en el plano XY actual de acuerdo con la elevacin
actual.
ONCE.19.4. Ventanas y vistas
( VPORTS)
Devuelve una lista con la configuracin de ventanas actual. La lista contiene en forma de sub-
listas los descriptores de todas las ventanas de la configuracin actual. Cada descriptor es a su
vez una lista con tres elementos: nmero de identificacin de ventana (correspondiente a la
variable de sistema de AutoCAD CVPORT), esquina inferior izquierda y esquina superior dere-
cha de cada ventana.
Las dos esquinas aparecen en fracciones de anchura y altura de pantalla, igual que en el lista-
do del comando VENTANAS opcin ?. As, ( 0 0) corresponde al vrtice inferior izquierdo de la
pantalla, ( 1 1) al superior derecho y ( 0. 5 0. 5) al centro de la pantalla.
Por ejemplo si la configuracin actual en pantalla es de cuatro ventanas iguales de tamao,
VPORTS podra devolver:
( ( 3 ( 0. 5 0. 5) ( 1. 0 1. 0) )
( 2 ( 0. 5 0. 0) ( 1. 0 0. 5) )
( 6 ( 0. 0 0. 5) ( 0. 5 1. 0) )
( 9 ( 0. 0 0. 0) ( 0. 5 0. 5) )
)
El primer nmero de identificacin que aparece (en el ejemplo el 3) es el de la ventana activa
actual.
Si TI LEMODE tiene valor 0, la lista devuelta describir las entidades de ventanas grficas crea-
das con VMULT en el Espacio Papel. La ventana del Espacio Papel siempre tiene el nmero 1 y
su tamao se expresa en unidades del dibujo. Por ejemplo, podra devolver la lista:
( 1 ( 0. 0 0. 0) ( 483. 717 297. 0) )
( SETVI EWdescriptor_vista [identificador_ventana])
Si existe una vista en el dibujo previamente almacenada, esta funcin restablece dicha vista en
una ventana grfica. Si se omite el segundo argumento, la vista se restablece en la ventana
grfica actual. Si se indica el identificador de la ventana, que es el valor almacenado en la va-
riable de AutoCAD CVPORT, la vista se restablece en esa ventana.
El descriptor de la vista almacenada debe ser del tipo de la lista devuelta por TBLSEARCH, fun-
cin que se estudiar al hablar del acceso a la Base de Datos de AutoCAD.
ONCE.19.5. Calibracin del tablero digitalizador
( TABLET modo [fila1 fila2 fila3 direccin])
Se utiliza para almacenar, recuperar y crear calibraciones de tablero. Si el argumento modo es
0, se devuelve una lista con la calibracin actual. Si es 1, se define la nueva calibracin apor-
tndola mediante tres puntos 3D que forman las tres filas de la matriz de transformacin del
tablero, y un vector 3D que define la direccin normal al plano formado por los tres puntos
anteriores. La variable de AutoCAD TABMODE permite activar o desactivar el modo Tablero.
ONCE.19.6. Control de elementos de men
( MENUCMD cadena)

Esta funcin controla la visualizacin de submens del men actual cargado por AutoCAD.
Muestra, modifica o solicita un submen, permitiendo desarrollar alguna accin en el mismo.
De este modo se puede ejecutar un programa en AutoLISP asocindole un men (ya sea de
pantalla, tableta, desplegable, etc.) que podra contener por ejemplo opciones para seleccionar
por el usuario desde el propio programa en AutoLISP.
MENUCMD devuelve siempre ni l . La cadena de texto indicada (entre comillas) es de la forma:
identificador de men = nombre de submen
rea de men = accin
En el primer caso, se especifica la inicial del identificador de seccin de men. Estas iniciales
son las siguientes:
Iniciales ---------- Mens
-----------------------------------------------------------------
B1- B4 ------------- Mens de pulsadores 1 a 4
A1- A4 ------------- Mens auxiliares 1 a 4
P0 ---------------- Men de cursor
P1- P16 ----------- Mens desplegables 1 a 16
I ----------------- Men de imgenes
S ----------------- Men de pantalla
T1- T4 ------------- Mens de tablero 1 a 4
M----------------- Expresiones DIESEL
Gmenugroup.id -- Grupo de men e identificador de men
El nombre de submen al que se llama tiene que existir en la seccin de men correspondiente
(tiene que haber un identificador de submen con el nombre en cuestin precedido por dos
asteriscos). Por ejemplo:
( MENUCMD " S=REFENT" )
hara aparecer en el rea de men de pantalla el submen REFENT.
( MENUCMD " P2=MALLAS" )
En este caso se llama a un submen MALLAS en la seccin de men desplegable 2 (POP2). Este
submen debe existir en esa seccin con su correspondiente identificador **MALLAS.
Existe una segunda forma de cadena de texto para MENUCMD. Consiste en especificar un rea
de men, indicando el identificador de men y el nmero de elemento que se ha de examinar
o modificar, separados por un punto. Por ejemplo:
( SETQ Act ( MENUCMD " P12. 5=?" ) )
( I F ( = Act " " )
( MENUCMD " P12. 5=~" )
)
La primera expresin examina el estado actual de la opcin nmero 5 del desplegable P12. Si
la opcin contiene una seal de activacin, se devolvera la misma. En caso de no contener
dicha seal, devuelve cadena vaca. Si esto ocurre se utiliza de nuevo MENUCMD para asignar a
la opcin el valor ~ que hace el efecto de poner una seal de activacin en el men. Hay que
tener en cuenta que esta seal de activacin podra cambiar en diferentes plataformas (podra
ser por ejemplo ! ), como ya debemos saber.
Veremos un par de ejemplos de esta funcin en la seccin ONCE.19.9..
( MENUGROUP nombre_grupo)
Se especifica el nombre de un grupo de mens. Si el grupo est cargado, la funcin devuelve
su nombre. Si no existe, devuelve ni l .
ONCE.19.7. Letrero de seleccin de color
( ACAD_COLORDLG nmero_color [indicador])
Muestra en pantalla el cuadro de dilogo estndar para la seleccin de color. El primer argu-
mento especifica el nmero de color que se ofrece por defecto. Hay que tener en cuenta que
un valor 0 significa Por Bl oque y un valor 256 Por Capa. Si el segundo argumento indicador es
ni l , entonces se desactivan en el cuadro los botones PORCAPA y PORBLOQUE. Si no se especi-
fica o es diferente de ni l ambas casillas se encuentran disponibles. La funcin devuelve el
nmero de color seleccionado mediante el cuadro.
ONCE.19.8. Funciones de manejo de ayuda
( ACAD_HELPDLG archivo_ayuda tema)
Esta es la funcin de ayuda en todas las plataformas. Se conserva nicamente por compatibili-
dad, pero ha sido sustituida totalmente por la siguiente.
( HELP [archivo_ayuda [tema [comando]]])
Esta funcin la vimos someramente al explicar la creacin de archivos de ayuda en el MDU-
LO SEI S. Ahora explicaremos todas sus caractersticas.
HELP llama a la utilidad de ayuda en todas las plataformas. El primer argumento es el nombre
del archivo de ayuda con el que se va a trabajar. Si se indica uno de AutoCAD (extensin
. AHP) se utiliza el lector de ayuda de AutoCAD para examinarlo. Si se indica un archivo de
ayuda de Windows tipo WinHelp (extensin . HLP) se utiliza el programa Ayuda de Windows
(WI NHLP32. EXE) para mostrarlo, funcionando como la ayuda en entornos Windows. Si se indica
una cadena vaca o se omite, se abre el archivo de ayuda por defecto de AutoCAD 14.
El segundo argumento tema especifica el tema cuya ayuda se muestra en primer lugar en la
ventana del texto de ayuda. Si es una cadena vaca se mostrar la ventana inicial de la ayuda.
El tercer argumento comando es una cadena de texto que especifica el estado inicial de la ven-
tana de ayuda. Sus valores posibles son:
HELP_CONTENTS: Muestra el primer tema del archivo de ayuda.
HELP_HELPONHELP: Muestra la ayuda sobre la utilizacin de ayuda.
HELP_PARTI ALKEY: Muestra el dilogo de bsqueda utilizando tema como bsqueda inicial
Si no se producen errores, la funcin devuelve el nombre del archivo de ayuda. Si hay errores,
devuelve ni l .
( SETFUNHELP C: nombre_comando [archivo_ayuda [tema [comando]]])

Registra una comando para que se pueda utilizar con l la ayuda sensible al contexto. Nor-
malmente el comando ser nuevo, definido desde un programa en AutoLISP, por lo que hay
que indicar los caracteres C: .
Cuando se crea un nuevo comando mediante DEFUN, si existe ya como comando registrado
mediante SETFUNHELP se suprime del registro. Por eso SETFUNHELP slo debe ser utilizada en el
programa despus de crear el comando nuevo con DEFUN.
Una vez registrado el nuevo comando, durante su utilizacin se podr llamar a la ayuda trans-
parente mediante ? o AYUDA ( HELP en ingls) y mediante la tecla de funcin F1. Automti-
camente se muestra el texto de ayuda disponible para el nuevo comando. Los argumentos
archivo_ayuda, tema y comando tienen el mismo significado que para HELP.
Por ejemplo, se ha creado un nuevo comando llamado MUESTRA y se dispone de un archivo de
ayuda LI SP. AHP con texto de ayuda especfica dentro del tema MUESTRA:
( DEFUN c: muest r a ( )
. . .
)
( SETFUNHELP " c: muest r a" " l i sp. ahp" " MUESTRA" )
ONCE.19.9. Expresiones DIESEL en programas
de AutoLISP
Como vimos en su momento, las expresiones en DIESEL que se referan a la personalizacin
de la lnea de estado se guardaban en una variable de sistema llamada MODEMACRO. Nada nos
impide rellenar esta variable desde AutoLISP con la funcin SETVAR, o recoger su contenido
con GETVAR.
Desde AutoLISP incluso lo tenemos ms fcil y menos engorroso, porque no necesitamos es-
cribir toda la expresin en una sola lnea, ya que podemos dividirla en varias que queden con-
catenadas finalmente con la funcin STRCAT. Veamos un ejemplo:
( SETVAR " modemacr o"
- - ( STRCAT
- - - - " MI SI STEMA Capa: $( SUBSTR, $( GETVAR, cl ayer ) , 1, 8) "
- - - - " $( I F, $( GETVAR, snapmode) , "
- - - - " For zC X: $( RTOS, $( I NDEX, 0, $( GETVAR, snapuni t ) ) , 2, 0) "
- - - - " Y: $( RTOS, $( I NDEX, 1, $( GETVAR, snapuni t ) ) , 2, 0) ) "
- - - - " $( I F, $( GETVAR, osmode) , REFENT) "
- - )
)
NOTA: Como se explic en su momento, el tamao mximo de una cadena para MODEMACRO es
de 255 caracteres, sin embargo desde AutoLISP se pueden incluir tamaos mayores, concate-
nando cadenas mediante STRCAT (que por cierto, nicamente admite 132 caracteres por cade-
na, segn ya se dijo).
NOTA: Para que una lnea de estado se muestre modificada permanentemente, podemos recu-
rrir a archivos del tipo ACAD. LSP (seccin ONCE.15.1.) donde incluir la rutina AutoLISP que
acceda a MODEMACRO.
Las expresiones DIESEL en mens, por ejemplo, pueden ser combinadas con acciones desde
programas AutoLISP, utilizando la funcin estudiada MENUCMD:
DEFUN c: vent anam( )
- - ( SETVAR " t i l emode" 0)
- - ( COMMAND " espaci op" )
- - ( SETQ pt b ( GETPOI NT " Vr t i ce i nf er i or i zqui er do de vent ana: " ) )
- - ( MENUCMD " p12=vent anam" )
- - ( PROMPT " \ nSel ecci one t amao desde el men de pant al l a. " )
- - ( SETQ al t o ( GETREAL " Al t ur a de vent ana en f r acci n de
- - - - - pant al l a: " ) ) ( SETQ pr opor ( / ( CAR ( GETVAR " scr eensi ze" ) ) ( CADR ( GETVAR
" scr eensi ze" ) ) )
- - ) ( SETQ ancho ( * al t o pr opor ) ) ( SETQ pt 1 ( POLAR pt b 0 ancho) )
- - ( SETQ pt 2 ( POLAR pt 1 ( / PI 2) al t o) )
- - ( COMMAND " vmul t " pt b pt 2) ( PRI N1)
)
La funcin define un nuevo comando, desactiva TI LEMODE y llama a la orden ESPACI OP. Solicita
sealar en pantalla un punto de base pt b. A continuacin llama a un men desplegable POP12
con las opciones de tamao, mediante la funcin MENUCMD. Se visualiza un mensaje y a conti-
nuacin se solicita la altura de la ventana en fracciones de pantalla, esperando a que el usuario
seale una de las opciones. Este submen de opciones de tamao, dentro de la seccin de
men ***POP12, podra ser:
**vent anam
[ Tamaos]
[ 1] $M=$( get var , vi ewsi ze)
[ 3/ 4] $M=$( *, $( get var , vi ewsi ze) , 0. 75)
[ 5/ 8] $M=$( *, $( get var , vi ewsi ze) , 0. 625)
[ 1/ 2] $M=$( *, $( get var , vi ewsi ze) , 0. 5)
[ 3/ 8] $M=$( *, $( get var , vi ewsi ze) , 0. 375)
[ 1/ 4] $M=$( *, $( get var , vi ewsi ze) , 0. 25)
Al seleccionar una opcin, la expresin DIESEL obtiene la altura actual de la ventana del Espa-
cio Papel de la variable VI EWSI ZE. Segn la fraccin seleccionada, multiplica dicha altura por la
fraccin. El valor resultante se admite como respuesta a GETREAL, que lo almacena en la varia-
ble al t o. A continuacin calcula la proporcin entre achura y altura, dividiendo los dos valores
almacenados en SCREENSI ZE. La anchura de la ventana que se desea abrir ser el producto de
la altura seleccionada por el usuario y el factor de proporcin. De esta manera la ventana ob-
tenida guardar la misma relacin ancho/alto que la pantalla. Por ltimo, el programa calcula
el segundo vrtice de la ventana pt 2 y llama al comando VMULT para abrir la ventana. Rizar el
rizo.
Tambin disponemos de la posibilidad de utilizar expresiones DIESEL como tales en el propio
programa de AutoLISP. Esto lo haremos llamando a la funcin MENUCMD con la inicial de identi-
ficador Mpara leguaje DIESEL (parecido a lo que hacamos para los mens con DIESEL).
Por ejemplo, un nuevo comando de AutoCAD llamado FECHA para obtener la fecha y hora del
sistema en un formato completo podra ser:
( DEFUN c: f echa ( )
- - ( SETQ f echa
- - - - ( MENUCMD " M=$( edt i me, $( get var , dat e) , DDDD D MON YY - H: MMam/ pm) " )
- - )
)
La expresin DIESEL lee la variable DATE y le aplica el formato de fecha especificado mediante
EDTI ME, as al introducir el nuevo comando FECHA en AutoCAD se podra devolver:
Sbado 1 Ago 98 - 4: 02pm
Se puede utilizar este mecanismo para introducir expresiones DIESEL desde la lnea de co-
mando de AutoCAD y observar los resultados que devuelven. El programa en AutoLISP para
conseguirlo sera:
( DEFUN C: Di esel ( )
- - ( WHI LE ( / = Expr " M=" )
- - - - ( SETQ Expr ( STRCAT " M=" ( GETSTRI NG T " \ nExpr esi n DI ESEL: " ) ) )
- - - - ( PRI NC ( MENUCMD Expr ) )
- - ) ( PRI N1)
)
Al llamar al nuevo comando DI ESEL, se visualiza una solicitud de expresin. Cuando el usuario
la introduce, GETSTRI NG la acepta como una cadena de texto, STRCAT le aade por delante M= y
la variable Expr almacena el resultado. A continuacin, MENUCMD llama a esa cadena con la
expresin DIESEL y devuelve su resultado. PRI NC lo escribe en pantalla.
NOTA: Recordemos la funcin de la variable MACROTRACE (vase MDULO NUEVE).
NOTA: Las variables de AutoCAD USERS1, USERS2, USERS3, USERS4 y USERS5 pueden ser utili-
zadas para traspasar informacin de una rutina AutoLISP a una expresin DIESEL. Vanse en
el MDULO NUEVE y en el APNDI CE B.
ONCE.19.10. Macros AutoLISP en mens y bo-
tones
Es totalmente factible la inclusin de funciones AutoLISP en las definiciones de opciones en
archivos de mens, del tipo:
[ Di buj ar &L nea] ( command " _. l i ne" " 0, 0" " 10, 10" " " )
o ms complejas, y tambin en macros de botones de barras de herramientas. E inclusive lla-
madas a programas AutoLISP, escribiendo el nombre de la funcin definida o del nuevo co-
mando.
Pinsese que, en ltima instancia, lo que se ejecuta al hacer clic en una opcin de men o en
un botn, es lo mismo que podramos escribir en la lnea de comandos de AutoCAD.
ONCE.19.11. Macros AutoLISP en archivos de
guin
Por ltimo, decir que tambin es posible escribir instrucciones AutoLISP (o llamadas a progra-
mas) dentro de un archivo de guin o script. Estos archivos como sabemos, ejecutan por lotes
las lneas incluidas en ellos como si de su escritura en la lnea de comando se tratara.

ONCE.19.12. Variables de entorno
( GETENV nombre_variable)
Devuelve una cadena de texto (entre comillas) que es el valor atribuido a la variable de entor-
no indicada. La variable en cuestin habremos de indicarla tambin como cadena, por ejemplo:
( GETENV " acadcf g" )
Este ejemplo podra devolver " C: \ \ mi sdoc~1\ \ aut ocad" , que es el directorio donde se guarda
el fichero de configuracin ACAD14. CFG. Esto puede resultar til para saber dnde se encuentra
y acceder a l para leer datos de la configuracin de AutoCAD en el equipo donde se ejecuta
la funcin y actuar en consecuencia. La manera de acceder a archivos directamente desde Au-
toLISP se estudia ms adelante en este mismo MDULO, en la seccin ONCE.21. concreta-
mente.
17 fase intermedia de ejercicios
Realizar un programa que permita insertar un bloque en medio de una lnea ya dibujada,
partiendo sta automticamente para permitir la insercin. La nica condicin impuesta al
usuario ser que el bloque sea unitario en la direccin de la lnea, para no complicar mucho el
clculo de los puntos entre los cuales se abrir hueco.
ONCE.20. ACCESO A LA BASE DE DATOS DE Au-
toCAD
Si lo que hemos programado hasta ahora nos pareca importante, donde de verdad se aprove-
cha al mximo la potencial real de AutoLISP es en el acceso directo a la Base de Datos de Au-
toCAD. Hasta ahora nicamente habamos producido objetos de dibujo adems del trata-
miento de otros temas; con los conocimientos que adquiriremos en esta seccin ONCE.20
tendremos la posibilidad de acceder a lo que ya est dibujado para editarlo, eliminarlo, copiar-
lo, moverlo, y un sinfn de acciones que slo tienen final en nuestra capacidad para discurrir y
en nuestra imaginacin y perspicacia como programadores avanzados.
ONCE.20.1. Organizacin de la Base de Datos
ONCE.20.1.1. Introduccin
NOTA: Si con la integracin de AutoCAD en Windows (desde la versin 12) lo que siempre se
haba denominado entidad pas a llamarse objeto, en relacin a la Base de Datos interna se-
guimos refirindonos a entidades de dibujo. Cuestin de convenciones.
Todas las entidades de dibujo de AutoCAD se encuentran definidas en su Base de Datos inter-
na por medio de una serie de cdigos encerrados en listas. Como ya hemos comentado alguna
vez, cuando AutoCAD guarda un dibujo, ste no se guarda como tal. Por ejemplo, un crculo
no se guarda como el objeto de dibujo que es, sino como una serie de cdigos que describen
que es un crculo, las coordenadas de su centro y su radio, adems de su capa, color, tipo de
lnea, etctera. Al volver a abrir el dibujo, AutoCAD interpreta dichos cdigos y representa en
pantalla los objetos correspondientes basndose en ellos en los cdigos.
Este tipo de almacenamiento, que podramos denominar vectorial, es mucho ms eficaz para
nosotros que, por ejemplo un mapa de bits, ya que podemos acceder a la Base de Datos y
modificar los parmetros correspondientes para alterar la geometra; y todo ello sin tocar el
crculo en cuestin para nada, por ejemplo.
En el caso del almacenamiento como mapa de bits, adems, nos percatamos de que al acer-
carnos cada vez ms al dibujo, ste pierde su definicin. Sin embargo, en AutoCAD no ocurre
esto, ya que el programa tiene la posibilidad de recalcular la Base de Datos y volver a repre-
sentar el crculo como tal. Es por ello, que si actuamos sobre una geometra con el comando
ZOOM(en cualquiera de sus modalidades) sta no pierde definicin. A veces, es necesario pro-
vocarle a AutoCAD para que recalcule toda la geometra; es lo que se consigue con el coman-
do REGEN.
Esta posibilidad de la que disponemos, de acceder directamente a la Base de Datos interna,
proporciona una potencia extra a AutoLISP, ya que podremos disear programas que modifi-
quen directamente los objetos de un dibujo en tiempo real y sin la intervencin del usuario.
ONCE.20.1.2. Estructura para entidades sim-
ples
Como decamos, las entidades se representan en la Base de Datos mediante un conjunto de
listas, una para cada entidad. Adems existen otras listas correspondientes a tablas de smbo-
los y diccionarios, las cuales representan objetos no grficos como capas, tipos de lnea y de-
ms. Por ltimo, existen tambin definiciones propias para los bloques. Nos centraremos por
ahora en las entidades grficas simples.
La lista de cada entidad es una lista de pares punteados (ya estudiados) o sublistas normales.
Los pares punteados, como sabemos, contienes dos valores: el primero es el cdigo que indica
el tipo de dato contenido en el segundo, y ste contiene el dato concreto (coordenadas de un
punto, nombre, etc.). As por ejemplo, el siguiente par punteado contiene la definicin para
una entidad que dice que est en la capa 0:
( 8 . " 0" )
8 es el cdigo que define la propiedad de capa y " 0" el nombre de la capa en s.
Segn el tipo de dato almacenado, la sublista puede no ser un par punteado y contener dos o
ms elementos. Por ejemplo, cuando se trata de un punto, contiene cuatro elementos: el cdi-
go que indica que es un punto y las coordenadas X, Y y Z de dicho punto. En el siguiente
ejemplo se muestra la lista que contiene las coordenadas del punto inicial de una lnea:
( 10 0. 0 10. 0 25. 0)
10 es el cdigo para el punto inicial en el caso de las lneas, 0. 0 es la coordenada X del punto
en cuestin, 10. 0 es la coordenada Y y 25. 0 la coordenada Z.
As pues, y visto hasta aqu, podemos explicar un ejemplo mayor que se corresponde con la
lista (casi) completa de una lnea ms o menos ordenada. La lista podra ser la siguiente:
( ( - 1 . <Nombr e de obj et o: bd75a0>)
( 0 . " LI NE" )
( 8 . " PI EZA" )
( 62 . 1)
( 6 . " TRAZOS" )
( 10 0. 0 10. 0 25. 0)
( 11 10. 0 100. 0 25. 0)
)
Se trata pues de una lista con siete sublistas incluidas. La explicacin de cada una de ellas es
la que sigue.
( - 1 . <Nombr e de obj et o: bd75a0>) es la lista que define el nombre de la entidad; 1 es el
cdigo especfico para este nombre. Esta lista siempre se representa de la misma forma: es un
par punteado que como primer elemento tiene el cdigo de nombre de entidad (- 1) y, como
segundo elemento, el texto fijo Nombr e de obj et o: , ms un nombre en hexadecimal para la
entidad, encerrado todo este ltimo elemento entre corchetes angulares.
NOTA: En versiones inglesas de AutoCAD, Nombr e de obj et o: cambia por Ent i t y name: .
Los nombres que se asignan a cada entidad de dibujo son, en realidad, posiciones de memoria
por eso estn en hexadecimal. Es por ello que un mismo objeto de dibujo siempre va a
tener un nombre identificativo y nico, en una misma sesin de dibujo, que lo diferencie de
todos los dems. En el momento en que cerremos el dibujo y lo volvamos a abrir, es posible (y
casi seguro) que el objeto adquiera otro nombre, pero ser tambin nico para l en esa se-
sin de dibujo. Debido a esto, esta propiedad de los objetos no puede ser modificada.
( 0 . " LI NE" ) es la lista para el tipo de entidad; 0 es el cdigo que define este tipo. El segun-
do elemento de la lista, que es par punteado, indica el tipo de entidad. Hay que tener en cuen-
ta que este tipo siempre se representa en la Base de Datos en ingls, por lo que cuando se
haga referencia a l desde los programas en AutoLISP habr que hacerlo en este idioma. Ade-
ms, se trata de una cadena de texto, y por eso va entre comillas (y en maysculas).
( 8 . " PI EZA" ) indica la capa en la cual se encuentra actualmente la lnea; 8 es el cdigo para
la capa. El segundo elemento de la lista, que es par punteado, describe, como cadena de texto
y en maysculas, el nombre de la capa en cuestin.
( 62 . 1) especifica el color de la lnea; 62 es el cdigo para el color. El segundo elemento del
par punteado es el cdigo de color de AutoCAD 14, en este caso 1 que se corresponde con el
rojo.
( 6 . " TRAZOS" ) es el tipo de lnea de la entidad, lnea en este caso; 6 es el cdigo correspon-
diente al tipo de lnea. El segundo elemento del par punteado es el nombre del tipo de lnea,
que aparecer en maysculas y entre comillas por ser cadena.
( 10 0. 0 10. 0 25. 0) indica el punto inicial de la lnea; en este caso 10 es el cdigo del punto
inicial, en otros casos (con otras entidades) significar otra cosa. Esta lista no es un par pun-
teado, sino que contiene varios elementos. Dichos elementos son las coordenadas X (0. 0), Y
(10. 0) y Z (25. 0) del punto de inicio de la entidad de lnea. Los puntos son separadores deci-
males.
( 11 10. 0 100. 0 25. 0) es el punto final de la lnea; 11 es el cdigo de punto final para las
entidades que sean lneas; en otros casos ser otra cosa. De la misma forma, la lista contiene
despus las coordenadas cartesianas del punto.
NOTA: En un caso real, la lista de una simple lnea ofrecera ms sublistas con otros cdigos
especficos que ya se estudiarn.
Como vemos, la manera en que estn definidas las entidades en la Base de Datos de Auto-
CAD es bien sencilla. Al ser listas pueden ser fcilmente tratadas desde AutoLISP. Para entida-
des complejas, tipo polilneas o bloques, el formato vara un poco, es por ello que se estudiar
bajo el siguiente epgrafe. Las entidades no grficas se vern tambin ms adelante.
Se puede observar que para acceder a las propiedades y caractersticas de las entidades es
necesario conocer los cdigos normalizados. Estos cdigos pueden ser comunes a todas las
entidades o depender del tipo de entidad de que se trate. As por ejemplo como se ha indi-
cado en su momento, el cdigo 8 representa la capa en la cual se encuentra la entidad ac-
tualmente; este cdigo es comn a todas las entidades de dibujo. En cambio el cdigo 10, que
en el ejemplo de la lnea representaba su punto inicial, en un crculo indica su centro (al igual
que en un arco), en un texto o en un bloque indica su punto de insercin, etctera. La lista
completa de todos los cdigos de entidades para AutoCAD 14 se proporciona ms adelante
(ONCE.20.1.5.).
En algn caso especial pueden existir varias sublistas con el mismo cdigo como primer ele-
mento. Esto ocurre por ejemplo con las splines, que mediante el cdigo 10 representan todos
sus puntos de control, mediante el cdigo 11 todos sus puntos de ajuste, mediante el cdigo
40 todos los valores de nodos, y dems.
Por otro lado, decir que hay que tener muy en cuenta un aspecto importantsimo cuando se
trabaja con ciertas entidades, como polilneas, bloques u objetos en tres dimensiones, entre
otras. Y es que las coordenadas de sus puntos caractersticos estn referidas al llamado SCE
(Sistema de Coordenadas de la Entidad) o SCO (Sistema de Coordenadas del Objeto). Para
poder trabajar con ellas habr que convertir dichos puntos previamente mediante la funcin
TRANS (ya estudiada). Por ejemplo, en una polilnea trazada mediante varios puntos, el prime-
ro de ellos est referido al SCP absoluto actual, sin embargo las dems coordenadas son relati-
vas a dicho primer punto, es decir, estn en el SCE. Esto hace que el proceso de regeneracin
de un dibujo en AutoCAD ahorre bastante tiempo, ya que slo ha de recalcular el primer pun-
to (los dems son relativos a l).
ONCE.20.1.3. Estructura para entidades com-
puestas
Nos dedicaremos ahora al estudio de la estructura que representa en la Base de Datos a las
entidades complejas o compuestas.
Estas entidades compuestas no poseen una sola lista con sublistas, sino que se estructuran en
varias listas separadas (cada una con sus propias sublistas de asociacin): una lista de cabece-
ra, varias listas de componentes y al final una lista de fin de secuencia. Las entidades com-
puestas que presentan estas caractersticas son:
Polilneas no optimizadas (versiones anteriores a la 14): tanto polilneas 2D adaptadas a
curva como polilneas 3D y tambin mallas.
Inserciones de bloque con atributos.
ONCE.20.1.3.1. Polilneas no optimizadas
En versiones anteriores a la 14 de AutoCAD, las polilneas tenan un tratamiento diferente en
la Base de Datos interna de la aplicacin. En AutoCAD 14 aparece el concepto de polilneas
optimizadas, las cuales tienen una forma de guardarse junto al resto del dibujo ms eficaz y
controlada.
Estas nuevas polilneas optimizadas estn consideradas como entidades simples en la Base de
Datos, y as se representan (su tipo de entidad, cdigo 0, es LWPOLYLI NE). No obstante, las
polilneas adaptadas a curva o curva B (spline) se convierten a polilneas de versiones anterio-
res (tipo de entidad POLYLI NE). Tambin las polilneas 3D y las mallas de AutoCAD son tipos
de polilneas no optimizadas. En este apartado pues, se ver este tipo de polilneas, ya que son
entidades compuestas.
NOTA: La variable de sistema de AutoCAD 14 PLI NETYPE especifica si el programa utiliza poli-
lneas 2D optimizadas. Sus valores se pueden observar en la lista de variables proporcionada
en el APNDI CE B.
Las polilneas no optimizadas aparecen en la Base de Datos de AutoCAD 14 de la siguiente
manera:
1 La lista correspondiente a la entidad compuesta (tipo de entidad POLYLI NE), conteniendo las
caractersticas y propiedades globales de la polilnea. Es la denominada cabecera de la entidad
en la Base de Datos. Esta lista contiene un cdigo especial 66 que especifica que las siguientes
listas pertenecen a la polilnea.
2 Un conjunto de listas de los vrtices de la polilnea. A cada vrtice le corresponde una lista
(tipo de entidad VERTEX) que contiene las propiedades y caractersticas individuales de cada
elemento (segmentos por ejemplo) de la polilnea.
3 Una lista de "fin de secuencia", que es un tipo de entidad especial llamado SEQEND que es-
pecifica el final de las listas de vrtices, y por lo tanto de la polilnea. Esta lista contiene el c-
digo especial 2 que indica el nombre de la entidad principal, es decir de la cabecera.
Por ejemplo, una polilnea sencilla que contuviera nicamente dos segmentos, cada uno de
ellos con espesores diferentes, podra contener en la Base de Datos las siguientes listas y sub-
listas (entre otras):
( ( - 1 . <Nombr e de obj et o: 26a0a20>)
( 0 . " POLYLI NE" )
( 8 . " PI EZA" )
( 66 . 1)
( 67 . 0)
( 10 0. 0 0. 0 0. 0)
( 70 . 0)
( 40 . 5. 0)
( 41 . 5. 0)
( 210 0. 0 0. 0 1. 0)
)
Esta primera lista de cabecera contiene el tipo de entidad POLYLI NE, que es la entidad principal
o compuesta. En este caso se encuentra en la capa PI EZA. Su color es Por Capa, pues no apa-
rece ninguna lista con el cdigo 62. El grosor inicial y el grosor final globales de la polilnea
(cdigos 40 y 41) son ambos de 5. 0. El resto de sublistas alguna de ellas no se muestra
aqu hacen referencia a aspectos tales como si la polilnea es abierta o cerrada, si est adap-
tada curva, la orientacin de su altura de objeto respecto al SCP actual, etc. El cdigo 66 con
valor 1 es el que indica que siguen otras listas de componentes de vrtice.
NOTA: Apreciamos un aspecto an no comentado, que es el hecho de que si no existe alguna
de las listas significa que se toman unos valores por defecto, como por ejemplo Por Capa para
el color (veremos ms ejemplos).
La segunda de las listas de la polilnea podra ser la siguiente:
( ( - 1 . <Nombr e de obj et o: 26a0a28>)
( 0 . " VERTEX" )
( 8 . " PI EZA" )
( 67 . 0)
( 10 100. 0 110. 0 0. 0)
( 70 . 0)
( 40 . 5. 0)
( 41 . 5. 0)
( 42 . 0. 0)
( 50 . 0. 0)
)
Esta segunda lista, con el tipo de entidad VERTEX, contiene las sublistas para el primer vrtice
de la polilnea. Su capa es PI EZA, las coordenadas (cdigo 10) son en este caso X = 100, Y =
110 y Z = 0. El grosor inicial y final del segmento que empieza en ese vrtice (cdigos 40 y
41) son ambos 5. 0. El resto de datos se refieren a si hay curva adaptada, la direccin de la
tangente, etc.
La tercera lista:
( ( - 1 . <Nombr e de obj et o: 26a09e8>)
( 0 . " VERTEX" )
( 8 . " PI EZA" )
( 67 . 0)
( 10 120. 0 130. 0 0. 0)
( 70 . 0)
( 40 . 5. 0)
( 41 . 0. 0)
( 42 . 0. 0)
( 50 . 0. 0)
)
Esta tercera lista corresponde al segundo vrtice. En este caso sus coordenadas son X = 120,
Y = 130 y Z = 0. El grosor inicial del segmento que empieza en ese vrtice es 5. 0, pero el gro-
sor final aqu es 0. 0.
ltimo vrtice de la polilnea:
( ( - 1 . <Nombr e de obj et o: 26a12a5>)
( 0 . " VERTEX" )
( 8 . " PI EZA" )
( 67 . 0)
( 10 160. 0 140. 0 0. 0)
( 70 . 0)
( 40 . 0. 0)
( 41 . 0. 0)
( 42 . 0. 0)
( 50 . 0. 0)
)
Esta cuarta lista contiene los datos del tercer vrtice. Sus coordenadas son X = 160, Y = 140 y
Z = 0). Al ser una polilnea abierta, el grosor inicial y final coinciden puesto que no hay ningn
segmento que parta de este vrtice. El grosor en este caso es 0.
Y la lista de fin de secuencia:
( ( - 1 . <Nombr e de obj et o: 26a12e7>)
( 0 . " SEQEND" )
( 8 . " PI EZA" )
( 67. 0)
( - 2 . <Nombr e de obj et o: 26a0a20>)
)
Esta ltima lista indica que la polilnea ya no contiene ms vrtices. El tipo de entidad es SE-
QEND. El cdigo - 2 indica el nombre de entidad de cabecera que repite el ya indicado en la pri-
mera lista.
ONCE.20.1.3.2. Inserciones de bloque con atri-
butos
Las inserciones de un bloque son referencias a dicho bloque y estn consideradas como enti-
dades simples, con una nica lista en la Base de Datos de AutoCAD. La definicin de las enti-
dades que forman dicho bloque se encuentran contenidas en las denominadas tablas de smbo-
los, que veremos en el apartado siguiente.
Sin embargo, si el bloque en cuestin contiene atributos es considerado como una entidad
compuesta o compleja, de forma que la referencia del bloque es la entidad de cabecera y cada
uno de los atributos viene definido en otras tantas listas siguientes. Al final, una lista de fin de
secuencia cierra la entidad compuesta, como en el caso de las polilneas no optimizadas.
Las referencias de bloques con atributos aparecen en la Base de Datos de AutoCAD 14 de la
siguiente manera:
1 La lista correspondiente a la entidad compuesta, en este caso una referencia de bloque (ti-
po de entidad I NSERT). Es la cabecera.
2 Un conjunto de listas para cada atributo (tipo de entidad ATTRI B).
3 Una lista de "fin de secuencia" (tipo de entidad SEQEND) .
As pues, un sencillo bloque que representara una resistencia elctrica, conteniendo un atributo
para el valor de la resistencia, tendra en la Base de Datos una serie de listas parecidas a las
que siguen:
( ( - 1 . <Nombr e de obj et o: 26a0af 8>)
( 0 . " I NSERT" )
( 8 . " ELEMENTOS" )
( 67 . 0)
( 66 . 1)
( 2 . " RES" )
( 10 80. 0 100. 0 0. 0)
( 41 . 1. 0)
( 42 . 1. 0)
( 50 . 0. 0)
( 43 . 1. 0)
( 210 0. 0 0. 0 1. 0)
)
El tipo de entidad I NSERT indica que se trata de una insercin de bloque. El bloque se llama
RES (cdigo 2). Se encuentra insertado en la capa ELEMENTOS. El cdigo 66 con un valor 1 indi-
ca que el bloque contiene atributos y que siguen listas para cada atributo. El cdigo 10 indica
las coordenadas del punto de insercin del bloque. Los cdigos 41, 42 y 43 indican las escalas
X , Y y Z de insercin del bloque. El cdigo 50 es el ngulo de rotacin de la insercin. El lti-
mo cdigo es para la orientacin de la altura de objeto.
La siguiente lista que aparece en la Base de Datos es la correspondiente al atributo incluido en
el bloque:
( ( - 1 . <Nombr e de obj et o: 26a0b00>)
( 0 . " ATTRI B" )
( 8 . " ELEMENTOS" )
( 10 120. 0 80. 0 0. 0)
( 40 . 16. 0)
( 1 . " 250K" )
( 2 . " RESI S" )
( 67 . 0)
( 70 . 4)
( 73 . 0)
( 50 . 0. 0)
( 41 . 1. 0)
( 51 . 0. 0)
( 7 . " TS1" )
( 71 . 0)
( 72 . 4)
( 11 150. 0 100. 0 0. 0)
( 210 0. 0 0. 0 1. 0)
)
El tipo de entidad es ATTRI B y se encuentra en la misma capa que la insercin del bloque. El
punto de insercin del texto del atributo tiene coordenadas X = 120, Y = 80 y Z = 0. La altura
de este texto (cdigo 40) es 16. Los cdigos 1 y 2 indican el valor del atributo (aqu es 250K) y
el identificador (aqu RESI S) respectivamente. El cdigo 70 con valor 4 indica que se trata de
un atributo verificable. El cdigo 50 indica el ngulo de rotacin del texto. Los cdigos siguien-
tes hacen referencia al estilo de texto del atributo; en este caso tiene factor de proporcin 1,
ngulo de inclinacin 0, estilo TS1, generacin normal, y es un texto con opcin rodear (cdigo
72 con valor 4). El punto indicado para rodear est en el cdigo 11.
La ltima lista con el tipo de entidad SEQEND, puesto que ya no hay ms atributos sera la si-
guiente:
( ( - 1 . <Nombr e de obj et o: 26a0b08>)
( 0 . " SEQEND" )
( 8 . " ELEMENTOS" )
( 67 . 0)
( - 2 . <Nombr e de obj et o: 26a0af 8>)
)
El ltimo cdigo - 2 contiene el nombre de la entidad principal o de cabecera, que es la refe-
rencia del bloque.
ONCE.20.1.4. Estructura para objetos no grfi-
cos
Los objetos no grficos de AutoCAD son datos que contiene el dibujo pero que no pertenecen
a objeto grficos como tal. Se subdividen en diccionarios, tablas de smbolos y bloques. Su
estructura en la Base de Datos consiste tambin en una serie de listas de asociacin similares
a las de las entidades grficas, pero que no contienen entidades propiamente dichas sino defi-
niciones y caractersticas propias de los objetos no grficos.
Las tablas de smbolos y los bloques comprenden 9 objetos no grficos:
Capas
Estilos de texto
Tipos de lnea
Estilos de acotacin
Vistas almacenadas
Configuraciones de ventanas mltiples
SCPs almacenados
Definiciones de bloques
Aplicaciones registradas
Los objetos de diccionario renen 2 objetos aadidos en la versin 13 de AutoCAD:
Estilos de lnea mltiple
Grupos de seleccin
A partir de la revisin c4 de la versin 13, y en la versin 14, se han aadido otros tipos de
objetos ms especficas como XRECORD para almacenar datos arbitrarios o ACAD_PROXY_OBJ ECT
para objetos proxy procedentes de aplicaciones no reconocidas por AutoCAD.
La organizacin de estos objetos en la Base de Datos, como hemos dicho, es similar a la de las
entidades grficas, a base de listas de asociaciones que poseen un cdigo como primer ele-
mento que indica el tipo de dato que viene a continuacin. Los tipos de datos correspondientes
a estos objetos para el tipo de entidad (cdigo 0) son los que siguen:
Tipo de entidad ---- Objeto no grfico
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

LAYER -------------- Capa
LTYPE -------------- Tipo de lnea
STYLE -------------- Estilo de texto
DI MSTYLE ---------- Estilo de acotacin
VI EW-------------- Vista almacenada
VPORT ------------- Configuracin de ventanas mltiples
UCS --------------- SCP almacenado
BLOCK ------------ Definicin de bloque
ENDBLK ----------- Final de definicin de bloque
APPI D ------------ Aplicacin registrada
GROUP ------------ Grupo de seleccin
MLI NESTYLE ------ Estilo de lnea mltiple
En el caso de las definiciones de bloque, adems de la lista con las caractersticas globales
existen listas con todas las entidades que componen el bloque. A continuacin veremos ejem-
plos de listas de algunos de los objetos no grficos.
ONCE.20.1.4.1. Capa
La lista de definicin de una capa en la tabla de smbolos podra ser la siguiente:
( ( 0 . " LAYER" )
( 2 . " EJ ES" )
( 70 . 4)
( 62 . - 7)
( 6 . " TRAZO_Y_PUNTO" )
)
En este caso, el cdigo 0 con valor asociado LAYER indica que se trata de una capa. Su nombre
es EJ ES. El color asociado es blanco y, como el nmero de color aparece con signo negativo (-
7), quiere decir que se encuentra en este momento desactivada. El tipo de lnea asociado a la
capa es TRAZO_Y_PUNTO.
ONCE.20.1.4.2. Estilo de texto
La lista de definicin de un estilo de texto podra ser como la que sigue:
( ( 0 . " STYLE" )
( 2 . " TS1" )
( 40. 0. 0)
( 41 . 1. 0)
( 50 . 0. 0)
( 71 . 0)
( 42 . 3. 5)
( 3 . " r omans. shx" )
( 4 . " " )
)
El nombre del estilo de texto es TS1; la altura en la definicin del estilo (cdigo 40) es 0; el
factor de proporcin (cdigo 41) es 1; el ngulo de inclinacin del estilo (cdigo 50) es 0; la
generacin del estilo es normal (cdigo 71 igual a 0); la altura actual de los textos por defecto
(cdigo 42) es 3. 5; y el archivo de definicin de tipos de letra en que est basado el estilo es
ROMANS. SHX.

ONCE.20.1.4.3. Tipo de lnea
La lista correspondiente a la definicin de un tipo de lnea cargado en el dibujo presenta un
aspecto como el siguiente:
( ( 0 . " LTYPE" )
( 2 . " TRAZOS" )
( 3 . " - - - - - - - - - - - - - - - - - - " )
( 72 . 65)
( 73 . 2)
( 40 . 0. 75)
( 49 . 0. 5)
( 49 . - 0. 25)
)
El nombre del tipo de lnea es TRAZOS; el aspecto que presenta en el archivo de definicin
ACAD. LI N o ACADI SO. LI N, segn preferencias, es el que aparece asociado como una cadena de
texto al cdigo 3; el cdigo 72 indica un factor de alineamiento A, que como se sabe es obliga-
torio para los tipos de lnea de AutoCAD. El cdigo 73 indica el nmero de parmetros (suce-
sin de tramos, huecos y puntos) que definen el patrn de la lnea. En este caso son dos, un
trazo y un hueco. El cdigo 40 proporciona la longitud total del patrn y el cdigo 49 da en
varias listas los valores de ese patrn: positivos para trazos, negativos para huecos y 0 para
puntos.
ONCE.20.1.4.4. Definicin de bloque
La lista de cabecera de la definicin de un bloque tiene una caracterstica especial y es que
contiene un cdigo - 2 con el nombre de la primera entidad de las que compone ese bloque.
Por ejemplo:
( ( 0 . " BLOCK" )
( 2 . " RES" )
( 70 . 66)
( 10 0. 0 0. 0 0. 0)
( - 2 . <Nombr e de obj et o: 26a0b07>)
)
El bloque definido se llama RES, su punto de insercin es el de coordenadas X = 0, Y = 0 y Z =
0) y el nombre de la primera entidad de la que est compuesta el bloque es 26a0b07.
Como veremos seguidamente, a partir de ese nombre se podra acceder a todas las listas con
las entidades que componen el bloque, exactamente del mismo modo que para las entidades
sueltas. Aqu al explorar las listas de entidades en orden correlativo (ENTNEXT), despus de la
ltima se devuelve ni l . No obstante, al construir las listas mediante ENTMAKE se requiere una
lista final del tipo ENDBLK que indica que ya no hay ms listas de componentes del bloque.
NOTA: Estas funciones AutoLISP se estudiarn tras la tabla de cdigos de entidades.
ONCE.20.1.5. Cdigos de acceso a Base de Da-
tos
La lista de cdigos se presenta en el siguiente archivo.
falta bajar el archivo anterior

ONCE.20.2. Funciones de gestin de la Base de
Datos
Una vez vista toda la teora acerca de la Base de Datos interna de AutoCAD, pasaremos a la
prctica estudiando las funciones que nos permiten gestionarla. En este apartado vamos a tra-
tar cuatro grupos de funciones distintos: funciones para trabajar con conjuntos designados,
funciones que gestionan nombres de entidades, funciones para acceder a los datos de las enti-
dades y funciones especficas para gestionar objetos no grficos. Todas ellas, convenientemen-
te combinadas (y con algunas funciones de manejo de listas concretas), nos darn acceso libre
y directo a la Base de Datos de AutoCAD 14.
De todas formas no vamos a ver dichas funciones de un modo ordenado. Para sacarle ms
partido a la explicacin las mezclaremos, de este modo podremos ir siguiendo paso a paso el
modo de acceder a la Base de Datos.
ONCE.20.2.1. Crear un conjunto de seleccin
Si bien las funciones del tipo GET... nos permitan obtener del usuario puntos, distancias, n-
gulos y dems, evidente es que necesitaremos otro tipo de funciones con las que obtener enti-
dades completas o grupos de entidades para su proceso. Este conjunto de funciones SS... son
las que vamos a comenzar a ver con SSGET, aunque como ya hemos dicho no veremos las de-
ms en orden temtico.
( SSGET [modo] [punto1 [punto2]] [lista_puntos] [lista_filtros])
La funcin SSGET acepta el conjunto designado de entidades. Se puede utilizar sin parmetros
as:
( SSGET)
SSGET presenta el mensaje Desi gnar obj et os: en lnea de comandos (Sel ect obj ect s: en
versiones inglesas de AutoCAD). La designacin puede hacerse mediante cualquiera de los
modos de designacin permitidos: por un punto, una ventana, una captura, un polgono, etc-
tera. En el momento de pulsar I NTRO, la funcin acepta del conjunto de designacin, presen-
tando un mensaje del tipo <Conj unt o de sel ecci n: n> (<Sel ect i on set : n> en ingles),
donde n es un nmero de orden entero que representa el conjunto de seleccin actual.
La forma lgica de utilizacin de SSGET pasa por el almacenamiento en una variable del con-
junto de seleccin en cuestin, el cual luego podr ser llamado por los diversos comandos de
AutoCAD o por otra funcin de AutoLISP para su proceso. Por ejemplo:
( SETQ Conj unt o ( SSGET) )
( COMMAND " _. move" Conj unt o " " " 10, 0" " " )
NOTA: Recordemos la utilidad del punto (. ) antes del comando por si estuviera redefinido
(MDULO SI ETE).
Esta rutina solicita al usuario una designacin de objetos, los cuales sern recogidos en un
conjunto de seleccin y guardados en la variable Conj unt o. Posteriormente, se desplazan los
objetos una distancia de 10 unidades de dibujo en el eje X.
NOTA: Si queremos hacer pruebas en lnea de comandos para comprobar la funcionalidad de
SSGET, una vez ejecutada la funcin, podemos hacer una llamada a cualquier comando que
solicite designar objetos e introducir el nombre de la variable como conjunto de seleccin, pero
con el signo de cerrar admiracin (! ) por delante. Desde rutinas o programas AutoLISP no es
necesario incluir dicho smbolo, evidentemente.
NOTA: La diferencia entre SSGET y el comando DESI GNA es evidente. SSGET permite designar
cualquier conjunto y guardarlo en una variable; de este modo podemos disponer de varios
conjuntos de seleccin para ser utilizados. DESI GNA permite designar una serie de objetos que
se incluirn en un conjunto de seleccin, el cual puede ser referenciado posteriormente me-
diante el modo Previo de seleccin; en el momento en que volvamos a hacer DESI GNA el con-
junto anterior desaparece. Adems no tiene sentido guardar en una variable el resultado de un
DESI GNA ya que luego no funciona a la hora llamarlo para algn comando. DESI GNA viene muy
bien para su utilizacin en macros, en los programas de AutoLISP usaremos como norma ge-
neral SSGET.
El argumento modo especifica el mtodo de designacin. modo puede tener cualquiera de los
siguiente valores:
" P" . Crea un conjunto de seleccin con el ltimo conjunto de objetos previamente seleccio-
nado. Equivale al modo de designacin Previo.
" U" . Crea un conjunto de seleccin con la ltima entidad aadida a la Base de Datos del di-
bujo de las visibles en pantalla, es decir la ltima entidad dibujada y no borrada de las visibles
en pantalla. Equivale al modo de designacin ltimo.
" I " . Crea un conjunto de seleccin con el conjunto implcito designado (variable PI CKFI RST
de AutoCAD activada).
p1. Crea un conjunto de seleccin con la entidad que pasa por el punto p1. Equivale a sealar
ese punto en la pantalla. El resultado depender del modo o modos de referencia a objetos
actuales, es decir del valor de la variable OSMODE.
" V" p1 p2. Crea un conjunto de seleccin a partir de la Ventana cuyos vrtices son los pun-
tos p1 y p2. Ambos puntos no se pueden omitir.
" C" p1 p2. Crea un conjunto de seleccin a partir de la Captura cuyos puntos son los puntos
p1 y p2. Ambos puntos no se pueden omitir.
" PV" lista_puntos. Crea un conjunto de seleccin a partir del Polgono-Ventana cuyos vrti-
ces son los puntos indicados en la lista. La lista no se puede omitir.
" PC" lista_puntos. Crea un conjunto de seleccin a partir del Polgono-Captura cuyos vrti-
ces son los puntos indicados en la lista. La lista no se puede omitir.
" B" lista_puntos. Crea un conjunto de seleccin a partir del Borde cuyos vrtices son los
puntos indicados en la lista. La lista no se puede omitir.
" X" . Crea un conjunto de seleccin todas las entidades de la Base de Datos, visibles o no
visibles en pantalla. Equivale al modo de designacin Todo.
NOTA: Los valores entre comillas son cadenas que deben indicarse como tales.
NOTA: Los valores entre comillas representan a los modos de designacin de AutoCAD 14 y
se introducen como cadenas por ser una llamada a dichos modos. Es por ello, que en versiones
idiomticas diferentes a la castellana han de indicarse de forma conveniente. Por ejemplo, en
lugar de " U" indicar " L" , para ltimo; es factible la sintaxis " _L" , por ejemplo, para cualquier
versin idiomtica del programa.
Veamos un ejemplo sencillo. La siguiente rutina dibuja una lnea en pantalla y luego la borra:
( COMMAND " _. l i ne" " 0, 0" " 100, 100" " " )
( COMMAND " _. er ase" ( SSGET " _l " ) " " )
Otro ejemplo; ste dibuja un rectngulo y luego lo borra tambin:
( COMMAND " _. r ect ang" " 100, 100" " 300, 300" )
( SETQ Conj unt o ( SSGET " _c" ( 100 100) ( 300 300) ) )
( COMMAND " _. er ase" Conj unt o " " )
Adems de todo esto, disponemos de la posibilidad de introducir filtros de seleccin. Estos fil-
tros han de ser listas de asociaciones que filtran o realizan una criba de los objetos segn de-
terminadas condiciones, quedndose con aquellas entidades de la Base de Datos que cumplen
dichas condiciones.
Se puede aadir una lista de filtros a cualquiera de las modalidades de seleccin expuesta arri-
ba. Los filtros de seleccin se aaden detrs de los parmetros propios de seleccin (como
" P" , " V" p1 p2 o " X" ).
Las listas de filtros hacen referencia a las propiedades de la entidad, como el color, su capa,
tipo de lnea, etc. O tambin a puntos u otras caractersticas. Para construir una lista de filtro
deberemos construir la propia lista con cada una de sus sublistas, las cuales sern las caracte-
rsticas o propiedades de las entidades que queremos filtrar. Las sublistas pueden ser pares
punteados construidos con CONS o no.
As, un ejemplo muy tpico es aquel que permite seleccionar todos los objetos de un dibujo que
tengan unas determinadas caractersticas. Por ejemplo, para designar todos los crculos del
dibujo actual, que adems estn en la capa PI EZA y tengan asignado el color rojo, haramos:
( SSGET " x" ( LI ST ( CONS 0 " CI RCLE" )
- - - - - - - - - - - - - - - - - ( CONS 8 " Pi eza" )
- - - - - - - - - - - - - - - - - ( CONS 62 1)
- - - - - - - - - - - )
)
Construimos pues una lista con LI ST que recoge las condiciones del filtro, que no son otra cosa
sino propiedades de la entidad. AutoLISP explorar toda (" X" ) la Base de Datos del dibujo ac-
tual y seleccionar (" SSGET" ) las entidades que posean dichas propiedades.
Otro ejemplo puede ser la designacin o seleccin de todas la lneas que comiencen en un pun-
to:
( SSGET " x" ( LI ST ( CONS 0 " LI NE" )
- - - - - - - - - - - - - - - - - ( 10 10. 0 10. 0 0. 0)
- - - - - - - - - - - )
)
Como se ve aqu, la segunda condicin no es par punteado, ya que dice relacin a los puntos
iniciales de las lneas (en este caso de coordenadas X = 10, Y = 10 y Z =0), por lo que se
construye como una lista normal (con el apstrofo de literal).
Las listas de filtros pueden ser enteramente construidas como literales tambin. En el primero
de los ejemplos sera as:
( SSGET " x" ( ( 0 . " CI RCLE" )
- - - - - - - - - - - - - ( 8 . " Pi eza" )
- - - - - - - - - - - - - ( 62 . 1)
- - - - - - - - - - - - )
)
En estos casos habremos de describir correctamente la notacin de los pares punteados, es
decir: el primer valor, un espacio, el punto, otro espacio y el segundo valor, todo ello entre
parntesis. Aunque resulta ms elegante y sencillo, quizs, hacer mediante CONS.
En principio, cada elemento de una lista de filtros de seleccin se aade como una condicin
ms que se debe cumplir. Sin embargo, existe la posibilidad de aadir operadores relacionales
y booleanos a estos filtros. Esto se realiza con el cdigo especial 4, por ejemplo:
( SSGET " x" ( LI ST ( CONS 0 " TEXT" )
- - - - - - - - - - - - - - - - - ( CONS 4 " <=" )
- - - - - - - - - - - - - - - - - ( CONS 40 5)
- - - - - - - - - - - )
)
El operador relacional, que ha de ser una cadena, se aplica a la condicin que le siga en la lis-
ta. En este ltimo ejemplo, SSGET selecciona entidades de texto cuya altura (cdigo 40) sea
menor o igual (" <=" ) que 5 unidades de dibujo.
La tabla siguiente muestra cules son los operadores relacionales que se pueden incluir en los
filtros, con su correspondiente descripcin:
Operador relacional ------ Descripcin
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -

" *" ---------------------- Cualquier valor (siempre verdadero)
" =" ---------------------- Igual que
" ! =" --------------------- Distinto de
" +/ =" -------------------- Distinto de
" <>" --------------------- Distinto de
" <" ---------------------- Menor que
" <=" --------------------- Menor o igual que
" >" ---------------------- Mayor que
" >=" --------------------- Mayor o igual que
" &" ---------------------- AND binario (slo grupos de nmeros enteros)
" &=" --------------------- Igual a enmascarado binario (slo grupos de nmeros enteros)
No se puede especificar un nombre de capa menor o igual que otro (ni por orden alfabtico),
por ejemplo, por lo que estos operadores se aplican slo a datos numricos. Para establecer
filtros con los datos textuales o alfanumricos se utilizan los caracteres comodn explicados con
la funcin WCMATCH, en la seccin ONCE.12..
Para condiciones que afectan a puntos es factible agrupar operadores en grupos de tres, sepa-
rados por comas. Por ejemplo:
( SSGET " x" ( LI ST ( CONS 0 " LI NE" )
- - - - - - - - - - - - - - - - - ( CONS 4 " <, >, *" )
- - - - - - - - - - - - - - - - - ( 11 10 100)
- - - - - - - - - - - )
)
En este ejemplo se buscan todas las lneas cuyas coordenadas de punto final sean: en X meno-
res que 10, en Y mayores que 100 y sus coordenadas Z cualesquiera.
Como hemos dicho, adems de operadores relacionales, los cuales afectan slo a la siguiente
condicin, se pueden agrupar condiciones mediante operadores booleanos, empleando un ope-
rador de comienzo y otro de final. Estos operadores tambin se especifican con el cdigo 4 y
son los de la tabla de este archivo.
falta bajar el archivo anterior

En el ejemplo siguiente se designarn todos los textos de la capa NOTAS y todos los arcos de
radio 10:
( SSGET " X" ( ( - 4 . " <OR" )
- - - - - - - - - - - - - ( - 4 . " <AND" ) ( 0 . " TEXT" ) ( 8 . " NOTAS" ) ( - 4 . " AND>" )
- - - - - - - - - - - - - ( - 4 . " <AND" ) ( 0 . " ARC" ) ( 40 . 10) ( - 4 . " AND>" )
- - - - - - - - - - - - - ( - 4 . " OR>" )
- - - - - - - - - - - - )
)
Los conjuntos de seleccin ocupan archivos temporales de AutoCAD. Por esa razn existe una
limitacin en cuanto al nmero mximo de conjuntos almacenados en variables, que es de 128
a la vez. Una vez alcanzado este lmite, SSGET rechaza la posibilidad de crear un nuevo conjun-
to y devuelve ni l . Para acceder a ms conjuntos de seleccin es preciso eliminar alguno de los
almacenados poniendo la variable a ni l .
ONCE.20.2.2. Obtener el nombre de una enti-
dad
Una vez seleccionadas las entidades y agrupadas en un conjunto de seleccin, deberemos ex-
traer el nombre de la que o las que nos interesen para trabajar con ellas.
Como sabemos, en la Base de Datos la entidades se encuentran referenciadas mediante un
nombre que es en realidad un nmero hexadecimal que indica la posicin en memoria. Este
nombre es nico para cada entidad en cada sesin de dibujo, de forma que la identifica inequ-
vocamente y la distingue de todas las dems del dibujo.
Por todo ello, para capturar una entidad, y solo esa, de un conjunto de seleccin lo ms lgico
es referirse a su nombre, y para extraer su nombre disponemos de la funcin SSNAME.
( SSNAME conjunto ndice)
SSNAME devuelve el nombre de entidad (cdigo 1), del conjunto de seleccin especificado,
situada en el lugar indicado por el ndice. Las entidades dentro de un conjunto comienzan a
numerarse por el 0. As, en un conjunto con cuatro entidades, stas estaran numeradas de 0 a
3. Veamos un ejemplo:
( SETQ Ent i dad ( SSNAME ( SSGET) 0) )
De esta forma designaramos una o varias entidades en pantalla cuando nos lo pidiera SSGET y
el nombre de la primera de ellas (SSNAME con ndice 0) se guardara en la variable Ent i dad.
Una vez obtenido el nombre de una entidad, puede ser procesado por otras funciones que ve-
remos a continuacin.
NOTA: Los nombres que devuelve SSNAME son slo de entidades principales; esta funcin no
puede acceder a las entidades que forman parte de una polilnea o un bloque.
ONCE.20.2.3. Extraer la lista de una entidad
Ahora que ya hemos designado una entidad y que podemos conocer su nombre, slo queda
extraer su lista de definicin para poder modificarla o editarla. Para ello disponemos de la fun-
cin ENTGET.
( ENTGET nombre_entidad [lista_aplicaciones])
Esta funcin ENTGET busca en la Base de Datos el nombre indicado de una entidad y devuelve
la lista completa correspondiente a esa entidad. Se observa que se requiere el nombre de una
entidad (cdigo 1 en Base de Datos) y por lo tanto se hace necesario obtenerlo previamente
con SSNAME u otras que veremos.
El ejemplo tpico de descubrimiento de esta funcin (combinada con las anteriores) es:
( SETQ Li st aEnt i dad ( ENTGET ( SSNAME ( SSGET) 0) ) )
Con este ejemplo obtendremos la lista de definicin en Base de Datos de cualquier entidad que
designemos en pantalla y lo guardaremos en la variable Li st aEnt i dad para su posterior pro-
ceso; si designamos varias slo aceptar la primera de ellas (debido al ndice 0 de SSNAME,
como sabemos). Una lista de un crculo designado, por ejemplo, podra ser:
( ( - 1 . <Nombr e de obj et o: 2770500>)
( 0 . " CI RCLE" )
( 5 . " 20" )
( 100 . " AcDbEnt i t y" )
( 67 . 0)
( 8 . " 0" )
( 100 . " AcDbCi r cl e" )
( 10 144. 409 168. 958 0. 0)
( 40 . 17. 2339)
( 210 0. 0 0. 0 1. 0)
)
NOTA: Ahora podremos comprobar de manera factible toda la teora explicada anteriormente
sobre la Base de Datos de AutoCAD 14.
La manera ms sencilla y utilizada de acceder a los datos de una entidad es mediante ASSOC
(ya estudiada), para obtener la lista de asociaciones deseada, y luego con CAR, CDR, CADR,
CADDR, etc., para capturar sus componentes (recordemos que funciones del tipo NTH no funcio-
nan directamente con pares punteados).
De este modo, en el ejemplo anterior, y si hubisemos designado el crculo cuya lista se pro-
pone, podramos extraer la capa en la que se encuentra directamente:
( SETQ Capa ( CDR ( ASSOC 8 Li st aEnt i dad) ) )
Lo que hacemos aqu es guardar en Capa el segundo elemento (CDR) de la sublista de asocia-
cin cuyo primer elemento (ASSOC) sea 8 (cdigo para la capa).
NOTA: Recurdese la necesidad de utilizar CDR y no CADR para capturar el segundo elemento
de un par punteado.
Si quisiramos extraer ahora por ejemplo la coordenada Y del centro del crculo haramos:
( SET Cent r oY ( CADDR ( ASSOC 10 Li st aEnt i dad) ) )
Ya que esta lista no es par punteado, el primer elemento saldra con CAR (el cdigo 10 de coor-
denadas del centro para un crculo), el segundo con CADR (la coordenada X) y el tercero (coor-
denada Y) con CADDR. Para la coordenada Z utilizaramos CADDDR.
NOTA: Como se explic en su momento, las coordenadas de los puntos de las entidades se
expresan en el Sistema de Coordenadas de Entidad o de Objeto (SCE o SCO segn la denomi-
nacin adoptada). En la mayora de las entidades dibujadas en el Sistema de Coordenadas
Universal SCU, las coordenadas en la base de datos coinciden con las universales. Pero si se
han dibujado en cualquier Sistema de Coordenadas Personal (SCP), se hace necesario recurrir
a la funcin TRANS para efectuar las conversiones.
Por ltimo decir que el argumento opcional lista_aplicaciones de ENTGET permite incluir en
la lista devuelta los datos extendidos de entidades (los que siguen al cdigo especfico 3). De
este tema hablaremos en la seccin ONCE.20.2.14..
ONCE.20.2.4. Actualizar lista y Base de Datos
Una vez accedido al elemento que nos interesa, deberemos realizar los cambios necesarios en
la lista para modificar la entidad. Para ello utilizaremos bsicamente funciones del tipo SUBST o
APPEND, ya explicadas.
NOTA: Recordar que nos estamos moviendo entre listas y que cualquier funcin de manejo de
listas nos puede ser til: CONS, LI ST, etctera.
As pues, retomemos el ejemplo anterior del crculo. Tras escribir:
( SETQ Li st aEnt i dad ( ENTGET ( SSNAME ( SSGET) 0) ) )
y designar un crculo, AutoLISP nos devuelve:
( ( - 1 . <Nombr e de obj et o: 2770500>)
( 0 . " CI RCLE" )
( 5 . " 20" )
( 100 . " AcDbEnt i t y" )
( 67 . 0)
( 8 . " 0" )
( 100 . " AcDbCi r cl e" )
( 10 144. 409 168. 958 0. 0)
( 40 . 17. 2339)
( 210 0. 0 0. 0 1. 0)
)
Si ahora quisiramos, por ejemplo, cambiar la capa del crculo, habramos de hacer:
( SETQ Li st aEnt i dad ( SUBST ( CONS 8 " Ej es" ) ( CONS 8 " 0" ) Li st aEnt i dad) )
NOTA: Si la capa no existe se crea.
Como hemos de saber ya, CONS nos devolver la nueva lista renovada. Si ocurre algn error,
CONS devolver la lista sin renovar.
Pero si quisiramos en este caso cambiar el color del crculo, no podramos utilizar CONS, ya
que la lista del color (cdigo 62) no aparece porque es Por Capa, por lo que no podemos decir
que sustituya una nueva lista por otra que no existe.
En estos casos se utiliza APPEND, que nos permite aadir nuevos elementos a la lista por su
manera de actuar. As pues, para cambiar el crculo de color haramos:
( SETQ Li st aEnt i dad ( APPEND Li st aEnt i dad ( LI ST ( CONS 62 1) ) ) )
NOTA: Todo ello en lnea de comandos.
NOTA: Procrese con APPEND aadir a la lista de una entidad una nueva lista, y no una nueva
lista a la lista de una entidad. Es decir, la lista general ir antes, como argumento de APPEND,
que la lista que debe agregarse. Si se realiza esto al revs, la nueva lista se aadir por delan-
te a la lista de la entidad y esto har que no funcione correctamente. Como norma general los
dos primeros elementos de una lista de entidad habrn de ser el nombre (con cdigo - 1) y el
tipo (cdigo 0), respectivamente; con las restantes sublistas (capa, color, punto inicial, centro,
tipo de lnea...) no importa el orden generalmente.
La razn de tener que formar una lista con la propia lista de asociacin del color es que, si no
lo hacemos, APPEND aade los valores de la lista sin asociar y provoca un error bad l i st . Si
recordamos, APPEND toma los componentes de las listas y los junta todos en una. Si hacemos
que la lista de par punteado se encuentre dentro de otra lista, APPEND tomar el par punteado
como un solo elemento y se lo aadir al resto (que tambin son sublistas) de la lista de la
entidad.
NOTA: Repsense estas funciones en la seccin ONCE.17..
Hemos de comprender que actualizar as la variable que contiene la lista de la entidad no ac-
tualiza el dibujo. Esta variable contiene una copia de la definicin de la entidad en la Base de
Datos, pero no la definicin propiamente dicha.
Para actualizar pues, y como paso ltimo, la Base de Datos de AutoCAD y que los objetos se
vean realmente modificados, debemos recurrir a una funcin que se encarga de ello:
( ENTMOD lista_entidad)
ENTMOD pues actualiza la lista de una entidad en la Base de Datos de AutoCAD 14. Su funcio-
namiento es tan sencillo como pasarle como argumento nico la lista de la entidad que hay
que modificar, y ella se encarga del resto.
As pues, en el ejemplo del crculo que venimos arrastrando slo quedara escribir:
( ENTMOD Li st aEnt i dad)
para que ese crculo cambiara su capa y su color.
El funcionamiento principal de modificacin de las entidades de la Base de Datos se basa en los
pasos que hemos venido siguiendo, esto es, la designacin de la entidad o entidades que que-
remos tratar, la obtencin de sus nombres y con ello sus listas, la modificacin de las mismas
y, por ltimo, la actualizacin de la Base de Datos mediante ENTMOD. El resto de las funciones
que veremos aqu se refieren a otros tipos de extraer nombres de entidades o sus listas, o de
trabajar con los conjuntos.
La funcin ENTMOD presenta algunas restricciones en cuanto al tipo de dato que puede actuali-
zar para una entidad. No puede modificar ni el nombre de entidad (cdigo 1) ni el tipo (cdigo
0), evidentemente. Si se modifica el nombre de estilo de texto, tipo de lnea o nombre de blo-
que, estos deben estar previamente definidos o cargados en el. Si se modifica el nombre de
capa en cambio, se crea una nueva capa si no existiera previamente como hemos podido
comprobar. Si se modifica la lista de una entidad principal, se actualiza su imagen en panta-
lla. Si se modifica la lista de una subentidad (vrtices de polilnea o atributos) la imagen en
pantalla no cambia hasta que se utiliza ENTUPD (la veremos a continuacin).
No se pueden modificar con ENTMOD entidades de ventanas grficas (tipo VI EWPORT). Tampoco
las entidades incluidas en la definicin de un bloque.
( ENTUPD nombre_entidad)
Como hemos comentado pues, mediante ENTMOD se actualiza en la Base de Datos una entidad
a la que se le han cambiado sus caractersticas. Si se trata de una entidad principal, ENTMOD
regenera directamente la entidad y sta se visualiza en pantalla ya actualizada. Pero si se mo-
difica un componente de una entidad compuesta como vrtices de una polilnea o un atributo
de un bloque, aunque se actualice la Base de Datos el aspecto de la entidad no cambiar en
pantalla hasta que se produzca una regeneracin general de todo el dibujo.
Mediante ENTUPD, indicando simplemente el nombre de la entidad (por ejemplo, el vrtice de
una polilnea modificada), se busca cul es la cabecera de esa entidad y se regenera, con lo
que se actualiza su aspecto en pantalla. En general, ENTUPD regenera la entidad cuyo nombre
se especifique, incluidas todas las subentidades.
Pues llegados a este punto, ya podemos ver algn ejemplo un poco ms trabajado. El siguien-
te es un ejemplo tpico de toda la vida. Un programa AutoLISP que permite cambiar la capa
actual de trabajo simplemente designando un objeto que se encuentre en la capa a la que que-
remos cambiar. Adems, y para introducir una pequea variacin, las dems capas sern des-
activadas. El listado sencillo es el siguiente:
( DEFUN C: DesCapa ( )
- - ( SETQ Li st aEnt ( ENTGET ( SSNAME ( SSGET) 0) ) )
- - ( SETQ Li st aCapa ( ASSOC 8 Li st aEnt ) )
- - ( SETQ Capa ( CDR Li st aCapa) )
- - ( SETVAR " CLAYER" Capa)
- - ( COMMAND " _. l ayer " " _of f " " *" " _n" " " )
)
Como podemos ver, aqu se crea un nuevo comando de AutoCAD llamado DESCAPA para reali-
zar lo propuesto. Lo primero es solicitar al usuario un objeto (SSGET), si se seleccionan varios
nicamente se elige el primero despus (ndice 0 de SSNAME), y se guarda su lista de especifi-
cacin (ENTGET) en la variable Li st aEnt . A continuacin se extrae la lista de la capa (cdigo 8
con ASSOC) de la lista completa Li st aEnt y se guarda en Li st aCapa, y luego se almacena en
la variable Capa la capa en cuestin, que es el segundo elemento (CDR) del par punteado que
guarda la capa (Li st aCapa). Por ltimo se establece dicha capa como actual con la variable
CLAYER y se desactivan todas las dems (exceptuando la actual, como decimos) con el coman-
do CAPA (LAYER en ingls) de AutoCAD 14.
NOTA: Al recibir el comando CAPA desde un archivo . LSP, AutoCAD lo activa en su modo de
lnea de comandos automticamente, por lo que no es necesario indicar CAPA (o incluso _. -
LAYER). Esa notacin es ms que nada para macros, aunque puede ser interesante incluirla
aqu para no perder la costumbre.

En el ejemplo que acabamos de ver, es factible seleccionar ms de un objeto y, aunque slo se
elija el primero despus, no parece lgico utilizar este mtodo en este caso. A continuacin
conoceremos una funcin que nos abrir los ojos un poco ms en este sentido.
ONCE.20.2.5. Nombre de entidad por un punto
Existen diversos comandos de AutoCAD que procesan entidades teniendo en cuenta el punto
de designacin con el que se ha actuado sobre las mismas, es el caso por ejemplo del coman-
do PARTE. Veamos la sintaxis de la siguiente funcin:
( ENTSEL [mensaje_solicitud])
La funcin ENTSEL espera a que el usuario designe una nica entidad mediante un punto y de-
vuelve una lista cuyo primer elemento es el nombre de la entidad (cdigo 1) designada, y su
segundo elemento las coordenadas X, Y y Z del punto de designacin. De esta forma se tienen
asociados ambos valores para procesarlos posteriormente.
Esta lista devuelta por ENSEL se puede indicar en las llamadas a los comandos de AutoCAD
que requieren sealar una entidad por un punto. As por ejemplo, si en lnea de comandos ha-
cemos:
( SET Punt oPar t e ( ENTSEL) )
y marcamos un punto de una lnea, por ejemplo. Y despus ejecutamos el comando PARTE, y
como primer punto para seleccionar objeto le decimos:
! Punt oPar t e
dicho punto ser aceptado por el comando de manera normal.
Se puede indicar una cadena de texto como argumento opcional de ENTSEL; esta cadena es un
mensaje de solicitud. Por ejemplo:

( SETQ NomEnt ( ENSET " Desi gnar ent i dad por un punt o: " ) )
Si no se especifica un mensaje, ENTSEL presenta el mismo que SSGET o DESI GNA, pero en sin-
gular, es decir, si para esos dos comentados era Desi gnar obj et os: , para ENTSEL es Desi g-
nar obj et o: (Sel ect obj ect : en ingls).
Una vez visto ENTSEL nos parecer ms lgico utilizarlo para el ejemplo anterior DESCAPA. El
ejercicio tratado con ENTSEL, y un poco ms trabajado, se presenta en el siguiente archivo.
falta bajar el archivo anterior

El ejemplo es tan sencillo que se ha definido todo l en una sola orden de usuario nueva.
Tras designar el objeto por un punto (ENTSEL) y guardar su nombre y punto de designacin
(que es lo que devuelve ENTSEL) en Ent , se guarda en Ent Name nicamente su nombre, extra-
yendo el primer elemento de la lista con CAR.
A continuacin se guarda en Capa el segundo elemento (CDR) del par punteado que comience
con 8 (ASSOC) dentro de la lista de la entidad (ENTGET) cuyo nombre es Ent Name.
Por ltimo se define la capa como actual, esta vez con el propio comando CAPA y se acaba el
programa. El resto se corresponde con el procedimiento de rigor de control de errores y control
de variables de AutoCAD.
ONCE.20.2.6. Aadir, eliminar y localizar enti-
dades
Veremos ahora tres funciones que nos permitirn aadir, eliminar y localizar una entidad de-
ntro de un conjunto de seleccin. Pero antes, expliquemos un poco otra que nos permite ave-
riguar el nmero de entidades de un conjunto. Su sintaxis es:
( SSLENGTH conjunto)
Como decimos, SSLENGTH determina el nmero de entidades que existen en el conjunto de
seleccin indicado. El nmero es siempre entero positivo, salvo si es mayor de 32.767, en cuyo
caso es un nmero real. Veamos un ejemplo simple:
( SETQ Conj unt o ( SSGET " _l " ) ) ( SSLENGTH Conj unt o)
SSLENGTH devolver siempre 1 en este caso, ya que SSGET almacena en Conj unt o el ltimo
(" _l " ) objeto dibujado y visible. Sencillo.
Por otro lado, para aadir una entidad a un conjunto de seleccin ya existente se utiliza la fun-
cin SSADD. Su sintaxis es la siguiente:
( SSADD [nombre_entidad [conjunto]])
Si se emplea sin ningn argumento construye un conjunto de seleccin vaco, si elementos. Si
se indica slo un nombre de entidad, construye un conjunto de seleccin que contiene slo esa
entidad. Si se especifica un nombre de entidad y tambin un conjunto de seleccin existente,
aade la entidad al conjunto, con lo que este pasa a tener un elemento ms.
La funcin SSADD siempre devuelve un valor de conjunto. Si se indica sin argumentos o slo
con el nombre de una entidad, dado que crea un conjunto nuevo, devuelve su valor. Si se es-
pecifica un conjunto ya existente, devuelve ese mismo valor especificado puesto que el efecto
es aadirle una entidad, pero el identificador del conjunto sigue siendo el mismo.
El siguiente ejemplo muestra el funcionamiento de SSADD:
( DEFUN C: Bor r aEnt ( )
- - ( SETQ Ent i dades ( SSGET) )
- - ( SETQ NuevaEnt i dad ( CAR ( ENTSEL " Desi gnar obj et o que se aadi r : " ) ) )
- - ( SSADD NuevaEnt i dad Ent i dades)
- - ( COMMAND " _. er ase" Ent i dades " " )
)
Este programa permite designar un conjunto de objetos en pantalla con SSGET para luego aa-
dir uno al conjunto, seleccionndolo mediante ENTSEL. SSADD aade el nuevo objeto al conjun-
to de seleccin Ent i dades ya existente, lo cual se puede comprobar cuando en la ltima lnea
se borran los objetos del conjunto.
( SSDEL nombre_entidad conjunto)
SSDEL, por su lado, elimina la entidad, cuyo nombre se especifique, del conjunto de seleccin
indicado. Digamos que es el proceso contrario a SSADD.
El nombre del conjunto sigue siendo el mismo y por eso SSDEL devuelve ese nombre. Si la en-
tidad no existe en el conjunto, SSDEL devuelve ni l .
El siguiente ejemplo de SSDEL es el contrario del anterior:
( DEFUN C: Bor r aEnt 2 ( )
- - ( SETQ Ent i dades ( SSGET) )
- - ( SETQ Vi ej aEnt i dad ( CAR ( ENTSEL " Desi gnar obj et o que se el i mi nar : " ) ) )
- - ( SSDEL Vi ej aEnt i dad Ent i dades)
- - ( COMMAND " _. er ase" Ent i dades " " )
)
Este programa permite designar un conjunto de objetos en pantalla con SSGET para luego eli-
minar uno del conjunto, seleccionndolo mediante ENTSEL. SSDEL elimina el nuevo objeto del
conjunto de seleccin Ent i dades ya existente, lo cual se puede comprobar cuando en la ltima
lnea se borran los objetos del conjunto.
( SSMEMB nombre_entidad conjunto)
Esta ltima funcin de esta seccin examina el conjunto de seleccin especificado para ver si la
entidad cuyo nombre se indica est en l. Si la encuentra devuelve su nombre, si no devuelve
ni l .
ONCE.20.2.7. Aplicar y determinar pinzamien-
tos
( SSSETFI RST conjunto_pinzamientos conjunto_seleccionados)
Esta funcin aplica pinzamientos a los conjuntos especificados. Los pinzamientos se aplican al
primer conjunto, pero sin que queden sus entidades seleccionadas. Si se indica un segundo
conjunto, adems de aplicar pinzamientos, sus entidades quedan seleccionadas. Si hay entida-
des comunes en ambos conjuntos, slo se pinza y selecciona del segundo, ignorndose el pri-
mero. La funcin devuelve una lista con los dos conjuntos de seleccin.
( SSGETFI RST)
Esta funcin devuelve una lista con dos conjuntos de seleccin: el primero con todas las enti-
dades del dibujo que tienen aplicados pinzamientos pero sin estar seleccionadas, y el segundo
con todas las entidades que adems de tener aplicados pinzamientos estn seleccionadas.
ONCE.20.2.8. Obtener nombre con modo de se-
leccin
( SSNAMEX conjunto [ndice])
Esta funcin, al igual que SSNAME, devuelve el nombre de la entidad del conjunto especificado
que se encuentre en el lugar determinado por ndice. La diferencia con la otra funcin de
nombre casi igual, es que SSNAMEX, junto con dicho nombre, devuelve tambin los datos que
describen el tipo de seleccin realizada sobre dicha entidad por el usuario.
Los datos son devueltos en forma de una lista con sublistas, una para cada entidad, de la for-
ma:
( id_seleccin nombre_entidad ( datos) )
Cada una de estas sublistas tiene tres elementos, como vemos. Dichos elementos se comentan
detalladamente a continuacin.
id_seleccin es un nmero identificador del mtodo de seleccin empleado con la entidad.
Los nmeros posibles se indican en la siguiente tabla:
Identificador ----- Descripcin
--------------------------------------------------------------------------------
0 ----------------- Seleccin no especfica (ltimo, Previo, Todo...)
1 ----------------- Designacin mediante cursor
2 ----------------- Ventana o Polgono-Ventana
3 ----------------- Captura o Polgono-Captura
4 ----------------- Borde
nombre_entidad es el nmero hexacimal que es nombre de la entidad; el del cdigo 1.
datos es el conjunto de datos de informacin sobre el tipo de seleccin para la entidad. Si la
seleccin ha sido no especfica (identificador 0) no hay datos aadidos. Si ha sido sealado
directamente con el cursor (identificador 1), se ofrece una lista con el punto de designacin.
Dependiendo del punto de vista 3D, el punto de designacin se puede representar como una
lista infinita, un rayo (semi-infinita) o un segmento de lnea (finita). El punto en cuestin se
ofrece en una lista con sus tres coordenadas, precedida esta lista por un cdigo que puede ser
uno de los siguientes:
Cdigo ------------------ Descripcin
------------------------------------------------------
0 ------------------------ Lnea infinita
1 ------------------------ Rayo semi-infinito
2 ------------------------ Segmento de lnea finito
Adems, a las tres coordenadas sigue un vector opcional que describe la direccin de la lnea
infinita o el desplazamiento al otro extremo del segmento de lnea. Si se omite en el listado,
significa que el punto de vista es en planta. Por ejemplo, la siguiente lista es devuelta para un
objeto designado en el punto de X = 50 e Y = 50 en una vista en planta del SCU:
( 1 <Nombr e de obj et o: 26a0b07> ( 0 ( 50. 0 50. 0) ) )
Si la seleccin es del tipo Ventana o Captura, sus datos se ofrecen en una lista que empieza
por un identificador de polgono con nmero negativo (- 1, - 2, - 3, etc.) y despus sublistas con
todos los vrtices del rectngulo o polgono, indicndose en cada una el tipo de punto (0, 1
2) y las tres coordenadas. Por ejemplo, la siguiente lista es devuelta por una designacin de
Captura en una vista en planta:
( ( 3 <Nombr e de obj et o: 26a0c12> - 1 ) ( ( - 1 ( 0 ( 20. 0 10. 0 0. 0) ) )
( 0 ( 50. 0 10. 0 0. 0) )
( 0 ( 50. 0 40. 0 0. 0) )
( 0 ( 20. 0 40. 0 0. 0) )
)
)
Si la seleccin es del tipo Borde, los datos son una lista de puntos de interseccin entre la lnea
de Borde y la entidad. Por ejemplo, la siguiente lista es devuelta por una designacin de Bor-
de, que ha intersectado con la entidad en el punto 32,56.
( 4 <Nombr e de obj et o: 26a5c09> ( 0 ( 32. 0 56. 0 0. 0) ) )
ONCE.20.2.9. Otras formas de obtener nombres
Como hemos comprobado para acceder a una entidad en la Base de Datos necesitamos su
nombre. Funciones que lo extraigan hemos visto hasta ahora SSNAME, SSNAMEX y ENTSEL, pero
existen tambin otras que cumplen esa misin dependiendo de la situacin en la que nos en-
contremos. Vemoslas.
( ENTNEXT [nombre_entidad])
Esta funcin devuelve el nombre de la primera entidad de la Base de Datos que sigue a la en-
tidad cuyo nombre se indica en nombre_entidad. Como vemos, este argumento o parmetro
de la sintaxis de ENTNEXT es opcional, y es que si no lo especificamos, la funcin devuelve el
nombre de la primera entidad no eliminada de la Base de Datos.
Un ejemplo tpico de uso de ENTNEXT es la de rastrear de modo repetitivo la Base de Datos del
dibujo para obtener todos los nombres de todas las entidades de dibujo (de un dibujo no muy
extenso, claro est), o los de las tres primeras, por ejemplo:
( SETQ Ent i dad1 ( ENTNEXT) )
( SETQ Ent i dad2 ( ENTNEXT Ent i dad1) )
( SETQ Ent i dad3 ( ENTNEXT Ent i dad2) )
ENTNEXT no slo accede a las entidades principales, sino tambin a las contenidas en ellas. As
pues, otro ejemplo ms lgico y utilizado se refiere a la extraccin de todos los vrtices de una
polilnea no optimizada, o los atributos de un bloque. Se puede poner como condicin que re-
corra todas las entidades hasta que encuentre " SEQUEND" .
Si lo que queremos es saber a qu polilnea de antigua definicin pertenece determinado vrti-
ce, habr que ir explorando todas las polilneas del dibujo hasta dar con alguna caracterstica
de dicho vrtice. En dicho momento, y tras la entidad " SEQEND" , se extrae el valor del cdigo
2 que da el nombre de la entidad principal.
( ENTLAST)
Esta funcin devuelve el nombre de la ltima entidad principal no eliminada de la Base de Da-
tos. Slo entidades principales.
Habitualmente se utiliza para capturar el nombre de una entidad recin dibujada mediante
COMMAND desde un programa AutoLISP. Presenta la gran ventaja de que obtiene el nombre de
la entidad aunque no sea visible en pantalla o se encuentre en una capa inutilizada.
En el siguiente ejemplo, la variable Ent i dadL nea almacena el nombre de la entidad tipo lnea
recin dibujada, sin necesidad de tener que designarla. Con este nombre ya es posible acceder
a la Base de Datos y realizar las operaciones convenientes:
( COMMAND " _. l i ne" " 0, 0" " 100, 100" " " )
( SETQ Ent i dadL nea ( ENTLAST) )
( NENTSEL [mensaje_solicitud])
Esta funcin permite acceder en la Base de Datos a una entidad que se encuentre formando
parte de una entidad compuesta (polilnea no optimizada o bloque). La cadena de texto opcio-
nal es el mensaje para la solicitud de designacin de entidad.
Cuando la entidad que se designa no forma parte de otra compuesta, NENTSEL devuelve la
misma informacin que ENTSEL, es decir, una lista cuyo primer elemento es el nombre de la
entidad y su segundo elemento el punto de designacin.
Cuando con NENTSEL se designa un componente de una polilnea no optimizada, devuelve una
lista cuyo primer elemento es el nombre de la subentidad, es decir el vrtice (tipo de entidad
" VERTEX" ) inicial del segmento de polilnea designado. El segundo elemento de la lista sigue
siendo el punto de designacin. Por ejemplo:
( NENTSEL " Desi gnar segment o de pol i l nea: " )
podra devolver:
( <Nombr e de obj et o: 26b004e> ( 5. 65 6. 32 0. 0) )
Cuando con NENTSEL se designa un componente de un bloque devuelve una lista con cuatro
elementos:
El primer elemento es el nombre de la entidad componente del bloque, extrada de la
tabla de smbolos con la definicin de ese bloque.
El segundo elemento es una lista con las coordenadas del punto de designacin.
El tercer elemento es una lista que contiene a su vez cuatro listas: es la matriz de transfor-
macin del Sistema de Coordenadas Modelo (SCM) al Universal (SCU). El Sistema de Coorde-
nadas Modelo (SCM) es aqul al que estn referidas todas las coordenadas en la definicin del
bloque. Su origen es el punto de insercin del bloque. La matriz de transformacin permite
trasladar las coordenadas de la definicin del bloque al Sistema de Coordenadas Universal
(SCU), para a partir de ah referirlas al Sistema de Coordenadas ms conveniente para el
usuario.
El cuarto elemento es una lista con el nombre de entidad que contiene a la designada. Si
existen varios bloques anidados, la lista contiene todos los nombres desde el bloque ms inter-
ior hasta el ms exterior de los que engloban a la entidad designada.
Por ejemplo, la designacin de una entidad que forma parte de un bloque, que a su vez se en-
cuentra incluido en otro bloque podra hacer que NENTSEL devolviera:
( <Nombr e de obj et o: 26c009d>
( 6. 65 5. 67 0. 0)
( ( 1. 0 0. 0 0. 0)
( 0. 0 1. 0 0. 0)
( 0. 0 0. 0 1. 0)
( 5. 021 4. 021 0. 0)
)
( <Nombr e de obj et o: 26c010e> <Nombr e de obj et o: 26c01ba>)
)
La excepcin a lo dicho son los atributos contenidos en un bloque. Si se designa un atributo,
NENTSEL devuelve una lista con slo dos elementos: el nombre de la entidad de atributo y el
punto de designacin.
( NENTSELP [mensaje_solicitud][punto])
De manera similar a la funcin anterior, NENTSELP permite acceder a todos los datos de defini-
cin de entidades contenidas en un bloque. Se puede especificar un mensaje de solicitud y un
punto de designacin.
NENTSELP obtiene una matriz de transformacin de 4 4 elementos definida as:
M
00
-------- M
01
-------- M
02
-------- M
03
M
10
-------- M
11
-------- M
12
-------- M
13
M
20
-------- M
21
-------- M
22
-------- M
23
M
30
-------- M
31
-------- M
32
-------- M
33
Las tres primeras columnas de la matriz expresan la escala y rotacin, y a cuarta columna es
un vector de traslacin. La ltima fila de la matriz no se toma en cuenta en las funciones que
operan con este tipo de matrices. Esta matriz sirve para aplicar transformaciones a puntos.
( HANDENT identificador)
Devuelve el nombre de la entidad asociada al rtulo o identificador indicado. Hasta ahora se ha
visto que los nombres de entidades eran nicos y las identificaban inequvocamente. Pero al
terminar la sesin y salir de AutoCAD, esos nombres se pierden. En cambio, los identificado-
res se asocian a cada entidad y no cambian en las diferentes sesiones de dibujo. Estos identifi-
cadores se obtienen en la Base de Datos mediante el cdigo 5.
Para comprobarlo podemos ejecutar el comando DDMODI FY con cualquier objeto. En el cuadro
de dilogo que despliega este comando, arriba a la derecha, aparece el identificador en cues-
tin de cada objeto. Si deseamos, podemos extraer luego la lista de dicho objeto con un
simple ( ENTGET ( CAR ( ENTSEL) ) ) para ver que asociado al cdigo 5 se encuentra dicho
identificador.
ONCE.20.2.10. Borrar/recuperar entidades
Veremos ahora una funcin muy sencilla que elimina o recupera una entidad. Esta funcin es:
( ENTDEL nombre_entidad)
ENTDEL elimina de la Base de Datos la entidad, cuyo nombre se indica, si existe en ella en el
dibujo actual; ENTDEL recupera la entidad cuyo nombre se indica si haba sido previamente
borrada de la Base de Datos.
Esto quiere decir que las entidades borradas con ENTDEL pueden ser posteriormente recupera-
das con el mismo ENTDEL, antes de salir de la actual sesin de dibujo evidentemente. Al salir
del dibujo actual, las entidades borradas con ENTDEL se pierden definitivamente, sin haber po-
sibilidad de recuperacin.
ENTDEL solo accede a entidades principales; no es posible eliminar vrtices de polilneas sin
optimizar ni atributos de bloque.
Ejemplo:
( DEFUN C: El i ( )
- - ( SETQ Nombr e ( CAR ( ENTSEL " Desi gnar un obj et o par a ser bor r ado: " ) ) )
- - ( ENTDEL Nombr e)
- - ( I NI TGET 1 " S No" )
- - ( SETQ Recup ( GETKWORD " Recuper ar l o ahor a ( S/ N) ? " ) )
- - ( I F ( = Recup " S " )
- - ( ENTDEL Nombr e)
)
Este ejemplo permite eliminar cualquier objeto del dibujo actual. Tras ello, nos ofrece la posibi-
lidad de recuperarlo o no.
ONCE.20.2.11. Obtener rectngulo de texto
La funcin TEXTBOX devuelve las coordenadas de la caja de abarque o rectngulo contenedor
de una entidad texto cuya lista se especifique. Su sintaxis es la que sigue:
( TEXTBOX lista_entidad_texto)
lista_entidad_texto puede ser la lista completa de la entidad de texto en cuestin o una
lista parcial que contenga nicamente el valor de cadena del texto (par punteado con cdigo 1
en la lista de entidad de texto). Por ejemplo:
( TEXTBOX ( ENTGET ( CAR ( ENTSEL " Sel ecci one t ext o: " ) ) ) )
Este ejemplo trabaja con la lista completa de un texto; el siguiente nicamente con la sublista
de asociacin de la cadena de texto:
( TEXTBOX ( ( 1 . " Hol a" ) ) )
Si se indica slo la lista parcial con el texto, se utilizan los valores actuales por defecto de los
parmetros de definicin del texto. Si se indica la lista completa, se utilizan los valores conte-
nidos en ella.

Las coordenadas devueltas por TEXTBOX son el vrtice inferior izquierdo y el superior derecho
del rectngulo de abarque, tomndose siempre como punto de insercin el 0,0,0. El primer
punto nicamente es diferente de 0 cuando se trata de un texto de generacin vertical o con-
tiene letras con astas verticales por debajo de la lnea de base.
ONCE.20.2.12. Construccin de una entidad
( ENTMAKE [lista_entidad])
Esta funcin permite aadir una entidad nueva al dibujo, construyendo directamente su lista
completa en la Base de Datos. Si la lista introducida es correcta, devuelve esa lista. En caso
contrario devuelve ni l . Las listas se indican generalmente como literales, con QUOTE ( ).
La lista debe contener todas las sublistas de asociaciones necesarias para definir completa-
mente cada tipo de entidad. Si se omite alguna se produce un error. Es posible omitir algn
dato optativo y entonces se asume la opcin por defecto. As por ejemplo si no se indica la
capa, la entidad construida asume la capa actual.
Una forma cmoda de aadir una nueva entidad a la Base de Datos es partir de una entidad ya
existente, obtener su lista con ENTGET modificar y aadir lo que sea preciso y crear la nueva
entidad con ENTMAKE. Esto evita tener que construir la lista completa desde el programa en
AutoLISP.
El tipo de entidad debe ir siempre en ingls, como sabemos (por ejemplo " CI RCLE" , " LI NE" ,
" ARC" , etc.) y debe ser el primer o segundo elemento de la lista. Lgicamente, todos los cdi-
gos de las sublistas de asociaciones debern ser correctos.
Para construir una entidad compleja como definiciones de bloques, referencias de bloque con
atributos, o polilneas no optimizadas, es preciso construir todas las listas necesarias emplean-
do varias veces ENTMAKE: la lista de cabecera o de la entidad principal, las listas con cada sub-
entidad componente y la lista final del tipo " SEQEND" o "ENDBLK" para las definiciones de blo-
que.
Aunque para explorar todas las entidades contenidas en las definiciones de bloque con ENT-
NEXT no es necesario buscar un tipo de entidad final (como " SEQEND" para las polilneas y atri-
butos) pues al llegar a la ltima ENTNEXT devuelve ni l , a la hora de construir las listas comple-
tas de la definicin de un bloque, es preciso aadir como ltima lista un tipo de entidad llama-
do " ENDBLK" .
Por ejemplo, para construir un cuadrado como polilnea no optimizada, evidentemente con
cuatro vrtices, en la capa actual y con color rojo (nmero 1) se podra hacer:
( ENTMAKE ( ( 0 . " POLYLI NE" )
- - - - - - - - - - - ( 62 . 1)
- - - - - - - - - - - ( 66 . 1)
- - - - - - - - - - - ( 70 . 1)
- - - - - - - - - - )
)
( ENTMAKE ( ( 0 . " VERTEX" )
- - - - - - - - - - - ( 10 0. 0 0. 0 0. 0)
- - - - - - - - - - )
)
( ENTMAKE ( ( 0 . " VERTEX" )
- - - - - - - - - - - ( 10 0. 0 10. 0 0. 0)
- - - - - - - - - - )
)
( ENTMAKE ( ( 0 . " VERTEX" )
- - - - - - - - - - - ( 10 10. 0 10. 0 0. 0)
- - - - - - - - - - )
)
( ENTMAKE ( ( 0 . " VERTEX" )
- - - - - - - - - - - ( 10 10. 0 0. 0 0. 0)
- - - - - - - - - - )
)
( ENTMAKE ( ( 0 . " SEQEND" )
- - - - - - - - - - )
)
En la cabecera de la polilnea, el cdigo 66 debe ir seguido obligatoriamente del valor 1 que
indica que siguen vrtices. Para que la polilnea sea cerrada, hay que incluir una lista con cdi-
go 70 y valor 1.
NOTA: Tambin se pueden construir directamente listas de objetos no grficos mediante ENT-
MAKE.
( ENTMAKEX [lista_entidad])
Esta funcin es similar a ENTMAKE, pero la entidad se crea sin propietario. Se suministra una
lista correcta de definicin y se crea un objeto, grfico o no grfico. Pero al no tener propieta-
rio, este objeto no se escribe en los archivos . DWG o . DXF.
ONCE.20.2.13. Manejo de tablas de smbolos
Existe una serie de funciones especficas para gestionar los objetos no grficos de AutoCAD.
Es posible modificar algunos de los datos de estos objetos, aunque la mayora de ellos no se
pueden crear expresamente mediante ENTMAKE El grupo de objetos de diccionario se denomina
as por contener el tipo de smbolo DI CTI ONARY y aparecer en los formatos de intercambio DXF
en ese grupo. Pero en realidad contiene dos tipos de objetos no grficos incorporados en la
Versin 13 de AutoCAD: estilos de lnea mltiple y grupos de seleccin.
Veremos a continuacin dichas funciones.
( TBLNEXT nombre_tabla [retroceso])
Esta funcin devuelve una lista con el contenido de la tabla de smbolos cuyo nombre se indi-
que. El nombre tiene que ser " LAYER" , " LTYPE" , " VI EW" , " STYLE" , " BLOCK" , "UCS" , " VPORT" ,
" DI MSTYLE" o " APPI D" , que son los nicos admitidos. La funcin devuelve la primera tabla de
smbolos existente de ese tipo, la primera vez que se utiliza. Despus va devolviendo las si-
guientes conforme se utiliza repetidamente.
Por ejemplo, en un dibujo con tres capas: 0, PI EZA y OCULTAS, TBLNEXT se utilizara tres veces
para obtener las caractersticas de las tres capas. Al escribir:
( TBLNEXT " l ayer " )
se devuelve:
( ( 0 . " LAYER" )
( 2 . " 0" )
( 6 . " CONTI NUOUS" )
( 70 . 0)
( 62 . 7)
)
La capa 0 tiene asociados un tipo de lnea CONTI NUOUS y un color 7 (blanco). Empleando de
nuevo TBLNEXT se devuelve la siguiente definicin de capa. Al escribir:
( TBLNEXT " l ayer " )
se devuelve:
( ( 0 . " LAYER" )
( 2 . " PI EZA" )
( 6 . " CONTI NUOUS" )
( 70 . 0)
( 62 . 1)
)
La capa PI EZA tiene asociados un tipo de lnea CONTI NUOUS y un color 1 (rojo). Por ltimo, al
escribir:
( TBLNEXT " l ayer " )
se devuelve:
( ( 0 . " LAYER" )
( 2 . " OCULTAS" )
( 6 . " TRAZOS" )
( 70 . 3)
)
La capa OCULTAS tiene asociados un tipo de lnea TRAZOS y un color 3 (verde).
Si se empleara TBLNEXT para la tabla LAYER por cuarta vez, se devolvera ni l puesto que ya
no existen ms definiciones de capas.
Para examinar los componentes de la definicin de un bloque, se accede a su tabla de smbolos
mediante ( TBLNEXT " bl ock" ) o TBLSEARCH (que ahora veremos). El cdigo - 2 de la lista de-
vuelta, contiene el nombre de la primera entidad de la definicin del bloque. Se obtiene y se
suministra a ENTNEXT, de manera que sucesivos ENTNEXT van devolviendo todas las listas de
los componentes del bloque, hasta que al llegar a la ltima ENTNEXT devuelva ni l .
Si el argumento retroceso no se omite y tiene un valor diferente de ni l la funcin TBLNEXT
empieza a buscar desde la primera tabla de smbolos.
( TBLSEARCH nombre_tabla smbolo [siguiente])
Esta funcin busca en el tipo de tabla que se indique, el nombre de smbolo especificado a con-
tinuacin y devuelve la lista correspondiente. De esta forma se puede buscar por ejemplo di-
rectamente la lista correspondiente a la capa llamada PI EZA, haciendo:
( TBLSEARCH " l ayer " " pi eza" )
Normalmente se utiliza para determinar si existe una capa, un estilo de texto, etctera. En el
ejemplo siguiente se controla la existencia de carga de un tipo de lnea:
( TBLSERACH " LTYPE" " V as" )
Si el tipo de lnea existe se devuelve su lista de definicin, si no existe se devuelve ni l . Esto
puede ser muy til, ya que, como sabemos por ejemplo, el tipo de lnea no se representa en la
definicin de una entidad si es Por Capa, por lo que no surtir efecto alguno el que un usuario
intente asignar, mediante un programa, dicho tipo de lnea a una entidad si no est cargado.
Nos preocuparemos de comprobar su existencia para emitir un mensaje de error si no estuvie-
ra cargado.

Si se pretendiera acceder a la definicin de un estilo de texto definido en el dibujo y llamado
TS1, haciendo ( TBLSEARCH " STYLE" " TS1" ) , podra ser devuelta la siguiente lista:
( ( 0 . " STYLE" )
( 2 . " TS1" )
( 3 . " ROMANS" )
( 4 . " " )
( 70 . 0)
( 40 . 0. 0)
( 41 . 1. 0)
( 50 . 0. 0)
( 71 . 0)
)
El contenido de la tabla informa que el estilo est basado en la fuente o tipo de letra ROMANS,
con altura 0, factor de proporcin 1, ngulo de inclinacin 0 y generacin normal.
Si el argumento siguiente no se omite y tiene un valor diferente de ni l el contador de
TBLNEXT se ajusta de manera que la prxima llamada de TBLNEXT buscar la siguiente tabla a
la obtenida por TBLSEARCH.
( TBLOBJ NAME nombre_tabla smbolo)
Busca en la tabla indicada el nombre de smbolo especificado, devolviendo el nombre de enti-
dad de dicha tabla (recordemos que la funcin anterior haca lo mismo pero devolva la lista
completa). A pesar de no ser objetos grficos, las tablas de smbolos pueden gestionarse me-
diante ENTGET y ENTMOD como si fueran entidades grficas. Para ello se necesita suministrar su
nombre de entidad (cdigo - 1) y ste es el que obtiene TBLOBJ NAME. Este mecanismo permite
modificar directamente en la Base de Datos el nombre de un estilo de texto, el color asociado a
una capa, etc. Muy interesante; adems puede utilizarse como la anterior para controlar la
existencia de este tipo de objetos.
( SNVALI D nombre_tabla [indicador])
Esta funcin comprueba la validez de los caracteres del nombre de tabla de smbolos. Si es un
nombre vlido devuelve T y en caso contrario ni l . Los nombres deben contener slo caracte-
res alfanumricos y caracteres especiales como el de dlar $, guin de subrayado _ y guin
normal - . Tambin muy utilizado a la hora de comprobar si los nombres son vlidos.
( NAMEDOBJ DI CT)
Esta funcin es bsica para acceder a todos los objetos no grficos del grupo de diccionarios.
Devuelve el nombre de entidad del diccionario de objetos no grficos del dibujo actual. Se utili-
za en las funciones de exploracin de esos objetos DI CTNEXT y DI CTSEARCH.

( DI CTNEXT nombre_diccionario [retroceso])
Devuelve la lista con el contenido de objetos no grficos del grupo de diccionarios. El nombre
de diccionario suministrado debe haberse obtenido previamente mediante NAMEDOBJ DI CT. La
funcin devuelve el primer objeto de diccionario cuando se utiliza por primera vez. Despus
devuelve sucesivamente los dems objetos no grficos hasta el ltimo, tras el cual devuelve
ni l . Su funcionamiento es similar a TBLNEXT.
Actualmente, los dos nicos objetos no grficos accesibles en el grupo de diccionarios son los
estilos de lnea mltiple ACAD_MLI NESTYLE y los grupos de seleccin ACAD_GROUP, por lo que
DI CTNEXT devolver dos listas: la primera con los nombres de todos los estilos de lnea mlti-
ple creados y la segunda con los nombres de todos los grupos de seleccin creados.
Si el argumento retroceso no se omite y tiene un valor diferente de ni l la funcin DI CTNEXT
empieza a buscar desde el primer objeto no grfico de diccionario.
( DI CTSEARCH nombre_diccionario smbolo [retroceso])
Esta funcin busca en el grupo de diccionarios el tipo de objeto no grfico indicado en smbolo
y devuelve la lista correspondiente. El tipo de objeto slo puede ser " ACAD_MLI NESTYLE" , para
los estilos de lnea mltiple, y " ACAD_GROUP" , para los grupos de seleccin. La lista devuelta es
la misma que en DI CTNEXT.
Si el argumento siguiente no se omite y tiene un valor diferente de ni l el contador de DI CT-
NEXT se ajusta de manera que la prxima llamada de DI CTNEXT buscar la siguiente tabla a la
obtenida por DI CTSEARCH.
( DI CTADD nombre_diccionario smbolo nuevo_objeto)
Aade el nuevo objeto no grfico al diccionario especificado. Los objetos no grficos son estilos
de lnea mltiple y grupos de seleccin. El argumento smbolo es el nombre clave del objeto
que se va a aadir.
( DI CTREMOVE nombre_diccionario smbolo)
Elimina el objeto no grfico indicado en smbolo del diccionario especificado.
( DI CTRENAME nombre_diccionario smbolo_antiguo smbolo_nuevo)
Cambia el nombre de la entrada representada por smbolo_antiguo, por el nuevo nombre
indicado a continuacin en el diccionario especificado en primer lugar.
ONCE.20.2.14. Funciones relativas a datos ex-
tendidos
En AutoCAD, al emplear aplicaciones ADS o ARX, en la Base de Datos del dibujo se aade un
nuevo tipo de tabla de smbolos llamado " APPI D" . Cada tabla de este tipo contiene el nombre
de una aplicacin ADS o ARX utilizada para datos extendidos de entidades. De esta forma, ca-
da tipo de aplicacin puede aadir los datos necesarios para su funcionamiento a las entidades
de AutoCAD. Como en los dems casos, estos datos son accesibles a travs de listas de aso-
ciaciones. Para distinguirlos del resto comienzan con el cdigo - 3.
( REGAPP nombre_aplicacin)
Esta funcin registra un nombre de aplicacin externa en el actual dibujo de AutoCAD. Regis-
trando las aplicaciones con un nombre, es posible despus acceder a los datos extendidos de
las entidades. Si el registro de la aplicacin es correcto, REGAPP devuelve el nombre registrado.
En caso contrario (por ejemplo al especificar un nombre de aplicacin que ya existe), devuelve
ni l . El nombre puede contener hasta 31 caracteres alfanumricos y algunos especiales como
dlar $, subrayado _ y guin - . Una vez registrado, el nombre de la aplicacin se aade en la
Base de Datos como un tabla de smbolos del tipo " APPI D" .
Si en la funcin ENTGET se especifica una lista de nombres de aplicaciones registrados con RE-
GAPP, la lista devuelta incluye tambin el cdigo - 3 que es el denominado centinela o indicador
de que la entidad contiene datos extendidos, y todas las listas de datos que siguen a dicho
cdigo. Estos datos se encuentran asociados a cdigos de 1000 a 1071. Los datos extendidos
propios de AutoCAD 14 se obtienen indicando como nombre de aplicacin el de " ACAD" . Por
ejemplo:
( ENTGET ( ENTLAST) ( " acad" ) )
Slo algunos tipos de entidades contienen en AutoCAD datos extendidos, como por ejemplo
las ventanas grficas, los bloques de sombreados, las cotas, directrices y tolerancias geomtri-
cas.
( XDROOM nombre_entidad)
XDROOMdevuelve el espacio de memoria disponible para los datos extendidos de la entidad cu-
yo nombre se indica. El espacio mximo disponible para cada entidad es de 16383 octetos. El
valor devuelto por XDROOMes entonces la diferencia entre este mximo y lo que ocupan las
datos extendidos ya existentes para la entidad. Por ejemplo:
( XDROOM ( ENTLAST) )
podra devolver:
16264
( XDSI ZE lista_datos_extendidos)
Devuelve la longitud, en octetos o bytes, que la lista indicada ocupa cuando es aadida como
datos extendidos de una entidad. Es complementario del anterior XDROOMy se utiliza para con-
trolar cunto van ocupando en memoria los datos extendidos de una entidad.
La lista debe contener un nombre de aplicacin previamente registrado con REGAPP. Si existen
varios nombres de aplicaciones, se forma una lista que englobe a las dems (por ejemplo con
LI ST).
Hasta aqu todas las funciones relacionadas directamente con el acceso a la Base de Datos de
AutoCAD 14. A continuacin, estudiaremos cuatro ejemplos de programas completos que nos
ayudarn a la comprensin prctica de este tema.
El primer ejemplo que veremos se corresponde con un programa que permite distribuir un tex-
to indicado por el usuario a lo cargo de cualquier entidad de condicin curva, sea arco, crculo,
elipse, polilnea o spline, y/o de lneas. El listado del programa se encuentra en este archivo.
falta bajar el archivo anterior

El programa tiene el siguiente funcionamiento. El comando nuevo de AutoCAD TXCURVA, llama
primero a la funcin dat os_t xcur va y despus a t xcur va.
La funcin de datos solicita en primer lugar la altura del texto y la separacin entre el texto y
la curva en la cual se va a alinear. Un valor positivo deja al texto a un lado o "por encima" y un
valor negativo por el otro lado o "por debajo", siempre segn el sentido de creacin de la cur-
va. Para ambos datos, ofrece como valores por defecto los ltimos utilizados (cosa que ya he-
mos estudiado con otros ejemplos).
El programa crea un bloque que le resulta necesario para insertarlo con el comando GRADUA
(MEASURE). Este bloque contiene simplemente un punto y se le da el nombre de $t xcur va. El
carcter $ al principio es para distinguirlo de otros bloques que pueda contener el dibujo. Este
bloque ser limpiado al final se la rutina. Primero se comprueba mediante TBLSEARCH si ya
existe.
Para el espaciado entre caracteres el programa tiene en cuenta el estilo actual, extrado de la
variable de AutoCAD TEXSTYLE. El cdigo 41 contiene la anchura del estilo. El producto de ese
factor por la altura y una cantidad de 1. 2 es el espaciado entre caracteres. Se trata de un cl-
culo estimativo. El valor adecuado depender del estilo de texto. Ms adelante se tendrn en
cuenta determinados caracteres como " i " , " l " , " j " , etctera para modificar ese espaciado.
Se solicita designar la entidad para alinear el texto. Se establece un control por si se falla en la
designacin. La funcin ENTSEL slo permite designar una entidad. A continuacin se extrae el
tipo de entidad (cdigo 0) y se almacena en t ent . Si el tipo de entidad no es una de las vlidas
para graduar, se visualiza un mensaje de advertencia y se vuelve a solicitar.
Se llama al comando GRADUA, con el espaciado entre caracteres calculado ms arriba, y se in-
serta el bloque $t xcur va alinendolo con la curva. Con SSGET " _p" se almacena el conjunto
de puntos de graduacin, y se averigua su nmero en l conj . Se utiliza l ont x para controlar el
nmero mximo de caracteres que caben a lo largo de la curva. Se ofrece esa informacin al
usuario y se solicita el texto que se alinear (cadt x). Se almacena su longitud en l ont x y si es
superior a la mxima, se vuelve a solicitar.
Por su lado, en la funcin t xcur va se inicializa la variable nt x que controla el nmero de orden
de cada carcter en la cadena de texto para alinear, y desi g que almacena un conjunto de
seleccin vaco con SSADD.
A continuacin se establece un ciclo que se repetir tantas veces como caracteres haya en la
cadena de texto. Se extraen de la cadena los caracteres uno a uno. Se averigua en el conjunto
de bloques de punto el punto de insercin (cdigo 10) y el ngulo de insercin (cdigo 50),
mediante el mecanismo con SSNAME, ENTGET y ASSOC que ya conocemos.
El punto de insercin de cada carcter se calcula a partir del punto de insercin del bloque,
llevando en perpendicular una distancia igual a la separacin indicada por el usuario. Si el ca-
rcter es estrecho (" l " , " i " , " I " , " j " o " 1" ), se desplaza previamente el punto de insercin
hacia delante una sexta parte de la altura del texto. Si es " m" , se desplaza hacia atrs. Con
esto se persigue que esos caracteres no se solapen o se queden ms pegados al precedente
que al siguiente. Se traslada el ngulo de rotacin de radianes a grados, puesto que as hay
que indicarlo en el comando TEXTO. Se van insertando los caracteres uno a uno. Se aade cada
uno al conjunto de seleccin desi g para poder almacenar mediante el comando DESI GNA dicho
conjunto. Esto permitir referirse posteriormente a todo el texto a la vez con el modo Previo.
Por ltimo se borran todas las inserciones del bloque y se redibuja. El resto de mecanismos de
control de errores y dems ya est lo suficientemente explicado.
El segundo programa traza una lnea de tubera en tres dimensiones. Tuberas y codos se ge-
neran mediante mallas. El trazado deber haber sido previamente mediante lneas (slo l-
neas), de forma que los extremos de los tramos se toquen. El listado en el siguiente archivo.
falta bajar el archivo anterior

La funcin i ni c_t ubos solicita la designacin de lneas que son los ejes del trazado de tubos,
una a una y en orden. Establece un control con WHI LE para garantizar que se ha designado
alguna entidad. Examina el conjunto designado para rechazar las entidades que no sean l-
neas. Si no existen lneas o slo hay una, visualiza mensajes de advertencia. Al final, el con-
junto l i n contiene nicamente las entidades de lnea sealadas por el usuario.
La funcin dat os_t ubos va solicitando los datos necesarios. En primer lugar el dimetro exte-
rior de los tubos, despus el de los codos (ofreciendo como opcin por defecto el mismo que
para los tubos y evitando que sea menor que el de ellos). Las variables almacenan en cada
caso el valor de los radios. A continuacin se pide el radio interior de curvatura del codo. Por
ltimo la precisin del mallado para las superficies de cada tubo.
Las curvas de apoyo para el trazado se situarn en una capa cuyo nombre se forma con el de
la capa actual y un prefijo $c-.
Se toman los tres primeros puntos de la conduccin (primer punto de la primera lnea y primer
y ltimo punto de la segunda lnea) y se almacenan esos puntos en el Sistema de Coordenadas
de Entidad que es como se encuentran en la Base de Datos. Se trasladan esos puntos al SCP
actual. Se almacenan tambin los nombres de las entidades de lnea a que pertenecen. Por
ltimo se inicializa el contador de tramos n, y se pone a cierto T la variable pr i mpara controlar
que se trata del primer tramo que se dibuja.
t r amo_t ubos se encarga de dibujar cada tramo con su tubo y su codo. Establece el SCP ade-
cuado de acuerdo con el plano formado por las dos lneas que definen el tramo. Calcula el n-
gulo formado por esas lneas en el nuevo SCP y la distancia di s del vrtice a la que termina el
tubo y empieza el codo. Calcula la precisin de mallado t abcod del codo de acuerdo con el n-
gulo abarcado por el mismo.
Cambia a un nuevo SCP perpendicular al anterior para trazar los crculos que van a definir las
mallas. Los centros de estos crculos sern los puntos en que empieza y termina el tubo pr i y
pr f . Se trazan los crculos y se forman listas que contengan el nombre de cada uno con un
punto de designacin (del tipo de las devueltas por ENTSEL). Hay que tener la precaucin de
trasladar los puntos al SCP actual.
El codo se va a trazar como una superficie de revolucin y esto obliga a dibujar el eje y alma-
cenarlo tambin como una lista con nombre y punto de designacin. Si se trata del primer
tramo, o bien si el dimetro del codo es igual al de la tubera, entonces se evita dibujar las
mallas de transicin entre ambos dimetros, que visualizan el espesor del codo.
Una vez trazadas todas las curvas, se generan las mallas con SUPREGLA y SUPREV. Se cambian
las curvas de apoyo a la capa capl . Una vez recorrido el primer tramo se cambia la variable de
control pr i ma ni l para el resto de tramos.
act _t ubos se encarga de actualizar los valores de las variables para empezar el nuevo tramo
en la repetitiva. Almacena la distancia di s de final del ltimo tramo para utilizarla en di sant
como distancia de principio del nuevo tramo. Calcula los puntos necesarios para obtener el SCP
del plano formado por las dos lneas del nuevo tramo y suma uno al contador n.
La subrutina t r amof _t ubos dibuja el tramo final, alterando el orden de los puntos utilizados
para formar el SCP adecuado. Dibuja los ltimos crculos y obtiene las mallas correspondien-
tes. Para obtener los puntos necesarios, siempre se parte del SCE de la Base de Datos y de su
traslado al SCP actual.
c: t ubos es la funcin que compone el comando de AutoCAD. Llama a la funcin i ni c_t ubos
y establece una condicin. Si el usuario ha designado ms de una entidad de lnea, entonces
pueden trazarse los tubos. En caso contrario se visualiza un mensaje *No val e*.
Por lo dems, funciones de control de errores y dems.
Veamos un tercer ejemplo que maneja un cuadro de dilogo. El siguiente programa acta co-
mo DDMODI FY a pequea escala, es decir, permite modificar las propiedades de una entidad y/o
visualizarlas, pero en este caso slo de crculos. Concretamente se puede actuar sobre las co-
ordenadas del centro del crculo, su radio, capa, tipo de lnea y color. Veamos primeramente el
diseo en DCL (en este archivo) y el aspecto del cuadro de dilogo en cuestin:
falta bajar el archivo anterior

El cuadro es este:

El programa en AutoLISP est en este archivo.
falta bajar el archivo anterior

Se define un nuevo comando MODI CI R y una abreviatura MC a l. Tras la declaraciones de rigor,
el programa llama a la funcin Dat os, en la cual se nos pide designar un crculo. Se comprueba
si realmente es un crculo extrayendo el par punteado de su nombre; si no lo es se vuelve a
realizar la pregunta y, si s es un crculo, se llama a la funcin Cuadr o.
Cuadr o carga el letrero de dilogo y rellena sus casillas accediendo a la lista de la entidad. En
el caso del punto del centro, se distingue entre tomar las coordenadas de la lista de la entidad
designada o del punto designado mediante el botn Designar punto <, dependiendo pues si se
entra al cuadro por primera vez o tras haber designado un nuevo centro. Una vez hecho esto
se establecen las correspondencias de los ACTI ON_TI LE.
La funcin Desi gnar permite designar un nuevo centro y vuelve al cuadro. Recurdese la tc-
nica ya comentada de asignar una variable a lo devuelto por START_DI ALOG y de hacerla ni l al
entrar al cuadro para que no d problemas. Tambin hemos de tener presente la posibilidad de
cargar o no cargar el cuadro, dependiendo de si ya lo estuviera porque se viene de Desi gnar ,
o si no lo estuviera porque se acaba de ejecutar el comando.
Tras pulsar el botn Aceptar se nos manda a la subrutina Ti l es, la cual lo primero que hace es
llevarnos a Cont r ol DCL. Cont r ol DCL controla si alguna casilla del letrero est vaca. Si as fue-
ra, se muestra un mensaje de error, se resalta la casilla y da valor T a la variable Er r or DCL,
que hace que el cuadro no se cierre al establecer esa condicin en el ACTI ON_TI LE para ac-
cept .
Despus de Cont r ol DCL seguimos en Ti l es. En esta subrutina se asignan los valores corres-
pondientes a cada una de las variables implicadas, extrayndolo de los propios tiles. En el caso
del radio se comprueba que no sea cero o negativo; si as fuera se establece Er r or DCL a T pa-
ra lo mismo que lo explicado anteriormente. En el caso del tipo de lnea y del color, se com-
prueba que el tipo est cargado y que el color no sea menor de 0 ni mayor de 256, respecti-
vamente. Y se hace lo propio con Er r or DCL.
Tras acabar aqu, nos vamos a Acept ar , que se encarga de modificar la lista y sustituirla en la
Base de Datos. En los casos del centro, el radio y la capa no hay problema alguno, simplemen-
te hay que sustituir una lista por otra. Pero en el caso del tipo de lnea y el color, el problema
se presenta.
Si el tipo de lnea es Por Capa, en la lista de definicin de la Base de Datos el par punteado co-
rrespondiente no aparecer, por lo que habr que aadirlo (APPEND). Pero si es distinto de
Por Capa, el par punteado s aparece, as que habr que sustituirlo (SUBST). En el caso del color
ocurre exactamente lo mismo.
Por ltimo, se introducen los cambios en la Base de Datos y se cierra el cuadro.
El resto corresponde a lo que ya conocemos: control de errores AutoLISP y otras caractersti-
cas de relleno.
El ltimo ejemplo dice relacin a un programa que permite juntar dos curvas splines en una
sola. La nica condicin es que deben tocarse. Se pueden juntar sucesivas splines dos a dos.
Veamos el listado en este archivo:
falta bajar el archivo anterior

El programa utiliza el comando EDI TSPLI NE con la primera spline y, mediante la opcin Aj us-
t ar , subopcin aadi r , va aadiendo todos los puntos de ajuste de la segunda spline. Las
tangencias en el punto de contacto de ambas splines se pierden. Segn cul de las dos se se-
ale primero, la curva final resultante diferir ligeramente. Esto se hace apreciable sobre todo
en el primer tramo de la segunda spline que se junta.
La funcin inicial solicita sealar las splines que unir. Se establece mediante WHI LE un primer
control para obligar al usuario a que seale al menos una entidad. La funcin ENTSEL se utiliza
para sealar una nica entidad por un punto. Una vez sealada una entidad, es preciso com-
probar que se trata de una spline. Esto se hace accediendo a la Base de Datos y extrayendo el
tipo de entidad, asociado al cdigo 0. Adems, podra tratarse de una spline cerrada, en cuyo
caso no sera posible juntarle a otra. Las splines de este tipo tienen un valor impar asociado al
cdigo 70. Por eso se extrae dicho valor, se divide entre 2 y se obtiene el resto mediante REM.
Si es 1 significa que el valor es impar y por lo tanto una spline cerrada.
En resumen, si la entidad sealada por el usuario no es spline, o es una spline cerrada, enton-
ces se vuelve a solicitar su designacin. Cuando se obtiene una entidad correcta, su nombre de
identificacin (extrado con CAR) se almacena en spl b. A continuacin se solicita sealar la
spline para juntar. Se establecen los mismos controles, pero se aade otra posibilidad. Si la
entidad sealada es un spline no cerrada, se comprueba si se trata de la misma curva seala-
da en primer lugar. Esto se hace comparando los dos nombres de identificacin spl b y spl j .
Slo cuando no sean iguales, se aceptar la segunda spline.
La funcin para juntar extrae las listas en la Base de Datos de ambas splines mediante ENTGET
y las almacena en l i sb y l i sj . Los vrtices de ajuste se encuentran en sucesivas sublistas
con cdigo 11. Mediante MEMBER se extrae el resto de lista a partir de la primera aparicin de
un vrtice. As, la lista l i sv contiene las coordenadas de todos los vrtices en sublistas asocia-
das al cdigo 11. El nmero de vrtices de ajuste se obtiene de la sublista asociada al cdigo
74. Los vrtices extremos, que son el primero y ltimo de la spline se obtienen mediante NTH.
Se almacenan en pb1 y pb2.
La misma operacin se realiza con la lista de la segunda spline que se juntar a la primera.
Sus datos se almacenan en las mismas variables, pues los de la primera spline ya no intere-
san, una vez obtenidos sus vrtices extremos. As, l i sv contendr la lista con sublistas de
vrtices, numv el nmero de vrtices y pj 1 y pj 2 los vrtices extremos de la segunda spline.
Se utiliza COND para examinar las cuatro posibilidad y ver por qu extremos se tocan las spli-
nes. Si no se tocan, se visualiza un mensaje y se aborta el programa mediante QUI T. En fun-
cin de qu extremos se toquen, se invierte la lista de vrtices o se modifica pb2 para que al-
macene siempre el punto de contacto. Se utiliza EQUAL para comparar la igualdad de puntos,
estableciendo una cifra de aproximacin.
El mecanismo de unin de las splines va a ser el siguiente: mediante el comando EDI TSPLI NE
se designa la primera curva. Se utiliza la opcin Aj ust ar y dentro de ella la subopcin aadi r .
Se seala el vrtice de contacto como punto a partir del cual aadir los dems, y se van pro-
porcionando en orden todos los vrtices de la segunda spline que quedan as incorporados a la
primera. Pero como el nmero de vrtices es variable, la expresin debe formarse concatenan-
do una cadena de texto que despus ser convertida en expresin de AutoLISP y evaluada
mediante el mecanismo ( EVAL ( READ expr ) ) ya estudiado, que comentamos en su momento
de pasada y aqu lo vemos en accin.
Los vrtices se suministran extrayndolos de la lista lisv con NTH y CDR. Una vez aadidos to-
dos los vrtices de la segunda spline a la primera, se borra aqulla mediante ENTDEL. Se redi-
buja la spline global resultante mediante REDRAW. Si las splines tienen muchos vrtices, la ope-
racin de juntar puede llevar unos cuantos segundos de tiempo.
18 fase intermedia de ejercicios
Realizar un programa que facilite la modificacin global de las propiedades de varios textos a
la vez.
Realizar un programa que permita juntar dos polilneas 3D en una sola.
Disear un programa que haga resaltar las inserciones de todos los bloques de un dibujo uti-
lizando la generacin de vectores virtuales (explicado esto en la seccin ONCE.18.2.). Las
inserciones sern resaltadas ponindolas en relieve mediante vdeo inverso y, al mismo tiem-
po, visualizando una flecha virtual que seale el punto de insercin de cada bloque.
faltan ejercicios resueltos 2

ONCE.21. ACCESO A ARCHIVOS
Bajo esta seccin vamos a estudiar una importante aplicacin de los programas en AutoLISP,
esto es, la posibilidad de gestionar directamente archivos de texto ASCII. Todo lenguaje de
programacin que se precie goza de esta caracterstica, ya que le permite acceder a un archivo
de texto para leerlo, crearlo o modificarlo.
Si nos damos cuenta, la totalidad de los archivos que hemos venido estudiando en este curso
como archivos de personalizacin, . MNU, . LI N, . PAT, . AHP, . SCR, etctera, son archivos de
texto ASCII. Es por ello, que desde un programa en AutoLISP podremos acceder a sus lneas
en cualquier momento, as como crear archivos propios de una manera automtica.
ONCE.21.1. Fundamento terico somero sobre
el
acceso a archivos
A grandes rasgos, los archivos o ficheros de texto o datos a los que podemos acceder desde la
mayora de los lenguajes de programacin son dos: archivos de acceso secuencial y archivos
de acceso aleatorio o directo. La diferencia principal entre ambos estriba en la forma en la que
almacenan los datos. Por un lado, los archivos de acceso secuencial guardan la informacin
secuencialmente, es decir, dato tras dato organizados todo ellos en una serie de lneas. Tras
cada lnea se reconoce un retorno de carro con salto de lnea (I NTRO) y al final del archivo un
marca de fin de archivo. Son archivos ASCII que si se abren con cualquier editor se pueden
examinar fcilmente.
Por otro lado, los archivos de acceso directo tienen una forma ms eficaz de almacenar la in-
formacin. En la teora del acceso a estos archivos entra en juego el concepto de campo clave.
Los datos son guardados segn un campo clave o principal que los ordena basndose en su
condicin. De esta forma, una serie de registros almacenados segn un campo clave numrico,
sern introducidos en el archivo en su posicin correcta, nica e inequvoca.
Como norma general pues, los programas que manejen archivos de acceso aleatorio o directo
llegarn mucho antes a la informacin buscada por el usuario, mientras que los programas que
manejen archivos de acceso secuencial vern incrementado su tiempo de acceso, ya que han
de recorrer todo el fichero hasta dar con la informacin buscada. Sin embargo, este ltimo tipo
de archivos ocupa bastante menos espacio en disco, por la no organizacin de sus registros
(unos detrs de otros), mientras que los archivos de acceso directo ocupan ms espacio, ya
que los datos se escriben ordenados segn dicho campo clave, dejando espacio para los regis-
tros vacos an no rellenados.
AutoLISP slo es capaz de acceder a ficheros de acceso secuencial. Estos ficheros, pueden ser
archivos de texto como un archivo de men o de definicin de tipos de lnea, o ficheros de da-
tos tambin de texto ASCII que contengan, por ejemplo, coordenadas de puntos de un
levantamiento topogrfico (tpico fichero de salida de una estacin total, por ejemplo).
Los ficheros o archivos de texto que no guarden datos divididos en campos y registros, estarn
escritos como su autor lo quiso hacer, sin ningn orden lgico aparente. Sin embargo, los fi-
cheros de datos de salida de muchos utensilios (instrumentos topogrficos, mquinas de con-
trol numrico, etc.) o programas (bases de datos, hojas de clculo o el propio AutoCAD) s
guardan una estructura tipificada y normalizada. La mayora de ellos dividen sus registros (l-
neas) por retornos de carro con salto de lnea (I NTRO) y separan sus campos (columnas) por
algn carcter especial: una coma (formato CDF), un espacio blanco (formato SDF), u otros.
Adems, los campos suelen estar encerrados entre comillas dobles o simples si son cadenas o
sin ningn carcter delimitador si son campos numricos. Otros ficheros, separarn registros y
campos, o encerrarn datos, con cualquier otro carcter o tcnica.
Sea cual fuere la opcin o el tipo de fichero, el programador en AutoLISP habr de examinar
antes bien su contenido para estudiar la forma de llegar a extraer los datos necesarios del
mismo.
Por ltimo decir que existen tres formas bsicas de acceder a un fichero (enseguida veremos
cmo se hace en AutoLISP) desde los lenguajes de programacin: la de lectura, en la que un
imaginario puntero se coloca al principio del archivo exclusivamente para leer datos; la de es-
critura, en la que el puntero se coloca tambin al principio para escribir datos, eliminando los
que ya hay; y la de aadir datos, en la que el puntero se coloca al final del archivo para agre-
gar datos al mismo, sin afectar a lo que ya est guardado. Es muy importante tener esta lti-
ma caracterstica en cuenta para evitar errores fatales para el usuario.
ONCE.21.2. Funciones para el manejo de archi-
vos
A continuacin iremos describiendo cada una de las funciones de las que disponemos en Auto-
LISP para acceder y/o manejar ficheros. Comenzaremos evidentemente por la manera de abrir
uno de estos archivos. Para ello debemos recurrir a la funcin inherente OPEN, cuya sintaxis
es:
( OPEN nombre_archivo modo)
Esta funcin abre un archivo para permitir el acceso a las funciones de entrada y salida de Au-
toLISP. OPEN devuelve un valor de descriptor de archivo que posteriormente utilizaremos para
acceder a l, por lo que la prctica lgica consistir en guardar dicho descriptor para ser poste-
riormente utilizado. Viene a ser algo parecido que lo que hacamos con la funcin LOAD_DI ALOG
para guardar el ndice devuelto y luego usarlo en el acceso al cuadro de dilogo.
El nombre de archivo que proporcionamos a OPEN ser una cadena entrecomillada en la que se
especificar el nombre, y en su caso (si no se encuentra en el directorio actual) la ruta de ac-
ceso completa, del archivo o fichero en cuestin. Por su lado, el argumento modo, indica la ma-
nera en que se abrir el archivo, segn la tabla siguiente (el modo tambin se indica entre
comillas dobles):
Argumento modo -- Descripcin
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
" r " ---------------- Abre en modo lectura. Slo se pueden leer o extraer datos del
-------------------- archivo. Si el archivo indicado no existe se devuelve ni l .
" w" ---------------- Abre en modo escritura. Se escriben datos en el archivo y, si
-------------------- ya existan otros datos, se sobreescriben. Si el archivo indicado
-------------------- no existe se crea.
" a" ---------------- Abre en modo aditivo. Se escriben datos en el archivo al final del
-------------------- mismo, tras los datos existentes si hay. Si el archivo indicado no
-------------------- existe se crea.

Veamos varios ejemplos:
( SETQ Ar chi vo ( OPEN " ej empl o. t xt " " w" ) )
( SETQ Ar ch ( OPEN " c: / cl i ent es/ dat os/ t ext / bi l bao. dat " " a" ) )
( SETQ Des ( OPEN " a: \ \ move. scr " " r " ) )
( SETQ Ar chi vo ( OPEN " acadi so. l i n" " r " ) )
( CLOSE descriptor_archivo)
CLOSE cierra el archivo vlido abierto identificado por su descriptor de archivo (el obtenido por
OPEN). Una vez cerrado el archivo, se devuelve nil y ya no se puede hacer ninguna operacin
con l. El descriptor de archivo deja de ser vlido y al volver a abrirse mediante OPEN cambia-
r.
Es necesario cerrar los archivos cuando ya no se van a utilizar. Ejemplo:
( CLOSE Ar chi vo)

( READ- LI NE [descriptor_archivo])
Una vez abierto un archivo para lectura, utilizaremos la funcin READ- LI NE para leer una lnea
completa de dicho archivo, es decir, hasta el salto de lnea. Para ello deberemos indicar el des-
criptor de archivo que devolvi la funcin OPEN al abrirlo. READ- LI NE devuelve cada vez una de
las lneas como cadena, es decir, entre comillas dobles, hasta que al llegar al final del archivo
devuelve ni l .
Por ejemplo, imaginemos un archivo de texto llamado DATOS. ML1 que se encuentra en el direc-
torio raz de un disco duro (por ejemplo C: \ ). Dicho archivo contiene las siguientes lneas:
Est o es una pr ueba
de l ect ur a de ar chi vos.
Primero pues deberemos abrirlo para lectura, guardando el descriptor de archivo en una varia-
ble que llamaremos Ar ch:
( SETQ Ar ch ( OPEN " c: \ \ dat os. ml 1) )
A continuacin, si hacemos:
( READ- LI NE Ar ch)
AutoLISP devuelve:
" Est o es una pr ueba"
Una siguiente instruccin igual READ- LI NE devolver:
" de l ect ur a de ar chi vos. "
Una siguiente instruccin igual devolver ni l , ya que se ha llegado al final del archivo. Si se
desea retornar el puntero de lectura al principio del archivo, es necesario cerrarlo y volverlo a
abrir, si no, como observamos, el puntero se sita en la siguiente lnea a la ltima leda.
El siguiente pequeo programa comprueba si el tipo de lnea TRAZO_Y_PUNTOX2 se encuentra
definido en el archivo ACADI SO. LI N de AutoCAD 14:
( DEFUN C: BuscaLi n ( )
- - ( SETQ Exi st e ni l )
- - ( SETQ Ar ch ( OPEN " c: \ \ ar chi v~1\ \ aut oca~1\ \ suppor t \ \ acadi so. l i n" " r " ) )
- - ( WHI LE ( SETQ Li n ( READ- LI NE Ar ch) )
- - - - ( SETQ Li n ( STRCASE Li n T) )
- - - - ( I F ( WCMATCH Li n " *t r azo_y_punt ox2*" )
- - - - - - ( SETQ Exi st e T)
- - - - - - ( I F Exi st e ( ) ( SETQ Exi st e ni l ) )
- - - - )
- - )
- - ( I F Exi st e
- - - - ( PROMPT " \ nExi st e. " )
- - - - ( PROMPT " \ nNo exi st e. " )
- - )
- - ( CLOSE Ar ch)
- - ( PRI N1)
)
En un principio se establece la variable Exi st e como ni l , para futuras ejecuciones del pro-
grama, y se abre el archivo en cuestin para lectura. Se establece una condicional que dice
que mientras exista la variable Li n, que almacena una lnea leda del archivo, se realiza todo
lo dems. Es decir, mientras Li n tenga valor, es igual aqu a mientras queden lneas por leer
en el archivo. En el momento en que Li n valga ni l (fin de archivo) ya no se ejecutar ninguna
funcin de la repetitiva condicional.
En esa repetitiva se convierte el contenido de Li n (cada lnea del archivo) a minsculas con
STRCASE y la opcin T. Esto se realiza porque al ser una cadena se distingue entre maysculas
y minsculas, de tal forma que al intentar buscar posteriormente la subcadena t r a-
zo_y_punt ox2 en Li n (con WCMATCH), no se produzca ningn error de interpretacin.
Si la subcadena buscada existe se establece Exi st e como T, y si no existe se mira si Exi st e
ha tomado alguna vez el valor T (ha existido). Si as fuera no se hara nada, si no se establece-
ra a ni l .
Una vez terminado de leer el fichero, se comprueba si la variable Exi st e tiene valor T o ni l
(existe o no) y se acta en consecuencia, emitiendo el mensaje adecuado. Se termina cerran-
do el archivo y con un PRI N1 para evitar el ni l de CLOSE.
Si a la funcin READ- LI NE no se le especifica un descriptor de archivo, lee una cadena de texto
completa desde el teclado. As por ejemplo, si escribimos en lnea de comandos:
( READ- LI NE)
y ahora escribimos en la propia lnea de comandos Pr ueba de l ect ur a desde t ecl ado. , Au-
toLISP devuelve:
" Pr ueba de l ect ur a desde t ecl ado. " .

( WRI TE- LI NE cadena [descriptor_archivo])
WRI TE- LI NE funciona de forma inversa a READ- LI NE, esto es, escribe la cadena indicada como
una lnea completa en el archivo especificado por su descriptor vlido. Evidentemente el archi-
vo deber estar abierto para escribir o aadir datos, dependiendo de la modalidad que nos
interese.
El siguiente programa permite crear automticamente archivos de guin:
( DEFUN C: Cr eaSCR ( )
- - ( SETQ Nombr eAr chi vo ( GETSTRI NG " I nt r oduzca nombr e de ar chi vo: " ) )
- - ( SETQ DesAr chi vo ( OPEN Nombr eAr chi vo " a" ) )
- - ( WHI LE ( / = ( SETQ L nea ( GETSTRI NG " I nt r oduzca comando ( I NTRO f i n) : " T) ) " " )
- - - - ( WRI TE- LI NE L nea DesAr chi vo)
- - )
- - ( CLOSE DesAr chi vo)
)
Tras introducir un nombre para el archivo y abrirlo, se piden continuamente los comandos ne-
cesarios, los cuales se van escribiendo al archivo en cuestin. Al introducir un I NTRO se termi-
na el programa ya que L nea es igual a una cadena nula (" " ) y se cierra el archivo.
En este tipo de programas es lgico introducir bastantes controles, por ejemplo para que el
usuario introduzca la ruta de acceso con contrabarras y el propio programa las cambie a for-
mato de AutoLISP; es cuestin de jugar con las variables de manejo de cadenas estudiadas.
WRI TE- LI NE devuelve la cadena en cuestin entre comillas. Si no se indica un descriptor de
archivo, la funcin escribe la cadena, capturada desde el teclado, en la lnea de comandos.
( READ- CHAR [descriptor_archivo])
La siguiente funcin que veremos, READ- CHAR, lee un carcter del archivo especificado (abierto
para lectura) por su descriptor cada vez, y devuelve su cdigo ASCII. As por ejemplo, si un
archivo de texto llamado EJ EMPLO. DAT (en C: \ ) contuviera las dos siguientes lneas:
Hol a
Hol a yo
y si se abriera as:
( SETQ Hol a ( OPEN " c: / ej empl o. dat " " r " ) )
sucesivas llamadas con READ- CHAR as:
( READ- CHAR Hol a)
devolveran lo siguiente:
72
111
108
97
10
72
111
108
97
32
121
111
ni l
Cada vez se lee un carcter ms y se devuelve su cdigo ASCII. El cdigo 10 corresponde al
I NTRO entre las dos lneas (retorno de carro con salto de lnea). Por compatibilidad con UNIX,
en el que el final de lnea es siempre el cdigo ASCII 10, READ- CHAR devuelve este cdigo
cuando se utiliza en plataformas DOS/Windows y se detecta un I NTRO, a pesar de que en rea-
lidad el cdigo ASCII de este carcter es el 13. Vase la lista de cdigos ASCII en el APNDI -
CE F. Cuando no hay ms caracteres, READ- CHAR devuelve ni l .
Como sabemos, para volver a leer el archivo desde el principio (el puntero de lectura se colo-
que en el inicio) deberemos cerrarlo y volverlo a abrir.
NOTA: Para poder tratar con estos cdigos ASCII, recurdense las funciones ASCI I y CHR de
conversin carcter/cdigo y cdigo/carcter respectivamente, estudiadas en la seccin ON-
CE.12..
Si a la funcin READ- CHAR no le acompaa un descriptor de archivo, lee un carcter de la me-
moria temporal de entrada del teclado (buffer del teclado) y devuelve su cdigo ASCII. Si el
buffer contiene varios caracteres en el momento de ejecucin de READ- CHAR, devuelve el pri-
mero de ellos. Al igual que con los ficheros de texto, sucesivas llamadas devolvern los si-
guientes caracteres. Si no hay ningn carcter en el buffer de teclado en dicho momento, RE-
AD- CHAR espera a que el usuario entre una serie de caracteres, finalizados con I NTRO. Entonces
devuelve el primero de los caracteres introducidos; los siguientes READ- CHAR devolvern el
resto.
El siguiente ejemplo de READ- CHAR (combinado con READ- LI NE) controla si el primer carcter
de cada lnea de un archivo . LSP es un punto y coma (; ). Si as fuera agrega una unidad a un
contador. Al final, muestra el nmero de lneas ntegras de comentarios que existen en el ar-
chivo:
( DEFUN C: Coment ( )
- - ( SETQ Cont ador 0)
- - ( SETQ Ar chi vo ( GETSTRI NG " \ nCami no y nombr e del ar chi vo . LSP: " ) )
- - ( SETQ Desc ( OPEN Ar chi vo " r " ) )
- - ( WHI LE ( SETQ Li n ( READ- CHAR Desc) )
- - - - ( I F ( = ( CHR Li n) " ; " )
- - - - - - ( PROGN
- - - - - - - - ( SETQ Cont ador ( 1+ Cont ador ) )
- - - - - - - - ( READ- LI NE Desc)
- - - - - - )
- - - - - - ( READ- LI NE Desc)
- - - - )
- - )
- - ( CLOSE Desc)
- - ( PROMPT ( STRCAT " \ nEl t ot al de l neas nt egr as de coment ar i os es: " ( I TOA
- - - - - - - - - - - - - - - - - - - - Cont ador ) " . " ) )
- - ( PRI N1)
)
Obsrvese la manera conjunta de trabajar READ- CHAR y READ- LI NE. READ- CHAR lee el primer
carcter de la lnea, si es un punto y coma (convertido el cdigo con CHR) aade una unidad al
contador y con READ- LI NE se lee el resto de la lnea. De esta manera hacemos que el puntero
de lectura se coloque al principio de la siguiente lnea, con lo que podemos volver a empezar.
En el caso en el que el primer carcter no sea un punto y coma, se realiza la misma funcin
con READ- LI NE pero sin incrementar el contador.
( WRI TE- CHAR cdigo_ASCII [descriptor_archivo])
WRI TE- CHAR realiza la funcin inversa a READ- CHAR, es decir, escribe en un archivo cuyo des-
criptor se especifica, o en pantalla si no se especifica ningn descriptor, el carcter cuyo cdigo
ASCII se indica. Adems, devuelve este cdigo ASCII.
As pues, si escribimos:
( WRI TE- CHAR 72 Desc)
siendo Desc un descriptor vlido de archivo, en dicho archivo se escribir H, esto es, el carc-
ter correspondiente al cdigo ASCII 72. Si escribiramos en lnea de comandos:
( WRI TE- CHAR 72)
AutoLISP devolvera:
H72
ya que, como hemos dicho, escribe el carcter y devuelve el cdigo.
Por las mismas razones de compatibilidad con UNIX que en el caso de READ- CHAR, tanto el c-
digo ASCII 10 como el 13 pueden indicarse para escribir retornos de carro con salto de lnea
(I NTRO) o fines de lnea.
Veamos ahora otras tres funciones muy tiles para escribir datos en un archivo. La primera es
PRI N1, y las otras dos derivadas (PRI NT y PRI NC) sin similares a ella con alguna pequea dife-
rencia que explicaremos. La sintaxis de PRI N1 es:
( PRI N1 [expresin [descriptor_archivo]])
Esta funcin escribe expresiones en un archivo, si se indica un descriptor vlido, o en la lnea
de comandos, si no se indica descriptor alguno. Devuelve la propia expresin.
A diferencia de WRI TE- LI NE y WRI TE- CHAR, PRI N1 permite escribir cualquier expresin en un
fichero, sin necesidad de que sea una cadena de texto. As por ejemplo, la siguiente secuencia:
( SETQ Ar chi vo ( OPEN " c: / dat os. dat " " w" ) )
( SETQ Mensual i dad ( * 2 2350) )
( PRI N1 " Mensual i dad" Ar chi vo)
( PRI N1 Mensual i dad Ar chi vo)
( CLOSE Ar chi vo)
abre un archivo para escritura. Asigna a la variable Mensual i dad el valor de un producto y, a
continuacin, escribe en dicho archivo un texto o cadena fija y el valor de la variable expuesta.
Por ltimo, el fichero es cerrado. La apariencia ahora del archivo DATOS.DAT sera la que si-
gue:
" Mensual i dad" 4700
Es decir, las expresiones se aaden sin separacin de lneas o interlineado y, adems las cade-
nas literales son incluidas con sus comillas dobles correspondientes, al contrario que con WRI -
TE- LI NE. Por el contrario, si las expresiones son literales con apstrofo:
( PRI N1 Mensual i dad Ar chi vo)
( PRI N1 ( Set Q x 5. 5) Ar chi vo)
se aadiran como tales, pero en maysculas, evidentemente:
MENSUALI DAD( SETQ X 5. 5)
Si la expresin es una cadena con caracteres de control, PRI N1 escribe esos caracteres con
contrabarra y el nmero de su cdigo octal. Por ejemplo:
( PRI N1 ( CHR 2) Ar chi vo) escr i be y devuel ve " \ 002"
( PRI N1 ( CHR 10) Ar chi vo) escr i be y devuel ve " \ n"
( PRI N1 ( CHR 13) Ar chi vo) escr i be y devuel ve " \ r "
Se puede utilizar PRI N1 sin ningn argumento, que es lo que venimos haciendo en los progra-
mas hasta ahora. De esta forma, la funcin devuelve una cadena nula, es decir, simplemente
salta una lnea en la lnea de comandos de AutoCAD 14, sin ningn otro mensaje. Al incluir
pues PRI N1 sin argumentos como ltima expresin de un programa, haremos que su final sea
"limpio". Esta particularidad no se puede utilizar con archivos evidentemente.
NOTA: La utilidad real de PRI N1 es la de escribir expresiones compatibles por ejemplo con LO-
AD o con COMMAND, que llama, este ltimo, a comandos de AutoCAD cuyos mensajes con admi-
ten todos los cdigos ASCII.
( PRI NT [expresin [descriptor_archivo]])
Totalmente idntica a PRI N1, salvo que salta a nueva lnea antes de visualizar o escribir la ex-
presin y aade un espacio blanco al final. La siguiente secuencia:
( SETQ Ar chi vo ( OPEN " c: / dat os. dat " " w" ) )
( SETQ Mensual i dad ( * 2 2350) )
( PRI NT " Mensual i dad" Ar chi vo)
( PRI NT Mensual i dad Ar chi vo)
( CLOSE Ar chi vo)
escribira:
" Mensual i dad"
4700
dejando la primera lnea en blanco, ya que antes de escribir la cadena salta una lnea tambin.
Al final de ambas lneas hay un espacio blanco.
( PRI NC [ expr esi n [ descr i pt or _ar chi vo] ] )
Totalmente idntica a PRI N1, salvo que los caracteres de control se escriben como tales, no
representados por su cdigo octal. Alguno de estos caracteres puede ser representado en el
archivo por un smbolo, cosa que apreciaremos al abrirlo con un editor ASCII.
A diferencia de PRI N1, la funcin PRI NC escribe cualquier carcter admitido en un archivo de
texto y las expresiones pueden ser ledas directamente con funciones como READ- LI NE.
Por ejemplo las siguientes inclusiones del cdigo ASCII del salto de lnea con retorno de carro,
no aparecern en octal en el archivo, sino que sern caracteres I NTRO verdaderos, es decir, se
producirn los saltos de lnea con sus retornos de carro:
( SETQ k ( OPEN " c: / ej em1. doc" " a" ) )
( PRI N1 " w" k)
( PRI NC ( CHR 10) k)
( PRI N1 " x" k)
( PRI N1 " y" k)
( PRI NC ( CHR 10) k)
( PRI N1 " z" k)
El resultado ser:
"w"
"x""y"
"z"
Y veamos por ltimo otras dos funciones muy utilizadas.
( FI NDFI LE nombre_archivo)
La funcin FI NDFI LE explora directorios en busca del archivo especificado. El archivo se indica
entre comillas por ser cadena. Si se especifica sin ruta o camino de acceso, FI NDFI LE buscar
en los caminos de archivos de soporte incluidos en el cuadro Preferencias, en la pestaa Archi-
vos (carpeta Camino de bsqueda de archivo de soporte). Si se escribe una ruta de acceso en
el argumento nombre_archivo, FI NDFI LE buscar el archivo en la ruta especificada.
Si la funcin FI NDFI LE encuentra el archivo buscado devuelve la cadena que indica su camino
y nombre en formato vlido de AutoLISP, si no es as, devuelve ni l .
FI NDFI LE se utiliza eminentemente para comprobar la existencia de archivos o ficheros indica-
dos por el usuario para ser abiertos, ya que de no existir se producira un error en tiempo de
corrida de AutoLISP. Vamos a ver un ejemplo ya explicado en el que se ha aadido esta nueva
caracterstica; se corresponde con el programa contador de lneas ntegras de comentarios en
los ficheros . LSP:
( DEFUN C: Coment ( )
- - ( SETQ Cont ador 0)
- - ( SETQ Ar chi vo ( GETSTRI NG " \ nCami no y nombr e del ar chi vo . LSP: " ) )
- - ( I F ( NOT ( FI NDFI LE Ar chi vo) )
- - - - ( PROGN
- - - - - - ( PROMPT " \ nEr r or : el ar chi vo especi f i cado no exi st e. \ n" )
- - - - - - ( EXI T)
- - - - )
- - )
- - ( SETQ Desc ( OPEN Ar chi vo " r " ) )
- - ( WHI LE ( SETQ Li n ( READ- CHAR Desc) )
- - - - ( I F ( = ( CHR Li n) " ; " )
- - - - - - ( PROGN
- - - - - - - - ( SETQ Cont ador ( 1+ Cont ador ) )
- - - - - - - - ( READ- LI NE Desc)
- - - - - - )
- - - - - - ( READ- LI NE Desc)
- - - - )
- - )
- - ( CLOSE Desc)
- - ( PROMPT ( STRCAT " \ nEl t ot al de l neas nt egr as de coment ar i os es: " ( I TOA
- - - - - - - - - - - - - - - - - - - Cont ador ) " . " ) )
- - ( PRI N1)
)

( GETFI LED ttulo_letrero archivo_defecto patrn_extensin modo)
La funcin GETFI LED muestra el letrero estndar de gestin de archivos de AutoCAD 14. Pue-
de ser muy til cuando se programe con cuadros de dilogo en DCL, ya que es ms vistoso
escoger un archivo de un letrero que escribirlo en lnea de comandos.
Esta funcin devuelve una cadena que contiene la ruta y el nombre del archivo seleccionado en
el cuadro. Este nombre y ruta estn en formato AutoLISP, por lo que pueden ser perfectamen-
te guardados en una variable y posteriormente utilizados por la funcin OPEN, por ejemplo.
Expliquemos los argumentos.
ttulo_letrero es una cadena que formar el nombre en la parte superior el cuadro, en la
barra de ttulo (azul comnmente). Si se indica una cadena nula (" " ), aparecer el ttulo por
defecto Abrir dibujo.
archivo_defecto es el archivo que aparecer en la casilla Nombre de archivo: por defecto.
Su extensin ser la indicada con el siguiente argumento, si se indica. Si se introduce cadena
nula (" " ), no aparecer ningn archivo por defecto.
patrn_extensin especifica la extensin o extensiones que admitir el cuadro. Se pueden
indicar varias separadas por punto y coma (mnu; mns; mnl ; *), siendo la primera de ellas la que
aparecer primera en la lista desplegable Tipos de archivos: y la que aparecer por defecto en
la casilla Nombre de archivo:, siempre que haya un archivo indicado por defecto. Si se indica
una cadena nula (" " ), se especifica el patrn Todos los archivos (*.*). Este patrn tambin se
consigue con una cadena que encierre un nico asterisco " *" .
modo es un valor entero (codificado en bits) que condiciona el letrero segn los valores si-
guientes:
Valor de modo --------- Descripcin
-------------------------------------------------------------------------------------------------------
0 No es en realidad un valor de bit. Se define cuando no se indica ninguno de los siguientes. El
archivo seleccionado habr de existir y en el botn de la derecha de la casilla Nombre de ar-
chivo: apa-recer la leyenda Abrir, ya que es un cuadro para leer de un archivo.
1 El archivo seleccionado habr de ser nuevo, es decir, ser un archivo que se crear. Por lo
tanto, lo lgico ser escribir un nombre de archivo no existente en la casilla Nombre de archi-
vo:, tras escoger el directorio donde se crear. A la derecha de esta casilla la leyenda del bo-
tn adjunto ser Guardar, ya que es un cuadro para escribir en un archivo. Si se elige un ar-
chivo existente aparecer un mensaje de error advirtiendo de su existencia, ofrecindonos la
posibilidad de sobreescribirlo. El valor 1 es el bit 0.
2 Desactiva el botn Teclearlo. Este bit se define si se llama a la funcin GETFI LED mientras
otro cuadro de dilogo est activo (en caso contrario, obliga a cerrar el otro cuadro de dilo-
go). Si no se define este bit, se activa el botn Teclearlo. Cuando el usuario selecciona el bo-
tn, el cuadro de dilogo desaparece y GETFI LED devuelve 1. El valor 2 es el bit 1.
4 Permite al usuario escribir una extensin de nombre de archivo arbitraria o bien no escribir
ninguna. Si no se define este bit, GETFI LED slo acepta la extensin o extensiones especifica-
das en el argumento patrn_extensin, y si el usuario la escribe en la casilla de texto Nom-
bre de archivo:, la aade al nombre del archivo. El valor 4 es el bit 2.
8 Si se define este bit y no se define el bit 0 (valor 1), GETFI LED inicia en la biblioteca una
bsqueda del nombre de archivo escrito. Si encuentra el archivo y el directorio en el orden de
bsqueda en la estructura, descompone el camino y slo devuelve el nombre del archivo. Esto
no ocurre si los archivos que se buscan tienen el mismo nombre pero se encuentran en distin-
tos directorios. Si no se define este bit, GETFI LED devuelve el nombre completo del archivo,
incluido el nombre del camino. Definiremos este bit si utilizamos el cuadro de dilogo para
abrir un archivo existente cuyo nombre deseamos guardar en el dibujo (u otra base de datos).
El valor 8 es el bit 3.

Los valores mencionados pueden sumarse para combinar las distintas acciones, pudiendo pues
indicar valores desde 0 hasta 15 para el argumento modo.
Si se abre un cuadro de gestin de archivos para abrir uno (con valor de modo 0, por ejemplo)
y la extensin patrn nica o principal (la primera) es dwg, al cuadro se le aade un anexo por
la derecha para mostrar una presentacin preliminar del dibujo de AutoCAD 14, si la tuviere.
Como ya se ha dicho, la devolucin de GETFILED est en formato AutoLISP, concretamente
con doble contrabarra (contrabarra carcter de control y carcter contrabarra) para separar
directorios, por lo que una secuencia como la que sigue, por ejemplo, sera totalmente vlida:
( SETQ Ar chi vo ( GETFI LED " Abr i r ar chi vo ASCI I " " " " t xt ; dat ; *" 0) )
( SETQ Des ( OPEN Ar chi vo " r " ) )
19 fase intermedia de ejercicios
Crear un programa para realizar conversiones de unidades con respecto a las existentes en el
archivo ACAD. UNT. Presentar un men textual en el que se podr escoger la categora de las
unidades y, posteriormente, el tipo de unidad de origen y el de destino.
Realizar un programa que permita crear de un modo automtico tipos de lnea complejos con
texto. Se solicitarn al usuario todos los datos necesarios y despus de presentar una mues-
tra del tipo de lnea creado. Tras la aceptacin por parte del usuario, se incluir la definicin en
el archivo indicado por l tambin.
ONCE.22. FUNCIONES DE CHEQUEO
Se estudian ahora las funciones de AutoLISP que se utilizan para examinar los smbolos de los
programas, sean variables de usuario, subrs, valores concretos, funciones, etctera, y detectar
una caracterstica en concreto. Se puede conocer de este modo si un dato es cero o no, si una
variable existe o es nil, y dems.
Todas estas funciones las hemos venido sustituyendo por otros mecanismos totalmente lcitos
y que, en el fondo, se utilizan ms. Sin embargo, hemos de conocerlas e incluso veremos al-
guna que nos descubra nuevas posibilidades.
La primera que veremos se corresponde con la sintaxis:
( ATOM elemento)
ATOMexamina el elemento indicado como argumento nico y devuelve T si se trata de un to-
mo o ni l si es una lista. Todo lo que no sea una lista se considera un tomo. Veamos algunos
ejemplos:
( ATOM ( 3 5) ) devuelve ni l
( ATOM 6) devuelve T
( ATOM k) devuelve T
( ATOM ( SETQ x 6. 7) ) devuelve T
( ATOM ( SETQ x 6. 7) ) devuelve ni l
( BOUNDP elemento)
Esta funcin devuelve T si el smbolo indicado est asociado a un valor distinto de ni l . El sm-
bolo puede ser una variable, un nombre de funcin de usuario o incluso el nombre de una sub-
rutina de AutoLISP. nicamente si el smbolo es nil, BOUNDP devuelve ni l .
Puesto que BOUNDP examina smbolos, hay que indicar estos sin evaluar, es decir precedidos
del carcter de QUOTE: el apstrofo ( ). Veamos unos ejemplos; supongamos las siguientes
declaraciones:
( SETQ x 24)
( DEFUN FuncMi ( ) ( SETQ n ( 1+ n) ) )
( SETQ y x)
Veamos los resultados de la aplicacin de BOUNDP:
( BOUNDP x) devuelve T
( BOUNDP FuncMi ) devuelve T
( BOUNDP y) devuelve T
( BOUNDP h) devuelve ni l
( BOUNDP FuncOt ) devuelve ni l
( BOUNDP get poi nt ) devuelve T
Esta funcin puede resultarnos til en ciertos momentos. Quiz para saber si una variable es
ni l o T no la utilizaremos nunca, ya que estas expresiones son iguales:
( I F Radi o. . .
( I F ( BOUNDP Radi o) . . .
Pero estudiemos un ejemplo: quizs un programa necesite saber en tiempo real si una variable
a la que se va a dar un valor existe como funcin inherente de AutoLISP. Sabemos que no de-
bemos utilizar variables que sean nombres de funciones AutoLISP, ya que perdern, las fun-
ciones, su utilidad y valor. Sabemos tambin que existe la funcin ATOMS- FAMI LY que nos
permite saber si cierta subr existe o no, o incluso si un nombre de variable est ya utilizado o
no. Puede que ATOMS- FAMI LY sea ms engorroso de utilizar que BOUNDP dentro de un progra-
ma.
En estos casos podremos utilizar BOUNDP con este objetivo: conocer si una variable que va a
ser creada en tiempo real existe ya, sea de usuario o como nombre de inherente de AutoLISP,
o no.
( LI STP elemento)
LI STP, por su lado, explora el elemento indicado y devuelve T en el caso de que se trate de
una lista y ni l si no lo es. Supongamos:
( SETQ J ogt Gt ( 10 25 0) )
( SETQ x 45)
Veamos los resultados:
( LI STP J ogt Gt ) devuelve T
( LI STP J ogt Gt ) devuelve ni l
( LI STP x) devuelve ni l
( LI STP ( LI ST y z) ) devuelve T
( NUMBERP elemento)
NUMBERP examina el resultado de la evaluacin del elemento indicado como argumento y de-
vuelve T si dicho resultado es un nmero entero o real. De lo contrario devuelve ni l . Supon-
gamos:
( SETQ x 25)
( SETQ a " Hol a, qu t al ?" )
Veamos los resultados:
( NUMBERP x) devuelve T
( NUMBERP a) devuelve ni l
( NUMBERP ( SETQ y ( + 4. 5 67) ) ) devuelve T
( NUMBERP x) devuelve ni l
Una funcin que puede resultar interesante a la hora de operar con ciertas variables de las
cuales no conocemos su tipo de contenido exacto.

( MI NUSP elemento)
MI NUSP devuelte T si el valor del elemento indicado es un nmero real o entero negativo. En
caso contrario devuelve ni l . Ejemplos:
( MI NUSP 5) devuelve T
( MI NUSP 1. 8936) devuelve T
( MI NUSP ( * 2 5) ) devuelve ni l
( MI NUSP ( + 5 6) ) devuelve ni l
( MI NUSP ( + 5 4) ) devuelve T
( MI NUSP ( SETQ z 78) ) devuelve T
( ZEROP elemento)
ZEROP devuelte T si el valor del elemento indicado es cero; en caso contrario devuelve ni l . El
resultado ha de ser numrico, si no se produce un error bad ar gument t ype. Supongamos:
( SETQ x 25)
( SETQ y 0)
Vemos ahora los resultados:
( ZEROP x) devuelve ni l
( ZEROP y) devuelve T
( ZEROP ( - x x) ) devuelve T
( ZEROP ( * y 1) ) devuelve T
( NULL elemento)
Esta funcin examina el valor asociado al elemento y devuelve T si dicho valor es ni l . En caso
contrario devuelve ni l .
Existe una diferencia importante entre esta funcin y BOUNDP. En este caso se examinan resul-
tados de evaluacin de smbolos y no los propios smbolos. Por eso no interesa indicar literales
con NULL, puesto que el resultado de la evaluacin de un literal de un smbolo es el propio
nombre del smbolo. Como ese valor no es ni l , NULL aplicado a literales devolver siempre
ni l .
Supongamos las siguientes igualdades y la funcin definida:
( SETQ x 35)
( DEFUN Goi Beh ( ) ( SETQ n ( 1+ n) ) )
( SETQ y x)
Veamos los distintos resultados:
( NULL x) devuel ve ni l
( NULL Goi Beh) devuel ve ni l
( NULL Goi Beh) devuel ve ni l
( NULL ght F) devuel ve T
( NULL w) devuel ve T
Veremos ahora una funcin importante a la que podemos sacar mucho partido.

( TYPE elemento)
La funcin TYPE devuelve el tipo de elemento indicado. Este elemento puede ser un smbolo,
un valor concreto, una expresin AutoLISP, un nombre de funcin...
TYPE devuelve el nombre del tipo atendiendo a la siguiente tabla:
Devolucin -------- Significado
------------------------------------------------------------
REAL --------------- Valor numrico real.
I NT --------------- Valor numrico entero.
STR --------------- Valor textual (cadena alfanumrica).
FI LE -------------- Descriptor de archivo.
PI CKSET ---------- Conjunto de seleccin de AutoCAD.
ENAME ------------ Nombre de entidad de AutoCAD.
SYM--------------- Smbolo (variable).
LI ST -------------- Lista o funcin de usuario.
SUBR -------------- Funcin inherente de Autolisp o subrutina.
PAGETB ----------- Tabla de paginacin de funciones.
EXSUBR ----------- Subrutina externa.
Supongamos las siguientes declaraciones como ejemplo:
( SETQ x 53 y 27. 5 Txt " HOLA" Li st a1 ( a b c) )
( SETQ I ndAr ch ( OPEN " pr ueba. l sp" " a" ) )
( SETQ Conj ( SSGET) NomEnt ( SSNAME Conj 0) )
Veamos ahora como responderan los diversos elementos a una funcin TYPE:
( TYPE x) devuelve I NT
( TYPE x) devuelve SYM
( TYPE y) devuelve REAL
( TYPE I ndAr ch) devuelve FI LE
( TYPE Conj ) devuelve PI CKSET
( TYPE NomEnt ) devuelve ENAME
( TYPE Txt ) devuelve STR
( TYPE Li st a1) devuelve LI ST
( TYPE set q) devuelve SUBR
( TYPE ( SETQ z ( + 1 3) ) ) devuelve I NT
NOTA: Las tablas de paginacin (tipo PAGETB) son elementos que se aaden como primer tr-
mino de las listas que definen funciones de usuario, cuando la paginacin virtual de funciones
se encuentra activada. De todo esto se hablar al explicar la funcin VMON en la seccin ON-
CE.24..
El tipo devuelto por TYPE siempre est en maysculas y es un nombre no una cadena (no est
entrecomillado).
ONCE.22.1. Rastreo
Para acabar esta seccin veremos dos ltimas funciones denominadas de rastreo. Se llaman
as porque se dedican a la parte de depuracin de un programa en AutoLISP. Estas dos funcio-
nes se llaman TRACE y UNTRACE.
( TRACE funcin1 [funcin2...])
TRACE marca las funciones indicadas con un atributo de rastreo y devuelve el nombre de la
ltima funcin. La forma de utilizar TRACE es, generalmente, escribindola en la lnea de co-
mando de AutoCAD. Una vez definidas as las funciones que queremos rastrear, ejecutamos el
programa en cuestin.
Cada vez que la funcin indicada en TRACE es evaluada se visualiza en pantalla la llamada a
esa funcin y, cuando termina, el resultado de la evaluacin. Las distintas llamadas aparecen
con sangrados de lnea proporcionales al nivel de anidacin de las funciones. El texto que indi-
ca la entrada en la funcin es Ent r ada de Funcin: , siendo en las versiones anglosajonas del
programa: Ent er i ng Funcin: (Funcin se refiere al nombre de la funcin). El resultado se
precede del texto fijo Resul t ado: (Resul t : en ingls).
NOTA: El nombre de la funcin utilizada en TRACE ha de ser uno de una funcin definida por el
usuario. TRACE se puede utilizar antes de cargar el programa en memoria o despus.
( UNTRACE funcin1 [funcin2...])
Esta funcin desactiva los atributos de rastreo activados por TRACE. Devuelve el nombre de la
ltima funcin indicada.
Para aclarar el significado de estas funciones veamos un pequeo ejemplo. Supongamos el
siguiente programa:
( DEFUN Pi dePt o ( )
- - ( SETQ pt 2 ( GETPOI NT pt 1 " Nuevo punt o: " ) ) ( TERPRI )
- - ( COMMAND " l i nea" pt 1 pt 2 " " )
- - ( SETQ pt 1 pt 2)
)

( DEFUN C: Di buLi n ( )
- - ( SETQ pt 1 ( GETPOI NT " I nt r oduci r punt o: " ) ) ( TERPRI )
- - ( REPEAT 4
- - - - ( Pi dePt o)
- - )
)
Si hiciramos:
( TRACE Pi dePt o)
y ejecutramos el nuevo comando de AutoCAD DI BULI N, el resultado podra ser:
- - - - Ent r ada de PI DEPTO:
Comando: Resul t ado: ( 200. 0 50. 0 0. 0)
- - - - Ent r ada de PI DEPTO:
Comando: Resul t ado: ( 205. 0 65. 0 0. 0)
- - - - Ent r ada de PI DEPTO:
Comando: Resul t ado: ( 230. 0 70. 0 0. 0)
- - - - Ent r ada de PI DEPTO:
Comando: Resul t ado: ( 250. 0 100. 0 0. 0)
Cada vez que se llama a la funcin dentro de la repetitiva (REPEAT 4), esto es un total de cua-
tro veces, aparece el mensaje Ent r ada de PI DEPTO: , que aparece con dos sangrados sucesi-
vos, porque esta llamada est incluida dentro del DEFUN C: Di bul i n y a su vez dentro de RE-
PEAT 4, por lo tanto en un segundo nivel de anidacin. Una vez evaluada la funcin se visuali-
za el resultado.
ONCE.23. OPERACIONES BINARIAS LGICAS
Bajo esta seccin se agrupa una serie de funciones de AutoLISP que realizan operaciones a
nivel binario. Esto quiere decir que, aunque admiten que se indiquen los nmeros en decimal o
en hexadecimal, los consideran como binarios (conjunto de unos y ceros). Su utilidad es por
tanto muy especfica.
NOTA: La explicacin exhaustiva del sistema binario (funcionamiento, operaciones, conversio-
nes...) o del lgebra de Boole (tablas de verdad, verdad y falsedad...) escapa a los objetivos
de este curso. Aqu nos limitaremos nica y exclusivamente a mostrar las funciones AutoLISP
que manejan cifras binarias a nivel lgico.
( ~ valor_numrico)
Esta funcin devuelve la negacin lgica (NOT) de una cifra binaria, es decir el complemento a
1. El nmero indicado ha de ser entero. Veamos unos ejemplos:
( ~ 5) devuelve 6
( ~ - 6) devuelve 5
( ~ 0) devuelve 1
( ~ 54) devuelve 55
Recordemos que el carcter ~ (tilde) corresponde al cdigo ASCII 126, por lo que se escribe
con la combinacin ALT+126.
( BOOLE operacin [valor_entero1 valor_entero2...])
BOOLE realiza una operacin booleana general a nivel binario. El argumento operacin es un
nmero entre 0 y 15 que representa una de las 16 operaciones booleanas posibles. Los valores
enteros indicados se combinarn bit a bit de acuerdo con la funcin booleana especificada.
Esto significa que el primer bit del primer entero se combina con el primer bit del segundo en-
tero y as sucesivamente. El resultado final ser 0 1 segn la tabla de verdad de la funcin
booleana indicada. Lo mismo con el resto de bits de los valores enteros especificados. La com-
binacin final de todos los bits resultantes dar el nmero entero final que devuelve la funcin.
Algunos de los valores de operacin se corresponden con las operaciones booleanas estndar.
Estos valores, sus correspondencias y el resultado cierto (1) dependiendo de los nmeros en-
teros se muestran en la tabla siguiente:
Valor de operacin ------ Booleana estndar ------- Resultado es 1 si...
--------------------------------------------------------------------------------
1 ------------------------ AND (Y lgico) ------------- todos los bits de entrada
------------------------------------------------------ son 1 (A y B...).
6 ------------------------ XOR (O lgico exclusivo) ---- slo uno de los bits de
------------------------------------------------------ entrada es 1 (o A o B...).
7 ------------------------ OR (O lgico) -------------- al menos 1 de los bits de
------------------------------------------------------ entrada es 1 (A o B...).
8 ------------------------ NOT (NO lgico) ------------ ninguno de los bits de
------------------------------------------------------ entrada es 1 (no A no B...).
Veamos un ejemplo. Supongamos que escribimos:
( BOOLE 6 8 12 7)
Esto equivale a un XOR de:
8 que en binario es 1000
12 que en binario es 1100
7 que en binario es 111
Por lo tanto, la operacin XOR se realizar cuatro veces:
XOR de 1 1 0 devuelve 0
XOR de 0 1 1 devuelve 0
XOR de 0 0 1 devuelve 1
XOR de 0 0 1 devuelve 1
El resultado final es el nmero binario 0011 que equivale al 3 decimal. Por lo tanto:
( BOOLE 6 8 12 7) devuelve 3

( LOGAND [valor_entero1 valor_entero2...])
Esta funcin realiza un Y lgico (AND) a nivel binario de los valores indicados. Estos valores han
de ser enteros; el resultado es tambin un entero.
En un caso particular de operacin booleana con BOOLE, LOAGAND equivale a hacer BOOLE 1.
Ejemplo:
( LOGAND 5 7 12 14) devuelve 4
( LOGI OR [valor_entero1 valor_entero2...])
Realiza un O lgico (OR) a nivel binario. Los valores sern enteros y el resultado tambin
(equivale a BOOLE 7). Ejemplo:
( LOGI OR 1 4 9) devuelve 13

( LSH valor_entero nmero_bits)
Esta funcin devuelve el desplazamiento a nivel binario de un registro del nmero entero indi-
cado en un valor del nmero de bits especificado como segundo argumento. Si ste es positi-
vo, el entero se desplaza hacia la izquierda. Si el nmero de bits es negativo, el entero se des-
plaza a la derecha. Los dgitos que faltan entran como ceros, y se pierden los dgitos salientes.
En la siguiente tabla se muestran varios ejemplos donde se indica en primer lugar la funcin
AutoLISP, despus el nmero entero original indicado en la funcin; a continuacin el binario
equivalente a dicho entero; despus el valor del desplazamiento especificado; a continuacin el
binario resultante una vez aplicado ese desplazamiento; por ltimo el entero equivalente a ese
binario, que es el resultado final que devuelve LSH:
Funcin ---- E ----- Binario ----- Desplazam. ------- Binario res. -- Entero res.
----------------------------------------------------------------------------------
( LSH 2 1) - 2 - - - 10 - - - - - - - - - 1 - - - - - - - - - - - - - - 100 - - - - - - - - 4
( LSH 2 - 1) - 2 - - - 10 - - - - - - - - - - 1 - - - - - - - - - - - - - 1 - - - - - - - - - - 1
( LSH 40 2) - 40 - - 101000 - - - - - 2 - - - - - - - - - - - - - - 10100000 - - - 160
( LSH 11 - 1) - 11 - - 1011 - - - - - - - - 1 - - - - - - - - - - - - - 101 - - - - - - - - 6
ONCE.24. GESTIN DE LA MEMORIA
Esta ltima seccin contiene funciones de AutoLISP que gestionan la memoria disponible para
almacenar las variables, definiciones de funciones y valores de los programas cargados. Resul-
tan tiles cuando los requerimientos de memoria son grandes o la memoria disponible es redu-
cida, lo que puede provocar problemas.
AutoCAD utiliza automticamente la cantidad de memoria que necesita en cada caso. Pero en
sistemas con una capacidad limitada puede hacerse necesario un ajuste de la misma. Hay que
tener siempre presente que cuanto mayor es el nmero de variables y de funciones definidas,
mayores son las necesidades de memoria. Al mismo tiempo, si sus nombres ocupan ms de
seis caracteres se consume ms memoria. Todas estas circunstancias pueden forzar al usuario
a liberar memoria o a activar la llamada paginacin virtual de funciones, concepto que se ex-
plica a continuacin.
Enfilemos pues la recta final de este MDULO.
( VMON)
Esta funcin activa la paginacin virtual de funciones. sta no resulta necesaria hasta que se
agotan todos los dems tipos de memoria virtual, lo que ocurre muy raramente en la mayora
de las plataformas. En algn caso, cuando se tiene cargado en memoria un programa extenso
de AutoLISP o varios programas, puede ser insuficiente el espacio de memoria nodal disponi-
ble. La memoria nodal almacena todos los smbolos de funciones de usuario y de variables
cargados en memoria. Estos smbolos son los tambin llamados nodos.
Si esto ocurre, se puede emplear VMON para activar la paginacin virtual de funciones. Desde el
momento en que se llame a VMON, esa paginacin virtual afectar nicamente a las funciones
de usuario cargadas a partir de ese momento. Cada vez que se carguen nuevas funciones de
usuario y la memoria nodal sea insuficiente, AutoLISP ir evacuando las funciones poco utiliza-
das a un archivo temporal controlado por la paginacin de archivos de AutoCAD. Si esas fun-
ciones evacuadas se volvieran a necesitar, AutoLISP volvera a cargarlas en memoria nodal.
Estos intercambios son automticos y transparentes de cara al usuario.
Si se dispone de suficiente memoria RAM ampliada o paginada, la utilizacin de esa memoria
ser lgicamente mucho ms rpida que la paginacin en disco.
Las funciones de usuario cargadas antes de la llamada a VMON no pueden ser evacuadas de la
memoria nodal, por lo tanto seguirn ocupando espacio. De la misma manera, todos los sm-
bolos de variables continan en memoria nodal y no son afectados por VMON. Esto quiere decir
que aunque se hayan ampliado mucho las posibilidades de cargar programas largos, sigue
existiendo una limitacin de memoria nodal disponible.
Con VMON activada, todas las nuevas DEFUN colocan un nuevo nodo llamado tabla de paginacin
como primer elemento aadido a la lista de AutoLISP que define la funcin. Este primer ele-
mento no es visible a la hora de escribir (en pantalla o en un archivo) esa funcin. Pero se
puede obtener con CAR. La funcin TYPE devuelve el tipo de elemento PAGETB para esas tablas
de paginacin (como se explic en su momento).
( GC)
Cada vez que se pretende cargar en memoria un nuevo smbolo de funcin o de variable, Au-
toLISP busca en la memoria nodal nodos libres donde almacenarlo. La simple operacin de
crear una variable y atribuirle un valor, por ejemplo:
( SETQ Var 27. 53)
requiere dos nodos: uno para almacenar en memoria el nombre del smbolo (en este caso Var )
y otro para almacenar su valor (aqu 27.53).
Si el nombre del smbolo tiene seis caracteres o menos, se almacena directamente en el nodo.
Si tiene ms, se toma espacio adicional de la memoria nodal o montn. De ah la importancia
de utilizar nombres de smbolos (funciones de usuario o variables) con menos de seis caracte-
res.
Si no existen nodos libres para almacenar ese smbolo, AutoLISP recupera automticamente el
espacio inutilizado (nodos que se han liberado porque ya no tienen ningn smbolo asociado).
Si esto resulta insuficiente, solicita memoria adicional del montn para crear nuevos nodos. En
el momento en que se agote esta memoria, tendra que recurrir a la paginacin virtual de fun-
ciones si se encuentra activada (si se ha empleado VMON).
El espacio de memoria tomada del montn para crear nuevos nodos ya no puede ser devuelta
al montn hasta salir de AutoCAD. Sin embargo existe la posibilidad de forzar la recuperacin
de esa memoria mediante GC. Esta recuperacin de memoria lleva bastante tiempo y su utili-
dad es limitada. Es preferible dejar que AutoLISP vaya recuperando automticamente los no-
dos liberados en memoria sin necesidad de llamar a esta funcin.
( ALLOC valor_entero)
Los nodos en AutoLISP tienen un tamao de 12 octetos. Para evitar un fraccionamiento excesi-
vo de la memoria nodal, los nodos se agrupan en segmentos. Cada segmento tiene un tamao
implcito de 514 nodos, es decir, 6168 octetos.
Si se desea especificar un nmero de nodos diferente a 514 como tamao del segmento, se
puede hacer con ALLOC:
( ALLOC 1024)
Este ejemplo asignar a cada segmento un tamao de 1024 nodos, lo que representar 10240
octetos.
Asignando un tamao adecuado a los segmentos se pueden reducir las operaciones de recupe-
racin de memoria inutilizada, ganando en velocidad de ejecucin del programa. De todas for-
mas, es preferible dejar la tarea de gestin de memoria al mecanismo automtico de atribu-
cin de nodos de AutoLISP.
( EXPAND valor_entero)
El espacio de memoria para almacenar valores de cadenas se toma de la misma memoria
montn que los segmentos de nodos. Estos valores de cadenas son de todo tipo: nombres de
smbolos de ms de seis caracteres, valores concretos de variables de texto, textos de mensa-
jes, textos de opciones de men, etctera.
Por lo tanto en la memoria de montn, adems de la utilizada para los segmentos de nodos, se
requiere una parte para cadenas de texto. La funcin EXPAND reserva explcitamente para no-
dos, un nmero determinado de segmentos de la memoria montn. Ejemplo:
( EXPAND 10)
Este ejemplo reservar 10 segmentos que, si son de 514 nodos cada uno, representarn un
espacio de 51400 octetos. No es posible reservar toda la memoria montn disponible para
segmentos de nodos. AutoLISP necesita que exista una parte libre para la memoria de cade-
nas.
( MEM)
Esta funcin visualiza el estado actual de la memoria en AutoLISP, y devuelve ni l . Por ejem-
plo la funcin podra visualizar:
Nodos: 20224
Nodos l i br es: 40
Segment os: 76
Asi gnado: 256
Col ecci ones: 5
ni l

En versiones idiomticas inglesas de AutoCAD 14 la lista sera as:

Nodes: 20224
Fr ee nodes: 40
Segment s: 76
Al l ocat e: 256
Col l ect i ons: 5
ni l

Cada trmino indica lo siguiente:
Nodos: el nmero total de nodos atribuidos hasta ese momento.
Nodos l i br es: es el nmero de nodos que se encuentran libres como consecuencia
de la recuperacin de memoria no utilizada.
Segment os: es el nmero de segmentos atribuidos.
Asi gnado: indica el tamao en nodos del segmento actual.
Col ecci ones: es el total de recuperaciones de memoria no utilizada, que han sido
efectuadas (ya sea automtica o manualmente).


ONCE.24. CDIGOS Y MENSAJES DE ERROR
ONCE.24.1. Cdigos de error
En la tabla siguiente se muestran los valores de cdigos de error generados por AutoLISP. La
variable de sistema ERRNO toma uno de estos valores cuando una llamada de funcin de Auto-
LISP provoca un error que AutoCAD detecta despus.
Cdigo ----- Significado
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
0 ----------- Sin errores
1 ----------- Nombre no vlido de tabla de smbolos
2 ---------- Nombre no vlido de conjunto de seleccin o entidad
3 ---------- Se ha superado el nmero mximo de conjuntos de seleccin
4 ---------- Conjunto de seleccin no vlido
5 ---------- Uso no adecuado de definicin de bloque
6 ---------- Uso no adecuado de referencia externa
7 ---------- Seleccin de objeto: fallo en la designacin
8 ---------- Final de archivo de entida
9 ---------- Final de archivo de definicin de bloque
10 --------- No se ha encontrado la ltima entidad
11 --------- Intento no vlido de suprimir un objeto de ventana grfica
12 --------- Operacin no permitida durante el comando POL
13 --------- Identificador no vlido
14 --------- Identificadores no activados
15 --------- Argumentos no vlidos en la peticin de transformacin de coordenadas
16 --------- Espacio no vlido en la peticin de transformacin de coordenadas
17 --------- Uso no vlido de entidad suprimida
18 --------- Nombre de tabla no vlido
19 --------- Argumento de funcin de tabla no vlido
20 --------- Intento de definir una variable de slo lectura
21 --------- No puede utilizarse el valor cero
22 --------- Valor incorrecto
23 --------- Regeneracin compleja en curso
24 --------- Intento de cambiar el tipo de entidad
25 --------- Nombre de capa errneo
26 --------- Nombre de tipo de lnea errneo
27 --------- Nombre de color errneo
28 --------- Nombre de estilo de texto errneo
29 --------- Nombre de forma errneo
30 --------- Campo para el tipo de entidad errneo
31 --------- Intento de modificar una entidad suprimida
32 --------- Intento de modificar una subentidad SEQEND
33 --------- Intento de cambiar identificador
34 --------- Intento de modificar la visibilidad en pantalla grfica
35 --------- Entidad en capa bloqueada
36 --------- Tipo de entidad errnea
37 --------- Entidad polilnea errnea
38 --------- Entidad compleja incompleta en el bloque
39 --------- Campo de nombre de bloque no vlido
40 --------- Campos de identificador de bloque repetidos
41 --------- Campos de nombre de bloque repetidos
42 --------- Vector normal errneo
43 --------- Falta el nombre de bloque
44 --------- Faltan los indicadores de bloques
45 --------- Bloque annimo no vlido
46 --------- Definicin de bloque no vlida
47 --------- Falta un campo obligatorio
48 --------- Tipo de datos extendidos (XDATA) no reconocido
49 --------- Anidacin errnea de lista en XDATA
50 --------- Ubicacin errnea del campo APPI D
51 --------- Se ha superado el tamao mximo de XDATA
52 --------- Seleccin de entidad: respuesta nula
53 --------- APPI D duplicada
54 --------- Intento de crear o modificar objeto de pantalla grfica
55 --------- Intento de crear o modificar RefX, XDef o XDep
56 --------- Filtro SSGET: fin de lista no esperado
57 --------- Filtro SSGET: falta operando de prueba
58 --------- Filtro SSGET: cadena opcode (- 4) no vlida
59 --------- Filtro SSGET: anidacin errnea o clusula condicional vaca
60 --------- Filtro SSGET: incoherencia en principio y final de clusula condicional
61 --------- Filtro SSGET: nmero errneo de argumentos en clusula condicional (con NOT o
XOR)
62 --------- Filtro SSGET: superado el lmite mximo de anidacin
63 --------- Filtro SSGET: cdigo de grupo no vlido
64 --------- Filtro SSGET: prueba de cadena no vlida
65 --------- Filtro SSGET: prueba de vector no vlida
66 --------- Filtro SSGET: prueba de nmero real no vlida
67 --------- Filtro SSGET: prueba de nmero entero no vlida
68 --------- El digitalizador no es un tablero
69 --------- El tablero no est calibrado
70 --------- Argumentos de tablero no vlidos
71 --------- Error ADS: no es posible asignar buffer nuevo de resultados
72 --------- Error ADS: se ha detectado un puntero nulo

73 --------- No es posible abrir el archivo ejecutable
74 --------- La aplicacin ya est cargada
75 --------- Nmero mximo de aplicaciones ya cargadas
76 --------- No es posible ejecutar la aplicacin
77 --------- Nmero de versin no compatible
78 --------- No es posible descargar la aplicacin anidada
79 --------- La aplicacin no se descarga
80 --------- La aplicacin no est cargada
81 --------- Memoria insuficiente para cargar la aplicacin
82 --------- Error ADS: matriz de transformacin no vlida
83 --------- Error ADS: nombre de smbolo no vlido
84 --------- Error ADS: valor de smbolo no vlido
85 --------- Operacin AutoLISP/ADS no permitida mientras se presenta un cuadro de dilogo
ONCE.24.2. Mensajes de error

Como ya sabemos, cuando AutoLISP detecta una condicin de error, cancela la funcin en pro-
ceso y llama a la funcin *er r or * del usuario con un mensaje que indica el tipo de error. Si no
se define ninguna funcin *er r or * (o si *er r or * se limita a cero), la accin estndar es pre-
sentar el mensaje en la forma siguiente:
er r or : mensaje
El mensaje va seguido de un indicador de funcin. Si hay una funcin *er r or * definida por el
usuario, el indicador no acta, sino que se hace referencia a dicha funcin de usuario con men-
saje como argumento nico.
A continuacin se muestra una lista completa de los mensajes de error que puede proporcionar
AutoLISP en programas de usuario, adems de una explicacin de cada uno. La lista recoge los
mensajes nicamente en castellano, excepto los que se encuentran en ingls en todas las pla-
taformas idiomticas.
Lista 1
Los ar gument os de def un no pueden t ener el mi smo nombr e

Una funcin definida con varios argumentos que tengan el mismo nombre fallar y generar
este mensaje.
Aut oCAD r echaz l a f unci n

Los argumentos suministrados a una funcin de AutoCAD no son vlidos (como en SETVAR con
una variable de sistema de slo lectura o TBLNEXT con un nombre de tabla no vlido) o la pro-
pia funcin no es vlida en el contexto actual. Por ejemplo, no se puede utilizar una funcin
GET... de introduccin de datos del usuario dentro de la funcin COMMAND.
Desbor dami ent o de pi l a de Aut oLI SP
Se ha superado el espacio de almacenamiento de pila de AutoLISP. El motivo puede ser una
repeticin excesiva de funciones o listas de argumentos muy largas.
t i po de ar gument o er r neo
Se ha pasado un tipo de argumento incorrecto a una funcin Por ejemplo, no se puede obtener
la STRLEN de un nmero entero.
bad associ at i on l i st
La lista suministrada a la funcin ASSOC no est formada por listas de valor clave.
cdi go de conver si n er r neo
El identificador SPACE suministrado a la funcin TRANS no es vlido.
bad ENTMOD l i st
El argumento suministrado a ENTMOD no es una lista de datos de entidades adecuada (tal y
como lo devuelve ENTGET).
bad ENTMOD l i st val ue
Una de las sublistas de la lista de asociacin suministrada a ENTMOD contiene un valor errneo.
l i st a de ar gument o f or mal i nadecuada
Al evaluar esta funcin, AutoLISP ha detectado una lista de argumento formal no vlida. Qui-
zs no se trate de una funcin, sino ms bien de una lista de datos.
f unci n i ncor r ect a
El primer elemento de la lista no es un nombre de funcin vlido; quizs se trate de un nom-
bre de variable o de un nmero. Este mensaje tambin puede indicar que la funcin especifi-
cada no est bien definida (no olvidar la lista de argumentos formal obligatoria).
cdi go de f unci n er r neo
El identificador de funcin suministrado al comando TABLET no es correcto.
bad gr vecs l i st val ue
El valor pasado en una lista GRVECS no es un punto 2D o un punto 3D.
bad gr vecs mat r i x val ue
La matriz que se ha suministrado a GRVECS contiene errores de formacin o de tipo de datos
(por ejemplo: STR, SYM, etc.).
l i st a i ncor r ect a
Se ha suministrado una lista con errores de forma a una funcin. Esto puede suceder si un
nmero real empieza con un separador decimal. Hemos de incluir un cero inicial en este caso.
l i st a de punt os i ncor r ect a
La solicitud F, CP o WP lleva adjunta una lista nula o con elementos que no son puntos. Se utili-
zan con SSGET y GRVECS.
bad node
La funcin TYPE ha encontrado un tipo de elemento no vlido.
t i po de nodo er r neo en l a l i st a
La funcin FOREACH ha encontrado un tipo de elemento no vlido.
ar gument o de punt os i ncor r ect o val or de punt o i ncor r ect o
Se ha pasado un punto mal definido (una lista de dos nmeros reales) a una funcin que espe-
raba un punto. Un nmero real no puede empezar por un separador decimal; en dicho caso,
hay que incluir el cero inicial.
det ect ado nmer o r eal i ncor r ect o
Se ha intentado transmitir un nmero real no vlido de AutoLISP a AutoCAD.
bad ssget l i st
El argumento suministrado a SSGET " X" no es una lista de datos de entidad adecuada (tal y
como devuelve ENTGET).
bad ssget l i st val ue
Una de las sublistas de la lista de asociaciones suministrada a SSGET " X" contiene un valor
errneo.
cadena modo ssget i ncor r ect a
Este error se produce cuando SSGET recibe una cadena no vlida en el argumento modo.
l i st a de xdat a i ncor r ect a
Este error se genera cuando XDSI ZE, SSGET, ENTMOD, ENTMAKE o TEXTBOX recibe una lista de
datos de entidad extendida con errores de forma.
se r equi er e punt o de base
Se ha llamado a la funcin GETCORNER sin el argumento de punto base obligatorio.
Bool e ar g1 0 or 15
El primer argumento de la funcin booleana ha de ser un nmero entero entre 0 y 15.
i mposi bl e eval uar l a expr esi n
Separador decimal mal colocado o alguna otra expresin incorrecta.
no es posi bl e abr i r ( ar chi vo) par a ent r ada; f al l o de LOAD
No se ha encontrado el archivo designado en la funcin LOAD, o el usuario no tiene permisos de
lectura sobre ese archivo.
i mposi bl e vol ver a ent r ar en Aut oLI SP
Una funcin activa est utilizando el buffer de comunicacin AutoCAD/AutoLISP; no se podr
llamar a otra nueva funcin hasta que la actual haya finalizado.
i nt er r upci n desde el t ecl ado
El usuario ha tecleado CTRL+C durante el proceso de una funcin.
di vi de by zer o
No se puede dividir por cero.
desbor dami ent o en di vi si n
La divisin por un nmero muy pequeo ha dado como resultado un cociente no vlido.
exceeded maxi mumst r i ng l engt h
Se ha pasado a una funcin una cadena con ms de 132 caracteres.
ext r a r i ght par en
Se ha encontrado uno o ms parntesis cerrados de los necesarios.
f i l e not open
El descriptor de archivo para la operacin de E/S no es el de un archivo abierto.
l ect ur a de ar chi vo, memor i a de cadenas i nsuf i ci ent e
Memoria de cadenas agotada mientras AutoLISP lea un archivo.
f i l e si ze l i mi t exceeded
Un archivo ha superado el lmite de tamao permitido por el sistema operativo.
f l oat i ng- poi nt except i on
Slo sistemas UNIX. El sistema operativo ha detectado un error aritmtico de coma flotante.
f unci n cancel ada
El usuario ha tecleado CTRL+C o ESC (cancelar) en respuesta a una solicitud de datos.
f unct i on undef i ned f or ar gument
El argumento pasado a LOG o SQRT sobrepasa los lmites permitidos.
f unct i on undef i ned f or r eal
Se ha suministrado un nmero real como argumento de una funcin que exige un nmero en-
tero, por ejemplo ( LSH 2. 2 1) .
f al t a punt o f i nal gr vecs
Falta un punto final en la lista de vectores que se ha suministrado a GRVECS.
i l l egal t ype i n l ef t
El archivo . LSP no es ASCII puro, sino que se ha guardado con un programa de tratamiento de
textos e incluye cdigos de formato.
i mpr oper ar gument
El argumento para GCD es negativo o cero.
i nappr opr i at e obj ect i n f unct i on
El paginador de funciones VMON ha detectado una funcin mal expresada.
nmer o i ncor r ect o de ar gument os
La funcin QUOTE slo espera un argumento concreto, pero se le han proporcionado otros.
nmer o i ncor r ect o de ar gument os par a una f unci n
El nmero de argumentos para la funcin creada por el usuario no coincide con el nmero de
argumentos formales especificado en DEFUN.
sol i ci t ud i nadecuada de dat os sobr e l i st a de comandos
Se ha encontrado una funcin de comando pero no se puede ejecutar porque hay otra funcin
activa o porque el intrprete de comandos no est completamente inicializado. Este error pue-
de producirse desde una llamada a la funcin COMMAND en ACAD. LSP, ACADR14. LSP o en un ar-
chivo . MNL.
ent r ada i nt er r umpi da
Se ha detectado un error o condicin de fin de archivo prematuro, lo que ha provocado la fina-
lizacin de la introduccin de datos en el archivo.
i nsuf f i ci ent node space
No hay espacio suficiente en la pila de almacenamiento para la accin solicitada.
i nsuf f i ci ent st r i ng space
No hay espacio en la pila de almacenamiento para la cadena de texto especificada.
i nval i d ar gument
Tipo de argumento errneo o argumento sobrepasa los lmites permitidos.
l i st a de ar gument os no vl i da
Se ha pasado a una funcin una lista de argumentos que contiene errores.
i nval i d char act er
Una expresin contiene un carcter errneo.
par punt eado no vl i do
No se ha dejado el espacio pertinente antes y despus del punto en la construccin manual del
par punteado. Este mensaje de error tambin puede deberse a un nmero real que empieza
por el separador decimal, en cuyo caso ha de incluir el cero inicial.
val or de nmer o ent er o no vl i do
Se ha encontrado un nmero menor que el entero ms pequeo o mayor que el nmero entero
ms grande.
desbor dami ent o LI SPSTACK
Se ha superado el espacio de almacenamiento de pila de AutoLISP. El motivo puede ser una
repeticin excesiva de funciones o listas de argumentos muy largas.
mal f or med l i st
Se ha terminado prematuramente una lista que se estaba leyendo en un archivo. La causa ms
comn es una incoherencia en el emparejamiento de las aperturas y cierres de parntesis o
comillas.
mal f or med st r i ng
Se ha terminado prematuramente una cadena que se estaba leyendo en un archivo.
mi spl aced dot
Un nmero real comienza con el separador decimal. Se ha de incluir un cero inicial en este
caso.
f unci n nul a
Se ha intentado evaluar una funcin que tiene una definicin vaca.
qui t ar / sal i r abandonar
Se ha llamado a la funcin QUI T o EXI T.
cadena demasi ado l ar ga
La cadena que se ha pasado a SETVAR es demasiado larga.
t oo f ew ar gument s
Se han pasado pocos argumentos a una funcin integrada.
ar gument os i nsuf i ci ent es par a gr vecs
No se han pasado suficientes argumentos a GRVECS.
demasi ados ar gument os
Se han pasado demasiados argumentos a una funcin integrada.
La siguiente lista muestra los errores internos de AutoLISP que no tienen que ver con el pro-
grama de usuario. Estos errores, si se producen, hay que notificarlos a Autodesk de forma in-
mediata ya que se pueden deber a bugs o fallos en la programacin de AutoCAD 14 o en la
implementacin de AutoLISP en l. Para ms informacin vase la ayuda del programa.
Lista 2
bad ar gument t o syst emcal l
Slo sistemas UNIX. El sistema operativo ha detectado una llamada errnea generada por Au-
toLISP.
bus er r or
Slo sistemas UNIX. El sistema operativo ha detectado un error de bus.
hangup
Slo sistemas UNIX. El sistema operativo ha detectado una seal hangup (colgado).
i l l egal i nst r uct i on
Slo sistemas UNIX. El sistema operativo ha detectado una instruccin de mquina no vlida.
segment at i on vi ol at i on
Slo sistemas UNIX. El sistema operativo ha detectado un intento de direccionamiento externo
al rea de memoria especificada para este proceso.
unexpect ed si gnal nnn
Slo sistemas UNIX. El sistema operativo ha emitido una seal inesperada.
ONCE.FIN. EJERCICIOS PROPUESTOS
I. Disear un programa en AutoLISP que permita dibujar un perfil doble T parametrizado.
El programa solicitar en lnea de comandos la altura total y la altura del alma, la an-
chura del ala y del alma y el punto de insercin. El perfil se dibujar con ngulo de in-
sercin 0.
II. Realizar un programa que extraiga todos los bloques existentes en el dibujo actual y los
guarde en disco en la unidad y directorio que el usuario indique. El programa contendr
una rutina de control de errores y funcionar desde lnea de comandos. El resto al gusto
del programador.
III. Realizar un programa que permita dibujar un agujero en alzado seccionado. Tras solici-
tar el punto de insercin se irn pidiendo los dems datos. El usuario dispondr de la
posibilidad de dibujar el agujero con o sin cajera y/o roscado o no. La cajera (si existie-
ra) y el agujero se dibujarn en la capa actual; la rosca (si existiera) y el eje de sime-
tra se dibujarn en sendas capas cuyos nombres sern solicitados al usuario. El pro-
grama funcionar bajo lnea de comandos nicamente.
IV. Crear un programa en AutoLISP que dibuje una curva de nivel cartogrfica a partir de
los puntos contenidos en un fichero topogrfico. El programa funcionar mediante un
cuadro diseado en DCL que tendr el siguiente aspecto:

Como se puede apreciar en este letrero de dilogo, el usuario dispondr de la posibili-
dad de escoger un fichero en entrada donde estn los datos y un fichero de salida.
En este ltimo se guardarn las coordenadas de los puntos precedidas de un nmero de
orden o marca que ser el que se dibuje en pantalla al lado de cada punto. Adems,
tambin se podr escoger la posibilidad de ver el fichero de salida al terminar de dibu-
jar la curva, en cuyo caso se abrir un editor ASCII (tipo Bloc de Notas) con el fichero
en cuestin, y la posibilidad de no generar este fichero, en cuyo caso no se generar (al
elegir esta opcin habrn de desactivarse la innecesarias).
Como segundo paso se elegir el tipo de curva con el que se dibujar la curva de nivel
(seccin Generar curva). Despus elegiremos las propiedades de la curva: capa, color y
tipo de lnea. En cada lista desplegable se reflejarn los elementos actuales en el dibu-
jo.
Como se ve en el cuadro, habremos de especificar tambin un estilo de texto, su rota-
cin y su altura, as como dispondremos de la posibilidad de no escribir las marcas en
pantalla. Tambin se ofrece en esta seccin del letrero una casilla de edicin para indi-
car cul ser la primera de las marcas.
Por ltimo escogeremos el separador de coordenadas en el archivo de entrada, es decir,
cul es el carcter que divide unas componentes de otras: una coma (formato CDF), un
espacio blanco (formato SDF) o cualquier otro que, en su caso, se especificar.
El programa dispondr de una rutina de control de errores, tanto del cuadro de dilogo
(para no introducir valores incorrectos) como de errores AutoLISP.
V. Crear un programa mediante AutoLISP y DCL que dibuje escaleras de caracol en 3D. El
cuadro de dilogo puede ser el que sigue:

Como observamos habremos de introducir todos los datos necesarios para el dibujo de
la escalera. La opcin Hueco interior determina si en por dentro existir hueco o una
columna cilndrica. Dispondremos de un botn para designar un punto de insercin en
pantalla.
Crense rutinas de control de errores y dems.
VI. Disear un programa AutoLISP/DCL cuyo cometido ser sumar o acumular todas dis-
tancias de tramos rectos y curvos de las lneas y/o polilneas y/o arcos existentes en
una capa del dibujo actual. Al final, el programa escribir un texto personalizable con
las cantidades acumuladas. Este programa puede serle muy til a todo aquel que nece-
site saber en un momento el total de tramos trazados en un dibujo (en una capa), sean
tuberas, circuitos elctricos, carreteras, etctera.
El cuadro de dilogo principal del programa ser el que se puede observar en la pgina
siguiente.
EL rea Actuar en capa define la capa en la cual se realizarn las mediciones. Como
vemos puede ser una elegida de la lista desplegable que contendr todas las capas
del dibujo, la capa actual o la correspondiente al objeto que se designar (si se elige
la ltima opcin). En estos dos ltimo casos la primera opcin quedar inhabilitada,
evidentemente; en el ltimo caso, se pedir designar objeto al pulsar el botn Aceptar,
antes de proceder a la medicin.

En el rea Acumular se especifica el tipo de objeto sobre el que actuar: lnea,
polilnea, arcos o todos (con las correspondientes combinaciones).
En el rea Insercin del texto habremos de pulsar el botn designar para esco-
ger un punto de insercin en pantalla. Al volver el cuadro, se reflejarn en las
casillas correspondientes las coordenadas X, Y y Z de dicho punto. Adems, es-
cogeremos aqu la capa donde se insertar el texto (Act uaci n dice relacin a la
capa elegida en el rea primera).
Por ltimo, en el rea Mostrar texto describiremos las propiedades del texto (es-
tilo, altura y rotacin), as como el texto que aparecer antes del total acumula-
do y despus del mismo.
El botn Preferencias... nos lleva a otro cuadro de dilogo, cuyo diseo lo vemos
en la pgina siguiente. En este nuevo cuadro elegiremos diversas preferencias
(si as lo deseamos) para el texto final escrito en pantalla. As pues, dispondre-
mos de la posibilidad de mostrar el subtotal de tramos rectos y de tramos curvos
con sus correspondientes textos inicial y final, la fecha y la hora de la medi-
cin y el autor de la misma, as como su empresa y la ubicacin de sta.
Este programa representa ya un alto nivel en la programacin en AutoLISP/DCL.
Se puede hacer de variadas formas, sobre todo el cuerpo principal donde se rea-
liza la medicin. Intentemos escoger la que nos resulte ms sencilla y verstil a
la hora de tener en cuenta otros aspectos del programa.



insertar los ejercicios resueltos terceros

10 fase intermedia de ejercicios

PUNTO I

( DEFUN C: Edi t a ( / Mensaj e)
( SETVAR " cmdecho" 0)
( I F Ar chi voDef ect o ( ) ( SETQ Ar chi voDef ect o " " ) )
( SETQ Mensaj e ( STRCAT " Nombr e de ar chi vo <" Ar chi voDef ect o " >: " ) )
( I F ( = " " ( SETQ Ar chi vo ( GETSTRI NG Mensaj e) ) )
( SETQ Ar chi vo Ar chi voDef ect o)
)
( SETQ Ar chi voDef ect o Ar chi vo)
( STARTAPP " not epad" ( STRCAT Ar chi vo " . l sp" ) )
( PRI N1)
)


PUNTO II

( DEFUN Dat osTxAr co ( / Mensaj e)
( I NI TGET 1)
( SETQ Cent r o ( GETPOI NT " Cent r o del ar co par a el t ext o: " ) ) ( TERPRI )
( I NI TGET 7)
( SETQ Radi o ( GETDI ST Cent r o " Radi o del ar co par a el t ext o: " ) )
( TERPRI )
( I F Al Tx0 ( ) ( SETQ Al Tx0 1) )
( I NI TGET 6)
( SETQ Mensaj e ( STRCAT " Al t ur a del t ext o <" ( RTOS Al Tx0 2 2) " >: " ) )
( I F ( SETQ Al Tx ( GETDI ST Mensaj e) ) ( ) ( SETQ Al Tx Al Tx0) ) ( TERPRI )
( SETQ Al Tx0 Al Tx)
( I F AngTx0 ( ) ( SETQ AngTx0 ( / PI 2) ) )
( SETQ Mensaj e ( STRCAT " Angul o de i ni ci o <" ( ANGTOS AngTx0 0 0)
" >: " ) )
( I F ( SETQ AngTx ( GETANGLE Cent r o Mensaj e) ) ( ) ( SETQ AngTx AngTx0) )
( TERPRI )
( SETQ AngTx0 AngTx)
( SETQ CadTx ( GETSTRI NG T " Text o: " ) )
)

( DEFUN Txar co ( / N LonTx AngI ns Tx XI ns YI ns PI ns AngTxN Esp)
( SETQ LonTx ( STRLEN CadTx) )
( SETQ n 1) ( SETQ AngI ns AngTx)
( REPEAT Lont x
( SETQ Tx ( SUBSTR CadTx n 1) )
( SETQ XI ns ( + ( CAR Cent r o) ( * Radi o ( COS AngI ns) ) ) )
( SETQ YI ns ( + ( CADR Cent r o) ( * Radi o ( SI N AngI ns) ) ) )
( SETQ PI ns ( LI ST XI ns YI ns) )
( SETQ AngTxn ( / ( * ( - AngI ns ( / PI 2) ) 180) PI ) )
( COMMAND " _t ext " PI ns Al Tx AngTxN Tx)
( SETQ Esp Al Tx)
( I F ( OR ( = Tx " i " ) ( = Tx " I " ) ( = Tx " l " ) ( = Tx " 1" ) ( = Tx " j " ) )
( SETQ Esp ( / Al Tx 2) )
)
( I F ( OR ( = Tx " m" ) ( = Tx " M" ) ) ( SETQ Esp ( * Al Tx 1. 5) ) )
( SETQ AngI ns ( - AngI ns ( / Esp Radi o) ) )
( SETQ N ( 1+ N) )
)
)

( DEFUN C: TxAr co ( / Radi o Al Tx Cent r o AngTx CadTx)
( SETVAR " cmdecho" 0)
( SETQ Ref nt 0 ( GETVAR " osmode" ) ) ( SETVAR " osmode" 0)
( COMMAND " _undo" " _begi n" )
( Dat osTxAr co)
( TxAr co)
( COMMAND " _undo" " _end" )
( SETVAR " osmode" Ref nt 0) ( SETVAR " cmdecho" 1) ( PRI N1)
)

( PROMPT " Nuevo comando TXARCO def i ni do. " ) ( PRI N1)


11 fase intermedia de ejercicios

PUNTO I

; Nuevo modo de r ef er enci a " Punt o medi o vi r t ual " .
; Puede ser ut i l i zado de maner a t r anspar ent e ent r e comandos
; t ecl eando ' mv.
; Puede ser aadi do al menu de cur sor de Modos de Ref er enci a
; de Aut oCAD 14 par a t ener l o a mano y no t ener que t ecl ear l o.

( DEFUN MV ( / Pt o1 Pt o2)
( SETQ Pt o1 ( GETPOI NT " medi o vi r t ual ent r e " ) )
( SETQ Pt o2 ( GETPOI NT Pt o1 " y " ) )
( POLAR Pt o1 ( ANGLE Pt o1 Pt o2) ( / ( DI STANCE Pt o1 Pt o2) 2. 0) )
)

( DEFUN C: MV ( )
( mv)
)


PUNTO II

( DEFUN dat os_mar ca ( / Mensaj e)
( I F Di aP0 ( ) ( SETQ Di aP0 2) )
( SETQ Mensaj e ( STRCAT " \ nDi met r o del punt o <" ( RTOS Di aP0 2 2)
" >: " ) )
( I NI TGET 4)
( I F ( SETQ Di aP ( GETDI ST Mensaj e) ) ( ) ( SETQ Di aP Di aP0) ) ( TERPRI )
( SETQ Di aP0 Di aP)
( I F Di aM0 ( ) ( SETQ Di aM0 10) )
( SETQ Mensaj e ( STRCAT " Di met r o del c r cul o de mar ca <"
( RTOS Di aM0 2 2) " >: " ) )
( I NI TGET 6)
( I F ( SETQ Di aM ( GETDI ST Mensaj e) ) ( ) ( SETQ Di aM Di aM0) ) ( TERPRI )
( SETQ Di aM0 Di aM)
( I NI TGET 1)
( SETQ Pt I ( GETPOI NT " Punt o i ni ci al : " ) ) ( TERPRI )
( I NI TGET 1)
( SETQ Pt F ( GETPOI NT Pt I " Punt o de si t uaci n de l a mar ca: " ) )
( TERPRI )
)

( DEFUN mar ca ( / Ang Cen Mensaj e Tx Al Tx TxM)
( COMMAND " _donut " " 0" Di aP Pt I " " )
( COMMAND " _l i ne" Pt I Pt F " " )
( SETQ Ang ( ANGLE Pt I Pt F) )
( SETQ Cen ( POLAR Pt F Ang ( / Di aM 2) ) )
( COMMAND " _ci r cl e" Cen " _d" Di aM)
( I F Tx0 ( ) ( SETQ Tx0 1) )
( SETQ Mensaj e ( STRCAT " Nmer o de mar ca <" ( I TOA Tx0) " >: " ) )
( I NI TGET 6)
( I F ( SETQ Tx ( GETI NT Mensaj e) ) ( ) ( SETQ Tx Tx0) ) ( TERPRI )
( SETQ Tx0 ( + Tx 1) )
( SETQ Al Tx ( / Di am2) )
( SETQ TxM ( I TOA Tx) )
( COMMAND " _t ext " " _m" Cen Al Tx " 0" TxM)
)

( DEFUN C: Mar ca ( / Di aP Di aM Pt I Pt F)
( SETVAR " cmdecho" 0)
( dat os_mar ca)
( SETQ r ef nt 0 ( GETVAR " osmode" ) ) ( SETVAR " osmode" 0)
( COMMAND " _undo" " _begi n" )
( mar ca)
( COMMAND " _undo" " _end" )
( SETVAR " osmode" r ef nt 0) ( SETVAR " cmdecho" 1) ( PRI N1)
)

( PROMPT " Nuevo comando MARCA def i ni do. " ) ( PRI N1)


12 fase intermedia de ejercicios

PUNTO I

( DEFUN dat os_cor t et ubo ( )
( SETQ pt 1 ( GETPOI NT " \ nPr i mer punt o del cor t e ( modo FI Nal
act i vado) : " ) )
( SETVAR " osmode" 128)
( SETQ pt 2 ( GETPOI NT pt 1 " \ nSegundo punt o del cor t e,
PERpendi cul ar a: " ) )
( SETVAR " osmode" 512)
( SETQ ang2 ( ANGLE pt 1 ( GETPOI NT pt 1 " \ nLado de t uber a,
CERcano de: " ) ) )
( SETVAR " osmode" 0)
)

( DEFUN cor t et ubo ( / ang di s p1 p2 p3 p4 p5)
( SETQ ang ( ANGLE pt 1 pt 2) di s ( DI STANCE pt 1 pt 2) )
( SETQ p1 ( POLAR pt 1 ang ( / di s 4) ) )
( SETQ p1 ( POLAR p1 ( + ang2 PI ) ( / di s 6) ) )
( SETQ p2 ( POLAR pt 1 ang ( / di s 2) ) )
( SETQ p3 ( POLAR p2 ang ( / di s 4) ) )
( SETQ p4 ( POLAR p3 ( + ang2 PI ) ( / di s 6) ) )
( SETQ p5 ( POLAR p3 ang2 ( / di s 6) ) )
( COMMAND " _ar c" pt 1 p1 p2)
( COMMAND " _ar c" p2 p4 pt 2)
( COMMAND " _ar c" p2 p5 pt 2)
( COMMAND " _hat ch" " _u" 45 2 " _n" p4 p5 " " )
)

( DEFUN c: cor t et ubo ( / pt 1 pt 2 ang2)
( SETVAR " cmdecho" 0)
( SETQ er r or 0 *er r or * *er r or * Cont r ol Er r or es)
( SETQ r ef nt 0 ( GETVAR " osmode" ) ) ( SETVAR " osmode" 1)
( dat os_cor t et ubo)
( COMMAND " _undo" " _begi n" )
( cor t et ubo)
( COMMAND " _undo" " _end" )
( SETVAR " cmdecho" 1) ( SETVAR " osmode" r ef nt 0)
)
( DEFUN c: ct ( )
( c: cor t et ubo)
)

( DEFUN Cont r ol Er r or es ( CadenaEr r or )
( SETQ *er r or * er r or 0)
( PRI NC ( STRCAT " \ nEr r or : " CadenaEr r or " . " ) )
( COMMAND " _undo" " _end" )
( SETVAR " osmode" r ef nt 0)
( SETVAR " cmdecho" 1)
( COMMAND)
( TERPRI )
( PRI N1)
)

( PROMPT " \ nNuevo comando CORTETUBO ( abr evi at ur a CT) cr eado. " ) ( PRI N1)


PUNTOII

( DEFUN dat os_puer t a ( / pt ang di st mens)
( SETVAR " osmode" 1)
( I NI TGET 1)
( SETQ pt b ( GETPOI NT " \ nSeal ar esqui na ( FI Nal de) : " ) )
( SETVAR " osmode" 512)
( I NI TGET 1)
( SETQ pt ang ( GETPOI NT pt b " \ nSeal ar par ed donde abr i r el hueco
( CERca de) : " ) )
( SETQ ang ( ANGLE pt b pt ang) )
( SETVAR " osmode" 0)
( I NI TGET 1)
( SETQ di st ( GETDI ST pt b " \ nDi st anci a desde l a esqui na: " ) )
( SETQ pt i ns ( POLAR pt b ang di st ) )
( I F mar co0 ( ) ( SETQ mar co0 5) )
( SETQ mens ( STRCAT " \ nEspesor del mar co <" ( RTOS mar co0 2 2)
" >: " ) )
( I NI TGET 6)
( I F ( SETQ mar co ( GETDI ST pt i ns mens) ) ( ) ( SETQ mar co mar co0) )
( SETQ mar co0 mar co)
( I F hoj a0 ( ) ( SETQ hoj a0 5) )
( SETQ mens ( STRCAT " \ nEspesor de l a hoj a <" ( RTOS hoj a0 2 2)
" >: " ) )
( I NI TGET 6)
( I F ( SETQ hoj a ( GETDI ST mens) ) ( ) ( SETQ hoj a hoj a0) )
( SETQ hoj a0 hoj a)
( I F ancho0 ( ) ( SETQ ancho0 90) )
( SETQ mens ( STRCAT " \ nAnchur a del hueco de l a puer t a <"
( RTOS ancho0 2 2) " >: " ) )
( I NI TGET 6)
( I F ( SETQ ancho ( GETDI ST pt i ns mens) ) ( ) ( SETQ ancho ancho0) )
( SETQ ancho0 ancho)
( SETVAR " osmode" 128)
( I NI TGET 1)
( SETQ pt l ado ( GETPOI NT pt i ns " \ nSeal ar l a par ed opuest a del mur o
o t abi que ( PER a) : " ) )
( SETVAR " osmode" 0)
( I NI TGET " Act ual Opuest a" )
( I F ( SETQ op ( GETKWORD " \ nDi r ecci n de aper t ur a ( Act ual / Opuest a)
<A>: " ) ) ( ) ( SETQ op " Act ual " ) )
)

( DEFUN hueco ( )
( SETQ pt op ( POLAR pt i ns ang ancho) )
( SETQ pt l op ( POLAR pt l ado ang ancho) )
( SETVAR " pi ckbox" 1)
( COMMAND " _br eak" pt i ns pt op)
( COMMAND " _br eak" pt l ado pt l op)
( COMMAND " _l i ne" pt i ns pt l ado " " )
( COMMAND " _mat chpr op" pt b " _l " " " )
( COMMAND " _l i ne" pt op pt l op " " )
( COMMAND " _mat chpr op" pt b " _l " " " )
)

( DEFUN puer t a ( / pt pt 1 pt 2 pt 3 pt 4 pt ar c l hoj a)
( I F ( = op " Act ual " )
( PROGN
( SETQ pt pt i ns pt i ns pt op pt op pt )
( SETQ pt pt l ado pt l ado pt l op pt l op pt )
( SETQ ang ( - ang PI ) )
)
)
( SETQ pt 1 ( POLAR pt i ns ( ANGLE pt i ns pt l ado) mar co) )
( SETQ pt 2 ( POLAR pt 1 ang mar co) )
( SETQ pt 3 ( POLAR pt 2 ( ANGLE pt l ado pt i ns) mar co) )
( SETQ pt ar c pt 3)
( COMMAND " _l i ne" pt 1 pt 2 pt 3 pt i ns " " )
( SETQ pt 1 ( POLAR pt op ( ANGLE pt i ns pt l ado) mar co) )
( SETQ pt 2 ( POLAR pt 1 ( - ang PI ) mar co) )
( SETQ pt 3 ( POLAR pt 2 ( ANGLE pt l ado pt i ns) mar co) )
( COMMAND " _l i ne" pt 1 pt 2 pt 3 pt op " " )
( SETQ l hoj a ( - ancho mar co mar co) )
( SETQ pt 2 ( POLAR pt 3 ( - ang PI ) hoj a) )
( SETQ pt 1 ( POLAR pt 2 ( ANGLE pt l ado pt i ns) l hoj a) )
( SETQ pt 4 ( POLAR pt 1 ang hoj a) )
( COMMAND " _l i ne" pt 3 pt 2 pt 1 pt 4 pt 3 " " )
( SETQ angar c ( - ( ANGLE pt 2 pt ar c) ( ANGLE pt 2 pt 1) ) )
( SETQ angar c ( / ( * angar c 180) PI ) )
( I F ( >= angar c 180) ( SETQ angar c ( - angar c 360) ) )
( I F ( <= angar c - 180) ( SETQ angar c ( + angar c 360) ) )
( COMMAND " _ar c" " _c" pt 3 pt 4 " _a" angar c)
)
( DEFUN c: puer t a ( / pt b ang pt i ns mar co hoj a ancho pt l ado op pt op
pt l op)
( SETVAR " cmdecho" 0)
( SETQ er r or 0 *er r or * *er r or * Cont r ol Er r or es)
( SETQ r ef nt 0 ( GETVAR " osmode" ) ) ( SETQ pi ck0 ( GETVAR " pi ckbox" ) )
( dat os_puer t a)
( COMMAND " _undo" " _begi n" )
( hueco)
( puer t a)
( COMMAND " _undo" " _end" )
( SETVAR " cmdecho" 1) ( SETVAR " osmode" r ef nt 0) ( SETVAR " pi ckbox"
pi ck0) ( PRI N1)
)

( DEFUN Cont r ol Er r or es ( CadenaEr r or )
( SETQ *er r or * er r or 0)
( PRI NC ( STRCAT " \ nEr r or : " CadenaEr r or " . " ) )
( COMMAND " _undo" " _end" )
( SETVAR " pi ckbox" pi ck0) ( SETVAR " osmode" r ef nt 0)
( SETVAR " cmdecho" 1)
( COMMAND)
( TERPRI )
( PRI N1)
)

( PROMPT " \ nNuevo comando PUERTA def i ni do. " ) ( PRI N1)


13 fase intermedia de ejercicios

PUNTO I

; ; ; Est o es un ar chi vo ACAD. LSP per sonal i zado.


; ; Las si gui ent es f unci ones ser n car gadas en memor i a al comenzar

( DEFUN C: . . .

. . .

)

; ; Las si gui ent es r ut i nas Aut oLI SP, ADS y ARX ser n eval uadas en el i ni ci o

( LOAD " c: \ \ . . . " )
( LOAD " c: \ \ . . . " )
( LOAD " d: \ \ . . . " )
( XLOAD " c: \ \ . . . " )
( XLOAD " d: \ \ . . . " )
( ARXLOAD " c: \ \ . . . " )
( ARXLOAD " c: \ \ . . . " )

; ; Las si gui ent es r ut i nas Aut oLI SP, ADS y ARX ser n car gadas y
; ; eval uadas al ser l l amadas

( AUTOLOAD " c: / . . . " ' ( " . . . " ) )
( AUTOLOAD " c: / . . . " ' ( " . . . " ) )
( AUTOLOAD " d: / . . . " ' ( " . . . " ) )
( AUTOLOAD " a: / . . . " ' ( " . . . " ) )
( AUTOXLOAD " c: / . . . " ' ( " . . . " ) )
( AUTOXLOAD " c: / . . . " ' ( " . . . " ) )
( AUTOARXLOAD " c: / . . . " ' ( " . . . " ) )
( AUTOARXLOAD " c: / . . . " ' ( " . . . " ) )

; ; Lo que si gue ser eval uado di r ect ament e al comenzar

( DEFUN S: : STARTUP ( )

. . .

)

; ; Lo que si gue t ambi n ser eval uado di r ect ament e al comenzar

( . . . )


; ; ; Fi n del ar chi vo ACAD. LSP per sonal i zado.


14 fase intermedia de ejercicios

PUNTO I

Letrero a)

( DEFUN def ect o_aguj er os ( )
( START_I MAGE " i magen" )
( SETQ ani mg ( DI MX_TI LE " i magen" ) al t i mg ( DI MY_TI LE " i magen" ) )
( FI LL_I MAGE 0 0 ani mg al t i mg - 2)
( SLI DE_I MAGE 0 0 ani mg al t i mg " si n. sl d" )
( END_I MAGE)
( SET_TI LE " si n" " 1" )
( SETQ op " si n" )
( I F di amagu ( ) ( SETQ di amagu 1) )
( SET_TI LE " di amagu" ( RTOS di amagu 2 2) )
( I F pr of agu ( ) ( SETQ pr of agu 1) )
( SET_TI LE " pr of agu" ( RTOS pr of agu 2 2) )
( I F di amcaj ( ) ( SETQ di amcaj 1) )
( SET_TI LE " di amcaj " ( RTOS di amcaj 2 2) )
( I F pr of caj ( ) ( SETQ pr of caj 1) )
( SET_TI LE " pr of caj " ( RTOS pr of caj 2 2) )
( MODE_TI LE " caj er a" 1)
)

( DEFUN acci ones_cuadr o ( )
( ACTI ON_TI LE " t i po" " ( t i po) " )
( ACTI ON_TI LE " accept " " ( acept ar _aguj er os) " )
)

( DEFUN t i po ( )
( SETQ op $val ue)
( I F ( = op " si n" ) ( MODE_TI LE " caj er a" 1) ( MODE_TI LE " caj er a" 0) )
( COND ( ( = op " si n" ) ( START_I MAGE " i magen" ) ( FI LL_I MAGE 0 0 ani mg
al t i mg - 2)
( SLI DE_I MAGE 0 0 ani mg al t i mg " si n. sl d" )
( END_I MAGE) )
( ( = op " r ect a" ) ( START_I MAGE " i magen" ) ( FI LL_I MAGE 0 0 ani mg
al t i mg - 2)
( SLI DE_I MAGE 0 0 ani mg al t i mg " r ect a. sl d" )
( END_I MAGE) )
( ( = op " avel l a" ) ( START_I MAGE " i magen" ) ( FI LL_I MAGE 0 0 ani mg
al t i mg - 2)
( SLI DE_I MAGE 0 0 ani mg al t i mg " avel l a. sl d" )
( END_I MAGE) )
)
)

( DEFUN acept ar _aguj er os ( )
( SETQ di amagu ( ATOF ( GET_TI LE " di amagu" ) ) )
( SETQ pr of agu ( ATOF ( GET_TI LE " pr of agu" ) ) )
( SETQ di amcaj ( ATOF ( GET_TI LE " di amcaj " ) ) )
( SETQ pr of caj ( ATOF ( GET_TI LE " pr of caj " ) ) )
( COND ( ( <= di amagu 0) ( MODE_TI LE " di amagu" 2)
( SET_TI LE " er r or " " Di met r o de aguj er o debe ser mayor que 0" ) )
( ( <= pr of agu 0) ( MODE_TI LE " pr of agu" 2)
( SET_TI LE " er r or " " Pr of undi dad de aguj er o debe ser mayor que 0" ) )
( ( AND ( <= di amcaj 0) ( / = op " si n" ) ) ( MODE_TI LE " di amcaj " 2)
( SET_TI LE " er r or " " Di met r o de caj er a debe ser mayor que 0" ) )
( ( AND ( <= di amcaj di amagu) ( / = op " si n" ) ) ( MODE_TI LE " di amcaj " 2)
( SET_TI LE " er r or " " Di met r o de caj er a debe ser mayor que aguj er o
" ) )
( ( AND ( <= pr of caj 0) ( / = op " si n" ) ) ( MODE_TI LE " pr of caj " 2)
( SET_TI LE " er r or " " Pr of undi dad de caj er a debe ser mayor que 0" ) )
( T ( DONE_DI ALOG 1) )
)
)

( DEFUN i nser t ar _aguj er os ( / mens pt i cj pt i gj ang)
( I NI TGET 1)
( SETQ pt i cj ( GETPOI NT " Punt o de i nser ci n: " ) ) ( TERPRI )
( I F ang0 ( ) ( SETQ ang0 0) )
( SETQ mens ( STRCAT " Angul o par a l a i nser ci n <" ( ANGTOS ang0 0 2)
" >: " ) )
( I F ( SETQ ang ( GETANGLE pt i cj mens) ) ( ) ( SETQ ang ang0) ) ( TERPRI )
( SETQ ang0 ang)
( I F ( / = op " si n" ) ( caj er a) ( SETQ pt i gj pt i cj ) )
( aguj er o)
( ej e)
)

( DEFUN caj er a ( / pt 1 pt 2 pt 3 pt 4)
( SETQ pt 1 ( POLAR pt i cj ( - ang ( / PI 2) ) ( / di amcaj 2) ) )
( SETQ pt 2 ( POLAR pt 1 ang pr of caj ) )
( SETQ pt 3 ( POLAR pt 2 ( + ang ( / PI 2) ) di amcaj ) )
( SETQ pt 4 ( POLAR pt 3 ( + ang PI ) pr of caj ) )
( I F ( = op " avel l a" ) ( PROGN ( SETQ pt 1 ( POLAR pt 1 ( - ang ( / PI 2) )
pr of caj ) )
( SETQ pt 4 ( POLAR pt 4 ( + ang ( / PI 2) )
pr of caj ) ) )
)
( COMMAND " _l i ne" pt 1 pt 2 pt 3 pt 4 " " )
( SETQ pt i gj ( POLAR pt i cj ang pr of caj ) )
)

( DEFUN aguj er o ( / pt 1 pt 2 pt 3 pt 4 pt 5)
( SETQ pt 1 ( POLAR pt i gj ( - ang ( / PI 2) ) ( / di amagu 2) ) )
( SETQ pt 2 ( POLAR pt 1 ang pr of agu) )
( SETQ pt 3 ( POLAR pt 2 ( + ang ( / PI 2) ) ( / di amagu 2) ) )
( SETQ pt 3 ( POLAR pt 3 ang ( / di amagu 2) ) )
( SETQ pt 4 ( POLAR pt 2 ( + ang ( / PI 2) ) di amagu) )
( SETQ pt 5 ( POLAR pt 4 ( + ang PI ) pr of agu) )
( COMMAND " _l i ne" pt 1 pt 2 pt 4 pt 5 " " )
( COMMAND " _l i ne" pt 2 pt 3 pt 4 " " )
)

( DEFUN ej e ( / l on l onj pt i j capj pt f j )
( SETQ l on ( + pr of caj pr of agu ( / di amagu 2) ) )
( SETQ l onj ( * l on 1. 25) )
( SETQ pt i j ( POLAR pt i cj ( + ang PI ) ( * l on 0. 125) ) )
( I F ( = " " ( SETQ capj ( GETSTRI NG " Nombr e de capa par a el ej e <EJ ES>:
" ) ) )
( SETQ capj " EJ ES" )
) ( TERPRI )
( SETQ pt f j ( POLAR pt i j ang l onj ) )
( COMMAND " _l ayer " " _make" capj " " )
( COMMAND " _l i ne" pt i j pt f j " " )
( COMMAND " _l ayer " " _set " cap0 " " )
)

( DEFUN c: ddaguj er os ( / ani mg al t i mg op)
( SETVAR " cmdecho" 0)
( SETQ er r or 0 *er r or * *er r or * er r or es)
( SETQ i nd ( LOAD_DI ALOG " aguj er os. dcl " ) )
( I F ( NOT ( NEW_DI ALOG " aguj er os" i nd) )
( PROGN ( PROMPT " \ nNo se encuent r a el ar chi vo AGUJ EROS. DCL" ) ( QUI T) )
)
( def ect o_aguj er os)
( acci ones_cuadr o)
( I F ( = 1 ( START_DI ALOG) ) ( i nser t ar _aguj er os) )
( UNLOAD_DI ALOG i nd)
( SETVAR " cmdecho" 1) ( PRI N1)
)

( DEFUN er r or es ( mens)
( SETQ *er r or * er r or 0)
( I F ( = mens " qui t ar / sal i r abandonar " )
( PRI N1)
( PRI NC ( STRCAT " \ nEr r or : " mens " " ) )
)
( SETVAR " cmdecho" 1) ( PRI N1)
)

( PROMPT " Nuevo comando DDAGUJ EROS def i ni do" ) ( PRI N1)

NOTA: Aprciese la utilizacin de diversos cdigos de estado con DONE_DI ALOG para ser
luego controlados en el START_DI ALOG.


Letreros b-1 y b-2)

( DEFUN l i st abl _i nser di r ( / ar ch l nea)
( I F r ut a0 ( ) ( SETQ r ut a0 " c: \ \ cad13" ) )
( I F ( = " " ( SETQ r ut a ( GETSTRI NG ( STRCAT " \ nDi r ect or i o de bl oques <"
r ut a0 " >: " ) ) ) )
( SETQ r ut a r ut a0) )
( WHI LE ( NOT ( FI NDFI LE ( STRCAT r ut a " \ \ bl oques. l st " ) ) )
( PROMPT " \ nNo se ha encont r ado ar chi vo BLOQUES. LST con l i st ado de
ar chi vos de bl oque" ) )
( I F ( SETQ r ut a ( GETSTRI NG ( STRCAT " \ nDi r ect or i o de bl oques <"
r ut a0 " >: " ) ) )
( ) ( SETQ r ut a r ut a0) )
)
( SETQ r ut a0 r ut a)
( SETQ ar ch ( OPEN ( STRCAT r ut a " \ \ bl oques. l st " ) " r " ) )
( SETQ l i st abl ' ( ) )
( WHI LE ( SETQ l nea ( READ- LI NE ar ch) )
( SETQ nombl ( SUBSTR l nea 1 ( - ( STRLEN l nea) 4) ) )
( I F ( / = nombl " " ) ( SETQ l i st abl ( CONS nombl l i st abl ) ) )
)
( CLOSE ar ch)
( SETQ l i st abl ( REVERSE l i st abl ) )
( SETQ t ot bl ( LENGTH l i st abl ) )
)

( DEFUN cuadr o ( / ni mg t ot i mg nbl nombl nomt i l e)
( I F ( <= r est bl 16) ( SETQ t ot i mg r est bl ) ( SETQ t ot i mg 16) )
( SETQ ni mg 0)
( REPEAT t ot i mg
( SETQ nbl ( + i ndbl ni mg) )
( SETQ nombl ( STRCAT r ut a " \ \ " ( NTH nbl l i st abl ) ) )
( SETQ nomt i l e ( STRCAT " i mg" ( I TOA ni mg) ) )
( START_I MAGE nomt i l e)
( FI LL_I MAGE 0 0 ( DI MX_TI LE nomt i l e) ( DI MY_TI LE nomt i l e) 0)
( SLI DE_I MAGE 0 0 ( DI MX_TI LE nomt i l e) ( DI MY_TI LE nomt i l e) nombl )
( END_I MAGE)
( SETQ ni mg ( 1+ ni mg) )
)
( REPEAT ( - 16 t ot i mg)
( SETQ nbl ( + i ndbl ni mg) )
( SETQ nomt i l e ( STRCAT " i mg" ( I TOA ni mg) ) )
( START_I MAGE nomt i l e)
( FI LL_I MAGE 0 0 ( DI MX_TI LE nomt i l e) ( DI MY_TI LE nomt i l e) 0)
( END_I MAGE)
( SETQ ni mg ( 1+ ni mg) )
)
( I F ( = i ndbl 0) ( MODE_TI LE " pr e" 1) ( MODE_TI LE " pr e" 0) )
( I F ( <= r est bl 16) ( MODE_TI LE " si g" 1) ( MODE_TI LE " si g" 0) )
)

( DEFUN l i st a ( / i ndbl st )
( SETQ nombl ( NTH nbl i st l i st abl ) )
( I F ( = i ns 4) ( DONE_DI ALOG 1) )
( SETQ i ndbl st ( * 16 ( FI X ( / nbl i st 16) ) ) )
( SETQ r est bl ( - t ot bl i ndbl st ) )
( I F ( / = i ndbl st i ndbl ) ( PROGN ( SETQ i ndbl i ndbl st ) ( cuadr o) ) )
( SETQ ni mg ( - nbl i st i ndbl ) )
( MODE_TI LE ( STRCAT " i mg" ( I TOA ni mg) ) 2)
)

( DEFUN most r ar ( )
( NEW_DI ALOG " muest r a" i nd)
( START_I MAGE " muest r a" )
( FI LL_I MAGE 0 0 ( DI MX_TI LE " muest r a" ) ( DI MY_TI LE " muest r a" ) 0)
( SLI DE_I MAGE 0 0 ( DI MX_TI LE " muest r a" ) ( DI MY_TI LE " muest r a" ) ( STRCAT
r ut a " \ \ " nombl ) )
( END_I MAGE)
( START_DI ALOG)
( MODE_TI LE ( STRCAT " i mg" ( I TOA ni mg) ) 2)
)

( DEFUN f unci ones_i mg ( / nf un nomf un)
( SETQ nf un 0)
( REPEAT 16
( SETQ nomf un ( STRCAT " i mg" ( I TOA nf un) ) )
( EVAL ( READ ( STRCAT " ( def un " nomf un " ( ) "
" ( set q ni mg " ( I TOA nf un) " ) "
" ( set q nbl ( + " ( I TOA nf un) " i ndbl ) ) "
" ( set q nombl ( nt h nbl l i st abl ) ) "
" ( i f ( = i ns 4) ( done_di al og 1) ) "
" ( set _t i l e \ " l i st a\ " ( i t oa nbl ) ) ) " ) ) )
( SETQ nf un ( 1+ nf un) )
)
)

( DEFUN si g ( )
( SETQ i ndbl ( + i ndbl 16) r est bl ( - r est bl 16) )
( cuadr o)
( SET_TI LE " l i st a" ( I TOA i ndbl ) )
( MODE_TI LE " i mg0" 2)
( SETQ nombl ( NTH i ndbl l i st abl ) )
( SETQ ni mg 0)
)

( DEFUN pr e ( )
( SETQ i ndbl ( - i ndbl 16) r est bl ( + r est bl 16) )
( cuadr o)
( SET_TI LE " l i st a" ( I TOA i ndbl ) )
( MODE_TI LE " i mg0" 2)
( SETQ nombl ( NTH i ndbl l i st abl ) )
( SETQ ni mg 0)
)

( DEFUN c: ddi nser di r ( / r ut a l i st abl t ot bl i ndbl r est bl nbl i st i ns i nd
ni mg nombl nomt i l e)
( SETVAR " cmdecho" 0) ( SETQ er r or 0 *er r or * *er r or * er r _ddi nser di r )
( l i st abl _i nser di r )
( SETQ i ndbl 0 r est bl t ot bl )
( SETQ i nd ( LOAD_DI ALOG " i nser di r " ) )
( NEW_DI ALOG " i nser di r " i nd)
( START_LI ST " l i st a" )
( MAPCAR ' add_l i st l i st abl )
( END_LI ST)
( cuadr o)
( SET_TI LE " l i st a" ( I TOA i ndbl ) )
( MODE_TI LE " i mg0" 2)
( SETQ nombl ( NTH 0 l i st abl ) )
( ACTI ON_TI LE " l i st a" " ( set q nbl i st ( ATOI $val ue) ) ( set q i ns
$r eason) ( l i st a) " ) )
( ACTI ON_TI LE " most r ar " " ( i f nombl ( most r ar ) ) " )
( SETQ ni mg 0)
( REPEAT 16
( SETQ nomt i l e ( STRCAT " i mg" ( I TOA ni mg) ) )
( ACTI ON_TI LE nomt i l e ( STRCAT " ( set q i ns $r eason) ( " nomt i l e " ) " ) )
( SETQ ni mg ( 1+ ni mg) )
)
( ACTI ON_TI LE " si g" " ( si g) " )
( ACTI ON_TI LE " pr e" " ( pr e) " )
( f unci ones_i mg)
( I F ( = 1 ( START_DI ALOG) )
( PROGN ( PROMPT " Punt o de i nser ci n: " )
( COMMAND " i nser t " ( STRCAT r ut a " \ \ " nombl ) pause " " " " ) )
)
( SETVAR " cmdecho" 1) ( SETQ *er r or * er r or 0) ( PRI N1)
)

( DEFUN er r _ddi nser di r ( mens)
( SETQ *er r or * er r or 0)
( I F ( = mens " qui t ar / sal i r abandonar " )
( PRI N1)
( PRI NC ( STRCAT " \ nEr r or : " mens " " ) )
)
( SETVAR " cmdecho" 1) ( SETQ *er r or * er r or 0) ( PRI N1)
)

( PROMPT " Nuevo comando DDI NSERDI R def i ni do. " ) ( PRI N1)


Letrero c)

( DEFUN c: ddsombr a ( / er r or 0 i nd edge muest r a)
( SETQ er r or 0 *er r or * *er r or * er r - ddmodel ar )
( I F esf r 0 ( ) ( SETQ esf r 0 " 1" ) )
( SETQ i nd ( LOAD_DI ALOG " model ar " ) )
( I F ( NOT ( NEW_DI ALOG " model ar " i nd) )
( PROGN ( PROMPT " No se encuent r a el ar chi vo MODELAR. DCL" ) ( QUI T) )
)
( COND
( ( = 0 ( GETVAR " shadedge" ) )
( SET_TI LE " edge0" " 1" )
( SETQ edge " edge0" ) )
( ( = 1 ( GETVAR " shadedge" ) )
( SET_TI LE " edge1" " 1" )
( SETQ edge " edge1" ) )
( ( = 2 ( GETVAR " shadedge" ) )
( SET_TI LE " edge2" " 1" )
( SETQ edge " edge2" ) )
( ( = 3 ( GETVAR " shadedge" ) )
( SET_TI LE " edge3" " 1" )
( SETQ edge " edge3" ) )
)
( COND
( ( = ( GETVAR " shadedi f " ) 30) ( SET_TI LE " di f 30" " 1" ) )
( ( = ( GETVAR " shadedi f " ) 50) ( SET_TI LE " di f 50" " 1" ) )
( ( = ( GETVAR " shadedi f " ) 70) ( SET_TI LE " di f 70" " 1" ) )
( ( = ( GETVAR " shadedi f " ) 90) ( SET_TI LE " di f 90" " 1" ) )
)
( SET_TI LE " desl i za" ( I TOA ( GETVAR " shadedi f " ) ) )
( SET_TI LE " val or " ( I TOA ( GETVAR " shadedi f " ) ) )
( SET_TI LE " esf er a" esf r 0)
( SET_TI LE " cubo" ( I TOA ( 1- ( ATOI esf r 0) ) ) )
( I F ( = " 1" esf r 0) ( SETQ muest r a " esf er a" ) ( SETQ muest r a " cubo) )
( ACTI ON_TI LE " r adi o_edge" " ( SETQ edge $val ue) " )
( ACTI ON_TI LE " def ect o" " ( def ect o) " )
( ACTI ON_TI LE " desl i za" " ( desl i za) " )
( ACTI ON_TI LE " val or " " ( val or ) " )
( ACTI ON_TI LE " di f 30" " ( val or p \ " 30\ " ) " )
( ACTI ON_TI LE " di f 50" " ( val or p \ " 50\ " ) " )
( ACTI ON_TI LE " di f 90" " ( val or p \ " 70\ " ) " )
( ACTI ON_TI LE " di f 90" " ( val or p \ " 90\ " ) " )
( ACTI ON_TI LE " muest r a" " ( SETQ muest r a $val ue) " )
( ACTI ON_TI LE " muest r a" " ( most r ar ) " )
( ACTI ON_TI LE " accept " " ( acept ar ) " )
( I F ( = 1 ( START_DI ALOG) ) ( COMMAND " sombr a" ) )
( SETQ *er r or * er r or 0) ( PRI N1)
)

( DEFUN acept ar ( / val )
( SETQ val ( GET_TI LE " val or " ) )
( I F ( AND ( <= ( ATOI val ) 100) ( >= ( ATOI val ) 0) )
( PROGN
( SETVAR " shadedge" ( ATOI ( SUBSTR edge 5) ) )
( SETVAR " shadei f " ( ATOI val ) )
( SETQ esf r 0 ( GET_TI LE " esf er a" ) )
( DONE_DI ALOG 1)
)
( MODE_TI LE " val or " 2)
)
)

( DEFUN most r ar ( / f ot o ancho al t o)
( SETQ f ot o ( STRCAT ( SUBSTR muest r a 1 3) ( SUBSTR edge 5) ) )
( SETQ ancho ( DI MX_TI LE " i magen" ) al t o DI MY_TI LE " i magen" ) )
( START_I MAGE " i magen" )
( FI LL_I MAGE 0 0 ancho al t o - 2)
( SLI DE_I MAGE 0 0 ancho al t o f ot o)
( END_I MAGE)
)

( DEFUN def ect o ( )
( SET_TI LE " edge" " 1" )
( SET_TI LE " di f 70" " 1" )
( SET_TI LE " desl i za" " 70" )
( SET_TI LE " val or " " 70" ) ( SET_TI LE " er r or " " " )
( SET_TI LE " esf er a" " 1" )
( SETQ edge " edge1" muest r a " esf er a" )
)

( DEFUN desl i za ( )
( SET_TI LE " val or " ( GET_TI LE " desl i za" ) )
( FOREACH p ' ( " di f 30" " di f 50" " di f 70" " di f 90" ) ( SET_TI LE p " 0" ) )
( SET_TI LE " er r or " " " )
)

( DEFUN val or ( / val )
( SETQ val ( GET_TI LE " val or " ) )
I F ( AND ( <= ( ATOI val ) 100) ( >= ( ATOI val 0) )
( PROGN
( SET_TI LE " er r or " " " )
( SET_TI LE " desl i za" val )
( FOREACH p ' ( " di f 30" " di f 50" " di f 70" " di f 90" ) ( SET_TI LE p " 0" ) )
)
( SET_TI LE " er r or " " El val or debe est ar ent r e 0 y 100" )
)
)

( DEFUN val or p ( p)
( SET_TI LE " val or " p) ( SET_TI LE " desl i za" p) ( SET_TI LE " er r or " " " )
)

( DEFUN er r - ddmodel ar ( mens)
( SETQ *er r or * er r or 0)
( I F ( = mens " qui t ar / sal i r abandonar " )
( PRI N1)
( PRI NC ( STRCAT " \ nEr r or : " mens " " ) )
)
( PRI N1)
)

( PROMPT " Nueva or den DDMODELAR def i ni da. " ) ( PRI N1)

NOTA: Aprciese la manera de incluir caracteres de comillas dobles con el cdigo de
control correspondiente \ " ; como por ejemplo en " ( val or p \ " 30\ " ) " . Esto se hace as por
estar incluidas dentro de una cadena que lleva ya comillas de por s.

NOTA: En estos ejercicios que hemos visto los archivos de fotos (. SLD) que se repre-
senten en casillas de imagen habrn de estar en un directorio de soporte. Tambin pueden
situarse en cualquier otro directorio, pero habremos de tomar la precaucin de incluir la ruta
en la llamada al fichero en cuestin. Lo mismo para los archivos de definicin del diseo grfi-
co del letrero de dilogo (. DCL).





DOCE.5.7. Objetos de polilnea
DOCE.5.7.1. Polilneas de antigua definicin
Para crear polilneas no optimizadas de versiones anteriores a la 14 de AutoCAD utilizamos el
mtodo AddPol yl i ne. En la siguiente seccin se estudian las polilneas optimizadas de la Au-
toCAD 14.
La sintaxis del mtodo AddPol yl i ne es la siguiente:
Set ObjPolilnea = ObjColeccin. AddPol yl i ne( DblMatrizVrtices)
Propiedades de los objetos de polilnea de antigua definicin:
Appl i cat i on
Ar ea
Closed
Col or
Coor di nat es
Ent i t yName
Ent i t yType
Handl e
Layer
Li neType
Li net ypeScal e
Nor mal
Obj ect I D
Thi ckness
Type
Vi si bl e
Mtodos de los objetos de polilnea de antigua definicin:
AppendVertex
Ar r ayPol ar
Ar r ayRect angul ar
Copy
Er ase
Explode
Get Boundi ngBox
GetBulge
GetWidth
Get XDat a
Hi ghl i ght
I nt er sect Wi t h
Mi r r or
Mi r r or 3D
Move
Of f set
Rot at e
Rot at e3D
Scal eEnt i t y
SetBulge
SetWidth
Set XDat a
Tr ansf or mBy
Updat e
A continuacin pasaremos a comentar las nuevas propiedades an no estudiadas.
Cl osed. Obtiene o asigna el estado de apertura o cierre de una polilnea (o spline). Es un
valor de tipo Bool ean que puesto a Tr ue dice de la polilnea que est abierta; por el contrario
a Fal se, indica que la polilnea est cerrada. La sintaxis para asignar esta propiedad es:
ObjGrfico. Cl osed = BooCerrada
Y la sintaxis para obtener la propiedad:
BooCerrada = ObjGrfico. Cl osed
Type. Obtiene y/o asigna el tipo de adaptacin a curva o amoldamiento de superficie de una
polilnea, malla o directriz. Para asignar un tipo:
ObjGrfico. Type = IntTipo
y para obtenerlo:
IntTipo = ObjGrfico. Type
IntTipo es una valor I nt eger y que, adems, admite las siguiente constantes:
Para polilneas:
Tipo Descripcin

acSi mpl ePol y Si mpl e
acFi t Cur vePol y Adapt ada a cur va
acQuadSpl i nePol y B- spl i ne cuadr t i ca
acCubi cSpl i nePol y B- spl i ne cbi ca

Par a mal l as:

Tipo Descripcin


acSimpleMesh Simple
acQuadSurfaceMesh Amoldada a superficie B-spline cuadrtica
acCubicSurfaceMesh Amoldada a superficie B-spline cbica
acBezierSurfaceMesh Amoldada a superficie Bezier

Para directrices:

Tipo Descripcin


acLineNoArrow Una lnea sin flecha
acLineWithArrow Una lnea con flecha
acSplineNoArrow Una spline sin flecha
acSplineWithArrow Una spline con flecha
Y con respecto a los nuevos mtodos expuestos, su explicacin detallada se proporciona a con-
tinuacin.
AppendVer t ex. Se aplica exclusivamente a polilneas 2D, 3D y mallas poligonales. Este m-
todo aade un vrtice adicional al final de dichas entidades. En el caso de las mallas se debe
aadir realmente toda una fila de vrtices de la matriz M N de la superficie. La sintaxis es:
ObjGrfico. AppendVer t ex( DblPunto)
siendo DblPunto un punto de tipo de dato Doubl e.
Expl ode. Descompone una entidad compuesta en las entidades simples que la forman. Estas
entidades simples se obtienen en una matriz de objetos que habr sido definida como Va-
r i ant . Despus, y como ya hemos hecho en otros casos, podemos acceder a dichos objetos
especificando un ndice para la matriz. Su sintaxis es:
VarMatrizObjetos = ObjGrfico. Expl ode
Get Bul ge. Obtiene el valor de curvatura de un vrtice de la polilnea especificado por su ndi-
ce (se empieza a contar desde el 0, como primer vrtice). Sintaxis:
DblCurvatura = ObjPolilnea. Get Bul ge( Intndice)
La curvatura ha de almacenarse en una variable Doubl e; el ndice es evidentemente de tipo
entero (I nt eger ).
Get Wi dt h. Obtiene el grosor inicial y final (Doubl e) del tramo que comienza en el vrtice es-
pecificado por su ndice (I nt eger ). La sintaxis de este mtodo es un poco distinta, ya que se
llama a l con Cal l y se pasan las variables como argumentos del mtodo:
Cal l ObjPolilnea. Get Wi dt h( Intndice, DblGrosorInic, DblGrosorFin)
Set Bul ge. Inversamente a Get Bul ge, Set Bul ge asigna un valor de curvatura a un vrtice.
Los tipos de datos son los mismos que para aquel:
ObjPolilnea. Get Bul ge( Intndice, DblCurvatura)
Set Wi dt h. De manera contraria a Get Wi dt h, Set Wi dt h asigna el grosor inicial y final de un
tramo especificado por su vrtice inicial. Los tipos de datos los mismo que para Get Wi dt h:
Cal l ObjPolilnea. Set Wi dt h( Intndice, DblGrosorInic, DblGrosorFin)
DOCE.5.7.2. Polilneas optimizadas
Para crear polilneas optimizadas de AutoCAD 14 se utiliza el mtodo AddLi ght Wei ght Pol y-
l i ne, cuya sintaxis es la que sigue:
Set ObjPolilnea14 = ObjColeccin. AddLi ght Wei ght Pol yl i ne( DblMatrizVrtices)
Propiedades de los objetos de polilnea optimizada:
Appl i cat i on
Ar ea
Cl osed
Col or
Coor di nat es
Ent i t yName
Ent i t yType
Handl e
Layer
Li neType
Li net ypeScal e
Nor mal
Obj ect I D
Thi ckness
Type
Vi si bl e
Mtodos de los objetos de polilnea optimizada:
AddVertex
Ar r ayPol ar
Ar r ayRect angul ar
Copy
Er ase
Expl ode
Get Boundi ngBox
Get Bul ge
Get Wi dt h
Get XDat a
Hi ghl i ght
I nt er sect Wi t h
Mi r r or
Mi r r or 3D
Move
Of f set
Rot at e
Rot at e3D
Scal eEnt i t y
Set Bul ge
Set Wi dt h
Set XDat a
Tr ansf or mBy
Updat e
Las propiedades de estas polilneas son exactamente las mismas que las de las anteriores. Con
respecto a los mtodos, se cambia AppendVer t ex por AddVer t ex.
AddVer t ex. Se aplica nicamente a polilnea optimizadas. Aade un nuevo vrtice a la enti-
dad, que habr de ser el punto final de un nuevo segmento de la polilnea. Se indica el ndice
(I nt eger ) con la posicin del vrtice a continuacin del cual se aadir uno nuevo (Doubl e):
ObjPolilnea14. AddVer t ex( Intndice, DblPunto)
NOTA: Para crear polilneas con tramos curvos o en arco, se crea la polilnea con segmentos
rectos y, a continuacin, se aade la curvatura a los tramos que interese mediante el mtodo
Set Bul ge.
DOCE.5.8. Polilneas 3D
Para crear polilneas 3D recurrimos al mtodo Add3DPol y, cuya sintaxis es:
Set ObjPolilnea3D = ObjColeccin. Add3DPol y( DblMatrizVrtices)
Propiedades de los objetos de polilnea 3D:
Appl i cat i on
Cl osed
Col or
Coor di nat es
Ent i t yName
Ent i t yType
Handl e
Layer
Li neType
Li net ypeScal e
Obj ect I D
Vi si bl e
Mtodos de los objetos de polilnea 3D:
AppendVer t ex
Ar r ayPol ar
Ar r ayRect angul ar
Copy
Er ase
Expl ode
Get Boundi ngBox
Get XDat a
Hi ghl i ght
I nt er sect Wi t h
Mi r r or
Mi r r or 3D
Move
Rot at e
Rot at e3D
Scal eEnt i t y
Set XDat a
Tr ansf or mBy
Updat e
Las propiedades y mtodos expuestos estn ya estudiados.
DOCE.5.9. Rayos
El mtodo de creacin de rayos es AddRay:
Set ObjRayo = ObjColeccin. AddRay( DblPtoPrimero, DblPtoSegundo)
Propiedades de los objetos de rayo:
Appl i cat i on
BasePoint
Col or
DirectionVector
Ent i t yName
Ent i t yType
Handl e
Layer
Li neType
Li net ypeScal e
Obj ect I D
Vi si bl e
Mtodos de los objetos de rayo:
Ar r ayPol ar
Ar r ayRect angul ar
Copy
Er ase
Get Boundi ngBox
Get XDat a
Hi ghl i ght
I nt er sect Wi t h
Mi r r or
Mi r r or 3D
Move
Rot at e
Rot at e3D
Scal eEnt i t y
Set XDat a
Tr ansf or mBy
Updat e
Se explican las nuevas propiedades seguidamente.
BasePoi nt . Asigna u obtiene el punto (Doubl e) a travs del cual el rayo (o la lnea auxiliar)
pasar. Para asignar un punto de base utilizaremos la sintaxis siguiente:
ObjGrfico. BasePoi nt = DblPunto
Para obtener el punto de base de un objeto rayo (o lnea auxiliar) dibujado:
VarPunto = ObjGrfico. BasePoi nt
Di r ect i onVect or . Especifica (obtiene y/o asigna) una direccin segn un vector de direc-
cin. Para asignar:
ObjGrfico. Di r ect i onVect or = DblVector
Para obtener:
VarVector = ObjGrfico. Di r ect i onVect or
DblVector es una matriz de tres elementos Doubl e.
DOCE.5.10. Lneas auxiliares
El mtodo de creacin de lneas auxiliares es AddXLi ne:
Set ObjLneaAux = ObjColeccin. AddXLi ne( DblPtoPrimero, DblPtoSegundo)
Propiedades de los objetos de lnea auxiliar:
Appl i cat i on
BasePoi nt
Col or
Di r ect i onVect or
Ent i t yName
Ent i t yType
Handl e
Layer
Li neType
Li net ypeScal e
Obj ect I D
Vi si bl e
Mtodos de los objetos de lnea auxiliar:
Ar r ayPol ar
Ar r ayRect angul ar
Copy
Er ase
Get Boundi ngBox
Get XDat a
Hi ghl i ght
I nt er sect Wi t h
Mi r r or
Mi r r or 3D
Move
Rot at e
Rot at e3D
Scal eEnt i t y
Set XDat a
Tr ansf or mBy
Updat e
Las propiedades y mtodos expuestos estn ya estudiados.
DOCE.5.11. Trazos
El mtodo de creacin de trazos es AddTr ace:
Set ObjTrazo = ObjColeccin. AddTr ace( DblMatrizVrtices)
Propiedades de los objetos de trazo:
Appl i cat i on
Col or
Coor di nat es
Ent i t yName
Ent i t yType
Handl e
Layer
Li neType
Li net ypeScal e
Nor mal
Obj ect I D
Thi ckness
Vi si bl e
Mtodos de los objetos de trazo:
Ar r ayPol ar
Ar r ayRect angul ar
Copy
Er ase
Get Boundi ngBox
Get XDat a
Hi ghl i ght
I nt er sect Wi t h
Mi r r or
Mi r r or 3D
Move
Rot at e
Rot at e3D
Scal eEnt i t y
Set XDat a
Tr ansf or mBy
Updat e
Como vemos hemos de indicar una matriz Doubl e con los valores de los vrtices o puntos del
trazo.
Las propiedades y mtodos expuestos estn ya estudiados.
DOCE.5.12. Splines
El mtodo de creacin de splines es AddSpl i ne:
Set ObjSpline = ObjColeccin. AddSpl i ne( DblMatrizVrtices, DblTanIni, DblTanFin)
Propiedades de los objetos de spline:
Appl i cat i on
Ar ea
Cl osed
Col or
Degree
EndTangent
Ent i t yName
Ent i t yType
FitTolerance
Handl e
IsRational
Layer
Li neType
Li net ypeScal e
NumberOfControlPoints
NumberOfFitPoints
Obj ect I D
StartTangent
Vi si bl e
Mtodos de los objetos de spline:
AddFitPoint
Ar r ayPol ar
Ar r ayRect angul ar
Copy
DeleteFitPoint
ElevateOrder
Er ase
Get Boundi ngBox
GetControlPoint
GetFitPoint
GetWeight
Get XDat a
Hi ghl i ght
I nt er sect Wi t h
Mi r r or
Mi r r or 3D
Move
Of f set
PurgeFitData
Reverse
Rot at e
Rot at e3D
Scal eEnt i t y
SetControlPoint
SetFitPoint
SetWeight
Set XDat a
Tr ansf or mBy
Updat e
Como decimos, la manera de aadir splines a un dibujo es mediante el mtodo AddSpl i ne,
pasndole como argumentos una matriz Doubl e con los puntos de cada vrtice (cada uno es
una matriz de tres elementos Doubl e), la tangente de inicio, que es un vector de direccin re-
presentado por un array de tres valores Doubl e, y la tangente final, siendo esta tambin otro
vector de direccin similar al anterior.
Por ejemplo, un programa simple que dibujara una spline podra ser la siguiente macro:
Opt i on Expl i ci t

Di mAcadDoc As Obj ect
Di mAcadModel As Obj ect
Di mDi buj oSpl As Obj ect
Di mVr t i ces( 1 To 3 * 3) As Doubl e
Di mTanI ni ci al ( 1 To 3) As Doubl e
Di mTanFi nal ( 1 To 3) As Doubl e

Sub Di buj aSpl i ne( )
Set AcadDoc = Get Obj ect ( , " Aut oCAD. Appl i cat i on" ) . Act i veDocument
Set AcadModel = AcadDoc. Model Space

Vr t i ces( 1) = 0
Vr t i ces( 2) = 0
Vr t i ces( 3) = 0
Vr t i ces( 4) = 50
Vr t i ces( 5) = 50
Vr t i ces( 6) = 0
Vr t i ces( 7) = 100
Vr t i ces( 8) = 0
Vr t i ces( 9) = 0
TanI ni ci al ( 1) = 100: TanI ni ci al ( 2) = 100: TanI ni ci al ( 1) = 0
TanFi nal ( 1) = 100: TanFi nal ( 2) = 100: TanFi nal ( 1) = 0
Set Di buj oSpl = AcadModel . AddSpl i ne( Vr t i ces, TanI ni ci al , TanFi nal )
End Sub
Existen multitud de nuevas propiedades y de nuevos mtodos que se pasarn a detallar a con-
tinuacin. Comencemos por las propiedades.
Degr ee. Permite obtener la graduacin de la representacin polinomial de una spline. Su sin-
taxis es:
IntValor = ObjSpline. Degr ee
El valor es de slo lectura y ha de almacenarse en una variable declarada como I nt eger (ni-
camente puede ser un nmero entre 1 y 25, ambos inclusive).
EndTangent . Esta propiedad permite asignar y/o extraer el valor de la tangente final de la
spline, esto es, una matriz de tres elementos Doubl e que es un vector de direccin.
La sintaxis para asignar una tangente final es la que sigue:
ObjSpline. EndTangent = DblVector
Para obtenerla:
VarVector = ObjSpline. EndTangent
Fi t Tol er ance. Obtiene el ajuste de tolerancia, o reajusta esta propiedad de las splines. Co-
mo hemos de saber, si el valor de la tolerancia es cero, la spline est obligada a pasar por los
vrtices; si es mayor de cero, tiende a ellos pero no los toca. El valor de tolerancia no puede
ser negativo.
La sintaxis para usar esta propiedad para asignar un valor de tolerancia a una spline es:
ObjSpline. Fi t Tol er ance = DblValorTolerancia
Para obtenerlo:
DblValorTolerancia = ObjSpline. Fi t Tol er ance
La variable que guarde este valor habr de ser declarada como Doubl e.
I sRat i onal . Obtiene la condicin de racionalidad de la spline dada, es decir, verdadero
(Tr ue) o falso (Fal se).
La sintaxis es:
BooRacional = ObjSpline. I sRat i onal
La variable que guarde este valor habr de ser declarada como Bool ean.
Number Of Cont r ol Poi nt s. Propiedad de slo lectura que devuelve el nmero de puntos de
control de una spline:
IntNumCtrl = ObjSpline. Number Of Cont r ol Poi nt s
La variable que guarde este valor habr de ser declarada como I nt eger .
Si en el ejemplo anterior aadimos las siguientes lneas:
Di mNumCont r ol As I nt eger
NumCont r ol = Di buj oSpl . Number Of Cont r ol Poi nt s
MsgBox ( St r ( NumCont r ol ) )
Aparecer un cuadro de mensaje (MsgBox) con el nmero de puntos de control de nuestra spli-
ne, en este caso 5 (podemos comprobarlo ejecutando el comando de AutoCAD EDI TSPLI NE,
SPLI NEDI T en ingls, y designando la spline en cuestin).
Number Of Fi t Poi nt s. Parecida a la propiedad anterior, sta devuelve el nmero de puntos de
ajuste de una spline, es decir, sus vrtices:
IntNumAjst = ObjSpline. Number Of Fi t Poi nt s
La variable que guarde este valor habr de ser declarada como I nt eger tambin.
Si en al ejemplo anterior aadiramos tambin lo siguiente:
Di mNumAj ust e As I nt eger
NumAj ust e = Di buj oSpl . Number Of Fi t Poi nt s
MsgBox ( St r ( NumAj ust e) )
Aparecer otro cuadro de mensaje con el nmero de puntos de ajuste de nuestra spline, en
este caso 3.
St ar t Tangent . As como EndTangent trabaja con la tangente final, St ar t Tangent permite
asignar y/o extraer el valor de la tangente inicial de la spline, esto es, una matriz de tres ele-
mentos Doubl e que es un vector de direccin.
La sintaxis para asignar una tangente inicial es la que sigue:
ObjSpline. St ar t Tangent = DblVector
Para obtenerla:
VarVector = ObjSpline. St ar t Tangent
Y hasta aqu las nuevas propiedades de las splines. Pasemos ahora a ver los mtodos nuevos.
AddFi t Poi nt . Este mtodo nos permite aadir un nuevo punto de ajuste a una spline ya
creada. Para ello deberemos proporcionar un ndice de posicin del nuevo vrtice y sus coor-
denadas. Veamos la sintaxis de este mtodo:
Cal l ObjSpline. AddFi t Poi nt ( Intndice, DblPtoAjuste)
Donde Intndice es la posicin (I nt eger ) en la que se insertar el nuevo vrtice y DblPtoA-
juste las coordenadas del punto en cuestin (matriz de tres valores Doubl e). Deberemos lla-
mar al mtodo con Cal l .
As por ejemplo, para aadir un nuevo punto inicial (ndice 1) a la spline de nuestro ejemplo,
agregaramos a la macro:
Di mNuevoPunt o( 1 To 3) As Doubl e
NuevoPunt o( 1) = 25
NuevoPunt o( 2) = 25
NuevoPunt o( 1) = 0
Cal l Di buj oSpl . AddFi t Poi nt ( 1, NuevoPunt o)
Lo que har que se aada el nuevo punto. Dependiendo de la situacin puede ser necesario
actualizar la spline con su mtodo Updat e.
Del et eFi t Poi nt . De manera contraria al mtodo anterior, Del et eFi t Poi nt elimina un punto
de ajuste o vrtice de una spline. Su sintaxis:
Cal l ObjSpline. Del et eFi t Poi nt ( Intndice)
Como vemos en la sintaxis, nicamente hay que proporcionar como argumento el ndice co-
rrespondiente al vrtice que deseamos eliminar, que ser, si es una variable, de tipo I nt eger .
El evat eOr der . Eleva el orden de un spline al orden proporcionado como argumento del m-
todo:
Cal l ObjSpline. El evat eOr der ( Intndice)
El orden de una spline es igual a su graduacin polinomial ms uno, de ah que este valor slo
pueda ser como mucho 26.
Get Cont r ol Poi nt . Permite obtener las coordenadas del punto de control especificado por el
ndice que se proporciona como argumento. La sintaxis de uso es:
VarPuntoCtrl = ObjSpline. Get Cont r ol Poi nt ( Intndice)
Donde VarPuntoCrtl es una variable definida como Var i ant donde se guardarn las coorde-
nadas del punto en cuestin. Como sabemos ya, si queremos utilizarlas posteriormente debe-
remos realizar un trasvase a una matriz de tres elementos Doubl e.
Intndice es el ndice I nt eger del punto de control del que queremos obtener sus coordena-
das.
Get Fi t Poi nt . Las mismas consideraciones que para el mtodo anterior pero a la hora de
obtener las coordenadas de un punto de ajuste:
VarPuntoAjst = ObjSpline. Get Fi t Poi nt ( Intndice)
Get Wei ght . Este mtodo devuelve el peso del punto del control de una spline especificado
por su ndice. La sintaxis de utilizacin es la que sigue:
DblPeso = ObjSpline. Get Wei ght ( Intndice)
DblPeso es una variable declarada como Doubl e que almacenar el valor del peso del punto.
Intndice como en los mtodos anteriores.
Pur geFi t Dat a. Limpia los datos de ajuste de una spline. Su sintaxis:
Cal l ObjSpline. Pur geFi t Dat a
Rever se. Invierte la direccin de la curva spline (el vrtice inicial se convierte en el final):
Cal l ObjSpline. Rever se
Set Cont r ol Poi nt . Permite asignar coordenadas al punto de control especificado por el ndice
que se proporciona como argumento. La sintaxis de uso es:
Cal l ObjSpline. Set Cont r ol Poi nt ( Intndice, DblCoordenadas)
Donde Intndice (I nt eger ) es el ndice que determina el punto de control y DblCoordenadas
el array de tres elementos Doubl e, que son las coordenadas del punto mencionado.
Set Fi t Poi nt . Las mismas consideraciones que para el mtodo anterior pero a la hora de
asignar las coordenadas a un punto de ajuste:
Cal l ObjSpline. Set Fi t Poi nt ( Intndice, DblCoordenadas)
Set Wei ght . Este mtodo asigna un peso al punto del control de una spline especificado por
su ndice. La sintaxis de utilizacin es la que sigue:
Cal l ObjSpline. Set Wei ght ( Intndice, DblPeso)
Intndice es I nt eger ; DblPeso es Doubl e.
DOCE.5.13. Texto mltiple
Para aadir texto mltiple a la coleccin de objetos de Espacio Modelo, Espacio Papel o blo-
ques, disponemos del mtodo AddMText , cuya sintaxis es:
Set ObjTextoM = ObjColeccin. AddMText ( DblPtoIns, DblAnchura, StrTexto)
Propiedades de los objetos de texto mltiple:
Appl i cat i on
AttachmentPoint
Col or
DrawingDirection
Ent i t yName
Ent i t yType
Handl e
Hei ght
I nser t i onPoi nt
Layer
Li neType
Li net ypeScal e
Nor mal
Obj ect I D
Rot at i on
St yl eName
Text St r i ng
Vi si bl e
Width
Mtodos de los objetos de texto mltiple:
Ar r ayPol ar
Ar r ayRect angul ar
Copy
Er ase
Get Boundi ngBox
Get XDat a
Hi ghl i ght
I nt er sect Wi t h
Mi r r or
Mi r r or 3D
Move
Rot at e
Rot at e3D
Scal eEnt i t y
Set XDat a
Tr ansf or mBy
Updat e
As como en el dibujo de textos en una lnea, DblPtoIns es una matriz o tabla de tres elemen-
tos Doubl e que son las coordenadas del punto de insercin, y StrTexto es la cadena literal de
texto (St r i ng) que se imprimir en pantalla. DblAnchura se refiere a la anchura de la caja de
abarque del texto mltiple (es valor Doubl e).
Podemos apreciar que los textos mltiples disponen de tres nuevas propiedades an no vistas.
Las vemos a continuacin (los mtodos estn todos estudiados).
At achment Poi nt . Esta propiedad, exclusiva de textos mltiples, permite asignar u obtener el
tipo de justificacin de un texto mltiple con respecto a su caja de abarque o rectngulo de
reborde. Su sintaxis a la hora de asignar es:
ObjTextoM. At achment Poi nt = IntTipoJus
Para obtener:
IntTipoJus = ObjTextoM. At achment Poi nt
IntTipoJus es un valor I nt eger que adems puede albergar las siguientes constantes:
acAt t achment Poi nt TopLef t
acAt t achment Poi nt TopCent er
acAt t achment Poi nt TopRi ght
acAt t achment Poi nt Mi dLef t
acAt t achment Poi nt Mi dCent er
acAt t achment Poi nt Mi dRi ght
acAt t achment Poi nt Bot t omLef t
acAt t achment Poi nt Bot t omCent er
acAt t achment Poi nt Bot t omRi ght
Refirindose todas ellas a las distintas justificaciones posibles del texto mltiple.
Dr awi ngDi r ect i on. Esta propiedad, tambin exclusiva de textos mltiples, permite asignar u
obtener el tipo de orientacin de un texto mltiple. Su sintaxis para asignar es:
ObjTextoM. Dr awi ngDi r ect i on = IntTipoOr
Para obtener:
IntTipoOr = ObjTextoM. Dr awi ngDi r ect i on
IntTipoOr es un valor I nt eger que puede albergar las siguientes constantes:
acLef t ToRi ght
acRi ght ToLef t
acTopToBot t om
acBot t omToTop
Wi dt h. Dice referencia a la anchura del rectngulo de abarque de un objeto. Su sintaxis para
asignar una anchura es:
ObjGrfico. Wi dt h = DblAnchura
La sintaxis para obtener una anchura es:
DblAnchura = ObjGrfico. Wi dt h
DOCE.5.14. Regiones
El mtodo para la obtencin de regiones es AddRegi on y su sintaxis es:
Set ObjRegin = ObjColeccin. AddRegi on( ObjListaObjetos)
Propiedades de los objetos de regin:
Appl i cat i on
Ar ea
Centroid
Col or
Ent i t yName
Ent i t yType
Handl e
Layer
Li neType
Li net ypeScal e
MomentOfInertia
Nor mal
Obj ect I D
Perimeter
PrincipalDirections
PrincipalMoments
ProductOfInertia
RadiiOfGyration
Vi si bl e
Mtodos de los objetos de regin:
Ar r ayPol ar
Ar r ayRect angul ar
Boolean
Copy
Er ase
Expl ode
Get Boundi ngBox
Get XDat a
Hi ghl i ght
I nt er sect Wi t h
Mi r r or
Mi r r or 3D
Move
Rot at e
Rot at e3D
Scal eEnt i t y
Set XDat a
Tr ansf or mBy
Updat e
Este mtodo crea regiones a partir de una lista de objetos. Los objetos de esta lista debern
formar un rea coplanar cerrada y slo podrn ser lneas, arcos, crculos, arcos elpticos, polil-
neas y/o splines.
La lista de objetos ser una matriz o array declarada como Obj ect y que contendr todas la
entidades grficas a partir de las cuales se dibujar la regin.
Veamos las propiedades nuevas:
Cent r oi d. Esta propiedad obtiene el centroide, es decir, el centro del rea (o del volumen)
de una regin (o slido). Su sintaxis es:
VarCentroide = ObjGrfico. Cent r oi d
donde VarCentroide es una variable Var i ant que guardar las coordenadas del punto en
cuestin. Para procesarlas y como ya sabemos deberemos realizar un trasvase, ya que as
no podemos utilizarlas.
Moment Of I ner t i a. Esta propiedad obtiene el momento de inercia de una regin (o slido) y
lo devuelve como tres coordenadas X, Y y Z. Su sintaxis es:
VarMomentoInercia = ObjGrfico.Moment Of I ner t i a
La variable que habr de guardarlo ser tambin declarada como Var i ant , al igual que en el
caso de la propiedad anterior.
Per i met er . Esta propiedad (tambin de slo lectura, como las dos anteriores) obtiene el pe-
rmetro de una regin exclusivamente. Su sintaxis es:
DblPermetro = ObjRegin.Per i met er
La variable que habr de guardarlo ser declarada como Doubl e.
Pr i nci pal Di r ect i ons. Permite obtener las principales direcciones (en X, Y y Z) de una re-
gin (o slido). Su sintaxis es:
VarDireccionesP = ObjGrfico.Pr i nci pal Di r ect i ons
La variable que habr de guardarlo ser declarada como Var i ant .
Pr i nci pal Moment s. Permite obtener los principales momentos (en X, Y y Z) de una regin (o
slido). Su sintaxis es:
VarMomentosP = ObjGrfico.Pr i nci pal Moment s
La variable que habr de guardarlo ser declarada como Var i ant .
Pr oduct Of I ner t i a. Devuelve el producto de inercias (en X, Y y Z) de una regin (o slido).
Su sintaxis es:
VarProductoInercias = ObjGrfico.Pr oduct Of I ner t i a
La variable que habr de guardarlo ser declarada como Var i ant .
Radi i Of Gyr at i on. Permite obtener el radio de giro (en X, Y y Z) de una regin (o slido). Su
sintaxis es:
VarRadioGiro = ObjGrfico.Radi i Of Gyr at i on
La variable que habr de guardarlo ser declarada como Var i ant .
NOTA: Todos los clculos que se realizan al utilizar estas propiedades se efectan en el siste-
ma de coordenadas actual.
Veamos ahora el nuevo mtodo.
Bool ean. Permite realizar una operacin booleana (unin, diferencia o interseccin) entre el
objeto al cual se le aplica y otro objeto, sea slido o regin.
Su sintaxis es la que sigue:
ObjGrfico3 = ObjGrfico1.Bool ean( LngOperacin, ObjGrfico2)
LngOperacin es un valor tipo Long que indica la operacin que se realizar entre ambos sli-
dos. Admite las siguientes constantes:
acUni on
acI nt er sect i on
acSubt r act i on
ObjGrfico2 es la entidad grfica de AutoCAD 14 (regin o slido) existente con la cual se
realizar la operacin booleana con el otro objeto (ObjGrfico1). Ambos objetos debern es-
tar ya creado, evidentemente.
ObjGrfico3 es el objeto grfico resultado. Ser una variable declarada como Obj ect .
DOCE.5.15. Slidos 3D
La obtencin de slidos primitivos de AutoCAD 14 requiere ms de un mtodo para su ejecu-
cin. Veremos aqu todos y cada uno de ellos, adems de sus propiedades y mtodos, que son
comunes a todos ellos.
Las diferentes sintaxis de creacin de slidos, con su explicacin pertinente, se exponen a con-
tinuacin.
DOCE.5.15.1. Prisma rectangular
Set ObjPrismaRect = ObjColeccin. AddBox( DblPtoOrg, DblLargo, DblAncho, DblAlto)
Los argumentos para este mtodo son el punto de origen (DblPtoOrg), el cual es el centro de
la caja de abarque, no una esquina (es una matriz de tres elementos Doubl e); la dimensin de
longitud (Doubl e); la dimensin de anchura (Doubl e); y la dimensin de altura (Doubl e).
DOCE.5.15.2. Cono
Set ObjCono = ObjColeccin. AddCone( DblPtoCentro, DblAltura, DblRadioBase)
Los argumentos para este mtodo son el centro, el cual es el centro de la caja de abarque, no
el de la base (es una matriz de tres elementos Doubl e); la altura del cono (Doubl e); y el radio
de la base (Doubl e).
DOCE.5.15.3. Cilindro
Set ObjCilindro = ObjColeccin. AddCyl i nder ( DblPtoCentro, DblAltura, DblRadio)
Los argumentos para este mtodo son el centro, el cual es el centro de la caja de abarque, no
el de la base (es una matriz de tres elementos Doubl e); la altura del cilindro (Doubl e); y el
radio (Doubl e).
DOCE.5.15.4. Cono elptico
Set ObjConElp = ObjColeccin. AddEl l i pt i cal Cone( DblPtoCentro, DblRadioMayor,
DblRadioMenor, DblAltura)
Los argumentos para este mtodo son el centro, el cual es el centro de la caja de abarque, no
el de la base (es una matriz de tres elementos Doubl e); el radio mayor de la elipse de la base
(Doubl e); el radio menor de la elipse de la base (Doubl e); y la altura del cono elptico (Dou-
bl e).
DOCE.5.15.5. Cilindro elptico
Set ObjCilElp = ObjColeccin. AddEl l i pt i cal Cyl i nder ( DblPtoCentro, DblRadioMayor,
DblRadioMenor, DblAltura)
Los argumentos para este mtodo son el centro, el cual es el centro de la caja de abarque, no
el de la base (es una matriz de tres elementos Doubl e); el radio mayor de la elipse de la base
(Doubl e); el radio menor de la elipse de la base (Doubl e); y la altura del cilindro elptico (Dou-
bl e).
DOCE.5.15.6. Esfera
Set ObjEsfera = ObjColeccin. AddSpher e( DblPtoCentro, DblRadio)
Los argumentos para este mtodo son el centro, el cual es el centro de la caja de abarque, o
sea el propio centro de la esfera (es una matriz de tres elementos Doubl e); y el radio de la
esfera (Doubl e).
DOCE.5.15.7. Toroide
Set ObjToroide = ObjColeccin. AddTor us( DblPtoCentro, DblRadToro, DblRadTub)
Los argumentos para este mtodo son el centro, el cual es el centro de la caja de abarque, o
sea el propio centro del toroide o toro (es una matriz de tres elementos Doubl e); el radio de
toroide (Doubl e); y el radio del tubo (Doubl e).
DOCE.5.15.8. Cua
Set ObjCua = ObjColeccin. AddWedge( DblPtoCentro, DblLargo, DblAncho, DblAlto)
Los argumentos para este mtodo son el centro, el cual es el centro de la caja de abarque, no
una esquina ni el centro de una cara (es una matriz de tres elementos Doubl e); la dimensin
de longitud (Doubl e); la dimensin de anchura (Doubl e); y la dimensin de altura (Doubl e).
DOCE.5.15.9. Extrusin
Set ObjExtrusin = ObjColeccin. AddExt r udedSol i d( ObjPerfil, DblAltura, Dblngu-
lo)
Con este mtodo podemos crear extrusiones de cualquier perfil que cumpla las normas nece-
sarias para poder ser perfil de extrusin (igual que desde la interfaz de AutoCAD). La nica
excepcin quiz es que dicho perfil habr de ser obligatoriamente una regin, no es lcito des-
de VBA utilizar una polilnea. Por ello todos los perfiles originales tendrn informacin de su-
perficie, lo que har que AutoCAD cree slidos cerrados (con "tapa").
ObjPerfil se refiere al objeto (Obj ect ) a partir del cual se crear la extrusin (una regin,
como hemos dicho); DblAltura es la altura de extrusin a lo largo del eje Z (Doubl e); Dbln-
gulo es el ngulo de salida de la extrusin en radianes (Doubl e).
DOCE.5.15.10. Extrusin con camino
Set ObjExtrusinC = ObjColeccin. AddExt r udedSol i dAl ongPat h( ObjPerfil, ObjCamino)
Con este mtodo podemos crear extrusiones a lo largo de un camino de extrusin. ObjPerfil
es el objeto (tipo Obj ect ) que ser el perfil que se extruir (ser una regin); ObjCamino es
otro objeto (tipo Obj ect tambin) que es el camino de extrusin (ser una polilnea, un crcu-
lo, una elipse, una spline o un arco, exclusivamente).
DOCE.5.15.11. Revolucin
Set ObjRevolucin = ObjColeccin. AddRevol vedSol i d( ObjPerfil, DblPtoInicial,
DblDireccin, Dblngulo)
Con el mtodo AddRevol ve creamos objetos de revolucin a partir de un perfil de revolucin.
Se pasan como argumentos el objeto (Obj ect ), que ser perfil (slo una regin); el punto ini-
cial del eje de revolucin (matriz de tres elementos Doubl e); la direccin del eje de revolucin
(matriz de tres elementos Doubl e); y el nmero de ngulos cubiertos en radianes (Doubl e).
DOCE.5.15.12. Propiedades y mtodos de los
slidos
3D
Como ya hemos dicho las propiedades y los mtodos son comunes a todos los mecanismos
que acabamos de estudiar. Se detallan a continuacin.
Propiedades de los objetos de slido 3D:
Appl i cat i on
Cent r oi d
Col or
Ent i t yName
Ent i t yType
Handl e
Layer
Li neType
Li net ypeScal e
Moment Of I ner t i a
Obj ect I D
Pr i nci pal Di r ect i ons
Pr i nci pal Moment s
Pr oduct Of I ner t i a
Radi i Of Gyr at i on
Vi si bl e
Volume
Mtodos de los objetos de slido 3D:
Ar r ayPol ar
Ar r ayRect angul ar
Bool ean
CheckInterference
Copy
Er ase
Get Boundi ngBox
Get XDat a
Hi ghl i ght
I nt er sect Wi t h
Mi r r or
Mi r r or 3D
Move
Rot at e
Rot at e3D
Scal eEnt i t y
SectionSolid
Set XDat a
SliceSolid
Tr ansf or mBy
Updat e
Pasaremos ahora a comentar las que an no conocemos. Primero la nueva propiedad Vol ume.
Vol ume. Esta propiedad de slo lectura y exclusiva de los slidos permite extraer el volumen
de uno de ellos (tipo Doubl e). Para esto utilizamos la sintaxis siguiente:
DblVolumen = ObjSlido. Vol ume
Veamos ahora los nuevos mtodos CheckI nt er f er ence, Sect i onSol i d y Sl i ceSol i d.
CheckI nt er f er ence. Con este mtodo disponemos de la posibilidad de averiguar si existe
interferencia entre dos slidos y, si as fuera y lo especificramos, crear un nuevo slido resul-
tante. La sintaxis para su uso es:
ObjSlido3 = ObjSlido1. CheckI nt er f er ence( ObjSlido2, BooCrearNuevo)
ObjSlido2 es la entidad (tipo Obj ect ) con que se quiere comprobar la interferencia con Obj-
Slido1. BooCrearNuevo es un valor booleano (tipo Bool ean), esto es Tr ue (verdadero) o
Fal se (falso), que especifica si se crear un slido con la interferencia (si existiera). ObjSli-
do3 es el slido resultante (tipo Obj ect ) si hubiera interferencia y BooCrearNuevo estuviera
puesto a Tr ue.
Sect i onSol i d. Crea un regin, que es la seccin del slido al que se le aplica, determinada
por un plano definido por tres puntos que se proporcionan como argumentos.
ObjSlido2 = ObjSlido1. Sect i onSol i d( DblPto1, DblPto2, DblPto3)
ObjSlido2 es el objeto (tipo Obj ect ) resultante que ser un regin; DblPto1, DblPto2 y
DblPto3 son los tres puntos (matriz de tres valores tipo Doubl e) que definen el plano de sec-
cin.
Sl i ceSol i d. Produce un corte, en el slido al que se aplica, mediante un plano definido por
tres puntos.
ObjSlido2 = ObjSlido1. Sl i ceSol i d( DblPto1, DblPto2, DblPto3, BooNeg)
ObjSlido2 es el objeto (tipo Obj ect ) resultante que ser un slido; DblPto1, DblPto2 y
DblPto3 son los tres puntos (matriz de tres valores tipo Doubl e cada uno) que definen el pla-
no de corte; BooNeg es una valor tipo Bool ean (Tr ue o Fal se) que determina si se devuelve o
no el slido en la parte negativa del plano, o sea, que si se conserva la parte cortada en la zo-
na negativa del plano o no. Tr ue conserva el slido completo, pero cortado; Fal se elimina di-
cha parte.
DOCE.5.16. Caras 3D
El mtodo del que disponemos para la creacin de caras 3D es Add3DFace y su sintaxis es la
sigue a continuacin:
Set ObjCara3D = ObjColeccin. Add3DFace( DblPto1, DblPto2, DblPto3, DblPto4)
Propiedades de los objetos de cara 3D:
Appl i cat i on
Col or
Ent i t yName
Ent i t yType
Handl e
Layer
Li neType
Li net ypeScal e
Obj ect I D
Vi si bl e
Mtodos de los objetos de cara 3D:
Ar r ayPol ar
Ar r ayRect angul ar
Copy
Er ase
Get Boundi ngBox
GetInvisibleEdge
Get XDat a
Hi ghl i ght
I nt er sect Wi t h
Mi r r or
Mi r r or 3D
Move
Rot at e
Rot at e3D
Scal eEnt i t y
SetInvisibleEdge
Set XDat a
Tr ansf or mBy
Updat e
Al mtodo Add3DFace debemos pasarle como argumentos los cuatro puntos de una cara 3D.
Todos estos puntos sers arrays de tres elementos tipo Doubl e cada uno. El ltimo punto
(DblPto4) es opcional, si no se indica se crea una cara 3D de tres aristas.
Veamos el nuevo par de mtodos.
Get I nvi si bl eEdge. Devuelve el estado de visibilidad de la arista de la cara 3D especificada
por su ndice. Su sintaxis es la siguiente:
BooEstado = ObjCara3D. Get I nvi si bl eEdge( Intndice)
La variable que almacenar el estado (BooEstado) ser declarada como booleana (Bool ean).
Si recoge un valor Tr ue la arista es invisible; si recoge un valor Fal se la arista es visible.
Intndice es el nmero de orden de la arista que se desea comprobar de la cara 3D. Ha de
ser un valor entre 0 y 3, siendo 0 la primera arista y 3 la cuarta, si la hubiera.
Set I nvi si bl eEdge. Asigna un estado de visibilidad para una arista de una cara 3D, especifi-
cada por su ndice. Su sintaxis es:
Cal l ObjCara3D. Set I nvi si bl eEdge( Intndice, BooEstado)
El significado y tipo de dato para Intndice y BooEstado son los mismos que en el mtodo
anterior.
DOCE.5.17. Mallas poligonales
La sintaxis del mtodo para dibujar mallas poligonales es:
Set ObjMalla3D = ObjColeccin. Add3DMesh( IntM, IntN, DblMatrizPuntos)
Propiedades de los objetos de malla poligonal:
Appl i cat i on
Col or
Coor di nat es
Ent i t yName
Ent i t yType
Handl e
Layer
Li neType
Li net ypeScal e
MClose
MDensity
MVertexCount
NClose
NDensity
NVertexCount
Obj ect I D
Type
Vi si bl e
Mtodos de los objetos de malla poligonal:
AppendVer t ex
Ar r ayPol ar
Ar r ayRect angul ar
Copy
Er ase
Expl ode
Get Boundi ngBox
Get XDat a
Hi ghl i ght
I nt er sect Wi t h
Mi r r or
Mi r r or 3D
Move
Rot at e
Rot at e3D
Scal eEnt i t y
Set XDat a
Tr ansf or mBy
Updat e
Add3DMesh crea una malla tridimensional indicndole el nmero de vrtices en las direcciones
M y N (con el mismo sentido que desde la interfaz grfica de AutoCAD), as como una matriz
M N de los puntos en cuestin. Los valores de M y N son valores enteros (si son variables se-
rn declaradas como I nt er ger ) entre 2 y 256. La matriz de vrtices contendr todos los pun-
tos, los cuales requieren tres coordenadas tipo Doubl e. Veamos un ejemplo (macro):
Opt i on Expl i ci t

Di mAcadDoc As Obj ect
Di mAcadModel As Obj ect
Di mVr t i ces( 1 To 3 * 3) As Doubl e

Sub Mal l aDi b( )
Set AcadDoc = Get Obj ect ( , " Aut oCAD. Appl i cat i on" ) . Act i veDocument
Set AcadPapel = AcadDoc. Paper Space

Di mM As I nt eger , N As I nt eger
Di mMal l a as Obj ect
Di mTot al As I nt eger
M = 2
N = 2
Tot al = M * N

Di mVr t i ces( 1 To Tot al * 3) As Doubl e
Vr t i ces( 1) = 0
Vr t i ces( 2) = 0
Vr t i ces( 3) = 0
Vr t i ces( 4) = 20
Vr t i ces( 5) = 0
Vr t i ces( 6) = 0
Vr t i ces( 7) = 0
Vr t i ces ( 8) = 20
Vr t i ces ( 9) = 0
Vr t i ces ( 10) = 20
Vr t i ces ( 11) = 20
Vr t i ces ( 12) = 0
Set Mal l a = AcadPapel . Add3dMesh( M, N, Vr t i ces)
End Sub
Pasemos a la explicacin pertinente de propiedades y mtodos nuevos. Como siempre, primero
las propiedades.
MCl ose. Esta propiedad permite asignar u obtener la verificacin de cerramiento de la malla
en la direccin M.
La sintaxis que usaremos para asignar un cerramiento o apertura en esta direccin es:
ObjMalla3D. MCl ose = BooVerCerramiento
Y la sintaxis para obtener la propiedad:
BooVerCerramiento = ObjMalla3D. MCl ose
Siendo BooVerCerramiento una variable declarada como Bool ean, la cual si guarda Tr ue sig-
nifica que la malla est cerrada en M; si guarda Fal se significa que est abierta en dicha direc-
cin.
MDensi t y. Esta propiedad permite asignar u obtener la densidad de la malla en la direccin
M. La densidad es el nmero de vrtices (en este caso en M) que posee la malla despus de
una operacin de ajuste de la misma.
La sintaxis que usaremos para asignar una densidad en esta direccin es:
ObjMalla3D. MDensi t y = IntDensidad
Y la sintaxis para obtener la propiedad:
IntDensidad = ObjMalla3D. MDensi t y
Siendo IntDensidad una variable declarada como I nt eger . Por defecto este valor es igual a 6.
MVer t exCount . Esto es el nmero de vrtices de una malla poligonal en la direccin M cuando
la propiedad Type es igual a acSi mpl eMesh (vase la seccin DOCE.5.7.1., en el lugar en el
que se muestran los valores de Type para las mallas).
Y la sintaxis que utilizaremos para obtener este valor de slo lectura es:
IntNumVert = ObjMalla3D. MVer t exCount
Siendo IntNumVert una variable declarada como I nt eger . Este valor slo puede encontrarse
entre 2 y 256.
NCl ose. Lo mismo que para MCl ose pero en direccin N.
NDensi t y. Lo mismo que para MDensi t y pero en direccin N.
NVer t exCount . Lo mismo que para MVer t exCount pero en direccin N.
NOTA: Vase la seccin DOCE.5.7.1., donde se comenta la propiedad Type de las polilneas,
para observar los valores de esta propiedad en las mallas.
DOCE.5.18. Imgenes de trama
La sintaxis del mtodo para insertar imgenes de trama (imgenes raster) es:
Set ObjImgTrama = ObjColeccin. AddRast er ( StrNombArch, DblPtoIns, DblFacEscala,
DblAngRotacin)
Propiedades de los objetos de imagen de trama:
Appl i cat i on
Brightness
ClippingEnabled
Col or
Contrast
Ent i t yName
Ent i t yType
Fade
Handl e
Hei ght
ImageFile
ImageVisibility
Layer
Li neType
Li net ypeScal e
Obj ect I D
Origin
Transparency
Vi si bl e
Wi dt h
Mtodos de los objetos de imagen de trama:
Ar r ayPol ar
Ar r ayRect angul ar
ClipBoundary
Copy
Er ase
Get Boundi ngBox
Get XDat a
Hi ghl i ght
I nt er sect Wi t h
Mi r r or
Mi r r or 3D
Move
Rot at e
Rot at e3D
Scal eEnt i t y
Set XDat a
Tr ansf or mBy
Updat e
Para poder introducir una imagen raster desde VBA necesitamos proporcionar el nombre y ruta
completa del archivo de imagen (StrNombArch), que si es variable ser del tipo St r i ng; el
punto de insercin (matriz de tres elementos Doubl e); el factor de escala (Doubl e), cuyo valor
por defecto es 1, y habr de ser siempre positivo; y el ngulo de rotacin en radianes (Dou-
bl e).
Los tipos de formatos grficos admitidos son los mismos que en la insercin de imgenes de
trama desde la interfaz grfica.
Veamos las nuevas propiedades.
Br i ght ness. Establece u obtiene el brillo de una imagen. Este valor es I nt eger y debe estar
comprendido entre 0 y 100. Por defecto vale 50.
La sintaxis que usaremos para asignar brillo es:
ObjRaster. Br i ght ness = IntBrillo
Y la sintaxis para obtener el brillo:
IntBrillo = ObjRaster. Br i ght ness
Cl i ppi ngEnabl ed. Habilita o no un contorno delimitador creado con el mtodo Cl i pBoundar y
(que veremos luego). Tambin se puede utilizar para devolver un valor booleano que nos in-
forme de si cierta imagen posee o no esta propiedad activada.
La sintaxis que usaremos para habilitar o no el contorno delimitador es:
ObjRaster. Cl i ppi ngEnabl ed = BooEstadoMarco
Si hacemos esta propiedad igual a Tr ue el contorno se habilita; con Fal se se deshabilita.
Y la sintaxis para obtener es:
BooEstadoMarco = ObjRaster. Cl i ppi ngEnabl ed
BooEstadoMarco habr sido definida como Bool ean.
Cont r ast . Establece u obtiene el contraste de la imagen. Este valor I nt eger habr de estar
entre 0 y 100. Por defecto es 50.
La sintaxis que usaremos para asignar contraste es:
ObjRaster. Cont r ast = IntContraste
Y la sintaxis para obtener el contraste:
IntContraste = ObjRaster. Cont r ast
Fade. Establece u obtiene el difuminado de la imagen. Este valor I nt eger habr de estar en-
tre 0 y 100. Por defecto es 0.
La sintaxis que usaremos para asignar difuminado es:
ObjRaster. Fade = IntDifuminado
Y la sintaxis para obtener el difuminado existente en una imagen:
IntDifuminado = ObjRaster. Fade
I mageFi l e. Establece u obtiene el archivo de imagen de la insercin raster.
La sintaxis que usaremos para asignar un nombre es:
Obj Rast er . I mageFi l e = StrNombArch
Y la sintaxis para obtener el nombre de archivo de una imagen:
StrNombArch = ObjRaster. I mageFi l e
StrNombArch es una cadena declarada como St r i ng.
I mageVi si bi l i t y. Establece u obtiene si la imagen es visible o no.
La sintaxis que usaremos para asignar la condicin de visibilidad:
ObjRaster. I mageVi si bi l i t y = BooVisibilidad
Y la sintaxis para obtener la condicin de visibilidad:
BooVisibilidad = ObjRaster. I mageVi si bi l i t y
La variable que guarde este valor estar declarada como Bool ean. Esta variable es booleana y
adems puede contener las siguiente constantes:
acOn
acOf f
Or i gi n. Establece u obtiene el punto origen de un objeto (otros adems de imgenes de
trama) en coordenadas del SCU.
Utilizaremos la siguiente sintaxis para asignar un punto de origen:
ObjGrfico. Or i gi n = DblPtoOrigen
Y podemos utilizar la siguiente para obtener el punto origen de un objeto que admita esta pro-
piedad:
VarPtoOrigen = ObjGrfico. Or i gi n
La variable que guarde este valor guardar un punto, es decir, ser una matriz de tres ele-
mentos Doubl e para asignar o un variable Var i ant para recoger.
Tr anspar ency. Establece u obtiene la condicin de transparencia para imgenes bitonales.
Para establecer o asignar:
ObjRaster. Tr aspar ency = BooCondicinTransp
Para obtener:
BooCondicinTrans = ObjRaster. Tr anspar ency
BooCondicinTrans es una variable del tipo Bool ean que puede adquirir los siguientes valores
constantes:
acOn
acOf f
El nico mtodo nuevo se detalla ahora:
Cl i pBoundar y. Establece una serie de puntos que determinan un contorno delimitador para
la imagen de trama. Su sintaxis es:
Cal l ObjRaster. Cl i pBoundar y( DblMatrizPtos)
donde DblMatrizPtos contiene los diferentes puntos (array de tres elementos Doubl e).
NOTA: Recordemos que para hacer efectivo este contorno deberemos poner a Tr ue la propie-
dad Cl i ppi ngEnabl ed del objeto de imagen de trama en cuestin.





DOCE.5.19. Slidos 2D
Para crear slidos 2D, esto es, polgonos de relleno slido (comando SOLI DO, SOLI D en ingls,
de AutoCAD), el mtodo de las colecciones de Espacio Modelo, Papel o de bloques que utili-
zamos es AddSol i d.
La sintaxis del mtodo AddSol i d es la que sigue:
Set ObjSlido2D = ObjColeccin. AddSol i d( DblPto1, DblPto2, DblPto3, DblPto4)
Propiedades de los objetos de slido 2D:
Appl i cat i on
Col or
Coor di nat es
Ent i t yName
Ent i t yType
Handl e
Layer
Li neType
Li net ypeScal e
Nor mal
Obj ect I D
Thi ckness
Vi si bl e
Mtodos de los objetos de slido 2D:
Ar r ayPol ar
Ar r ayRect angul ar
Copy
Er ase
Get Boundi ngBox
Get XDat a
Hi ghl i ght
I nt er sect Wi t h
Mi r r or
Mi r r or 3D
Move
Rot at e
Rot at e3D
Scal eEnt i t y
Set XDat a
Tr ansf or mBy Updat e
Las propiedades y mtodos expuestos estn ya estudiados.
DOCE.5.20. Formas
El siguiente mtodo permite aadir formas al dibujo. Para ello el archivo de formas contenedor
correspondiente . SHX habr de estar cargado, lo que aprenderemos a hacer ms adelante.
La sintaxis del mtodo AddShape es:
Set ObjForma = ObjColeccin. AddShape( StrNombre, DblPtoIns, DblFacEscal, DblRot)
Propiedades de los objetos de forma:
Appl i cat i on
Col or
Ent i t yName
Ent i t yType
Handl e
Hei ght
I nser t i onPoi nt
Layer
Li neType
Li net ypeScal e
Name
Nor mal
Obj ect I D
Obl i queAngl e
Rot at i on
Scal eFact or
Thi ckness
Vi si bl e
Mtodos de los objetos de forma:
Ar r ayPol ar
Ar r ayRect angul ar
Copy
Er ase
Get Boundi ngBox
Get XDat a
Hi ghl i ght
I nt er sect Wi t h
Mi r r or
Mi r r or 3D
Move
Rot at e
Rot at e3D
Scal eEnt i t y
Set XDat a
Tr ansf or mBy
Updat e
Veremos la nica propiedad nueva.
Name. Obtiene y/o asigna el nombre del objeto en cuestin, en el caso que nos ocupa el de la
forma (tambin en el de documento activo, aplicacin... que veremos ms adelante).
La sintaxis para asignar es:
Objeto. Name = StrNombre
La sintaxis para obtener es:
StrNombre = Objeto. Name
Ejemplo:
Opt i on Expl i ci t

Di mAcadDoc As Obj ect
Di mAcadModel As Obj ect
Di mFor ma As Obj ect
Di mPt oI ns( 1 To 3) As Doubl e

Sub Macr o( )
Set AcadDoc = Get Obj ect ( , " Aut oCAD. Appl i cat i on" ) . Act i veDocument
Set AcadModel = AcadDoc. Model Space

Pt oI ns( 1) = 100: Pt oI ns( 2) = 100: Pt oI ns( 3) = 0
Set For ma = AcadModel . AddShape( " box" , Pt oI ns, 1, 0)
MsgBox For ma. Name
End Sub
Esta macro inserta una forma llamada BOX (del archivo LTYPESHP. SHX) en el punto 100,100,0
del Espacio Modelo del dibujo actual. A continuacin muestra en un cuadro de mensaje el
nombre (extrado con Name) de la forma insertada (For ma), que en este caso ser BOX. Como
ya hemos comentado, el archivo LTYPESHP. SHX en este caso deber estar cargado.
DOCE.5.21. Acotacin, directrices y tolerancias
A continuacin estudiaremos los diversos mtodos de los que disponemos para agregar cotas a
nuestros dibujos mediante programacin VBA. As tambin veremos dos aspectos muy relacio-
nados con la acotacin, esto es, la directriz y la tolerancia. Como viene siendo habitual tam-
bin se expondrn, y estudiarn en su caso, las diferentes propiedades y los diferentes mto-
dos de cada elemento de AutoCAD 14.
DOCE.5.21.1. Cotas alineadas
El mtodo de adicin de cotas alineadas es AddDi mAl i gned:
Set ObjCotaAlineada = ObjColeccin. AddDi mAl i gned( DblPtoLinExt1, DblPtoLinExt2,
DblPosTexto)
Propiedades de los objetos de cota alineada:
Appl i cat i on
Col or
Ent i t yName
Ent i t yType
ExtLine1Point
ExtLine2Point
Handl e
Layer
Li neType
Li net ypeScal e
Nor mal
Obj ect I D
Rot at i on
St yl eName
TextPosition
TextRotation
Text St r i ng
Vi si bl e
Mtodos de los objetos de cota alineada:
Ar r ayPol ar
Ar r ayRect angul ar
Copy
Er ase
Get Boundi ngBox
Get XDat a
Hi ghl i ght
I nt er sect Wi t h
Mi r r or
Mi r r or 3D
Move
Rot at e
Rot at e3D
Scal eEnt i t y
Set XDat a
Tr ansf or mBy
Updat e
En las cotas alineadas, como debemos saber, la lnea de cota es paralela a la lnea que une los
puntos de origen de las lneas de extensin o auxiliares. Las lneas de extensin comienzan en
dos puntos (Doubl e) que son los que indicaremos en la sintaxis de AddDi mAl i gned como dos
primeros argumentos. La posicin del texto, que tambin es el valor de un punto (matriz de
tres elementos Doubl e), indicar la longitud de las lneas auxiliares, teniendo en cuenta por
supuesto la configuracin del estilo de acotacin actual.
Veremos las cuatro nuevas propiedades.
Ext Li ne1Poi nt . Obtiene y/o asigna un punto para la primera lnea de extensin.
La sintaxis para asignar es:
ObjetoCotaAlineada. Ext Li ne1Poi nt = DblPunto1
La sintaxis para obtener es:
VarPunto1 = ObjetoCotaAlineada. Ext Li ne1Poi nt
Como siempre, para recoger un punto utilizaremos una variable Var i ant . Despus podremos
acceder a cada valor unitario mediante ndices, como ya se explic.
Ext Li ne2Poi nt . Obtiene y/o asigna un punto para la segunda lnea de extensin.
La sintaxis para asignar es:
ObjetoCotaAlineada. Ext Li ne2Poi nt = DblPunto2
La sintaxis para obtener es:
VarPunto2 = ObjetoCotaAlineada. Ext Li ne2Poi nt
Las mismas consideraciones que para la propiedad anterior.
Text Posi t i on. Obtiene y/o asigna un punto para la posicin del texto.
La sintaxis para asignar es:
ObjetoCota. Text Posi t i on = DblPuntoTexto
La sintaxis para obtener es:
VarPuntoTexto = ObjetoCota. Text Posi t i on
Como siempre, para recoger un punto utilizaremos una variable Var i ant . Despus podremos
acceder a cada valor unitario mediante ndices, como ya explic.
Text Rot at i on. Obtiene y/o asigna el ngulo de rotacin en radianes del texto de cota.
La sintaxis para asignar es:
ObjetoCota. Text Rot at i on = DblRotacin
La sintaxis para obtener es:
DblRotacin = ObjetoCota. Text Rot at i on
Dbl Rot aci n ha de ser un valor Double.
DOCE.5.21.2. Cotas angulares
El mtodo de adicin de cotas angulares es AddDi mAngul ar :
Set ObjCotaAngular = ObjColeccin. AddDi mAngul ar ( DblVrticengulo, DblPtoFinal1,
DblPtoFinal2, DblPosTexto)
Propiedades de los objetos de cota angular:
Appl i cat i on
Col or
Ent i t yName
Ent i t yType
ExtLine1EndPoint
ExtLine1StartPoint
ExtLine2EndPoint
ExtLine1StartPoint
Handl e
Layer
Li neType
Li net ypeScal e
Nor mal
Obj ect I D
Rot at i on
St yl eName
Text Posi t i on
Text Rot at i on
Text St r i ng
Vi si bl e
Mtodos de los objetos de cota angular:
Ar r ayPol ar
Ar r ayRect angul ar
Copy
Er ase
Get Boundi ngBox
Get XDat a
Hi ghl i ght
I nt er sect Wi t h
Mi r r or
Mi r r or 3D
Move
Rot at e
Rot at e3D
Scal eEnt i t y
Set XDat a
Tr ansf or mBy
Updat e
En el mtodo AddDi mAngul ar primero se indica como argumento el centro del arco o el vrtice
comn entre las dos lneas auxiliares (Doubl e). Los dos siguientes argumentos especifican los
puntos (tambin matriz de tres elementos Doubl e) por los que pasan las lneas de extensin o
auxiliares. El ltimo argumento indica la posicin del texto; es tambin un punto (Doubl e).
Las cuatro nuevas propiedades a continuacin.
Ext Li ne1EndPoi nt . Obtiene y/o asigna un punto final para la primera lnea de extensin.
La sintaxis para asignar es:
ObjetoCotaAngular. Ext Li ne1EndPoi nt = DblPuntoFinal1
La sintaxis para obtener es:
VarPuntoFinal1 = ObjetoCotaAngular. Ext Li ne1EndPoi nt
Ext Li ne1St ar t Poi nt . Obtiene y/o asigna un punto inicial para la primera lnea de extensin.
La sintaxis para asignar es:
ObjetoCotaAngular. Ext Li ne1St ar t Poi nt = DblPuntoInicial1
La sintaxis para obtener es:
VarPuntoInicial1 = ObjetoCotaAngular. Ext Li ne1St ar t Poi nt
Ext Li ne2EndPoi nt . Obtiene y/o asigna un punto final para la segunda lnea de extensin.
La sintaxis para asignar es:
ObjetoCotaAngular. Ext Li ne2EndPoi nt = DblPuntoFinal2
La sintaxis para obtener es:
VarPuntoFinal2 = ObjetoCotaAngular. Ext Li ne2EndPoi nt
Ext Li ne2St ar t Poi nt . Obtiene y/o asigna un punto inicial para la segunda lnea de extensin.
La sintaxis para asignar es:
ObjetoCotaAngular. Ext Li ne2St ar t Poi nt = DblPuntoInicial2
La sintaxis para obtener es:
VarPuntoInicial2 = ObjetoCotaAngular. Ext Li ne2St ar t Poi nt
DOCE.5.21.3. Cotas diamtricas
El mtodo de adicin de cotas diamtricas es AddDi mDi amet r i c:
Set ObjCotaDiamtrica = ObjColeccin. AddDi mDi amet r i c( DblDimetroPto1, DblDime-
troPto2, DblLongDirectriz)
Propiedades de los objetos de cota diamtrica:
Appl i cat i on
Col or
Ent i t yName
Ent i t yType
Handl e
Layer
LeaderLength
Li neType
Li net ypeScal e
Nor mal
Obj ect I D
Rot at i on
St yl eName
Text Posi t i on
Text Rot at i on
Text St r i ng
Vi si bl e
Mtodos de los objetos de cota diamtrica:
Ar r ayPol ar
Ar r ayRect angul ar
Copy
Er ase
Get Boundi ngBox
Get XDat a
Hi ghl i ght
I nt er sect Wi t h
Mi r r or
Mi r r or 3D
Move
Rot at e
Rot at e3D
Scal eEnt i t y
Set XDat a
Tr ansf or mBy
Updat e
El mtodo AddDi mDi amet r i c crea una cota dimetrica para un crculo o un arco dados los dos
puntos del dimetro (matrices de tres elementos Doubl e) y la longitud de la directriz de la l-
nea de cota (Doubl e).
Se crean diferentes tipos de cotas diamtricas dependiendo del tamao del crculo o del arco,
del argumento de longitud de directriz y de los valores de las variables de acotacin DI MUPT,
DI MTOFL, DI MFI T, DI MTI H, DI MTOH, DI MJ UST y DI MTAD.
La nueva propiedad:
Leader Lengt h. Obtiene y/o asigna una longitud (Doubl e) para la lnea directriz.
La sintaxis para asignar es:
ObjetoCota. Leader Lengt h = DblLongitud
La sintaxis para obtener es:
DblLongitud = ObjetoCota. Leader Lengt h
NOTA: La asignacin de una longitud de directriz debe realizarse nicamente a la hora de dibu-
jar la cota. Despus de que sta haya sido guardada, cambiar el valor de Leader Lengt h no
afectar a cmo se muestra cota, pero el nuevo valor se reflejar en un . DXF y en aplicaciones
AutoLISP y ADS.
DOCE.5.21.4. Cotas por coordenadas
El mtodo de adicin de cotas de coordenadas es AddDi mOr di nat e:
Set ObjCotaCoordenada = ObjColeccin. AddDi mOr di nat e( DblPtoDefinicin, DblPtoFi-
nalDirectriz, BooUsarEjeX)
Propiedades de los objetos de cota de coordenadas:
Appl i cat i on
Col or
Ent i t yName
Ent i t yType
Handl e
Layer
Li neType
Li net ypeScal e
Nor mal
Obj ect I D
Rot at i on
St yl eName
Text Posi t i on
Text Rot at i on
Text St r i ng
Vi si bl e
Mtodos de los objetos de cota de coordenadas:
Ar r ayPol ar
Ar r ayRect angul ar
Copy
Er ase
Get Boundi ngBox
Get XDat a
Hi ghl i ght
I nt er sect Wi t h
Mi r r or
Mi r r or 3D
Move
Rot at e
Rot at e3D
Scal eEnt i t y
Set XDat a
Tr ansf or mBy
Updat e
El mtodo AddDi mOr di nat e crea una cota de coordenadas. Hay que indicar un punto (Doubl e)
de definicin que ser el acotado, del que parte de lnea de cota. Despus se indica otro punto
(Doubl e) final para la lnea de cota. En este segundo punto ser donde se site el texto. Por
ltimo, un valor Bool ean que especifica si el valor del texto ser el del eje X o el del eje Y:
Tr ue crea una cota de coordenadas mostrando el valor del eje X; Fal se mostrando el valor de
Y.
Las propiedades y mtodos expuestos estn ya estudiados.
DOCE.5.21.5. Cotas radiales
El mtodo de adicin de cotas radiales es AddDi mRadi al :
Set ObjCotaRadial = ObjColeccin. AddDi mRadi al ( DblPtoCentro, DblPtoCruce,
DblLongDirectriz)
Propiedades de los objetos de cota radial:
Appl i cat i on
Col or
Ent i t yName
Ent i t yType
Handl e
Layer
Leader Lengt h
Li neType
Li net ypeScal e
Nor mal
Obj ect I D
Rot at i on
St yl eName
Text Posi t i on
Text Rot at i on
Text St r i ng
Vi si bl e
Mtodos de los objetos de cota radial:
Ar r ayPol ar
Ar r ayRect angul ar
Copy
Er ase
Get Boundi ngBox
Get XDat a
Hi ghl i ght
I nt er sect Wi t h
Mi r r or
Mi r r or 3D
Move
Rot at e
Rot at e3D
Scal eEnt i t y
Set XDat a
Tr ansf or mBy
Updat e
Al mtodo AddDi mRadi al hay que proporcionarle como argumentos el punto central (array de
tres elementos Doubl e) del arco o crculo que acotar, un punto (array de tres elementos Dou-
bl e) de dicho arco o crculo por el que pasar la lnea de cota o directriz y una longitud (tipo
de dato Doubl e) para dicha directriz.
Las propiedades y mtodos expuestos estn ya estudiados.
DOCE.5.21.6. Cotas giradas
El mtodo de adicin de cotas giradas es AddDi mRot at ed:
Set ObjCotaGirada = ObjColeccin. AddDi mRot at ed( DblPtoLinExt1, DblPtoLinExt2,
DblPosLneaCota, DblRotacin)
Propiedades de los objetos de cota girada:
Appl i cat i on
Col or
Ent i t yName
Ent i t yType
Handl e
Layer
Li neType
Li net ypeScal e
Nor mal
Obj ect I D
Rot at i on
St yl eName
Text Posi t i on
Text Rot at i on
Text St r i ng
Vi si bl e
Mtodos de los objetos de cota girada:
Ar r ayPol ar
Ar r ayRect angul ar
Copy
Er ase
Get Boundi ngBox
Get XDat a
Hi ghl i ght
I nt er sect Wi t h
Mi r r or
Mi r r or 3D
Move
Rot at e
Rot at e3D
Scal eEnt i t y
Set XDat a
Tr ansf or mBy
Updat e
DblPtoLinExt1 es un valor que indica el punto (matriz de tres elementos Doubl e) de la prime-
ra lnea auxiliar o de extensin, es decir, uno de los extremos de la lnea que ser medida.
DblPtoLinExt2 lo mismo que DblPtoLinExt1 pero para la segunda lnea auxiliar. DblPosL-
neaCota es tambin un punto (matriz de tres valores Doubl e) que especifica la posicin de la
lnea de cota y, por ende, la del texto (segn variables). Y DblRotacin es un valor Doubl e
que indica, en radianes, al ngulo de rotacin de la cota girada.
Las propiedades y mtodos expuestos estn ya estudiados.
DOCE.5.21.7. Directrices
El mtodo AddLeader nos ofrece la posibilidad de agregar directrices de AutoCAD a nuestro
dibujo actual. La sintaxis del mtodo es la que sigue:
Set ObjDirectriz = ObjColeccin. AddLeader ( DblMatrizPtos, ObjAnotacin, IntTipo)
Propiedades de los objetos de directriz:
Appl i cat i on
Col or
Coor di nat es
Ent i t yName
Ent i t yType
Handl e
Layer
Li neType
Li net ypeScal e
Nor mal
Obj ect I D
St yl eName
Type
Vi si bl e
Mtodos de los objetos de directriz:
Ar r ayPol ar
Ar r ayRect angul ar
Copy
Er ase
Evaluate
Get Boundi ngBox
Get XDat a
Hi ghl i ght
I nt er sect Wi t h
Mi r r or
Mi r r or 3D
Move
Rot at e
Rot at e3D
Scal eEnt i t y
Set XDat a
Tr ansf or mBy
Updat e
DblMatrizPtos ha de ser una matriz de elementos de punto (matriz tambin de tres elemen-
tos Doubl e) que contenga los vrtices (cuntos sean) de la directriz. ObjAnotacin es un obje-
to (Obj ect ) que solamente puede ser de tolerancia (que enseguida veremos), de texto mlti-
ple (ya estudiado) o de referencia a bloque.
IntTipo es un valor entero que adems puede contener las constantes siguientes:
AcLi neNoAr r ow
acLi neWi t hAr r ow
acSpl i neNoAr r ow
acSpl i neWi t hAr r ow
El valor que se devuelve (ObjDirectriz) es un objeto de directriz que ha de almacenarse en
una variable declarada evidentemente como Obj ect .
Ahora comentamos el mtodo Eval uat e de los objetos de directriz.
ObjGrfico. Eval uat e
Este mtodo exclusivo de directrices y sombreados evala los objetos y, si fuera necesario, los
actualizara. En el caso de las directrices se comprueba la relacin de la misma con su anota-
cin asociada.
NOTA: Vase la seccin DOCE.5.7.1., donde se comenta la propiedad Type de las polilneas,
para observar los valores de esta propiedad en las directrices.
DOCE.5.21.8. Tolerancias
El mtodo AddTol er ance permite crear objetos de tolerancia. La sintaxis del mtodo es la si-
guiente:
Set ObjTolerancia = ObjColeccin. AddTol er ance( StrTexto, DblPtoIns, DblVectDir)
Propiedades de los objetos de tolerancia:
Appl i cat i on
Col or
Di r ect i onVect or
Ent i t yName
Ent i t yType
Handl e
I nser t i onPoi nt
Layer
Li neType
Li net ypeScal e
Nor mal
Obj ect I D
St yl eName
Text St r i ng
Vi si bl e
Mtodos de los objetos de tolerancia:
Ar r ayPol ar
Ar r ayRect angul ar
Copy
Er ase
Get Boundi ngBox
Get XDat a
Hi ghl i ght
I nt er sect Wi t h
Mi r r or
Mi r r or 3D
Move
Rot at e
Rot at e3D
Scal eEnt i t y
Set XDat a
Tr ansf or mBy
Updat e
A AddTol er ance se le suministra como primer argumento una cadena (St r i ng) de texto que
ser la que se escriba en la tolerancia. Como segundo argumento un valor que es matriz de
tres elementos Doubl e; esto es un punto, que ser el punto de insercin de la tolerancia (del
smbolo). Por ltimo, un vector de direccin (tres elementos Doubl e) que especifican la direc-
cin del smbolo de tolerancia.
Las propiedades y mtodos expuestos estn ya estudiados.
A continuacin veremos una macro de ejemplo la cual, tras dibujar un rectngulo con cuatro
lneas y pasarlas a color azul (para luego distinguir las cotas), agrega tres cotas distintas: una
alineada, otra angular y otra girada. A modo pues de ejemplo:
Opt i on Expl i ci t

Di mAcadDoc As Obj ect
Di mAcadModel As Obj ect
Di mL nea As Obj ect
Di mPt oLi n1( 1 To 3) As Doubl e
Di mPt oLi n2( 1 To 3) As Doubl e
Di mPt oLi n3( 1 To 3) As Doubl e
Di mPt oLi n4( 1 To 3) As Doubl e
Di mCot a As Obj ect
Di mPt oText o( 1 To 3) As Doubl e

Sub Macr o( )
Set AcadDoc = Get Obj ect ( , " Aut oCAD. Appl i cat i on" ) . Act i veDocument
Set AcadModel = AcadDoc. Model Space

Pt oLi n1( 1) = 10: Pt oLi n1( 2) = 10: Pt oLi n1( 3) = 0
Pt oLi n2( 1) = 10: Pt oLi n2( 2) = 20: Pt oLi n2( 3) = 0
Pt oLi n3( 1) = 40: Pt oLi n3( 2) = 20: Pt oLi n3( 3) = 0
Pt oLi n4( 1) = 40: Pt oLi n4( 2) = 10: Pt oLi n4( 3) = 0
Set L nea = AcadModel . AddLi ne( Pt oLi n1, Pt oLi n2)
L nea. Col or = 5
Set L nea = AcadModel . AddLi ne( Pt oLi n2, Pt oLi n3)
L nea. Col or = 5
Set L nea = AcadModel . AddLi ne( Pt oLi n3, Pt oLi n4)
L nea. Col or = 5
Set L nea = AcadModel . AddLi ne( Pt oLi n4, Pt oLi n1)
L nea. Col or = 5

Pt oText o( 1) = 25: Pt oText o( 2) = 27: Pt oText o( 3) = 0
Set Cot a = AcadModel . AddDi mAl i gned( Pt oLi n2, Pt oLi n3, Pt oText o)
Di mPt oPasa1( 1 To 3) As Doubl e
Di mPt oPasa2( 1 To 3) As Doubl e
Pt oPasa1( 1) = 40: Pt oPasa1( 2) = 15: Pt oPasa1( 3) = 0
Pt oPasa2( 1) = 30: Pt oPasa2( 2) = 10: Pt oPasa2( 3) = 0
Pt oText o( 1) = 35: Pt oText o( 2) = 12: Pt oText o( 3) = 0
Set Cot a = AcadModel . AddDi mAngul ar ( Pt oLi n4, Pt oPasa1, Pt oPasa2, Pt oText o)
Pt oText o( 1) = 30: Pt oText o( 2) = 3: Pt oText o( 3) = 0
Set Cot a = AcadModel . AddDi mRot at ed( Pt oLi n1, Pt oLi n4, Pt oText o, 60)
End Sub
DOCE.5.22. Sombreado
Un sombreado es (y siempre ha sido), en realidad, un objeto ms de dibujo de AutoCAD que
se puede aadir sin ningn problema desde VBA. Veremos aqu cmo hacerlo.
El mtodo para dibujar sombreados es AddHat ch. La manera de agregar un sombreado en
cualquiera de las colecciones que admiten este mtodo (Espacio Modelo, Espacio Papel y blo-
ques) es mediante la sintaxis siguiente:
Set ObjSombreado = ObjColeccin. AddHat ch( IntTipoPatrn, StrNombrePatrn, BooAso-
ciatividad)
Propiedades de los objetos de sombreado:
Appl i cat i on
AssociativeHatch
Col or
Elevation
Ent i t yName
Ent i t yType
Handl e
HacthStyle
I nser t i onPoi nt
Layer
Li neType
Li net ypeScal e
Nor mal
NumberOfLoops
Obj ect I D
PatternAngle
PatternDouble
PatternName
PatternScale
PatternSpace
PatternType
Vi si bl e
Mtodos de los objetos de sombreado:
AppendInnerLoop
AppendOuterLoop
Ar r ayPol ar
Ar r ayRect angul ar
Copy
Er ase
Eval uat e
Get Boundi ngBox
GetLoopAt
Get XDat a
Hi ghl i ght
InsertLoopAt
I nt er sect Wi t h
Mi r r or
Mi r r or 3D
Move
Rot at e
Rot at e3D
Scal eEnt i t y
SetPattern
Set XDat a
Tr ansf or mBy
Updat e
IntTipoPatrn es un valor I nt eger que se refiere al tipo de patrn de sombreado que se utili-
zar. Adems acepta las siguientes constantes:
acHat chPat t er nTypePr eDef i ned
acHat chPat t er nTypeUser Def i ned
acHat chPat t er nTypeCust omDef i ned
Cada una de ellas dice referencia a los distintos tipos de patrn que tambin podemos utilizar
desde la interfaz grfica de AutoCAD 14.
StrNombrePatrn es un valor de cadena alfanumrica (St r i ng) que representa el nombre del
patrn que se usar. Y BooAsociatividad es un valor Bool ean que determina la condicin de
asociatividad del patrn de sombreado: Tr ue significa que el patrn es asociativo y Fal se que
no es asociativo.
Pasemos ahora a comentar las propiedades nuevas no estudiadas.
Asoci at i veHat ch. Esta propiedad obtiene exclusivamente el carcter de asociatividad de un
patrn de sombreado ya dibujado. El valor de retorno habr de ser recogido en una variable
declarada como Bool ean. Si esta variable guarda un valor Tr ue significar que el patrn es
asociativo; si guarda, por el contrario, un valor Fal se, significar que el patrn no es asociati-
vo. Veamos su sintaxis:
BooAsociatividad = ObjetoSombreado. Asoci at i veHact h
El evat i on. Obtiene y tambin asigna la elevacin (valor de la coordenada Z) de un som-
breado.
La sintaxis para asignar es:
ObjetoSombreado. El evat i on = DblElevacin
La sintaxis para obtener es:
DblElevacin = ObjetoSombreado. El evat i on
La elevacin es un valor Doubl e (doble precisin).
Hat chSt yl e. Dice relacin al estilo del patrn de sombreado. Esta propiedad se puede extra-
er de un sombreado y tambin se puede asignar. La sintaxis que utilizaremos para asignar un
estilo a un sombreado es:
ObjetoSombreado. Hat chSt yl e = IntEstilo
La sintaxis para obtener un estilo de un sombreado es:
IntEstilo = ObjetoSombreado. Hat chSt yl e
Donde IntEstilo es un valor I nt eger que adems admite las siguientes constantes:
acHat chSt yl eNor mal
acHat chSt yl eOut er
acHat chSt yl eI gnor e
Todas ellas se corresponden con las opciones de Estilo de contorno de las Opciones avanzadas
del sombreado en AutoCAD 14: Normal, Exterior e Ignorar.
Number Of Loops. Devuelve el nmero de contornos de un sombreado:
IntNmContornos = ObjetoSombreado. Number Of Loops
IntNmContornos habr sido declarada como I nt eger , evidentemente.
Pat t er nAngl e. Especifica el ngulo en radianes del patrn de sombreado.
La sintaxis para asignar es:
ObjetoSombreado. Pat t er nAngl e = Dblngulo
La sintaxis para obtener es:
Dblngulo = ObjetoSombreado. Pat t er nAngl e
Dblngulo es el valor del ngulo en radianes (Doubl e), por lo tanto estar entre 0 y 6. 28.
Este valor es tambin controlado por la variable de sistema HPANG.
Pat t er nDoubl e. Especifica si el sombreado es doble o no. El valor asignado u obtenido ser
del tipo Bool ean: Tr ue es doble, Fal se no es doble.
La sintaxis para asignar es:
ObjetoSombreado. Pat t er nDoubl e = BooDoble
La sintaxis para obtener es:
BooDoble = ObjetoSombreado. Pat t er nDoubl e
Este valor es tambin controlado por la variable de sistema HPDOUBLE.
Pat t er nName. Especifica el nombre del patrn de sombreado. El valor asignado u obtenido
ser del tipo St r i ng.
La sintaxis para asignar es:
ObjetoSombreado. Pat t er nName = StrNombre
La sintaxis para obtener es:
StrNombre = ObjetoSombreado. Pat t er nName
Este valor es tambin controlado por la variable de sistema HPNAME.
Pat t er nScal e. Especifica la escala del patrn de sombreado. El valor asignado u obtenido
ser del tipo Doubl e.
La sintaxis para asignar es:
ObjetoSombreado. Pat t er nScal e = DblEscala
La sintaxis para obtener es:
DblEscala = ObjetoSombreado. Pat t er nScal e
Este valor es tambin controlado por la variable de sistema HPSCALE.
Pat t er nSpace. Especifica el espaciado entre lneas en los sombreados definidos por el usua-
rio. El tipo de dato de este valor es Doubl e.
La sintaxis para asignar es:
ObjetoSombreado. Pat t er nSpace = DblEspaciado
La sintaxis para obtener es:
DblEspaciado = ObjetoSombreado. Pat t er nSpace
Este valor es tambin controlado por la variable de sistema HPSPACE.
Pat t er nType. Obtiene el tipo de patrn utilizado en un sombreado. Es una propiedad de slo
lectura. El tipo de dato para este valor es I nt eger , aunque tambin admite las constantes ex-
plicadas para el argumento IntTipoPatrn del mtodo AddHat ch.
La sintaxis es:
IntTipoPatrn = ObjetoSombreado. Pat t er nType
Vamos a repasar ahora los nuevos mtodos propuestos.
AppendI nner Loop. Este mtodo aade contornos interiores al sombreado. Su sintaxis es la
que sigue:
Cal l ObjSombreado. AppendI nner Loop( ObjContornoInterior)
ObjContornoInterior ser una matriz de objetos que formen un contorno cerrado. Estos ob-
jetos podrn ser slo lneas, polilneas, crculos, elipses, splines y/o regiones.
Antes de aadir objetos interiores de contorno, habremos de aadir los objetos exteriores evi-
dentemente. Para ello utilizaremos el siguiente mtodo.
AppendOut er Loop. Este mtodo aade contornos exteriores al sombreado. Su sintaxis es la
que sigue:
Cal l ObjSombreado. AppendOut er Loop( ObjContornoExterior)
ObjContornoExterior igual que para el mtodo anterior ObjetoContornoInterior.
La forma correcta de crear un sombreado desde VBA consiste en definir primero el patrn y
despus encerrarlo en un contorno. Veamos la siguiente macro como ejemplo:
Opt i on Expl i ci t

Di mAcadDoc As Obj ect
Di mAcadModel As Obj ect
Di mSombr eado As Obj ect
Di mC r cul o1 As Obj ect
Di mMat r i zObj et o( 0) As Obj ect

Sub Macr o( )
Set AcadDoc = Get Obj ect ( , " Aut oCAD. Appl i cat i on" ) . Act i veDocument
Set AcadModel = AcadDoc. Model Space

Di mPt oCent r o1( 1 To 3) As Doubl e
Pt oCent r o1( 1) = 10: Pt oCent r o1( 2) = 10: Pt oCent r o1( 3) = 0
Set C r cul o1 = AcadModel . AddCi r cl e( Pt oCent r o1, 10)
Set Mat r i zObj et o( 0) = C r cul o1
Set Sombr eado = AcadModel . AddHat ch( 1, " angl e" , Tr ue)
Cal l Sombr eado. AppendOut er Loop( Mat r i zObj et o)
End Sub
Como podemos observar, lo primero que se hace es crear un crculo que ser el objeto que se
va a sombrear. Seguidamente creamos el sombreado o patrn con las caractersticas que nos
interesen. Por ltimo, encerramos el sombreado dentro del crculo, aadiendo ste como con-
torno exterior con AppendOuterLoop.
NOTA: Ntese que el argumento que requiere AppendOut er Loop (y tambin AppendI nner Loop)
ha de ser una matriz de objetos. En este caso en el que slo deseamos sombrear un crculo,
creamos un matriz de un nico elemento con dicho crculo. Si no lo hiciramos as, este mto-
do no funcionara.
Get LoopAt . Obtiene el contorno de sombreado en el ndice dado:
Cal l ObjSombreado. Get LoopAt ( Intndice, VarContorno)
Intndice es una variable I nt eger que guardar el ndice. El primer ndice es el 0. VarCon-
torno es una variable Var i ant que guardar una matriz de los diversos objetos obtenidos.
I nser t LoopAt . Este mtodo inserta un contorno en la localizacin indicada por un ndice:
Cal l ObjSombreado. I nser t LoopAt ( Intndice, IntTipoContorno, ObjContorno)
Intndice es un valor I nt eger que representa un ndice de localizacin en la matriz de vrti-
ces que forman el contorno del sombreado. El primer ndice de la matriz es el 0.
IntTipoContorno es un valor I nt eger , tambin, que representa el tipo de contorno. Este ar-
gumento adems admite las siguientes constantes, que no son sino los tipos de contornos
aceptados:
acHat chLoopTypeDef aul t
acHat chLoopTypeExt er nal
acHat chLoopTypePol yl i ne
acHat chLoopTypeDer i ved
acHat chLoopTypeText box
ObjContorno igual que para mtodos anteriores en ObjContornoExterior y ObjetoContor-
noInterior.
Set Pat t er n. Asigna un nombre y un tipo de patrn a un sombreado. Su sintaxis es:
Cal l ObjSombreado. Set Pat t er n( IntTipoPatrn, StrNombrePatrn)
Ambos argumentos de Set Pat t er n tienen el mismo significado y los mismos valores que los
argumentos del mismo nombre en la sintaxis del mtodo AddHat ch.
DOCE.5.23. Referencias a bloques
La manera de crear bloques la veremos posteriormente al hablar de la coleccin de bloques y
del objeto de bloque (seccin DOCE.8.3.), as como el mtodo para insertar bloques ya crea-
dos que se explica en la coleccin de objetos de Espacio Modelo (seccin DOCE.8.1.). Aqu se
trata nicamente de las referencias o inserciones de bloques.
Es decir, los bloques primero hay que crearlos (crear sus objetos componentes y despus el
propio bloque). Esto se tratar, como ya se ha dicho, ms adelante. La manera de tratar esos
objetos unitarios de bloque tambin se ver despus. Posteriormente los bloques se insertan,
dando lugar a una insercin de bloque o referencia a bloque. De esto es de lo que se habla en
esta seccin.
A continuacin veremos las propiedades y mtodos de las inserciones de bloque.
Propiedades de los objetos de referencia a bloque:
Appl i cat i on
Col or
Ent i t yName
Ent i t yType
Handl e
I nser t i onPoi nt
Layer
Li neType
Li net ypeScal e
Name
Nor mal
Obj ect I D
Rot at i on
Vi si bl e
XScaleFactor
YScaleFactor
Mtodos de los objetos de referencia a bloque:
Ar r ayPol ar
Ar r ayRect angul ar
Copy
Er ase
Expl ode
GetAttributes
Get Boundi ngBox
Get XDat a
HasAttributes
Hi ghl i ght
I nt er sect Wi t h
Mi r r or
Mi r r or 3D
Move
Rot at e
Rot at e3D
Scal eEnt i t y
Set XDat a
Tr ansf or mBy
Updat e
Veamos pues las nuevas propiedades inherentes a estos objetos de referencia a bloque.
XScal eFact or . Asigna u obtiene el factor de escala en el eje X de la insercin de un bloque.
La sintaxis para asignar es:
ObjetoRefBloque. XScal eFact or = DblFactorEscalaX
La sintaxis para obtener es:
DblFactorEscalaX = ObjetoRefBloque. XScal eFact or
El valor es un valor Doubl e que es 1. 0 por defecto.
YScal eFact or . Asigna u obtiene el factor escala en el eje Y de la insercin de un bloque.
La sintaxis para asignar es:
ObjetoRefBloque. YScal eFact or = DblFactorEscalaY
La sintaxis para obtener es:
DblFactorEscalaY = ObjetoRefBloque. YScal eFact or
El valor es un valor Doubl e que es 1. 0 por defecto.
Y veamos ahora los dos nuevos mtodos.
Get At t r i but es. Este mtodo obtiene los atributos de una insercin de bloque. Para recoger-
los habremos de declarar una variable como Var i ant . La sintaxis de uso es:
VarAtributos = ObjRefBloque. Get At t r i but es
El retorno de este mtodo (como ya hemos dicho en una variable tipo Var i ant ) ser una ma-
triz de objetos de atributo que veremos enseguida. Como ya sabemos podemos hacer uso
de ndices para extraer cada uno de ellos de la matriz.
HasAt t r i but es. Este mtodo especifica si el bloque (por medio de su insercin) contiene
atributos o no. El valor de retorno ha de recogerlo una variable declarada como Bool ean que,
si recoge Tr ue significar que el bloque tiene atributos y, si recoge Fal se, que no tiene. La
sintaxis de utilizacin es la siguiente:
BooTieneAtributos = ObjRefBloque. HasAt t r i but es
DOCE.5.24. Atributos de bloques
Para poder introducir un atributo en un bloque evidentemente hemos primero de crear el blo-
que (cosa que ya estudiaremos como se ha comentado anteriormente). El entorno VBA para
AutoCAD 14 dispone de dos objetos relacionados con los atributos: el objeto de atributo y el
objeto de referencia de atributo.
Aunque pudiera parecer lo contrario, el atributo en s lo representa el objeto denominado refe-
rencia de atributo. ste es el atributo propiamente dicho, o sea, un objeto que contiene texto
enlazado con un bloque. El objeto de atributo, por su lado, es el llamado en AutoCAD defini-
cin de atributo, y es un objeto que aparece como una cadena de texto y describe las caracte-
rsticas de un objeto de referencia de atributo. No nos equivoquemos.
DOCE.5.24.1. Referencias de atributos
Como hemos explicado ya, el objeto de referencia de atributo en s el propio atributo. El mto-
do que utilizamos para aadir atributos a bloques ya creados es AddAt t r i but e, y tiene la si-
guiente sintaxis de uso:
Set ObjRefAtributo = ObjColeccin. AddAt r i but e( DblAltura, IntModo, StrMensaje,
DblPtoIns, StrIdentificador, StrValorDefecto)
Propiedades de los objetos de referencia de atributo:
Appl i cat i on
Col or
Ent i t yName
Ent i t yType
FieldLength
Handl e
Hei ght
Hor i zont al Al i gnment
I nser t i onPoi nt
Layer
Li neType
Li net ypeScal e
Nor mal
Obj ect I D
Obl i queAngl e
Rot at i on
Scal eFact or
St yl eName
TagString
Text Al i gnment Poi nt
Text Gener at i onFl ag
Text St r i ng
Thi ckness
Ver t i cal Al i gnment
Vi si bl e
Mtodos de los objetos de referencia de atributo:
Er ase
Get Boundi ngBox
Get XDat a
Hi ghl i ght
I nt er sect Wi t h
Move
Rot at e
Rot at e3D
Scal eEnt i t y
Set XDat a
Tr ansf or mBy
Updat e
DblAltura es el primer argumento que hemos de suministrar al mtodo AddAt r i but e. Dice
relacin a la altura del texto del atributo en las unidades del documento activo actual, esto es
del dibujo actual.
IntModo es un argumento opcional que indica el modo del atributo (invisible, constante, verifi-
cable y/o predefinido). Ha de ser un valor entero (I nt eger ), pero tambin admite las siguien-
tes constantes:
acAt t r i but eModeI nvi si bl e
acAt t r i but eModeConst ant
acAt t r i but eModeVer i f y
acAt t r i but eModePr eset
Puede ser combinada ms una constante utilizando el operador booleano OR. Hemos de prestar
especial atencin a no combinar modos incompatibles.
StrMensaje es una cadena (St r i ng) que representa el mensaje que aparece en lnea de co-
mandos o en el cuadro de peticin de atributos (dependiendo del valor de la variable de siste-
ma de AutoCAD 14 ATTDI A) al insertar el bloque que contiene el atributo. El valor por defecto
para este argumento es la cadena indicada en el argumento StrIdentificador. Si el modo del
atributo es acAt t r i but eModeConst ant , este argumento se inhabilita.
DblPtoIns es una matriz de tres valores Doubl e (X, Y y Z) que representa las coordenadas del
punto de insercin para el atributo el SCU.
StrIdentificador es una cadena (St r i ng) que representa al identificador del atributo. Como
ya debemos saber en esta cadena deberemos obviar los espacios y los signos de exclamacin.
Adems, decir que AutoCAD cambia automticamente las minsculas a maysculas.
StrValorDefecto es una cadena (St r i ng) que representa el valor por defecto del atributo al
ser insertado.
Expliquemos ahora las dos propiedades no estudiadas.
Fi el Lengt h. Asigna u obtiene la longitud de campo (I nt eger ) en nmero de caracteres para
el atributo.
La sintaxis para asignar es:
ObjetoAtributo. Fi el dLengt h = IntLongitudCampo
La sintaxis para obtener es:
IntLongitudCampo = ObjetoAtributo. Fi el dLengt h
TagSt r i ng. Asigna u obtiene el identificador (St r i ng) de un atributo.
La sintaxis para asignar es:
ObjetoAtributo. TagSt r i ng = StrIdentificador
La sintaxis para obtener es:
StrIdentificador = ObjetoAtributo. TagSt r i ng
DOCE.5.24.2. Objeto de atributo
Como ya hemos dicho este objeto aparece como una cadena de texto que describe las caracte-
rsticas de los objetos de referencia de atributo (definicin de atributo en AutoCAD).
Propiedades de los objetos de atributo:
Appl i cat i on
Col or
Ent i t yName
Ent i t yType
Fi el dLengt h
Handl e
Hei ght
Hor i zont al Al i gnment
I nser t i onPoi nt
Layer
Li neType
Li net ypeScal e
Mode
Nor mal
Obj ect I D
Obl i queAngl e
PromptString
Rot at i on
Scal eFact or
St yl eName
TagSt r i ng
Text Al i gnment Poi nt
Text Gener at i onFl ag
Text St r i ng
Thi ckness
Ver t i cal Al i gnment
Vi si bl e
Mtodos de los objetos de atributo:
Ar r ayPol ar
Ar r ayRect angul ar
Copy
Er ase
Get Boundi ngBox
Get XDat a
Hi ghl i ght
I nt er sect Wi t h
Mi r r or
Mi r r or 3D
Move
Rot at e
Rot at e3D
Scal eEnt i t y
Set XDat a
Tr ansf or mBy
Updat e
Veamos las dos nuevas propiedades.
Mode. Obtiene y/o asigna el modo de un atributo. Es un valor I nt eger que admite adems
las constantes especificadas en la seccin anterior para el argumento IntModo del mtodo Ad-
dAt t r i but e.
La sintaxis para asignar un modo es:
ObjetoAtributo. Mode = IntModo
La sintaxis para obtener un modo es:
IntModo = ObjetoAtributo. Mode
Pr ompt St r i ng. Obtiene y/o asigna la cadena (St r i ng) de mensaje de peticin de un atributo
(vase la explicacin del argumento StrMensaje del mtodo AddAt r i but e en la seccin ante-
rior).
La sintaxis para asignar una cadena es:
ObjetoAtributo. Pr ompt St r i ng = StrMensaje
La sintaxis para obtener una cadena es:
StrMensaje = ObjetoAtributo. Pr ompt St r i ng
1 fase intermedia de ejercicios
Realizar una macro VBA que dibuje una lnea, un crculo y una elipse en Espacio Papel (el
objeto de la elipse sombreado con un patrn cualquiera).
Crear un programa VBA, con formulario, que sea capaz de cambiar el espesor de todas las
polilneas dibujadas en el Espacio Modelo de la sesin actual de dibujo. El nuevo espesor de
polilnea se introducir en el cuadro de dilogo. Este cuadro puede ser el siguiente:

DOCE.6. LA APLICACIN AutoCAD
La aplicacin AutoCAD 14 como tal es uno de los objetos definidos en VBA. Si nos fijamos en
la plantilla de objetos proporcionada al principio de este MDULO, nos daremos cuenta de que
se encuentra en el ms alto escalafn de la jerarqua y por l vamos a comenzar.
Este objeto recibe el nombre de Appl i cat i on y dice relacin a la ventana de la aplicacin prin-
cipal, es decir, el propio programa AutoCAD 14 en s. Si recordamos, a este objeto hemos
hecho referencia en multitud de ocasiones cuando escribimos, por ejemplo:
Set AcadDoc = Get Obj ect ( , " Aut oCAD. Appl i cat i on" )
Como objeto que es, posee propiedades y mtodos. A continuacin veremos como siempre la
relacin completa de ambos y pasaremos seguidamente a estudiarlos.
Propiedades del objeto de aplicacin:
ActiveDocument
Appl i cat i on
Caption
FullName
Hei ght
Left
LocaleID
Name
Path
Preferences
Top
Version
Vi si bl e
Wi dt h
Mtodos del objeto de aplicacin:
GetInterfaceObject
ListADS
ListARX
LoadADS
LoadARX
Quit
UnloadADS
UnloadARX
Updat e
Pasemos pues a comentar las propiedades primero.
Act i veDocument . Obtiene el objeto de documento activo. La sintaxis es:
Set ObjDocumento = ObjAplicacin. Act i veDocument
La sintaxis la conocemos de sobra, ya que la utilizamos en todos los programas al hacer:
Set AcadDoc = Get Obj ect ( , " Aut oCAD. Appl i cat i on" ) . Act i veDocument
Nos preguntaremos la necesidad de esta propiedad cuando en AutoCAD 14 nicamente se
puede tener un documento abierto cada vez (es una aplicacin SDI). Y es que Act i veDocument
est preparada para futuras versiones de AutoCAD, en el que el entorno sea MDI (mltiples
documentos abiertos) y el programa afecte nicamente al activo actualmente (uno cada vez
evidentemente).
El retorno de esta propiedad aplicada a la aplicacin es un objeto de documento, del que se
hablar en la siguiente seccin.
Capt i on. Obtiene el texto de la barra de ttulo (generalmente azul) de la aplicacin. La sin-
taxis es:
StrTtulo = ObjAplicacin. Capt i on
Siendo StrTtulo declarado como St r i ng.
Veamos el siguiente ejemplo de una macro VBA:
Opt i on Expl i ci t

Di mAcad As Obj ect
Di mAcadDoc As Obj ect
Di mAcadModel As Obj ect

Sub Macr o( )
Set Acad = Get Obj ect ( , " Aut oCAD. Appl i cat i on" )
Set AcadDoc = Acad. Act i veDocument
Set AcadModel = AcadDoc. Model Space
Di mTi t Apl i As St r i ng
Ti t Apl i = Acad. Capt i on
MsgBox Ti t Apl i
End Sub
Como vemos hemos introducido un objeto nuevo, hemos desglosado la llamada a los objetos
principales de AutoCAD en una rama ms: la aplicacin en s. De esta manera, podemos utili-
zar este nuevo objeto (Acad) para extraer el texto de la ventana de ttulo de AutoCAD en un
momento concreto, para despus mostrarlo con un MsgBox.
Un resultado posible de esta macro podra ser:

Ful l Name. Obtiene el nombre de la aplicacin y su camino o ruta de acceso completo. La
sintaxis es:
StrNombre = ObjAplicacin. Ful l name
Siendo StrTtulo declarado como St r i ng.
Si las tres ltimas lneas de la macro de ejemplo anterior se cambiaran por las siguientes:
Di mNomApl i As St r i ng
NomApl i = Acad. Ful l Name
MsgBox NomApl i
un resultado posible sera:

Lef t . Esta propiedad permite obtener y/o asignar la distancia desde el lado izquierdo de la
ventana principal de la aplicacin hasta el lado izquierdo de la pantalla; se refiere pues a la
coordenada X de la esquina superior izquierda de la ventana de la aplicacin.
NOTA: El origen de coordenadas en los monitores comienza en la esquina superior izquierda de
la pantalla (coordenada 0,0).
La sintaxis para asignar una distancia con Lef t es:
ObjAplicacin. Lef t = IntDistanciaL
y para obtener la actual:
IntDistanciaL = ObjAplicacin. Lef t
Local eI D. Obtiene el ID (identificador) local para la sesin actual de AutoCAD. El ID local es
definido por Miscrosoft para los entornos Windows 95/98 y Windows NT.
La sintaxis es:
LngID = ObjAplicacin. Local eI D
Una respuesta coherente puede ser, por ejemplo: 1033.
Pat h. Obtiene el camino o ruta de acceso a la aplicacin (o documento), sin el nombre de
archivo incluido. La sintaxis es:
StrCamino = ObjNoGrfico. Pat h
StrCamino se declarar como St r i ng evidentemente.
Pr ef er ences. Obtiene el objeto de preferencias de aplicacin (del que ya hablaremos). La
sintaxis es:
ObjPreferencias = ObjAplicacin. Pr ef er ences
Top. Esta propiedad permite obtener y/o asignar la distancia desde el lado superior de la
ventana principal de la aplicacin hasta el lado superior de la pantalla; se refiere pues a la co-
ordenada Y de la esquina superior izquierda de la ventana de la aplicacin.
NOTA: El origen de coordenadas en los monitores comienza en la esquina superior izquierda de
la pantalla (coordenada 0,0).
La sintaxis para asignar una distancia con Top es:
ObjAplicacin. Top = IntDistanciaT
y para obtener la actual:
IntDistanciaT = ObjAplicacin. Top
Ver si on. Devuelve la versin de AutoCAD que se est utilizando. Es igual a la variable de
sistema ACADVER del programa. Su sintaxis:
StrVersin = ObjAplicacin. Ver si on
Veremos ahora los mtodos de este objeto Appl i cat i on.
Get I nt er f aceObj ect . Acepta el ID de un programa e intenta cargarlo en AutoCAD como un
InProcServer.
Esta propiedad permite conectar un servidor ActiveX Automation. Su sintaxis:
Set ObjInterfaz = ObjAplicacin. Get I nt er f aceObj ect ( IDPrograma)
ObjInterfaz es un objeto declarado como Obj ect .
Di mPol y as Obj ect
Set Pol y = Acad. Get I nt er f aceObj ect ( " Pol ycad. Appl i cat i on" )
Li st ADS. Devuelve una lista de las aplicaciones ADS cargadas. Su sintaxis es:
VarListaADS = ObjAplicacin. Li st ADS
VarListaADS estar declarada como Var i ant . Guardar una matriz de elementos con cada
uno de los valores de la lista. Para acceder a ellos recordemos que podemos utilizar ndices.
Li st ARX. Devuelve una lista de las aplicaciones ARX cargadas. Su sintaxis es:
VarListaARX = ObjAplicacin. Li st ARX
Las mismas consideraciones que para el mtodo anterior.
LoadADS. Carga una aplicacin ADS. Deberemos proporcionarle el nombre y ruta (si fuera
necesaria) de la aplicacin en cuestin. Veamos la sintaxis.
Cal l ObjAplicacin. LoadADS( StrNombreAplicADS)
Nombre y ruta habrn de ser una cadena.
LoadARX. Carga una aplicacin ARX. Deberemos proporcionarle el nombre y ruta (si fuera
necesaria) de la aplicacin en cuestin. Veamos la sintaxis.
Cal l ObjAplicacin. LoadARX( StrNombreAplicARX)
Nombre y ruta habrn de ser una cadena.
Qui t . Cierra la aplicacin AutoCAD. Sintaxis:
ObjAplicacin. Qui t
Unl oadADS. Las mismas consideraciones que para LoadADS pero para descargar la aplicacin
ADS.
Unl oadARX. Las mismas consideraciones que para LoadARX pero para descargar la aplicacin
ARX.
DOCE.7. EL DOCUMENTO ACTUAL ACTIVO
Tras acceder al ms alto escalafn que es la aplicacin (as como a sus propiedades y mto-
dos) descenderemos un escaln para adentrarnos en el documento actual activo: Act i veDocu-
ment . Segn la sintaxis de declaraciones y asignaciones que veminos manejando desde el prin-
cipio del MDULO:
Di mAcadDoc As Obj ect
Di mAcadModel As Obj ect
y
Set AcadDoc = Get Obj ect ( , " Aut oCAD. Appl i cat i on" ) . Act i veDocument
Set AcadModel = AcadDoc. Model Space

y dejando aparte la utilizada anteriormente para acceder a la propia aplicacin, AcadDoc es
como vemos nuestra variable para acceder al documento actual activo.
Al documento actual como tal tambin pueden aplicrsele una serie de propiedades y mtodos
que operarn con l; son los puntos que estudiaremos bajo este epgrafe. Vamos pues.
Propiedades del objeto de documento actual:
ActiveDimStyle
ActiveLayer
ActiveLinetype
ActivePViewport
ActiveSelectionSet
ActiveSpace
ActiveTextStyle
ActiveUCS
ActiveViewport
Appl i cat i on
Blocks
Dictionaries
DimStyles
ElevationModelSpace
ElevationPapersSpace
Ful l Name
Groups
Layers
Limits
Linetypes
ModelSpace
Pat h
Plot
ReadOnly
RegisteredApplications
Saved
SelectionSets
TextStyles
UserCoordinateSystems
Utility
ViewPorts
Views
Mtodos del objeto de documento actual:
AuditInfo
Export
GetVariable
HandleToObject
Import
LoadShapeFile
New
ObjectIDToObject
Open
PurgeAll
Regen
Save
SaveAs
Setvariable
WBlock
Veamos primero, como siempre, las propiedades.
Act i veDi mSt yl e. Asigna u obtiene el estilo de acotacin actual. Se estudiarn ms detalles
sobre los estilos de acotacin en su seccin correspondiente.
La sintaxis para asignar:
ObjDocumento. Act i veDi mSt yl e = ObjEstiloAcotacin
La sintaxis para obtener:
Set ObjEstiloAcotacin = ObjDocumento. Act i veDi mSt yl e
ObjEstiloAcotacin es un objeto de estilo de acotacin del que ya se hablar.
Act i veLayer . Asigna u obtiene la capa actual. Se estudiarn ms detalles sobre las capas en
su seccin correspondiente.
La sintaxis para asignar:
ObjDocumento. Act i veLayer = ObjCapa
La sintaxis para obtener:
Set ObjCapa = ObjDocumento. Act i veLayer
ObjCapa es un objeto de capa del que ya se hablar.
Act i veLi net ype. Asigna u obtiene el tipo de lnea actual. Se estudiarn ms detalles sobre
los tipos de lnea en su seccin correspondiente.
La sintaxis para asignar:
ObjDocumento. Act i veLi net ype = ObjTipoLnea
La sintaxis para obtener:
Set ObjTipoLnea = ObjDocumento. Act i veLi net ype
ObjTipoLnea es un objeto de tipo de lnea del que ya se hablar.
Act i vePVi ewpor t . Asigna u obtiene la ventana de Espacio Papel actual. Se estudiarn ms
detalles sobre las ventanas de Espacio Papel en su seccin correspondiente.
La sintaxis para asignar:
ObjDocumento. Act i vePVi ewpor t = ObjVentanaPapel
La sintaxis para obtener:
Set ObjVentanaPapel = ObjDocumento. Act i vePVi ewpor t
ObjVentanaPapel es un objeto de ventana de Espacio Papel del que ya se hablar.
Act i veSel ect i onSet . Obtiene exclusivamente el conjunto de seleccin actual. Se estudiarn
ms detalles sobre los conjuntos de seleccin en su seccin correspondiente.
La sintaxis para asignar:
ObjDocumento. Act i veSel ect i onSet = ObjConjuntoSel
La sintaxis para obtener:
Set ObjConjuntoSel = ObjDocumento. Act i veSel ect i onSet
ObjConjuntoSel es un objeto de conjunto de seleccin del que ya se hablar.
Act i veSpace. Conmuta el espacio actual entre Espacio Modelo Mosaico y Espacio Pa-
pel/Modelo Flotante.
La sintaxis para realizar la conmutacin:
ObjDocumento. Act i veSpace = IntEspacio
Si el actual es Espacio Modelo Mosaico se cambia a Espacio Papel/Modelo Flotante, y viceversa.
La sintaxis para obtener el valor del espacio actual:
IntEspacio = ObjDocumento. Act i veSpace
IntEspacio es un valor I nt eger que puede almacenar las siguientes constantes:
acModel Space
acPaper Space
Act i veText St yl e. Asigna u obtiene el estilo de texto actual. Se estudiarn ms detalles so-
bre los estilos de texto en su seccin correspondiente.
La sintaxis para asignar:
ObjDocumento. Act i veText st yl e = ObjEstiloText
La sintaxis para obtener:
Set ObjEstiloTexto = ObjDocumento. Act i veText St yl e
ObjEstiloTexto es un objeto de estilo de texto del que ya se hablar.
Act i veUCS. Asigna u obtiene el SCP actual. Se estudiarn ms detalles sobre los SCP en su
seccin correspondiente.
La sintaxis para asignar:
ObjDocumento. Act i veUCS = ObjSCP
La sintaxis para obtener:
Set ObjSCP = ObjDocumento. Act i veUCS
ObjSCU es un objeto de SCP (Sistema de Coordenadas Personal) del que ya se hablar.
Act i veVi ewpor t . Asigna u obtiene la ventana mosaico actual. Se estudiarn ms detalles
sobre las ventanas de Espacio Modelo Mosaico en su seccin correspondiente.
La sintaxis para asignar:
ObjDocumento. Act i veVi ewpor t = ObjVentanaModelo
La sintaxis para obtener:
Set ObjVentanaModelo = ObjDocumento. Act i veVi ewpor t
ObjVentanaModelo es un objeto de ventana de Espacio Modelo Mosaico del que ya se hablar.
Bl ocks. Obtiene exclusivamente el objeto de coleccin de bloques del dibujo. Acerca de los
bloques hablaremos largo y tendido en su momento.
La sintaxis para utilizar esta propiedad es:
Set ObjColBloques = ObjDocumento. Bl ock
ObjColBloques es un objeto de coleccin de bloques del que ya se hablar.
Di ct i onar i es. Obtiene exclusivamente el objeto de coleccin de diccionarios del documento
activo. Acerca de los diccionarios hablaremos en su momento.
La sintaxis para utilizar esta propiedad es:
Set ObjColDiccionarios = ObjDocumento. Di ct i onar i es
ObjColDiccionarios es un objeto de coleccin de diccionario del que ya se hablar.
Di mSt yl es. Obtiene exclusivamente el objeto de coleccin de estilos de acotacin del dibujo.
Acerca de los estilos de acotacin hablaremos en su momento.
La sintaxis para utilizar esta propiedad es:
Set ObjColEstilosAcotacin = ObjDocumento. Di mSt yl es
ObjColEstilosAcotacin es un objeto de coleccin de estilos de acotacin del que ya se ha-
blar.
El evat i onModel Space. Obtiene y/o asigna la elevacin en el Espacio Modelo.
La sintaxis para asignar:
ObjDocumento. El evat i onModel Space = DblElevacinM

La sintaxis para obtener:
DblElevacinM = ObjDocumento. El evat i onModel Space
DblElevacinM ser declarada como Doubl e (doble precisin).
El evat i onPaper Space. Obtiene y/o asigna la elevacin en el Espacio Papel.
La sintaxis para asignar:
ObjDocumento. El evat i onPaper Space = DblElevacinP
La sintaxis para obtener:
DblElevacinP = ObjDocumento. El evat i onPaper Space
DblElevacinP ser declarada como Doubl e.
Gr oups. Obtiene el objeto de coleccin de grupos. Sobre los grupos se hablar ms adelante.
La sintaxis para utilizar esta propiedad es:
Set ObjColGrupos = ObjDocumento. Gr oups
ObjColGrupos es un objeto de coleccin de estilos de acotacin del que ya se hablar.
Layer s. Obtiene el objeto de coleccin de capas. Sobre las capas se hablar ms adelante.
La sintaxis para utilizar esta propiedad es:
Set ObjColCapas = ObjDocumento. Layer s
ObjColCapas es un objeto de coleccin de capas del que ya se hablar.
Li mi t s. Permite asignar y obtener los lmites del dibujo actual.
La sintaxis para asignar unos lmites es:
ObjDocumento. Li mi t s = DblLmites
La sintaxis para obtener unos lmites es:
VarLmites = ObjDocumento. Li mi t s
Para asignar lmites al dibujo deberemos crear una matriz de cuatro valores tipo Doubl e. Para
recoger unos lmites habilitaremos una variable definida como Var i ant . Sabemos que despus
mediante ndices podemos acceder a cada valor. El primer par de valores define las coordena-
das X e Y del lmite inferior izquierdo y, el segundo par de valores, las coordenadas X e Y del
lmite superior derecho.
Li net ypes. Devuelve el objeto de coleccin de tipos de lnea. De los tipos de lnea hablare-
mos ms adelante.
La sintaxis para utilizar esta propiedad es:
Set ObjColTiposLnea = ObjDocumento. Li net ypes
ObjColTiposLnea es un objeto de coleccin de tipos de lnea del que ya se hablar.
Model Space. Devuelve el objeto de coleccin de Espacio Modelo. De esta coleccin ya habla-
remos ms adelante, sin embargo es una sintaxis que nos sonar de utilizarla al principio de
los programas:
Set ObjColEspacioM = ObjDocumento. Model Space
Pl ot . Obtiene el objeto de trazado del documento actual. Este objeto ser estudiado ms
adelante. Su sintaxis de uso es:
Set ObjTrazado = ObjDocumento. Pl ot
ObjTrazado es un objeto de trazado del que ya se hablar.
ReadOnl y. Obtiene la condicin que tiene un documento de ser de slo lectura o de lectura y
escritura. La sintaxis para usar esta propiedad, por cierto de slo lectura, es:
BooCondicin = ObjDocumento. ReadOnl y
BooCondicin habr sido declarada como Bool ean. Si almacena Tr ue el documento es de slo
lectura; si almacena Fal se el documento es de lectura y escritura.
Regi st er edAppl i cat i ons. Obtiene la coleccin de aplicaciones registradas. Esta coleccin
ser estudiada ms adelante. Su sintaxis de uso es:
Set ObjColAplicReg = ObjDocumento. Regi st er edAppl i cat i ons
Saved. Especifica si el documento actual tiene algn cambio realizado sin guardar. Se recoge
en una variable Bool ean: si el valor es Tr ue el documento posee cambios sin guardar; si es
Fal se el documento no posee cambios sin guardar.
BooCambios = ObjDocumento. Saved
Sel ect i onSet s. Obtiene el objeto de coleccin de conjuntos de seleccin. Este objeto ser
estudiado ms adelante. Su sintaxis de uso es:
Set ObjColConjuntosSel = ObjDocumento. Sel ect i onSet s
ObjColConjuntosSel es un objeto de coleccin conjuntos de seleccin del que ya se hablar.
Text St yl es. Obtiene el objeto de coleccin de estilos de texto. Este objeto ser estudiado
ms adelante. Su sintaxis de uso es:
Set ObjColEstilosTexto = ObjDocumento. Text St yl es
ObjColEstilosTexto es un objeto de coleccin de estilos de texto del que ya se hablar.
User Coor di nat eSyst ems. Obtiene el objeto de coleccin de SCPs. Este objeto ser estudiado
ms adelante. Su sintaxis de uso es:
Set ObjColSCPs = ObjDocumento. User Coor di nat eSyst ems
ObjColSCPs es un objeto de coleccin de Sistemas de Coordenadas Personales del que ya se
hablar.
Ut i l i t y. Obtiene el objeto de utilidades para el documento actual activo. De este objeto ha-
blaremos largo y tendido en su momento. Su sintaxis de uso es:
Set ObjUtil = ObjDocumento. Ut i l i t y
ObjUtil es un objeto de utilidades del que ya se hablar.
Vi ewpor t s. Obtiene el objeto de coleccin de ventanas del documento actual activo. Su sin-
taxis de uso es:
Set ObjColVentanas = ObjDocumento. Vi ewpor t s
ObjVentanas es un objeto de coleccin de ventanas del que ya se hablar.
Vi ews. Obtiene el objeto de coleccin de vistas del documento actual activo. Su sintaxis de
uso es:
Set ObjColVistas = ObjDocumento. Vi ews
ObjVistas es un objeto de coleccin de vistas del que ya se hablar.
Probablemente no logremos comprender ahora para que nos sirven todas estas propiedades
que devuelven objetos y colecciones de objetos, pero en cuanto nos introduzcamos en la ma-
teria de las distintas colecciones se nos har el camino ms sencillo.
Bsicamente lo que viene a significar lo podemos deducir de una de las propiedades que ya
conocamos: Model Space. Lo que en realidad hacemos al llamar a esta propiedad es llamar al
objeto de coleccin de Espacio Modelo (llamado Model Space), que se encuentra bajo el docu-
mento actual activo (Act i veDocument ) y bajo la aplicacin (Aut oCAD. Appl i cat i on). Tras la
llamada podremos utilizar multitud de mtodos y propiedades de este objeto de coleccin.
Concretamente, y como ya dijimos, todos los mtodos de dibujo de entidades (AddLi ne, Add-
Ci r cl e, AddRast er ...) son mtodos de la coleccin de Espacio Modelo, as como de Espacio
Papel y bloques (se puede ver el la jerarqua del cuadro del inicio del MDULO). Tambin
existen propiedades que ya veremos.
Con los dems objetos y colecciones ocurrir lo mismo: realizaremos la llamada al objeto de
coleccin de capas, por ejemplo, para crear una nueva capa o para averiguar el nmero de
capas que hay; o realizaremos la llamada a una capa concreta para cambiarle el color, averi-
guar su nombre, bloquearla... Digamos que todo est basado en algo parecido a las rutas de
acceso o caminos de directorios: necesitamos incluir en ellas todas las carpetas y subcarpetas
(niveles jerrquicos) en el orden correcto hasta llegar al objetivo final (propiedad o mtodo).
Por ello es muy importante entender (que no memorizar) el cuadro jerrquico del principio del
MDULO; es esencial comprenderlo completa y correctamente.
A continuacin estudiaremos los distintos mtodos del documento activo.
Audi t I nf o. Este mtodo evala la integridad del dibujo actual. Para cada error AutoCAD
provee de un mensaje de error al usuario. Adems se puede elegir la opcin de hacer que los
errores se corrijan automticamente.
La sintaxis de este mtodo es:
Cal l ObjDocumento. Audi t I nf o( StrNombArch, BooCorregir)
donde StrNombArch es una cadena (tipo de dato St r i ng) que contendr el nombre del archivo
que se desea comprobar, y BooCorregir es un valor Bool ean que determina si se desea la
correccin de errores automtica: Tr ue corrige automticamente; Fal se no corrige automti-
camente.
Expor t . Exporta el dibujo actual de AutoCAD a formato SAT, WMF, EPS, DXF, 3DS y/o BMP.
La sintaxis de este mtodo es:
Cal l ObjDocumento. Expor t ( StrNombArch, StrExtensin, ObjConjuntoSel)
donde StrNombArch es una cadena (tipo de dato St r i ng) que contendr el nombre del archivo,
StrExtensin es otra cadena que contendr tres caracteres especificando la extensin, y pue-
de ser (maysculas o minsculas):
SAT
WMF
EPS
DXF
3DS
BMP
Y ObjConjuntoSel exporta slo los objetos contenidos en el conjunto de seleccin especifica-
do. A crear conjuntos de seleccin aprenderemos ms adelante. Este conjunto de seleccin no
puede estar vaco. Si este valor es Nul l se exporta el dibujo completo.
Get Var i abl e. Obtiene el valor de la variable de sistema de AutoCAD especificada. La sin-
taxis es:
VarValor = ObjDocumento. Get Var i abl e( StrNombVar)
Siendo StrNombVar una cadena (St r i ng) que representa el nombre de la variable en cuestin
(maysculas o minsculas), y VarValor una variable Var i ant donde se guardar el valor.
Handl eToObj ect . Obtiene el objeto que se corresponde con el cdigo de objeto dado. La sin-
taxis es:
ObjNoGrfico = ObjDocumento. Handl eToObj ect ( StrCdigoObj)
ObjNoGrfico es Obj ect y StrCdigoObj es St r i ng.
I mpor t . Funciona de manera inversa a Expor t , es decir, importa un dibujo en determinado
formato grfico (SAT, WMF, EPS, DXF, 3DS o BMP) a un dibujo de AutoCAD 14 . DWG. La sin-
taxis de I mpor t es:
Set ObjDocumento2 = ObjDocumento1. I mpor t ( StrNombArch, DblPtoIns, DblEsc)
ObjDocumento2 es un objeto (declarado como Obj ect ) que es el valor de salida del mtodo.
Este objeto es de tipo de documento evidentemente. StrNombArch es una cadena con el nom-
bre y ruta del archivo en cuestin, DblPtoIns un array de tres valores Doubl e que representan
las coordenadas del punto de insercin, y DblEsc el factor de escala de insercin (Doubl e tam-
bin).
LoadShapeFi l e. Carga un archivo de formas compilado . SHX. La sintaxis de este mtodo es:
Cal l ObjDocumento. LoadShapeFi l e( StrNombArch)
StrNombArch como en mtodos anteriores.
NOTA: Para insertar formas de un archivo de formas cargado recordemos el mtodo AddShape
de las colecciones de Espacio Modelo, Espacio Papel y bloques.
New. Crea un nuevo documento y lo establece como documento activo. Para utilizar este m-
todo usaremos la sintaxis siguiente:
Set ObjDocumento2 = ObjDocumento1. New( StrNombrePlantilla)
ObjDocumento2 es el valor de salida (un objeto de documento). StrNombrePlantilla es una
cadena St r i ng que contiene el camino completo y nombre de la plantilla (recordemos: archi-
vos . DWT) con la que se abrir el dibujo nuevo.
NOTA: Las plantillas por defecto (las que se abren en AutoCAD 14 cuando no se indica planti-
lla alguna) son ACADI SO. DWT o ACAD. DWT, dependiendo de si trabajamos en milmetros (unida-
des mtricas) o pulgadas (unidades inglesas).
Obj ect I DToObj ect . Obtiene el objeto que se corresponde con el ID de objeto dado. La sin-
taxis es:
ObjNoGrfico = ObjDocumento. Obj ect I DToObj ect ( LngIDObjeto)
ObjNoGrfico es Obj ect y LngIDObject es Long.
Open. Abre un dibujo existente que se convierte en el documento actual. Hay que pasarle
como argumento St r i ng la ruta completa y nombre del archivo. La sintaxis de este mtodo
es:
Cal l ObjDocumento. Open( StrNombArch)
Pur geAl l . Limpia todo lo no utilizado en el dibujo. El mtodo realiza la misma accin que
utilizar el comando LI MPI A de AutoCAD con la opcin TODO (PURGE, en ingls, con la opcin
ALL). Su sintaxis es:
ObjDocumento. Pur geAl l
Regen. Regenera el dibujo completo y recalcula las coordenadas de la pantalla y la resolucin
de la vista para todos los objetos. Tambin reindexa la Base de Datos de dibujo para una p-
tima representacin y seleccin de los objetos. Su sintaxis es:
ObjDocumento. Regen( IntVentanas)
IntVentanas es un valor I nt eger que admite las siguientes constantes:
acAct i veVi ewpor t
acAl l Vi ewpor t s
haciendo referencia a una regeneracin en la ventana grfica actual (REGEN) o en todas las
ventanas grficas (REGENT, REGENALL en ingls).
Save. Guarda los cambios del documento actual activo. La sintaxis de uso es:
ObjDocumento. Save
SaveAs. Guarda los cambios del documento actual activo, pasando como argumento el nom-
bre de archivo y camino de acceso completo. El nuevo documento es el documento activo. La
sintaxis de uso es:
ObjDocumento. SaveAs( StrNombArch)
StrNombArch es una cadena (tipo St r i ng).
Set Var i abl e. Asigna el valor especificado como segundo argumento a la variable de sistema
de AutoCAD especificada como primer argumento. La sintaxis es:
Cal l ObjDocumento. Set Var i abl e( StrNombVar, VarValor)
Siendo StrNombVar una cadena (St r i ng) que representa el nombre de la variable en cuestin
(maysculas o minsculas), y VarValor una variable Var i ant donde se guardar el valor.
NOTA: Tras el siguiente mtodo que es el ltimo se estudia un ejemplo completo en el que
podremos observar un trato correcto de las variables (el ms tpico quiz) a la hora de utilizar
Get Var i abl e y Set Var i abl e.
WBl ock. Crea un nuevo archivo de dibujo con el contenido del conjunto de seleccin indicado
(al estilo de BLOQUEDI SC, WBLOCK en ingls). La sintaxis es:
Cal l ObjDocumento. WBl ock( StrNombArch, ObjConjuntoSel)
Siendo StrNombVar una cadena (St r i ng) que representa el nombre del archivo en cuestin (y
su ruta), y ObjConjuntoSel un objeto de conjunto de seleccin que guarda las entidades con
las que se crear un nuevo archivo. Este nuevo archivo no pasa a ser el documento activo,
evidentemente.
Y una vez vistas propiedades y vistos mtodos, exponemos un ejemplo muy interesante en el
que, aunque no se encuentren muchas de las caractersticas vistas hasta este momento ya
que hemos de estudiar las colecciones para avanzar ms, nos ayudar a comprender un po-
co ms la programacin en VBA para AutoCAD 14.
El programa en cuestin consta de una cuadro de dilogo con varias pestaas en las que exis-
ten diferentes caractersticas de AutoCAD referidas a variables de sistema. Desde este cuadro
podremos actuar sobre dichas variables de una forma verstil y rpida:

Y ahora se proporciona el listado completo del programa:
Opt i on Expl i ci t

Di mAcadDoc As Obj ect

Pr i vat e Sub but t onAcept ar _Cl i ck( )
Cal l AcadDoc. Set Var i abl e( " sur f t ab1" , CI nt ( Val ( boxSur f t ab1. Text ) ) )
Cal l AcadDoc. Set Var i abl e( " sur f t ab2" , CI nt ( Val ( boxSur f t ab2. Text ) ) )
Cal l AcadDoc. Set Var i abl e( " i sol i nes" , CI nt ( Val ( boxI sol neas. Text ) ) )
Cal l AcadDoc. Set Var i abl e( " f acet r es" , Val ( boxSuavi zado. Text )
Cal l AcadDoc. Set Var i abl e( " di spsi l h" , Abs( checkSi l uet a. Val ue) )
Cal l AcadDoc. Set Var i abl e( " del obj " , Abs( checkBor r ar . Val ue) )
Cal l AcadDoc. Set Var i abl e( " l t scal e" , Val ( boxEscal a. Text )
Cal l AcadDoc. Set Var i abl e( " f i l edi a" , Abs( checkAr chi vos. Val ue) )
Cal l AcadDoc. Set Var i abl e( " cmddi a" , Abs( checkI mpr i mi r . Val ue) )
End
End Sub

Pr i vat e Sub but t onCancel ar _Cl i ck( )
End
End Sub

Pr i vat e Sub but t onDef ect o_Cl i ck( )
boxSur f t ab1. Text = " 16"
boxSur f t ab2. Text = " 16"
boxI sol neas. Text = " 4"
boxSuavi zado. Text = " 2. 5"
checkSi l uet a. Val ue = 0
checkBor r ar . Val ue = 1
boxEscal a. Text = " 1"
checkAr chi vos. Val ue = 1
checkI mpr i mi r . Val ue = 1
End Sub

Pr i vat e Sub User For m_I ni t i al i ze( )
Set AcadDoc = Get Obj ect ( , " Aut oCAD. Appl i cat i on" ) . Act i veDocument

boxSur f t ab1. Text = St r ( AcadDoc. Get Var i abl e( " sur f t ab1" ) )
boxSur f t ab2. Text = St r ( AcadDoc. Get Var i abl e( " sur f t ab2" ) )
boxI sol neas. Text = St r ( AcadDoc. Get Var i abl e( " i sol i nes" ) )
boxSuavi zado. Text = St r ( AcadDoc. Get Var i abl e( " f acet r es" ) )
checkSi l uet a. Val ue = AcadDoc. Get Var i abl e( " di spsi l h" )
checkBor r ar . Val ue = AcadDoc. Get Var i abl e( " del obj " )
boxEscal a. Text = St r ( AcadDoc. Get Var i abl e( " l t scal e" ) )
checkAr chi vos. Val ue = AcadDoc. Get Var i abl e( " f i l edi a" )
checkI mpr i mi r . Val ue = AcadDoc. Get Var i abl e( " cmddi a" )
End Sub
Comentmoslo un poco. Tras declarar e inicializar nicamente un objeto para el documento
actual (no necesitamos ms), se escriben en las distintas casillas (al inicializar el formulario)
los diferentes valores de las variables de sistema. Para ello se convierten a cadena con St r . Es
conveniente realizar esto, ya que si no utilizamos St r vamos a tener posteriores problemas
con la coma (, ) y el punto (. ) como separadores decimales; convirtiendo con St r pasar todo
como tal, es decir, con un punto decimal que es lo que se utiliza normalmente.
Las variables que tienen un valor booleano (0 1) se pueden igualar directamente a la propie-
dad Val ue de las casillas de verificacin, porque stas reconocen sin problema alguno los valo-
res y establecen la casilla dependiendo de ellos (1 marcada y 0 sin marcar).
A la hora de realizar la operacin inversa, es decir, leer los valores de las casillas e introducir-
los en las variables de sistema, deberemos observar algunas consideraciones. Las variables
que necesiten un valor Doubl e (tipo FACETRES) pueden ser convertidas a valor numrico direc-
tamente con Val ; las que necesiten un valor entero (SURFTAB1 por ejemplo) se convierte con
Val y se transforman a I nt eger con Ci nt ; las variables que necesiten un valor booleano (tipo
FI LEDI A) se suministran directamente ledas de la casilla de verificacin. Pero cuidado, cuando
una casilla est activada, al leerla para Set Var i abl e se devuelve el valor 1, por lo que
habremos de asegurarnos siempre introduciendo una funcin Abs por delante, que devuelve el
valor absoluto sin signo.
Por ltimo y como vemos, el botn Defecto rellena las casillas con unos valores que se estiman
por defecto, y el botn Cancelar simplemente termina el programa.
Evidentemente faltara un pequeo control de errores en el programa que evitara introducir
valores decimales donde no se puede y dems. Con ello y algunos detalles ms el programa
estara completo.
2 fase intermedia de ejercicios
Programar un ejercicio que permita descargar las aplicaciones ARX cargadas actualmente. El
letrero de dilogo presentar una lista desplegable con las aplicaciones cargadas y, tras esco-
ger una de ellas se proceder a su descarga haciendo clic en un botn de accin. El cuadro
puede ser este:

DOCE.8. LAS COLECCIONES Y SUS OBJETOS
Pasaremos ahora al estudio ms profundo de las diversas colecciones de objetos que posee
VBA para AutoCAD 14, mencionadas en diversos puntos de la seccin anterior.
Un objeto coleccin es un conjunto de objetos a los que se puede hacer referencia como gru-
po. Bajo esta seccin veremos las distintas maneras de tratar las colecciones VBA para Auto-
CAD 14, que son: objetos del Espacio Modelo, objetos del Espacio Papel, bloques, diccionarios,
estilos de acotacin, grupos, capas, tipos de lnea, aplicaciones registradas, conjuntos de se-
leccin, estilos de texto, SCPs, vistas y ventanas.
Cada coleccin ser explicada con sus mtodos, sus propiedades y sus elementos simples. Esto
ltimo se refiere a los elementos integrantes de cada coleccin; as por ejemplo, la coleccin
de capas est formada por objetos simples que son, evidentemente, las capas. Tanto la colec-
cin de capas, como cada una de ellas dispondrn de propiedades y mtodos propios.
NOTA: Las colecciones nacen directamente del documento actual activo, como se puede ver en
la plantilla del comienzo de este MDULO.
DOCE.8.1. Coleccin de objetos de Espacio Mo-
delo
La coleccin de objetos de Espacio Modelo es en realidad una coleccin especial de bloques que
contiene todas las entidades del Espacio Modelo de AutoCAD. Veamos sus propiedades y m-
todos.
Propiedades de la coleccin de objetos de Espacio Modelo:
Appl i cat i on
Count
Name
Mtodos de la coleccin de objetos de Espacio Modelo:
Add3DFace
Add3DMesh
Add3DPol y
AddAr c
AddAt t r i but e
AddBox
AddCi r cl e
AddCone
AddCust omObj ect
AddCyl i nder
AddDi mAl i gned
AddDi mAngul ar
AddDi mDi amet r i c
AddDi mOr di nat e
AddDi mRadi al
AddDi mRot at ed
AddEl l i pse
AddEl l i pt i cal Cone
AddEl l i pt i cal Cyl i nder
AddExt r udedSol i d
AddExt r udedSol i dAl ongPat h
AddHat ch
AddLeader
AddLi ght Wei ght Pol yl i ne
AddLi ne
AddMText
AddPoi nt
AddPol yl i ne
AddRast er
AddRay
AddRegi on
AddRevol vedSol i d
AddShape
AddSol i d
AddSpher e
AddSpl i ne
AddText
AddTol er ance
AddTor us
AddTr ace
AddWedge
AddXLi ne
InsertBlock
Item
Como vemos, al menos los mtodos nos suenan casi todos, y es que no son otros que los ex-
plicados en la seccin DOCE.5. de este MDULO. Veamos lo nuevo.
En cuestin de propiedades aparece una nueva:
Count . Obtiene el nmero de objetos existentes en una coleccin (grupo y conjunto de selec-
cin tambin).
Esta propiedad de slo lectura tiene como sintaxis:
IntNmero = ObjNoGrfico. Count
Donde IntNmero ser una variable declarada evidentemente como I nt eger .
La ejecucin de la siguiente macro devolvera el nmero de objetos existente actualmente en
el Espacio Modelo:
Opt i on Expl i ci t

Di mAcad As Obj ect
Di mAcadDoc As Obj ect
Di mAcadModel As Obj ect

Sub Macr o( )
Set Acad = Get Obj ect ( , " Aut oCAD. Appl i cat i on" )
Set AcadDoc = Acad. Act i veDocument
Set AcadModel = AcadDoc. Model Space
Di mNumAs I nt eger
Num= AcadModel . Count
MsgBox Num
End Sub
Probemos a dibujar y borrar entidades para ver los distintos resultados de la propiedad Count
y comprenderla bien.
Veamos ahora los dos nuevos mtodos.
I nser t Bl ock. Este mtodo inserta un bloque en una coleccin (Modelo, Papel o bloques) que
se encuentre definido en la sesin actual de dibujo.
NOTA: Si se inserta un bloque dentro de otro (en coleccin de bloques) se crearn bloques
anidados.
La sintaxis para utilizar este mtodo es:
Set ObjRefBloque = ObjNoGrfico. I nser t Bl ock( DblPtoIns, StrNombre, DblEscalaX,
DblEscalaY, DblRotacin)
DblPtoIns es una matriz de tres valores Doubl e que especifica el punto de insercin para el
bloque. StrNombre se refiere al nombre del bloque, si es una variable habr sido declarada
como St r i ng. DblEscalaX y DblEscalaY son dos valores Doubl e que representan la escala de
insercin del bloque en X e Y. DblRotacin es una valor Doubl e que dice relacin al ngulo de
rotacin de insercin en radianes.
Veamos la siguiente macro:
Opt i on Expl i ci t

Di mAcad As Obj ect
Di mAcadDoc As Obj ect
Di mAcadModel As Obj ect

Sub Macr o( )
Set Acad = Get Obj ect ( , " Aut oCAD. Appl i cat i on" )
Set AcadDoc = Acad. Act i veDocument
Set AcadModel = AcadDoc. Model Space
Di mBl oq As Obj ect
Di mPt oI ns( 1 To 3) As Doubl e
Pt oI ns( 1) = 10: Pt oI ns( 2) = 10: Pt oI ns( 3) = 0
Set Bl oq = AcadModel . I nser t Bl ock( Pt oI ns, " ci r cl " , 1, 1, 0)
End Sub
El resultado ser la insercin en el punto 10,10,0 (a escala 1:1 y con un ngulo de rotacin de
0 radianes) del bloque definido con el nombre de ci r cl . Este bloque deber existir en el dibujo
actual. Este resultado es un objeto de referencia a bloque, que ya vimos, por lo que podr ser
tratado como tal.
I t em. Este mtodo obtiene el objeto especificado por un ndice dentro de una coleccin (o
tambin grupo o conjunto de seleccin). Su sintaxis es:
Set ObjGrfico = ObjNoGrfico. I t em( Varndice)
Donde Varndice es un valor Var i ant que puede ser un entero o una cadena. Si es entero va
desde 0 (como primer objeto) hasta N-1 (como ltimo objeto), siendo N el total de objetos en
la coleccin (o grupo o conjunto de seleccin). Si Varndice es una cadena ser el nombre de
un bloque creado o similar.
El resultado es un objeto grfico, definido como Obj ect .
DOCE.8.2. Coleccin de objetos de Espacio Pa-
pel
La coleccin de objetos de Espacio Papel es, as como la de Espacio Modelo, en realidad una
coleccin especial de bloques que contiene todas las entidades del Espacio Papel de AutoCAD.
Las propiedades y los mtodos son iguales que para Espacio Modelo.
Propiedades de la coleccin de objetos de Espacio Papel:
Appl i cat i on
Count
Name
Mtodos de la coleccin de objetos de Espacio Papel:
Add3DFace
Add3DMesh
Add3DPol y
AddAr c
AddAt t r i but e
AddBox
AddCi r cl e
AddCone
AddCust omObj ect
AddCyl i nder
AddDi mAl i gned
AddDi mAngul ar
AddDi mDi amet r i c
AddDi mOr di nat e
AddDi mRadi al
AddDi mRot at ed
AddEl l i pse
AddEl l i pt i cal Cone
AddEl l i pt i cal Cyl i nder
AddExt r udedSol i d
AddExt r udedSol i dAl ongPat h
AddHat ch
AddLeader
AddLi ght Wei ght Pol yl i ne
AddLi ne
AddMText
AddPoi nt
AddPol yl i ne
AddPViewPort (*)
AddRast er
AddRay
AddRegi on
AddRevol vedSol i d
AddShape
AddSol i d
AddSpher e
AddSpl i ne
AddText
AddTol er ance
AddTor us
AddTr ace
AddWedge
AddXLi ne
I nser t Bl ock
I t em
Las propiedades y mtodos expuestos estn ya estudiados.
(*) NOTA: nicamente un mtodo aparece aqu nuevo (AddPVi ewpor t ), pero vamos a pospo-
ner su estudio a la seccin DOCE.8.14.1., pues all se habla de las ventanas de Espacio Mode-
lo y este mtodo est relacionado, ya que sirve para gestionar ventanas en Espacio Papel.
Veamos un pequeo programa que dibuja una lnea desde el punto 100,-50,0 hasta el punto
0,0,0 en Espacio Modelo o Espacio Papel, dependiendo de lo que el usuario elija. El listado es:
Opt i on Expl i ci t

Di mAcad As Obj ect
Di mAcadDoc As Obj ect
Di mAcadModel As Obj ect
Di mAcadPaper As Obj ect
Di mL nea As Obj ect
Di mPt o1( 1 To 3) As Doubl e
Di mPt o2( 1 To 3) As Doubl e

Pr i vat e Sub cbDi buj ar _Cl i ck( )
I f obModel o. Val ue = Tr ue Then
Set L nea = AcadModel . AddLi ne( Pt o1, Pt o2)
El se
Set L nea = AcadPaper . AddLi ne( Pt o1, Pt o2)
End I f
End
End Sub

Pr i vat e Sub cbSal i r _Cl i ck( )
End
End Sub

Pr i vat e Sub User For m_I ni t i al i ze( )
Set Acad = Get Obj ect ( , " Aut oCAD. Appl i cat i on" )
Set AcadDoc = Acad. Act i veDocument
Set AcadModel = AcadDoc. Model Space
Set AcadPaper = AcadDoc. Paper Space

Pt o1( 1) = 100: Pt o1( 2) = - 50: Pt o1( 3) = 0
Pt o2( 1) = 0: Pt o2( 2) = 0: Pt o2( 3) = 0
End Sub
El cuadro de dilogo (formulario) correspondiente podra ser el que se muestra a continuacin.
La manera de utilizarlo es simple: slo hay que escoger a cul de las dos colecciones se van a
aadir los objetos grficos, a la coleccin de objetos de Espacio Modelo o a la coleccin de ob-
jetos de Espacio Papel. Tras esto se pulsa el botn Dibujar ahora! Para trazar la lnea en el
espacio correspondiente.
El botn Salir simplemente termina la ejecucin del programa.

De estas dos colecciones vistas hasta ahora los objetos componentes simples son todos los ya
estudiados: lneas, crculos, arcos, referencias de bloque...
DOCE.8.3. Coleccin de bloques y el objeto blo-
que
La coleccin de bloques (Bl ocks) la constituyen todos los bloques del documento actual activo.
Las propiedades y mtodos de esta coleccin las vemos seguidamente.
Propiedades de la coleccin de bloques:
Appl i cat i on
Count
Mtodos de la coleccin de bloques:
Add
I t em
Slo un nuevo mtodo hemos de explicar:
Add. Este mtodo aade un nuevo objeto a la coleccin indicada. Su sintaxis especfica para
la coleccin de bloques es:
Set ObjBloque = ObjColBloques. Add( DblPtoIns, StrNombre)
DblPtoIns es un valor Doubl e para el punto de insercin (matriz de tres valores Doubl e) y
StrNombre es una cadena (St r i ng) para el nombre del bloque.
El objeto resultante de esta operacin es un objeto de bloque, esto es, un bloque. Los objetos
de bloque poseen las siguientes propiedades y mtodos:
Propiedades de los objetos de bloque:
Appl i cat i on
Name
Or i gi n
Mtodos de los objetos de bloque:
Add3DFace
Add3DMesh
Add3DPol y
AddAr c
AddAt t r i but e
AddBox
AddCi r cl e
AddCone
AddCust omObj ect
AddCyl i nder
AddDi mAl i gned
AddDi mAngul ar
AddDi mDi amet r i c
AddDi mOr di nat e
AddDi mRadi al
AddDi mRot at ed
AddEl l i pse
AddEl l i pt i cal Cone
AddEl l i pt i cal Cyl i nder
AddExt r udedSol i d
AddExt r udedSol i dAl ongPat h
AddHat ch
AddLeader
AddLi ght Wei ght Pol yl i ne
AddLi ne
AddMText
AddPoi nt
AddPol yl i ne
AddRast er
AddRay
AddRegi on
AddRevol vedSol i d
AddShape
AddSol i d
AddSpher e
AddSpl i ne
AddText
AddTol er ance
AddTor us
AddTr ace
AddWedge
AddXLi ne
Delete
I nser t Bl ock
I t em
Veamos un ejemplo de macro VBA en el que se crea un bloque con una sola lnea:
Opt i on Expl i ci t

Di mAcad As Obj ect
Di mAcadDoc As Obj ect
Di mAcadModel As Obj ect
Di mAcadBl oq As Obj ect
Di mLi n As Obj ect

Sub Macr o( )
Set Acad = Get Obj ect ( , " Aut oCAD. Appl i cat i on" )
Set AcadDoc = Acad. Act i veDocument
Set AcadModel = AcadDoc. Model Space
Set AcadBl oq = AcadDoc. Bl ocks

Di mBl oq As Obj ect
Di mPt oI ns( 1 To 3) As Doubl e
Di mPt o2( 1 To 3) As Doubl e

Pt oI ns( 1) = 10: Pt oI ns( 2) = 10: Pt oI ns( 3) = 0
Pt o2( 1) = 100: Pt o2( 2) = 100: Pt o2( 3) = 0
Set Bl oq = AcadBl oq. Add( Pt oI ns, " pqpq" )
Set Bl oq = Bl oq. AddLi ne( Pt oI ns, Pt o2)
End Sub
Lo que se debe hacer en primera instancia es crear el objeto de bloque en la coleccin de blo-
ques (Set Bl oq = AcadBl oq. Add( Pt oI ns, " pqpq" ) ); es como si creramos un bloque vaco.
Despus se le aaden entidades de dibujo, como en este caso una lnea (Set Bl oq =
Bl oq. AddLi ne( Pt oI ns, Pt o2) ) con los mtodos ya estudiados, ya que estos mtodos, como
hemos visto, son propios tambin de la coleccin de objetos de bloque.
El nuevo mtodo no estudiado an de los objetos que son bloques es:
Del et e. Del et e borra o elimina el objeto indicado. Hemos de indicar el nombre de dicho ob-
jeto (bloque, estilo de acotacin, SCP...) como una cadena (St r i ng), pero esto no es necesario
ms que para la coleccin de ventanas:
ObjNoGrafico. Del et e( StrNombreObj)
DOCE.8.4. Coleccin de diccionarios y el objeto
diccionario
La coleccin de diccionarios (Di ct i onar i es) la constituyen todos los objetos de diccionario del
documento actual activo.
Propiedades de la coleccin de diccionarios:
Appl i cat i on
Count
Mtodos de la coleccin de diccionarios:
Add
I t em
Las propiedades y mtodos expuestos estn ya estudiados.
NOTA: El mtodo Add hemos visto que tena una sintaxis especial para la coleccin de bloques.
Pues bien, para ella y para la coleccin de SCPs existen estas sintaxis especiales (esta ltima
ya se ver en su momento). Para el resto de las colecciones la sintaxis del mtodo Add es la
siguiente:
Set ObjComponenteCol = ObjColeccin. Add( StrNombre)
StrNombre es el nombre (St r i ng) del objeto que se aadir a la coleccin.
Sigamos. El objeto simple de la coleccin de diccionarios es un objeto de diccionario. Los obje-
tos de diccionario poseen las siguientes propiedades y mtodos:
Propiedades de los objetos de diccionario:
Appl i cat i on
Name
Mtodos de los objetos de diccionario:
AddObject
Del et e
GetName
GetObject
Get XDat a
Remove
Rename
Replace
Set XDat a
Un diccionario es un sistema para almacenar y recuperar objetos con una cadena de palabras
clave asociada. El objeto puede ser referenciado en un diccionario mediante su palabra clave.
Un diccionario puede contener cualquier tipo de objeto, incluso otro diccionario.
NOTA: Este objeto de diccionario no tiene nada que ver con el diccionario ortogrfico de co-
rreccin de AutoCAD.
Los nuevos mtodos de los objetos de diccionario que hemos de estudiar son los que siguen a
continuacin.
AddObj ect . Aade un nuevo objeto a un diccionario. Si la entrada ya existe es sustituida por
el nuevo objeto, si no simplemente se agrega. Los dos argumentos para este mtodo (nombre
de objeto y palabra clave) han de ser cadenas (St r i ng). Veamos la sintaxis:
Set ObjNoGrfico = ObjDiccionario. AddObj ect ( StrPalClave, StrNomObjeto)
Get Name. Devuelve el nombre (palabra clave) de un objeto de un diccionario:
StrNombre = ObjDiccionario. Get Name( ObjEnDiccionario)
Get Obj ect . Devuelve el objeto que se corresponde con una palabra clave en un diccionario:
ObjEnDiccionario = ObjDiccionario. Get Obj ect ( StrPalClave)
Remove. Elimina el objeto de un diccionario indicado por su palabra clave:
Cal l ObjDiccionario. Remove( StrPalClave)
Rename. Cambia el nombre (palabra clave) del objeto de un diccionario indicado por su pala-
bra clave:
Cal l ObjDiccionario. Rename( StrNombreAntiguo, StrNombreNuevo)
Repl ace. Cambia una entrada en un diccionario por otra dada:
Cal l ObjDiccionario. Repl ace( StrPalClave, ObjObjetoNuevo)
DOCE.8.5. Coleccin de estilos de acotacin y
el
objeto estilo de acotacin
La coleccin de estilos de acotacin (Di mSt yl es) la constituyen todos los objetos de estilos de
cota del documento actual activo, es decir, los estilos de acotacin que todos conocemos.
Propiedades de la coleccin de estilos de acotacin:
Appl i cat i on
Count
Mtodos de la coleccin de estilos de acotacin:
Add
I t em
Las propiedades y mtodos expuestos estn ya estudiados.
El objeto simple de esta coleccin es un objeto de estilo de acotacin. Los objetos de estilo de
acotacin poseen las siguientes propiedades y mtodos:
Propiedades de los objetos de estilo de acotacin:
Appl i cat i on
Name
Mtodos de los objetos de estilo de acotacin:
Del et e
Get XDat a
Set XDat a
Las propiedades y mtodos expuestos estn ya estudiados.
DOCE.8.6. Coleccin de grupos y el objeto gru-
po
La coleccin de grupos (Gr oups) la constituyen todos los objetos de grupo del documento ac-
tual activo.
Propiedades de la coleccin de grupos:
Appl i cat i on
Count
Mtodos de la coleccin de grupos:
Add
I t em
Las propiedades y mtodos expuestos estn ya estudiados.
El objeto simple de esta coleccin es un objeto de grupo. Los objetos de grupo son conjuntos
de seleccin con nombre y poseen las siguientes propiedades y mtodos:
Propiedades de los objetos de grupo:
Appl i cat i on
Col or
Count
Ent i t yName
Ent i t yType
Handl e
Layer
Li neType
Li net ypeScal e
Name
Obj ect I D
Vi si bl e
Mtodos de los objetos de grupo:
AppendItems
Del et e
Get XDat a
Hi ghl i ght
I t em
RemoveItems
Set XDat a
Updat e
Los mtodos nuevos son:
AppendI t ems. Aade una o ms entidades grficas al grupo:
Cal l ObjGrupo. AppendI t ems( ObjGrficos)
ObjGrficos es una matriz de objetos grficos de AutoCAD.
RemoveI t ems. Elimina los objetos especificados de un grupo (o tambin de un conjunto de
seleccin):
Cal l Obj Gr upo. RemoveI t ems( Obj Gr f i cos)
ObjGrficos es una matriz de objetos grficos de AutoCAD.
DOCE.8.7. Coleccin de capas y el objeto capa
La coleccin de capas (Layer s) la constituyen todos los objetos de capa del documento actual
activo, es decir, las capas del dibujo.
Propiedades de la coleccin de capas:
Appl i cat i on
Count
Mtodos de la coleccin de capas:
Add
I t em
Las propiedades y mtodos expuestos estn ya estudiados.
Por ejemplo, la siguiente macro creara una nueva capa llamadas EJ ES:
Opt i on Expl i ci t

Di mAcadDoc As Obj ect
Di mAcadModel As Obj ect

Sub Macr o( )
Set AcadDoc = Get Obj ect ( , " Aut oCAD. Appl i cat i on" ) . Act i veDocument
Set AcadModel = AcadDoc. Model Space
Cal l AcadDoc. Layer s. Add( " ej es" )
End Sub
El objeto simple de esta coleccin es un objeto de capa. Los objetos de capa poseen las si-
guientes propiedades y mtodos:
Propiedades de los objetos de capa:
Appl i cat i on
Col or
Freeze
LayerOn
Li neType
Lock
Name
Mtodos de los objetos de capa:
Del et e
Get XDat a
Set XDat a
Las nuevas propiedades se explican a continuacin.
Fr eeze. La propiedad Fr eeze congela o descongela una capa. Es lo que se denomina en la
versin castellana de AutoCAD 14 la inutilizacin y reutilizacin de capas (representado por
un Sol o un smbolo de hielo, dependiendo de la condicin, en el cuadro de dilogo de capas).
Tambin nos permite obtener el estado en que se encuentra una capa con respecto a este
aspecto.
La sintaxis para asignar un estado con Fr eeze a una capa es:
ObjCapa. Fr eeze = BooEstadoUtilizacin
BooEstadoUtilizacin es un valor Bool ean que puesto a Tr ue indica que la capa se inutiliza
(se congela) y puesto a Fal se indica que la capa se reutiliza o utiliza (se descongela).
La sintaxis para obtener un estado con Fr eeze de una capa es:
BooEstadoUtilizacin = ObjCapa. Fr eeze
BooEstadoUtilizacin es un valor Bool ean que si almacena Tr ue indica que la capa est in-
utilizada y si almacena Fal se indica que la capa est reutilizada o utilizada.
Recordemos que la ventaja de inutilizar o congelar una capa es que es excluida de la regene-
racin, lo que no ocurre por ejemplo al desactivarla simplemente. Tambin decir que una capa
inutilizada no es trazada (por plotter o impresora).
Layer On. La propiedad Layer On activa o desactiva una capa (representado por una bombilla
encendida o apagada, dependiendo de la condicin, en el cuadro de dilogo de capas). Tam-
bin nos permite obtener el estado en que se encuentra una capa con respecto a este aspec-
to.
La sintaxis para asignar un estado con Layer On a una capa es:
ObjCapa. Layer On = BooEstadoActivacin
BooEstadoActivacin es un valor Bool ean que puesto a Tr ue indica que la capa se activa y
puesto a Fal se indica que la capa de desactiva.
La sintaxis para obtener un estado con Layer On de una capa es:
BooEstadoActivacin = ObjCapa. Layer On
BooEstadoActivacin es un valor Bool ean que si almacena Tr ue indica que la capa est acti-
vada y si almacena Fal se indica que la capa est desactivada.
Al desactivar un capa no aparecer en pantalla ni en trazador, pero sus objetos seguirn res-
pondiendo a las regeneraciones del dibujo.
Lock. La propiedad Lock bloquea o desbloquea una capa (representado por un candado
abierto o cerrado, dependiendo de la condicin, en el cuadro de dilogo de capas). Tambin
nos permite obtener el estado en que se encuentra una capa con respecto a este aspecto.
La sintaxis para asignar un estado con Lock a una capa es:
ObjCapa. Lock = BooEstadoBloqueo
BooEstadoBloqueo es un valor Bool ean que puesto a Tr ue indica que la capa se bloquea y
puesto a Fal se indica que la capa de desbloquea.
La sintaxis para obtener un estado con Lock de una capa es:
BooEstadoBloqueo = ObjCapa. Lock
BooEstadoBloqueo es un valor Bool ean que si almacena Tr ue indica que la capa est bloquea-
da y si almacena Fal se indica que la capa est desbloqueada.
Al bloquear una capa no se podr modificar, pero seguir visible y respondiendo a acciones
como, por ejemplo, la utilizacin de modos de referencia en ella.
Veamos un programa de ejemplo de manejo de capas. Este ejercicio maneja el cuadro de di-
logo que se puede observar en esta misma pgina. Su misin es nicamente informativa, es
decir, slo informa del nombre y propiedades de las diferente capas del dibujo actual.
Al ejecutar el programa deber rellenar la lista desplegable con las capas de la sesin de Au-
toCAD en curso y mostrar la primera de ellas (siempre la capa 0) escribiendo en los distintos
cuadros de edicin sus respectivas propiedades.
Al actuar sobre la lista desplegable eligiendo una capa, las casillas de edicin se actualizarn
con los nuevos valores.
Veamos pues el letrero de dilogo comentado y, a continuacin, el listado del programa pro-
piamente dicho.

El listado es el que sigue:
Opt i on Expl i ci t

Di mAcadDoc As Obj ect
Di mAcadModel As Obj ect
Di mAcadCapas As Obj ect
Di mNumCapas As I nt eger

Pr i vat e Sub cbSal i r _Cl i ck( )
End
End Sub

Pr i vat e Sub cbCapas_Change( )
Di m ndi ce As I nt eger

ndi ce = cbCapas. Li st I ndex
t bCol or . Text = AcadCapas. I t em( ndi ce) . Col or
t bTi pol i n. Text = AcadCapas. I t em( ndi ce) . Li net ype
I f AcadCapas. I t em( ndi ce) . Layer On = Tr ue Then
t bAD. Text = " Act i vada"
El se
t bAD. Text = " Desact i vada"
End I f
I f AcadCapas. I t em( ndi ce) . Fr eeze = Tr ue Then
t bI R. Text = " I nut i l i zada"
El se
t bI R. Text = " Ut i l i zada"
End I f
I f AcadCapas. I t em( ndi ce) . Lock = Tr ue Then
t bBD. Text = " Bl oqueada"
El se
t bBD. Text = " Desbl oqueada"
End I f
End Sub

Pr i vat e Sub User For m_I ni t i al i ze( )
Set AcadDoc = Get Obj ect ( , " Aut oCAD. Appl i cat i on" ) . Act i veDocument
Set AcadModel = AcadDoc. Model Space
Set AcadCapas = AcadDoc. Layer s

NumCapas = AcadCapas. Count
Di mi As I nt eger
For i = 0 To Val ( NumCapas - 1)
cbCapas. AddI t emAcadCapas. I t em( i ) . Name
Next i
cbCapas. Text = AcadCapas. I t em( 0) . Name
End Sub
Vemos como en cuanto se corre el programa se hace una llamada al procedimiento cbCa-
pas_Change. Esto es debido a la lnea cbCapas. Text = AcadCapas. I t em( 0) . Name, que en s
ya realiza un cambio en la lista desplegable, por eso se ejecuta el procedimiento anteriormente
dicho. Esta lnea escribe en la casilla de la lista desplegable el primero de los elementos (la
primera capa, la capa 0).
Antes de esto se introducen todos los nombres de capas en la lista. Vemos que no tiene ningn
misterio y que simplemente es limitarse a seguir las pautas y diversas sintaxis de uso que va-
mos estudiando.
Con las extraccin del color, tipo de lnea y dems propiedades, vemos que el proceso es simi-
lar. La nica variante es que se ha introducido un control para averiguar cuando determinados
valores son Tr ue o Fal se y escribir textos en las casillas que resulten ms lgicos al usuario
que Verdadero y/o Falso.
NOTA: Como el cuadro es slo informativo no nos olvidemos de establecer la propiedad St yl e
de la lista desplegable a 2 (f mSt yl eDr opDownLi st ) y las propiedades Locked de las casillas de
edicin a Tr ue. Todo ello para no poder editar valores manualmente. Si quisiramos que el
usuario pudiera entrar en las casillas y variar los valores para cambiar las propiedades de las
capas, nicamente habramos de dejar estas propiedades especificadas como estn y aadir
algo ms de cdigo al programa con las diferentes sintaxis para asignar en lugar de obte-
ner las propiedades de las capas.
DOCE.8.8. Coleccin de tipos de lnea y el obje-
to
tipo de lnea
La coleccin de tipos de lnea (Li net ypes) la constituyen todos los objetos de tipo de lnea del
documento actual activo, es decir, los tipos de lnea cargados en el dibujo.
Propiedades de la coleccin de tipos de lnea:
Appl i cat i on
Count
Mtodos de la coleccin de tipos de lnea:
Add
I t em
Load
Como vemos hay un nuevo mtodo:
Load. Carga en el dibujo actual el tipo de lnea especificado (St r i ng) del archivo de definicin
de tipos de lnea (. LI N) especificado (St r i ng):
Cal l ObjColTiposDeLnea. Load( StrNombreTipoLnea, StrNombreArchivo)
NOTA: Si utilizamos el mtodo Add se crear un nuevo tipo de lnea con las propiedades por
defecto.
El objeto simple de esta coleccin es un objeto de tipo de lnea. Los objetos de tipo de lnea
poseen las siguientes propiedades y mtodos:
Propiedades de los objetos de tipo de lnea:
Appl i cat i on
Description
Name
Mtodos de los objetos de tipo de lnea:
Del et e
Get XDat a
Set XDat a
La nueva propiedad es:
Descr i pt i on. Asigna u obtiene una descripcin (St r i ng) para el tipo de lnea. Esta descrip-
cin es la que aparece en el archivo de definicin . LI N y en el cuadro de gestin de tipos de
lnea, es la representacin de la lnea con caracteres ASCII (puntos, guiones, texto, etc...).
Como mximo puede tener 47 caracteres.
La sintaxis para asignar una descripcin es:
ObjTipoLnea. Descr i pt i on = StrDescripcin
La sintaxis para obtener una descripcin es:
StrDescripcin = ObjTipoLnea. Descr i pt i on
Veamos la siguiente macro de ejemplo en la que se carga un tipo de lnea y se obtiene su des-
cripcin:
Opt i on Expl i ci t

Di mAcadDoc As Obj ect

Sub Macr o( )
Set AcadDoc = Get Obj ect ( , " Aut oCAD. Appl i cat i on" ) . Act i veDocument

I f I sEmpt y( AcadDoc. Li net ypes. I t em( " t r azo_y_punt o" ) ) Then
Cal l AcadDoc. Li net ypes. Load( " t r azo_y_punt o" , " acadi so. l i n" )
End I f

Di mTi poLi n As Obj ect
Set Ti poLi n = AcadDoc. Li net ypes. I t em( " t r azo_y_punt o" )
Di mDescr As St r i ng
Descr = Ti poLi n. Descr i pt i on
MsgBox Descr
End Sub
NOTA: Podemos comprobar que con la nica definicin de AcadDoc nos sirve para este pro-
grama; no hay por qu declarar ms variables de objeto de AutoCAD si no es necesario.
Si intentamos cargar un tipo de lnea y este ya est cargado (o crear un capa que ya existe, un
estilo de texto, etctera), VBA devuelve un error. Para evitar esto hemos de comprobar prime-
ro si dicho tipo de lnea en este caso est ya cargado. Para estos menesteres utilizamos la
funcin de Visual Basic I sEmpt y como se puede observar en el listado.
Tras cargar el tipo de lnea, si no estaba ya cargado, se extrae su descripcin y se muestra con
un MsgBox. El resultado es el siguiente:


NOTA: Si el archivo ACADI SO. LI N no hubiera estado en uno de los directorios de soporte de
AutoCAD 14, habramos de haber indicado la ruta completa al fichero; al igual que ocurra con
los programas en AutoLISP, si recordamos.
DOCE.8.9. Coleccin de aplicaciones registra-
das y el
objeto aplicacin registrada
La coleccin de aplicaciones registradas (Regi st er edAppl i cat i ons) la constituyen todos los
objetos de aplicacin registrada del documento actual activo.
Propiedades de la coleccin de aplicaciones registradas:
Appl i cat i on
Count
Mtodos de la coleccin de aplicaciones registradas:
Add
I t em
Las propiedades y mtodos expuestos estn ya estudiados.
El objeto simple de esta coleccin es un objeto de aplicacin registrada. Los objetos de aplica-
cin registrada poseen las siguientes propiedades y mtodos:
Propiedades de los objetos de aplicacin registrada:
Appl i cat i on
Name
Mtodos de los objetos de tipo de aplicacin registrada:
Del et e
Get XDat a
Set XDat a
Las propiedades y mtodos expuestos estn ya estudiados.
DOCE.8.10. Coleccin de conjuntos de selec-
cin y el
objeto conjunto de seleccin
La coleccin de conjuntos de seleccin (Sel ect i onSet s) la constituyen todos los objetos de
conjunto de seleccin del documento actual activo, o sea, los conjuntos actuales.
Propiedades de la coleccin de conjuntos de seleccin:
Appl i cat i on
Count
Mtodos de la coleccin de conjuntos de seleccin:
Add
I t em
Las propiedades y mtodos expuestos estn ya estudiados.
El objeto simple de esta coleccin es un objeto de conjunto de seleccin. Los objetos de con-
junto de seleccin poseen las siguientes propiedades y mtodos:
Propiedades de los objetos de conjunto de seleccin:
Appl i cat i on
Count
Name
Mtodos de los objetos de conjunto de seleccin:
AddItems
Clear
Del et e
Er ase
Hi ghl i ght
I t em
RemoveI t ems
Scal eEnt i t y
Select
SelectAtPoint
SelectByPolygon
SelectOnScreen
Updat e
Veamos estos nuevos mtodos aplicables nicamente a conjuntos de seleccin.
AddI t ems. Aade objetos al conjunto de seleccin:
Cal l ObjConjuntoSel. AddI t ems( ObjGrficos)
ObjGrficos es una matriz de objetos grficos.
NOTA: No confundir AddI t ems con el mtodo AppendI t ems de los objetos de grupo ni con el
mtodo AddI t emde las listas desplegables y cuadros de lista de Visual Basic.
El siguiente ejemplo de macro dibuja una lnea, un crculo, crea un conjunto de seleccin y le
aade ambos objetos creados:
Opt i on Expl i ci t

Di mAcadDoc As Obj ect
Di mAcadModel As Obj ect
Di mL nea As Obj ect
Di mC r cul o As Obj ect
Di mGr upo1 As Obj ect

Sub Macr o( )
Set AcadDoc = Get Obj ect ( , " Aut oCAD. Appl i cat i on" ) . Act i veDocument
Set AcadModel = AcadDoc. Model Space

Di mPt o1( 2) As Doubl e
Di mPt o2( 2) As Doubl e

Pt o1( 0) = 100: Pt o1( 1) = 100: Pt o1( 2) = 0
Pt o2( 0) = 200: Pt o2( 1) = 200: Pt o2( 2) = 0
Set L nea = AcadModel . AddLi ne( Pt o1, Pt o2)
Set C r cul o = AcadModel . AddCi r cl e( Pt o1, 10)
Set Gr upo1 = AcadDoc. Sel ect i onSet s. Add( " Pr ueba" )
Di mObj et o( 1) As Obj ect
Set Obj et o( 0) = L nea: Set Obj et o( 1) = C r cul o
Cal l Gr upo1. AddI t ems( Obj et o)
End Sub
Si ahora yo quisiera eliminar por ejemplo ambos objetos guardados en el conjunto de se-
leccin Gr upo1, simplemente hara:
Gr upo1. Er ase
Cl ear . Elimina todos los elementos de un conjunto de seleccin:
Cal l ObjConjuntoSel. Cl ear
Esto es, vaca el conjunto.
Sel ect . Selecciona los objetos designados por el modo indicado y los introduce en un con-
junto de seleccin. Su sintaxis de utilizacin es:
Cal l ObjConjuntoSel. Sel ect ( IntModo, DblPto1, DblPto2, VarTipoFiltro, VarDatoFil-
tro)
El argumento IntModo es un valor I nt eger que define el tipo o modo de seleccin que se eje-
cutar sobre los objetos. Admite tambin las siguientes constantes:

acSel ect i onSet Al l
acSel ect i onSet Cr ossi ng
acSel ect i onSet Cr ossi ngPol ygon
acSel ect i onSet Fence
acSel ect i onSet Last
acSel ect i onSet Pr evi ous
acSel ect i onSet Wi ndows
acSel ect i onSet Wi ndowPol ygon
Las cuales se corresponden con los diferentes modos de designacin de entidades de Auto-
CAD 14, esto es: Todo, Captura, Polgono-Captura, Borde, ltimo, Previo, Ventana y Polgono-
Ventana.
Los dos argumentos de punto siguientes (matriz de tres valores Doubl e) son obligatorios. En el
caso de Captura y Ventana representan las dos esquinas opuestas por la diagonal. En el caso
de Polgono (Captura o Ventana) y Borde, el primer argumento DblPto1 debe contener una
matriz con todos los puntos que definen el polgono o el borde, y se debe suministrar un ar-
gumento DblPto2 ficticio; en este caso resulta preferible utilizar el mtodo Sel ect ByPol ygon
(que luego veremos). En el caso de modos que no necesitan puntos, como Todo, ltimo y Pre-
vio, los dos puntos se deben suministrar como argumentos ficticios que luego no se van a utili-
zar.
El argumento VarTipoFiltro (Var i ant ) permite especificar un filtro de seleccin, de manera
similar a la funcin de AutoLISP SSGET. El ltimo argumento permite especificar filtros para los
datos extendidos.
Sel ect At Poi nt . Selecciona el objeto que pasa por el punto indicado y lo aade a un conjunto
de seleccin. Su sintaxis de utilizacin es:
Cal l ObjConjuntoSel. Sel ect At Poi nt ( DblPto, VarTipoFiltro, VarDatoFiltro)
DblPto es una matriz de tres valores Doubl e. Los dos ltimos argumentos como en el mtodo
Sel ect .
Sel ect ByPol ygon. Selecciona entidades incluidas dentro de un polgono definido por una lista
de puntos suministrada (y las aade a un conjunto de seleccin). Su sintaxis de utilizacin es:
Cal l ObjConjuntoSel. Sel ect ByPol ygon( IntModo, DblListaPtos, VarTipoFiltro, VarDa-
toFiltro)
El argumento IntModo es un valor I nt eger que define el tipo o modo de seleccin que se eje-
cutar sobre los objetos. Admite tambin las siguientes constantes:
acSel ect i onSet Cr ossi ng
acSel ect i onSet Cr ossi ngPol ygon
acSel ect i onSet Fence
DblListaPtos es una matriz de puntos con las esquinas del polgono. Los dos ltimos argu-
mentos como en el mtodo Sel ect .
Sel ect OnScr een. Permite seleccionar objetos en pantalla (tras el prompt Desi gnar obj e-
t os: , o Sel ect obj ect s: en ingls) que sern aadidos a un conjunto de seleccin. Su sin-
taxis de utilizacin es:
Cal l ObjConjuntoSel. Sel ect OnScr een( VarTipoFiltro, VarDatoFiltro)
Los dos argumentos como en el mtodo Sel ect .
NOTA: En todos estos mtodos de seleccin, los argumentos VarTipoFiltro y VarDatoFiltro
son opcionales.
Veamos el siguiente ejemplo:
Opt i on Expl i ci t

Di mAcadDoc As Obj ect
Di mAcadModel As Obj ect
Di mL nea As Obj ect
Di mC r cul o As Obj ect
Di mGr upo1 As Obj ect

Sub Macro()
Set AcadDoc =GetObject(, "AutoCAD.Application").ActiveDocument
Set AcadModel =AcadDoc.ModelSpace

Dim Pto1(2) As Double
Dim Pto2(2) As Double
Pto1(0) =100: Pto1(1) =100: Pto1(2) =0
Pto2(0) =200: Pto2(1) =200: Pto2(2) =0
Set Lnea =AcadModel.AddLine(Pto1, Pto2)
Set Crculo =AcadModel.AddCircle(Pto1, 10)
Set Grupo1 =AcadDoc.SelectionSets.Add("Prueba")
Call Grupo1.SelectOnScreen
Grupo1.Erase
End Sub
Esta macro dibuja una lnea y un crculo en pantalla. Tras crear un nuevo conjunto de seleccin
(Gr upo1) se permite seleccionar en pantalla los objetos que se insertarn en l. Despus de
esta designacin los objetos se borran.
NOTA: Ms adelante veremos como seleccionar tambin en pantalla puntos, ngulos, distan-
cias, etctera.
DOCE.8.11. Coleccin de estilos de texto y el
objeto
estilo de texto
La coleccin de estilos de texto (Text St yl es) la constituyen todos los objetos de estilo de tex-
to del documento actual activo, o sea, los estilos de texto creados actualmente.
Propiedades de la coleccin de estilos de texto:
Appl i cat i on
Count
Mtodos de la coleccin de estilos de texto:
Add I t em
Las propiedades y mtodos expuestos estn ya estudiados.
El objeto simple de esta coleccin es un objeto de estilo de texto. Los objetos de estilo de tex-
to poseen las siguientes propiedades y mtodos:
Propiedades de los objetos de estilo de texto:
Appl i cat i on
BigFontFile
FontFile
Hei ght
LastHeight
Name
Obl i queAngl e
Text Gener at i onFl ag
Wi dt h
Mtodos de los objetos de estilo de texto:
Del et e
Get XDat a
Set XDat a
Veamos estas nuevas propiedades aplicables nicamente a estilos de texto.
Bi gFont Fi l e. Permite especificar u obtener el nombre de archivo de fuente grande (para
tipos de letra asiticos, por ejemplo) asociado con el estilo de texto. La sintaxis para asignar
un archivo es:
ObjEstiloTexto. Bi gFont Fi l e = StrNombreArch
donde StrNombreArch es una cadena (tipo de dato St r i ng).
La sintaxis para obtener o extraer el archivo de texto de fuente grande de un estilo de texto
es:
StrNombreArch = ObjEstiloTexto. Bi gFont Fi l e
donde StrNombreArch es una cadena (tipo de dato St r i ng).
NOTA: El nico tipo de archivo vlido es el de extensin . SHX.
Font Fi l e. Permite especificar u obtener el nombre de archivo de fuente principal o primario
asociado con el estilo de texto. La sintaxis para asignar un archivo es:
ObjEstiloTexto. Font Fi l e = StrNombreArch
donde StrNombreArch es una cadena (tipo de dato St r i ng).
La sintaxis para obtener o extraer el archivo de texto de fuente principal de un estilo de texto
es:
StrNombreArch = ObjEstiloTexto. Font Fi l e
donde StrNombreArch es una cadena (tipo de dato St r i ng).
NOTA: Los tipos de archivo vlidos son . PFA, . PFB, . SHX, . TTF.
Last Hei ght . Asigna u obtiene la ltima altura de texto utilizada. Para asignar:
ObjEstiloTexto. Last Hei ght = DblltimaAltura
donde DblltimaAltura es un valor Doubl e.
La sintaxis para obtener:
DblltimaAltura = ObjEstiloTexto. Last Hei ght
donde DblltimaAltura es un valor Doubl e.
DOCE.8.12. Coleccin de SCPs y el objeto SCP
La coleccin de SCPs (User Coor di nat eSyst ems) la constituyen todos los objetos de SCP del
documento actual activo, esto es, los SCPs guardados.
Propiedades de la coleccin de SCPs:

Appl i cat i on
Count
Mtodos de la coleccin de SCPs:
Add
I t em
Las propiedades y mtodos expuestos estn ya estudiados.
NOTA: El mtodo Add hemos visto que tena una sintaxis especial para la coleccin de bloques.
Veremos ahora la sintaxis especial para la coleccin de SCPs.
Set ObjSCP = ObjColeccin. Add( DblOrigen, DblPtoEjeX, DblPtoEjeX, StrNombre)
DblOrigen es una coordenada 3D (matriz de tres valores Doubl e) en el SCU que especifica
dnde se aadir el SCP. DblPtoEjeX y DblPtoEjeY son dos coordenadas 3D tambin (matri-
ces de tres valores Doubl e cada una) en el SCU que indican sendos puntos en la parte positiva
de los ejes X e Y para el SCP; la direccin positiva del eje Z queda definida por la regla de la
"mano derecha". StrNombre es el nombre (St r i ng) del SCP que se aadir a la coleccin.
Si nos damos cuenta lo que hacemos es definir un SCP mediante tres puntos: el punto de ori-
gen, un punto en el eje X y un punto en el eje Y.
El objeto simple de la coleccin de SCPs es un objeto de SCP. Los objetos de SCP poseen las
siguientes propiedades y mtodos:
Propiedades de los objetos de SCP:

Appl i cat i on
Name
Or i gi n
XVector
YVector
Mtodos de los objetos de SCP:
Del et e
GetUCSMatrix
Get XDat a
Set XDat a
Observamos que existen dos nuevas propiedades y un mtodo nuevo que an no conocemos.
Pasaremos pues a estudiar esto.
Primero las propiedades:
XVect or . Asigna u obtiene la direccin X del SCP. Para asignar:
ObjSCP. XVect or = DblVectorX
donde DblVectorX es un array de tres valores Doubl e. Esta caracterstica est controlada
tambin por la variable de sistema de AutoCAD UCSXDI R.
Para obtener:
VarVectorX = ObjSCP. XVect or
YVect or . Asigna u obtiene la direccin Y del SCP. Para asignar:
ObjSCP. YVect or = DblVectorY
donde DblVectorY es un array de tres valores Doubl e. Esta caracterstica est controlada por
la variable de sistema de AutoCAD UCSYDI R.
Para obtener:
VarVectorY = ObjSCP. YVect or
Ahora el mtodo:
Get UCSMat r i x. Obtiene la matriz de transformacin del objeto de SCP al que se aplica el m-
todo. Esta matriz de 4 4 define las rotaciones y traslaciones de cada eje del SCP respecto al
Sistema Universal. Sintaxis:
VarMatriz = ObjSCP. Get UCSMat r i x
donde VarMatriz es una variable que habr sido declarada como Var i ant , aunque recoger
una matriz de 4 4 elementos Doubl e. Despus podremos acceder a cada valor por medio de
ndices, como hemos hecho otras veces.
DOCE.8.13. Coleccin de vistas y el objeto vista
La coleccin de vistas (Vi ews) la constituyen todos los objetos de vista del documento actual
activo, esto es, las vistas guardadas.
Propiedades de la coleccin de vistas:
Appl i cat i on
Count
Mtodos de la coleccin de vistas:
Add
I t em
Las propiedades y mtodos expuestos estn ya estudiados.
El objeto simple de esta coleccin es un objeto de vista. Los objetos de vista poseen las si-
guientes propiedades y mtodos:
Propiedades de los objetos de vista:
Appl i cat i on
Cent er
Direction
Hei ght
Name
Target
Wi dt h
Mtodos de los objetos de vista:
Del et e
Get XDat a
Set XDat a
Las nuevas propiedades Di r ect i on y Tar get se explican a continuacin.
Di r ect i on. Asigna u obtiene la direccin de la vista para una visualizacin tridimensional.
Para asignar:
ObjNoGrfico. Di r ect i on = DblVector
Para obtener:
VarVector = ObjNoGrfico. Di r ect i on
donde DblVector es un array de tres valores Doubl e. Es un vector de direccin desde donde el
dibujo se ver. Esta propiedad es similar al comando PTOVI STA (VPOI NT en ingls) de Auto-
CAD.
Tar get . Asigna u obtiene el punto objetivo de una vista (en este caso). Para asignar:
ObjNoGrfico. Tar get = DblPuntoObjetivo
Para obtener:
VarPuntoObjetivo = ObjNoGrfico. Tar get
donde DblPuntoObjetivo es un array de tres valores Doubl e. Como siempre, pare recoger
utilizaremos una variable declarada como Var i ant .
DOCE.8.14. Coleccin de ventanas y el objeto
ventana
La coleccin de ventanas (Vi ewpor t s) la constituyen todos los objetos de ventana del docu-
mento actual activo en el Espacio Modelo, esto es, las ventanas grficas en mosaico activas
actualmente.
Propiedades de la coleccin de ventanas:
Appl i cat i on
Count
Mtodos de la coleccin de ventanas:
Add
Del et e
I t em
Las propiedades y mtodos expuestos estn ya estudiados.
El objeto simple de esta coleccin es un objeto de ventana grfica. Los objetos de ventana
grfica poseen las siguientes propiedades y mtodos:
Propiedades de los objetos de ventana:
Appl i cat i on
Cent er
Di r ect i on
GridOn
Hei ght
LowerLeftCorner
Name
OrthoOn
SnapBasePoint
SnapOn
SnapRotationAngle
StatusID
Tar get
UCSIconAtOrigin
UCSIconOn
UpperRightCorner
Wi dt h
Mtodos de los objetos de ventana:
GetGridSpacing
GetSnapSpacing
Get XDat a
SetGridSpacing
SetSnapSpacing
SetView
Set XDat a
Split
ZoomAll
ZoomCenter
ZoomExtents
ZoomPickWindow
ZoomScal ed
ZoomWi ndow
Comencemos por las nuevas propiedades.
Gr i dOn. Obtiene y asigna el valor de estado de la rejilla en una ventana. Es un valor boolea-
no (Bool ean) que si es Tr ue especifica que la rejilla est activada y si, por el contrario, es
Fal se, especifica que la rejilla est desactivada.
La sintaxis para asignar este valor es:
ObjVentana. Gr i dOn = BooRejilla
Y la sintaxis para obtenerlo:
BooRejilla = ObjVentana. Gr i dOn
Lower Lef t Cor ner . Obtiene el vrtice inferior izquierdo de la ventana grfica, en porcentaje
de ancho y alto de pantalla, tal como se almacenan las configuraciones de ventanas mosaico
en AutoCAD. Sintaxis:
VarEsquinaII = ObjVentana. Lower Lef t Cor ner
VarEsquinaII recoger una matriz de valores Doubl e.
Or t hoOn. Obtiene y asigna la condicin del modo Orto en la ventana activa actualmente. Sin-
taxis para asignar:
ObjVentana. Or t hoOn = BooModoOrto
Sintaxis para obtener:
BooModoOrto = ObjVentana. Or t hoOn
BooModoOrto tomar el valor Tr ue si el modo Orto est activado o se quiere activar; toma-
r el valor Fal se si el modo Orto est desactivado o se quiere desactivar.
SnapBasePoi nt . Especifica el punto base para el forzado de cursor/rejilla en la ventana ac-
tual.
La sintaxis para asignar este valor es:
ObjVentana. SnapBasePoi nt = DblPtoBase

Y la sintaxis para obtenerlo:
VarPtoBase = ObjVentana. SnapBasePoi nt
Evidentemente, DblPtoBase, al ser un punto, ser una matriz de tres valores Doubl e. Si es
para obtener, recordar que habremos de guardarlo en una variable Var i ant .
SnapOn. Especifica el estado del forzado de cursor.
La sintaxis para asignar este valor es:
ObjVentana. SnapOn = BooEstadoForzcursor
Y la sintaxis para obtenerlo:
BooEstadoForzcursor = ObjVentana. SnapOn
BooEstadoForzcursor ser un valor Bool ean que adems admite las siguientes constantes:
acOn
acOf f
que especifican la activacin (acOn) o no activacin (acOf f ) del Forzcursor.
SnapRot at i onAngl e. Es el ngulo de rotacin en radianes (valor Doubl e de 0 a 6. 28) del
forzado de cursor en la ventana con respecto al SCU.
La sintaxis para asignar este valor es:
ObjVentana. SnapRot at i onAngl e = DblnguloRotacin
Y la sintaxis para obtenerlo:
DblnguloRotacin = ObjVentana. SnapRot at i onAngl e
St at usI D. Obtiene nicamente el estado de activacin de una ventana. El valor se recoge en
una variable declarada como Bool ean: si guarda Tr ue la ventana est activada, si guarda Fal -
se la ventana est desactivada:
BooEstadoActivacin = ObjVentana. St at usI D
UCSI conAt Or i gi n. Especifica si el icono o smbolo del SCP se muestra en el origen de coor-
denadas o no. Todo ello es controlado por un valor Bool ean que, si es Tr ue quiere decir que el
SCP aparece en el origen y, si es Fal se, que no.
La sintaxis para asignar este valor es:
ObjVentana. UCSI conAt Or i gen = BooSimbSCPOrigen
Y la sintaxis para obtenerlo:
BooSimbSCPOrigen = ObjVentana. UCSI conAt Or i gi n
UCSI conOn. Especifica si el icono o smbolo del SCP se visualiza o no. Todo ello es controlado
por un valor Bool ean que, si es Tr ue quiere decir que el SCP se visualiza y, si es Fal se, que
no se visualiza.
La sintaxis para asignar este valor es:
ObjVentana. UCSI conOn = BooSimbSCPActivo

Y la sintaxis para obtenerlo:
BooSimbSCPActivo = ObjVentana. UCSI conOn
Upper Ri ght Cor ner . Obtiene el vrtice superior derecho de la ventana grfica, en porcentaje
de ancho y alto de pantalla, tal como se almacenan las configuraciones de ventanas mosaico
en AutoCAD. Sintaxis:
VarEsquinaSD = ObjVentana. Upper Ri ght Cor ner
VarEsquinaSD ser una matriz de valores Doubl e.
Veamos ahora los nuevos mtodos.
Get Gr i dSpaci ng. Obtiene el espaciado de la rejilla para la ventana:
Cal l ObjVentana. Get Gr i dSpaci ng( DblEspXRejilla, DblEspYRejilla)
DblEspXRejilla y DblEspYRejilla son dos variables declaradas como Doubl e que guardarn
el espaciado en X y en Y respectivamente.
Get SnapSpaci ng. Obtiene el espaciado del forzado de cursor para la ventana:
Cal l ObjVentana. Get SnapSpaci ng( DblEspXForzcursor, DblEspYForzcursor)
DblEspXForzcursor y DblEspYForzcursor son dos variables declaradas como Doubl e que
guardarn el espaciado en X y en Y respectivamente.
Set Gr i dSpaci ng. Asigna el espaciado de la rejilla para la ventana:
Cal l ObjVentana. Set Gr i dSpaci ng( DblEspXRejilla, DblEspYRejilla)
DblEspXRejilla y DblEspYRejilla son dos valores Doubl e que representan el espaciado en
X y en Y respectivamente.
Set SnapSpaci ng. Asigna el espaciado del forzado de cursor para la ventana:
Cal l ObjVentana. Set SnapSpaci ng( DblEspXForzcursor, DblEspYForzcursor)
DblEspXForzcursor y DblEspYForzcursor son dos valores Doubl e que representan el espa-
ciado en X y en Y respectivamente. El valor inicial para X e Y es 1. 0000.
Set Vi ew. Establece en la ventana grfica la visualizacin de un objeto de vista. El argumento
suministrado deber ser de tipo Obj ect , conteniendo una vista existente en el dibujo:
Cal l ObjVentana. Set Vi ew( ObjVista)
ObjVista es un objeto de vista de los explicados en la seccin anterior.
Spl i t . Divide la ventana grfica actual en el nmero de partes indicado:
Cal l ObjVentana. Spl i t ( IntNmVentanas)
IntNmVentanas ha de ser un nmero entero, aunque tambin se admiten las siguientes cons-
tantes (las cuales dicen relacin a las diferentes formas predeterminadas de AutoCAD de divi-
dir una ventana):
acVi ewpor t 2Hor i zont al
acVi ewpor t 2Ver t i cal
acVi ewpor t 3Lef t
acVi ewpor t 3Ri ght
acVi ewpor t 3Hor i zont al
acVi ewpor t 3Ver t i cal
acVi ewpor t 3Above
acVi ewpor t 3Bel ow
acVi ewpor t 4
La siguiente macro muestra la manera de dividir la ventana grfica actual en tres ventanas con
una posicin predefinida de AutoCAD:
Opt i on Expl i ci t

Di mAcadDoc As Obj ect
Di mAcadModel As Obj ect
Di mVent ana1 As Obj ect

Sub Macr o( )
Set AcadDoc = Get Obj ect ( , " Aut oCAD. Appl i cat i on" ) . Act i veDocument
Set AcadModel = AcadDoc. Model Space

Set Vent ana1 = AcadDoc. Vi ewpor t s. Add( " Nueva" )
Cal l Vent ana1. Spl i t ( acVi ewpor t 3Lef t )
Set AcadDoc. Act i veVi ewpor t = Vent ana1
End Sub
Primero hemos de crear un nuevo objeto de ventana en la coleccin de ventanas, despus di-
vidirlo a nuestro gusto y, por ltimo, definirlo como la ventana actual (recordemos la propie-
dad Act i veVi ewpor t del objeto de documento activo).
ZoomAl l . Realiza un Zoom Todo en la ventana actual:
ObjVentana. ZoomAl l
ZoomCent er . Realiza un Zoom Centro en la ventana actual. Hay que proporcionar el centro en
cuestin (matriz de tres valores Doubl e) y el factor de ampliacin (Doubl e).
Cal l ObjVentana. ZoomCent er ( DblPtoCentro, DblFactorAmpl)
ZoomExt ens. Realiza un Zoom Extensin en la ventana actual:
ObjVentana. ZoomExt ens
ZoomPi ckWi ndow. Realiza un Zoom Ventana en la ventana actual. Los puntos diagonales de la
ventana se marcan en pantalla con el dispositivo sealador al mensaje habitual:
ObjVentana. ZoomPi ckWi ndow
ZoomScal ed. Realiza un Zoom Factor en la ventana actual. Hay que proporcionar el factor de
escala y el tipo de escala:
Cal l ObjVentana. ZoomScal ed( DblFactorEscala, IntTipoEscala)
DblFactorEscala es un valor Doubl e que representa el factor de escala. IntTipoEscala es un
valor I nt eger que adems admite las tres siguientes constantes (absoluta, relativa y relativa
al Espacio Papel):
acZoomScal edAbsol ut e
acZoomScal edRel at i ve
acZoomScal edRel at i vePSpace
ZoomWi ndow. Realiza un Zoom Ventana en el que se proporcionan los puntos diagonales como
argumentos del mtodo:
Cal l ObjVentana. ZoomWi ndow( DblPtoInfIzq, DblPtoSupDcha)
DblPtoInfIzq y DblPtoSupDcha son los puntos (matriz de tres valores Doubl e) inferior iz-
quierda y superior derecha, respectivamente, de la ventana.
DOCE.8.14.1. Ventanas del Espacio Papel
Todo lo visto hasta aqu en cuestin de ventanas se refiere a las ventanas del Espacio Modelo
de AutoCAD 14. A la hora de crear y gestionar ventanas de Espacio Papel se recurre a un m-
todo exclusivo de la coleccin de objetos de Espacio Papel: AddPVi ewpor t . Si recordamos, em-
plazamos el estudio de este mtodo a esta seccin.
La sintaxis de AddPVi ewpor t es:
Set ObjVentanaPapel = ObjColEspacioPapel. AddPVi ewpor t ( DblCentro, DblAltura,
DblAnchura)
Propiedades de los objetos de ventana de Espacio Papel:
Appl i cat i on
Cent er
Di r ect i on
Ent i t yName
Ent i t yType
Gr i dOn
Handl e
Hei ght
Layer
LensLength
Li net ype
Li net ypeScal e
Obj ect I D
RemoveHiddenLines
SnapBasePoi nt
SnapOn
SnapRot at i onAngl e
Tar get
TwistAngle
UCSI conAt Or i gi n
UCSI conOn
Vi si bl e
Wi dt h
Mtodos de los objetos de ventana de Espacio Papel:
Ar r ayPol ar
Ar r ayRect angul ar
Copy
Display
Er ase
Get Boundi ngBox
Get Gr i dSpaci ng
Get SnapSpaci ng
Get XDat a
Hi ghl i ght
I nt er sect Wi t h
Mi r r or
Mi r r or 3D
Move
Rot at e
Rot at e3D
Scal eEnt i t y
Set Gr i dSpaci ng
Set SnapSpaci ng
Set XDat a
Tr ansf or mBy
Updat e
ZoomAl l
ZoomCent er
ZoomExt ent s
ZoomPi ckWi ndow
ZoomScal ed
ZoomWi ndow
DblCentro es un valor que especifica el punto (array de tres valores Doubl e) central de la ven-
tana. DblAltura es un valor Doubl e que especifica al altura de la ventana. DblAnchura es un
valor Doubl e que especifica al anchura de la ventana. Estos dos ltimos valores han de ser
positivos.
Pasemos a explicar las nuevas propiedades y el nuevo mtodo.
LensLengt h. Especifica la longitud de la lente (en milmetros) para la vista en perspectiva.
Este valor Doubl e est tambin controlado por la variable de sistema LENSLENGTH.
La sintaxis para asignar este valor es:
ObjVentanaPapel. LensLengt h = DblLongLente
Y la sintaxis para obtenerlo:
DblLongLente = ObjVentanaPapel. LensLengt h
RemoveHi ddenLi nes. Especifica si las lneas ocultas han de ser trazadas o imprimidas en de-
terminada ventana. Su sintaxis para asignar un valor es la que sigue:
ObjVentanaPapel. RemoveHi ddenLi nes = BooLneasOcultas
Y la sintaxis para obtenerlo:
BooLneasOcultas = ObjVentanaPapel. RemoveHi ddenLi nes
BooLneasOcultas es un valor Bool ean; si es Tr ue las lneas ocultas no aparecen trazadas, si
es Fal se s.
Twi st Angl e. Obtiene el ngulo de ladeo de una ventana. Su sintaxis es la que sigue:
DblngLadeo = ObjVentanaPapel. Twi st Angl e
DblngLadeo es un valor Doubl e.
El mtodo Di spl ay a continuacin.
Di spl ay. Este mtodo activa o desactiva una ventana de Espacio Papel:
ObjVentanaPapel. Di spl ay( BooEstado)
BooEstado es un valor Bool ean; Tr ue activa la ventana, Fal se la desactiva.
Veamos el ejemplo que sigue:
Opt i on Expl i ci t
Di mAcadDoc As Obj ect
Di mAcadPapel As Obj ect
Di mVent anaPapel As Obj ect
Di mCent r oVent ana( 1 To 3) As Doubl e

Sub Macr o( )
Set AcadDoc = Get Obj ect ( , " Aut oCAD. Appl i cat i on" ) . Act i veDocument
Set AcadPapel = AcadDoc. Paper Space

Cent r oVent ana( 1) = 100: Cent r oVent ana( 2) = 100: Cent r oVent ana( 3) = 0
Set Vent anaPapel = AcadPapel . AddPVi ewpor t ( Cent r oVent ana, 100, 100)
Vent anaPapel . Di spl ay ( Tr ue)
End Sub
Con esta macro creamos una ventana flotante de Espacio Papel. Al crearla, por defecto apare-
ce desactivada. Para activarla utilizamos el mtodo Di spl ay.
Hasta aqu todo lo referente a las colecciones de objetos. Hemos aprendido muchos detalles
que ya nos harn programar medianamente bien. Sin embargo, para optar por una programa-
cin aceptable necesitamos conocer algunos mecanismos ms, sobre todo los que veremos en
la seccin siguiente.
3 fase intermedia de ejercicios
Escribir una programa en el mdulo VBA que permita cambiar el tipo de lnea de uno o va-
rios objetos. El letrero de dilogo que manejar el programa es el siguiente (por ejemplo):

El funcionamiento del programa es el siguiente. Al iniciar el letrero se rellenar la lista desple-
gable Tipo de lnea: con los nombres de los tipos de lnea actualmente cargados en el dibujo.
La lista Tipo de objeto: permanecer vaca por el momento.
Al pulsar el botn Designar< se cerrar el cuadro y se permitir designar en pantalla uno o
varios objetos. Tras el final de la designacin o seleccin, se retornar al cuadro en el que se
rellenar la lista desplegable Tipo de objeto: con el tipo (lnea, crculo, spline...) y el nmero
ID de identificacin, entre parntesis, de cada uno de los objetos seleccionados.
La manera de aplicar ahora tipos de lnea a los objetos es escogiendo de la lista superior la
entidad en concreto y, de la lista inferior, el tipo de lnea que ser asignado a ella. Tras esto se
pulsa el botn Aplicar para aplicar los cambios. Los cambios deben ser evidentes de inmediato
(al pulsar Aplicar) pero el letrero no ha de cerrarse; por si acaso se quieren realizar ms modi-
ficaciones o cambios.
El botn Salir cierra el letrero de dilogo y termina la aplicacin.
Autor: J onathan Prstamo Rodrguez.
Para: La Web del Programador.
De estas dos colecciones vistas hasta ahora los objetos componentes simples son todos los ya
estudiados: lneas, crculos, arcos, referencias de bloque...
DOCE.8.3. Coleccin de bloques y el objeto blo-
que
La coleccin de bloques (Bl ocks) la constituyen todos los bloques del documento actual activo.
Las propiedades y mtodos de esta coleccin las vemos seguidamente.
Propiedades de la coleccin de bloques:
Appl i cat i on
Count
Mtodos de la coleccin de bloques:
Add
I t em
Slo un nuevo mtodo hemos de explicar:
Add. Este mtodo aade un nuevo objeto a la coleccin indicada. Su sintaxis especfica para
la coleccin de bloques es:
Set ObjBloque = ObjColBloques. Add( DblPtoIns, StrNombre)
DblPtoIns es un valor Doubl e para el punto de insercin (matriz de tres valores Doubl e) y
StrNombre es una cadena (St r i ng) para el nombre del bloque.
El objeto resultante de esta operacin es un objeto de bloque, esto es, un bloque. Los objetos
de bloque poseen las siguientes propiedades y mtodos:
Propiedades de los objetos de bloque:
Appl i cat i on
Name
Or i gi n
Mtodos de los objetos de bloque:
Add3DFace
Add3DMesh
Add3DPol y
AddAr c
AddAt t r i but e
AddBox
AddCi r cl e
AddCone
AddCust omObj ect
AddCyl i nder
AddDi mAl i gned
AddDi mAngul ar
AddDi mDi amet r i c
AddDi mOr di nat e
AddDi mRadi al
AddDi mRot at ed
AddEl l i pse
AddEl l i pt i cal Cone
AddEl l i pt i cal Cyl i nder
AddExt r udedSol i d
AddExt r udedSol i dAl ongPat h
AddHat ch
AddLeader
AddLi ght Wei ght Pol yl i ne
AddLi ne
AddMText
AddPoi nt
AddPol yl i ne
AddRast er
AddRay
AddRegi on
AddRevol vedSol i d
AddShape
AddSol i d
AddSpher e
AddSpl i ne
AddText
AddTol er ance
AddTor us
AddTr ace
AddWedge
AddXLi ne
Delete
I nser t Bl ock
I t em
Veamos un ejemplo de macro VBA en el que se crea un bloque con una sola lnea:
Opt i on Expl i ci t

Di mAcad As Obj ect
Di mAcadDoc As Obj ect
Di mAcadModel As Obj ect
Di mAcadBl oq As Obj ect
Di mLi n As Obj ect

Sub Macr o( )
Set Acad = Get Obj ect ( , " Aut oCAD. Appl i cat i on" )
Set AcadDoc = Acad. Act i veDocument
Set AcadModel = AcadDoc. Model Space
Set AcadBl oq = AcadDoc. Bl ocks

Di mBl oq As Obj ect
Di mPt oI ns( 1 To 3) As Doubl e
Di mPt o2( 1 To 3) As Doubl e

Pt oI ns( 1) = 10: Pt oI ns( 2) = 10: Pt oI ns( 3) = 0
Pt o2( 1) = 100: Pt o2( 2) = 100: Pt o2( 3) = 0
Set Bl oq = AcadBl oq. Add( Pt oI ns, " pqpq" )
Set Bl oq = Bl oq. AddLi ne( Pt oI ns, Pt o2)
End Sub
Lo que se debe hacer en primera instancia es crear el objeto de bloque en la coleccin de blo-
ques (Set Bl oq = AcadBl oq. Add( Pt oI ns, " pqpq" ) ); es como si creramos un bloque vaco.
Despus se le aaden entidades de dibujo, como en este caso una lnea (Set Bl oq =
Bl oq. AddLi ne( Pt oI ns, Pt o2) ) con los mtodos ya estudiados, ya que estos mtodos, como
hemos visto, son propios tambin de la coleccin de objetos de bloque.
El nuevo mtodo no estudiado an de los objetos que son bloques es:
Del et e. Del et e borra o elimina el objeto indicado. Hemos de indicar el nombre de dicho ob-
jeto (bloque, estilo de acotacin, SCP...) como una cadena (St r i ng), pero esto no es necesario
ms que para la coleccin de ventanas:
ObjNoGrafico. Del et e( StrNombreObj)
DOCE.8.4. Coleccin de diccionarios y el objeto
diccionario
La coleccin de diccionarios (Di ct i onar i es) la constituyen todos los objetos de diccionario del
documento actual activo.
Propiedades de la coleccin de diccionarios:
Appl i cat i on
Count
Mtodos de la coleccin de diccionarios:
Add
I t em
Las propiedades y mtodos expuestos estn ya estudiados.
NOTA: El mtodo Add hemos visto que tena una sintaxis especial para la coleccin de bloques.
Pues bien, para ella y para la coleccin de SCPs existen estas sintaxis especiales (esta ltima
ya se ver en su momento). Para el resto de las colecciones la sintaxis del mtodo Add es la
siguiente:
Set ObjComponenteCol = ObjColeccin. Add( StrNombre)
StrNombre es el nombre (St r i ng) del objeto que se aadir a la coleccin.
Sigamos. El objeto simple de la coleccin de diccionarios es un objeto de diccionario. Los obje-
tos de diccionario poseen las siguientes propiedades y mtodos:
Propiedades de los objetos de diccionario:
Appl i cat i on
Name
Mtodos de los objetos de diccionario:
AddObject
Del et e
GetName
GetObject
Get XDat a
Remove
Rename
Replace
Set XDat a
Un diccionario es un sistema para almacenar y recuperar objetos con una cadena de palabras
clave asociada. El objeto puede ser referenciado en un diccionario mediante su palabra clave.
Un diccionario puede contener cualquier tipo de objeto, incluso otro diccionario.
NOTA: Este objeto de diccionario no tiene nada que ver con el diccionario ortogrfico de co-
rreccin de AutoCAD.
Los nuevos mtodos de los objetos de diccionario que hemos de estudiar son los que siguen a
continuacin.
AddObj ect . Aade un nuevo objeto a un diccionario. Si la entrada ya existe es sustituida por
el nuevo objeto, si no simplemente se agrega. Los dos argumentos para este mtodo (nombre
de objeto y palabra clave) han de ser cadenas (St r i ng). Veamos la sintaxis:
Set ObjNoGrfico = ObjDiccionario. AddObj ect ( StrPalClave, StrNomObjeto)
Get Name. Devuelve el nombre (palabra clave) de un objeto de un diccionario:
StrNombre = ObjDiccionario. Get Name( ObjEnDiccionario)
Get Obj ect . Devuelve el objeto que se corresponde con una palabra clave en un diccionario:
ObjEnDiccionario = ObjDiccionario. Get Obj ect ( StrPalClave)
Remove. Elimina el objeto de un diccionario indicado por su palabra clave:
Cal l ObjDiccionario. Remove( StrPalClave)
Rename. Cambia el nombre (palabra clave) del objeto de un diccionario indicado por su pala-
bra clave:
Cal l ObjDiccionario. Rename( StrNombreAntiguo, StrNombreNuevo)
Repl ace. Cambia una entrada en un diccionario por otra dada:
Cal l ObjDiccionario. Repl ace( StrPalClave, ObjObjetoNuevo)
DOCE.8.5. Coleccin de estilos de acotacin y
el
objeto estilo de acotacin
La coleccin de estilos de acotacin (Di mSt yl es) la constituyen todos los objetos de estilos de
cota del documento actual activo, es decir, los estilos de acotacin que todos conocemos.
Propiedades de la coleccin de estilos de acotacin:
Appl i cat i on
Count
Mtodos de la coleccin de estilos de acotacin:
Add
I t em
Las propiedades y mtodos expuestos estn ya estudiados.
El objeto simple de esta coleccin es un objeto de estilo de acotacin. Los objetos de estilo de
acotacin poseen las siguientes propiedades y mtodos:
Propiedades de los objetos de estilo de acotacin:
Appl i cat i on
Name
Mtodos de los objetos de estilo de acotacin:
Del et e
Get XDat a
Set XDat a
Las propiedades y mtodos expuestos estn ya estudiados.
DOCE.8.6. Coleccin de grupos y el objeto gru-
po
La coleccin de grupos (Gr oups) la constituyen todos los objetos de grupo del documento ac-
tual activo.
Propiedades de la coleccin de grupos:
Appl i cat i on
Count
Mtodos de la coleccin de grupos:
Add
I t em
Las propiedades y mtodos expuestos estn ya estudiados.
El objeto simple de esta coleccin es un objeto de grupo. Los objetos de grupo son conjuntos
de seleccin con nombre y poseen las siguientes propiedades y mtodos:
Propiedades de los objetos de grupo:
Appl i cat i on
Col or
Count
Ent i t yName
Ent i t yType
Handl e
Layer
Li neType
Li net ypeScal e
Name
Obj ect I D
Vi si bl e
Mtodos de los objetos de grupo:
AppendItems
Del et e
Get XDat a
Hi ghl i ght
I t em
RemoveItems
Set XDat a
Updat e
Los mtodos nuevos son:
AppendI t ems. Aade una o ms entidades grficas al grupo:
Cal l ObjGrupo. AppendI t ems( ObjGrficos)
ObjGrficos es una matriz de objetos grficos de AutoCAD.
RemoveI t ems. Elimina los objetos especificados de un grupo (o tambin de un conjunto de
seleccin):
Cal l Obj Gr upo. RemoveI t ems( Obj Gr f i cos)
ObjGrficos es una matriz de objetos grficos de AutoCAD.
DOCE.8.7. Coleccin de capas y el objeto capa
La coleccin de capas (Layer s) la constituyen todos los objetos de capa del documento actual
activo, es decir, las capas del dibujo.
Propiedades de la coleccin de capas:
Appl i cat i on
Count
Mtodos de la coleccin de capas:
Add
I t em
Las propiedades y mtodos expuestos estn ya estudiados.
Por ejemplo, la siguiente macro creara una nueva capa llamadas EJ ES:
Opt i on Expl i ci t

Di mAcadDoc As Obj ect
Di mAcadModel As Obj ect

Sub Macr o( )
Set AcadDoc = Get Obj ect ( , " Aut oCAD. Appl i cat i on" ) . Act i veDocument
Set AcadModel = AcadDoc. Model Space
Cal l AcadDoc. Layer s. Add( " ej es" )
End Sub
El objeto simple de esta coleccin es un objeto de capa. Los objetos de capa poseen las si-
guientes propiedades y mtodos:
Propiedades de los objetos de capa:
Appl i cat i on
Col or
Freeze
LayerOn
Li neType
Lock
Name
Mtodos de los objetos de capa:
Del et e
Get XDat a
Set XDat a
Las nuevas propiedades se explican a continuacin.
Fr eeze. La propiedad Fr eeze congela o descongela una capa. Es lo que se denomina en la
versin castellana de AutoCAD 14 la inutilizacin y reutilizacin de capas (representado por
un Sol o un smbolo de hielo, dependiendo de la condicin, en el cuadro de dilogo de capas).
Tambin nos permite obtener el estado en que se encuentra una capa con respecto a este
aspecto.
La sintaxis para asignar un estado con Fr eeze a una capa es:
ObjCapa. Fr eeze = BooEstadoUtilizacin
BooEstadoUtilizacin es un valor Bool ean que puesto a Tr ue indica que la capa se inutiliza
(se congela) y puesto a Fal se indica que la capa se reutiliza o utiliza (se descongela).
La sintaxis para obtener un estado con Fr eeze de una capa es:
BooEstadoUtilizacin = ObjCapa. Fr eeze
BooEstadoUtilizacin es un valor Bool ean que si almacena Tr ue indica que la capa est in-
utilizada y si almacena Fal se indica que la capa est reutilizada o utilizada.
Recordemos que la ventaja de inutilizar o congelar una capa es que es excluida de la regene-
racin, lo que no ocurre por ejemplo al desactivarla simplemente. Tambin decir que una capa
inutilizada no es trazada (por plotter o impresora).
Layer On. La propiedad Layer On activa o desactiva una capa (representado por una bombilla
encendida o apagada, dependiendo de la condicin, en el cuadro de dilogo de capas). Tam-
bin nos permite obtener el estado en que se encuentra una capa con respecto a este aspec-
to.
La sintaxis para asignar un estado con Layer On a una capa es:
ObjCapa. Layer On = BooEstadoActivacin
BooEstadoActivacin es un valor Bool ean que puesto a Tr ue indica que la capa se activa y
puesto a Fal se indica que la capa de desactiva.
La sintaxis para obtener un estado con Layer On de una capa es:
BooEstadoActivacin = ObjCapa. Layer On
BooEstadoActivacin es un valor Bool ean que si almacena Tr ue indica que la capa est acti-
vada y si almacena Fal se indica que la capa est desactivada.
Al desactivar un capa no aparecer en pantalla ni en trazador, pero sus objetos seguirn res-
pondiendo a las regeneraciones del dibujo.
Lock. La propiedad Lock bloquea o desbloquea una capa (representado por un candado
abierto o cerrado, dependiendo de la condicin, en el cuadro de dilogo de capas). Tambin
nos permite obtener el estado en que se encuentra una capa con respecto a este aspecto.
La sintaxis para asignar un estado con Lock a una capa es:
ObjCapa. Lock = BooEstadoBloqueo
BooEstadoBloqueo es un valor Bool ean que puesto a Tr ue indica que la capa se bloquea y
puesto a Fal se indica que la capa de desbloquea.
La sintaxis para obtener un estado con Lock de una capa es:
BooEstadoBloqueo = ObjCapa. Lock
BooEstadoBloqueo es un valor Bool ean que si almacena Tr ue indica que la capa est bloquea-
da y si almacena Fal se indica que la capa est desbloqueada.
Al bloquear una capa no se podr modificar, pero seguir visible y respondiendo a acciones
como, por ejemplo, la utilizacin de modos de referencia en ella.
Veamos un programa de ejemplo de manejo de capas. Este ejercicio maneja el cuadro de di-
logo que se puede observar en esta misma pgina. Su misin es nicamente informativa, es
decir, slo informa del nombre y propiedades de las diferente capas del dibujo actual.
Al ejecutar el programa deber rellenar la lista desplegable con las capas de la sesin de Au-
toCAD en curso y mostrar la primera de ellas (siempre la capa 0) escribiendo en los distintos
cuadros de edicin sus respectivas propiedades.
Al actuar sobre la lista desplegable eligiendo una capa, las casillas de edicin se actualizarn
con los nuevos valores.
Veamos pues el letrero de dilogo comentado y, a continuacin, el listado del programa pro-
piamente dicho.

El listado es el que sigue:
Opt i on Expl i ci t

Di mAcadDoc As Obj ect
Di mAcadModel As Obj ect
Di mAcadCapas As Obj ect
Di mNumCapas As I nt eger

Pr i vat e Sub cbSal i r _Cl i ck( )
End
End Sub

Pr i vat e Sub cbCapas_Change( )
Di m ndi ce As I nt eger

ndi ce = cbCapas. Li st I ndex
t bCol or . Text = AcadCapas. I t em( ndi ce) . Col or
t bTi pol i n. Text = AcadCapas. I t em( ndi ce) . Li net ype
I f AcadCapas. I t em( ndi ce) . Layer On = Tr ue Then
t bAD. Text = " Act i vada"
El se
t bAD. Text = " Desact i vada"
End I f
I f AcadCapas. I t em( ndi ce) . Fr eeze = Tr ue Then
t bI R. Text = " I nut i l i zada"
El se
t bI R. Text = " Ut i l i zada"
End I f
I f AcadCapas. I t em( ndi ce) . Lock = Tr ue Then
t bBD. Text = " Bl oqueada"
El se
t bBD. Text = " Desbl oqueada"
End I f
End Sub

Pr i vat e Sub User For m_I ni t i al i ze( )
Set AcadDoc = Get Obj ect ( , " Aut oCAD. Appl i cat i on" ) . Act i veDocument
Set AcadModel = AcadDoc. Model Space
Set AcadCapas = AcadDoc. Layer s

NumCapas = AcadCapas. Count
Di mi As I nt eger
For i = 0 To Val ( NumCapas - 1)
cbCapas. AddI t emAcadCapas. I t em( i ) . Name
Next i
cbCapas. Text = AcadCapas. I t em( 0) . Name
End Sub
Vemos como en cuanto se corre el programa se hace una llamada al procedimiento cbCa-
pas_Change. Esto es debido a la lnea cbCapas. Text = AcadCapas. I t em( 0) . Name, que en s
ya realiza un cambio en la lista desplegable, por eso se ejecuta el procedimiento anteriormente
dicho. Esta lnea escribe en la casilla de la lista desplegable el primero de los elementos (la
primera capa, la capa 0).
Antes de esto se introducen todos los nombres de capas en la lista. Vemos que no tiene ningn
misterio y que simplemente es limitarse a seguir las pautas y diversas sintaxis de uso que va-
mos estudiando.
Con las extraccin del color, tipo de lnea y dems propiedades, vemos que el proceso es simi-
lar. La nica variante es que se ha introducido un control para averiguar cuando determinados
valores son Tr ue o Fal se y escribir textos en las casillas que resulten ms lgicos al usuario
que Verdadero y/o Falso.
NOTA: Como el cuadro es slo informativo no nos olvidemos de establecer la propiedad St yl e
de la lista desplegable a 2 (f mSt yl eDr opDownLi st ) y las propiedades Locked de las casillas de
edicin a Tr ue. Todo ello para no poder editar valores manualmente. Si quisiramos que el
usuario pudiera entrar en las casillas y variar los valores para cambiar las propiedades de las
capas, nicamente habramos de dejar estas propiedades especificadas como estn y aadir
algo ms de cdigo al programa con las diferentes sintaxis para asignar en lugar de obte-
ner las propiedades de las capas.
DOCE.8.8. Coleccin de tipos de lnea y el obje-
to
tipo de lnea
La coleccin de tipos de lnea (Li net ypes) la constituyen todos los objetos de tipo de lnea del
documento actual activo, es decir, los tipos de lnea cargados en el dibujo.
Propiedades de la coleccin de tipos de lnea:
Appl i cat i on
Count
Mtodos de la coleccin de tipos de lnea:
Add
I t em
Load
Como vemos hay un nuevo mtodo:
Load. Carga en el dibujo actual el tipo de lnea especificado (St r i ng) del archivo de definicin
de tipos de lnea (. LI N) especificado (St r i ng):
Cal l ObjColTiposDeLnea. Load( StrNombreTipoLnea, StrNombreArchivo)
NOTA: Si utilizamos el mtodo Add se crear un nuevo tipo de lnea con las propiedades por
defecto.
El objeto simple de esta coleccin es un objeto de tipo de lnea. Los objetos de tipo de lnea
poseen las siguientes propiedades y mtodos:
Propiedades de los objetos de tipo de lnea:
Appl i cat i on
Description
Name
Mtodos de los objetos de tipo de lnea:
Del et e
Get XDat a
Set XDat a
La nueva propiedad es:
Descr i pt i on. Asigna u obtiene una descripcin (St r i ng) para el tipo de lnea. Esta descrip-
cin es la que aparece en el archivo de definicin . LI N y en el cuadro de gestin de tipos de
lnea, es la representacin de la lnea con caracteres ASCII (puntos, guiones, texto, etc...).
Como mximo puede tener 47 caracteres.
La sintaxis para asignar una descripcin es:
ObjTipoLnea. Descr i pt i on = StrDescripcin
La sintaxis para obtener una descripcin es:
StrDescripcin = ObjTipoLnea. Descr i pt i on
Veamos la siguiente macro de ejemplo en la que se carga un tipo de lnea y se obtiene su des-
cripcin:
Opt i on Expl i ci t

Di mAcadDoc As Obj ect

Sub Macr o( )
Set AcadDoc = Get Obj ect ( , " Aut oCAD. Appl i cat i on" ) . Act i veDocument

I f I sEmpt y( AcadDoc. Li net ypes. I t em( " t r azo_y_punt o" ) ) Then
Cal l AcadDoc. Li net ypes. Load( " t r azo_y_punt o" , " acadi so. l i n" )
End I f

Di mTi poLi n As Obj ect
Set Ti poLi n = AcadDoc. Li net ypes. I t em( " t r azo_y_punt o" )
Di mDescr As St r i ng
Descr = Ti poLi n. Descr i pt i on
MsgBox Descr
End Sub
NOTA: Podemos comprobar que con la nica definicin de AcadDoc nos sirve para este pro-
grama; no hay por qu declarar ms variables de objeto de AutoCAD si no es necesario.
Si intentamos cargar un tipo de lnea y este ya est cargado (o crear un capa que ya existe, un
estilo de texto, etctera), VBA devuelve un error. Para evitar esto hemos de comprobar prime-
ro si dicho tipo de lnea en este caso est ya cargado. Para estos menesteres utilizamos la
funcin de Visual Basic I sEmpt y como se puede observar en el listado.
Tras cargar el tipo de lnea, si no estaba ya cargado, se extrae su descripcin y se muestra con
un MsgBox. El resultado es el siguiente:


NOTA: Si el archivo ACADI SO. LI N no hubiera estado en uno de los directorios de soporte de
AutoCAD 14, habramos de haber indicado la ruta completa al fichero; al igual que ocurra con
los programas en AutoLISP, si recordamos.
DOCE.8.9. Coleccin de aplicaciones registra-
das y el
objeto aplicacin registrada
La coleccin de aplicaciones registradas (Regi st er edAppl i cat i ons) la constituyen todos los
objetos de aplicacin registrada del documento actual activo.
Propiedades de la coleccin de aplicaciones registradas:
Appl i cat i on
Count
Mtodos de la coleccin de aplicaciones registradas:
Add
I t em
Las propiedades y mtodos expuestos estn ya estudiados.
El objeto simple de esta coleccin es un objeto de aplicacin registrada. Los objetos de aplica-
cin registrada poseen las siguientes propiedades y mtodos:
Propiedades de los objetos de aplicacin registrada:
Appl i cat i on
Name
Mtodos de los objetos de tipo de aplicacin registrada:
Del et e
Get XDat a
Set XDat a
Las propiedades y mtodos expuestos estn ya estudiados.
DOCE.8.10. Coleccin de conjuntos de selec-
cin y el
objeto conjunto de seleccin
La coleccin de conjuntos de seleccin (Sel ect i onSet s) la constituyen todos los objetos de
conjunto de seleccin del documento actual activo, o sea, los conjuntos actuales.
Propiedades de la coleccin de conjuntos de seleccin:
Appl i cat i on
Count
Mtodos de la coleccin de conjuntos de seleccin:
Add
I t em
Las propiedades y mtodos expuestos estn ya estudiados.
El objeto simple de esta coleccin es un objeto de conjunto de seleccin. Los objetos de con-
junto de seleccin poseen las siguientes propiedades y mtodos:
Propiedades de los objetos de conjunto de seleccin:
Appl i cat i on
Count
Name
Mtodos de los objetos de conjunto de seleccin:
AddItems
Clear
Del et e
Er ase
Hi ghl i ght
I t em
RemoveI t ems
Scal eEnt i t y
Select
SelectAtPoint
SelectByPolygon
SelectOnScreen
Updat e
Veamos estos nuevos mtodos aplicables nicamente a conjuntos de seleccin.
AddI t ems. Aade objetos al conjunto de seleccin:
Cal l ObjConjuntoSel. AddI t ems( ObjGrficos)
ObjGrficos es una matriz de objetos grficos.
NOTA: No confundir AddI t ems con el mtodo AppendI t ems de los objetos de grupo ni con el
mtodo AddI t emde las listas desplegables y cuadros de lista de Visual Basic.
El siguiente ejemplo de macro dibuja una lnea, un crculo, crea un conjunto de seleccin y le
aade ambos objetos creados:
Opt i on Expl i ci t

Di mAcadDoc As Obj ect
Di mAcadModel As Obj ect
Di mL nea As Obj ect
Di mC r cul o As Obj ect
Di mGr upo1 As Obj ect

Sub Macr o( )
Set AcadDoc = Get Obj ect ( , " Aut oCAD. Appl i cat i on" ) . Act i veDocument
Set AcadModel = AcadDoc. Model Space

Di mPt o1( 2) As Doubl e
Di mPt o2( 2) As Doubl e

Pt o1( 0) = 100: Pt o1( 1) = 100: Pt o1( 2) = 0
Pt o2( 0) = 200: Pt o2( 1) = 200: Pt o2( 2) = 0
Set L nea = AcadModel . AddLi ne( Pt o1, Pt o2)
Set C r cul o = AcadModel . AddCi r cl e( Pt o1, 10)
Set Gr upo1 = AcadDoc. Sel ect i onSet s. Add( " Pr ueba" )
Di mObj et o( 1) As Obj ect
Set Obj et o( 0) = L nea: Set Obj et o( 1) = C r cul o
Cal l Gr upo1. AddI t ems( Obj et o)
End Sub
Si ahora yo quisiera eliminar por ejemplo ambos objetos guardados en el conjunto de se-
leccin Gr upo1, simplemente hara:
Gr upo1. Er ase
Cl ear . Elimina todos los elementos de un conjunto de seleccin:
Cal l ObjConjuntoSel. Cl ear
Esto es, vaca el conjunto.
Sel ect . Selecciona los objetos designados por el modo indicado y los introduce en un con-
junto de seleccin. Su sintaxis de utilizacin es:
Cal l ObjConjuntoSel. Sel ect ( IntModo, DblPto1, DblPto2, VarTipoFiltro, VarDatoFil-
tro)
El argumento IntModo es un valor I nt eger que define el tipo o modo de seleccin que se eje-
cutar sobre los objetos. Admite tambin las siguientes constantes:

acSel ect i onSet Al l
acSel ect i onSet Cr ossi ng
acSel ect i onSet Cr ossi ngPol ygon
acSel ect i onSet Fence
acSel ect i onSet Last
acSel ect i onSet Pr evi ous
acSel ect i onSet Wi ndows
acSel ect i onSet Wi ndowPol ygon
Las cuales se corresponden con los diferentes modos de designacin de entidades de Auto-
CAD 14, esto es: Todo, Captura, Polgono-Captura, Borde, ltimo, Previo, Ventana y Polgono-
Ventana.
Los dos argumentos de punto siguientes (matriz de tres valores Doubl e) son obligatorios. En el
caso de Captura y Ventana representan las dos esquinas opuestas por la diagonal. En el caso
de Polgono (Captura o Ventana) y Borde, el primer argumento DblPto1 debe contener una
matriz con todos los puntos que definen el polgono o el borde, y se debe suministrar un ar-
gumento DblPto2 ficticio; en este caso resulta preferible utilizar el mtodo Sel ect ByPol ygon
(que luego veremos). En el caso de modos que no necesitan puntos, como Todo, ltimo y Pre-
vio, los dos puntos se deben suministrar como argumentos ficticios que luego no se van a utili-
zar.
El argumento VarTipoFiltro (Var i ant ) permite especificar un filtro de seleccin, de manera
similar a la funcin de AutoLISP SSGET. El ltimo argumento permite especificar filtros para los
datos extendidos.
Sel ect At Poi nt . Selecciona el objeto que pasa por el punto indicado y lo aade a un conjunto
de seleccin. Su sintaxis de utilizacin es:
Cal l ObjConjuntoSel. Sel ect At Poi nt ( DblPto, VarTipoFiltro, VarDatoFiltro)
DblPto es una matriz de tres valores Doubl e. Los dos ltimos argumentos como en el mtodo
Sel ect .
Sel ect ByPol ygon. Selecciona entidades incluidas dentro de un polgono definido por una lista
de puntos suministrada (y las aade a un conjunto de seleccin). Su sintaxis de utilizacin es:
Cal l ObjConjuntoSel. Sel ect ByPol ygon( IntModo, DblListaPtos, VarTipoFiltro, VarDa-
toFiltro)
El argumento IntModo es un valor I nt eger que define el tipo o modo de seleccin que se eje-
cutar sobre los objetos. Admite tambin las siguientes constantes:
acSel ect i onSet Cr ossi ng
acSel ect i onSet Cr ossi ngPol ygon
acSel ect i onSet Fence
DblListaPtos es una matriz de puntos con las esquinas del polgono. Los dos ltimos argu-
mentos como en el mtodo Sel ect .
Sel ect OnScr een. Permite seleccionar objetos en pantalla (tras el prompt Desi gnar obj e-
t os: , o Sel ect obj ect s: en ingls) que sern aadidos a un conjunto de seleccin. Su sin-
taxis de utilizacin es:
Cal l ObjConjuntoSel. Sel ect OnScr een( VarTipoFiltro, VarDatoFiltro)
Los dos argumentos como en el mtodo Sel ect .
NOTA: En todos estos mtodos de seleccin, los argumentos VarTipoFiltro y VarDatoFiltro
son opcionales.
Veamos el siguiente ejemplo:
Opt i on Expl i ci t

Di mAcadDoc As Obj ect
Di mAcadModel As Obj ect
Di mL nea As Obj ect
Di mC r cul o As Obj ect
Di mGr upo1 As Obj ect

Sub Macro()
Set AcadDoc =GetObject(, "AutoCAD.Application").ActiveDocument
Set AcadModel =AcadDoc.ModelSpace

Dim Pto1(2) As Double
Dim Pto2(2) As Double
Pto1(0) =100: Pto1(1) =100: Pto1(2) =0
Pto2(0) =200: Pto2(1) =200: Pto2(2) =0
Set Lnea =AcadModel.AddLine(Pto1, Pto2)
Set Crculo =AcadModel.AddCircle(Pto1, 10)
Set Grupo1 =AcadDoc.SelectionSets.Add("Prueba")
Call Grupo1.SelectOnScreen
Grupo1.Erase
End Sub
Esta macro dibuja una lnea y un crculo en pantalla. Tras crear un nuevo conjunto de seleccin
(Gr upo1) se permite seleccionar en pantalla los objetos que se insertarn en l. Despus de
esta designacin los objetos se borran.
NOTA: Ms adelante veremos como seleccionar tambin en pantalla puntos, ngulos, distan-
cias, etctera.
DOCE.8.11. Coleccin de estilos de texto y el
objeto
estilo de texto
La coleccin de estilos de texto (Text St yl es) la constituyen todos los objetos de estilo de tex-
to del documento actual activo, o sea, los estilos de texto creados actualmente.
Propiedades de la coleccin de estilos de texto:
Appl i cat i on
Count
Mtodos de la coleccin de estilos de texto:
Add I t em
Las propiedades y mtodos expuestos estn ya estudiados.
El objeto simple de esta coleccin es un objeto de estilo de texto. Los objetos de estilo de tex-
to poseen las siguientes propiedades y mtodos:
Propiedades de los objetos de estilo de texto:
Appl i cat i on
BigFontFile
FontFile
Hei ght
LastHeight
Name
Obl i queAngl e
Text Gener at i onFl ag
Wi dt h
Mtodos de los objetos de estilo de texto:
Del et e
Get XDat a
Set XDat a
Veamos estas nuevas propiedades aplicables nicamente a estilos de texto.
Bi gFont Fi l e. Permite especificar u obtener el nombre de archivo de fuente grande (para
tipos de letra asiticos, por ejemplo) asociado con el estilo de texto. La sintaxis para asignar
un archivo es:
ObjEstiloTexto. Bi gFont Fi l e = StrNombreArch
donde StrNombreArch es una cadena (tipo de dato St r i ng).
La sintaxis para obtener o extraer el archivo de texto de fuente grande de un estilo de texto
es:
StrNombreArch = ObjEstiloTexto. Bi gFont Fi l e
donde StrNombreArch es una cadena (tipo de dato St r i ng).
NOTA: El nico tipo de archivo vlido es el de extensin . SHX.
Font Fi l e. Permite especificar u obtener el nombre de archivo de fuente principal o primario
asociado con el estilo de texto. La sintaxis para asignar un archivo es:
ObjEstiloTexto. Font Fi l e = StrNombreArch
donde StrNombreArch es una cadena (tipo de dato St r i ng).
La sintaxis para obtener o extraer el archivo de texto de fuente principal de un estilo de texto
es:
StrNombreArch = ObjEstiloTexto. Font Fi l e
donde StrNombreArch es una cadena (tipo de dato St r i ng).
NOTA: Los tipos de archivo vlidos son . PFA, . PFB, . SHX, . TTF.
Last Hei ght . Asigna u obtiene la ltima altura de texto utilizada. Para asignar:
ObjEstiloTexto. Last Hei ght = DblltimaAltura
donde DblltimaAltura es un valor Doubl e.
La sintaxis para obtener:
DblltimaAltura = ObjEstiloTexto. Last Hei ght
donde DblltimaAltura es un valor Doubl e.
DOCE.8.12. Coleccin de SCPs y el objeto SCP
La coleccin de SCPs (User Coor di nat eSyst ems) la constituyen todos los objetos de SCP del
documento actual activo, esto es, los SCPs guardados.
Propiedades de la coleccin de SCPs:

Appl i cat i on
Count
Mtodos de la coleccin de SCPs:
Add
I t em
Las propiedades y mtodos expuestos estn ya estudiados.
NOTA: El mtodo Add hemos visto que tena una sintaxis especial para la coleccin de bloques.
Veremos ahora la sintaxis especial para la coleccin de SCPs.
Set ObjSCP = ObjColeccin. Add( DblOrigen, DblPtoEjeX, DblPtoEjeX, StrNombre)
DblOrigen es una coordenada 3D (matriz de tres valores Doubl e) en el SCU que especifica
dnde se aadir el SCP. DblPtoEjeX y DblPtoEjeY son dos coordenadas 3D tambin (matri-
ces de tres valores Doubl e cada una) en el SCU que indican sendos puntos en la parte positiva
de los ejes X e Y para el SCP; la direccin positiva del eje Z queda definida por la regla de la
"mano derecha". StrNombre es el nombre (St r i ng) del SCP que se aadir a la coleccin.
Si nos damos cuenta lo que hacemos es definir un SCP mediante tres puntos: el punto de ori-
gen, un punto en el eje X y un punto en el eje Y.
El objeto simple de la coleccin de SCPs es un objeto de SCP. Los objetos de SCP poseen las
siguientes propiedades y mtodos:
Propiedades de los objetos de SCP:

Appl i cat i on
Name
Or i gi n
XVector
YVector
Mtodos de los objetos de SCP:
Del et e
GetUCSMatrix
Get XDat a
Set XDat a
Observamos que existen dos nuevas propiedades y un mtodo nuevo que an no conocemos.
Pasaremos pues a estudiar esto.
Primero las propiedades:
XVect or . Asigna u obtiene la direccin X del SCP. Para asignar:
ObjSCP. XVect or = DblVectorX
donde DblVectorX es un array de tres valores Doubl e. Esta caracterstica est controlada
tambin por la variable de sistema de AutoCAD UCSXDI R.
Para obtener:
VarVectorX = ObjSCP. XVect or
YVect or . Asigna u obtiene la direccin Y del SCP. Para asignar:
ObjSCP. YVect or = DblVectorY
donde DblVectorY es un array de tres valores Doubl e. Esta caracterstica est controlada por
la variable de sistema de AutoCAD UCSYDI R.
Para obtener:
VarVectorY = ObjSCP. YVect or
Ahora el mtodo:
Get UCSMat r i x. Obtiene la matriz de transformacin del objeto de SCP al que se aplica el m-
todo. Esta matriz de 4 4 define las rotaciones y traslaciones de cada eje del SCP respecto al
Sistema Universal. Sintaxis:
VarMatriz = ObjSCP. Get UCSMat r i x
donde VarMatriz es una variable que habr sido declarada como Var i ant , aunque recoger
una matriz de 4 4 elementos Doubl e. Despus podremos acceder a cada valor por medio de
ndices, como hemos hecho otras veces.
DOCE.8.13. Coleccin de vistas y el objeto vista
La coleccin de vistas (Vi ews) la constituyen todos los objetos de vista del documento actual
activo, esto es, las vistas guardadas.
Propiedades de la coleccin de vistas:
Appl i cat i on
Count
Mtodos de la coleccin de vistas:
Add
I t em
Las propiedades y mtodos expuestos estn ya estudiados.
El objeto simple de esta coleccin es un objeto de vista. Los objetos de vista poseen las si-
guientes propiedades y mtodos:
Propiedades de los objetos de vista:
Appl i cat i on
Cent er
Direction
Hei ght
Name
Target
Wi dt h
Mtodos de los objetos de vista:
Del et e
Get XDat a
Set XDat a
Las nuevas propiedades Di r ect i on y Tar get se explican a continuacin.
Di r ect i on. Asigna u obtiene la direccin de la vista para una visualizacin tridimensional.
Para asignar:
ObjNoGrfico. Di r ect i on = DblVector
Para obtener:
VarVector = ObjNoGrfico. Di r ect i on
donde DblVector es un array de tres valores Doubl e. Es un vector de direccin desde donde el
dibujo se ver. Esta propiedad es similar al comando PTOVI STA (VPOI NT en ingls) de Auto-
CAD.
Tar get . Asigna u obtiene el punto objetivo de una vista (en este caso). Para asignar:
ObjNoGrfico. Tar get = DblPuntoObjetivo
Para obtener:
VarPuntoObjetivo = ObjNoGrfico. Tar get
donde DblPuntoObjetivo es un array de tres valores Doubl e. Como siempre, pare recoger
utilizaremos una variable declarada como Var i ant .
DOCE.8.14. Coleccin de ventanas y el objeto
ventana
La coleccin de ventanas (Vi ewpor t s) la constituyen todos los objetos de ventana del docu-
mento actual activo en el Espacio Modelo, esto es, las ventanas grficas en mosaico activas
actualmente.
Propiedades de la coleccin de ventanas:
Appl i cat i on
Count
Mtodos de la coleccin de ventanas:
Add
Del et e
I t em
Las propiedades y mtodos expuestos estn ya estudiados.
El objeto simple de esta coleccin es un objeto de ventana grfica. Los objetos de ventana
grfica poseen las siguientes propiedades y mtodos:
Propiedades de los objetos de ventana:
Appl i cat i on
Cent er
Di r ect i on
GridOn
Hei ght
LowerLeftCorner
Name
OrthoOn
SnapBasePoint
SnapOn
SnapRotationAngle
StatusID
Tar get
UCSIconAtOrigin
UCSIconOn
UpperRightCorner
Wi dt h
Mtodos de los objetos de ventana:
GetGridSpacing
GetSnapSpacing
Get XDat a
SetGridSpacing
SetSnapSpacing
SetView
Set XDat a
Split
ZoomAll
ZoomCenter
ZoomExtents
ZoomPickWindow
ZoomScal ed
ZoomWi ndow
Comencemos por las nuevas propiedades.
Gr i dOn. Obtiene y asigna el valor de estado de la rejilla en una ventana. Es un valor boolea-
no (Bool ean) que si es Tr ue especifica que la rejilla est activada y si, por el contrario, es
Fal se, especifica que la rejilla est desactivada.
La sintaxis para asignar este valor es:
ObjVentana. Gr i dOn = BooRejilla
Y la sintaxis para obtenerlo:
BooRejilla = ObjVentana. Gr i dOn
Lower Lef t Cor ner . Obtiene el vrtice inferior izquierdo de la ventana grfica, en porcentaje
de ancho y alto de pantalla, tal como se almacenan las configuraciones de ventanas mosaico
en AutoCAD. Sintaxis:
VarEsquinaII = ObjVentana. Lower Lef t Cor ner
VarEsquinaII recoger una matriz de valores Doubl e.
Or t hoOn. Obtiene y asigna la condicin del modo Orto en la ventana activa actualmente. Sin-
taxis para asignar:
ObjVentana. Or t hoOn = BooModoOrto
Sintaxis para obtener:
BooModoOrto = ObjVentana. Or t hoOn
BooModoOrto tomar el valor Tr ue si el modo Orto est activado o se quiere activar; toma-
r el valor Fal se si el modo Orto est desactivado o se quiere desactivar.
SnapBasePoi nt . Especifica el punto base para el forzado de cursor/rejilla en la ventana ac-
tual.
La sintaxis para asignar este valor es:
ObjVentana. SnapBasePoi nt = DblPtoBase

Y la sintaxis para obtenerlo:
VarPtoBase = ObjVentana. SnapBasePoi nt
Evidentemente, DblPtoBase, al ser un punto, ser una matriz de tres valores Doubl e. Si es
para obtener, recordar que habremos de guardarlo en una variable Var i ant .
SnapOn. Especifica el estado del forzado de cursor.
La sintaxis para asignar este valor es:
ObjVentana. SnapOn = BooEstadoForzcursor
Y la sintaxis para obtenerlo:
BooEstadoForzcursor = ObjVentana. SnapOn
BooEstadoForzcursor ser un valor Bool ean que adems admite las siguientes constantes:
acOn
acOf f
que especifican la activacin (acOn) o no activacin (acOf f ) del Forzcursor.
SnapRot at i onAngl e. Es el ngulo de rotacin en radianes (valor Doubl e de 0 a 6. 28) del
forzado de cursor en la ventana con respecto al SCU.
La sintaxis para asignar este valor es:
ObjVentana. SnapRot at i onAngl e = DblnguloRotacin
Y la sintaxis para obtenerlo:
DblnguloRotacin = ObjVentana. SnapRot at i onAngl e
St at usI D. Obtiene nicamente el estado de activacin de una ventana. El valor se recoge en
una variable declarada como Bool ean: si guarda Tr ue la ventana est activada, si guarda Fal -
se la ventana est desactivada:
BooEstadoActivacin = ObjVentana. St at usI D
UCSI conAt Or i gi n. Especifica si el icono o smbolo del SCP se muestra en el origen de coor-
denadas o no. Todo ello es controlado por un valor Bool ean que, si es Tr ue quiere decir que el
SCP aparece en el origen y, si es Fal se, que no.
La sintaxis para asignar este valor es:
ObjVentana. UCSI conAt Or i gen = BooSimbSCPOrigen
Y la sintaxis para obtenerlo:
BooSimbSCPOrigen = ObjVentana. UCSI conAt Or i gi n
UCSI conOn. Especifica si el icono o smbolo del SCP se visualiza o no. Todo ello es controlado
por un valor Bool ean que, si es Tr ue quiere decir que el SCP se visualiza y, si es Fal se, que
no se visualiza.
La sintaxis para asignar este valor es:
ObjVentana. UCSI conOn = BooSimbSCPActivo

Y la sintaxis para obtenerlo:
BooSimbSCPActivo = ObjVentana. UCSI conOn
Upper Ri ght Cor ner . Obtiene el vrtice superior derecho de la ventana grfica, en porcentaje
de ancho y alto de pantalla, tal como se almacenan las configuraciones de ventanas mosaico
en AutoCAD. Sintaxis:
VarEsquinaSD = ObjVentana. Upper Ri ght Cor ner
VarEsquinaSD ser una matriz de valores Doubl e.
Veamos ahora los nuevos mtodos.
Get Gr i dSpaci ng. Obtiene el espaciado de la rejilla para la ventana:
Cal l ObjVentana. Get Gr i dSpaci ng( DblEspXRejilla, DblEspYRejilla)
DblEspXRejilla y DblEspYRejilla son dos variables declaradas como Doubl e que guardarn
el espaciado en X y en Y respectivamente.
Get SnapSpaci ng. Obtiene el espaciado del forzado de cursor para la ventana:
Cal l ObjVentana. Get SnapSpaci ng( DblEspXForzcursor, DblEspYForzcursor)
DblEspXForzcursor y DblEspYForzcursor son dos variables declaradas como Doubl e que
guardarn el espaciado en X y en Y respectivamente.
Set Gr i dSpaci ng. Asigna el espaciado de la rejilla para la ventana:
Cal l ObjVentana. Set Gr i dSpaci ng( DblEspXRejilla, DblEspYRejilla)
DblEspXRejilla y DblEspYRejilla son dos valores Doubl e que representan el espaciado en
X y en Y respectivamente.
Set SnapSpaci ng. Asigna el espaciado del forzado de cursor para la ventana:
Cal l ObjVentana. Set SnapSpaci ng( DblEspXForzcursor, DblEspYForzcursor)
DblEspXForzcursor y DblEspYForzcursor son dos valores Doubl e que representan el espa-
ciado en X y en Y respectivamente. El valor inicial para X e Y es 1. 0000.
Set Vi ew. Establece en la ventana grfica la visualizacin de un objeto de vista. El argumento
suministrado deber ser de tipo Obj ect , conteniendo una vista existente en el dibujo:
Cal l ObjVentana. Set Vi ew( ObjVista)
ObjVista es un objeto de vista de los explicados en la seccin anterior.
Spl i t . Divide la ventana grfica actual en el nmero de partes indicado:
Cal l ObjVentana. Spl i t ( IntNmVentanas)
IntNmVentanas ha de ser un nmero entero, aunque tambin se admiten las siguientes cons-
tantes (las cuales dicen relacin a las diferentes formas predeterminadas de AutoCAD de divi-
dir una ventana):
acVi ewpor t 2Hor i zont al
acVi ewpor t 2Ver t i cal
acVi ewpor t 3Lef t
acVi ewpor t 3Ri ght
acVi ewpor t 3Hor i zont al
acVi ewpor t 3Ver t i cal
acVi ewpor t 3Above
acVi ewpor t 3Bel ow
acVi ewpor t 4
La siguiente macro muestra la manera de dividir la ventana grfica actual en tres ventanas con
una posicin predefinida de AutoCAD:
Opt i on Expl i ci t

Di mAcadDoc As Obj ect
Di mAcadModel As Obj ect
Di mVent ana1 As Obj ect

Sub Macr o( )
Set AcadDoc = Get Obj ect ( , " Aut oCAD. Appl i cat i on" ) . Act i veDocument
Set AcadModel = AcadDoc. Model Space

Set Vent ana1 = AcadDoc. Vi ewpor t s. Add( " Nueva" )
Cal l Vent ana1. Spl i t ( acVi ewpor t 3Lef t )
Set AcadDoc. Act i veVi ewpor t = Vent ana1
End Sub
Primero hemos de crear un nuevo objeto de ventana en la coleccin de ventanas, despus di-
vidirlo a nuestro gusto y, por ltimo, definirlo como la ventana actual (recordemos la propie-
dad Act i veVi ewpor t del objeto de documento activo).
ZoomAl l . Realiza un Zoom Todo en la ventana actual:
ObjVentana. ZoomAl l
ZoomCent er . Realiza un Zoom Centro en la ventana actual. Hay que proporcionar el centro en
cuestin (matriz de tres valores Doubl e) y el factor de ampliacin (Doubl e).
Cal l ObjVentana. ZoomCent er ( DblPtoCentro, DblFactorAmpl)
ZoomExt ens. Realiza un Zoom Extensin en la ventana actual:
ObjVentana. ZoomExt ens
ZoomPi ckWi ndow. Realiza un Zoom Ventana en la ventana actual. Los puntos diagonales de la
ventana se marcan en pantalla con el dispositivo sealador al mensaje habitual:
ObjVentana. ZoomPi ckWi ndow
ZoomScal ed. Realiza un Zoom Factor en la ventana actual. Hay que proporcionar el factor de
escala y el tipo de escala:
Cal l ObjVentana. ZoomScal ed( DblFactorEscala, IntTipoEscala)
DblFactorEscala es un valor Doubl e que representa el factor de escala. IntTipoEscala es un
valor I nt eger que adems admite las tres siguientes constantes (absoluta, relativa y relativa
al Espacio Papel):
acZoomScal edAbsol ut e
acZoomScal edRel at i ve
acZoomScal edRel at i vePSpace
ZoomWi ndow. Realiza un Zoom Ventana en el que se proporcionan los puntos diagonales como
argumentos del mtodo:
Cal l ObjVentana. ZoomWi ndow( DblPtoInfIzq, DblPtoSupDcha)
DblPtoInfIzq y DblPtoSupDcha son los puntos (matriz de tres valores Doubl e) inferior iz-
quierda y superior derecha, respectivamente, de la ventana.
DOCE.8.14.1. Ventanas del Espacio Papel
Todo lo visto hasta aqu en cuestin de ventanas se refiere a las ventanas del Espacio Modelo
de AutoCAD 14. A la hora de crear y gestionar ventanas de Espacio Papel se recurre a un m-
todo exclusivo de la coleccin de objetos de Espacio Papel: AddPVi ewpor t . Si recordamos, em-
plazamos el estudio de este mtodo a esta seccin.
La sintaxis de AddPVi ewpor t es:
Set ObjVentanaPapel = ObjColEspacioPapel. AddPVi ewpor t ( DblCentro, DblAltura,
DblAnchura)
Propiedades de los objetos de ventana de Espacio Papel:
Appl i cat i on
Cent er
Di r ect i on
Ent i t yName
Ent i t yType
Gr i dOn
Handl e
Hei ght
Layer
LensLength
Li net ype
Li net ypeScal e
Obj ect I D
RemoveHiddenLines
SnapBasePoi nt
SnapOn
SnapRot at i onAngl e
Tar get
TwistAngle
UCSI conAt Or i gi n
UCSI conOn
Vi si bl e
Wi dt h
Mtodos de los objetos de ventana de Espacio Papel:
Ar r ayPol ar
Ar r ayRect angul ar
Copy
Display
Er ase
Get Boundi ngBox
Get Gr i dSpaci ng
Get SnapSpaci ng
Get XDat a
Hi ghl i ght
I nt er sect Wi t h
Mi r r or
Mi r r or 3D
Move
Rot at e
Rot at e3D
Scal eEnt i t y
Set Gr i dSpaci ng
Set SnapSpaci ng
Set XDat a
Tr ansf or mBy
Updat e
ZoomAl l
ZoomCent er
ZoomExt ent s
ZoomPi ckWi ndow
ZoomScal ed
ZoomWi ndow
DblCentro es un valor que especifica el punto (array de tres valores Doubl e) central de la ven-
tana. DblAltura es un valor Doubl e que especifica al altura de la ventana. DblAnchura es un
valor Doubl e que especifica al anchura de la ventana. Estos dos ltimos valores han de ser
positivos.
Pasemos a explicar las nuevas propiedades y el nuevo mtodo.
LensLengt h. Especifica la longitud de la lente (en milmetros) para la vista en perspectiva.
Este valor Doubl e est tambin controlado por la variable de sistema LENSLENGTH.
La sintaxis para asignar este valor es:
ObjVentanaPapel. LensLengt h = DblLongLente
Y la sintaxis para obtenerlo:
DblLongLente = ObjVentanaPapel. LensLengt h
RemoveHi ddenLi nes. Especifica si las lneas ocultas han de ser trazadas o imprimidas en de-
terminada ventana. Su sintaxis para asignar un valor es la que sigue:
ObjVentanaPapel. RemoveHi ddenLi nes = BooLneasOcultas
Y la sintaxis para obtenerlo:
BooLneasOcultas = ObjVentanaPapel. RemoveHi ddenLi nes
BooLneasOcultas es un valor Bool ean; si es Tr ue las lneas ocultas no aparecen trazadas, si
es Fal se s.
Twi st Angl e. Obtiene el ngulo de ladeo de una ventana. Su sintaxis es la que sigue:
DblngLadeo = ObjVentanaPapel. Twi st Angl e
DblngLadeo es un valor Doubl e.
El mtodo Di spl ay a continuacin.
Di spl ay. Este mtodo activa o desactiva una ventana de Espacio Papel:
ObjVentanaPapel. Di spl ay( BooEstado)
BooEstado es un valor Bool ean; Tr ue activa la ventana, Fal se la desactiva.
Veamos el ejemplo que sigue:
Opt i on Expl i ci t
Di mAcadDoc As Obj ect
Di mAcadPapel As Obj ect
Di mVent anaPapel As Obj ect
Di mCent r oVent ana( 1 To 3) As Doubl e

Sub Macr o( )
Set AcadDoc = Get Obj ect ( , " Aut oCAD. Appl i cat i on" ) . Act i veDocument
Set AcadPapel = AcadDoc. Paper Space

Cent r oVent ana( 1) = 100: Cent r oVent ana( 2) = 100: Cent r oVent ana( 3) = 0
Set Vent anaPapel = AcadPapel . AddPVi ewpor t ( Cent r oVent ana, 100, 100)
Vent anaPapel . Di spl ay ( Tr ue)
End Sub
Con esta macro creamos una ventana flotante de Espacio Papel. Al crearla, por defecto apare-
ce desactivada. Para activarla utilizamos el mtodo Di spl ay.
Hasta aqu todo lo referente a las colecciones de objetos. Hemos aprendido muchos detalles
que ya nos harn programar medianamente bien. Sin embargo, para optar por una programa-
cin aceptable necesitamos conocer algunos mecanismos ms, sobre todo los que veremos en
la seccin siguiente.
3 fase intermedia de ejercicios
Escribir una programa en el mdulo VBA que permita cambiar el tipo de lnea de uno o va-
rios objetos. El letrero de dilogo que manejar el programa es el siguiente (por ejemplo):

El funcionamiento del programa es el siguiente. Al iniciar el letrero se rellenar la lista desple-
gable Tipo de lnea: con los nombres de los tipos de lnea actualmente cargados en el dibujo.
La lista Tipo de objeto: permanecer vaca por el momento.
Al pulsar el botn Designar< se cerrar el cuadro y se permitir designar en pantalla uno o
varios objetos. Tras el final de la designacin o seleccin, se retornar al cuadro en el que se
rellenar la lista desplegable Tipo de objeto: con el tipo (lnea, crculo, spline...) y el nmero
ID de identificacin, entre parntesis, de cada uno de los objetos seleccionados.
La manera de aplicar ahora tipos de lnea a los objetos es escogiendo de la lista superior la
entidad en concreto y, de la lista inferior, el tipo de lnea que ser asignado a ella. Tras esto se
pulsa el botn Aplicar para aplicar los cambios. Los cambios deben ser evidentes de inmediato
(al pulsar Aplicar) pero el letrero no ha de cerrarse; por si acaso se quieren realizar ms modi-
ficaciones o cambios.
El botn Salir cierra el letrero de dilogo y termina la aplicacin.
DOCE.9. UTILIDADES VARIAS (EL OBJETO Uti-
lity)
Como podemos comprobar al observar la tabla jerrquica de objetos y colecciones del principio
del MDULO, existe un objeto de utilidad que es descendiente directo del documento actual
activo. Este objeto llamado Ut i l i t y, posee una serie de mtodos que nos harn la vida ms
fcil a la hora de programar, ya que podremos acceder a ellos para solicitar puntos, convertir
coordenadas, utilizar marcas de inicio y fin de DESHACER, etctera.
La manera de llamar a este objeto y a sus mtodos es idntica a la ya utilizada para los dems
objetos. Lo lgico ser, si vamos a utilizarlo mucho, que creemos una variable para acceder a
l de forma simple, como hemos venido haciendo. Por ejemplo, podemos declarar as una serie
de variables de objeto:
Opt i on Expl i ci t
Di mAcadDoc As Obj ect
Di mAcadModel As Obj ect
Di mAcadUt i l As Obj ect

y luego inicializarlas as:

Set AcadDoc =GetObject(, "AutoCAD.Application").ActiveDocument
Set AcadModel =AcadDoc.ModelSpace
Set AcadUtil =AcadDoc.Utility
Como vemos, el objeto de utilidad desciende directamente del de documento activo, por lo que
la forma de inicializarlo es similar a la de la coleccin de objetos de Espacio Modelo por ejem-
plo, como se ve (estn en el mismo nivel).
Pasemos directamente a ver la lista de propiedades y mtodos de este objeto, para despus
estudiarlos detenidamente.
Propiedades del objeto de utilidad:
Appl i cat i on
Mtodos del objeto de utilidad:
AngleFromXAxis
AngleToReal
AngleToString
DistanceToReal
EndUndoMark
GetAngle
GetCorner
GetDistance
GetInput
GetInteger
GetKeyword
GetOrientation
GetPoint
GetReal
GetString
InitializeUserInput
PolarPoint
RealToString
StartUndoMark
TranslateCoordinates
Como propiedad tenemos, como siempre, Appl i cat i on, que es comn a todos los objetos
VBA. Los diversos mtodos sern los que se expliquen a continuacin, como venimos haciendo
hasta ahora.
Angl eFr omXAxi s. Este mtodo obtiene el ngulo comprendido entre la lnea o vector deter-
minado por los dos puntos que se suministran como argumentos, y el eje X actual del dibujo,
siempre en sentido trigonomtrico o antihorario y en radianes. La sintaxis para Angl eFr om-
XAxi s es:
DblnguloDesdeX = ObjUtilidad. Angl eFr omXAxi s( DblPtoInic, DblPtoFinal)
Tanto DblPtoInic como DblPtoFinal son los dos puntos de una lnea o de un vector que no
tiene por qu estar dibujado, por lo que sern matrices o arrays de tres elementos (coorde-
nada X, coordenada Y y coordenada Z) de tipo de dato Doubl e.
No es indiferente el orden en que se introducen los puntos, ya que no es igual el ngulo desde
el eje X a una lnea que va desde un punto 1 hasta un punto 2, que el ngulo desde el eje X a
una lnea que va desde 2 hasta 1, evidentemente.
NOTA: La variable que recoja este valor (DblnguloDesdeX) habr sido declarada como Dou-
bl e.
Angl eToReal . Este mtodo obtiene la conversin en radianes de un ngulo en formato de
texto a un nmero real de doble precisin. Veamos la sintaxis de este mtodo:
DblnguloReal = ObjUtilidad. Angl eToReal ( Strngulo, IntUnidades)
Como vemos, el ngulo ha de ser en formato de cadena de texto normalmente introducido
por el usuario. IntUnidades, por su lado, es un valor I nt eger que determina en qu unida-
des aparece el ngulo del argumento anterior, procediendo a su conversin en nmero real
segn convenga. Este segundo argumento admite tambin las siguientes constantes:
acDegr ees
acDegr eeMi nut eSeconds
acGr ads
acRadi ans
acSur veyor Uni t s
stas se corresponden con los diferentes tipos de ngulos que maneja AutoCAD (grados se-
xagesiamales decimales, grados/minutos/segundos, grados centesimales, radianes, unidades
geodsicas).
As pues, una operacin como la que sigue (siguiendo con la notacin especificada al principio
de esta seccin):
Di mResul t ado As Doubl e
Resul t ado = AcadUt i l . Angl eToReal ( " 180" , acDegr ees)
MsgBox Resul t ado
devolver 3. 14159265358979, esto es, el resultado de pasar a radianes la cantidad obtenida de
convertir el texto " 180" considerado como grados en notacin decimal. El resultado (PI) sera
el mismo al hacer lo siguiente:
Di mResul t ado As Doubl e
Resul t ado = AcadUt i l . Angl eToReal ( " 100" , acGr ads)
MsgBox Resul t ado
Angl eToSt r i ng. Angl eToSt r i ng convierte el ngulo proporcionado, el cual se considera
siempre en radianes, a cadena de texto de acuerdo con las unidades y los decimales de preci-
sin indicados:
StrnguloCadena = ObjUtilidad. Angl eToSt r i ng( Dblngulo, IntUnidades, IntPrecis)
Dblngulo es un valor Doubl e que, como decimos, estar en radianes, ya que VBA as siempre
lo interpreta. IntUnidades es un valor I nt eger que admite las mismas constantes explicadas
en el mtodo anterior y que representa las unidades a las que se convertirn los radianes es-
pecificados. IntPrecis especifica la precisin del ngulo, que se convertir a cadena, en n-
mero de decimales. Este ltimo argumento admite un valor entre 0 y 8 (siempre entero).
Veamos una rutina de ejemplo:
Di mResul t ado As St r i ng
Const PI = 3. 14159265358979
Resul t ado = AcadUt i l . Angl eToSt r i ng( PI / 2, acDegr ees, 3)
MsgBox Resul t ado
El resultado sera la cadena " 90" . Como vemos se ha transformado en grados sexagesimales
en formato decimal (acDegr ees), en cadena (Angl eToSt r i ng) y, aunque se indic un precisin
de tres decimales (3), no se ha tenido en cuenta al resultar un valor exacto.
Di st anceToReal . Convierte un distancia en formato de texto normalmente indicada por el
usuario a un valor real, de acuerdo con el tipo de unidades especificado:
DblDistReal = ObjUtilidad. Di st anceToReal ( StrDistancia, IntUnidades)
StrDistancia es un valor tipo St r i ng que, como decimos, ser una cadena. IntUnidades es
un valor entero (I nt eger ) que tambin admite las siguientes constantes:
acSci ent i f i c
acDeci mal
acEngi neer i ng
acAr chi t ect ur al
acFr act i onal
Este ltimo argumento indica las unidades de conversin, cuyas constantes se corresponden
con las unidades manejadas por AutoCAD (cientficas, decimales, pies y pulgadas I, pies y
pulgadas II y fraccionarias).
NOTA: El valor de la distancia obtenido es siempre en unidades de dibujo.
EndUndoMar k. Este mtodo coloca una seal de fin de DESHACER en el lugar del programa que
se utilice. Su sintaxis es:
ObjUtilidad. EndUndoMar k
Si recordamos, las marcas de inicio y fin del comando de AutoCAD 14 DESHACER las utiliz-
bamos mucho en los programas de AutoLISP, por lo que no hay motivo para no hacerlo en
VBA tambin.
Cuando realizamos un programa o una macro que dibuja varias entidades, por ejemplo, si al
trmino de su ejecucin no estamos contentos con el resultado y utilizamos el comando H para
deshacer el dibujo, nicamente se deshar la ltima entidad dibujada. Si antes de comenzar el
dibujo del conjunto introducimos una marca de inicio de DESHACER y, tras terminar el dibujo
completo, otra de fin de DESHACER, al introducir H al final de la ejecucin del programa o de la
macro, el conjunto de entidades se deshar por completo como un todo, cosa que nos interesa
por esttica y por funcionalidad.
Esta caracterstica se corresponde con la opcin Fi n (End en ingls) del comando DESHACER
(UNDO en ingls) de AutoCAD.
NOTA: Ms adelante se explicar el mtodo St ar t UndoMar k que coloca marcas de inicio de
DESHACER.
Get Angl e. Acepta el valor de un ngulo indicado por el usuario. Sintaxis:
Dblngulo = ObjUtilidad. Get Angl e( DblPtoBase, StrMensaje)
Este valor se puede introducir directamente desde el teclado (en el formato actual de unidades
en AutoCAD o con los sufijos permitidos para radianes, centesimales, etc.), o sealando pun-
tos en pantalla. Si se especifica un punto de base (es opcional) Doubl e, se muestra un cursor
elstico "enganchado" a dicho punto y el ngulo es el formado por la lnea desde ese punto
hasta el sealado por el usuario. Si no se especifica un punto de base, el usuario puede sea-
lar dos puntos en pantalla para indicar el ngulo. El ngulo se mide siempre en dos dimensio-
nes, ignorndose las coordenadas Z de los puntos.
En cualquiera de los supuestos, el ngulo se mide a partir del origen actualmente establecido
en AutoCAD (variable de ANGBASE), siempre en sentido antihorario. El valor devuelto es siem-
pre en radianes. Si se introduce el valor por teclado, se considerar como radianes. A diferen-
cia del mtodo Get Or i ent at i on explicado ms adelante, Get Angl e se emplea sobre todo
para medir ngulos relativos.
El mensaje tambin es opcional (tipo St r i ng), y especifica el texto que aparecer como solici-
tud del ngulo en la lnea de comandos.
Comentemos la macro siguiente:
Opt i on Expl i ci t

Di mAcadDoc As Obj ect
Di mAcadModel As Obj ect
Di mAcadUt i l As Obj ect


Sub Macr o( )
Set AcadDoc = Get Obj ect ( , " Aut oCAD. Appl i cat i on" ) . Act i veDocument
Set AcadModel = AcadDoc. Model Space
Set AcadUt i l = AcadDoc. Ut i l i t y

Di mResul t ado As Doubl e
Di mPt oBase( 1 To 3) As Doubl e
Pt oBase( 1) = 10: Pt oBase( 2) = 18
Resul t ado = AcadUt i l . Get Angl e( Pt oBase, " ngul o: " )
MsgBox Resul t ado
End Sub
Veamos que aqu se solicita un ngulo al usuario y luego se muestra con un MsgBox. Percat-
monos tambin de que la coordenada Z del punto base no es necesario que tenga valor, ya
que como hemos dicho no se toma en cuenta. Sin embargo, a la hora de declarar la variable
habremos de hacerlo como un array de tres valores (aunque el ltimo luego lo dejemos vaco),
ya que de otro modo no funcionar el mtodo.
Get Cor ner . Este mtodo acepta el valor de un punto indicado por el usuario, mientras existe
otro punto "enganchado", lo que forma un rectngulo. Sintaxis:
VarPuntoEsquina = ObjUtilidad. Get Cor ner ( DblPtoBase, StrMensaje)
En este caso DblPtoBase es obligatorio (Doubl e). StrMensaje sigue siendo opcional, al igual
que con el mtodo anterior, y es una cadena alfanumrica (St r i ng). El resultado de este m-
todo ser un punto (matriz de tres elementos Doubl e), por lo que habr de recogerse en una
variable tipo Var i ant para luego, y si se quieren utilizar las coordenadas de dicho punto, ex-
traer los valores mediante ndices y hacer un trasvase.
Get Di st ance. Este mtodo acepta el valor de una distancia indicada por el usuario. Este va-
lor (Doubl e) podr ser introducido mediante el teclado o directamente en pantalla marcando
dos puntos. En este caso da lo mismo el orden de introduccin de puntos.
La sintaxis para Get Di st ance es la siguiente:
DblDistancia = ObjUtilidad. Get Di st ance( DblPtoBase, StrMensaje)
Si se indica un punto base, que habr de ser Doubl e, el cursor se "enganchar" a l y la dis-
tancia ser medida desde ah hasta el siguiente punto indicado por el usuario. StrMensaje
(St r i ng), como viene siendo habitual, es un valor opcional.
NOTA: En principio la distancia medida con Get Di st ance es un distancia 3D. Aprenderemos al
ver el mtodo I ni t i al i zeUser I nput que esto puede modificarse.
Get I nput . Este mtodo Se utiliza inmediatamente despus de alguno de los otros mtodos
de solicitud (Get...), para detectar si el usuario ha dado alguna respuesta textual desde el
teclado. Devuelve el texto introducido desde el teclado. Su sintaxis es:

StrCadenaDevuelta = ObjUtilidad. Get I nput
NOTA: Veremos ms adelante algn ejemplo de este mtodo (despus de I ni t i al i zeUser I n-
put ) que nos lo aclarar ms.
Get I nt eger . Solicita del usuario que indique un nmero entero. Si no es as, rechaza el dato
introducido y vuelve a solicitar un nmero entero. Se permiten valores enteros negativos y el
valor 0, a no ser que se especifique lo contrario mediante el mtodo I ni t i al i zeUser I nput .
La sintaxis de Get I nt eger es:
IntValorEntero = ObjUtilidad. Get I nt eger ( StrMensaje)
StrMensaje es opcional y funciona como en los mtodos explicados anteriormente.
NOTA: Ms aclaraciones sobre este y otros mtodos tras I ni t i al i zeUser I nput .
Get Keywor d. Solicita del usuario que indique la palabra clave que le interesa. El mensaje de
solicitud ofrecer, lgicamente, las opciones posibles con las abreviaturas en maysculas para
que el usuario sepa a qu atenerse. Previamente, se habr utilizado el mtodo I ni t i al i zeU-
ser I nput para establecer las palabras clave permitidas.
Su sintaxis:
StrPalabraClave = ObjUtilidad. Get Keywor d( StrMensaje)
StrMensaje es opcional y funciona como en los mtodos explicados anteriormente.
Get Or i ent at i on. Funciona de manera muy similar a Get Angl e, con la nica diferencia de
que los ngulos se miden siempre desde el origen por defecto (posicin de las 3 en el reloj o
punto cardinal Este), independientemente del establecido en AutoCAD (variable de ANGBASE).
Este mtodo se emplea sobre todo para mediar ngulos absolutos y su sintaxis es:
DblOrientacin = ObjUtilidad. Get Or i ent at i on( DblPtoBase, StrMensaje)
Los argumentos funcionan igual que en Get Angl e.
Get Poi nt . Get Poi nt solicita al usuario un punto que podr ser marcado en pantalla o intro-
ducido por teclado:
VarPunto = ObjUtilidad. Get Poi nt ( DblPtoBase, StrMensaje)
Si se indica un punto Doubl e de base (opcional), el cursor aparece "enganchado" mediante una
lnea elstica a dicho punto. StrMensaje funciona igual que en mtodos anteriores y tambin
es opcional.
La siguiente macro de ejemplo se utiliza para dibujar rectngulos mediante polilneas con slo
marcar dos puntos en pantalla: el primero controlado por un Get Poi nt y el segundo con un
Get Cor ner , para poder ver el rectngulo final en tiempo real antes de ser dibujado:
Opt i on Expl i ci t

Di mAcadDoc As Obj ect
Di mAcadModel As Obj ect
Di mAcadUt i l As Obj ect

Sub Macr o( )
Set AcadDoc = Get Obj ect ( , " Aut oCAD. Appl i cat i on" ) . Act i veDocument
Set AcadModel = AcadDoc. Model Space
Set AcadUt i l = AcadDoc. Ut i l i t y

Di mPunt o1, Punt o2
Di mPunt oTr as( 2) As Doubl e
Di mPunt osPol ( 9) As Doubl e
Punt o1 = AcadUt i l . Get Poi nt ( , " Pr i mer a esqui na: " )
Punt oTr as( 0) = Punt o1( 0) : Punt oTr as( 1) = Punt o1( 1) : Punt oTr as( 2) = Punt o1( 2)
Punt o2 = AcadUt i l . Get Cor ner ( Punt oTr as, " Esqui na opuest a: " )

Punt osPol ( 0) = Punt o1( 0) : Punt osPol ( 1) = Punt o1( 1)
Punt osPol ( 2) = Punt o2( 0) : Punt osPol ( 3) = Punt o1( 1)
Punt osPol ( 4) = Punt o2( 0) : Punt osPol ( 5) = Punt o2( 1)
Punt osPol ( 6) = Punt o1( 0) : Punt osPol ( 7) = Punt o2( 1)
Punt osPol ( 8) = Punt o1( 0) : Punt osPol ( 9) = Punt o1( 1)

Cal l AcadDoc. Model Space. AddLi ght Wei ght Pol yl i ne( Punt osPol )
End Sub
Lo primero que se hace, tras declarar las variables, es solicitar el primer punto del rectngulo.
Se realiza ahora un trasvase de coordenadas (de Var i ant a Doubl e) para podrselas suminis-
trar al mtodo Get Cor ner como punto base. Se pide el segundo punto (el cursor permanecer
enganchado al primero mediante un rectngulo elstico) y se calculan los puntos para la polil-
nea que dibujar el rectngulo.
Una nota importante que debemos resear de este ejemplo es la manera de dibujar la polil-
nea. Ntese que por primera vez en estas pginas, en lugar de utilizar el mtodo como expli-
camos en su momento, lo hemos usado con Cal l . Es momento ahora de decir que esto es per-
fectamente factible con todos los mtodos de dibujo de entidades. Lo que ocurre, es que nor-
malmente se utiliza la otra manera (guardando el objeto resultante en una variable de objeto)
para despus tener acceso absoluto a la entidad dibujada: cambiar su color, su tipo de lnea,
etctera o utilizar cualquiera de las propiedades o mtodos de ella.
Ahora bien, en momentos en los que no nos interese de una entidad ms que su puro dibujo,
se puede utilizar esta tcnica.
NOTA: Percatmonos que declarar un matriz con ( 2) elementos es igual que hacerlo con ( 1
To 3) elementos. En este segundo caso los ndices variaran de 1 a 3, y en el primero de 0 a
2; lo que da un total de tres elementos en ambos casos.
Get Real . Solicita del usuario que indique un nmero real. Si no es as, rechaza el dato intro-
ducido y vuelve a solicitar un nmero real. Si se indica un nmero entero, es aceptado como
real.
La sintaxis de Get Real es:
DblValorReal = ObjUtilidad. Get Real ( StrMensaje)
StrMensaje es opcional y funciona como en los mtodos explicados anteriormente.
Get St r i ng. Acepta un cadena de texto introducida por el usuario. Si contiene ms de 132
caracteres, slo devuelve los primeros 132 caracteres. Sintaxis:
StrCadena = ObjUtilidad. Get St r i ng ( BooModo, StrMensaje)
El modo es un valor Bool ean (Tr ue o Fal se) que indica si la cadena de texto puede contener
espacios en blanco. Si es verdadero se admiten espacios y el texto introducido por teclado de-
be terminarse con I NTRO. Si es falso, el primer espacio se considerar como un I NTRO y termi-
nar el texto. Si no se introduce ningn texto y se pulsa directamente I NTRO, se devuelve una
cadena vaca.
I ni t i al i zeUser I nput . Este mtodo establece limitaciones para aceptar los datos introduci-
dos por el usuario, y tambin permite especificar palabras clave para ser aceptadas como
nombres de opcin. Veamos la sintaxis de utilizacin:
Cal l ObjUtilidad. I ni t i al i zeUser I nput ( IntModo, StrPalabrasClave)
La mayora de los mtodos Get... que hemos visto se parecen enormemente (hasta algunos
en los nombres) a las funciones GET... de AutoLISP que realizaban los mismos cometidos.
Evidentemente necesitaremos pues un mtodo como I ni t i al i zeUser I nput que haya opcin
de aadir justo antes de cualquier Get... para filtrar sus resultados; es lo que hacamos en
AutoLISP con I NI TGET.
IntModo es un valor entero (I nt eger ) con cdigo de bits que determina las limitaciones im-
puestas al usuario. Los modos posibles coinciden con los de la funcin I NI TGET de AutoLISP y
se encuentran en la siguiente tabla:
Valor de bit Modo


1 No admite valores nulos, es decir, INTRO como respuesta.
2 No admite el valor cero (0).
4 No admite valores negativos.
8 No verifica lmites, aunque estn activados.
16 (No se utiliza).
32 Dibuja la lnea o el rectngulo elsticos con lnea de trazos en
lugar de continua.
64 Hace que la funcin GETDIST devuelva distancias 2D.
128 Permite introducir datos arbitrarios por teclado. Tiene prioridad
sobre el valor 1.

Al indicar un modo se pueden sumar varios de los bits. Por ejemplo, para impedir que el usua-
rio indique un valor cero, nulo (es decir I NTRO) y/o negativo, el modo que se especificar ser
7 (1 + 2 + 4).
Este mtodo debe invocarse justo antes del mtodo Get... que limita. Los modos que tienen
sentido para cada mtodo Get... tambin coinciden con los correspondientes de AutoLISP y
se encuentran en la siguiente tabla:
Mtodo Valores de bits de modo con sentido para el mtodo


GetInteger 1 2 4 128
GetReal 1 2 4 128
GetDistance 1 2 4 32 64 128
GetAngle 1 2 32 128
GetOrientation 1 2 32 128
GetPoint 1 8 32 128
GetCorner 1 8 32 128
GetString
GetKeyword 1 128

NOTA: El modo no es opcional, y si no se desea ninguno hay que especificar un valor 0.
El segundo parmetro (St r i ng) es una cadena que define las palabras clave vlidas como
nombres de opciones. Estas se indican entre comillas, separadas por un espacio en blanco, y
con la abreviatura en maysculas. La abreviatura es el mnimo nmero de caracteres en que
debe coincidir la respuesta del usuario con una de las palabras clave vlidas. El mtodo siem-
pre devuelve la palabra tal y como est escrita en I ni t i al i zeUser I nput . La solicitud de pala-
bra clave se realiza mediante el mtodo Get Keywor d. Por ejemplo:
Cal l AcadUt i l . I ni t i al i zeUser I nput ( 7, " Al t a Baj a Nor mal " )
Op = AcadUt i l . Get Keywor d ( " Pr eci si n Al t a/ Baj a/ Nor mal : " )
En el ejemplo se supone que las variables AcadUt i l y Op ya han sido definidas. El mtodo Ge-
t Keywor d solicita del usuario una opcin. Si ste desea la opcin Al t a, puede indicar a, al ,
al t o al t a, y en todos los casos la variable Op almacena el valor Al t a.
Aceptacin de valores por defecto

Estudiemos ahora un mecanismo para aceptar valores por defecto, tan tpicos en lnea de co-
mandos.
Cuando desde un programa en VBA se introducen valores no esperados por teclado, se produ-
ce un error de VBA. En estos casos, VBA ejecuta automticamente una sentencia especial lla-
mada On Er r or , si se ha incluido en el programa. Si no es as, detiene automticamente el
programa informando del error. Si se indica la sentencia On Er r or Resume Next , el programa
se reanuda en la lnea siguiente a la que ha producido el error, sin detenerse.
Adems, existe un objeto especfico denominado Er r , que tiene una propiedad Number que
almacena un nmero de error. Cuando no hay errores, ese nmero o ndice de error es 0.
Cuando VBA recibe un tipo de dato inesperado (es lo que ocurre al pulsar I NTRO en la solicitud
de nmero entero por ejemplo, o al cancelar con ESC), el nmero de error es diferente de
0. Una vez que se detecta que ha habido error, para averiguar el tipo de dato inesperado cau-
sante del mismo, se puede examinar la propiedad Descr i pt i on del mismo objeto Er r . Si el
usuario ha introducido una letra o un texto por teclado ante la solicitud de un entero, real o
punto, la descripcin de error es " La ent r ada de usuar i o es una pal abr a cl ave" . Si el
usuario cancela, mediante ESC por ejemplo, la descripcin de error ser diferente.
El mtodo Get I nput estudiado, devuelve el texto introducido por teclado que ha producido el
error. Cuando el usuario pulsa I NTRO para aceptar una opcin por defecto, y VBA espera un
nmero o un punto, lo considera un texto vaco y por lo tanto produce un error con la misma
descripcin expuesta ms arriba. En este caso, Get I nput devuelve una cadena vaca " " .
Para que VBA considere I NTRO como un error, podra pensarse en establecer un modo 1 en
I ni t i al i zeUser I nput . Pero en este caso, simplemente se impedira el I NTRO mostrndose un
mensaje y solicitando de nuevo el dato. Si no se establece un modo 1, el I NTRO es aceptado,
pero entonces no se produce error. El resultado es que cada tipo de solicitud acepta un valor
diferente. As, Get I nt eger podra considerar I NTRO como 0 (depende del diseo del programa
y de la definicin de variable asignada), Get Real como un valor muy pequeo prcticamente 0
y Get Poi nt tomara la posicin del cursor en pantalla en el momento de pulsar I NTRO o el pun-
to de base si se ha especificado.
La solucin a este problema es utilizar el modo 128 en I ni t i al i zeUser I nput . Este modo
acepta datos arbitrarios por teclado y tiene prioridad sobre el modo 1. Por lo tanto, si se indica
el modo 129 (1 + 128), se est impidiendo el I NTRO a causa del modo 1 pero el modo 128
fuerza a aceptarlo. VBA lo considera entonces un error, y lo acepta como palabra clave no es-
perada, con valor de cadena vaca.
En resumen, un mecanismo general para detectar el I NTRO pulsado por el usuario, comprende
los siguientes pasos:
Establecer la sentencia On Er r or Resume Next para que el programa no se detenga al pro-
ducirse un error.
Establecer un modo en I ni t i al i zeUser I nput con 129 como sumando.
Detectar si ha habido error, examinando si Er r . Number es diferente de 0.
Detectar si el error se debe a texto del teclado, examinando si Er r . Descr i pt i on = " La
ent r ada de usuar i o es una pal abr a cl ave"
Recuperar el texto introducido por teclado, mediante Get I nput .
Examinar si ese texto es una cadena vaca " " .
El siguiente ejemplo muestra cmo aceptar una opcin por defecto desde Get I nt eger .
Opt i on Expl i ci t

Di mAcadDoc As Obj ect
Di mAcadModel As Obj ect
Di mAcadUt i l As Obj ect

Sub Macr o( )
Set AcadDoc = Get Obj ect ( , " Aut oCAD. Appl i cat i on" ) . Act i veDocument
Set AcadModel = AcadDoc. Model Space
Set AcadUt i l = AcadDoc. Ut i l i t y

Di mPr ec As I nt eger
Di mHayCl ave As Bool ean
Di mVal or Cl ave As St r i ng
On Er r or Resume Next

Cal l AcadUt i l . I ni t i al i zeUser I nput ( 135)
Pr ec = AcadUt i l . Get I nt eger ( " Val or de pr eci si n <50>: " )
I f Er r . Descr i pt i on = " La ent r ada de usuar i o es una pal abr a cl ave" Then
HayCl ave = Tr ue
El se
HayCl ave = Fal se
End I f
Val or Cl ave = AcadUt i l . Get I nput
I f Er r . Number <> 0 Then
I f HayCl ave And Val or Cl ave = " " Then Pr ec = 50 El se GoTo Er r or es
End I f
Er r . Cl ear

... resto del cdigo ...

End

Er r or es:
MsgBox " *NO VALE*"
End Sub
El modo empleado en I ni t i al i zeUser I nput es 135 (1 + 2 + 4 + 128). Esto impide valores
negativos 0, pero no I NTRO, debido a que el modo 128 prevalece sobre el 1.
Mediante Get I nt eger se solicita un nmero entero. La variable Pr ec se define como I nt eger y
acepta la respuesta del usuario. Si ste indica un valor negativo o cero, se rechaza y se vuelve
a solicitar. Si indica un valor entero positivo ste se almacena en Pr ec, el valor de Er r . Number
es 0 por lo que no se ejecuta la sentencia dentro del I f , y Pr ec mantiene su valor para el resto
del programa.
Si el usuario cancela mediante ESC, se produce un error. La variable HayCl ave, definida como
Bool ean, almacena el resultado verdadero o falso de comparar Er r . Descr i pt i on con el texto
de descripcin, en este caso Fal se. Por eso dentro de la sentencia de I f no se cumplir la
condicin y el programa saltar a la subrutina Er r or es, que por simplificar consiste simple-
mente en mostrar un cuadro de dilogo de aviso con el mensaje *NO VALE*.
Si el usuario pulsa I NTRO, tambin se produce un error al haberse sumado 1 al modo de I ni -
t i al i zeUser I nput . La descripcin del error s coincide con el texto indicado en el cdigo del
programa. La variable Val or Cl ave, definida como St r i ng, almacena el valor devuelto por Ge-
t I nput que en este caso es una cadena vaca. Por lo tanto, se cumple la sentencia dentro del
I f y la variable Pr ec se iguala al valor por defecto 50.
Si el usuario pulsa cualquier otra combinacin (un valor numrico con decimales o un texto),
se produce un error con la descripcin de palabra clave. Pero Get I nput devuelve el texto in-
troducido en vez de cadena vaca, por lo que la sentencia dentro del I f no cumplir su condi-
cin, y se producir un salto a la subrutina de Er r or es.
En todos los casos, la sentencia Er r . Cl ear elimina la descripcin de error para que no se que-
de almacenada y pueda originar mal funcionamiento en la siguiente ejecucin del programa.
Con mtodos de aceptacin de cadenas de texto (GetKeyword y GetString)
Los mtodos de solicitud de cadenas de texto como Get Keywor d y Get St r i ng no producen
error al pulsar el usuario I NTRO y lo entienden como cadena vaca " " . El mecanismo para acep-
tar opciones por defecto difiere del explicado anteriormente. Si se utiliza el modo 128 de I ni -
t i al i zeUser I nput todos los textos introducidos por teclado se aceptan como palabras clave,
sin producir error. Esto obliga a examinar esos textos para ver si coinciden con las palabras
claves permitidas y se desvirta la finalidad de Get Keywor d. Por lo tanto, un mecanismo senci-
llo para aceptar opciones por defecto podra ser:
Di mOp As St r i ng

On Er r or Resume Next
Cal l AcadUt i l . I ni t i al i zeUser I nput ( 0, " Al t a Baj a Nor mal " )
Op = AcadUt i l . Get Keywor d( " Pr eci si n Al t a/ Baj a/ <Nor mal >: " )
I f Er r . Number = 0 Then
I f Op = " " Then Op = " Nor mal " El se GoTo Er r or es
End I f
El modo indicado en I ni t i al i zeUser I nput es 0, y se incluyen tres palabras clave como nom-
bres de opciones permitidas. El propio mtodo Get Keywor d impide indicar valores numricos o
textos que no correspondan con las tres palabras clave. Si se produce cualquier error inespe-
rado, la sentencia El se dentro del I f hace que el programa salte a la subrutina de control de
errores. Si el usuario introduce una de las opciones por teclado, no se produce error y la varia-
ble Op almacena la palabra clave de la opcin. Por lo tanto, la sentencia dentro del I f no se
cumple y la variable Op sigue con su valor. Si el usuario pulsa I NTRO, no se produce tampoco
error, pero la variable Op almacena una cadena vaca y eso hace que la sentencia dentro del I f
se cumpla. El resultado es asignar a la variable Op el valor correspondiente a la opcin por de-
fecto, en este caso Nor mal .
Con el mtodo de aceptacin de nmeros enteros (GetInteger)
Para aceptar un valor por defecto se puede utilizar el mecanismo ya explicado. Para aceptar
palabras clave adems de valores numricos, el mecanismo se explica un poco ms adelante.
Estos mecanismos tienen la ventaja de que se pueden aplicar con mnimas modificaciones a
todos los mtodos que solicitan valores numricos y puntos. No obstante, es posible utilizar
otros mecanismos especficos dependiendo del diseo del programa y conociendo los tipos de
errores producidos.
Por ejemplo, cuando se define una variable como I nt eger y se le asigna el valor devuelto por
Get I nt eger , si el usuario pulsa I NTRO, VBA lo considera un tipo de dato inesperado y origina
un error de desbordamiento con un valor de Er r . Number igual a 6. Cualquier otro error, por
ejemplo al cancelar mediante ESC, produce otro nmero diferente. Por lo tanto, un mecanismo
sencillo para aceptar opciones por defecto es:
Di mN As I nt eger

Cal l AcadUt i l . I ni t i al i zeUser I nput ( 6)
On Er r or Resume Next
N = AcadUt i l . Get I nt eger ( " Pr eci si n <3>: " )
I f Er r . Number <> 0 Then
I f Er r . Number = 6 Then N = 3 El se GoTo Er r or es
End I f
Mediante el modo 6, el mtodo I ni t i al i zeUser I nput impide valores negativos y 0. La sen-
tencia On Er r or Resume Next , hace que el programa no se detenga al producirse un error y
contine normalmente. El mtodo Get I nt eger solicita un nmero entero. Si el usuario indica
uno que no sea negativo ni 0, se acepta, el valor de Er r . Number es 0, la condicional I f no se
cumple y el programa contina sin problemas. Si el usuario indica I NTRO, se produce un error
aunque el programa contina sin detenerse, el valor de Er r . Number es 6, y entonces en la va-
riable N se almacena el valor por defecto 3.
Si se origina cualquier otro error (por ejemplo el usuario cancela mediante ESC), el valor de
Er r . Number es diferente de 0 y 6, y entonces la sentencia GoTo salta a una subrutina Er r or es,
donde habr especificadas una serie de actuaciones y despus se abortar el programa.
Con el mtodo de aceptacin de nmeros reales (GetReal)
Para la aceptacin de valores por defecto se puede utilizar el mismo mecanismo, sustituyendo
simplemente la declaracin de variable como Doubl e en vez de I nt eger , y empleando lgica-
mente el mtodo Get Real en lugar de Get I nt eger . Para aceptar palabras clave adems de
valores numricos, el mecanismo se explica un poco ms adelante en esta misma pgina.
Si se desea un mecanismo especfico para nmeros reales, cuando se define una variable como
Doubl e y se le asigna el valor devuelto por Get Real , si el usuario pulsa I NTRO, VBA lo conside-
ra un valor residual muy pequeo prximo a 0. Como ese valor es un nmero real, Get Real no
produce error. Por lo tanto, el mecanismo de aceptacin no va a ser detectar un nmero de
error, sino un valor devuelto muy pequeo.
Di mPr ec As Doubl e

On Er r or GoTo Er r or es
Cal l AcadUt i l . I ni t i al i zeUser I nput ( 6)
Pr ec = AcadUt i l . Get Real ( " Pr eci si n <2. 5>: " )
I f Pr ec < 0. 00000001 Then Pr ec = 2. 5
En este caso, la sentencia On Er r or enva el programa directamente a la subrutina Er r or es,
porque el I NTRO como respuesta no va a ser considerado un error sino como un valor muy pe-
queo prximo a 0. Mediante el modo 6, el mtodo I ni t i al i zeUser I nput impide valores ne-
gativos y 0. El propio mtodo Get Real impide valores no numricos. Mediante I f se analiza el
valor introducido por el usuario. Si es ms pequeo que cualquiera que hubiera podido indicar
por teclado, entonces es que ha pulsado I NTRO y se asigna a la variable el valor por defecto.
En caso contrario, en I f no se realiza ninguna accin y el programa contina normalmente.
Otros mtodos
Crear una rutina de aceptacin de valores por defecto para los dems mtodos resulta sencillo,
ya que slo hay que reflejarse en los ejemplos vistos hasta aqu y adecuar el ms preciso.
Combinacin de solicitudes numricas con opciones textuales y GetInput
Si se ha indicado un modo 128 en I ni t i al i zeUser I nput , el mtodo de solicitud empleado a
continuacin aceptar la entrada de teclado como palabra clave y Get I nput devolver dicha
entrada como un texto. Si la entrada ha sido I NTRO, lo devolver como cadena vaca. Esto
permite establecer un mecanismo de aceptacin de valores por defecto cuando se emplean
funciones de solicitud de datos numricos o puntos, tal como se ha explicado anteriormente.
Pero si la entrada de teclado no es I NTRO se puede emplear Get I nput para combinar solicitu-
des numricas con opciones de texto. Por ejemplo:
Di mPr ec As I nt eger
Di mHayCl ave As Bool ean
Di mVal or Cl ave As St r i ng

On Er r or Resume Next
Cal l AcadUt i l . I ni t i al i zeUser I nput ( 135, " Al t a Baj a Nor mal " )
Pr ec = AcadUt i l . Get I nt eger ( " Val or de pr eci si n o Al t a/ Baj a/ Nor mal : " )
I f Er r . Descr i pt i on = " La ent r ada de usuar i o es una pal abr a cl ave" Then
HayCl ave = Tr ue
El se
HayCl ave = Fal se
End I f
Val or Cl ave = AcadUt i l . Get I nput
I f Er r . Number <> 0 Then
I f HayCl ave And Val or Cl ave <> " " Then GoSub Pr eci si on El se GoTo Er r or es
End I f
Er r . Cl ear

... resto del cdigo ...

End

Pr eci si on:
I f Val or Cl ave = " Nor mal " Then Pr ec = 10: Ret ur n
I f Val or Cl ave = " Al t a" Then Pr ec = 100: Ret ur n
I f Val or Cl ave = " Baj a" Then Pr ec = 1: Ret ur n
GoTo Er r or es
El mecanismo es similar al explicado ya. Si se indica un valor negativo o cero se rechaza. Si se
indica un nmero entero positivo se acepta porque no produce error. Si se indica un valor no
esperado por teclado, se produce un error y el modo 128 como sumando en I ni t i al i zeUse-
r I nput acepta la entrada como palabra clave. Get I nput devuelve esa entrada como texto y lo
almacena en Val or Cl ave. La sentencia dentro del I f examina si HayCl ave es verdadera y si
Val or Cl ave no es una cadena vaca. En caso de ser as, llama a la subrutina Pr eci si on, don-
de se analiza el texto aceptado como palabra clave y se asigna a la variable Pr ec el valor ente-
ro correspondiente a cada precisin, continuando la ejecucin del programa mediante Ret ur n.
Si la palabra clave no es ninguna de las tres admitidas, se salta a la subrutina de errores.
Si se produce un error inesperado, su descripcin no corresponder a la de palabra clave, y la
sentencia dentro del I f no se cumplir por lo que El se saltar a la subrutina Er r or es. Si se
pulsa I NTRO (en el ejemplo no se admite una opcin por defecto), Val or Cl ave ser una cade-
na vaca, la sentencia dentro del I f tampoco se cumplir y se saltar a la subrutina de Er r o-
r es.
Sigamos pues ahora con la explicacin de los mtodos que faltan del objeto Ut i l i t y de utili-
dad.
Pol ar Poi nt . Este mtodo obtiene el punto (matriz de tres elementos Doubl e) a partir de otro
punto dado (matriz de tres elementos Doubl e), segn un ngulo en radianes (Doubl e) y una
distancia en las unidades actuales (Doubl e). Es decir, obtiene un punto por coordenadas pola-
res a partir de otro dado.
La sintaxis de este mtodo es:
DblPunto2 = ObjUtilidad. Pol ar Poi nt ( DblPunto1, Dblngulo, DblDistancia)
En el siguiente ejemplo, se dibuja una lnea perpendicular desde el punto medio entre otros
dos puntos, con una longitud especificada:
Opt i on Expl i ci t

Di mAcadDoc As Obj ect
Di mAcadModel As Obj ect
Di mAcadUt i l As Obj ect

Sub Macr o( )
Set AcadDoc = Get Obj ect ( , " Aut oCAD. Appl i cat i on" ) . Act i veDocument
Set AcadModel = AcadDoc. Model Space
Set AcadUt i l = AcadDoc. Ut i l i t y

Di mVPunt o1, VPunt o2, VPunt oFi nal
Di mPunt o1( 2) As Doubl e, Punt o2( 2) As Doubl e
Di mPunt oMedi o( 2) As Doubl e, Punt oFi nal ( 2) As Doubl e
Di mngul o As Doubl e, Di st anci a As Doubl e
Const PI = 3. 1415926

Cal l AcadUt i l . I ni t i al i zeUser I nput ( 1)
VPunt o1 = AcadUt i l . Get Poi nt ( , " Pr i mer punt o: " )
Punt o1( 0) = VPunt o1( 0) : Punt o1( 1) = VPunt o1( 1) : Punt o1( 2) = VPunt o1( 2)
Cal l AcadUt i l . I ni t i al i zeUser I nput ( 1)
VPunt o2 = AcadUt i l . Get Poi nt ( Punt o1, " Segundo punt o: " )
Punt o2( 0) = VPunt o2( 0) : Punt o2( 1) = VPunt o2( 1) : Punt o2( 2) = VPunt o2( 2)
Punt oMedi o( 0) = ( ( Punt o1( 0) + Punt o2( 0) ) / 2)
Punt oMedi o( 1) = ( ( Punt o1( 1) + Punt o2( 1) ) / 2) : Punt oMedi o( 2) = Punt o1( 2)
ngul o = AcadUt i l . Angl eFr omXAxi s( Punt o1, Punt o2)
Di st anci a = AcadUt i l . Get Di st ance( Punt oMedi o, " Di st anci a en per pendi cul ar : " )
VPunt oFi nal = AcadUt i l . Pol ar Poi nt ( Punt oMedi o, ngul o + PI / 2, Di st anci a)
Punt oFi nal ( 0) = VPunt oFi nal ( 0)
Punt oFi nal ( 1) = VPunt oFi nal ( 1)
Punt oFi nal ( 2) = VPunt oFi nal ( 2)
Cal l AcadDoc. Model Space. AddLi ne( Punt oMedi o, Punt oFi nal )
End Sub
Los puntos Punt o1 y Punt o2 (VPunt o1 y VPunt o2 en su definicin Var i ant ) son solicitados por
el programa, sin permitir I NTRO como respuesta nula. Pueden ser los extremos de una lnea ya
dibujada o dos puntos cualesquiera. A continuacin, el programa calcula el punto medio Pun-
t oMedi o haciendo medias aritmticas con las coordenadas X e Y. Mediante el mtodo Angl e-
Fr omXAxi s calcula el ngulo absoluto entre los puntos 1 y 2. Despus solicita la distancia en
perpendicular y calcula el punto Punt oFi nal a partir del punto medio, llevando la distancia a
un ngulo que resulta de sumar PI / 2 al ngulo absoluto entre 1 y 2. La ltima operacin es
dibujar una lnea entre los dos ltimos puntos.
Real ToSt r i ng. Real ToSt r i ng convierte el valor proporcionado, el cual ser real (Doubl e), a
cadena de texto de acuerdo con las unidades y los decimales de precisin indicados:
StrRealCadena = ObjUtilidad. Real ToSt r i ng( DblValorReal, IntUnidades, IntPrecis)
DblValorReal es, como hemos dicho, un valor Doubl e. IntUnidades es un valor I nt eger que
admite las mismas constantes explicadas en el mtodo Di st anceToReal y que representa las
unidades a las que se convertir el valor real. IntPrecis especifica la precisin en decimales
del nmero real, el cual se convertir a cadena. Este ltimo argumento admite un valor entre 0
y 8 (siempre entero).
En la siguiente rutina:
Di mTxVal or As St r i ng
TxVal or = AcadUt i l . Real ToSt r i ng( 326. 7539, acFr act i onal , 2)
MsgBox TxVal or
el valor devuelto ser la cadena " 326 3/ 4" .
St ar t UndoMar k. Este mtodo coloca una seal de inicio del comando DESHACER en el lugar
del programa que se utilice. Su sintaxis es:
ObjUtilidad. St ar t UndoMar k
Esta caracterstica se corresponde con la opcin I ni ci o (BEgi n en ingls) del comando DES-
HACER (UNDO en ingls) de AutoCAD.
NOTA: Vase en esta misma seccin el mtodo EndUndoMar k que coloca marcas de fin de DES-
HACER.
Tr ansl at eCoor di nat es. Convierte un punto o vector de desplazamiento de un sistema de
coordenadas de origen a otro de destino:
VarPtoConvertido = ObjUtilidad. Tr anl at eCoor di nat es( DblPtoOriginal, IntSisOrigen,
IntSisDestino, BooDesplazamiento)
BooDesplazamiento es un valor Bool ean que indica si la matriz de tres valores Doubl e que es
DblPtoOriginal se considera un vector de desplazamiento. Si es verdadero, se considera un
vector de desplazamiento. Si es falso, se considera un punto.
Los sistemas de coordenadas de origen y destino se indican mediante un cdigo de nmero
entero (I nt eger ). Para mayor facilidad y comodidad existen cuatro constantes que tambin se
pueden especificar:
acWor l d
acUCS
acDi spl ayDCS
acPaper SpaceDCS
Estas constantes se corresponden con los distintos sistemas de coordenadas que se utilizan en
la interfaz grfica de AutoCAD 14 (Sistema de Coordenadas Universal o SCU, Sistema de Co-
ordenadas Personal o SCP, Sistema de Coordenadas de Visualizacin o SCV y Sistema de Co-
ordenadas de Espacio Papel o SCEP).
En esta rutina (utilizando las convenciones que arrastramos desde el inicio de esta seccin):
Di mVar Pt oOr , Var Pt oDest
Var Pt oOr = AcadUt i l . Get Poi nt ( , " Punt o que conver t i r : " )
Var Pt oDest = AcadUt i l . Tr ansl at eCoor di nat es( Var Pt oOr , acUCS, acWor l d, Fal se)
el mtodo Get Poi nt solicita indicar un punto, ste se acepta en la variable (definida como Va-
r i ant ) Var Pt oOr y despus se convierte desde el SCP actual al SCU, indicando un valor Fal se
de desplazamiento para que no se considere un vector.
NOTA: Recurdese que no declarar una variable con un tipo concreto es lo mismo que decla-
rarla como Var i ant .
A continuacin estudiaremos un programa que resulta muy jugoso como repaso de todo lo que
hemos estudiado hasta ahora. Este programa maneja un cuadro de dilogo (formulario) que es
el que se observa en la pgina siguiente.
Como vemos, resulta ser un programa para dibujar agujeros para tornillos en alzado. Se indica
primero el tipo de agujero (con cajera recta, con cajera avellanada o sin cajera). Despus he-
mos de introducir en las diferentes casillas los distintos valores necesarios para dibujar el agu-
jero.
Al pulsar el botn Aceptar se nos solicitar el punto y el ngulo de insercin, tras lo cual se
dibujar el agujero con la lnea de ejes en una capa llamada EJ ES, con tipo de lnea TRA-
ZO_Y_PUNTO y color rojo.
El botn Cancelar termina el programa.
Veamos, tras el diseo del letrero, el cdigo VBA de este programa ya un poco complejo.


Opt i on Expl i ci t

Di mAcadDoc As Obj ect , AcadUt i l As Obj ect
Di mAcadObj As Obj ect , AcadEj e As Obj ect , AcadCapa As Obj ect
Di mVPt 0, VPt 1, VPt 2, VPt 3, VPt 4, VPt 5
Di mVPt gj , VPt 1Ej e, VPt 2Ej e
Di mDi amAguj er o0, Pr of Aguj er o0, Di amCaj er a0, Pr of Caj er a0
Di mPt 0( 2) As Doubl e
Di mPt 1( 2) As Doubl e, Pt 2( 2) As Doubl e, Pt 3( 2) As Doubl e
Di mPt 4( 2) As Doubl e, Pt 5( 2) As Doubl e
Di mPt gj ( 2) As Doubl e, Pt 1Ej e( 2) As Doubl e, Pt 2Ej e( 2) As Doubl e
Di mRef ent 0 As I nt eger , Angul o As Var i ant , PI As Doubl e

Pr i vat e Sub Caj er aAvel l anada_Cl i ck( )
Di amCaj er a. Enabl ed = Tr ue
Pr of Caj er a. Enabl ed = Tr ue
Label 3. Enabl ed = Tr ue
Label 4. Enabl ed = Tr ue
I magen. Pi ct ur e = LoadPi ct ur e( " caj er a_avel l anada. bmp" )
End Sub

Pr i vat e Sub Caj er aRect a_Cl i ck( )
Di amCaj er a. Enabl ed = Tr ue
Pr of Caj er a. Enabl ed = Tr ue
Label 3. Enabl ed = Tr ue
Label 4. Enabl ed = Tr ue
I magen. Pi ct ur e = LoadPi ct ur e( " caj er a_r ect a. bmp" )
End Sub

Pr i vat e Sub Cancel ar _Cl i ck( )
End
End Sub

Pr i vat e Sub Di buj ar _Cl i ck( )
On Er r or GoTo Er r or
Chequear
I f Er r or es. Capt i on = " " Then El se Exi t Sub
f or mAguj er os. Hi de

Cal l AcadUt i l . I ni t i al i zeUser I nput ( 1)
VPt 0 = AcadUt i l . Get Poi nt ( , " Punt o: " )
Pt 0( 0) = VPt 0( 0) : Pt 0( 1) = VPt 0( 1) : Pt 0( 2) = VPt 0( 2)
Cal l AcadDoc. Set Var i abl e( " osmode" , 512)
Cal l AcadUt i l . I ni t i al i zeUser I nput ( 1)
Angul o = AcadDoc. Ut i l i t y. Get Angl e( VPt 0, " Angul o ( Cer ca de) : " )
PI = 3. 14159265359
I f Si nCaj er a. Val ue = Tr ue Then
VPt gj = VPt 0
Di bAguj er o
El se
Di bCaj er a
Di bAguj er o
End I f

VPt 1Ej e = AcadDoc. Ut i l i t y. Pol ar Poi nt ( Pt 0, Angul o + PI , 5)
Pt 1Ej e( 0) = VPt 1Ej e( 0) : Pt 1Ej e( 1) = VPt 1Ej e( 1) : Pt 1Ej e( 2) = VPt 1Ej e( 2) :
VPt 2Ej e = AcadDoc. Ut i l i t y. Pol ar Poi nt ( Pt 3, Angul o, 5)
Pt 2Ej e( 0) = VPt 2Ej e( 0) : Pt 2Ej e( 1) = VPt 2Ej e( 1) : Pt 2Ej e( 2) = VPt 2Ej e( 2) :
Set AcadEj e = AcadObj . AddLi ne( Pt 1Ej e, Pt 2Ej e)

On Er r or Resume Next
I f I sEmpt y( AcadDoc. Li net ypes. I t em( " t r azo_y_punt o" ) ) Then
Cal l AcadDoc. Li net ypes. Load( " t r azo_y_punt o" , " acadi so. l i n" )
End I f
I f I sEmpt y( AcadDoc. Layer s. I t em( " ej es" ) ) Then
Set AcadCapa = AcadDoc. Layer s. Add( " ej es" )
AcadCapa. Li net ype = " t r azo_y_punt o"
AcadCapa. Col or = 1
End I f
AcadEj e. Layer = " ej es"

Cal l AcadDoc. Set Var i abl e( " osmode" , Ref ent 0)
Open " aguj er os. $vr " For Out put As #1
Wr i t e #1, Di amAguj er o, Pr of Aguj er o, Di amCaj er a, Pr of Caj er a
Cl ose #1

Er r or :
MsgBox " NO VALE! " , , " Mensaj e de er r or "
End Sub

Pr i vat e Sub Di bCaj er a( )
VPt 1 = AcadUt i l . Pol ar Poi nt ( Pt 0, Angul o - ( PI / 2) , Val ( Di amCaj er a) / 2)
Pt 1( 0) = VPt 1( 0) : Pt 1( 1) = VPt 1( 1) : Pt 1( 2) = VPt 1( 2)
VPt 2 = AcadUt i l . Pol ar Poi nt ( Pt 1, Angul o, Val ( Pr of Caj er a) )
Pt 2( 0) = VPt 2( 0) : Pt 2( 1) = VPt 2( 1) : Pt 2( 2) = VPt 2( 2)
VPt 3 = AcadUt i l . Pol ar Poi nt ( Pt 2, Angul o + ( PI / 2) , Val ( Di amCaj er a) )
Pt 3( 0) = VPt 3( 0) : Pt 3( 1) = VPt 3( 1) : Pt 3( 2) = VPt 3( 2)
VPt 4 = AcadUt i l . Pol ar Poi nt ( Pt 3, Angul o + PI , Val ( Pr of Caj er a) )
Pt 4( 0) = VPt 4( 0) : Pt 4( 1) = VPt 4( 1) : Pt 4( 2) = VPt 4( 2)
I f Caj er aAvel l anada. Val ue = Tr ue Then
VPt 1 = AcadUt i l . Pol ar Poi nt ( Pt 1, Angul o - ( PI / 2) , Val ( Pr of Caj er a) / 2) : _
Pt 1( 0) = VPt 1( 0) : Pt 1( 1) = VPt 1( 1) : Pt 1( 2) = VPt 1( 2)
End I f
I f Caj er aAvel l anada. Val ue = Tr ue Then
VPt 4 = AcadUt i l . Pol ar Poi nt ( Pt 4, Angul o + ( PI / 2) , Val ( Pr of Caj er a) / 2) : _
Pt 4( 0) = VPt 4( 0) : Pt 4( 1) = VPt 4( 1) : Pt 4( 2) = VPt 4( 2)
End I f

Cal l AcadObj . AddLi ne( Pt 1, Pt 2)
Cal l AcadObj . AddLi ne( Pt 2, Pt 3)
Cal l AcadObj . AddLi ne( Pt 3, Pt 4)
VPt gj = AcadUt i l . Pol ar Poi nt ( Pt 0, Angul o, Val ( Pr of Caj er a) )
End Sub

Pr i vat e Sub Di bAguj er o( )
Pt gj ( 0) = VPt gj ( 0) : Pt gj ( 1) = VPt gj ( 1) : Pt gj ( 2) = VPt gj ( 2)
VPt 1 = AcadUt i l . Pol ar Poi nt ( Pt gj , Angul o - ( PI / 2) , Val ( Di amAguj er o) / 2)
Pt 1( 0) = VPt 1( 0) : Pt 1( 1) = VPt 1( 1) : Pt 1( 2) = VPt 1( 2)
VPt 2 = AcadUt i l . Pol ar Poi nt ( Pt 1, Angul o, Val ( Pr of Aguj er o) )
Pt 2( 0) = VPt 2( 0) : Pt 2( 1) = VPt 2( 1) : Pt 2( 2) = VPt 2( 2)
VPt 3 = AcadUt i l . Pol ar Poi nt ( Pt 2, Angul o + ( PI / 2) , Val ( Di amAguj er o) / 2)
Pt 3( 0) = VPt 3( 0) : Pt 3( 1) = VPt 3( 1) : Pt 3( 2) = VPt 3( 2)
VPt 3 = AcadUt i l . Pol ar Poi nt ( Pt 3, Angul o, Val ( Di amAguj er o) / 4)
Pt 3( 0) = VPt 3( 0) : Pt 3( 1) = VPt 3( 1) : Pt 3( 2) = VPt 3( 2)
VPt 4 = AcadUt i l . Pol ar Poi nt ( Pt 2, Angul o + ( PI / 2) , Val ( Di amAguj er o) )
Pt 4( 0) = VPt 4( 0) : Pt 4( 1) = VPt 4( 1) : Pt 4( 2) = VPt 4( 2)
VPt 5 = AcadUt i l . Pol ar Poi nt ( Pt 4, Angul o + PI , Val ( Pr of Aguj er o) )
Pt 5( 0) = VPt 5( 0) : Pt 5( 1) = VPt 5( 1) : Pt 5( 2) = VPt 5( 2)

Cal l AcadObj . AddLi ne( Pt 1, Pt 2)
Cal l AcadObj . AddLi ne( Pt 2, Pt 4)
Cal l AcadObj . AddLi ne( Pt 4, Pt 5)
Cal l AcadObj . AddLi ne( Pt 2, Pt 3)
Cal l AcadObj . AddLi ne( Pt 3, Pt 4)
End Sub

Pr i vat e Sub Chequear ( )
I f Val ( Di amAguj er o) <= 0 Then
Er r or es. Capt i on = " Di met r o de aguj er o debe ser mayor o i gual que 0"
Di amAguj er o. Sel St ar t = 0: Di amAguj er o. Sel Lengt h = Len( Di amAguj er o)
Di amAguj er o. Set Focus: Exi t Sub
End I f

I f Val ( Pr of Aguj er o) <= 0 Then
Er r or es. Capt i on = " Pr of undi dad de aguj er o debe ser mayor o i gual que 0"
Pr of Aguj er o. Sel St ar t = 0: Pr of Aguj er o. Sel Lengt h = Len( Pr of Aguj er o)
Pr of Aguj er o. Set Focus: Exi t Sub
End I f

I f Caj er a. Enabl ed = Tr ue Then
I f Val ( Di amCaj er a) <= Val ( Di amAguj er o) Then
Er r or es. Capt i on = " Di met r o de caj er a debe ser mayor que el de aguj er o"
Di amCaj er a. Sel St ar t = 0: Di amCaj er a. Sel Lengt h = Len( Di amCaj er a)
Di amCaj er a. Set Focus: Exi t Sub
End I f
End I f

I f Caj er a. Enabl ed = Tr ue Then
I f Val ( Pr of Caj er a) <= 0 Then
Er r or es. Capt i on = " Pr of undi dad de caj er a debe ser mayor o i gual que 0"
Pr of Caj er a. Sel St ar t = 0: Pr of Caj er a. Sel Lengt h = Len( Pr of Caj er a)
Pr of Caj er a. Set Focus: Exi t Sub
End I f
End I f

Er r or es. Capt i on = " "
End Sub

Pr i vat e Sub User For m_I ni t i al i ze( )
Set AcadDoc = Get Obj ect ( , " Aut ocad. Appl i cat i on" ) . Act i veDocument
Set AcadUt i l = AcadDoc. Ut i l i t y
Set AcadObj = AcadDoc. Model Space

On Er r or Resume Next
Ref ent 0 = AcadDoc. Get Var i abl e( " osmode" )
Open " aguj er os. $vr " For I nput As #1
I f Er r . Descr i pt i on = " No se encont r el ar chi vo" Then GoSub Def ect o
I nput #1, Di amAguj er o0, Pr of Aguj er o0, Di amCaj er a0, Pr of Caj er a0

Di amAguj er o = Di amAguj er o0
Pr of Aguj er o = Pr of Aguj er o0
Di amCaj er a = Di amCaj er a0
Pr of Caj er a = Pr of Caj er a0
Cl ose #1

Exi t Sub
Def ect o:
Open " aguj er os. $vr " For Append As #1
Wr i t e #1, " 10" , " 10" , " 20" , " 5"
Cl ose #1
Open " aguj er os. $vr " For I nput As #1
Ret ur n
End Sub

Pr i vat e Sub Si nCaj er a_Cl i ck( )
Di amCaj er a. Enabl ed = Fal se
Pr of Caj er a. Enabl ed = Fal se
Label 3. Enabl ed = Fal se
Label 4. Enabl ed = Fal se
I magen. Pi ct ur e = LoadPi ct ur e( " si n_caj er a. bmp" )
End Sub
Iremos comentando cada procedimiento Sub por separado y no en el orden en que estn en el
listado, sino en uno quiz ms lgico.
( Gener al ) _( Decl ar aci ones)
Aqu como siempre se declaran todas las variables que luego utilizaremos, tanto las de objeto
(Obj ect ), como Var i ant y Doubl e. Recordar la necesidad de tener un doble juego de varia-
bles, unas Var i ant y otras Doubl e, para hacer trasvase al obtener un punto y luego querer
utilizarlo.
User For m_I ni t i al i ze( )
Este es el procedimiento que se ejecuta nada ms correr el programa, al inicializarse el formu-
lario. Lo primero es lo de siempre, esto es, asignar a cada objeto de AutoCAD que vamos a
necesitar su valor correspondiente. Despus se utiliza la sentencia On Er r or Resume Next
para controlar la apertura del archivo que vamos a explicar ahora. Luego se guarda en Re-
f ent 0 el valor de la variable OSMODE de AutoCAD; ya veremos para qu.
As como AutoLISP guarda los valores de las variables globales utilizadas hasta cerrar Auto-
CAD, con VBA no disponemos de esa ventaja. Es por ello que, dada la caracterstica de los
programas para AutoCAD que poseen la capacidad de almacenar los ltimos valores utilizados
como valores por defecto, nos vamos a inventar un mtodo para que esto suceda tambin en
nuestros programas VBA.
El sencillo mtodo consiste simplemente en crear un archivo de texto donde se almacenarn,
en cada ejecucin del programa, los ltimos valores utilizados. De este modo, al correr de
nuevo el programa, se leern dichos valores y se introducirn en el cuadro para ofrecerlos por
defecto.
De esta manera intentamos leer el archivo que almacenar los valores (AGUJ EROS. $VR) en el
directorio actual. Si no existiera se producira un error, por lo que la ejecucin sigue en la si-
guiente lnea (recordemos el On Er r or Resume Next ). En esta lnea se compara el texto del
error con el que significa que el archivo no se ha encontrado y, si fueran iguales, la ejecucin
se dirige a la subrutina Def ect o donde se crea y se le aaden unos valores por defecto.
Tanto si existiera como si estuviera recin creado, se contina la ejecucin leyendo los valores
del archivo e introducindolos en el cuadro.
NOTA: Es ms lgico utilizar los valores numricos de Er r en lugar de sus descripciones, ya
que podra utilizarse as en cualquier plataforma idiomtica VBA. Para hallar el nmero de un
error (si no disponemos de una lista), slo hemos de provocarlo y extraer el valor con
Er r . Number .
Si nCaj er a_Cl i ck( )
Este procedimiento y los dos siguientes dicen referencia a la hora de hacer clic en alguno de
los tres botones excluyentes para elegir el tipo de agujero. Este concretamente responde al
evento de hacer clic en el botn excluyente Sin cajera. Al hacerlo, tanto la casillas de profundi-
dad de cajera como la de dimetro de la cajera, as como sus etiquetas, deben inhabilitarse.
Tambin se refleja en el cuadro de imagen el archivo . BMP correspondiente.
Caj er aRect a_Cl i ck( )
Al igual que en el anterior procedimiento explicado, en Caj er aRect a_Cl i ck( ) se muestra la
imagen correspondiente en el cuadro de imagen y se establecen como habilitadas las casillas y
etiquetas de profundidad y dimetro de cajera por si al hacer clic en Cajera recta se proviniera
de Sin cajera, la cual las desactiva como sabemos.
Caj er aAvel l anada_Cl i ck( )
As tambin, en este procedimiento Sub se muestra la imagen correspondiente con una cajera
avellanada en el cuadro de imagen, y tambin se establecen como habilitadas las casillas y
etiquetas de profundidad y dimetro de cajera por si al hacer clic en Cajera avellanada se pro-
viniera de Sin cajera.
Di buj ar _Cl i ck( )
Este es el procedimiento que arranca al ser pulsado el botn Aceptar. Lo primero que hace es
definir una rutina de errores que controlar salidas no deseadas, por ejemplo (como al pulsar
ESC), u otros errores no deseados. Despus se llama al procedimiento de chequeo de casillas,
el cual se comentar seguido de ste.
Tras ocultar el formulario (letrero de dilogo) se pregunta por el punto de insercin del agujero
(sin admitir I NTRO como respuesta) y se guardan sus coordenadas en VPt 0. Seguidamente se
hace el trasvase de variables con Pt o0, que ser la que se utilice para el dibujo.
Se establece el valor de OSMODE a 512 (Cercano) y se pide el ngulo de insercin. Y tras esta-
blecer el valor de PI se comprueba si el agujero tiene cajera o no. Si no tuviera se llama ni-
camente a la rutina de dibujo del agujero y, si tuviera cajera (recta o avellanada), se llama
primero a la rutina que dibuja la cajera y luego a la del agujero. Adems, el hecho de no tener
cajera hace que el punto de insercin sea igual al primer punto de dibujo del agujero
Las sentencias siguientes se corresponden con los clculos de los puntos del eje de simetra.
Adems se carga el tipo de lnea si no est cargado y se crea la capa si no existe que
pertenecern al eje. A esta ltima se le asigna el tipo de lnea cargado y el color rojo.
Por ltimo se reasigna a la variable OSMODE su valor original (por eso lo guardamos en Re-
f ent 0) y se guardan los valores utilizados en el archivo de valores por defecto.
NOTA: Recurdese que antes de finalizar este procedimiento ha habido que pasar por otros
dos o tres: el de chequeo, el de dibujo de cajera y el de dibujo de agujero. Estos se estudian
ahora por ese orden.
Chequear ( )
Aqu se comprueban los valores de cada casilla y, si alguno estuviera errado, se muestra un
mensaje en una lnea de errores inferior (que es una etiqueta), se selecciona el texto de la
casilla y se sale de procedimiento.
Al haber error el texto de la lnea inferior es diferente que una cadena vaca. Si no hay error
este texto es igual a la cadena vaca (" " ). Repsese el cdigo del procedimiento anterior para
ver cmo se controla despus esto.
Di bCaj er a( )
Para dibujar la cajera se calculan todos los puntos necesarios y se dibuja. Tambin se tiene en
cuenta si es recta o avellanada.
Di bAguj er o( )
Para dibujar el agujero se calculan todos los puntos y se dibuja.
NOTA: Recurdese que tras este procedimiento Sub se sigue en Di buj ar _Cl i ck( ) .
Cancel ar _Cl i ck( )
Este Sub nicamente dice que al pulsar el botn Cancelar se acabe el programa, sin ms.
NOTA: Evidentemente, para que este programa funcione, habrn de estar los archivos . BMP en
el directorio actual de trabajo.
4 fase intermedia de ejercicios
Escribir una programa que maneje el cuadro de dilogo que se puede ver en la pgina si-
guiente.
El programa dibuja tuercas hexagonales en vista de perfil. Los datos de la distancia entre aris-
tas y la altura de la tuerca se introducen en las casillas correspondientes. El botn Punto de
insercin< sale del letrero para marcar un punto en pantalla. Al hacerlo vuelve al letrero y es-
cribe las coordenadas en sus casillas correspondientes.
Una vez introducidos todos
los datos necesarios, el
botn Dibujar realiza el
dibujo y acaba el
programa. El botn
Cancelar simplemente
termina la aplicacin.
Introdzcase algn control
de entrada de datos del
usuario, as como unos
valores por defecto con los
que arranque el cuadro (se
puede hacer en tiempo de
diseo).
DOCE.10. EL TRAZADO
El trazado o plotteado de dibujos desde el VBA de AutoCAD 14 se maneja mediante el objeto
de trazado llamado Pl ot . Si comprobamos la lista jerrquica de objetos, ste es descendiente
directo del documento actual activo (Act i veDocument ).
Como siempre, si vamos a utilizarlo mucho en un programa podemos declarar una variable
para l, y despus asignarle su valor, por ejemplo as:
Opt i on Expl i ci t
Di mAcadDoc As Obj ect
Di mAcadPl ot As Obj ect
y luego:
Set AcadDoc = Get Obj ect ( , " Aut oCAD. Appl i cat i on" ) . Act i veDocument
Set AcadPl ot = AcadDoc. Pl ot
Propiedades del objeto de trazado:
AdjustAreaFill
Appl i cat i on
HideLines
Or i gi n
PaperSize
PlotOrientation
PlotScale
PlotUnits
Rot at i on
Mtodos del objeto de trazado:
LoadPC2
PlotExtents
PlotLimits
PlotPreview
PlotToDevice
PlotToFile
PlotView
PlotWindow
PlotWithConfigFile
SavePC2
Vemos que este objeto posee diferentes propiedades (algunas ya conocidas) y mtodos que
habremos de utilizar con conveniencia para asegurar un trazado fidedigno. Por ello vamos a
pasar directamente a su explicacin.
Adj ust Ar eaFi l l . Obtiene y/o asigna el estado actual de activacin de ajuste de rea de re-
lleno para el trazado. La variable que lo recoja o el valor que se asigne sern ambos tipo Boo-
l ean; siendo Tr ue la opcin para activado y Fal se la opcin para desactivado.
La sintaxis para asignar un valor es la siguiente:
ObjetoTrazado. Adj ust Ar eaFi l l = BooAjusteRelleno
La sintaxis para obtener el valor actual es la que sigue:
BooAjusteRelleno = ObjetoTrazado. Adj ust Ar eaFi l l
Hi deLi nes. Obtiene y/o asigna el estado actual de ocultacin de lneas para el trazado. La
variable que lo recoja o el valor que se asigne sern ambos tipo Bool ean; siendo Tr ue la op-
cin para activado y Fal se la opcin para desactivado.
La sintaxis para asignar un valor es la siguiente:
ObjetoTrazado. Hi deLi nes = BooLneasOcultas
La sintaxis para obtener el valor actual es la que sigue:
BooLneasOCultas = ObjetoTrazado. Hi deLi ne
NOTA: Esta propiedad se refiere a los objetos del Espacio Modelo. Para ocultar lneas en las
ventanas de Espacio Papel utilizamos la propiedad ya estudiada RemoveHi ddenLi nes del objeto
de ventana de Espacio Papel.
Paper Si ze. Obtiene el tamao actual para el papel de impresin o trazado. Tambin permite
asignar un tamao. La sintaxis para ello es:
ObjetoTrazado. Paper Si ze = DblMatrizTamaos
La sintaxis para obtener el tamao de papel actual asignado:
VarMatrizTamaos = ObjetoTrazado. Paper Si ze
DblMatrizTamaos es una matriz, tabla o array de dos elementos Doubl e. El primero de ellos
dice relacin a la anchura del papel, y el segundo a la altura del mismo.
Pl ot Or i ent at i on. Esta propiedad Pl ot Or i ent at i on permite especificar y obtener una orien-
tacin para el papel de trazado.
Para asignar:
ObjetoTrazado. Pl ot Or i ent at i on = IntOrientacin
Para obtener:
IntOrientacin = ObjetoTrazado. Pl ot Or i ent at i on
IntOrientation es un valor I nt eger que adems admite las constantes siguientes:
acPl ot Or i ent at i onPor t r ai t
acPl ot Or i ent at i onLandscape
Ambas constantes se refieren a la orientacin vertical (portrait) o a la orientacin apaisada
(landscape).
Pl ot Scal e. Pl ot Scal e permite especificar y obtener una escala para el trazado. Para asig-
nar:
ObjetoTrazado. Pl ot Scal e = DblMatrizEscala
Para obtener:
VarMatrizEscala = ObjetoTrazado. Pl ot Scal e
DblMatrizEscala es una matriz de dos valores tipo Doubl e. El primero indica las unidades de
trazado y el segundo las unidades de dibujo, es decir, unidades en el papel y unidades en el
dibujo.
NOTA: Si ambos valores son igual a 0, la escala se corresponde con Escala hasta ajustar del
letrero de trazado/impresin de AutoCAD 14.
Pl ot Uni t s. Pl ot Uni t s permite obtener y/o asignar las unidades del trazado, es decir o mi-
lmetros (mtricas) o pulgadas (inglesas). Para asignar:
ObjetoTrazado. Pl ot Uni t s = IntUnidades
Para obtener:
IntUnidades = ObjetoTrazado. Pl ot Uni t s
IntUnidades es un valor I nt eger que tambin admite las siguientes constantes:
acEngl i sh
acMet r i c
Las dems propiedades ya estn estudiadas. Decir que, obviamente, la rotacin y el origen
como propiedades en este objeto Pl ot (Rot at i on y Or i gi n), se refieren a la rotacin y al ori-
gen del trazado con el mismo significado que en el cuadro de dilogo de AutoCAD 14.
Pasemos a estudiar los mtodos.
LoadPC2. Carga las especificaciones de trazado del archivo . PC2 especificado:
ObjTrazado. LoadPC2( StrNombrePC2)
StrNombrePC2 es un cadena (St r i ng) que indica el nombre del archivo y su ubicacin, por
ejemplo:
Opt i on Expl i ci t

Di mAcadDoc As Obj ect
Di mAcadPl ot As Obj ect

Sub Macr o( )
Set AcadDoc = Get Obj ect ( , " Aut oCAD. Appl i cat i on" ) . Act i veDocument
Set AcadPl ot = AcadDoc. Pl ot
AcadPl ot . LoadPC2 ( " c: \ aut ocad\ xt r as\ cf gpl ot . pc2" )
End Sub
NOTA: Estos archivos . PC2 tienen informacin del dispositivo de trazado, adems de todo el
resto de caractersticas del trazado en s. No as ocurra con los archivos . PCP (de versiones
anteriores a la 14 de AutoCAD), que nicamente guardaban (y guardan, si se quieren utilizar)
informacin del trazado; y se materializaban en el dispositivo actualmente establecido.
Pl ot Ext ent s. Define como rea de trazado la extensin del dibujo. Hay que tener en cuenta
que esta extensin no se actualiza cuando hay reducciones en el dibujo, por lo que es reco-
mendable hacer un Zoom Extensin antes de trazar el dibujo:
ObjTrazado. Pl ot Ext ent s

Pl ot Li mi t s. Define como rea de trazado los lmites del dibujo. Equivale, como sabemos, a
realizar un Zoom Todo:
ObjTrazado. Pl ot Li mi t s

Pl ot Pr evi ew. Muestra la presentacin preliminar tpica de AutoCAD 14 en cualquiera de sus
dos versiones (segn se indique), parcial o total:
ObjTrazado. Pl ot Pr evi ew( IntModoPresPrel)
IntModoPresPrel es un valor I nt eger que admite tambin las siguientes constantes:
acPar t i al Pr evi ew
acFul l Pr evi ew
Pl ot ToDevi ce. Realiza el trazado del dibujo en el dispositivo cuyo nombre se indica
(St r i ng). Este nombre es aquel con el que se ha configurado dicho dispositivo. La lista de to-
dos los dispositivos de impresin se encuentra tras el comando PREFERENCI AS (PREFERENCES
en versiones sajonas) de AutoCAD, en la pestaa Impresora:
ObjTrazado. Pl ot ToDevi ce( StrDispositivo)
NOTA: Si StrDispositivo es una cadena vaca o nula ("" ), el trazado se enva al dispositivo
trazador configurado por defecto actualmente.
Pl ot ToFi l e. Realiza el trazado del dibujo en el archivo cuyo nombre se indica (St r i ng). Por
defecto, la extensin de los archivos de trazado es . PLT.
ObjTrazado. Pl ot ToFi l e( StrArchivo)
Pl ot Vi ew. Define como rea de trazado la vista cuyo nombre se indica como cadena
(St r i ng):
ObjTrazado. Pl ot Vi ew( StrVista)
Pl ot Wi ndow. Define como rea de trazado la ventana cuyas esquinas se especifican:
ObjTrazado. Pl ot Wi ndow( DblEsquinaSupIz, DblEsquinaInfDcha)
Las dos esquinas (superior izquierda e inferior derecha) son matrices de tres elementos Dou-
bl e cada una (X, Y y Z en el SCU).
Pl ot Wi t hConf i gFi l e. Realiza el trazado del dibujo de acuerdo con las especificaciones que
en el archivo de configuracin se indican. Este archivo puede ser un . PCP o un . PC2:
ObjTrazado. Pl ot Wi t hConf i gFi l e( StrArchivoConfiguracin)
StrArchivoConfiguracin es un valor de cadena (St r i ng) con el nombre y la ruta del archivo
en cuestin.
SavePC2. Como contraposicin a LoadPC2, SavePC2 guarda las especificaciones de trazado en
el archivo . PC2 especificado:
ObjTrazado. SavePC2( StrNombrePC2)
StrNombrePC2 es un cadena (St r i ng) que indica el nombre del archivo y su ubicacin.
El procedimiento tpico para imprimir un dibujo desde VBA puede parecer extrao, pero no lo
es tanto. Teniendo en cuenta que nicamente los mtodos Pl ot ToDevi ce, Pl ot ToFi l e y Pl ot -
Wi t hConf i gFi l e envan realmente el documento al trazador o a la impresora, hemos de dise-
ar un algoritmo que nos permita seguir determinados pasos para la impresin tpica de un
dibujo de AutoCAD.
Evidentemente si deseamos enviar el trazado a un archivo, utilizaremos el mtodo Pl ot ToFi l e
del objeto de trazado Pl ot . Si ya disponemos de un archivo de configuracin de trazado . PCP
o . PC2 a nuestro gusto, utilizaremos el mtodo Pl ot Wi t hConf i gFi l e.
Pero lo lgico ser que nuestro programa se ejecute en mquinas de las cuales no conocemos
su configuracin y, por lo tanto, no sabremos qu impresoras o qu plotters tienen instalados
sus usuarios; o incluso si disponen de alguno instalado.
Por lo tanto, los pasos lgicos a la hora de imprimir un dibujo sern los siguientes:
Averiguar qu dispositivos de trazado hay instalados.
Permitir al usuario elegir entre cualquiera de ellos.
Permitir al usuario elegir las preferencias para la impresin o trazado.
Enviar el dibujo al dispositivo elegido.
Para averiguar los dispositivos slo tenemos que extraer en un bucle todos los valores de la
variable PLOTI D, que guarda la descripcin del trazador configurado por defecto, apoyndonos
en la variable PLOTTER, que cambia el trazador por defecto.
Con este pequeo truco, la mayor parte del problema est resuelto. Pero para verlo correcta-
mente, comentaremos un programa que permite imprimir el dibujo actual, ya sea en su exten-
sin o en sus lmites.
Veamos cmo sera el letrero de dilogo (formulario en VBA) que manejara este programa,
por ejemplo:

Y ahora se muestra el cdigo VBA de susodicho:
Opt i on Expl i ci t

Di mAcadDoc As Obj ect
Di mAcadPl ot As Obj ect
Di mSt r Pl ot As St r i ng
Di mNumPl ot As I nt eger

Pr i vat e Sub User For m_I ni t i al i ze( )
On Er r or Resume Next

Set AcadDoc = Get Obj ect ( , " Aut oCAD. Appl i cat i on" ) . Act i veDocument
Set AcadPl ot = AcadDoc. Pl ot

NumPl ot = 0

Do
Cal l AcadDoc. Set Var i abl e( " PLOTTER" , NumPl ot )
I f Er r . Number <> 0 Then Exi t Do
St r Pl ot = AcadDoc. Get Var i abl e( " PLOTI D" )
Di sposi t i vo. AddI t emSt r Pl ot , NumPl ot
NumPl ot = NumPl ot + 1
Loop
End Sub

Pr i vat e Sub Acept ar _Cl i ck( )
Di m ndi ce As I nt eger
Di mPapel ( 1 To 2) As Doubl e
Di mEscal a( 1 To 2) As Doubl e
Di mOr i gen( 1 To 3) As Doubl e

I f Di sposi t i vo. Li st I ndex = - 1 Then MsgBox " Escoj a un di sposi t i vo" : Exi t Sub
ndi ce = Di sposi t i vo. Li st I ndex
AcadPl ot . Pl ot Uni t s = acMet r i c
Papel ( 1) = 210: Papel ( 2) = 297
AcadPl ot . Paper Si ze = Papel
AcadPl ot . Pl ot Or i ent at i on = acPl ot Or i ent at i onPor t r ai t
Escal a( 1) = 0: Escal a( 2) = 0
AcadPl ot . Pl ot Scal e = Escal a
Or i gen( 1) = 0: Or i gen( 2) = 0: Or i gen( 3) = 0
AcadPl ot . Or i gi n = Or i gen
AcadPl ot . Rot at i on = 0
AcadPl ot . Adj ust Ar eaFi l l = Tr ue
AcadPl ot . Hi deLi nes = Tr ue
I f Ext ensi n. Val ue = Tr ue Then
AcadPl ot . Pl ot Ext ent s
El se
AcadPl ot . Pl ot Li mi t s
End I f
Cal l AcadDoc. Set Var i abl e( " PLOTTER" , ndi ce)
St r Pl ot = AcadDoc. Get Var i abl e( " PLOTI D" )
AcadPl ot . Pl ot ToDevi ce ( St r Pl ot )
End
End Sub

Pr i vat e Sub Cancel ar _Cl i ck( )
End
End Sub
Comentaremos el programa por procedimientos Sub.
( Gener al ) _( Decl ar aci ones)
Se declaran las variables de objeto tpicas (objetos de AutoCAD) y alguna ms que nos ser
til a lo largo del programa.
User For m_I ni t i al i ze( )
Aqu, lo primero que se hace es establecer la condicin que dice que si existiera algn error, se
continuara en la lnea siguiente (veremos para qu). Inmediatamente despus se inicializan
las variables de los objetos de AutoCAD (se les da valor).
Las dos variables que hemos declarado al principio las vamos a utilizar aqu. NumPl ot va a
guardar un valor entero que va a ser el nmero de trazador, adems del ndice del cuadro de
lista. St r Pl ot ser una variable de cadena que almacenar las distintas descripciones de los
diferentes trazadores. Recordemos que al mtodo Pl ot ToDevi ce hay que darle un nombre de
descripcin de trazador.
Lo que hace la siguiente serie de sentencias de este Sub es rellenar el cuadro de lista con las
descripciones de los trazadores, impresoras u otros dispositivos (archivo en formato DXB, por
ejemplo). Se inicializa NumPl ot a 0. Se sigue con una estructura repetitiva aparentemente infi-
nita; pero no es as. Veamos:
Se introduce el valor de NumPl ot (0) en la variable de sistema PLOTTER que, como hemos
dicho, almacena un nmero que se corresponde con el trazador actual configurado. El valor de
PLOTTER va desde 0 hasta el nmero de configuraciones de trazador menos uno (si son tres
como en el ejemplo, sern 0, 1 y 2); hasta un mximo de 29. El truco est en que, si damos
un valor por encima de dicho nmero, PLOTTER devuelve un mensaje de error. Este mensaje
es el que queremos captar con el On Er r or Resume Next del principio y con la siguiente sen-
tencia I f Er r . Number <> 0 Then Exi t Do.

Por lo tanto, si ha habido error se sale del bucle. Si no hay error se contina extrayendo la
descripcin del trazador actual y guardndola en St r Pl ot .

A continuacin de aade esa descripcin al cuadro de lista con el ndice igual al nmero de
trazador.
Se incrementa el valor de NumPl ot en una unidad con el contador-suma (NumPl ot = NumPl ot
+ 1) y se vuelve a empezar. Ahora el trazador por defecto ser otro y la descripcin otra. Y as
sucesivamente.
En el momento en que se hayan aadido todos los dispositivos configurados, se produce el
error controlado y se sale del bucle.
Sigamos con lo que ocurre al pulsar el botn Aceptar.
Acept ar _Cl i ck( )
Se dimensionan algunas variables que vamos a utilizar. A continuacin se controla si la propie-
dad Li st I ndex del cuadro de lista es igual a - 1, lo que querra decir que no se ha seleccionado
trazador alguno. En este caso se muestra un mensaje y se sale del procedimiento Sub, permi-
tiendo as al usuario que elija un trazador.
En el momento en que se elija uno se hace su ndice igual a la variable ndice. Recordemos
que el ndice era igual al nmero del trazador.
Se establece toda una serie de valores para la escala, las lneas ocultas, etctera. Algunos de
ellos no pueden estar dispuestos en cualquier orden. Por norma general conviene hacer caso a
la lgica y dar valores segn se hara en AutoCAD. As, resulta lgico establecer primero las
unidades, luego el tamao del papel, la orientacin, la escala, el origen, la rotacin...
Se controla tambin si el usuario eligi un plotteo de la extensin o de los lmites, actuando en
consecuencia con el mtodo Pl ot Ext ent s o Pl ot Li mi t s.
Por fin se establece en la variable de sistema de AutoCAD PLOTTER el valor del trazador (o
ndice) escogido y se extrae de PLOTI D la descripcin de ese trazador. Esta descripcin se pro-
porciona al mtodo Pl ot ToDevi ce y el proceso ha concluido.
Cancel ar _Cl i ck( )
Aqu simplemente se termina el programa, sin ms.
5 fase intermedia de ejercicios
Comprndase perfectamente el mtodo de impresin explicado y aplquese a cualquiera de
los ejercicios anteriores que dibujen objetos.
DOCE.11. EL OBJETO DE PREFERENCIAS
Este es el ltimo objeto que estudiaremos. El objeto de preferencias, llamado Pr ef er ences,
controla todas las preferencias u opciones de AutoCAD 14. Podramos decir que es el equiva-
lente al cuadro que despliega el comando PREFERENCI AS (PREFERENCES en versin inglesa) de
AutoCAD, ms o menos.
Como comprobamos, si retomamos la tabla jerrquica de objetos del principio de este MDU-
LO, el objeto Pr ef er ences "cuelga" directamente del objeto raz de aplicacin (Appl i cat i on).
Es por ello que si, como siempre, deseamos utilizarlo mucho, podemos crear una variable de
acceso directo de la siguiente forma, por ejemplo (continuando la notacin que venimos utili-
zando):
Opt i on Expl i ci t
Di mAcadApp As Obj ect
Di mAcadPr ef As Obj ect
para luego dar valores as:
Set AcadApp = Get Obj ect ( , " Aut oCAD. Appl i cat i on" )
Set AcadPr ef = AcadApp. Pr ef er ences
Propiedades del objeto de preferencias:
ActiveProfile
AltFontFile
AltTabletMenuFile
Appl i cat i on
ArcSmoothness
AutoAudit
AutoSaveFile
AutoSaveInterval
BeepOnError
ConfigFile
ContourLinesPerSurface
CreateBackup
CrosshairColor
CursorSize
CustomDictionary
DefaultInternetURL
DemandLoadARXApp
DisplayDraggedObject
DisplayScreenMenu
DisplayScrollBars
DisplaySilhouette
DockedVisibleLines
DriversPath
EnableStartupDialog
FontFileMap
FullCrcValidation
GraphicFont
GraphicFontSize
GraphicFontStyle
GraphicsTextBackgrndColor
GraphicsTextColor
GraphicsWinBackgrndColor
HistoryLines
HelpFilePath
IncrementalSavePercent
KeyboardAccelerator
KeyboardPriority
LicenseServer
LogFileName
LogFileOn
MainDictionary
MaxActiveViewports
MaxAutoCADWindow
MaxNumOfSymbols
MeasurementUnits
MenuFile
MonochromeVectors
PersistentLISP
PostScriptPrologFile
PrintFile
PrintSpoolerPath
PrintSpoolExecutable
ProxyImage
RenderSmoothness
SavePreviewThumbnail
SegmentPerPolyline
ShowProxyDialogBox
ShowRasterImage
SupportPath
TempFileExtension
TempFilePath
TemplateDWGPath
TempXRefPath
TextEditor
TextFont
TextFontSize
TextFontStyle
TextFrameDisplay
TextureMapPath
TextWinBackgrndColor
TextWinTextColor
XRefDemandLoad
Mtodos del objeto de preferencias:
DeleteProfile
ExportProfile
GetProjectFilePath
ImportProfile
ResetProfile
SetProjectFilePath
La ingente cantidad de propiedades que hemos de explicar la dividiremos en grupos temticos
para su ptimo aprendizaje. Estos grupos se corresponden (la mayora) con las diferentes pes-
taas del cuadro Preferencias de AutoCAD 14. Comencemos pues sin ms dilacin.
DOCE.11.1. Preferencias de archivos
Al t Font Fi l e. Especifica la localizacin de una fuente (tipo de letra) alternativa para el caso
en que AutoCAD no encuentre la fuente original y en el mapeado del archivo no est especifi-
cada otra.
La sintaxis para asignar:
ObjetoPreferencias. Al t Font Fi l e = StrArchivoFuente
La sintaxis para obtener:
StrArchivoFuente = ObjetoPreferencias. Al t Font Fi l e
StrArchivoFuente (nombre y ruta al archivo) es tipo de dato St r i ng.
Al t Tabl et MenuFi l e. Especifica la localizacin de un archivo de men de tableta alternativo
para intercambiar con el estndar de AutoCAD.
La sintaxis para asignar:
ObjetoPreferencias. Al t Tabl et MenuFi l e = StrArchivoMenTablero

La sintaxis para obtener:
StrArchivoMenTablero = ObjetoPreferencias. Al t Tabl et MenuFi l e
StrArchivoMenTablero (nombre y ruta al archivo) es tipo de dato St r i ng.
Aut oSaveFi l e. Especifica la localizacin del archivo de guardado automtico.
La sintaxis para asignar:
ObjetoPreferencias. Aut oSaveFi l e = StrArchivoGuardAut
La sintaxis para obtener:
StrArchivoGuardAut = ObjetoPreferencias. Al t Font Fi l e
StrArchivoGuardAut (nombre y ruta al archivo) es tipo de dato St r i ng.
Conf i gFi l e. Obtiene la localizacin del archivo de configuracin de AutoCAD 14 (por defec-
to ACAD14. CFG).
Su sintaxis es:
StrArchivoConfig = ObjetoPreferencias. Conf i gFi l e
StrArchivoConfig (nombre y ruta al archivo) es tipo de dato St r i ng.
NOTA: La manera de asignar otra ubicacin a este archivo de configuracin se explicar en el
APNDI CE H, sobre la configuracin general del programa, ya que esto se realiza desde las
propiedades del acceso directo al ejecutable principal.
Cust omDi ct i onar y. Especifica la localizacin de un diccionario personalizado si existe.
La sintaxis para asignar:
ObjetoPreferencias. Cust omDi ct i onar y = StrArchivoDiccionario
La sintaxis para obtener:
StrArchivoDiccionario = ObjetoPreferencias. Cust omDi ct i onar y
StrArchivoDiccionario (nombre y ruta al archivo) es tipo de dato St r i ng.
Def aul t I nt er net URL. Especifica la localizacin URL del sitio WWW configurado por defecto.
La sintaxis para asignar:
ObjetoPreferencias. Def aul t I nt er net URL = StrURL
La sintaxis para obtener:
StrURL = ObjetoPreferencias. Def aul t I nt er ner URL
StrURL es tipo de dato St r i ng.
Dr i ver sPat h. Especifica el directorio en el cual AutoCAD buscar controladores (drivers) de
dispositivos ADI para el monitor, dispositivos sealadores, impresoras y trazadores.
La sintaxis para asignar:
ObjetoPreferencias. Dr i ver sPat h = StrDirectorioControladores
La sintaxis para obtener:
StrDirectorioControladores = ObjetoPreferencias. Dr i ver sPat h
StrDirectorioControladores es tipo de dato St r i ng.
Font Fi l eMap. Especifica la localizacin del archivo de representacin de tipos de letra o fuen-
tes, es decir, el archivo que define cmo AutoCAD convertir las fuentes que no pueda encon-
trar.
La sintaxis para asignar:
ObjetoPreferencias. Font Fi l eMap = StrArchivoRepFuentes
La sintaxis para obtener:
StrArchivoRepFuentes = ObjetoPreferencias. Font Fi l eMap
StrArchivoRepFuentes (nombre y ruta al archivo) es tipo de dato St r i ng.
Hel pFi l ePat h. Especifica la localizacin del archivo de ayuda de AutoCAD.
La sintaxis para asignar:
ObjetoPreferencias. Hel pFi l ePat h = StrDirectorioAyuda
La sintaxis para obtener:
StrDirectorioAyuda = ObjetoPreferencias. Hel pFi l ePat h
StrDirectorioAyuda es tipo de dato St r i ng.
Li censeSer ver . Obtiene una lista de licencias de proveedor disponibles.
Su sintaxis es:
StrListaLicencias = ObjetoPreferencias. Li censeSer ver
StrListaLicencias es tipo de dato St r i ng.
LogFi l eName. Especifica la localizacin del archivo de registro de AutoCAD 14 (por defecto
ACAD. LOG).
La sintaxis para asignar:
ObjetoPreferencias. LogFi l eName = StrArchivoRegistro
La sintaxis para obtener:
StrArchivoRegistro = ObjetoPreferencias. LogFi l eName
StrArchivoRegistro (nombre y ruta al archivo) es tipo de dato St r i ng.
Mai nDi ct i onar y. Especifica la localizacin del diccionario de correccin ortogrfica principal.
La sintaxis para asignar:
ObjetoPreferencias. Mai nDi ct i onar y = StrArchivoDiccPrincipal
La sintaxis para obtener:
StrArchivoDiccPrincipal = ObjetoPreferencias. Mai nDi ct i onar y

StrArchivoDiccPrincipal (nombre y ruta al archivo) es tipo de dato St r i ng.
MenuFi l e. Especifica la localizacin del archivo de men principal.
La sintaxis para asignar:
ObjetoPreferencias. MenuFi l e = StrArchivoMenPrincipal
La sintaxis para obtener:
StrArchivoMenPrincipal = ObjetoPreferencias. MenuFi l e
StrArchivoMenPrincpal (nombre y ruta al archivo) es tipo de dato St r i ng.
Post Scr i pt Pr ol ogFi l e. Especifica el nombre de una seccin de prlogo personalizada en el
archivo ACAD. PSF.
La sintaxis para asignar:
ObjetoPreferencias. Post Scr i pt Pr ol ogFi l e = StrNomSeccinPrlogo
La sintaxis para obtener:
StrNomSeccinPrlogo = ObjetoPreferencias. Post Scr i pt Pr ol ogFi l e
StrNomSeccinPrlogo es tipo de dato St r i ng.
Pr i nt Fi l e. Especifica un nombre para el archivo temporal de trazado. Por defecto es el
nombre del dibujo ms la extensin . PLT.
La sintaxis para asignar:
ObjetoPreferencias. Pr i nt Fi l e = StrArchivoTrazado
La sintaxis para obtener:
StrArchivoTrazado = ObjetoPreferencias. Pr i nt Fi l e
StrArchivo es tipo de dato St r i ng.
NOTA: Para aceptar el nombre por defecto (nombre de archivo ms extensin . PLT) se intro-
duce un punto (. ) como StrArchivoTrazado.
Pr i nt Spool er Pat h. Especifica el directorio para los archivos de trazado diferido.
La sintaxis para asignar:
ObjetoPreferencias. Pr i nt Spool er Pat h = StrDirectorioTrazadoDif
La sintaxis para obtener:
StrDirectorioTrazadoDif = ObjetoPreferencias. Pr i nt Spool er Pat h
StrDirectorioTrazadoDif es tipo de dato St r i ng.
Pr i nt Spool Execut abl e. Especifica el nombre del ejecutable para el trazado diferido.
La sintaxis para asignar:
ObjetoPreferencias. Pr i nt Spool Execut abl e = StrEjecTrazadoDif
La sintaxis para obtener:
StrEjecTrazadoDif = ObjetoPreferencias. Pr i nt Spool Execut abl e
StrEjecDrazadoDif es tipo de dato St r i ng.
Suppor t Pat h. Especifica las diversas localizaciones si hay ms de una han de ir separadas
por caracteres de punto y coma (; ) donde AutoCAD buscar archivos de soporte.
La sintaxis para asignar:
ObjetoPreferencias. Suppor t Pat h = StrDirectorioSoporte
La sintaxis para obtener:
StrDirectorioSoporte = ObjetoPreferencias. Suppor t Pat h
StrDirectorioSoporte es tipo de dato St r i ng.
TempFi l ePat h. Especifica la localizacin de archivos temporales.
La sintaxis para asignar:
ObjetoPreferencias. TempFi l ePat h = StrDirectorioTemp
La sintaxis para obtener:
StrDirectorioTemp = ObjetoPreferencias. TempFi l ePat h
StrDirectorioTemp es tipo de dato St r i ng.
Templ at eDWGPat h. Especifica la localizacin de archivos de plantilla, utilizados por los asis-
tentes de inicio.
La sintaxis para asignar:
ObjetoPreferencias. Templ at eDWGPat h = StrDirectorioPlantillas
La sintaxis para obtener:
StrDirectorioPlantillas = ObjetoPreferencias. Templ at eDWGPat h
StrDirectorioPlantillas es tipo de dato St r i ng.
TempXRef Pat h. Especifica la localizacin de archivos de referencia externa. Esta localizacin
se utiliza si elegimos la constante acDemandLoadEnabl edWi t hCopy con la propiedad XRef De-
mandLoad que veremos al trmino de la prxima seccin.
La sintaxis para asignar:
ObjetoPreferencias. TempXRef Pat h = StrDirectorioTempRefX
La sintaxis para obtener:
StrDirectorioTempRefX = ObjetoPreferencias. TempXRef Pat h
StrDirectorioTempRefX es tipo de dato St r i ng.
Text Edi t or . Especifica el nombre para un editor de texto externo con el comando TEXTOM
(MTEXT en ingls).
La sintaxis para asignar:
ObjetoPreferencias. Text Edi t or = StrNombreEditor
La sintaxis para obtener:
StrNombreEditor = ObjetoPreferencias. Text Edi t or
StrNombreEditor es tipo de dato St r i ng.
Text ur eMapPat h. Especifica la localizacin del directorio contenedor de archivos de mapas de
texturas para renderizar.
La sintaxis para asignar:
ObjetoPreferencias. Text ur eMapPat h = StrDirectorioTexturas
La sintaxis para obtener:
StrDirectorioTexturas = ObjetoPreferencias. Text ur eMapPat h
StrDirectorioTexturas es tipo de dato St r i ng.
DOCE.11.2. Preferencias de rendimiento
Ar cSmoot hness. Especifica la resolucin de arcos, crculos y elipses. El valor ha de estar en-
tre 1 y 20000.
La sintaxis para asignar:
ObjetoPreferencias. Ar cSmoot hness = IntResolucin

La sintaxis para obtener:
IntResolucin = ObjetoPreferencias. Ar cSmoot hness
IntResolucin es tipo de dato I nt eger .
Cont our Li nesPer Sur f ace. Especifica el valor que representa el nmero de isolneas en sli-
dos. El valor ha de estar entre 0 y 2047.
La sintaxis para asignar:
ObjetoPreferencias. Cont our Li nesPer Sur f ace = IntIsolneas
La sintaxis para obtener:
IntIsolneas = ObjetoPreferencias. Cont our Li nesPer Sur f ace
IntIsolneas es tipo de dato I nt eger .
Di spl ayDr aggedObj ect . Especifica el modo de arrastre dinmico.
La sintaxis para asignar:
ObjetoPreferencias. Di spl ayDr aggedObj ect = IntModoArrastre
La sintaxis para obtener:
IntModoArrastre = ObjetoPreferencias. Di spl ayDr aggedObj ect
IntModoArrastre es tipo de dato I nt eger , que adems admite las constantes siguientes:

acDr agDoNot Di spl ay
acDr agDi spl ayOnRequest
acDr agDi spl ayAut omat i cal l y
Di spl aySi l houet t e. Especifica el estado de activacin de la silueta al ocultar slidos.
La sintaxis para asignar:
ObjetoPreferencias. Di spl aySi l houet t e = BooSilueta
La sintaxis para obtener:
BooSilueta = ObjetoPreferencias. Di spl aySi l houet t e
BooSilueta es tipo de dato Bool ean: Tr ue activa la silueta, Fal se la desactiva.
I ncr ement al SavePer cent . Especifica el valor del guardado progresivo. Ha de ser un valor
porcentual, es decir, entre 0 y 100.
La sintaxis para asignar:
ObjetoPreferencias. I ncr ement al SavePer cent = IntGuardProgresivo
La sintaxis para obtener:
IntGuardProgresivo = Obj et oPr ef er enci as. I ncr ement al SavePer cent
IntGuardProgresivo es tipo de dato I nt eger .
MaxAct i veVi ewpor t s. Especifica el valor del mximo de ventanas activas. Ha de ser un valor
entre 2 y 48.
La sintaxis para asignar:
ObjetoPreferencias. MaxAct i veVi ewpor t s = IntMxVentanas
La sintaxis para obtener:
IntMxVentanas = Obj et oPr ef er enci as. MaxAct i veVi ewpor t s
IntMaxVentanas es tipo de dato I nt eger .
Render Smoot hness. Especifica el valor de suavizado de slidos o resolucin de faceteado. Ha
de ser una valor entre 0.01 y 10.0.
La sintaxis para asignar:
ObjetoPreferencias. Render Smoot hness = DblResFaceteado
La sintaxis para obtener:
DblResFaceteado = Obj et oPr ef er enci as. Render Smoot hness
DblResFaceteado es tipo de dato Doubl e.
Segment Per Pol yl i ne. Especifica el valor de nmero de segmentos por curva polilineal. Este
valor estar entre 0 y 42950.
La sintaxis para asignar:
ObjetoPreferencias. Segment Per Pol yl i ne = DblSegmentosPol
La sintaxis para obtener:

DblSegmentosPol = Obj et oPr ef er enci as. Segment Per Pol yl i ne
DblSegmentosPol es tipo de dato Doubl e.
ShowRast er I mage. Especifica la activacin de mostrar o no el contenido de imgenes de tra-
ma o raster cuando son movidas con un encuadre o un zoom en tiempo real.
La sintaxis para asignar:
ObjetoPreferencias. ShowRast er I mage = BooMostrarRaster
La sintaxis para obtener:
BooMostrarRaster = Obj et oPr ef er enci as. ShowRast er I mage
BooMostrarRaster es tipo de dato Bool ean: Tr ue activa la muestra de imgenes y Fal se la
desactiva. Tambin est admitido el siguiente par de constantes:
acOn
acOf f
Text Fr ameDi spl ay. Especifica la activacin de mostrar o no slo el marco de contorno de los
texto o el texto en s.
La sintaxis para asignar:
ObjetoPreferencias. Text Fr ameDi spl ay = BooMostrarMarcoTextos
La sintaxis para obtener:
BooMostrarMarcoTextos = Obj et oPr ef er enci as. Text Fr ameDi spl ay
BooMostrarMarcoTextos es tipo de dato Bool ean: Tr ue activa la muestra del marco y Fal se la
desactiva.
XRef DemandLoad. Especifica la activacin o desactivacin de la carga bajo demanda de refe-
rencias externas.
La sintaxis para asignar:
ObjetoPreferencias. XRef DemandLoad = IntCargaBajoDemanda
La sintaxis para obtener:
IntCargaBajoDemanda = Obj et oPr ef er enci as. XRef DemandLoad
IntCargaBajoDemanda es tipo de dato I nt eger , aunque tambin admite las siguientes cons-
tantes:
acDemandLoadDi sabl ed
acDemandLoadEnabl ed
acDemandLoadEnabl edWi t hCopy
DOCE.11.3. Preferencias de compatibilidad
DemandLoadARXApp. Especifica la activacin de la carga bajo demanda de aplicaciones ARX.
La sintaxis para asignar:
ObjetoPreferencias. DemandLoadARXApp = IntCargaBajoDemandaARX

La sintaxis para obtener:
IntCargaBajoDemandaARX = ObjetoPreferencias. DemandLoadARXApp
IntDemandLoadARXApp es tipo de dato I nt eger , que adems admite las constantes siguientes:
acDemandLoadDi sabl ed
acDemandLoadOnObj ect Det ect
acDemandLoadCmdI nvoke
Enabl eSt ar t upDi al og. Especifica si se muestra el letrero de dilogo de inicio en una sesin
de AutoCAD.
La sintaxis para asignar:
ObjetoPreferencias. Enabl eSt ar t upDi al og = BooCuadroInicio
La sintaxis para obtener:
BooCuadroInicio = ObjetoPreferencias. Enabl eSt ar t upDi al og
EnableStartupDialog es tipo de dato Bool ean: Tr ue activa el cuadro de inicio y Fal se lo des-
activa.
Keyboar dAccel er at or . Especifica la activacin o desactivacin de la prioridad de teclas de
aceleracin.
La sintaxis para asignar:
ObjetoPreferencias. Keyboar dAccel er at or = BooTeclasAcel
La sintaxis para obtener:
BooTeclasAcel = ObjetoPreferencias. Keyboar dAccel er at or
BooTeclasAcel es tipo de dato Bool ean, pero que adems admite las siguientes constates:
acPr ef er enceCl assi c
acPr ef er enceCust om
las cuales hacen referencia al modo AutoCAD y al modo Windows respectivamente.
Keyboar dPr i or i t y. Controla la prioridad de coordenadas.
La sintaxis para asignar:
ObjetoPreferencias. Keyboar dPr i or i t y = IntPrioridadCoordenadas
La sintaxis para obtener:
IntPrioridadCoordenadas = ObjetoPreferencias. Keyboar dPr i or i t y
IntPrioridadCoordenadas es tipo de dato I nt eger , pero que adems admite las siguientes
constates:
acKeyboar dRunni ngObj Snap
acKeyboar dEnt r y
acKeyboar dPr oxyNoScr i pt s
Per si st ent LI SP. Especifica la activacin o desactivacin de la caracterstica de volver a car-
gar programas o rutinas AutoLISP entre dibujos.
La sintaxis para asignar:
ObjetoPreferencias. Per si st ent LI SP = BooLISP

La sintaxis para obtener:
BooLISP = ObjetoPreferencias. Per si st ent LI SP
BooLISP es tipo de dato Bool ean.
Pr oxyI mage. Obtiene y/o especifica el modo de mostrar objetos proxy.
La sintaxis para asignar:
ObjetoPreferencias. Pr oxyI mage = IntObjProxy
La sintaxis para obtener:
IntObjProxy = Obj et oPr ef er enci as. Pr oxyI mage
IntObjProxy es tipo de dato I nt eger , pero que adems admite las siguientes constates:
acPr oxyNot Show
acPr oxyShow
acPr oxyBoundi ngBox
ShowPr oxyDi al og. Obtiene y/o especifica si AutoCAD debe mostrar un mensaje cuando se
abra un dibujo con objetos proxy.
La sintaxis para asignar:
ObjetoPreferencias. ShowPr oxyDi al og = BooMensajeProxy
La sintaxis para obtener:

BooMensajeProxy = Obj et oPr ef er enci as. ShowPr oxyDi al og
BooMensajeProxy es tipo de dato Bool ean.
DOCE.11.4. Preferencias generales
Aut oAudi t . Especifica la activacin de la revisin de dibujos al cargar un . DXF o un . DXB.
La sintaxis para asignar:
ObjetoPreferencias. Aut oAudi t = BooRevisin
La sintaxis para obtener:
BooRevisin = ObjetoPreferencias. Aut oAudi t
BooRevisin es tipo de dato Bool ean.
Aut oSaveI nt er val . Especifica la duracin, en minutos, entre guardados automticos. Ha de
ser un valor entre 0 y 600.
La sintaxis para asignar:
ObjetoPreferencias. Aut oSaveI nt er val = IntMinutos
La sintaxis para obtener:
IntMinutos = ObjetoPreferencias. Aut oSaveI nt er val
IntMinutos es tipo de dato I nt eger .
BeepOnEr r or . Especifica la activacin del sonido en caso de error.
La sintaxis para asignar:
ObjetoPreferencias. BeepOnEr r or = BooSonidoError
La sintaxis para obtener:
BooSonidoError = ObjetoPreferencias. BeepOnEr r or
BooSonidoError es tipo de dato Bool ean.
Cr eat eBackup. Especifica la activacin de crear o no copia de seguridad al guardar (archivos
. BAK).
La sintaxis para asignar:
ObjetoPreferencias. Cr eat eBackup = BooCopiaSeguridad
La sintaxis para obtener:
BooCopiaSeguridad = ObjetoPreferencias. Cr eat eBackup
BooCopiaSeguridad es tipo de dato Bool ean.
Ful l Cr cVal i dat i on. Especifica la activacin de la validacin CRC (comprobacin cclica de
redundancia) continua.
La sintaxis para asignar:
ObjetoPreferencias. Ful l Cr cVal i dat i on = BooCRC
La sintaxis para obtener:
BooCRC = ObjetoPreferencias. Ful l Cr cVal i dat i on
BooCRC es tipo de dato Bool ean.
LogFi l eOn. Especifica si se escribe en un archivo de revisin lo que va apareciendo en la
ventana de texto (por defecto ACAD. LOG).
La sintaxis para asignar:
ObjetoPreferencias. LogFi l eOn = BooArchivoLOG
La sintaxis para obtener:
BooArchivoLOG = ObjetoPreferencias. LogFi l eOn
BooArchivoLOG es tipo de dato Bool ean.
MaxNumOf Symbol s. Especifica el mximo de elementos que ordenar (por defecto es igual a
200).
La sintaxis para asignar:
ObjetoPreferencias. MaxNumOf Symbol s = IntNumElementos
La sintaxis para obtener:
IntNumElementos = ObjetoPreferencias. MaxNumOf Symbol s
MaxNumOfSymbols es tipo de dato I nt eger .
Autor: J onathan Prstamo Rodrguez.
Para: La Web del Programador.
Measur ement Uni t s. Especifica el tipo de unidades del dibujo.
La sintaxis para asignar:
ObjetoPreferencias. Measur ement Uni t s = IntUnidadesDibujo
La sintaxis para obtener:
IntUnidadesDibujo = ObjetoPreferencias. Measur ement Uni t s
IntUnidadesDibujo es tipo de dato I nt eger .
SavePr evi ewThumbnai l . Especifica la activacin o desactivacin de guardar imagen prelimi-
nar con el dibujo.
La sintaxis para asignar:
ObjetoPreferencias. SavePr evi ewThumbnai l = IntImgPreliminar
La sintaxis para obtener:
IntImgPreliminar = ObjetoPreferencias. SavePr evi ewThumbnai l
IntImgPreliminar es tipo de dato I nt eger .
TempFi l eExt ensi on. Especifica la extensin de los archivos temporales de AutoCAD 14 (por
defecto . AC$).
La sintaxis para asignar:
ObjetoPreferencias. TempFi l eExt ensi on = StrExtArchivoTemp
La sintaxis para obtener:
StrExtArchivoTemp = ObjetoPreferencias. TempFi l eExt ensi on
StrExtArchivoTemp es tipo de dato St r i ng.
DOCE.11.5. Preferencias de visualizacin
Cr osshai r Col or . Especifica el color para la cruceta del cursor (tambin cambia el cuadro de
designacin y el smbolo del SCP). Habr de ser un valor entre 1 y 255.
La sintaxis para asignar:
ObjetoPreferencias. Cr osshai r Col or = IntColorCursor
La sintaxis para obtener:
IntColorCursor = ObjetoPreferencias. Cr osshai r Col or
IntColorCursor es tipo de dato I nt eger , aunque tambin se admiten las siguientes constan-
tes:
AcRed
AcBl ue
AcYel l ow
AcMagent a
AcCyan
AcGr een
AcWhi t e
Di spl ayScr eenMenu. Especifica si se muestra o no el men de pantalla.
La sintaxis para asignar:
ObjetoPreferencias. Di spl ayScr eenMenu = BooMenPantalla
La sintaxis para obtener:
BooMenPantalla = ObjetoPreferencias. Di spl ayScr eenMenu
BooMenPantalla es tipo de dato Bool ean.
Di spl ayScr ol l Bar s. Especifica si se muestran o no las barras de desplazamiento (horizontal
y vertical).
La sintaxis para asignar:
ObjetoPreferencias. Di spl ayScr ol l Bar s = BooBarrasDespl
La sintaxis para obtener:
BooBarrasDespl = ObjetoPreferencias. Di spl ayScr ol l Bar s
BooBarrasDespl es tipo de dato Bool ean.
DockedVi si bl eLi nes. Especifica el nmero de lneas de comando ancladas (valor por defecto
5).
La sintaxis para asignar:
ObjetoPreferencias. DockedVi si bl eLi nes = IntNumLneasComando
La sintaxis para obtener:
IntNumLneasComando = ObjetoPreferencias. DockedVi si bl eLi nes
IntNumLneasComando es tipo de dato I nt eger .
Hi st or yLi nes. Especifica el nmero de lneas en la ventana de texto que se guardan en
memoria (valor por defecto 400).
La sintaxis para asignar:
ObjetoPreferencias. Hi st or yLi nes = IntNumLneasHistorial
La sintaxis para obtener:
IntNumLneasHistorial = ObjetoPreferencias. Hi st or yLi nes
IntNumLneasHistorial es tipo de dato I nt eger .
Gr aphi cFont . Especifica la fuente que se utiliza para grficos, es decir, el tipo de letra con el
que se escriben las opciones de men, textos en lnea de comandos, etctera.
La sintaxis para asignar:
ObjetoPreferencias. Gr aphi cFont = StrFuenteGrficos
La sintaxis para obtener:
StrFuenteGrficos = ObjetoPreferencias. Gr aphi cFont

StrFuenteGrficos es tipo de dato St r i ng.
Gr aphi cFont Si ze. Especifica el tamao de la fuente que se utiliza para grficos.
La sintaxis para asignar:
ObjetoPreferencias. Gr aphi cFont Si ze = IntTamaoFuenteGrficos
La sintaxis para obtener:
IntTamaoFuenteGrficos = ObjetoPreferencias. Gr aphi cFont Si ze
IntTamaoFuenteGrficos es tipo de dato I nt eger .
Gr aphi cFont St yl e. Especifica el estilo de la fuente que se utiliza para grficos.
La sintaxis para asignar:
ObjetoPreferencias. Gr aphi cFont St yl e = IntEstiloFuenteGrficos
La sintaxis para obtener:
IntEstiloFuenteGrficos = ObjetoPreferencias. Gr aphi cFont St yl e
IntEstiloFuenteGrficos es tipo de dato I nt eger , aunque admite las constantes siguientes:
acFont Regul ar
acFont I t al i c
acFont Bol d
acFont Bol dI t al i c
Gr aphi csText Backgr ndCol or . Especifica el color para el fondo del texto grfico.
La sintaxis para asignar:
ObjetoPreferencias. Gr aphi csText Backgr ndCol or = IntColorFondoTextoGrficos
La sintaxis para obtener:
IntColorFondoTextoGrficos = Obj et oPr ef er enci as. Gr aphi csText Backgr ndCol or
IntColorFondoTextoGrficos es tipo de dato I nt eger . El intervalo y las constantes son las
mismas que para Cr osshai r Col or .
Gr aphi csText Col or . Especifica el color para el texto grfico.
La sintaxis para asignar:
ObjetoPreferencias. Gr aphi csText Col or = IntColorTextoGrficos
La sintaxis para obtener:
IntColorTextoGrficos = Obj et oPr ef er enci as. Gr aphi csText Col or
IntColorTextoGrficos es tipo de dato I nt eger . El intervalo y las constantes son las mismas
que para Cr osshai r Col or .
Gr aphi csWi nBackgr ndCol or . Especifica el color para el fondo de la ventana grfica.
La sintaxis para asignar:

ObjetoPreferencias. Gr aphi csWi nBackgr ndCol or = IntColorFondoVentanaGrfica
La sintaxis para obtener:
IntColorFondoVentanaGrfica = Obj et oPr ef er enci as. Gr aphi csWi nBackgr ndCol or
IntColorFondoVentanaGrfica es tipo de dato I nt eger . El intervalo y las constantes son las
mismas que para Cr osshai r Col or .
MaxAut oCADWi ndow. Especifica la activacin de maximizar o no AutoCAD al iniciar.
La sintaxis para asignar:
ObjetoPreferencias. MaxAut oCADWi ndow = BooMaximizar
La sintaxis para obtener:
BooMaximizar = Obj et oPr ef er enci as. MaxAut oCADWi ndow
BooMaximizar es tipo de dato Bool ean.
Monochr omeVect or s. Especifica la activacin o desactivacin de los vectores monocromo.
La sintaxis para asignar:
ObjetoPreferencias. Monochr omeVect or s = BooVectoresMonocromo
La sintaxis para obtener:
BooVectoresMonocromo = Obj et oPr ef er enci as. Monochr omeVect or s
BooVectoresMonocromo es tipo de dato Bool ean.
Text Font . Especifica la fuente que se utiliza para textos.
La sintaxis para asignar:
ObjetoPreferencias. Text Font = StrFuenteTextos
La sintaxis para obtener:
StrFuenteTextos = ObjetoPreferencias. Text Font
StrFuenteTextos es tipo de dato St r i ng.
Text Font Si ze. Especifica el tamao de la fuente que se utiliza para textos.
La sintaxis para asignar:
ObjetoPreferencias. Text Font Si ze = IntTamaoFuenteTextos
La sintaxis para obtener:
IntTamaoFuenteTextos = ObjetoPreferencias. Text Font Si ze
IntTamaoFuenteTextos es tipo de dato I nt eger .
Text Font St yl e. Especifica el estilo de la fuente que se utiliza para textos.
La sintaxis para asignar:

ObjetoPreferencias. Text Font St yl e = IntEstiloFuenteTextos
La sintaxis para obtener:
IntEstiloFuenteTextos = ObjetoPreferencias. Text Font St yl e
IntEstiloFuenteTextos es tipo de dato I nt eger , aunque admite las constantes siguientes:
acFont Regul ar
acFont I t al i c
acFont Bol d
acFont Bol dI t al i c
Text Wi nBackgr ndCol or . Especifica el color para el fondo de la ventana de texto.
La sintaxis para asignar:
ObjetoPreferencias. Text Wi nBackgr ndCol or = IntColorFondoVentanaTexto
La sintaxis para obtener:
IntColorFondoVentanaTexto = Obj et oPr ef er enci as. Text Wi nBackgr ndCol or
IntColorFondoVentanaTexto es tipo de dato I nt eger . El intervalo y las constantes son las
mismas que para Cr osshai r Col or .
Text Wi nText Col or . Especifica el color para el texto de la ventana de texto.
La sintaxis para asignar:

ObjetoPreferencias. Text Wi nText Col or = IntColorTextoVentanaTexto
La sintaxis para obtener:
IntColorTextoVentanaTexto = Obj et oPr ef er enci as. Text Wi nText Col or
IntColorTextoVentanaTexto es tipo de dato I nt eger . El intervalo y las constantes son las
mismas que para Cr osshai r Col or .
DOCE.11.6. Preferencia de dispositivo
Cur sor Si ze. Especifica el tamao del cursor grfico (como porcentaje respecto a la pantalla).
Ser un valor de 0 a 100.
La sintaxis para asignar:
ObjetoPreferencias. Cur sor Si ze = IntTamaoCursor
La sintaxis para obtener:
IntTamaoCursor = ObjetoPreferencias. Cur sor Si ze
IntTamaoCursor es tipo de dato I nt eger .
DOCE.11.7. Preferencia de perfil
Act i vePr of i l e. Especifica el perfil de usuario activo.
La sintaxis para asignar:
ObjetoPreferencias. Act i vePr of i l e = StrPerfil
La sintaxis para obtener:
StrPerfil = ObjetoPreferencias. Act i vePr of i l e
StrPerfil es tipo de dato St r i ng.
DOCE.11.8. Mtodos del objeto de preferencias
Una vez vistas las propiedades pasamos a los mtodos. Los mtodos siguientes se correspon-
den con las acciones de los botones existentes en el cuadro de la pestaa Perfil del cuadro Pre-
ferencias de AutoCAD 14.
Del et ePr of i l e. Elimina un perfil de usuario de AutoCAD.
ObjPreferencias. Del et ePr of i l e( StrPerfilElim)
StrPerfilElim es un valor St r i ng que especifica el nombre del perfil que se desea eliminar.
Expor t Pr of i l e. Exporta un perfil de usuario de AutoCAD.
ObjPreferencias. Del et ePr of i l e( StrPerfilExport, StrArchivoARG)
StrPerfilExport es un valor St r i ng que especifica el nombre del perfil que se desea expor-
tar. StrArchivoARG es un valor de tipo St r i ng tambin, el cual indica la ruta y el nombre del
archivo donde se exporta el perfil para su posterior uso. El archivo ser de extensin . ARG.
Get Pr oj ect Fi l ePat h. Obtiene el camino de bsqueda de referencias externas asociado con
el proyecto cuyo nombre se indica.
StrDirectorio = ObjPreferencias. Get Pr oj ect Fi l ePat h( StrNombreProyecto)
StrNombreProyecto es un valor St r i ng que especifica el nombre del proyecto. StrDirectorio
es una variable de tipo St r i ng que recoger el directorio donde AutoCAD buscar referencias
externas.
I mpor t Pr of i l e. La sintaxis de este mtodo es:
ObjPreferencias. Del et ePr of i l e( StrPerfilImport, StrArchivoARG, IncluirCamino)
I mpor t Pr of i l e importa el perfil de usuario cuyo nombre se indica de un archivo de registro de
perfiles con la extensin . ARG. El ltimo argumento es un valor booleano (Bool ean) que de-
termina si se incluye el camino de acceso en la informacin del perfil. Si el valor es Tr ue se
incluir dicho camino; en caso contrario (Fal se) no.
Reset Pr of i l e. La sintaxis de este mtodo es:
ObjPreferencias. Reset Pr of i l e( StrPerfilInic)
Reset Pr of i l e inicializa el perfil que se indica (como cadena St r i ng), estableciendo todas las
caractersticas con los valores por defecto.
Set Pr oj ect Fi l ePat h. Crea un nuevo proyecto con el nombre indicado y le asigna o asocia
un camino de bsqueda para referencias externas cuando se trabaje con l.
La sintaxis de este mtodo es:
ObjPreferencias. Set Pr oj ect Fi l ePat h( StrNombreProyecto, StrDirectorioRefX)
StrNombreProyecto es un valor St r i ng que especifica el nombre del proyecto. StrDirecto-
rioRefX es una variable de tipo St r i ng que recoger el directorio donde AutoCAD buscar
referencias externas.
6 fase intermedia de ejercicios
Progrmese algn ejemplo que acte sobre las preferencias de AutoCAD 14..
DOCE.12. ALGUNOS TRUCOS ActiveX Automa-
tion
PARA AutoCAD 14
En esta seccin simplemente se quieren mostrar algunos trucos o tcnicas tiles a la hora de
programar en VBA para AutoCAD 14. Existe a veces un vaco en el programador cuando se
encuentra con situaciones que no sabe resolver. La mayor parte de estas situaciones tienen
solucin, slo hay que saber encontrarla y, para ello, hacen mucha falta horas de programa-
cin y experiencia.
Aqu se explica un pequeo grupo de tcnicas que pueden resolver algunos problemas a la
hora de hacer programas para AutoCAD.
DOCE.12.1. Compilacin de programas con un
compi-
lador de Visual Basic externo
Como nos habremos dado cuenta a la hora de programar a lo largo de este MDULO DOCE,
resulta un poco fastidioso el mecanismo de VBA en el momento de ejecutar un programa. Si
este dispone de letrero de dilogo se cambia automticamente a la ventana de AutoCAD
(siempre que no est minimizada), pero si es una macro simplemente, hemos de cambiar ma-
nualmente.
Adems de ello, en cuanto el programa termina se vuelve al editor VBA, ya que hemos de te-
nerlo siempre abierto para ejecutar un programa. Esto no es nada elegante si nuestro deseo es
distribuir o vender un programa. Con el consabido temor a que alguien adems haga suyo
nuestro cdigo fuente.
Para evitar todos estos problemas podemos recurrir a un compilador externo de Visual Basic,
como Visual Basic 5.0 o Visual Basic 6.0. De esta manera, nicamente hemos de compilar el
programa para crear una aplicacin . EXE independiente (pero que slo correr bajo Auto-
CAD).
Sin embargo, compilar un proyecto VBA en un editor externo de Visual Basic no es un camino
de rosas. Tampoco pensemos que es un infierno, no, es sencillo, pero hay que seguir una serie
de pasos y unas normas para que todo funcione correctamente. Veamos cules son.
Primero. El primer paso consiste, evidentemente, en conseguir una distribucin de Visual Ba-
sic. Sin el compilador no podremos hacer nada, como es lgico. Aqu se explicarn los pasos
refirindonos a Visual Basic 5.0.
Segundo. Un compilador de Visual Basic no lee archivos binarios . DVB (los del VBA de Auto-
CAD), por lo que habr que exportar los archivos a un formato comprensible. Para ello, y des-
de la ventana de proyecto de VBA, seleccionamos uno por uno los archivos de nuestro proyec-
to (los de formulario, mdulo...) y, pulsando sobre ellos con el botn derecho del ratn elegi-
mos la opcin Exportar archivo... del men contextual.
Todos los archivos resultantes los guardaremos en una sola carpeta en el disco duro para ma-
yor organizacin final. Los elementos, segn su condicin, se exportan a un archivo diferente
segn la siguiente tabla:
Elemento VBA Al exportar es un archivo de Visual Basic

For mul ar i o . FRM
Mdulo .BAS
Mdulo de clase .CLS
Tercero. Exportados y guardados como archivos todos los elementos, hemos de pasarlos a
Visual Basic. Aqu abriremos un nuevo proyecto y lo dejaremos vaco de formularios y mdulos
de cdigo (eliminando el formulario que aparece por defecto).
Ahora hemos de pulsar con el botn derecho en un espacio vaco (blanco) de la ventana de
proyecto y elegir Agregar>Formulario.... En el cuadro de dilogo buscaremos y abriremos el
archivo . FRMgenerado del proyecto en VBA. Lo mismo para los mdulos de cdigo y dems.
Es decir, crearemos un slo proyecto de Visual Basic . VBP agregando o anexando todos los
trozos extrados del proyecto de VBA. Al final podemos guardarlo todo.
Cuarto. Muy importante es una cosa. Puede que al intentar aadir un formulario nos d un
error Visual Basic. Procuremos antes de nada elegir la referencia a la librera de objetos de
AutoCAD (Aut oCAD Obj ect Li br ar y) en el men Proyecto>Referencias..., adems de las dos
siguientes referencias tambin: Vi sual Basi c For Appl i cat i ons y OLE Aut omat i on (otras
que haya escogidas ya hemos de dejarlas como estn). Adems, bajo Proyec-
tos>Componentes... escogeremos Mi cr osof t For ms 2. 0 Obj ect Li br ar y.
Este ltimo componente es el que utiliza el VBA de AutoCAD 14 como predeterminado; es la
librera de objetos insertables en los formularios: cuadros de lista, listas desplegables, boto-
nes, etctera. Si en el formulario hay algn elemento que no se encuentra en la librera por
defecto de Visual Basic, como por ejemplo la pgina mltiple (la ventana con pestaas), puede
que se produzca un error al agregar el formulario.
Las referencias expuestas dicen relacin a VBA. La ms importante es Aut oCAD Obj ect Li -
br ar y, ya que contiene definidos los objetos de AutoCAD para VBA: Appl i cat i on, Document ,
Model Space, Pl ot , Pr ef er ences...
Quinto. Una vez hecho todo lo anterior hemos de repasar el cdigo para encontrar incompati-
bilidades de VBA con Visual Basic. Por ejemplo, sabemos que el documento actual activo puede
ser referenciado desde VBA con el trmino Thi sDr awi ng. Esto es imposible desde un Visual
Basic externo; a la hora de compilar nos dar un error y nos dir que esa variable no est de-
clarada.
Desde Visual Basic es indispensable utilizar la sintaxis que hemos venido usando hasta ahora,
por ejemplo:
Di mAcadDoc as Obj ect
Set AcadDoc = Get Obj ect ( , " Aut oCAD. Appl i cat i on" ) . Act i veDocument
De esta forma hacemos referencia a la aplicacin AutoCAD y a su librera de objetos. A partir
de aqu ningn mtodo o propiedad ser considerada por Visual Basic como un error de sin-
taxis o de falta de declaracin de variables.
Otra serie de errores nos producen todas las constantes equivalentes a valores I nt eger que
admiten algunos mtodos y algunas propiedades: acOn, acOf f , acMet r i c, acSel ect i onSe-
t Al l , acPl ot Or i ent at i onLandscape... En estos casos se producir tambin un error, al com-
pilar, de variable no declarada. Para evitarlo nicamente hemos de sustituir estos valores
constantes por sus correspondientes valores enteros (I nt eger ).
NOTA IMPORTANTE DE SINTAXIS: No se ha comentado a lo largo de este MDULO ninguno
de los valores enteros correspondientes con las diversas constantes, sino nicamente ellas.
Cada lista de constantes en estas pginas est ordenada de izquierda a derecha y de arriba a
abajo (sentido lgico de lectura). Pues bien, los valores enteros se encuentran tambin en di-
cho orden, comenzando siempre por el cero (0).
En ltima instancia, si no pudiramos solucionar un error de esta ndole por alguno de estos
mtodos, bastara deshacernos de la sentencia Opt i on Expl i ci t para que todo funcione a la
perfeccin.
Sexto. El proyecto a nivel esttico en Visual Basic es mucho ms agradecido que en VBA. Aho-
ra, y antes de la compilacin, podremos agregar un icono propio a cada formulario, anular o no
los botones de maximizar y minimizar, etctera. Esto va con el gusto del programador.
Sptimo. Este paso es el de la compilacin. Simplemente consiste en dirigirnos a Archi-
vo>Generar Proyecto1.exe... (esta opcin cambia, pero la primera vez probablemente sea este
el ttulo), elegir la opcin, darle un ttulo al ejecutable y pulsar el botn Aceptar.
Si se nos ofrece algn error de compilacin sin depurar de los mencionados en el paso ante-
rior, simplemente habremos de seguir las instrucciones pertinentes ya comentadas para solu-
cionarlo.
Octavo. Una vez en disposicin de un ejecutable vlido, se nos presenta el problema de la
ejecucin desde AutoCAD. El archivo objeto es . EXE, sin embargo no tiene nada que ver con
aplicaciones ADS ni ARX.
La manera de cargar un ejecutable compilado con Visual Basic es con la funcin STARTAPP de
AutoLISP. La explicacin completa de esta funcin se encuentra en la seccin ONCE.15.5.,
sobre el inicio de aplicaciones Windows. As por ejemplo, si nuestro nuevo ejecutable se llama-
ra TRAZADO. EXE y se encontrar en una carpeta llamada VBACOMP en el diirectorio raz del disco
duro (C: \ ), podramos hacer:
( STARTAPP " c: / vbacom/ t r azado. exe" )
Esta lnea puede formar parte de un programa AutoLISP, de la macro de un botn, de una op-
cin de men o de un archivo de guin, adems de poder teclearla directamente en la lnea de
comandos.
De esta manera, queda as explicada la forma de crear aplicaciones con VBA y Visual Basic
para AutoCAD que no necesiten el editor VBA para funcionar y tambin, que no tengan el c-
digo fuente a la vista.
An as, AutoCAD 14 deber estar ejecutndose para que estos programas funcionen correc-
tamente, de forma evidente. Tambin hemos de tener en cuenta a la hora de correr nuestros
programas en otras mquinas, la necesidad de ciertos archivos (libreras de objetos y dems)
para que todo funcione a la perfeccin.
Por ltimo, resear la necesidad de comprobar los derechos de autor de ciertos archivos al
distribuirlos de manera gratuita o por una cantidad dineraria.

DOCE.12.1.1. Objeto de aplicacin en progra-
mas
compilados
Al compilar un programa VBA con un Visual Basic externo, se puede dar el caso de que el
usuario lo pretenda ejecutar sin tener AutoCAD arrancado. En este caso el programa ofrecera
un error.
Para evitar este trance, se suele aadir al programa un cdigo parecido al siguiente, para que
se ejecute nada ms empezar:
On Er r or Resume Next
Set AcadApp = Get Obj ect ( , " Aut oCAD. Appl i cat i on" )
I f Er r Then
Er r . Cl ear
Set AcadApp = Cr eat eObj ect ( " Aut oCAD. Appl i cat i on" )
I f Er r Then
MsgBox Er r . Descr i pt i on
Exi t Sub
End I f
End I f
De esta manera, se intenta acceder con Get Obj ect al objeto de aplicacin de AutoCAD (pre-
viamente declarado como Obj ect , al igual que siempre). Si se produce un error se procura
crear un objeto de aplicacin de AutoCAD (con Cr eat eObj ect ). Lo que har este mecanismo
es arrancar AutoCAD si lo encuentra y no se produce ningn error. Por ltimo, y si esto falla,
se presenta un mensaje de error con la descripcin del mismo.
Por defecto la aplicacin de AutoCAD se inicia con la propiedad de visibilidad desactivada, por
lo que habr que activarla as, por ejemplo:
AcadApp. Vi si bl e = Tr ue
Despus, y si nos interesa, podremos darle tamao a la ventana, por ejemplo as:
acadApp. Top = 0
acadApp. Lef t = 0
acadApp. Wi dt h = 400
acadApp. Hei ght = 400
A menudo el orden de las propiedades del objeto no es importante, pero en este caso s lo es.
Dado que el tamao de la ventana de aplicacin se mide desde la esquina superior izquierda
de la ventana, el ajuste de las propiedades Wi dt h o Hei ght antes que Top o Lef t provoca un
comportamiento no recomendable.
DOCE.12.2. Ejecucin de programas VBA desde
Auto-
LISP y en macros
As como la funcin STARTAPP, comentada en la seccin anterior, nos es til para ejecutar apli-
caciones Windows, puede que lo que nos interese es mantener el programa VBA sin compilar y
necesitemos ejecutarlo sin necesidad de hacer pasar al usuario por todo el proceso de cargar
un proyecto, etctera; es decir, hacerlo de una manera automtica.
Desde un programa en AutoLISP podremos utilizar sin ningn problema los comandos que se
aaden al instalar VB, es decir _VBALOAD, _- VBARUN y _VBAUNLOAD. Imaginemos que dispone-
mos de una macro creada en un archivo que es de proyecto de VBA llamado PRUEBA. DVB, que
se encuentra en el directorio C: \ VBA\ . Para cargarlo podramos incluir las siguientes lneas en
un archivo AutoLISP:
( COMMAND " _VBALOAD" " c: \ \ vba\ \ pr ueba. dvb" )
( COMMAND " _- VBARUN" " Mdul o1. Macr oPr ueba" )
( COMMAND " _VBAUNLOAD" )
Lo primero es cargar el archivo con VBLOAD (incluimos el guin de subrayado por mayor com-
patibilidad, como ya sabemos).
Despus hemos de ejecutar la macro. Para ello utilizamos el comando VBARUN con el guin
normal (- ) por delante para ejecutar su versin de lnea de comandos. La manera de ejecutar
una macro desde la lnea de comandos es con la sintaxis que se indica, es decir: primero el
nombre del mdulo de cdigo que la contiene, luego un punto (. ) y por ltimo el nombre de la
macro. Aqu el nombre del mdulo es Mdul o1 (nombre por defecto) y el de la macro definida
dentro de l es Macr oPr ueba.
Al final hemos de descargar el programa o proyecto. Para ello utilizamos VBAUNLOAD. El pro-
grama se descargar al finalizar su ejecucin.
NOTA: A esta serie de funciones se le puede aadir cdigo para controlar la existencia del ar-
chivo, de la macro, etctera.
Si lo que deseamos ejecutar no es una macro dentro de un mdulo sino un programa con su
letrero de dilogo (formulario) y dems, la prctica lgica pasa por crear una macro en un m-
dulo de dicho programa que muestre el formulario principal, ya que no se puede llamar a otro
elemento que no sea una macro con VBARUN. Por ejemplo, en un programa que arranque con
un formulario llamado f or mPr i nci pal , creamos una macro (en el mdulo Mdul o1) tal que
as:
Sub Ar r anque( )
f or mPr i nci pal . Show
End Sub
De esta manera luego podemos dirigirnos desde AutoLISP a esta macro as:
( COMMAND " _- VBARUN" " Mdul o1. Ar r anque" )
lo que har ejecutarse el programa normalmente.
A la hora de ejecutar programas VBA desde una macro (botn, men o archivo de guin), po-
demos incluir el cdigo anterior en AutoLISP, ya que resultara como si lo estuviramos en-
trando en lnea de comandos.
Sin embargo, por las propias caractersticas de las macros, podemos incluir la serie de coman-
dos sin necesidad de hacer intervenir a AutoLISP por ningn lado. As por ejemplo, la macro de
un botn de barra de herramientas que cargue un programa podra ser:
^C^C_VBALOAD c: / mi sdoc~1/ aut ocad/ vba/ t r azado. dvb; _- VBARUN Mdu-
l o1. Macr o; _VBAUNLOAD
NOTA: Tnganse en cuenta las propias caractersticas de cada tipo de macro, sea de dentro de
un botn, de un archivo de guin, etctera.
Por ltimo decir que en la mquina que se escriban estos comandos habr de estar instalado
VBA para AutoCAD, sino no funcionar. Es por esto, que a la hora de distribuir aplicaciones se
recomiende la compilacin explicada en la seccin anterior (DOCE.12.1.).
DOCE.12.3. Enviar cadenas a la lnea de co-
mandos
desde VBA
A veces quiz nos interese, desde un programa VBA, acceder a la lnea de comandos de Auto-
CAD para ejecutar algn comando, por ejemplo. O nos sea necesario ejecutar una funcin o
una secuencia de funciones en AutoLISP, porque su efecto no podemos o no sabemos con-
seguirlo con VBA.
Para ello disponemos de un pequeo truco, el cual consiste en utilizar la instruccin SendKeys
de Visual Basic. sta permite enviar una o varias pulsaciones de teclas a la ventana activa co-
mo si lo estuviramos haciendo desde el teclado. Su sintaxis es:
SendKeys Cadena[ , Modo_espera]
Donde Cadena es la cadena que deseamos enviar. Esta puede ser tambin una pulsacin de
teclas especiales (ENTER, ALT...), pero nos centraremos en una cadena tpica. Modo_espera es
un argumento opcional booleano que, si se establece como Tr ue se procesan las pulsaciones
antes de devolver el control al procedimiento Sub y, si es Fal se se devuelve el control inme-
diatamente despus de enviarse las pulsaciones. Normalmente utilizaremos esta ltima opcin,
que es la predeterminada, por lo que no har falta que escribamos nada.
Para poder hacer funcionar este mecanismo habremos de ayudarnos de la instruccin AppAc-
t i vat e, cuya sintaxis es:
AppAct i vat e Ttulo[ , Modo_espera]
AppAct i vat e activa una ventana de aplicacin. Ttulo es el argumento obligatorio que hay
que pasarle, y dice referencia al nombre actual en la barra de ttulo (barra azul normalmente)
de la ventana. Modo_espera es un valor booleano opcional que especifica si la aplicacin que
hace la llamada tiene el enfoque antes de activar otra. Si se especifica Fal se (predetermina-
do), se activa inmediatamente la aplicacin especificada, aunque la aplicacin que hace la lla-
mada no tenga el enfoque. Si se especifica Tr ue, la aplicacin que hace la llamada espera has-
ta que tenga el enfoque y luego activa la aplicacin especificada (normalmente utilizaremos
esta opcin Tr ue).
Pero veamos un ejemplo:
Opt i on Expl i ci t
Di mAcadApp As Obj ect
Di mAcadCommand As St r i ng

Sub Macr o( )
Set AcadApp = Get Obj ect ( , " Aut oCAD. Appl i cat i on" )
AppAct i vat e AcadApp. Capt i on
AcadCommand = " _. open "
SendKeys AcadCommand, Tr ue
End Sub

Esta macro define el objeto de aplicacin de AutoCAD primero. Despus la activa enviando el
nombre de la barra de ttulo actual. Como en AutoCAD (y en otras muchas aplicaciones) este
ttulo cambia segn el nombre del archivo abierto, se extrae directamente el actual con la pro-
piedad Capt i on del objeto Appl i cat i on.
A continuacin se define y enva la cadena a la lnea de comandos. En este caso es el comando
para abrir un archivo. Ntese que ha de dejarse un espacio blanco al final para emular un I N-
TRO, ya que es como si estuviramos escribiendo en lnea de comandos.

NOTA: Un I NTRO puede tambin representarse como {I NTRO} o con una tilde ~.
Como se ha dicho, SendKeys se utiliza para enviar pulsaciones de teclas (para pulsar botones
desde cdigo, ejecutar opciones de men, etc.). En AutoCAD, como sabemos, si escribimos
algo directamente teniendo delante la interfaz grfica donde primero se refleja es en la
lnea de comandos. De ah este mecanismo para este problema.
Podemos tambin enviar cdigo AutoLISP o lo que nos apetezca. Incluso se podra hacer que
un programa VBA leyera lnea por lnea un archivo . LSP y lo fuera enviando a la lnea de co-
mandos. Sin embargo esto es un poco peligroso, ya que un programa completo AutoLISP es-
pera respuestas por parte del usuario, abre cuadros DCL, etc., y el programa VBA seguira
mandando lneas y lneas sin parar. Aunque se puede conseguir que esto funcione, lo lgico es
reservarlo para acciones simples y cortas, programando el resto del cdigo en VBA.
An as, veremos un ejemplo ms prctico que el anterior con cdigo en AutoLISP. Sabemos
que VBA no dispone (como AutoLISP) de un mtodo o propiedad que llame al cuadro de color
de AutoCAD 14. Pues mezclando algunas tcnicas podremos hacer desde VBA que se llame a
dicho cuadro utilizando AutoLISP para luego acabar con el resultado en una variable VBA.
Veamos el cdigo:
Opt i on Expl i ci t
Di mAcadApp As Obj ect
Di mAcadDoc As Obj ect

Sub Macr o( )
Di mAcadCommand As St r i ng
Set AcadApp = Get Obj ect ( , " Aut oCAD. Appl i cat i on" )
Set AcadDoc = AcadApp. Act i veDocument

AppAct i vat e AcadApp. Capt i on
AcadCommand = " {( }SETVAR " " user i 1" " {( }SETQ NumCol {( }ACAD_COLORDLG
256{) }{) }{) } "
SendKeys AcadCommand, Tr ue
End Sub

Sub Macr o2( )
Di mNmer oCol or As I nt eger
Nmer oCol or = AcadDoc. Get Var i abl e( " user i 1" )
MsgBox " El egi do col or : " & Nmer oCol or
End Sub

Cmo podemos observar, este cdigo consta de dos macros (Macr o y Macr o2). La primera de
ellas es la encargada de enviar el cdigo AutoLISP a la lnea de comandos, como hacamos en
el ejemplo anterior. El nico inconveniente viene dado por la utilizacin de parntesis, y es que
estos tienen un significado especial para SendKeys. Es por ello que, cuando queramos utilizar
uno, habremos de encerrarlo entre llaves.
Tambin debemos saber, que en Visual Basic para introducir comillas dentro de una cadena
hemos de indicar estos caracteres como dobles (" " ), para que no se confundan con las comi-
llas propias de la cadena de texto.
Segn todo esto, una secuencia AutoLISP que sera as:
( SETVAR " " user i 1" " ( SETQ NumCol ( ACAD_COLORDLG 256) ) )
se convierte en esto:
{( }SETVAR " " user i 1" " {( }SETQ NumCol {( }ACAD_COLORDLG 256{) }{) }{) }
Aqu lo que hacemos es introducir directamente el valor de la variable de AutoLISP que crea-
mos, llamada NumCol , la cual recoge el color seleccionado en el cuadro, en una de las variables
de usuario para valores enteros de AutoCAD, USERI 1.
NOTA: Repsese la seccin NUEVE.3.6. para recordar el sentido de estas quince variables de
diferentes tipos. Ahora les hemos encontrado otro quehacer.
Macr o2 simplemente se limita a extraer el valor de USERI 1, con el mtodo Get Var i abl e del
objeto de documento activo, y a mostrarlo. Estas variables de usuario son accesibles del mis-
mo modo que las dems variables de sistema.
NOTA: Primero ejecutaremos Macr o y despus Macr o2.
DOCE.13. COMO APUNTE FINAL
Como se advirti al principio de este MDULO, la comprensin del mismo pasa por el conoci-
miento obligado por parte del lector de la programacin en Visual Basic. Aqu, segn se ha
visto, se le pega simplemente un gran repaso a todos los mtodos y propiedades que compo-
nen la inclusin de VBA en AutoCAD 14.
An as, el autor de este curso cree que no resulta harto complicado la comprensin del mis-
mo, ya que los ejemplos, los ejercicios y las explicaciones detalladas pueden ayudarnos a co-
menzar a programar en un lenguaje tan sencillo y verstil como es Visual Basic, sin dejar de
lado por supuesto a la parte que le toca al, todava algo verde, VBA de AutoCAD 14.
DOCE.FIN. EJERCICIOS PROPUESTOS
I. Crear un sencillo programa en VBA que permita cambiar el color a todos los bloques de-
finidos en el dibujo de una sola vez. El letrero de dilogo que maneje puede ser el si-
guiente:

II. Crear una macro VBA que permita aadir lneas de ejes a arcos, crculos y/o elipses
previamente seleccionados.
III. Programar un ejemplo en VBA que permita cambiar la altura a todos los textos del
dibujo actual. El letrero de dilogo puede ser este mismo:

IV. Realizar una serie de programas en AUTOLISP/DCL y en VBA los cuales per-
mitan aprovechar al completo las capacidades de AutoCAD 14 a la hora de tra-
bajar con l en cualquiera que sea el puesto de trabajo. Un proyecto de persona-
lizacin completo puede incluir diseos de mens, barras de herramientas, etc-
tera; en fin todo lo que hemos estudiado a lo largo de este curso.
Autor: J onathan Prstamo Rodrguez.
Para: La Web del Programador.

MDULO TRECE
Entorno de programacin Visual
Lisp
TRECE.1. Visual Lisp ES...
Visual Lisp es un entorno de desarrollo diseado para proporcionar herramientas de ayuda en
la creacin y modificacin de programas fuente de AutoLISP, y herramientas de chequeo y
depuracin durante la prueba y simulacin de los programas. Adems, permite controlar obje-
tos ARX desde AutoLISP. En este MDULO TRECE se estudia su entorno.
TRECE.2. PROCESO DE CREACIN DE UN PRO-
GRAMA
El proceso de creacin de un programa en AutoLISP se puede desglosar en una serie de etapas
caractersticas. El entorno de Visual Lisp interviene en cada una de la manera explicada a con-
tinuacin:
Generacin de archivos de cdigo fuente. Visual Lisp proporciona:
Editor de texto de AutoLISP y DCL, con cdigos de colores y herramientas para eviden-
ciar la sintaxis de las expresiones.
Formateador de AutoLISP para proporcionar al texto un formato y anidacin adecuados.
Ayuda sensible al contexto para recordar sintaxis de funciones de AutoLISP y deteccin
de smbolos de funciones o variables.
Ensayo y depuracin de programas. Visual Lisp proporciona:
Corrector de sintaxis que reconoce construcciones de expresiones errneas y argumen-
tos impropios.
Simulacin paso a paso de ejecucin del programa, mostrando simultneamente las l-
neas del cdigo fuente y su efecto en AutoCAD.
Acceso a valores de variables y expresiones para examinar la estructura de datos del
programa. Tambin se incluye el acceso a datos de los objetos de dibujo de AutoCAD.
Utilizacin de programas. Visual Lisp proporciona:
Compilador de archivos para aumentar la eficiencia y seguridad de utilizacin de los
programas.
Gestin de proyectos para trabajar con varios programas relacionados a la vez.
Empaquetamiento de varios archivos compilados en un nico mdulo ADS o ARX.
TRECE.3. INSTALACIN E INICIACIN
Visual Lisp no funciona de manera independiente sino que necesita que haya una sesin de
AutoCAD ejecutndose, como ocurra con el mdulo VBA. El mdulo de Visual Lisp se instala
desde un CD-ROM, creando su propio grupo de programas y una carpeta especfica Vi sual
Li sp dentro del directorio de AutoCAD. El mdulo se ha diseado como una aplicacin ARX,
por lo que se debe cargar desde AutoCAD, desde el men Herr.>Cargar aplicacin, archivo
VLI DE. ARX. Nada ms cargarse, se muestra la ventana de aplicacin de Visual Lisp.
Dicha ventana contiene una serie de reas de trabajo que son las siguientes:
Barra de mens. Serie de mens desplegables con los comandos y utilidades de Visual
Lisp. Las opciones de los mens pueden cambiar segn el proceso de trabajo. Los mens son:
Men Funcin

File Oper aci ones con ar chi vos de pr ogr amas.
Edit Oper aci ones de edi ci n de t ext os, cambi os, comandos Vi sual Li sp,
et c.
Search Bsqueda de t ext o, mar cas, sal t os a l nea, et c.
View Act i vaci n de vent anas de t r abaj o, bar r as de her r ami ent as, et c.
Project Gest i n de pr oyect os y pr ogr amas compi l ados.
Debug Her r ami ent as de depur aci n de pr ogr amas.
Tools Her r ami ent as gener al es.
Window Gest i n de vent anas de t r abaj o.
Help Ayuda en l nea.
Barras de herramientas. Hay un total de cinco, con los comandos y utilidades ms em-
pleados. Son Debug, Edit, Find, Inspect y Run.
Escritorio. Superficie donde se despliegan las diferentes ventanas de trabajo de Visual Lisp.
La de Consola se muestra desde el principio, la del Editor de texto cada vez que se carga un
archivo fuente (al principio se carga VLI DE. LSP), y la de Trace aparece minimizada hasta que
se activa el rastreo. El resto se activan durante el trabajo o expresamente desde el men
View.
Ventana de Consola. En ella se introducen los comandos de Visual Lisp y las funciones de
AutoLISP. Equivale al historial de comandos de AutoCAD. Ofrece un prompt o seal con el
aspecto _$.
Editor de texto: se abre una ventana por cada archivo fuente cargado. All se muestran las
expresiones de AutoLISP mediante colores, para distinguir visualmente los diferentes tipos de
smbolos.
Lnea de estado: lnea en la parte inferior de la pantalla, con informacin permanente.
TRECE.3.1. Carga y ejecucin de programas
Los archivos con el cdigo fuente se pueden abrir o cargar. En el primer caso (men File>Open
File) se muestra el listado en una ventana de Editor de texto. En el segundo caso (men Fi-
le>Load File), se cargan adems en memoria segn se abren, tal como se hara desde Auto-
CAD mediante Herr.>Cargar aplicacin. Si existen errores en el programa, la Consola muestra
mensajes de advertencia. Se puede cargar el programa abierto actualmente, desde un icono
de la barra Tools.
Si todo es correcto, se puede utilizar el programa llamando a la nueva funcin o comando de
AutoCAD directamente desde la Consola de Visual Lisp. sta pasa automticamente a Auto-
CAD y all se especifican los datos o puntos solicitados por el programa. Cuando ste termina,
se regresa a Visual Lisp. Si AutoCAD se encuentra minimizado o no est en ejecucin, Visual
Lisp muestra en el puntero del ratn un cursor con un par de parntesis. Esto significa que no
puede comunicarse con AutoCAD. Se debe abrir una sesin de dibujo o maximizar AutoCAD
para seguir trabajando.
Durante el trabajo, resulta muy habitual alternar entre Visual Lisp y AutoCAD. Esto se puede
hacer mediante los procedimientos estndar de Windows pero, para facilitar la tarea, Visual
Lisp dispone de un botn especfico para pasar a AutoCAD. A su vez, el comando VLI DE de
AutoCAD permite pasar directamente a Visual Lisp.
Se pueden ejecutar expresiones individuales y trozos del archivo fuente, para examinar su
funcionamiento. Para ello se seleccionan en el Editor de texto y se elige la opcin de men
Tools>Load selection o el icono correspondiente.
Para salir de Visual Lisp, se elige el men File>Exit. Si ha habido modificaciones en los archi-
vos abiertos, se solicita si se desea guardar los cambios. La prxima vez que se entre en Visual
Lisp, los ltimos archivos utilizados sern automticamente abiertos.
TRECE.4. ESCRITURA DEL CDIGO FUENTE
Se examinan en esta seccin las dos ventanas bsicas de trabajo en Visual Lisp: Consola y
Editor de texto. Adems, se estudian tambin las herramientas que inciden en el proceso de
escritura y correccin del cdigo fuente.
TRECE.4.1. Ventana de Consola
Como ya se ha adelantado, contiene el prompt de Visual Lisp _$ y un historial de comandos. La
ltima lnea es la lnea de comando, donde se introducen las instrucciones o expresiones que
evaluar. Las caractersticas de la Consola son:
Se introducen directamente expresiones y variables de AutoLISP para evaluar sus resul-
tados (no es necesario el carcter ! como en AutoCAD para evaluar variables). Si una
expresin no cabe en una lnea, mediante CTRL+I NTRO se establece una continuidad con
la siguiente. El cdigo de colores es el mismo que en el Editor de texto.
Se puede copiar e intercambiar texto entre la Consola y el Editor de texto. Si se selec-
ciona un texto del historial en la Consola (arrastrando el cursor hasta iluminarlo) y des-
pus se pulsa I NTRO, ese texto se copia a la lnea de comando.
Se pueden recuperar comandos del historial de Visual Lisp, mediante las teclas de TAB
(hacia arriba) y SHI FT+TAB (hacia abajo).
Si se utilizan las teclas anteriores despus de haber empezado una expresin en la
Consola, por ejemplo ( SETQ, se recuperan hacia arriba y hacia abajo todas las ex-
presiones que comienzan igual.
La tecla ESC elimina el texto actual en la lnea de comando de la Consola. La combina-
cin SHI FT+ESC empieza una nueva lnea de comando, pero mantiene el texto de la an-
terior sin evaluar, por si se desea recuperar ms tarde.
Existe un men flotante contextual desde el botn derecho del ratn (tambin desde
SHI FT+F10), con las opciones indicadas en la tabla siguiente:
Opcin de men Descripcin

Cut Cor t a el t ext o sel ecci onado haci a el por t apapel es.
Copy Copi a el t ext o sel ecci onado al por t apapel es.
Paste Pega el t ext o del por t apapel es en l a posi ci n del cur -
sor .
Clear Console Window Vac a de t ext o l a vent ana de Consol a.
Find Busca un t ext o especi f i cado en l a vent ana de Consol a
Inspect Abr e el cuadr o de di l ogo de Inspeccin.
Add Watch Abr e l a vent ana de segui mi ent o de expr esi ones.
Apropos Window Abr e l a vent ana de l ocal i zaci n de s mbol os y f unci ones.
Symbol service Abr e el cuadr o de di l ogo par a est abl ecer r ast r eos de
s mbol os.
Undo Deshace l a l t i ma oper aci n.
Redo Rehace l os ef ect os de l a l t i ma oper aci n deshecha.
AutoCAD Mode Act i va l a t r ansf er enci a aut omt i ca a l nea de comando de
Aut oCAD.
Toggle Console Log Abr e/ ci er r a un ar chi vo de r egi st r o par a escr i bi r el hi s-
t or i al
de Consol a.
Existe una ayuda sensible al contexto, a la que se accede desde el botn correspondiente en la
barra de herramientas de Tools. Se puede invocar tras seleccionar un smbolo o expresin.
Si se ha activado Aut oCAD Mode, el prompt pasa a ser Command: . Ahora todas las expresiones
se transfieren automticamente a AutoCAD. Adems, es posible escribir comandos de Auto-
CAD en Visual Lisp.
TRECE.4.2. Editor de texto
Es una ventana que contiene el texto de un archivo abierto. Si se abren varios archivos a la
vez, habr una ventana por archivo. Los archivos que se pueden abrir son de cuatro tipos:
LSP, DCL, SQL y C/ C++. En este apartado se consideran fundamentalmente los archivos de Au-
toLISP. El Editor de texto va sangrando las expresiones conforme se escriben, en funcin del
nmero de parntesis que se van abriendo. Para ello, se puede utilizar la tecla I NTRO de tres
maneras:
1) Pulsando I NTRO sin ms, el cursor cambia de lnea y sangra su posicin de acuerdo con los
parntesis que van quedando abiertos.
2) Pulsando SHI FT+I NTRO, el cursor cambia de lnea sin sangrar su posicin, quedndose al
mismo nivel que la lnea de texto anterior.
3) Pulsando CTRL+I NTRO, el cursor cambia de lnea retrocediendo hasta la posicin inicial sin
sangrado, y no tiene en cuenta el nivel de anidacin actual.
La tecla TAB inserta tabuladores y la combinacin SHI FT+TAB (se puede usar incluso en mitad
de una lnea) elimina las tabulaciones al principio de la lnea. El tamao de las tabulaciones se
puede modificar desde el men Tools>Window Attributes>Configure Current.
Es posible deshacer y rehacer sucesivas veces las ltimas modificaciones en el texto, pero ha-
cindolo de forma continua. Si se escriben, por ejemplo, tres lneas de texto, se pueden des-
hacer las tres seguidas y recuperar de nuevo las tres seguidas. Pero si se deshace una y des-
pus se escribe una nueva, ya no es posible rehacer la eliminada.
Conviene ir guardando el texto de cuando en cuando para evitar que un suceso imprevisto
ocasione su prdida. Existe un mecanismo de copia de seguridad similar al de AutoCAD, de
manera que se genera un archivo de copia con el contenido del archivo sobrescrito. La exten-
sin de la copia de seguridad se forma con el carcter _ y los dos primeros de la extensin
original. As, para los archivos de AutoLISP . LSP, la extensin es . _LS. Si se desea desechar
las ltimas modificaciones, la opcin File>Revert recupera el contenido del archivo . LSP tal
como se haba guardado la ltima vez.
El cdigo de colores empleado en el Editor de texto se ofrece en la siguiente tabla:
Color Smbolo de AutoLISP

Roj o Par nt esi s
Azul Funci ones pr opi as de Aut oLI SP y s mbol os pr ot egi dos
Magent a Cadenas de t ext o
Ver de Val or es numr i cos ent er os
Ver de azul ado Val or es numr i cos r eal es
Negr o S mbol os no r econoci dos ( como l as f unci ones y var i abl es
de
usuar i o)
Magent a en f ondo gr i s Coment ar i os
Estos colores se pueden modificar desde el men Tools>Window Attributes>Configure Current.
Aparece un cuadro de dilogo donde es posible seleccionar el elemento que vamos a modificar
en una lista desplegable, y despus especificar colores de fondo y primer plano. Tambin se
puede indicar el intervalo del tabulador (ya comentado) y un margen izquierdo.
Igual que en la Consola, se puede utilizar el mismo botn de ayuda sensible al contexto. Tam-
bin existe un men flotante con algunas opciones idnticas a la Consola, aadindose dos
especficas:
Opcin de men Descripcin

Go to Last Edited Mueve el cur sor a l a posi ci n del l t i mo t ext o edi t ado.
Toggle Breakpoint Si t a un punt o de r upt ur a en l a posi ci n del cur sor o l o
el i mi na si exi st a.
Existen dos herramientas muy tiles a la hora de ir escribiendo los smbolos y funciones, para
completar una palabra:
Coincidencia (Match): Se utiliza para funciones y variables existentes en el archivo.
Consiste en escribir los primeros caracteres de la palabra y pulsar sucesivas veces las
teclas ALT+/ en el teclado ingls o ALT+ en el teclado espaol. Visual Lisp va ofrecien-
do todas aquellas funciones y variables existentes en el archivo cuyos primeros caracte-
res coinciden, para que el usuario elija.
Tabla de smbolos de AutoLISP (Apropos): Se utiliza para funciones de AutoLISP. Tras
escribir los primeros caracteres de la palabra, se pulsa CTRL+SHI FT+/ en el teclado in-
gls o CTRL+SHI FT+ en el teclado espaol. Existe un botn de herramienta que realiza
esta misma funcin. Visual Lisp escribe la funcin o smbolo de AutoLISP ms prximo
que empieza por esos caracteres. Si se vuelve a pulsar la combinacin y hay ms fun-
ciones posibles, se ofrece una lista para seleccionar la deseada. Si hay ms de 15 fun-
ciones posibles, o no se ha empezado ninguna palabra, se abre automticamente la
ventana de Apropos, explicada en el siguiente apartado.
TRECE.4.2.1. La herramienta Apropos
Esta herramienta, cuyo empleo se ha explicado para completar una funcin de AutoLISP em-
pezada en el Editor de texto, presenta una utilidad ms general. Consta de un cuadro de dilo-
go para establecer la bsqueda, y una ventana con las funciones encontradas.
Al cuadro de dilogo se accede desde el men View>Apropos Window, desde la opcin hom-
nima del men flotante, desde el botn de herramienta correspondiente, o pulsando
CTRL+SHI FT+/ (teclado ingls) o CTRL+SHI FT+ (teclado espaol), siempre que no haya texto
empezado en la posicin del cursor o texto seleccionado. Las opciones del cuadro son:
Opcin Descripcin

Caracteres de bsqueda Uno o ms car act er es par a r eal i zar l a bsqueda.
Por
def ect o, se of r ecen l os de l a l t i ma bsqueda.
Match by Prefix Si se act i va, sl o se l ocal i zan l as f unci ones de
Aut oLI SP que empi ezan por l os car act er es de bs-
queda. Si no
se act i va, se l ocal i zan t odas l as f unci ones que
pr esent an
esos car act er es aunque no sea al comi enzo.
Use WCMATCH Per mi t e ut i l i zar car act er es comod n como el
ast er i sco, par a l ocal i zar nombr es que cumpl an un
pat r n.
Downcase symbols Si se act i va, l a f unci n sel ecci onada por el
usuar i o,
ent r e l as que han si do l ocal i zadas en l a bsque-
da, se
copi ar en mi nscul as. En caso cont r ar i o, se
copi ar en
mayscul as t al como apar ecen en l a l i st a de l o-
cal i zadas.
Filter Value Abr e un subcuadr o par a est abl ecer un f i l t r o que
condi ci one l a bsqueda:
All: No hay f i l t r o; se consi der an por def ect o
sl o l as
f unci ones de Aut oLI SP.
Null value: Sl o se consi der an l os s mbol os
cuyo
val or es ni l .
Nonull value: Sl o se consi der an l os s mbol os
cuyo
val or no es ni l .
Functions: Se consi der an t odas l as f unci ones
( t ambi n l as de usuar i o) .
User function: Sl o se consi der an l as f unci o-
nes de
usuar i o ( no Aut oLI SP) .
Built-in function: Sl o l as f unci ones cons-
t r ui das en
Vi sual Li sp.
EXSUBR: Sl o l as subr ut i nas ext er nas.
Filter Flags Abr e un subcuadr o par a est abl ecer condi ci ones de
bsqueda a par t i r del t i po de at r i but o o seal
de l a
f unci n.
OK Hace ef ect i va l a bsqueda. Si exi st en f unci ones
que
cumpl en l as condi ci ones se abr e una vent ana con
l as
encont r adas.
Para seleccionar una de las funciones localizadas, se ilumina en la ventana de Apropos y, me-
diante el botn derecho del ratn, se elige Copy to clipboard. Posteriormente, se pega median-
te Paste en la posicin del cursor en el archivo de texto. La ventana de Apropos presenta tres
botones de herramientas: el primero invoca el cuadro de dilogo por si se quiere repetir la
bsqueda o establecer nuevas condiciones, el segundo traslada la funcin seleccionada a la
ventana de rastreo Trace y el tercero proporciona ayuda en lnea. Por ltimo, el men flotante
de la ventana Apropos (botn derecho del ratn) contiene una serie de opciones:
Opcin Descripcin

Copy to clipboard Copi a l a f unci n sel ecci onada al por t apapel es.
Inspect Abr e una vent ana de i nspecci n con l a f unci n
sel ecci onada.
Print Pasa l a f unci n a l a Consol a par a su eval uaci n.
Symbol Ll ama al cuadr o de di l ogo de Symbol service.
Copy Copi a l a f unci n en l a var i abl e especi al *obj *
par a
su uso post er i or .
Add to Watch Aade l a f unci n a l a l i st a en l a vent ana de
Watch.
Help Pr opor ci ona ayuda en l nea sobr e l a f unci n.
TRECE.4.2.2. Utilidades de gestin de texto
El contenido del archivo abierto en el Editor de texto se puede modificar mediante una serie de
opciones y herramientas. La primera es un men flotante especial que se invoca mediante
CTRL+E. Sus opciones son:
Opcin de men Descripcin

Indent Block Sangr a el bl oque de t ext o sel ecci onado una posi ci n de
t abul ador .
Unindent El i mi na una posi ci n de t abul ador del sangr ado del bl o-
que
de t ext o.
Prefix With Aade un t ext o al comi enzo de t odas l as l neas del bl o-
que
de t ext o.
Append With Aade un t ext o al f i nal de t odas l as l neas del bl oque
de
t ext o.
Comment Block Convi er t e el bl oque de t ext o en coment ar i os.
Uncomment Block Deshace l a conver si n del bl oque de t ext o en coment a-
r i os.
Save Block As Copi a el bl oque de t ext o a un ar chi vo ( por def ect o
ext ensi n . LSP)
Upcase Convi er t e a mayscul as t odo el t ext o del bl oque
sel ecci onado.
Downcase Convi er t e a mi nscul as t odo el bl oque de t ext o.
Capitalize Pone en mayscul as l a pr i mer a l et r a de cada pal abr a.
Insert Date I nser t a l a f echa act ual ( por def ect o en el f or mat o
MM/DD/AA) .
Insert Time I nser t a l a hor a act ual ( por def ect o en el f or mat o
HH/MM/SS) .
Format Date/Time Per mi t e cambi ar el f or mat o de f echa y hor a.
Sort Block Or dena al f abt i cament e l as l neas del bl oque de t ext o.
Insert File I nser t a en l a posi ci n del cur sor el cont eni do de un
ar chi vo
de t ext o.
Delete to EOL Bor r a el t ext o desde l a posi ci n del cur sor hast a el
f i nal de
l a l nea.
Delete Blanks Bor r a t abul ador es y espaci os en bl anco sobr ant es en l a
l nea act ual .
En la siguiente tabla, se enumeran las diferentes teclas aceleradoras para gestionar el texto en
la ventana del Editor:
Desplazamientos del cursor
Teclas Efecto

CTRL+ y CTRL+ Una palabra hacia la izquierda o hacia la derecha.
INICIO y FIN Comienzo o final de lnea.
CTRL+FIN y CTRL+INICIO Final del archivo de texto o inicio del archivo de
texto.
CTRL+ Desplaza una lnea hacia arriba el contenido de la
ventana.
CTRL+ Desplaza una lnea hacia abajo el contenido de la
ventana.
RE PG y AV PG Desplaza una pgina hacia arriba o abajo el
contenido de la ventana.
CTRL+[ (teclado ingls) Salta al parntesis izquierdo abierto al mismo nivel
CTRL+ (teclado espaol) que la posicin del cursor. Despus, a los sucesivos, desde
los interiores a los exteriores.
CTRL+] (teclado ingls) Salta al parntesis derecho cerrado al mismo nivel
CTRL+ (teclado espaol) que la posicin del cursor. Despus, a los sucesivos,
desde los interiores a los exteriores.
Seleccin de texto
Teclas Efecto

SHI FT+ y SHIFT+ Aade o elimina de la seleccin un carcter a la
izquierda o a la derecha.
CTRL+SHIFT+ y CTRL+SHIFT+ Aade o elimina de la seleccin una palabra a la
izquierda o a la derecha.
SHIFT+ y SHIFT+ Aade o elimina de la seleccin una lnea hacia
abajo o hacia arriba.
CTRL+SHIFT+ y CTRL+SHIFT+ Aade o elimina el trozo de lnea de abajo o arriba
hasta el cursor.
SHIFT+FIN y SHIFT+INICIO Ampla la seleccin hasta final o inicio de lnea
actual y de las sucesivas.
SHIFT+RE PG y SHIFT+AV PG Aade o elimina de la seleccin una pgina arriba o
abajo de la ventana.
CTRL+SHIFT+[ (teclado ingls) Ampla la seleccin hasta el parntesis izquierdo
CTRL+SHIFT+ (teclado espaol) abierto al mismo nivel del cursor. Despus a los
sucesivos desde los interiores a los exteriores.
CTRL+SHIFT+] (teclado ingls) Ampla la seleccin hasta el parntesis derecho
CTRL+SHIFT+ (teclado espaol) cerrado al mismo nivel del cursor. Despus a los
sucesivos desde los interiores a los exteriores.
ALT+INTRO Salta el cursor al principio o final del texto
seleccionado.
Correccin de texto
Teclas Efecto

CTRL+RETROCESO Bor r a l a pal abr a a l a i zqui er da.
SHI FT+RETROCESO Bor r a l a pal abr a a l a der echa.
CTRL+SUPR Bor r a l a pal abr a a l a der echa.
CTRL+E Con su opci n Delete to EOL bor r a desde cur sor hast a
f i nal de
l nea.
Un texto seleccionado en el Editor se puede arrastrar mediante el ratn hasta otra posicin del
archivo. Si se mantiene pulsada la tecla CTRL se copiar, en caso contrario se desplazar. Para
desplazar o copiar a otras ventanas, se utiliza el portapapeles de Windows.
Para buscar o reemplazar texto existen utilidades en el men Search o en la barra de herra-
mientas del mismo nombre. Desde Search>Find, o el botn correspondiente, se llama a un
cuadro de dilogo con opciones de bsqueda. Son las siguientes:
Opcin Descripcin

Find What Cadena de t ext o que se l ocal i zar .
Search Current selection Busca sl o en el t ext o sel ecci onado.
Search Current file Busca en t odo el ar chi vo de l a vent ana act ual .
Search Find in project Busca en l os ar chi vos del pr oyect o especi f i cado.
Search Find in files Busca en t odos l os ar chi vos de l a car pet a
especi f i cada. Se puede i ndi car que i ncl uya t am-
bi n l os
subdi r ect or i os.
Direction Se especi f i ca l a di r ecci n de bsqueda ( haci a
ar r i ba
o haci a abaj o) .
Match whole Word only Sl o se buscan pal abr as compl et as.
Match case Se t i enen en cuent a l as mayscul as y mi nscul as.
Mark instances Se aade una mar ca al t ext o l ocal i zado, par a
poder
vol ver a l .
Find Ej ecut a l a bsqueda, det eni ndose en el pr i mer
t ext o l ocal i zado. Medi ant e F3 se pueden i r l oca-
l i zando l os
si gui ent es t ext os que coi nci dan.
El texto localizado en cada bsqueda, se aade a una lista desplegable en la barra de herra-
mienta de Find. Cualquiera de los textos de la lista se puede seleccionar y efectuar una nueva
bsqueda desde un botn especfico a la derecha.
Para buscar y reemplazar un texto por otro, desde el men Search>Replace, o el botn co-
rrespondiente, se llama a un cuadro de dilogo similar al de bsqueda, que aade una casilla
para indicar el nuevo texto y dos botones para reemplazar los textos uno a uno o todos de una
vez.
Una ltima herramienta para el desplazamiento por el texto es la posibilidad de introducir has-
ta 32 marcas (Bookmarks) en diferentes posiciones, para despus localizarlas cmodamente.
Cada ventana tiene su propio gestor de marcas. Las opciones disponibles son:
Opcin Descripcin

Crear marca Par a si t uar una mar ca en l a posi ci n del cur sor se pul sa
el
bot n de her r ami ent a cor r espondi ent e o l as t ecl as ALT+.
( punt o) .
Pul sando ot r a vez, se el i mi na l a mar ca.
Mover el cursor
hasta la marca previa Se pul sa el bot n de her r ami ent a cor r espondi ent e o l as
t ecl as CTRL+, ( coma) . El cur sor sal t a hast a l a mar ca
pr evi a, en el or den en que se han cr eado, no el de posi -
ci n
en el ar chi vo.
Mover el cursor
hasta la marca
siguiente Se pul sa el bot n de her r ami ent a cor r espondi ent e o l as
t ecl as CTRL+. ( punt o) . El cur sor sal t a hast a l a mar ca
si gui ent e, en
el or den en que se han cr eado, no el de posi ci n en el
ar chi vo.
Seleccionar texto
hasta la marca previa Se pul san l as t ecl as CTRL+SHI FT+, ( coma) . El t ext o ent r e
posi ci n del cur sor y mar ca pr evi a queda sel ecci onado.
Seleccionar texto
hasta la marca
siguiente Se pul san l as t ecl as CTRL+SHI FT+. ( punt o) . El t ext o en-
t r e
posi ci n del cur sor y mar ca si gui ent e queda sel ecci ona-
do.
Eliminar marca Se si t a el cur sor en l a posi ci n de l a mar ca y se pul sa
el
mi smo bot n de her r ami ent a de cr eaci n o l as t ecl as
ALT+. ( punt o) .
Par a el i mi nar t odas l as mar cas de una vez, exi st e un
bot n de
her r ami ent a espec f i co.
TRECE.4.2.3. Formateado del cdigo fuente
Formatear un texto consiste en distribuirlo de una manera adecuada para su correcta legibili-
dad. En Visual Lisp se puede actuar de dos maneras:
Formatear todo el texto del archivo. Para ello se elige la opcin de men Tools>Format
AutoLISP in Editor, o el botn de herramienta correspondiente.
Formatear el texto seleccionado. Una vez iluminado el texto, se elige la opcin de men
Tools>Format AutoLISP in Selection, o el botn de herramienta correspondiente.
Durante el formateo se comprueba el balance de parntesis, mostrndose un mensaje de ad-
vertencia si se detecta algn error. Sin embargo, los errores no se corrigen; esto se hace me-
diante la herramienta de chequeo (Check) explicada en la siguiente seccin. Visual Lisp aplica
automticamente cuatro estilos de formateo, segn el tipo de expresiones que encuentre:
Formateo sencillo (Plane). Todos los elementos se sitan en la misma lnea de texto,
separados por simples espacios. Visual Lisp lo aplica cuando la expresin cabe en una
lnea (de acuerdo con el valor de Right text margin del cuadro de dilogo explicado ms
adelante), cuando no sobrepasa el margen de impresin (de acuerdo con el valor de
Maximun length for plane expression del cuadro de dilogo) y cuando no tiene comen-
tarios que se extienden ms de una lnea.
Formateo ancho (Wide). El primer argumento de cada funcin se mantiene en lnea, pe-
ro el resto de argumentos se sitan en nuevas lneas, debajo del primero. Visual Lisp lo
aplica cuando no se cumplen las condiciones del formateo sencillo y adems el primer
elemento es una funcin y su longitud no sobrepasa el valor de Maximun wide-style car
length del cuadro de dilogo.
Formateo estrecho (Narrow). Cada argumento, incluido el primero, se sita en nueva l-
nea debajo de la funcin, sangrados de acuerdo con el valor de Narrow style indenta-
tion del cuadro de dilogo. Visual Lisp lo aplica a determinadas funciones como PROGN.
Formateo en columna (Column). Todos los elementos se sitan en columna. Visual Lisp
lo aplica a funciones como COND.
El estilo de formateo se controla desde el men Tools>Environment Options>AutoLISP Format
options. Aparece un cuadro de dilogo con las siguientes opciones:
Opcin Descripcin

Right text margin Nmer o mxi mo de car act er es en una l nea.
Narrow style
indentation Car act er es de sangr ado par a el f or mat eo est r echo.
Maximun wide-style
car length Mxi mo sangr ado par a el f or mat eo ancho.
Single semicolon
comment indentation Posi ci n par a l os coment ar i os.
Closing paren style Cont r ol a l a si t uaci n de l os par nt esi s de ci er r e.
Insert tabs I nser t a t abul ador es en l os sangr ados.
Save formatting
options in source file I nser t a un coment ar i o al f i nal del ar chi vo, con l os
f or mat eos ef ect uados.
Insert form-closing
comment I nser t a un coment ar i o al f i nal de cada f unci n que con-
t i ene
ot r as ani dadas. Por ej empl o ; _end of DEFUN.
Form-closing comment
prefix Pr ef i j o par a l os coment ar i os de l a casi l l a ant er i or .
Por def ect o es end of .
More options Despl i ega nuevas opci ones ampl i ando el cuadr o de di l o-
go.
Preserve existing
line breaks Si al guna expr esi n se encuent r a par t i da al f i nal de l a
l nea,
se conser va est a par t i ci n al f or mat ear .
Split comments Si hay coment ar i os al f i nal de una l nea, se subdi vi den
par a
que queden aj ust ados al mar gen der echo, di st r i buyndose
en var i as
l neas.
Setting Case
for symbols Las f unci ones y s mbol os de Aut oLI SP ( Protected) y l as
de
usuar i o ( UnProtected) pueden ser conver t i das a mi nscu-
l as
( downcase) o mayscul as ( UPCASE) dur ant e el f or mat eo.
Longlist format style Cont r ol a el f or mat eo de l as expr esi ones con ms de ci nco
ar gument os.
Para que las opciones de formateo modificadas se mantengan en futuras sesiones de Visual
Lisp, se pueden guardar desde el men Tools>Save Settings.
TRECE.4.2.4. Chequeo de errores de sintaxis
Antes de proceder a la depuracin mediante la ejecucin del programa, desde el Editor de tex-
to se puede realizar un primer chequeo para detectar si el balance de parntesis es correcto.
Ya se ha visto en el apartado anterior que al formatear un texto, se detectan los parntesis no
balanceados. El formateador ofrece la posibilidad de aadir esos parntesis, pero lo hace gene-
ralmente al final de lnea o de expresin, sin permitir un control sobre la situacin adecuada de
los mismos.
Incluso antes de realizar ningn chequeo, el cdigo de colores del Editor de texto facilita una
primera deteccin de errores evidentes. Por ejemplo, si el color magenta se extiende ms de lo
previsto, es porque hay una cadena de texto sin comillas de cierre. Si un nombre de funcin
aparece en negro y no en azul, es porque se ha escrito mal y no se reconoce como funcin de
AutoLISP. Tambin despus de formatear, si aparecen una serie de expresiones en columna,
puede denotar la falta de algn parntesis de cierre y por ello se han considerado todas las
expresiones como argumentos de una funcin inicial no cerrada.
Se recuerda adems que existen teclas aceleradoras de desplazamiento de cursor, que ayudan
a evidenciar los anidamientos de parntesis.
Una vez detectados estos errores ms evidentes, el usuario puede utilizar la herramienta de
chequeo (Check) de Visual Lisp. Existen dos opciones:
Chequear todo el texto del archivo. Para ello se elige la opcin de men Tools>Check
Text in Editor, o el botn de herramienta correspondiente.
Chequear el texto seleccionado. Una vez iluminado el texto, se elige la opcin de men
Tools>Check Selection, o el botn de herramienta correspondiente.
Durante el chequeo, Visual Lisp examina todas las expresiones y detecta los errores de sintaxis
(no los de funcionamiento), escribindolos en una ventana denominada Build Output que abre
automticamente. Los errores se resaltan sobre un fondo de color ciano. Si se hace doble clic
sobre el mensaje de error, Visual Lisp vuelve al Editor y sita el cursor al comienzo de la ex-
presin que ha producido el error, iluminndola entera. El usuario corrige la expresin y vuelve
a ejecutar el chequeo hasta que dejan de detectarse errores.
La ltima operacin, una vez corregidos todos los errores de sintaxis, sera cargar y ejecutar el
programa para comprobar su correcto funcionamiento. Tambin aqu existen dos posibilidades:
Cargar todo el texto del archivo. Para ello se elige la opcin de men Tools>Load Text in
Editor, o el botn de herramienta correspondiente.
Cargar el texto seleccionado. Una vez iluminado el texto, se elige la opcin de men
Tools>Load Selection, o el botn de herramienta correspondiente.
El resultado es que se cargan en memoria las expresiones indicadas. Si contienen instrucciones
de ejecucin directa, stas se realizan. Si contienen definiciones de funcin, debe llamarse a
stas desde la Consola para ejecutarlas. Los errores de funcionamiento que se puedan detec-
tar, requieren de las herramientas de depuracin para su correccin. Esto se explica en la sec-
cin siguiente.
TRECE.5. DEPURACIN DE PROGRAMAS
Un procedimiento de depuracin sencillo de un programa se podra resumir en una serie de
etapas caractersticas:
1) Situar en el texto fuente, uno o ms puntos de ruptura (Breakpoints) en los sitios donde se
desea examinar en detalle la rutina.
2) Ejecutar todo o parte del programa. Este se detendr en el primer punto de ruptura.
3) Seleccionar las funciones o variables que se desea examinar y aadirlas a la lista de la ven-
tana de seguimiento Watch.
4) Ejecutar las expresiones paso a paso mediante las herramientas Step.
5) En la ventana Watch ir comprobando los valores que adoptan las funciones y variables se-
leccionadas.
6) Una vez comprobado el funcionamiento en detalle de esas determinadas zonas del progra-
ma, continuar con el resto o abortarlo mediante las herramientas de Continue, Quit y Reset.
El proceso de depuracin ms elemental, consiste pues en situar puntos de ruptura. El trabajo
con dichos puntos dispone de una serie de opciones:
Creacin y eliminacin. Cada punto se crea (o elimina si ya existiera) desde el men De-
bug>Toggle Breakpoint o desde el botn correspondiente. Existe una opcin Debug>Clear All
Breakpoints para eliminar todos los puntos de ruptura. Al ejecutar un programa, se detiene en
cada punto de ruptura y entra en la modalidad de Break Loop explicada ms adelante.
Desactivacin. Si un punto no va a ser usado en este momento, pero se desea mantenerlo
para usarlo ms adelante, se puede desactivar. Para ello, se sita el cursor sobre l, se pulsa
el botn derecho del ratn y, en el men flotante, se elige la opcin Breakpoint service. Apare-
ce un cuadro de dilogo con botones para desactivar, eliminar o mostrar el punto de ruptura.
Control de colores. El punto de ruptura se muestra con un rectngulo rojo para su fcil
identificacin. Si est desactivado, se muestra con un fondo gris. Estos colores se puede modi-
ficar desde el men Tools>Windows Attributes>Configure Current escogiendo :BPT-ACTIVE o
:BPT-DISABLE en la lista desplegable.
Gestin de todos los puntos. Todos los puntos de ruptura de todos los archivos abiertos se
pueden gestionar desde el men View>Breakpoints Window. Se muestra un cuadro de dilogo
con una lista de todos los puntos, ofreciendo el archivo fuente y la posicin (con signo ms los
activados y signo menos los desactivados). El botn Edit muestra el cuadro de Breakpoint ser-
vice ya explicado. El botn Show muestra la posicin del punto seleccionado en la lista, despla-
zando el cursor hasta l. El botn Delete elimina el punto seleccionado, y Delete All elimina
todos los puntos de la lista.
Los puntos de ruptura se pierden si se elimina el trozo de texto donde estn, si se edita el ar-
chivo fuente con otra aplicacin diferente de Visual Lisp, y tambin si se formatea el texto con
alguna de las herramientas de Visual Lisp. Si se modifica el texto fuente y se ejecuta despus
sin haber cargado de nuevo en memoria el archivo, aparece un mensaje de advertencia y no
se permite continuar con la depuracin. Es preciso cargar de nuevo el programa.
Para otros procesos de depuracin ms completos o especficos, Visual Lisp proporciona dos
modos de depuracin (Break Loop y Trace) que incluyen las siguientes herramientas:
Modo Break Loop. Detiene le ejecucin del programa en un punto de ruptura y permite
examinar paso a paso el valor de las funciones y variables.
Facilidad Trace Stack. Permite examinar las ltimas acciones del programa antes de dete-
nerse en un punto de ruptura o abortarse al surgir un error.
Modo Trace. Corresponde a la funcin de AutoLISP TRACE, que marca con atributos de ras-
treo las funciones definidas en el programa.
Ventana Watch. Proporciona en tiempo real los valores de funciones y variables.
Servicio de Smbolos. Proporciona asistencia para la depuracin de smbolos.
Inspector. Proporciona informacin detallada de un elemento, descendiendo al mximo nivel
de anidacin si as se solicita.
TRECE.5.1. Modo de depuracin Break Loop
La estructura bsica en los programas de AutoLISP son las expresiones. La ejecucin normal
de un programa consiste en leer, evaluar y escribir resultados a partir de funciones y variables.
Esto es lo que se conoce como nivel primario de ejecucin o Top Level. Cuando desde Visual
Lisp se interrumpe la ejecucin de un programa mediante alguna de las herramientas disponi-
bles, se entra en un ciclo de ruptura o break loop . El control pasa a la Consola y el prompt
muestra el nivel de anidacin del ciclo de ruptura, por ejemplo:
_1_$
Desde un nivel de ruptura se puede iniciar otro anidado y as sucesivamente. Mientras se per-
manece en esta modalidad, el usuario puede examinar y modificar los valores de variables
dentro de la porcin de programa involucrada en la ruptura, para analizar su comportamiento
(por ejemplo mediante funciones SETQ introducidas desde la Consola). Pero no se puede modi-
ficar el texto fuente ni pasar a AutoCAD. Cuando finaliza el examen, una serie de herramien-
tas permiten salir al nivel superior de ruptura o directamente al nivel primario, o bien conti-
nuar la ejecucin del resto del programa. Slo cuando la ruptura se debe a un error, no se
permite continuar la ejecucin del mismo y se debe salir forzosamente del ciclo de ruptura.
Las opciones disponibles para especificar el tipo de ruptura son:
Opcin Descripcin

Toggle Breakpoint Consi st e en si t uar manual ment e punt os de r upt ur a
en l as expr esi ones deseadas del pr ogr ama, como
ya se ha
expl i cado.
Stop Once Se act i va desde el men Debug>Stop Once y hace
que Vi sual Li sp r ompa i ncondi ci onal ment e l a ej e-
cuci n de un
pr ogr ama al encont r ar l a pr i mer a expr esi n depu-
r abl e.
Break on Function Entry Consi st e en mar car expr esament e f unci ones par a
su
depur aci n. Vi sual Li sp pr ovocar una r upt ur a
cada vez que
se encuent r e con esas f unci ones dur ant e l a ej e-
cuci n de un
pr ogr ama. Las mar cas de depur aci n se col ocan,
t r as
sel ecci onar una f unci n o var i abl e en el Edi t or ,
desde el
men View>Symbol Service act i vando l a casi l l a
Trace.
Modo de depuracin Top Level Hace que l as r upt ur as par a depur aci n se pr oduz-
can
dur ant e l a pr opi a car ga del ar chi vo de pr ogr ama,
ant es de
eval uar l as f unci ones de ani dami ent o ms ext e-
r i or ( como
DEFUN) . Se act i va desde el men
Tools>Environment
Options>General Options, desde l a pest aa Diag-
nostic,
desact i vando l a casilla Do not debug top-level.
Modo Animate Ej ecut a el pr ogr ama paso a paso, of r eci endo en
l a
vent ana Wat ch l os r esul t ados de t odas l as f un-
ci ones y
var i abl es segn se pr oducen. Se act i va desde el
men
Debug>Animate. La vel oci dad de ej ecuci n paso a
paso se
cont r ol a desde el men Tools>Environment Op-
tions>General
Options, desde l a pest aa Diagnostic, i ndi cando
el val or en
mi l i segundos en l a casi l l a Animation delay.
Break on Error Se act i va desde el men Debug>Break On Error y

hace que Vi sual Li sp ent r e aut omt i cament e en el modo Break Loop en cuant o se
pr oduce un er r or , si n necesi dad de haber cr eado punt os de r upt ur a.
Mientras se permanece dentro de un ciclo de ruptura, la ejecucin del programa se controla
mediante una serie de opciones o botones. Son:
Opcin Descripcin

Continue Cont i na l a ej ecuci n del pr ogr ama hast a el
si gui ent e punt o de r upt ur a, o hast a el f i nal si no hay
ms.
Quit Sal e del act ual ni vel de r upt ur a hast a el i nmedi at o su-
per i or .
Reset Sal e di r ect ament e al ni vel pr i mar i o ( Top Level) .
Step into Eval a l a si gui ent e expr esi n ani dada en el punt o de
r upt ur a y, sucesi vament e, l as si gui ent es expr esi ones
i ncl uyendo l as
ani dadas, una a una.
Step over Eval a l as si gui ent es expr esi ones del mi smo ni vel de
ani dami ent o que el punt o de r upt ur a, si n pasar por l as
i nt er i or es
que pudi er an t ener ani dadas.
Step out Eval a de gol pe t odo el bl oque desde el punt o de
r upt ur a hast a el f i nal de l a f unci n en cuyo i nt er i or se
ha
pr oduci do.
Last Break I l umi na el l t i mo t r ozo de t ext o f uent e eval uado
dur ant e el modo de r upt ur a.
Stopped I nf or ma, medi ant e una l nea r oj a en el pr opi o bot n,
si l a l t i ma eval uaci n ha f i nal i zado en un par nt esi s
de aper t ur a
o de ci er r e.
TRECE.5.2. Modo de depuracin Trace
Visual Lisp dispone de una herramienta de depuracin denominada Trace Stack. Consiste en
una pila donde va almacenando todas las evaluaciones efectuadas cuando se ejecuta una fun-
cin o una expresin desde la Consola. De esta manera, cuando ocurre una interrupcin debi-
do a un error o por haberse encontrado un punto de ruptura, el historial de lo ocurrido en el
programa antes de la interrupcin se encuentra a disposicin del usuario en una serie de regis-
tros en el Stack. Estos pueden ser de cinco tipos:
Llamada de funcin. Se muestra el nombre y los valores de cada argumento.
Origen de los registros. Palabra clave que indica el origen de los registros de Trace Stack.
Se sita al principio o final de la lista de registros y puede ser :TOP-COMMAND, :USER-INPUT,
:BREAK-POINT, :ERROR-BREAK, etctera.
Registro primario (Top). Indica una accin iniciada expresamente en la Consola en el nivel
Top o durante la carga de un programa o texto seleccionado.
Registro Lambda. Cuando se trata de la llamada a una funcin LAMBDA.
Funciones especiales. Las llamadas a FOREACH y REPEAT no muestran los valores de los
argumentos.
Para examinar la ventana de Trace Stack se elige el men View>Trace Stack o el botn co-
rrespondiente. Esta ventana tiene dos botones de herramienta propios: actualizar el contenido
y copiar la lista de elementos a la ventana de Trace (que ofrece as un historial de todas las
veces que se ha utilizado el Trace Stack). Adems, una vez seleccionado un elemento, existe
un men flotante accesible desde el botn derecho del ratn con las siguientes opciones:
Opcin de men Descripcin

Inspect I nvoca el cuadr o de di l ogo de i nspecci n ( Ins-
pector) .
Print Escr i be el el ement o en l a Consol a.
Function Symbol Si el el ement o es una l l amada de f unci n, mues-
t r a
el cuadr o de di l ogo de Symbol Service.
Copy Copi a el val or del el ement o a l a var i abl e de
si st ema *obj *.
Local Variables Si el el ement o es una l l amada de f unci n, mues-
t r a
el cuadr o de di l ogo de Frame Binding con l os
val or es de
var i abl es en l a l l amada a l a f unci n. Est a ven-
t ana t i ene su
pr opi o men f l ot ant e, con opci ones si mi l ar es.
Source Position Si t a el cur sor en l a posi ci n del el ement o que
ha
or i gi nado l a depur aci n ( por ej empl o, donde est
el punt o
de r upt ur a o donde se ha pr oduci do el er r or ) en
el t ext o
f uent e, i l umi nando st e.
Call point Source Si t a el cur sor en l a posi ci n del el ement o en
el t ext o
f uent e.
Adems de la ventana de Trace Stack, existe una ventana de Trace donde se muestran todas
las llamadas a las funciones que han sido marcadas con un atributo de rastreo.
TRECE.5.3. Ventana de seguimiento Watch
Consiste en una ventana a la que se aaden las funciones o variables que se desea someter a
seguimiento. Esto se hace situando el cursor sobre el nombre de la funcin o variable (en la
ventana del Editor, en la Consola, etc.) y escogiendo la opcin Add Watch del men desplega-
ble Debug o del men flotante (botn derecho del ratn), y tambin mediante el botn corres-
pondiente de barra de herramientas.
En la ventana Watch se ofrece en tiempo real los valores que van adoptando todas las funcio-
nes y variables, durante la ejecucin o depuracin del programa. Esta ventana tiene cuatro
botones de herramienta propios: aadir otro elemento a la lista, eliminar todos los elementos
para empezar una lista nueva, ordenar alfabticamente la lista y copiar la lista a la ventana de
Trace. Adems, cuando hay un elemento seleccionado en la lista, el botn derecho del ratn
despliega un men flotante especfico, con las opciones:
Opcin Descripcin

Inspect value I nvoca el cuadr o de di l ogo de i nspecci n ( Inspector) .
Copy value Copi a el val or del el ement o a l a var i abl e de si st ema
*obj *.
Print value Escr i be el val or del el ement o en l a Consol a, pr ecedi do
de ( QUOTE) .
Symbol... Ll ama al cuadr o de di l ogo de Symbol Service.
Apropos... Ll ama al cuadr o de di l ogo de Apropos.
Remove from Watch El i mi na el el ement o de l a l i st a.
TRECE.5.4. Cuadro de dilogo de servicio de
smbolos Symbol Service
Proporciona una herramienta para facilitar la depuracin de smbolos como nombres de funcio-
nes y variables. Se accede situando el cursor sobre un nombre o iluminando ste en el Editor,
y escogiendo el men View>Symbol Service o el botn correspondiente. Tambin se accede
desde opciones del men flotante contextual en las ventanas de Trace Stack o de Watch, como
ya se ha explicado. Este cuadro tiene cuatro botones de herramienta propios: aadir el smbolo
a la ventana Watch, llamar al cuadro de dilogo de Inspect, mostrar la definicin del smbolo y
una ayuda en lnea.
Sus opciones son:
Opcin Descripcin

Name Nombr e del s mbol o que depur ar .
Value Val or del s mbol o o su cadena de def i ni ci n i nt er na.
Trace Mar ca una f unci n de usuar i o con un at r i but o de r ast r eo
( Tr) . Dur ant e l a ej ecuci n del pr ogr ama, t odas l as l l a-
madas a est a
f unci n se most r ar n en l a vent ana de Trace.
Debug on Entry Or i gi na un punt o de r upt ur a en cada l l amada a l a f unci n
( at r i but o De)
Protect Assign Asi gna una pr ot ecci n al s mbol o par a que no pueda ser
sobr eescr i t o ( medi ant e SETQ o DEFUN, por ej empl o) . Todas
l as
f unci ones y s mbol os pr opi os de Aut oLI SP est n pr ot egi -
dos ( at r i but o
Pa) .
Export to ACAD Expor t a el s mbol o a Aut oCAD, que l o t r at ar como una
subr ut i na ext er na ( at r i but o Ea) .
TRECE.5.5. Ventana de inspeccin de objetos
I nspect
Permite examinar y modificar los objetos de AutoLISP (listas, nmeros, cadenas, variables...) y
AutoCAD (entidades de dibujo, conjuntos de seleccin...). Se accede situando el cursor sobre
un nombre, o iluminando ste, y escogiendo el men View>Inspect o el botn correspondien-
te. Tambin se accede desde opciones del men flotante contextual en las ventanas de Trace
Stack o de Watch, o desde un botn de otros cuadros como Simbol Service, cosa que ya se ha
explicado. Si no se selecciona ningn smbolo, se solicita el nombre de ste ofreciendo una
lista desplegable con los 15 ltimos smbolos inspeccionados.
Cada objeto inspeccionado abre una nueva ventana de inspeccin. Desde el men Win-
dow>Close Windows>Inspectors se cierran de una vez todas las ventanas de inspeccin. La
ventana de inspeccin de objetos ofrece tres elementos:
Caption. Es el ttulo del propio cuadro, donde se ofrece el tipo del objeto que se est inspec-
cionando.
Object line. Muestra una representacin del objeto en caracteres imprimibles. Existe un
men contextual especfico (botn derecho del ratn) con opciones estndar.
Element list. Lista de elementos componentes del objeto. Cada componente presenta el
nombre (entre corchetes cuando puede ser modificado y entre llaves cuando no) y el valor.
Cada elemento de la lista puede ser a su vez inspeccionado, desde un men contextual (botn
derecho del ratn) que contiene una serie de opciones estndar.
Los tipos de objetos y los valores se ofrecen en la siguiente tabla:
Tipo de objeto Descripcin

I NT Nmer o ent er o. La l i st a de component es muest r a
r epr esent aci ones del nmer o en bi nar i o, oct al , hexadeci -
mal , et c.
REAL Nmer o r eal . La l i st a de component es se muest r a vac a.
STRI NG Cadena de t ext o. La l i st a de component es muest r a l os
car act er es. Cada uno puede exami nar se como un ent er o a
par t i r de su cdi go ASCI I .
SYMBOL S mbol o. La l i st a muest r a el val or , el nombr e i mpr i mi bl e
y
l os at r i but os ( Tr, Pa, De o Ea) , expl i cados en Symbol
Service.
LI ST Li st a de el ement os. Se muest r an t odos l os el ement os. Si
l a
l i st a no es pr opi a de Aut oLI SP, se muest r a el r esul t ado
de CAR y
CDR apl i cados a el l a
FI LE Descr i pt or de ar chi vo. Se muest r a el nombr e, at r i but os
de
aper t ur a, ID del ar chi vo, posi ci n en el ar chi vo y seal
de f i nal
EOF.
SUBR, EXSUBR y USUBR Funci ones de Aut oLI SP ext er nas y de usuar i o. Se muest r a
el nombr e y l os ar gument os.
ENAME Nombr e de ent i dad de di buj o. Se muest r a l a l i st a de da-
t os
compl et a.
PI CKSET Conj unt o de sel ecci n. Se muest r a l a l i st a de nombr es de
t odos l os obj et os del conj unt o.
Para examinar la lista de datos de un objeto de dibujo de AutoCAD, se puede llamar a la ven-
tana de Inspeccin para una variable que contenga un nombre de entidad. La lista de compo-
nentes de Inspect mostrar todos los datos de la entidad, siempre que desde el men
Tools>Environment Options>General Options, en la pestaa Diagnostic, est activada la casilla
Inspect drawing objects verbosely.
Para abrir una ventana de inspeccin de todos los objetos del dibujo actual de AutoCAD, se
puede hacer desde el men View>Browse Drawing Database. Existen opciones para examinar
todas las entidades de dibujo, tablas de smbolos, definiciones de bloques, objetos designados
o datos extendidos. En cada caso se mostrar una lista con todos los objetos encontrados. A
partir de cada elemento de la lista, mediante el men contextual (botn derecho del ratn) se
pueden inspeccionar sus componentes (por ejemplo los vrtices de una polilnea o entidades
de un bloque) y as sucesivamente.
TRECE.6. CONSTRUCCIN Y GESTIN DE APLI-
CA-CIONES
Los programas e instrucciones de AutoLISP son sometidos a una compilacin inmediata cuando
se ejecutan desde Visual Lisp. Se trata de un mecanismo semejante al intrprete de expresio-
nes que tiene AutoCAD. Sin embargo, Visual Lisp proporciona una importante herramienta de
compilacin de archivos, que permite encriptar y proteger el programa, y adems ejecutarlo
desde fuera del entorno de Visual Lisp. Los archivos de programas compilados tienen la exten-
sin . FAS.
Cuando el usuario disea una aplicacin compleja, con varios archivos diferentes de programas
que funcionan en paralelo, Visual Lisp introduce el concepto de proyecto, que se estudiar un
poco ms adelante.
TRECE.6.1. Compilacin de archivos de pro-
grama
La compilacin de un archivo de AutoLISP se hace mediante un comando Vi sual Li sp-
COMPI LE, desde la Consola. La sintaxis es:
( Vi sual Li sp- COMPI LE modo " Archivo_Fuente" [ " Archivo_Salida" ] )
Donde modo se debe indicar precedido de apstrofo (QUOTE). El archivo fuente es el de Auto-
LISP y el de salida el compilado que obtener. Si no se indica ste ltimo, su nombre ser el
mismo que el del fuente. Los modos son los de la siguiente tabla:
Modo Descripcin

st Modo est ndar . Pr oduce el ar chi vo de sal i da ms pequeo. Es el
ms
i ndi cado par a pr ogr amas que ocupan un sol o ar chi vo.
l sm Modo opt i mi zado. Con compact aci n de nombr es de f unci ones y
var i abl es, per o si n v ncul os.
l sa Modo opt i mi zado. Con v ncul os ent r e f unci ones.
Durante la compilacin la ventana de salida de aplicaciones Build Output, ofrece las incidencias
y errores encontrados. Si se produce alguno, un doble clic sobre el mensaje sita el cursor
automticamente en el Editor, sobre el punto del cdigo fuente que ha originado el error.
Como ya se ha dicho, un archivo individual compilado tiene la extensin . FAS. Estos archivos
se cargan y ejecutan desde Visual Lisp como los no compilados, desde el men File>Load File
o mediante LOAD. Es posible compilar varios archivos . FAS y . DCL que formen parte de una
misma aplicacin, en un archivo ejecutable . VLX. Todos estos archivos necesitan el Run Time
System (RTS) de Visual Lisp para su ejecucin. Por lo tanto, para ser utilizados desde Auto-
CAD, deber cargarse la aplicacin VLRTS. ARX o VLARTS. ARX (sta ltima con metodologa
ActiveX). Por ltimo, es posible incluir todos los archivos de una aplicacin en un mdulo ARX.
Este se carga desde AutoCAD como cualquier otra aplicacin ARX, y por lo tanto no necesita
del RTS de Visual Lisp para su ejecucin.
Cuando un programa en AutoLISP llama a otras subrutinas externas definidas mediante aplica-
ciones ADS o ARX, debe crearse un archivo de definicin de funciones externas . XDF (gene-
ralmente con el mismo nombre que la aplicacin y en el mismo directorio, aunque tambin
pueden definirse archivos genricos XLOAD. XDF y ARXLOAD. XDF en al carpeta de Visual Lisp).
Esto se puede hacer proporcionando el nombre de la aplicacin externa, con el comando ex-
terno MAKE- XDF que debe ejecutarse desde AutoCAD, tras cargar el archivo MAKE- XDF. LSP. El
archivo . XDF creado contiene el nmero de versin de AutoCAD, el nombre de la aplicacin
externa y los nombres de subrutinas externas que contiene de dicha aplicacin.
Los pasos para ejecutar desde AutoCAD un archivo compilado son:
1) Cargar el RTS de Visual Lisp. Desde AutoCAD se carga la aplicacin VLRTS. ARX o
VLARTS. ARX.
2) Inicializar el RTS. Se ejecuta la funcin ( VLRTS- I NI T) o ( VLARTS- I NI T) .
3) Cargar el archivo compilado. Se hace mediante el comando externo VL- LOAD. Permite car-
gar archivos . LSP, . FAS y . VLX. Todas las funciones de los archivos cargados, que hayan sido
exportadas a AutoCAD, podrn ser utilizadas a partir de ese momento como nativas de Auto-
CAD. Si no han sido exportadas hay que utilizar el comando externo VL- EVAL.
TRECE.6.2. Creacin de mdulos de aplicacin
Un mdulo ejecutable ARX contiene todos los archivos con programas y adems el RTS de Vi-
sual Lisp. Esto permite ejecutarlo desde AutoCAD sin necesidad de cargar e inicializar el RTS.
Para crear mdulos, Visual Lisp dispone de un completo asistente en el men File>Make Appli-
cation. La opcin New Application Wizard llama a un asistente para crear un archivo de des-
cripcin . MKP que despus se usar al construir la aplicacin (tanto ARX como VLX). Este asis-
tente gua paso a paso en la creacin del archivo de descripcin. Posteriormente, la opcin
Build Application from Make File crear la aplicacin (ARX o VLX) utilizando el archivo de des-
cripcin. Hay una tercera opcin Existing Application Wizard para modificar un archivo de des-
cripcin existente y despus volver a construir la aplicacin modificada.
TRECE.6.3. Gestin de proyectos
El concepto de proyecto en Visual Lisp engloba bsicamente una serie de archivos fuente y una
serie de archivos con instrucciones sobre su compilacin. Todos los tipos de archivos se resu-
men en la siguiente tabla:
Tipo de archivo (extensin) Descripcin

. DSK Dat os del ent or no de Vi sual Li sp y especi f i ca-
ci ones
de sus vent anas.
. FAS Ar chi vos de Aut oLI SP compi l ados en Vi sual Li sp.
. LSP Ar chi vos f uent e de Aut oLI SP.
. DCL Ar chi vos f uent e de cuadr os de di l ogo en DCL.
. OB Cdi gos de compi l aci n, usado i nt er nament e por
Vi sual Li sp.
. PDB Base de dat os de pr oyect os, usado i nt er nament e
por Vi sual
Li sp.
. PRJ Def i ni ci n de pr oyect o, con t odos l os ar chi vos
que
i ncl uye y ci er t os par met r os y r egl as par a l a
compi l aci n f i nal .
. _XX Copi as de segur i dad de l os ar chi vos f uent e, como
. _LS ( par a ar chi vos . LSP) o . _DC ( par a ar chi vos
. DCL) , por ej empl o.
. ARX y . VLX Ar chi vos r esul t ant es de l a compi l aci n.
. C , . CPP, . CCH, . HPP, . HH Ar chi vos f uent e de cdi gos de l os l enguaj es.
. MKP Descr i be el cont eni do de l a apl i caci n.
. SQL I nst r ucci ones SQL; son r econoci das desde el Edi -
t or de
Vi sual Li sp.
. XDF Li st a de f unci ones ext er nas par a ser l l amadas
desde
apl i caci ones.
. XDV Li st a de f unci ones de i ni ci al i zaci n gener adas
dur ant e l a compi l aci n.
Las opciones para crear y gestionar proyectos (que son archivos . PRJ ) se encuentran en el
men Project. Al crear un nuevo proyecto, se muestra el cuadro de dilogo de propiedades
para especificar los archivos que se quieren incluir y el orden de los mismos, adems de una
serie de parmetros de creacin.
Al cargar un proyecto existente, se abre una ventana con los nombres de todos los archivos
incluidos y una serie de botones de herramienta para mostrar el cuadro de dilogo de propie-
dades, cargar los archivos compilados . FAS del proyecto, cargar los archivos fuente no compi-
lados, compilar de nuevo los archivos que han sido modificados y compilar de nuevo todos los
archivos del proyecto (modificados o no). Adems, existe un men contextual (botn derecho
del ratn) con opciones para actuar sobre cada elemento de la lista. Es posible seleccionar va-
rios elementos a la vez.
TRECE.7. Utilizacin de objetos ActiveX
ActiveX Automation es un mecanismo por el que las aplicaciones de Windows que lo integran,
entre ellas AutoCAD, pueden ser gestionadas desde lenguajes de programacin orientados a
objeto como C++ o Visual Basic. En el MDULO DOCE de este curso se dan ms detalles so-
bre la estructuracin ActiveX de los objetos de AutoCAD, las propiedades de cada uno y los
mtodos o eventos que pueden realizar. Aqu simplemente se muestran los pasos para Visual
Lisp a la hora de establecer la conexin del entorno con los objetos por medio de ActiveX Au-
tomation. Estos pasos nos sonarn a los que utilizbamos con el VBA de AutoCAD:
Primero hemos de establecer una conexin con la aplicacin AutoCAD para que sus objetos
sean utilizables desde ActiveX. Esto se hace desde Visual Lisp mediante la funcin VLAX- GET-
ACAD- OBJ ECT. Por ejemplo:
( SETQ AcadObj ( VLAX- GET- ACAD- OBJ ECT) )
La variable AcadObj contiene ahora la conexin ActiveX de la aplicacin AutoCAD. Este tipo de
datos se denomina VLA- OBJ ECT.
Segundo tenemos que establecer la siguiente conexin en la jerarqua de objetos de Auto-
CAD, que es el documento de dibujo activo:
( SETQ AcadDoc ( VLA- GET- ACTI VEDOCUMENT AcadObj ) )
Tercero establecer la conexin al Espacio (Modelo o Papel) de AutoCAD (en el ejemplo Espacio
Modelo):
( SETQ AcadEsp ( VLA- GET- MODELSPACE AcadDoc) )
4 Establecer la ltima conexin al objeto de dibujo deseado (en este caso un crculo):
( SETQ Obj Ci r ( VLA- ADDCI RCLE AcadEsp cen r ad) )
TRECE.7.1. Funciones Visual Lisp
Visual Lisp proporciona una serie de funciones propias (empiezan todas por VL) para trabajar
con objetos ActiveX. Muchas de ellas tienen un nombre y sintaxis similar a las funciones ho-
mnimas de Visual Basic explicadas a lo largo del MDULO DOCE. Aqu se ofrece una tabla
resumen de dichas funciones:
Sintaxis de funcin Descripcin

( vl - acad- def un funcin) Def i ne una f unci n de Vi sual Li sp como
f unci n
nat i va de Aut oLI SP.
( vl - acad- undef un funcin) Deshace l a def i ni ci n de una f unci n de
Vi sual Li sp
como f unci n nat i va de Aut oLI SP.
( vl - consp lista) Det er mi na si una l i st a exi st e o es ni l .
( vl - di r ect or y- f i l es [ dir patrn
subdir] ) Devuel ve l os ar chi vos del di r ect or i o
i ndi cado o del
act ual . Admi t e car act er es comod n en
patrn. El
modo subdir puede ser : - 1 = sl o subdi -
r ect or i os; 0
= ar chi vos y subdi r i r ect or i os; 1 = sl o
ar chi vos.
( vl - ever y condicin lista1
[ lista2. . . ] ) Exami na si l a condi ci n se cumpl e par a
cada l i st a
de ar gument os.
( vl - exe- f i l ename) Devuel ve el cami no compl et o del ar chi vo
ej ecut abl e
act ual en Vi sual Li sp.
( vl - f i l e- copy fuente destino [ add] ) Copi a un ar chi vo sobr e ot r o, sobr escr i -
bi endo o
aadi endo ( si add es di f er ent e de ni l ) .
( vl - f i l e- del et e archivo) Bor r a un ar chi vo.
( vl - f i l e- di r ect or y- p nombre) Det er mi na si nombre es un di r ect or i o.
( vl - f i l e- r ename antiguo nuevo) Renombr a un ar chi vo de nombr e antiguo
cambi ndol o a nuevo.
( vl - f i l e- si ze archivo) Devuel ve el t amao en byt es de un ar chi -
vo.
( vl - f i l e- syst i me archivo) Devuel ve l a hor a de l a l t i ma modi f i ca-
ci n de
archivo.
( vl - f i l ename- base archivo) Devuel ve el nombr e del ar chi vo i ndi cado,
el i mi nando
el cami no.
( vl - f i l ename- di r ect or y archivo) Devuel ve el cami no compl et o del ar chi vo
i ndi cado,
el i mi nando nombr e y ext ensi n.
( vl - f i l ename- ext ensi on archivo) Devuel ve l a ext ensi n del ar chi vo i ndi -
cado,
el i mi nando cami no y nombr e.
( vl - f i l ename- mkt emp [ patrn
directorio ext] ) Cal cul a nombr e de ar chi vo t empor al i ndi -
cando
pat r n, di r ect or i o y ext ensi n ( si no,
es $VL. . . ) .
( vl - i ni t ) Equi val e a i ni ci al i zar Aut oLI SP cuando
se abr e o se
i ni ci a un di buj o en Aut oCAD.
( vl - l i st * objeto1 [ objeto2. . . ] ) Const r uye una l i st a con l os obj et os i n-
di cados.
( vl - l i st - >st r i ng lista_ascii) Const r uye una cadena de t ext o a par t i r
de una l i st a
de ent er os, t omndol os como val or es AS-
CI I .
( vl - l i st - l engt h lista) Devuel ve l a l ongi t ud de una l i st a.
( vl - member - i f condicin lista) Det er mi na si l a condi ci n se cumpl e par a
uno de l os
el ement os de l a l i st a.
( vl - member - i f - not condicin lista) Det er mi na si l a condi ci n no se cumpl e
par a uno de
l os el ement os de l a l i st a.
( vl - posi t i on smbolo lista) Devuel ve el ndi ce de posi ci n del el e-
ment o
s mbol o en l a l i st a.
( vl - pr i n1- t o- st r i ng objeto) Devuel ve l a r epr esent aci n i mpr esa de un
obj et o
Aut oLI SP t al como har a PRI N1.
( vl - pr i nc- t o- st r i ng objeto) Devuel ve l a r epr esent aci n i mpr esa de un
obj et o
Aut oLI SP t al como har a PRI NC.
( vl - r egi st r y- del et e clave [ nombre] ) Bor r a l a cl ave o nombr e de val or i ndi ca-
dos del
r egi st r o de Wi ndows.
( vl - r egi st r y- descendent s clave
[ nombre] ) Devuel ve una l i st a de descendi ent es de
l a cl ave o
val or i ndi cados en el r egi st r o de Wi n-
dows.
( vl - r egi st r y- r ead clave [ nombre] ) Devuel ve l os dat os al macenados en el
r egi st r o de
Wi ndows par a l a cl ave o val or i ndi cados.
( vl - r egi st r y- wr i t e clave [ nombre
datos] ) Cr ea una cl ave en el r egi st r o de Wi ndows
con el
nombr e y dat os i ndi cados.
( vl - r emove elemento lista) El i mi na el el ement o i ndi cado de l a l i s-
t a.
( vl - r emove- i f condicin lista) Devuel ve una l i st a con t odos l os el emen-
t os de l a
l i st a i ndi cada que f al l an l a condi ci n.
( vl - r emove- i f - not condicin lista) Devuel ve una l i st a con t odos l os el emen-
t os de l a
l i st a i ndi cada que no f al l an l a condi -
ci n.
( vl - some funcin lista1
[ lista2. . . ] ) Exami na si una de l as l i st as de ar gumen-
t os no hace
ni l l a f unci n.
( vl - sor t lista funcin_orden) Devuel ve una l i st a con l os el ement os de
l a l i st a
i ndi cada or denados segn l a f unci n de
or den.
( vl - sor t - i lista funcin_orden) Devuel ve una l i st a con l os ndi ces de
posi ci n de
l os el ement os par a que est uvi er an or de-
nados.
( vl - st r i ng- >l i st cadena) Convi er t e l a cadena de t ext o en una l i s-
t a de
nmer os con l os cdi gos ASCI I de cada
car ct er .
( vl - st r i ng- el t cadena posicin) Devuel ve el cdi go ASCI I del car ct er
que ocupa l a
posi ci n i ndi cada en l a cadena de t ext o.
( vl - st r i ng- l ef t - t r i m lista_car
cadena) El i mi na de l a cadena de t ext o l os car ac-
t er es
especi f i cados en l a l i st a.
( vl - st r i ng- mi smat ch cad1 cad2 [ pos1
pos2 may] ) Devuel ve l a l ongi t ud del mayor t r ozo
comn ent r e
dos t ext os a par t i r de l as posi ci ones
i ndi cadas,
pudi endo especi f i car si se t i enen en
cuent a l as
mayscul as.
( vl - st r i ng- posi t i on ascii cad
[ inicio final] ) Exami na si el car ct er cuyo ASCI I se
i ndi ca est en
l a cadena ent r e dos posi ci ones dadas.
( vl - st r i ng- r i ght - t r i m lista_car
cadena) El i mi na de l a cadena l os car act er es i n-
di cados en l a
l i st a desde el f i nal de l a cadena.
( vl - st r i ng- sear ch patrn cadena
[ inicio] ) Local i za el pat r n en l a cadena i ndi cada
a par t i r
de una posi ci n de i ni ci o.
( vl - st r i ng- subst nuevo antiguo cad
[ inicio] ) Sust i t uye el t ext o ant i guo por el nuevo
en l a
cadena i ndi cada a par t i r de una posi ci n
dada.
( vl - st r i ng- t r ansl at e ls_fuente
ls_dest cad) Reempl aza cada car ct er de una l i st a
f uent e por l os
de una l i st a dest i no en l a cadena.
( vl - st r i ng- t r i m lista_car cadena) El i mi na de l a cadena l os car act er es i n-
di cados en l a
l i st a, desde el pr i nci pi o y f i nal de l a
cadena.
( vl - symbol - name smbolo) Devuel ve una cadena con el nombr e del
s mbol o.
( vl - symbol - val ue smbolo) Devuel ve el val or act ual de un s mbol o.
( vl - symbol p objeto) Exami na si el obj et o es un s mbol o.
( vl ax- 3D- poi nt lista_pto |
x y [ z] ) Cr ea un punt o 3D de Aut oCAD pudi endo
especi f i car se una l i st a de punt o o l as
coor denadas.
( vl ax- add- cmd comando funcin
[ local att] ) Cr ea un comando a par t i r de una f unci n
Aut oLI SP,
pudi endo t ener un nombr e l ocal y at r i bu-
t os.
( vl ax- cur ve- get Ar ea obj_curva) Cal cul a el r ea i nt er i or del obj et o de
cur va.
( vl ax- cur ve- get Di st At Par am
obj_curva pto) Cal cul a l a l ongi t ud de l a cur va a par t i r
del punt o
i ndi cado hast a el f i nal .
( vl ax- cur ve- get Di st At Poi nt
obj_curva pto) Cal cul a l a l ongi t ud de l a cur va desde el
i ni ci o
hast a el punt o i ndi cado.
( vl ax- cur ve- get EndPar amobj_curva) Devuel ve el par met r o de punt o f i nal de
l a cur va.
( vl ax- cur ve- get EndPoi nt obj_curva) Devuel ve el punt o f i nal de l a cur va en
coor denadas
de SCU.
( vl ax- cur ve- get Par amAt Di st obj_curva
par) Cal cul a l a l ongi t ud de l a cur va ent r e el
i ni ci o y
el punt o con el par met r o i ndi cado.
( vl ax- cur ve- get Par amAt Poi nt obj_curva
pto) Devuel ve el par met r o de l a cur va en el
punt o
i ndi cado.
( vl ax- cur ve- get Poi nt At Di st obj_curva
dis) Devuel ve el punt o si t uado a l a di st anci a
i ndi cada,
medi da a l o l ar go de l a cur va desde el
i ni ci o.
( vl ax- cur ve- get Poi nt At Par amobj_curva
par) Devuel ve el punt o de l a cur va que t i ene
el
par met r o i ndi cado.
( vl ax- cur ve- get St ar t Par amobj_curva) Devuel ve el pr i mer par met r o de l a cur -
va.
( vl ax- cur ve- get St ar t Poi nt obj_curva) Devuel ve el punt o i ni ci al de l a cur va en
coor denadas de SCU.
( vl ax- cur ve- i sCl osed obj_curva) Det er mi na si l a cur va es cer r ada.
( vl ax- cur ve- i sPer i odi c obj_curva) Det er mi na si l a cur va es per i di ca, o
bi en pr esent a
un r ango i nf i ni t o en ambas di r ecci ones.
( vl ax- cur ve- i sPl anar obj_curva) Det er mi na si l a cur va es pl ana.
( vl ax- cur ve- get Cl osest Poi nt To
obj_curva pto [ prolongar] ) Devuel ve el punt o ms cer cano de l a cur -
va al punt o
especi f i cado, pudi ndose i ndi car que se
t enga
en cuent a l a pr ol ongaci n de l a cur va
por sus
ext r emos.
( vl ax- cur ve- get Cl osest Poi nt ToPr oj ect i on
obj_curva pto vector [ prolongar] ) Devuel ve el punt o ms cer cano de l a cur -
va al punt o
especi f i cado, pr oyect ando st e en l a
di r ecci n
del vect or i ndi cado, pudi ndose t ener en
cuent a l a
pr ol ongaci n por l os ext r emos de l a cur -
va.
( vl ax- cur ve- get Fi r st Der i v
obj_curva par) Cal cul a l a pr i mer a der i vada de l a cur va,
en
coor denadas del SCU, en el punt o de pa-
r met r o
i ndi cado
( vl ax- cur ve- get SecondDer i v
obj_curva par) Cal cul a l a segunda der i vada de l a cur va
en
coor denadas del SCU, en el punt o de pa-
r met r o
i ndi cado.
( vl ax- dump- obj ect objeto) Li st a l os mt odos y pr opi edades exi st en-
t es par a el
obj et o i ndi cado.
( vl ax- ename- >vl a- obj ect nombre_ent) Tr ansf or ma el obj et o de nombr e de ent i -
dad
i ndi cado en un obj et o VLA accesi bl e v a
ActiveX.
( vl ax- er ased- p objeto) Det er mi na si un obj et o ha si do bor r ado.
( vl ax- f or smbolo coleccin
expr1 [ expr2. . . ] ) Asi gna el s mbol o a cada obj et o de l a
col ecci n y
eval a t odas l as expr esi ones de Aut o-
LI SP.
( vl ax- get objeto propiedad) Devuel ve el val or de l a pr opi edad i ndi -
cada al
obj et o.
( vl ax- get - acad- obj ect ) Devuel ve el ms al t o ni vel ( Top Level)
de l a
apl i caci n Aut oCAD en l a act ual sesi n.
( vl ax- i nvoke objeto mtodo lista) I nvoca el mt odo i ndi cado par a un obj e-
t o,
pr opor ci onando una l i st a de ar gument os.
( vl ax- l dat a- del et e diccionario
clave) Bor r a l a ent r ada cuya cl ave se i ndi ca
en un
di cci onar i o.
( vl ax- l dat a- get diccionario
clave [ defecto] ) Devuel ve l os dat os de un di cci onar i o
par a l a cl ave
i ndi cada. Si st a no se hal l a, devuel ve
defecto.
( vl ax- l dat a- l i st diccionario) Devuel ve t odos l os dat os de un di cci ona-
r i o.
( vl ax- l dat a- put diccionario
clave datos) Al macena l os dat os especi f i cados en l a
cl ave
i ndi cada de un di cci onar i o.
( vl ax- l dat a- t est datos) Det er mi na si l os dat os i ndi cados pueden
ser
guar dados en l a sesi n act ual .
( vl ax- map- col l ect i on coleccin
funcin) Apl i ca l a f unci n i ndi cada a t odos l os
obj et os de
una col ecci n.
( vl ax- met hod- appl i cabl e- p objeto
mtodo) Det er mi na si un obj et o sopor t a el mt odo
i ndi cado.
( vl ax- obj ect - r el eased- p objeto) Det er mi na si un obj et o ha si do l i ber ado
de
cual qui er enl ace con un obj et o del di bu-
j o.
( vl ax- pr oduct - key) Devuel ve l os dat os de r egi st r o de pr o-
duct o de
Aut oCAD.
( vl ax- pr oper t y- avai l abl e- p objeto
prop [ T] ) Det er mi na si un obj et o pr esent a una pr o-
pi edad. Si
se i ndi ca T, exami na si es modi f i cabl e.
( vl ax- put objeto prop valor) Asi gna el val or i ndi cado a l a pr opi edad
especi f i cada del obj et o.
( vl ax- r ead- enabl ed- p objeto) Det er mi na si un obj et o puede ser l e do.
( vl ax- r eg- app registro coms carga
[ nom [ err] ] ) Regi st r a una apl i caci n: dat os de pr o-
duct o, l i st a
de comandos, nmer o de car ga, nombr e,
er r or .
( vl ax- r el ease- obj ect objeto) Li ber a un obj et o de di buj o de l a var i a-
bl e i ndi cada.
( vl ax- r emove- cmd nombre_global) El i mi na el nombr e de comando del gr upo
de l a
sesi n act ual . Si se i ndi ca T el i mi na el
gr upo.
( vl ax- t mat r i x lista_de_cuatro) Toma una l i st a de cuat r o l i st as con cua-
t r o nmer os
y devuel ve una mat r i z de t r ansf or maci n
de 44.
(vlax-typeinfo-available-p objeto) Determina si existe librera de informacin en
Visual Lisp con mtodos y propiedades del objeto.
(vlax-vla-object->enameobjeto) Transforma el objeto VLA indicado en un nombre de
entidad de AutoLISP.
(vlax-write-enabled-p objeto) Determina si un objeto de dibujo puede ser
modificado.
(vlisp-export-symbol smbolo) Asigna una variable nativa de AutoLISP al valor del
smbolo de Visual Lisp indicado.
(vlisp-import-exsubrs (nom fun1
fun2...)) Registra las funciones indicadas del nombre de
aplicacin ADS o ARX dentro de Visual Lisp.
(vlisp-import-symbol smbolo) Asigna un smbolo de Visual Lisp al homnimo de
AutoLISP con el valor de ste.
(vlr-acdb-reactor datos llamadas) Construye un objeto reactor con los datos y
llamadas indicados. Cada llamada es un par

(evento . funcin).
(vlr-add objeto) Habilita un objeto reactor inhabilitado
previamente.
(vlr-added-p objeto) Examina si un objeto reactor se encuentra
habilitado.
(vlr-beep-reaction [argumentos]) Produce sonidos de computadora.
(vlr-current-reaction-name) Devuelve el nombre del evento actual.
(vlr-dataobjeto) Devuelve los datos especficos de aplicacin
asociados a un objeto reactor.
(vlr-data-set objeto datos) Sobreescribe los datos especficos de aplicacin de
un objeto reactor con los datos indicados.
(vlr-editor-reactor datos llamadas) Construye un reactor Editor con los datos y
llamadas indicados.
(vlr-linker-reactor datos llamadas) Construye un reactor Linker con los datos y
llamadas indicados.
(vlr-object-reactor objetos datos
llamadas) Construye un reactor Object con los objetos, datos
y llamadas indicados.
(vlr-owner-add reactor objeto) Aade el objeto indicado al reactor.
(vlr-owner-remove reactor objeto) Elimina el objeto indicado del reactor.
(vlr-owners reactor) Devuelve la lista de objetos del reactor.
(vlr-pers reactor) Convierte el reactor en persistente.
(vlr-pers-p reactor) Determina si el reactor es o no persistente.
(vlr-pers-release reactor) Elimina la persistencia de un reactor.
(vlr-reaction-names tipo_reactor) Devuelve la lista de eventos del tipo de reactor
indicado.
(vlr-reaction-set reactor evento
funcin) Aade o reemplaza un evento de una funcin en un
reactor.
(vlr-reactions reactor) Devuelve la lista de llamadas de un reactor. Cada
llamada es un par (evento . funcin).
(vlr-reactors tipo_reactor) Devuelve una lista con todos los reactor del tipo
indicado.
(vlr-remove reactor) Inhabilita el reactor indicado.
(vlr-remove-all reactor) Inhabilita todos los reactores del tipo
especificado.
(vlr-trace-reaction argumentos) Argumentos para que sean sometidos a rastreo en
la ventana Trace de Visual Lisp.
(vlr-type reactor) Devuelve el tipo de reactor.
(vlr-types) Devuelve una lista con todos los tipos de reactor.
Para: La Web del Programador
Autor: J onathan Prstamo Rodrguez

También podría gustarte