manual autolisp

20
5/16/2018 ManualAutoLISP-slidepdf.com http://slidepdf.com/reader/full/manual-autolisp-55ab520a5d455 1/20 Instructor:  Dadwin Zavala Bautista [email protected]  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. 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 identifica 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 módulo 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ú Herramientas > AutoLISP > Editor Visual LISP Teclear en la línea de comandos: VLISP o VLIDE Desde la cinta de opciones > Ficha Administrar > Panel Aplicaciones Alumno: Frec.: ______________ Horario: ____________ 

Upload: dadwin-zavala-bautista

Post on 18-Jul-2015

250 views

Category:

Documents


7 download

TRANSCRIPT

Page 1: Manual AutoLISP

5/16/2018 Manual AutoLISP - slidepdf.com

http://slidepdf.com/reader/full/manual-autolisp-55ab520a5d455 1/20

Instructor: Dadwin Zavala Bautista [email protected]  

EL ENTORNO DE DESARROLLO VISUAL LISP Visual LISP (VLISP) representa una renovación de LISP para AutoCAD, actualizándolo para incluir prestacionesque ya son normales en los modernos dialectos de LISP que se ajustan a la normativa COMMON LISP. Aún sinllegar a ser totalmente compatible con esta normativa, es significativo el incremento de su potencia como lenguajede programación.

Como herramienta de desarrollo se aporta un Entorno de Desarrollo Integrado (IDE) que incluye un compilador yvarias 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 pantallagráfica de AutoCAD.

Editor de Programación que emplea la codificación por color para LISP y DCL, así como otras característicasde apoyo sintáctico.

Formateo LISP automático que redistribuye las líneas de código y las identifica para facilitar la lectura de losprogramas.

Amplias características de Inspección y Vigilancia (Watch) que permiten el acceso en tiempo real a los valoresde las expresiones y las variables, y que pueden ser empleadas tanto para datos LISP como para objetosgráficos de AutoCAD.

Ayuda sensible al contexto sobre las funciones AutoLISP y una ventana Apropos para búsqueda de nombresde símbolos.

Sistema de Administración de Proyectos que facilitan el mantenimiento de aplicaciones con múltiples ficherosfuente.

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 LISPPara cargar el módulo de Visual LISP, debe haberse iniciado una sesión de AutoCAD. Esta sesión puede contenersó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ú Herramientas > AutoLISP > Editor VisualLISP

Teclear en la línea de comandos: VLISP o VLIDE Desde la cinta de opciones > Ficha Administrar > Panel

Aplicaciones

Alumno:

Frec.: ______________ 

Horario: ____________ 

Page 2: Manual AutoLISP

5/16/2018 Manual AutoLISP - slidepdf.com

http://slidepdf.com/reader/full/manual-autolisp-55ab520a5d455 2/20

Programa Nacional de Informática  – C.F.P. HUANCAYO 

Instructor: Dadwin Zavala Bautista [email protected]  

Editor de AutoLISPEl editor de AutoLISP: Visual LISP de AutoCAD presenta el siguiente aspecto:

Barra de Menús: Contiene comandos y otros procedimientos que se pueden realizar sobre los componentes delprograma o el código editado.

Barra de Herramientas: Presenta una serie de iconos que representan de una manera interactiva todos loscomandos y órdenes de Visual LISP.

Área de edición de programas: Es el área donde se escribe el código de los programas.

Ventana de información de Visual LISP: Situada en la parte inferior en la cual podemos también escribir códigoy además nos muestra información acerca de la carga de los programas como por ejemplo: su integridadsintáctica.

Barras de Herramientas.-Visual LISP dispone de cinco Barras de Herramientas que pueden activarse/desactivarse desde el menú Ver >Barras de herramientas que abre el siguiente diálogo:

Estas cinco Barras de Herramientas contienen las opciones o comandosesenciales del IDE, facilitando el acceso a los mismos.

Estándar:

Contiene las herramientas usuales de Crear Nuevo, Abrir, Guardar,Imprimir, Cortar, Copiar, Pegar, Deshacer, Rehacer y por último unacceso a la función Apropos que sirve para completar el texto buscandouna correlación de una subcadena con nombres de funciones, etc.

