Hi I am fairly new to VTK and trying to push it as much as I can. I am trying to update the cuttling plane value with a qslider.
I have a slice on a vtk in a QVTKOpenGLNativeWidget setup as
exmVTK::exmVTK(QWidget* parent) : QMainWindow(parent), ui(new Ui::exmVTK)
{
ui->setupUi(this);
ui->frameSlider->setTickInterval(10);
ui->frameSlider->setSingleStep(1);
ui->frameSlider->setMinimum(0);
ui->frameSlider->setMaximum(99);
ui->frameSlider->setTracking(false);
vtkNew<vtkNamedColors> colors;
vtkNew<vtkGenericOpenGLRenderWindow> renderWindow;
ui->qvtkWidget->setRenderWindow(renderWindow);
vtkNew<vtkEventQtSlotConnect> slotConnector;
this->Connections = slotConnector;
//read all the data from the file
std::string filename = "C:\\VTK\\geo500.vtu";
vtkNew<vtkXMLUnstructuredGridReader> reader;
reader->SetFileName(filename.c_str());
reader->Update();
vtkNew<vtkRenderer> renderer;
//SLICE
double sliceNorm[3] = { 1.0, 0.0, 0.0 };
double sliceOrigin[3] = { 0, 0, 0 };
vtkNew<vtkPlane> plane;
plane->SetOrigin(sliceOrigin);
plane->SetNormal(sliceNorm);
// Create cutter
vtkNew<vtkCutter> cutter;
cutter->SetCutFunction(plane);
cutter->SetInputData(reader->GetOutput());
cutter->Update();
vtkNew<vtkPolyDataMapper> cutterMapper;
cutterMapper->SetInputConnection(cutter->GetOutputPort());
cutterMapper->SetResolveCoincidentTopologyToPolygonOffset();
cutterMapper->ScalarVisibilityOn();
cutterMapper->SetScalarModeToUsePointFieldData();
cutterMapper->ColorByArrayComponent("total(p)", 0);
// Create plane actor
vtkNew<vtkActor> cutterActor;
cutterActor->SetMapper(cutterMapper);
renderer->AddActor(cutterActor);
ui->qvtkWidget->renderWindow()->AddRenderer(renderer);
this->Connections->Connect(
ui->qvtkWidget->renderWindow()->GetInteractor(),
vtkCommand::LeftButtonPressEvent, this,
SLOT(slot_clicked(vtkObject*, unsigned long, void*, void*)));
}
I also have a qslider updating the x value of the cutting plane.
void exmVTK::on_frameSlider_valueChanged(int value)
{
connect(ui->frameSlider, SIGNAL(valueChanged(int)), this, SLOT(setFrame(int)));
qDebug() << "Slider value changed: " << value;
}
void exmF1VTK::setFrame(int value)
{
double max = 5.0;
double min = -1.0;
int sliderMin = 0;
int sliderMax = 99;
double frameX = 0;
frameX = ((max - min) * (value - sliderMin) / (sliderMax - sliderMin) + min);
ui->valueLabel->setText(“Value: " + QString::number(frameX, ‘f’, 2) + " mm”);
qDebug() << "set Frame: " << value;
}
How can I update the created plane x position when moving the slider? Any help would be greatly appreciated.
Thanks