是什麼使得帶有星號的圖形物件及其對偶物件的剪切產生不同的結果?

是什麼使得帶有星號的圖形物件及其對偶物件的剪切產生不同的結果?

基於以下內容pstricks.tex

\def\solid@star{%
  \if@star
    \pslinewidth=\z@
    \psdoublelinefalse
    \def\pslinestyle{none}%
    \def\psk@fillstyle{\psfs@solid}%
    \let\psfillcolor\pslinecolor
  \fi}

加星標的對象

\xxx*[linecolor=<color>]

類似

\xxx[fillstyle=solid,fillcolor=<color>,linestyle=none,linewidth=0]

然而,當我們使用它們作為剪切路徑時,這種相似性就不再存在。在以下範例中,紅色實心矩形將被圓形剪裁。

第一個剪輯使用帶有星號的版本\pscircle*[linecolor=blue]並產生一個藍色圓圈。但第二次剪輯使用了它的對偶\pscircle[fillstyle=solid,fillcolor=blue,linestyle=none,linewidth=0]並產生了一個紅色圓圈。所以第二次剪輯產生了預期的結果。

在此輸入影像描述

\documentclass[border=12pt]{standalone}
\usepackage{pstricks}

\begin{document}

\begin{pspicture}[showgrid=top](4,4)
    \psclip{\pscircle*[linecolor=blue](2,2){1}}
        \psframe*[linecolor=red](4,4)
    \endpsclip
\end{pspicture}
\qquad
\begin{pspicture}[showgrid=top](4,4)
    \psclip{\pscircle[fillstyle=solid,fillcolor=blue,linestyle=none,linewidth=0](2,2){1}}
        \psframe*[linecolor=red](4,4)
    \endpsclip
\end{pspicture}

\end{document}

是什麼造成了這種差異?

答案1

你是對的,兩者\pscircle*[linecolor=blue](2,2){1} 都會\pscircle[fillstyle=solid,fillcolor=blue,linestyle=none,linewidth=0](2,2){1} 產生相同的閉合藍色圓圈。然而,相應命令的順序postscript有些不同。命令\pscircle
...

0 360 arc closepath gsave 0 0 1  setrgbcolor
1. .setopacityalpha fill  grestore clip

首先建立圓形路徑,用 儲存目前圖形狀態gsave,設定目前coloralpha,填滿圓並恢復grestore先前的圖形狀態clip,從而從 中過濾掉顏色/填滿指令clipping path

另一方面,命令\pscircle*產生不同的postscript序列:

0 0 1  setrgbcolor 56.90549 56.90549 28.45274
1. .setopacityalpha  SD  clip

其中SD代表0 360 arc fill,因此顏色/填充命令保留在剪切路徑中,顯然,它們在剪切後應用。

答案2

剪報小路是一個閉合曲線不是一個填滿的區域。使用星形版本作為剪下路徑會產生意外的行為

相關內容