[vtkusers] Updating scene continously
Paul Fossey
pfossey at msn.com
Fri Jun 2 10:55:41 EDT 2000
On Fri, 2 Jun 2000 21:44:02 +0800, you wrote:
>I'm using vtk to display my simulation result.
>I want the simulated result to be display on the screen continously. My simulation program will write data in a specific file(xxx.1, xxx.2, xxx.3) in every step of the simulation and a small vtk program is being written to display the data.
>
>I'm using vtkPolydata for carrying the data read in.
>Due to the architecture of vtk, I do know that, once the content in my vtkPolydata change and if renWin->Render() is triggered. Then the scene will be updated. But my problem is how to trigger
>renWin->Render() after the "iren->Start()"???
>
>I know think of something "Timer", "onTimer" which read in new data and trigger "iren->Start" in specific time interval. But how to set this kind of timer? Can anyone help??
>
>Also, does anyone has another better approach to my problem??
>_____________________________________________________
>Sent by Hong Kong E-Mail at http://www.hkem.com
>It's free. It's easy. Sign up your account Now!
>
>
>_______________________________________________
>This is the private VTK discussion list.
>Please keep messages on-topic. Check the FAQ at: <http://public.kitware.com/cgi-bin/vtkfaq>
>vtkusers mailing list
>vtkusers at public.kitware.com
>http://public.kitware.com/mailman/listinfo/vtkusers
ASSUMTION:
I assume you are implementing this on WIN32 (NT/95)
I would not recommend using a timer to generate your animation.
This is what I am doing:
---------------------------------------------------
I have a render window owned by a modal dialog box.
This is the overloaded window proc from the dialog:
///////////////////////////////////////////////////////////////////////////////
LRESULT MovieDlg::WindowProc(UINT message, WPARAM wParam, LPARAM
lParam)
{
if( message == WM_KICKIDLE )
{
// If there are more frames to process
if( m_pController->ProcessTimeSlice() )
return 1L;
else
return 0L;
}
return SmartDlg::WindowProc(message, wParam, lParam);
}
This is the time slice processor:
I pre create an array of position data for the movie, and then iterate
though that array to "play" the movie.
/////////////////////////////////////////////////////////////
bool Movie::ProcessTimeSlice()
{
bool fMoreToDo = false;
if( m_pPos && IsPlaying() )
{
// Move the sustainer
GetRender3D()->GetAssembly( 1 )->AddPosition(
m_pPos->deltaX, m_pPos->deltaY, m_pPos->deltaZ );
GetRender3D()->GetAssembly( 1 )->RotateZ(
m_pPos->deltaTheta );
// Move the camera to track the target
LookAt( m_pFlightPos->targetX, m_pPos->targetY,
m_pPos->targetZ );
// Iterate to the next flight position.
m_pPos = m_Path.GetNextPosition();
if( m_pPos )
fMoreToDo = true;
GetRender3D()->Refresh( ); // Calls iren->Render()
}
return fMoreToDo;
}
/////////////////////////////////////////////////////////////////////
There is a descent article on using this technique at:
http://www.wdj.com/archive/0807/feature.html
I hope this helps.
Regards,
Paul.
More information about the vtkusers
mailing list