MCPcopy Create free account
hub / github.com/Kitware/VTK / Orient

Method Orient

Filters/General/vtkIntersectionPolyDataFilter.cxx:1753–1800  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1751//------------------------------------------------------------------------------
1752
1753void vtkIntersectionPolyDataFilter::Impl ::Orient(
1754 vtkPolyData* pd, vtkTransform* transform, vtkPolyData* boundary, vtkPolygon* boundarypoly)
1755{
1756 // Orient this loop in a counter clockwise direction in preparation for
1757 // cell splitting. For delaunay2d, the polygon should be in CCW order, but
1758 // also for ear clipping method, it is nice to have also in CCW order.
1759 vtkSmartPointer<vtkTransformPolyDataFilter> transformer =
1760 vtkSmartPointer<vtkTransformPolyDataFilter>::New();
1761 vtkSmartPointer<vtkPolyData> transformedpd = vtkSmartPointer<vtkPolyData>::New();
1762
1763 transformer->SetInputData(pd);
1764 transformer->SetTransform(transform);
1765 transformer->Update();
1766 transformedpd = transformer->GetOutput();
1767
1768 double area = 0;
1769 double tedgept1[3];
1770 double tedgept2[3];
1771 vtkIdType nextPt;
1772 for (nextPt = 0; nextPt < pd->GetNumberOfPoints() - 1; nextPt++)
1773 {
1774 transformedpd->GetPoint(nextPt, tedgept1);
1775 transformedpd->GetPoint(nextPt + 1, tedgept2);
1776 area = area + (tedgept1[0] * tedgept2[1]) - (tedgept2[0] * tedgept1[1]);
1777 }
1778 transformedpd->GetPoint(nextPt, tedgept1);
1779 transformedpd->GetPoint(0, tedgept2);
1780 area = area + (tedgept1[0] * tedgept2[1]) - (tedgept2[0] * tedgept1[1]);
1781
1782 if (area < 0)
1783 {
1784 for (nextPt = pd->GetNumberOfPoints() - 1; nextPt > -1; nextPt--)
1785 {
1786 boundarypoly->GetPointIds()->InsertNextId(nextPt);
1787 }
1788 }
1789 else
1790 {
1791 for (nextPt = 0; nextPt < pd->GetNumberOfPoints(); nextPt++)
1792 {
1793 boundarypoly->GetPointIds()->InsertNextId(nextPt);
1794 }
1795 }
1796 vtkSmartPointer<vtkCellArray> cellarray = vtkSmartPointer<vtkCellArray>::New();
1797 cellarray->InsertNextCell(boundarypoly);
1798 boundary->SetPoints(pd->GetPoints());
1799 boundary->SetPolys(cellarray);
1800}
1801
1802//------------------------------------------------------------------------------
1803

Callers 1

SplitCellMethod · 0.95

Calls 13

InsertNextIdMethod · 0.80
SetPolysMethod · 0.80
NewFunction · 0.50
SetInputDataMethod · 0.45
SetTransformMethod · 0.45
UpdateMethod · 0.45
GetOutputMethod · 0.45
GetNumberOfPointsMethod · 0.45
GetPointMethod · 0.45
GetPointIdsMethod · 0.45
InsertNextCellMethod · 0.45
SetPointsMethod · 0.45

Tested by

no test coverage detected