Sounds good. can do this soon and have old functionality back too. On Sat, Feb 27, 2010 at 8:22 PM, Martin Poirier <the...@yahoo.com> wrote: > No popup or anything, just have it as an operator property and it could work > like this: > > 0: Fly invoke records its result in an operator property that can be used by > exec on redo (assuming it doesn't do that already, it should). > > 1: The Move Parent property can be toggle on or off in the operator, it will > then move the parent or not. > > 2: The property can also be set in the keymap if users want one behavior or > another as default (I would suggest default Off). > > Martin > > --- On Fri, 2/26/10, Campbell Barton <ideasma...@gmail.com> wrote: > >> From: Campbell Barton <ideasma...@gmail.com> >> Subject: Re: [Bf-committers] [Bf-blender-cvs] SVN commit: >> /data/svn/bf-blender [27143] trunk/blender/source/blender/ >> editors/space_view3d/view3d_view.c: support for flymode with camera rigs, so >> the parent most object is actually flying. >> To: "bf-blender developers" <bf-committers@blender.org> >> Received: Friday, February 26, 2010, 3:07 AM >> still need to fix restoring on >> non-euler rotations for fly mode >> (probably do generic function for it), while what you >> suggest makes >> sense Id also consider fly mode with a parent to the camera >> fairly >> corner case which doesn't need an immediate fix. Would this >> just >> display a popup requesting to fly the camera or its root >> parent? >> >> On Fri, Feb 26, 2010 at 12:28 AM, Martin Poirier <the...@yahoo.com> >> wrote: >> > This should be optional with an operator property. >> > >> > I can't believe it wasn't done that way in the first >> place. >> > >> > Martin >> > >> > --- On Thu, 2/25/10, Campbell Barton <ideasma...@gmail.com> >> wrote: >> > >> >> From: Campbell Barton <ideasma...@gmail.com> >> >> Subject: [Bf-blender-cvs] SVN commit: >> /data/svn/bf-blender [27143] trunk/blender/source/blender/ >> editors/space_view3d/view3d_view.c: support for flymode with >> camera rigs, so the parent most object is actually flying. >> >> To: bf-blender-...@blender.org >> >> Received: Thursday, February 25, 2010, 3:40 PM >> >> Revision: 27143 >> >> >> >> http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=27143 >> >> Author: campbellbarton >> >> Date: 2010-02-25 21:40:09 +0100 >> >> (Thu, 25 Feb 2010) >> >> >> >> Log Message: >> >> ----------- >> >> support for flymode with camera rigs, so the >> parent most >> >> object is actually flying. >> >> >> >> Modified Paths: >> >> -------------- >> >> >> >> >> trunk/blender/source/blender/editors/space_view3d/view3d_view.c >> >> >> >> Modified: >> >> >> trunk/blender/source/blender/editors/space_view3d/view3d_view.c >> >> >> =================================================================== >> >> --- >> >> >> trunk/blender/source/blender/editors/space_view3d/view3d_view.c >> >> 2010-02-25 20:26:38 UTC (rev 27142) >> >> +++ >> >> >> trunk/blender/source/blender/editors/space_view3d/view3d_view.c >> >> 2010-02-25 20:40:09 UTC (rev 27143) >> >> @@ -1148,6 +1148,25 @@ >> >> } >> >> } >> >> >> >> +/* give a 4x4 matrix from a perspective view, >> only needs >> >> viewquat, ofs and dist >> >> + * basically the same as... >> >> + * rv3d->persp= RV3D_PERSP >> >> + * setviewmatrixview3d(scene, v3d, >> >> rv3d); >> >> + * setcameratoview3d(v3d, rv3d, >> >> v3d->camera); >> >> + * ...but less of a hassle >> >> + * */ >> >> +static void view3d_persp_mat4(RegionView3D *rv3d, >> float >> >> mat[][4]) >> >> +{ >> >> + float qt[4], dvec[3]; >> >> + copy_qt_qt(qt, rv3d->viewquat); >> >> + qt[0]= -qt[0]; >> >> + quat_to_mat4(mat, qt); >> >> + mat[3][2] -= rv3d->dist; >> >> + translate_m4(mat, rv3d->ofs[0], >> >> rv3d->ofs[1], rv3d->ofs[2]); >> >> + mul_v3_v3fl(dvec, mat[2], >> >> -rv3d->dist); >> >> + sub_v3_v3v3(mat[3], dvec, >> >> rv3d->ofs); >> >> +} >> >> + >> >> /* dont set windows active in in here, is used >> by >> >> renderwin too */ >> >> void setviewmatrixview3d(Scene *scene, View3D >> *v3d, >> >> RegionView3D *rv3d) >> >> { >> >> @@ -1934,6 +1953,9 @@ >> >> float xlock_momentum, zlock_momentum; >> >> /* nicer dynamics */ >> >> float grid; /* world scale 1.0 default >> >> */ >> >> >> >> + /* root most parent */ >> >> + Object *root_parent; >> >> + >> >> /* backup values */ >> >> float dist_backup; /* backup the views >> >> distance since we use a zero dist for fly mode */ >> >> float ofs_backup[3]; /* backup the >> >> views offset incase the user cancels flying in non >> camera >> >> mode */ >> >> @@ -2013,10 +2035,21 @@ >> >> fly->persp_backup= >> >> fly->rv3d->persp; >> >> fly->dist_backup= >> >> fly->rv3d->dist; >> >> if (fly->rv3d->persp==RV3D_CAMOB) >> >> { >> >> - /* store the >> >> origoinal camera loc and rot */ >> >> - >> >> VECCOPY(fly->ofs_backup, >> >> fly->v3d->camera->loc); >> >> - >> >> VECCOPY(fly->rot_backup, >> >> fly->v3d->camera->rot); >> >> + Object *ob_back; >> >> + >> >> >> if((fly->root_parent=fly->v3d->camera->parent)) >> >> { >> >> + >> >> while(fly->root_parent->parent) >> >> + >> >> fly->root_parent= >> >> fly->root_parent->parent; >> >> + >> >> ob_back= fly->root_parent; >> >> + } >> >> + else { >> >> + >> >> ob_back= fly->v3d->camera; >> >> + } >> >> >> >> + /* store the >> >> original camera loc and rot */ >> >> + /* TODO. axis angle >> >> etc */ >> >> + >> >> VECCOPY(fly->ofs_backup, ob_back->loc); >> >> + >> >> VECCOPY(fly->rot_backup, ob_back->rot); >> >> + >> >> >> >> where_is_object(fly->scene, >> fly->v3d->camera); >> >> >> >> VECCOPY(fly->rv3d->ofs, >> >> fly->v3d->camera->obmat[3]); >> >> >> >> mul_v3_fl(fly->rv3d->ofs, -1.0f); /*flip the >> vector*/ >> >> @@ -2060,10 +2093,16 @@ >> >> if (fly->state == FLY_CANCEL) { >> >> /* Revert to original view? */ >> >> if >> >> (fly->persp_backup==RV3D_CAMOB) { /* a camera >> view */ >> >> + >> >> Object *ob_back; >> >> + >> >> if(fly->root_parent)ob_back= >> fly->root_parent; >> >> + >> >> else >> >> ob_back= fly->v3d->camera; >> >> >> >> - >> >> VECCOPY(v3d->camera->loc, >> fly->ofs_backup); >> >> - >> >> VECCOPY(v3d->camera->rot, >> fly->rot_backup); >> >> - >> >> DAG_id_flush_update(&v3d->camera->id, >> >> OB_RECALC_OB); >> >> + >> >> /* store the original camera loc and rot */ >> >> + >> >> /* TODO. axis angle etc */ >> >> + >> >> VECCOPY(ob_back->loc, fly->ofs_backup); >> >> + >> >> VECCOPY(ob_back->rot, fly->rot_backup); >> >> + >> >> + >> >> DAG_id_flush_update(&ob_back->id, >> OB_RECALC_OB); >> >> } else { >> >> >> >> /* Non Camera we need to reset the view back to >> the original >> >> location bacause the user canceled*/ >> >> >> >> QUATCOPY(rv3d->viewquat, fly->rot_backup); >> >> @@ -2073,10 +2112,15 @@ >> >> } >> >> else if >> >> (fly->persp_backup==RV3D_CAMOB) { /* >> >> camera */ >> >> float mat3[3][3]; >> >> - copy_m3_m4(mat3, >> >> v3d->camera->obmat); >> >> - >> >> object_mat3_to_rot(v3d->camera, mat3, TRUE); >> >> + >> >> if(fly->root_parent) { >> >> + >> >> >> DAG_id_flush_update(&fly->root_parent->id, >> >> OB_RECALC_OB); >> >> + } >> >> + else { >> >> + >> >> copy_m3_m4(mat3, v3d->camera->obmat); >> >> + >> >> object_mat3_to_rot(v3d->camera, mat3, TRUE); >> >> + >> >> DAG_id_flush_update(&v3d->camera->id, >> >> OB_RECALC_OB); >> >> + } >> >> >> >> - >> >> DAG_id_flush_update(&v3d->camera->id, >> >> OB_RECALC_OB); >> >> #if 0 //XXX2.5 >> >> if >> >> (IS_AUTOKEY_MODE(NORMAL)) { >> >> >> >> allqueue(REDRAWIPO, 0); >> >> @@ -2244,6 +2288,8 @@ >> >> ARegion *ar = fly->ar; >> >> Scene *scene= fly->scene; >> >> >> >> + float prev_view_mat[4][4]; >> >> + >> >> float mat[3][3], /* 3x3 copy of the >> >> view matrix so we can move allong the view axis >> */ >> >> dvec[3]={0,0,0}, /* this is the >> >> direction thast added to the view offset per >> redraw */ >> >> >> >> @@ -2259,7 +2305,9 @@ >> >> unsigned char >> >> apply_rotation= 1; /* if the user >> >> presses shift they can look about without movinf >> the >> >> direction there looking*/ >> >> >> >> - >> >> + if(fly->root_parent) >> >> + >> >> view3d_persp_mat4(rv3d, prev_view_mat); >> >> + >> >> /* the dist defines a vector that is >> >> infront of the offset >> >> to rotate the view about. >> >> this is no good for fly mode because >> >> we >> >> @@ -2474,20 +2522,42 @@ >> >> >> >> >> >> /* we are in camera view so apply the view ofs and >> quat to >> >> the view matrix and set the camera to the view */ >> >> >> >> if (rv3d->persp==RV3D_CAMOB) { >> >> - >> >> rv3d->persp= RV3D_PERSP; /*set this so >> >> setviewmatrixview3d uses the ofs and quat instead >> of the >> >> camera */ >> >> - >> >> setviewmatrixview3d(scene, v3d, rv3d); >> >> - >> >> setcameratoview3d(v3d, rv3d, >> >> v3d->camera); >> >> - >> >> rv3d->persp= RV3D_CAMOB; >> >> - >> >> >> >> + >> >> ID *id_key; >> >> + >> >> /* transform the parent or the camera? >> >> */ >> >> + > >> >> if(fly->root_parent) { >> >> + >> >> float view_mat[4][4]; >> >> + >> >> float >> >> prev_view_imat[4][4]; >> >> + >> >> float diff_mat[4][4]; >> >> + >> >> float >> >> parent_mat[4][4]; >> >> + >> >> + >> >> >> >> invert_m4_m4(prev_view_imat, prev_view_mat); >> >> + >> >> >> >> view3d_persp_mat4(rv3d, view_mat); >> >> + >> >> mul_m4_m4m4(diff_mat, >> >> prev_view_imat, view_mat); >> >> + >> >> >> >> mul_m4_m4m4(parent_mat, >> fly->root_parent->obmat, >> >> diff_mat); >> >> + >> >> >> >> object_apply_mat4(fly->root_parent, >> parent_mat); >> >> + >> >> + >> >> where_is_object(scene, >> >> fly->root_parent); >> >> + >> >> + >> >> >> >> copy_m4_m4(prev_view_mat, view_mat); >> >> + >> >> + >> >> id_key= >> >> &fly->root_parent->id; >> >> + >> >> } >> >> + >> >> else { >> >> + >> >> float view_mat[4][4]; >> >> + >> >> >> >> view3d_persp_mat4(rv3d, view_mat); >> >> + >> >> >> >> object_apply_mat4(v3d->camera, view_mat); >> >> + >> >> id_key= >> >> &v3d->camera->id; >> >> + >> >> } >> >> + >> >> >> >> /* record the motion */ >> >> - >> >> if (autokeyframe_cfra_can_key(scene, >> >> &v3d->camera->id)) { >> >> + >> >> if (autokeyframe_cfra_can_key(scene, >> >> id_key)) { >> >> >> >> bCommonKeySrc cks; >> >> >> >> ListBase dsources = >> >> {&cks, &cks}; >> >> >> >> int cfra = CFRA; >> >> >> >> >> >> >> >> /* init >> >> common-key-source for use by KeyingSets */ >> >> >> >> memset(&cks, 0, >> >> sizeof(bCommonKeySrc)); >> >> - >> >> cks.id= >> >> &v3d->camera->id; >> >> + >> >> cks.id= id_key; >> >> >> >> >> >> >> >> /* insert keyframes >> >> >> >> >> >> * 1) on the >> >> first frame >> >> >> >> >> >> _______________________________________________ >> >> Bf-blender-cvs mailing list >> >> bf-blender-...@blender.org >> >> http://lists.blender.org/mailman/listinfo/bf-blender-cvs >> >> >> > >> > >> > >> __________________________________________________________________ >> > The new Internet Explorer® 8 - Faster, safer, easier. >> Optimized for Yahoo! Get it Now for Free! at >> http://downloads.yahoo.com/ca/internetexplorer/ >> > _______________________________________________ >> > Bf-committers mailing list >> > Bf-committers@blender.org >> > http://lists.blender.org/mailman/listinfo/bf-committers >> > >> >> >> >> -- >> - Campbell >> _______________________________________________ >> Bf-committers mailing list >> Bf-committers@blender.org >> http://lists.blender.org/mailman/listinfo/bf-committers >> > > > __________________________________________________________________ > The new Internet Explorer® 8 - Faster, safer, easier. Optimized for Yahoo! > Get it Now for Free! at http://downloads.yahoo.com/ca/internetexplorer/ > _______________________________________________ > Bf-committers mailing list > Bf-committers@blender.org > http://lists.blender.org/mailman/listinfo/bf-committers >
-- - Campbell _______________________________________________ Bf-committers mailing list Bf-committers@blender.org http://lists.blender.org/mailman/listinfo/bf-committers