Search in sources :

Example 1 with Visualization

use of de.lmu.ifi.dbs.elki.visualization.visualizers.Visualization in project elki by elki-project.

the class DetailView method refresh.

/**
 * Do a refresh (when visibilities have changed).
 */
private synchronized void refresh() {
    // Clear
    pendingRefresh.set(null);
    if (LOG.isDebuggingFine()) {
        LOG.debugFine("Refresh in thread " + Thread.currentThread().getName());
    }
    boolean updateStyle = false;
    Iterator<Map.Entry<VisualizationTask, Visualization>> it = taskmap.entrySet().iterator();
    while (it.hasNext()) {
        Entry<VisualizationTask, Visualization> ent = it.next();
        VisualizationTask task = ent.getKey();
        Visualization vis = ent.getValue();
        if (vis == null) {
            vis = instantiateVisualization(task);
            ent.setValue(vis);
        }
        Element prevlayer = layermap.get(vis);
        Element layer = vis.getLayer();
        if (prevlayer == layer) {
            // Unchanged:
            // Current visibility ("not hidden")
            boolean isVisible = !SVGConstants.CSS_HIDDEN_VALUE.equals(layer.getAttribute(SVGConstants.CSS_VISIBILITY_PROPERTY));
            if (task.isVisible() != isVisible) {
                // scheduleUpdate(new AttributeModifier(
                // 
                layer.setAttribute(// 
                SVGConstants.CSS_VISIBILITY_PROPERTY, task.isVisible() ? SVGConstants.CSS_VISIBLE_VALUE : SVGConstants.CSS_HIDDEN_VALUE);
            }
        } else {
            if (task.has(RenderFlag.NO_EXPORT)) {
                layer.setAttribute(NO_EXPORT_ATTRIBUTE, NO_EXPORT_ATTRIBUTE);
            }
            if (prevlayer == null) {
                if (LOG.isDebuggingFine()) {
                    LOG.debugFine("New layer: " + task);
                }
                // Insert new!
                // TODO: insert position!
                getRoot().appendChild(layer);
            } else {
                if (LOG.isDebuggingFine()) {
                    LOG.debugFine("Updated layer: " + task);
                }
                // Replace
                final Node parent = prevlayer.getParentNode();
                if (parent != null) {
                    parent.replaceChild(/* new! */
                    layer, /* old */
                    prevlayer);
                }
            }
            layermap.put(vis, layer);
            updateStyle = true;
        }
    }
    if (updateStyle) {
        updateStyleElement();
    }
}
Also used : Visualization(de.lmu.ifi.dbs.elki.visualization.visualizers.Visualization) Entry(java.util.Map.Entry) VisualizationTask(de.lmu.ifi.dbs.elki.visualization.VisualizationTask) Element(org.w3c.dom.Element) Node(org.w3c.dom.Node)

Example 2 with Visualization

use of de.lmu.ifi.dbs.elki.visualization.visualizers.Visualization in project elki by elki-project.

the class DetailView method redraw.

@Override
protected void redraw() {
    boolean active = false;
    while (!updateQueue.isEmpty()) {
        Visualization vis = updateQueue.pop();
        if (!active) {
            Element prev = layermap.get(vis);
            vis.incrementalRedraw();
            final boolean changed = prev != vis.getLayer();
            if (LOG.isDebuggingFine() && changed) {
                LOG.debugFine("Visualization " + vis + " changed.");
            }
            active |= changed;
        } else {
            vis.incrementalRedraw();
        }
    }
    if (active || true) {
        refresh();
    }
}
Also used : Visualization(de.lmu.ifi.dbs.elki.visualization.visualizers.Visualization) Element(org.w3c.dom.Element)

Example 3 with Visualization

use of de.lmu.ifi.dbs.elki.visualization.visualizers.Visualization in project elki by elki-project.

the class DetailView method initialize.

private void initialize() {
    // Try to keep the area approximately 1.0
    width = Math.sqrt(getRatio());
    height = 1.0 / width;
    ArrayList<Visualization> layers = new ArrayList<>();
    // TODO: center/arrange visualizations?
    for (Iterator<VisualizationTask> tit = item.tasks.iterator(); tit.hasNext(); ) {
        VisualizationTask task = tit.next();
        if (task.isVisible()) {
            Visualization v = instantiateVisualization(task);
            if (v != null) {
                layers.add(v);
                taskmap.put(task, v);
                layermap.put(v, v.getLayer());
            }
        }
    }
    // Arrange
    for (Visualization layer : layers) {
        if (layer.getLayer() != null) {
            getRoot().appendChild(layer.getLayer());
        } else {
            LOG.warning("NULL layer seen.");
        }
    }
    double ratio = width / height;
    getRoot().setAttribute(SVGConstants.SVG_WIDTH_ATTRIBUTE, "20cm");
    getRoot().setAttribute(SVGConstants.SVG_HEIGHT_ATTRIBUTE, (20 / ratio) + "cm");
    getRoot().setAttribute(SVGConstants.SVG_VIEW_BOX_ATTRIBUTE, "0 0 " + width + " " + height);
    updateStyleElement();
}
Also used : Visualization(de.lmu.ifi.dbs.elki.visualization.visualizers.Visualization) VisualizationTask(de.lmu.ifi.dbs.elki.visualization.VisualizationTask) ArrayList(java.util.ArrayList)

Example 4 with Visualization

use of de.lmu.ifi.dbs.elki.visualization.visualizers.Visualization in project elki by elki-project.

