[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