Я пытаюсь изменить макет с CircleLayout на StaticLayout, сохраняя позиции вершины, чтобы сделать это, используя следующий код:
StaticLayout<VertexType, EdgeType> sLayout = new StaticLayout<VertexType, EdgeType>(graph,
new Transformer<VertexType, Point2D>() {
public Point2D transform(VertexType vertex) {
vertex.setX(layout.getX(vertex));
vertex.setY(layout.getY(vertex));
System.out.println(vertex.toString());
System.out.println(vertex.getX());
System.out.println(vertex.getY());
Point2D p = new Point2D.Double(vertex.getX(), vertex.getY());
return p;
}
}, dimension);
currentVV.setGraphLayout(sLayout);
Где currentVV - VisualizationViewer, а макет - этоCircleLayout.setX (double) и setY (double) являются методами из моей вершины Custon, по умолчанию вершина инициализируется с x = 0.0 и y = 0.0.На этом этапе я использовал println, чтобы проверить, все ли вершины правильно расположены, и это работает.Следующим шагом является сохранение графика с использованием GraphmlWritter:
GraphMLWriter<VertexType, EdgeType> graphWriter = new GraphMLWriter<VertexType, EdgeType>();
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(fileName)));
graphWriter.addEdgeData("label", null, "0", new Transformer<EdgeType, String>() {
@Override
public String transform(EdgeType v) {
return v.toString();
}
});
graphWriter.addVertexData("x", null, "0", new Transformer<VertexType, String>() {
public String transform(VertexType v) {
return Double.toString(v.getX());
}
});
graphWriter.addVertexData("y", null, "0", new Transformer<VertexType, String>() {
public String transform(VertexType v) {
return Double.toString(v.getY());
}
});
graphWriter.save(graph, out);
Проблема заключается в том, что, хотя большинство вершин успешно сохраняются, некоторые вершины сохраняются со значениями по умолчанию для X и Y(0.0), и я понятия не имею, почему.Если я пытаюсь сохранить график непосредственно из CircleLayout, получая значения X и Y из макета с помощью:
GraphMLWriter<VertexType, EdgeType> graphWriter = new GraphMLWriter<VertexType, EdgeType>();
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(fileName)));
graphWriter.addEdgeData("label", null, "0", new Transformer<EdgeType, String>() {
@Override
public String transform(EdgeType v) {
return v.toString();
}
});
graphWriter.addVertexData("x", null, "0", new Transformer<VertexType, String>() {
public String transform(VertexType v) {
return Double.toString(layout.getX(v));
}
});
graphWriter.addVertexData("y", null, "0", new Transformer<VertexType, String>() {
public String transform(VertexType v) {
return Double.toString(layout.getY(v));
}
});
Хотя это решение помогает, я бы предпочел сохранить значения X и Y в вершине какэто будет использоваться для будущих реализаций.Кто-нибудь знает, где мне не хватает информации о позиции?Благодаря.