2013-05-02 3 views
1

두 가지 질문이 있습니다. 어쩌면 누군가가 저에게 어떻게 할 수 있는지 아이디어를 줄 수 있습니다.Eclipse Graphiti, "CustomFeature의 생성 및 모든 요소 얻기"를 만드는 방법?

AbstractCustomFeature에서 확장 한 새로운 "testFeature"를 만들고 다이어그램에서 호출 할 수 있습니다. 다이어그램에서 모든 요소를 ​​포함하는 목록을 얻으려면 어떻게해야합니까? (처음부터 이름과 색을 업데이트하고 싶습니다)

두 번째 질문은 다이어그램에없는 요소를 추가하려고합니다. 팔레트에서 드래그 앤 드롭하십시오.

예를 들어 다이어그램에 저장된 일부 요소가 있고 "모델에서 다이어그램에 3 개의 요소가 없습니다"라는 모델이 있습니다. 나는 그래프 티티 다이어그램에 누락 된 요소를 한두 번 클릭하여 그릴/배치하는 사용자 지정 기능을 쓰고 싶습니다. 아마도이 부분에서 Zest를 사용해야할까요? 하지만 처음에는 팔레트에서 떨어 뜨리지 않고 몇 가지 요소 만 넣고 싶습니다. 어떻게해야합니까?

누군가 내게 방향을 제시 할 수 있습니까?

도움 주셔서 감사합니다.

답변

0

ok! 여기 내 해결책은 다음과 같습니다.

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

어떻게 다이어그램의 모든 요소를 ​​포함하는 목록을 얻을 수 있습니까?

Diagram은 드래그하지 않고도 몇 가지 요소를 추가하고 팔레트에서 그들을 드롭 모든 모양

를 검색 할 getChildren()를 호출 할 수 있습니다하는 ContainerShape입니다.

개체가 EMF 모델 내에 이미 생성되어 있으며 다이어그램에 그래픽으로 만 추가하고 싶습니까? 그렇다면 해당 XXXAddFeature 클래스를 인스턴스화하고 실행해야합니다.

팔레트에서 일부 끌어서 놓기를 모방하려는 경우, XXXCreateFeature을 호출해야합니다 (Graphiti 용어로 "작성", 모델에 요소 추가). 전형적으로, 생성 몸체는 결국 addGraphicalRepresentation()을 호출 할 것이고, 내부적으로는 XXXAddFeature이라는 호출을 통해 해당 그래픽 요소를 다이어그램에 추가 할 것이다.

+0

답변 해 주셔서 감사합니다! 나는 아무도 내게 대답하지 않을 것이라고 생각했지만, 그 동안 나는이 문제를 해결했다. 처음에는 어디서/어떻게 접근해야하는지 정말 어려웠지만 결국에는 쉽습니다. 하지만 "Graphiti as RCP"에 대한 또 다른 질문을 도와 드릴까요? http://stackoverflow.com/questions/16686964/graphiti-as-rcp – AndrejK

+0

예, Graphiti에는 소규모 커뮤니티가 있으며 문서는 다소 빈혈이 있습니다. BTW : 귀하가 여기에서 질문 한 질문에 대한 답변을 알고 있다면 직접 대답하십시오. 이 사이트의 목적은 개인/고립 된 문제를 돕는 것이 아니라 다른 사람들을 도울 수있는 지식 기반을 구축하는 것입니다. – leonbloy