当我尝试scope fading
在示波器中使用 时,它似乎会剪切不在淡入淡出矩形内的其余示波器。有趣的是,它似乎在随机位置剪切它。
一些代码和图片:
\documentclass[tikz,margin=5em]{standalone}
\usepackage{intcalc,calc}
\usepackage{tikz}
\usepackage{verbatim}
\usetikzlibrary{fadings}
\title{Tex.Scope.Fading.Minimal}
\begin{document}
\tikzset{wline/.style={rounded corners,line width=1mm,color=blue!40!black}}
\begin{tikzpicture}[]
\begin{scope}[]
\draw[wline] (0,0) rectangle (5,5);
%commented, no fading
%\path[scope fading=west] (-1,0) rectangle (1,10);
\draw[wline] (4,0) -- (4,3) -- (-2,3);
\draw[wline] (5,0) -- (5,4) -- (-2,4);
\end{scope}
\end{tikzpicture}
\begin{tikzpicture}[]
\begin{scope}[]
\draw[wline] (0,0) rectangle (5,5);
\path[scope fading=west] (-1,0) rectangle (1,5);
\draw[wline] (4,0) -- (4,3) -- (-2,3);
\draw[wline] (5,0) -- (5,4) -- (-2,4);
\end{scope}
\end{tikzpicture}
\end{document}
第一张图片:
这是第二张褪色的图像:
问题:
为什么要剪掉剩余的部分呢?
为什么会剪辑那里在所有地方中,这甚至不是矩形路径的边界?
我如何得到我想要的想即将发生?
我想它要做的实际上是有一个 [scope fading=west] 矩形和底部有一个 [scope fading=south] 矩形,并保留所有内容(阅读:事物的所有部分) 位于完全不透明的矩形之外。
答案1
每种淡入淡出都有规定的有效区域,超出该区域则不进行渲染。例如;
\tikzset{wline/.style={rounded corners,line width=1mm,color=blue!40!black}}
\begin{tikzpicture}[]
\begin{scope}[]
\draw[wline] (0,0) rectangle (5,5);
\draw[thick,red,scope fading=west,fading angle=45] (-1,0) rectangle (1,5);
\draw[wline] (4,0) |- (-2,3);
\draw[wline] (5,0) |- (-2,4);
\end{scope}
\end{tikzpicture}
这表明,当你旋转淡入淡出时,第二行会得到稍微淡入淡出的路径。
让我们抓取一些阴影来展示有效区域是如何形成的(直接从手册中略作改动)
\usetikzlibrary{fadings}
\pgfdeclareradialshading{myshading}{\pgfpointorigin}
{
color(0mm)=(pgftransparent!0);
color(5mm)=(pgftransparent!0);
color(8mm)=(pgftransparent!100);
color(40mm)=(pgftransparent!0)
}
\pgfdeclarefading{fading3}{\pgfuseshading{myshading}}
\tikzset{wline/.style={rounded corners,line width=1mm,color=blue!40!black}}
\begin{tikzpicture}[]
\begin{scope}[]
\draw[wline] (0,0) rectangle (5,5);
\draw[thick,red,scope fading=fading3] (-1,0) rectangle (1,5);
\draw[wline] (4,0) |- (-2,3);
\draw[wline] (5,0) |- (-2,4);
\end{scope}
\end{tikzpicture}
注意 40 毫米与上角路径相交的位置。所以你的第二个问题并不完全正确。裁剪就是由于这个原因;如果褪色没有定义超过某些测量值,则不会绘制,因为褪色会作为一层拉伸或收缩到你的路径上。
长话短说,你的淡入淡出定义路径应该足够大,以覆盖你要淡入淡出的路径。如果你想要固定大小的淡入淡出,你需要fit fading
设置为 false,这样无论淡入淡出路径是什么,淡入淡出都有相同的测量值。如果你有自定义的、微调的淡入淡出,这尤其有用
\tikzset{wline/.style={rounded corners,line width=1mm,color=blue!40!black}}
\begin{tikzpicture}[]
\begin{scope}[]
\draw[wline] (0,0) rectangle (5,5);
\path[scope fading=west] (-1,0) rectangle (5,5);
\draw[wline] (4,0) |- (-2,3);
\draw[wline] (5,0) |- (-2,4);
\end{scope}
\end{tikzpicture}
答案2
我可以回答你的部分问题。关于scope fading
,你可以在 TiKZ 手册中阅读:
唯一的区别是,淡入淡出的效果将在当前路径之后持续到范围结束。因此,将
fading
应用于当前范围内的所有后续绘图,而不仅仅是当前路径。在这方面,该选项的工作方式与选项非常相似clip
。
\path[scope fading=...
因此,线后绘制的所有内容看起来都被剪掉了,这是正常的。
一个不太好的解决方案是将所有内容绘制两次,一次在淡入淡出之前,另一次在淡入淡出之后。这可能不是你想要的,但这是我能做的最好的。
\documentclass[tikz,margin=5em]{standalone}
\usepackage{intcalc,calc}
\usepackage{tikz}
\usepackage{verbatim}
\usetikzlibrary{fadings}
\tikzset{wline/.style={rounded corners,line width=1mm,color=blue!40!black}}
\begin{tikzfadingfrompicture}[name=logo]
\shade[left color= transparent!0,
right color=transparent!100] (0,0) rectangle (2,5);
\end{tikzfadingfrompicture}
\title{Tex.Scope.Fading.Minimal}
\begin{document}\begin{tikzpicture}[]
\draw[wline] (0,0) rectangle (5,5);
\draw[wline] (4,0) -- (4,3) -- (-2,3);
\draw[wline] (5,0) -- (5,4) -- (-2,4);
\path[scope fading=logo] (-1,0) rectangle (1,5);
\draw[wline,white,transparent!0] (0,0) rectangle (5,5);
\draw[wline,transparent!0] (4,0) -- (4,3) -- (-2,3);
\draw[wline,transparent!0] (5,0) -- (5,4) -- (-2,4);
\end{tikzpicture}
\end{document}