package com.chemhack.jsMolEditor.client.renderer; import com.chemhack.jsMolEditor.client.model.Molecule; import com.chemhack.jsMolEditor.client.model.Atom; import com.chemhack.jsMolEditor.client.jre.emulation.java.awt.geom.Dimension; import com.chemhack.jsMolEditor.client.jre.emulation.java.awt.geom.Point2D; public class GeometryTools { public static void translateAllPositive(Molecule molecule) { double minX = Double.MAX_VALUE; double minY = Double.MAX_VALUE; for (int i = 0; i < molecule.countAtoms(); i++) { Atom atom = molecule.getAtom(i); // if (atom.getX() && atom.getY() ) { if (atom.getX() < minX) { minX = atom.getX(); } if (atom.getX() < minY) { minY = atom.getY(); } // } } translate2D(molecule, minX * -1, minY * -1); } public static void translate2D(Molecule molecule, double transX, double transY) { for (int i = 0; i < molecule.countAtoms(); i++) { Atom atom = molecule.getAtom(i); // if (atom.getX() && atom.getY() ) { atom.move(atom.getX()+transX,atom.getY()+transY,atom.getZ()); // } } } public static void center(Molecule molecule, Dimension areaDim) { Dimension molDim = get2DDimension(molecule); int transX = (areaDim.width - molDim.width) / 2; int transY = (areaDim.height - molDim.height) / 2; translateAllPositive(molecule); translate2D(molecule, transX, transY); } public static Dimension get2DDimension(Molecule molecule) { double[] minmax = getMinMax(molecule); double maxX = minmax[2]; double maxY = minmax[3]; double minX = minmax[0]; double minY = minmax[1]; return new Dimension((int) (maxX - minX + 1), (int) (maxY - minY + 1)); } public static double[] getMinMax(Molecule molecule) { double maxX = -Double.MAX_VALUE; double maxY = -Double.MAX_VALUE; double minX = Double.MAX_VALUE; double minY = Double.MAX_VALUE; for (int i = 0; i < molecule.countAtoms(); i++) { Atom atom = molecule.getAtom(i); // if (atom.getPoint2d() != null) { if (atom.getX() > maxX) { maxX = atom.getX(); } if (atom.getX() < minX) { minX = atom.getX(); } if (atom.getY() > maxY) { maxY = atom.getY(); } if (atom.getY() < minY) { minY = atom.getY(); } // } } double[] minmax = new double[4]; minmax[0] = minX; minmax[1] = minY; minmax[2] = maxX; minmax[3] = maxY; return minmax; } public static double calcDistance(Point2D point1, Point2D point2) { return Math.pow(Math.pow(point1.getX()- point2.getX(),2)+Math.pow(point1.getY()- point2.getY(),2),0.5); } public static Point2D getGeometryCenter(Molecule molecule) { double totalX=0; double totalY=0; for (int i = 0; i < molecule.countAtoms(); i++) { Atom atom = molecule.getAtom(i); totalX+=atom.getX(); totalY+=atom.getY(); } return new Point2D(totalX/molecule.countAtoms(),totalY/molecule.countAtoms()); } }