[Bf-committers] Align view to edge (rotate about edge)
Stealth Apprentice
stealthapprentice at yahoo.com
Sat Jan 21 06:28:19 CET 2006
An align view to face would be really handy for
projections (or does that functionality exist and I
missed it?)
--- Campbell Barton <cbarton at metavr.com> wrote:
> Hi, Hers a small addision to editmesh_mods.c that
> allows aligning teh
> view to an edge. (2 verts) - see the last ~12 lines.
> It seems trivial, but at the moment there is no easy
> way to rotate
> around an edge- with this- "Align to view" &
> "Constrain transform to
> view" - could be used to rotate about en edge.
> Zr- do you own this module? - is it worth writing a
> patch?
> - Cam
>
> ____________
> void editmesh_align_view_to_selected(View3D *v3d,
> int axis)
> {
> EditMesh *em = G.editMesh;
> int nselverts= EM_nvertices_selected();
>
> if (nselverts<2) {
> if (nselverts==0) {
> error("No faces or vertices selected.");
> } else {
> error("At least one face or three
> vertices must be selected.");
> }
> } else if (EM_nfaces_selected()) {
> float norm[3];
> EditFace *efa;
>
> norm[0]= norm[1]= norm[2]= 0.0;
> for (efa= em->faces.first; efa; efa=
> efa->next) {
> if (faceselectedAND(efa, SELECT)) {
> float fno[3];
> if (efa->v4)
> CalcNormFloat4(efa->v1->co, efa->v2->co,
> efa->v3->co, efa->v4->co, fno);
> else CalcNormFloat(efa->v1->co,
> efa->v2->co,
> efa->v3->co, fno);
> /* XXX, fixme, should be
> flipped intp a
> * consistent direction. -zr
> */
> norm[0]+= fno[0];
> norm[1]+= fno[1];
> norm[2]+= fno[2];
> }
> }
>
> Mat4Mul3Vecfl(G.obedit->obmat, norm);
> view3d_align_axis_to_vector(v3d, axis,
> norm);
> } else if (nselverts>2) {
> float cent[3], norm[3];
> EditVert *eve, *leve= NULL;
>
> norm[0]= norm[1]= norm[2]= 0.0;
> editmesh_calc_selvert_center(cent);
> for (eve= em->verts.first; eve; eve=
> eve->next) {
> if (eve->f & SELECT) {
> if (leve) {
> float tno[3];
> CalcNormFloat(cent, leve->co,
> eve->co, tno);
>
> /* XXX, fixme, should be
> flipped intp a
> * consistent direction. -zr
> */
> norm[0]+= tno[0];
> norm[1]+= tno[1];
> norm[2]+= tno[2];
> }
> leve= eve;
> }
> }
>
> Mat4Mul3Vecfl(G.obedit->obmat, norm);
> view3d_align_axis_to_vector(v3d, axis,
> norm);
> } else { /* Align view to edge (or 2 verts) */
> float norm[3];
> EditVert *eve, *leve= NULL;
>
> norm[0]= norm[1]= norm[2]= 0.0;
> for (eve= em->verts.first; eve; eve=
> eve->next) {
> if (eve->f & SELECT) {
> if (leve) {
> norm[0]= leve->co[0] -
> eve->co[0];
> norm[1]= leve->co[1] -
> eve->co[1];
> norm[2]= leve->co[2] -
> eve->co[2];
> }
> leve= eve;
> }
> }
> Mat4Mul3Vecfl(G.obedit->obmat, norm);
> view3d_align_axis_to_vector(v3d, axis,
> norm);
> }
> }
>
> --
> Campbell J Barton
>
> 133 Hope Street
> Geelong West, Victoria 3218 Australia
>
> URL: http://www.metavr.com
> e-mail: cbarton at metavr.com
> phone: AU (03) 5229 0241
> _______________________________________________
> Bf-committers mailing list
> Bf-committers at projects.blender.org
>
http://projects.blender.org/mailman/listinfo/bf-committers
>
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com
More information about the Bf-committers
mailing list