The script below generates the figure above. Given the automatic behavior of the script, you should be able to simply update the PDB code and atom selections in order to splay apart the interfaces of other proteins.
# splay.pml - automatically splay apart an interface # load PDB and split it up into two objects: side1 & side2 fetch 2bzw, tmp, async=0 # in 2bzw, chain A is BCL-XL and chain B is the BAD peptide extract side1, A// set_title side1, 1, BCL-XL extract side2, B// set_title side2, 1, BAD-PEPT dele tmp # define an interface selection select interf, (side1 w. 4.5 of side2) or (side2 w. 4.5 of side1) # orient the interface region perpendicular to the camera # with the long axis horizontal orient interf # now turn it so that the long axis is vertical turn z,90 # make sure side2 atoms are nearer to the camera (UGLY HACK) _=stored _.zz = [cmd.get_view()[2], cmd.get_view()[5], cmd.get_view()[8]] _.z1 = 0.0 _.z2 = 0.0 cmd.iterate_state(1,"interf & side1","_.z1 = _.z1 + x * _.zz[0] + y * _.zz[1] + z * _.zz[2]") cmd.iterate_state(1,"interf & side2","_.z2 = _.z2 + x * _.zz[0] + y * _.zz[1] + z * _.zz[2]") z1 = _.z1 / cmd.count_atoms("interf & side1") z2 = _.z2 / cmd.count_atoms("interf & side2") del _ if z1>z2: cmd.turn("y",180) # compute the approximate window width in Angstroms (UGLY HACK) height_width = cmd.get_session()["main"][0:2] asp_ratio = float(height_width[0])/height_width[1] fov = float(cmd.get("field_of_view")) radius = -cmd.get_view()[11] height = radius * math.sin(math.pi * fov / 180.0) width = height * asp_ratio # translate side1 off to the right cmd.translate([width,0,0],"side1") # and rotate side2 by 180 degrees so that it faces us cmd.rotate("y",180,"side2") # then move the camera so as to be able to see both cmd.move("x",-width/2) cmd.move("z",-radius) cmd.origin("center") # hide the selection indicator disable interf # adjust the clipping parameters clip atoms, 3, interf set fog_start, 0.7 # set colors and representations color white color orange, interf as surface bg white # and render ray