Archivo de la categoría: DigiNG

Solucionando problemas con los Sistemas de Referencia de Coordenadas colombianos

El viernes pasado comenzaron a trabajar en una entidad de Colombia con modelos del sensor ADS40 en Digi3D.NET.

El sensor ADS40, trabaja en el sistema de referencia de coordenadas EPSG:4979 tal y como se explica en esta página de la ayuda de Digi3D.NET, sin embargo la cartografía la quieren registrar en el sistema de referencia de coordenadas MAGNA-SIRGAS / Colombia West zone.

En un principio, tan solo tenemos que indicar al crear el archivo de dibujo que el sistema de referencia de coordenadas horizontal es MAGNA-SIRGAS / Colombia West zone, pero al cargar cartografía existente nos indicaron que las coordenadas X e Y estaban intercambiadas.

Con versiones modernas de Digi3D.NET la solución es muy sencilla, tan solo tenemos que indicarle a Digi3D.NET que los ejes los queremos como Este/Norte, y que haga caso omiso a lo que se indica en la base de datos EPSG, tal y como se muestra en la siguiente captura de pantalla:

ejes en src proyectados

…pero desafortunadamente el cliente tiene instalada una versión que no permite forzar la orientación de los ejes, así que los sistemas de referencia de coordenadas se crean siempre de forma estándar, y el estándar tal y como te voy a mostrar un poco más adelante indica que primero va la coordenada Y, y a continuación la coordenada .X.

Lo primero que se nos ocurrió fue comprobar los ejes del sistema MAGNA-SIRGAS / Colombia West zone en Digi3D.NET. Para ello, abrimos el panel Archivos de dibujo y pulsamos con el botón derecho del ratón en el archivo de dibujo y seleccionamos la opción Mostrar sistema de referencia de coordenadas horizontal…, lo que hizo aparecer el cuadro de diálogo Parámetros del sistema de referencia de coordenadas horizontal que te muestro a continuación:

Parámetros del SRC Magna-Sirgas

Estos parámetros salen de la base de datos EPSG que lleva incluida Digi3D.NET en su instalación, y se puede ver claramente que en Tipo de sistema de coordenadas se indica que los ejes son Norte, Este (viene en inglés), y no Este, Norte. En realidad, tal y como se puede ver en el vídeo al final de esta entrada en el blog, ese texto «Cartesian 2D CS. Axes: ….» no lo crea dinámicamente Digi3D.NET, sino que se extrae como un texto que aparece en la base de datos. Para ver bien el orden de los ejes, podemos consultar la cadena WKT que crea Digi3D.NET para ese sistema de coordenadas:

PROJCS["MAGNA-SIRGAS / Colombia West zone",
GEOGCS["MAGNA-SIRGAS",
DATUM["Marco Geocentrico Nacional de Referencia",
SPHEROID["GRS 1980",6378137,298.257222101,
AUTHORITY["EPSG","7019"]],
AUTHORITY["EPSG","6686"]],
PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],
UNIT["grados",0.01745329251994328,AUTHORITY["EPSG","9122"]],
AXIS["Lat",North],AXIS["Long",East],AUTHORITY["EPSG","4686"]],
PROJECTION["Transverse_Mercator"],
PARAMETER["latitude_of_origin",4.596200416666666],
PARAMETER["central_meridian",-77.07750791666663],
PARAMETER["scale_factor",1],
PARAMETER["false_easting",1000000],
PARAMETER["false_northing",1000000],
PARAMETER["semi_major",6378137],
PARAMETER["semi_minor",6356752.314140356],
UNIT["metros",1,AUTHORITY["EPSG","9001"]],
AXIS["N",North],
AXIS["E",East],
AUTHORITY["EPSG","3115"]]

El usuario allí nos asegura que en el sistema MAGNA-SIRGAS / Colombia West zone la primera coordenada es la X, y la segunda es la Y, de modo que algo debe estar haciendo mal Digi3D.NET, o no. Vamos a analizarlo…

Si creas una cuenta en http://epsg.org/ y te descargas el dataset, verás que distribuyen la base de datos como una base de datos Microsoft Access. Digi3D.NET no puede utilizar un base de datos en formato Microsoft Access porque los programas de 64 bits tienen prohibido acceder a este tipo de bases de datos, así que hace años convertimos esa base de datos en una base de datos Microsoft SQL Server Compact, que tiene la característica de que sí que se puede acceder desde programas de 64 bits (y de 32 bits obviamente). Estas bases de datos tienen extensión .sdf y existen varias versiones. La que se instala con Digi3D.NET es la última versión, la 4.0.

El instalador de Digi3D.NET almacena esta base de datos en la carpeta %ProgramData%\[versión del programa]\OpenGis y tiene como nombre: epsg_es_ES.sdf si nuestra instalación es en español o epsg_en_US.sdf si nuestra instalación es es inglés.

Podemos abrir archivos .sdf versión 4.0 con una herramienta gratuita de Microsoft denominada Microsoft WebMatrix 3.0.

Instala el programa y sigue los siguientes pasos:

  1. Ejecuta el programa Microsoft WebMatrix. Te mostrará una página inicial con tres botones:  My sites, New y Open.
  2. Pulsa el botón Open. Aparecerá un menú contextual con varias opciones.
  3. Selecciona la opción Folder en el menú contextual. Aparecerá un cuadro de diálogo para seleccionar la carpeta a abrir.
  4. Selecciona la carpeta en la que está la base de datos EPSG y pulsa aceptar. Comprobarás que aparecen en el panel lateral izquierdo los archivos disponibles en dicha carpeta, entre ellos el archivo .sdf.
  5. Haz doble clic en el archivo .sdf. Comprobarás que cambia el menú y te muestra iconos relacionados con base de datos.
  6. Pulsa el botón New Query (nueva consulta). Se creará una ventana que te va a permitir teclear consultas SQL.
  7. Copia la siguiente consulta SQL y pulsa el botón Execute:
    SELECT * FROM [Coordinate Reference System] WHERE [COORD_REF_SYS_CODE]=3115

    Comprobarás que aparecen abajo los parámetros del sistema de referencia de coordenadas MAGNA-SIRGAS / Colombia West Zone. Entre ellas el código del sistema de coordenadas asociado, que es 4500.

  8. Ahora vamos a ver los ejes del sistema de coordenadas 4500, Para ello teclea la siguiente consulta:
    SELECT * FROM [Coordinate Axis] WHERE COORD_SYS_CODE=4500

    Comprobarás que aparecen dos ejes: El eje E y el eje N. En un principio aparece en el orden en el que le interesa al usuario, es decir, primero la coordenada X (este) y luego la coordenada Y (norte), pero en bases de datos el orden en el que aparecen los registros no vincula nada, quizás esta misma consulta con otro sistema de gestos de bases de datos muestre a información en otro orden. Los señores del EPSG lo saben, por eso añadieron un campo denominado ORDER en la tabla COORD_SYS_CODE, y si te fijas, el orden está mal: En el eje Este aparece un 2 y en el eje Norte aparece un 1.

    De hecho, Digi3D.NET no utiliza la consulta SQL que te he indicado en este paso para averiguar el nombre de los ejes, sino que utiliza la siguiente:

    SELECT * FROM [Coordinate Axis] WHERE COORD_SYS_CODE=4500 ORDER BY [Order]
    

    Si la ejecutas, comprobarás que el primer eje es el Norte y el segundo el Este. Esta es la causa por la cual Digi3D.NET está creando los ejes de forma incorrecta. En la base de datos EPSG viene mal. Vamos a solucionarlo.

  9. Tenemos que cambiar el valor de ORDER de los registros 44 (el registro para el eje Norte del sistema de referencias 4500 que representa el eje Norte) y cambiar el valor a 2, y poner un valor 1 en el registro 43 que representa el eje Este para el sistema de coordenadas 4500.
    Para ello ejecutaremos las siguientes consultas SQL:

    UPDATE [Coordinate Axis] SET [ORDER]=1 WHERE COORD_AXIS_CODE=43
    UPDATE [Coordinate Axis] SET [ORDER]=2 WHERE COORD_AXIS_CODE=44
    

y asunto solucionado.

Puedes ver cómo lo hago en el siguiente vídeo:

 

 

 

 

 

 

Agrupando grupos de atributos de BBDD en Digi3D.NET

Si estás creando cartografía con Digi3D.NET y las geometrías tienen información de base de datos, es posible que la cantidad de atributos a mostrar sea muy grande.

Es posible que te interese agrupar los distintos campos en función de algún criterio, y que los atributos agrupados únicamente sean visibles cuando lo indique el usuario.

Acabamos de añadir a Digi3D.NET la posibilidad de indicar en los nombres de los campos (que aparecen en el esquema de base de datos en el Editor de Tablas de Códigos) un nombre (opcional) de grupo. Los campos que tengan un grupo asociado se agruparán en un nodo con dicho nombre en los paneles y cuadros de diálogo que muestran campos de base de datos.

Digitab mostrando el campo Grupo en los atributos de un esquema de bbdd

En las siguientes capturas, puedes ver el panel de Campos de la base de datos mostrando los atributos de la tabla AAA010. Puedes comprobar que aparece un grupo denominado Comunes. Por defecto Digi3D.NET muestra los grupos cerrados. Es responsabilidad del usuario abrir el grupo que le interese. Los campos que no tienen asociado un grupo se muestran siempre.

De esta manera reducimos el número de atributos visibles por parte del usuario y dejamos visibles el 100% de las ocasiones los atributos que va a modificar habitualmente. Los atributos que no varían (o que lo hacen en muy pocas ocasiones) aparecen dentro del grupo Comunes, de manera que no molestan al usuario.

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

 

Panel Propiedades de la entidad seleccionada

Acabamos de añadir a Digi3D.NET un nuevo panel que te va a ayudar al digitalizar geometrías con información de base de datos.

Este panel (que puedes hacer aparecer mediante la opción del menú Ventana/Propiedades de la entidad seleccionada) muestra el código o los códigos de la entidad que acabas de seleccionar (independientemente del motivo de la selección) y su información asociada de base de datos. Nos va a servir para ver rápidamente los atributos de BBDD que tiene una determinada entidad.

No muestra un histórico de códigos de entidades seleccionadas como el Panel de Tentativos, sino que siempre muestra los códigos de la última entidad seleccionada. Si la entidad tiene un único código, te mostrará en el listado superior únicamente ese código. Si la entidad tiene más de un códigos, te mostrará en la parte superior todos sus códigos.

Si seleccionas un código (por defecto Digi3D.NET seleccionará automáticamente por ti el primer código de la entidad según la tentativas/seleccionas), y este código tiene enlace a base de datos, en la parte inferior se mostrarán los valores de los campos almacenados en la base de datos para el registro al que apunta el código. Esto es así únicamente si estás conectado con base de datos.

¿Cómo conectarme con una base de datos?

Si estás trabajando con un archivo de dibujo .bin o .bind, rellenando los campos Modelo de datos y Cadena de conexión en la pestaña Archivo de Dibujo del cuadro de diálogo Nuevo proyecto.

Si estás trabajando con archivos Shapefile o con archivos de Geomedia, no tendrás que hacer nada, por el mero hecho de cargar archivos, ya tienes asociada su base de datos.

Puedes ver este nuevo panel en el siguiente vídeo:

 

 

 

Mejoras en la personalización de campos de BBDD

Si trabajamos en Digi3D.NET con bases de datos, al seleccionar un código asociado a una tabla de base de datos se muestran los campos de dicha tabla en el panel de Campos de la base de datos tal y como puedes ver a continuación:

Panel campos de la base de datos

En las primeras versiones del programa se mostraba el nombre del campo en la tabla, pero como el nombre puede ser algo poco descriptivo como FUN o WID por ejemplo, añadimos la posibilidad de indicar en el Editor de Tablas de códigos:

Título en los campos de BBDD en DigiTab

…e hicimos que Digi3D.NET por defecto mostrase ese título en los campos de las tablas en el panel de Campos de la base de datos, haciendo que ya no apareciera el nombre original del campo.

El problema es que no siempre llueve a gusto de todos, y nos han solicitado la posibilidad de mostrar el nombre del campo y no el título, así que hemos añadido en la configuración del programa una nueva sección denominada Base de datos con un único parámetro de configuración denominado Nombre a mostrar. Este parámetro tiene tres posibles valores:

  • Nombre
  • Título
  • Nombre y título

De esta manera se mostrarán los campos en el formato que más te interese.

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

 

Mejoras en las condiciones en formatos de archivos GIS

Digi3D.NET dispone desde hace un año aproximadamente de una herramienta que permite diferenciar códigos en distintas geometrías almacenadas en una misma tabla de base de datos en formatos de archivos SIG como son Geomedia y Shapefile.

En el programa Editor de Tablas de códigos podemos añadir condiciones al campo Condiciones asociado con cada código. En estas condiciones básicamente podemos poner el nombre de un campo y un valor. Podemos poner tantas condiciones como queramos.

De esta manera, si por ejemplo disponemos de una tabla denominada VIAS_DE_COMUNICACION que almacena (sorprendentemente) geometrías de tipo vías de comunicación,  y ésta dispone entre otros de los campos ESTADO y CARRILES, podemos indicarle a Digi3D.NET si se encuentra en esta tabla una geometría que tenga los siguientes valores:

ESTADO=27

que considere esa geometría una Autopista o autovía, pero si en vez de esos valores, se encuentra con una geometría con valores:

ESTADO=44

que considere esa geometría como una autopista en construcción.

Esto lleva con nosotros un año aproximadamente. Lo que hemos añadido hoy es la posibilidad de utilizar distintos operadores, pues hasta hoy el único operador que se aceptaba era el de igualdad, de modo que únicamente se podía comprobar si el atributo X es igual al valor Y.

Hemos añadido los siguientes operadores:

Operador a introducir en la tabla de códigos  Significado
 <  Menor
 <=  Menor o igual
 =  Igual
 >=  Mayor o igual
 >  Mayor

de esta manera, si por ejemplo queremos diferenciar entre carretera y autopista en función del número de carriles, y suponiendo que el número de carriles se almacena en el campo CARRILES, podríamos hacer algo así:

Añadir al código de Carretera estas condiciones:

ESTADO=27
CARRILES<=2

Al código de Carretera en construcción las condiciones:

ESTADO=44
CARRILES<=2

Al código de Autopista las condiciones:

ESTADO=27
CARRILES>2

Al código de Autopista en construcción las condiciones:

ESTADO=44
CARRILES>2

Puedes descargarte el ejemplo del vídeo de a continuación de la siguiente URL: http://digi21.blob.core.windows.net/ejemplos/OperadoresEnCondicionesDeCodigos.zip

y a continuación tienes un vídeo en el que puedes ver esta funcionalidad en acción:

 

 

Alias de códigos

Acabamos de añadir a Digi3D.NET una funcionalidad que puede ayudar a operadores que estén acostumbrados a una codificación a trabajar y aprender progresivamente con otra codificación: Alias de códigos.

Básicamente consiste en que podemos añadir (de manera opcional) a un código una serie de códigos que actuarán como alias, de manera que si por ejemplo el operador está acostumbrado a utilizar el código 020400 para curvas de nivel directoras y comienza con un trabajo nuevo que requiere de una nueva codificación en la cual la curva de nivel directora es por ejemplo ABCDEFG, podemos añadir al código ABCDEFG como alias el código 020400.

El operador posiblemente tenga creados archivos de macro instrucciones o asignaciones de teclas que llamen a COD=020400. Digi3D.NET comprobará que existe un código que tiene un alias con ese código y seleccionará de forma automática el código ABCDEFG.

En la práctica el operador verá en el desplegable de códigos el código ABCDEFG (que posiblemente desconocía), pero lo ha seleccionado mediante el código que sí que conocía.

Para añadir alias de códigos a un código sigue los siguientes pasos:

  • Ejecuta el programa Editor de Tablas de Códigos.
  • Selecciona la opción del menú Archivo/Abrir y carga el archivo a modificar.
  • Selecciona la pestaña Códigos.
  • Localiza el código al que quieres añadir un alias.
  • En la sección Códigos, localiza el valor de Alias y añade el alias. Puedes añadir tantos alias como quieras. En caso de poner más de uno, tendrás que separarlos por comas.
  • Pulsa el botón Aceptar del programa Editor de Tablas de Códigos y guarda los cambios.

Puedes ver esta funcionalidad en el siguiente vídeo:

Temas visuales en Digi3D.NET

Los programas modernos permiten que el usuario seleccione el tema visual de manera que los menús, barras de herramientas, paneles y ventanas se adapten al gusto del usuario.

Hacía tiempo que queríamos añadir esa posibilidad a Digi3D.NET para permitir que el usuario decida cómo quiere ver el programa, y hoy es el día en el que te presentamos esta nueva funcionalidad:

Acabamos de añadir en Digi3D.NET la posibilidad de seleccionar el tema con el que se muestra el interfaz de usuario entre las siguientes opciones:

  • Tema claro.
  • Tema oscuro.
  • Tema azul.

