2013-05-02 80 views
1

我有2個問題,也許有人可以給我一個想法,我怎麼能做到這一點Eclipse Graphiti,如何創建「CustomFeature創建並獲取所有元素」?

我已經創造了新的「testFeature」從AbstractCustomFeature擴展,並且可以調用它在我的圖。我如何得到一個包含圖中所有元素的列表?(我想在開始和之後更新它們的名稱和顏色)

我的第二個問題是: 我試圖向圖中添加一些元素而沒有從調色板中拖放它們。

例如,我在圖中保存了一些元素,我的「模型說我錯過了圖中的3個元素」。我想編寫一個自定義功能,只需一次/兩次點擊即可在Graphiti圖中繪製/放置缺失的元素,也許我需要在此部分使用Zest?但是一開始我只想放入一些元素而不從調色板中刪除它們,我怎麼能做到這一點?

也許有人可以給我方向?

感謝您的幫助!

回答

0

好的!這裏是我的解決方案:

class testFeature extends AbstractCustomFeature { 
    //... 
     public void execute(ICustomContext context) { 
      Diagram diagram = getDiagram();      //get Diagram 
      EList<Shape> diagramChildren= diagram.getChildren();//get List with all Children's 
      Iterator<Shape> it = diagramChildren.iterator(); //Build iterator for this List 


      //go through all objects which are in the Diagram 
      while (it.hasNext()) { 
       Shape testObjekt = it.next();             
       PictogramElement pe = testObjekt.getGraphicsAlgorithm().getPictogramElement(); 
       Object bo = getBusinessObjectForPictogramElement(pe); 
       //BUILD YOUR EMF & GRAPHITI projects together!!!! 
       //otherwise you get always false after editor restart 
       if (bo instanceof graphicElement) { 
        graphicElement sElement = (graphicElement)bo; 
        if(pe instanceof ContainerShape){ 
         RoundedRectangle testR= (RoundedRectangle) pe.getGraphicsAlgorithm(); 
         //testR is my RoundedRectangle like in help tutorial 

         //changes are possible here: 
         //... 

         ContainerShape cs = (ContainerShape) pe; 
         for (Shape shape : cs.getChildren()) { 
         //set Name 
          if (shape.getGraphicsAlgorithm() instanceof Text) { 
           Text text = (Text) shape.getGraphicsAlgorithm(); 
           text.setValue("new name!"); 
          } 
          //set Line color 
          if (shape.getGraphicsAlgorithm() instanceof Polyline) { 
           Polyline polyline = (Polyline)shape.getGraphicsAlgorithm(); 
           polyline.setForeground(manageColor(myColorGreen)); 
           polyline.setLineWidth(3); 
          } 
         } 
        } 
       } 
      } 
2

我如何得到一個包含圖中所有元素的列表?

DiagramContainerShape,你可以調用getChildren()檢索各種形狀

添加一定元素的圖表沒有阻力,從調色板中刪除它們。

對象是否已經在EMF模型中創建,並且您只希望它將其圖形對象添加到圖表中?如果是這樣,你需要實例化並執行你自己對應的類XXXAddFeature。您可以調用正確的XXXCreateFeature,這將在模型中添加(以Graphiti說法「創建」)該元素(更有可能,如果您想要從調色板中模擬某些拖放),則必須調用正確的XXXCreateFeature通常情況下,創建主體將調用addGraphicalRepresentation(),它還會通過在內部調用相應的XXXAddFeature)將相應的圖形元素添加到圖中。

+0

謝謝你的答案!我想沒有人會回答我,同時我解決了這個問題。開始的時候/我該怎麼辦,但是最後很容易。 但也許你可以幫助我與「Graphiti作爲RCP」的另一個問題? http://stackoverflow.com/questions/16686964/graphiti-as-rcp – AndrejK 2013-05-22 13:58:45

+0

是的,Graphiti有一個小型社區,文檔相當貧乏。順便說一句:如果你知道你在這裏提出的問題的答案,你會被鼓勵自己回答。本網站的目的不是幫助個人/孤立的問題,而是建立一個知識基礎,而不是幫助其他人。 – leonbloy 2013-05-22 14:03:17