bool Various_Tools_Component::subdivide_catmull(PolyhedronPtr pMesh)
{
	Polyhedron_subdivision<Polyhedron>::CatmullClark_subdivision(*pMesh,1);
	pMesh->compute_normals();
	pMesh->compute_type();

	return true;
}
bool Various_Tools_Component::subdivide_loop(PolyhedronPtr pMesh)
{
	Polyhedron_subdivision<Polyhedron>::Loop_subdivision(*pMesh,1);
	pMesh->compute_normals();
	pMesh->compute_type();

	return true;
}
bool Various_Tools_Component::subdivide_sqrt3Twice(PolyhedronPtr pMesh)
{
	CSubdivider_sqrt3<Polyhedron,Enriched_kernel> subdivider;
	subdivider.subdivide(*pMesh,2); // two iterations
	pMesh->compute_normals();
	pMesh->compute_type();

	return true;
}
void Implicit_Surface_Meshing_Component::BuildPolyhedron(const C2t3& c2t3,PolyhedronPtr pMesh)
{
	Polyhedron_C2t3_Importer <Polyhedron::HalfedgeDS> builder (c2t3);
	pMesh->delegate(builder);//build the polyhedron
	//compute these properties in order to display the polyhedron in Mepp
		pMesh->compute_bounding_box();

		pMesh->compute_normals();
		pMesh->compute_type();

		(void)pMesh->calc_nb_components();
		(void)pMesh->calc_nb_boundaries();
}
void Various_Processing_Component::Subdivision (PolyhedronPtr pMesh, Subdivision_type subdivisionType, int depth)
{
	if (subdivisionType==CATMULLCLARK)
		SubdivisionCatmullClark(pMesh, depth);
	else if (subdivisionType==LOOP)
		SubdivisionLoop(pMesh, depth);
	else if (subdivisionType==DOOSABIN)
		SubdivisionDooSabin(pMesh, depth);
	else if (subdivisionType==SQRT3)
		SubdivisionSqrt3(pMesh, depth);
	else if (subdivisionType==MIDPOINT)
		SubdivisionMidpoint(pMesh, depth);

	// after connectivity modification of the mesh, we need to update the related internal properties such as "m_pure_quad" or "m_pure_triangle"
	// other updates can be necessary depending on application
	pMesh->compute_type();
	pMesh->compute_normals();
}