# Class: GLModel

## $3Dmol. GLModel

#### new GLModel(mid, defaultcolors)

  GLModel represents a group of related atoms

  ##### Parameters:

  Name | Type | Argument | Description
  --- | --- | --- | ---
  `mid` | number | <optional> |
  `defaultcolors` | Object | <optional> | Object defining default atom colors as atom => color property value pairs

  See:
    - $3Dmol.download

### Methods

#### <static> setColorByProperty(sel, prop, gradient)

  ##### Parameters:

  Name | Type | Description
  --- | --- | ---
  `sel` | type |
  `prop` | type |
  `gradient` | type |

#### addAtoms(newatoms)

  Add list of new atoms to model. Adjusts bonds appropriately.

  ##### Parameters:

  Name | Type | Description
  --- | --- | ---
  `newatoms` | type |

  ##### Example

      var atoms = [{elem: 'C', x: 0, y: 0, z: 0, bonds: [1,2], bondOrder: [1,2]}, {elem: 'O', x: -1.5, y: 0, z: 0, bonds: [0]},{elem: 'O', x: 1.5, y: 0, z: 0, bonds: [0], bondOrder: [2]}];

                  viewer.setBackgroundColor(0xffffffff);
                  var m = viewer.addModel();
                  m.addAtoms(atoms);
                  m.setStyle({},{stick:{}});
                  viewer.zoomTo();
                  viewer.render();

#### addAtomSpecs(customAtomSpecs)

  add atomSpecs to validAtomSelectionSpecs

  ##### Parameters:

  Name | Type | Description
  --- | --- | ---
  `customAtomSpecs` | Array | array of strings that can be used as atomSelectionSpecs this is to prevent the 'Unknown Selector x' message on the console for the strings passed

#### addFrame(atom)

  Add atoms as frames of model

  ##### Parameters:

  Name | Type | Description
  --- | --- | ---
  `atom` | AtomSpec | atoms to be added

#### addMolData(data, format, options)

  add atoms to this model from molecular data string

  ##### Parameters:

  Name | Type | Description
  --- | --- | ---
  `data` | string | ArrayBuffer | atom structure file input data string, for gzipped input use ArrayBuffer
  `format` | string | input file string format (e.g 'pdb', 'sdf', 'sdf.gz', etc.)
  `options` | ParserOptionsSpec | format dependent options. Attributes depend on the input format

#### addPropertyLabels(prop, sel, viewer, options)

  Create labels for atoms that show the value of the passed property.

  ##### Parameters:

  Name | Type | Description
  --- | --- | ---
  `prop` | String | property name
  `sel` | AtomSelectionSpec |
  `viewer` | $3Dmol.GLViewer |
  `options` | LabelSpec |

#### addResLabels(sel, viewer, options, byframe)

  Create labels for residues of selected atoms.
  Will create a single label at the center of mass of all atoms
  with the same chain,resn, and resi.

  ##### Parameters:

  Name | Type | Description
  --- | --- | ---
  `sel` | AtomSelectionSpec |
  `viewer` | $3Dmol.GLViewer |
  `options` | LabelSpec |
  `byframe` | boolean | if true, create labels for every individual frame, not just current; frames must be loaded already

#### atomIsSelected(atom, sel) → {boolean}

  given a selection specification, return true if atom is selected.
  Does not support context-aware selectors like expand/within/byres.

  ##### Parameters:

  Name | Type | Description
  --- | --- | ---
  `atom` | AtomSpec |
  `sel` | AtomSelectionSpec |

  ##### Returns:

  Type
    boolean

#### exportVRML()

  return a VRML string representation of the model. Does not include VRML header information

  ##### Returns:

  VRML

#### getCrystData()

  Returns crystallographic information if present.

#### getID() → {number}

  Returns model id number

  ##### Returns:

  Model ID

  Type
    number

#### getInternalState()

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

#### getNumFrames() → {number}

  Returns model's frames property, a list of atom lists

  ##### Returns:

  Type
    number

#### getSymmetries() → {Array.<$3Dmol.Matrix4>}

  Returns list of rotational/translational matrices if there is BIOMT data
  Otherwise returns a list of just the ID matrix

  ##### Returns:

  Type
    Array.<$3Dmol.Matrix4>

