xiaoxiaoleemin

天道酬勤,小小加油
posts - 19, comments - 12, trackbacks - 0, articles - 0

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

public MethodFigure() {
    
this.setFill(true);
    
this.setFillXOR(false);
    
this.setOutline(true);
    
this.setOutlineXOR(false);
    
this.setLineWidth(2);
    this.setLineStyle(Graphics.LINE_SOLID);
    this.setForegroundColor(METHODFIGURE_FORE);
    createContents();
}


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

    protected void setLabelTextHelper(IFigure figure, String text) {
        
if (figure instanceof WrapLabel) {
            ((WrapLabel) figure).setText(text);
            
            FontData fd = new FontData();
            fd.setStyle(SWT.BOLD);
            ((WrapLabel) figure).setFont(new Font(null, fd));


        }
 else {
            ((Label) figure).setText(text);
        }

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

只有注册用户登录后才能发表评论。


网站导航: