GLViewer

WebGL-based 3Dmol.js viewer
Note: The preferred method of instantiating a GLViewer is through createViewer

Constructor

new GLViewer()

Classes

GLViewer

Members

userContextMenuHandler

User specified function for handling a context menu event.
Handler is passed the selected object, x and y in canvas coordinates,
and original event.

userContextMenuHandler :function|null

User specified function for handling a context menu event.
Handler is passed the selected object, x and y in canvas coordinates,
and original event.

Type:
  • function | null

Methods

addArrow(spec) → {GLShape}

Create and add arrow shape

Parameters:
NameTypeDescription
specArrowSpec

Style specification

Returns:
Type: 
GLShape
Example
$3Dmol.download("pdb:4DM7",viewer,{},function(){

              viewer.setBackgroundColor(0xffffffff);
              viewer.addArrow({
                  start: {x:-10.0, y:0.0, z:0.0},
                  end: {x:0.0, y:-10.0, z:0.0},
                  radius: 1.0,
                  radiusRadio:1.0,
                  mid:1.0,
                  clickable:true,
                  callback:function(){
                      this.color.setHex(0xFF0000FF);
                      viewer.render( );
                  }
              });
              viewer.render();
            });

addAsOneMolecule(data, format) → {GLModel}

Create and add model to viewer. Given multimodel file and its format,
all atoms are added to one model

Parameters:
NameTypeDescription
datastring

Input data

formatstring

Input format (see FileFormats)

Returns:
Type: 
GLModel
Example
$3Dmol.get('../test_structs/multiple.sdf', function(data){
              viewer.addAsOneMolecule(data, "sdf");
              viewer.zoomTo();
              viewer.render();
          });

addBox(spec) → {GLShape}

Create and add box shape. This method provides a shorthand
way to create a box shape object

Parameters:
NameTypeDescription
specBoxSpec

Box shape style specification

Returns:
Type: 
GLShape
Example
viewer.addLine({color:'red',start:{x:0,y:0,z:0},end:{x:5,y:0,z:0}});
     viewer.addLine({color:'blue',start:{x:0,y:0,z:0},end:{x:0,y:5,z:0}});
     viewer.addLine({color:'green',start:{x:0,y:0,z:0},end:{x:0,y:0,z:5}});

     viewer.addBox({center:{x:0,y:0,z:0},dimensions: {w:3,h:4,d:2},color:'magenta'});
     viewer.zoomTo();
     viewer.rotate(45, {x:1,y:1,z:1});
     viewer.render();

addCurve(spec) → {GLShape}

Create and add Curve shape

Parameters:
NameTypeDescription
specCurveSpec

Style specification

Returns:
Type: 
GLShape
Example
viewer.addCurve({points: [{x:0.0,y:0.0,z:0.0}, {x:5.0,y:3.0,z:0.0}, {x:5.0,y:7.0,z:0.0}, {x:0.0,y:10.0,z:0.0}],
                              radius:0.5,
                              smooth: 10,
                              fromArrow:false,
                              toArrow: true,
                              color:'orange',
                              });
          viewer.addCurve({points: [{x:-1,y:0.0,z:0.0}, {x:-5.0,y:5.0,z:0.0}, {x:-2,y:10.0,z:0.0}],
                              radius:1,
                              fromArrow:true,
                              toArrow: false,
                              color:'purple',
                              });
          viewer.zoomTo();
          viewer.render();

addCustom(spec) → {GLShape}

Add custom shape component from user supplied function

Parameters:
NameTypeDescription
specCustomSpec

Style specification

Returns:
Type: 
GLShape
Example
function triangle(viewer) {
        var vertices = [];
        var normals = [];
        var colors = [];
        var r = 20;
        //triangle
        vertices.push(new $3Dmol.Vector3(0,0,0));
        vertices.push(new $3Dmol.Vector3(r,0,0));
        vertices.push(new $3Dmol.Vector3(0,r,0));

        normals.push(new $3Dmol.Vector3(0,0,1));
        normals.push(new $3Dmol.Vector3(0,0,1));
        normals.push(new $3Dmol.Vector3(0,0,1));

        colors.push({r:1,g:0,b:0});
        colors.push({r:0,g:1,b:0});
        colors.push({r:0,g:0,b:1});

        var faces = [ 0,1,2 ];

        var spec = {vertexArr:vertices, normalArr: normals, faceArr:faces,color:colors};
        viewer.addCustom(spec);
    }
    triangle(viewer);
    viewer.render();

addCylinder(spec) → {GLShape}

Create and add cylinder shape

Parameters:
NameTypeDescription
specCylinderSpec

Style specification

Returns:
Type: 
GLShape
Example
viewer.setBackgroundColor(0xffffffff);
          viewer.addCylinder({start:{x:0.0,y:0.0,z:0.0},
                              end:{x:10.0,y:0.0,z:0.0},
                              radius:1.0,
                              fromCap:1,
                              toCap:2,
                              color:'red',
                              hoverable:true,
                              clickable:true,
                              callback:function(){ this.color.setHex(0x00FFFF00);viewer.render( );},
                              hover_callback: function(){ viewer.render( );},
                              unhover_callback: function(){ this.color.setHex(0xFF000000);viewer.render( );}
                             });
          viewer.addCylinder({start:{x:0.0,y:2.0,z:0.0},
                              end:{x:0.0,y:10.0,z:0.0},
                              radius:0.5,
                              fromCap:false,
                              toCap:true,
                              color:'teal'});
          viewer.addCylinder({start:{x:15.0,y:0.0,z:0.0},
                              end:{x:20.0,y:0.0,z:0.0},
                              radius:1.0,
                              color:'black',
                              fromCap:false,
                              toCap:false});
          viewer.render();

