------------------------------------------------------------------------------
| 489 | |
| 490 | //------------------------------------------------------------------------------ |
| 491 | vtkIdType vtkSelectPolyData::GetClosestCellId(vtkPolyData* mesh, vtkIntArray* pointMarks) |
| 492 | { |
| 493 | vtkPoints* inPts = mesh->GetPoints(); |
| 494 | vtkIdType numPts = inPts->GetNumberOfPoints(); |
| 495 | |
| 496 | vtkIdType closestCellId = -1; |
| 497 | double closestDist2 = VTK_DOUBLE_MAX; |
| 498 | vtkIdType closestPointId = -1; |
| 499 | for (vtkIdType pointId = 0; pointId < numPts; pointId++) |
| 500 | { |
| 501 | double x[3]; |
| 502 | inPts->GetPoint(pointId, x); |
| 503 | double dist2 = vtkMath::Distance2BetweenPoints(x, this->ClosestPoint); |
| 504 | // get closest point not on the boundary |
| 505 | if (dist2 < closestDist2 && pointMarks->GetValue(pointId) != 0) |
| 506 | { |
| 507 | closestPointId = pointId; |
| 508 | closestDist2 = dist2; |
| 509 | } |
| 510 | } |
| 511 | if (closestPointId >= 0) |
| 512 | { |
| 513 | vtkIdType ncells; |
| 514 | vtkIdType* cells; |
| 515 | mesh->GetPointCells(closestPointId, ncells, cells); |
| 516 | if (ncells > 0) |
| 517 | { |
| 518 | closestCellId = cells[0]; |
| 519 | } |
| 520 | } |
| 521 | return closestCellId; |
| 522 | } |
| 523 | |
| 524 | //------------------------------------------------------------------------------ |
| 525 | void vtkSelectPolyData::FillMarksInRegion(vtkPolyData* mesh, vtkIdList* edgePointIds, |
no test coverage detected