Hi
I am using Activiz ( VTK for .NET ) version 5.8. My application is to render a real-time 3D Point cloud. My render window crashes whenever I minimize the render window or switch tab to use other applications on my PC. Any help will be appreciated.
Here is my code snippet.
public void VTKTest1()
{
if (render3d && numSensorsReceive > 0)
{
/*
vtkTransform transform = vtkTransform.New();
transform.Translate(0, 0, 500);
vtkAxesActor axes = vtkAxesActor.New();
axes.SetUserTransform(transform);
ren1.AddActor(axes);
*/
renWin.AddRenderer(ren1);
renWin.SetSize(900, 900);
ren1.SetBackground(0, 0, 0);
camera.SetPosition(0, 0, 750);
camera.SetViewUp(0, 1, 0);
//camera.OrthogonalizeViewUp();
ren1.SetActiveCamera(camera);
ren1.GetActiveCamera().Zoom(0.9);
ren1.ResetCamera();
image_filter = vtkWindowToImageFilter.New();
image_filter.SetInput(renWin);
image_filter.SetInputBufferTypeToRGB();
image_filter.ReadFrontBufferOff();
image_filter.Update();
// Video Writer setup
video_writer = vtkAVIWriter.New();
video_writer.SetInputConnection(image_filter.GetOutputPort());
string vid_3d_path = saveInfoPath + dateDataFolderSensor1 + "_" + timeDataFolderSensor1 + "_Video3D.Avi";
video_writer.SetFileName(vid_3d_path);
video_writer.SetRate(10);
video_writer.Start();
iren.SetRenderWindow(renWin);
while (true)
{
points = vtkPoints.New();
points.InsertNextPoint(0, 1, 0);
colors = vtkUnsignedCharArray.New();
colors.SetName("colors");
colors.SetNumberOfComponents(3);
colors.InsertNextTuple3(250, 250, 250);
if (numSensorsReceive > 0 && Sensor1Disp)
{
_waitHandle.WaitOne();
if (VTK_DotNum1 > 0)
{
for (int i = 1; i < VTK_DotNum1; i++)
{
//points.InsertNextPoint((double)VTK_Det1_PclXpos[i], (double)VTK_Det1_PclZpos[i], vtkMath.Random(0, 0));
double plot_x = -300 + (double)(600.0 * ((VTK_Det1_PclXpos[i] - pbTopViewAxisXMin) / (pbTopViewAxisXMax - pbTopViewAxisXMin)));
double plot_z = -300 + (double)(600.0 * ((VTK_Det1_PclZpos[i] - pbTopViewAxisYMin) / (pbTopViewAxisYMax - pbTopViewAxisYMin)));
double plot_y = -300 + (double)(600.0 * ((VTK_Det1_PclYpos[i] - pbTopViewAxisXMin) / (pbTopViewAxisXMax - pbTopViewAxisXMin)));
points.InsertNextPoint(plot_x,plot_z, plot_y);
colors.InsertNextTuple3(VTK_Det1_Color_R[i], VTK_Det1_Color_G[i], VTK_Det1_Color_B[i]);
}
}
}
profile = vtkPolyData.New();
profile.SetPoints(points);
profile.GetPointData().AddArray(colors);
// Perform a 2D Delaunay triangulation on them.
del = vtkDelaunay2D.New();
del.SetInput(profile);
del.SetTolerance(0.1);
mapMesh = vtkPolyDataMapper.New();
mapMesh.SetInputConnection(del.GetOutputPort());
meshActor = vtkActor.New();
meshActor.SetMapper(mapMesh);
ball = vtkSphereSource.New();
ball.SetRadius(1.3);
ball.SetThetaResolution(4);
ball.SetPhiResolution(4);
balls = vtkGlyph3D.New();
balls.SetInputConnection(del.GetOutputPort());
balls.SetSourceConnection(ball.GetOutputPort());
balls.SetInputArrayToProcess(3, 0, (int)vtkDataObject.FieldAssociations.FIELD_ASSOCIATION_POINTS, (int)vtkDataSetAttributes.AttributeTypes.SCALARS, "colors");
balls.SetColorModeToColorByScalar();
mapBalls = vtkPolyDataMapper.New();
mapBalls.SetInputConnection(balls.GetOutputPort());
ballActor = vtkActor.New();
ballActor.SetMapper(mapBalls);
//ballActor.GetProperty().SetSpecularColor(2, 2, 2);
//ballActor.GetProperty().SetSpecular(0.1);
//ballActor.GetProperty().SetSpecularPower(20);
//ballActor.GetProperty().SetAmbient(0.2);
//ballActor.GetProperty().SetDiffuse(0.9);
ren1.AddViewProp(ballActor);
renWin.Render();
double frame_rate = 1 / ren1.GetLastRenderTimeInSeconds();
Console.WriteLine("frame rate " + frame_rate.ToString());
image_filter.Modified();
video_writer.Write();
if (!render3d)
{
iren.Initialize();
iren.Start();
}
ren1.RemoveViewProp(ballActor);
if (isAppCloseClick)
{
deleteAllVTKObjects();
}
}
}
}
vtkCamera camera = vtkCamera.New();
vtkPoints points;
vtkPolyData profile;
vtkDelaunay2D del;
vtkPolyDataMapper mapMesh;
vtkActor meshActor;
vtkSphereSource ball;
vtkGlyph3D balls;
vtkPolyDataMapper mapBalls;
vtkActor ballActor;
vtkRenderer ren1 = vtkRenderer.New();
//vtkWin32OpenGLRenderWindow ren1 = vtkWin32OpenGLRenderWindow.New();
vtkRenderWindow renWin = vtkRenderWindow.New();
//vtkWin32OpenGLRenderWindow renWin = vtkWin32OpenGLRenderWindow.New();
vtkRenderWindowInteractor iren = vtkRenderWindowInteractor.New();
vtkWindowToImageFilter image_filter;
vtkAVIWriter video_writer;
vtkUnsignedCharArray colors;