Page MenuHome

smoothview_patch4.txt

smoothview_patch4.txt

? .cdtproject
? .project
? .settings
? CMakeFiles
? DDD
? Male.blend
? NONE
? Scripts_As_Object_Linkable_Data.pdf
? Temp
? blender_bin_oldbox
? building_blender.pdf
? cscope.out
? disp
? dist
? epy_doc_gen
? ffmpeg
? layercolors.diff
? lib
? link_fix.patch
? obj
? test_objects
? user-def.mk
? extern/verse/dist/verse
? po/rosetta-blender
? po/rosetta-blender.tar.gz
? release/scripts/3ds_export_test.py
? release/scripts/House.lwo
? release/scripts/NONE
? release/scripts/add_mesh_teapot.py
? release/scripts/bvh_import.pyc
? release/scripts/console_autoexec.py
? release/scripts/export_bvh.py
? release/scripts/export_fbx.pyc
? release/scripts/flt_filewalker.pyc
? release/scripts/image_edit.pyc
? release/scripts/kmz_ImportWithMesh_campbells
? release/scripts/lightwave_export_improved.py
? release/scripts/md2_export.py_bak
? release/scripts/mesh_add_script_from_active.py
? release/scripts/mesh_solidify.pyc
? release/scripts/mesh_unfolder.pyc
? release/scripts/mesh_unfolder2.py
? release/scripts/modified
? release/scripts/slp_import.py.needtotest
? release/scripts/uv_archimap_thin.py
? release/scripts/weightpaint_blur.py
? release/scripts/win32_line_endings.pl
? release/scripts/bpydata/config/General.cfg
? release/scripts/bpydata/config/UVEXPORT.cfg
? release/scripts/bpydata/config/ac3d_export.cfg
? release/scripts/bpydata/config/ac3d_import.cfg
? release/scripts/bpydata/config/flt_import.cfg
? release/scripts/bpydata/config/key.cfg
? release/scripts/bpydata/config/mvr_dict.cfg
? release/scripts/bpymodules/BPyAddMesh.pyc
? release/scripts/bpymodules/BPyImage.pyc
? release/scripts/bpymodules/BPyMathutils.pyc
? release/scripts/bpymodules/BPyMesh.pyc
? release/scripts/bpymodules/BPyMesh_redux.pyc
? release/scripts/bpymodules/BPyMessages.pyc
? release/scripts/bpymodules/BPyNMesh.pyc
? release/scripts/bpymodules/BPyObject.pyc
? release/scripts/bpymodules/BPyRegistry.pyc
? release/scripts/bpymodules/BPyRender.pyc
? release/scripts/bpymodules/BPyWindow.pyc
? release/scripts/bpymodules/NONE
? release/scripts/bpymodules/ai2obj.pyc
? release/scripts/bpymodules/boxpack2d.pyc
? release/scripts/bpymodules/boxpack2d_octree.py
? release/scripts/bpymodules/defaultdoodads.pyc
? release/scripts/bpymodules/eps2obj.pyc
? release/scripts/bpymodules/mesh_gradient.pyc
? release/scripts/bpymodules/meshtools.pyc
? release/scripts/bpymodules/svg2obj.pyc
? release/scripts/bpymodules/svg2obj_cams.py
? release/scripts/bpymodules/colladaImEx/NONE
? release/scripts/bpymodules/colladaImEx/__init__.pyc
? release/scripts/bpymodules/colladaImEx/collada.pyc
? release/scripts/bpymodules/colladaImEx/cstartup.pyc
? release/scripts/bpymodules/colladaImEx/cutils.pyc
? release/scripts/bpymodules/colladaImEx/helperObjects.pyc
? release/scripts/bpymodules/colladaImEx/translator.pyc
? release/scripts/bpymodules/colladaImEx/xmlUtils.pyc
? source/blender/nodes/intern/+=
? source/blender/python/api2_2x/DEV
? source/blender/python/api2_2x/Geometry_not_working_linked_list.c
? source/blender/python/api2_2x/doc/API_intro.pyc
? source/blender/python/api2_2x/doc/API_related.pyc
? source/blender/python/api2_2x/doc/Armature.pyc
? source/blender/python/api2_2x/doc/BGL.pyc
? source/blender/python/api2_2x/doc/BPY_API
? source/blender/python/api2_2x/doc/BezTriple.pyc
? source/blender/python/api2_2x/doc/Blender.pyc
? source/blender/python/api2_2x/doc/Bpy.pyc
? source/blender/python/api2_2x/doc/Camera.pyc
? source/blender/python/api2_2x/doc/Constraint.pyc
? source/blender/python/api2_2x/doc/Curve.pyc
? source/blender/python/api2_2x/doc/Draw.pyc
? source/blender/python/api2_2x/doc/Effect.pyc
? source/blender/python/api2_2x/doc/Font.pyc
? source/blender/python/api2_2x/doc/Geometry.pyc
? source/blender/python/api2_2x/doc/Group.pyc
? source/blender/python/api2_2x/doc/IDProp.pyc
? source/blender/python/api2_2x/doc/Image.pyc
? source/blender/python/api2_2x/doc/Ipo.pyc
? source/blender/python/api2_2x/doc/IpoCurve.pyc
? source/blender/python/api2_2x/doc/Key.pyc
? source/blender/python/api2_2x/doc/Lamp.pyc
? source/blender/python/api2_2x/doc/Lattice.pyc
? source/blender/python/api2_2x/doc/LibData.pyc
? source/blender/python/api2_2x/doc/Library.pyc
? source/blender/python/api2_2x/doc/Material.pyc
? source/blender/python/api2_2x/doc/Mathutils.pyc
? source/blender/python/api2_2x/doc/Mesh.pyc
? source/blender/python/api2_2x/doc/MeshPrimitives.pyc
? source/blender/python/api2_2x/doc/Metaball.pyc
? source/blender/python/api2_2x/doc/Modifier.pyc
? source/blender/python/api2_2x/doc/NLA.pyc
? source/blender/python/api2_2x/doc/NMesh.pyc
? source/blender/python/api2_2x/doc/Noise.pyc
? source/blender/python/api2_2x/doc/Object.pyc
? source/blender/python/api2_2x/doc/Pose.pyc
? source/blender/python/api2_2x/doc/Radio.pyc
? source/blender/python/api2_2x/doc/Registry.pyc
? source/blender/python/api2_2x/doc/Render.pyc
? source/blender/python/api2_2x/doc/Scene.pyc
? source/blender/python/api2_2x/doc/Sound.pyc
? source/blender/python/api2_2x/doc/Sys.pyc
? source/blender/python/api2_2x/doc/Text.pyc
? source/blender/python/api2_2x/doc/Text3d.pyc
? source/blender/python/api2_2x/doc/Texture.pyc
? source/blender/python/api2_2x/doc/Theme.pyc
? source/blender/python/api2_2x/doc/TimeLine.pyc
? source/blender/python/api2_2x/doc/Types.pyc
? source/blender/python/api2_2x/doc/Window.pyc
? source/blender/python/api2_2x/doc/World.pyc
? source/blender/python/api2_2x/doc/id_generics.pyc
? source/blender/python/api2_2x/doc/spaces_2_tabs.py
? source/blender/src/drawobject.c.area_alpha
? source/blender/src/interface_draw_minimal_theme
? source/blender/src/meshtools.c.viewaxissort
? source/gameengine/PyDoc/BPY_GE_236
? tools/Blender.pyc
? tools/__init__.pyc
? tools/bcolors.pyc
? tools/btools.pyc
Index: source/blender/include/BSE_drawview.h
===================================================================
RCS file: /cvsroot/bf-blender/blender/source/blender/include/BSE_drawview.h,v
retrieving revision 1.19
diff -u -p -u -r1.19 BSE_drawview.h
--- source/blender/include/BSE_drawview.h 1 Jan 2007 09:41:10 -0000 1.19
+++ source/blender/include/BSE_drawview.h 9 Apr 2007 08:46:43 -0000
@@ -78,5 +78,8 @@ int play_anim(int mode);
void make_axis_color(char *col, char *col2, char axis);
+/* SMOOTHVIEW */
+void smooth_view(struct View3D *v3d, float *ofs, float *quat, float *dist);
+
#endif /* BSE_DRAWVIEW_H */
Index: source/blender/makesdna/DNA_userdef_types.h
===================================================================
RCS file: /cvsroot/bf-blender/blender/source/blender/makesdna/DNA_userdef_types.h,v
retrieving revision 1.65
diff -u -p -u -r1.65 DNA_userdef_types.h
--- source/blender/makesdna/DNA_userdef_types.h 18 Mar 2007 03:30:23 -0000 1.65
+++ source/blender/makesdna/DNA_userdef_types.h 9 Apr 2007 08:46:43 -0000
@@ -179,6 +179,8 @@ typedef struct UserDef {
char versemaster[160];
char verseuser[160];
short recent_files; /* maximum number of recently used files to remember */
+ short smooth_viewtx; /* miliseconds to spend spinning the view */
+ char pad[6];
} UserDef;
extern UserDef U; /* from usiblender.c !!!! */
Index: source/blender/src/editview.c
===================================================================
RCS file: /cvsroot/bf-blender/blender/source/blender/src/editview.c,v
retrieving revision 1.134
diff -u -p -u -r1.134 editview.c
--- source/blender/src/editview.c 5 Apr 2007 13:35:05 -0000 1.134
+++ source/blender/src/editview.c 9 Apr 2007 08:46:44 -0000
@@ -2058,6 +2058,10 @@ void view3d_border_zoom(void)
short val;
float dvec[3], vb[2], xscale, yscale, scale;
+ /* SMOOTHVIEW */
+ float new_dist;
+ float new_ofs[3];
+
/* doesn't work fine for perspective */
if(G.vd->persp==1)
return;
@@ -2069,12 +2073,18 @@ void view3d_border_zoom(void)
vb[0] = G.vd->area->winx;
vb[1] = G.vd->area->winy;
+ new_dist = G.vd->dist;
+ new_ofs[0] = G.vd->ofs[0];
+ new_ofs[1] = G.vd->ofs[1];
+ new_ofs[2] = G.vd->ofs[2];
+
/* convert the drawn rectangle into 3d space */
- initgrabz(-G.vd->ofs[0], -G.vd->ofs[1], -G.vd->ofs[2]);
+ initgrabz(-new_ofs[0], -new_ofs[1], -new_ofs[2]);
+
window_to_3d(dvec, (rect.xmin+rect.xmax-vb[0])/2, (rect.ymin+rect.ymax-vb[1])/2);
/* center the view to the center of the rectangle */
- VecSubf(G.vd->ofs, G.vd->ofs, dvec);
+ VecSubf(new_ofs, new_ofs, dvec);
/* work out the ratios, so that everything selected fits when we zoom */
xscale = ((rect.xmax-rect.xmin)/vb[0]);
@@ -2082,7 +2092,10 @@ void view3d_border_zoom(void)
scale = (xscale >= yscale)?xscale:yscale;
/* zoom in as required, or as far as we can go */
- G.vd->dist = ((G.vd->dist*scale) >= 0.001*G.vd->grid)? G.vd->dist*scale:0.001*G.vd->grid;
+ new_dist = ((new_dist*scale) >= 0.001*G.vd->grid)? new_dist*scale:0.001*G.vd->grid;
+
+ smooth_view(G.vd, new_ofs, NULL, &new_dist);
+
}
}
Index: source/blender/src/space.c
===================================================================
RCS file: /cvsroot/bf-blender/blender/source/blender/src/space.c,v
retrieving revision 1.467
diff -u -p -u -r1.467 space.c
--- source/blender/src/space.c 8 Apr 2007 19:14:22 -0000 1.467
+++ source/blender/src/space.c 9 Apr 2007 08:46:45 -0000
@@ -1331,10 +1331,12 @@ static void winqreadview3dspace(ScrArea
G.vd->camdx= G.vd->camdy= 0.0;
else {
/*non camera center*/
+ float new_ofs[3];
curs= give_cursor();
- G.vd->ofs[0]= -curs[0];
- G.vd->ofs[1]= -curs[1];
- G.vd->ofs[2]= -curs[2];
+ new_ofs[0]= -curs[0];
+ new_ofs[1]= -curs[1];
+ new_ofs[2]= -curs[2];
+ smooth_view(G.vd, new_ofs, NULL, NULL);
}
}
doredraw= 1;
@@ -1734,10 +1736,12 @@ static void winqreadview3dspace(ScrArea
G.vd->camdx= G.vd->camdy= 0.0;
else {
/*non camera center*/
+ float new_ofs[3];
curs= give_cursor();
- G.vd->ofs[0]= -curs[0];
- G.vd->ofs[1]= -curs[1];
- G.vd->ofs[2]= -curs[2];
+ new_ofs[0]= -curs[0];
+ new_ofs[1]= -curs[1];
+ new_ofs[2]= -curs[2];
+ smooth_view(G.vd, new_ofs, NULL, NULL);
}
scrarea_queue_winredraw(curarea);
}
@@ -3328,7 +3332,12 @@ void drawinfospace(ScrArea *sa, void *sp
(xpos+edgsp+(3*mpref)+(4*midsp)),y1,(mpref),buth,
&U.pad_rot_angle, 0, 90, 0, 0,
"The rotation step for numerical pad keys (2 4 6 8)");
-
+
+ uiDefButS(block, NUM, B_DRAWINFO, "Smooth View:",
+ (xpos+edgsp+(4*mpref)+(5*midsp)),y1,(mpref),buth,
+ &U.smooth_viewtx, 0, 1000, 0, 0,
+ "The time to animate the view in miliseconds, zero to disable");
+
uiDefBut(block, LABEL,0,"Select with:",
(xpos+(2*edgsp)+(3*mpref)+(3*midsp)),y6label,mpref,buth,
0, 0, 0, 0, 0, "");
Index: source/blender/src/toets.c
===================================================================
RCS file: /cvsroot/bf-blender/blender/source/blender/src/toets.c,v
retrieving revision 1.102
diff -u -p -u -r1.102 toets.c
--- source/blender/src/toets.c 4 Apr 2007 13:18:34 -0000 1.102
+++ source/blender/src/toets.c 9 Apr 2007 08:46:45 -0000
@@ -127,6 +127,8 @@ void persptoetsen(unsigned short event)
static int perspo=1;
int preview3d_event= 1;
+ float new_quat[4], new_dist;
+
if(event==PADENTER) {
if (G.qual == LR_SHIFTKEY) {
view3d_set_1_to_1_viewborder(G.vd);
@@ -134,7 +136,8 @@ void persptoetsen(unsigned short event)
if (G.vd->persp==2) {
G.vd->camzoom= 0;
} else {
- G.vd->dist= 10.0;
+ new_dist = 10.0;
+ smooth_view(G.vd, NULL, NULL, &new_dist);
}
}
}
@@ -149,28 +152,35 @@ void persptoetsen(unsigned short event)
/* G.vd->persp= 3; */
}
else if(event==PAD7) {
- G.vd->viewquat[0]= 0.0;
- G.vd->viewquat[1]= -1.0;
- G.vd->viewquat[2]= 0.0;
- G.vd->viewquat[3]= 0.0;
+ new_quat[0]=0.0;
+ new_quat[1]=-1.0;
+ new_quat[2]=0.0;
+ new_quat[3]=0.0;
+ G.vd->view= 0;
+ smooth_view(G.vd, NULL, new_quat, NULL);
G.vd->view= 7;
+
if (U.uiflag & USER_AUTOPERSP) G.vd->persp= 0;
else if(G.vd->persp>=2) G.vd->persp= perspo;
}
else if(event==PAD1) {
- G.vd->viewquat[0]= 0.0;
- G.vd->viewquat[1]= 0.0;
- G.vd->viewquat[2]= (float)-cos(M_PI/4.0);
- G.vd->viewquat[3]= (float)-cos(M_PI/4.0);
+ new_quat[0]=0.0;
+ new_quat[1]=0.0;
+ new_quat[2]=(float)-cos(M_PI/4.0);
+ new_quat[3]=(float)-cos(M_PI/4.0);
+ G.vd->view=0;
+ smooth_view(G.vd, NULL, new_quat, NULL);
G.vd->view=1;
if (U.uiflag & USER_AUTOPERSP) G.vd->persp= 0;
else if(G.vd->persp>=2) G.vd->persp= perspo;
}
else if(event==PAD3) {
- G.vd->viewquat[0]= 0.5;
- G.vd->viewquat[1]= -0.5;
- G.vd->viewquat[2]= 0.5;
- G.vd->viewquat[3]= 0.5;
+ new_quat[0]= 0.5;
+ new_quat[1]=-0.5;
+ new_quat[2]= 0.5;
+ new_quat[3]= 0.5;
+ G.vd->view=0;
+ smooth_view(G.vd, NULL, new_quat, NULL);
G.vd->view=3;
if (U.uiflag & USER_AUTOPERSP) G.vd->persp= 0;
else if(G.vd->persp>=2) G.vd->persp= perspo;
@@ -211,28 +221,34 @@ void persptoetsen(unsigned short event)
if(event==PAD7) {
- G.vd->viewquat[0]= 1.0;
- G.vd->viewquat[1]= 0.0;
- G.vd->viewquat[2]= 0.0;
- G.vd->viewquat[3]= 0.0;
+ new_quat[0]=1.0;
+ new_quat[1]=0.0;
+ new_quat[2]=0.0;
+ new_quat[3]=0.0;
+ G.vd->view=0;
+ smooth_view(G.vd, NULL, new_quat, NULL);
G.vd->view=7;
if (U.uiflag & USER_AUTOPERSP) G.vd->persp= 0;
else if(G.vd->persp>=2) G.vd->persp= perspo;
}
else if(event==PAD1) {
- G.vd->viewquat[0]= (float)cos(M_PI/4.0);
- G.vd->viewquat[1]= (float)-sin(M_PI/4.0);
- G.vd->viewquat[2]= 0.0;
- G.vd->viewquat[3]= 0.0;
+ new_quat[0]= (float)cos(M_PI/4.0);
+ new_quat[1]= (float)-sin(M_PI/4.0);
+ new_quat[2]= 0.0;
+ new_quat[3]= 0.0;
+ G.vd->view=0;
+ smooth_view(G.vd, NULL, new_quat, NULL);
G.vd->view=1;
if (U.uiflag & USER_AUTOPERSP) G.vd->persp= 0;
else if(G.vd->persp>=2) G.vd->persp= perspo;
}
else if(event==PAD3) {
- G.vd->viewquat[0]= 0.5;
- G.vd->viewquat[1]= -0.5;
- G.vd->viewquat[2]= -0.5;
- G.vd->viewquat[3]= -0.5;
+ new_quat[0]= 0.5;
+ new_quat[1]= -0.5;
+ new_quat[2]= -0.5;
+ new_quat[3]= -0.5;
+ G.vd->view=0;
+ smooth_view(G.vd, NULL, new_quat, NULL);
G.vd->view=3;
if (U.uiflag & USER_AUTOPERSP) G.vd->persp= 0;
else if(G.vd->persp>=2) G.vd->persp= perspo;
Index: source/blender/src/view.c
===================================================================
RCS file: /cvsroot/bf-blender/blender/source/blender/src/view.c,v
retrieving revision 1.82
diff -u -p -u -r1.82 view.c
--- source/blender/src/view.c 4 Apr 2007 13:18:34 -0000 1.82
+++ source/blender/src/view.c 9 Apr 2007 08:46:46 -0000
@@ -87,6 +87,8 @@
#include "mydevice.h"
#include "blendef.h"
+#include "PIL_time.h" /* smoothview */
+
#define TRACKBALLSIZE (1.1)
#define BL_NEAR_CLIP 0.001
@@ -1248,7 +1250,7 @@ void initlocalview()
scrarea_queue_winredraw(curarea);
}
else {
- /* clear flags */
+ /* clear flags */
base= FIRSTBASE;
while(base) {
if( base->lay & locallay ) {
@@ -1271,7 +1273,12 @@ void centerview() /* like a localview wi
Object *ob= OBACT;
float size, min[3], max[3], afm[3];
int ok=0;
-
+
+ /* SMOOTHVIEW */
+ float new_ofs[3];
+ float new_dist;
+
+
min[0]= min[1]= min[2]= 1.0e10;
max[0]= max[1]= max[2]= -1.0e10;
@@ -1340,27 +1347,29 @@ void centerview() /* like a localview wi
if(size<=0.01) size= 0.01;
- G.vd->ofs[0]= -(min[0]+max[0])/2.0;
- G.vd->ofs[1]= -(min[1]+max[1])/2.0;
- G.vd->ofs[2]= -(min[2]+max[2])/2.0;
-
- G.vd->dist= size;
+ new_ofs[0]= -(min[0]+max[0])/2.0;
+ new_ofs[1]= -(min[1]+max[1])/2.0;
+ new_ofs[2]= -(min[2]+max[2])/2.0;
+
+ new_dist = size;
// correction for window aspect ratio
if(curarea->winy>2 && curarea->winx>2) {
size= (float)curarea->winx/(float)curarea->winy;
if(size<1.0) size= 1.0/size;
- G.vd->dist*= size;
+ new_dist*= size;
}
if(G.vd->persp>1) {
G.vd->persp= 1;
}
-
- G.vd->cursor[0]= -G.vd->ofs[0];
- G.vd->cursor[1]= -G.vd->ofs[1];
- G.vd->cursor[2]= -G.vd->ofs[2];
-
+
+ G.vd->cursor[0]= -new_ofs[0];
+ G.vd->cursor[1]= -new_ofs[1];
+ G.vd->cursor[2]= -new_ofs[2];
+
+ smooth_view(G.vd, new_ofs, NULL, &new_dist);
+
scrarea_queue_winredraw(curarea);
BIF_view3d_previewrender_signal(curarea, PR_DBASE|PR_DISPRECT);
@@ -1425,7 +1434,7 @@ void endlocalview(ScrArea *sa)
allqueue(REDRAWVIEW3D, 0); /* because of select */
allqueue(REDRAWOOPS, 0); /* because of select */
BIF_view3d_previewrender_signal(curarea, PR_DBASE|PR_DISPRECT);
- }
+ }
}
void view3d_home(int center)
@@ -1458,21 +1467,24 @@ void view3d_home(int center)
if(size==0.0) ok= 0;
if(ok) {
-
- G.vd->ofs[0]= -(min[0]+max[0])/2.0;
- G.vd->ofs[1]= -(min[1]+max[1])/2.0;
- G.vd->ofs[2]= -(min[2]+max[2])/2.0;
-
- G.vd->dist= size;
+ float new_dist;
+ float new_ofs[3];
+
+ new_dist = size;
+ new_ofs[0]= -(min[0]+max[0])/2.0;
+ new_ofs[1]= -(min[1]+max[1])/2.0;
+ new_ofs[2]= -(min[2]+max[2])/2.0;
// correction for window aspect ratio
if(curarea->winy>2 && curarea->winx>2) {
size= (float)curarea->winx/(float)curarea->winy;
if(size<1.0) size= 1.0/size;
- G.vd->dist*= size;
+ new_dist*= size;
}
if(G.vd->persp==2) G.vd->persp= 1;
+
+ smooth_view(G.vd, new_ofs, NULL, &new_dist);
scrarea_queue_winredraw(curarea);
}
@@ -1498,5 +1510,110 @@ void view3d_align_axis_to_vector(View3D
v3d->view= 0;
if (v3d->persp>=2) v3d->persp= 0; /* switch out of camera mode */
+}
+
+
+
+/* SMOOTHVIEW */
+void smooth_view(View3D *v3d, float *ofs, float *quat, float *dist)
+{
+ /* View Animation enabled */
+ if (U.smooth_viewtx) {
+ int i;
+ char changed = 0;
+ float step = 0.0, step_inv;
+ float orig_dist;
+ float orig_quat[4];
+ float orig_ofs[3];
+
+ double time_allowed, time_current, time_start;
+
+ /* if there is no difference, return */
+ changed = 0; /* zero means no difference */
+ if (dist) {
+ if ((*dist) != v3d->dist)
+ changed = 1;
+ }
+
+ if (!changed && ofs) {
+ if ((ofs[0]!=v3d->ofs[0]) ||
+ (ofs[1]!=v3d->ofs[1]) ||
+ (ofs[2]!=v3d->ofs[2]) )
+ changed = 1;
+ }
+
+ if (!changed && quat ) {
+ if ((quat[0]!=v3d->viewquat[0]) ||
+ (quat[1]!=v3d->viewquat[1]) ||
+ (quat[2]!=v3d->viewquat[2]) ||
+ (quat[3]!=v3d->viewquat[3]) )
+ changed = 1;
+ }
+
+ /* The new view is different from teh old one
+ * so animate the view */
+ if (changed) {
+
+ /* store original values */
+ VECCOPY(orig_ofs, v3d->ofs);
+ QUATCOPY(orig_quat, v3d->viewquat);
+ orig_dist = v3d->dist;
+
+ time_allowed= (float)U.smooth_viewtx / 1000.0;
+ time_current = time_start = PIL_check_seconds_timer();
+
+ /* if this is view rotation only
+ * we can decrease the time allowed by
+ * the angle between quats
+ * this means small rotations wont lag */
+ if (quat && !ofs && !dist) {
+ float vec1[3], vec2[3];
+ VECCOPY(vec1, quat);
+ VECCOPY(vec2, v3d->viewquat);
+ Normalize(vec1);
+ Normalize(vec2);
+ /* scale the time allowed by the rotation */
+ time_allowed *= NormalizedVecAngle2(vec1, vec2)/(M_PI/2);
+ }
+
+ while (time_start + time_allowed > time_current) {
+
+ step = (float)((time_current-time_start) / time_allowed);
+
+ /* ease in/out */
+ if (step < 0.5) step = pow(step*2, 2)/2;
+ else step = 1-(pow(2*(1-step) ,2)/2);
+
+ step_inv = 1-step;
+
+ if (ofs)
+ for (i=0; i<3; i++)
+ v3d->ofs[i] = ofs[i]*step + orig_ofs[i]*step_inv;
+
+ if (quat)
+ QuatInterpol(v3d->viewquat, orig_quat, quat, step);
+
+ if (dist) {
+ v3d->dist = ((*dist)*step) + (orig_dist*step_inv);
+ }
+
+ /*redraw the view*/
+ scrarea_do_windraw(curarea);
+ screen_swapbuffers();
+
+ time_current= PIL_check_seconds_timer();
+ }
+ }
+ }
+
+ /* set these values even if animation is enabled because flaot
+ * error will make then not quite accurate */
+ if (ofs)
+ VECCOPY(v3d->ofs, ofs);
+ if (quat)
+ QUATCOPY(v3d->viewquat, quat);
+ if (dist)
+ v3d->dist = *dist;
+
}

File Metadata

Mime Type
text/plain
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
3e/09/7137036fe4b8aee11d11a3af61f8

Event Timeline