[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.

Campbell Barton ideasman42 at gmail.com
Sat Feb 27 20:41:26 CET 2010


Sounds good. can do this soon and have old functionality back too.

On Sat, Feb 27, 2010 at 8:22 PM, Martin Poirier <theeth at 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 <ideasman42 at gmail.com> wrote:
>
>> From: Campbell Barton <ideasman42 at 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 at 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 <theeth at 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 <ideasman42 at gmail.com>
>> wrote:
>> >
>> >> From: Campbell Barton <ideasman42 at 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-cvs at 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-cvs at 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 at blender.org
>> > http://lists.blender.org/mailman/listinfo/bf-committers
>> >
>>
>>
>>
>> --
>> - Campbell
>> _______________________________________________
>> Bf-committers mailing list
>> Bf-committers at 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 at blender.org
> http://lists.blender.org/mailman/listinfo/bf-committers
>



-- 
- Campbell


More information about the Bf-committers mailing list