Clipping mit PSTricks

Clipping mit PSTricks

Betrachten Sie das folgende Beispiel.

Code

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

Ausgabe

Bildbeschreibung hier eingeben

Frage

Der obige Code scheint die falsche Methode zum Erstellen der Figur zu sein. Ich denke, \pscustomes ist die richtige Methode, aber ich kann nicht herausfinden, wie ich ihn verwenden soll. Wie erstelle ich die Figur am „besten“ mit PSTricks? (Ich würde sehr gerne sehen, wie es gemacht wird, und nicht nur einen Kommentar darüber bekommen, ob ich dieses oder jenes verwenden soll.)

Antwort1

Zwei Rahmen und zwei Bögen oder \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}

Bildbeschreibung hier eingeben

Da \psframeein geschlossener Pfad gezeichnet wird (erforderlich für korrektes Zuschneiden), kann dieser auch als letzte Komponente hinzugefügt werden, \pscustomwenn man die Zuschneidefunktion verwendet:

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

Dies funktioniert auch aufgrund der Struktur und der Art \psframeder Einzeichnung (von Mitte-links aus gegen den Uhrzeigersinn).

Antwort2

Ich versuche, die vorhandenen Antworten zu verbessern.

  • Der Pfeilspezifizierer |<->|sollte geändert werden, um |<*->|*die |-ähnlichen Spitzen richtig auszurichten.
  • Es ist besser, es global zu übergeben, dimen=middleals \pscustomes lokal für jeden einzelnen Befehl anzugeben, was dimen=outerstandardmäßig der Fall ist.
  • Da der ausgeschnittene Bereich nach dem Zeichnen des Clipper-Pfades gezeichnet wird, ist es im Allgemeinen erforderlich, den Clipper-Pfad nach dem Ausschneiden erneut zu zeichnen.

    Wenn Sie verstehen möchten, was ich meine, ich habe hatchcolor=red,hatchsep=1ptden Ausschnitt \psframein Werners Bearbeitung ergänzt. Ursprünglich ist Werners Einstellung hatchcolor=blackso, dass es nicht auffällt, aber jetzt mit der Farbänderung ist der „Defekt“ optisch wie folgt offensichtlich.

    Bildbeschreibung hier eingeben

    Deshalb ist nach dem Scheren ein Nachglätten notwendig.

  • Die Verwendung unit=1ptsollte vermieden werden, da das Navigationsraster unübersichtlich wird.

Bildbeschreibung hier eingeben

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

verwandte Informationen