ObjectDist.cpp (pymol-open-source-2.2.0) | : | ObjectDist.cpp (pymol-open-source-2.3.0) | ||
---|---|---|---|---|
skipping to change at line 38 | skipping to change at line 38 | |||
#include"Scene.h" | #include"Scene.h" | |||
#include"Ray.h" | #include"Ray.h" | |||
#include"ObjectDist.h" | #include"ObjectDist.h" | |||
#include"Selector.h" | #include"Selector.h" | |||
#include"PConv.h" | #include"PConv.h" | |||
#include"ObjectMolecule.h" | #include"ObjectMolecule.h" | |||
#include"Feedback.h" | #include"Feedback.h" | |||
#include"DistSet.h" | #include"DistSet.h" | |||
#include"ListMacros.h" | #include"ListMacros.h" | |||
void ObjectDistFree(ObjectDist * I); | static void ObjectDistFree(ObjectDist * I); | |||
void ObjectDistUpdate(ObjectDist * I); | static void ObjectDistUpdate(ObjectDist * I); | |||
int ObjectDistGetNFrames(ObjectDist * I); | static int ObjectDistGetNFrames(ObjectDist * I); | |||
void ObjectDistUpdateExtents(ObjectDist * I); | static void ObjectDistUpdateExtents(ObjectDist * I); | |||
int ObjectDistGetLabelTxfVertex(ObjectDist * I, int state, int index, float *v) | int ObjectDistGetLabelTxfVertex(ObjectDist * I, int state, int index, float *v) | |||
{ | { | |||
int result = 0; | int result = 0; | |||
if(I->DSet) { | if(I->DSet) { | |||
if(state < 0) | if(state < 0) | |||
state = SettingGet_i(I->Obj.G, NULL, I->Obj.Setting, cSetting_state) - 1; | state = SettingGet_i(I->Obj.G, NULL, I->Obj.Setting, cSetting_state) - 1; | |||
if(state < 0) | if(state < 0) | |||
state = SceneGetState(I->Obj.G); | state = SceneGetState(I->Obj.G); | |||
if(I->NDSet == 1) | if(I->NDSet == 1) | |||
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; | auto pick = info->pick; | |||
bool shouldRender = false; | bool shouldRender = false; | |||
if(ray || pick) { | if(ray || pick) { | |||
shouldRender = true; | shouldRender = true; | |||
} else { | } else { | |||
shouldRender = pass != 0; // distance measurements should render | shouldRender = pass != 0; // distance measurements should render | |||
// both in opaque and transparency loop, | // both in opaque and transparency loop, | |||
// the rep decides based on transparency | // the rep decides based on transparency | |||
// whether it renders in that loop. | // whether it renders in that loop. | |||
} | } | |||
skipping to change at line 463 | skipping to change at line 463 | |||
ObjectPrepareContext(&I->Obj, info); | 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); | |||
} | } | |||
} | } | |||
#if 0 | ||||
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); | |||
} | } | |||
} | } | |||
#endif | ||||
static void ObjectDistInvalidate(CObject * Iarg, int rep, int level, int state){ | static void ObjectDistInvalidate(CObject * Iarg, int rep, int level, int state){ | |||
ObjectDist * I = (ObjectDist*)Iarg; | ObjectDist * I = (ObjectDist*)Iarg; | |||
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->invalidateRep(rep, level); | ds->invalidateRep(rep, level); | |||
} | } | |||
} | } | |||
skipping to change at line 571 | skipping to change at line 573 | |||
mn = 0; | mn = 0; | |||
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 */ | ||||
frozen1 = checkFrozenState(G, sele1, state1); | frozen1 = checkFrozenState(G, sele1, state1); | |||
frozen2 = checkFrozenState(G, sele2, state2); | frozen2 = checkFrozenState(G, sele2, 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++) { | |||
skipping to change at line 669 | 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 */ | ||||
frozen1 = checkFrozenState(G, sele1, state1); | frozen1 = checkFrozenState(G, sele1, state1); | |||
frozen2 = checkFrozenState(G, sele2, state2); | frozen2 = checkFrozenState(G, sele2, state2); | |||
frozen3 = checkFrozenState(G, sele3, state3); | frozen3 = checkFrozenState(G, sele3, 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; | |||
skipping to change at line 736 | skipping to change at line 736 | |||
} | } | |||
ObjectDist *ObjectDistNewFromDihedralSele(PyMOLGlobals * G, ObjectDist * oldObj, | ObjectDist *ObjectDistNewFromDihedralSele(PyMOLGlobals * G, ObjectDist * oldObj, | |||
int sele1, int sele2, int sele3, int s ele4, | int sele1, int sele2, int sele3, int s ele4, | |||
int mode, int labels, float *result, | int mode, int labels, float *result, | |||
int reset, int state) | int reset, int state) | |||
{ | { | |||
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, n_state4, state1, state2, state3, state4; | int n_state1, n_state2, n_state3, n_state4; | |||
int state1 = -1, state2 = -1, state3 = -1, state4 = -1; | ||||
ObjectDist *I; | ObjectDist *I; | |||
int frozen1=-1, frozen2=-1, frozen3=-1, frozen4=-1; | int frozen1=-1, frozen2=-1, frozen3=-1, frozen4=-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 772 | skipping to change at line 772 | |||
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; | |||
if(n_state4 > mn) | if(n_state4 > mn) | |||
mn = n_state4; | mn = n_state4; | |||
/* updated state handling */ | /* updated state handling */ | |||
/* determine the selected object */ | frozen1 = checkFrozenState(G, sele1, state1); | |||
if(sele1 >= 0) | frozen2 = checkFrozenState(G, sele2, state2); | |||
query_obj = (CObject*) SelectorGetSingleObjectMolecule(G, sele1); | frozen3 = checkFrozenState(G, sele3, state3); | |||
if(query_obj) { | frozen4 = checkFrozenState(G, sele4, state4); | |||
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--; | ||||
} | ||||
/* updated state handling */ | ||||
/* determine the selected object */ | ||||
if(sele4 >= 0) | ||||
query_obj = (CObject*) SelectorGetSingleObjectMolecule(G, sele4); | ||||
if(query_obj) { | ||||
frozen4 = SettingGetIfDefined_i(query_obj->G, query_obj->Setting, cSetting_s | ||||
tate, &state4); | ||||
state4--; | ||||
} | ||||
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 */ | |||
End of changes. 9 change blocks. | ||||
44 lines changed or deleted | 13 lines changed or added |