void operator()( HDS& hds) {
				CGAL::Polyhedron_incremental_builder_3<HDS> B( hds, true);
				//start surface, number of halfedges is unknown (at least to me)
				B.begin_surface( vtkMesh->GetNumberOfVerts(),vtkMesh->GetNumberOfPolys(),0);
				typedef typename HDS::Vertex Vertex;
				typedef typename Vertex::Point Point;
				//add vertices to polyhedron
				for(vtkIdType i = 0; i < vtkMesh->GetNumberOfPoints(); i++)
				{
					double p[3];
					vtkMesh->GetPoint(i,p);
					B.add_vertex(Point(p[0],p[1],p[2]));
				}
				//add faces to polyhedron
				vtkIdType npts, *pts;
				vtkMesh->GetPolys()->InitTraversal();
				while(vtkMesh->GetPolys()->GetNextCell(npts,pts))
				{
					B.begin_facet();
					B.add_vertex_to_facet(pts[0]);
					B.add_vertex_to_facet(pts[1]);
					B.add_vertex_to_facet(pts[2]);
					B.end_facet();
				}
				B.end_surface();
			}
Exemple #2
0
bool mitk::Equal(vtkPolyData &leftHandSide, vtkPolyData &rightHandSide, mitk::ScalarType eps, bool verbose)
{
  bool noDifferenceFound = true;

  if (!mitk::Equal(leftHandSide.GetNumberOfCells(), rightHandSide.GetNumberOfCells(), eps, verbose))
  {
    if (verbose)
      MITK_INFO << "[Equal( vtkPolyData*, vtkPolyData* )] Number of cells not equal";
    noDifferenceFound = false;
  }

  if (!mitk::Equal(leftHandSide.GetNumberOfVerts(), rightHandSide.GetNumberOfVerts(), eps, verbose))
  {
    if (verbose)
      MITK_INFO << "[Equal( vtkPolyData*, vtkPolyData* )] Number of vertices not equal";
    noDifferenceFound = false;
  }

  if (!mitk::Equal(leftHandSide.GetNumberOfLines(), rightHandSide.GetNumberOfLines(), eps, verbose))
  {
    if (verbose)
      MITK_INFO << "[Equal( vtkPolyData*, vtkPolyData* )] Number of lines not equal";
    noDifferenceFound = false;
  }

  if (!mitk::Equal(leftHandSide.GetNumberOfPolys(), rightHandSide.GetNumberOfPolys(), eps, verbose))
  {
    if (verbose)
      MITK_INFO << "[Equal( vtkPolyData*, vtkPolyData* )] Number of polys not equal";
    noDifferenceFound = false;
  }

  if (!mitk::Equal(leftHandSide.GetNumberOfStrips(), rightHandSide.GetNumberOfStrips(), eps, verbose))
  {
    if (verbose)
      MITK_INFO << "[Equal( vtkPolyData*, vtkPolyData* )] Number of strips not equal";
    noDifferenceFound = false;
  }

  {
    unsigned int numberOfPointsRight = rightHandSide.GetPoints()->GetNumberOfPoints();
    unsigned int numberOfPointsLeft = leftHandSide.GetPoints()->GetNumberOfPoints();
    if (!mitk::Equal(numberOfPointsLeft, numberOfPointsRight, eps, verbose))
    {
      if (verbose)
        MITK_INFO << "[Equal( vtkPolyData*, vtkPolyData* )] Number of points not equal";
      noDifferenceFound = false;
    }
    else
    {
      for (unsigned int i(0); i < numberOfPointsRight; i++)
      {
        bool pointFound = false;
        double pointOne[3];
        rightHandSide.GetPoints()->GetPoint(i, pointOne);

        for (unsigned int j(0); j < numberOfPointsLeft; j++)
        {
          double pointTwo[3];
          leftHandSide.GetPoints()->GetPoint(j, pointTwo);

          double x = pointOne[0] - pointTwo[0];
          double y = pointOne[1] - pointTwo[1];
          double z = pointOne[2] - pointTwo[2];
          double distance = x * x + y * y + z * z;

          if (distance < eps)
          {
            pointFound = true;
            break;
          }
        }
        if (!pointFound)
        {
          if (verbose)
          {
            MITK_INFO << "[Equal( vtkPolyData*, vtkPolyData* )] Right hand side point with id " << i
                      << " and coordinates ( " << std::setprecision(12) << pointOne[0] << " ; " << pointOne[1] << " ; "
                      << pointOne[2] << " ) could not be found in left hand side with epsilon " << eps << ".";
          }
          noDifferenceFound = false;
          break;
        }
      }
    }
  }
  return noDifferenceFound;
}