diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2009-11-25 20:51:16 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2009-11-25 20:51:16 +0300 |
commit | 55d2a56d6020a5d286d5d44f7d2d8a8d0bc9bf58 (patch) | |
tree | 959cb7abcf1ab92caa28fa5a5156520f08f9936d /source/blender/editors/space_view3d | |
parent | 077edbb384e3845f27cc06618046a08c7101cc4c (diff) | |
parent | f1fa79a59554cb36ebee0a569a7b0f442fef6646 (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/SConscript | 4 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/drawarmature.c | 12 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/drawobject.c | 104 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/space_view3d.c | 8 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/view3d_buttons.c | 4 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/view3d_draw.c | 21 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/view3d_edit.c | 86 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/view3d_header.c | 23 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/view3d_intern.h | 1 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/view3d_ops.c | 130 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/view3d_select.c | 34 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/view3d_snap.c | 8 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/view3d_view.c | 9 |
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; |