merge with/from trunk at r35190
[blender.git] / source / blender / modifiers / intern / MOD_solidify.c
index 14a07b62a91e829ad28e66e65b1d9fe812ce49b9..50317e363ad4c472d3da62d7ea05ceed1cbafb13 100644 (file)
@@ -69,7 +69,7 @@ static void dm_calc_normal(DerivedMesh *dm, float (*temp_nors)[3])
        numVerts = dm->getNumVerts(dm);
        numEdges = dm->getNumEdges(dm);
        numFaces = dm->getNumFaces(dm);
-       mface = dm->getFaceArray(dm);
+       mface = dm->getTessFaceArray(dm);
        mvert = dm->getVertArray(dm);
 
        /* we don't want to overwrite any referenced layers */
@@ -203,7 +203,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
                                                int UNUSED(isFinalCalc))
 {
        int i;
-       DerivedMesh *result;
+       DerivedMesh *result, *copy;
        const SolidifyModifierData *smd = (SolidifyModifierData*) md;
 
        MFace *mf, *mface, *orig_mface;
@@ -237,7 +237,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
        if (defgrp_index >= 0)
                dvert = dm->getVertDataArray(dm, CD_MDEFORMVERT);
 
-       orig_mface = dm->getFaceArray(dm);
+       orig_mface = dm->getTessFaceArray(dm);
        orig_medge = dm->getEdgeArray(dm);
        orig_mvert = dm->getVertArray(dm);
 
@@ -327,9 +327,9 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
                dm_calc_normal(dm, vert_nors);
        }
 
-       result = CDDM_from_template(dm, numVerts * 2, (numEdges * 2) + newEdges, (numFaces * 2) + newFaces);    
+       result = CDDM_from_template(dm, numVerts * 2, (numEdges * 2) + newEdges, (numFaces * 2) + newFaces, 0, 0);
 
-       mface = result->getFaceArray(result);
+       mface = result->getTessFaceArray(result);
        medge = result->getEdgeArray(result);
        mvert = result->getVertArray(result);
 
@@ -357,7 +357,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
                        {
                                is_quad = mf->v4;
                                SWAP(int, mf->v1, mf->v3);
-                               DM_swap_face_data(result, i+numFaces, corner_indices);
+                               DM_swap_tessface_data(result, i+numFaces, corner_indices);
                                test_index_face(mf, &result->faceData, numFaces, is_quad ? 4:3);
                        }
                }
@@ -565,7 +565,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
                        DM_copy_face_data(dm, result, fidx, (numFaces * 2) + i, 1);
 
                        if(flip) {
-                               DM_swap_face_data(result, (numFaces * 2) + i, edge_indices[edge_order[eidx]]);
+                               DM_swap_tessface_data(result, (numFaces * 2) + i, edge_indices[edge_order[eidx]]);
 
                                mf->v1= ed->v1;
                                mf->v2= ed->v2;
@@ -573,7 +573,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
                                mf->v4= ed->v1 + numVerts;
                        }
                        else {
-                               DM_swap_face_data(result, (numFaces * 2) + i, edge_indices[edge_order[eidx]]);
+                               DM_swap_tessface_data(result, (numFaces * 2) + i, edge_indices[edge_order[eidx]]);
 
                                mf->v1= ed->v2;
                                mf->v2= ed->v1;
@@ -628,7 +628,11 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
                MEM_freeN(edge_order);
        }
 
-       return result;
+       copy = CDDM_copy(result, 1); /*builds ngon faces from tess (mface) faces*/
+       result->needsFree = 1;
+       result->release(result);
+
+       return copy;
 }
 
 #undef SOLIDIFY_SIDE_NORMALS