#! /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]) k1 = fm.add_subformula(fh, 0, 180, [0,0]) fm.add_bond(k0+4,k1+0,1.0) fm.add_bond(k1+4,k0+0,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() c30 = cos(30*pi/180) s30 = sin(30*pi/180) db = svg.rel_bond_length(2.0) # Relative length of double bonds. p0 = [-c30, +s30] # Upper left carbon. p1 = rn.add(p0, rn.scale(db, [-c30, +s30])) # Upper left oxygen. p2 = [-c30, -s30] # Bottom oxygen. p3 = rn.add(p2, rn.scale(db, [-c30, -s30])) # Bottom oxygen. p4 = [0, -1] # Bottom oxygen. k0 = fh.add_atom("C", p0, 0,0) k1 = fh.add_atom("O", p1, 0,0) k2 = fh.add_atom("C", p2, 0,0) k3 = fh.add_atom("O", p3, 0,0) k4 = fh.add_atom("O", p4, 0,0) fh.add_bond(k0,k2,1.0) fh.add_bond(k2,k4,1.0) fh.add_bond(k0,k1,2.0) fh.add_bond(k2,k3,2.0) return fh