Barra de Menús Barras de Herramientas 

Área de Edición de Programas

Ventana de Información de Visual LISP Barra de Estado 

Page 3: Manual AutoLISP

5/16/2018 Manual AutoLISP - slidepdf.com

http://slidepdf.com/reader/full/manual-autolisp-55ab520a5d455 3/20

Programa Nacional de Informática  – C.F.P. HUANCAYO 

Instructor: Dadwin Zavala Bautista [email protected]  

Búsqueda:

Incluye las funciones de Buscar, Buscar y Reemplazar. Además una casilla de lista desplegable donde se guardanlos términos anteriormente buscados durante la sesión de trabajo, lo que permite repetir una búsqueda con másfacilidad, cosa que se hace con la herramienta situada a la derecha de la casilla. Por último incluye una serie deherramientas para navegar dentro del texto mediante marcadores, que se introducen con la herramienta de laizquierda, se avanza o retrocede con las dos siguientes y se eliminan con la última.

Herramientas:

La barra Tools (Herramientas) opera sólo con la ventana del Editor activa. Sus funciones son, de izquierda aderecha: 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 loseleccionado. Para formatear el texto se utilizan los próximos dos botones, el primero para todo el editor y elsegundo sólo para el texto seleccionado. Los dos siguientes botones sirven para marcar como comentario el textoseleccionado o para desmarcarlo. Y por supuesto, el último se trata de la Ayuda en línea.

Depurar:

Los tres primeros botones de esta barra determinan la acción al encontrar un punto de ruptura durante laevaluación. El primero entra en las expresiones anidadas posteriores al punto de ruptura, evaluándolas desde lamás interior. El segundo evalúa esta expresión y se detiene antes de la siguiente para de nuevo decidir si sequiere entrar a evaluar las expresiones anidadas. El tercer botón continúa hasta el final de la función en curso yentonces 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 deejecució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 delprograma se utilizan para examinar los valores asumidos por las variables, cambiarlos si es preciso, etc. El primerbotó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 seproducen varios errores durante la depuración) y pasar al nivel de más arriba. Y el tercer botón (Reset) pasa elcontrol 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 permiteañadir un nuevo punto de ruptura en el programa, situado en la posición actual del cursor. El segundo botón (AddWatch) da acceso al diálogo que permite seleccionar un nombre de variable para observar sus resultados durantela 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 sedetecta 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 seencuentra antes o después de la expresión.

VER:

El primer botón sirve para poner en primer plano la ventana de aplicación de AutoCAD. El segundo botón abre unmenú 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 derfácil localizar aquello que queremos.

Page 4: Manual AutoLISP

5/16/2018 Manual AutoLISP - slidepdf.com

http://slidepdf.com/reader/full/manual-autolisp-55ab520a5d455 4/20

Programa Nacional de Informática  – C.F.P. HUANCAYO 

Instructor: Dadwin Zavala Bautista [email protected]  

El tercer botón traslada el foco a la Consola de Visual LISP. El siguiente permite activar la característica deInspección (Inspect). Inspect permite examinar y modificar objetos AutoLISP así como AutoCAD. La herramientaInspect 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. Bastedecir que nos permite acceder a la memoria de pila donde se guardan las llamadas a función. Puede invocarse enun momento de suspensión en la ejecución de un programa y permite mediante un menú contextual acceder adatos 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 dedepuración relacionadas con símbolos. Podemos resaltar cualquier nombre de símbolo en el Editor y al pulsarsobre este botón se abrirá la ventana Symbol Service donde se muestra el valor vinculado. Este valor se puedecambiar directamente en esta ventana. Además tiene una barra de herramientas que permiten otros procesos conel símbolo seleccionado.

El siguiente botón permite abrir la ventana Apropos que describimos en detalle más adelante Y por último un botónque permite acceder a la ventana Watch.

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ónde 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 nombredel programa, argumentos e instrucciones en AutoLISP.