La selección de tema se almacena por usuario, de modo que si el equipo es utilizado por varios usuarios, cada uno puede seleccionar el tema con el que se sienta más cómodo.

Puedes cambiar el tema mediante siguiendo los siguientes pasos:

  •  Selecciona la opción del menú Herramientas/Configuración… Aparecerá el cuadro de diálogo Configuración.
  • Despliega la opción Comunicación con el usuario.
  • Cambia de tema haciendo clic a la derecha de Tema.
  • Pulsa el botón Aceptar almacenando la configuración de usuario.
  • Reinicia el programa.

Estos cambios afectan tanto al Digi3D.NET como al Editor de tablas de códigos, y no únicamente a menús y paneles, sino a todos los cuadros de diálogo que muestran los programas.

Hemos cuidado con mucho mimo todos los detalles, como por ejemplo volver a repintar todos los iconos en el tema oscuro.

¿Qué tema te gusta más?

 

 

Modelo semántico

En la entrada del blog relaciones geométricas entre entidades te explicamos los tipos de relaciones geométricas que es capaz de analizar Digi3D.NET, y se introdujeron una serie de órdenes que básicamente servían para que el usuario pueda probar esas nuevas relaciones (y descubrir errores, porque seguro que algún caso se localizará que no se ha contemplado) y aprender en qué casos el programa da positivo y en qué casos negativo a la hora de analizar  relaciones geométricas entre dos entidades, pero por sí mismas esas órdenes carecían de sentido más que el puramente formativo o de depuración de errores.

Lo que te presentamos hoy es la causa por la cual se añadió esa lógica al programa, que no es más que la posibilidad de añadir un Modelo semántico, Modelo de datos, Modelo de Control de Calidad de la Cartografía, o como lo quieras llamar. A partir de ahora lo voy a llamar Modelo Semántico.

Gracias a esta novedad, vas a poder hacer trabajos como M.G.C.P., B.T.A., Grafcan, Geomadrid, etc. con la seguridad de que lo que sale de restitución está bien hecho, sin error alguno, ya que Digi3D.NET se encarga de analizar todas las reglas en tiempo real, según digitalizas. Las posibilidades son infinitas, tal y como vas a poder ver un poco más adelante.

Para ello hemos hecho las siguientes modificaciones al programa:

  • Hemos añadido una pestaña nueva al programa Editor de Tablas de Códigos.
  • Hemos añadido una nueva orden a Digi3D.NET.
  • Hemos añadido una nueva sección en el cuadro de diálogo de configuración de Digi3D.NET.
Y luego las cosas que no se ven:
  • Muchos cambios dentro del motor de topología de Digi3D.NET.
  • Más cambios dentro del motor de topología de Digi3D.NET.
  • Y más cambios ☺

Modificaciones en el Editor de Tablas de Códigos.

Hemos añadido al programa Editor de Tablas de Códigos una nueva pestaña (puedes verla en la imagen que encabeza esta entrada en el blog) denominada Modelo Semántico que nos va a permitir añadir una serie de reglas que van a definir incompatibilidades entre entidades.

Las reglas están formadas por los siguientes componentes:

    • El código de las entidades a las que se aplica la regla.
    • El tipo de entidad al que se aplica la regla, que pueden ser:
      • Puntos.
      • Líneas abiertas.
      • Áreas (polígonos o líneas cerradas).
    • Un mensaje de error a mostrar en caso de que se cumpla la regla (es decir, en caso de que se detecte alguna incompatibilidad).
    • Una o varias condiciones (que básicamente son relaciones entre entidades).
    • Un valor booleano (positivo o negativo) que indica si la regla se cumple en caso de que alguna de las condiciones anteriores de como resultado positivo o negativo.
      • Si indicamos aquí que la regla se cumple en caso de que alguna condición de positivo, con que una sola de las condiciones de como resultado positivo, se considerará que la regla se cumple.
      • Si indicamos aquí que la regla se cumple en caso de que alguna condición de negativo, se analizarán todas las condiciones, y en caso de que todas ellas den como resultado negativo, se considerará que la regla se cumple.

Opcionalmente además se pueden añadir los siguientes componentes a una regla:

      • Nombre de la regla, como por ejemplo Error 127.
      • Una URL para abrir un navegador a una página que explique el problema detectado.

Por ejemplo, supongamos que queremos que se muestre el mensaje de error: Las curvas de nivel no pueden terminar dentro de un área de océano si el operador dibuja una curva de nivel que entra dentro de un área de océano.

Vamos a suponer que el código de curva de nivel es: Curva y que el código de océano es (sorprendentemente): Océano.

Bien, pues podemos añadir una regla que diga:

      • Si la entidad tiene el código: Curva
      • Y es de tipo: Linea
      • Mostrar el mensaje de error: Las curvas de nivel no pueden terminar dentro de un área de océano
      • En caso de que alguna de las siguientes condiciones:
        • La línea termina dentro del área
        • La línea termina en el borde del área
      • De como resultado: Verdadero

Si el operador dibuja una línea de curva de nivel, en caso de que el código de curva de nivel tenga activo el análisis de modelos semánticos en tiempo real (te lo explico más adelante), Digi3D.NET analiza todas las reglas añadidas en el modelo semántico y, en caso de localizar alguna regla en la cual esté involucrado el código: Curva comprobará si se cumple la regla. En caso afirmativo, mostrará un cuadro de mensaje al usuario indicando de la condición del error, que en este caso será el mensaje Las curvas de nivel no pueden terminar dentro de un área de océano.

Añadir una regla es muy sencillo, tan solo tenemos que pulsar el botón Añadir regla en la pestaña Modelo semántico del programa Editor de Tablas de Códigos.

Aparecerá el cuadro de diálogo Añadir regla semántica que nos va a permitir introducir un código o una etiqueta (si incluyes una etiqueta se considerarán todos los códigos que tengan esa etiqueta), el tipo de la entidad a la cual se aplicará la regla, el mensaje de error a mostrar, el booleano que indica si la regla se cumple si las condiciones son positivas o negativas y los dos campos opcionales de título y URL tal y como puedes ver a continuación:

Dialogo Anadir Regla Semantica

En esta captura de pantalla puedes ver este cuadro de diálogo mostrando los datos necesarios para añadir una regla semántica para todos los códigos que tengan la etiqueta Altimetría, en el que además se han rellenado los campos opcionales Nombre (me he inventado que ese es el error 127) y URL. Si te fijas la URL la he puesto para que apunte a un archivo local. Ya sería responsabilidad tuya crear ahí un archivo con ese nombre (E127.html en este caso) que explique al usuario información referente a ese error en particular.

Si te fijas en este cuadro de diálogo no estamos introduciendo las condiciones. Únicamente hemos creado la regla. Si aceptamos el cuadro de diálogo, se añadirá una regla sin ninguna condición a nuestro listado de reglas…

Regla sin condición

Para añadir una condición, tendrás que seleccionar la regla y pulsar el botón Añadir condición a esta regla. Aparecerá el cuadro de diálogo Añadir condición a regla semántica.

Dialogo anadir condición a regla semántica

Este cuadro de diálogo nos va a permitir añadir una condición (que no es más que una relación geométrica entre dos entidades) a la regla.

En una condición indicamos los siguientes componentes:

      • El código de la segunda entidad.
      • El tipo de la segunda entidad.
      • La relación geométrica entre las dos entidades.

El listado de relaciones geométricas posibles varía obviamente en función del tipo de entidad de la primera entidad y la segunda entidad.

En la siguiente tabla te muestro el conjunto relaciones posibles en función del tipo de la primera y segunda entidades:

Primera entidad Segunda entidad Relaciones posibles
 Punto  Punto
  • Disjuntos.
  • Coinciden.
 Punto  Linea
  • Disjuntos.
  • Coinciden.
  • El punto coincide con un extremo de la línea.
 Punto  Area
  • Disjuntos.
  • Coinciden.
  • El punto está en el interior del área.
 Linea  Linea
  • Disjuntos.
  • Se unen.
  • Se unen por sus extremos.
  • El extremo de la primera línea se une con la segunda.
  • Cruzan.
  • Solapan.
  • Iguales.
 Linea  Area
  • Disjuntos.
  • La línea termina en el borde del área.
  • Se unen.
  • La línea termina dentro del área.
  • La línea cruza el área.
  • Adyacentes.
  • La línea está completamente dentro del área.
 Area  Area
  • Disjuntos.
  • Se unen.
  • Adyacentes.
  • El primer área está completamente incluida dentro del segundo área.
  • El primer área incluye completamente al segundo área.
  • El primer área está incluida dentro del segundo área.
  • El primer área incluye al segundo área.
  • Solapan.
  • Iguales.

