From: <sh...@us...> - 2008-10-06 13:30:33
|
Revision: 12557 http://cdk.svn.sourceforge.net/cdk/?rev=12557&view=rev Author: shk3 Date: 2008-10-06 12:45:30 +0000 (Mon, 06 Oct 2008) Log Message: ----------- the relayout just sets coordinates and does not create new molecules in model (makes undo/redo work and is generally the better solution) Modified Paths: -------------- cdk/branches/cdk-1.0.x/src/org/openscience/cdk/applications/jchempaint/action/CleanupAction.java Modified: cdk/branches/cdk-1.0.x/src/org/openscience/cdk/applications/jchempaint/action/CleanupAction.java =================================================================== --- cdk/branches/cdk-1.0.x/src/org/openscience/cdk/applications/jchempaint/action/CleanupAction.java 2008-10-06 12:21:15 UTC (rev 12556) +++ cdk/branches/cdk-1.0.x/src/org/openscience/cdk/applications/jchempaint/action/CleanupAction.java 2008-10-06 12:45:30 UTC (rev 12557) @@ -104,14 +104,12 @@ { logger.debug("no mols in som: ", som.getMoleculeCount()); - MoleculeSet newsom = new MoleculeSet(); java.util.Iterator mols = som.molecules(); while (mols.hasNext()) { IMolecule molecule = (IMolecule)mols.next(); if (molecule != null && molecule.getAtomCount() > 0) { IMolecule cleanedMol = relayoutMolecule(molecule); - newsom.addMolecule(cleanedMol); for (int j=0; j<molecule.getAtomCount(); j++) { IAtom atom = molecule.getAtom(j); IAtom newAtom = cleanedMol.getAtom(j); @@ -121,42 +119,63 @@ Point2d[] coords = new Point2d[2]; coords[0] = newCoord; coords[1] = oldCoord; - atomCoordsMap.put(newAtom, coords); + atomCoordsMap.put(atom, coords); } + jcpmodel.getRendererModel().setRenderingCoordinate(atom, newCoord); } } } - model.setMoleculeSet(newsom); UndoableEdit edit = new CleanUpEdit(atomCoordsMap,jcpmodel.getRendererModel()); jcpPanel.getUndoSupport().postEdit(edit); - GeometryTools.makeRenderingCoordinates(newsom, jcpmodel.getRendererModel().getRenderingCoordinates()); } org.openscience.cdk.interfaces.IReactionSet reactionSet = model.getReactionSet(); if (reactionSet != null) { - ReactionSet newSet = new ReactionSet(); - // FIXME, this does not preserve reactionset properties! java.util.Iterator reactionsIter = reactionSet.reactions(); while (reactionsIter.hasNext()) { org.openscience.cdk.interfaces.IReaction reaction = (org.openscience.cdk.interfaces.IReaction)reactionsIter.next(); - Reaction newReaction = new Reaction(); - // FIXME, this does not preserve reaction properties! java.util.Iterator reactants = reaction.getReactants().molecules(); while (reactants.hasNext()) { - newReaction.addReactant(relayoutMolecule((IMolecule)reactants.next())); + IMolecule molecule=(IMolecule)reactants.next(); + IMolecule cleanedMol = relayoutMolecule(molecule); + for (int j=0; j<molecule.getAtomCount(); j++) { + IAtom atom = molecule.getAtom(j); + IAtom newAtom = cleanedMol.getAtom(j); + Point2d oldCoord = (Point2d)jcpmodel.getRendererModel().getRenderingCoordinate(atom); + Point2d newCoord = newAtom.getPoint2d(); + if (!oldCoord.equals(newCoord)) { + Point2d[] coords = new Point2d[2]; + coords[0] = newCoord; + coords[1] = oldCoord; + atomCoordsMap.put(atom, coords); + } + jcpmodel.getRendererModel().setRenderingCoordinate(atom, newCoord); + } } java.util.Iterator products = reaction.getProducts().molecules(); while (products.hasNext()) { - newReaction.addProduct(relayoutMolecule((IMolecule)products.next())); + IMolecule molecule=(IMolecule)products.next(); + IMolecule cleanedMol = relayoutMolecule(molecule); + for (int j=0; j<molecule.getAtomCount(); j++) { + IAtom atom = molecule.getAtom(j); + IAtom newAtom = cleanedMol.getAtom(j); + Point2d oldCoord = (Point2d)jcpmodel.getRendererModel().getRenderingCoordinate(atom); + Point2d newCoord = newAtom.getPoint2d(); + if (!oldCoord.equals(newCoord)) { + Point2d[] coords = new Point2d[2]; + coords[0] = newCoord; + coords[1] = oldCoord; + atomCoordsMap.put(atom, coords); + } + jcpmodel.getRendererModel().setRenderingCoordinate(atom, newCoord); + } } - newSet.addReaction(newReaction); } - model.setReactionSet(newSet); } jcpmodel.getRendererModel().setSelectedPart(new AtomContainer()); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |