"Fossies" - the Fresh Open Source Software Archive  

Source code changes of the file "layer2/ObjectDist.cpp" between
pymol-v2.1.0.tar.bz2 and pymol-open-source-2.2.0.tar.gz

About: PyMOL is a Python-enhanced molecular graphics tool. It excels at 3D visualization of proteins, small molecules, density, surfaces, and trajectories. It also includes molecular editing, ray tracing, and movies. Open Source version.

ObjectDist.cpp  (pymol-v2.1.0.tar.bz2):ObjectDist.cpp  (pymol-open-source-2.2.0)
skipping to change at line 439 skipping to change at line 439
I->DSet[a]->invalidateRep(rep, cRepInvAll); I->DSet[a]->invalidateRep(rep, cRepInvAll);
} }
} }
/*========================================================================*/ /*========================================================================*/
static void ObjectDistRender(ObjectDist * I, RenderInfo * info) static void ObjectDistRender(ObjectDist * I, RenderInfo * info)
{ {
int state = info->state; int state = info->state;
int pass = info->pass; int pass = info->pass;
CRay *ray = info->ray; CRay *ray = info->ray;
Picking **pick = info->pick;
bool shouldRender = false;
if((pass == 0) || (pass == -1)) { if(ray || pick) {
ObjectPrepareContext(&I->Obj, ray); shouldRender = true;
} else {
shouldRender = pass != 0; // distance measurements should render
// both in opaque and transparency loop,
// the rep decides based on transparency
// whether it renders in that loop.
}
if (!shouldRender)
return;
ObjectPrepareContext(&I->Obj, info);
for(StateIterator iter(I->Obj.G, I->Obj.Setting, state, I->NDSet); for(StateIterator iter(I->Obj.G, I->Obj.Setting, state, I->NDSet);
iter.next();) { iter.next();) {
DistSet * ds = I->DSet[iter.state]; DistSet * ds = I->DSet[iter.state];
if(ds) if(ds)
ds->render(info); ds->render(info);
} }
}
} }
static CSetting **ObjectDistGetSettingHandle(ObjectDist * I, int state) static CSetting **ObjectDistGetSettingHandle(ObjectDist * I, int state)
{ {
if(state < 0) { if(state < 0) {
return (&I->Obj.Setting); return (&I->Obj.Setting);
} else { } else {
return (NULL); return (NULL);
} }
} }
skipping to change at line 507 skipping to change at line 518
int a; int a;
for(a = 0; a < I->NDSet; a++) for(a = 0; a < I->NDSet; a++)
if(I->DSet[a]) { if(I->DSet[a]) {
I->DSet[a]->fFree(); I->DSet[a]->fFree();
I->DSet[a] = NULL; I->DSet[a] = NULL;
} }
I->NDSet = 0; I->NDSet = 0;
} }
/*========================================================================*/ /*========================================================================*/
static bool checkFrozenState(PyMOLGlobals * G, int sele, int &state) {
if (state >= 0)
return true;
if (sele < 0)
return false;
auto obj = (const CObject*) SelectorGetSingleObjectMolecule(G, sele);
if(!obj ||
!SettingGetIfDefined_i(G, obj->Setting, cSetting_state, &state))
return false;
--state;
return true;
}
/*========================================================================*/
ObjectDist *ObjectDistNewFromSele(PyMOLGlobals * G, ObjectDist * oldObj, ObjectDist *ObjectDistNewFromSele(PyMOLGlobals * G, ObjectDist * oldObj,
int sele1, int sele2, int mode, float cutoff, int sele1, int sele2, int mode, float cutoff,
int labels, int reset, float *result, int stat int labels, int reset, float *result, int stat
e) e,
int state1, int state2)
{ {
int a, mn; int a, mn;
float dist_sum = 0.0, dist; float dist_sum = 0.0, dist;
int dist_cnt = 0; int dist_cnt = 0;
int n_state1, n_state2, state1 = 0, state2 = 0; int n_state1, n_state2;
int frozen1 = -1, frozen2 = -1; int frozen1 = -1, frozen2 = -1;
ObjectDist *I; ObjectDist *I;
CObject * query_obj = NULL;
/* if the distance name we presented exists and is an object, just /* if the distance name we presented exists and is an object, just
* overwrite it by resetting it; otherwise intialize the * overwrite it by resetting it; otherwise intialize the
* objectDistance and its base class */ * objectDistance and its base class */
if(!oldObj) if(!oldObj)
I = ObjectDistNew(G); I = ObjectDistNew(G);
else { else {
I = oldObj; I = oldObj;
if(reset) if(reset)
ObjectDistReset(G, I); ObjectDistReset(G, I);
} }
skipping to change at line 545 skipping to change at line 572
SelectorUpdateTable(G, state, -1); SelectorUpdateTable(G, state, -1);
/* here we determine the highest number of states with which we need to concer n ourselves */ /* here we determine the highest number of states with which we need to concer n ourselves */
n_state1 = SelectorGetSeleNCSet(G, sele1); n_state1 = SelectorGetSeleNCSet(G, sele1);
n_state2 = SelectorGetSeleNCSet(G, sele2); n_state2 = SelectorGetSeleNCSet(G, sele2);
/* take the larger state count */ /* take the larger state count */
mn = (n_state2>n_state1) ? n_state2 : n_state1; mn = (n_state2>n_state1) ? n_state2 : n_state1;
/* updated state handling */ /* updated state handling */
/* determine the selected object */ /* determine the selected object */
if(sele1 >= 0) frozen1 = checkFrozenState(G, sele1, state1);
query_obj = (CObject*) SelectorGetSingleObjectMolecule(G, sele1); frozen2 = checkFrozenState(G, sele2, state2);
if(query_obj) {
frozen1 = SettingGetIfDefined_i(query_obj->G, query_obj->Setting, cSetting_s
tate, &state1);
if(frozen1) {
state1--;
}
}
if(sele2 >= 0)
query_obj = (CObject*) SelectorGetSingleObjectMolecule(G, sele2);
if(query_obj) {
frozen2 = SettingGetIfDefined_i(query_obj->G, query_obj->Setting, cSetting_s
tate, &state2);
if(frozen2) {
state2--;
}
}
/* FIX for incorrectly handling state=-1 for multi-molecule selections */ /* FIX for incorrectly handling state=-1 for multi-molecule selections */
if(state1<0) state1=0; if(state1<0) state1=0;
if(state2<0) state2=0; if(state2<0) state2=0;
if(mn) { if(mn) {
/* loop over the max number of states */ /* loop over the max number of states */
for(a = 0; a < mn; a++) { for(a = 0; a < mn; a++) {
/* the state param is valid, set it */ /* the state param is valid, set it */
skipping to change at line 621 skipping to change at line 633
/* return the avg dist */ /* return the avg dist */
if(dist_cnt) if(dist_cnt)
(*result) = dist_sum / dist_cnt; (*result) = dist_sum / dist_cnt;
SceneChanged(G); SceneChanged(G);
return (I); return (I);
} }
ObjectDist *ObjectDistNewFromAngleSele(PyMOLGlobals * G, ObjectDist * oldObj, ObjectDist *ObjectDistNewFromAngleSele(PyMOLGlobals * G, ObjectDist * oldObj,
int sele1, int sele2, int sele3, int mode , int sele1, int sele2, int sele3, int mode ,
int labels, float *result, int reset, int int labels, float *result, int reset, int
state) state,
int state1, int state2, int state3)
{ {
int a, mn; int a, mn;
float angle_sum = 0.0; float angle_sum = 0.0;
int angle_cnt = 0; int angle_cnt = 0;
int n_state1, n_state2, n_state3, state1, state2, state3; int n_state1, n_state2, n_state3;
ObjectDist *I; ObjectDist *I;
int frozen1=-1, frozen2=-1, frozen3=-1; int frozen1=-1, frozen2=-1, frozen3=-1;
CObject * query_obj = NULL;
if(!oldObj) /* create object if new */ if(!oldObj) /* create object if new */
I = ObjectDistNew(G); I = ObjectDistNew(G);
else { /* otherwise, use existing object */ else { /* otherwise, use existing object */
I = oldObj; I = oldObj;
if(reset) { /* if reseting, then clear out all existing coor dinate sets */ if(reset) { /* if reseting, then clear out all existing coor dinate sets */
ObjectDistReset(G, I); ObjectDistReset(G, I);
} }
} }
*result = 0.0; *result = 0.0;
skipping to change at line 658 skipping to change at line 670
/* figure out the total number of states */ /* figure out the total number of states */
mn = n_state1; mn = n_state1;
if(n_state2 > mn) if(n_state2 > mn)
mn = n_state2; mn = n_state2;
if(n_state3 > mn) if(n_state3 > mn)
mn = n_state3; mn = n_state3;
/* updated state handling */ /* updated state handling */
/* determine the selected object */ /* determine the selected object */
if(sele1 >= 0) frozen1 = checkFrozenState(G, sele1, state1);
query_obj = (CObject*) SelectorGetSingleObjectMolecule(G, sele1); frozen2 = checkFrozenState(G, sele2, state2);
if(query_obj) { frozen3 = checkFrozenState(G, sele3, state3);
frozen1 = SettingGetIfDefined_i(query_obj->G, query_obj->Setting, cSetting_s
tate, &state1);
state1--;
}
/* updated state handling */
/* determine the selected object */
if(sele2 >= 0)
query_obj = (CObject*) SelectorGetSingleObjectMolecule(G, sele2);
if(query_obj) {
frozen2 = SettingGetIfDefined_i(query_obj->G, query_obj->Setting, cSetting_s
tate, &state2);
state2--;
}
/* updated state handling */
/* determine the selected object */
if(sele3 >= 0)
query_obj = (CObject*) SelectorGetSingleObjectMolecule(G, sele3);
if(query_obj) {
frozen3 = SettingGetIfDefined_i(query_obj->G, query_obj->Setting, cSetting_s
tate, &state3);
state3--;
}
if(mn) { if(mn) {
for(a = 0; a < mn; a++) { for(a = 0; a < mn; a++) {
if(state >= 0) { if(state >= 0) {
if(state > mn) if(state > mn)
break; break;
a = state; a = state;
} }
/* treat selections with one state as static singletons */ /* treat selections with one state as static singletons */
skipping to change at line 863 skipping to change at line 856
(*result) = angle_sum / angle_cnt; (*result) = angle_sum / angle_cnt;
SceneChanged(G); SceneChanged(G);
return (I); return (I);
} }
/*========================================================================*/ /*========================================================================*/
void ObjectDistFree(ObjectDist * I) void ObjectDistFree(ObjectDist * I)
{ {
int a; int a;
SceneObjectDel(I->Obj.G, (CObject *) I, false);
for(a = 0; a < I->NDSet; a++) for(a = 0; a < I->NDSet; a++)
if(I->DSet[a]) { if(I->DSet[a]) {
I->DSet[a]->fFree(); I->DSet[a]->fFree();
I->DSet[a] = NULL; I->DSet[a] = NULL;
} }
VLAFreeP(I->DSet); VLAFreeP(I->DSet);
ObjectPurge(&I->Obj); ObjectPurge(&I->Obj);
OOFreeP(I); /* from OOAlloc */ OOFreeP(I); /* from OOAlloc */
} }
 End of changes. 13 change blocks. 
57 lines changed or deleted 44 lines changed or added

Home  |  About  |  Features  |  All  |  Newest  |  Dox  |  Diffs  |  RSS Feeds  |  Screenshots  |  Comments  |  Imprint  |  Privacy  |  HTTP(S)