AreaArea

Espacio de nombres: Digi21.DigiNG.Entities.Relations
Ensamblado: Digi21.DigiNG

Esta clase estática proporciona métodos que permiten analizar la relación entre áreas.

public static class AreaArea

Herencia Object → AreaArea

Observaciones

Un Área en este contexto se refiere a líneas cerradas, de manera que engloba tanto a cualquier geometría de tipo ReadOnlyPolygono cualquier ReadOnlyLineque esté cerrado.

Las relaciones entre dos áreas son excluyentes: para cada par de áreas a y b, en ese orden, se cumple exactamente una de estas nueve:

Relación Método que devuelve Verdadero
Iguales Equal
Disjuntas Disjoint
Tienen un punto de unión Join
Adyacentes Adjacent
a completamente dentro de b CompletelyWithin(a, b)
a dentro de b Within(a, b)
b completamente dentro de a CompletelyWithin(b, a)
b dentro de a Within(b, a)
Se solapan Overlap

Estos métodos solo analizan vértices; no calculan intersecciones entre lados. Para cada vértice de un área se comprueba si coincide con un vértice de la otra área (vértice común) o si está dentro o fuera de la otra área. Un vértice que está dentro de un hueco de la otra área cuenta como fuera. Un vértice que está sobre un lado de la otra área sin coincidir con ningún vértice suyo se ignora. Las comparaciones se hacen en planta, sin tener en cuenta la coordenada Z, con la tolerancia de la precisión del archivo, y el resultado no depende del vértice inicial ni del sentido de recorrido de los anillos.

Relación Condición
Iguales Los dos anillos exteriores tienen los mismos vértices, y los huecos también, con cualquier vértice inicial y sentido. Los vértices repetidos consecutivos no cuentan. También son iguales si hay vértices comunes y ningún vértice de un área está dentro ni fuera de la otra (los vértices que no son comunes están sobre los lados de la otra área).
Disjuntas Ningún vértice de un área está dentro de la otra y no hay vértices comunes.
a completamente dentro de b Los vértices de a están dentro de b, ninguno es común y ningún vértice de b, huecos incluidos, está dentro de a.
a dentro de b Ningún vértice de a está fuera de b, al menos uno es común y ningún vértice de b, huecos incluidos, está dentro de a. Si ningún vértice de a está dentro de b, se comprueba si el punto interior de a está dentro de b.
Adyacentes Ningún vértice de un área está dentro de la otra, hay vértices comunes y al menos un lado común (dos vértices comunes consecutivos en los dos anillos).
Tienen un punto de unión Ningún vértice de un área está dentro de la otra, hay vértices comunes y ningún lado común.
Se solapan Cualquier otro caso: hay vértices de un área dentro de la otra y ninguna de las dos contiene a la otra.

Consecuencias de analizar solo vértices:

  • Si dos áreas se cruzan sin vértices comunes en el cruce ni vértices dentro de la otra área, el cruce pasa desapercibido: las áreas se consideran disjuntas.
  • Si dos áreas comparten un tramo de lado sin vértices comunes, tampoco se detecta el contacto.

Si un área tiene un anillo sin cerrar, de área nula o con una espiga (un vértice cuyos dos vecinos coinciden), estos métodos lanzan una excepción que indica el motivo y las coordenadas.

Métodos estáticos

