ObjectCGO.cpp (pymol-v1.8.6.0.tar.bz2) | : | ObjectCGO.cpp (pymol-v2.1.0.tar.bz2) | ||
---|---|---|---|---|
skipping to change at line 36 | skipping to change at line 36 | |||
#include"MemoryDebug.h" | #include"MemoryDebug.h" | |||
#include"CGO.h" | #include"CGO.h" | |||
#include"Scene.h" | #include"Scene.h" | |||
#include"Setting.h" | #include"Setting.h" | |||
#include"PConv.h" | #include"PConv.h" | |||
#include"main.h" | #include"main.h" | |||
#include"Color.h" | #include"Color.h" | |||
#include"VFont.h" | #include"VFont.h" | |||
#include"ShaderMgr.h" | #include"ShaderMgr.h" | |||
#ifndef _PYMOL_NOPY | ||||
static PyObject *ObjectCGOStateAsPyList(ObjectCGOState * I) | static PyObject *ObjectCGOStateAsPyList(ObjectCGOState * I) | |||
{ | { | |||
PyObject *result = NULL; | PyObject *result = NULL; | |||
result = PyList_New(1); | result = PyList_New(1); | |||
if(I->ray) | if(I->ray) | |||
PyList_SetItem(result, 0, CGOAsPyList(I->ray)); | PyList_SetItem(result, 0, CGOAsPyList(I->ray)); | |||
else if(I->std) | else if(I->std) | |||
PyList_SetItem(result, 0, CGOAsPyList(I->std)); | PyList_SetItem(result, 0, CGOAsPyList(I->std)); | |||
else | else | |||
PyList_SetItem(result, 0, PConvAutoNone(NULL)); | PyList_SetItem(result, 0, PConvAutoNone(NULL)); | |||
return (PConvAutoNone(result)); | return (PConvAutoNone(result)); | |||
} | } | |||
static PyObject *ObjectCGOAllStatesAsPyList(ObjectCGO * I) | static PyObject *ObjectCGOAllStatesAsPyList(ObjectCGO * I) | |||
{ | { | |||
PyObject *result = NULL; | PyObject *result = NULL; | |||
int a; | int a; | |||
result = PyList_New(I->NState); | result = PyList_New(I->NState); | |||
for(a = 0; a < I->NState; a++) { | for(a = 0; a < I->NState; a++) { | |||
PyList_SetItem(result, a, ObjectCGOStateAsPyList(I->State + a)); | PyList_SetItem(result, a, ObjectCGOStateAsPyList(I->State + a)); | |||
} | } | |||
return (PConvAutoNone(result)); | return (PConvAutoNone(result)); | |||
} | } | |||
static int ObjectCGOStateFromPyList(PyMOLGlobals * G, ObjectCGOState * I, PyObje ct * list, | static int ObjectCGOStateFromPyList(PyMOLGlobals * G, ObjectCGOState * I, PyObje ct * list, | |||
skipping to change at line 120 | skipping to change at line 118 | |||
ok = | ok = | |||
ObjectCGOStateFromPyList(I->Obj.G, I->State + a, PyList_GetItem(list, a) , | ObjectCGOStateFromPyList(I->Obj.G, I->State + a, PyList_GetItem(list, a) , | |||
version); | version); | |||
if(!ok) | if(!ok) | |||
break; | break; | |||
} | } | |||
} | } | |||
return (ok); | return (ok); | |||
} | } | |||
#endif | ||||
int ObjectCGONewFromPyList(PyMOLGlobals * G, PyObject * list, ObjectCGO ** resul t, | int ObjectCGONewFromPyList(PyMOLGlobals * G, PyObject * list, ObjectCGO ** resul t, | |||
int version) | int version) | |||
{ | { | |||
#ifdef _PYMOL_NOPY | ||||
return 0; | ||||
#else | ||||
int ok = true; | int ok = true; | |||
ObjectCGO *I = NULL; | ObjectCGO *I = NULL; | |||
(*result) = NULL; | (*result) = NULL; | |||
if(ok) | if(ok) | |||
ok = (list != Py_None); | ok = (list != NULL); | |||
if(ok) | if(ok) | |||
ok = PyList_Check(list); | ok = PyList_Check(list); | |||
I = ObjectCGONew(G); | I = ObjectCGONew(G); | |||
if(ok) | if(ok) | |||
ok = (I != NULL); | ok = (I != NULL); | |||
if(ok) | if(ok) | |||
ok = ObjectFromPyList(G, PyList_GetItem(list, 0), &I->Obj); | ok = ObjectFromPyList(G, PyList_GetItem(list, 0), &I->Obj); | |||
if(ok) | if(ok) | |||
ok = PConvPyIntToInt(PyList_GetItem(list, 1), &I->NState); | ok = PConvPyIntToInt(PyList_GetItem(list, 1), &I->NState); | |||
if(ok) | if(ok) | |||
ok = ObjectCGOAllStatesFromPyList(I, PyList_GetItem(list, 2), version); | ok = ObjectCGOAllStatesFromPyList(I, PyList_GetItem(list, 2), version); | |||
if(ok) { | if(ok) { | |||
(*result) = I; | (*result) = I; | |||
ObjectCGORecomputeExtent(I); | ObjectCGORecomputeExtent(I); | |||
} else { | } else { | |||
/* cleanup? */ | /* cleanup? */ | |||
} | } | |||
return (ok); | return (ok); | |||
#endif | ||||
} | } | |||
PyObject *ObjectCGOAsPyList(ObjectCGO * I) | PyObject *ObjectCGOAsPyList(ObjectCGO * I) | |||
{ | { | |||
#ifdef _PYMOL_NOPY | ||||
return NULL; | ||||
#else | ||||
PyObject *result = NULL; | PyObject *result = NULL; | |||
result = PyList_New(3); | result = PyList_New(3); | |||
PyList_SetItem(result, 0, ObjectAsPyList(&I->Obj)); | PyList_SetItem(result, 0, ObjectAsPyList(&I->Obj)); | |||
PyList_SetItem(result, 1, PyInt_FromLong(I->NState)); | PyList_SetItem(result, 1, PyInt_FromLong(I->NState)); | |||
PyList_SetItem(result, 2, ObjectCGOAllStatesAsPyList(I)); | PyList_SetItem(result, 2, ObjectCGOAllStatesAsPyList(I)); | |||
return (PConvAutoNone(result)); | return (PConvAutoNone(result)); | |||
#endif | ||||
} | } | |||
/*========================================================================*/ | /*========================================================================*/ | |||
void ObjectCGOFree(ObjectCGO * I) | void ObjectCGOFree(ObjectCGO * I) | |||
{ | { | |||
int a; | int a; | |||
for(a = 0; a < I->NState; a++) { | for(a = 0; a < I->NState; a++) { | |||
if(I->State[a].shaderCGO && I->State[a].std!=I->State[a].shaderCGO) | if(I->State[a].shaderCGO && I->State[a].std!=I->State[a].shaderCGO) | |||
CGOFree(I->State[a].shaderCGO); | CGOFree(I->State[a].shaderCGO); | |||
skipping to change at line 231 | skipping to change at line 218 | |||
} | } | |||
I->Obj.ExtentFlag = extent_flag; | I->Obj.ExtentFlag = extent_flag; | |||
SettingCheckHandle(I->Obj.G, &I->Obj.Setting); | SettingCheckHandle(I->Obj.G, &I->Obj.Setting); | |||
SettingSet_i(I->Obj.Setting, cSetting_cgo_lighting, has_normals); | SettingSet_i(I->Obj.Setting, cSetting_cgo_lighting, has_normals); | |||
} | } | |||
/*========================================================================*/ | /*========================================================================*/ | |||
static void ObjectCGOInvalidate(ObjectCGO * I, int rep, int level, int state) | static void ObjectCGOInvalidate(ObjectCGO * I, int rep, int level, int state) | |||
{ | { | |||
ObjectCGOState *sobj = NULL; | ObjectCGOState *sobj = NULL; | |||
if(state < 0) { | if(state < 0) { | |||
int a; | int a; | |||
for(a = 0; a < I->NState; a++) { | for(a = 0; a < I->NState; a++) { | |||
I->State[a].valid = false; | I->State[a].valid = false; | |||
sobj = I->State + a; | sobj = I->State + a; | |||
if (sobj->shaderCGO){ | if (sobj->shaderCGO){ | |||
CGOFree(sobj->shaderCGO); | CGOFree(sobj->shaderCGO); | |||
sobj->shaderCGO = 0; | sobj->shaderCGO = 0; | |||
} | } | |||
} | } | |||
skipping to change at line 435 | skipping to change at line 423 | |||
I->Obj.fFree = (void (*)(CObject *)) ObjectCGOFree; | I->Obj.fFree = (void (*)(CObject *)) ObjectCGOFree; | |||
I->Obj.fUpdate = (void (*)(CObject *)) ObjectCGOUpdate; | I->Obj.fUpdate = (void (*)(CObject *)) ObjectCGOUpdate; | |||
I->Obj.fInvalidate = (void (*)(CObject *, int rep, int level, int state)) | I->Obj.fInvalidate = (void (*)(CObject *, int rep, int level, int state)) | |||
ObjectCGOInvalidate; | ObjectCGOInvalidate; | |||
I->Obj.fRender = (void (*)(CObject *, RenderInfo *)) ObjectCGORender; | I->Obj.fRender = (void (*)(CObject *, RenderInfo *)) ObjectCGORender; | |||
I->Obj.fGetNFrame = (int (*)(CObject *)) ObjectCGOGetNState; | I->Obj.fGetNFrame = (int (*)(CObject *)) ObjectCGOGetNState; | |||
return (I); | return (I); | |||
} | } | |||
#ifndef _PYMOL_NOPY | ||||
/*========================================================================*/ | /*========================================================================*/ | |||
static CGO *ObjectCGOPyListFloatToCGO(PyMOLGlobals * G, PyObject * list) | static CGO *ObjectCGOPyListFloatToCGO(PyMOLGlobals * G, PyObject * list) | |||
{ | { | |||
CGO *cgo = NULL; | CGO *cgo = NULL; | |||
int len; | int len; | |||
int ok = true; | int ok = true; | |||
int result; | int result; | |||
float *raw = NULL; | float *raw = NULL; | |||
if(PyList_Check(list)) { | if(PyList_Check(list)) { | |||
len = PConvPyListToFloatArray(list, &raw); | len = PConvPyListToFloatArray(list, &raw); | |||
skipping to change at line 465 | skipping to change at line 451 | |||
PRINTF " FloatToCGO: error encountered on element %d\n", result ENDF (G); | PRINTF " FloatToCGO: error encountered on element %d\n", result ENDF (G); | |||
} | } | |||
CGOStop(cgo); | CGOStop(cgo); | |||
} | } | |||
} | } | |||
FreeP(raw); | FreeP(raw); | |||
} | } | |||
} | } | |||
return (cgo); | return (cgo); | |||
} | } | |||
#endif | ||||
/*========================================================================*/ | /*========================================================================*/ | |||
static CGO *ObjectCGOFloatArrayToCGO(PyMOLGlobals * G, float *raw, int len, int quiet) | static CGO *ObjectCGOFloatArrayToCGO(PyMOLGlobals * G, float *raw, int len, int quiet) | |||
{ | { | |||
CGO *cgo = NULL; | CGO *cgo = NULL; | |||
int ok = true; | int ok = true; | |||
int result; | int result; | |||
if(raw) { | if(raw) { | |||
if(ok) { | if(ok) { | |||
skipping to change at line 560 | skipping to change at line 545 | |||
cgo = CGONew(G); | cgo = CGONew(G); | |||
VFontWriteToCGO(G, font_id, cgo, text, pos, scale, NULL); | VFontWriteToCGO(G, font_id, cgo, text, pos, scale, NULL); | |||
I = ObjectCGOFromCGO(G, NULL, cgo, 0); | I = ObjectCGOFromCGO(G, NULL, cgo, 0); | |||
return (I); | return (I); | |||
} | } | |||
/*========================================================================*/ | /*========================================================================*/ | |||
ObjectCGO *ObjectCGODefine(PyMOLGlobals * G, ObjectCGO * obj, PyObject * pycgo, int state) | ObjectCGO *ObjectCGODefine(PyMOLGlobals * G, ObjectCGO * obj, PyObject * pycgo, int state) | |||
{ /* assumes blocked interpreter */ | { /* assumes blocked interpreter */ | |||
#ifdef _PYMOL_NOPY | ||||
return NULL; | ||||
#else | ||||
ObjectCGO *I = NULL; | ObjectCGO *I = NULL; | |||
CGO *cgo, *font_cgo; | CGO *cgo, *font_cgo; | |||
int est; | int est; | |||
if(obj) { | if(obj) { | |||
if(obj->Obj.type != cObjectCGO) /* TODO: handle this */ | if(obj->Obj.type != cObjectCGO) /* TODO: handle this */ | |||
obj = NULL; | obj = NULL; | |||
} | } | |||
if(!obj) { | if(!obj) { | |||
skipping to change at line 620 | skipping to change at line 602 | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
if(I) { | if(I) { | |||
ObjectCGORecomputeExtent(I); | ObjectCGORecomputeExtent(I); | |||
} | } | |||
SceneChanged(G); | SceneChanged(G); | |||
SceneCountFrames(G); | SceneCountFrames(G); | |||
return (I); | return (I); | |||
#endif | ||||
} | } | |||
ObjectCGO *ObjectCGOFromFloatArray(PyMOLGlobals * G, ObjectCGO * obj, | ObjectCGO *ObjectCGOFromFloatArray(PyMOLGlobals * G, ObjectCGO * obj, | |||
float *array, int size, int state, int quiet) | float *array, int size, int state, int quiet) | |||
{ | { | |||
ObjectCGO *I = NULL; | ObjectCGO *I = NULL; | |||
CGO *cgo, *font_cgo; | CGO *cgo, *font_cgo; | |||
int est; | int est; | |||
End of changes. 13 change blocks. | ||||
21 lines changed or deleted | 2 lines changed or added |