2.5
View3d: middle mouse rotate, translate, zoom. (using default mouse map)
This commit is contained in:
parent
92b1d3f946
commit
663612c70c
@ -49,6 +49,7 @@ CPPFLAGS += -I../../makesdna
|
||||
CPPFLAGS += -I../../imbuf
|
||||
CPPFLAGS += -I../../python
|
||||
CPPFLAGS += -I../../gpu
|
||||
CPPFLAGS += -I../../makesrna
|
||||
CPPFLAGS += -I../../render/extern/include
|
||||
CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include
|
||||
|
||||
|
@ -6,6 +6,6 @@ sources = env.Glob('*.c')
|
||||
incs = '../include ../../blenlib ../../blenkernel ../../makesdna ../../imbuf'
|
||||
incs += ' ../../windowmanager #/intern/guardedalloc #/extern/glew/include'
|
||||
incs += ' ../../render/extern/include #/intern/guardedalloc #intern/bmfont'
|
||||
incs += ' ../../gpu'
|
||||
incs += ' ../../gpu ../../makesrna'
|
||||
|
||||
env.BlenderLib ( 'bf_editors_space_view3d', sources, Split(incs), [], libtype=['core','intern'], priority=[35, 40] )
|
||||
|
@ -1202,30 +1202,30 @@ static void drawlattice(View3D *v3d, Object *ob)
|
||||
|
||||
static void mesh_foreachScreenVert__mapFunc(void *userData, int index, float *co, float *no_f, short *no_s)
|
||||
{
|
||||
struct { void (*func)(void *userData, EditVert *eve, int x, int y, int index); void *userData; int clipVerts; float pmat[4][4], vmat[4][4]; } *data = userData;
|
||||
ARegion *ar= NULL; // XXX
|
||||
View3D *v3d= NULL; // XXX
|
||||
struct { void (*func)(void *userData, EditVert *eve, int x, int y, int index); void *userData; ARegion *ar; View3D *v3d; int clipVerts; float pmat[4][4], vmat[4][4]; } *data = userData;
|
||||
EditVert *eve = EM_get_vert_for_index(index);
|
||||
short s[2];
|
||||
|
||||
if (eve->h==0) {
|
||||
if (data->clipVerts) {
|
||||
view3d_project_short_clip(ar, v3d, co, s, data->pmat, data->vmat);
|
||||
view3d_project_short_clip(data->ar, data->v3d, co, s, data->pmat, data->vmat);
|
||||
} else {
|
||||
view3d_project_short_noclip(ar, co, s, data->pmat);
|
||||
view3d_project_short_noclip(data->ar, co, s, data->pmat);
|
||||
}
|
||||
|
||||
data->func(data->userData, eve, s[0], s[1], index);
|
||||
}
|
||||
}
|
||||
void mesh_foreachScreenVert(void (*func)(void *userData, EditVert *eve, int x, int y, int index), void *userData, int clipVerts)
|
||||
|
||||
void mesh_foreachScreenVert(ARegion *ar, View3D *v3d, void (*func)(void *userData, EditVert *eve, int x, int y, int index), void *userData, int clipVerts)
|
||||
{
|
||||
struct { void (*func)(void *userData, EditVert *eve, int x, int y, int index); void *userData; int clipVerts; float pmat[4][4], vmat[4][4]; } data;
|
||||
View3D *v3d= NULL; // XXX
|
||||
struct { void (*func)(void *userData, EditVert *eve, int x, int y, int index); void *userData; ARegion *ar; View3D *v3d; int clipVerts; float pmat[4][4], vmat[4][4]; } data;
|
||||
DerivedMesh *dm = editmesh_get_derived_cage(CD_MASK_BAREMESH);
|
||||
|
||||
data.func = func;
|
||||
data.userData = userData;
|
||||
data.ar= ar;
|
||||
data.v3d= v3d;
|
||||
data.clipVerts = clipVerts;
|
||||
|
||||
view3d_get_object_project_mat(v3d, G.obedit, data.pmat, data.vmat);
|
||||
@ -1239,23 +1239,21 @@ void mesh_foreachScreenVert(void (*func)(void *userData, EditVert *eve, int x, i
|
||||
|
||||
static void mesh_foreachScreenEdge__mapFunc(void *userData, int index, float *v0co, float *v1co)
|
||||
{
|
||||
struct { void (*func)(void *userData, EditEdge *eed, int x0, int y0, int x1, int y1, int index); void *userData; int clipVerts; float pmat[4][4], vmat[4][4]; } *data = userData;
|
||||
ARegion *ar= NULL; // XXX
|
||||
View3D *v3d= NULL; // XXX
|
||||
struct { void (*func)(void *userData, EditEdge *eed, int x0, int y0, int x1, int y1, int index); void *userData; ARegion *ar; View3D *v3d; int clipVerts; float pmat[4][4], vmat[4][4]; } *data = userData;
|
||||
EditEdge *eed = EM_get_edge_for_index(index);
|
||||
short s[2][2];
|
||||
|
||||
if (eed->h==0) {
|
||||
if (data->clipVerts==1) {
|
||||
view3d_project_short_clip(ar, v3d, v0co, s[0], data->pmat, data->vmat);
|
||||
view3d_project_short_clip(ar, v3d, v1co, s[1], data->pmat, data->vmat);
|
||||
view3d_project_short_clip(data->ar, data->v3d, v0co, s[0], data->pmat, data->vmat);
|
||||
view3d_project_short_clip(data->ar, data->v3d, v1co, s[1], data->pmat, data->vmat);
|
||||
} else {
|
||||
view3d_project_short_noclip(ar, v0co, s[0], data->pmat);
|
||||
view3d_project_short_noclip(ar, v1co, s[1], data->pmat);
|
||||
view3d_project_short_noclip(data->ar, v0co, s[0], data->pmat);
|
||||
view3d_project_short_noclip(data->ar, v1co, s[1], data->pmat);
|
||||
|
||||
if (data->clipVerts==2) {
|
||||
if (!(s[0][0]>=0 && s[0][1]>= 0 && s[0][0]<ar->winx && s[0][1]<ar->winy))
|
||||
if (!(s[1][0]>=0 && s[1][1]>= 0 && s[1][0]<ar->winx && s[1][1]<ar->winy))
|
||||
if (!(s[0][0]>=0 && s[0][1]>= 0 && s[0][0]<data->ar->winx && s[0][1]<data->ar->winy))
|
||||
if (!(s[1][0]>=0 && s[1][1]>= 0 && s[1][0]<data->ar->winx && s[1][1]<data->ar->winy))
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -1263,13 +1261,14 @@ static void mesh_foreachScreenEdge__mapFunc(void *userData, int index, float *v0
|
||||
data->func(data->userData, eed, s[0][0], s[0][1], s[1][0], s[1][1], index);
|
||||
}
|
||||
}
|
||||
void mesh_foreachScreenEdge(void (*func)(void *userData, EditEdge *eed, int x0, int y0, int x1, int y1, int index), void *userData, int clipVerts)
|
||||
void mesh_foreachScreenEdge(ARegion *ar, View3D *v3d, void (*func)(void *userData, EditEdge *eed, int x0, int y0, int x1, int y1, int index), void *userData, int clipVerts)
|
||||
{
|
||||
struct { void (*func)(void *userData, EditEdge *eed, int x0, int y0, int x1, int y1, int index); void *userData; int clipVerts; float pmat[4][4], vmat[4][4]; } data;
|
||||
View3D *v3d= NULL; // XXX
|
||||
struct { void (*func)(void *userData, EditEdge *eed, int x0, int y0, int x1, int y1, int index); void *userData; ARegion *ar; View3D *v3d; int clipVerts; float pmat[4][4], vmat[4][4]; } data;
|
||||
DerivedMesh *dm = editmesh_get_derived_cage(CD_MASK_BAREMESH);
|
||||
|
||||
data.func = func;
|
||||
data.ar= ar;
|
||||
data.v3d= v3d;
|
||||
data.userData = userData;
|
||||
data.clipVerts = clipVerts;
|
||||
|
||||
@ -1284,25 +1283,24 @@ void mesh_foreachScreenEdge(void (*func)(void *userData, EditEdge *eed, int x0,
|
||||
|
||||
static void mesh_foreachScreenFace__mapFunc(void *userData, int index, float *cent, float *no)
|
||||
{
|
||||
struct { void (*func)(void *userData, EditFace *efa, int x, int y, int index); void *userData; float pmat[4][4], vmat[4][4]; } *data = userData;
|
||||
ARegion *ar= NULL; // XXX
|
||||
View3D *v3d= NULL; // XXX
|
||||
struct { void (*func)(void *userData, EditFace *efa, int x, int y, int index); void *userData; ARegion *ar; View3D *v3d; float pmat[4][4], vmat[4][4]; } *data = userData;
|
||||
EditFace *efa = EM_get_face_for_index(index);
|
||||
short s[2];
|
||||
|
||||
if (efa && efa->h==0 && efa->fgonf!=EM_FGON) {
|
||||
view3d_project_short_clip(ar, v3d, cent, s, data->pmat, data->vmat);
|
||||
view3d_project_short_clip(data->ar, data->v3d, cent, s, data->pmat, data->vmat);
|
||||
|
||||
data->func(data->userData, efa, s[0], s[1], index);
|
||||
}
|
||||
}
|
||||
void mesh_foreachScreenFace(void (*func)(void *userData, EditFace *efa, int x, int y, int index), void *userData)
|
||||
void mesh_foreachScreenFace(ARegion *ar, View3D *v3d, void (*func)(void *userData, EditFace *efa, int x, int y, int index), void *userData)
|
||||
{
|
||||
struct { void (*func)(void *userData, EditFace *efa, int x, int y, int index); void *userData; float pmat[4][4], vmat[4][4]; } data;
|
||||
struct { void (*func)(void *userData, EditFace *efa, int x, int y, int index); void *userData; ARegion *ar; View3D *v3d; float pmat[4][4], vmat[4][4]; } data;
|
||||
DerivedMesh *dm = editmesh_get_derived_cage(CD_MASK_BAREMESH);
|
||||
View3D *v3d= NULL; // XXX
|
||||
|
||||
data.func = func;
|
||||
data.ar= ar;
|
||||
data.v3d= v3d;
|
||||
data.userData = userData;
|
||||
|
||||
view3d_get_object_project_mat(v3d, G.obedit, data.pmat, data.vmat);
|
||||
@ -1314,10 +1312,8 @@ void mesh_foreachScreenFace(void (*func)(void *userData, EditFace *efa, int x, i
|
||||
dm->release(dm);
|
||||
}
|
||||
|
||||
void nurbs_foreachScreenVert(void (*func)(void *userData, Nurb *nu, BPoint *bp, BezTriple *bezt, int beztindex, int x, int y), void *userData)
|
||||
void nurbs_foreachScreenVert(ARegion *ar, View3D *v3d, void (*func)(void *userData, Nurb *nu, BPoint *bp, BezTriple *bezt, int beztindex, int x, int y), void *userData)
|
||||
{
|
||||
ARegion *ar= NULL; // XXX
|
||||
View3D *v3d= NULL; // XXX
|
||||
float pmat[4][4], vmat[4][4];
|
||||
short s[2];
|
||||
Nurb *nu;
|
||||
@ -1375,7 +1371,7 @@ void nurbs_foreachScreenVert(void (*func)(void *userData, Nurb *nu, BPoint *bp,
|
||||
|
||||
static void draw_dm_face_normals__mapFunc(void *userData, int index, float *cent, float *no)
|
||||
{
|
||||
Scene *scene= NULL; // XXX
|
||||
Scene *scene= (Scene *)userData;
|
||||
EditFace *efa = EM_get_face_for_index(index);
|
||||
|
||||
if (efa->h==0 && efa->fgonf!=EM_FGON) {
|
||||
@ -1385,9 +1381,10 @@ static void draw_dm_face_normals__mapFunc(void *userData, int index, float *cent
|
||||
cent[2] + no[2]*scene->editbutsize);
|
||||
}
|
||||
}
|
||||
static void draw_dm_face_normals(DerivedMesh *dm) {
|
||||
static void draw_dm_face_normals(Scene *scene, DerivedMesh *dm)
|
||||
{
|
||||
glBegin(GL_LINES);
|
||||
dm->foreachMappedFaceCenter(dm, draw_dm_face_normals__mapFunc, 0);
|
||||
dm->foreachMappedFaceCenter(dm, draw_dm_face_normals__mapFunc, scene);
|
||||
glEnd();
|
||||
}
|
||||
|
||||
@ -1409,7 +1406,7 @@ static void draw_dm_face_centers(DerivedMesh *dm, int sel)
|
||||
|
||||
static void draw_dm_vert_normals__mapFunc(void *userData, int index, float *co, float *no_f, short *no_s)
|
||||
{
|
||||
Scene *scene= NULL; // XXX
|
||||
Scene *scene= (Scene *)userData;
|
||||
EditVert *eve = EM_get_vert_for_index(index);
|
||||
|
||||
if (eve->h==0) {
|
||||
@ -1426,9 +1423,10 @@ static void draw_dm_vert_normals__mapFunc(void *userData, int index, float *co,
|
||||
}
|
||||
}
|
||||
}
|
||||
static void draw_dm_vert_normals(DerivedMesh *dm) {
|
||||
static void draw_dm_vert_normals(Scene *scene, DerivedMesh *dm)
|
||||
{
|
||||
glBegin(GL_LINES);
|
||||
dm->foreachMappedVert(dm, draw_dm_vert_normals__mapFunc, NULL);
|
||||
dm->foreachMappedVert(dm, draw_dm_vert_normals__mapFunc, scene);
|
||||
glEnd();
|
||||
}
|
||||
|
||||
@ -2106,11 +2104,11 @@ static void draw_em_fancy(Scene *scene, View3D *v3d, Object *ob, EditMesh *em, D
|
||||
|
||||
if(G.f & G_DRAWNORMALS) {
|
||||
UI_ThemeColor(TH_NORMAL);
|
||||
draw_dm_face_normals(cageDM);
|
||||
draw_dm_face_normals(scene, cageDM);
|
||||
}
|
||||
if(G.f & G_DRAW_VNORMALS) {
|
||||
UI_ThemeColor(TH_NORMAL);
|
||||
draw_dm_vert_normals(cageDM);
|
||||
draw_dm_vert_normals(scene, cageDM);
|
||||
}
|
||||
|
||||
if(G.f & (G_DRAW_EDGELEN|G_DRAW_FACEAREA|G_DRAW_EDGEANG))
|
||||
@ -2978,7 +2976,7 @@ static void draw_new_particle_system(View3D *v3d, Base *base, ParticleSystem *ps
|
||||
break;
|
||||
case PART_DRAW_BB:
|
||||
if(v3d->camera==0 && part->bb_ob==0){
|
||||
// XXX error("Billboards need an active camera or a target object!");
|
||||
printf("Billboards need an active camera or a target object!\n");
|
||||
|
||||
draw_as=part->draw_as=PART_DRAW_DOT;
|
||||
|
||||
|
@ -178,14 +178,6 @@ static SpaceLink *view3d_duplicate(SpaceLink *sl)
|
||||
return (SpaceLink *)v3dn;
|
||||
}
|
||||
|
||||
void view3d_operatortypes(void)
|
||||
{
|
||||
}
|
||||
|
||||
void view3d_keymap(struct wmWindowManager *wm)
|
||||
{
|
||||
}
|
||||
|
||||
static void view3d_main_area_draw(const bContext *C, ARegion *ar)
|
||||
{
|
||||
/* draw entirely, view changes should be handled here */
|
||||
@ -195,6 +187,17 @@ static void view3d_main_area_draw(const bContext *C, ARegion *ar)
|
||||
drawview3dspace(CTX_data_scene(C), ar, v3d);
|
||||
}
|
||||
|
||||
/* add handlers, stuff you only do once or on area/region changes */
|
||||
static void view3d_main_area_init(wmWindowManager *wm, ARegion *ar)
|
||||
{
|
||||
ListBase *keymap;
|
||||
|
||||
/* own keymap */
|
||||
keymap= WM_keymap_listbase(wm, "View3D", SPACE_VIEW3D, 0); /* XXX weak? */
|
||||
WM_event_add_keymap_handler_bb(&ar->handlers, keymap,NULL, NULL);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* add handlers, stuff you only do once or on area/region changes */
|
||||
static void view3d_header_area_init(wmWindowManager *wm, ARegion *ar)
|
||||
@ -244,6 +247,7 @@ void ED_spacetype_view3d(void)
|
||||
art= MEM_callocN(sizeof(ARegionType), "spacetype time region");
|
||||
art->regionid = RGN_TYPE_WINDOW;
|
||||
art->draw= view3d_main_area_draw;
|
||||
art->init= view3d_main_area_init;
|
||||
|
||||
BLI_addhead(&st->regiontypes, art);
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -33,6 +33,7 @@
|
||||
struct BoundBox;
|
||||
struct Object;
|
||||
struct DerivedMesh;
|
||||
struct wmOperatorType;
|
||||
|
||||
typedef struct ViewDepths {
|
||||
unsigned short w, h;
|
||||
@ -56,6 +57,15 @@ typedef struct ViewDepths {
|
||||
/* view3d_header.c */
|
||||
void view3d_header_buttons(const struct bContext *C, ARegion *ar);
|
||||
|
||||
/* view3d_ops.c */
|
||||
void view3d_operatortypes(void);
|
||||
void view3d_keymap(struct wmWindowManager *wm);
|
||||
|
||||
/* view3d_edit.c */
|
||||
void ED_VIEW3D_OT_viewzoom(struct wmOperatorType *ot);
|
||||
void ED_VIEW3D_OT_viewmove(struct wmOperatorType *ot);
|
||||
void ED_VIEW3D_OT_viewrotate(struct wmOperatorType *ot);
|
||||
|
||||
/* drawobject.c */
|
||||
void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag);
|
||||
int draw_glsl_material(Scene *scene, Object *ob, View3D *v3d, int dt);
|
||||
|
77
source/blender/editors/space_view3d/view3d_ops.c
Normal file
77
source/blender/editors/space_view3d/view3d_ops.c
Normal file
@ -0,0 +1,77 @@
|
||||
/**
|
||||
* $Id:
|
||||
*
|
||||
* ***** BEGIN GPL LICENSE BLOCK *****
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software Foundation,
|
||||
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* The Original Code is Copyright (C) 2008 Blender Foundation.
|
||||
* All rights reserved.
|
||||
*
|
||||
*
|
||||
* Contributor(s): Blender Foundation
|
||||
*
|
||||
* ***** END GPL LICENSE BLOCK *****
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
|
||||
#include "MEM_guardedalloc.h"
|
||||
|
||||
#include "DNA_object_types.h"
|
||||
#include "DNA_scene_types.h"
|
||||
#include "DNA_screen_types.h"
|
||||
#include "DNA_space_types.h"
|
||||
#include "DNA_userdef_types.h"
|
||||
#include "DNA_view3d_types.h"
|
||||
#include "DNA_windowmanager_types.h"
|
||||
|
||||
#include "BLI_arithb.h"
|
||||
#include "BLI_blenlib.h"
|
||||
|
||||
#include "BKE_context.h"
|
||||
#include "BKE_global.h"
|
||||
#include "BKE_utildefines.h"
|
||||
|
||||
#include "RNA_access.h"
|
||||
#include "RNA_define.h"
|
||||
|
||||
#include "WM_api.h"
|
||||
#include "WM_types.h"
|
||||
|
||||
#include "ED_screen.h"
|
||||
|
||||
#include "view3d_intern.h"
|
||||
|
||||
|
||||
/* ************************** registration **********************************/
|
||||
|
||||
void view3d_operatortypes(void)
|
||||
{
|
||||
WM_operatortype_append(ED_VIEW3D_OT_viewrotate);
|
||||
WM_operatortype_append(ED_VIEW3D_OT_viewmove);
|
||||
WM_operatortype_append(ED_VIEW3D_OT_viewzoom);
|
||||
}
|
||||
|
||||
void view3d_keymap(wmWindowManager *wm)
|
||||
{
|
||||
ListBase *keymap= WM_keymap_listbase(wm, "View3D", SPACE_VIEW3D, 0);
|
||||
|
||||
WM_keymap_verify_item(keymap, "ED_VIEW3D_OT_viewrotate", MIDDLEMOUSE, KM_PRESS, 0, 0);
|
||||
WM_keymap_verify_item(keymap, "ED_VIEW3D_OT_viewmove", MIDDLEMOUSE, KM_PRESS, KM_SHIFT, 0);
|
||||
WM_keymap_verify_item(keymap, "ED_VIEW3D_OT_viewzoom", MIDDLEMOUSE, KM_PRESS, KM_CTRL, 0);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user