Archivo del Autor: joseangelmt

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?

 

 

Rotaciones de las imágenes en la ventana fotogramétrica

Acabamos a añadir a Digi3D.NET la orden ROTACIONES_CAMARAS.

Esta orden te va a permitir cambiar dinámicamente los ángulos Omega, Phi y Kappa con los que se visualizan las imágenes en la ventana fotogramétrica.

Puedes utilizar los deslizadores para cambiar los ángulos o asignar valores tecleándolos en los cuadros que aparece a la derecha de cada deslizador.

Si aceptas el cuadro de diálogo, se mantendrán los ajustes que has realizado. Si cancelas, se volverá a asignar a las imágenes los ajustes que tuvieran antes de ejecutar la orden.

Digi3D.NET memorizará (almacenando en el archivo .D3D asociado a cada modelo) los valores de los ángulos, de manera que la próxima vez que cargues ese modelo en particular, las imágenes mantendrán la rotación.

Si el modelo cargado es monoscópico, los deslizadores de la cámara derecha aparecerán deshabilitados, y los ángulos de rotación de la única imagen se modificarán mediante los controles para la cámara izquierda.

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

 

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.

Relaciones geométricas entre entidades

 

Hemos añadido a Digi3D.NET lógica para detectar relaciones geométricas entre entidades.

Estas relaciones nos van a servir en un futuro próximo para crear modelos semánticos en la tabla de códigos e indicar por ejemplo que una línea de mar no puede terminar en una curva de nivel, o que una alcantarilla no puede estar dentro de una línea de mar.

La primera fase para lograr este objetivo es añadir operaciones que le permitan a Digi3D.NET analizar relaciones entre geometrías.

Lo que te presento hoy es una serie de opciones que hemos añadido en el menú de Análisis Geométricos de la aplicación.

Definiciones:

Tenemos que definir primero qué es un punto, qué es una línea y lo más importante: qué es un área para Digi3D.NET.

Tipo de entidad Descripción
Punto Puntual de Digi con o sin rotación. Creados con la orden PUNTO, PUNTO_R, etc.
Línea Línea de dos o más puntos (abierta o cerrada). Se consideran únicamente las entidades de tipo línea, y no las entidades de tipo línea que formen parte de un elemento complejo.
Área Se considera un área a cualquier línea cerrada o polígono. Las líneas cerradas o polígonos que formen parte de un elemento complejo no se tienen en cuenta.

Así que en todo lo que te voy a explicar aquí, no se tienen en cuenta ni puntos ni nada que forme parte de un elemento complejo.

Condiciones:

Se tienen que cumplir una serie de condiciones para que los algoritmos que te voy a presentar funcionen:

  • No existencia de puntos dobles. Si una línea tiene dos vértices con la misma coordenada, eso va a hacer que los algoritmos no funcionen. Puedes eliminar automáticamente los posibles puntos dobles existentes en tus geometrías ejecutando la orden COMPRIMIR=1 1, pero ¡ATENTO!, si haces esto y tu cartografía es 3d real (es decir, si has dibujado los edificios con su Z real en limatesas, limahoyas, etc, te cargarás esos puntos.
  • Todas las operaciones trabajan en 2D, de modo que cuando digo que una línea esté cerrada me refiero a que las coordenadas X e Y del primer vértice de la línea coinciden con las coordenadas X e Y del último vértice de ésta, independientemente de la coordenada Z de ambas.
  • Para que funcionesn las operaciones que te presento a continuación deben cumplir la siguiente regla general: Todas las geometrías que intersecten con otras geometrías deben tener un punto común en la intersección.
  • Los test son mutuamente excluyentes, de modo que si el test

Te lo muestro en la siguiente tabla:

Los algoritmos funcionan bien Los algoritmos funcionan mal
Punto – Línea  ReglaPuntoLineaBien  ReglaPuntoLineaMal
Línea – Línea  ReglaLineaLineaBien  ReglaLineaLineaMal
Área – Área  ReglaAreaAreaBien  ReglaAreaAreaMal

Así que ya sabes, antes de ejecutar cualquiera de las órdenes que te voy a presentar en esta entrada, asegúrate de haber insertado vértices en la intersección de las entidades involucradas mediante la opción del menú Análisis geométricos/Insertar un vértice en el punto de cruce de las líneas o acostúmbrate a trabajar con la variable TENTATIVO_INSERTA activada.

Tipos de relaciones que es capaz de analizar Digi3D.NET:

Existen seis tipos de relaciones si nos fijamos en el tipo de entidad:

  • Punto con punto.
  • Punto con línea.
  • Punto con área.
  • Línea con línea.
  • Línea con área.
  • Area con área.

Si ejecutas Digi3D.NET comprobarás que en el menú de Análisis geométricos hemos añadido esas opciones, cada una de ellas con una serie de órdenes que siguen todas el mismo patrón: Nos van a solicitar que seleccionemos dos entidades y luego nos mostrarán un globo indicando si ambas entidades cumplen o no la condición.

Relaciones Punto – Punto

Título Ejemplo
 ¿Son disjuntos?  PuntoPuntoNoCoincidentes
 ¿Son coincidentes?  PuntoPuntoCoincidentes

Relaciones Punto – Línea

Título Ejemplo
¿El punto es disjunto con la línea?
¿La línea es disjunta con el punto?
 PuntoLineaNoCoincidentes
¿El punto coincide con el final de la línea?
¿El punto termina en la línea?
¿La línea termina en el punto?
 PuntoLineaCoincidentesExtremo.png
 ¿El punto es coincidente con la línea?  PuntoLineaCoincidentes

Relaciones Punto – Área​

Título Ejemplo
¿Es el punto disjunto con el área?
¿Es el área disjunta con el punto?
 PuntoAreaNoCoincidentes
¿El punto es coincidente con el borde del área?  PuntoAreaCoincidentes
¿El punto está en el dentro del área?
¿El area encierra al punto?
 PuntoInteriorArea

Relaciones Línea – Línea​

Título Ejemplo
¿Son disjuntas?  LineaNoCoincidenteLinea
 ¿El final de una línea se une con la otra línea?
¿El final de una línea se une con el final de la otra línea?
¿Una línea se une con otra línea?
 LineaCoincideLinea
 ¿Una línea atraviesa la otra línea?  LineaCruzaLinea
 ¿Una línea solapa con la otra línea?  LineaSolapaLinea
 ¿Las dos líneas son idénticas?  LineaLineaIguales

Relaciones Línea – Área​

Título Ejemplo
¿Son disjuntos? LineaAreaNoCoincidentes
¿El extremo de la línea se une con el borde del área? LineaAreaCoincidentes
¿La línea termina dentro del área? LineaTerminaEnArea
¿La línea atraviesa el área? LineaCruzaAreaLineaCruzaArea2
¿La línea es adyacente al área? LineaAdyacenteArea
¿La línea está dentro del área?
¿El área incluye a la línea?
LineaDentroArea

Relaciones Área – Área​

Título Ejemplo
¿Son disjuntos?  AreaDisjuntaArea
¿Un área es adyacente con el otro área?  AreaAdyacenteArea
¿Las áreas se unen?  AreaUneAreaAreaUneArea2
¿Las áreas solapan?  AreaSolapaAreaAreaSolapaArea2
¿El primer área incluye completamente al segundo área?
¿El segundo área está completamente dentro del primer área?
 AreaIncluyeAreaAreaIncluyeArea2AreaIncluyeArea3
¿Las dos áreas son idénticas?  AreaIdenticaArea

A continuación un vídeo en el que te muestro esta nueva característica en acción y aquí tienes el enlace para descargarte el archivo de dibujo que utilizo en el vídeo.

Truco: Elimina una orden de la ventana de dibujo en Digi3D.NET

En Digi3D.NET podemos anular órdenes para que no se puedan utilizar. Hoy te voy a explicar cómo eliminar órdenes de la ventana de dibujo.

Los motivos pueden ser varios: quizás estemos haciendo un trabajo en el que no queremos que se pueda ejecutar la orden COMPRIMIR, quizás queremos que se anule SALIR, o cualquier motivo.

Digi3D.NET no implementa la órdenes que ejecutas a diario, sino que estas están implementadas en distintas extensiones. A continuación te muestro las extensiones que instala el instalador de Digi3D.NET y el tipo de órdenes que implementa cada extensión:

Extensión Tipos de órdenes
DigiNG.OrdenesStandard Órdenes habituales como LINEA, ARCO, COMPRIMIR, etc.
DigiNG.OrdenesBaseDatos Órdenes relacionadas con bases de datos.
DigiNG.OrdenesMDT Órdenes relacionadas con Modelos Digitales del Terreno.
DigiNG.OrdenesRaster Órdenes relacionadas con imágenes.
DigiNG.OrdenesTopologia Órdenes relacionadas con topología.

La mayoría de órdenes que conoces están implementadas en la extensión DigiNG.OrdenesStandard. Puedes ver dónde está implementadas las órdenes en la ayuda, pues la referencia de cada orden muestra al final en una tabla en la que se indica la extensión en la que se implementa esa orden en particular (en el vídeo de al final de esta entrada te lo muestro).

Bien, pues todas estas extensiones publican los nombres de las órdenes en un archivo .XML que puedes encontrar en %ProgramFiles%\Digi21.net\Digi3D.NET\es-ES.

La última carpeta se llama es-ES pues es donde están las cosas de Español. Podrás comprobar que también hay una carpeta llamada en-US. Ahí tienes los mismos archivos que en la es-ES, pero todo el contenido que encuentres en esa carpeta es para el idioma inglés.

En esa carpeta te encontrarás unos archivos que se llaman igual que las extensiones enumeradas en la tabla anterior con extensión .xml.

Si abres una de ellas con tu editor de texto favorito, te encontrarás con todas las órdenes que implementa la extensión.

Ahora tan solo nos queda comentar o eliminar el nodo que representa a la orden que queremos eliminar. Para ello tenemos que buscar lo siguiente:

name=»orden»

Por ejemplo:

name=»salir»

Nuestro editor nos llevará al nodo XML en el que se publica la orden.

Podemos hacer dos cosas: o eliminamos el nodo completamente o lo comentamos mediante un comentario XML.

En el vídeo de a continuación te muestro como hacerlo.

Truco: Haz que Digi3D.NET consuma menos memoria y arranque más deprisa

Cuando instalas Digi3D.NET en tu equipo el instalador activa el 100% de las funcionalidades de éste activando todas las extensiones disponibles. Esto hace que el programa cargue muchas DLLs que posiblemente nunca has utilizado y que jamás vas a utilizar, y repercute en el tiempo de carga de la aplicación y en el consumo de memoria de éste.

Afortunadamente podemos deshabilitar los componentes que no utilizamos y configurar el programa a nuestra medida para hacer que éste cargue más rápido y que consuma menos memoria.

Digi3D.NET al arrancar busca en el registro de Windows las extensiones a cargar y carga todas las que estén habilitadas.

Vamos a ver las distintas familias de extensiones disponibles y cómo podemos indicar en el registro que no se cargue una extensión en particular.

Extensiones para la ventana fotogramétrica:

Cuando carga el módulo de Digi3D, éste se pone a cargar extensiones, y sus extensiones son los distintos sensores. Algunos sensores a su vez pueden tener sus propias extensiones.

Veamos en la siguiente tabla la ubicación de cada una de estas extensiones:

Extensión Clave del registro ¿Tiene extensiones propias?
Sensor ADS HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\Digi3D\Extensiones\Digi3D.ADS40Sensor No
Sensor cónico HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\Digi3D\Extensiones\Digi3D.ConicSensor Si
Sensor Ortofoto HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\Digi3D\Extensiones\Digi3D.Orthophoto  No
Sensor satelital HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\Digi3D\Extensiones\Digi3D.Rpc Si
Sensor VM Quasi Panoramic HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\Digi3D\Extensiones\Digi3D.VMQuasiPanoramic  No
Web Map Service HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\Digi3D\Extensiones\Digi3D.WMS No
Web Map Tile Service HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\Digi3D\Extensiones\Digi3D.WMTS No

Los sensores Cónico y Satelital tienen sus propias extensiones, que son las extensiones encargadas de importar orientaciones de distintos formatos de archivo.

Veamos la ubicación de las extensiones del sensor cónico:

Extensión Clave del registro
AeroOffice HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\Digi3D\Extensiones\Digi3D.ConicSensor\Extensiones\Camaras\AeroOffic
Digi3D HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\Digi3D\Extensiones\Digi3D.ConicSensor\Extensiones\Camaras\Digi3D
Dvp HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\Digi3D\Extensiones\Digi3D.ConicSensor\Extensiones\Camaras\Dvp
EspaKernel HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\Digi3D\Extensiones\Digi3D.ConicSensor\Extensiones\Camaras\EspaKernel
Imu HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\Digi3D\Extensiones\Digi3D.ConicSensor\Extensiones\Camaras\Imu
Lps HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\Digi3D\Extensiones\Digi3D.ConicSensor\Extensiones\Camaras\Lps
PatB HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\Digi3D\Extensiones\Digi3D.ConicSensor\Extensiones\Camaras\PatB
Pix4D HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\Digi3D\Extensiones\Digi3D.ConicSensor\Extensiones\Camaras\Pix4D
RapidCal HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\Digi3D\Extensiones\Digi3D.ConicSensor\Extensiones\Camaras\RapidCal
Summit Evolution HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\Digi3D\Extensiones\Digi3D.ConicSensor\Extensiones\Camaras\Summit

y a continuación las extensiones del sensor satelital:

Extensión Clave del registro
Ikonos HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\Digi3D\Extensiones\Digi3D.Rpc\Extensions\Digi3D.Rpc.Ikonos
Inpho HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\Digi3D\Extensiones\Digi3D.Rpc\Extensions\Digi3D.Rpc.Inpho
Isd HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\Digi3D\Extensiones\Digi3D.Rpc\Extensions\Digi3D.Rpc.Isd
Lps HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\Digi3D\Extensiones\Digi3D.Rpc\Extensions\Digi3D.Rpc.Lps
Nitf HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\Digi3D\Extensiones\Digi3D.Rpc\Extensions\Digi3D.Rpc.Nitf
Pleyades HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\Digi3D\Extensiones\Digi3D.Rpc\Extensions\Digi3D.Rpc.Pleyades
Socet Set HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\Digi3D\Extensiones\Digi3D.Rpc\Extensions\Digi3D.Rpc.SocetSet
Summit Evolution HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\Digi3D\Extensiones\Digi3D.Rpc\Extensions\Digi3D.Rpc.SummitEvolution

Extensiones para la ventana de dibujo:

DigiNG tiene dos familias de extensiones:

  • Proveedores de órdenes.
  • Importadores/exportadores de archivos de dibujo.

Veamos la ubicación para los distintos proveedores de órdenes:

Extensión Clave del registro
Motor de órdenes .NET HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\DigiNG\Extensiones\DigiNG.Interop
Bases de datos HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\DigiNG\Extensiones\DigiNG.OrdenesBaseDatos
Modelos digitales del terreno HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\DigiNG\Extensiones\DigiNG.OrdenesMDT
Raster HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\DigiNG\Extensiones\DigiNG.OrdenesRaster
Topologia HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\DigiNG\Extensiones\DigiNG.OrdenesTopologia
Pleyades HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\Digi3D\Extensiones\Digi3D.Rpc\Extensions\Digi3D.Rpc.Pleyades
Socet Set HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\Digi3D\

y a continuación la ubicación de los distintos importadores de archivos de dibujo:

Extensión Clave del registro
DEMS de ArcGis HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\DigiNG\IO\Digi21.Io.ArcGis.Dem
Archivos ASCII clásicos de Digi HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\DigiNG\IO\Digi21.Io.AsciiDigi
Archivos binarios clásicos de Digi HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\DigiNG\IO\Digi21.Io.Bin
Archivos binarios de doble precisión HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\DigiNG\IO\Digi21.Io.BinDouble
Archivos separados por comas HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\DigiNG\IO\Digi21.Io.Csv
Archivos DGN HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\DigiNG\IO\Digi21.Io.DGN
Archivos DWG HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\DigiNG\IO\Digi21.Io.DWG
Archivos Geo JSON HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\DigiNG\IO\Digi21.Io.GeoJSON
Archivos KML HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\DigiNG\IO\Digi21.Io.KML
Archivos Kork HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\DigiNG\IO\Digi21.Io.Kork
Archivos LAS HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\DigiNG\IO\Digi21.Io.Las
Archivos MDTopX HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\DigiNG\IO\Digi21.Io.Mdt
Imágenes (ortofotos, etc) HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\DigiNG\IO\Digi21.Io.Raster
Archivos Shapefile HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\DigiNG\IO\Digi21.Io.Shp
Archivos Scalable Vector Graphics HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\DigiNG\IO\Digi21.Io.Svg
Conexiones con Web Map Service HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\DigiNG\IO\Digi21.Io.Wms
Archivos XYZ HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\DigiNG\IO\Digi21.Io.Xyz

¿Cómo deshabilitar la carga de una extensión?

Todas las claves enumeradas en las tablas anteriores tienen un valor denominado Activated. Si este valor tiene asignado un 0 la extensión en particular no se carga, de manera que para hacer que Digi3D.NET no cargue el sensor VM Quasi Panoramic, lo único que tenemos que hacer es asignar el valor 0 al valor: HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\Digi3D\Extensiones\Digi3D.VMQuasiPanoramic\Activated.

Puedes ver cómo deshabilito casi todas las extensiones de Digi3D.NET en el siguiente vídeo: