#! /usr/bin/python3 -t PROG_DESC = "Outputs an SVG 'roadkill' diagram for said molecule" import math; from math import sqrt,sin,cos,pi import rn import sys, os, re import mformula import mformula_oxocarbon import mformula_svg def image_name(style): fname = __file__ imgname = re.sub(r'.*[/]', "", fname[0:-3]) + \ "_style" + style return imgname def image_descr(style): fname = __file__ imgname = re.sub(r'.*[/]', "", fname[0:-3]) descr = "Structural formula of " + re.sub(r'[_]', " ", imgname) descr += "\n" + \ "\n" + \ mformula_svg.style_descr(style) return descr def build_formula(svg): fh = build_formula_half(svg) # The left half of the molecule. fm = mformula.obj() k0 = fm.add_subformula(fh, 0, 0, [0,0]) # Left half k1 = fm.add_subformula(fh, 1, 0, [0,0]) # Right half fm.add_bond(k0+0,k1+0,1.0) fm.add_bond(k0+2,k1+2,1.0) return fm def image_name(style): fname = __file__ imgname = re.sub(r'.*[/]', "", fname[0:-3]) + \ "_style" + style return imgname def image_descr(style): fname = __file__ imgname = re.sub(r'.*[/]', "", fname[0:-3]) descr = "Structural formula of " + re.sub(r'[_]', " ", imgname) descr += "\n" + \ "\n" + \ mformula_svg.style_descr(style) return descr def build_formula_half(svg) : "Builds the left half of the molecule, assumed centered at [0,0]." fh = mformula.obj() c45 = cos(45*pi/180) s45 = sin(45*pi/180) db = svg.rel_bond_length(2.0) # Relative length of double bonds. p0 = [-0.5, -0.5] # Lower left carbon. p1 = rn.add(p0, rn.scale(db, [-c45, -s45])) # Lower left oxygen. p2 = rn.add(p0, [00.0, +1.0]) # Upper left oxygen. k0 = fh.add_atom("C", p0, 0,0) k1 = fh.add_atom("O", p1, 0,0) k2 = fh.add_atom("O", p2, 0,0) fh.add_bond(k0,k1,2.0) fh.add_bond(k0,k2,1.0) return fh