[Bf-blender-cvs] [a38298f4dd] blender2.8: Bring back Lasso and Circle selection back

Dalai Felinto noreply at git.blender.org
Wed Feb 8 14:44:55 CET 2017


Commit: a38298f4dd1673a8305abdab687fc4a16f383e5f
Author: Dalai Felinto
Date:   Wed Feb 8 12:26:41 2017 +0100
Branches: blender2.8
https://developer.blender.org/rBa38298f4dd1673a8305abdab687fc4a16f383e5f

Bring back Lasso and Circle selection back

(and replace more instances of BaseLegacy/scene->base with Base/sl->object_bases)

Still need mouse selection, box selection, and menu selection

Also, there is still a problem with BA_WAS_SEL, at the moment only the
objects centers are highlighted.

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

M	source/blender/blenkernel/BKE_scene.h
M	source/blender/blenkernel/intern/scene.c
M	source/blender/editors/curve/editcurve_paint.c
M	source/blender/editors/include/ED_view3d.h
M	source/blender/editors/space_view3d/drawobject.c
M	source/blender/editors/space_view3d/view3d_draw.c
M	source/blender/editors/space_view3d/view3d_draw_legacy.c
M	source/blender/editors/space_view3d/view3d_intern.h
M	source/blender/editors/space_view3d/view3d_project.c
M	source/blender/editors/space_view3d/view3d_select.c
M	source/blender/editors/space_view3d/view3d_view.c
M	source/blender/editors/transform/transform.h
M	source/blender/editors/transform/transform_conversions.c
M	source/blender/editors/transform/transform_generics.c
M	source/blender/makesdna/DNA_scene_types.h

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

diff --git a/source/blender/blenkernel/BKE_scene.h b/source/blender/blenkernel/BKE_scene.h
index 53bb69aedb..181d4b1270 100644
--- a/source/blender/blenkernel/BKE_scene.h
+++ b/source/blender/blenkernel/BKE_scene.h
@@ -47,6 +47,7 @@ struct QuicktimeCodecData;
 struct RenderData;
 struct SceneRenderLayer;
 struct Scene;
+struct SceneLayer;
 struct UnitSettings;
 struct Main;
 
@@ -95,7 +96,7 @@ typedef struct SceneBaseIter {
 int BKE_scene_base_iter_next(struct EvaluationContext *eval_ctx, struct SceneBaseIter *iter,
                              struct Scene **scene, int val, struct BaseLegacy **base, struct Object **ob);
 
-void BKE_scene_base_flag_to_objects(struct Scene *scene);
+void BKE_scene_base_flag_to_objects(struct SceneLayer *sl);
 void BKE_scene_base_flag_from_objects(struct Scene *scene);
 void BKE_scene_base_flag_sync_from_base(struct BaseLegacy *base);
 void BKE_scene_base_flag_sync_from_object(struct BaseLegacy *base);
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c
index 1ce4bf8f9e..6204a831fd 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -1746,40 +1746,24 @@ bool BKE_scene_uses_blender_game(const Scene *scene)
 	return STREQ(scene->r.engine, RE_engine_id_BLENDER_GAME);
 }
 
-void BKE_scene_base_flag_to_objects(struct Scene *scene)
+void BKE_scene_base_flag_to_objects(SceneLayer *sl)
 {
-	BaseLegacy *base = scene->base.first;
+	Base *base = sl->object_bases.first;
 
 	while (base) {
-		BKE_scene_base_flag_sync_from_base(base);
-		base = base->next;
-	}
-}
-
-void BKE_scene_base_flag_from_objects(struct Scene *scene)
-{
-	BaseLegacy *base = scene->base.first;
-
-	while (base) {
-		BKE_scene_base_flag_sync_from_object(base);
+		BKE_scene_object_base_flag_sync_from_base(base);
 		base = base->next;
 	}
 }
 
 void BKE_scene_base_flag_sync_from_base(BaseLegacy *base)
 {
-	Object *ob = base->object;
-
-	/* keep the object only flags untouched */
-	int flag = ob->flag & OB_FROMGROUP;
-
-	ob->flag = base->flag_legacy;
-	ob->flag |= flag;
+	BKE_scene_object_base_flag_sync_from_base(base);
 }
 
 void BKE_scene_base_flag_sync_from_object(BaseLegacy *base)
 {
-	base->flag_legacy = base->object->flag;
+	BKE_scene_object_base_flag_sync_from_object(base);
 }
 
 void BKE_scene_object_base_flag_sync_from_base(Base *base)
@@ -1791,11 +1775,27 @@ void BKE_scene_object_base_flag_sync_from_base(Base *base)
 
 	ob->flag = base->flag;
 	ob->flag |= flag;
+
+	if ((base->flag & BASE_SELECTED) != 0) {
+		ob->flag |= SELECT;
+	}
+	else {
+		ob->flag &= ~SELECT;
+	}
 }
 
 void BKE_scene_object_base_flag_sync_from_object(Base *base)
 {
-	base->flag = base->object->flag;
+	Object *ob = base->object;
+	base->flag = ob->flag;
+
+	if ((ob->flag & SELECT) != 0) {
+		base->flag |= BASE_SELECTED;
+		BLI_assert((base->flag & BASE_SELECTABLED) != 0);
+	}
+	else {
+		base->flag &= ~BASE_SELECTED;
+	}
 }
 
 void BKE_scene_disable_color_management(Scene *scene)
diff --git a/source/blender/editors/curve/editcurve_paint.c b/source/blender/editors/curve/editcurve_paint.c
index f0cec1a84b..4720b76342 100644
--- a/source/blender/editors/curve/editcurve_paint.c
+++ b/source/blender/editors/curve/editcurve_paint.c
@@ -703,6 +703,7 @@ static bool curve_draw_init(bContext *C, wmOperator *op, bool is_invoke)
 	}
 	else {
 		cdd->vc.scene = CTX_data_scene(C);
+		cdd->vc.sl = CTX_data_scene_layer(C);
 		cdd->vc.obedit = CTX_data_edit_object(C);
 	}
 
diff --git a/source/blender/editors/include/ED_view3d.h b/source/blender/editors/include/ED_view3d.h
index 3bbc761774..cc83b97fc0 100644
--- a/source/blender/editors/include/ED_view3d.h
+++ b/source/blender/editors/include/ED_view3d.h
@@ -49,6 +49,7 @@ struct Nurb;
 struct Object;
 struct RegionView3D;
 struct Scene;
+struct SceneLayer;
 struct ScrArea;
 struct View3D;
 struct ViewContext;
@@ -70,6 +71,7 @@ enum eGPUFXFlags;
 /* for derivedmesh drawing callbacks, for view3d_select, .... */
 typedef struct ViewContext {
 	struct Scene *scene;
+	struct SceneLayer *sl;
 	struct Object *obact;
 	struct Object *obedit;
 	struct ARegion *ar;
diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c
index 23cbe840c9..d72f908eb3 100644
--- a/source/blender/editors/space_view3d/drawobject.c
+++ b/source/blender/editors/space_view3d/drawobject.c
@@ -1231,7 +1231,7 @@ static void draw_transp_sun_volume(Lamp *la, unsigned pos)
 }
 #endif
 
-void drawlamp(View3D *v3d, RegionView3D *rv3d, BaseLegacy *base,
+void drawlamp(View3D *v3d, RegionView3D *rv3d, Base *base,
               const char dt, const short dflag, const unsigned char ob_wire_col[4], const bool is_obact)
 {
 	Object *ob = base->object;
@@ -1309,7 +1309,7 @@ void drawlamp(View3D *v3d, RegionView3D *rv3d, BaseLegacy *base,
 		if ((dflag & DRAW_CONSTCOLOR) == 0) {
 			const float *color = curcol;
 			if (ob->id.us > 1) {
-				if (is_obact || (ob->flag & SELECT)) {
+				if (is_obact || ((base->flag & BASE_SELECTED) != 0)) {
 					static const float active_color[4] = {0.533f, 1.0f, 1.0f, 1.0f};
 					color = active_color;
 				}
@@ -2121,7 +2121,7 @@ static void drawcamera_stereo3d(
 }
 
 /* flag similar to draw_object() */
-void drawcamera(Scene *scene, View3D *v3d, RegionView3D *rv3d, BaseLegacy *base,
+void drawcamera(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base,
                 const short dflag, const unsigned char ob_wire_col[4])
 {
 	/* a standing up pyramid with (0,0,0) as top */
@@ -5678,7 +5678,7 @@ static void draw_particle_data(ParticleSystem *psys, RegionView3D *rv3d,
  * 7. clean up
  */
 static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv3d,
-                                     BaseLegacy *base, ParticleSystem *psys,
+                                     Base *base, ParticleSystem *psys,
                                      const char ob_dt, const short dflag)
 {
 	Object *ob = base->object;
@@ -5697,7 +5697,7 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
 	float cfra;
 	float ma_col[3] = {0.0f, 0.0f, 0.0f};
 	int a, totpart, totpoint = 0, totve = 0, drawn, draw_as, totchild = 0;
-	bool select = (ob->flag & SELECT) != 0, create_cdata = false, need_v = false;
+	bool select = (base->flag & BASE_SELECTED) != 0, create_cdata = false, need_v = false;
 	GLint polygonmode[2];
 	char numstr[32];
 	unsigned char tcol[4] = {0, 0, 0, 255};
@@ -7942,7 +7942,7 @@ static void drawtexspace(Object *ob)
 }
 
 /* draws wire outline */
-static void drawObjectSelect(Scene *scene, View3D *v3d, ARegion *ar, BaseLegacy *base,
+static void drawObjectSelect(Scene *scene, SceneLayer *sl, View3D *v3d, ARegion *ar, Base *base,
                              const unsigned char ob_wire_col[4])
 {
 	RegionView3D *rv3d = ar->regiondata;
@@ -7989,7 +7989,7 @@ static void drawObjectSelect(Scene *scene, View3D *v3d, ARegion *ar, BaseLegacy
 		}
 	}
 	else if (ob->type == OB_ARMATURE) {
-		if (!(ob->mode & OB_MODE_POSE && base == scene->basact)) {
+		if (!(ob->mode & OB_MODE_POSE && base == sl->basact)) {
 			glLineWidth(UI_GetThemeValuef(TH_OUTLINE_WIDTH) * 2.0f);
 			draw_armature(scene, v3d, ar, base, OB_WIRE, 0, ob_wire_col, true);
 		}
@@ -8095,7 +8095,7 @@ static void draw_rigid_body_pivot(bRigidBodyJointConstraint *data,
 	setlinestyle(0);
 }
 
-void draw_object_wire_color(Scene *scene, BaseLegacy *base, unsigned char r_ob_wire_col[4])
+void draw_object_wire_color(Scene *scene, SceneLayer *sl, Base *base, unsigned char r_ob_wire_col[4])
 {
 	Object *ob = base->object;
 	int colindex = 0;
@@ -8136,7 +8136,7 @@ void draw_object_wire_color(Scene *scene, BaseLegacy *base, unsigned char r_ob_w
 			}
 			else {
 				if ((base->flag & BASE_SELECTED) && (base->flag_legacy & BA_WAS_SEL)) {
-					theme_id = scene->basact == base ? TH_ACTIVE : TH_SELECT;
+					theme_id = sl->basact == base ? TH_ACTIVE : TH_SELECT;
 				}
 				else {
 					if (ob->type == OB_LAMP) theme_id = TH_LAMP;
@@ -8234,7 +8234,7 @@ void draw_rigidbody_shape(Object *ob)
  * main object drawing function, draws in selection
  * \param dflag (draw flag) can be DRAW_PICKING and/or DRAW_CONSTCOLOR, DRAW_SCENESET
  */
-void draw_object(Scene *scene, ARegion *ar, View3D *v3d, BaseLegacy *base, const short dflag)
+void draw_object(Scene *scene, SceneLayer *sl, ARegion *ar, View3D *v3d, Base *base, const short dflag)
 {
 	ModifierData *md = NULL;
 	Object *ob = base->object;
@@ -8244,7 +8244,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, BaseLegacy *base, const
 	unsigned char _ob_wire_col[4];            /* dont initialize this */
 	const unsigned char *ob_wire_col = NULL;  /* dont initialize this, use NULL crashes as a way to find invalid use */
 	bool zbufoff = false, is_paint = false, empty_object = false;
-	const bool is_obact = (ob == OBACT);
+	const bool is_obact = (ob == OBACT_NEW);
 	const bool render_override = (v3d->flag2 & V3D_RENDER_OVERRIDE) != 0;
 	const bool is_picking = (G.f & G_PICKSEL) != 0;
 	const bool has_particles = (ob->particlesystem.first != NULL);
@@ -8361,7 +8361,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, BaseLegacy *base, const
 
 		ED_view3d_project_base(ar, base);
 
-		draw_object_wire_color(scene, base, _ob_wire_col);
+		draw_object_wire_color(scene, sl, base, _ob_wire_col);
 		ob_wire_col = _ob_wire_col;
 
 		glColor3ubv(ob_wire_col);
@@ -8416,8 +8416,8 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, BaseLegacy *base, const
 		/* draw outline for selected objects, mesh does itself */
 		if ((v3d->flag & V3D_SELECT_OUTLINE) && !render_override && ob->type != OB_MESH) {
 			if (dt > OB_WIRE && (ob->mode & OB_MODE_EDIT) == 0 && (dflag & DRAW_SCENESET) == 0) {
-				if (!(ob->dtx & OB_DRAWWIRE) && (ob->flag & SELECT) && !(dflag & (DRAW_PICKING | DRAW_CONSTCOLOR))) {
-					drawObjectSelect(scene, v3d, ar, base, ob_wire_col);
+				if (!(ob->dtx & OB_DRAWWIRE) && (base->flag & BASE_SELECTED) && !(dflag & (DRAW_PICKING | DRAW_CONSTCOLOR))) {
+					drawObjectSelect(scene, sl, v3d, ar, base, ob_wire_col);
 				}
 			}
 		}
@@ -8599,7 +8599,7 @@ afterdraw:
 
 		if ((dflag & DRAW_CONSTCOLOR) == 0) {
 			/* for visibility, also while wpaint */
-	

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list