rendered paste bodyDerivedMesh *clothModifier_do(ClothModifierData *clmd,
Object *ob, DerivedMesh *dm,
int useRenderParams, int isFinalCalc)
{
int numverts = dm->getNumVerts(dm);
int numedges = dm->getNumEdges(dm);
int numfaces = dm->getNumFaces(dm);
MEdge *medge = CDDM_get_edges(dm);
MFace *mface = CDDM_get_faces(dm);
int numtris = 0;
int numquads = 0;
int i =0;
DerivedMesh *result = NULL;
int tempquads = 0;
int countquads=0;
// edges = BLI_edgehash_new();
// create new triangle mesh
for(i = 0; i < numfaces; i++)
{
if(mface[i].v4)
numquads++;
else
numtris++;
}
// error handling
if((numquads == numtris)&& numtris==0)
return dm;
result = CDDM_from_template(dm, numverts, numedges + numquads, (numquads * 2) + numtris);
if(!result)
return NULL;
for(i = 0; i < numverts; i++) {
MVert inMV;
MVert *mv = CDDM_get_vert(result, i);
dm->getVert(dm, i, &inMV);
DM_copy_vert_data(dm, result, i, i, 1);
*mv = inMV;
}
for(i = 0; i < numedges; i++) {
MEdge inMED;
MEdge *med = CDDM_get_edge(result, i);
dm->getEdge(dm, i, &inMED);
DM_copy_edge_data(dm, result, i, i, 1);
*med = inMED;
}
for(i = 0; i < numquads; i++) {
if(mface[i].v4) {
MEdge inMED;
MEdge *med = CDDM_get_edge(result, i+numedges);
inMED.v1 = mface[i].v1;
inMED.v2 = mface[i].v3;
*med = inMED;
}
}
for(i = 0; i < numtris + numquads; i++) {
MFace inMF;
int index4, index1;
MFace *mf = CDDM_get_face(result, i);
dm->getFace(dm, i, &inMF);
// DM_copy_face_data(dm, result, i, i, 1);
index4 = inMF.v4;
inMF.v4 = 0;
*mf = inMF;
test_index_face(mf, &result->faceData, numtris + numquads + countquads, 3);
if(mface[i].v4)
{
MFace *mf = CDDM_get_face(result, numtris + numquads + countquads);
// DM_copy_face_data(dm, result, i, numtris + numquads + countquads, 1);
index1 = inMF.v1;
inMF.v1 = index4;
inMF.v2 = index1;
inMF.v4 = 0;
*mf = inMF;
test_index_face(mf, &result->faceData, numtris + numquads + countquads, 3);
countquads++;
}
}
CDDM_lower_num_verts(result, numfaces);
CDDM_lower_num_edges(result, numedges+numquads);
CDDM_lower_num_faces(result, (numquads * 2) + numtris);
return result;
}