使用节点形状进行反向剪辑?

使用节点形状进行反向剪辑?

我可以反转剪辑区域(如问题)并使用节点形状进行剪辑(如在其中一个),但我想将两者结合起来,但我不知道该怎么做。以下两个程序各自完成了我想要的一半。

首先,使用围绕文本节点手动绘制的矩形进行反向剪辑:

\documentclass[tikz,border=3pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes}

\begin{document}
\begin{tikzpicture}[even odd rule]
    \draw node (a) {000};
    \clip[overlay]
        (current page.south west) rectangle (current page.north east)
        (a.south west) rectangle (a.north east)
        ;
    \fill[overlay, opacity=.2]
        (current page.south west) rectangle (current page.north east)
        ;
\end{tikzpicture}
\end{document}

这给了我:

在此处输入图片描述

然后,使用圆角矩形节点的实际路径进行裁剪:

\documentclass[tikz,border=3pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes}

\begin{document}
\begin{tikzpicture}[even odd rule]
    \pgfnode{rounded rectangle}{center}{000}{a}{\pgfusepath{clip}}
    \fill[overlay, opacity=.2]
        (current page.south west) rectangle (current page.north east)
        ;
\end{tikzpicture}
\end{tikzpicture}
\end{document}

这给了我:

在此处输入图片描述

我想要的是后者的形状,但具有前者的反向剪切行为。由于节点路径似乎被封装得相当封闭和孤立,我不确定如何将其与其他东西结合起来进行奇偶剪切。我也尝试过自己使用 PGF 代码重建圆角矩形绘图,但这看起来需要做相当多的工作(很可能是不必要的)。

有小费吗?

答案1

\documentclass[tikz,border=3pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes,shadings}

\begin{document}

\tikzset{
    clip even odd rule/.code={\pgfseteorule}, % Credit to Andrew Stacey 
    invclip/.style={
        clip,insert path=
            [clip even odd rule]{
                [reset cm](-\maxdimen,-\maxdimen)rectangle(\maxdimen,\maxdimen)
            }
    }
}
\begin{tikzpicture}[even odd rule]
    \fill[shading=color wheel white center]circle(1);
    \node[rounded rectangle](a){000};
    \begin{pgfinterruptboundingbox}
        \csname pgf@sh@ma@a\endcsname
        \roundedrectanglepoints
        \clip[invclip](a.south west)arc(270:90:\radius+\outerysep)--(a.north east)arc(90:-90:\radius+\outerysep)--cycle;
    \end{pgfinterruptboundingbox}
    \draw(rand,rand)foreach\i in{0,...,99}{--(rand,rand)};
\end{tikzpicture}

\end{document}

相关内容