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 |