DerivedMesh *CDDM_convert_to_triangle(DerivedMesh *dm) { DerivedMesh *result = NULL; int i; int numverts = dm->getNumVerts(dm); int numedges = dm->getNumEdges(dm); int numfaces = dm->getNumFaces(dm); MVert *mvert = CDDM_get_verts(dm); MEdge *medge = CDDM_get_edges(dm); MFace *mface = CDDM_get_faces(dm); MVert *mvert2; MFace *mface2; unsigned int numtris=0; unsigned int numquads=0; int a = 0; int random =0; srand(time(0)); for(i = 0; i < numfaces; i++) { if(mface[i].v4) numquads++; else numtris++; } result = CDDM_from_template(dm, numverts, 0, numtris + 2*numquads); if(!result) return NULL; // do verts mvert2 = CDDM_get_verts(result); for(a=0; av1 = mface[a].v2; mf->v2 = mface[a].v3; mf->v3 = mface[a].v4; } else { mf->v1 = mface[a].v1; mf->v2 = mface[a].v2; mf->v3 = mface[a].v3; } mf->v4 = 0; test_index_face(mf, NULL, 0, 3); if(mface[a].v4) { MFace *mf2; i++; mf2 = &mface2[i]; /* DM_copy_face_data(dm, result, a, i, 1); *mf2 = *inMF; */ if(random) { mf2->v1 = mface[a].v1; mf2->v2 = mface[a].v2; mf2->v3 = mface[a].v4; } else { mf2->v1 = mface[a].v4; mf2->v2 = mface[a].v1; mf2->v3 = mface[a].v3; } mf2->v4 = 0; test_index_face(mf2, NULL, 0, 3); } i++; } CDDM_calc_edges(result); CDDM_calc_normals(result); return result; }