martes, 24 de junio de 2014

extender la funcionalidad con NET - Primeros pasos (1)

Desde sus comienzos, Autocad permite extender la funcionalidad del programa por medio de piezas de código, propias o de terceros. Si bien en sus comienzos era necesario utilizar una versión del lenguaje LISP, hoy en día es posible hacer uso de la plataforma Microsoft .NET, con la que Autocad está completamente integrado.

Gracias a ello no solo se puede modificar un dibujo de forma automática, sino que se puede hacer uso de las incontables bibliotecas disponibles en .NET, que abren un abanico de posibilidades casi ilimitado. Ahora no solo podremos realizar tareas repetitivas, sino prácticametne cualquier cosa que se nos ocurra.

Para poder escribir el código basta con un simple editor de textos. Sin embargo facilita mucho las cosas utilizar un IDE (entorno de desarrollo integrado). Uno de los más completos es #Develop, especialmente diseñado para la plataforma NET. Entre las ventajas de usar un IDE destacan:

  • las ayudas a la escritura: resalta el código en color, autocompleta y muestra sugerencias en función del contexto, indenta automáticamente..
  • gestiona los proyectos repartidos en múltiples ficheros, permitiendo trabajar con todos ellos como si fueran uno solo
  • facilita las tareas menos agradecidas: compilar y depurar el código, gestiona las referencias a bibliotecas de funciones...

Procedimiento

El procedimiento estándar es crear un nuevo comando personalizado con la funcionalidad deseada. Para ello será necesario seguir estos pasos:

  • Escribir el código del nuevo comando, usando nuestro lenguaje de programación favorito.
  • Compilar el código, que se guardará en una biblioteca de funciones (un archivo .dll)
  • Cargarlo en Autocad mediante el comando NETLOAD (sólo para una sesión) o configurarlo para que se cargue al inicio.

Desde ese momento, podremos usar ese comando como si viniera de serie, tecleándolo en la línea de comandos, creando un icono para las barras de tareas o incluso añadiendolo a la cinta.

Ejemplo

A continuación os muestro un ejemplo de código escrito en lenguaje C#. Es posible utilizar también Visual Basic, y aunque cambia un poco la sintaxis, la estructura del código es idéntica.

// bibliotecas externas
using System;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.Runtime;

// se debe definir un espacio de nombres
namespace Autocad_NET.Ejemplos
{
  // se debe definir una clase
  public class ejemplo
  {
    // entre corchetes se especifica el nombre 
    // del comando que luego se ejecuta en autocad
    [CommandMethod("ejemplo_01")]
    public static void Comando_de_ejemplo()
    {
      // el codigo aqui...
      Document doc = 
         Application.DocumentManager.MdiActiveDocument; 
      doc.Editor.WriteMessage("hola, mundo");
    }
  }
}

En el ejemplo anterior contiene muchas palabras clave habituales en C# (como 'class', 'namespace', using', 'static'...) y una estructura general que puede resultar engorrosa para los no iniciados en programación.

  • El código se compone de bloques (encerrados entre llaves) e instrucciones (separadas por puntos y comas). Las líneas que comienzan por "//" son comentarios.
  • Al comienzo se declara el listado de bibliotecas de funciones que utiliza nuestro código: son funciones que alguien ha escrito y que nosotros podemos reutilizar. Cada biblioteca va precedida de la palabra clave using
  • Por razones que no vienen al caso, todo el resto se debe incluir en un bloque, denominado espacio de nombres: namespace nombre_del_espacio {...}
  • En general, el objeto (bloque) principal es una clase: class nombre_de_la_clase {...}. debemos definir una.
  • Dentro de la clase definimos nuestra función (técnicamente un método público estático, de nuevo, por razones que sería largo explicar): public static void nombre_de_la_funcion {...}.
  • A esta función le damos un alias que luego utilizaremos en Autocad: [CommandMethod("ejemplo_01")]

Una vez completados los pasos del apartado anterior, se puede ejecutar este programa tecleando ejemplo_01 en la línea de comandos de Autocad. Lo único que hace este ejemplo es mostrar un mensaje en la línea de comandos, pero no está mal para empezar...

Y ahora un par de peros...

  • Es necesario tener instalado Autocad tanto para ejecutar el código. No se puede generar un programa independiente que lea o edite archivos .dwg, solo generar comandos para usar con Autocad instalado y ejecutándose (a no ser que vayas realmente en serio)
  • La API de Autocad no es precisamente sencilla, y no se han esmerado precisamente documentándola. Esto hace que algunas tareas simples pueden no ser tan sencillas de llevar a la práctica.
Si tenemos nuestros script en AutoLisp que nos funcionan y con los que estamos contentos probablemente no merezca la pena cambiar, pero si queremos investigar y probar cosas nuevas, sin duda este es un mundo lleno de posibilidades.

Direcciones útiles

jueves, 8 de noviembre de 2007

Atajos de teclado útiles

Aquí van algunas combinaciones de teclas que pueden ahorrar tiempo a la hora de dibujar con Autocad. Parece más complicado que usar el ratón, pero cuando las has probado ya no podras dejarlas. ¡Haz la prueba de dibujar a dos manos!:

10.- un clásico: " F8 "


Los ortodoxos dicen que esta tecla jamás se debe pulsar, (o sea, que hay que tenerlo siempre activado). Os invito a que descubrais nuevos horizontes inclinados.

9.- mira que útil: " control + 1 "


Muestra/oculta la ventana propiedades. La verdad, no sabía ni que existía hasta hoy. Pero, ¿que otras maravillas se ocultarán bajo los nueve números restantes? ...

8.- práctico, a veces: " F2 "