Las funciones de usuario cuyo nombre está formado con el prefijo C: es considerado por AutoCAD como un nuevocomando 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 consideracomo un nuevo comando de AutoCAD por contar con el prefijo C:. Se debe tener muy en cuenta la organizaciónde 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:

Page 5: Manual AutoLISP

5/16/2018 Manual AutoLISP - slidepdf.com

http://slidepdf.com/reader/full/manual-autolisp-55ab520a5d455 5/20

Programa Nacional de Informática  – C.F.P. HUANCAYO 

Instructor: Dadwin Zavala Bautista [email protected]  

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 evitarque se visualice nil se puede utilizar antes del último paréntesis la función PRINC. Princ y prompt permiten hacerlo 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:

Función SETQ : Crear variables y atribuir valores

Esta función nos permite crear una variable y atribuirle un valor específico.

(DEFUN C:mca()

(setq mivar “MTPCAZ”) 

(prompt mivar)

(princ)

)

En este ejemplo se está creando una variable llamada “mivar” y se le está 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 deAutoCAD.

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 unespacio 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 yentre 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 nuevavariable, 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”. 

Page 6: Manual AutoLISP

5/16/2018 Manual AutoLISP - slidepdf.com

http://slidepdf.com/reader/full/manual-autolisp-55ab520a5d455 6/20

Programa Nacional de Informática  – C.F.P. HUANCAYO 

Instructor: Dadwin Zavala Bautista [email protected]  

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 nombresde los comandos, las opciones (datos) y las variables de AutoCAD deben de ir entre comillas; pero no lasvariables creadas en AutoLISP.

(DEFUN C: ibe()

(command "line" "0,0,0" "10,10" "")

(command "zoom" "e")

(princ)

)

Las comillas que se encuentran solas significan presionar ENTER.

La primera instrucción de comando indica a AutoCAD que genere una línea desde la coordenada 0,0,0 hasta lacoordenada 10,10.

La segunda instrucción de comando le indica a AutoCAD que realice un zoom extents.

 ACCESO Y CREACION DE LISTAS

Función CAR : Primer elemento de una listaObtiene 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 listaObtiene 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 listaObtiene 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

Page 7: Manual AutoLISP

5/16/2018 Manual AutoLISP - slidepdf.com

http://slidepdf.com/reader/full/manual-autolisp-55ab520a5d455 7/20

Programa Nacional de Informática  – C.F.P. HUANCAYO 

Instructor: Dadwin Zavala Bautista [email protected]  

Función LIST : Crear lista de valoresEsta 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.

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 elteclado o picando un punto en pantalla.

Adicionalmente se puede indicar un mensaje solicitando el ingreso de un punto, éste mensaje aparecerá en lalínea de comandos de AutoCAD.

(defun C:ip()(setvar "cmdecho" 0)(setq op(GETPOINT "Pique 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: 0desactiva 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, ejem.: 321.5 (decimal) se visualiza un mensaje de error y sesolicita 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 unnúmero entero y se obtiene con su decimal, eje: 25 obtiene 25.0

Page 8: Manual AutoLISP

5/16/2018 Manual AutoLISP - slidepdf.com

http://slidepdf.com/reader/full/manual-autolisp-55ab520a5d455 8/20

Programa Nacional de Informática  – C.F.P. HUANCAYO 

Instructor: Dadwin Zavala Bautista [email protected]  

(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 puntoen pantalla por el usuario.

(defun C:od()(setq d1(GETDIST "Pike o ingrese el punto inicial:"))(princ "\nDistancia = ")(princ d1)(princ))

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

Page 9: Manual AutoLISP

5/16/2018 Manual AutoLISP - slidepdf.com

http://slidepdf.com/reader/full/manual-autolisp-55ab520a5d455 9/20

Programa Nacional de Informática  – C.F.P. HUANCAYO 

Instructor: Dadwin Zavala Bautista [email protected]  

Función GETKWORD : Solicitar palabras clave

Permite ingresar al usuario palabras clave o abreviaturas ante una serie de opciones o alternativas. Lasrespuestas posibles se deben especificar previamente con la función INITGET, si se ingresa palabras clavediferentes 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 

BLOQUES DE PROGRAMACION

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 esdiferente 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 más..") )

)(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 secumple una condición o no.

Page 10: Manual AutoLISP

5/16/2018 Manual AutoLISP - slidepdf.com

http://slidepdf.com/reader/full/manual-autolisp-55ab520a5d455 10/20

Programa Nacional de Informática  – C.F.P. HUANCAYO 

Instructor: Dadwin Zavala Bautista [email protected]  

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

Función WHILE : Repetir expresión según condiciónEsta función permite repetir acciones mientras se cumpla una condición dada que sirve como elemento de controlde la repetitiva.Mientras la condición se cumpla o sea verdadera (T)todas las acciones se ejecutan, hasta que la condición resultefalsa (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 LOGICASFunción + : MasEsta 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 - : MenosEsta 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 11: Manual AutoLISP

5/16/2018 Manual AutoLISP - slidepdf.com

http://slidepdf.com/reader/full/manual-autolisp-55ab520a5d455 11/20

Programa Nacional de Informática  – C.F.P. HUANCAYO 

Instructor: Dadwin Zavala Bautista [email protected]  

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 / : DividirDevuelve 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))

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)

)

Page 12: Manual AutoLISP

5/16/2018 Manual AutoLISP - slidepdf.com

http://slidepdf.com/reader/full/manual-autolisp-55ab520a5d455 12/20

Programa Nacional de Informática  – C.F.P. HUANCAYO 

Instructor: Dadwin Zavala Bautista [email protected]  

Función AND: Y lógicoDevuelve 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ógicoDevuelve verdadero si una expresión de un conjunto dado es verdadera. Es suficiente que se cumpla unaexpresió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))

Función NOT: No lógicoDevuelve 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 AbsolutoDevuelve 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))

Page 13: Manual AutoLISP

5/16/2018 Manual AutoLISP - slidepdf.com

http://slidepdf.com/reader/full/manual-autolisp-55ab520a5d455 13/20

Programa Nacional de Informática  – C.F.P. HUANCAYO 

Instructor: Dadwin Zavala Bautista [email protected]  

Función SQRT : Raíz CuadradaDevuelve 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 : ExponenteDevuelve el resultado de elevar a una potencia específica 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 puntosEsta función obtiene el ángulo que se determina mediante dos puntos: El ángulo se determina de la siguientemanera: Se toma como línea imaginaria base, el eje X y como siguiente línea imaginaria, el punto inicial y el puntofinal 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 puntosEsta 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 14: Manual AutoLISP

5/16/2018 Manual AutoLISP - slidepdf.com

http://slidepdf.com/reader/full/manual-autolisp-55ab520a5d455 14/20

Programa Nacional de Informática  – C.F.P. HUANCAYO 

Instructor: Dadwin Zavala Bautista [email protected]  

CONTROL DE CADENAS DE TEXTO

Función STRCASE : Cambiar a Mayúsculas o MinúsculasEsta función cambia una cadena específica en mayúsculas o minúsculas dependiendo del valor de una opción. Sila opción está presente (T), la cadena de texto se convierte en minúscula o de lo contrario se convierte enmayú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 convalor 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 deinicio 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

" Carácter 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 cadenasconcatenadas.

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

Page 15: Manual AutoLISP

5/16/2018 Manual AutoLISP - slidepdf.com

http://slidepdf.com/reader/full/manual-autolisp-55ab520a5d455 15/20

Programa Nacional de Informática  – C.F.P. HUANCAYO 

Instructor: Dadwin Zavala Bautista [email protected]  

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 devuelveverdadero (T), en caso contrario nil.

Para construir un filtro es necesario un conjunto de caracteres especiales o comodines que deberán estar dentrode 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 eltexto 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 carácter.

- Busca si la cadena no contiene una letra especificada. (WCMATCH “Barco” “-*q*”) T. 

Función ALERT : Cuadro de mensajeMuestra un cuadro de mensaje con el texto especificado. Se pueden escribir varias líneas de texto incluyendo elcódigo “ \ n” antes de la nueva línea.

