private void ComputeBuffer(double distance, int quadrantSegments) { if (_makePrecise) { double scale = GetArgGeometry(0).PrecisionModel.Scale; distance *= scale; } BufferEdgeBuilder bufEdgeBuilder = new BufferEdgeBuilder(_cga, _li, distance, _makePrecise, quadrantSegments); ArrayList bufferEdgeList = bufEdgeBuilder.GetEdges(GetArgGeometry(0)); // DEBUGGING ONLY //WKTWriter wktWriter = new WKTWriter(); //Debug.println("Rings: " + wktWriter.write(toLineStrings(bufferEdgeList.iterator()))); ArrayList nodedEdges = this.NodeEdges(bufferEdgeList); //TESTING - node again to ensure edges are noded completely /* * List nodedEdges2 = nodeEdges(nodedEdges); * List nodedEdges3 = nodeEdges(nodedEdges2); * List nodedEdges4 = nodeEdges(nodedEdges3); * List nodedEdges5 = nodeEdges(nodedEdges4); * List nodedEdges6 = nodeEdges(nodedEdges5); */ //for (Iterator i = nodedEdges.iterator(); i.hasNext(); ) foreach (object obj in nodedEdges) { Edge e = (Edge)obj; InsertEdge(e); } ReplaceCollapsedEdges(); // DEBUGGING ONLY //Debug.println("Noded: " + wktWriter.write(toLineStrings(edgeList.iterator()))); _graph.AddEdges(_edgeList); ArrayList subgraphList = CreateSubgraphs(); PolygonBuilder polyBuilder = new PolygonBuilder(_geomFact, _cga); BuildSubgraphs(subgraphList, polyBuilder); ArrayList resultPolyList = polyBuilder.GetPolygons(); _resultGeom = ComputeGeometry(resultPolyList); //computeBufferLine(graph); }