#### globj(group, Object)

  manage the globj for this model in the possed modelGroup - if it has to be regenerated, remove and add

  ##### Parameters:

  Name | Type | Description
  --- | --- | ---
  `group` | $3Dmol.Object3D |
  `Object` |  | options

#### hide()

  ##### Example

      $3Dmol.download("pdb:3ucr",viewer,{},function(){
                  viewer.setStyle({},{stick:{}});
                  viewer.getModel().hide();
                  viewer.render();
                  });

#### removeAtoms(badatoms) → {removeAtoms}

  Remove specified atoms from model

  ##### Parameters:

  Name | Type | Description
  --- | --- | ---
  `badatoms` | type | list of atoms

  ##### Returns:

  Type
    removeAtoms

#### removegl(group)

  Remove any renderable mol object from scene

  ##### Parameters:

  Name | Type | Description
  --- | --- | ---
  `group` | $3Dmol.Object3D |

#### selectedAtoms(sel) → {Array.<Object>}

  return list of atoms selected by sel, this is specific to glmodel

  ##### Parameters:

  Name | Type | Description
  --- | --- | ---
  `sel` | AtomSelectionSpec |

  ##### Returns:

  Type
    Array.<Object>

  ##### Example

      $3Dmol.download("pdb:4wwy",viewer,{},function(){
                        var atoms = viewer.selectedAtoms({chain:'A'});
                        for(var i = 0, n = atoms.length; i < n; i++) {
                           atoms[i].b = 0.0;
                        }
                        viewer.setStyle({cartoon:{colorscheme:{prop:'b',gradient: 'roygb',min:0,max:30}}});
                        viewer.render();
                    });

#### setClickable(sel, clickable, callback)

  Set clickable and callback of selected atoms

  ##### Parameters:

  Name | Type | Description
  --- | --- | ---
  `sel` | AtomSelectionSpec | atom selection to apply clickable settings to
  `clickable` | boolean | whether click-handling is enabled for the selection
  `callback` | function | function called when an atom in the selection is clicked

#### setColorByElement(sel, colors)

  given a mapping from element to color, set atom colors

  ##### Parameters:

  Name | Type | Description
  --- | --- | ---
  `sel` | type |
  `colors` | type |

#### setColorByFunction(sel, func)

  ##### Parameters:

  Name | Type | Description
  --- | --- | ---
  `sel` | type | selection object
  `func` | type | function to be used to set the color

  Deprecated:
    - use setStyle and colorfunc attribute

  ##### Example

      $3Dmol.download("pdb:4UAA",viewer,{},function(){
                        viewer.setBackgroundColor(0xffffffff);
                        var colorAsSnake = function(atom) {
                          return atom.resi % 2 ? 'white': 'green'
                        };

                        viewer.setStyle( {}, { cartoon: {colorfunc: colorAsSnake }});

                        viewer.render();
                    });

#### setCoordinates(str, format)

  Set coordinates for the atoms from provided trajectory file.

  ##### Parameters:

  Name | Type | Description
  --- | --- | ---
  `str` | string | contains the data of the file
  `format` | string | contains the format of the file

#### setCoordinatesFromURL(url, path) → {Promise}

  Set coordinates from remote trajectory file.

  ##### Parameters:

  Name | Type | Description
  --- | --- | ---
  `url` | string | contains the url where mdsrv has been hosted
  `path` | string | contains the path of the file (/filename)

  ##### Returns:

  Type
    Promise

#### setCrystData(a, b, c, alpha, beta, gamma)

  Returns crystallographic information if present.

  ##### Parameters:

  Name | Type | Description
  --- | --- | ---
  `a` | number | length of unit cell side
  `b` | number | length of unit cell side
  `c` | number | length of unit cell side
  `alpha` | number | unit cell angle in degrees (default 90)
  `beta` | number | unit cell angle in degrees (default 90)
  `gamma` | number | unit cell angle in degrees (default 90)

#### setFrame(framenum) → {Promise}

  Sets model's atomlist to specified frame
  Sets to last frame if framenum out of range

  ##### Parameters:

  Name | Type | Description
  --- | --- | ---
  `framenum` | number | model's atoms are set to this index in frames list

  ##### Returns:

  Type
    Promise

#### setHoverable(sel, hoverable, hover_callback, unhover_callback)

  Set hoverable and callback of selected atoms

  ##### Parameters:

  Name | Type | Description
  --- | --- | ---
  `sel` | AtomSelectionSpec | atom selection to apply hoverable settings to
  `hoverable` | boolean | whether hover-handling is enabled for the selection
  `hover_callback` | function | function called when an atom in the selection is hovered over
  `unhover_callback` | function | function called when the mouse moves out of the hover area

