Chris, we can't use the atomno property to uniquely identify an atom,
because there may be multiple models loaded, and  more than one may have,
say, atomno=1. So instead we indicate an "atom index" which is a unique
number relating to the entire set of models. These numbers start with 0. So
all you need to do is

select atomindex=

instead of

select atomno=




On Thu, Feb 26, 2009 at 9:44 AM, Chris Foley <[email protected]
> wrote:

> Hi all,
>
> I'm having a bit of trouble with atom indexes. I'm using mouse over
> events to get the atom under the mouse cursor and then trying to select
> the same atom in Jmol. In essence it's this:
>
> int atom = findNearestAtomIndex(e.getPoint()); // e is of type MouseEvent
> evalString("select atomno=" + atom + ";");
>
> However, the selected atom is not the same as under the mouse. Here's a
> demo app so you can see what I mean (please excuse the messy use of
> reflection). You will need Jmol and the 2 PDB files in the same
> directory as the compiled class file to run it.
>
> Thanks in advance for any help.
>
> Cheers,
> Chris Foley.
>
>
>
>
>
>
>
>
> package JmolAtomDemo;
>
> import java.awt.Dimension;
> import java.awt.Graphics;
> import java.awt.Point;
> import java.awt.Rectangle;
> import java.awt.event.MouseEvent;
> import java.awt.event.MouseMotionAdapter;
> import java.lang.reflect.Method;
>
> import javax.swing.JFrame;
> import javax.swing.JPanel;
>
> import org.jmol.adapter.smarter.SmarterJmolAdapter;
> import org.jmol.viewer.Viewer;
>
> public class JmolAtomDemo extends JPanel {
>    private static final long serialVersionUID = 1L;
>
>
>
>    // Oh so messy!
>    private static Method findNearestAtomIndex;
>    static {
>        Class<?> c = Viewer.class;
>        Class<?>[] findNearestAtomIndexParams = {int.class, int.class};
>        try {findNearestAtomIndex =
> c.getDeclaredMethod("findNearestAtomIndex", findNearestAtomIndexParams);
>        } catch (Exception e) {e.printStackTrace();}
>        findNearestAtomIndex.setAccessible(true);
>    }
>
>
>
>    private Viewer viewer;
>
>    public JmolAtomDemo(String pdb) {
>        viewer = new Viewer(this, new SmarterJmolAdapter() );
>        viewer.setAppletContext("",null,null,"");
>        viewer.openFile(pdb);
>        viewer.evalString("selectionHalos ON;");
>
>        addMouseMotionListener(new MouseMotionAdapter() {
>            @Override
>            public void mouseMoved(MouseEvent e) {
>                int atomIndex = findNearestAtomIndex(e.getPoint());
>                String script = "select atomno=" + atomIndex + ";";
>                System.out.println(script);
>                viewer.evalString(script);
>            }
>        });
>    } // constructor
>
>    private final Dimension currentSize = new Dimension();
>    private final Rectangle rectClip = new Rectangle();
>
>    @Override
>    public void paint(Graphics g) {
>        getSize(currentSize);
>        g.getClipBounds(rectClip);
>        viewer.renderScreenImage(g, currentSize, rectClip);
>    } // paint
>
>
>
>
>    public int findNearestAtomIndex(Point mousePosition) {
>        Integer rv = -1;
>        try {
>            rv = (Integer)findNearestAtomIndex.invoke(
>                    viewer, mousePosition.x, mousePosition.y);
>        } catch (Exception e) {
>            e.printStackTrace();
>        } // try
>        return rv;
>    } // findNearestAtomIndex
>
>
>
>    public static void main(String[] args) {
>
>
>        JFrame frame1 = new JFrame("1NCP");
>        frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
>        frame1.getContentPane().add(new JmolAtomDemo("1NCP.pdb"));
>        frame1.setSize(300, 300);
>        frame1.setVisible(true);
>
>        JFrame frame2 = new JFrame("1CDH");
>        frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
>        frame2.getContentPane().add(new JmolAtomDemo("1cdh.pdb"));
>        frame2.setLocation(300, 0);
>        frame2.setSize(300, 300);
>        frame2.setVisible(true);
>
>
>    } // main
>
>
>
>
> }
>
>
>
> ------------------------------------------------------------------------------
> Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco,
> CA
> -OSBC tackles the biggest issue in open source: Open Sourcing the
> Enterprise
> -Strategies to boost innovation and cut costs with open source
> participation
> -Receive a $600 discount off the registration fee with the source code:
> SFAD
> http://p.sf.net/sfu/XcvMzF8H
> _______________________________________________
> Jmol-users mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/jmol-users
>



-- 
Robert M. Hanson
Professor of Chemistry
St. Olaf College
1520 St. Olaf Ave.
Northfield, MN 55057
http://www.stolaf.edu/people/hansonr
phone: 507-786-3107


If nature does not answer first what we want,
it is better to take what answer we get.

-- Josiah Willard Gibbs, Lecture XXX, Monday, February 5, 1900
------------------------------------------------------------------------------
Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA
-OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise
-Strategies to boost innovation and cut costs with open source participation
-Receive a $600 discount off the registration fee with the source code: SFAD
http://p.sf.net/sfu/XcvMzF8H
_______________________________________________
Jmol-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jmol-users

Reply via email to