TikZ:在链接中间有 1 厘米锯齿状的装饰

TikZ:在链接中间有 1 厘米锯齿状的装饰

如何制作中间有 1 厘米锯齿状的 TikZ 装饰?

这是我目前所拥有的,但它不起作用:

\pgfdeclaremetadecoration{timearrow}{initial}{
    \state{initial}[width=0pt, next state=arrow] {
        \pgfsetlinewidth{1pt}
        \pgfset{/pgf/decoration/segment length=8pt}
        \pgfmathtruncatemacro{\blah}{\pgfmetadecoratedpathlength/2 - 1cm}
    }
    \state{arrow}[switch if less than=1cm to final,
                  width=\blah ,
                  next state=zigzag] {
        \decoration{curveto}
        \beforedecoration {\pgfpathmoveto{\pgfpointmetadecoratedpathfirst}}
    }
    \state{zigzag}[width=1cm,
                   next state=final] {
        \decoration{zigzag}
    }
    \state{final}[] {
        \decoration{curveto}
        \beforedecoration{\pgfpathmoveto{\pgfpointmetadecoratedpathfirst}}
    }
}

答案1

您的风格对我来说很有效,除了锯齿形部分没有正确居中,因为您将其移动了1cm,而不是移动了0.5cm

我建议将装饰中尽可能多的长度保留为变量,而不是对值进行硬编码。如果设置\pgfset{/pgf/decoration/segment length=8pt},则您无法通过将其设置segment length=<value>为装饰选项来更改锯齿波长。同样适用于\pgfsetlinewidth{1pt}:如果您省略此线,则可以像使用任何其他 TikZ 路径一样指定线宽。如果您需要使用相同的值频繁绘制装饰,则可以定义一种为您设置这些值的新样式。

此外,您不需要\beforedecoration{\pgfpathmoveto{\pgfpointmetadecoratedpathfirst}}在每个片段的开头说明各个片段是否连接在一起。

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{decorations,decorations.pathmorphing}

\pgfdeclaremetadecoration{middlezigzag}{straight}{
    \state{straight}[switch if less than=\pgfmetadecorationsegmentlength to final,
                  width=\pgfmetadecoratedpathlength/2 - \pgfmetadecorationsegmentlength/2 ,
                  next state=zigzag] {
        \decoration{curveto}
    }
    \state{zigzag}[width=\pgfmetadecorationsegmentlength,
                   next state=final] {
        \decoration{zigzag}
    }
    \state{final}{
        \decoration{curveto}
        \beforedecoration{\pgfpathmoveto{\pgfpointmetadecoratedpathfirst}}
    }
}

\tikzset{
    middle zigzag/.style={
        decorate,
        decoration={
            middlezigzag,
            meta-segment length=#1,
            segment length=0.5cm
        }
    },
    middle zigzag/.default=1cm
}


\begin{document}
\begin{tikzpicture}
\draw [gray!50,yshift=-0.5cm] (0,0) grid (5,1);
\draw [middle zigzag, ultra thick] (0,0) -- (5,0);
\end{tikzpicture}
\end{document}

相关内容