Top Banner
A A u u t t o o C C A A D D , , A A u u t t o o L L I I S S P P , , - - M M a a n n u u a a l l d d e e s s c c a a r r g g a a d d o o d d e e s s d d e e h h t t t t p p : : / / / / w w w w w w . . c c o o n n s s t t r r u u c c g g e e e e k k . . c c o o m m / / [1] C C u u r r s s o o p p r r á á c c t t i i c c o o d d e e p p r r o o g g r r a a m m a a c c i i ó ó n n c c o o n n A A u u t t o o l l i i s s p p Elaborado por Mario Torres Pejerrey http://www.construcgeek.com/
36

Curso Practico de AutoLisp

Jan 20, 2016

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Curso Practico de AutoLisp

AAuuttooCCAADD,, AAuuttooLLIISSPP,, -- MMaannuuaall ddeessccaarrggaaddoo ddeessddee hhttttpp::////wwwwww..ccoonnssttrruuccggeeeekk..ccoomm//

[1]

CCuurrssoo pprrááccttiiccoo ddee pprrooggrraammaacciióónn ccoonn AAuuttoolliisspp

EEllaabboorraaddoo ppoorr MMaarriioo TToorrrreess PPeejjeerrrreeyy http://www.construcgeek.com/

Page 2: Curso Practico de AutoLisp

AAuuttooCCAADD,, AAuuttooLLIISSPP,, -- MMaannuuaall ddeessccaarrggaaddoo ddeessddee hhttttpp::////wwwwww..ccoonnssttrruuccggeeeekk..ccoomm//

[2]

Page 3: Curso Practico de AutoLisp

AAuuttooCCAADD,, AAuuttooLLIISSPP,, -- MMaannuuaall ddeessccaarrggaaddoo ddeessddee hhttttpp::////wwwwww..ccoonnssttrruuccggeeeekk..ccoomm//

[3]

IINNTTRROODDUUCCCCIIOONN

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.

PPRRIIMMEERRAA CCLLAASSEE

Page 4: Curso Practico de AutoLisp

AAuuttooCCAADD,, AAuuttooLLIISSPP,, -- MMaannuuaall ddeessccaarrggaaddoo ddeessddee hhttttpp::////wwwwww..ccoonnssttrruuccggeeeekk..ccoomm//

[4]

EELL EENNTTOORRNNOO DDEE DDEESSAARRRROOLLLLOO VVIISSUUAALL LLIISSPP

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.

Page 5: Curso Practico de AutoLisp

AAuuttooCCAADD,, AAuuttooLLIISSPP,, -- MMaannuuaall ddeessccaarrggaaddoo ddeessddee hhttttpp::////wwwwww..ccoonnssttrruuccggeeeekk..ccoomm//

[5]

EEddiittoorr ddee AAuuttooLLIISSPP El editor de AutoLISP: Visual LISP de AutoCAD presenta el siguiente aspecto:

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.

Barra de Menús Barras de Herramientas

Area de edición de programas

Ventana de información de Visual LISP Barra de Estado

Page 6: Curso Practico de AutoLisp

AAuuttooCCAADD,, AAuuttooLLIISSPP,, -- MMaannuuaall ddeessccaarrggaaddoo ddeessddee hhttttpp::////wwwwww..ccoonnssttrruuccggeeeekk..ccoomm//

[6]

BBaarrrraass ddee HHeerrrraammiieennttaass..--

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.

Page 7: Curso Practico de AutoLisp

AAuuttooCCAADD,, AAuuttooLLIISSPP,, -- MMaannuuaall ddeessccaarrggaaddoo ddeessddee hhttttpp::////wwwwww..ccoonnssttrruuccggeeeekk..ccoomm//

[7]

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.

Page 8: Curso Practico de AutoLisp

AAuuttooCCAADD,, AAuuttooLLIISSPP,, -- MMaannuuaall ddeessccaarrggaaddoo ddeessddee hhttttpp::////wwwwww..ccoonnssttrruuccggeeeekk..ccoomm//

[8]

CCRREEAACCIIOONN DDEE PPRROOGGRRAAMMAASS 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:

Page 9: Curso Practico de AutoLisp

AAuuttooCCAADD,, AAuuttooLLIISSPP,, -- MMaannuuaall ddeessccaarrggaaddoo ddeessddee hhttttpp::////wwwwww..ccoonnssttrruuccggeeeekk..ccoomm//

[9]

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) )

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.

En este ejemplo se está creando una variable llamada “mivar” yse le esta asignando un valor de tipo string (texto), luego con lafunción prompt indicamos que nos muestre el valor de dichavariable en la línea de comandos de AutoCAD.

Page 10: Curso Practico de AutoLisp

