~ubuntu-branches/ubuntu/gutsy/blender/gutsy-security

« back to all changes in this revision

Viewing changes to source/blender/src/editmesh_mods.c

  • Committer: Bazaar Package Importer
  • Author(s): Florian Ernst
  • Date: 2007-05-17 11:47:59 UTC
  • mfrom: (1.2.6 upstream)
  • Revision ID: james.westby@ubuntu.com-20070517114759-yp4ybrnhp2u7pk66
Tags: 2.44-1
* New upstream release.
* Drop debian/patches/01_64bits_stupidity, not needed anymore: as of this
  version blender is 64 bits safe again. Adjust README.Debian accordingly.

Show diffs side-by-side

added added

removed removed

Lines of Context:
2965
2965
        }
2966
2966
}
2967
2967
 
2968
 
static int tface_is_selected(MTFace *tf)
 
2968
static int mface_is_selected(MFace *mf)
2969
2969
{
2970
 
        return (!(tf->flag & TF_HIDE) && (tf->flag & TF_SELECT));
 
2970
        return (!(mf->flag & ME_HIDE) && (mf->flag & ME_FACE_SEL));
2971
2971
}
2972
2972
 
2973
2973
        /* XXX, code for both these functions should be abstract,
2983
2983
        norm[0]= norm[1]= norm[2]= 0.0;
2984
2984
        for (i=0; i<me->totface; i++) {
2985
2985
                MFace *mf= ((MFace*) me->mface) + i;
2986
 
                MTFace *tf= ((MTFace*) me->mtface) + i;
2987
2986
 
2988
 
                if (tface_is_selected(tf)) {
 
2987
                if (mface_is_selected(mf)) {
2989
2988
                        float *v1, *v2, *v3, fno[3];
2990
2989
 
2991
2990
                        v1= me->mvert[mf->v1].co;
3012
3011
                view3d_align_axis_to_vector(v3d, axis, norm);
3013
3012
}
3014
3013
 
 
3014
/* helper for below, to survive non-uniform scaled objects */
 
3015
static void face_getnormal_obspace(EditFace *efa, float *fno)
 
3016
{
 
3017
        float vec[4][3];
 
3018
        
 
3019
        VECCOPY(vec[0], efa->v1->co);
 
3020
        Mat4Mul3Vecfl(G.obedit->obmat, vec[0]);
 
3021
        VECCOPY(vec[1], efa->v2->co);
 
3022
        Mat4Mul3Vecfl(G.obedit->obmat, vec[1]);
 
3023
        VECCOPY(vec[2], efa->v3->co);
 
3024
        Mat4Mul3Vecfl(G.obedit->obmat, vec[2]);
 
3025
        if(efa->v4) {
 
3026
                VECCOPY(vec[3], efa->v4->co);
 
3027
                Mat4Mul3Vecfl(G.obedit->obmat, vec[3]);
 
3028
                
 
3029
                CalcNormFloat4(vec[0], vec[1], vec[2], vec[3], fno);
 
3030
        }
 
3031
        else CalcNormFloat(vec[0], vec[1], vec[2], fno);
 
3032
}
 
3033
 
 
3034
 
3015
3035
void editmesh_align_view_to_selected(View3D *v3d, int axis)
3016
3036
{
3017
3037
        EditMesh *em = G.editMesh;
3020
3040
        
3021
3041
        if (nselverts==0) {
3022
3042
                error("No faces or vertices selected.");
3023
 
        } else if (EM_nfaces_selected()) {
 
3043
        } 
 
3044
        else if (EM_nfaces_selected()) {
3024
3045
                EditFace *efa;
3025
3046
                for (efa= em->faces.first; efa; efa= efa->next) {
3026
3047
                        if (faceselectedAND(efa, SELECT)) {
3027
3048
                                float fno[3];
3028
 
                                if (efa->v4) CalcNormFloat4(efa->v1->co, efa->v2->co, efa->v3->co, efa->v4->co, fno);
3029
 
                                else CalcNormFloat(efa->v1->co, efa->v2->co, efa->v3->co, fno);
3030
 
                                                /* XXX, fixme, should be flipped intp a 
3031
 
                                                 * consistent direction. -zr
3032
 
                                                 */
 
3049
                                
 
3050
                                face_getnormal_obspace(efa, fno);
3033
3051
                                norm[0]+= fno[0];
3034
3052
                                norm[1]+= fno[1];
3035
3053
                                norm[2]+= fno[2];
3036
3054
                        }
3037
3055
                }
3038
3056
 
3039
 
                Mat4Mul3Vecfl(G.obedit->obmat, norm);
3040
3057
                view3d_align_axis_to_vector(v3d, axis, norm);
3041
 
        } else if (nselverts>2) {
 
3058
        } 
 
3059
        else if (nselverts>2) {
3042
3060
                float cent[3];
3043
3061
                EditVert *eve, *leve= NULL;
3044
3062
 
3062
3080
 
3063
3081
                Mat4Mul3Vecfl(G.obedit->obmat, norm);
3064
3082
                view3d_align_axis_to_vector(v3d, axis, norm);
3065
 
        } else if (nselverts==2) { /* Align view to edge (or 2 verts) */ 
 
3083
        } 
 
3084
        else if (nselverts==2) { /* Align view to edge (or 2 verts) */ 
3066
3085
                EditVert *eve, *leve= NULL;
3067
3086
 
3068
3087
                for (eve= em->verts.first; eve; eve= eve->next) {
3078
3097
                }
3079
3098
                Mat4Mul3Vecfl(G.obedit->obmat, norm);
3080
3099
                view3d_align_axis_to_vector(v3d, axis, norm);
3081
 
        } else if (nselverts==1) { /* Align view to vert normal */ 
 
3100
        } 
 
3101
        else if (nselverts==1) { /* Align view to vert normal */ 
3082
3102
                EditVert *eve;
3083
3103
 
3084
3104
                for (eve= em->verts.first; eve; eve= eve->next) {
3291
3311
        Mat3CpyMat4(bmat, ob->obmat);
3292
3312
        Mat3Inv(imat, bmat);
3293
3313
 
3294
 
        /* centre */
 
3314
        /* center */
3295
3315
        curs= give_cursor();
3296
3316
        cent[0]= curs[0]-ob->obmat[3][0];
3297
3317
        cent[1]= curs[1]-ob->obmat[3][1];
3319
3339
                        vec[1]= eve->co[1]-cent[1];
3320
3340
                        vec[2]= eve->co[2]-cent[2];
3321
3341
                        
3322
 
                        Normalise(vec);
 
3342
                        Normalize(vec);
3323
3343
                        
3324
3344
                        eve->co[0]= fac*(cent[0]+vec[0]*len) + facm*eve->co[0];
3325
3345
                        eve->co[1]= fac*(cent[1]+vec[1]*len) + facm*eve->co[1];