Revision: 32727
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=32727
Author:   joeedh
Date:     2010-10-27 04:22:55 +0200 (Wed, 27 Oct 2010)

Log Message:
-----------
ad-hoc test sys that can handle paint stuff.  temporary.

Modified Paths:
--------------
    branches/bmesh/blender/source/blender/blenkernel/BKE_context.h
    branches/bmesh/blender/source/blender/blenkernel/BKE_mesh.h
    branches/bmesh/blender/source/blender/blenkernel/intern/context.c
    branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c
    branches/bmesh/blender/source/blender/editors/space_view3d/view3d_intern.h
    branches/bmesh/blender/source/blender/editors/space_view3d/view3d_ops.c
    branches/bmesh/blender/source/blender/editors/space_view3d/view3d_toolbar.c
    branches/bmesh/blender/source/blender/makesdna/DNA_windowmanager_types.h
    branches/bmesh/blender/source/blender/makesrna/intern/rna_mesh.c
    branches/bmesh/blender/source/blender/makesrna/intern/rna_mesh_api.c
    branches/bmesh/blender/source/blender/windowmanager/WM_types.h
    branches/bmesh/blender/source/blender/windowmanager/intern/wm_event_system.c
    branches/bmesh/blender/source/blender/windowmanager/intern/wm_window.c
    branches/bmesh/blender/source/creator/creator.c

Added Paths:
-----------
    branches/bmesh/blender/test/
    branches/bmesh/blender/test/eventlog.txt
    branches/bmesh/blender/test/test_default.blend
    branches/bmesh/blender/test/test_default.blend1
    branches/bmesh/blender/test/test_vcol.blend
    branches/bmesh/blender/test/test_vcol.blend1
    branches/bmesh/blender/test/test_vcol.events
    branches/bmesh/blender/test/test_vcol_final.blend
    branches/bmesh/blender/test/tester.py

Modified: branches/bmesh/blender/source/blender/blenkernel/BKE_context.h
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/BKE_context.h      
2010-10-27 02:18:24 UTC (rev 32726)
+++ branches/bmesh/blender/source/blender/blenkernel/BKE_context.h      
2010-10-27 02:22:55 UTC (rev 32727)
@@ -261,6 +261,9 @@
 int CTX_data_selected_pose_bones(const bContext *C, ListBase *list);
 int CTX_data_visible_pose_bones(const bContext *C, ListBase *list);
 
+//stupid compiler flag isn't working
+//remember to undef this later
+#define EVENT_RECORDER
 #ifdef EVENT_RECORDER
 #include <stdio.h>
 
@@ -268,6 +271,8 @@
 FILE *CTX_rec_file(bContext *C);
 int CTX_set_events_path(bContext *C, char *path);
 int CTX_play_events(bContext *C, char **playpath);
+int CTX_rec_events_set(bContext *C, int state);
+double CTX_rec_lasttime(bContext *C, double newtime);
 
 #endif
 

Modified: branches/bmesh/blender/source/blender/blenkernel/BKE_mesh.h
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/BKE_mesh.h 2010-10-27 
02:18:24 UTC (rev 32726)
+++ branches/bmesh/blender/source/blender/blenkernel/BKE_mesh.h 2010-10-27 
02:22:55 UTC (rev 32727)
@@ -112,6 +112,12 @@
 void mesh_delete_material_index(struct Mesh *me, int index);
 void mesh_set_smooth_flag(struct Object *meshOb, int enableSmooth);
 
+/*used for unit testing; compares two meshes, checking only
+  differences we care about.  should be usable with leaf's
+  testing framework I get RNA work done, will use hackish
+  testing code for now.*/
+char *mesh_cmp(struct Mesh *me1, struct Mesh *me2, float thresh);
+
 struct BoundBox *mesh_get_bb(struct Object *ob);
 void mesh_get_texspace(struct Mesh *me, float *loc_r, float *rot_r, float 
*size_r);
 

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/context.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/context.c   
2010-10-27 02:18:24 UTC (rev 32726)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/context.c   
2010-10-27 02:22:55 UTC (rev 32727)
@@ -41,6 +41,7 @@
 
 #include "BLI_listbase.h"
 #include "BLI_string.h"
+#include "PIL_time.h"
 
 #include "BKE_context.h"
 #include "BKE_main.h"