#### setInternalState()

  Overwrite the internal model state with the passed state.

#### setStyle(sel, style, add)

  Set atom style of selected atoms

  ##### Parameters:

  Name | Type | Description
  --- | --- | ---
  `sel` | AtomSelectionSpec |
  `style` | AtomStyleSpec |
  `add` | boolean | if true, add to current style, don't replace

  ##### Example

      $3Dmol.download("pdb:4UB9",viewer,{},function(){
                        viewer.setBackgroundColor(0xffffffff);

                        viewer.setStyle({chain:'A'},{line:{hidden:true,colorscheme:{prop:'b',gradient: new $3Dmol.Gradient.Sinebow($3Dmol.getPropertyRange(viewer.selectedAtoms(),'b'))}}});
                        viewer.setStyle({chain:'B'},{line:{colorscheme:{prop:'b',gradient: new $3Dmol.Gradient.Sinebow($3Dmol.getPropertyRange(viewer.selectedAtoms(),'b'))}}});
                        viewer.setStyle({chain:'C'},{cross:{hidden:true,colorscheme:{prop:'b',gradient: new $3Dmol.Gradient.Sinebow($3Dmol.getPropertyRange(viewer.selectedAtoms(),'b'))}}});
                        viewer.setStyle({chain:'D'},{cross:{colorscheme:{prop:'b',gradient: new $3Dmol.Gradient.RWB($3Dmol.getPropertyRange(viewer.selectedAtoms(),'b'))}}});
                        viewer.setStyle({chain:'E'},{cross:{radius:2.0,colorscheme:{prop:'b',gradient: new $3Dmol.Gradient.RWB($3Dmol.getPropertyRange(viewer.selectedAtoms(),'b'))}}});
                        viewer.setStyle({chain:'F'},{stick:{hidden:true,colorscheme:{prop:'b',gradient: new $3Dmol.Gradient.RWB($3Dmol.getPropertyRange(viewer.selectedAtoms(),'b'))}}});
                        viewer.setStyle({chain:'G'},{stick:{radius:0.8,colorscheme:{prop:'b',gradient: new $3Dmol.Gradient.ROYGB($3Dmol.getPropertyRange(viewer.selectedAtoms(),'b'))}}});
                        viewer.setStyle({chain:'H'},{stick:{singleBonds:true,colorscheme:{prop:'b',gradient: new $3Dmol.Gradient.ROYGB($3Dmol.getPropertyRange(viewer.selectedAtoms(),'b'))}}});
                        viewer.render();
                    });

#### setSymmetries(list)

  Sets symmetries based on specified matrices in list

  ##### Parameters:

  Name | Type | Description
  --- | --- | ---
  `list` | Array.<$3Dmol.Matrix4> |

#### show()

  ##### Example

      $3Dmol.download("pdb:3ucr",viewer,{},function(){
                  viewer.setStyle({},{stick:{}});
                  viewer.getModel().hide();
                  viewer.render(  )
                  viewer.getModel().show()
                  viewer.render();
                  });

#### toCDObject(whether) → {Object}

  Convert the model into an object in the format of a ChemDoodle JSON model.

  ##### Parameters:

  Name | Type | Description
  --- | --- | ---
  `whether` | boolean | or not to include style information. Defaults to false.

  ##### Returns:

  Type
    Object

#### vibrate(numFrames, amplitude, bothWays, viewer, arrowSpec)

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

  ##### Parameters:

  Name | Type | Description
  --- | --- | ---
  `numFrames` | number | number of frames to be created, default to 10
  `amplitude` | number | amplitude of distortion, default to 1 (full)
  `bothWays` | boolean | if true, extend both in positive and negative directions by numFrames
  `viewer` | GLViewer | required if arrowSpec is provided
  `arrowSpec` | ArrowSpec | specification for drawing animated arrows. If color isn't specified, atom color (sphere, stick, line preference) is used.

  ##### Example

      $3Dmol.download("pdb:4UAA",viewer,{},function(){
                  viewer.setStyle({},{stick:{}});
                  viewer.vibrate(10, 1);
                  viewer.animate({loop: "forward",reps: 1});

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