svn merge -r39831:39877 https://svn.blender.org/svnroot/bf-blender/trunk/blender
authorCampbell Barton <ideasman42@gmail.com>
Sat, 3 Sep 2011 02:49:21 +0000 (02:49 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Sat, 3 Sep 2011 02:49:21 +0000 (02:49 +0000)
1  2 
source/blender/blenkernel/intern/collision.c
source/blender/blenlib/intern/math_geom.c
source/blender/editors/object/object_bake.c
source/blender/editors/space_view3d/view3d_view.c
source/gameengine/Converter/BL_BlenderDataConversion.cpp

index 04c5caf138a3e5fa323f6188cb69e59050a21385,ed073f032709545e317f8ef29c96c54591fd665d..59ef6526d3a0c22e063c4faa3e17175cd12dd28b
@@@ -44,7 -44,6 +44,7 @@@
  #include "DNA_scene_types.h"
  #include "DNA_meshdata_types.h"
  
 +#include "BLI_utildefines.h"
  #include "BLI_blenlib.h"
  #include "BLI_math.h"
  #include "BLI_edgehash.h"
@@@ -1488,8 -1487,8 +1488,8 @@@ static CollPair* cloth_collision ( Modi
                
                sdis = clmd->coll_parms->distance_repel + epsilon2 + FLT_EPSILON;
                
-               /*apply a repulsion force, to help the solver along.
-           this is kindof crude, it only tests one vert of the triangle*/
+               /* apply a repulsion force, to help the solver along.
+                * this is kindof crude, it only tests one vert of the triangle */
                if (isect_ray_plane_v3(cloth->verts[collpair->ap1].tx, n2, collmd->current_xnew[collpair->bp1].co, 
                        collmd->current_xnew[collpair->bp2].co,
                        collmd->current_xnew[collpair->bp3].co, &l, 0))
index 2e484d5fd35efc15d571ac253665d6141ad64fa9,8f025880a86ab8febb308cad48ae124c4e591197..ab12717e891e9e7ef8a56bef47def79fa3d84b7c
@@@ -1968,7 -1968,7 +1968,7 @@@ void resolve_tri_uv(float uv[2], const 
  void resolve_quad_uv(float uv[2], const float st[2], const float st0[2], const float st1[2], const float st2[2], const float st3[2])
  {
        const double signed_area= (st0[0]*st1[1] - st0[1]*st1[0]) + (st1[0]*st2[1] - st1[1]*st2[0]) +
-                               (st2[0]*st3[1] - st2[1]*st3[0]) + (st3[0]*st0[1] - st3[1]*st0[0]);
+                                 (st2[0]*st3[1] - st2[1]*st3[0]) + (st3[0]*st0[1] - st3[1]*st0[0]);
  
        /* X is 2D cross product (determinant)
           A= (p0-p) X (p0-p3)*/
@@@ -2953,39 -2953,3 +2953,39 @@@ float form_factor_hemi_poly(float p[3]
  
        return contrib;
  }
 +
 +/* evaluate if entire quad is a proper convex quad */
 + int is_quad_convex_v3(const float *v1, const float *v2, const float *v3, const float *v4)
 + {
 +      float nor[3], nor1[3], nor2[3], vec[4][2];
 +      
 +      /* define projection, do both trias apart, quad is undefined! */
 +      normal_tri_v3( nor1,v1, v2, v3);
 +      normal_tri_v3( nor2,v1, v3, v4);
 +      nor[0]= ABS(nor1[0]) + ABS(nor2[0]);
 +      nor[1]= ABS(nor1[1]) + ABS(nor2[1]);
 +      nor[2]= ABS(nor1[2]) + ABS(nor2[2]);
 +
 +      if(nor[2] >= nor[0] && nor[2] >= nor[1]) {
 +              vec[0][0]= v1[0]; vec[0][1]= v1[1];
 +              vec[1][0]= v2[0]; vec[1][1]= v2[1];
 +              vec[2][0]= v3[0]; vec[2][1]= v3[1];
 +              vec[3][0]= v4[0]; vec[3][1]= v4[1];
 +      }
 +      else if(nor[1] >= nor[0] && nor[1]>= nor[2]) {
 +              vec[0][0]= v1[0]; vec[0][1]= v1[2];
 +              vec[1][0]= v2[0]; vec[1][1]= v2[2];
 +              vec[2][0]= v3[0]; vec[2][1]= v3[2];
 +              vec[3][0]= v4[0]; vec[3][1]= v4[2];
 +      }
 +      else {
 +              vec[0][0]= v1[1]; vec[0][1]= v1[2];
 +              vec[1][0]= v2[1]; vec[1][1]= v2[2];
 +              vec[2][0]= v3[1]; vec[2][1]= v3[2];
 +              vec[3][0]= v4[1]; vec[3][1]= v4[2];
 +      }
 +      
 +      /* linetests, the 2 diagonals have to instersect to be convex */
 +      if( isect_line_line_v2(vec[0], vec[2], vec[1], vec[3]) > 0 ) return 1;
 +      return 0;
 +}
index 67660ef51eaeaf7e0c2e30f6cba4859f35051efd,07c006a7995c8440d89ddb88b423fce2b71cc821..f0df24313046fbb9daef0ebda395230076f6952b
@@@ -159,7 -159,7 +159,7 @@@ typedef struct 
  static void multiresbake_get_normal(const MResolvePixelData *data, float norm[], const int face_num, const int vert_index)
  {
        unsigned int indices[]= {data->mface[face_num].v1, data->mface[face_num].v2,
-                              data->mface[face_num].v3, data->mface[face_num].v4};
+                                data->mface[face_num].v3, data->mface[face_num].v4};
        const int smoothnormal= (data->mface[face_num].flag & ME_SMOOTH);
  
        if(!smoothnormal)  { /* flat */
@@@ -360,16 -360,6 +360,16 @@@ static int multiresbake_test_break(Mult
  static void do_multires_bake(MultiresBakeRender *bkr, Image* ima, MPassKnownData passKnownData,
                               MInitBakeData initBakeData, MApplyBakeData applyBakeData, MFreeBakeData freeBakeData)
  {
 +#if 1 // BMESH_TODO
 +      (void)bkr;
 +      (void)ima;
 +      (void)passKnownData;
 +      (void)initBakeData;
 +      (void)applyBakeData;
 +      (void)freeBakeData;
 +
 +      printf("BMESH_TODO" AT "\n");
 +#else
        DerivedMesh *dm= bkr->lores_dm;
        ImBuf *ibuf= BKE_image_get_ibuf(ima, NULL);
        const int lvl= bkr->lvl;
                if(freeBakeData)
                        freeBakeData(data.bake_data);
        }
 +#endif // BMESH_TODO
  }
  
  static void interp_bilinear_quad_data(float data[4][3], float u, float v, float res[3])
@@@ -515,16 -504,6 +515,16 @@@ static void interp_bilinear_grid(DMGrid
  
  static void get_ccgdm_data(DerivedMesh *lodm, DerivedMesh *hidm,  const int lvl, const int face_index, const float u, const float v, float co[3], float n[3])
  {
 +#if 1 // BMESH_TODO
 +      (void)lodm;
 +      (void)hidm;
 +      (void)lvl;
 +      (void)face_index;
 +      (void)u;
 +      (void)v;
 +      (void)co;
 +      (void)n;
 +#else
        MFace mface;
        DMGridData **grid_data;
        float crn_x, crn_y;
  
        if(co != NULL)
                interp_bilinear_grid(grid_data[g_index + S], grid_size, crn_x, crn_y, 1, co);
 +#endif
  }
  
  /* mode = 0: interpolate normals,
@@@ -697,16 -675,6 +697,16 @@@ static void apply_heights_callback(Deri
                                     const int face_index, const int lvl, const float st[2],
                                     float UNUSED(tangmat[3][3]), const int x, const int y)
  {
 +#if 1 // BMESH_TODO
 +      (void)lores_dm;
 +      (void)hires_dm;
 +      (void)bake_data;
 +      (void)face_index;
 +      (void)lvl;
 +      (void)st;
 +      (void)x;
 +      (void)y;
 +#else
        MTFace *mtface= CustomData_get_layer(&lores_dm->faceData, CD_MTFACE);
        MFace mface;
        Image *ima= mtface[face_index].tpage;
                char *rrgb= (char*)ibuf->rect + pixel*4;
                rrgb[3]= 255;
        }
 +#endif // BMESH_TODO
  }
  
  /* MultiresBake callback for normals' baking
@@@ -778,16 -745,6 +778,16 @@@ static void apply_tangmat_callback(Deri
                                     const int face_index, const int lvl, const float st[2],
                                     float tangmat[3][3], const int x, const int y)
  {
 +#if 1 // BMESH_TODO
 +      (void)lores_dm;
 +      (void)hires_dm;
 +      (void)face_index;
 +      (void)lvl;
 +      (void)st;
 +      (void)tangmat;
 +      (void)y;
 +      (void)x;
 +#else
        MTFace *mtface= CustomData_get_layer(&lores_dm->faceData, CD_MTFACE);
        MFace mface;
        Image *ima= mtface[face_index].tpage;
                rrgb[2]= FTOCHAR(vec[2]);
                rrgb[3]= 255;
        }
 +#endif
  }
  
  static void count_images(MultiresBakeRender *bkr)
@@@ -1019,7 -975,7 +1019,7 @@@ static DerivedMesh *multiresbake_create
  
        if(*lvl==0) {
                DerivedMesh *tmp_dm= CDDM_from_mesh(me, ob);
 -              dm= CDDM_copy(tmp_dm);
 +              dm= CDDM_copy(tmp_dm, 0);
                tmp_dm->release(tmp_dm);
        } else {
                MultiresModifierData tmp_mmd= *mmd;
index 13cc4b4663c9f89f206f1db4bed188d66960af20,44ae6837aa2ab7c8f3cd9f4b75e986a5c6f916e8..cd99546d3f76a4e69d8387ac079f2bd7b9d50996
@@@ -625,8 -625,8 +625,8 @@@ void ED_view3d_win_to_3d(ARegion *ar, c
                }
        }
        else {
-         const float dx= (2.0f * mval[0] / (float)ar->winx) - 1.0f;
-         const float dy= (2.0f * mval[1] / (float)ar->winy) - 1.0f;
+               const float dx= (2.0f * mval[0] / (float)ar->winx) - 1.0f;
+               const float dy= (2.0f * mval[1] / (float)ar->winy) - 1.0f;
                line_sta[0]= (rv3d->persinv[0][0] * dx) + (rv3d->persinv[1][0] * dy) + rv3d->viewinv[3][0];
                line_sta[1]= (rv3d->persinv[0][1] * dx) + (rv3d->persinv[1][1] * dy) + rv3d->viewinv[3][1];
                line_sta[2]= (rv3d->persinv[0][2] * dx) + (rv3d->persinv[1][2] * dy) + rv3d->viewinv[3][2];
@@@ -698,6 -698,7 +698,6 @@@ void ED_view3d_ob_project_mat_get(Regio
        mul_m4_m4m4(pmat, vmat, rv3d->winmat);
  }
  
 -#if 0
  /* Uses window coordinates (x,y) and depth component z to find a point in
     modelspace */
  void view3d_unproject(bglMats *mats, float out[3], const short x, const short y, const float z)
        out[1] = uy;
        out[2] = uz;
  }
 -#endif
  
 -/* use above call to get projecting mat */
 +/* use view3d_get_object_project_mat to get projecting mat */
  void ED_view3d_project_float(ARegion *ar, const float vec[3], float adr[2], float mat[4][4])
  {
        float vec4[4];
        
 +      VECCOPY(vec4, vec);
        adr[0]= IS_CLIPPED;
        copy_v3_v3(vec4, vec);
        vec4[3]= 1.0;
        }
  }
  
 +/* use view3d_get_object_project_mat to get projecting mat */
 +void ED_view3d_project_float_v3(ARegion *ar, float *vec, float *adr, float mat[4][4])
 +{
 +      float vec4[4];
 +      
 +      VECCOPY(vec4, vec);
 +      adr[0]= IS_CLIPPED;
 +      vec4[3]= 1.0;
 +      
 +      mul_m4_v4(mat, vec4);
 +      
 +      if( vec4[3]>FLT_EPSILON ) {
 +              adr[0] = (float)(ar->winx/2.0f)+(ar->winx/2.0f)*vec4[0]/vec4[3];        
 +              adr[1] = (float)(ar->winy/2.0f)+(ar->winy/2.0f)*vec4[1]/vec4[3];
 +              adr[2] = vec4[2]/vec4[3];
 +      } else {
 +              adr[0] = adr[1] = adr[2] = 0.0f;
 +      }
 +}
 +
  int ED_view3d_boundbox_clip(RegionView3D *rv3d, float obmat[][4], BoundBox *bb)
  {
        /* return 1: draw */
@@@ -1810,7 -1791,7 +1810,7 @@@ static int game_engine_exec(bContext *C
  
        if(rv3d->persp==RV3D_CAMOB && startscene->gm.framing.type == SCE_GAMEFRAMING_BARS && startscene->gm.stereoflag != STEREO_DOME) { /* Letterbox */
                rctf cam_framef;
 -              ED_view3d_calc_camera_border(startscene, ar, CTX_wm_view3d(C), rv3d, &cam_framef, FALSE);
 +              ED_view3d_calc_camera_border(startscene, ar, rv3d, CTX_wm_view3d(C), &cam_framef, FALSE);
                cam_frame.xmin = cam_framef.xmin + ar->winrct.xmin;
                cam_frame.xmax = cam_framef.xmax + ar->winrct.xmin;
                cam_frame.ymin = cam_framef.ymin + ar->winrct.ymin;
index b8e53c87fa9b4e104af9e49a67cc45f8a668b712,fcfc07e631e435f26e36d9839a00f759c001a8a5..cedd05cc32bb27ad4447e7f643d5612151ba6812
@@@ -738,16 -738,16 +738,16 @@@ RAS_MeshObject* BL_ConvertMesh(Mesh* me
        MVert *mvert = dm->getVertArray(dm);
        int totvert = dm->getNumVerts(dm);
  
 -      MFace *mface = dm->getFaceArray(dm);
 -      MTFace *tface = static_cast<MTFace*>(dm->getFaceDataArray(dm, CD_MTFACE));
 -      MCol *mcol = static_cast<MCol*>(dm->getFaceDataArray(dm, CD_MCOL));
 +      MFace *mface = dm->getTessFaceArray(dm);
 +      MTFace *tface = static_cast<MTFace*>(dm->getTessFaceDataArray(dm, CD_MTFACE));
 +      MCol *mcol = static_cast<MCol*>(dm->getTessFaceDataArray(dm, CD_MCOL));
        float (*tangent)[4] = NULL;
 -      int totface = dm->getNumFaces(dm);
 +      int totface = dm->getNumTessFaces(dm);
        const char *tfaceName = "";
  
        if(tface) {
                DM_add_tangent_layer(dm);
 -              tangent = (float(*)[4])dm->getFaceDataArray(dm, CD_TANGENT);
 +              tangent = (float(*)[4])dm->getTessFaceDataArray(dm, CD_TANGENT);
        }
  
        meshobj = new RAS_MeshObject(mesh);
@@@ -1911,11 -1911,11 +1911,11 @@@ void RBJconstraints(Object *ob)//not us
  
  KX_IPhysicsController* getPhId(CListValue* sumolist,STR_String busc){//not used
  
-     for (int j=0;j<sumolist->GetCount();j++)
+       for (int j=0;j<sumolist->GetCount();j++)
        {
-           KX_GameObject* gameobje = (KX_GameObject*) sumolist->GetValue(j);
-           if (gameobje->GetName()==busc)
-             return gameobje->GetPhysicsController();
+               KX_GameObject* gameobje = (KX_GameObject*) sumolist->GetValue(j);
+               if (gameobje->GetName()==busc)
+                       return gameobje->GetPhysicsController();
        }
  
        return 0;
  
  KX_GameObject* getGameOb(STR_String busc,CListValue* sumolist){
  
-     for (int j=0;j<sumolist->GetCount();j++)
+       for (int j=0;j<sumolist->GetCount();j++)
        {
-           KX_GameObject* gameobje = (KX_GameObject*) sumolist->GetValue(j);
-           if (gameobje->GetName()==busc)
-             return gameobje;
+               KX_GameObject* gameobje = (KX_GameObject*) sumolist->GetValue(j);
+               if (gameobje->GetName()==busc)
+                       return gameobje;
        }
        
        return 0;
@@@ -2629,7 -2629,7 +2629,7 @@@ void BL_ConvertBlenderObjects(struct Ma
                                                {
                                                        PHY_IPhysicsController* physctrl = (PHY_IPhysicsController*) gameobj->GetPhysicsController()->GetUserData();
                                                        //we need to pass a full constraint frame, not just axis
-                                   
                                                        //localConstraintFrameBasis
                                                        MT_Matrix3x3 localCFrame(MT_Vector3(dat->axX,dat->axY,dat->axZ));
                                                        MT_Vector3 axis0 = localCFrame.getColumn(0);