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

📄 jchempaintpanel.java

📁 化学图形处理软件
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
	/**	 *  Sets the lastSavedFile attribute of the JChemPaintPanel object	 *	 *@param  lsf  The new lastSavedFile value	 */	public void setLastSavedFile(File lsf) {		this.lastSavedFile = lsf;	}//	private void setupWorkingDirectory() {//		try {//			if (System.getProperty("user.dir") != null) {//				setCurrentWorkDirectory(new File(System.getProperty("user.dir")));//			}//		} catch (Exception exc) {//			logger.error("Could not read a system property. I might be in a sandbox.");//		}//	}	/**	 *  Sets the jChemPaintModel attribute of the JChemPaintPanel object	 *	 *@param  model  The new jChemPaintModel value	 */	public void setJChemPaintModel(JChemPaintModel model, Dimension panelDimension) {		lastUsedJCPP = this;		if (model != null && jchemPaintModel != null && model.getChemModel().getMoleculeSet() != null) {			model.getRendererModel().setBackgroundDimension(jchemPaintModel.getRendererModel().getBackgroundDimension());			IAtomContainer acc = model.getChemModel().getBuilder().newAtomContainer();			Iterator containers = ChemModelManipulator.getAllAtomContainers(model.getChemModel()).iterator();			while (containers.hasNext()) acc.add((IAtomContainer)containers.next()); 			Dimension molDim = GeometryTools.get2DDimension(acc,model.getRendererModel().getRenderingCoordinates());//			Dimension molDim = GeometryTools.get2DDimension(model.getChemModel().getMoleculeSet().getAtomContainer(0));						if (isViewerOnly) {				Dimension viewerDim = null;				//for some reason an EditorPanel opened by a ViewerPanel gets thet isViewerOnly flag set to true -- to be solved!!				try {					viewerDim = getViewerDimension();				}				catch (ClassCastException cce) {}				if (viewerDim != null) {					//sets BackgroundDim to default dim if using ViewerOnlyPanel					model.getRendererModel().setBackgroundDimension(viewerDim);				}			}			Dimension backDim = model.getRendererModel().getBackgroundDimension();			int height = (int) backDim.getHeight();			int width = (int) backDim.getWidth();			if (molDim.getHeight() >= backDim.getHeight()) {				height = (int) molDim.getHeight() + 10;			}			else if (molDim.getWidth() >= backDim.getWidth()) {				width = (int) molDim.getWidth() + 10;			}			model.getRendererModel().setBackgroundDimension(new Dimension(width, height));		}		else if (model.getChemModel().getMoleculeSet() == null && isViewerOnly) {			Dimension viewerDim = null;			try {				viewerDim = getViewerDimension();			}			catch (ClassCastException cce) {}			if (viewerDim != null) {				//sets BackgroundDim to default dim if using ViewerOnlyPanel				model.getRendererModel().setBackgroundDimension(viewerDim);				}		}		if(jchemPaintModel!=null && jchemPaintModel.getControllerModel()!=null)			model.getControllerModel().setAutoUpdateImplicitHydrogens(jchemPaintModel.getControllerModel().getAutoUpdateImplicitHydrogens());		if(jchemPaintModel!=null && jchemPaintModel.getRendererModel()!=null){			model.getRendererModel().setUseAntiAliasing(jchemPaintModel.getRendererModel().getUseAntiAliasing());			model.getRendererModel().setShowImplicitHydrogens(jchemPaintModel.getRendererModel().getShowImplicitHydrogens());			model.getRendererModel().setShowEndCarbons(jchemPaintModel.getRendererModel().getShowEndCarbons());			model.getRendererModel().setShowAromaticityInCDKStyle(jchemPaintModel.getRendererModel().getShowAromaticityInCDKStyle());			model.getRendererModel().setDrawNumbers(jchemPaintModel.getRendererModel().getDrawNumbers());			model.getRendererModel().setShowAtomAtomMapping(jchemPaintModel.getRendererModel().getShowAtomAtomMapping());			model.getRendererModel().setKekuleStructure(jchemPaintModel.getRendererModel().getKekuleStructure());			model.getRendererModel().setColorAtomsByType(jchemPaintModel.getRendererModel().getColorAtomsByType());			model.getRendererModel().setShowTooltip(jchemPaintModel.getRendererModel().getShowTooltip());			model.getRendererModel().setShowReactionBoxes(jchemPaintModel.getRendererModel().getShowReactionBoxes());		}		this.jchemPaintModel = model;		jchemPaintModel.addChangeListener(this);		org.openscience.cdk.interfaces.IChemModel chemModel = model.getChemModel();		scaleAndCenterMolecule(chemModel,panelDimension);		drawingPanel.setJChemPaintModel(model);	}	/**	 *  Partitions a given String into separate words and writes them into an	 *  array.	 *	 *@param  input  String The String to be cutted into pieces	 *@return        String[] The array containing the separate words	 */	public String[] tokenize(String input) {		Vector v = new Vector();		StringTokenizer t = new StringTokenizer(input);		String cmd[];		while (t.hasMoreTokens()) {			v.addElement(t.nextToken());		}		cmd = new String[v.size()];		for (int i = 0; i < cmd.length; i++) {			cmd[i] = (String) v.elementAt(i);		}		return cmd;	}	public void showChemFile(Reader file) {		IChemObjectReader cor = null;		/*		 *  Have the ReaderFactory determine the file format		 */		try {			cor = getChemObjectReader(file);		} catch (IOException ioExc) {			logger.warn("IOException while determining file format.");			logger.debug(ioExc);		} catch (Exception exc) {			logger.warn("Exception while determining file format.");			logger.debug(exc);		}		if (cor == null) {			JOptionPane.showMessageDialog(this, "Could not determine file format.");			return;		}		String error = null;		ChemFile chemFile = null;		ChemModel chemModel = null;		if (cor.accepts(ChemFile.class)) {			// try to read a ChemFile			try {				chemFile = (ChemFile) cor.read(new ChemFile());				if (chemFile != null) {					processChemFile(chemFile);					return;				} else {					logger.warn("The object chemFile was empty unexpectedly!");				}			} catch (Exception exception) {				error = "Error while reading file: " + exception.getMessage();				logger.warn(error);				logger.debug(exception);			}		}		if (error != null) {			JOptionPane.showMessageDialog(this, error);			return;		}		if (cor.accepts(ChemModel.class)) {			// try to read a ChemModel			try {				chemModel = (ChemModel) cor.read((ChemObject) new ChemModel());				if (chemModel != null) {					processChemModel(chemModel);					return;				} else {					logger.warn("The object chemModel was empty unexpectedly!");				}				error = null;				// overwrite previous problems, it worked now			} catch (Exception exception) {				error = "Error while reading file: " + exception.getMessage();				logger.error(error);				logger.debug(exception);			}		}		if (error != null) {			JOptionPane.showMessageDialog(this, error);		}	}	/**	 *  Gets the jChemPaintModel attribute of the JChemPaintPanel object	 *	 *@return    The jChemPaintModel value	 */	public JChemPaintModel getJChemPaintModel() {		return jchemPaintModel;	}	public int showWarning() {		if (jchemPaintModel.isModified() && !getIsOpenedByViewer() && !guiString.equals("applet")) {			int answer = JOptionPane.showConfirmDialog(this, jchemPaintModel.getTitle() + " " + JCPLocalizationHandler.getInstance().getString("warning"), JCPLocalizationHandler.getInstance().getString("warningheader"), JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE);			if (answer == JOptionPane.YES_OPTION) {				new SaveAction(this, false).actionPerformed(new ActionEvent(this, 12, ""));			}			return answer;		} else if(guiString.equals("applet")){			//In case of the applet we do not ask for save but put the clear into the undo stack			ClearAllEdit coa = null;			try {				coa = new ClearAllEdit(this.getChemModel(),(IMoleculeSet)this.getChemModel().getMoleculeSet().clone(),this.getChemModel().getReactionSet());				this.jchemPaintModel.getControllerModel().getUndoSupport().postEdit(coa);			} catch (Exception e) {				logger.error("Clone of IMoleculeSet failed: ", e.getMessage());            	logger.debug(e);			}			return JOptionPane.YES_OPTION;		} else {			return JOptionPane.YES_OPTION;		}	}	public void processChemFile(org.openscience.cdk.interfaces.IChemFile chemFile) {		logger.info("Information read from file:");		int chemSequenceCount = chemFile.getChemSequenceCount();		logger.info("  # sequences: ", chemSequenceCount);		for (int i = 0; i < chemSequenceCount; i++) {			org.openscience.cdk.interfaces.IChemSequence chemSequence = chemFile.getChemSequence(i);			int chemModelCount = chemSequence.getChemModelCount();			logger.info("  # model in seq(" + i + "): ", chemModelCount);			for (int j = 0; j < chemModelCount; j++) {				org.openscience.cdk.interfaces.IChemModel chemModel = chemSequence.getChemModel(j);				processChemModel(chemModel);			}		}	}	/**	 *  Scales and centers the structure in the dimensions of the DrawingPanel.	 *	 *@param  chemModel  The cheModel of the structure to be scaled and centered.	 */	public void scaleAndCenterMolecule(org.openscience.cdk.interfaces.IChemModel chemModel) {    scaleAndCenterMolecule(chemModel, null);  }	public void scaleAndCenterMolecule(org.openscience.cdk.interfaces.IChemModel chemModel, Dimension dim) {		IAtomContainer ac = chemModel.getBuilder().newAtomContainer();		Iterator containers = ChemModelManipulator.getAllAtomContainers(chemModel).iterator();		while (containers.hasNext()) ac.add((IAtomContainer)containers.next());		scaleAndCenterMolecule(ac,dim);	}		/**	 *  Scales and centers the structure in the dimensions of the DrawingPanel.	 *	 *@param  ac  The IAtomContainer of the structure to be scaled and centered.	 */	public void scaleAndCenterMolecule(IAtomContainer ac, Dimension dim){	    if(showscrollbars){			((JViewport) drawingPanel.getParent()).setViewPosition(new Point((drawingPanel.getWidth()-getWidth())/2>0 ? (drawingPanel.getWidth()-getWidth())/2 : 0 ,(drawingPanel.getHeight()-getHeight())/2>0 ? (drawingPanel.getHeight()-getHeight())/2 : 0));		}	    JChemPaintModel jcpm = getJChemPaintModel();	    Renderer2DModel rendererModel = jcpm.getRendererModel();	    	    double scaleFactor = GeometryTools.getScaleFactor(ac, rendererModel.getBondLength(),jchemPaintModel.getRendererModel().getRenderingCoordinates());	    GeometryTools.scaleMolecule(ac, scaleFactor, jchemPaintModel.getRendererModel().getRenderingCoordinates());	    if(!showscrollbars && dim!=null){	    	Dimension moldims=GeometryTools.get2DDimension(ac, rendererModel.getRenderingCoordinates());	    	scaleFactor=1;	    	if(moldims.width>dim.width){	    		scaleFactor=((float)dim.width-100)/(float)moldims.width;	    	}	    	if(moldims.height>dim.height && dim.height/moldims.height<scaleFactor){	    		scaleFactor=((float)dim.height-100)/(float)moldims.height;	    	}	        GeometryTools.scaleMolecule(ac, scaleFactor, jchemPaintModel.getRendererModel().getRenderingCoordinates());	    }	    	    Rectangle view;	    if(showscrollbars){	    	view = ((JViewport) drawingPanel.getParent()).getViewRect();	    }else{	    	view = new Rectangle(drawingPanel.getSize());	    }	    Renderer2DModel model = jchemPaintModel.getRendererModel();	    double x = view.getX() + view.getWidth();	    double y = view.getY() + view.getHeight();	    double relocatedY = model.getBackgroundDimension().getSize().getHeight() - (y + view.getY() / 2);	    double relocatedX = view.getX() / 2;	    Dimension viewablePart = new Dimension((int) x, (int) y);	   //GeometryTools.center(ac, viewablePart);	    //to be fixed - check if molDim is reaching over viewablePart borders...	    if (this instanceof JChemPaintViewerOnlyPanel) {	    	GeometryTools.center(ac, model.getBackgroundDimension(),jchemPaintModel.getRendererModel().getRenderingCoordinates());	        relocatedX=0;	        relocatedY=0;	    } else {	        if(dim==null){	            if(viewablePart.getWidth()==0 && viewablePart.getHeight()==0){	                relocatedX=0;	                relocatedY=0;	                GeometryTools.center(ac, model.getBackgroundDimension(),jchemPaintModel.getRendererModel().getRenderingCoordinates());	            }else{	            	GeometryTools.center(ac, viewablePart,jchemPaintModel.getRendererModel().getRenderingCoordinates());	            }	        }else{	            relocatedY = model.getBackgroundDimension().getSize().getHeight() - (dim.getHeight());	            relocatedX = 0;	            GeometryTools.center(ac, dim,jchemPaintModel.getRendererModel().getRenderingCoordinates());	        }	    }	    //fixing the coords regarding the position of the viewablePart	    java.util.Iterator atoms = ac.atoms();	    while (atoms.hasNext()) {	    	IAtom atom = (IAtom)atoms.next();	        if (jchemPaintModel.getRendererModel().getRenderingCoordinate(atom) != null) {	        	jchemPaintModel.getRendererModel().setRenderingCoordinate(atom,new Point2d(((Point2d)jchemPaintModel.getRendererModel().getRenderingCoordinate(atom)).x + relocatedX,((Point2d)jchemPaintModel.getRendererModel().getRenderingCoordinate(atom)).y + relocatedY));	        }	    }	}	public void processChemModel(org.openscience.cdk.interfaces.IChemModel chemModel) {		// check for bonds		if (ChemModelManipulator.getBondCount(chemModel) == 0) {			String error = "Model does not have bonds. Cannot depict contents.";			logger.warn(error);			JOptionPane.showMessageDialog(this, error);			return;		}		// check for coordinates		if ((GeometryTools.has2DCoordinatesNew(chemModel)==0)) {			String error = "Model does not have 2D coordinates. Cannot open file.";			logger.warn(error);			JOptionPane.showMessageDialog(this, error);			CreateCoordinatesForFileDialog frame = new CreateCoordinatesForFileDialog(chemModel, jchemPaintModel.getRendererModel().getRenderingCoordinates());			frame.pack();			frame.show();			return;		} else if ((GeometryTools.has2DCoordinatesNew(chemModel)==1)) {			int result=JOptionPane.showConfirmDialog(this,"Model has some 2d coordinates. Do you want to show only the atoms with 2d coordiantes?","Only some 2d cooridantes",JOptionPane.YES_NO_OPTION);			if(result>1){				CreateCoordinatesForFileDialog frame = new CreateCoordinatesForFileDialog(chemModel, jchemPaintModel.getRendererModel().getRenderingCoordinates());				frame.pack();				frame.show();				return;			}else{				for(int i=0;i<chemModel.getMoleculeSet().getAtomContainerCount();i++){					for(int k=0;i<chemModel.getMoleculeSet().getAtomContainer(i).getAtomCount();k++){						if(chemModel.getMoleculeSet().getAtomContainer(i).getAtom(k).getPoint2d()==null)							chemModel.getMoleculeSet().getAtomContainer(i).removeAtomAndConnectedElectronContainers(chemModel.getMoleculeSet().getAtomContainer(i).getAtom(k));					}										}			}		}		JChemPaintModel jcpm = new JChemPaintModel(chemModel);		lastUsedJCPP = this;		if (isEmbedded()) {			if (showWarning() != JOptionPane.CANCEL_OPTION) {				registerModel(jcpm);				setJChemPaintModel(jcpm,null);				repaint();			}		}else if (getJChemPaintModel().getChemModel().getMoleculeSet() == null ||				getJChemPaintModel().getChemModel().getReactionSet() == null /*|| 				getJChemPaintModel().getChemModel().getMoleculeSet().getMolecule(0).getAtoms().length == 0*/) {			    registerModel(jcpm);				setJChemPaintModel(jcpm,null);				repaint();		} else {			JFrame jcpf = JChemPaintEditorPanel.getNewFrame(jcpm);			jcpf.setVisible(true);			scaleAndCenterMolecule(chemModel);			jcpf.pack();			lastUsedJCPP = (JChemPaintPanel) jcpf.getContentPane().getComponents()[0];		}	}	/**	 *  Gets the chemObjectReader attribute of the JChemPaintPanel object	 *	 *@param  reader           Description of the Parameter	 *@return                  The chemObjectReader value	 *@exception  IOException  Description of the Exception	 */	public IChemObjectReader getChemObjectReader(Reader reader) throws IOException {		ReaderFactory factory = new ReaderFactory();		IChemObjectReader coReader = factory.createReader(reader);		if (coReader != null) {			coReader.addChemObjectIOListener(new SwingGUIListener(this, 4));		}		return coReader;	}

⌨️ 快捷键说明

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