void Run() { // Create a selection window. We will display the point and cell ids // that lie within this window. int xmin = 200; xLength = 100; xmax = xmin + xLength; int ymin = 200; yLength = 100; ymax = ymin + yLength; pts = new vtk.vtkPoints(); pts.InsertPoint(0, xmin, ymin, 0); pts.InsertPoint(1, xmax, ymin, 0); pts.InsertPoint(2, xmax, ymax, 0); pts.InsertPoint(3, xmin, ymax, 0); vtk.vtkCellArray rect = new vtk.vtkCellArray(); rect.InsertNextCell(5); rect.InsertCellPoint(0); rect.InsertCellPoint(1); rect.InsertCellPoint(2); rect.InsertCellPoint(3); rect.InsertCellPoint(0); vtk.vtkPolyData selectRect = new vtk.vtkPolyData(); selectRect.SetPoints(pts); selectRect.SetLines(rect); vtk.vtkPolyDataMapper2D rectMapper = new vtk.vtkPolyDataMapper2D(); rectMapper.SetInput(selectRect); vtk.vtkActor2D rectActor = new vtk.vtkActor2D(); rectActor.SetMapper(rectMapper); // Create a sphere and its associated mapper and actor. vtk.vtkSphereSource sphere = new vtk.vtkSphereSource(); vtk.vtkPolyDataMapper sphereMapper = new vtk.vtkPolyDataMapper(); sphereMapper.SetInputConnection(sphere.GetOutputPort()); vtk.vtkPolyDataMapper.GlobalImmediateModeRenderingOn(); vtk.vtkActor sphereActor = new vtk.vtkActor(); sphereActor.SetMapper(sphereMapper); // Generate data arrays containing point and cell ids vtk.vtkIdFilter ids = new vtk.vtkIdFilter(); ids.SetInputConnection(sphere.GetOutputPort()); ids.PointIdsOn(); ids.CellIdsOn(); ids.FieldDataOn(); // Create the renderer here because vtkSelectVisiblePoints needs it. vtk.vtkRenderer ren = new vtk.vtkRenderer(); // Create labels for points visPts = new vtk.vtkSelectVisiblePoints(); visPts.SetInputConnection(ids.GetOutputPort()); visPts.SetRenderer(ren); visPts.SelectionWindowOn(); visPts.SetSelection(xmin, xmin + xLength, ymin, ymin + yLength); // Create the mapper to display the point ids. Specify the format to // use for the labels. Also create the associated actor. vtk.vtkLabeledDataMapper ldm = new vtk.vtkLabeledDataMapper(); ldm.SetInputConnection(visPts.GetOutputPort()); ldm.SetLabelFormat("%g"); ldm.SetLabelModeToLabelFieldData(); vtk.vtkActor2D pointLabels = new vtk.vtkActor2D(); pointLabels.SetMapper(ldm); // Create labels for cells vtk.vtkCellCenters cc = new vtk.vtkCellCenters(); cc.SetInputConnection(ids.GetOutputPort()); visCells = new vtk.vtkSelectVisiblePoints(); visCells.SetInputConnection(cc.GetOutputPort()); visCells.SetRenderer(ren); visCells.SelectionWindowOn(); visCells.SetSelection(xmin, xmin + xLength, ymin, ymin + yLength); // Create the mapper to display the cell ids. Specify the format to // use for the labels. Also create the associated actor. vtk.vtkLabeledDataMapper cellMapper = new vtk.vtkLabeledDataMapper(); cellMapper.SetInputConnection(visCells.GetOutputPort()); cellMapper.SetLabelFormat("%g"); cellMapper.SetLabelModeToLabelFieldData(); cellMapper.GetLabelTextProperty().SetColor(0, 1, 0); vtk.vtkActor2D cellLabels = new vtk.vtkActor2D(); cellLabels.SetMapper(cellMapper); // Create the RenderWindow and RenderWindowInteractor renWin = new vtk.vtkRenderWindow(); renWin.AddRenderer(ren); vtk.vtkRenderWindowInteractor iren = new vtk.vtkRenderWindowInteractor(); iren.SetRenderWindow(renWin); // Add the actors to the renderer; set the background and size; // render ren.AddActor(sphereActor); ren.AddActor2D(rectActor); ren.AddActor2D(pointLabels); ren.AddActor2D(cellLabels); ren.SetBackground(1, 1, 1); renWin.SetSize(500, 500); // Initialize the interactor. iren.Initialize(); renWin.Render(); // Move the selection window across the data set. MoveWindow(); // Put the selection window in the center of the render window. // This works because the xmin = ymin = 200, xLength = yLength = 100, and // the render window size is 500 x 500. PlaceWindow(xmin, ymin); // Now start normal interaction. iren.Start(); vtk.vtkWin32OpenGLRenderWindow win32win = vtk.vtkWin32OpenGLRenderWindow.SafeDownCast(renWin); if (null != win32win) win32win.Clean(); }
private void UpdateRendererOutline(ref vtk.vtkActor2D outlineRendererActor, ref vtk.vtkPolyData polyData, vtk.vtkRenderer renderer) { try { if (outlineRendererActor == null) { outlineRendererActor = new vtk.vtkActor2D(); polyData = new vtk.vtkPolyData(); polyData.Allocate(5, 0); vtk.vtkIdList idList = new vtk.vtkIdList(); idList.SetNumberOfIds(5); vtk.vtkPoints points = new vtk.vtkPoints(); idList.InsertId(0, points.InsertNextPoint(1, 1, 0)); idList.InsertId(1, points.InsertNextPoint(2, 1, 0)); idList.InsertId(2, points.InsertNextPoint(2, 2, 0)); idList.InsertId(3, points.InsertNextPoint(1, 2, 0)); idList.InsertId(4, idList.GetId(0)); polyData.SetPoints(points); polyData.InsertNextCell(4, idList); vtk.vtkCoordinate coordinate = new vtk.vtkCoordinate(); coordinate.SetCoordinateSystemToDisplay(); vtk.vtkPolyDataMapper2D mapper = new vtk.vtkPolyDataMapper2D(); mapper.SetInput(polyData); mapper.SetTransformCoordinate(coordinate); outlineRendererActor.SetMapper(mapper); outlineRendererActor.SetPosition(0, 0); outlineRendererActor.SetPosition2(1, 1); renderer.AddActor(outlineRendererActor); } double[] vp = renderer.GetViewport(); renderer.NormalizedDisplayToDisplay(ref vp[0], ref vp[1]); renderer.NormalizedDisplayToDisplay(ref vp[2], ref vp[3]); polyData.GetPoints().SetPoint(0, vp[0], vp[1], 0); polyData.GetPoints().SetPoint(1, vp[2], vp[1], 0); polyData.GetPoints().SetPoint(2, vp[2], vp[3], 0); polyData.GetPoints().SetPoint(3, vp[0], vp[3], 0); // Change Outline color and width double[] normalOutlineColor = ApplicationOptions.Instance().RendererLayoutOptions.NormalOutlineColor; float normalOutlineWidth = ApplicationOptions.Instance().RendererLayoutOptions.NormalOutlineLineWidth; if (renderer == IApp.theApp.RendererManager.ActiveRenderer) { normalOutlineColor = ApplicationOptions.Instance().RendererLayoutOptions.ActiveOutlineColor; normalOutlineWidth = ApplicationOptions.Instance().RendererLayoutOptions.ActiveOutlineLineWidth; } outlineRendererActor.GetProperty().SetColor(normalOutlineColor); outlineRendererActor.GetProperty().SetLineWidth(normalOutlineWidth); } catch (Exception ex) { string errMsg = ex.Message + "\n" + ex.StackTrace; vtk.vtkOutputWindow.GetInstance().DisplayErrorText(errMsg); } }