
Com base no seguinte retirado de pstricks.tex
,
\def\solid@star{%
\if@star
\pslinewidth=\z@
\psdoublelinefalse
\def\pslinestyle{none}%
\def\psk@fillstyle{\psfs@solid}%
\let\psfillcolor\pslinecolor
\fi}
objeto estrelado
\xxx*[linecolor=<color>]
é similar a
\xxx[fillstyle=solid,fillcolor=<color>,linestyle=none,linewidth=0]
No entanto, essa semelhança não é mais mantida quando os usamos como traçado de recorte. No exemplo a seguir, um retângulo sólido vermelho será cortado por um círculo.
O primeiro recorte usa a versão com estrela \pscircle*[linecolor=blue]
e produz um círculo azul. Mas o segundo recorte usa seu dual \pscircle[fillstyle=solid,fillcolor=blue,linestyle=none,linewidth=0]
e produz um círculo vermelho. Portanto, o segundo recorte produz o resultado esperado.
\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}
O que faz essa diferença?
Responder1
Você está certo, ambos \pscircle*[linecolor=blue](2,2){1}
resultam \pscircle[fillstyle=solid,fillcolor=blue,linestyle=none,linewidth=0](2,2){1}
no mesmo círculo azul fechado. No entanto, a ordem dos postscript
comandos correspondentes é um pouco diferente. Comando \pscircle
...
0 360 arc closepath gsave 0 0 1 setrgbcolor
1. .setopacityalpha fill grestore clip
constrói o caminho circular primeiro, salva o estado gráfico atual com gsave
, define os conjuntos atuais color
e alpha
, preenche o círculo e restaura o estado gráfico grestore
logo antes de clip
, portanto, os comandos de cor/preenchimento são filtrados do clipping path
.
por outro lado, o comando \pscircle*
gera postscript
uma sequência diferente:
...
0 0 1 setrgbcolor 56.90549 56.90549 28.45274
1. .setopacityalpha SD clip
ondeSD
significa 0 360 arc fill
, portanto, os comandos de cor/preenchimento permanecem no caminho de recorte e, aparentemente, são aplicados após o recorte.
Responder2
um recortecaminhoé umcurva fechadaenãouma área preenchida. Usar uma versão em estrela para o traçado de recorte produz um comportamento inesperado