AAuuttooCCAADD,, AAuuttooLLIISSPP,, -- MMaannuuaall ddeessccaarrggaaddoo ddeessddee hhttttpp::////wwwwww..ccoonnssttrruuccggeeeekk..ccoomm//

[10]

AACCCCEESSOO YY CCRREEAACCIIOONN DDEE LLIISSTTAASS 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.

SSEEGGUUNNDDAA CCLLAASSEE

Page 11: Curso Practico de AutoLisp

AAuuttooCCAADD,, AAuuttooLLIISSPP,, -- MMaannuuaall ddeessccaarrggaaddoo ddeessddee hhttttpp::////wwwwww..ccoonnssttrruuccggeeeekk..ccoomm//

[11]

SSOOLLIICCIITTAARR DDAATTOOSS AALL UUSSUUAARRIIOO 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) )

Page 12: Curso Practico de AutoLisp

AAuuttooCCAADD,, AAuuttooLLIISSPP,, -- MMaannuuaall ddeessccaarrggaaddoo ddeessddee hhttttpp::////wwwwww..ccoonnssttrruuccggeeeekk..ccoomm//

[12]

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 No admite enter como respuesta. 2 No admite valor cero. 4 No admite valores negativos. 8 No verifica límites aunque estén activados. 32 Dibuja la línea o el rectángulo elásticos en forma discontinua. 128 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

Page 13: Curso Practico de AutoLisp

AAuuttooCCAADD,, AAuuttooLLIISSPP,, -- MMaannuuaall ddeessccaarrggaaddoo ddeessddee hhttttpp::////wwwwww..ccoonnssttrruuccggeeeekk..ccoomm//

[13]

BBLLOOQQUUEESS DDEE PPRROOGGRRAAMMAACCIIOONN

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 "Ingrese un valor:")) (setq v2(getreal "\nIngrese un segundo valor:")) (if (= v1 v2) (princ "Son valores iguales") (princ "Son valores diferentes") ) (princ) )

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) )

TTEERRCCEERRAA CCLLAASSEE

Page 14: Curso Practico de AutoLisp

AAuuttooCCAADD,, AAuuttooLLIISSPP,, -- MMaannuuaall ddeessccaarrggaaddoo ddeessddee hhttttpp::////wwwwww..ccoonnssttrruuccggeeeekk..ccoomm//

[14]

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) )

OOPPEERRAACCIIOONNEESS MMAATTEEMMAATTIICCAASS YY LLOOGGIICCAASS 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) )

Page 15: Curso Practico de AutoLisp

AAuuttooCCAADD,, AAuuttooLLIISSPP,, -- MMaannuuaall ddeessccaarrggaaddoo ddeessddee hhttttpp::////wwwwww..ccoonnssttrruuccggeeeekk..ccoomm//

[15]

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) )

Page 16: Curso Practico de AutoLisp

AAuuttooCCAADD,, AAuuttooLLIISSPP,, -- MMaannuuaall ddeessccaarrggaaddoo ddeessddee hhttttpp::////wwwwww..ccoonnssttrruuccggeeeekk..ccoomm//

[16]

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) )

Page 17: Curso Practico de AutoLisp

AAuuttooCCAADD,, AAuuttooLLIISSPP,, -- MMaannuuaall ddeessccaarrggaaddoo ddeessddee hhttttpp::////wwwwww..ccoonnssttrruuccggeeeekk..ccoomm//

[17]

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:

Page 18: Curso Practico de AutoLisp

AAuuttooCCAADD,, AAuuttooLLIISSPP,, -- MMaannuuaall ddeessccaarrggaaddoo ddeessddee hhttttpp::////wwwwww..ccoonnssttrruuccggeeeekk..ccoomm//

[18]

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) )

Page 19: Curso Practico de AutoLisp

AAuuttooCCAADD,, AAuuttooLLIISSPP,, -- MMaannuuaall ddeessccaarrggaaddoo ddeessddee hhttttpp::////wwwwww..ccoonnssttrruuccggeeeekk..ccoomm//

[19]

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) (setq tmi(STRCASE tm T)) ; Convierte a minúscula (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 "\nIngrese texto 1: ")) (setq t2(getstring "\nIngrese texto 2: ")) (setq t3(getstring "\nIngrese texto 3: "))

(setq st(STRCAT "Nueva cadena: " t1 t2 t3)) (princ st)

(princ) )

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)

)

CCUUAARRTTAA CCLLAASSEE

Page 20: Curso Practico de AutoLisp

AAuuttooCCAADD,, AAuuttooLLIISSPP,, -- MMaannuuaall ddeessccaarrggaaddoo ddeessddee hhttttpp::////wwwwww..ccoonnssttrruuccggeeeekk..ccoomm//

[20]

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)

)

Page 21: Curso Practico de AutoLisp

AAuuttooCCAADD,, AAuuttooLLIISSPP,, -- MMaannuuaall ddeessccaarrggaaddoo ddeessddee hhttttpp::////wwwwww..ccoonnssttrruuccggeeeekk..ccoomm//

[21]

CCOONNVVEERRSSIIOONN DDEE TTIIPPOO DDEE DDAATTOOSS 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)

Page 22: Curso Practico de AutoLisp

AAuuttooCCAADD,, AAuuttooLLIISSPP,, -- MMaannuuaall ddeessccaarrggaaddoo ddeessddee hhttttpp::////wwwwww..ccoonnssttrruuccggeeeekk..ccoomm//

[22]

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: ")) ;Valor de texto.

(setq nr(ATOI txt)) (princ nr)

(princ) )

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: ")) ;Valor de texto.

(setq nr(ATOF txt)) (princ nr)

(princ) )

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: ")) ;Valor de texto.

(setq nr(ANGTOF txt)) (princ nr)

(princ) )

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".

Page 23: Curso Practico de AutoLisp

AAuuttooCCAADD,, AAuuttooLLIISSPP,, -- MMaannuuaall ddeessccaarrggaaddoo ddeessddee hhttttpp::////wwwwww..ccoonnssttrruuccggeeeekk..ccoomm//

[23]

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).

OOPPEERRAACCIIOONNEESS CCOONN AARRCCHHIIVVOOSS

QQUUIINNTTAA CCLLAASSEE

Page 24: Curso Practico de AutoLisp

AAuuttooCCAADD,, AAuuttooLLIISSPP,, -- MMaannuuaall ddeessccaarrggaaddoo ddeessddee hhttttpp::////wwwwww..ccoonnssttrruuccggeeeekk..ccoomm//

[24]

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” Abre el archivo especificado como solo lectura. Si el archivo no existe devuelve nil. “w” Abre el archivo especificado para escritura. Si el archivo no existe la función OPEN primero lo crea. Si el

archivo existe, este método reemplaza al anterior. “a” 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) )

Page 25: Curso Practico de AutoLisp

AAuuttooCCAADD,, AAuuttooLLIISSPP,, -- MMaannuuaall ddeessccaarrggaaddoo ddeessddee hhttttpp::////wwwwww..ccoonnssttrruuccggeeeekk..ccoomm//

[25]

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” 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á.

“4” Permite abrir un archivo con extensión diferente a la especificada como por defecto. “8” 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" "MTPCAZ" "xls" 8)) (princ bs)

(princ) )

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) )

Page 26: Curso Practico de AutoLisp

AAuuttooCCAADD,, AAuuttooLLIISSPP,, -- MMaannuuaall ddeessccaarrggaaddoo ddeessddee hhttttpp::////wwwwww..ccoonnssttrruuccggeeeekk..ccoomm//

[26]

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) )

Page 27: Curso Practico de AutoLisp

AAuuttooCCAADD,, AAuuttooLLIISSPP,, -- MMaannuuaall ddeessccaarrggaaddoo ddeessddee hhttttpp::////wwwwww..ccoonnssttrruuccggeeeekk..ccoomm//

[27]

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

TIPO DE DATO

-1 El nombre de la entidad.

0 El tipo de entidad.

6 El nombre del tipo de línea. Si no aparece es BYLAYER.

7 El nombre del estilo de texto.

8 El nombre de capa.

39 El valor de altura de objeto. Si no aparece es 0.

62 El número de color. Si no aparece es BYLAYER.

210 El vector de orientación de la altura del objeto en 3D.

OTROS CODIGOS

TIPO DE DATO PARA UNA ENTIDAD VALOR

1 TEXTO, ATRIBUTO: Contenido de texto.

2 BLOQUE: Nombre, ATRIBUTO: Tag.

10 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.

11 LÍNEA: Punto final, TEXTO-ATRIBUTO: Punto de justificación, 3DFACE: Segundo vértice.

12 3DFACE: Tercer vértice.

13 3DFACE: Cuarto vértice.

40 ARCO-CIRCULO: Radio, TEXTO-ATRIBUTO: Altura de texto, POLILINEA: Grosor inicial.

41 TEXTO-ATRIBUTO: Factor proporción de texto, BLOQUE: Escala X, POLILINEA: Grosor final.

OTROS TIPO DE DATO PARA UNA ENTIDAD

SSEEXXTTAA CCLLAASSEE

Page 28: Curso Practico de AutoLisp

AAuuttooCCAADD,, AAuuttooLLIISSPP,, -- MMaannuuaall ddeessccaarrggaaddoo ddeessddee hhttttpp::////wwwwww..ccoonnssttrruuccggeeeekk..ccoomm//

[28]

CODIGOS VALOR

42 BLOQUE: Escala Y, POLILINEA: Factor curvatura de poliarc.

