------------------------------------------------------------------------------
| 226 | |
| 227 | //------------------------------------------------------------------------------ |
| 228 | void vtkLinearTransform::TransformPoints(vtkPoints* inPts, vtkPoints* outPts) |
| 229 | { |
| 230 | vtkIdType n = inPts->GetNumberOfPoints(); |
| 231 | vtkIdType m = outPts->GetNumberOfPoints(); |
| 232 | double(*matrix)[4] = this->Matrix->Element; |
| 233 | |
| 234 | this->Update(); |
| 235 | |
| 236 | // operate directly on the memory to avoid GetPoint()/SetPoint() calls. |
| 237 | vtkDataArray* inArray = inPts->GetData(); |
| 238 | vtkDataArray* outArray = outPts->GetData(); |
| 239 | outArray->WriteVoidPointer(3 * m, 3 * n); |
| 240 | |
| 241 | vtkLinearTransformPointsWorker worker; |
| 242 | if (!vtkArrayDispatch::Dispatch2ByArray<vtkArrayDispatch::AOSPointArrays, |
| 243 | vtkArrayDispatch::AOSPointArrays>::Execute(inArray, outArray, worker, m, matrix)) |
| 244 | { |
| 245 | // for anything that isn't float or double |
| 246 | vtkSMPTools::For(0, n, vtkSMPTools::THRESHOLD, |
| 247 | [&](vtkIdType ptId, vtkIdType endPtId) |
| 248 | { |
| 249 | double point[3]; |
| 250 | for (; ptId < endPtId; ++ptId) |
| 251 | { |
| 252 | inPts->GetPoint(ptId, point); |
| 253 | vtkLinearTransformPoint(matrix, point, point); |
| 254 | outPts->SetPoint(m + ptId, point); |
| 255 | } |
| 256 | }); |
| 257 | } |
| 258 | } |
| 259 | |
| 260 | //------------------------------------------------------------------------------ |
| 261 | void vtkLinearTransform::TransformNormals(vtkDataArray* inNms, vtkDataArray* outNms) |
no test coverage detected