Dibujar moléculas con PostScript

Los gráficos vectoriales son ideales para fines ilustrativos. Las moléculas están formadas por átomos unidos por enlaces. Me gustaría que las operaciones de edición de un dibujo de una estructura química se realizaran según la estructura física de las moléculas: seleccionar un átomo, transferirlo, rotar un fragmento de una molécula, firmar ... Casi todos los visualizadores de estructuras atómicas exportan la vista a una trama, lo que complica la preparación de ilustraciones. En esta publicación, explicaré cómo renderizar estructuras 3D en formato vectorial y cómo PostScript puede ayudarlo con esto .





En lugar de una bonita imagen de mapa de bits (izquierda), obtenemos una ilustración antigua (derecha).
En lugar de una bonita imagen de mapa de bits (izquierda), obtenemos una ilustración antigua (derecha).

Muchos programas pueden exportar estructura a gráficos vectoriales: SVG, PDF, EPS. Sin embargo, esto a menudo se hace solo de manera formal: las imágenes resultantes consisten en muchas primitivas, es casi imposible desensamblarlas por átomos y enlaces. El tamaño de un archivo vectorial de este tipo también es grande, en una palabra, es un desastre. De los muchos constructores moleculares, solo dos satisfacen la calidad del código de imagen vectorial: GaussView y Molden . Este último programa está disponible para todos, por lo que los ejemplos se construyen con su ayuda, sin embargo, todas las recetas a continuación son aplicables (con algunas modificaciones) a las ilustraciones vectoriales realizadas por el programa GaussView. ¡Tan Molden!





Moldeado
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
      
      



Ya hay 410 primitivas en lugar 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 reducirá radicalmente el dibujo a blanco y negro. Como en libros antiguos.





Agregué una firma: la longitud del enlace de hidrógeno.
Agregué una firma: la longitud del enlace de hidrógeno.

Conclusión

PostScript es sorprendentemente bueno para crear ilustraciones. Es fácil de aprender. En esta publicación, di una forma de hacer cosas simples, pero a veces muy, muy necesarias al preparar una publicación o póster para una conferencia. Sin embargo, ¡puedes ir más allá! Recomiendo encarecidamente el libro Mathematical Illustrations .








All Articles