Fix some inconsistencies in object visibility/selectability tests.
This commit is contained in:
parent
a2d24345bf
commit
ba1cae5a04
|
@ -121,16 +121,7 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult
|
|||
}
|
||||
else if (CTX_data_equals(member, "selectable_objects")) {
|
||||
for (Base *base = view_layer->object_bases.first; base; base = base->next) {
|
||||
if (v3d && v3d->localvd && ((base->local_view_bits & v3d->local_view_uuid) == 0)) {
|
||||
continue;
|
||||
}
|
||||
if (v3d && ((v3d->object_type_exclude_viewport & (1 << base->object->type)) != 0)) {
|
||||
continue;
|
||||
}
|
||||
if (v3d && ((v3d->object_type_exclude_select & (1 << base->object->type)) != 0)) {
|
||||
continue;
|
||||
}
|
||||
if (((base->flag & BASE_VISIBLE) != 0) && ((base->flag & BASE_SELECTABLE) != 0)) {
|
||||
if (BASE_SELECTABLE_BGMODE(v3d, base)) {
|
||||
CTX_data_id_list_add(result, &base->object->id);
|
||||
}
|
||||
}
|
||||
|
@ -180,16 +171,7 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult
|
|||
}
|
||||
else if (CTX_data_equals(member, "selectable_bases")) {
|
||||
for (Base *base = view_layer->object_bases.first; base; base = base->next) {
|
||||
if (v3d && v3d->localvd && ((base->local_view_bits & v3d->local_view_uuid) == 0)) {
|
||||
continue;
|
||||
}
|
||||
if (v3d && ((v3d->object_type_exclude_viewport & (1 << base->object->type)) != 0)) {
|
||||
continue;
|
||||
}
|
||||
if (v3d && ((v3d->object_type_exclude_select & (1 << base->object->type)) != 0)) {
|
||||
continue;
|
||||
}
|
||||
if ((base->flag & BASE_VISIBLE) && (base->flag & BASE_SELECTABLE) != 0) {
|
||||
if (BASE_SELECTABLE_BGMODE(v3d, base)) {
|
||||
CTX_data_list_add(result, &scene->id, &RNA_ObjectBase, base);
|
||||
}
|
||||
}
|
||||
|
@ -198,13 +180,7 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult
|
|||
}
|
||||
else if (CTX_data_equals(member, "selected_bases")) {
|
||||
for (Base *base = view_layer->object_bases.first; base; base = base->next) {
|
||||
if (v3d && v3d->localvd && ((base->local_view_bits & v3d->local_view_uuid) == 0)) {
|
||||
continue;
|
||||
}
|
||||
if (v3d && ((v3d->object_type_exclude_viewport & (1 << base->object->type)) != 0)) {
|
||||
continue;
|
||||
}
|
||||
if ((base->flag & BASE_SELECTED) != 0) {
|
||||
if (BASE_VISIBLE_BGMODE(v3d, base) && (base->flag & BASE_SELECTED) != 0) {
|
||||
CTX_data_list_add(result, &scene->id, &RNA_ObjectBase, base);
|
||||
}
|
||||
}
|
||||
|
@ -213,13 +189,7 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult
|
|||
}
|
||||
else if (CTX_data_equals(member, "selected_editable_bases")) {
|
||||
for (Base *base = view_layer->object_bases.first; base; base = base->next) {
|
||||
if (v3d && v3d->localvd && ((base->local_view_bits & v3d->local_view_uuid) == 0)) {
|
||||
continue;
|
||||
}
|
||||
if (v3d && ((v3d->object_type_exclude_viewport & (1 << base->object->type)) != 0)) {
|
||||
continue;
|
||||
}
|
||||
if ((base->flag & BASE_SELECTED) != 0) {
|
||||
if (BASE_VISIBLE_BGMODE(v3d, base) && (base->flag & BASE_SELECTED) != 0) {
|
||||
if (0 == BKE_object_is_libdata(base->object)) {
|
||||
CTX_data_list_add(result, &scene->id, &RNA_ObjectBase, base);
|
||||
}
|
||||
|
@ -231,13 +201,7 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult
|
|||
else if (CTX_data_equals(member, "editable_bases")) {
|
||||
/* Visible + Editable, but not necessarily selected */
|
||||
for (Base *base = view_layer->object_bases.first; base; base = base->next) {
|
||||
if (v3d && v3d->localvd && ((base->local_view_bits & v3d->local_view_uuid) == 0)) {
|
||||
continue;
|
||||
}
|
||||
if (v3d && ((v3d->object_type_exclude_viewport & (1 << base->object->type)) != 0)) {
|
||||
continue;
|
||||
}
|
||||
if ((base->flag & BASE_VISIBLE) != 0) {
|
||||
if (BASE_VISIBLE_BGMODE(v3d, base)) {
|
||||
if (0 == BKE_object_is_libdata(base->object)) {
|
||||
CTX_data_list_add(result, &scene->id, &RNA_ObjectBase, base);
|
||||
}
|
||||
|
|
|
@ -138,7 +138,7 @@ static bool WIDGETGROUP_armature_spline_poll(const bContext *C, wmGizmoGroupType
|
|||
|
||||
ViewLayer *view_layer = CTX_data_view_layer(C);
|
||||
Base *base = BASACT(view_layer);
|
||||
if (base && BASE_VISIBLE(v3d, base) && BASE_SELECTABLE(v3d, base)) {
|
||||
if (base && BASE_SELECTABLE(v3d, base)) {
|
||||
Object *ob = BKE_object_pose_armature_get(base->object);
|
||||
if (ob) {
|
||||
const bArmature *arm = ob->data;
|
||||
|
|
|
@ -72,7 +72,7 @@ static bool WIDGETGROUP_camera_poll(const bContext *C, wmGizmoGroupType *UNUSED(
|
|||
|
||||
ViewLayer *view_layer = CTX_data_view_layer(C);
|
||||
Base *base = BASACT(view_layer);
|
||||
if (base && BASE_VISIBLE(v3d, base) && BASE_SELECTABLE(v3d, base)) {
|
||||
if (base && BASE_SELECTABLE(v3d, base)) {
|
||||
Object *ob = base->object;
|
||||
if (ob->type == OB_CAMERA) {
|
||||
Camera *camera = ob->data;
|
||||
|
|
|
@ -120,7 +120,7 @@ static bool WIDGETGROUP_empty_image_poll(const bContext *C, wmGizmoGroupType *UN
|
|||
|
||||
ViewLayer *view_layer = CTX_data_view_layer(C);
|
||||
Base *base = BASACT(view_layer);
|
||||
if (base && BASE_VISIBLE(v3d, base) && BASE_SELECTABLE(v3d, base)) {
|
||||
if (base && BASE_SELECTABLE(v3d, base)) {
|
||||
Object *ob = base->object;
|
||||
if (ob->type == OB_EMPTY) {
|
||||
if (ob->empty_drawtype == OB_EMPTY_IMAGE) {
|
||||
|
|
|
@ -64,7 +64,7 @@ static bool WIDGETGROUP_forcefield_poll(const bContext *C, wmGizmoGroupType *UNU
|
|||
|
||||
ViewLayer *view_layer = CTX_data_view_layer(C);
|
||||
Base *base = BASACT(view_layer);
|
||||
if (base && BASE_VISIBLE(v3d, base) && BASE_SELECTABLE(v3d, base)) {
|
||||
if (base && BASE_SELECTABLE(v3d, base)) {
|
||||
Object *ob = base->object;
|
||||
if (ob->pd && ob->pd->forcefield) {
|
||||
return true;
|
||||
|
|
|
@ -65,7 +65,7 @@ static bool WIDGETGROUP_lamp_spot_poll(const bContext *C, wmGizmoGroupType *UNUS
|
|||
|
||||
ViewLayer *view_layer = CTX_data_view_layer(C);
|
||||
Base *base = BASACT(view_layer);
|
||||
if (base && BASE_VISIBLE(v3d, base) && BASE_SELECTABLE(v3d, base)) {
|
||||
if (base && BASE_SELECTABLE(v3d, base)) {
|
||||
Object *ob = base->object;
|
||||
if (ob->type == OB_LAMP) {
|
||||
Lamp *la = ob->data;
|
||||
|
@ -174,7 +174,7 @@ static bool WIDGETGROUP_lamp_area_poll(const bContext *C, wmGizmoGroupType *UNUS
|
|||
|
||||
ViewLayer *view_layer = CTX_data_view_layer(C);
|
||||
Base *base = BASACT(view_layer);
|
||||
if (base && BASE_VISIBLE(v3d, base) && BASE_SELECTABLE(v3d, base)) {
|
||||
if (base && BASE_SELECTABLE(v3d, base)) {
|
||||
Object *ob = base->object;
|
||||
if (ob->type == OB_LAMP) {
|
||||
Lamp *la = ob->data;
|
||||
|
@ -258,7 +258,7 @@ static bool WIDGETGROUP_lamp_target_poll(const bContext *C, wmGizmoGroupType *UN
|
|||
|
||||
ViewLayer *view_layer = CTX_data_view_layer(C);
|
||||
Base *base = BASACT(view_layer);
|
||||
if (base && BASE_VISIBLE(v3d, base) && BASE_SELECTABLE(v3d, base)) {
|
||||
if (base && BASE_SELECTABLE(v3d, base)) {
|
||||
Object *ob = base->object;
|
||||
if (ob->type == OB_LAMP) {
|
||||
Lamp *la = ob->data;
|
||||
|
|
|
@ -1819,41 +1819,32 @@ extern const char *RE_engine_id_CYCLES;
|
|||
#define MINAFRAMEF -1048574.0f
|
||||
|
||||
/* deprecate this! */
|
||||
#define TESTBASE(v3d, base) ( \
|
||||
(((v3d)->localvd == NULL) || ((v3d)->local_view_uuid & (base)->local_view_bits)) && \
|
||||
(((1 << (base)->object->type) & (v3d)->object_type_exclude_viewport) == 0) && \
|
||||
(((base)->flag & BASE_SELECTED) != 0) && \
|
||||
#define BASE_VISIBLE(v3d, base) ( \
|
||||
(((v3d)->localvd == NULL) || ((v3d)->local_view_uuid & (base)->local_view_bits)) && \
|
||||
(((1 << (base)->object->type) & (v3d)->object_type_exclude_viewport) == 0) && \
|
||||
(((base)->flag & BASE_VISIBLE) != 0))
|
||||
#define TESTBASELIB(v3d, base) ( \
|
||||
(((v3d)->localvd == NULL) || ((v3d)->local_view_uuid & (base)->local_view_bits)) && \
|
||||
(((1 << (base)->object->type) & (v3d)->object_type_exclude_viewport) == 0) && \
|
||||
(((base)->flag & BASE_SELECTED) != 0) && \
|
||||
((base)->object->id.lib == NULL) && \
|
||||
(((base)->flag & BASE_VISIBLE) != 0))
|
||||
#define TESTBASELIB_BGMODE(v3d, base) ( \
|
||||
#define BASE_VISIBLE_BGMODE(v3d, base) ( \
|
||||
((v3d == NULL) || ((v3d)->localvd == NULL) || ((v3d)->local_view_uuid & (base)->local_view_bits)) && \
|
||||
((v3d == NULL) || (((1 << (base)->object->type) & (v3d)->object_type_exclude_viewport) == 0)) && \
|
||||
(((base)->flag & BASE_SELECTED) != 0) && \
|
||||
((base)->object->id.lib == NULL) && \
|
||||
((v3d == NULL) || (((1 << (base)->object->type) & (v3d)->object_type_exclude_viewport) == 0)) && \
|
||||
(((base)->flag & BASE_VISIBLE) != 0))
|
||||
#define BASE_EDITABLE_BGMODE(v3d, base) ( \
|
||||
((v3d == NULL) || ((v3d)->localvd == NULL) || ((v3d)->local_view_uuid & (base)->local_view_bits)) && \
|
||||
((v3d == NULL) || (((1 << (base)->object->type) & (v3d)->object_type_exclude_viewport) == 0)) && \
|
||||
((base)->object->id.lib == NULL) && \
|
||||
(((base)->flag & BASE_VISIBLE) != 0))
|
||||
#define BASE_SELECTABLE(v3d, base) ( \
|
||||
(((v3d)->localvd == NULL) || ((v3d)->local_view_uuid & (base)->local_view_bits)) && \
|
||||
(((1 << (base)->object->type) & (v3d)->object_type_exclude_viewport) == 0) && \
|
||||
(((1 << (base)->object->type) & (v3d)->object_type_exclude_select) == 0) && \
|
||||
|
||||
#define BASE_SELECTABLE(v3d, base) ( \
|
||||
BASE_VISIBLE(v3d, base) && \
|
||||
(((1 << (base)->object->type) & (v3d)->object_type_exclude_select) == 0) && \
|
||||
(((base)->flag & BASE_SELECTABLE) != 0))
|
||||
#define BASE_VISIBLE(v3d, base) ( \
|
||||
(((v3d)->localvd == NULL) || ((v3d)->local_view_uuid & (base)->local_view_bits)) && \
|
||||
(((1 << (base)->object->type) & (v3d)->object_type_exclude_viewport) == 0) && \
|
||||
(((base)->flag & BASE_VISIBLE) != 0))
|
||||
#define BASE_VISIBLE_BGMODE(v3d, base) ( \
|
||||
((v3d == NULL) || ((v3d)->localvd == NULL) || ((v3d)->local_view_uuid & (base)->local_view_bits)) && \
|
||||
((v3d == NULL) || (((1 << (base)->object->type) & (v3d)->object_type_exclude_viewport) == 0)) && \
|
||||
(((base)->flag & BASE_VISIBLE) != 0))
|
||||
#define BASE_SELECTABLE_BGMODE(v3d, base) ( \
|
||||
BASE_VISIBLE_BGMODE(v3d, base) && \
|
||||
((v3d == NULL) || (((1 << (base)->object->type) & (v3d)->object_type_exclude_select) == 0)) && \
|
||||
(((base)->flag & BASE_SELECTABLE) != 0))
|
||||
|
||||
#define TESTBASE(v3d, base) \
|
||||
(BASE_VISIBLE(v3d, base) && (((base)->flag & BASE_SELECTED) != 0))
|
||||
#define TESTBASELIB(v3d, base) \
|
||||
(TESTBASE(v3d, base) && ((base)->object->id.lib == NULL))
|
||||
#define BASE_EDITABLE_BGMODE(v3d, base) \
|
||||
(BASE_VISIBLE_BGMODE(v3d, base) && ((base)->object->id.lib == NULL))
|
||||
#define TESTBASELIB_BGMODE(v3d, base) \
|
||||
(BASE_EDITABLE_BGMODE(v3d, base) && (((base)->flag & BASE_SELECTED) != 0))
|
||||
|
||||
#define FIRSTBASE(_view_layer) ((_view_layer)->object_bases.first)
|
||||
#define LASTBASE(_view_layer) ((_view_layer)->object_bases.last)
|
||||
|
|
|
@ -142,11 +142,7 @@ static bool rna_Object_visible_get(Object *ob, bContext *C, ReportList *reports)
|
|||
return false;
|
||||
}
|
||||
|
||||
if (v3d && v3d->localvd && ((base->local_view_bits & v3d->local_view_uuid) == 0)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return ((base->flag & BASE_VISIBLE) != 0);
|
||||
return BASE_VISIBLE_BGMODE(v3d, base);
|
||||
}
|
||||
|
||||
static bool rna_Object_holdout_get(Object *ob, ReportList *reports, ViewLayer *view_layer)
|
||||
|
|
Loading…
Reference in New Issue