"""Sets one or more objects to a specified display mode in all viewports
Script by Mitch Heynick 17 February 2014"""

import rhinoscriptsyntax as rs
import scriptcontext as sc
import Rhino

def SetSpecificObjDisplayModeAllViewports():
    """Note that the string modeName below MUST precisely correspond
    to one of the localized names of a display mode in your installation!
    Change the string as needed to assign other display modes"""
    #modeName="Wireframe"
    modeName="Ghosted"
    #modeName="Shaded"
    #modeName="Rendered"
    
    msg="Select objects to set to {} display mode".format(modeName)
    objIDs=rs.GetObjects(msg,8+16+32,preselect=True)
    if not objIDs: return
    
    dModes = Rhino.Display.DisplayModeDescription.GetDisplayModes()
    modeNames=[dMode.LocalName for dMode in dModes]
    
    index=-1
    for i in range(len(modeNames)):
        if modeName==modeNames[i]:
            index=i ; break
    if index==-1:
        print "Display mode not found!" ; return
        
    vIDs=[view.ActiveViewportID for view in sc.doc.Views]
    
    for vID in vIDs:
        for objID in objIDs:
            objRef=sc.doc.Objects.Find(objID)
            attr = objRef.Attributes
            attr.SetDisplayModeOverride(dModes[i], vID)
            sc.doc.Objects.ModifyAttributes(objID, attr, False)
    sc.doc.Views.Redraw()
    
SetSpecificObjDisplayModeAllViewports()