package com.chemhack.jsMolEditor.client.controller; import com.chemhack.jsMolEditor.client.renderer.CanvasRenderer; import com.chemhack.jsMolEditor.client.renderer.GeometryTools; import com.chemhack.jsMolEditor.client.model.Molecule; import com.chemhack.jsMolEditor.client.model.DefaultMolecule; import com.chemhack.jsMolEditor.client.model.Bond; import com.chemhack.jsMolEditor.client.widget.ExtendedCanvas; import com.chemhack.jsMolEditor.client.jre.emulation.java.awt.geom.Dimension; import com.chemhack.jsMolEditor.client.jre.emulation.java.awt.geom.Point2D; import com.chemhack.jsMolEditor.client.io.mdl.MolfileReader; import com.google.gwt.user.client.ui.RootPanel; import com.google.gwt.user.client.Window; public class ViewerController { CanvasRenderer renderer; Molecule molecule = new DefaultMolecule(); public ViewerController(String divID, int width, int height) { ExtendedCanvas canvas = new ExtendedCanvas(width, height); renderer = new CanvasRenderer(canvas); RootPanel rootPanel = RootPanel.get(divID); rootPanel.setPixelSize(width, height); rootPanel.add(canvas); } public void setMolecule(Molecule molecule) { GeometryTools.translateAllPositive(molecule); GeometryTools.center(molecule, new Dimension(renderer.getCanvas().getWidth(), renderer.getCanvas().getHeight())); this.molecule = molecule; calcAverageBondLength(); renderer.paintNewMolecule(molecule); // renderer.getTransformer().dumpMatrix(); } public void calcAverageBondLength() { double total = 0; for (int i = 0; i < molecule.countBonds(); i++) { Bond bond = molecule.getBond(i); total += GeometryTools.calcDistance(new Point2D(bond.getSource().getX(), bond.getSource().getY()), new Point2D(bond.getTarget().getX(), bond.getTarget().getY())); } renderer.getRendererModel().setDefaultBondLength(total / molecule.countBonds()); } public void importMolFile(String fileContent) { MolfileReader reader = new MolfileReader(); Molecule molecule = new DefaultMolecule(); try { reader.read(molecule, fileContent); setMolecule(molecule); } catch (Exception e) { Window.alert("Error occured: " + e.getMessage()); } } }