2011-04-14 88 views
0

在Jung中使用EditingModalGraphMouse時,有沒有辦法獲得頂點座標? 我已經用座標setter和getter爲頂點做了一個類,但是我不知道如何使用它的特定座標設置頂點? (我的用戶變壓器:變壓器)如何在JUNG中獲取頂點座標?

回答

0

下面爲您提供關於如何獲得笛卡爾在榮格VisualizationViewer例如座標的想法...

創建一個內部類,如下所示:

protected class MyGraphMousePlugin extends TranslatingGraphMousePlugin implements MouseListener { 

    @Override 
    public void mouseMoved(MouseEvent e) { 
     final VisualizationViewer<GeoLocationData.Station,GeoLocationData.Link> vv = 
     (VisualizationViewer<GeoLocationData.Station,GeoLocationData.Link>)e.getSource(); 
     Point2D p = e.getPoint();//vv.getRenderContext().getBasicTransformer().inverseViewTransform(e.getPoint()); 
     GraphElementAccessor<GeoLocationData.Station,GeoLocationData.Link> pickSupport = vv.getPickSupport(); 
     if(pickSupport != null) {    
      vv.setToolTipText ("<html>x: "+p.getX()+"<br>y: "+p.getY()); 
     } 
    } 

    public MyGraphMousePlugin(int modifiers) { 
     super(modifiers); 
     // TODO Auto-generated constructor stub 
    } 

    public MyGraphMousePlugin() { 
     super(); 
    } 
} 

的插件添加到您GraphMouse實例:

graphMouse = new DefaultModalGraphMouse<Object, Object>(); 
vv.setGraphMouse(graphMouse); 
vv.addKeyListener(graphMouse.getModeKeyListener()); 
graphMouse.add(new MyGraphMousePlugin()); 

編輯:

下一頁修改會給你考慮到在一個榮格圖形佈局所做的翻譯笛卡爾座標:

protected class MyGraphMousePlugin extends TranslatingGraphMousePlugin implements MouseListener { 

    @Override 
    public void mouseMoved(final MouseEvent e) { 

     SwingUtilities.invokeLater(
       new Runnable() { 
        public void run() { 
         final VisualizationViewer<GeoLocationData.Station,GeoLocationData.Link> vv = 
          (VisualizationViewer<GeoLocationData.Station,GeoLocationData.Link>)e.getSource(); 
         Point2D p = e.getPoint();//vv.getRenderContext().getBasicTransformer().inverseViewTransform(e.getPoint()); 
         GraphElementAccessor<GeoLocationData.Station,GeoLocationData.Link> pickSupport = vv.getPickSupport(); 
         if(pickSupport != null) { 

          AffineTransform lat = 
           vv.getRenderContext().getMultiLayerTransformer().getTransformer(Layer.LAYOUT).getTransform(); 
          //AffineTransform vat = 
          // vv.getRenderContext().getMultiLayerTransformer().getTransformer(Layer.VIEW).getTransform(); 
          //AffineTransform at = new AffineTransform(); 

          double x = p.getX() - lat.getTranslateX(); //; 
          double y = p.getY() - lat.getTranslateY(); //; 

          vv.setToolTipText ("<html>x: "+x+"<br>y: "+y); 
         } 

        } 
       } 
     ); 
    } 

    public MyGraphMousePlugin(int modifiers) { 
     super(modifiers); 
     // TODO Auto-generated constructor stub 
    } 

    public MyGraphMousePlugin() { 
     super(); 
    } 
} 

它仍然是不完美的,因爲它忽略了一個比例係數,但你會得到的想法...

您需要從屏幕座標系統到視圖座標系統計算出模型座標系以得到模型的座標。

的泛型類型在上面的代碼應改爲你自己的版本:)

編輯

哈哈,線索已經存在,這是正確的做法......沒有必要計算! http://sourceforge.net/projects/jung/forums/forum/252062/topic/3040266?message=6522779

@Override 
    public void mouseMoved(final MouseEvent e) { 

     SwingUtilities.invokeLater(
       new Runnable() { 
        public void run() { 
         final VisualizationViewer<GeoLocationData.Station,GeoLocationData.Link> vv = 
          (VisualizationViewer<GeoLocationData.Station,GeoLocationData.Link>)e.getSource(); 
         Point2D p = vv.getRenderContext().getMultiLayerTransformer().inverseTransform(e.getPoint()); 

         double x = p.getX(); 
         double y = p.getY(); 

         vv.setToolTipText ("<html>x: "+(int)x+"<br>y: "+(int)y); 
        } 
       } 
     ); 
    } 
+0

感謝很多:) 我與editingGraphMousePlugin試了一下還它完美的作品:) 其實我在想,是有可能得到的蒙山添加editingmodalgraphMouse頂點時的座標(i VE已經設置setter和getter在頂點工廠) – Jihath 2011-04-15 10:24:28

+0

我的目標是有一個包含x和y的graphml文件現在我可以得到它的名稱和顏色,但沒有找到將x信息提供給setter的方法 – Jihath 2011-04-15 10:32:19

+0

@eee你的實現在工具提示中顯示了這些座標,但是有什麼方法可以將頂點的位置返回到其他代碼? – CajunLuke 2012-07-27 23:31:19