addIsosurface(data, spec) → {GLShape}

Construct isosurface from volumetric data. This is more flexible
than addVolumetricData, but can not be used with py3Dmol.

Parameters:
NameTypeDescription
dataVolumeData

volumetric data

specIsoSurfaceSpec

Shape style specification

Returns:
Type: 
GLShape
Example
$3Dmol.get('../test_structs/benzene-homo.cube', function(data){
              var voldata = new $3Dmol.VolumeData(data, "cube");
              viewer.addIsosurface(voldata, {isoval: 0.01,
                                             color: "blue"});
              viewer.addIsosurface(voldata, {isoval: -0.01,
                                             color: "red"});
              viewer.zoomTo();
              viewer.render();
            });

addLabel(text, options, sel, noshow) → {Label}

Add label to viewer

Parameters:
NameTypeDescription
textstring

Label text

optionsLabelSpec

Label style specification

selAtomSelection

Set position of label to center of this selection

noshowboolean

if true, do not immediately display label - when adding multiple labels this is more efficient

Returns:
Type: 
Label
Example
$3Dmol.download("pdb:2EJ0",viewer,{},function(){

              viewer.addLabel("Aromatic", {position: {x:-6.89, y:0.75, z:0.35}, backgroundColor: 0x800080, backgroundOpacity: 0.8});
              viewer.addLabel("Label",{font:'sans-serif',fontSize:18,fontColor:'white',fontOpacity:1,borderThickness:1.0,
                                       borderColor:'red',borderOpacity:0.5,backgroundColor:'black',backgroundOpacity:0.5,
                                       position:{x:50.0,y:0.0,z:0.0},inFront:true,showBackground:true});
              viewer.setStyle({chain:'A'},{cross:{hidden:true}});
              viewer.setStyle({chain:'B'},{cross:{hidden:false,
                                                  linewidth:1.0,
                                                  colorscheme:'greenCarbon'}});
              viewer.setStyle({chain:'C'},{cross:{hidden:false,
                                                  linewidth:1.0,
                                                  radius:0.5}});
              viewer.setStyle({chain:'D'},{cross:{hidden:false,
                                                  linewidth:10.0}});
              viewer.setStyle({chain:'E'},{cross:{hidden:false,
                                                  linewidth:1.0,
                                                  color:'black'}});

              viewer.render();


            });

addLine(spec) → {GLShape}

Create and add line shape

Parameters:
NameTypeDescription
specLineSpec

Style specification, can specify dashed, dashLength, and gapLength

Returns:
Type: 
GLShape
Example
$3Dmol.download("pdb:2ABJ",viewer,{},function(){

              viewer.setViewStyle({style:"outline"});
              viewer.setStyle({chain:'A'},{sphere:{hidden:true}});
              viewer.setStyle({chain:'D'},{sphere:{radius:3.0}});
              viewer.setStyle({chain:'G'},{sphere:{colorscheme:'greenCarbon'}});
              viewer.setStyle({chain:'J'},{sphere:{color:'blue'}});
              viewer.addLine({dashed:true,start:{x:0,y:0,z:0},end:{x:100,y:100,z:100}});
              viewer.render();
          });

addLineDashed(spec, s)

Add dashed line to shape

Parameters:
NameTypeDescription
specCylinderSpec
sGLShape

addMesh(mesh, style) → {number}

Adds an explicit mesh as a surface object.

Parameters:
NameTypeDescription
meshMesh
styleObject
Returns:

surfid

Type: 
number

addModel(data, format, options) → {GLModel}

Create and add model to viewer, given molecular data and its format

Parameters:
NameTypeDescription
datastring

Input data

formatstring

Input format ('pdb', 'sdf', 'xyz', 'pqr', or 'mol2')

optionsParserOptionsSpec

format dependent options. Attributes depend on the input file format.

Returns:
Type: 
GLModel
Example
viewer.setViewStyle({style:"outline"});
          $3Dmol.get('data/1fas.pqr', function(data){
              viewer.addModel(data, "pqr");
              $3Dmol.get("data/1fas.cube",function(volumedata){
                  viewer.addSurface($3Dmol.SurfaceType.VDW, {opacity:0.85,voldata: new $3Dmol.VolumeData(volumedata, "cube"), volscheme: new $3Dmol.Gradient.RWB(-10,10)},{});

              viewer.render();
              });
              viewer.zoomTo();
          });

addModels(data, format) → {Array.<GLModel>}

Given multimodel file and its format, add atom data to the viewer as separate models
and return list of these models

Parameters:
NameTypeDescription
datastring

Input data

formatstring

Input format (see FileFormats)

Returns:
Type: 
Array.<GLModel>

addModelsAsFrames(data, format) → {GLModel}

Create and add model to viewer. Given multimodel file and its format,
different atomlists are stored in model's frame
property and model's atoms are set to the 0th frame

Parameters:
NameTypeDescription
datastring

Input data

formatstring

Input format (see FileFormats)

Returns:
Type: 
GLModel
Example
$3Dmol.get('../test_structs/multiple2.xyz', function(data){
              viewer.addModelsAsFrames(data, "xyz");
              viewer.animate({loop: "forward",reps: 1});
              viewer.setStyle({stick:{colorscheme:'magentaCarbon'}});
              viewer.zoomTo();
              viewer.render();
          });

