Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2009-11-25 20:51:16 +0300
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2009-11-25 20:51:16 +0300
commit55d2a56d6020a5d286d5d44f7d2d8a8d0bc9bf58 (patch)
tree959cb7abcf1ab92caa28fa5a5156520f08f9936d /source/blender/editors/space_view3d
parent077edbb384e3845f27cc06618046a08c7101cc4c (diff)
parentf1fa79a59554cb36ebee0a569a7b0f442fef6646 (diff)
Sculpt:
svn merge https://svn.blender.org/svnroot/bf-blender/trunk/blender -r24483:24889
Diffstat (limited to 'source/blender/editors/space_view3d')
-rw-r--r--source/blender/editors/space_view3d/SConscript4
-rw-r--r--source/blender/editors/space_view3d/drawarmature.c12
-rw-r--r--source/blender/editors/space_view3d/drawobject.c104
-rw-r--r--source/blender/editors/space_view3d/space_view3d.c8
-rw-r--r--source/blender/editors/space_view3d/view3d_buttons.c4
-rw-r--r--source/blender/editors/space_view3d/view3d_draw.c21
-rw-r--r--source/blender/editors/space_view3d/view3d_edit.c86
-rw-r--r--source/blender/editors/space_view3d/view3d_header.c23
-rw-r--r--source/blender/editors/space_view3d/view3d_intern.h1
-rw-r--r--source/blender/editors/space_view3d/view3d_ops.c130
-rw-r--r--source/blender/editors/space_view3d/view3d_select.c34
-rw-r--r--source/blender/editors/space_view3d/view3d_snap.c8
-rw-r--r--source/blender/editors/space_view3d/view3d_view.c9
13 files changed, 316 insertions, 128 deletions
diff --git a/source/blender/editors/space_view3d/SConscript b/source/blender/editors/space_view3d/SConscript
index 057c98a1d49..ba521a5fb1a 100644
--- a/source/blender/editors/space_view3d/SConscript
+++ b/source/blender/editors/space_view3d/SConscript
@@ -2,11 +2,11 @@
Import ('env')
sources = env.Glob('*.c')
-defs = []
+defs = [ 'GLEW_STATIC' ]
incs = '../include ../../blenlib ../../blenkernel ../../makesdna ../../imbuf'
incs += ' ../../windowmanager #/intern/guardedalloc #/extern/glew/include'
-incs += ' ../../render/extern/include #/intern/guardedalloc'
+incs += ' ../../render/extern/include'
incs += ' ../../gpu ../../makesrna ../../blenfont'
incs += ' #/intern/smoke/extern'
incs += ' #source/kernel/gen_system'
diff --git a/source/blender/editors/space_view3d/drawarmature.c b/source/blender/editors/space_view3d/drawarmature.c
index 08629a9a2f7..d8c2fb9d43e 100644
--- a/source/blender/editors/space_view3d/drawarmature.c
+++ b/source/blender/editors/space_view3d/drawarmature.c
@@ -1560,7 +1560,7 @@ static void bone_matrix_translate_y(float mat[][4], float y)
}
/* assumes object is Armature with pose */
-static void draw_pose_channels(Scene *scene, View3D *v3d, ARegion *ar, Base *base, int dt)
+static void draw_pose_bones(Scene *scene, View3D *v3d, ARegion *ar, Base *base, int dt)
{
RegionView3D *rv3d= ar->regiondata;
Object *ob= base->object;
@@ -2380,7 +2380,7 @@ static void draw_ghost_poses_range(Scene *scene, View3D *v3d, ARegion *ar, Base
BKE_animsys_evaluate_animdata(&ob->id, adt, (float)CFRA, ADT_RECALC_ALL);
where_is_pose(scene, ob);
- draw_pose_channels(scene, v3d, ar, base, OB_WIRE);
+ draw_pose_bones(scene, v3d, ar, base, OB_WIRE);
}
glDisable(GL_BLEND);
if (v3d->zbuf) glEnable(GL_DEPTH_TEST);
@@ -2459,7 +2459,7 @@ static void draw_ghost_poses_keys(Scene *scene, View3D *v3d, ARegion *ar, Base *
BKE_animsys_evaluate_animdata(&ob->id, adt, (float)CFRA, ADT_RECALC_ALL);
where_is_pose(scene, ob);
- draw_pose_channels(scene, v3d, ar, base, OB_WIRE);
+ draw_pose_bones(scene, v3d, ar, base, OB_WIRE);
}
glDisable(GL_BLEND);
if (v3d->zbuf) glEnable(GL_DEPTH_TEST);
@@ -2529,7 +2529,7 @@ static void draw_ghost_poses(Scene *scene, View3D *v3d, ARegion *ar, Base *base)
if (CFRA != cfrao) {
BKE_animsys_evaluate_animdata(&ob->id, adt, (float)CFRA, ADT_RECALC_ALL);
where_is_pose(scene, ob);
- draw_pose_channels(scene, v3d, ar, base, OB_WIRE);
+ draw_pose_bones(scene, v3d, ar, base, OB_WIRE);
}
}
@@ -2544,7 +2544,7 @@ static void draw_ghost_poses(Scene *scene, View3D *v3d, ARegion *ar, Base *base)
if (CFRA != cfrao) {
BKE_animsys_evaluate_animdata(&ob->id, adt, (float)CFRA, ADT_RECALC_ALL);
where_is_pose(scene, ob);
- draw_pose_channels(scene, v3d, ar, base, OB_WIRE);
+ draw_pose_bones(scene, v3d, ar, base, OB_WIRE);
}
}
}
@@ -2627,7 +2627,7 @@ int draw_armature(Scene *scene, View3D *v3d, ARegion *ar, Base *base, int dt, in
}
}
}
- draw_pose_channels(scene, v3d, ar, base, dt);
+ draw_pose_bones(scene, v3d, ar, base, dt);
arm->flag &= ~ARM_POSEMODE;
if(ob->mode & OB_MODE_POSE)
diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c
index 01af339e7f7..d9845a819b0 100644
--- a/source/blender/editors/space_view3d/drawobject.c
+++ b/source/blender/editors/space_view3d/drawobject.c
@@ -91,6 +91,7 @@
#include "BKE_particle.h"
#include "BKE_pointcache.h"
#include "BKE_property.h"
+#include "BKE_softbody.h"
#include "BKE_smoke.h"
#include "BKE_unit.h"
#include "BKE_utildefines.h"
@@ -143,7 +144,7 @@ static void draw_empty_cone(float size);
/* ************* only use while object drawing **************
* or after running ED_view3d_init_mats_rv3d
* */
-static void view3d_project_short_clip(ARegion *ar, float *vec, short *adr)
+static void view3d_project_short_clip(ARegion *ar, float *vec, short *adr, int local)
{
RegionView3D *rv3d= ar->regiondata;
float fx, fy, vec4[4];
@@ -152,9 +153,7 @@ static void view3d_project_short_clip(ARegion *ar, float *vec, short *adr)
/* clipplanes in eye space */
if(rv3d->rflag & RV3D_CLIPPING) {
- VECCOPY(vec4, vec);
- mul_m4_v3(rv3d->viewmatob, vec4);
- if(view3d_test_clipping(rv3d, vec4))
+ if(view3d_test_clipping(rv3d, vec, local))
return;
}
@@ -546,7 +545,7 @@ void view3d_cached_text_draw_end(View3D *v3d, ARegion *ar, int depth_write, floa
for(vos= strings->first; vos; vos= vos->next) {
if(mat)
mul_m4_v3(mat, vos->vec);
- view3d_project_short_clip(ar, vos->vec, vos->mval);
+ view3d_project_short_clip(ar, vos->vec, vos->mval, 0);
if(vos->mval[0]!=IS_CLIPPED)
tot++;
}
@@ -1208,9 +1207,11 @@ void lattice_foreachScreenVert(ViewContext *vc, void (*func)(void *userData, BPo
int i, N = lt->editlatt->pntsu*lt->editlatt->pntsv*lt->editlatt->pntsw;
short s[2] = {IS_CLIPPED, 0};
+ ED_view3d_local_clipping(vc->rv3d, obedit->obmat); /* for local clipping lookups */
+
for (i=0; i<N; i++, bp++, co+=3) {
if (bp->hide==0) {
- view3d_project_short_clip(vc->ar, dl?co:bp->vec, s);
+ view3d_project_short_clip(vc->ar, dl?co:bp->vec, s, 1);
if (s[0] != IS_CLIPPED)
func(userData, bp, s[0], s[1]);
}
@@ -1315,7 +1316,7 @@ static void mesh_foreachScreenVert__mapFunc(void *userData, int index, float *co
short s[2]= {IS_CLIPPED, 0};
if (data->clipVerts) {
- view3d_project_short_clip(data->vc.ar, co, s);
+ view3d_project_short_clip(data->vc.ar, co, s, 1);
} else {
view3d_project_short_noclip(data->vc.ar, co, s);
}
@@ -1335,6 +1336,9 @@ void mesh_foreachScreenVert(ViewContext *vc, void (*func)(void *userData, EditVe
data.userData = userData;
data.clipVerts = clipVerts;
+ if(clipVerts)
+ ED_view3d_local_clipping(vc->rv3d, vc->obedit->obmat); /* for local clipping lookups */
+
EM_init_index_arrays(vc->em, 1, 0, 0);
dm->foreachMappedVert(dm, mesh_foreachScreenVert__mapFunc, &data);
EM_free_index_arrays();
@@ -1350,8 +1354,8 @@ static void mesh_foreachScreenEdge__mapFunc(void *userData, int index, float *v0
if (eed->h==0) {
if (data->clipVerts==1) {
- view3d_project_short_clip(data->vc.ar, v0co, s[0]);
- view3d_project_short_clip(data->vc.ar, v1co, s[1]);
+ view3d_project_short_clip(data->vc.ar, v0co, s[0], 1);
+ view3d_project_short_clip(data->vc.ar, v1co, s[1], 1);
} else {
view3d_project_short_noclip(data->vc.ar, v0co, s[0]);
view3d_project_short_noclip(data->vc.ar, v1co, s[1]);
@@ -1377,6 +1381,9 @@ void mesh_foreachScreenEdge(ViewContext *vc, void (*func)(void *userData, EditEd
data.userData = userData;
data.clipVerts = clipVerts;
+ if(clipVerts)
+ ED_view3d_local_clipping(vc->rv3d, vc->obedit->obmat); /* for local clipping lookups */
+
EM_init_index_arrays(vc->em, 0, 1, 0);
dm->foreachMappedEdge(dm, mesh_foreachScreenEdge__mapFunc, &data);
EM_free_index_arrays();
@@ -1391,7 +1398,7 @@ static void mesh_foreachScreenFace__mapFunc(void *userData, int index, float *ce
short s[2];
if (efa && efa->h==0 && efa->fgonf!=EM_FGON) {
- view3d_project_short_clip(data->vc.ar, cent, s);
+ view3d_project_short_clip(data->vc.ar, cent, s, 1);
data->func(data->userData, efa, s[0], s[1], index);
}
@@ -1406,6 +1413,9 @@ void mesh_foreachScreenFace(ViewContext *vc, void (*func)(void *userData, EditFa
data.func = func;
data.userData = userData;
+ //if(clipVerts)
+ ED_view3d_local_clipping(vc->rv3d, vc->obedit->obmat); /* for local clipping lookups */
+
EM_init_index_arrays(vc->em, 0, 0, 1);
dm->foreachMappedFaceCenter(dm, mesh_foreachScreenFace__mapFunc, &data);
EM_free_index_arrays();
@@ -1420,6 +1430,8 @@ void nurbs_foreachScreenVert(ViewContext *vc, void (*func)(void *userData, Nurb
Nurb *nu;
int i;
+ ED_view3d_local_clipping(vc->rv3d, vc->obedit->obmat); /* for local clipping lookups */
+
for (nu= cu->editnurb->first; nu; nu=nu->next) {
if(nu->type == CU_BEZIER) {
for (i=0; i<nu->pntsu; i++) {
@@ -1428,17 +1440,17 @@ void nurbs_foreachScreenVert(ViewContext *vc, void (*func)(void *userData, Nurb
if(bezt->hide==0) {
if(cu->drawflag & CU_HIDE_HANDLES) {
- view3d_project_short_clip(vc->ar, bezt->vec[1], s);
+ view3d_project_short_clip(vc->ar, bezt->vec[1], s, 1);
if (s[0] != IS_CLIPPED)
func(userData, nu, NULL, bezt, 1, s[0], s[1]);
} else {
- view3d_project_short_clip(vc->ar, bezt->vec[0], s);
+ view3d_project_short_clip(vc->ar, bezt->vec[0], s, 1);
if (s[0] != IS_CLIPPED)
func(userData, nu, NULL, bezt, 0, s[0], s[1]);
- view3d_project_short_clip(vc->ar, bezt->vec[1], s);
+ view3d_project_short_clip(vc->ar, bezt->vec[1], s, 1);
if (s[0] != IS_CLIPPED)
func(userData, nu, NULL, bezt, 1, s[0], s[1]);
- view3d_project_short_clip(vc->ar, bezt->vec[2], s);
+ view3d_project_short_clip(vc->ar, bezt->vec[2], s, 1);
if (s[0] != IS_CLIPPED)
func(userData, nu, NULL, bezt, 2, s[0], s[1]);
}
@@ -1450,7 +1462,7 @@ void nurbs_foreachScreenVert(ViewContext *vc, void (*func)(void *userData, Nurb
BPoint *bp = &nu->bp[i];
if(bp->hide==0) {
- view3d_project_short_clip(vc->ar, bp->vec, s);
+ view3d_project_short_clip(vc->ar, bp->vec, s, 1);
if (s[0] != IS_CLIPPED)
func(userData, nu, bp, NULL, -1, s[0], s[1]);
}
@@ -2235,7 +2247,7 @@ static void draw_em_measure_stats(View3D *v3d, RegionView3D *rv3d, Object *ob, E
if(G.f & (G_RENDER_OGL|G_RENDER_SHADOW))
return;
- /* make the precission of the pronted value proportionate to the gridsize */
+ /* make the precision of the pronted value proportionate to the gridsize */
if (grid < 0.01f)
strcpy(conv_float, "%.6f");
@@ -4328,7 +4340,65 @@ static void draw_ptcache_edit(Scene *scene, View3D *v3d, RegionView3D *rv3d, Obj
glPointSize(1.0);
}
+static void draw_sb_motion(Scene *scene, Object *ob)
+{
+ SoftBody *sb = 0;
+ if ((sb= ob->soft)){
+ if(sb->solverflags & SBSO_MONITOR ||sb->solverflags & SBSO_ESTIMATEIPO){
+ /* draw com */
+ float rt[3][3],sc[3][3],tr[3][3];
+ /* looks like to swap a b in reverse */
+ copy_m3_m3(sc,sb->lscale);
+ copy_m3_m3(rt,sb->lrot);
+ mul_m3_m3m3(tr,rt,sc);
+ if(1){
+ float root[3],tip[3];
+ glBegin(GL_LINES);
+ root[1] = root[2] = 0.0f;
+ root[0] = -1.0f;
+ mul_m3_v3(tr,root);
+ VECADD(root,root,sb->lcom);
+ glVertex3fv(root);
+ tip[1] = tip[2] = 0.0f;
+ tip[0] = 1.0f;
+ mul_m3_v3(tr,tip);
+ VECADD(tip,tip,sb->lcom);
+ glVertex3fv(tip);
+ glEnd();
+
+ glBegin(GL_LINES);
+ root[0] = root[2] = 0.0f;
+ root[1] = -1.0f;
+ mul_m3_v3(tr,root);
+ VECADD(root,root,sb->lcom);
+ glVertex3fv(root);
+ tip[0] = tip[2] = 0.0f;
+ tip[1] = 1.0f;
+ mul_m3_v3(tr,tip);
+ VECADD(tip,tip,sb->lcom);
+ glVertex3fv(tip);
+ glEnd();
+
+ glBegin(GL_LINES);
+ root[0] = root[1] = 0.0f;
+ root[2] = -1.0f;
+ mul_m3_v3(tr,root);
+ VECADD(root,root,sb->lcom);
+ glVertex3fv(root);
+ tip[0] = tip[1] = 0.0f;
+ tip[2] = 1.0f;
+ mul_m3_v3(tr,tip);
+ VECADD(tip,tip,sb->lcom);
+ glVertex3fv(tip);
+ glEnd();
+ }
+
+ }
+ }
+};
+
+/*place to add drawers */
unsigned int nurbcol[8]= {
0, 0x9090, 0x409030, 0x603080, 0, 0x40fff0, 0x40c033, 0xA090F0 };
@@ -5723,6 +5793,8 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
default:
drawaxes(1.0, flag, OB_ARROWS);
}
+ if(ob->soft /*&& flag & OB_SBMOTION*/) draw_sb_motion(scene, ob);
+
if(ob->pd && ob->pd->forcefield) draw_forcefield(scene, ob);
/* particle mode has to be drawn first so that possible child particles get cached in edit mode */
diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c
index a755c8ffe76..d11eee466ed 100644
--- a/source/blender/editors/space_view3d/space_view3d.c
+++ b/source/blender/editors/space_view3d/space_view3d.c
@@ -175,6 +175,9 @@ void ED_view3d_init_mats_rv3d(struct Object *ob, struct RegionView3D *rv3d)
/* local viewmat and persmat, to calculate projections */
wmGetMatrix(rv3d->viewmatob);
wmGetSingleMatrix(rv3d->persmatob);
+
+ /* initializes object space clipping, speeds up clip tests */
+ ED_view3d_local_clipping(rv3d, ob->obmat);
}
/* ******************** default callbacks for view3d space ***************** */
@@ -369,6 +372,9 @@ static void view3d_main_area_init(wmWindowManager *wm, ARegion *ar)
keymap= WM_keymap_find(wm->defaultconf, "Object Non-modal", 0, 0);
WM_event_add_keymap_handler(&ar->handlers, keymap);
+ keymap= WM_keymap_find(wm->defaultconf, "Frames", 0, 0);
+ WM_event_add_keymap_handler(&ar->handlers, keymap);
+
/* own keymap, last so modes can override it */
keymap= WM_keymap_find(wm->defaultconf, "View3D Generic", SPACE_VIEW3D, 0);
WM_event_add_keymap_handler(&ar->handlers, keymap);
@@ -773,7 +779,7 @@ void ED_spacetype_view3d(void)
/* regions: main window */
art= MEM_callocN(sizeof(ARegionType), "spacetype view3d region");
art->regionid = RGN_TYPE_WINDOW;
- art->keymapflag= ED_KEYMAP_FRAMES|ED_KEYMAP_GPENCIL;
+ art->keymapflag= ED_KEYMAP_GPENCIL;
art->draw= view3d_main_area_draw;
art->init= view3d_main_area_init;
art->free= view3d_main_area_free;
diff --git a/source/blender/editors/space_view3d/view3d_buttons.c b/source/blender/editors/space_view3d/view3d_buttons.c
index d3a922af67e..0eddeba6ff9 100644
--- a/source/blender/editors/space_view3d/view3d_buttons.c
+++ b/source/blender/editors/space_view3d/view3d_buttons.c
@@ -504,7 +504,7 @@ static void v3d_transform_butsR(uiLayout *layout, PointerRNA *ptr)
split = uiLayoutSplit(layout, 0.8);
- if (ptr->type == &RNA_PoseChannel) {
+ if (ptr->type == &RNA_PoseBone) {
PointerRNA boneptr;
Bone *bone;
@@ -591,7 +591,7 @@ static void v3d_posearmature_buts(uiLayout *layout, View3D *v3d, Object *ob, flo
return;
}
- RNA_pointer_create(&ob->id, &RNA_PoseChannel, pchan, &pchanptr);
+ RNA_pointer_create(&ob->id, &RNA_PoseBone, pchan, &pchanptr);
col= uiLayoutColumn(layout, 0);
diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c
index f91e58ec560..aa92da5674b 100644
--- a/source/blender/editors/space_view3d/view3d_draw.c
+++ b/source/blender/editors/space_view3d/view3d_draw.c
@@ -193,22 +193,27 @@ void view3d_clr_clipping(void)
}
}
-int view3d_test_clipping(RegionView3D *rv3d, float *vec)
+static int test_clipping(float *vec, float clip[][4])
{
- /* vec in world coordinates, returns 1 if clipped */
float view[3];
-
VECCOPY(view, vec);
- if(0.0f < rv3d->clip[0][3] + INPR(view, rv3d->clip[0]))
- if(0.0f < rv3d->clip[1][3] + INPR(view, rv3d->clip[1]))
- if(0.0f < rv3d->clip[2][3] + INPR(view, rv3d->clip[2]))
- if(0.0f < rv3d->clip[3][3] + INPR(view, rv3d->clip[3]))
+ if(0.0f < clip[0][3] + INPR(view, clip[0]))
+ if(0.0f < clip[1][3] + INPR(view, clip[1]))
+ if(0.0f < clip[2][3] + INPR(view, clip[2]))
+ if(0.0f < clip[3][3] + INPR(view, clip[3]))
return 0;
-
+
return 1;
}
+/* for 'local' ED_view3d_local_clipping must run first
+ * then all comparisons can be done in localspace */
+int view3d_test_clipping(RegionView3D *rv3d, float *vec, int local)
+{
+ return test_clipping(vec, local ? rv3d->clip_local : rv3d->clip);
+}
+
/* ********* end custom clipping *********** */
diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c
index b0cbba9efc5..fa690854ce4 100644
--- a/source/blender/editors/space_view3d/view3d_edit.c
+++ b/source/blender/editors/space_view3d/view3d_edit.c
@@ -1011,7 +1011,7 @@ void VIEW3D_OT_zoom(wmOperatorType *ot)
/* flags */
ot->flag= OPTYPE_BLOCKING|OPTYPE_GRAB_POINTER;
- RNA_def_int(ot->srna, "delta", 0, 0, INT_MAX, "Delta", "", 0, INT_MAX);
+ RNA_def_int(ot->srna, "delta", 0, INT_MIN, INT_MAX, "Delta", "", INT_MIN, INT_MAX);
RNA_def_int(ot->srna, "mx", 0, 0, INT_MAX, "Zoom Position X", "", 0, INT_MAX);
RNA_def_int(ot->srna, "my", 0, 0, INT_MAX, "Zoom Position Y", "", 0, INT_MAX);
}
@@ -1242,6 +1242,51 @@ void VIEW3D_OT_view_center(wmOperatorType *ot)
ot->flag= 0;
}
+static int viewcenter_cursor_exec(bContext *C, wmOperator *op)
+{
+ View3D *v3d = CTX_wm_view3d(C);
+ RegionView3D *rv3d= CTX_wm_region_view3d(C);
+ Scene *scene= CTX_data_scene(C);
+
+ if (rv3d) {
+ if (rv3d->persp==RV3D_CAMOB) {
+ /* center the camera offset */
+ rv3d->camdx= rv3d->camdy= 0.0;
+ }
+ else {
+ /* non camera center */
+ float *curs= give_cursor(scene, v3d);
+ float new_ofs[3];
+
+ new_ofs[0]= -curs[0];
+ new_ofs[1]= -curs[1];
+ new_ofs[2]= -curs[2];
+
+ smooth_view(C, NULL, NULL, new_ofs, NULL, NULL, NULL);
+ }
+
+ if (rv3d->viewlock & RV3D_BOXVIEW)
+ view3d_boxview_copy(CTX_wm_area(C), CTX_wm_region(C));
+ }
+
+ return OPERATOR_FINISHED;
+}
+
+void VIEW3D_OT_view_center_cursor(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name= "Center View to Cursor";
+ ot->description= "Centers the view so that the cursor is in the middle of the view.";
+ ot->idname= "VIEW3D_OT_view_center_cursor";
+
+ /* api callbacks */
+ ot->exec= viewcenter_cursor_exec;
+ ot->poll= ED_operator_view3d_active;
+
+ /* flags */
+ ot->flag= 0;
+}
+
/* ********************* Set render border operator ****************** */
static int render_border_exec(bContext *C, wmOperator *op)
@@ -1839,6 +1884,42 @@ void VIEW3D_OT_view_persportho(wmOperatorType *ot)
/* ********************* set clipping operator ****************** */
+static void calc_clipping_plane(float clip[6][4], BoundBox *clipbb)
+{
+ int val;
+
+ for(val=0; val<4; val++) {
+
+ normal_tri_v3( clip[val],clipbb->vec[val], clipbb->vec[val==3?0:val+1], clipbb->vec[val+4]);
+
+ clip[val][3]=
+ - clip[val][0]*clipbb->vec[val][0]
+ - clip[val][1]*clipbb->vec[val][1]
+ - clip[val][2]*clipbb->vec[val][2];
+ }
+}
+
+static void calc_local_clipping(float clip_local[][4], BoundBox *clipbb, float mat[][4])
+{
+ BoundBox clipbb_local;
+ float imat[4][4];
+ int i;
+
+ invert_m4_m4(imat, mat);
+
+ for(i=0; i<8; i++) {
+ mul_v3_m4v3(clipbb_local.vec[i], imat, clipbb->vec[i]);
+ }
+
+ calc_clipping_plane(clip_local, &clipbb_local);
+}
+
+void ED_view3d_local_clipping(RegionView3D *rv3d, float mat[][4])
+{
+ if(rv3d->rflag & RV3D_CLIPPING)
+ calc_local_clipping(rv3d->clip_local, rv3d->clipbb, mat);
+}
+
static int view3d_clipping_exec(bContext *C, wmOperator *op)
{
RegionView3D *rv3d= CTX_wm_region_view3d(C);
@@ -1991,6 +2072,9 @@ static int manipulator_invoke(bContext *C, wmOperator *op, wmEvent *event)
if(!(v3d->twflag & V3D_USE_MANIPULATOR)) return OPERATOR_PASS_THROUGH;
if(!(v3d->twflag & V3D_DRAW_MANIPULATOR)) return OPERATOR_PASS_THROUGH;
+ /* only no modifier or shift */
+ if(event->keymodifier != 0 && event->keymodifier != KM_SHIFT) return OPERATOR_PASS_THROUGH;
+
/* note; otherwise opengl won't work */
view3d_operator_needs_opengl(C);
diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c
index 1ee78b55ee5..30a086b641a 100644
--- a/source/blender/editors/space_view3d/view3d_header.c
+++ b/source/blender/editors/space_view3d/view3d_header.c
@@ -551,9 +551,10 @@ static uiBlock *view3d_select_object_groupedmenu(bContext *C, ARegion *ar, void
#endif
+// TODO - port to python
+#if 0
void do_view3d_select_faceselmenu(bContext *C, void *arg, int event)
{
-#if 0
/* events >= 6 are registered bpython scripts */
#ifndef DISABLE_PYTHON
if (event >= 6) BPY_menu_do_python(PYMENU_FACESELECT, event - 6);
@@ -573,7 +574,6 @@ void do_view3d_select_faceselmenu(bContext *C, void *arg, int event)
select_linked_tfaces(2);
break;
}
-#endif
}
static uiBlock *view3d_select_faceselmenu(bContext *C, ARegion *ar, void *arg_unused)
@@ -620,14 +620,7 @@ static uiBlock *view3d_select_faceselmenu(bContext *C, ARegion *ar, void *arg_un
uiTextBoundsBlock(block, 50);
return block;
}
-
-/* wrapper for python layouts */
-void uiTemplate_view3d_select_faceselmenu(uiLayout *layout, bContext *C)
-{
- void *arg_unused = NULL;
- ARegion *ar= CTX_wm_region(C);
- view3d_select_faceselmenu(C, ar, arg_unused);
-}
+#endif
#if 0
void do_view3d_transform_moveaxismenu(bContext *C, void *arg, int event)
@@ -1659,7 +1652,7 @@ static char *drawtype_pup(void)
str += sprintf(str, "%s", "|Bounding Box %x1");
str += sprintf(str, "%s", "|Wireframe %x2");
str += sprintf(str, "%s", "|Solid %x3");
- str += sprintf(str, "%s", "|Shaded %x4");
+//XXX not working in 2.5! str += sprintf(str, "%s", "|Shaded %x4");
str += sprintf(str, "%s", "|Textured %x5");
return string;
}
@@ -2183,10 +2176,12 @@ void uiTemplateHeader3D(uiLayout *layout, struct bContext *C)
uiBlockBeginAlign(block);
if (ts->snap_flag & SCE_SNAP) {
- uiDefIconButBitS(block, TOG, SCE_SNAP, B_REDR, ICON_SNAP_GEO,xco,yco,XIC,YIC, &ts->snap_flag, 0, 0, 0, 0, "Snap while Ctrl is held during transform (Shift Tab)");
- xco+= XIC;
- uiDefIconButBitS(block, TOG, SCE_SNAP_ROTATE, B_REDR, ICON_SNAP_NORMAL,xco,yco,XIC,YIC, &ts->snap_flag, 0, 0, 0, 0, "Align rotation with the snapping target");
+ uiDefIconButBitS(block, TOG, SCE_SNAP, B_REDR, ICON_SNAP_GEO,xco,yco,XIC,YIC, &ts->snap_flag, 0, 0, 0, 0, "Snap with Ctrl during transform (Shift Tab)");
xco+= XIC;
+ if(v3d->modeselect == OB_MODE_OBJECT) {
+ uiDefIconButBitS(block, TOG, SCE_SNAP_ROTATE, B_REDR, ICON_SNAP_NORMAL,xco,yco,XIC,YIC, &ts->snap_flag, 0, 0, 0, 0, "Align rotation with the snapping target");
+ xco+= XIC;
+ }
if (ts->snap_mode == SCE_SNAP_MODE_VOLUME) {
uiDefIconButBitS(block, TOG, SCE_SNAP_PEEL_OBJECT, B_REDR, ICON_SNAP_PEEL_OBJECT,xco,yco,XIC,YIC, &ts->snap_flag, 0, 0, 0, 0, "Consider objects as whole when finding volume center");
xco+= XIC;
diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h
index 84d1a1275a9..b32a067206e 100644
--- a/source/blender/editors/space_view3d/view3d_intern.h
+++ b/source/blender/editors/space_view3d/view3d_intern.h
@@ -71,6 +71,7 @@ void VIEW3D_OT_rotate(struct wmOperatorType *ot);
void VIEW3D_OT_view_all(struct wmOperatorType *ot);
void VIEW3D_OT_viewnumpad(struct wmOperatorType *ot);
void VIEW3D_OT_view_center(struct wmOperatorType *ot);
+void VIEW3D_OT_view_center_cursor(struct wmOperatorType *ot);
void VIEW3D_OT_view_pan(struct wmOperatorType *ot);
void VIEW3D_OT_view_persportho(struct wmOperatorType *ot);
void VIEW3D_OT_view_orbit(struct wmOperatorType *ot);
diff --git a/source/blender/editors/space_view3d/view3d_ops.c b/source/blender/editors/space_view3d/view3d_ops.c
index b8945c849ae..db5fbc70669 100644
--- a/source/blender/editors/space_view3d/view3d_ops.c
+++ b/source/blender/editors/space_view3d/view3d_ops.c
@@ -71,6 +71,7 @@ void view3d_operatortypes(void)
WM_operatortype_append(VIEW3D_OT_view_pan);
WM_operatortype_append(VIEW3D_OT_view_persportho);
WM_operatortype_append(VIEW3D_OT_view_center);
+ WM_operatortype_append(VIEW3D_OT_view_center_cursor);
WM_operatortype_append(VIEW3D_OT_select);
WM_operatortype_append(VIEW3D_OT_select_border);
WM_operatortype_append(VIEW3D_OT_clip_border);
@@ -105,7 +106,7 @@ void view3d_operatortypes(void)
void view3d_keymap(wmKeyConfig *keyconf)
{
wmKeyMap *keymap;
- wmKeyMapItem *km;
+ wmKeyMapItem *kmi;
keymap= WM_keymap_find(keyconf, "View3D Generic", SPACE_VIEW3D, 0);
@@ -115,7 +116,11 @@ void view3d_keymap(wmKeyConfig *keyconf)
/* only for region 3D window */
keymap= WM_keymap_find(keyconf, "View3D", SPACE_VIEW3D, 0);
- WM_keymap_verify_item(keymap, "VIEW3D_OT_manipulator", LEFTMOUSE, KM_PRESS, 0, 0); /* manipulator always on left mouse, not on action mouse*/
+ WM_keymap_verify_item(keymap, "VIEW3D_OT_manipulator", LEFTMOUSE, KM_PRESS, KM_ANY, 0);
+ /*
+ * Doesn't work with KM_SHIFT, have to use KM_ANY and filter in invoke
+ * */
+ // WM_keymap_verify_item(keymap, "VIEW3D_OT_manipulator", LEFTMOUSE, KM_PRESS, KM_SHIFT, 0);
WM_keymap_verify_item(keymap, "VIEW3D_OT_cursor3d", ACTIONMOUSE, KM_PRESS, 0, 0);
@@ -123,6 +128,7 @@ void view3d_keymap(wmKeyConfig *keyconf)
WM_keymap_verify_item(keymap, "VIEW3D_OT_move", MIDDLEMOUSE, KM_PRESS, KM_SHIFT, 0);
WM_keymap_verify_item(keymap, "VIEW3D_OT_zoom", MIDDLEMOUSE, KM_PRESS, KM_CTRL, 0);
WM_keymap_verify_item(keymap, "VIEW3D_OT_view_center", PADPERIOD, KM_PRESS, 0, 0);
+ WM_keymap_verify_item(keymap, "VIEW3D_OT_view_center_cursor", PADPERIOD, KM_PRESS, KM_CTRL, 0);
WM_keymap_verify_item(keymap, "VIEW3D_OT_fly", FKEY, KM_PRESS, KM_SHIFT, 0);
@@ -156,24 +162,24 @@ void view3d_keymap(wmKeyConfig *keyconf)
RNA_enum_set(WM_keymap_add_item(keymap, "VIEW3D_OT_view_pan", PAD8, KM_PRESS, KM_CTRL, 0)->ptr, "type", V3D_VIEW_PANUP);
/* active aligned, replaces '*' key in 2.4x */
- km= WM_keymap_add_item(keymap, "VIEW3D_OT_viewnumpad", PAD1, KM_PRESS, KM_SHIFT, 0);
- RNA_enum_set(km->ptr, "type", RV3D_VIEW_FRONT);
- RNA_boolean_set(km->ptr, "align_active", TRUE);
- km= WM_keymap_add_item(keymap, "VIEW3D_OT_viewnumpad", PAD3, KM_PRESS, KM_SHIFT, 0);
- RNA_enum_set(km->ptr, "type", RV3D_VIEW_RIGHT);
- RNA_boolean_set(km->ptr, "align_active", TRUE);
- km= WM_keymap_add_item(keymap, "VIEW3D_OT_viewnumpad", PAD7, KM_PRESS, KM_SHIFT, 0);
- RNA_enum_set(km->ptr, "type", RV3D_VIEW_TOP);
- RNA_boolean_set(km->ptr, "align_active", TRUE);
- km= WM_keymap_add_item(keymap, "VIEW3D_OT_viewnumpad", PAD1, KM_PRESS, KM_SHIFT|KM_CTRL, 0);
- RNA_enum_set(km->ptr, "type", RV3D_VIEW_BACK);
- RNA_boolean_set(km->ptr, "align_active", TRUE);
- km= WM_keymap_add_item(keymap, "VIEW3D_OT_viewnumpad", PAD3, KM_PRESS, KM_SHIFT|KM_CTRL, 0);
- RNA_enum_set(km->ptr, "type", RV3D_VIEW_LEFT);
- RNA_boolean_set(km->ptr, "align_active", TRUE);
- km= WM_keymap_add_item(keymap, "VIEW3D_OT_viewnumpad", PAD7, KM_PRESS, KM_SHIFT|KM_CTRL, 0);
- RNA_enum_set(km->ptr, "type", RV3D_VIEW_BOTTOM);
- RNA_boolean_set(km->ptr, "align_active", TRUE);
+ kmi= WM_keymap_add_item(keymap, "VIEW3D_OT_viewnumpad", PAD1, KM_PRESS, KM_SHIFT, 0);
+ RNA_enum_set(kmi->ptr, "type", RV3D_VIEW_FRONT);
+ RNA_boolean_set(kmi->ptr, "align_active", TRUE);
+ kmi= WM_keymap_add_item(keymap, "VIEW3D_OT_viewnumpad", PAD3, KM_PRESS, KM_SHIFT, 0);
+ RNA_enum_set(kmi->ptr, "type", RV3D_VIEW_RIGHT);
+ RNA_boolean_set(kmi->ptr, "align_active", TRUE);
+ kmi= WM_keymap_add_item(keymap, "VIEW3D_OT_viewnumpad", PAD7, KM_PRESS, KM_SHIFT, 0);
+ RNA_enum_set(kmi->ptr, "type", RV3D_VIEW_TOP);
+ RNA_boolean_set(kmi->ptr, "align_active", TRUE);
+ kmi= WM_keymap_add_item(keymap, "VIEW3D_OT_viewnumpad", PAD1, KM_PRESS, KM_SHIFT|KM_CTRL, 0);
+ RNA_enum_set(kmi->ptr, "type", RV3D_VIEW_BACK);
+ RNA_boolean_set(kmi->ptr, "align_active", TRUE);
+ kmi= WM_keymap_add_item(keymap, "VIEW3D_OT_viewnumpad", PAD3, KM_PRESS, KM_SHIFT|KM_CTRL, 0);
+ RNA_enum_set(kmi->ptr, "type", RV3D_VIEW_LEFT);
+ RNA_boolean_set(kmi->ptr, "align_active", TRUE);
+ kmi= WM_keymap_add_item(keymap, "VIEW3D_OT_viewnumpad", PAD7, KM_PRESS, KM_SHIFT|KM_CTRL, 0);
+ RNA_enum_set(kmi->ptr, "type", RV3D_VIEW_BOTTOM);
+ RNA_boolean_set(kmi->ptr, "align_active", TRUE);
RNA_enum_set(WM_keymap_add_item(keymap, "VIEW3D_OT_view_orbit", PAD2, KM_PRESS, 0, 0)->ptr, "type", V3D_VIEW_STEPDOWN);
@@ -207,20 +213,20 @@ void view3d_keymap(wmKeyConfig *keyconf)
/* drawtype */
- km = WM_keymap_add_item(keymap, "WM_OT_context_toggle_enum", ZKEY, KM_PRESS, 0, 0);
- RNA_string_set(km->ptr, "path", "space_data.viewport_shading");
- RNA_string_set(km->ptr, "value_1", "SOLID");
- RNA_string_set(km->ptr, "value_2", "WIREFRAME");
+ kmi = WM_keymap_add_item(keymap, "WM_OT_context_toggle_enum", ZKEY, KM_PRESS, 0, 0);
+ RNA_string_set(kmi->ptr, "path", "space_data.viewport_shading");
+ RNA_string_set(kmi->ptr, "value_1", "SOLID");
+ RNA_string_set(kmi->ptr, "value_2", "WIREFRAME");
- km = WM_keymap_add_item(keymap, "WM_OT_context_toggle_enum", ZKEY, KM_PRESS, KM_ALT, 0);
- RNA_string_set(km->ptr, "path", "space_data.viewport_shading");
- RNA_string_set(km->ptr, "value_1", "TEXTURED");
- RNA_string_set(km->ptr, "value_2", "SOLID");
+ kmi = WM_keymap_add_item(keymap, "WM_OT_context_toggle_enum", ZKEY, KM_PRESS, KM_ALT, 0);
+ RNA_string_set(kmi->ptr, "path", "space_data.viewport_shading");
+ RNA_string_set(kmi->ptr, "value_1", "TEXTURED");
+ RNA_string_set(kmi->ptr, "value_2", "SOLID");
- km = WM_keymap_add_item(keymap, "WM_OT_context_toggle_enum", ZKEY, KM_PRESS, KM_SHIFT, 0);
- RNA_string_set(km->ptr, "path", "space_data.viewport_shading");
- RNA_string_set(km->ptr, "value_1", "SHADED");
- RNA_string_set(km->ptr, "value_2", "WIREFRAME");
+ kmi = WM_keymap_add_item(keymap, "WM_OT_context_toggle_enum", ZKEY, KM_PRESS, KM_SHIFT, 0);
+ RNA_string_set(kmi->ptr, "path", "space_data.viewport_shading");
+ RNA_string_set(kmi->ptr, "value_1", "SHADED");
+ RNA_string_set(kmi->ptr, "value_2", "WIREFRAME");
/* selection*/
WM_keymap_add_item(keymap, "VIEW3D_OT_select", SELECTMOUSE, KM_PRESS, 0, 0);
@@ -229,19 +235,19 @@ void view3d_keymap(wmKeyConfig *keyconf)
RNA_boolean_set(WM_keymap_add_item(keymap, "VIEW3D_OT_select", SELECTMOUSE, KM_PRESS, KM_ALT, 0)->ptr, "enumerate", TRUE);
/* selection key-combinations */
- km = WM_keymap_add_item(keymap, "VIEW3D_OT_select", SELECTMOUSE, KM_PRESS, KM_SHIFT|KM_CTRL, 0);
- RNA_boolean_set(km->ptr, "center", TRUE);
- RNA_boolean_set(km->ptr, "extend", TRUE);
- km = WM_keymap_add_item(keymap, "VIEW3D_OT_select", SELECTMOUSE, KM_PRESS, KM_CTRL|KM_ALT, 0);
- RNA_boolean_set(km->ptr, "center", TRUE);
- RNA_boolean_set(km->ptr, "enumerate", TRUE);
- km = WM_keymap_add_item(keymap, "VIEW3D_OT_select", SELECTMOUSE, KM_PRESS, KM_SHIFT|KM_ALT, 0);
- RNA_boolean_set(km->ptr, "extend", TRUE);
- RNA_boolean_set(km->ptr, "enumerate", TRUE);
- km = WM_keymap_add_item(keymap, "VIEW3D_OT_select", SELECTMOUSE, KM_PRESS, KM_SHIFT|KM_CTRL|KM_ALT, 0);
- RNA_boolean_set(km->ptr, "center", TRUE);
- RNA_boolean_set(km->ptr, "extend", TRUE);
- RNA_boolean_set(km->ptr, "enumerate", TRUE);
+ kmi = WM_keymap_add_item(keymap, "VIEW3D_OT_select", SELECTMOUSE, KM_PRESS, KM_SHIFT|KM_CTRL, 0);
+ RNA_boolean_set(kmi->ptr, "center", TRUE);
+ RNA_boolean_set(kmi->ptr, "extend", TRUE);
+ kmi = WM_keymap_add_item(keymap, "VIEW3D_OT_select", SELECTMOUSE, KM_PRESS, KM_CTRL|KM_ALT, 0);
+ RNA_boolean_set(kmi->ptr, "center", TRUE);
+ RNA_boolean_set(kmi->ptr, "enumerate", TRUE);
+ kmi = WM_keymap_add_item(keymap, "VIEW3D_OT_select", SELECTMOUSE, KM_PRESS, KM_SHIFT|KM_ALT, 0);
+ RNA_boolean_set(kmi->ptr, "extend", TRUE);
+ RNA_boolean_set(kmi->ptr, "enumerate", TRUE);
+ kmi = WM_keymap_add_item(keymap, "VIEW3D_OT_select", SELECTMOUSE, KM_PRESS, KM_SHIFT|KM_CTRL|KM_ALT, 0);
+ RNA_boolean_set(kmi->ptr, "center", TRUE);
+ RNA_boolean_set(kmi->ptr, "extend", TRUE);
+ RNA_boolean_set(kmi->ptr, "enumerate", TRUE);
WM_keymap_add_item(keymap, "VIEW3D_OT_select_border", BKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "VIEW3D_OT_select_lasso", EVT_TWEAK_A, KM_ANY, KM_CTRL, 0);
@@ -258,28 +264,28 @@ void view3d_keymap(wmKeyConfig *keyconf)
WM_keymap_add_item(keymap, "VIEW3D_OT_snap_menu", SKEY, KM_PRESS, KM_SHIFT, 0);
/* context ops */
- km = WM_keymap_add_item(keymap, "WM_OT_context_set_enum", COMMAKEY, KM_PRESS, 0, 0);
- RNA_string_set(km->ptr, "path", "space_data.pivot_point");
- RNA_string_set(km->ptr, "value", "BOUNDING_BOX_CENTER");
+ kmi = WM_keymap_add_item(keymap, "WM_OT_context_set_enum", COMMAKEY, KM_PRESS, 0, 0);
+ RNA_string_set(kmi->ptr, "path", "space_data.pivot_point");
+ RNA_string_set(kmi->ptr, "value", "BOUNDING_BOX_CENTER");
- km = WM_keymap_add_item(keymap, "WM_OT_context_set_enum", COMMAKEY, KM_PRESS, KM_CTRL, 0); /* 2.4x allowed Comma+Shift too, rather not use both */
- RNA_string_set(km->ptr, "path", "space_data.pivot_point");
- RNA_string_set(km->ptr, "value", "MEDIAN_POINT");
+ kmi = WM_keymap_add_item(keymap, "WM_OT_context_set_enum", COMMAKEY, KM_PRESS, KM_CTRL, 0); /* 2.4x allowed Comma+Shift too, rather not use both */
+ RNA_string_set(kmi->ptr, "path", "space_data.pivot_point");
+ RNA_string_set(kmi->ptr, "value", "MEDIAN_POINT");
- km = WM_keymap_add_item(keymap, "WM_OT_context_toggle", COMMAKEY, KM_PRESS, KM_ALT, 0); /* new in 2.5 */
- RNA_string_set(km->ptr, "path", "space_data.pivot_point_align");
+ kmi = WM_keymap_add_item(keymap, "WM_OT_context_toggle", COMMAKEY, KM_PRESS, KM_ALT, 0); /* new in 2.5 */
+ RNA_string_set(kmi->ptr, "path", "space_data.pivot_point_align");
- km = WM_keymap_add_item(keymap, "WM_OT_context_set_enum", PERIODKEY, KM_PRESS, 0, 0);
- RNA_string_set(km->ptr, "path", "space_data.pivot_point");
- RNA_string_set(km->ptr, "value", "CURSOR");
+ kmi = WM_keymap_add_item(keymap, "WM_OT_context_set_enum", PERIODKEY, KM_PRESS, 0, 0);
+ RNA_string_set(kmi->ptr, "path", "space_data.pivot_point");
+ RNA_string_set(kmi->ptr, "value", "CURSOR");
- km = WM_keymap_add_item(keymap, "WM_OT_context_set_enum", PERIODKEY, KM_PRESS, KM_CTRL, 0);
- RNA_string_set(km->ptr, "path", "space_data.pivot_point");
- RNA_string_set(km->ptr, "value", "INDIVIDUAL_CENTERS");
+ kmi = WM_keymap_add_item(keymap, "WM_OT_context_set_enum", PERIODKEY, KM_PRESS, KM_CTRL, 0);
+ RNA_string_set(kmi->ptr, "path", "space_data.pivot_point");
+ RNA_string_set(kmi->ptr, "value", "INDIVIDUAL_CENTERS");
- km = WM_keymap_add_item(keymap, "WM_OT_context_set_enum", PERIODKEY, KM_PRESS, KM_ALT, 0);
- RNA_string_set(km->ptr, "path", "space_data.pivot_point");
- RNA_string_set(km->ptr, "value", "ACTIVE_ELEMENT");
+ kmi = WM_keymap_add_item(keymap, "WM_OT_context_set_enum", PERIODKEY, KM_PRESS, KM_ALT, 0);
+ RNA_string_set(kmi->ptr, "path", "space_data.pivot_point");
+ RNA_string_set(kmi->ptr, "value", "ACTIVE_ELEMENT");
transform_keymap_for_space(keyconf, keymap, SPACE_VIEW3D);
diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c
index 51bda2b7141..f0ebb2186a0 100644
--- a/source/blender/editors/space_view3d/view3d_select.c
+++ b/source/blender/editors/space_view3d/view3d_select.c
@@ -999,7 +999,7 @@ static short mixed_bones_object_selectbuffer(ViewContext *vc, unsigned int *buff
/* mval is region coords */
-static void mouse_select(bContext *C, short *mval, short extend, short obcenter, short enumerate)
+static int mouse_select(bContext *C, short *mval, short extend, short obcenter, short enumerate)
{
ViewContext vc;
ARegion *ar= CTX_wm_region(C);
@@ -1007,6 +1007,7 @@ static void mouse_select(bContext *C, short *mval, short extend, short obcenter,
Scene *scene= CTX_data_scene(C);
Base *base, *startbase=NULL, *basact=NULL, *oldbasact=NULL;
int temp, a, dist=100;
+ int retval = 0;
short hits;
/* setup view context for argument to callbacks */
@@ -1153,6 +1154,7 @@ static void mouse_select(bContext *C, short *mval, short extend, short obcenter,
basact->flag|= SELECT;
basact->object->flag= basact->flag;
+ retval = 1;
WM_event_add_notifier(C, NC_OBJECT|ND_BONE_SELECT, basact->object);
WM_event_add_notifier(C, NC_OBJECT|ND_BONE_ACTIVE, basact->object);
@@ -1172,6 +1174,7 @@ static void mouse_select(bContext *C, short *mval, short extend, short obcenter,
/* so, do we have something selected? */
if(basact) {
+ retval = 1;
if(vc.obedit) {
/* only do select */
@@ -1205,6 +1208,8 @@ static void mouse_select(bContext *C, short *mval, short extend, short obcenter,
WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, scene);
}
}
+
+ return retval;
}
/* ******************** border and circle ************************************** */
@@ -1611,31 +1616,37 @@ static int view3d_select_invoke(bContext *C, wmOperator *op, wmEvent *event)
short extend= RNA_boolean_get(op->ptr, "extend");
short center= RNA_boolean_get(op->ptr, "center");
short enumerate= RNA_boolean_get(op->ptr, "enumerate");
+ int retval = 0;
view3d_operator_needs_opengl(C);
if(obedit) {
if(obedit->type==OB_MESH)
- mouse_mesh(C, event->mval, extend);
+ retval = mouse_mesh(C, event->mval, extend);
else if(obedit->type==OB_ARMATURE)
- mouse_armature(C, event->mval, extend);
+ retval = mouse_armature(C, event->mval, extend);
else if(obedit->type==OB_LATTICE)
- mouse_lattice(C, event->mval, extend);
+ retval = mouse_lattice(C, event->mval, extend);
else if(ELEM(obedit->type, OB_CURVE, OB_SURF))
- mouse_nurb(C, event->mval, extend);
+ retval = mouse_nurb(C, event->mval, extend);
else if(obedit->type==OB_MBALL)
- mouse_mball(C, event->mval, extend);
+ retval = mouse_mball(C, event->mval, extend);
}
else if(obact && obact->mode & OB_MODE_PARTICLE_EDIT)
- PE_mouse_particles(C, event->mval, extend);
+ return PE_mouse_particles(C, event->mval, extend);
else if(obact && paint_facesel_test(obact))
- face_select(C, obact, event->mval, extend);
+ retval = face_select(C, obact, event->mval, extend);
else
- mouse_select(C, event->mval, extend, center, enumerate);
+ retval = mouse_select(C, event->mval, extend, center, enumerate);
- /* allowing tweaks */
- return OPERATOR_PASS_THROUGH|OPERATOR_FINISHED;
+ /* passthrough allows tweaks
+ * FINISHED to signal one operator worked
+ * */
+ if (retval)
+ return OPERATOR_PASS_THROUGH|OPERATOR_FINISHED;
+ else
+ return OPERATOR_PASS_THROUGH; /* nothing selected, just passthrough */
}
void VIEW3D_OT_select(wmOperatorType *ot)
@@ -1717,6 +1728,7 @@ static void mesh_circle_select(ViewContext *vc, int selecting, short *mval, floa
vc->em= ((Mesh *)vc->obedit->data)->edit_mesh;
+ data.vc = vc;
data.select = selecting;
data.mval[0] = mval[0];
data.mval[1] = mval[1];
diff --git a/source/blender/editors/space_view3d/view3d_snap.c b/source/blender/editors/space_view3d/view3d_snap.c
index 933b12ae679..a23163f4a5c 100644
--- a/source/blender/editors/space_view3d/view3d_snap.c
+++ b/source/blender/editors/space_view3d/view3d_snap.c
@@ -543,7 +543,8 @@ static int snap_sel_to_grid(bContext *C, wmOperator *op)
}
CTX_DATA_END;
}
- ED_anim_dag_flush_update(C);
+
+ DAG_ids_flush_update(0);
WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, NULL);
return OPERATOR_FINISHED;
@@ -667,7 +668,8 @@ static int snap_sel_to_curs(bContext *C, wmOperator *op)
}
CTX_DATA_END;
}
- ED_anim_dag_flush_update(C);
+
+ DAG_ids_flush_update(0);
WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, NULL);
return OPERATOR_FINISHED;
@@ -1058,7 +1060,7 @@ static int snap_selected_to_center(bContext *C, wmOperator *op)
CTX_DATA_END;
}
- ED_anim_dag_flush_update(C);
+ DAG_ids_flush_update(0);
WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, NULL);
return OPERATOR_FINISHED;
diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c
index 3ba2145e9d0..fab511f048c 100644
--- a/source/blender/editors/space_view3d/view3d_view.c
+++ b/source/blender/editors/space_view3d/view3d_view.c
@@ -190,6 +190,7 @@ static void view_settings_from_ob(Object *ob, float *ofs, float *quat, float *di
/* ****************** smooth view operator ****************** */
+/* This operator is one of the 'timer refresh' ones like animation playback */
struct SmoothViewStore {
float orig_dist, new_dist;
@@ -389,6 +390,8 @@ void VIEW3D_OT_smoothview(wmOperatorType *ot)
ot->poll= ED_operator_view3d_active;
}
+/* ****************** change view operators ****************** */
+
static void setcameratoview3d(View3D *v3d, RegionView3D *rv3d, Object *ob)
{
float dvec[3];
@@ -448,6 +451,7 @@ void VIEW3D_OT_setcameratoview(wmOperatorType *ot)
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
}
+
static int view3d_setobjectascamera_exec(bContext *C, wmOperator *op)
{
View3D *v3d = CTX_wm_view3d(C);
@@ -482,6 +486,7 @@ void VIEW3D_OT_setobjectascamera(wmOperatorType *ot)
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
}
+
/* ********************************** */
void view3d_calculate_clipping(BoundBox *bb, float planes[4][4], bglMats *mats, rcti *rect)
@@ -721,7 +726,7 @@ void project_short(ARegion *ar, float *vec, short *adr) /* clips */
adr[0]= IS_CLIPPED;
if(rv3d->rflag & RV3D_CLIPPING) {
- if(view3d_test_clipping(rv3d, vec))
+ if(view3d_test_clipping(rv3d, vec, 0))
return;
}
@@ -1651,7 +1656,7 @@ static int game_engine_exec(bContext *C, wmOperator *unused)
game_set_commmandline_options(&startscene->gm);
- if(rv3d->persp==RV3D_CAMOB && startscene->gm.framing.type == SCE_GAMEFRAMING_BARS) { /* Letterbox */
+ if(rv3d->persp==RV3D_CAMOB && startscene->gm.framing.type == SCE_GAMEFRAMING_BARS && startscene->gm.stereoflag != STEREO_DOME) { /* Letterbox */
rctf cam_framef;
calc_viewborder(startscene, ar, CTX_wm_view3d(C), &cam_framef);
cam_frame.xmin = cam_framef.xmin + ar->winrct.xmin;