Commit dff00e9e authored by David C. Lonie's avatar David C. Lonie Committed by Marcus D. Hanwell

Add tests for unicode chart rendering.

Change-Id: Ifd7a5e7daf636d6e0cc8a8ff96aa85be84b24e7d
parent 5ff4f80b
......@@ -5,6 +5,9 @@ vtk_add_test_cxx(NO_DATA NO_VALID
TestControlPointsItemEvents.cxx
)
set(TestChartUnicode_ARGS DATA{../Data/Fonts/DejaVuSans.ttf})
set(TestContextUnicode_ARGS DATA{../Data/Fonts/DejaVuSans.ttf})
# add tests that require data
vtk_add_test_cxx(
TestAxes.cxx
......@@ -12,10 +15,12 @@ vtk_add_test_cxx(
TestBarGraphHorizontal.cxx
TestColorTransferFunction.cxx,-E80
TestChartMatrix.cxx
TestChartUnicode.cxx,-E25
TestChartsOn3D.cxx,-E16
TestChartXYZ.cxx
TestContext.cxx
TestContextImage.cxx
TestContextUnicode.cxx
TestControlPointsHandleItem.cxx,-E30
TestDiagram.cxx
TestHistogram2D.cxx
......
/*=========================================================================
Program: Visualization Toolkit
Module: TestLinePlot.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 "vtkAxis.h"
#include "vtkChartXY.h"
#include "vtkContextScene.h"
#include "vtkContextView.h"
#include "vtkFloatArray.h"
#include "vtkNew.h"
#include "vtkPlot.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkSmartPointer.h"
#include "vtkTable.h"
#include "vtkTextProperty.h"
#include <string>
//----------------------------------------------------------------------------
int TestChartUnicode(int argc, char *argv[])
{
if (argc < 2)
{
cout << "Missing font filename." << endl;
return EXIT_FAILURE;
}
std::string fontFile(argv[1]);
// Set up a 2D scene, add an XY chart to it
vtkNew<vtkContextView> view;
view->GetRenderWindow()->SetSize(400, 300);
vtkNew<vtkChartXY> chart;
view->GetScene()->AddItem(chart.GetPointer());
// Exercise the support for extended characters using UTF8 encoded strings.
chart->GetTitleProperties()->SetFontFamily(VTK_FONT_FILE);
chart->GetTitleProperties()->SetFontFile(fontFile.c_str());
chart->SetTitle("\xcf\x85\xcf\x84\xce\xba");
vtkAxis *axis1 = chart->GetAxis(0);
axis1->GetTitleProperties()->SetFontFamily(VTK_FONT_FILE);
axis1->GetTitleProperties()->SetFontFile(fontFile.c_str());
axis1->SetTitle("\xcf\x87(m)");
vtkAxis *axis2 = chart->GetAxis(1);
axis2->GetTitleProperties()->SetFontFamily(VTK_FONT_FILE);
axis2->GetTitleProperties()->SetFontFile(fontFile.c_str());
axis2->SetTitle("\xcf\x80\xcf\x86");
// Create a table with some points in it...
vtkNew<vtkTable> table;
vtkNew<vtkFloatArray> arrX;
arrX->SetName("X Axis");
table->AddColumn(arrX.GetPointer());
vtkNew<vtkFloatArray> arrC;
arrC->SetName("Cosine");
table->AddColumn(arrC.GetPointer());
int numPoints = 69;
float inc = 7.5 / (numPoints - 1);
table->SetNumberOfRows(numPoints);
for (int i = 0; i < numPoints; ++i)
{
table->SetValue(i, 0, i * inc);
table->SetValue(i, 1, cos(i * inc) + sin(i * (inc - 3.14)));
}
// Add multiple line plots, setting the colors etc
vtkPlot *line = chart->AddPlot(vtkChart::LINE);
line->SetInputData(table.GetPointer(), 0, 1);
line->SetColor(42, 55, 69, 255);
// Render the scene and compare the image to a reference image
view->GetRenderWindow()->SetMultiSamples(0);
view->GetInteractor()->Initialize();
view->GetInteractor()->Start();
return EXIT_SUCCESS;
}
......@@ -23,12 +23,15 @@
#include "vtkContextScene.h"
#include "vtkPen.h"
#include "vtkBrush.h"
#include "vtkTestUtilities.h"
#include "vtkTextProperty.h"
#include "vtkUnicodeString.h"
#include "vtkRegressionTestImage.h"
#include <string>
//----------------------------------------------------------------------------
class ContextUnicode : public vtkContextItem
{
......@@ -37,15 +40,25 @@ public:
vtkTypeMacro(ContextUnicode, vtkContextItem);
// Paint event for the chart, called whenever the chart needs to be drawn
virtual bool Paint(vtkContext2D *painter);
std::string FontFile;
};
//----------------------------------------------------------------------------
int TestContextUnicode(int argc, char * argv [])
{
if (argc < 2)
{
cout << "Missing font filename." << endl;
return EXIT_FAILURE;
}
std::string fontFile(argv[1]);
// Set up a 2D context view, context test object and add it to the scene
vtkSmartPointer<vtkContextView> view = vtkSmartPointer<vtkContextView>::New();
view->GetRenderWindow()->SetSize(200, 100);
vtkSmartPointer<ContextUnicode> test = vtkSmartPointer<ContextUnicode>::New();
test->FontFile = fontFile;
view->GetScene()->AddItem(test);
view->GetRenderWindow()->SetMultiSamples(0);
......@@ -70,10 +83,12 @@ bool ContextUnicode::Paint(vtkContext2D *painter)
painter->GetTextProp()->SetJustificationToCentered();
painter->GetTextProp()->SetColor(0.0, 0.0, 0.0);
painter->GetTextProp()->SetFontSize(24);
painter->GetTextProp()->SetFontFamily(VTK_FONT_FILE);
painter->GetTextProp()->SetFontFile(this->FontFile.c_str());
painter->DrawString(70, 20, "Angstrom");
painter->DrawString(150, 20, vtkUnicodeString::from_utf8("\xe2\x84\xab"));
painter->DrawString(100, 80,
vtkUnicodeString::from_utf8("a\xce\xb1\xe0\xb8\x81\xf0\x90\x80\x80"));
vtkUnicodeString::from_utf8("a\xce\xb1"));
painter->DrawString(100, 50,
vtkUnicodeString::from_utf8("\xce\xb1\xce\xb2\xce\xb3"));
return true;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment