使用 MetaUML 绘制自定义形状

使用 MetaUML 绘制自定义形状

如何绘制这样的图像:

在此处输入图片描述

我使用 MetaUML 包来绘制 Uml。

它可以用来绘制这幅图像吗?我想保持图像样式统一,不想只为一幅图像使用其他绘图包。

我可以像这样绘制它:

在此处输入图片描述

但是我怎样才能去掉组件图标?以及如何使框具有相同的尺寸?

这是我使用的代码

input metauml;
beginfig(1);

    Class.A("Entity")()();
    A.info.iAttributeStack.top := 0;
    A.info.iAttributeStack.bottom := 0;
    A.info.iMethodStack.top := 0;
    A.info.iMethodStack.bottom := 0;

    Class.B("Render")()();
    B.info.iAttributeStack.top := 0;
    B.info.iAttributeStack.bottom := 0;
    B.info.iMethodStack.top := 0;
    B.info.iMethodStack.bottom := 0;

    Class.C("Collectable")()();
    C.info.iAttributeStack.top := 0;
    C.info.iAttributeStack.bottom := 0;
    C.info.iMethodStack.top := 0;
    C.info.iMethodStack.bottom := 0;

    Component.BigC("Spoon")(A, B, C);

    leftToRight(10)(A, B, C);

    drawObject(BigC);

endfig;
end

编辑Package我可以通过使用而不是来 摆脱组件符号Component,但结果看起来与原始图像有很大不同

答案1

MetaUML 不提供任何简单的方法来控制类的宽度,但您可以使用内置的“ClassName”函数使它们看起来接近您想要的。并且您可以通过重新定义绘制它的宏来摆脱组件中的构造型,使其不执行任何操作。像这样:

prologues:=3;
outputtemplate:="uml%c.eps";

input metauml;
vardef drawComponentVisualStereotype(text ne)= relax enddef;

beginfig(1);
     ClassName.A("Entity");
     ClassName.B("Render");
     ClassName.C("Collectable");
     Component.BigC("Spoon")(A, B, C);
     leftToRight(10)(A, B, C);
     drawObject(BigC);
endfig; 

结果是:在此处输入图片描述

如果您只想抑制这一个图中的视觉刻板印象,那么请将重新定义移到beginfig/endfig范围内。

如果您尚未使用 MetaUML,您可以考虑使用boxes.mpMetapost 附带的旧版标准。以下是您可以使用它做什么的示例(旨在继续上述文件)。

input boxes;
verbatimtex \font\sf=phvr8r\sf etex

beginfig(2);
    boxit.bA(btex \strut Entity etex);
    boxit.bB(btex \strut Render etex);
    boxit.bC(btex \strut Collectable etex);
    boxit.bS(btex \vrule width 0pt depth 40pt Spoon etex);

    % make the class boxes the same size
    forsuffixes $=bA,bB,bC:$.ne-$.sw = (60,30); endfor

    bA.c = bB.c + 80 left;
    bC.c = bB.c + 80 right;
    bS.c = bB.n; 
    bS.sw = bA.sw - (10,10);

    forsuffixes $=bA,bB,bC: fill bpath.$ withcolor .88white; endfor
    drawboxed(bA,bB,bC,bS);
endfig;
end.

结果如下:在此处输入图片描述

请注意,boxit尽量使文本内容水平和垂直居中,因此偏移文本的一种方法是使用向下粘贴的隐形​​规则,就像我在“Spoon”框中所做的那样。

相关内容