All pastes #501858 Raw Edit

Mine

public text v1 · immutable
·published 2007-05-22 07:42 UTC
rendered paste body
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; 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;

}