Rev 16654 | Rev 17857 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
!if $wims_read_parm!=slib_header
!goto proc
!endif
slib_author=
slib_parms=3\
,description de la réaction\
,description des flèches entre molécules\
html color=[black,black,black],option de sortie color=[fleche,charge,doublet]
slib_title=Dessin en canvasdraw d'une réaction
slib_out=if html is a word in the option, the canvasdraw code. If not, the code to send to canvasdraw
(without the size), the coordinates of each sommet.
slib_comment= If output=1, every label is shown except those in the output hide.\
If output=0, only heterogen atom labels are shown.\
If output=2, no label is shown.\
Voir la documentation de moldraw pour le dessin des molécules.\
<pre>Codage:\
[mol1,[-> ou <- ou <=> ou +],mol2,[-> ou <- ou <=> ou +],...],flr=[:[at]:[atb],up/down],option\
Flèche entre molécules: flr=[:[at]:[atb],up/down] signifie une flèche de\
l'atome at de la molécule 2 vers l'atome atb de la molécule 3.\
Si on rajoute -, la flèche est tracée de l'atome atb vers l'atome at :\
flr=[:[at]:[atb],down -] par exemple.\
</pre>\
On peut régler la hauteur des symboles de transition par rapport à la hauteur d'un\
atome de la première molécule en le rajoutant dans le premier symbole de transition.\
Par défault, l'atome [1] de la première molécule sert à l'alignement.\
Dans le cas non html, la sortie est la suivante \
(les retours de ligne sont pour la présentation)\
<pre>\
[\
[code canvasdraw (sans les charges,lacunes,... ],\
[size (taille de l'image conseillée)],\
[code pour les doublets],\
[code pour les lacunes],\
[code pour les charges],\
[code pour les flèches internes aux molécules],\
[code pour les flèches entre molécules]\
],\
[matrice : numero molecule,atom,label de l'atome],\
[matrice : numero molecule,atom,coordonnées],\
[matrice des décorations:\
numéro de la molecule,coordonnées, -1 ou 2 ou + ou -\
ou\
numero_mol ou numero_mol1:numero_mol2, curvedarrows,coordonnées \
(3 points: point de départ,centre,point d'arrivée\
]\
,[points magnétiques]\
</pre>
slib_example=[[dl=[[1,90],[1,-90]],[1]=C,[1,90]=O,[1,-90]=O],[+,[1]],[[1]=Mg,[1,90]=R,[1,-90]=X],[<->],[dl=[[1,0,30],[1,0,330,0,0]],[1]=R,[1,0]=C,[1,0,30]=O,[1,0,330]=O,[1,0,330,0]=Mg,[1,0,330,0,0]=X]],,html\
[[fl=[[1,0,-90]:[1,0]:[1,0,0]],lc=[[1,0,0]:[E]],ch=[[1,0,0]:+],[1]=H3C,[1,0]=C,[1,0,0]=C,[1,0,0,90]=C6H5,[1,0,0,-90]=C2H5,[1,0,90]=CH3,[1,0,-90]=H],[+],[db=[[1]:[N,S,O]],ch=[[1]:-:E],[1]=O,[1,0]=H],[->],[dl=[[1,0]],[1]=C,[1,0]=C,[1,120]=H3C,[1,-120]=H3C,[1,0,60]=C6H5,[1,0,-60]=C2H5],[+],[db=[[1]:[E,O]],[1]=HO,[1,0]=H]],flr=[[:[1]:[1],<- down]],html color=[green,blue]\
[[db=[[1,0]:[N,E,S]],ch=[[1,0]:-],[1]=H,[1,0]=O],[+,[1]],[fl=[[[1,0,-60]:[1,0,-60,0]:[1,0,-60,0]:[1,0,-60,0],up]],db=[[1,0,-60,0]:[N,E,S]],[1]=H3C,[1,0]=CH2,[1,0,-60]=C,[1,0,-60,-120]=H,[1,0,-60,-60]=H,[1,0,-60,0]=Br],[->],[db=[[1]:[N,O]],[1]=O,[1,-120]=H,[1,0]=C,[1,0,-40]=H,[1,0,-70]=H,[1,0,60]=CH2,[1,0,60,-60]=CH3],[+],[db=[[1]:[N,O,S,E]],ch=[[1]:-],[1]=Br]],flr=[[1,0]:[1,0,-60]],html color=[red,blue,green]\
[[fl=[[1,0,0]:[1,0,0,0]],db=[[1,0,0,0]:[N,S,E]],[1]=H3C,[1,0]=CH2,[1,0,0]=C,[1,0,0,90]=CH2,[1,0,0,-90]=CH3,[1,0,0,90,120]=H3C,[1,0,0,0]=Br],[<->,[1]],[lc=[[1,0,0]:[E]],ch=[[1]:+],[1]=H3C,[1,0]=CH2,[1,0,0]=C,[1,0,0,90]=CH2,[1,0,0,-90]=CH3,[1,0,0,90,120]=H3C],[+],[db=[[1]:[O,E,S,N]],ch=[[1]:-],[1]=Br]],,html\
[[fl=[[1,0,-90]:[1,0]:[1,0,0]],lc=[[1,0,0]:[E]],ch=[[1,0,0]:+],[1]=H3C,[1,0]=C,[1,0,0]=C,[1,0,0,90]=C6H5,[1,0,0,-90]=C2H5,[1,0,90]=CH3,[1,0,-90]=H],[+],[db=[[1]:[N,S,O]],ch=[[1]:-:E],[1]=O,[1,0]=H],[->],[dl=[[1,0]],[1]=C,[1,0]=C,[1,120]=H3C,[1,-120]=H3C,[1,0,60]=C6H5,[1,0,-60]=C2H5],[+],[db=[[1]:[E,O]],[1]=HO,[1,0]=H]],flr=[[:[1]:[1],- down]],html\
[[fl=[[[1,0,0,-90]:[1,0,0]:[1,0],down],[[1,0]:[1,0,-90],down]],db=[[1,0,-90]:[N,E,S]],[1]=H3C,[1,0]=C,[1,0,90]=CH2,[1,0,-90]=Br,[1,0,90,120]=H3C,[1,0,0]=C,[1,0,0,90]=CH3,[1,0,0,-90]=H,[1,0,0,0]=CH3],[+,[1,0]],[db=[[1]:[N,0,S]],ch=[[1]:-],[1]=O,[1,0]=C2H5],[->],[dl=[[1,0]],[1]=C,[1,0]=C,[1,120]=H2C,[1,120,90]=CH3,[1,-120]=H3C,[1,0,60]=CH3,[1,0,-60]=CH3],[+],[db=[[1]:[N,O,E,S]],ch=[[1]:-],[1]=Br],[+],[db=[[1]:[E,O]],[1]=HO,[1,0]=C2H5]],flr=[[1,0,0,-90]:[1],-]],html\
[[fl=[[1,0,-90]:[1,0]:[1,0,0]],lc=[[1,0,0]:[E]],ch=[[1,0,0]:+],[1]=H3C,[1,0]=C,[1,0,0]=C,[1,0,0,90]=C6H5,[1,0,0,-90]=C2H5,[1,0,90]=CH3,[1,0,-90]=H],[+],[db=[[1]:[N,S,E]],ch=[[1]:-],[1]=O,[1,0]=H],[->],[dl=[[1,0]],[1]=C,[1,0]=C,[1,120]=H3C,[1,-120]=H3C,[1,0,60]=C6H5,[1,0,-60]=C2H5],[+],[db=[[1]:[E,O]],[1]=HO,[1,0]=H]],flr=[[:[1]:[1],down]],html\
[[fl=[[1,0,0]:[1,0,0,0]],db=[[1,0,0,0]:[N,S,E]],[1]=H3C,[1,0]=CH2,[1,0,0]=C,[1,0,0,90]=CH2,[1,0,0,-90]=CH3,[1,0,0,90,120]=H3C,[1,0,0,0]=Br],[<->,[1]],[lc=[[1,0,0]:[E]],ch=[[1]:+],[1]=H3C,[1,0]=CH2,[1,0,0]=C,[1,0,0,90]=CH2,[1,0,0,-90]=CH3,[1,0,0,90,120]=H3C],[+],[db=[[1]:[O,E,S,N]],ch=[[1]:-],[1]=Br]],,html\
[[dl=[[1,90],[1,-90]],[1]=C,[1,90]=O,[1,-90]=O],[+,[1]],[[1]=Mg,[1,90]=R,[1,-90]=X],[<->],[dl=[[1,0,30],[1,0,330,0,0]],[1]=R,[1,0]=C,[1,0,30]=O,[1,0,330]=O,[1,0,330,0]=Mg,[1,0,330,0,0]=X]],,html\
[[db=[[1]:[O,N,S]],ch=[[1]:-:E],[1]=O,[1,0]=H],[+],[fl=[[1,0,-90]:[1,0]:[1,0,0]],lc=[[1,0,0]:[N]],ch=[[1,0,0]:+:E],[1]=H3C,[1,0]=C,[1,0,0]=C,[1,0,0,90]=C6H5,[1,0,0,-90]=C2H5,[1,0,90]=CH3,[1,0,-90]=H],[->],[dl=[[1,0]],[1]=C,[1,0]=C,[1,120]=H3C,[1,-120]=H3C,[1,0,60]=C6H5,[1,0,-60]=C2H5],[+],[db=[[1]:[N,S]],[1]=HO,[1,0]=H]],flr=[[[1]:[1],down]],html\
[[db=[[1]:[O,N,S]],ch=[[1]:-:E],[1]=O,[1,0]=H],[+],[fl=[[1,0,-90]:[1,0]:[1,0,0]],lc=[[1,0,0]:[E]],ch=[[1,0,0]:+:E],[1]=H3C,[1,0]=C,[1,0,0]=C,[1,0,0,90]=C6H5,[1,0,0,-90]=C2H5,[1,0,90]=CH3,[1,0,-90]=H],[->],[dl=[[1,0]],[1]=C,[1,0]=C,[1,120]=H3C,[1,-120]=H3C,[1,0,60]=C6H5,[1,0,-60]=C2H5],[+],[db=[[1]:[N,S]],[1]=HO,[1,0]=H]],flr=[[[1]:[1],down]],\
[[db=[[1,0]:[N,E,S]],ch=[[1,0]:-],[1]=H,[1,0]=O],[+,[1]],[fl=[[[1,0,-60]:[1,0,-60,0]:[1,0,-60,0]:[1,0,-60,0],up]],db=[[1,0,-60,0]:[N,E,S]],[1]=H3C,[1,0]=CH2,[1,0,-60]=C,[1,0,-60,-120]=H,[1,0,-60,-60]=H,[1,0,-60,0]=Br],[->],[db=[[1]:[N,O]],[1]=O,[1,-120]=H,[1,0]=C,[1,0,-40]=H,[1,0,-70]=H,[1,0,60]=CH2,[1,0,60,-60]=CH3],[+],[db=[[1]:[N,O,S,E]],ch=[[1]:-],[1]=Br]],flr=[[1,0]:[1,0,-60]],html\
!exit
:proc
!reset slib_reaction slib_repdoubl slib_repcharg slib_repfleche1\
slib_snaps slib_graphs slib_graphsname slib_out slib_reaction\
slib_RXrange slib_flr slib_Gopt\
slib_dbmol slib_lcmol slib_chmol slib_flmol slib_flr_ slib_molFl\
slib_Rdblcch slib_matcoord slib_Rdblcch slib_pos
!!be careful not mix with variables in moldraw
wims_multiexec=$wims_multiexec pari
slib_pari=!exec pari default(realprecision,3)
!distribute items $wims_read_parm into slib_react,slib_Gopt,slib_Roption
slib_react=!declosing $slib_react
slib_Gopt=!declosing $slib_Gopt
!default slib_Gopt=
!set slib_Rcnt=!itemcnt $slib_react
slib_Shiftx=0
slib_RYrange=0,0
!set slib_Rcolor=!getopt color in $slib_Roption
!set slib_Rcolor=!declosing $slib_Rcolor
!set slib_Rcolorfl=$(slib_Rcolor[1])
!default slib_colorfl=black
slib_flr=!getopt flr in $slib_Gopt
slib_mireact=0
slib_Mopt=!replace shiftx=.* by in $slib_Roption
slib_Mopt=!replace size=\[.*\] by in $slib_Mopt
slib_Mopt=!replace html by in $slib_Mopt
!! détermine nouvelle version si option n'est pas présente
slib_ov=!getopt output in $slib_Mopt
!if $slib_ov issametext
slib_Mopt=$slib_Mopt output=1
!endif
!for slib_ri=1 to $slib_Rcnt
slib_moltop$slib_ri=$(slib_react[$slib_ri])
!if $[$slib_ri%2]=1
!readproc slib/chemistry/moldraw $(slib_moltop$slib_ri),shiftx=$slib_Shiftx $slib_Mopt color=[$slib_Rcolor]
slib_out_$slib_ri=!declosing $(slib_out[1])
!if [ isin $(slib_out_$slib_ri)
slib_tmp=!declosing $(slib_out_$slib_ri[2])
slib_dbmol=!append line $slib_tmp to $slib_dbmol
!if $slib_mireact=0
slib_type=R
!else
slib_type=P
!endif
slib_tmp=!declosing $(slib_out_$slib_ri[3])
slib_lcmol=!append line $slib_tmp to $slib_lcmol
slib_tmp=!declosing $(slib_out_$slib_ri[4])
slib_chmol=!append line $slib_tmp to $slib_chmol
slib_tmp=!declosing $(slib_out_$slib_ri[5])
slib_flmol=!append line $slib_tmp to $slib_flmol
slib_out_$slib_ri=!declosing $(slib_out_$slib_ri[1])
!endif
slib_RXrange=!line 2 of $(slib_out_$slib_ri)
slib_RXrange=!replace internal xrange by in $slib_RXrange
!if $slib_ri=1
slib_xmin=$(slib_RXrange[1])
slib_RXrange1=$slib_xmin
!endif
slib_Shiftx=$(slib_RXrange[2])
slib_yrange=!line 3 of $(slib_out_$slib_ri)
slib_yrange=!replace internal yrange by in $slib_yrange
slib_RYrange=$[min($(slib_RYrange[1]),$(slib_yrange[1]))],$[max($(slib_RYrange[2]), $(slib_yrange[2]))]
slib_reaction_=!line 4 to -1 of $(slib_out_$slib_ri)
slib_reaction=!append line $slib_reaction_ to $slib_reaction
slib_out=!replace internal MOL by $[($slib_ri+1)/2] in $slib_out
slib_tmp=!declosing $(slib_out[3])
!!matrice numero mol,noeud,coord
slib_matcoord=!append line $slib_tmp to $slib_matcoord
!!graphe de la molecule
slib_outcoords=!declosing $(slib_out[3])
slib_graphs=!append line $slib_outcoords to $slib_graphs
slib_outname=!declosing $(slib_out[2])
slib_graphsname=!append line $slib_outname to $slib_graphsname
slib_tmp=!declosing $(slib_out[4])
slib_Rdblcch=!append line $slib_tmp to $slib_Rdblcch
!!snappoints
slib_tmp=!replace internal = by , in $slib_outcoords
slib_tmp=!column 3,4,7,8 of $slib_tmp
slib_tmp=!lines2items $slib_tmp
slib_tmp=!nospace $slib_tmp
slib_snaps=$slib_snaps$slib_tmp;
!else
!! les signes +, -> , <-> <=>
slib_moltop$slib_ri=!declosing $(slib_moltop$slib_ri)
!if $(slib_moltop$slib_ri)!=$empty
!! position des fleches pouvant etre indique par l'auteur
slib_aff=$(slib_moltop$slib_ri[1])
!if $slib_ri=2
!! alignement avec un noeud de la première molécule
slib_pos=$(slib_moltop$slib_ri[2])
!default slib_pos=[1]
slib_tmp=$(slib_outcoords[;2..-1])
!!add spaces to delete
slib_tmp=!replace internal , $ by , in $slib_tmp
slib_POSY=!getopt $slib_pos in $slib_tmp
slib_POSY=$(slib_POSY[2])
!endif
slib_tmp=2
!set slib_Shiftx=$[$slib_Shiftx+$slib_tmp]
!if $slib_aff issametext +
slib_aff=\phantom{xx}+\phantom{xx}
!endif
!if $slib_aff issametext ->
!!slib_aff=→
slib_aff=\underset{\phantom{xxxx}}{\rightarrow}
!endif
!if $slib_aff issametext <->
!!slib_aff=⇄
slib_aff=\underset{\phantom{xxxx}}{\leftrightarrow}
!endif
!if $slib_aff issametext <=>
!!slib_aff=⇆
slib_aff=\underset{\phantom{xxxx}}{\rightleftarrows}
!endif
slib_reaction=!append line strokecolor black\
centered\
latex $slib_Shiftx,POSY,$slib_aff to $slib_reaction
!set slib_Shiftx=$[$slib_Shiftx+$slib_tmp]
!! milieu de réaction permet de distinguer R=reactif et P=produit
!if - isin $(slib_moltop$slib_ri)
slib_mireact=$(slib_ri)
!endif
!endif
!endif
!next
slib_RXrange=$[floor($slib_RXrange1)],$[ceil($(slib_RXrange[2]))]
!if $slib_POSY=$empty
slib_POSY=$[($(slib_RYrange[1])+$(slib_RYrange[2]))/2]
!endif
slib_coeff=30
slib_reaction=!replace internal POSY by $slib_POSY in $slib_reaction
slib_Rsizex=$[ceil($slib_coeff*($(slib_RXrange[2])-($(slib_RXrange[1]))))]
slib_Rsizey=$[ceil($slib_Rsizex*($(slib_RYrange[2])-($(slib_RYrange[1])))/($(slib_RXrange[2])-($(slib_RXrange[1]))))]
slib_Rsize=$slib_Rsizex,$slib_Rsizey
#######
slib_mireact=$[$(slib_mireact)/2]
!if $slib_flr notsametext
!set slib_a=0
!! pour l'instant, une seule flèche
slib_tmpg=!replace internal = by , in $slib_graphs
slib_flr=!declosing $slib_flr
slib_sens=$(slib_flr[2])
slib_pos=!text remove -1 in $slib_sens
slib_flr=$(slib_flr[1])
slib_flr=!replace internal : by , in $slib_flr
slib_flrcnt=!itemcnt $slib_flr
!for slib_j=1 to $slib_flrcnt
slib_flr_=$(slib_flr[$slib_j])
il doit y avoir seulement deux non vides
!if $slib_flr_!=
slib_tmp=!select $slib_tmpg where column 1=$[$slib_j] and column 2=$slib_flr_
!if $slib_a=0
slib_pointfl1=$(slib_tmp[3,4])
slib_a=$slib_j
!else
slib_pointfl2=$(slib_tmp[3,4])
slib_molFl=$slib_j,$slib_a
!endif
!endif
!next
!if - isin $slib_sens
!exchange slib_pointfl2,slib_pointfl1
!endif
!readproc slib/chemistry/quadcurve [$slib_RXrange,$slib_RYrange],$slib_pointfl1,$slib_pointfl2,$slib_pos
slib_ptcurve=$(slib_out[3,4,1,2,5,6])
slib_Fl=linewidth 1.5\
curvedarrow $slib_ptcurve,$slib_colorfl\
strokecolor black
slib_Rdblcch=!append line $(slib_molFl[1]):$(slib_molFl[2]),curvedarrows,$slib_pointfl1,$slib_pointfl2,$(slib_out[1,2])\
to $slib_Rdblcch
!endif
slib_graphs=!replace internal = by , in $slib_graphs
# snaps : points de réponse possible
# boucle sur les segments de toutes les molécules si flèches à découvrir
# snaps= milieu de segment
!!! bof si on prend autre chose que segment ...
!!! on a du stocker quelque part les coordonnées
slib_lignesSeg=!select $slib_reaction where segment isin column 1
slib_sci=!rowcnt $slib_lignesSeg
!for slib_i=1 to $slib_sci
slib_l=!line $slib_i of $slib_lignesSeg
slib_dx=$[($(slib_l[4])-$(slib_l[2]))/2+$(slib_l[2])]
slib_dy=$[($(slib_l[5])-$(slib_l[3]))/2+$(slib_l[3])]
slib_snaps=!append item $slib_dx,$slib_dy to $slib_snaps
!next
!set slib_reaction=!replace internal xrange by ## in $slib_reaction
!set slib_reaction=!replace internal yrange by ## in $slib_reaction
slib_out1=xrange $slib_RXrange\
yrange $slib_RYrange\
$slib_reaction
slib_matcoord=!replace internal = by , in $slib_matcoord
!if html iswordof $slib_Roption
slib_out=!exec canvasdraw\
size $(slib_Rsize)\
$slib_out1\
$slib_dbmol\
$slib_lcmol\
$slib_chmol\
$slib_flmol\
$slib_Fl
slib_out=<div class="wims_scrollable">$slib_out</div>
!else
slib_out=[[$slib_out1],[$(slib_Rsize)],[$slib_dbmol],[$slib_lcmol],[$slib_chmol],[$slib_flmol],[$slib_Fl]],\
[$slib_graphsname],\
[$slib_matcoord],\
[$slib_Rdblcch],\
[$slib_snaps]
!endif