I think this works. It handles different units (in and cm). If you leave out width or height, it gets scaled correctly. If you  leave them both out, you get whatever the current viewport size is (is there something better?).

#!/usr/bin/env pymol

from pymol import cmd

def rayy(width=-1,height=-1,dpi=300,units='in',**kwargs):
    """
    Slightly better version of the ray command.
    You can specify width and height in the units of your choice, e.g.

    rayy 3,2,units=in,dpi=300
    rayy 3in,2in
    rayy 1in, 2 cm, dpi=600

    Extra keyword arguments get passed on to the normal ray command.
    """
    if type(dpi) in [type('')]: dpi = int(dpi)
    in_per_cm = 0.393700787
    def todots(x,units,dpi):
        if type(x) in [type('')]:
            x = x.lower()
            if 'in' in x:   units = 'in'
            elif 'cm' in x: units = 'cm'
            x = float(x.replace(units,'').strip())
        if units ==   'cm':   x = x * in_per_cm
        elif units == 'in': pass
        else:         raise ValueError('Unknown units (%s)'%units)
        print x,units,dpi
        return int(x * dpi)
    # How do we get current width/height of viewport? MainSceneGetSize perhaps
    # But it doesn't matter, as PyMOL will autoscale internally for us.
    try:
        height,width = todots(height,units,dpi),todots(width,units,dpi)
    except ValueError:
        print "Unknown units"
        return
    print 'width',width,'height',height
    cmd.ray(width=width,height=height,**kwargs)
    #cmd.png(self.filename.getvalue(), dpi=int(self.dpi.getvalue()))
cmd.extend('rayy',rayy)

On Thu, Jan 21, 2010 at 11:52 AM, Michael Lerner <mglerner+sourceforge@gmail.com> wrote:
The ray command bugs me, so I'll take a stab at improving it this afternoon.

Can someone tell me how to get the size of the current viewport?

This solution:
http://www.mail-archive.com/pymol-users@lists.sourceforge.net/msg05888.html
width,height = cmd.get_session()['main'][0:2]

doesn't seem to work for me:

PyMOL>print sorted(cmd.get_session().keys())
['cache', 'color_ext', 'colors', 'editor', 'movie', 'names', 'scene_dict', 'scene_order', 'selector_secrets', 'session', 'settings', 'unique_settings', 'version', 'view', 'view_dict', 'wizard']

-Michael

On Wed, Jan 20, 2010 at 3:54 PM, Tsjerk Wassenaar <tsjerkw@gmail.com> wrote:
Hi,

> ray 10cm, 20cm, dpi=300?
> ray 2.5in, 5in, dpi=300?

I'd slightly modify that to read:

ray 10,10,units=cm,resolution=300

where units can be pixels (default), cm, inches, meters, yards, lightyears...

Cheers,

Tsjerk


--
Tsjerk A. Wassenaar, Ph.D.

Computational Chemist
Medicinal Chemist
Neuropharmacologist

------------------------------------------------------------------------------
Throughout its 18-year history, RSA Conference consistently attracts the
world's best and brightest in the field, creating opportunities for Conference
attendees to learn about information security's most important issues through
interactions with peers, luminaries and emerging and established companies.
http://p.sf.net/sfu/rsaconf-dev2dev
_______________________________________________
PyMOL-users mailing list (PyMOL-users@lists.sourceforge.net)
Info Page: https://lists.sourceforge.net/lists/listinfo/pymol-users
Archives: http://www.mail-archive.com/pymol-users@lists.sourceforge.net



--
Michael Lerner, Ph.D.
IRTA Postdoctoral Fellow
Laboratory of Computational Biology NIH/NHLBI
5635 Fishers Lane, Room T909, MSC 9314
Rockville, MD 20852 (UPS/FedEx/Reality)
Bethesda MD 20892-9314 (USPS)



--
Michael Lerner, Ph.D.
IRTA Postdoctoral Fellow
Laboratory of Computational Biology NIH/NHLBI
5635 Fishers Lane, Room T909, MSC 9314
Rockville, MD 20852 (UPS/FedEx/Reality)
Bethesda MD 20892-9314 (USPS)