TikZ 中的部分范围透明度

TikZ 中的部分范围透明度

当我尝试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}

在此处输入图片描述

相关内容