TikZ-UML 可以与 2 个以上的角度关联吗?如何有特殊箭头

TikZ-UML 可以与 2 个以上的角度关联吗?如何有特殊箭头

我必须将 UML 插入到我的 pdf 中,但这有点复杂。我轻松地完成了每个关联,但最后一个关联无法完成,因为需要超过 2 个控制节点(然后是 2 个角度)和超过 3 个臂/拱/箭头。事实上,如果没有它们,链接这两个类的箭头将位于 UML 中存在的其他类的后面,导致无法真正看到。

我想知道是否有解决方法,因为接受的几何形状(水平-垂直-水平或垂直-水平-垂直)是不够的,在我的情况下,HVHVH 几何形状会很有用。

我想走红色路线,或者至少是绿色路线

我想走红色路线,或者至少是绿色路线

编辑:添加了 MWE

% !TEX encoding = UTF-8 Unicode
% !TEX TS-program = pdflatex

\documentclass[%
corpo=12pt,
oldstyle,
autoretitolo,
tipotesi=magistrale,
greek,
evenboxes,
a4paper,
%twoside=true,
%open=right,
titlepage,
%headinclude,
%footinclude,
%BCOR=12.5mm,
%numbers=noenddot,
cleardoublepage=empty,%tablecaptionabove
]{toptesi}
\usepackage{../tikzuml-v1.0-2016-03-29/tikz-uml}%

\begin{document}
    \begin{center}
    
        \begin{tikzpicture}
        \umlinterface[x=-8,y=+4]{IInteractor}{}
        {       
            + activeInteractor(GameObject gOb) : void  \\
            + passiveInteractor(GameObject gOb) : void
        }
    
        \umlclass[x=-8]{ObjectInteractor}{}
        {
            - Awake() : void \\ 
            - initializeInteractableObject() : void \\
            \umlvirt{+ activeInteractor(GameObject gOb) : void} \\
            \umlvirt{+ passiveInteractor(GameObject gOb) : void}
        }
    
        \umlclass[x=-8, y=-4]{Colorator}
        {
            - SpriteRenderer m\_SpriteRenderer;
        }
        {
            - Start() : void \\ 
            + activeInteractor(GameObject gOb) : void \\
            + CombineColors(params Color[] aColors) : Color
        }
    
        \umlclass{GameObject}{...}{...}
    
        \umlinterface[y=-8]{IColorable}{}
        {       
            + toColor() : void
        }
    
        \umlclass[x=-8,y=-8]{bgColorable}
        {
            - SpriteRenderer m\_SpriteRenderer;
        }
        {
            - Start() : void \\ 
            + toColor() : void \\
            + toColor(Color color) : void
        }
    
        \umlclass[x=-8,y=-12]{textColorable}
        {
            - TextMeshPro bcText;
        }
        {
            - Start() : void \\
            + getText() : void \\ 
            + toColor() : void \\
            + toColor(Color color) : void
        }
    
        \umlunicompo[geometry=-|]{Colorator}{GameObject}
        \umlinherit[geometry=-|]{Colorator}{ObjectInteractor}
        \umlreal{ObjectInteractor}{IInteractor}
        \umlreal{bgColorable}{IColorable}
        \umlreal{textColorable}{IColorable}
        %\umlimport[geometry=-|,anchors=-10 and 90]{Colorator}{IColorable}
        \umldep[geometry=-|,anchors=-10 and 90]{Colorator}{IColorable}
        %\umlCNunicompo[geometry=-|-,anchors=180 and 0, arm1=-2cm, arm2=8cm, align1=left, align2=right]{bgColorable}{-13,-8}{-13,-15}{2,-15}{GameObject}
        %\umlCNunicompo[geometry=|-|, anchors=-30 and 0]{bgColorable}{3,-12}{GameObject}
        \umlunicompo[geometry=-|-,anchors=-0 and 0, arm1=8cm]{textColorable}{GameObject}
    
        \end{tikzpicture}
    \end{center}
\end{document}

答案1

请记住,当使用一些专门的包时,它们实际上是一组命令和嵌套,允许您在几个命令中绘制一些东西;但正如您所见,代码中没有选项可以执行您需要的操作,所以你只需要使用基本的 tikz 代码来实现目标;当然你应该检查包的代码,至少知道节点的名称和调用每个箭头变体的样式是否可以重复使用,情况就是如此。

对于这种情况,样式如下:

%Line 209
\tikzstyle{tikzuml association style}=[color=\tikzumlDefaultDrawColor, -]%
    \tikzstyle{tikzuml bidirectional association style}=[color=\tikzumlDefaultDrawColor, angle45-angle45]%
    \tikzstyle{tikzuml unidirectional association style}=[color=\tikzumlDefaultDrawColor, -angle 45]%
    \tikzstyle{tikzuml aggregation style}=[color=\tikzumlDefaultDrawColor, open diamond-]%
    \tikzstyle{tikzuml unidirectional aggregation style}=[color=\tikzumlDefaultDrawColor, open diamond-angle 45]%
    \tikzstyle{tikzuml composition style}=[color=\tikzumlDefaultDrawColor, diamond-]%
    \tikzstyle{tikzuml unidirectional composition style}=[color=\tikzumlDefaultDrawColor, diamond-angle 45]%
    \tikzstyle{tikzuml nesting style}=[color=\tikzumlDefaultDrawColor]%
    \tikzstyle{tikzuml dependency style}=[color=\tikzumlDefaultDrawColor, -angle 45, dashed]%
    \tikzstyle{tikzuml import style}=[color=\tikzumlDefaultDrawColor, -angle 45, dashed]%
    \tikzstyle{tikzuml inherit style}=[color=\tikzumlDefaultDrawColor, -open triangle 45]%
    \tikzstyle{tikzuml implements style}=[color=\tikzumlDefaultDrawColor, -open triangle 45, dashed]%

显然,对于这种情况,不可能提供平均能量损失应该可以毫无问题地复制和编译它以查看结果,因为它需要您将包下载到计算机上的某个本地地址。当然,这并不复杂,在本例中,我将文档类更改为独立我建议您使用,因为它可以让您独立于主文档获取图形,然后您可以使用图形包以最适合您的比例放置它们。但这当然取决于您的个人喜好。

结果:

在此处输入图片描述

MWE IF(您下载TIKZ-UML-v1.0-2016-03-29并将其放在你的 TEX 文件的文件夹中):

\documentclass[tikz, border=3.14mm]{standalone}
\usetikzlibrary{calc}
\usepackage{tikzuml-v1.0-2016-03-29/tikz-uml}%
\begin{document}
    \begin{tikzpicture}
        \umlinterface[x=-8,y=+4]{IInteractor}{}{
            + activeInteractor(GameObject gOb) : void  \\
            + passiveInteractor(GameObject gOb) : void
        }
    
        \umlclass[x=-8]{ObjectInteractor}{}{
            - Awake() : void \\
            - initializeInteractableObject() : void \\
            \umlvirt{+ activeInteractor(GameObject gOb) : void} \\
            \umlvirt{+ passiveInteractor(GameObject gOb) : void}
        }
    
        \umlclass[x=-8, y=-4]{Colorator}{
            - SpriteRenderer m\_SpriteRenderer;
        }{
            - Start() : void \\ 
            + activeInteractor(GameObject gOb) : void \\
            + CombineColors(params Color[] aColors) : Color
        }
    
        \umlclass{GameObject}{...}{...}
        
        \umlinterface[y=-8]{IColorable}{}{
            + toColor() : void
        }
        
        \umlclass[x=-8,y=-8]{bgColorable}{
            - SpriteRenderer m\_SpriteRenderer;
        }{
            - Start() : void \\
            + toColor() : void \\
            + toColor(Color color) : void
        }
        \umlclass[x=-8,y=-12]{textColorable}{
            - TextMeshPro bcText;
        }{
            - Start() : void \\
            + getText() : void \\ 
            + toColor() : void \\
            + toColor(Color color) : void
        }
    
        \umlunicompo[geometry=-|]{Colorator}{GameObject}
        \umlinherit[geometry=-|]{Colorator}{ObjectInteractor}
        \umlreal{ObjectInteractor}{IInteractor}
        \umlreal{bgColorable}{IColorable}
        \umlreal{textColorable}{IColorable}
        \umldep[geometry=-|,anchors=-10 and 90]{Colorator}{IColorable}
        \umlunicompo[geometry=-|-,anchors=0 and 0, arm1=8cm]{textColorable}{GameObject}
        
        %Some basic tikz code here using node names declared in package commands...
        \draw[diamond-angle 45,red]
        (Colorator.180)
            -| ++(-0.5,-10)
            -| ($(GameObject.10)+(1.2,0)$)
            -- (GameObject.10);
        
        \draw[diamond-angle 45,green!50!black]
        (bgColorable.-10)
            -| ++(1.5,-2)
            -| ($(GameObject.-10)+(0.9,0)$)
            -- (GameObject.-10);    
    \end{tikzpicture}
\end{document}

相关内容