(DEFUN C:al()(ALERT "Bienvenidos al Curso de AutoLISP\nProfesor:

 \nMario Torres Pejerrey")(PRINC))

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

Page 16: Manual AutoLISP

5/16/2018 Manual AutoLISP - slidepdf.com

http://slidepdf.com/reader/full/manual-autolisp-55ab520a5d455 16/20

Programa Nacional de Informática  – C.F.P. HUANCAYO 

Instructor: Dadwin Zavala Bautista [email protected]  

Función ITOA : Convertir un número ENTERO en valor TEXTOConvierte 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 TEXTOConvierte un número real (con decimales) especificado, en una cadena de texto. Además se le debe especificardos 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 deunidades 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 debeespecificar dos argumentos que son el formato de modo y precisión del nuevo valor.

(defun C:ca()(setq ne (getangle "\nIngrese un ángulo 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)

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

)

Page 17: Manual AutoLISP

5/16/2018 Manual AutoLISP - slidepdf.com

http://slidepdf.com/reader/full/manual-autolisp-55ab520a5d455 17/20

Programa Nacional de Informática  – C.F.P. HUANCAYO 

Instructor: Dadwin Zavala Bautista [email protected]  

Función ATOF : Convertir un TEXTO en número REALConvierte un texto especificado en un número real. Si el número con valor de texto contiene decimales oadicionalmente 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 ANGULOConvierte un texto especificado en un ángulo. Si el número con valor de texto contiene decimales oadicionalmente 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 otroConvierte el valor especificado de un tipo de unidad especificada a otro tipo de unidad especificada. Las unidadesse 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".

VERIFICACION DE VALORES

Función LISTP : Detectar una listaVerifica 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)

)

Page 18: Manual AutoLISP

5/16/2018 Manual AutoLISP - slidepdf.com

http://slidepdf.com/reader/full/manual-autolisp-55ab520a5d455 18/20

Programa Nacional de Informática  – C.F.P. HUANCAYO 

Instructor: Dadwin Zavala Bautista [email protected]  

Función MINUSP : Detectar valor numérico negativoVerifica 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 0Verifica 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 nuloVerifica 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 ARCHIVOSFunció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 noestar en un directorio de trabajo de AutoCAD, el nombre del archivo y la extensión del mismo y luego un modo queindicará 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))

Page 19: Manual AutoLISP

5/16/2018 Manual AutoLISP - slidepdf.com

http://slidepdf.com/reader/full/manual-autolisp-55ab520a5d455 19/20

Programa Nacional de Informática  – C.F.P. HUANCAYO 

Instructor: Dadwin Zavala Bautista [email protected]  

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 paraque 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 enel cuadro de diálogo Options. Si no lo encuentra devuelve nil, de lo contrario devuelve la ruta completa de esearchivo.Si se desea averiguar si existe o no un archivo en una ruta especificada basta con ingresar FINDFILE seguido dela ruta de acceso.

(defun c:fn()(setq bs (FINDFILE "MTPCAZ.xls"))(princ bs)

(princ))

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 delnombre de la función GETFILED se debe especificar el título del cuadro de diálogo, el nombre de archivo pordefecto, 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 deadvertencia 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 textoEscribe un texto en pantalla si no se especifica un archivo, de lo contrario crea un a línea de texto en dichoarchivo; 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))

Page 20: Manual AutoLISP

5/16/2018 Manual AutoLISP - slidepdf.com

http://slidepdf.com/reader/full/manual-autolisp-55ab520a5d455 20/20

Programa Nacional de Informática  – C.F.P. HUANCAYO 

Instructor: Dadwin Zavala Bautista [email protected]  

Función PRINT : Escribir texto en una nueva líneaFunció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))

Función READ-LINE : Leer una línea de textoLee una línea de texto desde un archivo y devuelve el valor. Si se sigue llamando a READ-LINE, continúa leyendolas 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 textoEscribe una nueva línea en el archivo. Se diferencia de PRINT porque la nueva línea creada en el archivo no llevacomillas.

(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 textoVisualiza 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áficaCambia a la pantalla gráfica de AutoCAD.

(defun c:ag()(GRAPHSCR)(princ "Cambio a pantalla gráfica.")

(princ))