addPropertyLabels(prop, sel, style)

Add property labels. This will generate one label per a selected
atom at the atom's coordinates with the property value as the label text.

Parameters:
NameTypeDescription
propstring

property name

selAtomSelectionSpec
styleAtomStyleSpec
  • @example
    $3Dmol.download("cid:5291",viewer,{},function(){
    viewer.setStyle({stick: {radius:.2}});
    viewer.addPropertyLabels("index",{not:{elem:'H'}}, {fontColor:'black',font: 'sans-serif', fontSize: 28, showBackground:false,alignment:'center'});
    viewer.zoomTo();
    viewer.render();
    });

addResLabels(sel, style, byframe)

Add residue labels. This will generate one label per a
residue within the selected atoms. The label will be at the
centroid of the atoms and styled according to the passed style.
The label text will be [resn][resi]

Parameters:
NameTypeDescription
selAtomSelectionSpec
styleAtomStyleSpec
byframeboolean

if true, create labels for every individual frame, not just current

Example
$3Dmol.download("mmtf:2ll5",viewer,{},function(){
              viewer.setStyle({stick:{radius:0.15},cartoon:{}});
              viewer.addResLabels({hetflag:false}, {font: 'Arial', fontColor:'black',showBackground:false, screenOffset: {x:0,y:0}});
              viewer.zoomTo();
              viewer.render();
            });

addShape(shapeSpec) → {GLShape}

Add shape object to viewer

Parameters:
NameTypeDescription
shapeSpecShapeSpec

style specification for label

See
Returns:
Type: 
GLShape

addSphere(spec) → {GLShape}

Create and add sphere shape. This method provides a shorthand
way to create a spherical shape object

Parameters:
NameTypeDescription
specSphereShapeSpec

Sphere shape style specification

Returns:
Type: 
GLShape
Example
viewer.addSphere({center:{x:0,y:0,z:0},radius:10.0,color:'red'});

     viewer.render();

addStyle(sel, style)

Add style properties to all selected atoms

Parameters:
NameTypeDescription
selAtomSelectionSpec

Atom selection specification. Can be omitted to select all

styleAtomStyleSpec

style spec to add to specified atoms

Example
$3Dmol.download('pdb:5IRE',viewer,{doAssembly: false},function(m) {
    viewer.setStyle({cartoon:{}});
    //keep cartoon style, but show thick sticks for chain A
    viewer.addStyle({chain:'A'},{stick:{radius:.5,colorscheme:"magentaCarbon"}});
    viewer.zoomTo();
    viewer.render();
    });

addSurface(type, style, atomsel, allsel, focus, surfacecallback) → {Promise}

Add surface representation to atoms

Parameters:
NameTypeDescription
typeSurfaceType | string

Surface type (VDW, MS, SAS, or SES)

styleSurfaceStyleSpec

optional style specification for surface material (e.g. for different coloring scheme, etc)

atomselAtomSelectionSpec

Show surface for atoms in this selection

allselAtomSelectionSpec

Use atoms in this selection to calculate surface; may be larger group than 'atomsel'

focusAtomSelectionSpec

Optionally begin rendering surface specified atoms

surfacecallbackfunction

function to be called after setting the surface

Returns:

promise - Returns a promise that ultimately resovles to the surfid. Returns surfid immediately if surfacecallback is specified. Returned promise has a [surfid, GLViewer, style, atomsel, allsel, focus] fields for immediate access.

Type: 
Promise

addUnitCell(model, spec)

Create and add unit cell visualization.

Parameters:
NameTypeDescription
modelGLModel | number

Model with unit cell information (e.g., pdb derived). If omitted uses most recently added model.

specUnitCellStyleSpec

visualization style

Example
$3Dmol.get('data/1jpy.cif', function(data) {
              let m = viewer.addModel(data);
              viewer.addUnitCell(m, {box:{color:'purple'},alabel:'X',blabel:'Y',clabel:'Z',alabelstyle: {fontColor: 'black',backgroundColor:'white',inFront:true,fontSize:40},astyle:{color:'darkred', radius:5,midpos: -10}});
              viewer.zoomTo();
              viewer.render();
    });

addVolumetricData(data, format, spec) → {GLShape}

Construct isosurface from volumetric data in gaussian cube format

Parameters:
NameTypeDescription
dataString

Input file contents

formatString

Input file format

specVolumetricRendererSpec | IsoSurfaceSpec

Shape style specification

Returns:
Type: 
GLShape
Example
$3Dmol.get('data/bohr.cube', function(data) {

    viewer.addVolumetricData(data, "cube", {isoval: -0.01, color: "red", opacity: 0.95});
    viewer.setStyle({cartoon:{},stick:{}});
    viewer.zoomTo();
    viewer.render();
    });

addVolumetricRender(data, spec) → {GLShape}

Create volumetric renderer for volumetricData

Parameters:
NameTypeDescription
dataVolumeData

volumetric data

specVolumetricRenderSpec

specification of volumetric render

Returns:
Type: 
GLShape

animate(options)

Animate all models in viewer from their respective frames

Parameters:
NameTypeDescription
optionsObject

can specify interval (speed of animation), loop (direction
of looping, 'backward', 'forward' or 'backAndForth'), step interval between frames ('step'), startFrame, and reps (numer of repetitions, 0 indicates infinite loop)

apngURI(nframes) → {Promise}

Return a promise that resolves to an animated PNG image URI of
viewer contents (base64 encoded) for nframes of viewer changes.

Parameters:
NameTypeDescription
nframesnumber
Returns:
Type: 
Promise

atomIsSelected(atom, sel) → {boolean}

Parameters:
NameTypeDescription
atomAtomSpec
selAtomSelectionSpec
Returns:
Type: 
boolean

carveUpExtent(extent, atomlist, atomstoshow) → {Array}

Parameters:
NameTypeDescription
extentArray
atomlistArray.<AtomSpec>
atomstoshowArray.<AtomSpec>
Returns:
Type: 
Array

center(selopt, animationDurationopt, fixedPathopt)

Re-center the viewer around the provided selection (unlike zoomTo, does not zoom).

Parameters:
NameTypeAttributesDescription
selAtomSelectionSpec<optional>

Selection specification specifying model and atom
properties to select. Default: all atoms in viewer

animationDurationnumber<optional>

an optional parameter that denotes
the duration of a zoom animation

fixedPathBoolean<optional>

if true animation is constrained to
requested motion, overriding updates that happen during the animation *

Example
// if the user were to pass the animationDuration value to
          // the function like so viewer.zoomTo({resn:'STI'},1000);
        //   the program would center on resn 'STI' over the course
        //   of 1 second(1000 milleseconds).
 // Reposition to centroid of all atoms of all models in this
//viewer glviewer.center();
    $3Dmol.get('data/4csv.pdb', function(data) {
    viewer.addModel(data,'pdb');
    viewer.setStyle({cartoon:{},stick:{}});
    viewer.center();
    viewer.render(callback);
    });

clear()

Clear scene of all objects

closeEnoughForClick(event, options)

Determine if a positioned event is "close enough" to mouseStart to be considered a click.
With a mouse, the position should be exact, but allow a slight delta for a touch interface.

Parameters:
NameTypeDescription
eventEvent
optionsObject

createModelFrom(sel, extractopt) → {GLModel}

Create a new model from atoms specified by sel.
If extract, removes selected atoms from existing models

Parameters:
NameTypeAttributesDescription
selAtomSelectionSpec

Atom selection specification

extractboolean<optional>

If true, remove selected atoms from existing models

Returns:
Type: 
GLModel

enableContextMenu(sel, contextMenuEnabled)

enable context menu and callback of selected atoms

Parameters:
NameTypeDescription
selAtomSelectionSpec

atom selection to apply hoverable settings to

contextMenuEnabledboolean

whether contextMenu-handling is enabled for the selection

enableFog(fog)

Enable/disable fog for content far from the camera

Parameters:
NameTypeDescription
fogboolean

whether to enable or disable the fog

exportJSON(includeStyles, modelID) → {string}

Export one or all of the loaded models into ChemDoodle compatible JSON.

Parameters:
NameTypeDescription
includeStylesboolean

Whether or not to include style information.

modelIDnumber

Optional parameter for which model to export. If left out, export all of them.

Returns:
Type: 
string

exportVRML()

return a VRML string representation of the scene. Include VRML header information

Returns:

VRML

fitSlab(sel)

Adjust slab to fully enclose selection (default everything).

Parameters:
NameTypeDescription
selAtomSelectionSpec

Selection specification specifying model and atom
properties to select. Default: all atoms in viewer

getAtomsFromSel(sel) → {Array.<AtomSpec>}

Parameters:
NameTypeDescription
selAtomSelectionSpec
Returns:
Type: 
Array.<AtomSpec>

getCanvas() → {HTMLCanvasElement}

Return underlying canvas element.

Returns:
Type: 
HTMLCanvasElement

getConfig()

Return configuration of viewer

getFrame()

Gets the current viewer frame.

getInternalState()

Return object representing internal state of
the viewer appropriate for passing to setInternalState

getModel(idopt) → {GLModel}

Return specified model

Parameters:
NameTypeAttributesDefaultDescription
idnumber<optional>
last model id

Retrieve model with specified id

Default Value
  • Returns last model added to viewer or null if there are no models
Returns:
Type: 
GLModel
Example
// Retrieve reference to first GLModel added var m =
   $3Dmol.download("pdb:1UBQ",viewer,{},function(m1){
              $3Dmol.download("pdb:1UBI", viewer,{}, function(m2) {
                viewer.zoomTo();
                m1.setStyle({cartoon: {color:'green'}});
                //could use m2 here as well
                viewer.getModel().setStyle({cartoon: {color:'blue'}});
                viewer.render();
            })
          });

getNumFrames() → {number}

Returns the number of frames that the model with the most frames in the viewer has

Returns:
Type: 
number

getPerceivedDistance() → {number}

Return the z distance between the model and the camera

Returns:

distance

Type: 
number

getRenderer()

Return renderer element.

getSlab() → {Object}

Get slab of view (contents outside of slab are clipped).

Properties
NameTypeDescription
nearnumber

near clipping plane distance

farnumber

far clipping plane distance

Returns:
Type: 
Object

getSurface(surf)

Return surface object

Parameters:
NameTypeDescription
surfnumber

surface id

getUniqueValues(attribute, sel) → {Array.<Object>}

Returns valid values for the specified attribute in the given selection

Parameters:
NameTypeDescription
attributestring
selAtomSelectionSpec
Returns:
Type: 
Array.<Object>

getView() → {Array.<number>}

Returns an array representing the current viewpoint.
Translation, zoom, and rotation quaternion.

Returns:

[ pos.x, pos.y, pos.z, rotationGroup.position.z, q.x, q.y, q.z, q.w ]

Type: 
Array.<number>

hasVolumetricRender() → {boolean}

Return true if volumetric rendering is supported (WebGL 2.0 required)

Returns:
Type: 
boolean

isAnimated() → {boolean}

Return true if viewer is currently being animated, false otherwise

Returns:
Type: 
boolean

jmolMoveTo()

return Jmol moveto command to position this scene

linkViewer(otherview)

Synchronize this view matrix of this viewer to the passed viewer.
When the viewpoint of this viewer changes, the other viewer will
be set to this viewer's view.

Parameters:
NameTypeDescription
otherview$3Dmol.GLViewer

mapAtomProperties(props,, sel)

Add specified properties to all atoms matching input argument

Parameters:
NameTypeDescription
props,Object

either array of atom selectors with associated props, or function that takes atom and sets its properties

selAtomSelectionSpec

subset of atoms to work on - model selection must be specified here

Example
$3Dmol.get('../test_structs/b.sdf', function(data){
                  viewer.addModel(data,'sdf');
                  let props = [];
                  //make the atom index a property x
                  for(let i = 0; i < 8; i++) {
                    props.push({index:i,props:{'x':i}});
                  }
                  viewer.mapAtomProperties(props);
                  viewer.setStyle({sphere:{colorscheme:{gradient:'roygb',prop:'x',min:0,max:8}}});
                  viewer.zoomTo();
                  viewer.render();
                });

modelToScreen() → {object|list}

Convert model coordinates to screen coordinates.

Parameters:
TypeDescription
object | list

an object or list of objects with x,y,z attributes (e.g. an atom)

Returns:
  • and object or list of {x: screenX, y: screenY}
Type: 
object | list

pauseAnimate()

Pause animation of all models in viewer

pdbData(sel) → {string}

Return pdb output of selected atoms (if atoms from pdb input)

Parameters:
NameTypeDescription
selAtomSelectionSpec

Selection specification specifying model and atom properties to select. Default: all atoms in viewer

Returns:

PDB string of selected atoms

Type: 
string

pngURI()

Return image URI of viewer contents (base64 encoded). *

removeAllLabels()

Remove all labels from viewer

Example
$3Dmol.download("pdb:1ubq",viewer,{},function(){

           viewer.addResLabels();
           viewer.setStyle({},{stick:{}});
           viewer.render( ); //show labels

           viewer.removeAllLabels();
           viewer.render(); //hide labels
    });

removeAllModels()

Delete all existing models

removeAllShapes()

Remove all shape objects from viewer

removeAllSurfaces()

Remove all surfaces.

removeLabel(label)

Remove label from viewer

Parameters:
NameTypeDescription
labelLabel

$3Dmol label

Example
// Remove labels created in
     $3Dmol.download("pdb:2EJ0",viewer,{},function(){
              var toremove = viewer.addLabel("Aromatic", {position: {x:-6.89, y:0.75, z:0.35}, backgroundColor: 0x800080, backgroundOpacity: 0.8});
              viewer.addLabel("Label",{font:'sans-serif',fontSize:18,fontColor:'white',fontOpacity:1,borderThickness:1.0,
                                       borderColor:'red',borderOpacity:0.5,backgroundColor:'black',backgroundOpacity:0.5,
                                       position:{x:50.0,y:0.0,z:0.0},inFront:true,showBackground:true});
              viewer.removeLabel(toremove);
              viewer.render();


            });

removeModel(model)

Delete specified model from viewer

Parameters:
NameTypeDescription
modelGLModel | number

removeShape(shape)

Remove shape object from viewer

Parameters:
NameTypeDescription
shapeGLShape

Reference to shape object to remove

removeSurface(surf)

Remove surface with given ID

Parameters:
NameTypeDescription
surfnumber

surface id

removeUnitCell(model)

Remove unit cell visualization from model.

Parameters:
NameTypeDescription
modelGLModel | number

Model with unit cell information (e.g., pdb derived). If omitted uses most recently added model.

Example
$3Dmol.get('data/icsd_200866.cif', function(data) {
             let m = viewer.addModel(data);
             viewer.setStyle({sphere:{}})
             viewer.addUnitCell();
             viewer.zoomTo();
             viewer.removeUnitCell();
             viewer.render();
       });

render(callbackopt, extsopt)

Render current state of viewer, after
adding/removing models, applying styles, etc.

Parameters:
NameTypeAttributesDescription
callback<optional>
exts<optional>

replicateUnitCell(A, B, C, model, addBonds, prune)

Replicate atoms in model to form a super cell of the specified dimensions.
Original cell will be centered as much as possible.

Parameters:
NameTypeDescription
Ainteger

number of times to replicate cell in X dimension.

Binteger

number of times to replicate cell in Y dimension. If absent, X value is used.

Cinteger

number of times to replicate cell in Z dimension. If absent, Y value is used.

modelGLModel

Model with unit cell information (e.g., pdb derived). If omitted uses most recently added model.

addBondsboolean

Create bonds between unit cells based on distances.

pruneboolean

Keep only atoms that are within the original unit cell (i.e., on edges). Alternatively, call replicateUnitCell(1).

Example
$3Dmol.get('data/icsd_200866.cif', function(data) {
             let m = viewer.addModel(data);
             viewer.setStyle({sphere:{scale:.25}})
             viewer.addUnitCell();
             viewer.zoomTo();
             viewer.replicateUnitCell(3,2,1,m);
             viewer.render();
       });

resize()

Resize viewer according to containing HTML element's dimensions

resumeAnimate()

Resume animation of all models in viewer

rotate(angleopt, axisopt, animationDurationopt, fixedPathopt)

Rotate scene by angle degrees around axis

Parameters:
NameTypeAttributesDescription
anglenumber<optional>

Angle, in degrees, to rotate by.

axisstring<optional>

Axis ("x", "y", "z", "vx", "vy", or "vz") to rotate around.
Default "y". View relative (rather than model relative) axes are prefixed with v.
Axis can also be specified as a vector.

animationDurationnumber<optional>

an optional parameter that denotes
the duration of the rotation animation. Default 0 (no animation)

fixedPathboolean<optional>

if true animation is constrained to
requested motion, overriding updates that happen during the animation *

Example
$3Dmol.download('cid:4000', viewer, {}, function() {
    viewer.setStyle({stick:{}});
    viewer.zoomTo();
    viewer.rotate(90,'y',1);
    viewer.render(callback);
    });

screenOffsetToModel()

For a given screen (x,y) displacement return model displacement

screenToModelDistance()

Distance from screen coordinate to model coordinate assuming screen point
is projected to the same depth as model coordinate

selectedAtoms(sel) → {Array.<AtomSpec>}

return list of atoms selected by sel

Parameters:
NameTypeDescription
selAtomSelectionSpec
Returns:
Type: 
Array.<AtomSpec>

setAutoEyeSeparation(isright, x) → {number}

Used for setting an approx value of eyeSeparation. Created for calling by StereoViewer object

Parameters:
NameTypeDescription
isrightboolean
xnumber
Returns:

camera x position

Type: 
number

setBackgroundColor(hex, a)

Set the background color (default white)

Parameters:
NameTypeDescription
hexnumber

Hexcode specified background color, or standard color spec

anumber

Alpha level (default 1.0)

Example
viewer.setBackgroundColor(0x000000);

setCameraParameters()

Set camera parameters (distance to the origin and field of view)

Parameters:
TypeDescription
parameters

new camera parameters, with possible fields
being fov for the field of view, z for the
distance to the origin, and orthographic (boolean)
for kind of projection (default false).

Example
$3Dmol.get("data/set1_122_complex.mol2", function(data) {
            var m = viewer.addModel(data);
            viewer.setStyle({stick:{}});
            viewer.zoomTo();
            viewer.setCameraParameters({ fov: 10 , z: 300 });
            viewer.render();
        });

setClickable(sel, clickable, callback)

Set click-handling properties to all selected atoms. Important: render must be called for this to take effect.

Parameters:
NameTypeDescription
selAtomSelectionSpec

atom selection to apply clickable settings to

clickableboolean

whether click-handling is enabled for the selection

callbackfunction

function called when an atom in the selection is clicked. The function is passed
the selected (foremost) object, the viewer, the triggering event, the associated container, and a list
of all intersecting objects with their distances from the viewer.

Example
$3Dmol.download("cid:307900",viewer,{},function(){

               viewer.setStyle({},{sphere:{}});
               viewer.setClickable({},true,function(atom,viewer,event,container) {
                   viewer.addLabel(atom.resn+":"+atom.atom,{position: atom, backgroundColor: 'darkgreen', backgroundOpacity: 0.8});
               });
               viewer.render();
    });

setColorByElement(sel, colors)

Parameters:
NameTypeDescription
selAtomSelectionSpec
colorsobject

setColorByProperty(sel, prop, scheme, range)

Parameters:
NameTypeDescription
selAtomSelectionSpec
propstring
schemeGradient | string
rangeobject

setConfig(c)

Set the configuration object. Note that some setting may only
have an effect at viewer creation time.

Parameters:
NameTypeDescription
c

setContainer(element)

Change the viewer's container element
Also useful if the original container element was removed from the DOM.

Parameters:
NameTypeDescription
elementObject | string

Either HTML element or string identifier. Defaults to the element used to initialize the viewer.

setDefaultCartoonQuality(val)

Set the default cartoon quality for newly created models. Default is 5.
Current models are not affected.

Parameters:
NameTypeDescription
valnumber

setFrame(framenum) → {Promise}

Sets the atomlists of all models in the viewer to specified frame.
Shapes and labels can also be displayed by frame.
Sets to last frame if framenum out of range

Parameters:
NameTypeDescription
framenumnumber

fame index to use, starts at zero

Returns:
Type: 
Promise

setHeight(h)

Set viewer height independently of the HTML container. This is probably not what you want.

Parameters:
NameTypeDescription
hnumber

Height in pixels

setHoverDuration(hoverDurationopt)

Set the duration of the hover delay

Parameters:
NameTypeAttributesDescription
hoverDurationnumber<optional>

an optional parameter that denotes
the duration of the hover delay (in milliseconds) before the hover action is called

setHoverable(sel, hoverable, hover_callback, unhover_callback)

Set hoverable and callback of selected atoms

Parameters:
NameTypeDescription
selAtomSelectionSpec

atom selection to apply hoverable settings to

hoverableboolean

whether hover-handling is enabled for the selection

hover_callbackfunction

function called when an atom in the selection is hovered over. The function has the same signature as a click handler.

unhover_callbackfunction

function called when the mouse moves out of the hover area

Example
$3Dmol.download("pdb:1ubq",viewer,{},function(){

           viewer.setHoverable({},true,function(atom,viewer,event,container) {
               if(!atom.label) {
                atom.label = viewer.addLabel(atom.resn+":"+atom.atom,{position: atom, backgroundColor: 'mintcream', fontColor:'black'});
               }
           },
           function(atom) {
               if(atom.label) {
                viewer.removeLabel(atom.label);
                delete atom.label;
               }
            }
           );
           viewer.setStyle({},{stick:{}});
           viewer.render();
    });

