1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
|
// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
// SPDX-License-Identifier: BSD-3-Clause
#include "vtkTextActor3D.h"
#include "vtkActor.h"
#include "vtkCamera.h"
#include "vtkCellArray.h"
#include "vtkCellData.h"
#include "vtkNew.h"
#include "vtkPolyData.h"
#include "vtkPolyDataMapper.h"
#include "vtkProperty.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkRenderer.h"
#include "vtkTestingInteractor.h"
#include "vtkTextProperty.h"
#include "vtkUnsignedCharArray.h"
#include <sstream>
namespace vtkTestMathTextActor3D
{
void setupTextActor3D(vtkTextActor3D* actor, vtkPolyData* anchor)
{
vtkTextProperty* p = actor->GetTextProperty();
std::ostringstream label;
label << p->GetVerticalJustificationAsString()[0] << p->GetJustificationAsString()[0] << " "
<< "$\\theta = " << p->GetOrientation() << "$";
actor->SetInput(label.str().c_str());
// Add the anchor point:
double* pos = actor->GetPosition();
double* col = p->GetColor();
vtkIdType ptId = anchor->GetPoints()->InsertNextPoint(pos[0], pos[1], pos[2]);
anchor->GetVerts()->InsertNextCell(1, &ptId);
anchor->GetCellData()->GetScalars()->InsertNextTuple4(
col[0] * 255, col[1] * 255, col[2] * 255, 255);
}
} // end namespace vtkTestMathTextActor3D
//------------------------------------------------------------------------------
int TestMathTextActor3D(int, char*[])
{
using namespace vtkTestMathTextActor3D;
vtkNew<vtkRenderer> ren;
int width = 600;
int height = 600;
int x[3] = { 100, 300, 500 };
int y[3] = { 100, 300, 500 };
// Render the anchor points to check alignment:
vtkNew<vtkPolyData> anchors;
vtkNew<vtkPoints> points;
anchors->SetPoints(points);
vtkNew<vtkCellArray> verts;
anchors->SetVerts(verts);
vtkNew<vtkUnsignedCharArray> colors;
colors->SetNumberOfComponents(4);
anchors->GetCellData()->SetScalars(colors);
for (size_t row = 0; row < 3; ++row)
{
for (size_t col = 0; col < 3; ++col)
{
vtkNew<vtkTextActor3D> actor;
switch (row)
{
case 0:
actor->GetTextProperty()->SetJustificationToRight();
break;
case 1:
actor->GetTextProperty()->SetJustificationToCentered();
break;
case 2:
actor->GetTextProperty()->SetJustificationToLeft();
break;
}
switch (col)
{
case 0:
actor->GetTextProperty()->SetVerticalJustificationToBottom();
break;
case 1:
actor->GetTextProperty()->SetVerticalJustificationToCentered();
break;
case 2:
actor->GetTextProperty()->SetVerticalJustificationToTop();
break;
}
actor->GetTextProperty()->SetFontSize(20);
actor->GetTextProperty()->SetOrientation(45.0 * (3 * row + col));
actor->GetTextProperty()->SetColor(0.75, .2 + col * .26, .2 + row * .26);
actor->GetTextProperty()->SetBackgroundColor(0., 1. - col * .26, 1. - row * .26);
actor->GetTextProperty()->SetBackgroundOpacity(0.25);
actor->SetPosition(x[col], y[row], 0.);
setupTextActor3D(actor, anchors);
ren->AddActor(actor);
}
}
vtkNew<vtkPolyDataMapper> anchorMapper;
anchorMapper->SetInputData(anchors);
vtkNew<vtkActor> anchorActor;
anchorActor->SetMapper(anchorMapper);
anchorActor->GetProperty()->SetPointSize(5);
ren->AddActor(anchorActor);
vtkNew<vtkRenderWindow> win;
win->AddRenderer(ren);
vtkNew<vtkRenderWindowInteractor> iren;
iren->SetRenderWindow(win);
ren->SetBackground(0.0, 0.0, 0.0);
ren->GetActiveCamera()->SetPosition(width / 2, height / 2, 1400);
ren->GetActiveCamera()->SetFocalPoint(width / 2, height / 2, 0);
ren->GetActiveCamera()->SetViewUp(0, 1, 0);
ren->ResetCameraClippingRange();
win->SetSize(width, height);
win->SetMultiSamples(0);
win->GetInteractor()->Initialize();
win->GetInteractor()->Start();
return EXIT_SUCCESS;
}
|