Как обновить размер макета с помощью Юнга при использовании режима комплектации? - PullRequest
2 голосов
/ 22 апреля 2011

Мне интересно, как изменить размер макета, связанного с VisualizationViewer, с помощью jung?

Я объясняю цель: на самом деле, при использовании SatelliteVisualizationViewer мы можем выбрать узел и переместить его в область, которая не покрыта SatelliteVisualisationViewer.

Мы можем видеть это в классе SatelliteViewDemo в дистрибутиве JUNG. Запустите демонстрацию, выберите узел и переместите его за пределы размера макета. Узел хорошо отображается в VisualizationViewer, но не в виде со спутника.

Итак, я пытаюсь добавить некоторый код в MouseListener PickingGraphMousePlugin, в частности в метод mouseReleased (...), чтобы обновить размер макета по размеру прямоугольника, который содержит все узлы графа. При этом SatelliteView должен быть обновлен. Но как это сделать?

Редактировать: Извините, что недостаточно подробно. Фактически, изменение размера макета не изменяет SatelliteView, поэтому вершина, расположенная вне макета (после операции выбора и перемещения), все еще не покрыта SatelliteView.

Может быть, я что-то пропустил ...

На самом деле реальный вопрос заключается в следующем: как изменить область, охватываемую SatelliteVisualizationViewer? !!!

Ответы [ 2 ]

0 голосов
/ 27 апреля 2011

Я хотел автоматически обновить вид со спутника относительно VisualizationViewer с включенной поддержкой выбора.

Я, наконец, принял другое решение: нет автоматического обновления вида со спутника, но панорамирование с помощью кнопки мыши 2 и масштабирование с помощью CTRL + Mouse_Wheel.

Вот класс, это может бытьполезно ...:

public class SatelliteVisualizationViewerMouseControler implements
        MouseListener, MouseMotionListener, MouseWheelListener {

    private SatelliteVisualizationViewer<SVertex, PEdge> vv;
    private Point drag_point;
    private double zoom_factor = 0.1;

    public SatelliteVisualizationViewerMouseControler(
            SatelliteVisualizationViewer<SVertex, PEdge> vv) {
        this.vv = vv;
    }

    @Override
    public void mouseDragged(MouseEvent e) {
        if (drag_point != null) {
            Point2D l_drag_point = vv.getRenderContext()
                .getMultiLayerTransformer()
                .inverseTransform(Layer.LAYOUT, drag_point);

        Point2D l_e_point = vv.getRenderContext()
                .getMultiLayerTransformer()
                .inverseTransform(Layer.LAYOUT, e.getPoint());

        double delta_x = l_e_point.getX() - l_drag_point.getX();
        double delta_y = l_e_point.getY() - l_drag_point.getY();

        double scale = vv.getRenderContext().getMultiLayerTransformer()
                .getTransformer(Layer.VIEW).getScale();

        vv.getRenderContext().getMultiLayerTransformer()
                .getTransformer(Layer.LAYOUT)
                .translate(delta_x * (1 / scale), delta_y * (1 / scale));

        drag_point = e.getPoint();
        }
    }

    @Override
    public void mouseMoved(MouseEvent e) {
    }

    @Override
    public void mouseClicked(MouseEvent e) {
    }

    @Override
    public void mouseEntered(MouseEvent e) {
    }

    @Override
    public void mouseExited(MouseEvent e) {
    }

    @Override
    public void mousePressed(MouseEvent e) {
        if (e.getButton() == MouseEvent.BUTTON2) {
            drag_point = e.getPoint();
        }
    }

    @Override
    public void mouseReleased(MouseEvent e) {
        if (e.getButton() == MouseEvent.BUTTON2) {
            drag_point = null;
        }
    }

    @Override
    public void mouseWheelMoved(MouseWheelEvent e) {
        if (e.getModifiersEx() == MouseEvent.CTRL_DOWN_MASK) {
            vv.getRenderContext()
                    .getMultiLayerTransformer()
                    .getTransformer(Layer.LAYOUT)
                    .scale(1 + (e.getWheelRotation() * zoom_factor),
                            1 + (e.getWheelRotation() * zoom_factor),
                            vv.getCenter());
        }
    }
}
0 голосов
/ 23 апреля 2011

Похоже, у вас есть довольно хорошее представление о том, как действовать.На какой части ты застрял?Изменение размера макета?Обновление визуализации?Что-то еще?

...