TikZ: Как нарисовать узор на границе незамкнутого пути tikz

TikZ: Как нарисовать узор на границе незамкнутого пути tikz

«На основе решения, представленного наTikZ: Как нарисовать узор на границе пути tikzЯ смог сделать всю графику в моей диссертации, за исключением одной фигуры. Как вы можете видеть на графике" ( ;-)Правило заполнения и узор на границе)

введите описание изображения здесь

Я хотел бы нарисовать открытую часть, где начало и конец не соединены, как показано в случае c), просто я хочу украсить ее узором, как можно увидеть в случаях a) и b). В настоящее время я пытаюсь помочь себе, скрывая часть пути белым прямоугольником. Проблема в том, что я могу применить узор только к закрытым путям. Как только я удаляю cycleв конце пути, который имеет стиль EDRили EDOя получаю ошибку:Package tikz Error: Cannot parse this coordinate.

Как украсить открытый контур узором? Как показано на этом рисунке (изменено с помощью inkscape.)

введите описание изображения здесь

МВЭ:

\documentclass[tikz]{standalone}
\usepackage{tikz}
\usetikzlibrary{patterns}
\usetikzlibrary{decorations,backgrounds}

% BEGIN from https://tex.stackexchange.com/a/419558/11820
\newcounter{tmp}

%\tikzstyle{D}=[draw=blue,line width=1pt,preaction={clip, postaction={draw=blue,opacity=0.5,line width=12pt}}]
%<- note that tikzstyle is deprecated

\tikzset{D/.style={
    preaction={draw=blue,line width=1pt},
    preaction={decoration={contour lineto closed, contour distance=6pt},
      decorate,
    },
    postaction={
      insert path={%
        \pgfextra{%
          \pgfinterruptpath
          \begin{scope}[opacity=0.5, transparency group]
            \path[fill=blue,even odd rule] 
            \mySecondList \myList 
            ;
          \end{scope}
        \endpgfinterruptpath}
    }},
}}



\tikzset{EDR/.style={
    preaction={draw=red,line width=1pt},
    preaction={decoration={contour lineto closed, contour distance=6pt},
      decorate,
    },
    postaction={
      insert path={%
        \pgfextra{%
          \pgfinterruptpath
          \path[pattern=north west lines, pattern color=red,even odd rule] 
          \mySecondList \myList 
          ;
        \endpgfinterruptpath}
    }},
}}