@@ -84,6 +85,7 @@
 #ifdef EVENT_RECORDER
        int evtrec, evtplay;
        char evtplaypath[300];
+       double evtlasttime;
 #endif
 };
 
@@ -111,6 +113,13 @@
        return C->evtrec;
 }
 
+int CTX_rec_events_set(bContext *C, int state)
+{
+       C->evtrec = state;
+       
+       return 1;
+}
+
 FILE *CTX_rec_file(bContext *C)
 {
        static FILE *f = NULL;
@@ -119,15 +128,34 @@
        return f;
 }
 
+double CTX_rec_lasttime(bContext *C, double newtime)
+{
+       double ret;
+       
+       if (C->evtlasttime == 0.0) {
+               ret = newtime;
+       } else ret = C->evtlasttime;
+       
+       C->evtlasttime = newtime;
+       
+       return ret;
+}
+
 int CTX_set_events_path(bContext *C, char *path)
 {
        if (!path)
                C->evtplaypath[0] = 0;
+       else
+               strcpy(C->evtplaypath, path);
+       
+       return 1;
 }
 
+extern int erec_playing;
 int CTX_play_events(bContext *C, char **playpath)
 {
-       *playpath = C->evtplaypath[0] ? C->evtplaypath : NULL;
+       if (playpath)
+               *playpath = C->evtplaypath[0] ? C->evtplaypath : NULL;
        
        return C->evtplaypath[0];
 }

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c      
2010-10-27 02:18:24 UTC (rev 32726)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c      
2010-10-27 02:22:55 UTC (rev 32727)
@@ -42,9 +42,11 @@
 #include "DNA_key_types.h"
 #include "DNA_meshdata_types.h"
 #include "DNA_ipo_types.h"
+#include "DNA_customdata_types.h"
 
 #include "BKE_animsys.h"
 #include "BKE_main.h"
+#include "BKE_customdata.h"
 #include "BKE_DerivedMesh.h"
 #include "BKE_global.h"
 #include "BKE_mesh.h"
@@ -58,6 +60,7 @@
 #include "BKE_object.h"
 #include "BKE_utildefines.h"
 #include "BKE_tessmesh.h"
+#include "BLI_edgehash.h"
 
 #include "BLI_blenlib.h"
 #include "BLI_editVert.h"
@@ -68,6 +71,230 @@
 
 #include "bmesh.h"
 
