vtk多窗口同步响应事件

下面的代码效果:出现两个窗口,如果你拖动一个,另一个也会“受到拖动”

#include "vtkConeSource.h"
#include "vtkCubeSource.h"
#include "vtkActor.h"
#include "vtkRenderer.h"
#include "vtkRenderWindow.h"
#include "vtkCamera.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkCommand.h"
#include "vtkCallbackCommand.h"
#include "vtkPolyData.h"
#include "vtkPolyDataMapper.h"
#include "vtkSmartPointer.h"
#include "vtkInteractorStyleSwitch.h"

static vtkSmartPointer renderer01;
static vtkSmartPointer renderer02;
static vtkSmartPointer renderWindow01;
static vtkSmartPointer renderWindow02;

class vtkMyCameraCallback : public vtkCommand
{
public:
	static vtkMyCameraCallback *New()
	{
		return new vtkMyCameraCallback;
	}
	virtual void Execute(vtkObject *caller, unsigned long, void*)

	{
		vtkCamera *camera = static_cast(caller);
		double camPos[3];
		double focalPos[3];
		double upVector[3];
		camera->GetPosition(camPos);
		camera->GetFocalPoint(focalPos);
		camera->GetViewUp(upVector);
		renderer02->SetActiveCamera(camera);
		renderWindow02->Render();
	}
};

int main(int argc, char *argv[])
{
	vtkSmartPointer cone =	vtkSmartPointer::New();
	vtkSmartPointer cube = vtkSmartPointer::New();
	cone->SetResolution(20);
	cone->Update();
	cube->Update();
	vtkSmartPointer coneMapper =	vtkSmartPointer::New();
	vtkSmartPointer cubeMapper = vtkSmartPointer::New();
	coneMapper->SetInputData(cone->GetOutput());
	cubeMapper->SetInputData(cube->GetOutput());
	coneMapper->Update();
	cubeMapper->Update();
	vtkSmartPointer coneActor =	vtkSmartPointer::New();
	vtkSmartPointer cubeActor = vtkSmartPointer::New();
	coneActor->SetMapper(coneMapper);
	cubeActor->SetMapper(cubeMapper);

	renderer01 = vtkSmartPointer::New();
	renderer02 = vtkSmartPointer::New();
	renderer01->AddActor(coneActor);
	renderer02->AddActor(cubeActor);
	// RENDER-WINDOW

	renderWindow01 = vtkSmartPointer::New();
	renderWindow02 = vtkSmartPointer::New();

	renderWindow01->AddRenderer(renderer01);
	renderWindow02->AddRenderer(renderer02);

	vtkSmartPointer windowInteractor01 = vtkSmartPointer::New();
	vtkSmartPointer trackballStyle =	vtkSmartPointer::New();
	trackballStyle->SetCurrentStyleToTrackballCamera();
	windowInteractor01->SetInteractorStyle(trackballStyle);
	windowInteractor01->SetRenderWindow(renderWindow01);

	// User event handling
	// Catch camera event   
	vtkSmartPointer cameraCallback =vtkSmartPointer::New();
	renderer01->GetActiveCamera()->AddObserver(vtkCommand::ModifiedEvent,cameraCallback);
	renderer01->ResetCamera();
	windowInteractor01->Initialize();
	windowInteractor01->Start();
	return 0;
}

vtk多窗口同步响应事件_第1张图片

你可能感兴趣的:(VTK/ITK)