\makeatletter
\def\pgfdecoratedcontourdistance{0pt}
\pgfset{
  decoration/contour distance/.code=%
\pgfmathsetlengthmacro\pgfdecoratedcontourdistance{#1}}
\pgfdeclaredecoration{contour lineto closed}{start}{%
  \state{start}[
  next state=draw,
  width=0pt,
  persistent precomputation=\let\pgf@decorate@firstsegmentangle\pgfdecoratedangle]{%
    \pgfextra{\xdef\myList{}\xdef\mySecondList{}}
    \pgfextra{\setcounter{tmp}{0}}
    \pgfpathmoveto{\pgfpointlineattime{.5}
      {\pgfqpoint{0pt}{\pgfdecoratedcontourdistance}}
    {\pgfqpoint{\pgfdecoratedinputsegmentlength}{\pgfdecoratedcontourdistance}}}%
  }%
  \state{draw}[next state=draw, width=\pgfdecoratedinputsegmentlength]{%
    \ifpgf@decorate@is@closepath@%
      \pgfmathsetmacro\pgfdecoratedangletonextinputsegment{%
      -\pgfdecoratedangle+\pgf@decorate@firstsegmentangle}%
    \fi
    \pgfmathsetlengthmacro\pgf@decoration@contour@shorten{%
    -\pgfdecoratedcontourdistance*cot(-\pgfdecoratedangletonextinputsegment/2+90)}%
    \pgfpathlineto
    {\pgfpoint{\pgfdecoratedinputsegmentlength+\pgf@decoration@contour@shorten}
    {\pgfdecoratedcontourdistance}}%
    \stepcounter{tmp}
    \pgfcoordinate{muemmel\thetmp}{\pgfpoint{\pgfdecoratedinputsegmentlength+\pgf@decoration@contour@shorten}
    {\pgfdecoratedcontourdistance}}
    \pgfcoordinate{feep\thetmp}{\pgfpoint{\pgfdecoratedinputsegmentlength}{0pt}}      
    \pgfextra{\xdef\myList{\myList (muemmel\thetmp) -- }%
    \xdef\mySecondList{\mySecondList (feep\thetmp) -- }}
    \ifpgf@decorate@is@closepath@%
      \pgfpathclose
      \pgfextra{\xdef\myList{\myList cycle}% 
      \xdef\mySecondList{\mySecondList cycle}}
    \fi
  }%
  \state{final}{\pgfextra{%\typeout{\myList,\mySecondList}
  }}%
}
\makeatother
\tikzset{
  contour/.style={
    decoration={
      name=contour lineto closed,
      contour distance=#1
    },
decorate}}
% END from https://tex.stackexchange.com/a/419558/11820

\tikzset{EDO/.style={
    preaction={draw=orange,line width=1pt},
    preaction={decoration={contour lineto closed, contour distance=6pt},
      decorate,
    },
    postaction={
      insert path={%
        \pgfextra{%
          \pgfinterruptpath
          \path[pattern=north east lines, pattern color=orange,even odd rule] 
          \mySecondList \myList 
          ;
        \endpgfinterruptpath}
    }},
}}
\begin{document}

\begin{tikzpicture}[]
  \node at (-.5,0) {a)};
  \path [EDO] (2.875,0) -- ++(0,.75) -- ++(-2.875,0) -- ++(0,-.75) -- cycle;
  \path [EDR] (0,0) -- ++(0,-1) -- ++(6,0) -- ++(0,1) -- ++(-3.125,0) -- cycle ;
  \fill [white] (.21,.3) rectangle (2.655,-.3);

  \begin{scope}[yshift=-2cm]
  \node at (-.5,0) {b)};
    \path [EDO] (2.875,0) -- ++(0,.75) -- ++(-2.875,0) -- ++(0,-.75) -- cycle;
    \path [EDR] (0,0) -- ++(0,-1) -- ++(6,0) -- ++(0,1) -- ++(-3.125,0) -- cycle ;
  \end{scope}

  \begin{scope}[yshift=-4cm]
    \node at (-.5,0) {c)};
    \path [draw, orange, line width=1pt] (2.875,0) -- ++(0,.75) -- ++(-2.875,0) -- ++(0,-.75);
    \path [draw, red, line width=1pt] (0,0) -- ++(0,-1) -- ++(6,0) -- ++(0,1) -- ++(-3.125,0);
  \end{scope}
\end{tikzpicture}

\end{document}

решение1

Это обобщение вашего кода, которое делает это. Оно различает замкнутые и незамкнутые пути.

\documentclass[tikz]{standalone}
\usepackage{tikz}
\usetikzlibrary{patterns}
\usetikzlibrary{decorations,backgrounds}

% BEGIN from https://tex.stackexchange.com/a/419558/11820
\newcounter{tmp}
\newif\ifpathisclosed

%\tikzstyle{D}=[draw=blue,line width=1pt,preaction={clip, postaction={draw=blue,opacity=0.5,line width=12pt}}]
%<- note that tikzstyle is deprecated

\tikzset{D/.style={
    preaction={draw=blue,line width=1pt},
    preaction={decoration={contour lineto closed, contour distance=6pt},
      decorate,
    },
    postaction={
      insert path={%
        \pgfextra{%
          \pgfinterruptpath
          \begin{scope}[opacity=0.5, transparency group]
            \path[fill=blue,even odd rule] 
            \mySecondList \myList 
            ;
          \end{scope}
        \endpgfinterruptpath}
    }},
}}



\tikzset{EDR/.style={
    preaction={draw=red,line width=1pt},
    preaction={decoration={contour lineto closed, contour distance=6pt},
      decorate,
    },
    postaction={
      insert path={%
        \pgfextra{%
          \pgfinterruptpath
          \path[pattern=north west lines, pattern color=red,even odd rule] 
          \mySecondList \myList 
          ;
        \endpgfinterruptpath}
    }},
}}

