/** * Initializes the cut, so it is just below the root node. */ private void initializeCut() { lod = new HashSet<Arc>(); applied = new boolean[mt.nodes.length]; Node root = mt.nodes[0]; int[] outgoingArcs = new int[root.highestOutgoingArc - root.lowestOutgoingArc + 1]; for ( int i = 0; i < outgoingArcs.length; i++ ) { Arc arc = mt.arcs[i + root.lowestOutgoingArc]; if ( arc.interferes( roi, zScale ) ) { lod.add( arc ); } } applied[0] = true; }
private void forceRefinement( Arc region, List<Arc> toDo ) { Node modification = mt.nodes[region.sourceNode]; int incomingArc = modification.lowestIncomingArc; while ( incomingArc != -1 ) { if ( applied[mt.arcs[incomingArc].sourceNode] ) { lod.remove( mt.arcs[incomingArc] ); } else { forceRefinement( mt.arcs[incomingArc], toDo ); } incomingArc = mt.arcs[incomingArc].nextArcWithSameDestination; } for ( int arcId = modification.lowestOutgoingArc; arcId <= modification.highestOutgoingArc; arcId++ ) { if ( arcId != region.id ) { Arc arc2 = mt.arcs[arcId]; if ( arc2.interferes( roi, zScale ) ) { lod.add( arc2 ); toDo.add( arc2 ); } } } applied[modification.id] = true; } }
for ( int arcId = modification.lowestOutgoingArc; arcId <= modification.highestOutgoingArc; arcId++ ) { Arc arc = mt.arcs[arcId]; if ( arc.interferes( roi, zScale ) ) { lod.add( arc ); toDo.add( arc );