/*========================================================================= Program: Visualization Toolkit Module: TestColorByCellDataStringArray.cxx Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen All rights reserved. See Copyright.txt or http://www.kitware.com/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notice for more information. =========================================================================*/ #include "vtkRegressionTestImage.h" #include "vtkTestUtilities.h" #include #include #include #include #include #include #include #include #include #include #include #include #include "vtkOpenGLPolyDataMapper.h" int TestAppleBug(int argc, char* argv[]) { vtkNew sphere; sphere->Update(); vtkNew polydata; polydata->ShallowCopy(sphere->GetOutput()); // Set up string array associated with cells vtkNew sArray; sArray->SetName("color"); sArray->SetNumberOfComponents(1); sArray->SetNumberOfTuples(polydata->GetNumberOfCells()); vtkVariant colors[5]; colors[0] = "red"; colors[1] = "blue"; colors[2] = "green"; colors[3] = "yellow"; colors[4] = "cyan"; // Round-robin assignment of color strings for (int i = 0; i < polydata->GetNumberOfCells(); ++i) { sArray->SetValue(i, colors[i % 5].ToString()); } vtkCellData* cd = polydata->GetCellData(); cd->AddArray(sArray); // Set up transfer function vtkNew tfer; tfer->IndexedLookupOn(); tfer->SetNumberOfIndexedColors(5); tfer->SetIndexedColor(0, 1.0, 0.0, 0.0); tfer->SetIndexedColor(1, 0.0, 0.0, 1.0); tfer->SetIndexedColor(2, 0.0, 1.0, 0.0); tfer->SetIndexedColor(3, 1.0, 1.0, 0.0); tfer->SetIndexedColor(4, 0.0, 1.0, 1.0); vtkStdString red("red"); tfer->SetAnnotation(red, red); vtkStdString blue("blue"); tfer->SetAnnotation(blue, blue); vtkStdString green("green"); tfer->SetAnnotation(green, green); vtkStdString yellow("yellow"); tfer->SetAnnotation(yellow, yellow); vtkStdString cyan("cyan"); tfer->SetAnnotation(cyan, cyan); vtkNew mapper; mapper->SetInputDataObject(polydata); mapper->SetLookupTable(tfer); mapper->ScalarVisibilityOn(); mapper->SetScalarModeToUseCellFieldData(); mapper->SelectColorArray("color"); vtkNew actor; actor->SetMapper(mapper); vtkNew renderer; renderer->AddActor(actor); vtkNew renderWindow; renderWindow->AddRenderer(renderer); vtkNew iren; iren->SetRenderWindow(renderWindow); renderWindow->Render(); int retVal = vtkRegressionTestImage(renderWindow); cerr << renderWindow->ReportCapabilities(); // if it thinks it has the bug, try it // without the code if (mapper->GetHaveAppleBug()) { mapper->ForceHaveAppleBugOff(); renderWindow->Render(); int offRetVal = vtkRegressionTestImage(renderWindow); if (offRetVal == vtkRegressionTester::PASSED) { cerr << "FIX!!!! This system is using the AppleBug (rdar://20747550) code but does not need " "it\n\n"; return !vtkRegressionTester::FAILED; } } else { // if the test failed see if the apple bug would fix it if (retVal == vtkRegressionTester::FAILED) { mapper->ForceHaveAppleBugOn(); renderWindow->Render(); retVal = vtkRegressionTestImage(renderWindow); if (retVal == vtkRegressionTester::PASSED) { cerr << "FIX!!! This system needs the AppleBug (rdar://20747550) code but doesn't have it\n\n"; return !vtkRegressionTester::FAILED; } } } if (retVal == vtkRegressionTester::DO_INTERACTOR) { iren->Start(); } return !retVal; }