[Bf-blender-cvs] [0b964ad] temp_localview_split: Some more tweaks for local view checks

Julian Eisel noreply at git.blender.org
Sat Aug 6 03:41:42 CEST 2016


Commit: 0b964ad7f0f8096c9d23bbca4f74adee9e5e5d0b
Author: Julian Eisel
Date:   Sat Aug 6 03:18:15 2016 +0200
Branches: temp_localview_split
https://developer.blender.org/rB0b964ad7f0f8096c9d23bbca4f74adee9e5e5d0b

Some more tweaks for local view checks

===================================================================

M	source/blender/editors/screen/screen_context.c
M	source/blender/editors/space_view3d/view3d_view.c
M	source/blender/editors/transform/transform_manipulator.c

===================================================================

diff --git a/source/blender/editors/screen/screen_context.c b/source/blender/editors/screen/screen_context.c
index f005a6b..4f379c4 100644
--- a/source/blender/editors/screen/screen_context.c
+++ b/source/blender/editors/screen/screen_context.c
@@ -117,10 +117,9 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult
 	base = BASACT;
 #endif
 
-/* helper to check if base is visible considering layer and local view */
-#define LAYER_AND_LOCALVIEW_CHECK(localviews, base, lay) \
-	(BKE_localview_is_valid(localviews) ? \
-	     BKE_localview_info_cmp(localviews, base->object->localview) : (base->lay & lay))
+/* helper to check for local view if needed */
+#define LOCALVIEW_CHECK(localviews, base) \
+	(!BKE_localview_is_valid(localviews) || BKE_localview_info_cmp(localviews, base->object->localview))
 
 	if (CTX_data_dir(member)) {
 		CTX_data_dir_set(result, screen_context_dir);
@@ -136,8 +135,8 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult
 		const bool visible_objects = CTX_data_equals(member, "visible_objects");
 
 		for (base = scene->base.first; base; base = base->next) {
-			if ((base->object->restrictflag & OB_RESTRICT_VIEW) == 0) {
-				if (LAYER_AND_LOCALVIEW_CHECK(localviews, base, lay)) {
+			if ((base->object->restrictflag & OB_RESTRICT_VIEW) == 0 && (base->lay & lay)) {
+				if (LOCALVIEW_CHECK(localviews, base)) {
 					if (visible_objects)
 						CTX_data_id_list_add(result, &base->object->id);
 					else
@@ -154,8 +153,8 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult
 		const bool selectable_objects = CTX_data_equals(member, "selectable_objects");
 
 		for (base = scene->base.first; base; base = base->next) {
-			if ((base->object->restrictflag & (OB_RESTRICT_VIEW | OB_RESTRICT_SELECT)) == 0) {
-				if (LAYER_AND_LOCALVIEW_CHECK(localviews, base, lay)) {
+			if ((base->object->restrictflag & (OB_RESTRICT_VIEW | OB_RESTRICT_SELECT)) == 0 && (base->lay & lay)) {
+				if (LOCALVIEW_CHECK(localviews, base)) {
 					if (selectable_objects)
 						CTX_data_id_list_add(result, &base->object->id);
 					else
@@ -172,8 +171,8 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult
 		const bool selected_objects = CTX_data_equals(member, "selected_objects");
 
 		for (base = scene->base.first; base; base = base->next) {
-			if ((base->flag & SELECT)) {
-				if (LAYER_AND_LOCALVIEW_CHECK(localviews, base, lay)) {
+			if ((base->flag & SELECT) && (base->lay & lay)) {
+				if (LOCALVIEW_CHECK(localviews, base)) {
 					if (selected_objects)
 						CTX_data_id_list_add(result, &base->object->id);
 					else
@@ -190,8 +189,8 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult
 		const bool selected_editable_objects = CTX_data_equals(member, "selected_editable_objects");
 
 		for (base = scene->base.first; base; base = base->next) {
-			if ((base->flag & SELECT) && (base->object->restrictflag & OB_RESTRICT_VIEW) == 0) {
-				if (LAYER_AND_LOCALVIEW_CHECK(localviews, base, lay)) {
+			if ((base->flag & SELECT) && (base->object->restrictflag & OB_RESTRICT_VIEW) == 0 && (base->lay & lay)) {
+				if (LOCALVIEW_CHECK(localviews, base)) {
 					if (0 == BKE_object_is_libdata(base->object)) {
 						if (selected_editable_objects)
 							CTX_data_id_list_add(result, &base->object->id);
@@ -211,8 +210,8 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult
 
 		/* Visible + Editable, but not necessarily selected */
 		for (base = scene->base.first; base; base = base->next) {
-			if ((base->object->restrictflag & OB_RESTRICT_VIEW) == 0) {
-				if (LAYER_AND_LOCALVIEW_CHECK(localviews, base, lay)) {
+			if ((base->object->restrictflag & OB_RESTRICT_VIEW) == 0 && (base->lay & lay)) {
+				if (LOCALVIEW_CHECK(localviews, base)) {
 					if (0 == BKE_object_is_libdata(base->object)) {
 						if (editable_objects)
 							CTX_data_id_list_add(result, &base->object->id);
@@ -638,7 +637,7 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult
 		return 0; /* not found */
 	}
 
-#undef LAYER_AND_LOCALVIEW_CHECK
+#undef LOCALVIEW_CHECK
 
 	return -1; /* found but not available */
 }
diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c
index dd99fe4..e851f12 100644
--- a/source/blender/editors/space_view3d/view3d_view.c
+++ b/source/blender/editors/space_view3d/view3d_view.c
@@ -1060,7 +1060,7 @@ static void view3d_select_loop(ViewContext *vc, Scene *scene, View3D *v3d, ARegi
 
 		v3d->xray = true;  /* otherwise it postpones drawing */
 		for (base = scene->base.first; base; base = base->next) {
-			if (base->lay & v3d->lay && BKE_localview_is_object_visible(v3d, base->object)) {
+			if ((base->lay & v3d->lay) && BKE_localview_is_object_visible(v3d, base->object)) {
 				if ((base->object->restrictflag & OB_RESTRICT_SELECT) ||
 				    (use_obedit_skip && (scene->obedit->data == base->object->data)))
 				{
diff --git a/source/blender/editors/transform/transform_manipulator.c b/source/blender/editors/transform/transform_manipulator.c
index 52e27f7..f0d2bb1 100644
--- a/source/blender/editors/transform/transform_manipulator.c
+++ b/source/blender/editors/transform/transform_manipulator.c
@@ -341,7 +341,7 @@ static int calc_manipulator_stats(const bContext *C)
 	}
 	else if (obedit) {
 		ob = obedit;
-		if (v3d->localviewd ? !BKE_localview_is_object_visible(v3d, ob) : (ob->lay & v3d->lay) == 0)
+		if ((ob->lay & v3d->lay) == 0 || !BKE_localview_is_object_visible(v3d, ob))
 			return 0;
 
 		if (obedit->type == OB_MESH) {
@@ -526,7 +526,7 @@ static int calc_manipulator_stats(const bContext *C)
 		int mode = TFM_ROTATION; // mislead counting bones... bah. We don't know the manipulator mode, could be mixed
 		bool ok = false;
 
-		if (v3d->localviewd ? !BKE_localview_is_object_visible(v3d, ob) : (ob->lay & v3d->lay) == 0)
+		if ((ob->lay & v3d->lay) == 0 || !BKE_localview_is_object_visible(v3d, ob))
 			return 0;
 
 		if ((v3d->around == V3D_AROUND_ACTIVE) && (pchan = BKE_pose_channel_active(ob))) {




More information about the Bf-blender-cvs mailing list