PostScript 상대 이동(`rlineto` 및 `rmoveto`)에 해당하는 PGF

PostScript 상대 이동(`rlineto` 및 `rmoveto`)에 해당하는 PGF

PostScript(및 rmoveto) 와 마찬가지로 rlinetoTikZ는 현재 지점의 상대적 이동을 생성하는 것을 간단하게 만듭니다. PGF에서 동등한 것을 볼 수 없습니다. 누락되었나요? 그렇다면 그 이유를 쉽게 말할 수 있습니까? (그리고 PFG에서 대체할 의도는 무엇입니까?) 상대 이동이 시스템 계층에 대해 충분히 낮은 수준이 아니더라도(믿기 어렵습니까?) 기본 계층에 대해서는 충분히 낮은 수준으로 보입니다.

편집(관련 검색어):더 이상 사용 되지 \pgfrelative않습니까(현재 매뉴얼에는 없음)? 그리고 현재 지점을 생성하는 PGF 명령은 무엇입니까?

답변1

다음 예에서는 두 개의 새로운 매크로 \pgfpathrlineto{<coord>}및가 \pgfpathrmoveto{<coord>}제공됩니다. 완전히 테스트되지 않았으므로 주의하세요.

실제로 마지막 지점의 원래(변환되지 않은) 좌표를 추적해야 하지만 여기서는 변환된 좌표를 \pgf@x저장 \pgf@y합니다.

요점은 에서 (x, y) -- ++(2, 3)변환 전 예상되는 라인은 이고 (x, y) -- (x+2, y+3), 다음 예에서 구현한 것은 이며 (x, y) -- ($ (x, y) + T'(2, 3) $), T'변환의 반전은 어디에 있습니까?

\documentclass{article}
\usepackage{pgf}

\makeatletter
\def\pgf@path@last@point{%
  \pgfpoint{\pgf@path@lastx}{\pgf@path@lasty}}

% rlineto
\def\pgfpathrlineto#1{%
  \pgf@process{#1}%
  \global\advance\pgf@x\pgf@path@lastx
  \global\advance\pgf@y\pgf@path@lasty
  % similar to \pgfpathlineto, but without applying transformation
  \pgf@nlt@lineto{\pgf@x}{\pgf@y}%
  \global\pgf@path@lastx=\pgf@x
  \global\pgf@path@lasty=\pgf@y
}

% rmoveto
\def\pgfpathrmoveto#1{%
  \pgf@process{#1}%
  \global\advance\pgf@x\pgf@path@lastx
  \global\advance\pgf@y\pgf@path@lasty
  % similar to \pgfpathlineto, but without applying transformation
  \pgf@nlt@moveto{\pgf@x}{\pgf@y}%
  \global\pgf@path@lastx=\pgf@x
  \global\pgf@path@lasty=\pgf@y
}
\makeatother

\begin{document}
\begin{pgfpicture}
  \pgfpathmoveto{\pgfpointorigin}
  \pgfpathlineto{\pgfpoint{20pt}{0pt}}
  \pgfpathmoveto{\pgfpoint{40pt}{0pt}}
  \pgfpathlineto{\pgfpoint{60pt}{0pt}}
  \pgfusepath{draw}
  
  \pgftransformshift{\pgfpoint{10pt}{10pt}}
  \pgfsetcolor{red}
  \pgfpathmoveto{\pgfpointorigin}
  \pgfpathlineto{\pgfpoint{20pt}{0pt}}
  \pgfpathmoveto{\pgfpoint{40pt}{0pt}}
  \pgfpathlineto{\pgfpoint{60pt}{0pt}}
  \pgfusepath{draw}
\end{pgfpicture}
\qquad
% use r(line|move)to
\begin{pgfpicture}
  \pgfpathmoveto{\pgfpointorigin}
  \pgfpathrlineto{\pgfpoint{20pt}{0pt}}
  \pgfpathrmoveto{\pgfpoint{20pt}{0pt}}
  \pgfpathrlineto{\pgfpoint{20pt}{0pt}}
  \pgfusepath{draw}
  
  \pgftransformshift{\pgfpoint{10pt}{10pt}}
  \pgfsetcolor{red}
  \pgfpathmoveto{\pgfpointorigin}
  \pgfpathrlineto{\pgfpoint{20pt}{0pt}}
  \pgfpathrmoveto{\pgfpoint{20pt}{0pt}}
  \pgfpathrlineto{\pgfpoint{20pt}{0pt}}
  \pgfusepath{draw}
\end{pgfpicture}
\end{document}

여기에 이미지 설명을 입력하세요

관련 정보