⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 createcoordinatesforfiledialog.java

📁 化学图形处理软件
💻 JAVA
字号:
/* *  $RCSfile$ *  $Author: egonw $ *  $Date: 2007-05-01 21:15:34 +0200 (Tue, 01 May 2007) $ *  $Revision: 8292 $ * *  Copyright (C) 1997-2007  The JChemPaint project * *  Contact: jchempaint-devel@lists.sf.net * *  This program is free software; you can redistribute it and/or *  modify it under the terms of the GNU Lesser General Public License *  as published by the Free Software Foundation; either version 2.1 *  of the License, or (at your option) any later version. *  All we ask is that proper credit is given for our work, which includes *  - but is not limited to - adding the above copyright notice to the beginning *  of your source code files, and to any copyright notice that you may distribute *  with programs based on this work. * *  This program is distributed in the hope that it will be useful, *  but WITHOUT ANY WARRANTY; without even the implied warranty of *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *  GNU Lesser General Public License for more details. * *  You should have received a copy of the GNU Lesser General Public License *  along with this program; if not, write to the Free Software *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. */package org.openscience.cdk.applications.jchempaint.dialogs;import java.awt.BorderLayout;import java.awt.Container;import java.awt.Dimension;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.util.HashMap;import java.util.Iterator;import javax.swing.AbstractAction;import javax.swing.BorderFactory;import javax.swing.Box;import javax.swing.BoxLayout;import javax.swing.ButtonGroup;import javax.swing.JButton;import javax.swing.JInternalFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JRadioButton;import javax.vecmath.Point2d;import javax.vecmath.Vector2d;import org.openscience.cdk.MoleculeSet;import org.openscience.cdk.Reaction;import org.openscience.cdk.ReactionSet;import org.openscience.cdk.applications.jchempaint.JChemPaintModel;import org.openscience.cdk.geometry.GeometryTools;import org.openscience.cdk.geometry.Projector;import org.openscience.cdk.interfaces.IAtomContainer;import org.openscience.cdk.interfaces.IChemModel;import org.openscience.cdk.interfaces.IMolecule;import org.openscience.cdk.layout.StructureDiagramGenerator;import org.openscience.cdk.tools.LoggingTool;import org.openscience.cdk.tools.manipulator.ChemModelManipulator;/** * Dialog for coordinate creationg * * @cdk.module jchempaint * @author     steinbeck */public class CreateCoordinatesForFileDialog extends JInternalFrame{	private static final long serialVersionUID = 6717348756533287248L;		private IChemModel chemModel;	private HashMap renderingCoordinates;	private JRadioButton generate2DButton;	private JRadioButton from3DButton;	private LoggingTool logger = null;	/**	 *  Constructor for the CreateCoordinatesForFileDialog object	 *	 *@param  model  Description of the Parameter	 */	public CreateCoordinatesForFileDialog(IChemModel model, HashMap renderingCoordinates)	{		super("Coordinate Creation", true, true, true, true);		this.chemModel = model;		this.renderingCoordinates=renderingCoordinates;		this.logger = new LoggingTool(this);		Container contentPane = getContentPane();		contentPane.setLayout(new BorderLayout());		// options		JPanel radioPanel = new JPanel();		radioPanel.setLayout(new GridLayout(0, 1));		ButtonGroup group = new ButtonGroup();		generate2DButton = new JRadioButton("create with layout algorithm");		group.add(generate2DButton);		radioPanel.add(generate2DButton);		if (GeometryTools.has3DCoordinates(chemModel)) {			from3DButton = new JRadioButton("create from 3D coordinates in file");			group.add(from3DButton);			radioPanel.add(from3DButton);			from3DButton.setSelected(true);		} else		{			generate2DButton.setSelected(true);		}		JPanel optionPane = new JPanel();		optionPane.setLayout(new GridLayout(0, 1));		JLabel label = new JLabel("The file does not contain 2D Coordinates or only some. Should I create those?");		optionPane.add(label);		optionPane.add(radioPanel);		//buttons		JButton cancelButton = new JButton("Cancel");		JButton createButton = new JButton("Create");		cancelButton.addActionListener(new CancelAction());		createButton.addActionListener(new CreateAction());		getRootPane().setDefaultButton(createButton);		//Lay out the buttons from left to right.		JPanel buttonPane = new JPanel();		buttonPane.setLayout(new BoxLayout(buttonPane, BoxLayout.X_AXIS));		buttonPane.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10));		buttonPane.add(Box.createHorizontalGlue());		buttonPane.add(createButton);		buttonPane.add(Box.createRigidArea(new Dimension(10, 0)));		buttonPane.add(cancelButton);		contentPane.add(optionPane, BorderLayout.CENTER);		contentPane.add(buttonPane, BorderLayout.SOUTH);		pack();		setVisible(true);	}	public void closeFrame()	{		dispose();	}	class CancelAction extends AbstractAction	{		private static final long serialVersionUID = -2305492502437164455L;		CancelAction()		{			super("Cancel");		}		public void actionPerformed(ActionEvent event)		{			closeFrame();		}	}	/**	 *  Description of the Class	 *	 *@author     steinbeck	 */	class CreateAction extends AbstractAction	{		private static final long serialVersionUID = 7041050310635125218L;				StructureDiagramGenerator diagramGenerator;		CreateAction()		{			super("Create");			this.diagramGenerator = new StructureDiagramGenerator();		}		public void actionPerformed(ActionEvent event)		{			if (from3DButton != null && from3DButton.isSelected())			{				// JOptionPane.showMessageDialog(jchempaint, "Not implemented yet");				Iterator containers = ChemModelManipulator.getAllAtomContainers(chemModel).iterator();				while (containers.hasNext()) {					Projector.project2D((IAtomContainer)containers.next(), renderingCoordinates);				}			} else			{				org.openscience.cdk.interfaces.IMoleculeSet som = chemModel.getMoleculeSet();				if (som != null)				{					logger.debug("no mols in som: ", som.getMoleculeCount());					MoleculeSet newsom = new MoleculeSet();					java.util.Iterator mols = som.molecules();					while (mols.hasNext())					{						newsom.addMolecule(relayoutMolecule((IMolecule)mols.next()));					}					chemModel.setMoleculeSet(newsom);				}				org.openscience.cdk.interfaces.IReactionSet reactionSet = chemModel.getReactionSet();				if (reactionSet != null)				{					ReactionSet newSet = new ReactionSet();					// FIXME, this does not preserve reactionset properties!					java.util.Iterator reactionIter = reactionSet.reactions();					while (reactionIter.hasNext())					{						org.openscience.cdk.interfaces.IReaction reaction = (org.openscience.cdk.interfaces.IReaction)reactionIter.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()));						}						java.util.Iterator products = reaction.getProducts().molecules();						while (products.hasNext())						{							newReaction.addProduct(relayoutMolecule((IMolecule)products.next()));						}						newSet.addReaction(newReaction);					}					chemModel.setReactionSet(newSet);				}			}			JChemPaintModel jcpm = new JChemPaintModel(chemModel);			// XXX needs to be fixed			//JChemPaintFrame jcpf = JChemPaint.getInstance().getNewFrame(jcpm);			//JChemPaint.getInstance().addAndShowJChemPaintFrame(jcpf);			closeFrame();		}		private IMolecule relayoutMolecule(IMolecule molecule)		{			IMolecule cleanedMol = molecule;			if (molecule != null)			{				if (molecule.getAtomCount() > 2)				{					try					{						Point2d centre = GeometryTools.get2DCentreOfMass(molecule, renderingCoordinates);						diagramGenerator.setMolecule(molecule);						diagramGenerator.generateCoordinates(new Vector2d(0, 1));						cleanedMol = diagramGenerator.getMolecule();						/*						 *  make the molecule end up somewhere reasonable						 *  See constructor of JCPPanel						 */						GeometryTools.translateAllPositive(cleanedMol,renderingCoordinates);						GeometryTools.translate2DCentreOfMassTo(cleanedMol, centre,renderingCoordinates);					} catch (Exception exc)					{						logger.error("Could not generate coordinates for molecule");						logger.error(exc.toString());					}				} else				{					logger.info("Molecule with less than 2 atoms are not cleaned up");				}			} else			{				logger.error("Molecule is null! Cannot do layout!");			}			return cleanedMol;		}	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -