Archivo de la categoría: DigiNG

Busca entidades en función de sus atributos en la BBDD

Acabamos de añadir un nuevo buscador en el panel de buscadores de Digi3D.NET que te va a permitir buscar las entidades que tengan asociado algún atributo de base de datos.

Tan solo tienes que cargar un modelo con base de datos (como un archivo .shp por ejemplo) y seguir los siguientes pasos:

  1. Buscar por atributos de BBDDAbre el panel de búsqueda (menú Editar/Buscar).
  2. Selecciona el buscador Buscar por atributos de BBDD.
  3. Pulsa el botón con el icono de regenerar para que se regeneren los desplegables de Tabla y Campo.
  4. Selecciona la tabla, el campo y el valor que quieres localizar.
  5. Selecciona dónde quieres enviar el resultado de la búsqueda (Ventana de resultados 1, Ventana de resultados 2 o a la orden activa)
  6. Pulsa el botón Buscar.

La herramienta te permite buscar palabras completas, palabras dentro de los registros e indicar si deben coincidir las mayúsculas/minúsculas.

Como sabes, publicamos el código fuente de todos los buscadores en nuestro repositorio en GitHub. Puedes ver cómo programar tú mismo esta funcionalidad siguiendo el siguiente enlace: https://github.com/digi21/Buscadores/blob/master/BuscarPorCampoBBDD.cs

Puedes ver esta funcionalidad en acción en el siguiente vídeo:

Digi3D.NET ahora muestra símbolos con texto asociado

Hasta hoy Digi3D.NET, al analizar los archivos .BIN almacenados en la carpeta de símbolos, obviaba los textos que se encontrase dentro de éstos, de manera que los símbolos no mostraban los textos a pesar de tener alguno.

Acabamos de modificar el programa de manera que ahora sí que muestra textos asociados a símbolos. El programa mostrará los textos siempre con la fuente Verdana, no siendo aún posible cambiar este comportamiento.

En el siguiente vídeo puedes ver esta nueva funcionalidad de Digi3D.NET

[youtube:https://youtu.be/8cUlx1oxBT0%5D

Ejecuta múltiples órdenes automáticamente al seleccionar un código en Digi3D.NET

Una de las novedades de Digi3D.NET es que permitía asignar opcionalmente una orden a un código, de forma que si seleccionábamos ese código, se ejecutaba dicha orden automáticamente.

Si queríamos ejecutar más de una orden por el mero hecho de seleccionar como código activo un código, no nos quedaba más remedio que crear un archivo de macroinstrucciones (las famosas arrobas).

Acabamos de modificar este funcionamiento añadiendo la posibilidad de añadir tantas órdenes como nos interese en la variable Orden de las propiedades del código.

El contenido de la variable Orden se mostrará vacío si el código no tiene asignada ninguna orden.
Si el código tiene una única orden, se mostrará en la ventana dicha orden.
Si el código tiene asignada más de una orden, se mostrará en la ventana la primera orden y unos puntos suspensivos que nos indicarán que faltan órdenes por mostrar.

Si seleccionamos la variable, aparecerá un botón con puntos suspensivos a la derecha. Si lo pulsamos, aparecerá el editor de órdenes que nos permitirá introducir las órdenes que queremos que se ejecuten al seleccionar dicho código.

Una vez en Digi3D.NET, si seleccionamos una orden que tenga asignada códigos, el programa ejecutará automáticamente las órdenes asignadas.

Puedes ver esta funcionalidad en el siguiente vídeo:

[youtube:https://youtu.be/RioLoKA9tM4%5D

KML pasa a ser un ciudadano de primera categoría en Digi3D.NET

Existen cuatro tipos de importadores/exportadores de archivos de dibujo en Digi3D.NET

  • Los importadores que permiten tanto importar como exportar y que podemos abrir directamente desde el cuadro de diálogo de Nuevo proyecto (como por ejemplo el importador de archivos .bind)
  • Los importadores que permiten tanto importar como exportar y que no podemos abrir directamente desde el cuadro de diálogo de nuevo proyecto (como por ejemplo el importador de archivos .xyz)
  • Los importadores que únicamente permiten importar entidades (como por ejemplo el importador de valores separados por comas o .csv)
  • Los importadores que únicamente permiten exportar (como por ejemplo el exportador de .kml).

Podríamos decir que los importadores que aparecen en el primer grupo son ciudadanos de primera categoría dentro de Digi3D.NET, ya que no solo importan y exportan, sino que además aparecen en el cuadro de diálogo de Nuevo proyecto, lo que significa que los podemos abrir y modificar sus entidades directamente.

Los del segundo grupo únicamente pueden cargarse como archivos de referencia o únicamente podemos importar sus entidades mediante la orden IMPORTAR o crearlos mediante la orden EXPORTAR, estos podríamos decir que son ciudadanos de segunda categoría.

Los del tercer grupo únicamente saben importar y no tienen la capacidad de exportar, serían ciudadanos de tercera categoría.

Y por último los del tercer grupo, que únicamente saben exportar.

Hasta hoy el importador de .kml pertenecía a este último grupo, pero eso acaba de cambiar. Hemos modificado el importador con los siguientes cambios:

  • Ahora permite importar entidades.
  • Ahora aparece en el cuadro de diálogo de Nuevo Proyecto, lo que significa obviamente que podemos abrir un archivo .kml y modificar sus entidades, moverlas, eliminarlas, copiarlas…
  • Hemos modificado el sistema de referencia de coordenadas de importador/exportador para hacerlo compatible con el indicado en el estándar .KML que puedes leer en http://www.opengeospatial.org/standards/kml/. Hasta ahora el sistema de referencia de coordenadas asociado con el exportador de .kml era el geográfico 3D: WGS 84. Los sistemas de referencia de coordenadas geográficos 3D tienen siempre la Z elipsoidal, y según el estándar la coordenada Z no es elipsoidal, sino que es ortométrica referida al sistema de referencia de coordenadas EGM96, de modo que ahora el sistema de referencia de coordenadas asociado a los archivos .kml es: WGS 84 + EGM96 geoid height. El sistema 2D (WGS 84) está modificado pues el orden de las coordenadas es Longitud/Latitud en vez de Latitud/Longitud.

Si eliminas una entidad, el comportamiento es idéntico que al trabajar con archivos .bind: las entidades en realidad no se eliminan, sino que se marcan como eliminadas, de modo que podemos utilizar las órdenes RECUPERA o RECUPERA_COD para recuperar entidades eliminadas. Google Earth no entiende de entidades marcadas como eliminadas, de modo que si abres con Google Earth un archivo con entidades eliminadas, estas se visualizarán. Para eliminarlas completamente y que no aparezcan en Google Earth, tienes que comprimir el archivo de dibujo.

¿Quieres saber cómo se marcan como eliminadas las entidades en el archivo .kml?
Te lo mostramos en el blog de desarrollo de Digi3D, en la entrada Marcando entidades eliminadas en archivos .kml

Los archivos de configuración y tablas ahora se muestran en HTML

Hemos añadido una nueva funcionalidad a los archivos de configuración y a los distintos tipos de tablas de Digi3D.NET que va a hacer mucho más amigables estos archivos a los usuarios.

Hace muchos años comenzamos con la migración de archivos de tablas a formato .XML:

  • La migración comenzó en el año 2000 con Digi3D 2000 en el que los archivos de alias (que son los archivos que dan nombres a las órdenes) ya estaban en .XML.
  • Después fue Digi3D 2007 que introdujo muchos cambios, entre ellos pasar de las antiguas tablas Digi.tab al nuevo formato Digi.tab.xml, el archivo de menús menu.xml y la incorporación de los archivos .orientation.xml.
  • En Digi3D.NET ya solo quedaban por transformar a .XML los archivos de teclas y añadimos esos cambios.

El problema de los archivos .XML es que los navegadores los muestran tal y como están escritos, y no son fácilmente interpretables por el usuario tal y como puedes ver en este recorte de una tabla de códigos:

<?xml version="1.0" encoding="utf-8"?>
<digitab xmlns:odt="http://schemas.digi21.net/DigiNG/DigiTab/StyleOldDigiTab/v1.0" xmlns:iobind="http://schemas.digi21.net/DigiNG/IO/bind/v1.0" xmlns:iobin="http://schemas.digi21.net/DigiNG/IO/bin/v1.0" xmlns:iodgn="http://schemas.digi21.net/DigiNG/IO/dgnv8/v1.0" xmlns:iodwg="http://schemas.digi21.net/DigiNG/IO/dwg/v1.0" xmlns:iocsv="http://schemas.digi21.net/DigiNG/IO/csv/v1.0" xmlns:iokml="http://schemas.digi21.net/DigiNG/IO/kml/v1.0" xmlns:ioshp="http://schemas.digi21.net/DigiNG/IO/ShapeFile/v1.0" xmlns:ioGeomedia="http://schemas.digi21.net/DigiNG/IO/Geomedia/v1.0"  bgColor="0 0 0" colorUnknown="127 127 127" colorSnap="0 0 255">
    <codes>
        <code name="010123" description="Límite provincial" tags="" type="1" command="" helpFile="" table="" conditions="" print="1" streamMode="0">
            <representation style="1" color="15" color-stereo="15" width="1" width-stereo="1" print-color="15" print-width="0.010000" fontTT="Arial" weightTT="0" italic="0" />
            <io>
                <iobin:transform code="010123"/>
...

Salta a la vista que este formato no es muy cómo para personas que no sepan .XML

El 21 de septiembre de 2011 publiqué en el Blog de desarrollo de Digi3D.NET una manera de hacer que las tablas de códigos se pudieran imprimir Imprimir la configuración de teclado, pero para realizar esa tarea era necesario modificar el archivo de teclas y crear un archivo de transformación, y eso obviamente requería de nuevo tener conocimiento de XML, y además si el usuario realizaba una modificación sobre el archivo de configuración de teclas, había que volverlo a modificar manualmente para poderlo mostrar en forma de tabla.

Acabamos de modificar Digi3D.NET para que genere de forma automática archivos .XML con formato auto-contenido, de forma que si ahora abres (únicamente con Firefox y con Google Chrome -no lo he probado con Microsoft Edge aún, pero definitivamente con Internet Explorer no funciona) cualquier archivo, éste se muestre de una forma bonita para el usuario.

A continuación tienes una captura de pantalla de Firefox mostrando una tabla de códigos Digi.tab.xml, el archivo de configuración de teclas por defecto (ambos instalados en la carpeta %ProgramData%\Digi3D.NET\Tablas) y uno de los archivos de alias (que se instalan en %ProgramFiles%\Digi21.NET\Digi3D.NET\es-ES)

Firefox mostrando digitabFirefox mostrando teclasmnuFirefox mostrando archivo de alias

Creación de macros mediante la nueva barra de herramientas «Macro»

Una de las características que hacen a Digi3D.NET una aplicación tan productiva es la posibilidad de crear por parte del usuario archivos de macro (denominados comúnmente arrobas o archivos de macroinstrucciones) que agrupan una serie de órdenes que luego el usuario puede ejecutar de una manera muy sencilla.

El inconveniente que tiene la creación de archivos de macroinstrucciones es que el usuario debe conocer los nombres de las órdenes a ejecutar así como sus parámetros.

Acabamos de añadir a Digi3D.NET una serie de mejoras que van a facilitar la vida a los usuarios a la hora de crear archivos de macroinstrucciones.

Opción del menú grabar una macro

Hemos añadido la opción del menú Herramientas/Macro/Grabar una macro que permite comenzar la grabación de una macro (también dispones de la barra de herramientas Macro)

Cuando seleccionamos esta opción, Digi3D.NET entra en modo de grabación de macros. Puedes comprobarlo porque en la ventana de dibujo aparece un marco rojo (indicando que se están almacenando todas las operaciones).

A partir de este momento comienza a memorizar los nombres de las órdenes que estás ejecutando, así como sus parámetros, independientemente de que los ejecutes desde la línea de comandos o que las ejecutes desde el menú o una barra de herramientas.

Cuando has terminado, puedes seleccionar la opción del menú Herramientas/Macro/Parar la grabación de la macro…

Aparecerá un cuadro de tareas solicitando dónde quieres almacenar las órdenes que se han memorizado, dándote dos posibilidades:

  1. Asignar la macro a una pulsación de teclas
  2. Crear un archivo de macroinstrucciones

Si seleccionas la primera opción, Digi3D.NET ejecutará la orden TECLA con esas órdenes pre-configuradas. Cuando pulses la tecla a la que quieres asignar la macro, verás relleno el cuadro de diálogo de asignación de tecla.

Si seleccionas la segunda opción, aparecerá un nuevo cuadro de diálogo que te permitirá crear un archivo de macroinstrucciones. Este cuadro de diálogo creará el archivo de macroinstrucciones añadiendo automáticamente el prefijo @ al nombre del archivo.

Almacenar archivo de macroinstrucciones

Puedes ver esta nueva funcionalidad en el siguiente vídeo.

[youtube:http://youtu.be/iT9dCVi1wGg%5D

Control de calidad en tiempo real con la nueva funcionalidad «desencadenadores» de Digi3D.NET

Presentamos una nueva característica en Digi3D.NET que permitirá incrementar la productividad además de evitar revisiones de control de calidad: Desencadenadores.

Los desencadenadores son acciones que se ejecutan en un determinado momento si se cumple una determinada condición.

En un principio, los códigos no tienen asignado ningún desencadenador, pero podemos asignar tantos desencadenadores como queramos a cada código mediante el Editor de Tablas de Códigos, en la pestaña Códigos, en la sección Desencadenadores, en la propiedad Al registrar la entidad.

Si pulsamos el botón de los tres puntos, aparecerá el cuadro de diálogo Desencadenadores.

Cuadro de diálogo desencadenadores

Si pulsamos el botón Añadir, aparecerá el cuadro de diálogo Configuración del desencadenador.

Cuadro de diálogo Configuración del desencadenador

En este cuadro de diálogo podemos seleccionar un desencadenador de la lista superior, como por ejemplo el que se muestra en la captura: Es una línea cerrada o un polígono y su área es inferior a un determinado valor.

En función del tipo de desencadenador que seleccionemos, tendremos que rellenar más o menos propiedades en el panel de propiedades Configuración del desencadenador. En la captura anterior vemos que el programa está solicitando el área por debajo de la cual se ejecutarán las acciones.

Una vez configurado el desencadenador, podemos añadir acciones pulsando el botón Añadir. Al pulsarlo aparecerá el cuadro de diálogo Configuración de la acción.

Cuadro de diálogo Configuración de la acción

Este cuadro de diálogo dispone de un desplegable para seleccionar la acción a añadir, y una ventana de propiedades en la que configurar la acción seleccionada. En la captura de pantalla podemos ver que la acción Mostrar un globo solicita que introduzcamos tanto el título del globo como el mensaje principal y el número de segundos que se visualizara el globo en pantalla.

Por ahora la lista de desencadenadores es limitada, pero en breve crecerá. Podemos elegir los siguientes desencadenadores:

Nombre del desencadenador Condición para que se ejecuten sus acciones
Es una línea cerrada o un polígono y su área es inferior a un determinado valor Si se registra una línea cerrada y su área es inferior a la configurada en el desencadenador
Es una línea y su perímetro en el plano es inferior a un determinado valor Si se registra una línea y su perímetro en el plano es inferior a la configurada en el desencadenador
Es una línea y su perímetro 3D es inferior a un determinado valor Si se registra una línea y su perímetro en XYZ es inferior a la configurada en el desencadenador

…Y lo mismo sucede con la lista de acciones. Por ahora disponemos de la siguiente lista de acciones (puedes poner todas las que quieras en un desencadenador, incluso varias veces la misma, como mostrar un cuadro de advertencia y luego otro y luego otro…)

Nombre de la acción Descripción Uso típico
Mostrar un cuadro de mensaje Muestra una advertencia al operador. Este es un método invasivo, pues requiere que el operador pulse el botón de Aceptar para confirmar que ha leído la advertencia. Si se dibuja un edificio con poca superficie. Se puede mostrar un mensaje al usuario indicando que debería eliminarse a menos que sea significativo (edificio religioso, militar,…)
Mostrar un globo Muestra una advertencia no invasiva que auto-desaparece. Por ejemplo para indicar que se ha eliminado la entidad que se acaba de digitalizar porque no cumplía los criterios del modelo. Ejemplo: Se ha eliminado la línea de afluente porque su tamaño no cumple con el requisito mínimo para ser digitalizado.
Mostrar página web Abre el navegador web predeterminado en la URL especificada. Por ejemplo para mostrar al usuario las instrucciones que debe seguir para digitalizar un código en particular.
Hacer sonar un sonido de error Hace sonar el sonido de error configurado en el programa. Se utiliza para que el usuario tenga una alerta sonora de que algo raro ha pasado.
Sintetizar voz Hace que el ordenador sintetice voz con el mensaje indicado Se utiliza para que el usuario tenga información por voz sintética.
Cancelar la entidad No permite que se almacene la entidad que se acaba de digitalizar. Por ejemplo si el perímetro de la línea que se acaba de digitalizar es inferior al mínimo exigible para ese código.
Cambiar el código de la entidad Cambia el código de la entidad por el especificado. Por ejemplo si al dibujar un lago su área no cumple con los requisitos de lago pero si de laguna.
Insertar un punto Ejecuta la orden PUNTO para forzar al operador a digitalizar un punto. Por ejemplo si el área del edificio que se acaba de digitalizar no es suficiente para que éste se represente como un polígono. Se puede crear un desencadenador que tenga dos acciones:

  1. Eliminar la entidad
  2. Forzar a que el usuario digitalice un punto.
Insertar un punto en otro código Cambia el código activo por el espeficicado y ejecuta la orden PUNTO para forzar al operador a digitalizar un punto. Por ejemplo si el área del edificio que se acaba de digitalizar no es suficiente para que éste se represente como un polígono. Se puede crear un desencadenador que tenga dos acciones:

  1. Eliminar la entidad
  2. Forzar a que el usuario digitalice un punto.

En el siguiente vídeo puedes ver esta funcionalidad en acción:

[youtube:http://youtu.be/9WS6GKrds2A%5D

Códigos no seleccionables en Digi3D.NET

Acabamos de añadir una nueva funcionalidad en Digi3D.NET, que es la posibilidad de indicar que un determinado código no se puede seleccionar como código activo.

Esta funcionalidad sirve para evitar que digitalicemos entidades nuevas con ese código, pero haciendo que el código exista.

Por ejemplo, supongamos que tenemos que hacer una actualización de una cartografía y queremos diferenciar las geometrías originales y las que hemos digitalizado para la actualización. En este caso, podríamos tener dos grupos de códigos, unos cuyo nombre comience por «O» de original y otros que comiencen por «N» de nuevos.

Así por ejemplo, el código «O1» podría ser el código original de líneas de río y el código «N1» el código de línea de río de actualizada o nueva.

Tendremos que configurar una tabla de códigos con los dos códigos, pero no queremos que el usuario seleccione el código «O1» para digitalizar, aunque nos interesa que dicho código esté en la tabla de códigos para que tenga una representación y que al tentativarlo se muestre su título para saber que es una línea de río original.

Para hacer eso, tenemos que indicar en el programa Editor de tablas de códigos que dicho código no está activado mediante la propiedad Activado.

Propiedad activado en un código en la tabla de códigos

Esto hará que dicho código no aparezca en la barra de códigos de Digi3D.NET ni en el panel de Códigos activos, pero que siga existiendo.

Al no aparecer en la Barra de Códigos ni en el Panel de códigos activos, no hay posibilidad de seleccionar ese código por esa vía, pero siempre podemos ejecuta la orden COD=O1, en cuyo caso Digi3D.NET mostrará el siguiente cuadro de mensaje indicándonos que no podemos seleccionar dicho código:

Código deshabilitado

A continuación puedes ver un vídeo de esta nueva funcionalidad en acción:

[youtube:http://youtu.be/fu-FHJZK7Ak%5D

Mejoras en las órdenes que solicitan distancias y tres nuevas órdenes de medida

Hemos realizado una serie de mejoras en las órdenes: ACUERDO, AT, CIRCR, DA,  EQUIDISTANCIA, ESC_ACT, INC, PARALELA, SOLAPE, TOL y TOL_ANG.

Estas órdenes se caracterizan porque en un determinado momento de su vida útil solicitan al usuario que introduzca una medida (mediante teclado o mediante dos puntos medidos gráficamente en el espacio). Si el usuario opta por digitalizar dos puntos, estos dos puntos son libres, es decir, que no tienen ninguna restricción. No existe ninguna manera de forzar que estos dos puntos sean perpendiculares a un segmento o cualquier otro tipo de restricción.

La idea surge porque un usuario solicitó a través de nuestro panel de soporte técnico la posibilidad de realizar una paralela cuya distancia sea la distancia perpendicular entre un punto y el segmento seleccionado. Podríamos haber hecho una orden paralela por el estilo, pero, ¿por qué no hacerlo también para la orden CIRCR?, y ¿por qué no para la orden DA? Quizás alguien quiera hacer un círculo cuyo radio sea la distancia perpendicular entre un punto y un segmento de una línea…

La solución que hemos hecho es la siguiente:

  1. Hemos modificado las órdenes AREA, MIDE y MIDE+ para que en caso de que se ejecuten mientras se está ejecutando una orden de las mencionadas anteriormente que requieren que introduzcamos una medida, inyecten la medida en esa orden que se estaba ejecutando previamente.
  2. Hemos creado múltiples órdenes nuevas para inyectar medidas:
    Orden Descripción
    MIDE_PERP Mide la distancia entre un punto y la perpendicular a un segmento seleccionado de una línea del modelo.
    MIDE_PERIMETRO_LINEA Mide el perímetro (en el plano) de una línea seleccionada.
    MIDE_PERIMETRO_LINEA_XYZ Mide el perímetro de una línea seleccionada.
    MIDE_SEGMENTO Mide (en el plano) el segmento seleccionado.
    MIDE_SEGMENTO_XYZ Mide el segmento  seleccionado.

La forma de trabajo es la siguiente:

  1. Ejecutamos una orden de las enumeradas anteriormente que solicita una distancia, por ejemplo PARALELA. Después de seleccionar la línea a la cual queremos hacer una paralela, la orden PARALELA no solicita que introduzcamos la distancia o midamos dos puntos.
  2. En ese momento, en vez de digitalizar ningún punto o de introducir alguna distancia, ejecutamos cualquiera de las siguientes órdenes: AREA, MIDE, MIDE+, MIDE_PERP, MIDE_PERIMETRO_LINEA o MIDE_SEGMENTO.
  3. Hacemos lo que nos indique la orden que acabamos de ejecutar, como medir dos puntos, o seleccionar una línea y medir un punto….
  4. Cuando terminemos de ejecutar esta orden de medida, ésta se auto-destruirá y le introducirá la medida correspondiente a la orden que estábamos ejecutando previamente (PARALELA).
  5. Continuamos con nuestra orden PARALELA, digitalizando el punto a un lado.

Puedes ver esta nueva funcionalidad en acción en el siguiente vídeo:

[youtube:http://youtu.be/pHHfvZSWyEA%5D

Configurando los flags TENTATIVO_CORTA y TENTATIVO_INSERTA

Hemos añadido una opción en el menú de configuración de Digi3D.NET para indicar si queremos que se partan o se inserten vértices en las líneas seleccionadas al seleccionar.

Hasta ahora, si teníamos activado el flag TENTATIVO_CORTA o TENTATIVO_INSERTA, cada vez que seleccionábamos una entidad, independientemente del motivo de la selección, la línea seleccionada se partía o se le añadía un vértice. Por ejemplo: si ejecutábamos la orden MIDE y seleccionábamos una línea para medir su distancia con respecto a otro punto y teníamos activo el flag TENTATIVO_CORTA en el momento de la selección, al aceptar la selección se partía la línea.mos.

Hemos añadido una sección nueva denominada Tentativos en el cuadro de diálogo de configuración con dos parámetros de configuración:

Parámetro Valores posibles
Tentativo corta corta la línea seleccionada
  • Siempre que se confirme una selección.
  • Sólo al registrar líneas.
Tentativo inserta inserta un vértice en la línea seleccionada
  • Siempre que se confirme una selección.
  • Sólo al registrar líneas.

Por defecto el programa configura ambas opciones a Sólo al registrar líneas, lo que significa que por defecto a partir de ahora Digi3D.NET se va a comportar de forma distinta que versiones anteriores en este sentido. Si queremos recuperar el modo previo, tan solo tendremos que cambiar ambas opciones a Siempre que se confirme una selección.

Puedes ver esta funcionalidad en el siguiente vídeo

[youtube:http://youtu.be/L4dSD5vyh6E%5D