I want to set custom texture for actor, actor for polydata(simple point). I tried to set my own texture for actor(point) and don't know what is wrong
Asked
Active
Viewed 270 times
1 Answers
0
I dont know what's wrong in this anwser
#include <vtkActor.h>
#include <vtkCellArray.h>
#include <vtkNamedColors.h>
#include <vtkPoints.h>
#include <vtkPolyData.h>
#include <vtkPolyDataMapper.h>
#include <vtkProperty.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkNew.h>
#include <vtkTexture.h>
#include <vtkDoubleArray.h>
#include <vtkImageData.h>
#include <vtkTexture.h>
#include <vtkPointData.h>
#include <vtkUnsignedCharArray.h>
#include <vtkProbeFilter.h>
#include <vtkGeometryFilter.h>
#include <array>
namespace {
void setTexture(vtkActor* actor)
{
vtkNew<vtkImageData> image;
// Create texture
int dimension = 5 * 5;
image->SetDimensions(5, 5, 1);
image->AllocateScalars(VTK_UNSIGNED_CHAR, 25);
image->SetExtent(0, 4, 0, 4, 0, 0);
unsigned char* pixel;
pixel = static_cast<unsigned char*>(image->GetScalarPointer());
const std::array<int, 3> color{ 255, 0, 0 };
const std::array<int, 25> mask{ 0, 0, 1, 0, 0,
0, 1, 1, 1, 0,
1, 1, 1, 1, 1,
0, 1, 1, 1, 0,
0, 0, 1, 0, 0 };
for (int i = 0; i < mask.size(); i++)
{
if (mask[i] == 1)
{
std::copy(color.begin(), color.end(), pixel + 3 * i);
}
}
vtkNew<vtkTexture> texture;
texture->SetInputData(image);
texture->InterpolateOff();
actor->SetTexture(texture);
}
}
int main(int, char* [])
{
vtkNew<vtkNamedColors> colors;
// Create the geometry of a point (the coordinate)
vtkNew<vtkPoints> points;
const float p[3] = { 0.0, 0.0, 0.0 };
// Create the topology of the point (a vertex)
vtkNew<vtkCellArray> vertices;
// We need an an array of point id's for InsertNextCell.
vtkIdType pid[1];
pid[0] = points->InsertNextPoint(p);
vertices->InsertNextCell(1, pid);
// Create a polydata object
vtkNew<vtkPolyData> point;
// Set the points and vertices we created as the geometry and topology of the
// polydata
point->SetPoints(points);
point->SetVerts(vertices);
// Visualize
vtkNew<vtkPolyDataMapper> mapper;
mapper->SetInputData(point);
vtkNew<vtkActor> actor;
actor->SetMapper(mapper);
vtkNew<vtkTexture> texture;
actor->GetProperty()->SetColor(0, 0, 0);
actor->GetProperty()->SetPointSize(5);
setTexture(actor);
vtkNew<vtkRenderer> renderer;
vtkNew<vtkRenderWindow> renderWindow;
renderWindow->SetWindowName("Point");
renderWindow->AddRenderer(renderer);
vtkNew<vtkRenderWindowInteractor> renderWindowInteractor;
renderWindowInteractor->SetRenderWindow(renderWindow);
renderer->AddActor(actor);
renderer->SetBackground(colors->GetColor3d("White").GetData());
renderWindow->Render();
renderWindowInteractor->Start();
return EXIT_SUCCESS;
}

Jevs
- 25
- 5