+enum {
+       MESHCMP_DVERT_WEIGHTMISMATCH = 1,
+       MESHCMP_DVERT_GROUPMISMATCH,
+       MESHCMP_DVERT_TOTGROUPMISMATCH,
+       MESHCMP_LOOPCOLMISMATCH,
+       MESHCMP_LOOPUVMISMATCH,
+       MESHCMP_LOOPMISMATCH,
+       MESHCMP_POLYVERTMISMATCH,
+       MESHCMP_POLYMISMATCH,
+       MESHCMP_EDGEUNKNOWN,
+       MESHCMP_VERTCOMISMATCH,
+       MESHCMP_CDLAYERS_MISMATCH,
+};
+
+static char *cmpcode_to_str(int code)
+{
+       switch (code) {
+               case MESHCMP_DVERT_WEIGHTMISMATCH:
+                       return "Vertex Weight Mismatch";
+               case MESHCMP_DVERT_GROUPMISMATCH:
+                                       return "Vertex Group Mismatch";
+               case MESHCMP_DVERT_TOTGROUPMISMATCH:
+                                       return "Vertex Doesn't Belong To Same 
Number Of Groups";
+               case MESHCMP_LOOPCOLMISMATCH:
+                                       return "Vertex Color Mismatch";
+               case MESHCMP_LOOPUVMISMATCH:
+                                       return "UV Mismatch";
+               case MESHCMP_LOOPMISMATCH:
+                                       return "Loop Mismatch";
+               case MESHCMP_POLYVERTMISMATCH:
+                                       return "Loop Vert Mismatch In Poly 
Test";
+               case MESHCMP_POLYMISMATCH:
+                                       return "Loop Vert Mismatch";
+               case MESHCMP_EDGEUNKNOWN:
+                                       return "Edge Mismatch";
+               case MESHCMP_VERTCOMISMATCH:
+                                       return "Vertex Coordinate Mismatch";
+               case MESHCMP_CDLAYERS_MISMATCH:
+                                       "CustomData Layer Count Mismatch";
+               default:
+                               return "Mesh Comparison Code Unknown";
+               }
+}
+
+/*thresh is threshold for comparing vertices, uvs, vertex colors,
+  weights, etc.*/
+int customdata_compare(CustomData *c1, CustomData *c2, Mesh *m1, Mesh *m2, 
float thresh)
+{
+       CustomDataLayer *l1, *l2;
+       int i, i1=0, i2=0, tot, j;
+       
+       for (i=0; i<c1->totlayer; i++) {
+               if (ELEM7(c1->layers[i].type, CD_MVERT, CD_MEDGE, CD_MPOLY, 
+                                 CD_MLOOPUV, CD_MLOOPCOL, CD_MTEXPOLY, 
CD_MDEFORMVERT))                
+                       i1++;
+       }
+       
+       for (i=0; i<c2->totlayer; i++) {
+               if (ELEM7(c2->layers[i].type, CD_MVERT, CD_MEDGE, CD_MPOLY, 
+                                 CD_MLOOPUV, CD_MLOOPCOL, CD_MTEXPOLY, 
CD_MDEFORMVERT))                
+                       i2++;
+       }
+       
+       if (i1 != i2)
+               return MESHCMP_CDLAYERS_MISMATCH;
+       
+       l1 = c1->layers; l2 = c2->layers;
+       tot = i1;
+       i1 = 0; i2 = 0; 
+       for (i=0; i < tot; i++) {
+               while (i1 < c1->totlayer && !ELEM7(l1->type, CD_MVERT, 
CD_MEDGE, CD_MPOLY, 
+                                 CD_MLOOPUV, CD_MLOOPCOL, CD_MTEXPOLY, 
CD_MDEFORMVERT))
+                       i1++, l1++;
+
+               while (i2 < c2->totlayer && !ELEM7(l2->type, CD_MVERT, 
CD_MEDGE, CD_MPOLY, 
+                                 CD_MLOOPUV, CD_MLOOPCOL, CD_MTEXPOLY, 
CD_MDEFORMVERT))
+                       i2++, l2++;
+               
+               if (l1->type == CD_MVERT) {
+                       MVert *v1 = l1->data;
+                       MVert *v2 = l2->data;
+                       int vtot = m1->totvert;
+                       
+                       for (j=0; j<vtot; j++, v1++, v2++) {
+                               if (len_v3v3(v1->co, v2->co) > thresh)
+                                       return MESHCMP_VERTCOMISMATCH;
+                               /*I don't care about normals, let's just do 
coodinates*/
+                       }
+               }
+               
+               /*we're order-agnostic for edges here*/
+               if (l1->type == CD_MEDGE) {
+                       MEdge *e1 = l1->data;
+                       MEdge *e2 = l2->data;
+                       EdgeHash *eh = BLI_edgehash_new();
+                       int etot = m1->totedge;
+               
+                       for (j=0; j<etot; j++, e1++) {
+                               BLI_edgehash_insert(eh, e1->v1, e1->v2, e1);
+                       }
+                       
+                       for (j=0; j<etot; j++, e2++) {
+                               if (!BLI_edgehash_lookup(eh, e2->v1, e2->v2))
+                                       return MESHCMP_EDGEUNKNOWN;
+                       }
+                       BLI_edgehash_free(eh, NULL);
+               }
+               
+               if (l1->type == CD_MPOLY) {
+                       MPoly *p1 = l1->data;
+                       MPoly *p2 = l2->data;
+                       int ptot = m1->totpoly;
+               
+                       for (j=0; j<ptot; j++, p1++, p2++) {
+                               MLoop *lp1, *lp2;
+                               int k;
+                               
+                               if (p1->totloop != p2->totloop)
+                                       return MESHCMP_POLYMISMATCH;
+                               
+                               lp1 = m1->mloop + p1->loopstart;
+                               lp2 = m2->mloop + p2->loopstart;
+                               
+                               for (k=0; k<p1->totloop; k++, lp1++, lp2++) {
+                                       if (lp1->v != lp2->v)
+                                               return MESHCMP_POLYVERTMISMATCH;
+                               }
+                       }
+               }
+               if (l1->type == CD_MLOOP) {
+                       MLoop *lp1 = l1->data;
+                       MLoop *lp2 = l2->data;
+                       int ltot = m1->totloop;
+               
+                       for (j=0; j<ltot; j++, lp1++, lp2++) {
+                               if (lp1->v != lp2->v)
+                                       return MESHCMP_LOOPMISMATCH;
+                       }
+               }
+               if (l1->type == CD_MLOOPUV) {
+                       MLoopUV *lp1 = l1->data;
+                       MLoopUV *lp2 = l2->data;
+                       int ltot = m1->totloop;
+               
+                       for (j=0; j<ltot; j++, lp1++, lp2++) {
+                               if (len_v2v2(lp1->uv, lp2->uv) > thresh)
+                                       return MESHCMP_LOOPUVMISMATCH;
+                       }
+               }
+               
+               if (l1->type == CD_MLOOPCOL) {
+                       MLoopCol *lp1 = l1->data;
+                       MLoopCol *lp2 = l2->data;
+                       int ltot = m1->totloop;
+               
+                       for (j=0; j<ltot; j++, lp1++, lp2++) {
+                               if (ABS(lp1->r - lp2->r) > thresh || 
+                                   ABS(lp1->g - lp2->g) > thresh || 
+                                   ABS(lp1->b - lp2->b) > thresh || 
+                                   ABS(lp1->a - lp2->a) > thresh)
+                               {
+                                       return MESHCMP_LOOPCOLMISMATCH;
+                               }
+                       }
+               }
+
+               if (l1->type == CD_MDEFORMVERT) {
+                       MDeformVert *dv1 = l1->data;
+                       MDeformVert *dv2 = l2->data;
+                       int dvtot = m1->totvert;
+               
+                       for (j=0; j<dvtot; j++, dv1++, dv2++) {
+                               int k;
+                               MDeformWeight *dw1 = dv1->dw, *dw2=dv2->dw;
+                               
+                               if (dv1->totweight != dv2->totweight)
+                                       return MESHCMP_DVERT_TOTGROUPMISMATCH;
+                               
+                               for (k=0; k<dv1->totweight; k++, dw1++, dw2++) {
+                                       if (dw1->def_nr != dw2->def_nr)
+                                               return 
MESHCMP_DVERT_GROUPMISMATCH;
+                                       if (ABS(dw1->weight - dw2->weight) > 
thresh)
+                                               return 
MESHCMP_DVERT_WEIGHTMISMATCH;
+                               }
+                       }
+               }
+       }
+}
+
+/*used for testing.  returns an error string the two meshes don't match*/
+char *mesh_cmp(Mesh *me1, Mesh *me2, float thresh)
+{
+       int c;
+       
+       if (!me1 || !me2)
+               return "Requires two input meshes";
+       
+       if (me1->totvert != me2->totvert) 
+               return "Number of verts don't match";
+       
+       if (me1->totedge != me2->totedge)
+               return "Number of edges don't match";
+       
+       if (me1->totpoly != me2->totpoly)
+               return "Number of faces don't match";
+                               
+       if (me1->totloop !=me2->totloop)
+               return "Number of loops don't match";
+       
+       if ((c = customdata_compare(&me1->vdata, &me2->vdata, me1, me2, 
thresh)))
+               return cmpcode_to_str(c);
+
+       if ((c = customdata_compare(&me1->edata, &me2->edata, me1, me2, 
thresh)))
+               return cmpcode_to_str(c);
+
+       if ((c = customdata_compare(&me1->ldata, &me2->ldata, me1, me2, 
thresh)))
+               return cmpcode_to_str(c);
+
+       if ((c = customdata_compare(&me1->pdata, &me2->pdata, me1, me2, 
thresh)))
+               return cmpcode_to_str(c);
+       
+       return NULL;
+}
+
 static void mesh_ensure_tesselation_customdata(Mesh *me)
 {
        int tottex, totcol;

Modified: 
branches/bmesh/blender/source/blender/editors/space_view3d/view3d_intern.h
===================================================================
--- branches/bmesh/blender/source/blender/editors/space_view3d/view3d_intern.h  
2010-10-27 02:18:24 UTC (rev 32726)

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to