GMF编辑器中图元的前景色,字体,线条宽度的定制方法

要让GMF编辑器中的图元更加生动,可以通过在gmfgraph中增加一些元素(比如前景色)来定制图元的显示形式,但是有些特征(比如字体)无法仅仅通过gmfgraph来完成,这就需要我们修改GMF生成的Diagram Code来达到所需要的效果。如下图所示:
  GMF编辑器中图元的前景色,字体,线条宽度的定制方法
   1.前景色:
      图中紫色的椭圆代表Method类型的元素,起前景色可以通过gmfgraph来定制:
      GMF编辑器中图元的前景色,字体,线条宽度的定制方法
    2.线条宽度(2),线条种类(LINE_SOLID):
    GMF编辑器中图元的前景色,字体,线条宽度的定制方法
    也可以通过修改MethodEditPart中的内部类MethodFigure的构造函数来完成1和2两个特征的定制:

GMF编辑器中图元的前景色,字体,线条宽度的定制方法GMF编辑器中图元的前景色,字体,线条宽度的定制方法public MethodFigure() GMF编辑器中图元的前景色,字体,线条宽度的定制方法{
GMF编辑器中图元的前景色,字体,线条宽度的定制方法    
this.setFill(true);
GMF编辑器中图元的前景色,字体,线条宽度的定制方法    
this.setFillXOR(false);
GMF编辑器中图元的前景色,字体,线条宽度的定制方法    
this.setOutline(true);
GMF编辑器中图元的前景色,字体,线条宽度的定制方法    
this.setOutlineXOR(false);
GMF编辑器中图元的前景色,字体,线条宽度的定制方法    
this.setLineWidth(2);
GMF编辑器中图元的前景色,字体,线条宽度的定制方法    this.setLineStyle(Graphics.LINE_SOLID);
GMF编辑器中图元的前景色,字体,线条宽度的定制方法    this.setForegroundColor(METHODFIGURE_FORE);
GMF编辑器中图元的前景色,字体,线条宽度的定制方法    createContents();
GMF编辑器中图元的前景色,字体,线条宽度的定制方法}


   3.字体: 要通过修改MethodNameEditPart的setLabelTextHelper方法来完成。
    

GMF编辑器中图元的前景色,字体,线条宽度的定制方法GMF编辑器中图元的前景色,字体,线条宽度的定制方法    protected void setLabelTextHelper(IFigure figure, String text) GMF编辑器中图元的前景色,字体,线条宽度的定制方法{
GMF编辑器中图元的前景色,字体,线条宽度的定制方法GMF编辑器中图元的前景色,字体,线条宽度的定制方法        
if (figure instanceof WrapLabel) GMF编辑器中图元的前景色,字体,线条宽度的定制方法{
GMF编辑器中图元的前景色,字体,线条宽度的定制方法            ((WrapLabel) figure).setText(text);
GMF编辑器中图元的前景色,字体,线条宽度的定制方法            
GMF编辑器中图元的前景色,字体,线条宽度的定制方法            FontData fd = new FontData();
GMF编辑器中图元的前景色,字体,线条宽度的定制方法            fd.setStyle(SWT.BOLD);
GMF编辑器中图元的前景色,字体,线条宽度的定制方法            ((WrapLabel) figure).setFont(new Font(null, fd));

GMF编辑器中图元的前景色,字体,线条宽度的定制方法
GMF编辑器中图元的前景色,字体,线条宽度的定制方法GMF编辑器中图元的前景色,字体,线条宽度的定制方法        }
 else GMF编辑器中图元的前景色,字体,线条宽度的定制方法{
GMF编辑器中图元的前景色,字体,线条宽度的定制方法            ((Label) figure).setText(text);
GMF编辑器中图元的前景色,字体,线条宽度的定制方法        }

GMF编辑器中图元的前景色,字体,线条宽度的定制方法    }

  
     4.结点默认大小:由于图中两个黄色的“BEGINING"和"ENDING"结点中的文字不需要修改,因此这两个结点的默认大小可以根据字符串的宽度和高度来设置(GMF默认的高度和宽度是40,40)。修改BeginingEditPart中的createNodePlate方法(注:由于编辑器中的结点Shape是放在Plate上,Plate再放在画布上的,因此Plate的大小决定了编辑器中图元的大小,修改Shape没用)。

GMF编辑器中图元的前景色,字体,线条宽度的定制方法GMF编辑器中图元的前景色,字体,线条宽度的定制方法    protected NodeFigure createNodePlate() GMF编辑器中图元的前景色,字体,线条宽度的定制方法{
GMF编辑器中图元的前景色,字体,线条宽度的定制方法        DefaultSizeNodeFigure result 
= new DefaultSizeNodeFigure(getMapMode()
GMF编辑器中图元的前景色,字体,线条宽度的定制方法                .DPtoLP(EventConstant.BEGINING_DEFAULT_WIDTH), getMapMode().DPtoLP(EventConstant.BEGINING_DEFAULT_HEIGHT));
GMF编辑器中图元的前景色,字体,线条宽度的定制方法        
return result;
GMF编辑器中图元的前景色,字体,线条宽度的定制方法    }