| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- import Location from '../geom/Location'
- import Coordinate from '../geom/Coordinate'
- import Node from './Node'
- import NodeMap from './NodeMap'
- import Orientation from '../algorithm/Orientation'
- import DirectedEdge from './DirectedEdge'
- import System from '../../../../java/lang/System'
- import ArrayList from '../../../../java/util/ArrayList'
- import Quadrant from './Quadrant'
- import NodeFactory from './NodeFactory'
- export default class PlanarGraph {
- constructor() {
- PlanarGraph.constructor_.apply(this, arguments)
- }
- static constructor_() {
- this._edges = new ArrayList()
- this._nodes = null
- this._edgeEndList = new ArrayList()
- if (arguments.length === 0) {
- this._nodes = new NodeMap(new NodeFactory())
- } else if (arguments.length === 1) {
- const nodeFact = arguments[0]
- this._nodes = new NodeMap(nodeFact)
- }
- }
- static linkResultDirectedEdges(nodes) {
- for (let nodeit = nodes.iterator(); nodeit.hasNext(); ) {
- const node = nodeit.next()
- node.getEdges().linkResultDirectedEdges()
- }
- }
- printEdges(out) {
- out.println('Edges:')
- for (let i = 0; i < this._edges.size(); i++) {
- out.println('edge ' + i + ':')
- const e = this._edges.get(i)
- e.print(out)
- e.eiList.print(out)
- }
- }
- find(coord) {
- return this._nodes.find(coord)
- }
- addNode() {
- if (arguments[0] instanceof Node) {
- const node = arguments[0]
- return this._nodes.addNode(node)
- } else if (arguments[0] instanceof Coordinate) {
- const coord = arguments[0]
- return this._nodes.addNode(coord)
- }
- }
- getNodeIterator() {
- return this._nodes.iterator()
- }
- linkResultDirectedEdges() {
- for (let nodeit = this._nodes.iterator(); nodeit.hasNext(); ) {
- const node = nodeit.next()
- node.getEdges().linkResultDirectedEdges()
- }
- }
- debugPrintln(o) {
- System.out.println(o)
- }
- isBoundaryNode(geomIndex, coord) {
- const node = this._nodes.find(coord)
- if (node === null) return false
- const label = node.getLabel()
- if (label !== null && label.getLocation(geomIndex) === Location.BOUNDARY) return true
- return false
- }
- linkAllDirectedEdges() {
- for (let nodeit = this._nodes.iterator(); nodeit.hasNext(); ) {
- const node = nodeit.next()
- node.getEdges().linkAllDirectedEdges()
- }
- }
- matchInSameDirection(p0, p1, ep0, ep1) {
- if (!p0.equals(ep0)) return false
- if (Orientation.index(p0, p1, ep1) === Orientation.COLLINEAR && Quadrant.quadrant(p0, p1) === Quadrant.quadrant(ep0, ep1)) return true
- return false
- }
- getEdgeEnds() {
- return this._edgeEndList
- }
- debugPrint(o) {
- System.out.print(o)
- }
- getEdgeIterator() {
- return this._edges.iterator()
- }
- findEdgeInSameDirection(p0, p1) {
- for (let i = 0; i < this._edges.size(); i++) {
- const e = this._edges.get(i)
- const eCoord = e.getCoordinates()
- if (this.matchInSameDirection(p0, p1, eCoord[0], eCoord[1])) return e
- if (this.matchInSameDirection(p0, p1, eCoord[eCoord.length - 1], eCoord[eCoord.length - 2])) return e
- }
- return null
- }
- insertEdge(e) {
- this._edges.add(e)
- }
- findEdgeEnd(e) {
- for (let i = this.getEdgeEnds().iterator(); i.hasNext(); ) {
- const ee = i.next()
- if (ee.getEdge() === e) return ee
- }
- return null
- }
- addEdges(edgesToAdd) {
- for (let it = edgesToAdd.iterator(); it.hasNext(); ) {
- const e = it.next()
- this._edges.add(e)
- const de1 = new DirectedEdge(e, true)
- const de2 = new DirectedEdge(e, false)
- de1.setSym(de2)
- de2.setSym(de1)
- this.add(de1)
- this.add(de2)
- }
- }
- add(e) {
- this._nodes.add(e)
- this._edgeEndList.add(e)
- }
- getNodes() {
- return this._nodes.values()
- }
- findEdge(p0, p1) {
- for (let i = 0; i < this._edges.size(); i++) {
- const e = this._edges.get(i)
- const eCoord = e.getCoordinates()
- if (p0.equals(eCoord[0]) && p1.equals(eCoord[1])) return e
- }
- return null
- }
- }
|