| 185 | } |
| 186 | |
| 187 | void mitk::SurfaceVtkMapper2D::GenerateDataForRenderer(mitk::BaseRenderer *renderer) |
| 188 | { |
| 189 | const DataNode *node = GetDataNode(); |
| 190 | auto *surface = static_cast<Surface *>(node->GetData()); |
| 191 | const TimeGeometry *dataTimeGeometry = surface->GetTimeGeometry(); |
| 192 | LocalStorage *localStorage = m_LSH.GetLocalStorage(renderer); |
| 193 | |
| 194 | ScalarType time = renderer->GetTime(); |
| 195 | int timestep = 0; |
| 196 | |
| 197 | if (time > itk::NumericTraits<ScalarType>::NonpositiveMin()) |
| 198 | timestep = dataTimeGeometry->TimePointToTimeStep(time); |
| 199 | |
| 200 | vtkSmartPointer<vtkPolyData> inputPolyData = surface->GetVtkPolyData(timestep); |
| 201 | if ((inputPolyData == nullptr) || (inputPolyData->GetNumberOfPoints() < 1)) |
| 202 | return; |
| 203 | |
| 204 | // apply color and opacity read from the PropertyList |
| 205 | this->ApplyAllProperties(renderer); |
| 206 | |
| 207 | const PlaneGeometry *planeGeometry = renderer->GetCurrentWorldPlaneGeometry(); |
| 208 | if ((planeGeometry == nullptr) || (!planeGeometry->IsValid()) || (!planeGeometry->HasReferenceGeometry())) |
| 209 | { |
| 210 | return; |
| 211 | } |
| 212 | |
| 213 | if (localStorage->m_Actor->GetMapper() == nullptr) |
| 214 | localStorage->m_Actor->SetMapper(localStorage->m_Mapper); |
| 215 | |
| 216 | double origin[3]; |
| 217 | origin[0] = planeGeometry->GetOrigin()[0]; |
| 218 | origin[1] = planeGeometry->GetOrigin()[1]; |
| 219 | origin[2] = planeGeometry->GetOrigin()[2]; |
| 220 | |
| 221 | double normal[3]; |
| 222 | normal[0] = planeGeometry->GetNormal()[0]; |
| 223 | normal[1] = planeGeometry->GetNormal()[1]; |
| 224 | normal[2] = planeGeometry->GetNormal()[2]; |
| 225 | |
| 226 | localStorage->m_CuttingPlane->SetOrigin(origin); |
| 227 | localStorage->m_CuttingPlane->SetNormal(normal); |
| 228 | // Transform the data according to its geometry. |
| 229 | // See UpdateVtkTransform documentation for details. |
| 230 | vtkSmartPointer<vtkLinearTransform> vtktransform = GetDataNode()->GetVtkTransform(this->GetTimestep()); |
| 231 | vtkSmartPointer<vtkTransformPolyDataFilter> filter = vtkSmartPointer<vtkTransformPolyDataFilter>::New(); |
| 232 | filter->SetTransform(vtktransform); |
| 233 | filter->SetInputData(inputPolyData); |
| 234 | localStorage->m_Cutter->SetInputConnection(filter->GetOutputPort()); |
| 235 | localStorage->m_Cutter->Update(); |
| 236 | |
| 237 | bool generateNormals = false; |
| 238 | node->GetBoolProperty("draw normals 2D", generateNormals); |
| 239 | if (generateNormals) |
| 240 | { |
| 241 | localStorage->m_NormalGlyph->SetInputConnection(localStorage->m_Cutter->GetOutputPort()); |
| 242 | localStorage->m_NormalGlyph->Update(); |
| 243 | |
| 244 | localStorage->m_NormalMapper->SetInputConnection(localStorage->m_NormalGlyph->GetOutputPort()); |
no test coverage detected