Recortando com PSTricks

Recortando com PSTricks

Considere o seguinte exemplo.

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}

Saída

insira a descrição da imagem aqui

Pergunta

O código acima parece ser a forma errada de criar a figura. Acho que \pscustomé o caminho a seguir, mas não consigo descobrir como usá-lo; como faço para produzir a figura da "melhor" maneira usando o PSTricks? (Gostaria muito de ver como isso é feito e não apenas receber um comentário sobre o uso disso ou daquilo.)

Responder1

Dois quadros e dois arcos ou \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}

insira a descrição da imagem aqui

Como \psframedesenha um caminho fechado (necessário para um recorte adequado), ele também pode ser adicionado como o último componente \pscustomse usarmos a função 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}

Isso também funciona por causa da estrutura e da forma como \psframeé desenhado (sentido anti-horário a partir do meio-esquerda).

Responder2

Estou tentando melhorar as respostas existentes.

  • O especificador de seta |<->|deve ser alterado para |<*->|*para |alinhar corretamente as pontas do tipo -.
  • É melhor passar globalmente dimen=middlepara \pscustomem vez de especificá-lo localmente para cada comando que possui dimen=outerpor padrão.
  • Como a região recortada é desenhada após traçar o caminho de corte, em geral é necessário traçar novamente o caminho de corte após o recorte.

    Se você quiser entender o que quero dizer, acrescentei hatchcolor=red,hatchsep=1ptao recorte \psframena edição de Werner. Originalmente a configuração de Werner era hatchcolor=blackimperceptível, mas agora com a mudança de cor, o "defeito" é visualmente óbvio como segue.

    insira a descrição da imagem aqui

    É por isso que é necessário refazer o curso após o recorte.

  • O uso unit=1ptdeve ser evitado porque a grade de navegação fica confusa.

insira a descrição da imagem aqui

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

informação relacionada