Dessiner des molécules avec PostScript

Les graphiques vectoriels sont parfaits à des fins d'illustration. Les molécules sont constituées d'atomes liés par des liaisons. Je souhaiterais que les opérations d'édition d'un dessin d'une structure chimique soient effectuées en fonction de la structure physique des molécules: sélectionner un atome, le transférer, faire pivoter un fragment de molécule, signer ... Presque tous les visualiseurs de structures atomiques exportent la vue sur un raster, ce qui complique la préparation des illustrations. Dans cet article, je vais vous expliquer comment rendre des structures 3D au format vectoriel et comment PostScript peut vous y aider .





Au lieu d'une jolie image bitmap (à gauche), nous obtenons une illustration vintage (à droite).
Au lieu d'une jolie image bitmap (à gauche), nous obtenons une illustration vintage (à droite).

De nombreux programmes sont capables d'exporter une structure vers des graphiques vectoriels: SVG, PDF, EPS. Cependant, cela n'est souvent fait que formellement - les images résultantes sont constituées de nombreux primitifs, il est presque impossible de les démonter par des atomes et des liaisons. La taille d'un tel fichier vectoriel est également importante, en un mot, c'est un désastre. Parmi les nombreux constructeurs moléculaires, seuls deux satisfont à la qualité du code d' image vectorielle: GaussView et Molden . Ce dernier programme est accessible à tous, donc les exemples sont construits avec son aide, cependant, toutes les recettes ci-dessous sont applicables (avec quelques modifications) aux illustrations vectorielles réalisées par le programme GaussView. Alors 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 primitives
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
      
      



Il existe déjà 410 primitives au lieu 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
      
      



Ce code réduira radicalement le dessin en noir et blanc. Comme dans les vieux livres.





J'ai ajouté une signature - la longueur de la liaison hydrogène.
J'ai ajouté une signature - la longueur de la liaison hydrogène.

Conclusion

PostScript est étonnamment efficace pour créer des illustrations. C'est facile à apprendre. Dans cet article, j'ai donné un moyen de faire des choses simples, mais parfois très, très nécessaires lors de la préparation d'une publication ou d'une affiche pour une conférence. Cependant, vous pouvez aller plus loin! Je recommande vivement le livre Illustrations mathématiques .








All Articles