From: Stefan K. <sh...@us...> - 2005-11-25 21:35:02
|
Update of /cvsroot/cdk/cdk/src/org/openscience/cdk/layout In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv16459/src/org/openscience/cdk/layout Modified Files: AtomPlacer.java StructureDiagramGenerator.java Log Message: solves bug #1007326 (Clean-up destroys E/Z specificity) Index: AtomPlacer.java =================================================================== RCS file: /cvsroot/cdk/cdk/src/org/openscience/cdk/layout/AtomPlacer.java,v retrieving revision 1.42 retrieving revision 1.43 diff -u -r1.42 -r1.43 --- AtomPlacer.java 22 Oct 2005 16:26:23 -0000 1.42 +++ AtomPlacer.java 25 Nov 2005 21:34:54 -0000 1.43 @@ -34,14 +34,16 @@ import javax.vecmath.Point2d; import javax.vecmath.Vector2d; -import org.openscience.cdk.interfaces.Atom; -import org.openscience.cdk.interfaces.AtomContainer; -import org.openscience.cdk.interfaces.Bond; import org.openscience.cdk.CDKConstants; -import org.openscience.cdk.interfaces.Molecule; +import org.openscience.cdk.geometry.BondTools; import org.openscience.cdk.geometry.GeometryTools; import org.openscience.cdk.graph.PathTools; import org.openscience.cdk.graph.matrix.ConnectionMatrix; +import org.openscience.cdk.interfaces.Atom; +import org.openscience.cdk.interfaces.AtomContainer; +import org.openscience.cdk.interfaces.Bond; +import org.openscience.cdk.interfaces.Molecule; +import org.openscience.cdk.tools.HydrogenAdder; import org.openscience.cdk.tools.LoggingTool; /** @@ -323,14 +325,18 @@ */ public void placeLinearChain(AtomContainer ac, Vector2d initialBondVector, double bondLength) { + AtomContainer withh=(AtomContainer) ac.clone(); + try{ + new HydrogenAdder().addExplicitHydrogensToSatisfyValency((Molecule)withh); + }catch(Exception ex){ + logger.debug("Excpetion in hydrogen adding. This could mean that cleanup does not respect E/Z"); + } + new HydrogenPlacer().placeHydrogens2D(withh, bondLength); logger.debug("Placing linear chain of length " + ac.getAtomCount()); Vector2d bondVector = initialBondVector; Atom atom = null; Point2d atomPoint = null; - Point2d nextAtomPoint = null; Atom nextAtom = null; - Atom rootAtom = ac.getAtomAt(0); - Point2d tempAtomPoint = null; for (int f = 0; f < ac.getAtomCount() - 1; f++) { atom = ac.getAtomAt(f); @@ -341,7 +347,15 @@ atomPoint.add(bondVector); nextAtom.setPoint2d(atomPoint); nextAtom.setFlag(CDKConstants.ISPLACED, true); - bondVector = getNextBondVector(nextAtom, atom, GeometryTools.get2DCenter(molecule)); + boolean trans=false; + try{ + if(f>2 && BondTools.isValidDoubleBondConfiguration(withh,withh.getBond(withh.getAtomAt(f-2),withh.getAtomAt(f-1)))){ + trans=BondTools.isCisTrans(withh.getAtomAt(f-3),withh.getAtomAt(f-2),withh.getAtomAt(f-1),withh.getAtomAt(f-0),withh); + } + }catch(Exception ex){ + logger.debug("Excpetion in detecting E/Z. This could mean that cleanup does not respect E/Z"); + } + bondVector = getNextBondVector(nextAtom, atom, GeometryTools.get2DCenter(molecule),trans); } } @@ -360,7 +374,7 @@ *@return A vector pointing to the location of the next atom * to draw */ - public Vector2d getNextBondVector(org.openscience.cdk.interfaces.Atom atom, org.openscience.cdk.interfaces.Atom previousAtom, Point2d distanceMeasure) + public Vector2d getNextBondVector(org.openscience.cdk.interfaces.Atom atom, org.openscience.cdk.interfaces.Atom previousAtom, Point2d distanceMeasure, boolean trans) { if (logger.isDebugEnabled()) { @@ -368,7 +382,9 @@ logger.debug("Arguments are atom: " + atom + ", previousAtom: " + previousAtom + ", distanceMeasure: " + distanceMeasure); } double angle = GeometryTools.getAngle(previousAtom.getX2d() - atom.getX2d(), previousAtom.getY2d() - atom.getY2d()); - double addAngle = Math.toRadians(120);; + double addAngle = Math.toRadians(120); + if(!trans) + addAngle=Math.toRadians(60); if (shouldBeLinear(atom, molecule)) addAngle = Math.toRadians(180); angle += addAngle; Index: StructureDiagramGenerator.java =================================================================== RCS file: /cvsroot/cdk/cdk/src/org/openscience/cdk/layout/StructureDiagramGenerator.java,v retrieving revision 1.66 retrieving revision 1.67 diff -u -r1.66 -r1.67 --- StructureDiagramGenerator.java 22 Oct 2005 16:26:23 -0000 1.66 +++ StructureDiagramGenerator.java 25 Nov 2005 21:34:54 -0000 1.67 @@ -43,10 +43,17 @@ import org.openscience.cdk.interfaces.Ring; import org.openscience.cdk.interfaces.RingSet; import org.openscience.cdk.exception.CDKException; +import org.openscience.cdk.geometry.BondTools; import org.openscience.cdk.geometry.GeometryTools; import org.openscience.cdk.graph.ConnectivityChecker; +import org.openscience.cdk.interfaces.Atom; +import org.openscience.cdk.interfaces.AtomContainer; +import org.openscience.cdk.interfaces.Bond; +import org.openscience.cdk.interfaces.Molecule; +import org.openscience.cdk.interfaces.Ring; import org.openscience.cdk.ringsearch.RingPartitioner; import org.openscience.cdk.ringsearch.SSSRFinder; +import org.openscience.cdk.tools.HydrogenAdder; import org.openscience.cdk.tools.LoggingTool; import org.openscience.cdk.tools.manipulator.RingSetManipulator; @@ -378,6 +385,7 @@ } else { + logger.debug("*** Start of handling purely aliphatic molecules. ***"); /* * We are here because there are no rings in the molecule @@ -539,12 +547,14 @@ safetyCounter++; done = false; atom = getNextAtomWithAliphaticUnplacedNeigbors(); + System.err.println(atom+""); if (atom != null) { unplacedAtoms = getUnplacedAtoms(atom); placedAtoms = getPlacedAtoms(atom); longestUnplacedChain = atomPlacer.getLongestUnplacedChain(molecule, atom); + System.err.println(longestUnplacedChain.getAtomCount()+" luc"); logger.debug("---start of longest unplaced chain---"); try @@ -573,7 +583,7 @@ { logger.debug("Less than one atoms placed already"); logger.debug("Trying to get next bond vector."); - direction = atomPlacer.getNextBondVector(atom, placedAtoms.getAtomAt(0), GeometryTools.get2DCenter(molecule)); + direction = atomPlacer.getNextBondVector(atom, placedAtoms.getAtomAt(0), GeometryTools.get2DCenter(molecule),true); } |