Archivos Mensuales: febrero 2016

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.