/** * Compare two AtomContainers based on their 2D position. * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object) */ @Override public int compare(IAtomContainer a, IAtomContainer b) { Point2d p1 = center(a); Point2d p2 = center(b); if (p1.x > p2.x) return +1; if (p1.x < p2.x) return -1; if (p1.y > p2.y) return +1; if (p1.y < p2.y) return -1; return 0; }
@Test public void testCompare_Null_Null() { Comparator<IAtomContainer> comparator = new AtomContainerComparatorBy2DCenter(); Assert.assertEquals("null <-> null", 0, comparator.compare(null, null)); }
/** {@inheritDoc} */ @Override public IRenderingElement generate(IAtomContainer container, RendererModel model) { ElementGroup group = new ElementGroup(); this.ringSet = this.getRingSet(container); //Sort the ringSet consistently to ensure consistent rendering. //If this is omitted, the bonds may 'tremble'. ringSet.sortAtomContainers(new AtomContainerComparatorBy2DCenter()); for (IBond bond : container.bonds()) { group.add(MarkedElement.markupBond(this.generate(bond, model), bond)); } return group; }
@Test public void testCompare_Null_2DCoordinates() { IAtomContainer atomContainer = new AtomContainer(); atomContainer.addAtom(new Atom("N")); Comparator<IAtomContainer> comparator = new AtomContainerComparatorBy2DCenter(); Assert.assertEquals("null 2d Coords<-> null 2d coords", 0, comparator.compare(atomContainer, atomContainer)); }
@Test public void testCompare_self_valid_2DCoordinates() { IAtomContainer atomContainer = new AtomContainer(); IAtom atom = new Atom("N"); atom.setPoint2d(new Point2d(10, 10)); atomContainer.addAtom(atom); Comparator<IAtomContainer> comparator = new AtomContainerComparatorBy2DCenter(); Assert.assertEquals("self 2d Coords<-> self 2d coords", 0, comparator.compare(atomContainer, atomContainer)); }
g.setStroke(this.bondStroke); IRingSet ringSet = new SSSRFinder(molecule).findSSSR(); ringSet.sortAtomContainers((Comparator) new AtomContainerComparatorBy2DCenter()); this.addRingCentersToAtomAnnotationPositions(molecule, ringSet); Map<IBond, IAtomContainer> bondRingMap = this.fillBondRingMap(ringSet);
@Test public void testCompare_minusOne() { IAtomContainer atomContainer = new AtomContainer(); IAtom atom = new Atom("N"); atom.setPoint2d(new Point2d(10, 10)); atomContainer.addAtom(atom); IAtomContainer atomContainer2 = new AtomContainer(); IAtom atom2 = new Atom("P"); atom2.setPoint2d(new Point2d(20, 10)); atomContainer2.addAtom(atom2); Comparator<IAtomContainer> comparator = new AtomContainerComparatorBy2DCenter(); Assert.assertEquals("(10,10)<-> (20,10)", -1, comparator.compare(atomContainer, atomContainer2)); }
@Test public void testCompare_plusOne() { IAtomContainer atomContainer = new AtomContainer(); IAtom atom = new Atom("N"); atom.setPoint2d(new Point2d(20, 10)); atomContainer.addAtom(atom); IAtomContainer atomContainer2 = new AtomContainer(); IAtom atom2 = new Atom("P"); atom2.setPoint2d(new Point2d(20, 5)); atomContainer2.addAtom(atom2); Comparator<IAtomContainer> comparator = new AtomContainerComparatorBy2DCenter(); Assert.assertEquals("(20,10)<-> (20,5)", 1, comparator.compare(atomContainer, atomContainer2)); }