setLocation
레이아웃 방법으로 정점을 강제로 이동할 수 있습니다. 나는 귀하의 요청과 매우 유사한 것을 만들었습니다. 직선에서 정점 A에서 정점 B로 이동하는 정점을 생성합니다. 당신의 가장자리가 직선이 있다면 그것은 작동 할 수 있습니다 :
VertexCollider vtxCol = new VertexCollider(layout, vv, "nameOfVertexA", "nameOfVertexB");
vtxCol.setMaximumIterations(100);
vtxCol.setDesiredPrecision(1);
vtxCol.initialize();
Animator animator = new Animator(vtxCol);
animator.start();
회화 직선 가장자리 :
import java.awt.geom.Point2D;
import edu.uci.ics.jung.algorithms.layout.AbstractLayout;
import edu.uci.ics.jung.algorithms.util.IterativeProcess;
import edu.uci.ics.jung.visualization.VisualizationViewer;
public class VertexCollider extends IterativeProcess {
private static final String COLLIDER = "Collider";
private AbstractLayout<String, Number> layout;
private VisualizationViewer<String, Number> vv;
private Point2D startLocation;
private Point2D endLocation;
private Double moveX;
private Double moveY;
public VertexCollider(AbstractLayout<String, Number> layout, VisualizationViewer<String, Number> vv, String vertexA, String vertexB) {
this.layout = layout;
this.vv = vv;
startLocation = layout.transform(vertexA);
endLocation = layout.transform(vertexB);
}
public void initialize() {
setPrecision(Double.MAX_VALUE);
layout.getGraph().addVertex(COLLIDER);
layout.setLocation(COLLIDER, startLocation);
moveX = (endLocation.getX() - startLocation.getX())/getMaximumIterations();
moveY = (endLocation.getY() - startLocation.getY())/getMaximumIterations();
}
@Override
public void step() {
layout.setLocation(COLLIDER, layout.getX(COLLIDER) + moveX, layout.getY(COLLIDER) + moveY);
vv.repaint();
setPrecision(Math.max(Math.abs(endLocation.getX() - layout.transform(COLLIDER).getX()),
Math.abs(endLocation.getY() - layout.transform(COLLIDER).getY())));
if (hasConverged()){
layout.getGraph().removeVertex(COLLIDER);
}
}
}
당신은이 코드를 예를 들어이를 인스턴스화 할 수
Code Example
어떤 특성이 있는가 기본적으로 모서리가 직선이 아니기 때문에 모서리가 직선으로 설정됩니까? –