¿Qué hace que el recorte con un objeto gráfico destacado y su dual produzca resultados diferentes?

¿Qué hace que el recorte con un objeto gráfico destacado y su dual produzca resultados diferentes?

Basado en lo siguiente tomado de pstricks.tex,

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

objeto estrellado

\xxx*[linecolor=<color>]

es parecido a

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

Sin embargo, esta similitud ya no se mantiene cuando los usamos como trazado de recorte. En el siguiente ejemplo, un círculo recortará un rectángulo sólido rojo.

El primer recorte utiliza la versión destacada \pscircle*[linecolor=blue]y produce un círculo azul. Pero el segundo recorte usa su dual \pscircle[fillstyle=solid,fillcolor=blue,linestyle=none,linewidth=0]y produce un círculo rojo. Entonces el segundo recorte produce el resultado esperado.

ingrese la descripción de la imagen aquí

\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}

¿Qué hace esta diferencia?

Respuesta1

Tienes razón, ambos \pscircle*[linecolor=blue](2,2){1} dan \pscircle[fillstyle=solid,fillcolor=blue,linestyle=none,linewidth=0](2,2){1} como resultado el mismo círculo azul cerrado. Sin embargo, el orden de postscriptlos comandos correspondientes es algo diferente. Dominio \pscircle
...

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

Primero construye la ruta circular, guarda el estado gráfico actual con gsave, establece los valores actuales colory alpha, rellena el círculo y restaura el estado gráfico grestorejusto antes de clip, por lo que los comandos de color/relleno se filtran de clipping path.

por otro lado, el comando \pscircle*genera una postscriptsecuencia diferente:

...

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

donde SDsignifica 0 360 arc fill, por lo tanto, los comandos de color/relleno permanecen en el trazado de recorte y aparentemente se aplican después del recorte.

Respuesta2

un recortecaminoes uncurva cerradaynoun área llena. El uso de una versión en estrella para el trazado de recorte produce un comportamiento inesperado

información relacionada