Subido por Wolverine Dark

Curso práctico de programación con Autolisp

Anuncio
Curso práctico de programación
con Autolisp
Por Mario Torres Pejerrey
[email protected]
Lima
AutoCAD, AutoLISP, - Manual generado por Mario Torres Pejerrey
[1]
AutoCAD, AutoLISP, - Manual generado por Mario Torres Pejerrey
[2]
PRIMERA CLASE
INTRODUCCION
AutoLISP es un lenguaje de alto nivel, potente y flexible, muy apropiado para aplicaciones CAD. Es una adaptación
del lenguaje LISP (LISt Processing: Procesado de Listas) que se desarrolló en los años cincuenta para la investigación de
Inteligencia Artificial, basado en listas y símbolos, elementos fundamentales de AutoCAD lo que permite añadir nuevos
comandos de una forma fácil y accesible.
Una de las características principales de AutoLIPS es el acceso a la base de datos de un dibujo de AutoCAD. La base
de datos de AutoCAD se compone de toda la información del dibujo en el cual nos encontramos trabajando: ubicaciones de las
entidades, capas, estilos de texto, etc.
Mediante AutoLISP se puede obtener datos de esa base de datos o modificarla de acuerdo a nuestras necesidades.
Los programas creados en AutoLISP son archivos de texto con extensión *.LSP que se pueden crear desde cualquier
editor de textos, ya sea desde el EDIT del DOS o NOTEPAD de WINDOWS, o desde el propio editor Visual LISP.
AutoCAD cuenta con un intérprete interno que es el que se encarga de evaluar los programas escritos por el usuario;
para eso se debe cargar el programa en la memoria de AutoCAD mediante el comando APPLOAD.
Mediante la carga, el intérprete evalúa la sintaxis del programa escrito y si encuentra un error en él, procede a
informarlo mediante un mensaje que se muestra en la barra de comandos el cual indica el error generado y el bloque de
instrucción que lo contiene.
De esta manera le permite al usuario revisar y corregir las instrucciónes creadas, hasta que se cargue sin ningún
problema, aunque no asegura que el programa en plena ejecución funcione de una manera correcta por lo que se debe ejecutar
utilizando todas las instrucciones posibles.
La carga de una aplicación LISP solo tiene efecto para la sesión actual, si se inicia un nuevo dibujo o se sale de
AutoCAD, la aplicación LISP desaparece de la memoria, debiéndose cargar nuevamente. Debido a esto AutoCAD proporciona
la manera de hacer que las aplicaciones se carguen de una manera automática, debiendo para ello adicionar una instrucción con
la función AUTOLOAD, en archivo ACAD.LSP. Ejem: (autoload "milisp" '("milisp")).
AutoCAD proporciona varios archivos “.lsp” que en realidad son comandos de AutoCAD que siempre utilizamos, los
cuales pueden ser modificados de acuerdo a las necesidades del usuario.
En resumen AutoLISP es lenguaje muy potente y versátil que nos permitirá reducir el tiempo empleado en la
generación de nuestros dibujos, ya que los nuevos comandos creados pueden ser utilizados en cualquier momento.
AutoCAD, AutoLISP, - Manual generado por Mario Torres Pejerrey
[3]
EL ENTORNO DE DESARROLLO VISUAL LISP
Visual LISP (VLISP) representa una renovación de LISP para AutoCAD, actualizándolo para incluir prestaciones que
ya son normales en los modernos dialectos de LISP que se ajustan a la normativa COMMON LISP. Aún sin llegar a ser
totalmente compatible con esta normativa, es significativo el incremento de su potencia como lenguaje de programación.
Es particularmente útil la posibilidad que se incorpora para la interacción con la jerarquía de objetos de la aplicación mediante la
interfaz ActiveX ™ Automation de Microsoft, y la posibilidad de responder a eventos mediante la implementación de funciones
diseñadas como reactores.
Como herramienta de desarrollo se aporta un Entorno de Desarrollo Integrado (IDE) que incluye un compilador y varias
utilidades para la depuración.
El IDE Visual LISP incluye:
•
•
•
•
•
•
•
•
•
•
•
Comprobador de Sintaxis que reconoce secuencias AutoLISP erróneas y el uso incorrecto de los argumentos en
llamadas a las funciones primitivas del lenguaje.
Compilador de Ficheros que incrementa la velocidad de ejecución y constituye una plataforma de distribución que
brinda seguridad al código fuente.
Depurador de Fuentes, diseñado específicamente para AutoLISP, que permite la ejecución paso a paso del código
fuente en una ventana mientras se observan simultáneamente los resultados obtenidos en la pantalla gráfica de
AutoCAD.
Editor de Programación que emplea la codificación por color para LISP y DCL, así como otras características de
apoyo sintáctico.
Formateo LISP automático que redistribuye las líneas de código y las identa para facilitar la lectura de los programas.
Amplias características de Inspección y Vigilancia (Watch) que permiten el acceso en tiempo real a los valores de las
expresiones y las variables, y que pueden ser empleadas tanto para datos LISP como para objetos gráficos de
AutoCAD.
Ayuda sensible al contexto sobre las funciones AutoLISP y una ventana Apropos para búsqueda de nombres de
símbolos.
Sistema de Administración de Proyectos que facilitan el mantenimiento de aplicaciones con múltiples ficheros fuente.
Empaquetado de los ficheros AutoLISP compilados en un único módulo de programa.
Capacidad para guardar y recuperar la configuración del Escritorio para reutilizar la distribución de ventanas de
cualquier sesión anterior de VLISP.
Consola Visual LISP Inteligente que permite un nuevo nivel de interacción del usuario, con funciones que amplían las
de la ventana de texto habitual de AutoCAD.
Carga del módulo Visual LISP
Para cargar el modulo de Visual LISP, debe haberse iniciado una sesión de AutoCAD. Esta sesión puede contener sólo un
dibujo vacío, o pueden estar abiertos dibujos cuyo contenido se desee procesar.
Para activar el IDE VLISP tenemos tres opciones:
•
•
•
Seleccionar del menú Tool (Herramientas)>AutoLISP>Editor Visual LISP
Teclear
en
la
línea
de
comandos:
VLISP
Nota: Hemos encontrado al menos en una versión localizada española que el comando
VLIDE no es reconocido por el sistema. La Ayuda de esa misma versión aeñala como
alternativa el comando VISUALLISPIDE, que tampoco es reconocido. En estos casos
siempre se puede recurrir al comando VLIDE, descrito en el punto siguiente.
La versión anterior de Visual LISP utilizaba con los mismos fines el comando VLIDE, que
sigue siendo reconocido por la versión 2002. De hecho, internamente la llamada de
AutoCAD al IDE Visual LISP se realiza mediante este comando, que veremos aparecer en
la línea de comandos cada vez que se cambie a ese entorno.
AutoCAD, AutoLISP, - Manual generado por Mario Torres Pejerrey
[4]
Editor de AutoLISP
El editor de AutoLISP: Visual LISP de AutoCAD presenta el siguiente aspecto:
Barras de Herramientas
Barra de Menús
Area de edición de programas
Ventana de información de Visual LISP
Barra de Estado
Barra de Menús:
En la parte superior se sitúa la barra de menús que contiene comandos y otros procedimientos.
Barra de Herramientas:
Presenta una serie de iconos que representan de una manera interactiva todos los comandos y órdenes de Visual LISP.
Area de edición de programas:
Ocupa la mayor parte de la pantalla y es el área donde se escribe el codigo de los programas.
Ventana de información de Visual LISP:
Situada en la parte inferior en la cual podemos también escribir codigo y además nos muestra información acerca de la
carga de los programas como por ejemplo: su integridad sintactica.
AutoCAD, AutoLISP, - Manual generado por Mario Torres Pejerrey
[5]
Barras de Herramientas.Visual LISP dispone de cinco Barras de Herramientas que pueden activarse/desactivarse desde el menú View>Toolbars... que
abre el siguiente diálogo:
Estas cinco Barras de Herramientas contienen las opciones u comandos esenciales del IDE, facilitando el acceso a los mismos.
Contiene las herramientas usuales de Crear Nuevo, Abrir, Guardar, Imprimir, Cortar, Copiar, Pegar, Deshacer,
Rehacer y por último un acceso a la función Apropos que sirve para completar el texto buscando una correlación de
una subcadena con nombres de funciones, etc.
Incluye las funciones de Buscar, Buscar y Reemplazar. Además una casilla de lista desplegable donde se guardan los
términos anteriormente buscados durante la sesión de trabajo, lo que permite repetir una busqueda con más facilidad,
cosa que se hace con la herramienta situada a la derecha de la casilla. Por último incluye una serie de herramientas para
navegar dentro del texto mediante marcadores, que se introducen con la herramienta de la izquierda, se avanza o
retrocede con las dos siguientes y se eliminan con la última.
La barra Tools (Herramientas) opera sólo con la ventana del Editor activa. Sus funciones son, de izquierda a derecha:
cargar el código del Editor para su ejecución desde la Consola, cargar sólo el código seleccionado, comprobar la
sintaxis de todo el contenido de la ventana del Editor, o con la siguiente, comprobar sólo lo seleccionado. Para
formatear el texto se utilizan los próximos dos botones, el primero para todo el editor y el segundo sólo para el texto
seleccionado. Los dos siguientes botones sirven para marcar como comentario el texto seleccionado o para
desmarcarlo. Y por supuesto, el último se trata de la Ayuda en línea.
AutoCAD, AutoLISP, - Manual generado por Mario Torres Pejerrey
[6]
Los tres primeros botones de esta barra determinan la acción al encontrar un punto de ruptura durante la evaluación.
El primero entra en las expresiones anidadas posteriores al punto de ruptura, evaluándolas desde la más interior. El
segundo evalúa esta expresión y se detiene antes de la siguiente para de nuevo decidir si se quiere entrar a evaluar las
expresiones anidadas. El tercer botón continúa hasta el final de la función en curso y entonces cuando se detiene de
nuevo
la
evaluación.
El segundo trío de botones tiene que ver con las acciones a tomar cuando se produce una ruptura del flujo de
ejecución a causa de un error, o de que se alcance un punto de ruptura prefijado dentro del programa. Aunque es un
tema que se explicará más adelante, cabe decir ahora que estos estados de suspensión en la ejecución del programa se
utilizan para examinar los valores asumidos por las variables, cambiarlos si es preciso, etc.
El primer botón (Continue) permite terminar con esta pausa y continuar la ejecución normal del programa. El segundo
botón (Quit) permite abandonar el nivel de evaluación actual (pueden superponerse varios ciclos de evaluación si se
producen varios errores durante la depuración) y pasar al nivel de más arriba. Y el tercer botón (Reset) pasa el control
de
la
ejecución
directamente
al
nivel
superior
(Top
Level).
El tercer grupo de botones incluye otras útiles herramientas de depuración. El botón Toggle Breakpoint permite añadir
un nuevo punto de ruptura en el programa, situado en la posición actual del cursor. El segundo botón (Add Watch) da
acceso al diálogo que permite seleccionar un nombre de variable para observar sus resultados durante la ejecución.
Estos
resultados
se
exhiben
en
una
ventana
especial,
la
ventana
Watch.
El botón Last Break resalta en la ventana del editor la expresión que dio origen a la última ruptura. En caso de error, de
esta
manera
se
detecta
de
inmediato
dónde
se
produjo
éste.
El último botón no es realmente un botón de comando. Sirve simplemente para indicar si la interrupción actual se
encuentra antes o después de la expresión.
El primer botón sirve para poner en primer plano la ventana de aplicación de AutoCAD. El segundo botón abre un
menú donde podemos seleccionar la ventana del IDE Visual LISP que deseamos poner en primer plano. Esto se hace
necesario pues podemos tener abiertas de manera simultánea un gran número de programas y puede no der fácil
localizar
aquélo
que
queremos.
El tercer botón traslada el foco a la Consola de Visual LISP. El siguiente permite activar la característica de Inspección
(Inspect). Inspect permite examinar y modificar objetos AutoLISP así como AutoCAD. La herramienta Inspect crea una
ventana
separada
para
cada
objeto
sometido
a
inspección.
La siguiente herramienta (Trace Stack) necesita explicaciones que se salen del marco de esta introducción. Baste decir
que nos permite acceder a la memoria de pila donde se guardan las llamadas a función. Puede invocarse en un
momento de suspensión en la ejecución de un programa y permite mediante un menú contextual acceder a datos
relacionados
con
la
operación
del
programa.
El botón que le sigue (Symbol Service) está diseñado para simplificar el acceso a las distintas utilidades de depuración
relacionadas con símbolos. Podemos resaltar cualquier nombre de símbolo en el Editor y al pulsar sobre este botón se
abrirá la ventana Symbol Service donde se muestra el valor vinculado. Este valor se puede cambiar directamente en esta
ventana. Además tiene una barra de herramientas que permiten otros procesos con el símbolo seleccionado.
El siguiente botón permite abrir la ventana Apropos que describimos en detalle más adelante
Y por último un botón que permite acceder a la ventana Watch.
AutoCAD, AutoLISP, - Manual generado por Mario Torres Pejerrey
[7]
CREACION DE PROGRAMAS
Estructura de un archivo AutoLISP
Sabemos que un archivo “.lsp” se compone de listas y símbolos cuyos objetos son los siguientes:
•
•
•
•
•
•
Lista.- Que contiene: Paréntesis de apertura, espacios y paréntesis de cierre que constituyen el límite de acción de los
programas.
Elemento.- Cualquier componente de una lista.
Símbolo.- Elementos sin un valor concreto como una variable.
Enteros.- Valores numéricos sin punto decimal.
Reales.- Valores numéricos con punto decimal.
Cadenas.- Valores de texto que deben de ir entre comillas.
Es importante que se conozcan los nombres de las variables de AutoCAD y los valores que se le pueden asignar, ya que
puede ser de mucha utilidad.
Función DEFUN : Definir Función de Usuario
Para establecer un nuevo programa como estructura en necesario definir sus elementos, como lo son el nombre del
programa, argumentos e instrucciones en AutoLISP.
Las funciones de usuario cuyo nombre está formado con el prefijo C: es considerado por AutoCAD como un nuevo
comando el cual puede ser llamado en cualquier momento, si se omite se genera una función externa que puede ser llamada
desde otra función.
(DEFUN C:curso()
(PROMPT “Bienvenidos al Curso de AutoLISP”)
)
Aquí defun indica una nueva función de usuario, la cual va a tener como nombre curso y que va a ser considera como un
nuevo comando de AutoCAD por contar con el prefijo C:. Se debe tener muy en cuenta la organización de los paréntesis ya que
el número de los paréntesis abiertos debe de ser igual al número de paréntesis cerrados.
Al escribir curso en la barra de comandos de AutoCAD, se mostrará lo siguiente:
Command: curso
Bienvenidos al Curso de AutoLISPnil
Command:
Función PROMPT : Escribir un texto en la Línea de Comandos de AutoCAD
Esta función permite escribir el texto especificado en la línea de comandos de AutoCAD y devuelve nil. Para evitar
que se visualice nil se puede utilizar antes del último paréntesis la función PRINC. Princ y prompt permiten hacer lo mismo, la
diferencia es que princ acepta valores reales y prompt generalmente valores de textos.
(DEFUN C:pr()
(PROMPT “Bienvenidos al Curso de AutoLISP”)
(PRINC)
)
Al ingresar el nuevo comando “curso”, PROMPT mostrará lo siguiente:
Command: pr
Bienvenidos al Curso de AutoLISP
Command:
AutoCAD, AutoLISP, - Manual generado por Mario Torres Pejerrey
[8]
Función SETQ : Crear variables y atribuir valores
Esta función nos permite crear una variable y atribuirle un valor especifico.
(DEFUN C:mca()
(setq mivar “MTPCAZ”)
(prompt mivar)
(princ)
)
En este ejemplo se está creando una variable llamada “mivar” y
se le esta asignando un valor de tipo string (texto), luego con la
función prompt indicamos que nos muestre el valor de dicha
variable en la línea de comandos de AutoCAD.
Función SETVAR : Establecer valor de una variable externa
Permite establecer el valor de una variable de AutoCAD. Se escribe para ello la función y luego dejando un espacio y
entre comillas el nombre de la variable y por último el nuevo valor a establecer.
(DEFUN C:sca()
(setvar "cecolor" “5”)
(princ)
)
Función GETVAR : Obtener el valor de una variable de AutoCAD
Permite obtener el valor de una variable de AutoCAD. Se escribe para ello la función y luego dejando un espacio y
entre comillas el nombre de la variable. La línea de comandos mostrará el valor de dicha variable.
(DEFUN C:mca()
(setq ca(getvar "cecolor")) (prompt ca)
(princ)
)
“ca” es el nombre de la nueva variable y la instrucción(getvar "cecolor") es el valor que se le asigna a la
nueva variable, a su vez(getvar "cecolor") ha obtenido el valor de la variable de AutoCAD CECOLOR que es
el color azul (5). Por lo tanto el valor de ca es “5”.
Función COMMAND : Acceso a comandos de AutoCAD
Permite llamar a los comandos de AutoCAD desde el programa. Las instrucciones que se ingresan en AutoLISP, son
una secuencia de los datos que va solicitando el comando a medida que avanza su ejecución.. Los nombres de los comandos, las
opciones (datos) y las variables de AutoCAD deben de ir entre comillas; pero no las variables creadas en AutoLISP.
(DEFUN C: ibe()
(command "line" "0,0,0" "10,10" "")
(command "zoom" "e")
(princ)
)
•
•
La primera instrucción de comando indica a AutoCAD que genere una linea desde la coordenada 0,0,0 hasta
la coordenada 10,10.
La segunda instrucción de comando le indica a AutoCAD que realice un zoom extents.
- Las comillas que se encuentran solas significan presionar ENTER.
AutoCAD, AutoLISP, - Manual generado por Mario Torres Pejerrey
[9]
SEGUNDA CLASE
ACCESO Y CREACION DE LISTAS
Función CAR : Primer elemento de una lista
Obtiene el primer elemento de una lista, en el caso de una coordenada X,Y,Z obtendrá el valor de X.
(defun c:ex()
(setq p1 '(5 10 20))
(setq cl(CAR P1))
(princ cl)
(princ)
Se obtendrá: 5
)
- El apóstrofo o QUOTE permite ingresar una coordenada de un punto mediante una lista de valores sin utilizar la
función LIST para construir una lista.
Función CADR : Segundo elemento de una lista
Obtiene el segundo elemento de una lista, en el caso de una coordenada X,Y,Z obtendrá el valor de Y.
(defun c:ey()
(setq p1 '(5 10 20))
(setq cl(CADR P1))
(princ cl)
(princ)
Se obtendrá: 10
)
Función CADDR : Tercer elemento de una lista
Obtiene el tercer elemento de una lista, en el caso de una coordenada X,Y,Z obtendrá el valor de Z.
(defun c:ez()
(setq p1 '(5 10 20))
(setq cl(CADDR P1))
(princ cl)
(princ)
)
Se obtendrá: 20
Función LIST : Crear lista de valores
Esta función reúne las expresiones indicadas y genera con ellas una lista, se debe indicar al menos una expresión. Es
más utilizada para definir variables de punto (coordenadas).
(defun c:cl()
(setq p1(list 0.00 0.00))
(setq p2(list 10.00 10.00))
(command “line” p1 p2 “”)
(princ)
)
•
•
•
Mediante LIST la variable p1 establece su valor en X=0.00 e Y=0.00.
Mediante LIST la variable p2 establece su valor en X=10.00 e Y=10.00.
Y por último la instrucción (command “line” p1 p2 “”)genera una línea con el punto p1 como
punto inicial y p2 como punto final.
AutoCAD, AutoLISP, - Manual generado por Mario Torres Pejerrey
[10]
SOLICITAR DATOS AL USUARIO
Función GETPOINT : Ingresar un punto
La función GETPOINT obtiene y almacena las coordenadas X,Y,Z. de un punto, el cual se ingresa mediante el
teclado o pikando un punto en pantalla.
Adicionalmente se puede indicar un mensaje solicitando el ingreso de un punto, éste mensaje aparecerá en la línea de
comandos de AutoCAD.
(defun C:ip()
(setvar "cmdecho" 0)
(setq op(GETPOINT "Pike un punto:"))
(setq px(car op))
(setq py(cadr op))
(setq p1(list px py))
(command "point" p1)
(setvar "cmdecho" 1)
(princ)
)
* CMDECHO: Variable de AutoCAD que desactiva la visualización de los comandos empleados en el programa: 0
desactiva y 1 activa.
Función GETINT : Ingresar un número entero
Esta función obtiene un número entero ingresado por el usuario y lo almacena. En número entero debe estar entre –
32768 y 32767; si se ingresa un número no entero, ejm: 321.5 (decimal) se visualiza un mensaje de error y se solicita nuevamente
el número entero.
(defun C:ie()
(setq ne(GETINT "Ingrese un número: "))
(princ ne)
(princ)
)
Función GETREAL : Ingresar un número real
Esta función obtiene un número real ingresado por el usuario y lo almacena. También se puede ingresar un número
entero y se obtiene con sus decimal, ejm: 25 obtiene 25.0
(defun C:ir()
(setq nr(GETREAL "Ingrese un número: "))
(princ nr)
(princ)
)
Función GETDIST : Ingresar una distancia
Esta función obtiene el valor de una distancia introducida, ingresándola mediante el teclado o definiendo un punto en
pantalla por el usuario.
(defun C:od()
(setq d1(GETDIST "Pike o ingrese el punto inicial:"))
(princ "\nDistancia = ")
(princ d1)
(princ)
)
AutoCAD, AutoLISP, - Manual generado por Mario Torres Pejerrey
[11]
Función GETSTRING : Ingresar una cadena de texto
Esta función obtiene una cadena de texto ingresada por el usuario; si la cadena tiene más de 132 caracteres solo acepta
los primeros 132. Se pueden ingresar cadenas sin o con espacios, depende de si se ingresa o no un modo (T); si se ingresa un
modo se puede ingresar texto con espacios.
(defun C:os()
(setq st(GETSTRING T "Ingrese un texto: "))
(princ "\nEl texto escrito es = ")
(princ st)
(princ)
)
Función INITGET : Establecer modos para las funciones GET...
Especifica el modo en recibirán los datos las funciones GET... y estos son:
1
2
4
8
32
128
No admite enter como respuesta.
No admite valor cero.
No admite valores negativos.
No verifica límites aunque estén activados.
Dibuja la línea o el rectángulo elásticos en forma discontinua.
Permite ingresar datos por el teclado.
Se puede ingresar uno o se pueden sumar varios de ellos:
(defun C:in()
(INITGET 1)
(setq ne(GETINT "Ingrese un número: "))
(princ ne)
(princ)
)
En este ejemplo (INITGET 1) no permitirá que se ingrese un valor nulo (enter).
Función GETKWORD : Solicitar palabras clave
Permite ingresar al usuario palabras clave o abreviaturas ante una serie de opciones o alternativas.
Las respuestas posibles se deben especificar previamente con la función INITGET, si se ingresa palabras clave
diferentes GETKWORD solicita la palabra otra vez.
(defun C:ipc()
(INITGET 1 "Si No")
(setq p(GETKWORD "Le gusta AutoLisp [Sí o No]:"))
(princ p)
(princ)
)
Reconocerá que SI si se ingresa: s ó S ó si ó SI
AutoCAD, AutoLISP, - Manual generado por Mario Torres Pejerrey
[12]
BLOQUES DE PROGRAMACION
TERCERA CLASE
Función IF : Condicional simple
La función IF evalúa una expresión condicional y si esta cumple dicha condición, entonces el resultado es diferente de
nulo.
(defun C:cf2()
(setq v1(getreal
(setq v2(getreal
(if (= v1 v2)
(princ "Son
(princ "Son
)
(princ)
)
"Ingrese un valor:"))
"\nIngrese un segundo valor:"))
valores iguales")
valores diferentes")
Si v1 y v2 son iguales presenta "Son valores iguales".
Si v1 y v2 son diferentes presenta "Son valores diferentes".
Función COND : Condicional múltiple
Permite establecer una serie de condiciones, especificando acciones de acuerdo si se cumplen las condiciones. Se
pueden establecer múltiples condiciones y acciones como opciones tenga para el usuario.
(defun C:au()
(INITGET 1 "Si No Mucho Poco")
(setq p(GETKWORD "Le gusta AutoLisp [Si/No/Mucho/Poco]:"))
(COND
( (= p "Si") (princ "Si le gusta. Muy bien..") )
( (= p "No") (princ "No le gusta. Que pena..") )
( (= p "Mucho") (princ "Mucho. Siga aprendiendo..") )
( (= p "Poco") (princ "Poco. Interésese mas..") )
)
(princ)
)
Función PROGN : Secuencia consecutiva
Admite como argumentos todas las expresiones que se indiquen y las evalúa secuencialmente.
Generalmente utilizamos PROGN en la función IF para que pueda ser posible ejecutar varias acciones si se cumple una
condición o no.
(defun C:pr()
(princ "El valor inicial es 10")
(setq ci1(getreal "\nIngrese un valor:"))
(if (= ci1 10)
(PROGN
(princ "\nLos valores son iguales")
(setq ab “CAZMTP”)
(Princ ab)
)
(princ "\nSon diferentes")
)
(princ)
)
AutoCAD, AutoLISP, - Manual generado por Mario Torres Pejerrey
[13]
Función WHILE : Repetir expresión según condición
Esta función permite repetir acciones mientras se cumpla una condición dada que sirve como elemento de control de
la repetitiva.
Mientras la condición se cumpla o sea verdadera (T)todas las acciones se ejecutan, hasta que la condición resulte falsa
(nil).
(defun C:wh()
(setvar "cmdecho" 0)
(setq vf 0)
(setq nl(getreal "\nIngrese un número límite: "))
(while (< vf nl)
(setq pt(getpoint "\nUbicación del texto:"))
(command "text" pt "" "" vf)
(setq vf (+ vf 10))
(setq vf vf)
)
(setvar "cmdecho" 1)
(princ)
)
OPERACIONES MATEMATICAS Y LOGICAS
Función + : Mas
Esta función devuelve la suma de los valores especificados.
(defun C:mas()
(princ "\nSumar números")
(setq n1(getreal "\nIngrese el primer número: "))
(setq n2(getreal "\nIngrese el segundo número: "))
(setq n3 (+ n1 n2))
(princ n3)
(princ)
)
Función - : Menos
Esta función devuelve la resta de los valores especificados.
(defun C:menos()
(princ "\nRestar números")
(setq n1(getreal "\nIngrese el primer número: "))
(setq n2(getreal "\nIngrese el segundo número: "))
(setq n3 (- n1 n2))
(princ n3)
(princ)
)
AutoCAD, AutoLISP, - Manual generado por Mario Torres Pejerrey
[14]
Función * : Multiplicar
Devuelve el resultado de multiplicar de los valores especificados.
(defun C:multi()
(princ "\nMultiplicar números")
(setq n1(getreal "\nIngrese el primer número: "))
(setq n2(getreal "\nIngrese el segundo número: "))
(setq n3 (* n1 n2))
(princ n3)
(princ)
)
Función / : Dividir
Devuelve el resultado de dividir de los valores especificados.
(defun C:div()
(princ "\nDividir números")
(setq n1(getreal "\nIngrese el primer número: "))
(setq n2(getreal "\nIngrese el segundo número: "))
(setq n3 (/ n1 n2))
(princ n3)
(princ)
)
Función = : Igual
Compara los valores especificados. Si son iguales devuelve verdadero (T), de lo contrario devuelve falso (nil).
(defun C:igu()
(setq n1(getreal "\nIngrese un número: "))
(setq n2(getreal "\nIngrese otro número: "))
(if (= n1 n2)
(PROGN
(princ "\nLos valores son iguales.")
)
(princ "\nLos valores son diferentes.")
)
(princ)
)
AutoCAD, AutoLISP, - Manual generado por Mario Torres Pejerrey
[15]
Función /= : Diferente
Compara los valores especificados. Si son diferentes devuelve verdadero (T), y si son iguales devuelve falso (nil).
(defun C:dif()
(setq n1(getreal "\nIngrese un número: "))
(setq n2(getreal "\nIngrese otro número: "))
(if (/= n1 n2)
(PROGN
(princ "\nLos valores son diferentes.")
)
(princ "\nLos valores son iguales.")
)
(princ)
)
Función AND: Y lógico
Devuelve verdadero si ninguna de las expresiones es falsa. Se deben de cumplir todas las expresiones.
(defun C:yc()
(setq n1(getreal "\nIngrese un número: "))
(setq n2(getreal "\nIngrese otro número: "))
(if (AND (/= n1 n2) (< n1 n2))
(PROGN
(princ "\nLos valores son diferentes y el 1ero menor.")
)
(princ "\nLos valores son iguales o el 1ero es mayor.")
)
(princ)
)
Función OR: O lógico
Devuelve verdadero si una expresión de un conjunto dado es verdadera. Es suficiente que se cumpla una expresión.
(defun C:oc()
(setq n1(getreal "\nIngrese un número: "))
(setq n2(getreal "\nIngrese otro número: "))
(if (OR (> n1 n2) (= n1 n2))
(PROGN
(princ "\nLos valores son iguales o el 1ero mayor.")
)
(princ "\nEl primer valor ingresado es menor.")
)
(princ)
)
AutoCAD, AutoLISP, - Manual generado por Mario Torres Pejerrey
[16]
Función NOT: No lógico
Devuelve verdadero si una expresión evaluada es falsa.
(defun c:nt()
(setq n1(getreal "\nIngrese un número: "))
(setq n2(getreal "\nIngrese otro número: "))
(if (NOT (< n1 n2))
(PROGN
(princ "\nEl primer valor es mayor.")
)
(princ "\nEl primer valor es menor.")
)
(princ)
)
Función ABS : Valor Absoluto
Devuelve el valor absoluto del número especificado.
(defun C:va()
(setq n1(getreal "\nIngrese un número que será restado 100: "))
(setq n3 (- n1 100))
(princ “\nResultado: ”)
(princ n3)
(setq n4 (ABS n3))
(princ “\nvalor absoluto: ”)
(princ n4)
(princ)
)
Función SQRT : Raíz Cuadrada
Devuelve la raíz cuadrada un número especificado.
(defun c:ra()
(setq n1(getreal "\nIngrese el número a calcular la raíz: "))
(setq rai (SQRT n1))
(princ “\nSu raíz cuadrada es: ”)(princ rai)
(princ)
)
Función EXPT : Exponente
Devuelve el resultado de elevar a una potencia especifica un número especificado.
(defun C:expo()
(setq n1(getreal "\nIngrese el número a calcular: "))
(setq po(getreal "\nIngrese el exponente: "))
(setq ex (EXPT n1 po))
(princ “\nEl resultado es: ”) (princ ex)
(princ)
)
Función ANGLE : Angulo definido por dos puntos
Esta función obtiene el ángulo que se determina mediante dos puntos:
AutoCAD, AutoLISP, - Manual generado por Mario Torres Pejerrey
[17]
El ángulo se determina de la siguiente manera: Se toma como línea imaginaria base, el eje X y como siguiente línea imaginaria, el
punto inicial y el punto final ingresados por el usuario.
(defun C:an()
(setq pa(getpoint "Pike o ingrese el punto inicial:"))
(setq pa2(getpoint "Pike o ingrese el punto final:"))
(setq ang (ANGLE pa pa2))
(setq ang (/(* 180 ang)PI))
(princ "\nAngulo: ")
(princ ang)
(princ)
)
La operación que se hace después de la función ANGLE permite transformar el valor obtenido en grados.
Función DISTANCE : Distancia entre dos puntos
Esta función devuelve la distancia entre dos puntos.
(defun C:ds()
(setq p1(getpoint "Pike o ingrese el punto inicial:"))
(setq p2(getpoint "Pike o ingrese el punto final:"))
(setq dsp (DISTANCE p1 p2))
(princ "\nDistancia: ")
(princ dsp)
(princ)
)
AutoCAD, AutoLISP, - Manual generado por Mario Torres Pejerrey
[18]
CUARTA CLASE
CONTROL DE CADENAS DE TEXTO
Función STRCASE : Cambiar a Mayúsculas o Minúsculas
Esta función cambia una cadena especifica en mayúsculas o minúsculas dependiendo del valor de una opción.
Si la opción está presente (T), la cadena de texto se convierte en minúscula o de lo contrario se convierte en mayúscula.
(defun C:mn()
(setq tm(getstring "Ingrese un texto: "))
(setq tma(STRCASE tm))
; Convierte a mayúscula
(princ tma)
; Convierte a minúscula
(setq tmi(STRCASE tm T))
(princ tmi)
(princ)
)
Función STRCAT : Concatenar cadenas
Devuelve una cadena que es la suma de todas las cadenas indicadas, éstas deben ser textos o variables con valor de
texto de lo contrario se produce un error.
(defun C:sc()
(setq t1(getstring
(setq t2(getstring
(setq t3(getstring
(setq st(STRCAT
(princ st)
(princ)
)
"\nIngrese texto
"\nIngrese texto
"\nIngrese texto
"Nueva cadena: "
1:
2:
3:
t1
"))
"))
"))
t2 t3))
Función SUBSTR : Subcadena de una cadena
Esta función devuelve una parte de la cadena especificada para ello se debe ingresar el número de carácter de inicio y
el número de caracteres que contendrá la nueva cadena.
(defun C:sb()
(setq texto(getstring "\nIngrese un texto: "))
(setq nt(SUBSTR texto 2 3))
(setq ic(strcat "Devuelve: " nt
" Caracter de inicio 2 y longitud de 3 caracteres." ))
(princ ic)
(princ)
)
Función STRLEN : Longitud de una cadena
Esta función devuelve un número que es la longitud total de una cadena especificada o de varias cadenas concatenadas.
(defun C:sl()
(setq txt(getstring "\nIngrese un texto: "))
(setq lon(STRLEN txt))
(setq lon(rtos lon))
(setq lont(strcat "Longitud de " txt ": " lon " caracteres."))
(princ lont)(princ)
)
AutoCAD, AutoLISP, - Manual generado por Mario Torres Pejerrey
[19]
Función WCMATCH : Comparar una cadena con un patrón o filtro
Esta función compara una cadena indicada con un filtro y si la cadena cumple con el filtro indicado devuelve
verdadero (T), en caso contrario nil.
Para construir un filtro es necesario un conjunto de caracteres especiales o comodines que deberán estar dentro de
unas comillas.
(defun C:wm()
(setq txt(getstring "\nIngrese un texto: "))
(if (WCMATCH txt "A*,a*")
; Si es verdadero:
(princ "El texto que escribió inicia con A o a.")
; Si es falso:
(princ "El texto que escribió inicia diferente de A o a.")
)
(princ)
)
En este ejemplo WCMATCH compara la variable txt que contiene el texto ingresado, con el patrón "A*,a*",
si el texto empieza con A o con a, devuelve verdadero.
Otros comodines:
#
Busca cualquier digito numérico.
@
Busca cualquier carácter alfabético.
.
Busca cualquier carácter no alfanumérico.
*
Busca cualquier secuencia de carácter.
?
Indica un caracter.
Busca si la cadena no contiene una letra especificada. (WCMATCH “Barco” “-*q*”) T.
Función ALERT : Cuadro de mensaje
Muestra un cuadro de mensaje con el texto especificado. Se pueden escribir varias líneas de texto incluyendo el código
“\n” antes de la nueva linea.
(DEFUN C:al()
(ALERT "Bienvenidos al Curso de AutoLISP\nProfesor:
\nMario Torres Pejerrey")
(PRINC)
)
AutoCAD, AutoLISP, - Manual generado por Mario Torres Pejerrey
[20]
CONVERSION DE TIPO DE DATOS
Función FLOAT : Convertir un número ENTERO en valor REAL
Convierte el número especificado en número real.
(defun C:cf()
(setq ne (getint "\nIngrese un número: "))
(setq nr(FLOAT ne))
(princ nr)
(princ)
)
Función ITOA : Convertir un número ENTERO en valor TEXTO
Convierte el número especificado en una cadena de texto.
(defun C:ci()
(setq ne (getint "\nIngrese un número: "))
(setq nr(ITOA ne))
(setq cad(strcat "\nEl número es ahora el texto: " nr))
(princ cad)
(princ)
)
Función RTOS : Convertir un número REAL en valor TEXTO
Convierte un número real (con decimales) especificado, en una cadena de texto. Además se le debe especificar dos
argumentos que son el formato de número y el número de decimales del nuevo valor.
(defun C:cr()
(setq ne (getreal "\nIngrese un número con 3 decimales: "))
(setq nr(RTOS ne 2 2))
(setq cad(strcat "\nEl número es ahora el texto: " nr))
(princ cad)
(princ)
)
Se ha especificado que el nuevo texto tenga un formato decimal y tenga dos decimales: (RTOS ne 2 2)
El tipo de unidades se puede encontrar llamando al comando DDUNITS desde AutoCAD.
Función ANGTOS : Convertir un ANGULO en valor TEXTO
Convierte el ángulo especificado el cual debe estar en radianes, en una cadena de texto. Además se le debe especificar
dos argumentos que son el formato de modo y precisión del nuevo valor.
(defun C:ca()
(setq ne (getangle "\nIngrese un angulo entero: "))
(setq nr(ANGTOS ne 1 3))
(setq cad(strcat "\nEl ángulo ingresado es ahora el texto: " nr))
(princ cad)
(princ)
)
Se ha especificado que el nuevo texto tenga un formato grados/minutos/segundos y tenga tres decimales:
(ANGTOS ne 1 3)
AutoCAD, AutoLISP, - Manual generado por Mario Torres Pejerrey
[21]
Función ATOI : Convertir un TEXTO en número ENTERO
Convierte un texto especificado en número entero. Si el número con valor de texto contiene decimales o
adicionalmente otro texto (189.25K&^*%) al convertirse en número entero estos se truncan (189).
(defun C:te()
(setq txt(getstring "\nIngrese un número: "))
(setq nr(ATOI txt))
(princ nr)
(princ)
)
;Valor de texto.
Función ATOF : Convertir un TEXTO en número REAL
Convierte un texto especificado en un número real. Si el número con valor de texto contiene decimales o
adicionalmente otro texto (189.2565K&^*%) al convertirse en número real solo los demás textos se truncan (189.2565).
(defun C:tr()
(setq txt(getstring "\nIngrese un número: "))
(setq nr(ATOF txt))
(princ nr)
(princ)
)
;Valor de texto.
Función ANGTOF : Convertir un TEXTO en ANGULO
Convierte un texto especificado en un ángulo. Si el número con valor de texto contiene decimales o
adicionalmente otro texto (180.25K&^*%) produce un valor de falso (nill), pero si solo tiene decimales los acepta.
(defun C:ta()
(setq txt(getstring "\nIngrese un número: "))
(setq nr(ANGTOF txt))
(princ nr)
(princ)
)
;Valor de texto.
El valor devuelto es siempre un ángulo en radianes.
Función CVUNIT : Convertir un valor de un tipo de unidad a otro
Convierte el valor especificado de un tipo de unidad especificada a otro tipo de unidad especificada.
Las unidades se indican con sus nombres en inglés y como cadenas de texto, es decir entre comillas.
(defun C:pm ()
(princ "\nConvertir Pulgadas a Metros. ")
(setq valor (getdist "\nEntre valor en Pulgadas: "))
(setq cpm (CVUNIT valor "inches" "meters"))
(setq pul (rtos valor 2 4))
(setq met (rtos cpm 2 4))
(princ (strcat "\n" pul " pulgada(s) = " met " metros."))
(princ)
)
También se pueden utilizar las siguientes unidades: "hour" "second", "degree" "radian",
"celsius" "kelvin".
AutoCAD, AutoLISP, - Manual generado por Mario Torres Pejerrey
[22]
QUINTA CLASE
VERIFICACION DE VALORES
Función LISTP : Detectar una lista
Verifica si el elemento indicado es una lista, si lo es devuelve T, si no devuelve nil.
(defun c:dl()
(setq lst 0)
(setq ent (getpoint “\nPike un punto:“))
(if(LISTP ent)
(princ "\nSi es una lista.")
(princ "\nNo es una lista.")
)
(if(LISTP lst)
(princ "\nSi es una lista.")
(princ "\nNo es una lista.")
)
(princ)
)
Función MINUSP : Detectar valor numérico negativo
Verifica si el elemento indicado contiene un valor numérico negativo, si lo es devuelve T, si no devuelve nil.
(defun c:dvn()
(setq v(getreal "\nIngrese un valor positivo o negativo: "))
(if(minusp v)
(princ "\nValor negativo.")
(princ "\nValor positivo.")
)
(princ)
)
Función ZEROP : Detectar valor numérico igual a 0
Verifica si el elemento indicado contiene un valor numérico igual a 0, si lo es devuelve T, si no devuelve nil.
(defun c:dvc()
(setq v(getreal "\nIngrese un valor 0 o diferente: "))
(if(ZEROP v)
(princ "\nValor 0.")
(princ "\nValor diferente de 0.")
)
(princ)
)
Función NULL : Detectar valor nulo
Verifica si el elemento indicado contiene un valor nulo (sin valor), si lo es devuelve T, si no devuelve nil.
(defun c:nll()
(if (NULL a)
(progn
(princ "\nEl valor a es nulo.")
(setq a "Valor")
)
(princ "\nEl valor a es ahora diferente de nulo.")
)
(princ))
Si deseamos dar un valor nulo a una variable debemos de crearla con valor nil (setq a nil).
OPERACIONES CON ARCHIVOS
AutoCAD, AutoLISP, - Manual generado por Mario Torres Pejerrey
[23]
Función OPEN : Abrir un archivo
La función OPEN abre un archivo para leer o escribir datos. Se le indica a OPEN la ruta completa en caso de no estar
en un directorio de trabajo de AutoCAD, el nombre del archivo y la extensión del mismo y luego un modo que indicará una
manera de abrirlo.
Estos modos son:
“r”
“w”
“a”
Abre el archivo especificado como solo lectura. Si el archivo no existe devuelve nil.
Abre el archivo especificado para escritura. Si el archivo no existe la función OPEN primero lo crea.
Abre el archivo y se sitúa en el final para ir añadiendo datos. Si el archivo no existe se crea.
(defun c:ar()
(setq ar(OPEN "c:\\temp\\MTPCAZ.xls" "w"))
(princ)
)
Función CLOSE : Cerrar un archivo
La función CLOSE cierra un archivo abierto por la instrucción OPEN, es necesario cerrar un archivo abierto para que
se actualice con los cambios generados (escritura).
(defun c:ac()
(setq ar(open "c:\\temp\\MTPCAZ.xls" "w"))
(CLOSE ar)
(princ)
)
Función FINDFILE : Buscar un archivo
Esta función busca un archivo especificado, en las rutas de los archivos de soporte de AutoCAD, especificados en el
cuadro de diálogo Options. Si no lo encuentra devuelve nil, de lo contrario devuelve la ruta completa de ese archivo.
Si se desea averiguar si existe o no un archivo en una ruta especificada basta con ingresar FINDFILE seguido de la
ruta de acceso.
(defun c:fn()
(setq bs (FINDFILE "MTPCAZ.xls"))
(princ bs)
(princ)
)
AutoCAD, AutoLISP, - Manual generado por Mario Torres Pejerrey
[24]
Función GETFILED : Cuadros de diálogo para gestión de archivos
Carga un cuadro de diálogo del entorno Windows para recuperar el valor de una ruta señalada. Seguido del nombre de
la función GETFILED se debe especificar el título del cuadro de diálogo, el nombre de archivo por defecto, luego la extensión
por defecto de los archivos a buscar y por último el modo correspondiente.
Estos modos son:
“1”
“4”
“8”
Guarda un archivo. El archivo ingresado deberá ser nuevo. Si ya existe, se mostrará un mensaje de
advertencia y en caso de aceptar el archivo se sobrescribirá.
Permite abrir un archivo con extensión diferente a la especificada como por defecto.
Abre un archivo y se le indica un archivo con otra extensión a la especificada en por defecto no lo acepta.
(defun c:gf()
(setq bs (GETFILED "Capturar ruta"
(princ bs)
(princ)
)
"MTPCAZ" "xls" 8))
Función PRIN1 : Escribir texto
Escribe un texto en pantalla si no se especifica un archivo, de lo contrario crea un a línea de texto en dicho archivo; la
nueva línea se crea entre comillas (“ “).
(defun c:ed()
(setq bs (getfiled "Crear y escribir datos" "MTPCAZ" "xls" 1))
(setq ar (open bs "w"))
(PRIN1 "Curso particular" ar)
(close ar)
(princ)
)
Función PRINT : Escribir texto en una nueva línea
Función idéntica a PRIN1. La diferencia es que salta a una nueva línea antes de escribir el archivo.
(defun c:en()
(setq bs (getfiled "Abrir y escribir datos" "MTPCAZ" "xls" 8))
(setq ar (open bs "w"))
(PRIN1 "Curso particular" ar)
(PRINT "de AutoCAD 2000" ar)
(PRINT "San Pedro 377 San Andrés" ar)
(close ar)
(princ)
)
AutoCAD, AutoLISP, - Manual generado por Mario Torres Pejerrey
[25]
Función READ-LINE : Leer una línea de texto
Lee una línea de texto desde un archivo y devuelve el valor. Si se sigue llamando a READ-LINE, continúa leyendo las
líneas siguientes.
(defun c:el()
(setq bs (getfiled "Abrir y leer datos" "MTPCAZ" "xls" 8))
(setq ar (open bs "r"))
(setq ln(READ-LINE ar))
(setq ln (strcat ln "\n" (READ-LINE ar)))
(setq ln (strcat ln "\n" (READ-LINE ar)))
(princ ln)
(close ar)
(princ)
)
Función WRITE-LINE : Escribir una línea de texto
Escribe una nueva línea en el archivo. Se diferencia de PRINT porque la nueva línea creada en el archivo no lleva
comillas.
(defun c:wl()
(setq bs (getfiled "Abrir y escribir datos" "MTPN" "xls" 8))
(setq ar(open bs "w"))
(WRITE-LINE "Curso particular" ar)
(WRITE-LINE "de AutoCAD 2000" ar)
(WRITE-LINE "San Pedro 377 San Andrés" ar)
(close ar)
(princ)
)
Función TEXTSCR : Cambiar a la ventana de texto
Visualiza la ventana de texto de AutoCAD es el equivalente a presionar la tecla F2.
(defun c:vt()
(TEXTSCR)
(princ "Cambio a ventana de texto.")
(princ)
)
Función GRAPHSCR : Cambiar a la pantalla gráfica
Cambia a la pantalla gráfica de AutoCAD.
(defun c:ag()
(GRAPHSCR)
(princ "Cambio a pantalla gráfica.")
(princ)
)
AutoCAD, AutoLISP, - Manual generado por Mario Torres Pejerrey
[26]
SEXTA CLASE
ACCESO A LA BASE DE DATOS DE LAS ENTIDADES
Estructura de la base de datos de AutoCAD
Toda la información de las entidades de un dibujo constituye la base de datos de AutoCAD.
Cada entidad esta creada en base a una lista, que contiene sublistas de asociaciones; cada asociación contiene dos valores
separados por un punto: El primer valor contiene el tipo de propiedad, y el segundo el valor de dicha propiedad.
(defun c:bs()
(setq p1(getpoint "Primer punto"))
(setq p2(getpoint p1 "\nSegundo punto"))
(command "line" p1 p2 "")
(ENTGET(ENTLAST))
)
El comando bs crea una línea y luego nos muestra su base de datos la cual contiene sus propiedades (códigos) y sus
respectivos valores.
CODIGOS
COMUNES
-1
0
6
7
8
39
62
210
OTROS
CODIGOS
1
2
10
11
12
13
40
41
OTROS
TIPO DE DATO
El nombre de la entidad.
El tipo de entidad.
El nombre del tipo de línea. Si no aparece es BYLAYER.
El nombre del estilo de texto.
El nombre de capa.
El valor de altura de objeto. Si no aparece es 0.
El número de color. Si no aparece es BYLAYER.
El vector de orientación de la altura del objeto en 3D.
TIPO DE DATO PARA UNA ENTIDAD
VALOR
TEXTO, ATRIBUTO: Contenido de texto.
BLOQUE: Nombre, ATRIBUTO: Tag.
LÍNEA: Punto inicial, CIRCULO-ARCO: Centro,
TEXTO-ATRIBUTO: Punto de inicio, BLOQUE: Punto de inserción,
PUNTO: Coordenadas, POLILINEA: Vértices, 3DFACE: Primer vértice.
LÍNEA: Punto final, TEXTO-ATRIBUTO: Punto de justificación,
3DFACE: Segundo vértice.
3DFACE: Tercer vértice.
3DFACE: Cuarto vértice.
ARCO-CIRCULO: Radio, TEXTO-ATRIBUTO: Altura de texto,
POLILINEA: Grosor inicial.
TEXTO-ATRIBUTO: Factor proporción de texto, BLOQUE: Escala X,
POLILINEA: Grosor final.
TIPO DE DATO PARA UNA ENTIDAD
AutoCAD, AutoLISP, - Manual generado por Mario Torres Pejerrey
[27]
CODIGOS
42
43
50
51
70
71
72
VALOR
BLOQUE: Escala Y, POLILINEA: Factor curvatura de poliarc.
BLOQUE: Escala Y.
ARCO: Angulo de inicio, TEXTO-ATRIBUTO: Angulo de rotación,
BLOQUE: Angulo de rotación, POLILINEA: Dirección tangente.
ARCO: Angulo final, TEXTO-ATRIBUTO: Angulo inclinación de estilo.
POLILINEA: Abierta o cerrada, BLOQUE: Número de columnas de
Minsert. ATRIBUTO: Tipo (0: Normal, 1: Invisible, 2: Constante, 3: Verifi.
BLOQUE: Número de filas de Minsert,
TEXTO-ATRIBUTO: Generación (0: Normal, 2: Reflejado, 4:Cabeza abajo.
TEXTO-ATRIBUTO: Justificación (0: Izquierda, 1: Centro, 2: Derecha, 3:
Situar, 4: Rodear, 5: Ajustar.
Estructura de base de datos que no pertenecen a entidades.
Es la información de la estructura de los objetos no gráficos, es decir: de capas, Tipos de línea, Estilos de texto, etc.
La organización de los datos es la misma que para las entidades, basándose en listas que contienen sublistas de asociaciones,
cuyo primer elemento es el tipo propiedad (código), y el segundo elemento el valor.
(defun c:ng()
(setvar "cmdecho" 0)
(command "layer" "n" "Muros" "c" "5" "Muros" "")
(setvar "cmdecho" 1)
(TBLSEARCH "LAYER" "Muros")
)
Devolverá: ((0 . "LAYER") (2 . "Muros") (70 . 0) (62 . 5) (6 . "Continuous")), donde:
0 es el tipo de objeto, 2 es el nombre del objeto, 62 es el color, 6 es el tipo de línea.
AutoCAD, AutoLISP, - Manual generado por Mario Torres Pejerrey
[28]
OPERACIONES CON LISTAS
Función ASSOC : Obtener una lista de asociada
ASSOC nos permite referirnos a un elemento especificado de una lista asociada que lo contiene. Los elementos son
sublistas de una lista total.
Función externa que permite dibujar una línea.
(defun dlinea()
(setvar "cmdecho" 0)
(setq p1(getpoint "Primer punto:"))
(setq p2(getpoint p1 "\nSegundo punto:"))(command "line" p1 p2 "")
(setq ent(ENTGET (ENTLAST)))(setvar "cmdecho" 1)
)
Devuelve la lista asociada a 8 que es: la capa en la que se encuentra la entidad dibujada.
(defun c:as()
(dlinea)
(setq an(ASSOC 8 ent)) (princ an)
(Princ)
)
Función CONS : Añadir nuevo primer elemento a una lista
Esta función construye una nueva sublista con los elementos indicados, una característica de esta nueva lista es que es
construida de manera especial por dos elementos separados por un punto, que hace que ocupe menos memoria.
(defun c:co()
(setvar "cmdecho" 0)
(setq pa (CONS 8 0))
(Princ pa)
(setvar "cmdecho" 1)
(princ)
)
Función SUBST : Sustituir elemento de una lista
SUBST sustituye una sublista especificada por otra, de la entidad especificada como tercer argumento, y devuelve la
nueva lista.
(defun c:sb()
(dlinea)
(princ ent)
(setq nent(SUBST (cons 8 "0")(assoc 8 ent) ent))
(princ nent)
(princ)
)
Función LAST : Ultimo elemento de una lista
Esta función devuelve un valor que es el número de elementos de la lista indicada.
AutoCAD, AutoLISP, - Manual generado por Mario Torres Pejerrey
[29]
(defun c:la()
(dlinea)
(princ ent)
(setq ne(LAST ent))
(princ "\nEl último elemento (sublista) de la línea creada es:\n")
(princ ne)
(princ)
)
Función MEMBER: Obtener resto de elementos a partir de uno especificado
Devuelve el resto de elementos a partir de uno especificado, si hubiera elementos que se repiten member devuelve
resto a partir del primero y si no encuentra el elemento especificado devuelve nil.
(defun c:ml()
(dlinea)
(princ ent)
(setq ne(MEMBER (cons 410 "Model") ent))
(princ "\nLos elementos a partir de la sublista indicada son:\n")
(princ ne)
(princ)
)
Función NTH: Obtener elemento enésimo de una lista
NTH examina el número indicado que lo considera como una posición en la lista y devuelve el elemento que
encuentra en dicha posición. El primer elemento lo considera como el elemento 0, es decir el quinto elemento lo considera en la
posición nº4. Si el número especificado es mayor que el número de elementos devuelve nil.
(defun c:nt()
(dlinea)
(princ ent)
(setq ne(NTH 1 ent))
(princ "\nEl elemento indicado es:\n")
(princ ne)
(princ)
)
AutoCAD, AutoLISP, - Manual generado por Mario Torres Pejerrey
[30]
SEPTIMA CLASE
SELECCIÓN DE OBJETOS Y BASE DE DATOS
Función ENTLAST : Obtiene última entidad creada
Devuelve el nombre de la última entidad creada en el dibujo. ENTLAST obtiene el nombre de la entidad, así no este
visible en la pantalla o este en una capa desactivada.
La siguiente es una función externa que dibuja una línea.
(defun lin()
(setvar "cmdecho" 0)
(setq p1(getpoint "Primer punto:"))
(setq p2(getpoint p1 "\nSegundo punto:"))
(command "line" p1 p2 "")
(setvar "cmdecho" 1)
)
Se crea una nueva función que es el comando uent.
(defun c:uent()
(lin)
(setq ent(ENTLAST))
(setvar "cmdecho" 0)
(command "change" ent "" "p" "c" "6" "")
(setvar "cmdecho" 1)
(princ)
)
Función ENTSEL : Obtiene la entidad seleccionada
ENTSEL nos permite seleccionar una entidad y devuelve su nombre y además la coordenada del punto de
designación. Adicionalmente se puede agregar un mensaje para el usuario al solicitar la designación de la entidad.
(defun c:ens()
(setq ent(ENTSEL
"\nSeleccione una entidad para cambiar el color: "))
(setvar "cmdecho" 0)
(command "change" ent "" "p" "c" "6" "")
(setvar "cmdecho" 1)
(princ)
)
AutoCAD, AutoLISP, - Manual generado por Mario Torres Pejerrey
[31]
Función ENTNEXT : Obtiene entidades por orden de creación
Esta función obtiene el nombre de la primera entidad dibujada que sigue a aquella cuyo nombre se especifica. Si no se
especifica ningún nombre devuelve la primera entidad dibujada.
La función externa “dl” nos permite dibujar varias líneas.
(defun dl()
(setvar "cmdecho" 0)
(setq p1(list 0 0))
(princ "Dibuje líneas que serán cambiadas de color.")
(while p1
(if (setq p1(getpoint "\nPunto inicial [ENTER para terminar]: "))
(progn
(setq p2 (getpoint p1 "\nPunto final: "))
(command "Line" p1 p2 "")
(setvar "cmdecho" 1)
)
)
)
)
La nuevo comando “enx” obtiene le nombre de la primera entidad creada y luego obtiene el resto por orden de creación y les
cambia de color.
(defun c:enx()
(dl)(setvar "cmdecho" 0)
(setq ent(ENTNEXT))
(command "change" ent "" "p" "c" "6" "")
(while ent
(if (setq ent(ENTNEXT ent))
(progn
(command "change" ent "" "p" "c" "6" "")
)
)
)
(setvar "cmdecho" 1)
(princ)
)
Función ENTGET : Obtener estructura de una entidad
Esta función obtiene una lista con sublistas asociadas que conforman la estructura de una entidad seleccionada con
ENTLAST, ENTSEL, etc.
(DEFUN C:Sel()
(lin)(princ "La estructura de la entidad seleccionada es\n:")
(setq ent(ENTGET(entlast)))
(princ ent) (princ)
)
(DEFUN C:Sen()
(setq sel(entsel "\nSeleccione la entidad dibujada: "))
(setq noment(car sel))
;Obtenemos el nombre de la entidad.
(setq ent(ENTGET noment))
(princ "\nLa estructura de la entidad seleccionada es\n:")
(princ ent)
(princ)
)
AutoCAD, AutoLISP, - Manual generado por Mario Torres Pejerrey
[32]
Función ENTDEL : Borrar o recuperar entidad
Nos permite borrar una entidad indicada o recuperarla en cualquier después de haber sido borrada. No se podrá
recuperar si es que se sale de la sesión del dibujo.
(defun c:entd()
(lin)(setq ent (entlast))
(ENTDEL ent) (princ “Se borró”)
(princ)
)
(defun c:entd2()
(ENTDEL ent) (Princ “Recuperó”)
(princ)
)
El comando entd borra la linea dibujada y luego la recupera con el comando ent2.
Función ENTMOD : Actualizar lista en pantalla
Actualiza en pantalla una entidad después de haber sido objeto de una sustitución de listas mediante la función SUBST.
(defun c:mod()
(setq ent(entsel "Seleccione un texto: "))
(setq ent(car ent)) (setq ent(entget ent))
(setq nent(subst (cons 40 5)(ASSOC 40 ent)ent))
(ENTMOD nent)
(princ)
)
El ejemplo anterior cambia la altura actual del texto por una nueva altura de 5.0.
Función ENTMAKE : Crear una entidad
Permite crear una entidad en el dibujo mediante una lista de su estructura. Si la lista es correcta crea la entidad de lo
contrario devuelve nil. Esta lista debe contener todos los códigos necesarios que componen la nueva entidad a crear como son
la altura, punto inicial, final dependiendo del tipo a crear; si se omite alguno produce error. La mejor manera de crear una
entidad es obteniendo la estructura de una entidad ya existente copiarla y luego modificarla.
(defun c:ct()
(ENTMAKE '((0 . "TEXT")
(8 . "0")
(10 97.4767 157.521 0.0)
(40 . 2.5)
(1 . "CAZMTP")
(50 . 0.0)
(41 . 1.0)
(51 . 0.0)
(7 . "Standard")
(71 . 0)
(72 . 0)
(73 . 0)
(11 0.0 0.0 0.0))
:Tipo de entidad.
:Capa de la entidad.
:Punto de inserción.
:Altura del texto.
:Contenido.
:Angulo de rotación.
:Width Factor.
:Angulo de oblicuidad.
:Estilo para el texto.
:Simetría de texto: 2=Mira hacia atrás.
4=Mira hacia arriba.
:Justificación horizontal del texto.
1=Centrado, 2=Derecho, 3=Alineado,4=Medio,
5=Ajustado.
:Justificación vertical: 0=Base, 1=Inferior,
2=Medio, 3=Superior.
:Punto de alineación del texto tiene sentido,
cuando el grupo 72 es igual a 3 ó 5.
)
(princ)
)
AutoCAD, AutoLISP, - Manual generado por Mario Torres Pejerrey
[33]
Función TBLNEXT : Leer estructura de entidad no gráfica
Devuelve la estructura de las entidad no gráficas (Tablas de símbolos), especificado. El tipo debe ser “LAYER”,
“LTYPE”, ‘STYLE’, ‘BLOCK’, ‘VIEW’, “UCS”, “VPORT”, “DIMSTYLE”, que son los únicos admitidos, esta función
devuelve la primera entidad no gráfica del tipo especificado, luego devuelve el resto a medida que nuevamente se llama a la
función.
Para ver el contenido de un número determinado de capas se llama se llama a TBLNEXT las veces que sea necesario,
si nos existen mas capas que mostrar devuelve nil.
(TBLNEXT "Layer")
Función TBLSEARCH : Leer estructura de entidad no gráfica
Devuelve la estructura de las entidad no gráficas (Tablas de símbolos), especificado, pero una en particular
especificando el nombre. Los tipos deben ser los mismos que para TBLNEXT y adicional un nombre que identifica al tipo.
(TBLSEARCH "Layer" "Muros")
Mostrará la estructura de la capa Muros.
AutoCAD, AutoLISP, - Manual generado por Mario Torres Pejerrey
[34]
OCTAVA CLASE
SELECCIÓN DE OBJETOS MULTIPLES
Función SSGET : Seleccionar un conjunto de entidades
Solicita la designación de un conjunto de entidades. Si no se especifica un modo se solicita al usuario una designación
completa.
(defun c:ss()
(setq ents (SSGET))
(command "change" ents "" "p" "c" "5" "")
(princ)
)
Se puede crear un filtro de elementos mediante el modo “X”, este modo evalúa una condición dada y selecciona las
entidades que cumplan con esa condición.
(defun c:ssx()
(if (setq ents(SSGET "X" (list(cons 0
(command "change" ents "" "p" "c"
)
(if (setq ents(SSGET "X" (list(cons 0
(command "change" ents "" "p" "c"
)
(princ)
)
"CIRCLE"))))
"3" "")
"TEXT")(cons 62 1))))
"4" "")
La primera selección busca todas las entidades del tipo “CIRCLE” (círculos), y la segunda busca textos que tengan el
color 1 (rojo).
También se puede crear un filtro con operadores.
(SSGET “X” (list(cons 0 “TEXT”) (cons –4 “<=”) (cons 40 5)))
El ejemplo anterior se busca textos cuya altura sea menor o igual que 5.
Para indicar el operador se utiliza el código “-4”.
Función SSLENGTH : Número de entidades de un conjunto
Devuelve el número de entidades que tiene una selección indicada.
(defun c:be()
(if (setq ents(SSGET "X" (list(cons 0 "TEXT"))))
(progn
(setq num(SSLENGTH ents))
(setq num (rtos num 2 2))
(princ "\nEl número de entidades de la selección es: ")
(princ num)
)
)
(princ)
)
AutoCAD, AutoLISP, - Manual generado por Mario Torres Pejerrey
[35]
Función SSNAME : Nombre de entidad en conjunto
Devuelve el nombre de una entidad en particular de un conjunto especificado, para referirse a la entidad debe ingresar
un número que será tomando un índice. Este índice empieza desde 0, es decir que para referirse a la 5ta entidad seleccionada se
debe ingresar el índice 4.
(defun c:ba()
(if (setq ents(ssget "X" (list(cons 0 "TEXT"))))
(progn
(setq numt(sslength ents)) (setq n 0)
(repeat numt
(setq ent(SSNAME ents n))
(setq ent(entget ent))
(setq nent(subst (cons 40 5)(ASSOC 40 ent)ent))
(entmod nent)
(setq n(+ n 1))
)
)
)
(princ)
)
Función SSADD : Añadir una entidad a un conjunto
Adiciona una entidad especificada a un conjunto de selección existente.
(defun c:ad()
(if (setq ents(SSGET "X" (list(cons 0 "CIRCLE"))))
(progn
(setvar "cmdecho" 0)
(command "line" "0,0" "400,400" "")
(setq ents(SSADD (entlast) ents))
(command "change" ents "" "p" "c" "3" "")
(setvar "cmdecho" 1)
)
)
(princ)
)
Función SSDEL : Quitar de la selección una entidad
Remueve una entidad indicada de la selección, para eso se debe indicar el nombre. Si la entidad no existe devuelve nil.
(defun c:rm()
(if (setq ents(ssget "X" (list(cons 0 "CIRCLE"))))
(progn
(setvar "cmdecho" 0)
(setq ent(SSDEL (entlast) ents))
(command "change" ents "" "p" "c" "5" "")
(setvar "cmdecho" 1)
)
)
(princ)
)
AutoCAD, AutoLISP, - Manual generado por Mario Torres Pejerrey
[36]
Descargar