the class DetailView method visualizationChanged.

@Override
public void visualizationChanged(VisualizationItem current) {
    // Make sure we are affected:
    if (!(current instanceof VisualizationTask)) {
        return;
    }
    final VisualizationTask task = (VisualizationTask) current;
    // Get the layer
    Visualization vis = taskmap.get(task);
    if (vis == null) {
        // Unknown only.
        boolean include = false;
        for (It<Projector> it = context.getVisHierarchy().iterAncestors(current).filter(Projector.class); it.valid(); it.advance()) {
            if ((item.proj != null && item.proj.getProjector() == it.get()) || taskmap.containsKey(it.get())) {
                include = true;
                break;
            }
        }
        if (!include) {
            // Attached to different projection.
            return;
        }
    }
    if (vis == null) {
        // New visualization
        taskmap.put(task, null);
        lazyRefresh();
    } else {
        Element prevlayer = layermap.get(vis);
        Element layer = vis.getLayer();
        if (prevlayer != layer) {
            lazyRefresh();
        } else {
            boolean isVisible = !SVGConstants.CSS_HIDDEN_VALUE.equals(layer.getAttribute(SVGConstants.CSS_VISIBILITY_PROPERTY));
            if (task.isVisible() != isVisible) {
                // Visibility has changed.
                lazyRefresh();
            }
        }
    }
}
Also used : Projector(de.lmu.ifi.dbs.elki.visualization.projector.Projector) Visualization(de.lmu.ifi.dbs.elki.visualization.visualizers.Visualization) VisualizationTask(de.lmu.ifi.dbs.elki.visualization.VisualizationTask) Element(org.w3c.dom.Element)

Example 5 with Visualization

use of de.lmu.ifi.dbs.elki.visualization.visualizers.Visualization in project elki by elki-project.

the class OverviewPlot method refresh.

/**
 * Do a refresh (when visibilities have changed).
 */
synchronized void refresh() {
    if (reinitOnRefresh) {
        LOG.debug("Reinitialize in thread " + Thread.currentThread().getName());
        reinitialize();
        reinitOnRefresh = false;
        return;
    }
    synchronized (plot) {
        boolean refreshcss = false;
        if (plotmap == null) {
            LOG.warning("Plotmap is null", new Throwable());
        }
        final int thumbsize = (int) Math.max(screenwidth / plotmap.getWidth(), screenheight / plotmap.getHeight());
        for (PlotItem pi : plotmap.keySet()) {
            for (Iterator<PlotItem> iter = pi.itemIterator(); iter.hasNext(); ) {
                PlotItem it = iter.next();
                for (Iterator<VisualizationTask> tit = it.tasks.iterator(); tit.hasNext(); ) {
                    VisualizationTask task = tit.next();
                    Pair<Element, Visualization> pair = vistoelem.get(it, task);
                    // New task?
                    if (pair == null) {
                        if (visibleInOverview(task)) {
                            pair = new Pair<>(null, null);
                            pair.first = plot.svgElement(SVGConstants.SVG_G_TAG);
                            pair.second = embedOrThumbnail(thumbsize, it, task, pair.first);
                            vistoelem.get(it, null).first.appendChild(pair.first);
                            vistoelem.put(it, task, pair);
                            refreshcss = true;
                        }
                    } else {
                        if (visibleInOverview(task)) {
                            // unhide if hidden.
                            if (pair.first.hasAttribute(SVGConstants.CSS_VISIBILITY_PROPERTY)) {
                                pair.first.removeAttribute(SVGConstants.CSS_VISIBILITY_PROPERTY);
                            }
                        } else {
                            // hide if there is anything to hide.
                            if (pair.first != null && pair.first.hasChildNodes()) {
                                pair.first.setAttribute(SVGConstants.CSS_VISIBILITY_PROPERTY, SVGConstants.CSS_HIDDEN_VALUE);
                            }
                        }
                    // TODO: unqueue pending thumbnails
                    }
                }
            }
        }
        if (refreshcss) {
            plot.updateStyleElement();
        }
    }
}
Also used : Visualization(de.lmu.ifi.dbs.elki.visualization.visualizers.Visualization) VisualizationTask(de.lmu.ifi.dbs.elki.visualization.VisualizationTask) Element(org.w3c.dom.Element)

Aggregations

Visualization (de.lmu.ifi.dbs.elki.visualization.visualizers.Visualization)12 VisualizationTask (de.lmu.ifi.dbs.elki.visualization.VisualizationTask)7 Element (org.w3c.dom.Element)5 VisualizationPlot (de.lmu.ifi.dbs.elki.visualization.gui.VisualizationPlot)3 ArrayList (java.util.ArrayList)2 Logging (de.lmu.ifi.dbs.elki.logging.Logging)1 AbortException (de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException)1 SimpleSVGViewer (de.lmu.ifi.dbs.elki.visualization.gui.SimpleSVGViewer)1 PlotItem (de.lmu.ifi.dbs.elki.visualization.gui.overview.PlotItem)1 Projector (de.lmu.ifi.dbs.elki.visualization.projector.Projector)1 AbstractVisualization (de.lmu.ifi.dbs.elki.visualization.visualizers.AbstractVisualization)1 ActionEvent (java.awt.event.ActionEvent)1 ActionListener (java.awt.event.ActionListener)1 File (java.io.File)1 Entry (java.util.Map.Entry)1 Node (org.w3c.dom.Node)1 EventTarget (org.w3c.dom.events.EventTarget)1