| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- import Noder from './Noder'
- import MCIndexNoder from './MCIndexNoder'
- import TopologyException from '../geom/TopologyException'
- import RobustLineIntersector from '../algorithm/RobustLineIntersector'
- import IntersectionAdder from './IntersectionAdder'
- export default class IteratedNoder {
- constructor() {
- IteratedNoder.constructor_.apply(this, arguments)
- }
- static constructor_() {
- this._pm = null
- this._li = null
- this._nodedSegStrings = null
- this._maxIter = IteratedNoder.MAX_ITER
- const pm = arguments[0]
- this._li = new RobustLineIntersector()
- this._pm = pm
- this._li.setPrecisionModel(pm)
- }
- setMaximumIterations(maxIter) {
- this._maxIter = maxIter
- }
- node(segStrings, numInteriorIntersections) {
- const si = new IntersectionAdder(this._li)
- const noder = new MCIndexNoder()
- noder.setSegmentIntersector(si)
- noder.computeNodes(segStrings)
- this._nodedSegStrings = noder.getNodedSubstrings()
- numInteriorIntersections[0] = si.numInteriorIntersections
- }
- computeNodes(segStrings) {
- const numInteriorIntersections = new Array(1).fill(null)
- this._nodedSegStrings = segStrings
- let nodingIterationCount = 0
- let lastNodesCreated = -1
- do {
- this.node(this._nodedSegStrings, numInteriorIntersections)
- nodingIterationCount++
- const nodesCreated = numInteriorIntersections[0]
- if (lastNodesCreated > 0 && nodesCreated >= lastNodesCreated && nodingIterationCount > this._maxIter)
- throw new TopologyException('Iterated noding failed to converge after ' + nodingIterationCount + ' iterations')
-
- lastNodesCreated = nodesCreated
- } while (lastNodesCreated > 0)
- }
- getNodedSubstrings() {
- return this._nodedSegStrings
- }
- get interfaces_() {
- return [Noder]
- }
- }
- IteratedNoder.MAX_ITER = 5
|