Adjacent(ReadOnlyLine, ReadOnlyLine) Indica si dos areas de tipo ReadOnlyLineson adyacentes.
Adjacent(ReadOnlyLine, ReadOnlyPolygon) Indica si dos áreas de tipo ReadOnlyLine son adyacentes.
Adjacent(ReadOnlyPolygon, ReadOnlyLine) Indica si dos áreas de tipo ReadOnlyPolygon son adyacentes.
Adjacent(ReadOnlyPolygon, ReadOnlyPolygon) Indica si dos áreas de tipo ReadOnlyPolygon son adyacentes.
CompletelyWithin(ReadOnlyLine, ReadOnlyLine) Indica si el primera área de tipo ReadOnlyLine.
CompletelyWithin(ReadOnlyLine, ReadOnlyPolygon) Indica si el primera área de tipo ReadOnlyLine.
CompletelyWithin(ReadOnlyPolygon, ReadOnlyLine) Indica si la primera área de tipo ReadOnlyPolygon.
CompletelyWithin(ReadOnlyPolygon, ReadOnlyPolygon) Indica si la primera área de tipo ReadOnlyPolygon.
Disjoint(ReadOnlyLine, ReadOnlyLine) Indica si las dos áreas de tipo ReadOnlyLine son disjuntas.
Disjoint(ReadOnlyLine, ReadOnlyPolygon) Indica dos áreas de tipo ReadOnlyLine son disjuntas.
Disjoint(ReadOnlyPolygon, ReadOnlyLine) Indica dos áreas de tipo ReadOnlyPolygon son disjuntas.
Disjoint(ReadOnlyPolygon, ReadOnlyPolygon) Indica las dos áreas de tipo ReadOnlyPolygon son disjuntas.
Equal(ReadOnlyLine, ReadOnlyLine) Indica si las dos áreas de tipo ReadOnlyLine son iguales.
Equal(ReadOnlyLine, ReadOnlyPolygon) Indica dos áreas de tipo ReadOnlyLine son iguales.
Equal(ReadOnlyPolygon, ReadOnlyLine) Indica dos áreas de tipo ReadOnlyPolygon son iguales.
Equal(ReadOnlyPolygon, ReadOnlyPolygon) Indica las dos áreas de tipo ReadOnlyPolygon son iguales.
Join(ReadOnlyLine, ReadOnlyLine) Indica si las dos áreas de tipo ReadOnlyLine tienen un punto de unión.
Join(ReadOnlyLine, ReadOnlyPolygon) Indica dos áreas de tipo ReadOnlyLine tienen un punto en común.
Join(ReadOnlyPolygon, ReadOnlyLine) Indica dos áreas de tipo ReadOnlyPolygon tienen un punto en común.
Join(ReadOnlyPolygon, ReadOnlyPolygon) Indica las dos áreas de tipo ReadOnlyPolygon tienen un punto en común.
OuterRingAdjacent(ReadOnlyLine, ReadOnlyPolygon) Indica si el área ReadOnlyLine.
OuterRingAdjacent(ReadOnlyPolygon, ReadOnlyLine) Indica si el área ReadOnlyLine.
OuterRingAdjacent(ReadOnlyPolygon, ReadOnlyPolygon) Indica si el límite exterior de los dos ReadOnlyPolygon son adyacentes.
Overlap(ReadOnlyLine, ReadOnlyLine, out Point3D) Indica si las dos áreas de tipo ReadOnlyLine solapan y devuelve además las coordenadas de un punto por el que se cruzan.
Overlap(ReadOnlyLine, ReadOnlyPolygon, out Point3D) Indica si el área de tipo ReadOnlyLine y devuelve además las coordenadas de un punto por el que se cruzan.
Overlap(ReadOnlyPolygon, ReadOnlyLine, out Point3D) Indica si el área de tipo ReadOnlyPolygon y devuelve además las coordenadas de un punto por el que se cruzan.
Overlap(ReadOnlyPolygon, ReadOnlyPolygon, out Point3D) Indica si las dos áreas de tipo ReadOnlyPolygon solapan y devuelve además las coordenadas de un punto por el que se cruzan.
Within(ReadOnlyLine, ReadOnlyLine) Indica si la primera área de tipo ReadOnlyLine.
Within(ReadOnlyLine, ReadOnlyPolygon) Indica si la primera área de tipo ReadOnlyLine.
Within(ReadOnlyPolygon, ReadOnlyLine) Indica si la primera área de tipo ReadOnlyPolygon.
Within(ReadOnlyPolygon, ReadOnlyPolygon) Indica si la primera área de tipo ReadOnlyPolygon.