Recortando con PSTricks

Recortando con PSTricks

Considere el siguiente ejemplo.

Código

\documentclass{article}

\usepackage{pstricks-add}

\begin{document}

\begin{figure}
\psset{unit=0.05}
 \begin{pspicture}(120,216)
  \pnodes{P}(0,0)(0,120)(186,120)(216,120)(216,0)(186,0)(186,30)(186,90)
  \pspolygon(P0)(P1)(P3)(P4)
  \pcline[offset=12pt]{|<->|}(P1)(P3)
  \ncput*[nrot=:U]{216}
  \pcline[offset=12pt]{|<->|}(P3)(P4)
  \ncput*[nrot=:U]{120}
  \pspolygon[linestyle=none,fillstyle=vlines](P2)(P3)(P4)(P5)
  \pswedge[linestyle=none,fillstyle=solid,fillcolor=white](P6){30}{270}{90}
  \pswedge[linestyle=none,fillstyle=solid,fillcolor=white](P7){30}{270}{90}
  \psarc(P6){30}{270}{90}
  \psarc(P7){30}{270}{90}
  \psdot(P6)
  \psdot(P7)
 \end{pspicture}
\end{figure}

\end{document}

Producción

ingrese la descripción de la imagen aquí

Pregunta

El código anterior parece ser la forma incorrecta de crear la figura. Supongo que \pscustomes el camino a seguir, pero no sé cómo usarlo; ¿Cómo puedo producir la figura de la "mejor" manera usando PSTricks? (Me gustaría mucho ver cómo se hace y no sólo recibir un comentario sobre el uso de esto o aquello).

Respuesta1

Dos marcos y dos arcos o \pscustom:

\documentclass{article}
\usepackage{pstricks-add}
\begin{document}

\psset{unit=1pt}
\begin{pspicture}(240,140)
\psframe[dimen=middle](216,120)
\psframe[fillstyle=vlines,linestyle=none](186,0)(216,120)
\psarc[fillstyle=solid,fillcolor=white](186,30){30}{-90}{90}
\psarc[fillstyle=solid,fillcolor=white](186,90){30}{-90}{90}
\psdots(186,30)(186,90)
\pcline[offset=12pt]{|<->|}(0,120)(216,120) \ncput*{216}
\pcline[offset=12pt]{|<->|}(216,120)(216,0) \ncput*[nrot=:U]{120}
\end{pspicture}

\begin{pspicture}(240,140)
\psframe[dimen=middle](216,120)
\pscustom[fillstyle=vlines,hatchcolor=red]{%
  \psarc(186,30){30}{-90}{90}
  \psarc(186,90){30}{-90}{90}
  \psline(186,120)(216,120)(216,0)
}
\psdots(186,30)(186,90)
\pcline[offset=12pt]{|<->|}(0,120)(216,120) \ncput*{216}
\pcline[offset=12pt]{|<->|}(216,120)(216,0) \ncput*[nrot=:U]{120}
\end{pspicture}

\end{document}

ingrese la descripción de la imagen aquí

Dado que \psframedibuja un camino cerrado (requerido para un recorte adecuado), también se puede agregar como último componente \pscustomsi se usa la función de recorte:

\documentclass{article}
\usepackage{pstricks-add}% http://tug.org/PSTricks/main.cgi/
\begin{document}

\begin{figure}
\psset{unit=1pt}
\begin{pspicture}(240,140)
\psclip{\psset{linestyle=solid}
  \pscustom{
    \psarc(186,30){30}{-90}{90}
    \psarc(186,90){30}{-90}{90}
    \psframe[dimen=middle](216,120)
  }
}
  \psframe[fillstyle=vlines,linestyle=none](186,0)(216,120)
\endpsclip
\psdots(186,30)(186,90)
\pcline[offset=12pt]{|<->|}(0,120)(216,120) \ncput*{216}% Top dimension
\pcline[offset=12pt]{|<->|}(216,120)(216,0) \ncput*[nrot=:U]{120}% Right dimension
\end{pspicture}
\end{figure}

\end{document}

Esto también funciona debido a la estructura y la forma en que \psframese dibuja (en el sentido contrario a las agujas del reloj desde el centro a la izquierda).

Respuesta2

Estoy tratando de mejorar las respuestas existentes.

  • El especificador de flecha |<->|debe cambiarse a |<*->|*para que las |puntas similares estén alineadas correctamente.
  • Es mejor pasarlo globalmente dimen=middleen \pscustomlugar de especificarlo localmente a cada comando que tiene dimen=outerde forma predeterminada.
  • Como la región recortada se dibuja después de trazar el trazado de recorte, en general es necesario trazar nuevamente el trazado de recorte después del recorte.

    Si quieres entender lo que quiero decir, lo agregué hatchcolor=red,hatchsep=1ptal clip \psframeen la edición de Werner. Originalmente la configuración de Werner hatchcolor=blackera imperceptible, pero ahora con el cambio de color, el "defecto" es visualmente obvio de la siguiente manera.

    ingrese la descripción de la imagen aquí

    Por eso es necesario volver a acariciar después del recorte.

  • unit=1ptSe debe evitar su uso porque la cuadrícula de navegación se vuelve desordenada.

ingrese la descripción de la imagen aquí

\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-node}
\def\Path[#1]{%
  \pscustom[dimen=middle,#1]{
    \psarc(186,30){30}{-90}{90}
    \psarc(186,90){30}{-90}{90}
    \psframe(216,120)
  }\ignorespaces
}

\begin{document}

\psset{unit=1pt,linewidth=3pt}
\begin{pspicture}(240,140)
\psclip{\Path[linestyle=none]}
  \psframe[fillstyle=vlines,hatchcolor=red,hatchsep=1pt,linestyle=none](186,0)(216,120)
\endpsclip
\Path[]
\psdots(186,30)(186,90)
\pcline[offset=12pt]{|<*->|*}(0,120)(216,120) \ncput*{216}% Top dimension
\pcline[offset=12pt]{|<*->|*}(216,120)(216,0) \ncput*[nrot=:U]{120}% Right dimension
\end{pspicture}

\end{document}

información relacionada