layer5/PyMOL.h (379 lines of code) (raw):
/*
A* -------------------------------------------------------------------
B* This file contains source code for the PyMOL computer program
C* Copyright (c) Schrodinger, LLC.
D* -------------------------------------------------------------------
E* It is unlawful to modify or remove this copyright notice.
F* -------------------------------------------------------------------
G* Please see the accompanying LICENSE file for further information.
H* -------------------------------------------------------------------
I* Additional authors of this source file include:
-*
-*
-*
Z* -------------------------------------------------------------------
*/
#ifndef _H_CPyMOL
#define _H_CPyMOL
/* WARNING: DO NOT DEVELOP APPLICATIONS AGAINST THIS PyMOL_* API.
*
* This is a internal interface to PyMOL for the exclusive use of
* Schrodinger, LLC in development of PyMOL itself, for
* development of "wrapped" PyMOL products, and for use as foundation
* layer for support of stable public APIs.
*
* Schrodinger, LLC changes this interface regularly and without
* notice. It may even vanish altogether. Code you develop against
* this interface is likely to be fragile, time-consuming, and
* expensive to maintain.
*
* Our recommended public APIs for PyMOL development are Python-based:
* (#1) the old "from pymol import cmd" module-based interface, or
* (#2) the new "from pymol2 import PyMOL; cmd=PyMOL().cmd"
* instance-based interface. If you need a C, C++, Java, or
* ActiveX/COM interface or widget for molecular visualization, then
* please contact sales@pymol.org about obtaining access to our
* independent developer and/or OEM product APIs (e.g. JyMOL).
*
* If you feel that you absolutely must rely upon this PyMOL_* API,
* then please be sure to create your own lightweight wrapper layer
* around it so that the rest of your code will be relatively
* insensitive to changes made here. Failure to do so will almost
* certainly result in code that is impossible to maintain over time.
*
* You have been warned!
*/
#include "OVreturns.h"
#ifdef __cplusplus
extern "C" {
#endif
#define PYMOL_BUTTON_DOWN 0
#define PYMOL_BUTTON_UP 1
#define PYMOL_KEY_F1 1
#define PYMOL_KEY_F2 2
#define PYMOL_KEY_F3 3
#define PYMOL_KEY_F4 4
#define PYMOL_KEY_F5 5
#define PYMOL_KEY_F6 6
#define PYMOL_KEY_F7 7
#define PYMOL_KEY_F8 8
#define PYMOL_KEY_F9 9
#define PYMOL_KEY_F10 10
#define PYMOL_KEY_F11 11
#define PYMOL_KEY_F12 12
#define PYMOL_KEY_LEFT 100
#define PYMOL_KEY_UP 101
#define PYMOL_KEY_RIGHT 102
#define PYMOL_KEY_DOWN 103
#define PYMOL_KEY_PAGE_UP 104
#define PYMOL_KEY_PAGE_DOWN 105
#define PYMOL_KEY_HOME 106
#define PYMOL_KEY_END 107
#define PYMOL_KEY_INSERT 108
#define PYMOL_BUTTON_LEFT 0
#define PYMOL_BUTTON_MIDDLE 1
#define PYMOL_BUTTON_RIGHT 2
#define PYMOL_BUTTON_SCROLL_FORWARD 3
#define PYMOL_BUTTON_SCROLL_REVERSE 4
#define PYMOL_MODIFIER_SHIFT 1
#define PYMOL_MODIFIER_CTRL 2
#define PYMOL_MODIFIER_ALT 4
#define PYMOL_FALSE 0
#define PYMOL_TRUE 1
#define PYMOL_DEFAULT -1
#define PYMOL_PROGRESS_SLOW 0
#define PYMOL_PROGRESS_MED 2
#define PYMOL_PROGRESS_FAST 4
#define PYMOL_PROGRESS_SIZE 6
#define PYMOL_RESHAPE_SIZE 5
/* configuration */
#ifndef CPyMOLOptions_DEFINED
typedef struct _CPyMOLOptions CPyMOLOptions;
#define CPyMOLOptions_DEFINED
#endif
CPyMOLOptions *PyMOLOptions_New(void);
void PyMOLOptions_Free(CPyMOLOptions * option);
CPyMOLOptions *PyMOLOptions_NewWithPython(int argc, char *argv[]);
/* PyMOL instance type */
#ifndef CPyMOL_DEFINED
typedef struct _CPyMOL CPyMOL;
#define CPyMOL_DEFINED
#endif
#define ATOM_PROP_MODEL 0
#define ATOM_PROP_INDEX 1
#define ATOM_PROP_TYPE 2
#define ATOM_PROP_NAME 3
#define ATOM_PROP_RESN 4
#define ATOM_PROP_RESI 5
#define ATOM_PROP_RESV 6
#define ATOM_PROP_CHAIN 7
#define ATOM_PROP_ALT 8
#define ATOM_PROP_SEGI 9
#define ATOM_PROP_ELEM 10
#define ATOM_PROP_SS 11
#define ATOM_PROP_TEXT_TYPE 12
#define ATOM_PROP_CUSTOM 13
#define ATOM_PROP_LABEL 14
#define ATOM_PROP_NUMERIC_TYPE 15
#define ATOM_PROP_Q 16
#define ATOM_PROP_B 17
#define ATOM_PROP_VDW 18
#define ATOM_PROP_ELEC_RADIUS 19
#define ATOM_PROP_PARTIAL_CHARGE 20
#define ATOM_PROP_FORMAL_CHARGE 21
#define ATOM_PROP_STEREO 22
#define ATOM_PROP_CARTOON 23
#define ATOM_PROP_COLOR 24
#define ATOM_PROP_ID 25
#define ATOM_PROP_RANK 26
#define ATOM_PROP_FLAGS 27
#define ATOM_PROP_GEOM 28
#define ATOM_PROP_VALENCE 29
#define ATOM_PROP_X 30
#define ATOM_PROP_Y 31
#define ATOM_PROP_Z 32
#define ATOM_PROP_SETTINGS 33
#define ATOM_PROP_PROPERTIES 34
#define ATOM_PROP_ONELETTER 40
/* return status values */
#define PyMOLstatus_YES 1
#define PyMOLstatus_NO 0
#define PyMOLstatus_SUCCESS 0
#define PyMOLstatus_FAILURE -1
/* return types */
typedef int PyMOLstatus;
typedef struct {
PyMOLstatus status;
} PyMOLreturn_status;
typedef struct {
PyMOLstatus status;
int value;
} PyMOLreturn_int;
typedef struct {
PyMOLstatus status;
float value;
} PyMOLreturn_float;
typedef struct {
PyMOLstatus status;
int size;
float *array;
} PyMOLreturn_float_array;
typedef struct {
PyMOLstatus status;
int size;
int *array;
} PyMOLreturn_int_array;
typedef struct {
PyMOLstatus status;
int size;
char **array;
} PyMOLreturn_string_array;
#define PYMOL_RETURN_VALUE_IS_STRING 0x01
#define PYMOL_RETURN_VALUE_IS_INT 0x02
#define PYMOL_RETURN_VALUE_IS_FLOAT 0x04
#define PYMOL_RETURN_VALUE_IS_FLOAT_ARRAY 0x08
typedef struct {
PyMOLstatus status;
short int type;
char *string;
int int_value;
float float_value;
int array_length;
float *float_array;
} PyMOLreturn_value;
typedef void PyMOLModalDrawFn(void *G);
/* creation */
CPyMOL *PyMOL_New(void);
CPyMOL *PyMOL_NewWithOptions(const CPyMOLOptions * option);
/* destruction */
void PyMOL_Free(CPyMOL * I);
/* starting and stopping */
void PyMOL_Start(CPyMOL * I);
void PyMOL_ConfigureShadersGL(CPyMOL * I);
void PyMOL_StartWithPython(CPyMOL * I);
void PyMOL_Stop(CPyMOL * I);
/* upstream invalidation and configuration events */
void PyMOL_NeedFakeDrag(CPyMOL * I);
void PyMOL_NeedRedisplay(CPyMOL * I);
void PyMOL_NeedSwap(CPyMOL * I);
void PyMOL_SetClickReady(CPyMOL * I, const char *name, int index, int button, int mod, int x,
int y, const float *pos, int state);
void PyMOL_SetPassive(CPyMOL * I, int onOff);
void PyMOL_NeedReshape(CPyMOL * I, int mode, int x, int y, int width, int height);
/* valid context management */
void PyMOL_PushValidContext(CPyMOL * I);
void PyMOL_PopValidContext(CPyMOL * I);
/* methods requiring a valid OpenGL context*/
void PyMOL_AdaptToHardware(CPyMOL * I);
void PyMOL_Draw(CPyMOL * I);
/* methods that do not require a valid OpenGL context */
void PyMOL_Key(CPyMOL * I, unsigned char k, int x, int y, int modifiers);
void PyMOL_Special(CPyMOL * I, int k, int x, int y, int modifiers);
void PyMOL_Reshape(CPyMOL * I, int width, int height, int force);
void PyMOL_Drag(CPyMOL * I, int x, int y, int modifiers);
void PyMOL_Button(CPyMOL * I, int button, int state, int x, int y, int modifiers);
int PyMOL_Idle(CPyMOL * I); /* return true if PyMOL is busy doing real
work (not simply racing the CPU) */
void PyMOL_ExpireIfIdle(CPyMOL * I); /* auto-termination for command-line mode */
typedef void PyMOLSwapBuffersFn(void);
void PyMOL_SetSwapBuffersFn(CPyMOL * I, PyMOLSwapBuffersFn * fn);
void PyMOL_SwapBuffers(CPyMOL * I); /* only works if above function has been set */
void PyMOL_SetDefaultMouse(CPyMOL * I);
void PyMOL_SetStereoCapable(CPyMOL * I, int stereoCapable);
void PyMOL_InitializeCMol(CPyMOL * I);
/* host query methods */
int PyMOL_GetRedisplay(CPyMOL * I, int reset);
int PyMOL_GetPassive(CPyMOL * I, int reset);
int PyMOL_GetSwap(CPyMOL * I, int reset);
int PyMOL_GetClickReady(CPyMOL * I, int reset);
int PyMOL_GetImageReady(CPyMOL * I, int reset);
PyMOLreturn_int_array PyMOL_GetImageInfo(CPyMOL * I);
int PyMOL_GetImageData(CPyMOL * I, int width, int height, int row_bytes,
void *buffer, int mode, int reset);
PyMOLreturn_int_array PyMOL_GetImageDataReturned(CPyMOL * I, int width, int height, int row_bytes,
int mode, int reset);
int PyMOL_GetReshape(CPyMOL * I);
int PyMOL_GetIdleAndReady(CPyMOL * I);
/* int array results */
PyMOLreturn_int_array PyMOL_GetReshapeInfo(CPyMOL * I, int reset);
/*PyMOLreturn_int_array PyMOL_GetStereoInfo(CPyMOL *I,int reset); * to come for MacPyMOL -- blue line, etc */
/* string results */
char *PyMOL_GetClickString(CPyMOL * I, int reset);
int PyMOL_FreeResultString(CPyMOL * I, char *st);
/* asynchronous processing (only useful for Python-based multithreaded builds right now) */
int PyMOL_GetBusy(CPyMOL * I, int reset);
void PyMOL_SetBusy(CPyMOL * I, int value);
void PyMOL_ResetProgress(CPyMOL * I);
void PyMOL_SetProgress(CPyMOL * I, int offset, int current, int range);
int PyMOL_GetProgress(CPyMOL * I, int *progress, int reset);
int PyMOL_GetProgressChanged(CPyMOL * I, int reset);
int PyMOL_GetInterrupt(CPyMOL * I, int reset);
void PyMOL_SetInterrupt(CPyMOL * I, int value);
/* modal updates -- PyMOL is busy with some complex task, but we have
to return control to the host in order to get a valid draw callback */
int PyMOL_GetModalDraw(CPyMOL * I);
void PyMOL_SetModalDraw(CPyMOL * I, PyMOLModalDrawFn * fn); /* for internal use only */
/* developer/transient privates */
struct _PyMOLGlobals *PyMOL_GetGlobals(CPyMOL * I);
struct _PyMOLGlobals **PyMOL_GetGlobalsHandle(CPyMOL * I);
void PyMOL_RunTest(CPyMOL * I, int group, int test);
/* for python integration */
void PyMOL_LockAPIAndUnblock(CPyMOL * I);
void PyMOL_BlockAndUnlockAPI(CPyMOL * I);
/* for Jmol integration */
int PyMOL_NewG3DStream(CPyMOL * I, int **array_ptr);
int PyMOL_DelG3DStream(CPyMOL * I, int *array_ptr);
/* Command API */
PyMOLreturn_status PyMOL_CmdBackgroundColor(CPyMOL * I, const char *value);
PyMOLreturn_status PyMOL_CmdReinitialize(CPyMOL * I,
const char *what,
const char *object_name);
PyMOLreturn_status PyMOL_CmdLoad(CPyMOL * I,
const char *content,
const char *content_type,
const char *content_format,
const char *object_name,
int state, int discrete, int finish,
int quiet, int multiplex, int zoom);
PyMOLreturn_status PyMOL_CmdLoadRaw(CPyMOL * I,
const char *content,
int content_length,
const char *content_format,
const char *object_name, int state,
int discrete, int finish,
int quiet, int multiplex, int zoom);
PyMOLreturn_status PyMOL_CmdLoadCGO(CPyMOL * I,
const float *content,
int content_length,
const char *object_name, int state, int quiet, int zoom);
PyMOLreturn_status PyMOL_CmdCreate(CPyMOL * I,
const char *name,
const char *selection, int source_state,
int target_state, int discrete,
int zoom, int quiet, int singletons,
const char *extract, int copy_properties);
PyMOLreturn_status PyMOL_CmdZoom(CPyMOL * I, const char *selection, float buffer,
int state, int complete, float animate, int quiet);
PyMOLreturn_status PyMOL_CmdCenter(CPyMOL * I, const char *selection, int state, int origin,
float animate, int quiet);
PyMOLreturn_status PyMOL_CmdOrient(CPyMOL * I, const char *selection, float buffer, int state,
int complete, float animate, int quiet);
PyMOLreturn_status PyMOL_CmdOrigin(CPyMOL * I, const char *selection, int state, int quiet);
PyMOLreturn_status PyMOL_CmdOriginAt(CPyMOL * I, float x, float y, float z, int quiet);
PyMOLreturn_status PyMOL_CmdClip(CPyMOL * I, const char *mode, float amount,
const char *selection,
int state, int quiet);
PyMOLreturn_status PyMOL_CmdShow(CPyMOL * I,
const char *representation,
const char *selection,
int quiet);
PyMOLreturn_status PyMOL_CmdHide(CPyMOL * I,
const char *representation,
const char *selection,
int quiet);
PyMOLreturn_status PyMOL_CmdEnable(CPyMOL * I, const char *name, int quiet);
PyMOLreturn_status PyMOL_CmdDisable(CPyMOL * I, const char *name, int quiet);
PyMOLreturn_status PyMOL_CmdDelete(CPyMOL * I, const char *name, int quiet);
PyMOLreturn_status PyMOL_CmdSet(CPyMOL * I,
const char *setting,
const char *value,
const char *selection,
int state, int quiet, int side_effects);
PyMOLreturn_value PyMOL_CmdGet(CPyMOL * I, const char *setting,
const char *selection,
int state, int quiet);
PyMOLreturn_status PyMOL_CmdUnset(CPyMOL * I, const char *setting, const char *selection,
int state, int quiet, int side_effects);
PyMOLreturn_status PyMOL_CmdSetBond(CPyMOL * I, const char *setting, const char *value,
const char *selection1, const char *selection2,
int state, int quiet, int side_effects);
PyMOLreturn_status PyMOL_CmdUnsetBond(CPyMOL * I, const char *setting,
const char *selection1, const char *selection2,
int state, int quiet, int side_effects);
PyMOLreturn_status PyMOL_CmdColor(CPyMOL * I, const char *color, const char *selection, int flags,
int quiet);
PyMOLreturn_status PyMOL_CmdLabel(CPyMOL * I, const char *selection, const char *text, int quiet);
PyMOLreturn_status PyMOL_CmdSelect(CPyMOL * I, const char *name, const char *selection, int quiet);
PyMOLreturn_status PyMOL_CmdSelectList(CPyMOL * I, const char *name, const char *object, int *list,
int list_len, int state, const char *mode, int quiet);
PyMOLreturn_int PyMOL_CmdGetMovieLength(CPyMOL * I,int quiet);
PyMOLreturn_float PyMOL_CmdGetDistance(CPyMOL * I,
const char *selection1,
const char *selection2, int state, int quiet);
PyMOLreturn_float PyMOL_CmdDistance(CPyMOL * I,
const char *name,
const char *selection1,
const char *selection2,
int mode,
float cutoff,
int label, int reset, int zoom, int state, int quiet);
PyMOLreturn_float PyMOL_CmdGetAngle(CPyMOL * I,
const char *selection1,
const char *selection2,
const char *selection3, int state, int quiet);
PyMOLreturn_float PyMOL_CmdAngle(CPyMOL * I,
const char *name,
const char *selection1,
const char *selection2,
const char *selection3,
int mode,
int label, int reset, int zoom, int state, int quiet);
PyMOLreturn_float PyMOL_CmdGetDihedral(CPyMOL * I,
const char *selection1,
const char *selection2,
const char *selection3,
const char *selection4, int state, int quiet);
PyMOLreturn_float PyMOL_CmdDihedral(CPyMOL * I,
const char *name,
const char *selection1,
const char *selection2,
const char *selection3,
const char *selection4,
int mode,
int label, int reset, int zoom, int state, int quiet);
PyMOLreturn_float_array PyMOL_CmdAlign(CPyMOL * I, const char *source, const char *target,
float cutoff, int cycles, float gap, float extend,
int max_gap, const char *object, const char *matrix,
int source_state, int target_state, int quiet,
int max_skip, int transform, int reset);
PyMOLreturn_status PyMOL_CmdSetView(CPyMOL * I, float *view, int view_len, float animate,
int quiet);
PyMOLreturn_float_array PyMOL_CmdGetView(CPyMOL * I, int quiet);
PyMOLreturn_status PyMOL_CmdDraw(CPyMOL * I, int width, int height,
int antialias, int quiet);
PyMOLreturn_status PyMOL_CmdCapture(CPyMOL * I, int quiet);
PyMOLreturn_status PyMOL_CmdRay(CPyMOL * I, int width, int height, int antialias,
float angle, float shift, int renderer, int defer,
int quiet);
PyMOLreturn_status PyMOL_CmdIsodot(CPyMOL * I, const char *name, const char *map_name, float level,
const char *selection, float buffer, int state, float carve,
int source_state, int quiet);
PyMOLreturn_status PyMOL_CmdIsomesh(CPyMOL * I, const char *name, const char *map_name, float level,
const char *selection, float buffer, int state, float carve,
int source_state, int quiet);
PyMOLreturn_status PyMOL_CmdIsosurface(CPyMOL * I, const char *name, const char *map_name,
float level, const char *selection, float buffer,
int state, float carve, int source_state, int side,
int mode, int quiet);
PyMOLreturn_status PyMOL_CmdGradient(CPyMOL * I, const char *name, const char *map_name,
float minimum, float maximum, const char *selection,
float buffer, int state, float carve,
int source_state, int quiet);
PyMOLreturn_float PyMOL_CmdIsolevel(CPyMOL * I, const char *name, float level, int state,
int query, int quiet);
PyMOLreturn_status PyMOL_CmdRampNew(CPyMOL * I, const char *name, const char *map, float *range,
int n_range, const char *color, int state, const char *selection,
float beyond, float within, float sigma,
int zero, int calc_mode, int quiet);
PyMOLreturn_status PyMOL_CmdPseudoatom(CPyMOL * I, const char *object_name, const char *sele,
const char *name, const char *resn, const char *resi, const char *chain,
const char *segi, const char *elem, float vdw, int hetatm,
float b, float q, const char *color, const char *label,
int set_xyz, float x, float y, float z,
int state, int mode, int quiet);
PyMOLreturn_status PyMOL_CmdTurn(CPyMOL * I, char axis, float angle);
PyMOLreturn_status PyMOL_CmdMPlay(CPyMOL * I, int cmd);
PyMOLreturn_status PyMOL_CmdSetFeedbackMask(CPyMOL * I, int action, int module, int mask);
/* releasing returned values */
int PyMOL_FreeResultArray(CPyMOL * I, void *array);
PyMOLreturn_status PyMOL_CmdRock(CPyMOL * I, int mode);
PyMOLreturn_string_array PyMOL_CmdGetNames(CPyMOL * I, int mode, const char *s0, int enabled_only);
PyMOLreturn_status PyMOL_CmdMapNew(CPyMOL * I, const char *name, int type, float grid_spacing,
const char *selection, int state, int normalize,
int zoom, int quiet);
#ifdef _PYMOL_LIB
PyMOLreturn_string_array PyMOL_GetObjectList(CPyMOL * I, const char *s0);
PyMOLreturn_status PyMOL_SetIsEnabledCallback(CPyMOL * I, void *CallbackObject, void (*enabledCallback)(void *, const char *, int ));
PyMOLreturn_int_array PyMOL_GetRepsInSceneForObject(CPyMOL * I, const char *name);
PyMOLreturn_int_array PyMOL_GetRepsForObject(CPyMOL * I, const char *name);
PyMOLreturn_status PyMOL_SetButton(CPyMOL * I, const char *button, const char *modifier, const char *action);
PyMOLreturn_status PyMOL_SetMouseButtonMode(CPyMOL * I, const char *modename);
PyMOLreturn_float_array PyMOL_Spectrum(CPyMOL * I, const char *expression, const char *palette, const char *selection, float minimum, float maximum, int byres, int quiet);
#endif
PyMOLreturn_status PyMOL_ZoomScene(CPyMOL * I, float scale);
PyMOLreturn_status PyMOL_TranslateScene(CPyMOL * I, float x, float y, float z);
PyMOLreturn_value PyMOL_GetVersion(CPyMOL * I);
typedef struct _P_AtomProperty {
int id;
short Ptype;
int offset;
int maxlen;
} AtomPropertyInfo;
AtomPropertyInfo *PyMOL_GetAtomPropertyInfo(CPyMOL * I, const char *atompropname);
#ifdef __cplusplus
}
#endif
#endif