Desenho de moléculas com PostScript

Os gráficos vetoriais são ótimos para fins ilustrativos. As moléculas são constituídas por átomos ligados por ligações. Gostaria que as operações de edição de um desenho de uma estrutura química fossem realizadas de acordo com a estrutura física das moléculas: selecionar um átomo, transferi-lo, girar um fragmento de uma molécula, assinar ... Quase todos os visualizadores de estruturas atômicas exportam a vista para um raster, o que dificulta a preparação das ilustrações. Nesta postagem, explicarei como renderizar estruturas 3D em formato vetorial e como o PostScript pode ajudá-lo com isso .





Em vez de uma bela imagem de bitmap (à esquerda), temos uma ilustração vintage (à direita).
Em vez de uma bela imagem de bitmap (à esquerda), temos uma ilustração vintage (à direita).

Muitos programas são capazes de exportar estruturas para gráficos vetoriais: SVG, PDF, EPS. No entanto, isso geralmente é feito apenas formalmente - as imagens resultantes consistem em muitos primitivos, é quase impossível desmontá-los por átomos e ligações. O tamanho desse arquivo vetorial também é grande, em uma palavra, é um desastre. Dos muitos construtores moleculares, apenas dois satisfazem a qualidade do código da imagem vetorial: GaussView e Molden . O último programa está disponível para todos, portanto os exemplos são construídos com a sua ajuda, no entanto, todas as receitas abaixo são aplicáveis ​​(com algumas modificações) às ilustrações vetoriais feitas pelo programa GaussView. Então, Molden!





Molden
Molden

, PostScript.





PostScript

:





%!PS-Adobe-2.0 EPSF-2.0
%%Title: Molden
%%For: Schaft
%%Creator: Drs G Schaftenaar
%%DocumentFonts: Courier
%%Pages (atend)
%%BoundingBox: 0 0 612 792
%%EndComments
%
%###### User Preferences ############
%
%---- SIZE AND ORIENTATION OF THE PLOT ---
%
/size    {  0.24 } def
%---- These number can be negative -------
/originx {  39.0 } def
/originy { 753.0 } def
/angle   { -90.0 } def
%For Portrait use
%/originx { 40.0 } def
%/originy { 240.0 } def
%/angle   { 0.0 } def
%and BoundingBox: 25 255 535 765
      
      



- \doatom



, - \dorod



. Molden.





%---- Include Tabel & Logo, Fontsize -----
/tabel {true} def
/titleandlogo {true} def %   false!
      
      



, 4082 . .





4082 primitivas
4082

.





%---- SET BOND RENDERING:  ---------------
%---- shadedrod, whiterod, blackrod  -----
%
/doatom { dosketchysmoothatom } def 
/dorod  { sketchyshadedrod }    def
%
%   ( )
/dosketchysmoothatom  %   doatom
{ gsave
  rx ry translate
  90 -15 1 %    90 1 1 -   
  { gsave
    dup cos hue exch satu exch sethsbcolor sin dup scale
    newpath
    0 0 rad 0 360 arc
    closepath fill grestore } for
    grestore } def
/sketchyshadedrod
{ gsave
  x1 y1 translate
  x2 x1 neg add
  y2 y1 neg add
  {atan neg rotate} stopped not {
  85 -15 0 %  87 -3 0 -   
  {dup
  gsave
  newpath
   cos 1.0 cosb 0.5 mul neg add mul
   hue exch satu exch sethsbcolor
   sin 1.0 scale
   1 cosb scale
   0 0 hd 0 180 arcn
   x2 x1 neg add dup mul
   y2 y1 neg add dup mul
   add sqrt
  0 cosb eq {/cosb 1.0 def} if 0 exch cosb div translate
   0 0 hd 180 360 arc
  closepath fill
  grestore } for
  } if
  grestore } def
      
      



Já existem 410 primitivas em vez de 4082.
410 4082.

!





/doatom { docirclecoloratom } def
/dorod { dostick } def

%  ,   ,  
/stickwidth {16} def
/stickgreycolor  {0} def
/strokelinewidth {4} def

/docirclecoloratom
{ gsave
    strokelinewidth setlinewidth
    rx ry translate
    newpath 0 0 rad 0 360 arc closepath
    gsave
    hue satu 1.0 sethsbcolor fill
    grestore
    stroke
    0 0 rad 0.75 mul -60 0 arc
    stroke
    grestore
} def
%  dostick   Molden
      
      



:





, . - 3 . , , . - . .





/docircleatom
{ gsave
    strokelinewidth setlinewidth
    rx ry translate
    newpath 0 0 rad 0 360 arc closepath
    gsave
    1 setgray fill
    grestore
    stroke
    gsave
    1.00 0.55 scale
    0 0 rad 0 180 arc
    stroke
    grestore
    0.55 1.00 scale
    0 0 rad -90 90 arcn
    stroke
    grestore
} def
      
      



Este código irá reduzir radicalmente o desenho a preto e branco. Como em livros antigos.





Eu adicionei uma assinatura - o comprimento da ligação de hidrogênio.
Eu adicionei uma assinatura - o comprimento da ligação de hidrogênio.

Conclusão

PostScript é surpreendentemente bom na criação de ilustrações. É fácil aprender. Neste post, dei uma maneira de fazer coisas simples, mas às vezes muito, muito necessárias ao preparar uma publicação ou pôster para uma conferência. No entanto, você pode ir mais longe! Eu recomendo fortemente o livro Ilustrações Matemáticas .








All Articles