layer1/PyMOLObject.h (146 lines of code) (raw):

/* A* ------------------------------------------------------------------- B* This file contains source code for the PyMOL computer program C* copyright 1998-2000 by Warren Lyford Delano of DeLano Scientific. 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_PyMOLObject #define _H_PyMOLObject /* literally a 3-D object...also an object object */ #include"Base.h" #include"Ray.h" #include"Rep.h" #include"Setting.h" #include"PyMOLGlobals.h" #include"View.h" #include"Word.h" typedef char ObjectNameType[WordLength]; enum cObject_t : int { cObjectMolecule = 1, cObjectMap = 2, cObjectMesh = 3, cObjectMeasurement = 4, cObjectCallback = 5, cObjectCGO = 6, cObjectSurface = 7, cObjectGadget = 8, cObjectCalculator = 9, cObjectSlice = 10, cObjectAlignment = 11, cObjectGroup = 12, cObjectVolume = 13, }; /* the object base class is in the process of being converted to support states explicitly (an unfortunate early omission), which will allow for simplified implementation of future multi-state objects. */ typedef struct CObjectState { PyMOLGlobals *G; double *Matrix; double *InvMatrix; } CObjectState; #ifndef CObject_DEFINED typedef struct _CObject CObject; #define CObject_DEFINED #endif struct _CObject { PyMOLGlobals *G; void (*fUpdate) (CObject * I); /* update representations */ void (*fRender) (CObject * I, RenderInfo * info); void (*fFree) (CObject * I); int (*fGetNFrame) (CObject * I); void (*fDescribeElement) (CObject * I, int index, char *buffer); void (*fInvalidate) (CObject * I, int rep, int level, int state); CSetting **(*fGetSettingHandle) (CObject * I, int state); char *(*fGetCaption) (CObject * I, char * ch, int len); CObjectState *(*fGetObjectState) (CObject * I, int state); cObject_t type; ObjectNameType Name; int Color; int visRep; float ExtentMin[3], ExtentMax[3]; int ExtentFlag, TTTFlag; float TTT[16]; /* translate, transform, translate matrix (to apply when rendering) */ CSetting *Setting; int Enabled; /* read-only... maintained by Scene */ int Context; /* 0 = Camera, 1 = Unit Window, 2 = Scaled Window */ CViewElem *ViewElem; /* for animating objects via the TTT */ /* not pickled */ int grid_slot; CGO *gridSlotSelIndicatorsCGO; int Grabbed; // methods void update() { if (fUpdate) fUpdate(this); } void render(RenderInfo * info) { if (fRender) fRender(this, info); } void invalidate(int rep, int level, int state) { if (fInvalidate) fInvalidate(this, rep, level, state); } int getNFrame() { if (fGetNFrame) return fGetNFrame(this); return 0; } }; void ObjectInit(PyMOLGlobals * G, CObject * I); int ObjectCopyHeader(CObject * I, const CObject * src); void ObjectPurge(CObject * I); void ObjectSetName(CObject * I, const char *name); void ObjectMakeValidName(char *name); void ObjectMakeValidName(PyMOLGlobals * G, char *name); void ObjectPurgeSettings(CObject * I); void ObjectFree(CObject * I); void ObjectUseColor(CObject * I); void ObjectUseColorCGO(CGO *cgo, CObject * I); void ObjectSetRepVisMask(CObject * I, int repmask, int value); void ObjectToggleRepVis(CObject * I, int rep); void ObjectPrepareContext(CObject * I, RenderInfo * info); void ObjectSetTTT(CObject * I, const float *ttt, int state,int store); int ObjectGetTTT(CObject * I, const float **ttt, int state); int ObjectGetTotalMatrix(CObject * I, int state, int history, double *matrix); void ObjectCombineTTT(CObject * I, float *ttt, int reverse_order, int store); void ObjectTranslateTTT(CObject * T, float *v,int store); void ObjectSetTTTOrigin(CObject * I, float *origin); void ObjectResetTTT(CObject * I,int store); PyObject *ObjectAsPyList(CObject * I); int ObjectFromPyList(PyMOLGlobals * G, PyObject * list, CObject * I); int ObjectGetCurrentState(CObject * I, int ignore_all_states); void ObjectAdjustStateRebuildRange(CObject * I, int *start, int *stop); int ObjectMotion(CObject * I, int action, int first, int last, float power, float bias, int simple, float linear, int wrap, int hand, int window, int cycles, int state, int quiet); int ObjectGetSpecLevel(CObject * I, int frame); void ObjectMotionTrim(CObject *I, int n_frame); void ObjectMotionExtend(CObject *I, int n_frame); void ObjectDrawViewElem(CObject *I, BlockRect *rect, int frames, CGO *orthoCGO); void ObjectStateInit(PyMOLGlobals * G, CObjectState * I); void ObjectStateCopy(CObjectState * dst, const CObjectState * src); void ObjectStatePurge(CObjectState * I); int ObjectStateSetMatrix(CObjectState * I, double *matrix); double *ObjectStateGetMatrix(CObjectState * I); double *ObjectStateGetInvMatrix(CObjectState * I); void ObjectStateTransformMatrix(CObjectState * I, double *matrix); void ObjectStateResetMatrix(CObjectState * I); PyObject *ObjectStateAsPyList(CObjectState * I); int ObjectStateFromPyList(PyMOLGlobals * G, PyObject * list, CObjectState * I); int ObjectStatePushAndApplyMatrix(CObjectState * I, RenderInfo * info); void ObjectStatePopMatrix(CObjectState * I, RenderInfo * info); void ObjectStateRightCombineMatrixR44d(CObjectState * I, double *matrix); void ObjectStateLeftCombineMatrixR44d(CObjectState * I, double *matrix); void ObjectStateCombineMatrixTTT(CObjectState * I, float *matrix); int ObjectMotionModify(CObject *I,int action, int index, int count,int target, int freeze, int localize); void ObjectMotionReinterpolate(CObject *I); int ObjectMotionGetLength(CObject *I); typedef struct _CObjectUpdateThreadInfo CObjectUpdateThreadInfo; #define cObjectTypeAll 0 #define cObjectTypeObjects 1 #define cObjectTypeSelections 2 #define cObjectTypePublic 3 #define cObjectTypePublicObjects 4 #define cObjectTypePublicSelections 5 #define cObjectTypePublicNonGroupObjects 6 #define cObjectTypePublicGroupObjects 7 #define cObjectTypeNonGroupObjects 8 #define cObjectTypeGroupObjects 9 /* Note: public objects are ones that do not start with "_" */ // object and object-state level setting template <typename V> void SettingSet(int index, V value, CObject * obj, int state=-1) { if (obj->fGetSettingHandle) { auto handle = obj->fGetSettingHandle(obj, state); if (handle) SettingSet(obj->G, handle, index, value); } } #endif