Я знаю, что эта ветка немного устарела, но я думаю, что ее нужно возродить - надеюсь, что на этот вопрос еще не ответили. Причина в том, что ответ мистера О'Мададхайнса не смог мне помочь. (возможно, из-за моего дефицита и желания понимать документацию) После некоторой работы над техниками JUNG я был бы рад получить квалифицированный комментарий сейчас.
Есть два (кажущихся) простых способа преобразования краев в статическом макете.
Первый способ — переопределить метод «transform» Transformer, непосредственно влияющий на форму края:
Transformer<Graph<Context<String, String>, String>, Shape> edgeTransformer = new Transformer<Graph<Context<String,String>,String>,Shape>(){
@Override
public Shape transform(Graph<Context<String, String>, String> graphStringContext)
{
return (new Line2D.Double());
}
};
(если используется график "График")
Что касается смысловых ребер, которые должны соединяться, то простым примером будет возврат отдельного Line2D (который будет состоять из центральных точек, которые имеют затронутые вершины) в средство визуализации. Вызов метода, очевидно, таков:
vv.getRenderContext().setEdgeShapeTransformer(edgeTransform);
НО: это просто не работает. (может быть, потому что я сделал это неправильно; отсутствие руководств оправдывает это) Что бы кто-то ни пытался вернуть метод «преобразования», средство визуализации просто получит нулевые значения.
Вторая возможность — разделить вершинное преобразование на два преобразователя. Первый преобразователь установит только базовую позицию вершины, используя:
Transformer<String, Point2D> vertexPositionTransformer = new Transformer<String,Point2D>() {
@Override
public Point2D transform(String st) {
return new Point2D.Double();
};
2-й не является обязательным. Его можно использовать для изменения размера вершины или для того, чтобы фигура выглядела как угодно. Потребуются позиции преобразованных вершин местоположения, потому что этот преобразователь переопределит набор позиций.
Transformer<String, Shape> vertexShapeTransformer = new Transformer<String, Shape>() {
@Override
public Shape transform(String st) {
return new Ellipse2D.Double();
};
Теперь можно создать экземпляр макета. Он не будет построен по умолчанию с графом в качестве одного параметра, а с дополнительным параметром: vertexPositionTransformer. Это будет выглядеть так:
StaticLayout<String, String> layout = new StaticLayout<String, String>(graph, vertexPositionTransformer);
Преобразование ребер при построении макета автоматически установит конечные точки ребер в центр каждой включенной вершины.
В примерах кода я отказался от содержания методов «преобразования», которые, конечно, будут отличаться от цели к цели. Использование классов/объектов «Трансформатор» должно выполняться после добавления в граф вершин и ребер, на которые они будут воздействовать. Вот и все. Пожалуйста, исправьте плохой стиль и подобные проблемы. Мне приятно получать обратную связь.
Привет
Лукас Кошин
person
Lukas Koschine
schedule
26.09.2012