made blender take hidden objects into account in more situations.

Ctrl+RMB used to select a hidden object as well as "Select Grouped -> Parent"

Also made OOps and data browser check for hidden objects.

Added a countall to hide/unhide objects.
This commit is contained in:
Campbell Barton 2007-04-25 02:20:55 +00:00
parent 0c7e145dce
commit 13b1fbd665
6 changed files with 13 additions and 14 deletions

@ -97,7 +97,7 @@
#define TESTBASE(base) ( ((base)->flag & SELECT) && ((base)->lay & G.vd->lay) && (((base)->object->restrictflag & OB_RESTRICT_VIEW)==0) )
#define TESTBASELIB(base) ( ((base)->flag & SELECT) && ((base)->lay & G.vd->lay) && ((base)->object->id.lib==0) && (((base)->object->restrictflag & OB_RESTRICT_VIEW)==0))
#define BASE_SELECTABLE(base) ((base->lay & G.vd->lay) && !(base->object->restrictflag & OB_RESTRICT_SELECT) && !(base->object->restrictflag & OB_RESTRICT_VIEW))
#define BASE_SELECTABLE(base) ((base->lay & G.vd->lay) && (base->object->restrictflag & (OB_RESTRICT_SELECT|OB_RESTRICT_VIEW))==0)
#define FIRSTBASE G.scene->base.first
#define LASTBASE G.scene->base.last
#define BASACT (G.scene->basact)

@ -5477,6 +5477,7 @@ void hide_objects(int select)
DAG_scene_sort(G.scene);
allqueue(REDRAWVIEW3D,0);
allqueue(REDRAWOOPS,0);
countall();
}
}
@ -5497,5 +5498,6 @@ void show_objects(void)
DAG_scene_sort(G.scene);
allqueue(REDRAWVIEW3D,0);
allqueue(REDRAWOOPS,0);
countall();
}
}

@ -103,8 +103,10 @@ static void oops_to_select_objects(void)
if(oops->hide==0) {
if(oops->type==ID_OB) {
ob= (Object *)oops->id;
if(oops->flag & SELECT) ob->flag |= SELECT;
else ob->flag &= ~SELECT;
if ((ob->flag & OB_RESTRICT_VIEW)==0) {
if(oops->flag & SELECT) ob->flag |= SELECT;
else ob->flag &= ~SELECT;
}
}
}
oops= oops->next;

@ -1183,10 +1183,7 @@ static Base *mouse_select_menu(unsigned int *buffer, int hits, short *mval)
char str[32];
for(base=FIRSTBASE; base; base= base->next) {
if(base->lay & G.vd->lay &&
(base->object->restrictflag & OB_RESTRICT_SELECT)==0 &&
(base->object->restrictflag & OB_RESTRICT_VIEW)==0
) {
if BASE_SELECTABLE(base) {
baseList[baseCount] = NULL;
/* two selection methods, the CTRL select uses max dist of 15 */
@ -1304,9 +1301,7 @@ void mouse_select(void)
else {
base= startbase;
while(base) {
if(base->lay & G.vd->lay) {
if BASE_SELECTABLE(base) {
project_short(base->object->obmat[3], &base->sx);
temp= abs(base->sx -mval[0]) + abs(base->sy -mval[1]);
@ -1453,7 +1448,7 @@ void mouse_select(void)
select_base_v3d(basact, BA_SELECT);
}
/* also prevent making it active on mouse selection */
else if (!(basact->object->restrictflag & OB_RESTRICT_SELECT)) {
else if BASE_SELECTABLE(basact) {
oldbasact= BASACT;
BASACT= basact;

@ -2519,7 +2519,7 @@ static void filesel_select_objects(SpaceFile *sfile)
ob= (Object *)sfile->filelist[a].poin;
if(ob) {
if(ob && (ob->flag & OB_RESTRICT_VIEW)==0) {
if(sfile->filelist[a].flags & ACTIVE) ob->flag |= SELECT;
else ob->flag &= ~SELECT;
}
@ -2561,7 +2561,7 @@ static void active_file_object(SpaceFile *sfile)
ob= (Object *)sfile->filelist[sfile->act].poin;
if(ob) {
if(ob && (ob->flag & OB_RESTRICT_VIEW)==0) {
set_active_object(ob);
if(BASACT && BASACT->object==ob) {
BASACT->flag |= SELECT;

@ -699,7 +699,7 @@ static short select_parent(void) /* Makes parent active and de-selected OBACT */
if(base==startbase) break;
}
/* can be NULL if parent in other scene */
if(basact) {
if(basact && BASE_SELECTABLE(basact)) {
oldbasact = BASACT;
BASACT = basact;
basact->flag |= SELECT;