summaryrefslogtreecommitdiff
path: root/graphics/mcf2graph/mcf2graph.mf
diff options
context:
space:
mode:
Diffstat (limited to 'graphics/mcf2graph/mcf2graph.mf')
-rw-r--r--graphics/mcf2graph/mcf2graph.mf121
1 files changed, 82 insertions, 39 deletions
diff --git a/graphics/mcf2graph/mcf2graph.mf b/graphics/mcf2graph/mcf2graph.mf
index c6cedf1637..d4d60da3c4 100644
--- a/graphics/mcf2graph/mcf2graph.mf
+++ b/graphics/mcf2graph/mcf2graph.mf
@@ -1,5 +1,5 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% mcf2graph ver 4.72 Copyright (c) 2013-2021 Akira Yamaji
+% mcf2graph ver 4.74 Copyright (c) 2013-2021 Akira Yamaji
%
% Permission is hereby granted, free of charge, to any person obtaining a copy of this software
% and associated documentation files (the "Software"), to deal in the Software without restriction,
@@ -38,7 +38,7 @@
% Set to use plain.mp (label,arrow,atom) : mpost -s labeloffset=2 FILENAME
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
tracingstats:=1;
-message "* This is mcf2graph ver 4.73 2021.10.10";
+message "* This is mcf2graph ver 4.74 2021.11.23";
%-------------------------------------------------------------------------------------------------
newinternal cntA,cntB,cntM,minX,minY,maxX,maxY,sftX,sftY,com,par,envT,envB,lenT,lineT,angT,rotT,
crR,nA,nB,nC,nD,nE,nF,nS,nL,nR,nU,nP,xpos,ypos,markA,markB,saveA,saveB,bondL;
@@ -65,9 +65,9 @@ Outside:=1; Inside:=2; Bothside:=Outside+Inside;
%-------------------------------------------------------------------------------------------------
a_prn_s:=ASCII("("); a_prn_e:=ASCII(")"); a_brc_s:=ASCII("{"); a_brc_e:=ASCII("}");
a_brk_s:=ASCII("["); a_brk_e:=ASCII("]"); a_cmm:=ASCII(","); a_equ:=ASCII("=");
-a_ast:=ASCII("*"); a_sls:=ASCII("/"); a_gtn:=ASCII("<"); a_ltn:=ASCII(">"); a_and:=ASCII("&");
-a_dol:=ASCII("$"); a_hsh:=ASCII("#"); a_hat:=ASCII("^"); a_tld:=ASCII("~"); a_bqt:=ASCII("`");
-a_cln:=ASCII(":"); a_amk:=ASCII("@"); a_zero:=ASCII("0"); a_nine:=ASCII("9"); a_qut:=ASCII("'");
+a_ast:=ASCII("*"); a_sls:=ASCII("/"); a_gtn:=ASCII("<"); a_ltn:=ASCII(">"); a_and:=ASCII("&");
+a_dol:=ASCII("$"); a_hsh:=ASCII("#"); a_hat:=ASCII("^"); a_tld:=ASCII("~"); a_bqt:=ASCII("`");
+a_cln:=ASCII(":"); a_amk:=ASCII("@"); a_zero:=ASCII("0"); a_nine:=ASCII("9"); a_qut:=ASCII("'");
a_bar:=ASCII("|"); a_plus:=ASCII("+"); a_minus:=ASCII("-");
%--------------------------------------------------------------------------------------------------
let DIV= /; let MUL= *; let LT= <; let GT= >; let AND= &; let :: = : ; let == = =; let ef=elseif;
@@ -101,25 +101,30 @@ if (known green)and(known ahlength):
mpfont:="uhvr8r";
atomfont:=defaultfont:="";
%--default ahangle=45---------------------------------------------------------------------
- if ahangle=0: outputformat:="eps"; % eps format(.mps)
- elseif ahangle=1: outputformat:="png"; hppp:=vppp:=0.12; % png format(600dpi)
- elseif ahangle=11: outputformat:="png"; hppp:=vppp:=0.06; % png format(1200dpi)
- elseif ahangle=2: outputformat:="svg"; % svg format
- elseif ahangle=3: outputformat:="eps"; % eps format(.eps)
- elseif ahangle=45: outputformat:="eps"; % eps format(.mps) *default
+ if ahangle=0: outputformat:="eps"; % eps format(.mps)
+ ef ahangle=1: outputformat:="png"; hppp:=vppp:=0.12; % png format(600dpi)
+ ef ahangle=11: outputformat:="png"; hppp:=vppp:=0.06; % png format(1200dpi)
+ ef ahangle=2: outputformat:="svg"; % svg format
+ ef ahangle=3: outputformat:="eps"; % eps format(.eps)
+ ef ahangle=45: outputformat:="eps"; % eps format(.mps) *default
fi
%--default ahlength=4---------------------------------------------------------------------
- if ahlength=1: sw_output:=Info; % output aux file
- elseif ahlength=2: sw_output:=Info+Table; % output aux file(Table mode)
- elseif ahlength=3: sw_output:=Report; % output report
- elseif ahlength=4: sw_output:=Font; % *default
- elseif ahlength=5: sw_output:=MOL2k; % output MOL(V2000)
- elseif ahlength=6: sw_output:=MOL3k; % output MOL(V3000)
- elseif ahlength=7: sw_output:=Mfont; % output aux mf
- elseif ahlength=8: sw_output:=Mcode+Info; % output aux data-base
+ if ahlength=1: sw_output:=Info; % output aux file
+ ef ahlength=2: sw_output:=Info+Table; % output aux file(Table mode)
+ ef ahlength=3: sw_output:=Report; % output report
+ ef ahlength=4: sw_output:=Font; % *default
+ ef ahlength=5: sw_output:=MOL2k; % output MOL(V2000)
+ ef ahlength=6: sw_output:=MOL3k; % output MOL(V3000)
+ ef ahlength=7: sw_output:=Mfont; % output aux mf
+ ef ahlength=8: sw_output:=Mcode+Info; % output aux data-base
fi
%-- default bboxmargin=2------------------------------------------------------------------
- if bboxmargin=1: proc_end:=1; fi % output first font only
+ if bboxmargin=1: proc_end:=1; % output first font only
+ ef bboxmargin=3: ext(defaultfont:="uhvr8r"; defaultscale:=.3; label.rt(inf_EN,(0,0));)
+ ef bboxmargin=4: sw_output:=Font+Info;
+ ext(defaultfont:="uhvr8r"; defaultscale:=.3;
+ label.rt(inf_EN&" / "&cal_MW&" / "&decimal(num_MW-scantokens(inf_MW)),(0,0));)
+ fi
%--default labeloffset=3------------------------------------------------------------------
if labeloffset=1: defaultfont:=mpfont; % mpost label
elseif labeloffset=2: defaultfont:=atomfont:=mpfont; % mpost label,atom
@@ -192,9 +197,9 @@ max_blength:=10mm; blength:=mangle:=0; max_labelsize:=20mm; dottedline_gap:=1.5b
%--------------------------------------------------------------------------------------------------
fsize:=(30mm,20mm); fmargin:=(0.4mm,0.4mm); msize:=(1,1); mposition:=(0.5,0.5);
%==================================================================================================
+bboxmargin:=0; % 2bp => 0
ahangle:=45;
ahlength:=4bp;
-bboxmargin:=2bp;
defaultsize:=8bp;
defaultscale:=1;
labeloffset:=3bp;
@@ -586,16 +591,52 @@ vardef change_bond(expr a,b) =
nCP:=0;
if numeric b::
if (b>=si)and(b<=bd_):: CPe(a)(_set_line,b)
- elseif (b>=?3)and(b<=?20)::
- if a>=parts_int_start:: for i==1 upto cntD[a]:: fuse_ring(parD[a][i],b-?3+3) endfor
- else:: fuse_ring(a,b-?3+3)
+ elseif ((b>=?3)and(b<=?20))or(b==Ph1)or(b==Ph2)::
+ if numeric a::
+ if a>=parts_int_start::
+ for i==1 upto cntD[a]::
+ if comD[a][i]==_numeric::
+ if b==Ph1::
+ fuse_ring(parD[a][i],6)
+ CP(_set_adr,-2) CP(_set_line,dl) CP(_set_adr,-4) CP(_set_line,dl)
+ ef b==Ph2::
+ fuse_ring(parD[a][i],6)
+ CP(_set_adr,-1) CP(_set_line,dl) CP(_set_adr,-3) CP(_set_line,dl)
+ CP(_set_adr,-5) CP(_set_line,dl)
+ else::
+ fuse_ring(parD[a][i],b-?3+3)
+ fi
+ else::
+ if b==?6:: fuse_ring_bonds((comD[a][i],parD[a][i]),parD[?6[4]][1],comD[?6[4]][2])
+ ef b==?5:: fuse_ring_bonds((comD[a][i],parD[a][i]),parD[?5[3]][1],comD[?5[3]][2])
+ ef b==?4:: fuse_ring_bonds((comD[a][i],parD[a][i]),parD[?4[2]][1],comD[?4[2]][2])
+ fi
+ fi
+ endfor
+ else::
+ if b==Ph1::
+ fuse_ring(a,6) CP(_set_adr,-2) CP(_set_line,dl) CP(_set_adr,-4) CP(_set_line,dl)
+ ef b==Ph2::
+ fuse_ring(a,6) CP(_set_adr,-1) CP(_set_line,dl) CP(_set_adr,-3) CP(_set_line,dl)
+ CP(_set_adr,-5) CP(_set_line,dl)
+ else::
+ fuse_ring(a,b-?3+3)
+ fi
+ fi
+ ef pair a::
+ if b==?6:: fuse_ring_bonds(a,parD[?6[4]][1],comD[?6[4]][2])
+ ef b==?5:: fuse_ring_bonds(a,parD[?5[3]][1],comD[?5[3]][2])
+ ef b==?4:: fuse_ring_bonds(a,parD[?4[2]][1],comD[?4[2]][2])
+ ef b==Ph1::
+ fuse_ring_bonds(a,parD[?6[4]][1],comD[?6[4]][2])
+ CP(_set_adr,-1) CP(_set_line,dl) CP(_set_adr,-3) CP(_set_line,dl)
+ ef b==Ph2::
+ fuse_ring_bonds(a,parD[?6[4]][1],comD[?6[4]][2])
+ CP(_set_adr,-2) CP(_set_line,dl) CP(_set_adr,-4) CP(_set_line,dl)
+ fi
fi
- elseif b==Ph1:: fuse_ring(a,6) CP(_set_adr,-2) CP(_set_line,dl)
- CP(_set_adr,-4) CP(_set_line,dl)
- elseif b==Ph2:: fuse_ring(a,6) CP(_set_adr,-1) CP(_set_line,dl)
- CP(_set_adr,-3) CP(_set_line,dl) CP(_set_adr,-5) CP(_set_line,dl)
- elseif comD[b][1]==_fuse::
- if comD[b][2]<=6:: fuse_ring_bonds(a,parD[b][1],comD[b][2])
+ ef comD[b][1]==_fuse::
+ if comD[b][2]<=6:: fuse_ring_bonds(a,parD[b][1],comD[b][2])
elseif (comD[b][2]>=11)and(comD[b][2]<=15):: fuse_ring_size(a,parD[b][1],comD[b][2])
fi
fi
@@ -945,16 +986,18 @@ def MC(text TXT)=
%-draw atom-----------------------------------------------------------------------------------
if sw_numbering=0: for i=1 upto cntA: draw_atom(i); endfor fi
%-draw add to atom----------------------------------------------------------------------------
- for i=1 upto cntA:
- if addA[i]<>0:
- nA:=angX[i]+add_rot[i]; nC:=nA mod 90;
- if numS[i]=0: nB:=.5atom_wd;
- else: nB:=.85wdA[i]+iif(nC<45,sind(nC),cosd(nC))*.5wdA[i];
+ if (not scan_bit(sw_numbering,Atom))and(not scan_bit(sw_numbering,Bond)):
+ for i=1 upto cntA:
+ if addA[i]<>0:
+ nA:=angX[i]+add_rot[i]; nC:=nA mod 90;
+ if numS[i]=0: nB:=.5atom_wd;
+ else: nB:=.85wdA[i]+iif(nC<45,sind(nC),cosd(nC))*.5wdA[i];
+ fi
+ temp_p:=sfrt(posA[i]-(.35atom_wd,.35atom_wd),nB,nA);
+ draw_char(temp_c,temp_p,atom_wd,bond_pen_wd*ratio_char_bond,0);
fi
- temp_p:=sfrt(posA[i]-(.35atom_wd,.35atom_wd),nB,nA);
- draw_char(temp_c,temp_p,atom_wd,bond_pen_wd*ratio_char_bond,0);
- fi
- endfor
+ endfor
+ fi
%-draw bond-----------------------------------------------------------------------------------
for i=1 upto cntB: if lineB[i]<si_ : draw_bond(i); fi endfor
for i=1 upto cntB: if lineB[i]>=si_: draw_bond(i); fi endfor