------------------------------------------------------------------------------ This is probably a horribly inefficient way to do it.
| 219 | //------------------------------------------------------------------------------ |
| 220 | // This is probably a horribly inefficient way to do it. |
| 221 | void vtkDijkstraImageGeodesicPath::BuildAdjacency(vtkDataSet* inData) |
| 222 | { |
| 223 | vtkImageData* image = vtkImageData::SafeDownCast(inData); |
| 224 | |
| 225 | vtkIdType ncells = image->GetNumberOfCells(); |
| 226 | |
| 227 | // optimized for cell type VTK_PIXEL |
| 228 | // |
| 229 | vtkIdList* ptIds = vtkIdList::New(); |
| 230 | vtkIdType uId[6] = { 0, 1, 2, 3, 0, 1 }; |
| 231 | vtkIdType vId[6] = { 1, 2, 3, 0, 2, 3 }; |
| 232 | double cost; |
| 233 | |
| 234 | for (vtkIdType i = 0; i < ncells; ++i) |
| 235 | { |
| 236 | image->GetCellPoints(i, ptIds); |
| 237 | |
| 238 | for (int j = 0; j < 6; ++j) |
| 239 | { |
| 240 | vtkIdType u = ptIds->GetId(vId[j]); |
| 241 | vtkIdType v = ptIds->GetId(uId[j]); |
| 242 | |
| 243 | // before insert and calc, check if key map u has key v |
| 244 | std::map<int, double>& mu = this->Internals->Adjacency[u]; |
| 245 | if (mu.find(v) == mu.end()) |
| 246 | { |
| 247 | cost = this->CalculateStaticEdgeCost(image, u, v); |
| 248 | mu.insert(std::pair<int, double>(v, cost)); |
| 249 | } |
| 250 | |
| 251 | std::map<int, double>& mv = this->Internals->Adjacency[v]; |
| 252 | if (mv.find(u) == mv.end()) |
| 253 | { |
| 254 | cost = this->CalculateStaticEdgeCost(image, v, u); |
| 255 | mv.insert(std::pair<int, double>(u, cost)); |
| 256 | } |
| 257 | } |
| 258 | } |
| 259 | |
| 260 | ptIds->Delete(); |
| 261 | |
| 262 | this->RebuildStaticCosts = false; |
| 263 | this->AdjacencyBuildTime.Modified(); |
| 264 | } |
| 265 | |
| 266 | //------------------------------------------------------------------------------ |
| 267 | void vtkDijkstraImageGeodesicPath::UpdateStaticCosts(vtkImageData* image) |
nothing calls this directly
no test coverage detected