Muestra/oculta la ventana de texto, es decir, la línea de comandos, o el shell, que dirían los linuxeros. Se trata de una ventanita que aparece por lo general en la parte de abajo, y que los novatos nunca, nunca, nunca leen, y por eso preguntan sin parar.

7.-qué profesional: " F3 "


Activa/desactiva la referencia a objetos. Con esta F y la que viene más arriba, suficiente.

6.- insustituible: " control + Z "


Deshacer, deshacer y más deshacer. Con este atajo, definitivamente te pasarás más tiempo haciendo que deshaciendo. Cuidado con lo que deshaces, si retrocedes muchos pasos y te pasas de largo, sobre todo, no toques ninguna tecla que no debas (por si no lo sabeis, el comando deshacer es el más difícil de deshacer).

5.- ¿por qué no guardaremos más a menudo?: " control + S "


No es un atajo que se utilice muy menudo, pero siempre viene bien recordar que hay que guardar los dibujos, mínimo una vez al año.

4.- cuidado, crea adicción: " supr "


Es la tecla más tentadora de todas. Ojalá fuera igual de fácil dibujar que borrar. No hace falta decir que borra los objetos seleccionados. Si se borra más de la cuenta véase la combinación de teclas número 6.


3.-Medalla de bronce: " p "


Corresponde a la opción previo en modo de selección, vuelve a seleccionar los objetos que empleaste en el último comando. Si quieres hacer varias operaciones seguidas con un grupo de objetos, es imprescindible.

2.- Medalla de plata: " control + tab "


Rota por todos los dibujos abiertos en la misma ventana de Autocad. Si tienes varias ventanas diferentes abiertas, solo rota por los de la ventana actual.

1.-Medalla de oro: shift (la flechita pa arriba)


¿Cuantas veces has seleccionado cuidadosamente docenas de líneas, para descubrir que por error has seleccionado algo que no debías? ¿Y entonces le has dado furioso al escape hasta dejarte el dedo anular en carne viva? ¿y luego has vuelto a empezar? ¡Nunca más! porque, ¡se puedes quitar los objetos que quieras de la selección dejando el resto! Selecciona el objeto que quieres quitar pulsando la tecla shift. Puedes quitar tantos como quieras, quitar y volver a ponerlos... Te cambiará la vida.

Hasta aquí el ranking de hoy. Enhorabuena a los ganadores y un saludo a todos vosotros.

domingo, 4 de noviembre de 2007

Girar el contenido de una ventana gráfica

Muchas veces nos encontramos con el problema de que necesitamos girar un dibujo para poder maquetarlo en espacio papel a nuestro gusto. Girar los objetos del dibujo puede ser una solución al problema, pero no deja de ser una chapucilla. Porque las modificaciones sobre ese dibujo se vuelven más laboriosas, además es posible que queramos un mismo dibujo en distintas ventanas gráficas con diferentes orientaciones.

La solución es muy sencilla: podemos girar la "vista" de la ventana gráfica sin girar el dibujo en sí.

el dibujo en el modelo y el resultado en espacio papel

Tres sencillos pasos


Primeramente definimos un nuevo SCP, con la orientación que queramos darle a la vista dentro de la ventana grafica. Podemos emplear cualquiera de los comandos que sirven para crear "esecepés": por tres puntos, por objeto, por cara...

En segundo lugar, guardamos dicho SCP con un nombre, para poder recuperarlo en cualquier momento. Este paso no es imprescindible, pero sí es recomendable. Abrimos el cuadro de diálogo de SCPs y le damos un nombre al SCP actual, que por defecto se llama "sin nombre" o "unnamed".

Por último, el toque mágico: entramos en la ventana gráfica que queramos girar (haciendo doble clic dentro de ella, por ejemplo) y tecleamos el comando _plan, así, con guión bajo. Nos pedirá una opción, que por defecto es la del SCP actual, por lo que basta con pulsar la tecla enter. Voilá! el dibujo se ha girado.

En el modelo también funciona



Cuando giramos el SCP,
la captura del ratón no acompaña
Este truco es útil para girar las ventanas gráficas y poder imprimir un dibujo con la orientación que queramos, pero también puede resultar útil para dibujar en el modelo de una forma más cómoda. Porque también podemos girar la vista en el espacio modelo sin girar el dibujo. Así podemos trabajar más cómodamente con las funciones del "orto" y con la captura del ratón.

Los pasos son los mismos que hemos explicado arriba, solo que tecleamos el comando _plan directamente en el espacio modelo. La vista se nos girará para que el SCP quede recto.

A tener en cuenta


Girar el objeto de ventana gráfica en espacio papel definitivamente no gira el contenido, no importa cuantas veces lo intentes, no saldrá bien.

Si tenemos activada la variable UCSFOLLOW, la vista actual se gira automáticamente cada vez que se cambia el SCP. Esta variable tiene un valor diferente en cada ventana gráfica: podemos activarla para trabajar en el modelo, pero tenerla desactivada en las ventanas gráficas de las presentaciones, para que no se modifiquen automáticamente cada vez que cambiamos de SCP.

Si no hemos guardado el SCP con un nombre antes de girar una vista, podemos recuperar el SCP siempre y cuando no hayamos "desgirado" esa vista. Entramos en la ventana gráfica (o espacio modelo), y creamos un SCP nuevo con la opción "vista".

Este metódo de girar vistas es en realidad parte de un sistema más complejo, por el cual podemos asignar a cada ventana gráfica una vista totalmente personalizada: podemos asignar vistas en cualquiera de los "isoplanos", en perspectiva,

Las vistas se almacenan en el dibujo y se pueden recuperar en cualquier momento utilizando el comando vista o _view.