rendered paste bodyDerivedMesh *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; a<numverts; a++)
{
MVert *inMV;
MVert *mv = &mvert2[a];
inMV = &mvert[a];
DM_copy_vert_data(dm, result, a, a, 1);
*mv = *inMV;
}
// do faces
mface2 = CDDM_get_faces(result);
for(a=0, i=0; a<numfaces; a++)
{
MFace *mf = &mface2[i];
MFace *inMF;
inMF = &mface[a];
random = rand()%2;
/*
DM_copy_face_data(dm, result, a, i, 1);
*mf = *inMF;
*/
if(mface[a].v4 && random)
{
mf->v1 = 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;
}