\makeatletter
\def\pgfdecoratedcontourdistance{0pt}
\pgfset{
  decoration/contour distance/.code=%
\pgfmathsetlengthmacro\pgfdecoratedcontourdistance{#1}}
\pgfdeclaredecoration{contour lineto closed}{start}{%
  \state{start}[
  next state=draw,
  width=0pt,
  persistent precomputation=\let\pgf@decorate@firstsegmentangle\pgfdecoratedangle]{%
    %\xdef\myList{}\xdef\mySecondList{}%
    \setcounter{tmp}{0}%
    \global\pathisclosedfalse%
    \pgfpathmoveto{\pgfpointlineattime{.5}
      {\pgfqpoint{0pt}{\pgfdecoratedcontourdistance}}
    {\pgfqpoint{\pgfdecoratedinputsegmentlength}{\pgfdecoratedcontourdistance}}}%
  }%
  \state{draw}[next state=draw, width=\pgfdecoratedinputsegmentlength]{%
    \ifpgf@decorate@is@closepath@%
      \pgfmathsetmacro\pgfdecoratedangletonextinputsegment{%
      -\pgfdecoratedangle+\pgf@decorate@firstsegmentangle}%
    \fi
    \pgfmathsetlengthmacro\pgf@decoration@contour@shorten{%
    -\pgfdecoratedcontourdistance*cot(-\pgfdecoratedangletonextinputsegment/2+90)}%
    \pgfpathlineto
    {\pgfpoint{\pgfdecoratedinputsegmentlength+\pgf@decoration@contour@shorten}
    {\pgfdecoratedcontourdistance}}%
    \stepcounter{tmp}%
    \pgfcoordinate{muemmel\number\value{tmp}}{\pgfpoint{\pgfdecoratedinputsegmentlength+\pgf@decoration@contour@shorten}
    {\pgfdecoratedcontourdistance}}%
    \pgfcoordinate{feep\number\value{tmp}}{\pgfpoint{\pgfdecoratedinputsegmentlength}{0pt}}%      
    \ifnum\value{tmp}=1\relax%
     \pgfcoordinate{muemmel0}{\pgfpoint{0pt}{\pgfdecoratedcontourdistance}}%
     \pgfcoordinate{feep0}{\pgfpoint{0pt}{0pt}}%      
     \xdef\myList{(muemmel\number\value{tmp})}%
     \xdef\mySecondList{(feep\number\value{tmp})}%
    \else
     \xdef\myList{\myList -- (muemmel\number\value{tmp})}%
     \xdef\mySecondList{(feep\number\value{tmp}) -- \mySecondList}%
    \fi 
    \ifpgf@decorate@is@closepath@%
      \pgfpathclose
      \global\pathisclosedtrue%
    \fi
  }%
  \state{final}{%\typeout{\myList,\mySecondList}%
    \ifpathisclosed%
      \xdef\myList{\myList -- cycle}% 
      \xdef\mySecondList{\mySecondList -- cycle}%
      %\typeout{closed \mySecondList \myList }
    \else
      %\typeout{\number\value{tmp}}%
      \xdef\myList{(muemmel0) -- \myList -- cycle}% 
      \xdef\mySecondList{\mySecondList -- (feep0) --}%
      %\typeout{not closed \mySecondList \myList }%   
    \fi
  }%
}
\makeatother
\tikzset{
  contour/.style={
    decoration={
      name=contour lineto closed,
      contour distance=#1
    },
decorate}}
% END from https://tex.stackexchange.com/a/419558/11820

\tikzset{EDO/.style={
    preaction={draw=orange,line width=1pt},
    preaction={decoration={contour lineto closed, contour distance=6pt},
      decorate,
    },
    postaction={
      insert path={%
        \pgfextra{%
          \pgfinterruptpath
          \path[pattern=north east lines, pattern color=orange,even odd rule] 
          \mySecondList \myList 
          ;
        \endpgfinterruptpath}
    }},
}}
\begin{document}

\begin{tikzpicture}[]
  \path [EDO] (2.875,3) -- ++(0,.75) -- ++(-2.875,0) -- ++(0,-.75) -- cycle;
  \path [EDR] (0,3) -- ++(0,-1) -- ++(6,0) -- ++(0,1) -- ++(-3.125,0) -- cycle ;
  \fill [white] (.21,3.3) rectangle (2.655,2.7);

  \begin{scope}[yshift=-2cm]
    \path [EDO] (2.875,3) -- ++(0,.75) -- ++(-2.875,0) -- ++(0,-.75) -- cycle;
    \path [EDR] (0,3) -- ++(0,-1) -- ++(6,0) -- ++(0,1) -- ++(-3.125,0) -- cycle ;
  \end{scope}

  \begin{scope}[yshift=-4cm]
    \path [EDO,draw, orange, line width=1pt] (2.875,3) -- ++(0,.75) -- ++(-2.875,0) -- ++(0,-.75);
    \path [EDR,draw, red, line width=1pt] (0,3) -- ++(0,-1) -- ++(6,0) -- ++(0,1) -- ++(-3.125,0);
  \end{scope}

  \begin{scope}[yshift=-6cm]
    \path [EDO,draw, orange, line width=1pt] (2.875,3) -- ++(0,.75) -- ++(-2.875,0) -- ++(0,-.75);
    \path [EDR,draw, red, line width=1pt,shorten >=6pt] (0,3) -- ++(0,-1) -- ++(6,0) -- ++(0,1) 
    -- ++(-3.125cm-6pt,0);
  \end{scope}
\end{tikzpicture}

\end{document}

введите описание изображения здесь

Если считать сверху, то третий (или предпоследний) путь — это то, что вы получаете по умолчанию. Это потому, что путь не знает, что другой путь — это то, что он есть. Чтобы сгенерировать желаемый вами вывод, нужно использовать shorten, см. четвертую (или последнюю) картинку.

Это более упрощенная версия.

\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{patterns,decorations}

% BEGIN from https://tex.stackexchange.com/a/419558/11820


\tikzset{D/.style={
    preaction={draw=blue,line width=1pt},
    preaction={decoration={contour lineto closed, contour distance=6pt},
      decorate,
    },
    postaction={
      insert path={%
        \pgfextra{%
          \pgfinterruptpath
          \begin{scope}[opacity=0.5, transparency group]
            \path[fill=blue,even odd rule] 
            \mySecondList \myList 
            ;
          \end{scope}
        \endpgfinterruptpath}
    }},
}}



\tikzset{EDR/.style={
    preaction={draw=red,line width=1pt},
    preaction={decoration={contour lineto closed, contour distance=6pt},
      decorate,
    },
    postaction={
      insert path={%
        \pgfextra{%
          \pgfinterruptpath
          \path[pattern=north west lines, pattern color=red,even odd rule] 
          \mySecondList \myList 
          ;
        \endpgfinterruptpath}
    }},
}}

\makeatletter
\newif\ifdeco@path@is@closed
\newcounter{deco@count}

\def\pgfdecoratedcontourdistance{0pt}
\pgfset{
  decoration/contour distance/.code=%
\pgfmathsetlengthmacro\pgfdecoratedcontourdistance{#1}}
\pgfdeclaredecoration{contour lineto closed}{start}{%
  \state{start}[
  next state=draw,
  width=0pt,
  persistent precomputation=\let\pgf@decorate@firstsegmentangle\pgfdecoratedangle]{%
    %\xdef\myList{}\xdef\mySecondList{}%
    \setcounter{deco@count}{0}%
    \global\deco@path@is@closedfalse%
    \pgfpathmoveto{\pgfpointlineattime{.5}
      {\pgfqpoint{0pt}{\pgfdecoratedcontourdistance}}
    {\pgfqpoint{\pgfdecoratedinputsegmentlength}{\pgfdecoratedcontourdistance}}}%
  }%
  \state{draw}[next state=draw, width=\pgfdecoratedinputsegmentlength]{%
    \ifpgf@decorate@is@closepath@%
      \pgfmathsetmacro\pgfdecoratedangletonextinputsegment{%
      -\pgfdecoratedangle+\pgf@decorate@firstsegmentangle}%
    \fi
    \pgfmathsetlengthmacro\pgf@decoration@contour@shorten{%
    -\pgfdecoratedcontourdistance*cot(-\pgfdecoratedangletonextinputsegment/2+90)}%
    \pgfpathlineto
    {\pgfpoint{\pgfdecoratedinputsegmentlength+\pgf@decoration@contour@shorten}
    {\pgfdecoratedcontourdistance}}%
    \stepcounter{deco@count}%
    \pgfcoordinate{muemmel\number\value{deco@count}}{\pgfpoint{\pgfdecoratedinputsegmentlength+\pgf@decoration@contour@shorten}
    {\pgfdecoratedcontourdistance}}%
    \pgfcoordinate{feep\number\value{deco@count}}{\pgfpoint{\pgfdecoratedinputsegmentlength}{0pt}}%      
    \ifnum\value{deco@count}=1\relax%
     \pgfcoordinate{muemmel0}{\pgfpoint{0pt}{\pgfdecoratedcontourdistance}}%
     \pgfcoordinate{feep0}{\pgfpoint{0pt}{0pt}}%      
     \xdef\myList{(muemmel\number\value{deco@count})}%
     \xdef\mySecondList{(feep\number\value{deco@count})}%
    \else
     \xdef\myList{\myList -- (muemmel\number\value{deco@count})}%
     \xdef\mySecondList{(feep\number\value{deco@count}) -- \mySecondList}%
    \fi 
    \ifpgf@decorate@is@closepath@%
      \pgfpathclose
      \global\deco@path@is@closedtrue%
    \fi
  }%
  \state{final}{%\typeout{\myList,\mySecondList}%
    \ifdeco@path@is@closed%
      \xdef\myList{\myList -- cycle}% 
      \xdef\mySecondList{\mySecondList -- cycle}%
      %\typeout{closed \mySecondList \myList }
    \else
      %\typeout{\number\value{deco@count}}%
      \xdef\myList{(muemmel0) -- \myList -- cycle}% 
      \xdef\mySecondList{\mySecondList -- (feep0) --}%
      %\typeout{not closed \mySecondList \myList }%   
    \fi
  }%
}
\makeatother
\tikzset{
  contour/.style={
    decoration={
      name=contour lineto closed,
      contour distance=#1
    },
decorate}}
% END from https://tex.stackexchange.com/a/419558/11820

\tikzset{EDO/.style={
    preaction={draw=orange,line width=1pt},
    preaction={decoration={contour lineto closed, contour distance=6pt},
      decorate,
    },
    postaction={
      insert path={%
        \pgfextra{%
          \pgfinterruptpath
          \path[pattern=north east lines, pattern color=orange,even odd rule] 
          \mySecondList \myList 
          ;
        \endpgfinterruptpath}
    }},
}}
\begin{document}

\begin{tikzpicture}[]
    \path [EDO,draw, orange, line width=1pt] (2.875,3) -- ++(0,.75) -- ++(-2.875,0) -- ++(0,-.75);
    \path [EDR,draw, red, line width=1pt,shorten >=6pt-\pgflinewidth/2] (0,3) -- ++(0,-1) -- ++(6,0) -- ++(0,1) 
    -- ++(-3.125cm-6pt,0);
\end{tikzpicture}

\end{document}

введите описание изображения здесь

Я немного подчистил. Однако есть одна вещь, которую я не сделал: перестал использовать \pgfextrafor paths. Этого следует избегать. В этом самом случае это кажется нормальным. Можно также написать более чистую версию, но это потребует от вас добавления дополнительной команды для шаблона. Пожалуйста, дайте мне знать, если вы хотите, чтобы это было прописано.

решение2

Один из способов сделать это — удалить drawчасть украшения, а затем нарисовать линии после того, как украшение будет сделано, как в третьем примере.

Я изменил ваш MWE:

\documentclass[tikz]{standalone}
\usepackage{tikz}
\usetikzlibrary{patterns}
\usetikzlibrary{decorations,backgrounds}

% BEGIN from https://tex.stackexchange.com/a/419558/11820
\newcounter{tmp}

%\tikzstyle{D}=[draw=blue,line width=1pt,preaction={clip, postaction={draw=blue,opacity=0.5,line width=12pt}}]
%<- note that tikzstyle is deprecated

\tikzset{D/.style={
    preaction={draw=blue,line width=1pt},
    preaction={decoration={contour lineto closed, contour distance=6pt},
      decorate,
    },
    postaction={
      insert path={%
        \pgfextra{%
          \pgfinterruptpath
          \begin{scope}[opacity=0.5, transparency group]
            \path[fill=blue,even odd rule] 
            \mySecondList \myList 
            ;
          \end{scope}
        \endpgfinterruptpath}
    }},
}}



\tikzset{EDR/.style={
   % preaction={draw=red,line width=1pt},    %<- remove this line
    preaction={decoration={contour lineto closed, contour distance=6pt},
      decorate,
    },
    postaction={
      insert path={%
        \pgfextra{%
          \pgfinterruptpath
          \path[pattern=north west lines, pattern color=red,even odd rule] 
          \mySecondList \myList 
          ;
        \endpgfinterruptpath}
    }},
}}

\makeatletter
\def\pgfdecoratedcontourdistance{0pt}
\pgfset{
  decoration/contour distance/.code=%
\pgfmathsetlengthmacro\pgfdecoratedcontourdistance{#1}}
\pgfdeclaredecoration{contour lineto closed}{start}{%
  \state{start}[
  next state=draw,
  width=0pt,
  persistent precomputation=\let\pgf@decorate@firstsegmentangle\pgfdecoratedangle]{%
    \pgfextra{\xdef\myList{}\xdef\mySecondList{}}
    \pgfextra{\setcounter{tmp}{0}}
    \pgfpathmoveto{\pgfpointlineattime{.5}
      {\pgfqpoint{0pt}{\pgfdecoratedcontourdistance}}
    {\pgfqpoint{\pgfdecoratedinputsegmentlength}{\pgfdecoratedcontourdistance}}}%
  }%
  \state{draw}[next state=draw, width=\pgfdecoratedinputsegmentlength]{%
    \ifpgf@decorate@is@closepath@%
      \pgfmathsetmacro\pgfdecoratedangletonextinputsegment{%
      -\pgfdecoratedangle+\pgf@decorate@firstsegmentangle}%
    \fi
    \pgfmathsetlengthmacro\pgf@decoration@contour@shorten{%
    -\pgfdecoratedcontourdistance*cot(-\pgfdecoratedangletonextinputsegment/2+90)}%
    \pgfpathlineto
    {\pgfpoint{\pgfdecoratedinputsegmentlength+\pgf@decoration@contour@shorten}
    {\pgfdecoratedcontourdistance}}%
    \stepcounter{tmp}
    \pgfcoordinate{muemmel\thetmp}{\pgfpoint{\pgfdecoratedinputsegmentlength+\pgf@decoration@contour@shorten}
    {\pgfdecoratedcontourdistance}}
    \pgfcoordinate{feep\thetmp}{\pgfpoint{\pgfdecoratedinputsegmentlength}{0pt}}      
    \pgfextra{\xdef\myList{\myList (muemmel\thetmp) -- }%
    \xdef\mySecondList{\mySecondList (feep\thetmp) -- }}
    \ifpgf@decorate@is@closepath@%
      \pgfpathclose
      \pgfextra{\xdef\myList{\myList cycle}% 
      \xdef\mySecondList{\mySecondList cycle}}
    \fi
  }%
  \state{final}{\pgfextra{%\typeout{\myList,\mySecondList}
  }}%
}
\makeatother
\tikzset{
  contour/.style={
    decoration={
      name=contour lineto closed,
      contour distance=#1
    },
decorate}}
% END from https://tex.stackexchange.com/a/419558/11820

\tikzset{EDO/.style={
  %  preaction={draw=orange,line width=1pt},    %<- remove this line
    preaction={decoration={contour lineto closed, contour distance=6pt},
      decorate,
    },
    postaction={
      insert path={%
        \pgfextra{%
          \pgfinterruptpath
          \path[pattern=north east lines, pattern color=orange,even odd rule] 
          \mySecondList \myList 
          ;
        \endpgfinterruptpath}
    }},
}}
\begin{document}

\begin{tikzpicture}[]
  \node at (-.5,0) {a)};
  \path [EDO] (2.875,0) -- ++(0,.75) -- ++(-2.875,0) -- ++(0,-.75) -- cycle;
  \path [EDR] (0,0) -- ++(0,-1) -- ++(6,0) -- ++(0,1) -- ++(-3.125,0) -- cycle ;
  \fill [white] (.21,.3) rectangle (2.655,-.3);
  \path [draw, orange, line width=1pt] (2.875,0) -- ++(0,.75) -- ++(-2.875,0) -- ++(0,-.75);
  \path [draw, red, line width=1pt] (0,0) -- ++(0,-1) -- ++(6,0) -- ++(0,1) -- ++(-3.125,0);
\end{tikzpicture}

\end{document}

Это дает следующее введите описание изображения здесь

решение3

Замечу, что приведенный выше код обязательно длинный и сложный, поэтому я использую простой TikZ. Значение параметров понятно, и вы можете изменить цвет по своему усмотрению.

Вариант заполнения even odd ruleузора north west linesсправляется со своей задачей.

введите описание изображения здесь

\documentclass[tikz,border=5mm]{standalone}
\usetikzlibrary{patterns}
\begin{document}
\begin{tikzpicture}[thick,declare function={a=3;b=1.2;c=3.5;d=1;m=.2;}]
\path 
(0,0)   coordinate (A) +(m,m)   coordinate (At)
(a,b+d) coordinate (B) +(-m,-m) coordinate (Bt)
(a+c,b) coordinate (C) +(-m,-m) coordinate (Ct)
;
\draw[blue,pattern=north west lines,pattern color=red!50,even odd rule] 
(A)|-(B)|-(C)|-cycle (At)|-(Bt)|-(Ct)|-cycle;
\end{tikzpicture}
\end{document}

Связанный контент