Expresiones DIESEL en macros (Concepto)

AutoCAD

 
Expresiones DIESEL en macros
Concepto Referencia rápida
 
 
 

Puede incluir expresiones de cadena en lenguaje DIESEL en archivos de personalización (CUI) como método adicional de creación de macros.

Estas expresiones pueden devolver valores de cadena (cadenas de texto) como respuesta a los comandos estándar de AutoCAD, a las rutinas de AutoLISP y ObjectARX® y a otras macros. Pueden también devolver valores de cadena al menú mismo, alterando, por tanto, la apariencia o el contenido de un rótulo de menú.

Esta cadena proporciona una forma de alternar entre el espacio papel y el espacio modelo si TILEMODE se ha definido como 0. Esta expresión se evalúa de manera transparente. Si el carácter especial ^P (que activa y desactiva MENUECHO) se omite, la expresión muestra sólo el comando ejecutado.

Una expresión DIESEL utilizada en una opción de menú debe seguir el formato $sección=submenú, donde el nombre de la sección es M y el submenú es la expresión DIESEL que se desee. A menudo, implementar una macro con AutoLISP resulta más fácil.

Los siguientes ejemplos muestran dos elementos de menú que generan el mismo resultado: uno utiliza DIESEL y el otro, AutoLISP.

Este elemento de menú utiliza la expresión DIESEL:

^C^C^P$M=$(if,$(=,$(getvar,cvport),1),mspace,pspace)

Este elemento de menú utiliza la expresión AutoLISP:

^C^C^P(if (= (getvar "cvport") 1)(command "mspace")+
(command "pspace"))(princ) ^P

Ambos elementos de menú proporcionan una manera de alternar entre el espacio papel y el espacio modelo (si TILEMODE se ha definido como 0), pero la expresión DIESEL es más corta y se evalúa de manera transparente sin necesidad de llamar a la función princ de AutoLISP. Si el carácter especial ^P (que activa y desactiva MENUECHO) se omite en ambos casos, la expresión DIESEL muestra sólo el comando ejecutado, mientras que la expresión AutoLISP muestra toda la línea de código.

Como el valor devuelto por una expresión DIESEL es una cadena de texto, se puede utilizar como respuesta a una llamada a la función getxxx de AutoLISP. Esta funcionalidad permite que los elementos de menú evalúen las condiciones actuales del dibujo y devuelvan un valor a una rutina de AutoLISP.

El ejemplo siguiente se basa en estos supuestos:

  • La rutina de AutoLISP está cargada en memoria.
  • El extracto de IUP está incluido en el archivo de personalización actual.
  • Los símbolos que se van a insertar tienen una unidad de altura por una de anchura.
  • La variable DIMSCALE se ha establecido en el factor de escala del dibujo (es decir, un dibujo que se trace con una escala de 1" = 10' tendrá un factor de escala de 120 y un dibujo con escala 1/4" = 1' tendrá un factor de escala de 48).

Si carga y ejecuta la rutina de ejemplo de AutoLISP, AutoCAD insertará el símbolo con el tamaño y en la ubicación que haya especificado. Los símbolos se trazarán con el tamaño indicado (si el dibujo se traza a la escala especificada en DIMSCALE).

A continuación se muestra una rutina de ejemplo de AutoLISP.

(defun C:SYMIN ( )
  (setq sym 
    (getstring 
      "\nIntroduzca el nombre del símbolo: ") ; Solicita el nombre de un símbolo
  ) 
  (menucmd "s=symsize") ; Cambia el menú de pantalla 
                               ; al submenú symsize 
  (setq 
    siz (getreal 
      "\nSeleccione el tamaño del símbolo: ") ; Solicita el tamaño del símbolo
    p1 (getpoint 
      "\nPunto de inserción: ") ; Solicita el punto de inserción
  ) 
  (command "insert" ; Ejecuta el comando INSERT
    sym ; utilizando el punto de inserción
    p1 siz siz 0) ; y el tamaño del símbolo deseado
  (menucmd "s=") ; Cambia al menú
                               ; de pantalla anterior
  (princ) ; Sale de forma silenciosa 
)
NotaLas rutinas de AutoLISP que se utilizan regularmente deben incluir comprobación de errores para verificar la validez de los datos introducidos por el usuario.

Las expresiones DIESEL del siguiente ejemplo multiplican el valor actual de DIMSCALE por el valor especificado y devuelven un factor de escala apropiado.

Esto no se puede hacer con código similar de AutoLISP; normalmente, un valor devuelto por una expresión de AutoLISP no se puede utilizar como respuesta a una llamada a la función getxxx (como, por ejemplo, la función getreal del ejemplo anterior).

$M=$(*,$(getvar,dimscale),0.375)
$M=$(*,$(getvar,dimscale),0.5)
$M=$(*,$(getvar,dimscale),0.625)

Las expresiones DIESEL también pueden devolver valores de cadena para rótulos de elementos de menús desplegables, de modo que puede desactivarlos o modificar la forma en que se muestran. Para utilizar una expresión DIESEL en un rótulo de menú desplegable, asegúrese de que el primer carácter es $.

En el siguiente ejemplo, la capa actual se establece en BASE y la expresión DIESEL siguiente se utiliza como rótulo.

$(eval,"Capa actual: " $(getvar,clayer))

El resultado es que se visualiza el menú desplegable apropiado y se actualiza siempre que se cambia la capa actual.

Current layer: BASE

También puede utilizar este método para cambiar de forma interactiva el texto que se muestra en un menú desplegable. Para ello, debe usar una rutina de AutoLISP que establece las variables de sistema USERS1-5 en el texto seleccionado, que se puede recuperar con una macro DIESEL en un rótulo de menú.

NotaLa anchura de los menús desplegables y contextuales se define al cargar el archivo de personalización. Los títulos de menús generados o cambiados con expresiones DIESEL después de cargar un menú se truncan para que quepan dentro de la anchura del menú existente.

Si se prevé que el rótulo del menú generado por DIESEL será demasiado ancho, se puede utilizar el ejemplo siguiente para garantizar que la anchura del menú se ajustará a los rótulos. Este ejemplo muestra los 10 caracteres del valor actual de la variable de sistema USERS3 (USERS1-5).

$(eval,"Valor actual: " $(getvar,users3))+
 $(if, $(eq,$(getvar,users3),""), 10 espacios )]^C^Cusers3 

No se pueden usar espacios a la derecha en un rótulo de menú para incrementar la anchura del menú, porque los espacios a la derecha se ignoran mientras se carga el menú. Cualquier espacio que se utilice para aumentar la anchura de un rótulo de menú debe estar dentro de una expresión DIESEL.

En el siguiente ejemplo se utiliza la misma expresión DIESEL que en el rótulo y una parte del elemento de menú. Proporciona una forma práctica de escribir el día y la fecha actuales en un dibujo.

$(edtime,$(getvar,date),DDD", "D MON YYYY)]^C^Ctext +
\\\ $M=$(edtime,$(getvar,date),DDD", "D MON YYYY);

También se puede utilizar una macro DIESEL para marcar los rótulos de menús desplegables o hacer que no estén disponibles. El siguiente rótulo de menú desplegable muestra BORRAR como no disponible mientras un comando está activo. El texto aparece de forma normal cuando un comando no se encuentra activo.

$(if,$(getvar,cmdactive),~)ERASE

Se puede utilizar un enfoque similar para situar una marca junto a un elemento del menú desplegable o para cambiar de forma interactiva el carácter utilizado para la marca.