Menu

#158 initalize twice in setGraphLayout

open
nobody
None
5
2010-06-28
2010-06-28
Anonymous
No

AREA/CLASS/EXAMPLE AFFECTED: DefaultVisualizationModel, BasicVisualizationServer, Layout

SYNOPSIS: In DefaultVisualizationModel setGraphLayout for layouts with an iterative context are initalized twice (see below).
This can be a problem when the initalization takes a long time for ie large graphs on a KKlayout.

DESCRIPTION:
public void setGraphLayout(Layout<V,E> layout, Dimension viewSize) {
// remove listener from old layout
if(this.layout != null && this.layout instanceof ChangeEventSupport) {
((ChangeEventSupport)this.layout).removeChangeListener(changeListener);
}
// set to new layout
if(layout instanceof ChangeEventSupport) {
this.layout = layout;
} else {
this.layout = new ObservableCachingLayout<V,E>(layout);
}

((ChangeEventSupport)this.layout).addChangeListener(changeListener);

if(viewSize == null) {
viewSize = new Dimension(600,600);
}
Dimension layoutSize = layout.getSize();
// if the layout has NOT been initialized yet, initialize its size
// now to the size of the VisualizationViewer window
if(layoutSize == null) {
layout.setSize(viewSize); =============================== here (see below)
}
if(relaxer != null) {
relaxer.stop();
relaxer = null;
}
if(layout instanceof IterativeContext) {
layout.initialize();======================================here
if(relaxer == null) {
relaxer = new VisRunner((IterativeContext)this.layout);
relaxer.prerelax();
relaxer.relax();
}
}
fireStateChanged();
}

From AbstractLayout
public void setSize(Dimension size) {

if(size != null && graph != null) {

Dimension oldSize = this.size;
this.size = size;
initialize(); =========================== here

if(oldSize != null) {
adjustLocations(oldSize, size);
}
}
}

Discussion


Log in to post a comment.

MongoDB Logo MongoDB