Fix [#22383] 3dView Layer Management (by Mouse) broken
This commit is contained in:
parent
ab5367e09f
commit
b0eee216d4
@ -10852,6 +10852,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
|
||||
/* put 2.50 compatibility code here until next subversion bump */
|
||||
{
|
||||
Object *ob;
|
||||
Scene *scene;
|
||||
bScreen *sc;
|
||||
|
||||
for (sc= main->screen.first; sc; sc= sc->id.next) {
|
||||
@ -10908,6 +10909,18 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* initialise scene active layer */
|
||||
for (scene= main->scene.first; scene; scene=scene->id.next) {
|
||||
int i;
|
||||
for(i=0; i<20; i++) {
|
||||
if(scene->lay & (1<<i)) {
|
||||
scene->layact= 1<<i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* WATCH IT!!!: pointers from libdata have not been converted yet here! */
|
||||
|
@ -153,7 +153,7 @@ struct RegionView3D *ED_view3d_context_rv3d(struct bContext *C);
|
||||
|
||||
void ED_view3d_init_mats_rv3d(struct Object *ob, struct RegionView3D *rv3d);
|
||||
|
||||
int ED_view3d_scene_layer_set(int lay, const int *values);
|
||||
int ED_view3d_scene_layer_set(int lay, const int *values, int *active);
|
||||
|
||||
int ED_view3d_context_activate(struct bContext *C);
|
||||
void ED_view3d_draw_offscreen(struct Scene *scene, struct View3D *v3d, struct ARegion *ar,
|
||||
|
@ -212,12 +212,13 @@ static void object_add_generic_invoke_options(bContext *C, wmOperator *op)
|
||||
for(a=0; a<32; a++)
|
||||
values[a]= (layer & (1<<a));
|
||||
} else {
|
||||
layer = v3d->layact;
|
||||
layer = (v3d->scenelock)?scene->layact:v3d->layact;
|
||||
|
||||
for(a=0; a<32; a++)
|
||||
values[a]= (layer & (1<<a));
|
||||
}
|
||||
} else {
|
||||
layer = scene->lay;
|
||||
layer = scene->layact;
|
||||
for(a=0; a<32; a++)
|
||||
values[a]= (layer & (1<<a));
|
||||
}
|
||||
|
@ -137,6 +137,7 @@ static void handle_view3d_lock(bContext *C)
|
||||
if(v3d->localvd==NULL && v3d->scenelock && sa->spacetype==SPACE_VIEW3D) {
|
||||
/* copy to scene */
|
||||
scene->lay= v3d->lay;
|
||||
scene->layact= v3d->layact;
|
||||
scene->camera= v3d->camera;
|
||||
|
||||
/* not through notifiery, listener don't have context
|
||||
|
@ -1380,7 +1380,7 @@ static unsigned int free_localbit(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ED_view3d_scene_layer_set(int lay, const int *values)
|
||||
int ED_view3d_scene_layer_set(int lay, const int *values, int *active)
|
||||
{
|
||||
int i, tot= 0;
|
||||
|
||||
@ -1393,10 +1393,28 @@ int ED_view3d_scene_layer_set(int lay, const int *values)
|
||||
return lay;
|
||||
|
||||
for(i=0; i<20; i++) {
|
||||
if(values[i]) lay |= (1<<i);
|
||||
|
||||
if (active) {
|
||||
/* if this value has just been switched on, make that layer active */
|
||||
if (values[i] && (lay & (1<<i))==0) {
|
||||
*active = (1<<i);
|
||||
}
|
||||
}
|
||||
|
||||
if (values[i]) lay |= (1<<i);
|
||||
else lay &= ~(1<<i);
|
||||
}
|
||||
|
||||
/* ensure always an active layer */
|
||||
if (active && (lay & *active)==0) {
|
||||
for(i=0; i<20; i++) {
|
||||
if(lay & (1<<i)) {
|
||||
*active= 1<<i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return lay;
|
||||
}
|
||||
|
||||
|
@ -755,9 +755,11 @@ typedef struct Scene {
|
||||
float cursor[3]; /* 3d cursor location */
|
||||
float twcent[3]; /* center for transform widget */
|
||||
float twmin[3], twmax[3]; /* boundbox of selection for transform widget */
|
||||
unsigned int lay;
|
||||
|
||||
|
||||
unsigned int lay; /* bitflags for layer visibility */
|
||||
int layact; /* active layer */
|
||||
int pad1;
|
||||
|
||||
short flag; /* various settings */
|
||||
|
||||
short use_nodes;
|
||||
|
@ -272,7 +272,7 @@ static void rna_Scene_layer_set(PointerRNA *ptr, const int *values)
|
||||
{
|
||||
Scene *scene= (Scene*)ptr->data;
|
||||
|
||||
scene->lay= ED_view3d_scene_layer_set(scene->lay, values);
|
||||
scene->lay= ED_view3d_scene_layer_set(scene->lay, values, &scene->layact);
|
||||
}
|
||||
|
||||
static void rna_Scene_view3d_update(Main *bmain, Scene *unused, PointerRNA *ptr)
|
||||
@ -734,7 +734,7 @@ static int rna_RenderSettings_use_game_engine_get(PointerRNA *ptr)
|
||||
static void rna_SceneRenderLayer_layer_set(PointerRNA *ptr, const int *values)
|
||||
{
|
||||
SceneRenderLayer *rl= (SceneRenderLayer*)ptr->data;
|
||||
rl->lay= ED_view3d_scene_layer_set(rl->lay, values);
|
||||
rl->lay= ED_view3d_scene_layer_set(rl->lay, values, NULL);
|
||||
}
|
||||
|
||||
static void rna_SceneRenderLayer_pass_update(Main *bmain, Scene *unused, PointerRNA *ptr)
|
||||
|
@ -303,7 +303,7 @@ static void rna_SpaceView3D_layer_set(PointerRNA *ptr, const int *values)
|
||||
{
|
||||
View3D *v3d= (View3D*)(ptr->data);
|
||||
|
||||
v3d->lay= ED_view3d_scene_layer_set(v3d->lay, values);
|
||||
v3d->lay= ED_view3d_scene_layer_set(v3d->lay, values, &v3d->layact);
|
||||
}
|
||||
|
||||
static PointerRNA rna_SpaceView3D_region_3d_get(PointerRNA *ptr)
|
||||
|
Loading…
Reference in New Issue
Block a user