假设我有一些图像。我想使用双线弧“切掉”图像的一部分(请参阅 TikZ/PGF 手册第 110 页)。这可以通过以下 MWE 完成
documentclass[tikz]{standalone}
\usetikzlibrary{arrows,shapes,backgrounds,fit,decorations.pathreplacing,chains,positioning,angles,quotes, fadings}
\usepackage{xcolor}
\begin{tikzpicture}
\node at (0,0){\includegraphics{SampleImage.png}};
\coordinate (O) at (0.6,1.962);
\coordinate (A) at (2.82,0.35);
\coordinate (O1) at (0.665,1.962);
\coordinate (A1) at (2.82,0.414);
\draw[line width=0.62pt,double distance=2pt] (O) to [bend right=44] (A);
\draw [red] (O1) to [bend right=44] (A1);
\end{tikzpicture}
\end{document}
就这个问题而言,SampleImage.png
这里只要将其视为框即可:\filldraw[black!50] (0,0) -- (0,1.962) -- (2.82,1.962) -- (2.82,0) -- cycle;
。
问题是:如何用白色填充双线圆弧右侧的所有内容,以便圆弧右侧的所有内容都消失?我使用了Filling a Path
TikZ 手册第 110 页上的部分:。但是,填充不会覆盖右上角。
目前,我的解决方法是创建另一条路径(上面的红线),该路径要大得多,以便正确的图像是覆盖然后我将此路径转换为\filldraw[white]
。
我正在寻找一种比这种蛮力方法更有效的方法。
答案1
您可以使用
\fill[white] ([yshift=1pt]O) to [bend right=44] ([xshift=1pt]A) |- cycle;
如同
\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
%\node at (0,0){\includegraphics{SampleImage.png}};
\filldraw[black!50] (0,0) -- (0,1.962) -- (2.82,1.962) -- (2.82,0) -- cycle;
\coordinate (O) at (0.6,1.962);
\coordinate (A) at (2.82,0.35);
\coordinate (O1) at (0.665,1.962);
\coordinate (A1) at (2.82,0.414);
\fill[white] ([yshift=1pt]O) to [bend right=44] ([xshift=1pt]A) |- cycle;
\draw[line width=0.62pt,double distance=2pt] (O) to [bend right=44] (A);
\draw [red] (O1) to [bend right=44] (A1);
\end{tikzpicture}
\end{document}
这里的|- cycle
意思是“通过矩形角关闭路径”,并且引入了一些小的偏移以确保所有内容都被覆盖(在图形中可能不需要偏移,它们来自于\filldraw
将线宽添加到填充区域)。
如果您想要虚线,可以使用preaction
或post action
。由于可能存在与查看器相关的伪影,因此最好在顶部添加另一条白线。
\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
%\node at (0,0){\includegraphics{SampleImage.png}};
\filldraw[black!50] (0,0) -- (0,1.962) -- (2.82,1.962) -- (2.82,0) -- cycle;
\coordinate (O) at (0.6,1.962);
\coordinate (A) at (2.82,0.35);
\coordinate (O1) at (0.665,1.962);
\coordinate (A1) at (2.82,0.414);
\fill[white] ([yshift=1pt]O) to [bend right=44] ([xshift=1pt]A) |- cycle;
\draw[preaction={solid,double=white,line width=0.62pt,double distance=2pt},
draw=black,double distance=2pt,line width=0.62pt,dashed,
postaction={solid,draw=white,line width=2pt}] (O) to
[bend right=44] (A);
\draw [red] (O1) to [bend right=44] (A1);
\end{tikzpicture}
\end{document}