setInternalState(state)

Overwrite internal state of the viewer with passed object
which should come from getInternalState.

Parameters:
NameTypeDescription
state

setLabelStyle(label, stylespec) → {Label}

Modify existing label's style

Parameters:
NameTypeDescription
labelLabel

$3Dmol label

stylespecLabelSpec

Label style specification

Returns:
Type: 
Label

setLabelText(label, text) → {Label}

Modify existing label's text

Parameters:
NameTypeDescription
labelLabel

$3Dmol label

textString

Label text

Returns:
Type: 
Label

setPerceivedDistance(dist)

Set the distance between the model and the camera
Essentially zooming. Useful while stereo rendering.

Parameters:
NameTypeDescription
distnumber

setProjection(proj)

Set view projection scheme. Either orthographic or perspective.
Default is perspective. Orthographic can also be enabled on viewer creation
by setting orthographic to true in the config object.

Parameters:
NameTypeDescription
proj
Example
viewer.setViewStyle({style:"outline"});
          $3Dmol.get('data/1fas.pqr', function(data){
              viewer.addModel(data, "pqr");
              $3Dmol.get("data/1fas.cube",function(volumedata){
                  viewer.addSurface($3Dmol.SurfaceType.VDW, {opacity:0.85,voldata: new $3Dmol.VolumeData(volumedata, "cube"), volscheme: new $3Dmol.Gradient.RWB(-10,10)},{});
              });
              viewer.zoomTo();

              viewer.setProjection("orthographic");
              viewer.render(callback);
          });

setSlab(near, far)

Set slab of view (contents outside of slab are clipped).
Must call render to update.

Parameters:
NameTypeDescription
nearnumber

near clipping plane distance

farnumber

far clipping plane distance

setStateChangeCallback(callback)

Set a callback to call when the view has potentially changed.

Parameters:
NameTypeDescription
callback

setStyle(sel, style)

Set style properties to all selected atoms

Parameters:
NameTypeDescription
selAtomSelectionSpec

Atom selection specification. Can be omitted to select all.

styleAtomStyleSpec

Style spec to apply to specified atoms

Example
viewer.setBackgroundColor(0xffffffff);
    $3Dmol.download('pdb:5IRE',viewer,{doAssembly: false},function(m) {
    m.setStyle({chain:'A'},{'cartoon':{color:'spectrum'}});
    m.setStyle({chain:'C'},{'cartoon':{style:'trace',color:'blue'}});
    m.setStyle({chain:'E'},{'cartoon':{tubes:true,arrows:true,color:'green',opacity:0.75}});
    m.setStyle({chain:'B'},{'cartoon':{color:'red',opacity:0.5}});
    m.setStyle({chain:'D'},{'cartoon':{style:'trace',color:'grey',opacity:0.75}});
    m.setStyle({chain:'F'},{'cartoon':{arrows:true,color:'white'}});
    // viewer.addStyle({chain:'B'},{line:{}});
    viewer.zoomTo();
    viewer.render();
    });

setSurfaceMaterialStyle(surf, style)

Set the surface material to something else, must render change

Parameters:
NameTypeDescription
surfnumber

Surface ID to apply changes to

styleSurfaceStyleSpec

new material style specification

Example
$3Dmol.get("data/9002806.cif",function(data){
        viewer.addModel(data);
        viewer.setStyle({stick:{}});
        let surf = viewer.addSurface("SAS");
        surf.then(function() {
            viewer.setSurfaceMaterialStyle(surf.surfid, {color:'blue',opacity:0.5});
            viewer.render();
            });
       });

setView(arg)

Sets the view to the specified translation, zoom, and rotation.

Parameters:
NameTypeDescription
argArray.<number>

Array formatted identically to the return value of getView

setViewChangeCallback(callback)

Set a callback to call when the view has potentially changed.

Parameters:
NameTypeDescription
callback

setViewStyle(parameters)

Set global view styles.

Parameters:
NameTypeDescription
parameters
Example
viewer.setViewStyle({style:"outline"});
          $3Dmol.get('data/1fas.pqr', function(data){
              viewer.addModel(data, "pqr");
              $3Dmol.get("data/1fas.cube",function(volumedata){
                  viewer.addSurface($3Dmol.SurfaceType.VDW, {opacity:0.85,voldata: new $3Dmol.VolumeData(volumedata, "cube"), volscheme: new $3Dmol.Gradient.RWB(-10,10)},{});
              });
              viewer.zoomTo();
              viewer.render(callback);
          });

setWidth(w)

Set viewer width independently of the HTML container. This is probably not what you want.

Parameters:
NameTypeDescription
wnumber

Width in pixels

setZoomLimits()

Set lower and upper limit stops for zoom.

Parameters:
TypeDescription
lower

limit on zoom in (positive number). Default 0.

upper

limit on zoom out (positive number). Default infinite.

Example
$3Dmol.get("data/set1_122_complex.mol2", function(moldata) {
            var m = viewer.addModel(moldata);
            viewer.setStyle({stick:{colorscheme:"Jmol"}});
            viewer.setZoomLimits(100,200);
            viewer.zoomTo();
            viewer.zoom(10); //will not zoom all the way
            viewer.render();
        });

spin(axis, speed)

Continuously rotate a scene around the specified axis.

Call spin(false) to stop spinning.

Parameters:
NameTypeDescription
axisstring | boolean | Array

[axis] - Axis ("x", "y", "z", "vx", "vy", or "vz") to rotate around.
Default "y". View relative (rather than model relative) axes are prefixed with v.

speednumber

[speed] - Speed multiplier for spinning the viewer. 1 is default and a negative
value reverses the direction of the spin.

stopAnimate()

Stop animation of all models in viewer

targetedObjects(x, y)

Return a list of objects that intersect that at the specified viewer position.

Parameters:
NameTypeDescription
x

x position in screen coordinates

y

y position in screen coordinates

Array.<Object>

list of objects or selection object specifying what object to check for targeting

translate(x, y, animationDurationopt, fixedPathopt)

Translate current view by x,y screen coordinates
This pans the camera rather than translating the model.

Parameters:
NameTypeAttributesDescription
xnumber

Relative change in view coordinates of camera

ynumber

Relative change in view coordinates of camera

animationDurationnumber<optional>

an optional parameter that denotes
the duration of a zoom animation

fixedPathBoolean<optional>

if true animation is constrained to
requested motion, overriding updates that happen during the animation *

Example
$3Dmol.get('data/4csv.pdb', function(data) {
    viewer.addModel(data,'pdb');
    viewer.setStyle({cartoon:{},stick:{}});
    viewer.zoomTo();
    viewer.translate(200,50);
    viewer.rotate(90,'z');
    viewer.render(callback);
    });

translateScene(x, y, animationDurationopt, fixedPathopt)

Translate current models by x,y screen coordinates
This translates the models relative to the current view. It does
not change the center of rotation.

Parameters:
NameTypeAttributesDescription
xnumber

Relative change in x screen coordinate

ynumber

Relative change in y screen coordinate

animationDurationnumber<optional>

an optional parameter that denotes
the duration of a zoom animation

fixedPathBoolean<optional>

if true animation is constrained to
requested motion, overriding updates that happen during the animation *

Example
$3Dmol.get('data/4csv.pdb', function(data) {
    viewer.addModel(data,'pdb');
    viewer.setStyle({cartoon:{},stick:{}});
    viewer.zoomTo();
    viewer.translateScene(200,50);
    viewer.rotate(90,'z'); // will no longer be around model center
    viewer.render(callback);
    });

vibrate(numFrames, amplitude, bothWays, arrowSpec)

If atoms have dx, dy, dz properties (in some xyz files), vibrate populates each model's frame property based on parameters.
Models can then be animated

Parameters:
NameTypeDescription
numFramesnumber

number of frames to be created, default to 10

amplitudenumber

amplitude of distortion, default to 1 (full)

bothWaysboolean

if true, extend both in positive and negative directions by numFrames

arrowSpecArrowSpec

specification for drawing animated arrows. If color isn't specified, atom color (sphere, stick, line preference) is used.

zoom(factoropt, animationDurationopt, fixedPathopt)

Zoom current view by a constant factor

Parameters:
NameTypeAttributesDescription
factornumber<optional>

Magnification factor. Values greater than 1
will zoom in, less than one will zoom out. Default 2.

animationDurationnumber<optional>

an optional parameter that denotes
the duration of a zoom animation

fixedPathBoolean<optional>

if true animation is constrained to
requested motion, overriding updates that happen during the animation

Example
$3Dmol.get('data/4csv.pdb', function(data) {
    viewer.addModel(data,'pdb');
    viewer.setStyle({cartoon:{},stick:{}});
    viewer.zoomTo()
    viewer.zoom(2,1000);
    viewer.render();
    });

zoomTo(selopt, animationDurationopt, fixedPathopt)

Zoom to center of atom selection. The slab will be set appropriately for
the selection, unless an empty selection is provided, in which case there will be no slab.

Parameters:
NameTypeAttributesDescription
selObject<optional>

Selection specification specifying model and atom
properties to select. Default: all atoms in viewer

animationDurationnumber<optional>

an optional parameter that denotes
the duration of a zoom animation

fixedPathBoolean<optional>

if true animation is constrained to
requested motion, overriding updates that happen during the animation *

Example
$3Dmol.get('data/1fas.pqr', function(data){
              viewer.addModel(data, "pqr");
              $3Dmol.get("data/1fas.cube",function(volumedata){
                  viewer.addSurface($3Dmol.SurfaceType.VDW, {
                      opacity:0.85,
                      voldata: new $3Dmol.VolumeData(volumedata, "cube"),
                      volscheme: new $3Dmol.Gradient.Sinebow($3Dmol.getPropertyRange(viewer.selectedAtoms(),'charge'))
                  },{});

              viewer.render();
              });
              viewer.zoomTo();
            });

(static) generateMeshSyncHelper(type, expandedExtent, extendedAtoms, atomsToShow, atoms, vol) → {Object}

Parameters:
NameTypeDescription
typeSurfaceType
expandedExtentArray
extendedAtomsArray.<AtomSpec>
atomsToShowArray.<AtomSpec>
atomsArray.<AtomSpec>
volnumber
Returns:
Type: 
Object

(static) generateSurfaceMesh(atoms, VandF, mat) → {Mesh}

Parameters:
NameTypeDescription
atomsArray.<AtomSpec>
VandFObject
matMeshLambertMaterial
Returns:
Type: 
Mesh

(static) getAtomsWithin(atomlist, extent) → {Array}

Parameters:
NameTypeDescription
atomlistArray.<AtomSpec>
extentArray
Returns:
Type: 
Array