Como puedes comprobar no hay relaciones Área->Punto, ni Area->Línea, ni Línea->Punto ni tiene sentido añadirlas, porque las reglas se ejecutan siempre que el código de la entidad digitalizada esté involucrado en la regla (tanto si su código coincide con el principal de la regla como con el de cualquiera de las condiciones que tenga la regla), de manera que por ejemplo en el caso de querer marcar como errores las líneas de curva de nivel que terminen dentro de un área de océano, con crear la regla que define que las líneas de curva de nivel no pueden terminar en áreas de océano es suficiente. Esta regla se aplicará cada vez que digitalicemos una línea de curva de nivel pero también cada vez que digitalicemos un área de océano. Digi3D.NET se encargará de hacer las cosas bien automáticamente.

Por último nos queda indicar a Digi3D.NET si queremos que estas reglas se analicen en tiempo real, en el momento en el que el usuario está digitalizando una entidad. Es posible que no queramos analizarlas en tiempo real, sino que queramos analizarlas bajo demanda (hablaremos de esto en la siguiente entrada en el blog), de modo que tiene que haber alguna forma de indicar que la regla no se debe aplicar en tiempo real.

Para ello hemos añadido una propiedad adicional a las Propiedades del código de cada uno de los códigos que aparecen en la pestaña Códigos del programa Editor de Tablas de Códigos.

Esta propiedad se denomina Analizar reglas de modelo semántico. Si está activa, cuando finalicemos la digitalización de una entidad, se analizarán todas las reglas en las cuales esté involucrada dicha entidad.

Puedes ver esa nueva propiedad en la siguiente captura de pantalla:

Propiedad Analizar reglas de modelo semántico

Una orden más para Digi3D.NET

Tiene que haber alguna forma de activar y desactivar esto ¿no crees?. Quizás te interese deshabilitar temporalmente los análisis en tiempo real, para activarlos un poco más adelante.

Para ello hemos añadido una orden en Digi3D.NET denominada ANALIZAR_MODELO_SEMANTICO que es una variable de tipo booleano que por defecto está activada y que en caso de ser activada comienza el análisis semántico de las entidades cuyos códigos tengan activo el modelo semántico en tiempo real.

Una nueva sección de configuración en el cuadro de diálogo de configuración de Digi3D.NET

Y por último, hemos añadido en el cuadro de diálogo de configuración de Digi3D.NET una sección denominada Modelo semántico en la que podemos indicar parámetros como el método de comunicación de mensajes preferido (cuadro de mensajes, globo, síntesis de voz, ventana de tareas).

Puedes verlo en acción en el siguiente vídeo:

Insertando automáticamente puntos en las intersecciones al finalizar una línea

Tal y como se explica en Relaciones geométricas entre entidades, para que dichos análisis funcionen correctamente, es necesario que siempre que una entidad (punto, línea, polígono) cruce otra entidad exista un vértice en la intersección de ambas entidades.

Hasta hoy teníamos dos formas de insertar vértices en las intersecciones:

Pero estas órdenes tienen sus inconvenientes:

  • La orden tentativo inserta únicamente introduce vértices en las entidades en las que hemos tentativado (líneas y polígonos desde hace unos pocos días).
  • La orden de insertar vértice en la intersección de líneas visibles analiza todo el archivo, de modo que si éste tiene muchas entidades, puede demorarse. Además, trabaja únicamente con líneas. Si una línea se cruza con un polígono, no añade vértice alguno a las entidades que formen el polígono.

Acabamos de añadir a Digi3D.NET la variable booleana: AUTO_INSERTAR_VERTICE_INTERSECCION_AL_FINALIZAR_LINEA, que como su nombre indica, inserta automáticamente vértices en las intersecciones de la línea que acabas de digitalizar con el resto de intersecciones.

Esta orden tiene la característica de que sí que es capaz de añadir vértices en polígonos (en la línea que hace de límite del polígono o en cualquiera de las líneas que forman los huecos de éste), y además está optimizada pues únicamente analiza las líneas que se cruzan con la línea que acabas de digitalizar.

Esta orden no sabe de códigos, es decir que añadirá vertices a todas las líneas o polígonos que se crucen con la línea que acabas de digitalizar (y obviamente también añadirá esos vértices a la propia línea), independientemente de los códigos que tengan dichas líneas.

En el siguiente vídeo te muestro en acción esta nueva característica de Digi3D.NET.