if ((event->state & GDK_BUTTON1_MASK)&& (v->mouse.mouse_mode == MM_PAN))
glmotion_pan(v);
- return 1;
/*rotating, only in 3d v */
- if ((v->active_camera >=0)&&(v->mouse.button==rightmousebutton))
+ if ((v->active_camera >=0)&&(v->mouse.mouse_mode == MM_ROTATE))
glmotion_rotate(v);
+ return 1;
/*zooming */
if ((event->state & GDK_BUTTON1_MASK)&& (v->mouse.mouse_mode == MM_ZOOM))
}
int glmotion_rotate(ViewInfo * v)
{
- v->cameras[v->active_camera]->angley-=v->mouse.dy/5;
- v->cameras[v->active_camera]->anglex-=v->mouse.dx/5;
+ if(v->mouse.rotate_axis==MOUSE_ROTATE_XY)
+ {
+ v->cameras[v->active_camera]->angley-=v->mouse.dy/5;
+ v->cameras[v->active_camera]->anglex-=v->mouse.dx/5;
+ }
+ if(v->mouse.rotate_axis==MOUSE_ROTATE_X)
+ {
+ v->cameras[v->active_camera]->anglex-=v->mouse.dx/5;
+ }
+ if(v->mouse.rotate_axis==MOUSE_ROTATE_Y)
+ {
+ v->cameras[v->active_camera]->angley-=v->mouse.dy/5;
+ }
+ if(v->mouse.rotate_axis==MOUSE_ROTATE_Z)
+ {
+ v->cameras[v->active_camera]->anglez-=v->mouse.dx/5;
+ }
+
return 1;
}
redraw = TRUE;
}
/*rotating, only in 3d view */
- if ((view->active_camera >=0)&&(view->mouse.button==rightmousebutton) )
+ if ((view->active_camera >=0)&&(view->mouse.mouse_mode==MM_ROTATE)&& (event->state & GDK_BUTTON1_MASK) )
{
- view->cameras[view->active_camera]->angley-=dy/5;
- view->cameras[view->active_camera]->anglex-=dx/5;
+ if(glmotion_main(view,event,widget))
redraw = TRUE;
}
/*zooming */
typedef enum { nodshapedot,nodeshapecircle} node_shape;
typedef enum { leftmousebutton,rightmousebutton,thirdmousebutton} clicked_mouse_button;
+typedef enum { MOUSE_ROTATE_X,MOUSE_ROTATE_Y,MOUSE_ROTATE_XY,MOUSE_ROTATE_Z} mouse_rotate_axis;
typedef struct {
float anglex;
float angley;
+ float anglez;
float camera_vectorx;
COL_FILENAME,
NUM_COLS
};
-//atributes
+
+
typedef struct _mouse_attr {
int mouse_down;
int mouse_mode;
float begin_y;
float dx;
float dy;
+ mouse_rotate_axis rotate_axis;
clicked_mouse_button button;
} mouse_attr;