43 BLOQUE: Escala Y.

50 ARCO: Angulo de inicio, TEXTO-ATRIBUTO: Angulo de rotación, BLOQUE: Angulo de rotación, POLILINEA: Dirección tangente.

51 ARCO: Angulo final, TEXTO-ATRIBUTO: Angulo inclinación de estilo.

70 POLILINEA: Abierta o cerrada, BLOQUE: Número de columnas de Minsert. ATRIBUTO: Tipo (0: Normal, 1: Invisible, 2: Constante, 3: Verifi.

71 BLOQUE: Número de filas de Minsert, TEXTO-ATRIBUTO: Generación (0: Normal, 2: Reflejado, 4:Cabeza abajo.

72 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.

Page 29: Curso Practico de AutoLisp

AAuuttooCCAADD,, AAuuttooLLIISSPP,, -- MMaannuuaall ddeessccaarrggaaddoo ddeessddee hhttttpp::////wwwwww..ccoonnssttrruuccggeeeekk..ccoomm//

[29]

OOPPEERRAACCIIOONNEESS CCOONN LLIISSTTAASS 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.

Page 30: Curso Practico de AutoLisp

AAuuttooCCAADD,, AAuuttooLLIISSPP,, -- MMaannuuaall ddeessccaarrggaaddoo ddeessddee hhttttpp::////wwwwww..ccoonnssttrruuccggeeeekk..ccoomm//

[30]

(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) )

Page 31: Curso Practico de AutoLisp

AAuuttooCCAADD,, AAuuttooLLIISSPP,, -- MMaannuuaall ddeessccaarrggaaddoo ddeessddee hhttttpp::////wwwwww..ccoonnssttrruuccggeeeekk..ccoomm//

[31]

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) )

SSEEPPTTIIMMAA CCLLAASSEE

Page 32: Curso Practico de AutoLisp

AAuuttooCCAADD,, AAuuttooLLIISSPP,, -- MMaannuuaall ddeessccaarrggaaddoo ddeessddee hhttttpp::////wwwwww..ccoonnssttrruuccggeeeekk..ccoomm//

[32]

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) )

Page 33: Curso Practico de AutoLisp

AAuuttooCCAADD,, AAuuttooLLIISSPP,, -- MMaannuuaall ddeessccaarrggaaddoo ddeessddee hhttttpp::////wwwwww..ccoonnssttrruuccggeeeekk..ccoomm//

[33]

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() (defun c:entd2() (lin)(setq ent (entlast)) (ENTDEL ent) (Princ “Recuperó”)

(ENTDEL ent) (princ “Se borró”) (princ) (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") :Tipo de entidad. (8 . "0") :Capa de la entidad.

(10 97.4767 157.521 0.0) :Punto de inserción. (40 . 2.5) :Altura del texto. (1 . "CAZMTP") :Contenido. (50 . 0.0) :Angulo de rotación. (41 . 1.0) :Width Factor. (51 . 0.0) :Angulo de oblicuidad. (7 . "Standard") :Estilo para el texto. (71 . 0) :Simetría de texto: 2=Mira hacia atrás.

4=Mira hacia arriba. (72 . 0) :Justificación horizontal del texto.

1=Centrado, 2=Derecho, 3=Alineado,4=Medio, 5=Ajustado.

(73 . 0) :Justificación vertical: 0=Base, 1=Inferior, 2=Medio, 3=Superior.

(11 0.0 0.0 0.0)) :Punto de alineación del texto tiene sentido, cuando el grupo 72 es igual a 3 ó 5.

) (princ) )

Page 34: Curso Practico de AutoLisp

AAuuttooCCAADD,, AAuuttooLLIISSPP,, -- MMaannuuaall ddeessccaarrggaaddoo ddeessddee hhttttpp::////wwwwww..ccoonnssttrruuccggeeeekk..ccoomm//

[34]

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.

Page 35: Curso Practico de AutoLisp

AAuuttooCCAADD,, AAuuttooLLIISSPP,, -- MMaannuuaall ddeessccaarrggaaddoo ddeessddee hhttttpp::////wwwwww..ccoonnssttrruuccggeeeekk..ccoomm//

[35]

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 "CIRCLE")))) (command "change" ents "" "p" "c" "3" "") ) (if (setq ents(SSGET "X" (list(cons 0 "TEXT")(cons 62 1)))) (command "change" ents "" "p" "c" "4" "") ) (princ) ) 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) )

OOCCTTAAVVAA CCLLAASSEE

Page 36: Curso Practico de AutoLisp

AAuuttooCCAADD,, AAuuttooLLIISSPP,, -- MMaannuuaall ddeessccaarrggaaddoo ddeessddee hhttttpp::////wwwwww..ccoonnssttrruuccggeeeekk..ccoomm//

[36]

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) )