Revision: 41312
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=41312
Author:   ender79
Date:     2011-10-27 12:17:02 +0000 (Thu, 27 Oct 2011)
Log Message:
-----------
Fix "[#29036] Crash on solidify" and a few misc subsurf and derived mesh bugs 
that were blocking correct functionality of "apply modifier to editcage" when 
you have a subsurf + solidify modifier on the stack

Modified Paths:
--------------
    branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c
    branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c
    branches/bmesh/blender/source/blender/blenkernel/intern/customdata.c
    branches/bmesh/blender/source/blender/blenkernel/intern/subsurf_ccg.c
    branches/bmesh/blender/source/blender/modifiers/intern/MOD_solidify.c

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c       
2011-10-27 09:42:03 UTC (rev 41311)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c       
2011-10-27 12:17:02 UTC (rev 41312)
@@ -330,9 +330,12 @@
 
 void DM_DupPolys(DerivedMesh *source, DerivedMesh *target)
 {
-       CustomData_copy(&source->loopData, &target->loopData, 
CD_MASK_DERIVEDMESH, CD_CALLOC, source->numLoopData);
-       CustomData_copy(&source->polyData, &target->polyData, 
CD_MASK_DERIVEDMESH, CD_CALLOC, source->numPolyData);
+       CustomData_free(&target->loopData, source->numLoopData);
+       CustomData_free(&target->polyData, source->numPolyData);
 
+       CustomData_copy(&source->loopData, &target->loopData, 
CD_MASK_DERIVEDMESH, CD_DUPLICATE, source->numLoopData);
+       CustomData_copy(&source->polyData, &target->polyData, 
CD_MASK_DERIVEDMESH, CD_DUPLICATE, source->numPolyData);
+
        target->numLoopData = source->numLoopData;
        target->numPolyData = source->numPolyData;
 
@@ -1499,7 +1502,7 @@
        ModifierData *md;
        float (*deformedVerts)[3] = NULL;
        CustomDataMask mask;
-       DerivedMesh *dm, *orcodm = NULL;
+       DerivedMesh *dm = NULL, *orcodm = NULL;
        int i, numVerts = 0, cageIndex = modifiers_getCageIndex(scene, ob, 
NULL, 1);
        LinkNode *datamasks, *curr;
        int required_mode = eModifierMode_Realtime | eModifierMode_Editmode;
@@ -1510,7 +1513,6 @@
                *cage_r = getEditDerivedBMesh(em, ob, NULL);
        }
 
-       dm = NULL;
        md = modifiers_getVirtualModifierList(ob);
 
        datamasks = modifiers_calcDataMasks(scene, ob, md, dataMask, 
required_mode);

Modified: 
branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c     
2011-10-27 09:42:03 UTC (rev 41311)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c     
2011-10-27 12:17:02 UTC (rev 41312)
@@ -1910,7 +1910,7 @@
        flag = use_mdisps ? CD_MASK_DERIVEDMESH|CD_MASK_MDISPS : 
CD_MASK_DERIVEDMESH;
        
        /*don't process shapekeys, we only feed them through the modifier stack 
as needed,
-      e.g. for applying modifiers or the like*/
+         e.g. for applying modifiers or the like*/
        flag &= ~CD_SHAPEKEY;
        CustomData_merge(&em->bm->vdata, &dm->vertData, flag,
                         CD_CALLOC, dm->numVertData);
@@ -1939,9 +1939,7 @@
 
                BM_SetIndex(eve, i);
 
-               mv->no[0] = eve->no[0] * 32767.0;
-               mv->no[1] = eve->no[1] * 32767.0;
-               mv->no[2] = eve->no[2] * 32767.0;
+               normal_float_to_short_v3(mv->no, eve->no);
 
                mv->flag = BMFlags_To_MEFlags(eve);
 
@@ -2637,6 +2635,7 @@
                        ml++, l++;
                }
 
+               *index2 = *index1;
        }
 
        BLI_edgehash_free(eh, NULL);

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/customdata.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/customdata.c        
2011-10-27 09:42:03 UTC (rev 41311)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/customdata.c        
2011-10-27 12:17:02 UTC (rev 41312)
@@ -1746,7 +1746,7 @@
 }
 
 void CustomData_set_only_copy(const struct CustomData *data,
-                                                         CustomDataMask mask)
+                              CustomDataMask mask)
 {
        int i;
 

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/subsurf_ccg.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/subsurf_ccg.c       
2011-10-27 09:42:03 UTC (rev 41311)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/subsurf_ccg.c       
2011-10-27 12:17:02 UTC (rev 41312)
@@ -2346,7 +2346,7 @@
                int a, i, index, totface;
                int gridFaces = ccgSubSurf_getGridSize(ss) - 1;
 
-               DM_add_face_layer(dm, CD_ORIGINDEX, CD_CALLOC, NULL);
+               DM_add_tessface_layer(dm, CD_ORIGINDEX, CD_CALLOC, NULL);
                origindex= DM_get_tessface_data_layer(dm, CD_ORIGINDEX);
 
                totface= ccgSubSurf_getNumFaces(ss);
@@ -2673,9 +2673,6 @@
        ccgdm->dm.getVertData = DM_get_vert_data;
        ccgdm->dm.getEdgeData = DM_get_edge_data;
        ccgdm->dm.getTessFaceData = DM_get_face_data;
-       ccgdm->dm.getVertDataArray = DM_get_vert_data_layer;
-       ccgdm->dm.getEdgeDataArray = DM_get_edge_data_layer;
-       ccgdm->dm.getTessFaceDataArray = DM_get_tessface_data_layer;
 
        ccgdm->dm.getVertCos = cgdm_getVertCos;
        ccgdm->dm.foreachMappedVert = cgdm_foreachMappedVert;

Modified: branches/bmesh/blender/source/blender/modifiers/intern/MOD_solidify.c
===================================================================
--- branches/bmesh/blender/source/blender/modifiers/intern/MOD_solidify.c       
2011-10-27 09:42:03 UTC (rev 41311)
+++ branches/bmesh/blender/source/blender/modifiers/intern/MOD_solidify.c       
2011-10-27 12:17:02 UTC (rev 41312)
@@ -566,10 +566,10 @@
                }
 
                /* faces */
-               edge_origIndex = CustomData_get_layer(&result->edgeData, 
CD_ORIGINDEX);
+               edge_origIndex = origindex;
+               origindex = DM_get_face_data_layer(result, CD_ORIGINDEX);
                
-               mp= mpoly + (numFaces * 2);
-               origindex= result->getTessFaceDataArray(result, CD_ORIGINDEX);
+               mp = mpoly + (numFaces * 2);
                ml = mloop + (numLoops * 2);
                j = 0;
                for(i=0; i<newFaces; i++, mp++) {
@@ -678,7 +678,10 @@
                        add_v3_v3(edge_vert_nos[ed->v1], nor);
                        add_v3_v3(edge_vert_nos[ed->v2], nor);
 #endif
-                       origindex[numFaces * 2 + i]= ORIGINDEX_NONE;
+
+                       if (origindex) {
+                               origindex[numFaces * 2 + i]= ORIGINDEX_NONE;
+                       }
                }
                
 #ifdef SOLIDIFY_SIDE_NORMALS

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

Reply via email to