int RenderWindowManager::AddRenderWindow( vtkPropCollection *props, const char *windowTitle, bool bStartInteractor /*= false */)
{
if( !props )
return -1;
//create a render window assembly
vtkRenderWindow *renWin = NULL;
vtkRenderer *aRenderer = NULL;
vtkRenderWindowInteractor *iren = NULL;
vtkInteractorStyleTrackballCamera *style = NULL;
aRenderer = vtkRenderer::New();
aRenderer->TwoSidedLightingOn();
aRenderer->LightFollowCameraOn();
aRenderer->SetAmbient( 10,10,10 );
vtkLight *light = vtkLight::New();
light->SetLightTypeToHeadlight();
aRenderer->AddLight( light );
light->Delete();
renWin = vtkRenderWindow::New();
renWin->AddRenderer(aRenderer);
renWin->SetSize(700,500);
style = vtkInteractorStyleTrackballCamera::New();
iren = vtkRenderWindowInteractor::New();
iren->LightFollowCameraOff();
//iren->SetNumberOfFlyFrames(1);
iren->SetRenderWindow(renWin);
iren->SetInteractorStyle(style);
//collect the window
this->windows->AddItem( renWin );
/* //attach our exit handler
vtkRenderWindowExitCommand *irenexit = vtkRenderWindowExitCommand::New();
iren->AddObserver( vtkCommand::ExitEvent, irenexit );
irenexit->Delete();
*/
vtkRenderWindowCharacterCommand *savecallback = vtkRenderWindowCharacterCommand::New();
savecallback->SetMagFactor( this->MagFactor );
savecallback->SetOutputImageExtension( this->ImageType.c_str() );
savecallback->SetOutputImagePrefix( this->ImagePrefix.c_str() );
savecallback->SetRenderer( aRenderer );
style->AddObserver( vtkCommand::CharEvent, savecallback);
savecallback->Delete();
// put our character command handler on the main window
vtkCallbackCommand* callback = vtkCallbackCommand::New();
callback->SetClientData(aRenderer);
callback->SetCallback(CharacterCommandCallback);
style->AddObserver(vtkCommand::CharEvent, callback);
callback->Delete();
//add the props
vtkProp *prop = NULL;
for( props->InitTraversal(); prop = props->GetNextProp() ; )
{
aRenderer->AddViewProp( prop );
}
if( this->bPrintHelp )
{
this->PrintRenderWindowCommands();
}
aRenderer->ResetCameraClippingRange();
aRenderer->ResetCamera();
aRenderer->Render();
iren->Initialize();
renWin->SetWindowName( windowTitle );
if(bStartInteractor)
iren->Start();
//delete the assembly
style->Delete();
iren->Delete();
aRenderer->Delete();
int rval = -1;
rval = this->GetIndex( renWin );
renWin->Delete();
return rval;
}