Frec.: ______________ Horario: ____________
Alumno:
EL ENTORNO DE D E 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 d e 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
Instructor: Dadwin Zavala Bautista
[email protected]
Programa Nacional de Informática – C.F.P. HUANCAYO
Editor de AutoLISP El editor de AutoLISP: Visual LISP de AutoCAD presenta pres enta el siguiente aspecto:
Barras de Herramientas
Barra de Menús
Área de Edición de Programas
Barra de Estado
Ventana de Información de Visual LISP
Barra de Menús: Contiene comandos y otros procedimientos que se pueden realizar sobre los componentes del programa o el código editado. Barra de Herramientas: Presenta una serie de iconos que representan de una manera interactiva todos los comandos 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ódigo y además nos muestra información acerca de la carga de los programas como por ejemplo: su integridad sintá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 comandos esenciales 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 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. Instructor: Dadwin Zavala Bautista
[email protected]
Programa Nacional de Informática – C.F.P. HUANCAYO
Búsqueda: 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 búsqueda 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. Herramientas:
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. Depurar: 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. VER:
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 aquello que queremos.
Instructor: Dadwin Zavala Bautista
[email protected]
Programa Nacional de Informática – C.F.P. HUANCAYO
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.
CREACION DE PROGRAMAS Estructura de un archivo AutoLISP Sabemos que un archivo “.lsp” se compone de listas y símbolos cuyos objetos son los siguientes:
Lista: Que contiene: Paréntesis de apertura, espacios y paréntesis de cierre que constituyen el límite de acción de los programas. Elemento: Cualquier componente de una lista. Símbolo: Elementos sin un valor concreto como una variable. Enteros: Valores numéricos sin punto decimal. Reales: Valores numéricos con punto decimal. Cadenas: Valores de texto que deben de ir entre comillas.
Es importante que se conozcan los nombres de las variables de AutoCAD y los valores que se le pueden asignar, ya que puede ser de mucha utilidad. Función DEFUN: Definir Función de Usuario Para establecer un nuevo programa como estructura en necesario definir sus elementos, como lo son el nombre del programa, argumentos e instrucciones en AutoLISP. Las funciones de usuario cuyo nombre está formado con el prefijo C: es considerado por AutoCAD como un nuevo comando el cual puede ser llamado en cualquier momento, si se omite se genera una función externa que puede ser llamada desde otra función. (DEFUN C:curso() (PROMPT “Bienvenidos al Curso de AutoLISP”) )
Aquí DEFUN indica una nueva función de usuario, la cual va a tener como nombre curso y que va a ser considera como un nuevo comando de AutoCAD por contar con el prefijo C:. Se debe tener muy en cuenta la organización de los paréntesis ya que el número de los paréntesis abiertos debe de ser igual al número de paréntesis cerrados. Al escribir curso en la barra de comandos de AutoCAD, se mostrará lo siguiente: Command: curso Bienvenidos al Curso de AutoLISPnil Command:
Instructor: Dadwin Zavala Bautista
[email protected]
Programa Nacional de Informática – C.F.P. HUANCAYO
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 m ostrará 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) )
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 de AutoCAD. En este ejemplo se está creando una variable llamada “mivar” y
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) ) 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 “ca”
(5). Por lo tanto el valor de ca es “5”.
Instructor: Dadwin Zavala Bautista
[email protected]
Programa Nacional de Informática – C.F.P. HUANCAYO
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) )
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 la coordenada 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 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) )
Instructor: Dadwin Zavala Bautista
Se obtendrá: 20
[email protected]
Programa Nacional de Informática – C.F.P. HUANCAYO
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.
SOLICITAR DATOS AL USUARIO Función GETPOINT : Ingresar un punto La función GETPOINT obtiene y almacena las coordenadas X,Y,Z. de un punto, el cual se ingresa mediante el teclado o picando 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 "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: 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, ejem.: 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 su decimal, eje: 25 obtiene 25.0 Instructor: Dadwin Zavala Bautista
[email protected]
Programa Nacional de Informática – C.F.P. HUANCAYO
(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) ) Función GETSTRING : Ingresar una cadena de texto Esta función obtiene una cadena de texto ingresada por el usuario; si la cadena tiene más de 132 caracteres solo acepta los primeros 132. Se pueden ingresar cadenas sin o con espacios, depende de si se ingresa o no un modo (T); si se ingresa un modo se puede ingresar texto con espacios. (defun C:os() (setq st(GETSTRING T "Ingrese un texto: ")) (princ "\nEl texto escrito es = ") (princ st) (princ) ) Función INITGET : Establecer modos para las funciones GET... Especifica el modo en recibirán los datos las funciones GET... y estos son: 1 2 4 8 32 128
No admite enter como respuesta. No admite valor cero. No admite valores negativos. No verifica límites aunque estén activados. Dibuja la línea o el rectángulo elásticos en forma discontinua. Permite ingresar datos por el teclado.
Se puede ingresar uno o se pueden sumar varios de ellos: (defun C:in() (INITGET 1) (setq ne(GETINT "Ingrese un número: ")) (princ ne) (princ) ) En este ejemplo (INITGET 1) no permitirá que se ingrese un valor nulo (enter).
Instructor: Dadwin Zavala Bautista
[email protected]
Programa Nacional de Informática – C.F.P. HUANCAYO
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
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 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 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 se cumple una condición o no. Instructor: Dadwin Zavala Bautista
[email protected]
Programa Nacional de Informática – C.F.P. HUANCAYO
(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ón Esta función permite repetir acciones mientras se cumpla una condición dada que sirve como elemento de control de la repetitiva. Mientras la condición se cumpla o sea verdadera (T)todas las acciones se ejecutan, hasta que la condición resulte falsa (nil). (defun C:wh() (setvar "cmdecho" 0) (setq vf 0) (setq nl(getreal "\nIngrese un número límite: ")) (while (< vf nl) (setq pt(getpoint "\nUbicación del texto:")) (command "text" pt "" "" vf) (setq vf (+ vf 10)) (setq vf vf) ) (setvar "cmdecho" 1) (princ) )
OPERACIONES MATEMATICAS Y LOGICAS Función + : Mas Esta función devuelve la suma de los valores especificados. (defun C:mas() (princ "\nSumar números") (setq n1(getreal "\nIngrese el primer número: ")) (setq n2(getreal "\nIngrese el segundo número: ")) (setq n3 (+ n1 n2)) (princ n3) (princ) ) Función - : Menos Esta función devuelve la resta de los valores especificados. (defun C:menos() (princ "\nRestar números") (setq n1(getreal "\nIngrese el primer número: ")) (setq n2(getreal "\nIngrese el segundo número: ")) (setq n3 (- n1 n2)) (princ n3) (princ) ) Instructor: Dadwin Zavala Bautista
[email protected]
Programa Nacional de Informática – C.F.P. HUANCAYO
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) ) 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) ) Instructor: Dadwin Zavala Bautista
[email protected]
Programa Nacional de Informática – C.F.P. HUANCAYO
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) ) 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) ) Instructor: Dadwin Zavala Bautista
[email protected]
Programa Nacional de Informática – C.F.P. HUANCAYO
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 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 puntos Esta función obtiene el ángulo que se determina mediante dos puntos: 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) )
Instructor: Dadwin Zavala Bautista
[email protected]
Programa Nacional de Informática – C.F.P. HUANCAYO
CONTROL DE CADENAS DE TEXTO Función STRCASE : Cambiar a Mayúsculas o Minúsculas Esta función cambia una cadena específica 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 " 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 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) ) Instructor: Dadwin Zavala Bautista
[email protected]
Programa Nacional de Informática – C.F.P. HUANCAYO
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 carácter. 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 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) )
Instructor: Dadwin Zavala Bautista
[email protected]
Programa Nacional de Informática – C.F.P. HUANCAYO
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 á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 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) )
Instructor: Dadwin Zavala Bautista
[email protected]
Programa Nacional de Informática – C.F.P. HUANCAYO
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".
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) ) Instructor: Dadwin Zavala Bautista
[email protected]
Programa Nacional de Informática – C.F.P. HUANCAYO
Función MINUSP : Detectar valor numérico negativo Verifica si el elemento indicado contiene un valor numérico negativo, si lo es devuelve T, si no devuelve nil. (defun c:dvn() (setq v(getreal "\nIngrese un valor positivo o negativo: ")) (if(minusp v) (princ "\nValor negativo.") (princ "\nValor positivo.") ) (princ) ) Función ZEROP : Detectar valor numérico igual a 0 Verifica si el elemento indicado contiene un valor numérico igual a 0, si lo es devuelve T, si no devuelve nil. (defun c:dvc() (setq v(getreal "\nIngrese un valor 0 o diferente: ")) (if(ZEROP v) (princ "\nValor 0.") (princ "\nValor diferente de 0.") ) (princ) ) Función NULL : Detectar valor nulo Verifica si el elemento indicado contiene un valor nulo (sin valor), si lo es devuelve T, si no devuelve nil. (defun c:nll() (if (NULL a) (progn (princ "\nEl valor a es nulo.") (setq a "Valor") ) (princ "\nEl valor a es ahora diferente de nulo.") ) (princ)) Si deseamos dar un valor nulo a una variable debemos de crearla con valor nil (setq a nil).
OPERACIONES CON ARCHIVOS Función OPEN : Abrir un archivo La función OPEN abre un archivo para leer o escribir datos. Se le indica a OPEN la ruta completa en caso de no estar en un directorio de trabajo de AutoCAD, el nombre del archivo y la extensión del mismo y luego un modo que indicará una manera de abrirlo. Estos modos son: “r” “w” “a”
Abre el archivo especificado como solo lectura. Si el archivo no existe devuelve nil. Abre el archivo especificado para escritura. Si el archivo no existe la función OPEN primero lo crea. Si el archivo existe, este método reemplaza al anterior. 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) )
Instructor: Dadwin Zavala Bautista
[email protected]
Programa Nacional de Informática – C.F.P. HUANCAYO
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) ) Función GETFILED : Cuadros de diálogo para gestión de archivos Carga un cuadro de diálogo del entorno Windows para recuperar el valor de una ruta señalada. Seguido del nombre de la función GETFILED se debe especificar el título del cuadro de diálogo, el nombre de archivo por defecto, luego la extensión por defecto de los archivos a buscar y por último el modo correspondiente. Estos modos son: “1” “4” “8”
Guarda un archivo. El archivo ingresado deberá ser nuevo. Si ya existe, se mostrará un mensaje de advertencia y en caso de aceptar el archivo se sobrescribirá. Permite abrir un archivo con extensión diferente a la especificada como por defecto. Abre un archivo y se le indica un archivo con otra extensión a la especificada en por defecto no lo acepta. (defun c:gf() (setq bs (GETFILED "Capturar ruta" "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) )
Instructor: Dadwin Zavala Bautista
[email protected]
Programa Nacional de Informática – C.F.P. HUANCAYO
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) ) 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) ) Instructor: Dadwin Zavala Bautista
[email protected]