| |
---|
| | Collections.reverse(dstSide); |
---|
| | for (Reference ref: dstSide) { |
---|
| | if (ref != null) { |
---|
| | List<Reference> nextRefs = new ArrayList<>(succs.get(ref.getSrcObjectId())); |
---|
| | nextRefs = new ArrayList<>(nextRefs); |
---|
| | nextRefs.remove(ref); |
---|
| | double direction = getDirection(ref, objectToVertexMap) + 180 + angleStep; |
---|
| | while (nextRefs.size() > 0) { |
---|
| | Reference firstRef = getFirstReferece(nextRefs, referenceHistory, true); |
---|
| | List<String> path = new ArrayList<>(); |
---|
| | path.add(firstRef.getSrcObjectId()); |
---|
| | traverseSuccs(succs, firstRef, direction, true, referenceHistory, objectToVertexMap, fixed, path); |
---|
| | nextRefs.remove(firstRef); |
---|
| | direction = getDirection(firstRef, objectToVertexMap) + 180 + angleStep; |
---|
| | } |
---|
| | if (nextRefs.size() > 1) { |
---|
| | nextRefs = new ArrayList<>(nextRefs); |
---|
| | List<Reference> nextRefs2 = new ArrayList<>(); |
---|
| | do { |
---|
| | Reference firstRef = getFirstReferece(nextRefs, referenceHistory, true); |
---|
| | nextRefs2.add(firstRef); |
---|
| | nextRefs.remove(firstRef); |
---|
| | } while (nextRefs.size() > 1); |
---|
| | nextRefs2.add(nextRefs.remove(0)); |
---|
| | |
---|
| | if (nextRefs2.indexOf(ref) > 0) { |
---|
| | nextRefs = nextRefs2.subList(0, nextRefs2.indexOf(ref)); |
---|
| | double direction = getDirection(ref, objectToVertexMap) + 180 - angleStep; |
---|
| | Collections.reverse(nextRefs); |
---|
| | for (Reference r: nextRefs) { |
---|
| | List<String> path = new ArrayList<>(); |
---|
| | path.add(r.getSrcObjectId()); |
---|
| | traverseSuccs(succs, r, direction, true, referenceHistory, objectToVertexMap, fixed, path); |
---|
| | direction = getDirection(r, objectToVertexMap) + 180 - angleStep; |
---|
| | } |
---|
| | } |
---|
| | |
---|
| | if (nextRefs2.indexOf(ref) < nextRefs2.size() - 1) { |
---|
| | nextRefs = nextRefs2.subList(nextRefs2.indexOf(ref) + 1, nextRefs2.size()); |
---|
| | double direction = getDirection(ref, objectToVertexMap) + 180 + angleStep; |
---|
| | for (Reference r: nextRefs) { |
---|
| | List<String> path = new ArrayList<>(); |
---|
| | path.add(r.getSrcObjectId()); |
---|
| | traverseSuccs(succs, r, direction, true, referenceHistory, objectToVertexMap, fixed, path); |
---|
| | direction = getDirection(r, objectToVertexMap) + 180 + angleStep; |
---|
| | } |
---|
| | } |
---|
| | } |
---|
| | // nextRefs = new ArrayList<>(nextRefs); |
---|
| | // nextRefs.remove(ref); |
---|
| | // double direction = getDirection(ref, objectToVertexMap) + 180 + angleStep; |
---|
| | // while (nextRefs.size() > 0) { |
---|
| | // Reference firstRef = getFirstReferece(nextRefs, referenceHistory, true); |
---|
| | // List<String> path = new ArrayList<>(); |
---|
| | // path.add(firstRef.getSrcObjectId()); |
---|
| | // traverseSuccs(succs, firstRef, direction, true, referenceHistory, objectToVertexMap, fixed, path); |
---|
| | // nextRefs.remove(firstRef); |
---|
| | // direction = getDirection(firstRef, objectToVertexMap) + 180 + angleStep; |
---|
| | // } |
---|
| | } |
---|
| | } |
---|
| | |
---|
| | // Fix the reverse branches from the source side path. |
---|
| | Collections.reverse(srcSide); |
---|
| | for (Reference ref: srcSide) { |
---|
| | if (ref != null) { |
---|
| | List<Reference> nextRefs = new ArrayList<>(succs.get(ref.getSrcObjectId())); |
---|
| | nextRefs = new ArrayList<>(nextRefs); |
---|
| | nextRefs.remove(ref); |
---|
| | double direction = getDirection(ref, objectToVertexMap) + 180 - angleStep; |
---|
| | while (nextRefs.size() > 0) { |
---|
| | Reference firstRef = getFirstReferece(nextRefs, referenceHistory, false); |
---|
| | List<String> path = new ArrayList<>(); |
---|
| | path.add(firstRef.getSrcObjectId()); |
---|
| | traverseSuccs(succs, firstRef, direction, false, referenceHistory, objectToVertexMap, fixed, path); |
---|
| | nextRefs.remove(firstRef); |
---|
| | direction = getDirection(firstRef, objectToVertexMap) + 180 - angleStep; |
---|
| | } |
---|
| | if (nextRefs.size() > 1) { |
---|
| | nextRefs = new ArrayList<>(nextRefs); |
---|
| | List<Reference> nextRefs2 = new ArrayList<>(); |
---|
| | do { |
---|
| | Reference firstRef = getFirstReferece(nextRefs, referenceHistory, false); |
---|
| | nextRefs2.add(firstRef); |
---|
| | nextRefs.remove(firstRef); |
---|
| | } while (nextRefs.size() > 1); |
---|
| | nextRefs2.add(nextRefs.remove(0)); |
---|
| | |
---|
| | if (nextRefs2.indexOf(ref) > 0) { |
---|
| | nextRefs = nextRefs2.subList(0, nextRefs2.indexOf(ref)); |
---|
| | double direction = getDirection(ref, objectToVertexMap) + 180 + angleStep; |
---|
| | Collections.reverse(nextRefs); |
---|
| | for (Reference r: nextRefs) { |
---|
| | List<String> path = new ArrayList<>(); |
---|
| | path.add(r.getSrcObjectId()); |
---|
| | traverseSuccs(succs, r, direction, false, referenceHistory, objectToVertexMap, fixed, path); |
---|
| | direction = getDirection(r, objectToVertexMap) + 180 + angleStep; |
---|
| | } |
---|
| | } |
---|
| | |
---|
| | if (nextRefs2.indexOf(ref) < nextRefs2.size() - 1) { |
---|
| | nextRefs = nextRefs2.subList(nextRefs2.indexOf(ref) + 1, nextRefs2.size()); |
---|
| | double direction = getDirection(ref, objectToVertexMap) + 180 - angleStep; |
---|
| | for (Reference r: nextRefs) { |
---|
| | List<String> path = new ArrayList<>(); |
---|
| | path.add(r.getSrcObjectId()); |
---|
| | traverseSuccs(succs, r, direction, false, referenceHistory, objectToVertexMap, fixed, path); |
---|
| | direction = getDirection(r, objectToVertexMap) + 180 - angleStep; |
---|
| | } |
---|
| | } |
---|
| | } |
---|
| | // List<Reference> nextRefs = new ArrayList<>(succs.get(ref.getSrcObjectId())); |
---|
| | // nextRefs = new ArrayList<>(nextRefs); |
---|
| | // nextRefs.remove(ref); |
---|
| | // double direction = getDirection(ref, objectToVertexMap) + 180 - angleStep; |
---|
| | // while (nextRefs.size() > 0) { |
---|
| | // Reference firstRef = getFirstReferece(nextRefs, referenceHistory, false); |
---|
| | // List<String> path = new ArrayList<>(); |
---|
| | // path.add(firstRef.getSrcObjectId()); |
---|
| | // traverseSuccs(succs, firstRef, direction, false, referenceHistory, objectToVertexMap, fixed, path); |
---|
| | // nextRefs.remove(firstRef); |
---|
| | // direction = getDirection(firstRef, objectToVertexMap) + 180 - angleStep; |
---|
| | // } |
---|
| | } |
---|
| | } |
---|
| | } |
---|
| | |
---|
| |
---|
| | return; |
---|
| | } |
---|
| | List<Reference> nextRefs = preds.get(curObj); |
---|
| | if (nextRefs == null || nextRefs.size() == 0) { |
---|
| | if (path.size() > 2) fixPath(path, direction, objToVtx, fixed, false); |
---|
| | if (path.size() >= 2) fixPath(path, direction, objToVtx, fixed, false); |
---|
| | return; |
---|
| | } |
---|
| | nextRefs = new ArrayList<>(nextRefs); |
---|
| | do { |
---|
| |
---|
| | return; |
---|
| | } |
---|
| | List<Reference> nextRefs = succs.get(curObj); |
---|
| | if (nextRefs == null || nextRefs.size() == 0) { |
---|
| | if (path.size() > 2) fixPath(path, direction, objToVtx, fixed, false); |
---|
| | if (path.size() >= 2) fixPath(path, direction, objToVtx, fixed, false); |
---|
| | return; |
---|
| | } |
---|
| | nextRefs = new ArrayList<>(nextRefs); |
---|
| | do { |
---|
| |
---|
| | |
すべてのオブジェクトの動きを前向きに収集し、レイアウトできるようにしました。マージをお願いします。
ForwardLayout: マージします。ありがとうございます。
03984bf
intomaster
fromforwardLayout
on 20 Dec 2020