From fa51b91a9f43ae55493d28761caf397c1d27207f Mon Sep 17 00:00:00 2001
From: Marius <mariausol@gmail.com>
Date: Fri, 29 Mar 2013 00:40:15 +0200
Subject: beta 2013.03.28 23:10

---
 metapost/context/base/mp-chem.mpiv | 70 ++++++++++++++++++--------------------
 1 file changed, 33 insertions(+), 37 deletions(-)

(limited to 'metapost')

diff --git a/metapost/context/base/mp-chem.mpiv b/metapost/context/base/mp-chem.mpiv
index 4cb4ce78e..c3dd3e3eb 100644
--- a/metapost/context/base/mp-chem.mpiv
+++ b/metapost/context/base/mp-chem.mpiv
@@ -32,7 +32,7 @@ numeric
     chem_front_b[] ;
 
 boolean
-    chem_setting_axis, %chem_setting_fitwidth, chem_setting_fitheight,
+    chem_setting_axis,
     chem_doing_pb, chem_text_trace, chem_bd_wedge, chem_tracing,
     chem_star[], chem_front[], chem_stacked[], chem_tetra[] ;
 
@@ -40,7 +40,6 @@ string
     chem_previous ;
 
 path
-    chem_setting_bbox,
     chem_path[], % scratch
     chem_b_path[], chem_c_path[],
     chem_r_path[], chem_r_path.lft[], chem_r_path.rt[] ;
@@ -308,20 +307,18 @@ def chem_start_structure(expr i, l, r, t, b, scale, rotation, %fitwidth, fitheig
 
     chem_emwidth            := emwidth ; % EmWidth or \the\emwidth does not work...
     chem_b_length           := if scale<>0: scale* fi 3chem_emwidth ;
-%    chem_setting_fitwidth   := if boolean fitwidth :  fitwidth  else : (fitwidth<>0) fi ;
-%    chem_setting_fitheight  := if boolean fitheight : fitheight else : (fithheight<>0) fi ;;
     save chem_setting_l, chem_setting_r, chem_setting_t, chem_setting_b ;
     if numeric l :
-        chem_setting_l       := l * chem_b_length ;
+        chem_setting_l       := -l * chem_b_length ;
     fi
     if numeric r :
-        chem_setting_r       := r * chem_b_length ;
+        chem_setting_r       :=  r * chem_b_length ;
     fi
     if numeric t :
-        chem_setting_t       := t * chem_b_length ;
+        chem_setting_t       :=  t * chem_b_length ;
     fi
     if numeric b  :
-        chem_setting_b       := b * chem_b_length ;
+        chem_setting_b       := -b * chem_b_length ;
     fi
     chem_setting_rotation   := rotation ;
     chem_setting_offset     := offset ;
@@ -344,36 +341,34 @@ vardef chem_stop_structure =
 
     currentpicture := (currentpicture shifted -chem_origin) rotated chem_setting_rotation ;
 
-    if (not known chem_setting_l) and (not known chem_setting_r) :
-         chem_setting_l := - xpart llcorner currentpicture ;
-         chem_setting_r :=   xpart urcorner currentpicture ;
-    else :
-       if not known chem_setting_l :
-         chem_setting_l := xpart urcorner currentpicture - xpart llcorner currentpicture
-                           - 2chem_setting_r ;
-       fi
-       if not known chem_setting_r :
-         chem_setting_r := xpart urcorner currentpicture - xpart llcorner currentpicture
-                           - 2chem_setting_l ;
-       fi
+%     if not known chem_setting_l :
+%         chem_setting_l := min(xpart ulcorner currentpicture, xpart llcorner currentpicture) ;
+%     fi
+%     if not known chem_setting_r :
+%         chem_setting_r := max(xpart urcorner currentpicture, xpart lrcorner currentpicture) ;
+%     fi
+%     if not known chem_setting_b :
+%         chem_setting_b := min(ypart llcorner currentpicture, ypart lrcorner currentpicture) ;
+%     fi
+%     if not known chem_setting_t :
+%         chem_setting_t := max(ypart ulcorner currentpicture, ypart urcorner currentpicture) ;
+%     fi
+
+    if not known chem_setting_l :
+        chem_setting_l := min(xpart llcorner currentpicture, xpart lrcorner currentpicture) ;
     fi
-    if (not known chem_setting_t) and (not known chem_setting_b) :
-         chem_setting_t :=   ypart urcorner currentpicture ;
-         chem_setting_b := - ypart llcorner currentpicture ;
-    else :
-       if not known chem_setting_t :
-         chem_setting_t := ypart urcorner currentpicture - ypart llcorner currentpicture
-                           - 2chem_setting_b ;
-       fi
-       if not known chem_setting_b :
-         chem_setting_b := ypart urcorner currentpicture - ypart llcorner currentpicture
-                           - 2chem_setting_t ;
-       fi
+    if not known chem_setting_r :
+        chem_setting_r := max(xpart llcorner currentpicture, xpart lrcorner currentpicture) ;
+    fi
+    if not known chem_setting_b :
+        chem_setting_b := min(ypart llcorner currentpicture, ypart ulcorner currentpicture) ;
+    fi
+    if not known chem_setting_t :
+        chem_setting_t := max(ypart llcorner currentpicture, ypart ulcorner currentpicture) ;
     fi
-    chem_setting_bbox :=
-        (-chem_setting_l,-chem_setting_b) -- ( chem_setting_r,-chem_setting_b) --
-        ( chem_setting_r, chem_setting_t) -- (-chem_setting_l, chem_setting_t) -- cycle ;
 
+% draw textext(decimal chem_setting_l & "," & decimal chem_setting_r & " " &
+%              decimal chem_setting_b & "," & decimal chem_setting_t) ;
     if chem_setting_axis : % put it behind the picture
         chem_pic := currentpicture ; currentpicture := nullpicture ;
         chem_num0 := .5chem_b_length ;
@@ -398,13 +393,14 @@ vardef chem_stop_structure =
             draw (-chem_num1,i) -- (chem_num1,i)
             withpen pencircle scaled chem_axis_rulethickness withcolor colorpart(chem_axis_color) ;
         endfor
-        % frame=on : draw chem_setting_bbox withcolor colorpart(chem_axis_color) ;
         addto currentpicture also chem_pic ;
     fi ;
     if chem_tracing :
         fill boundingbox currentpicture withcolor blue withtransparency(1,.25) ;
     fi ;
-    setbounds currentpicture to chem_setting_bbox ;
+    setbounds currentpicture to
+        ((chem_setting_l,chem_setting_b) -- (chem_setting_r,chem_setting_b) --
+         (chem_setting_r,chem_setting_t) -- (chem_setting_l,chem_setting_t) -- cycle) ;
     if chem_tracing :
         fill boundingbox currentpicture withcolor red withtransparency(1,.25) ;
     fi ;
-- 
cgit v1.2.3