/* * In this function, first need to build the color table, * and then add the text */ public void VTKInfoBuilder(ref vtkActor2D actor) { vtkActor2D colorTextActor = new vtkActor2D(); vtkTextMapper colorText = new vtkTextMapper(); colorTextActor.SetMapper(colorText); //Generate the string: string outPutChartString = ""; outPutChartString += "[Model Details]\n"; outPutChartString += "Phase: " + WorkSpaceInstance.Env.GetModelGeneratingPhase() + "\n"; outPutChartString += "ModelType: " + WorkSpaceInstance.Env.GetModelTypeString() + "\n"; outPutChartString += "Model Name: " + WorkSpaceInstance.Env.GetCurrentTowerModelName() + "\n"; outPutChartString += "\n"; outPutChartString += "Min: " + TowerModelInstance.GetColorGenColorTableMinvalue().ToString() + " Max: " + TowerModelInstance.GetColorGenColorTableMaxValue().ToString() + "\n"; colorText.SetInput(outPutChartString); colorText.GetTextProperty().SetFontSize(12); colorText.GetTextProperty().SetFontFamilyToArial(); //colorText.GetTextProperty().SetColor(225, 39, 39); colorTextActor.SetDisplayPosition(20, 50); actor = colorTextActor; }
void Test() { foreach (var actor in m_actorDict.Keys) { int xmin = 0; int xlength = 1000; int xmax = xmin + xlength; int ymin = 0; int ylength = 1000; int ymax = ymin + ylength; int[] pos = { xmin, xmin + xlength, ymin, ymin + ylength }; #region RECT vtkPoints pts = vtkPoints.New(); pts.InsertPoint(0, xmin, ymin, 0); pts.InsertPoint(1, xmax, ymin, 0); pts.InsertPoint(2, xmax, ymax, 0); pts.InsertPoint(3, xmin, ymax, 0); vtkCellArray rect = vtkCellArray.New(); rect.InsertNextCell(5); rect.InsertCellPoint(0); rect.InsertCellPoint(1); rect.InsertCellPoint(2); rect.InsertCellPoint(3); rect.InsertCellPoint(0); vtkPolyData selectRect = vtkPolyData.New(); selectRect.SetPoints(pts); selectRect.SetLines(rect); vtkPolyDataMapper2D rectMapper = vtkPolyDataMapper2D.New(); rectMapper.SetInput(selectRect); vtkActor2D rectActor = vtkActor2D.New(); rectActor.SetMapper(rectMapper); m_render.AddActor(rectActor); #endregion vtkIdFilter ids = vtkIdFilter.New(); ids.SetInput(actor.GetMapper().GetInput()); //ids.SetInputConnection( actor.GetMapper().GetOutputPort()); ids.PointIdsOn(); ids.FieldDataOn(); vtkSelectVisiblePoints visPts = vtkSelectVisiblePoints.New(); visPts.SetInput(ids.GetOutput()); visPts.SetRenderer(m_render); visPts.SelectInvisibleOn(); visPts.SelectionWindowOn(); //visPts.SelectInvisibleOff(); visPts.SetSelection(pos[0], pos[1], pos[2], pos[3]); vtkLabeledDataMapper labelMapper = vtkLabeledDataMapper.New(); labelMapper.SetInputConnection(visPts.GetOutputPort()); // labelMapper.SetInput(visPts.GetInput()); labelMapper.SetLabelModeToLabelFieldData(); vtkActor2D actor2d = vtkActor2D.New(); actor2d.SetMapper(labelMapper); m_render.AddActor(actor2d); } m_render.Render(); }
private void CreateViewportBorder(vtkRenderer renderer, double[] color) { ModelLoaded = false; // points start at upper right and proceed anti-clockwise vtkPoints points = vtkPoints.New(); points.SetNumberOfPoints(4); points.InsertPoint(0, 1, 1, 0); points.InsertPoint(1, 1e-3, 1, 0); points.InsertPoint(2, 1e-3, 1e-3, 0); points.InsertPoint(3, 1, 1e-3, 0); // create cells, and lines vtkCellArray cells = vtkCellArray.New(); cells.Initialize(); vtkPolyLine lines = vtkPolyLine.New(); lines.GetPointIds().SetNumberOfIds(5); for (int i = 0; i < 4; ++i) { lines.GetPointIds().SetId(i, i); } lines.GetPointIds().SetId(4, 0); cells.InsertNextCell(lines); // now make tge polydata and display it vtkPolyData poly = vtkPolyData.New(); poly.Initialize(); poly.SetPoints(points); poly.SetLines(cells); // use normalized viewport coordinates since // they are independent of window size vtkCoordinate coordinate = vtkCoordinate.New(); coordinate.SetCoordinateSystemToNormalizedViewport(); vtkPolyDataMapper2D mapper = vtkPolyDataMapper2D.New(); mapper.SetInput(poly); mapper.SetTransformCoordinate(coordinate); vtkActor2D actor = vtkActor2D.New(); actor.SetMapper(mapper); actor.GetProperty().SetColor(color[0], color[1], color[2]); // line width should be at least 2 to be visible at extremes actor.GetProperty().SetLineWidth((float)2.0); // Line Width renderer.AddViewProp(actor); }
private vtkActor2D VirtualHeaterVTKBuilder() { vtkActor2D actor = vtkActor2D.New(); vtkPoints pointSource = vtkPoints.New(); vtkStringArray labels = vtkStringArray.New(); vtkCellArray verts = vtkCellArray.New(); TowerModelInstance.VTKLabelGetter(ref pointSource, ref labels, ref verts, paras, WorkSpaceInstance); //MessageBox.Show(labels.ToString()); vtkPolyData polyData = vtkPolyData.New(); polyData.SetPoints(pointSource); polyData.SetVerts(verts); polyData.GetPointData().AddArray(labels); vtkTextProperty textProp = vtkTextProperty.New(); textProp.SetFontSize(12); //textProp.SetColor(1.0, 1.0, 0.5); textProp.SetFontFamilyToArial(); vtkPointSetToLabelHierarchy hie = vtkPointSetToLabelHierarchy.New(); hie.SetInput(polyData); hie.SetMaximumDepth(15); hie.SetLabelArrayName("111"); hie.SetTargetLabelCount(100); hie.SetTextProperty(textProp); vtkLabelPlacementMapper labelMapper = new vtkLabelPlacementMapper(); labelMapper.SetInputConnection(hie.GetOutputPort()); vtkFreeTypeLabelRenderStrategy strategy = new vtkFreeTypeLabelRenderStrategy(); labelMapper.SetRenderStrategy(strategy); labelMapper.UseDepthBufferOn(); labelMapper.SetShapeToNone(); labelMapper.SetStyleToOutline(); //labelMapper.UseUnicodeStringsOff(); actor.SetMapper(labelMapper); return(actor); }
//vtkPoints points = vtkPoints.New(); //points.InsertNextPoint(0.0, 0.0, 0.0); //points.InsertNextPoint(200.0, 0.0, 0.0); //points.InsertNextPoint(200.0, 200.0, 0.0); //points.InsertNextPoint(0.0, 200.0, 0.0); //points.InsertNextPoint(0.0, 0.0, 0.0); //vtkPolygon polygon = vtkPolygon.New(); //polygon.GetPointIds().SetNumberOfIds(5); //for (int i = 0; i < 5; i++) //{ // polygon.GetPointIds().SetId(i, i); //} public vtkActor2D AddMarkerLine(double[] startCoords, double[] endCoords, Color color) { vtkPoints points = vtkPoints.New(); points.InsertNextPoint(startCoords[0], startCoords[1], 0.0); points.InsertNextPoint(endCoords[0], endCoords[1], 0.0); vtkPolyLine line = vtkPolyLine.New(); line.GetPointIds().SetNumberOfIds(2); for (int i = 0; i < 2; i++) { line.GetPointIds().SetId(i, i); } vtkCellArray cellArray = vtkCellArray.New(); cellArray.InsertNextCell(line); vtkPolyData polyData = vtkPolyData.New(); polyData.SetPoints(points); polyData.SetLines(cellArray); vtkPolyDataMapper2D mapper = vtkPolyDataMapper2D.New(); mapper.SetInputData(polyData); vtkActor2D actor = vtkActor2D.New(); actor.SetMapper(mapper); actor.GetProperty().SetOpacity((float)color.A / 255); actor.GetProperty().SetColor((float)color.R / 255, (float)color.G / 255, (float)color.B / 255); _markerLayerRenderer.AddActor(actor); return(actor); }
static void Main(string[] args) { // create a sphere source, mapper, and actor vtkSphereSource sphere = new vtkSphereSource(); vtkPolyDataMapper sphereMapper = new vtkPolyDataMapper(); sphereMapper.SetInputConnection(sphere.GetOutputPort()); vtkPolyDataMapper.GlobalImmediateModeRenderingOn(); vtkLODActor sphereActor = new vtkLODActor(); sphereActor.SetMapper(sphereMapper); // create the spikes by glyphing the sphere with a cone. Create the // mapper and actor for the glyphs. vtkConeSource cone = new vtkConeSource(); vtkGlyph3D glyph = new vtkGlyph3D(); glyph.SetInputConnection(sphere.GetOutputPort()); glyph.SetSource(cone.GetOutput()); glyph.SetVectorModeToUseNormal(); glyph.SetScaleModeToScaleByVector(); glyph.SetScaleFactor(0.25); vtkPolyDataMapper spikeMapper = new vtkPolyDataMapper(); spikeMapper.SetInputConnection(glyph.GetOutputPort()); vtkLODActor spikeActor = new vtkLODActor(); spikeActor.SetMapper(spikeMapper); // Create a text mapper and actor to display the results of picking. vtkTextMapper textMapper = new vtkTextMapper(); vtkTextProperty tprop = textMapper.GetTextProperty(); tprop.SetFontFamilyToArial(); tprop.SetFontSize(10); tprop.BoldOn(); tprop.ShadowOn(); tprop.SetColor(1, 0, 0); vtkActor2D textActor = new vtkActor2D(); textActor.VisibilityOff(); textActor.SetMapper(textMapper); // Create a cell picker. vtkCellPicker picker = new vtkCellPicker(); PickData pd = new PickData(); pd.textActor = textActor; pd.textMapper = textMapper; vtkDotNetCallback cb = new vtkDotNetCallback(pd.annotatePickCallback); // Now at the end of the pick event call the above function. picker.AddObserver((uint) EventIds.EndPickEvent, cb); // Create the Renderer, RenderWindow, etc. and set the Picker. vtkRenderer ren = new vtkRenderer(); vtkRenderWindow renWin = new vtkRenderWindow(); renWin.AddRenderer(ren); vtkRenderWindowInteractor iren = new vtkRenderWindowInteractor(); iren.SetRenderWindow(renWin); iren.SetPicker(picker); // Add the actors to the renderer, set the background and size ren.AddActor2D(textActor); ren.AddActor(sphereActor); ren.AddActor(spikeActor); ren.SetBackground(1, 1, 1); renWin.SetSize(300, 300); // Get the camera and zoom in closer to the image. ren.ResetCamera(); vtkCamera cam1 = ren.GetActiveCamera(); cam1.Zoom(1.4); iren.Initialize(); // Initially pick the cell at this location. picker.Pick(85, 126, 0, ren); renWin.Render(); iren.Start(); vtkWin32OpenGLRenderWindow win32win = vtkWin32OpenGLRenderWindow.SafeDownCast(renWin); if (null != win32win) win32win.Clean(); }
/// <summary> /// The main entry method called by the CSharp driver /// </summary> /// <param name="argv"></param> public static void AVlabeledContours(String [] argv) { //Prefix Content is: "" // demonstrate labeling of contour with scalar value[] // Create the RenderWindow, Renderer and both Actors[] //[] ren1 = vtkRenderer.New(); renWin = vtkRenderWindow.New(); renWin.SetMultiSamples(0); renWin.AddRenderer((vtkRenderer)ren1); iren = new vtkRenderWindowInteractor(); iren.SetRenderWindow((vtkRenderWindow)renWin); // Read a slice and contour it[] v16 = new vtkVolume16Reader(); v16.SetDataDimensions((int)64,(int)64); v16.GetOutput().SetOrigin((double)0.0,(double)0.0,(double)0.0); v16.SetDataByteOrderToLittleEndian(); v16.SetFilePrefix((string)"" + (VTK_DATA_ROOT.ToString()) + "/Data/headsq/quarter"); v16.SetImageRange((int)45,(int)45); v16.SetDataSpacing((double)3.2,(double)3.2,(double)1.5); iso = new vtkContourFilter(); iso.SetInputConnection((vtkAlgorithmOutput)v16.GetOutputPort()); iso.GenerateValues((int)6,(double)500,(double)1150); iso.Update(); numPts = iso.GetOutput().GetNumberOfPoints(); isoMapper = vtkPolyDataMapper.New(); isoMapper.SetInputConnection((vtkAlgorithmOutput)iso.GetOutputPort()); isoMapper.ScalarVisibilityOn(); isoMapper.SetScalarRange((double)((vtkDataSet)iso.GetOutput()).GetScalarRange()[0],(double)((vtkDataSet)iso.GetOutput()).GetScalarRange()[1]); isoActor = new vtkActor(); isoActor.SetMapper((vtkMapper)isoMapper); // Subsample the points and label them[] mask = new vtkMaskPoints(); mask.SetInputConnection((vtkAlgorithmOutput)iso.GetOutputPort()); mask.SetOnRatio((int)(numPts/50)); mask.SetMaximumNumberOfPoints((int)50); mask.RandomModeOn(); // Create labels for points - only show visible points[] visPts = new vtkSelectVisiblePoints(); visPts.SetInputConnection((vtkAlgorithmOutput)mask.GetOutputPort()); visPts.SetRenderer((vtkRenderer)ren1); ldm = new vtkLabeledDataMapper(); ldm.SetInputConnection((vtkAlgorithmOutput)mask.GetOutputPort()); // ldm SetLabelFormat "%g"[] ldm.SetLabelModeToLabelScalars(); tprop = ldm.GetLabelTextProperty(); tprop.SetFontFamilyToArial(); tprop.SetFontSize((int)10); tprop.SetColor((double)1,(double)0,(double)0); contourLabels = new vtkActor2D(); contourLabels.SetMapper((vtkMapper2D)ldm); // Add the actors to the renderer, set the background and size[] //[] ren1.AddActor2D((vtkProp)isoActor); ren1.AddActor2D((vtkProp)contourLabels); ren1.SetBackground((double)1,(double)1,(double)1); renWin.SetSize((int)500,(int)500); renWin.Render(); ren1.GetActiveCamera().Zoom((double)1.5); // render the image[] //[] // prevent the tk window from showing up then start the event loop[] //deleteAllVTKObjects(); }
static void ReadSupport(string Spath) { vtkJPEGReader reader = vtkJPEGReader.New(); reader.SetFileName(Spath); reader.Update(); // Visualize _ImageViewer = vtkImageViewer2.New(); _ImageViewer.SetInputConnection(reader.GetOutputPort()); _SliceStatusMapper = vtkTextMapper.New(); _SliceStatusMapper.SetInputConnection(reader.GetOutputPort()); vtkActor2D sliceStatusActor = vtkActor2D.New(); sliceStatusActor.SetMapper(_SliceStatusMapper); vtkRenderWindow renderWindow = vtkRenderWindow.New(); //Display in full screen renderWindow.SetFullScreen(1); vtkInteractorStyleImage interactorStyle = vtkInteractorStyleImage.New(); renderWindow.GetRenderers().InitTraversal(); vtkRenderer ren; while ((ren = renderWindow.GetRenderers().GetNextItem()) != null) { renderWindow.AddRenderer(ren); } _ImageViewer.SetRenderWindow(renderWindow); _ImageViewer.GetRenderer().AddActor2D(sliceStatusActor); _ImageViewer.SetSlice(_SupportSlice); iren = vtkRenderWindowInteractor.New(); iren.SetRenderWindow(renderWindow); renderWindow.Render(); _ColorLevel = 60; _ImageViewer.SetColorLevel(_BlackLevel); _ImageViewer.Render(); Down(_period, 170); Backward(_period, 1); for (int i = 0; i < _SupportLayers; i++) { System.Threading.Thread.Sleep(_layertime); // delay Backward(_period, 1); } _ImageViewer.SetColorLevel(_BlackLevel); _ImageViewer.Render(); Forward(_period, _MovedLayers); Console.WriteLine(_MovedLayers); if (reader != null) { reader.Dispose(); } if (_ImageViewer != null) { _ImageViewer.Dispose(); } if (_SliceStatusMapper != null) { _SliceStatusMapper.Dispose(); } if (sliceStatusActor != null) { sliceStatusActor.Dispose(); } if (renderWindow != null) { renderWindow.Dispose(); } if (interactorStyle != null) { interactorStyle.Dispose(); } if (ren != null) { ren.Dispose(); } if (iren != null) { iren.Dispose(); } }
static void PrintImage(string Ipath) { vtkDICOMImageReader reader = vtkDICOMImageReader.New(); reader.SetDirectoryName(Ipath); reader.Update(); X = reader.GetWidth(); Y = reader.GetHeight(); Z = reader.GetPixelSpacing(); Console.WriteLine(X * Z[0]); Console.WriteLine(Y * Z[1]); Console.WriteLine(Z[2]); // Visualize _ImageViewer = vtkImageViewer2.New(); _ImageViewer.SetInputConnection(reader.GetOutputPort()); // Get range of slices (min is the first index, max is the last index) _ImageViewer.GetSliceRange(ref _MinSlice, ref _MaxSlice); Console.WriteLine(_MinSlice); Console.WriteLine(_MaxSlice); _SliceStatusMapper = vtkTextMapper.New(); _SliceStatusMapper.SetInputConnection(reader.GetOutputPort()); vtkActor2D sliceStatusActor = vtkActor2D.New(); sliceStatusActor.SetMapper(_SliceStatusMapper); vtkRenderWindow renderWindow = vtkRenderWindow.New(); //Display in full screen renderWindow.SetFullScreen(1); vtkInteractorStyleImage interactorStyle = vtkInteractorStyleImage.New(); renderWindow.GetRenderers().InitTraversal(); vtkRenderer ren; while ((ren = renderWindow.GetRenderers().GetNextItem()) != null) { renderWindow.AddRenderer(ren); } _ImageViewer.SetRenderWindow(renderWindow); _ImageViewer.GetRenderer().AddActor2D(sliceStatusActor); _ImageViewer.SetSlice(_Slice); _ColorLevel = 500; _ImageViewer.SetColorLevel(_BlackLevel); _ImageViewer.Render(); Down(_period, 62); Backward(_period, 1); _ImageViewer.SetColorLevel(_ColorLevel); _ImageViewer.Render(); System.Threading.Thread.Sleep(_layertime); // delay iren = vtkRenderWindowInteractor.New(); iren.SetRenderWindow(renderWindow); renderWindow.Render(); //Start Timer InitTimer(); iren.Start(); if (reader != null) { reader.Dispose(); } if (_ImageViewer != null) { _ImageViewer.Dispose(); } if (_SliceStatusMapper != null) { _SliceStatusMapper.Dispose(); } if (sliceStatusActor != null) { sliceStatusActor.Dispose(); } if (renderWindow != null) { renderWindow.Dispose(); } if (interactorStyle != null) { interactorStyle.Dispose(); } if (ren != null) { ren.Dispose(); } if (iren != null) { iren.Dispose(); } }
private void Subdivision(string filePath) { vtkPolyData originalMesh; if (filePath != null) { vtkXMLPolyDataReader reader = vtkXMLPolyDataReader.New(); reader.SetFileName(filePath); // Subdivision filters only work on triangles vtkTriangleFilter triangles = vtkTriangleFilter.New(); triangles.SetInputConnection(reader.GetOutputPort()); triangles.Update(); originalMesh = triangles.GetOutput(); } else { vtkSphereSource sphereSource = vtkSphereSource.New(); sphereSource.Update(); originalMesh = sphereSource.GetOutput(); } Debug.WriteLine("Before subdivision"); Debug.WriteLine(" There are " + originalMesh.GetNumberOfPoints() + " points."); Debug.WriteLine(" There are " + originalMesh.GetNumberOfPolys() + " triangles."); int numberOfViewports = 3; vtkRenderWindow renderWindow = renderWindowControl1.RenderWindow; this.Size = new System.Drawing.Size(200 * numberOfViewports + 12, 252); this.Text += " - Subdivision"; Random rnd = new Random(2); int numberOfSubdivisions = 2; // Create one text property for all vtkTextProperty textProperty = vtkTextProperty.New(); textProperty.SetFontSize(14); textProperty.SetJustificationToCentered(); for (int i = 0; i < numberOfViewports; i++) { // Note: Here we create a superclass pointer (vtkPolyDataAlgorithm) so that we can easily instantiate different // types of subdivision filters. Typically you would not want to do this, but rather create the pointer to be the type // filter you will actually use, e.g. // <vtkLinearSubdivisionFilter> subdivisionFilter = <vtkLinearSubdivisionFilter>.New(); vtkPolyDataAlgorithm subdivisionFilter; switch (i) { case 0: subdivisionFilter = vtkLinearSubdivisionFilter.New(); ((vtkLinearSubdivisionFilter)subdivisionFilter).SetNumberOfSubdivisions(numberOfSubdivisions); break; case 1: subdivisionFilter = vtkLoopSubdivisionFilter.New(); ((vtkLoopSubdivisionFilter)subdivisionFilter).SetNumberOfSubdivisions(numberOfSubdivisions); break; case 2: subdivisionFilter = vtkButterflySubdivisionFilter.New(); ((vtkButterflySubdivisionFilter)subdivisionFilter).SetNumberOfSubdivisions(numberOfSubdivisions); break; default: subdivisionFilter = vtkLinearSubdivisionFilter.New(); ((vtkLinearSubdivisionFilter)subdivisionFilter).SetNumberOfSubdivisions(numberOfSubdivisions); break; } #if VTK_MAJOR_VERSION_5 subdivisionFilter.SetInputConnection(originalMesh.GetProducerPort()); #else subdivisionFilter.SetInputData(originalMesh); #endif subdivisionFilter.Update(); vtkRenderer renderer = vtkRenderer.New(); renderWindow.AddRenderer(renderer); renderer.SetViewport((float)i / numberOfViewports, 0, (float)(i + 1) / numberOfViewports, 1); renderer.SetBackground(.2 + rnd.NextDouble() / 8, .3 + rnd.NextDouble() / 8, .4 + rnd.NextDouble() / 8); vtkTextMapper textMapper = vtkTextMapper.New(); vtkActor2D textActor = vtkActor2D.New(); textMapper.SetInput(subdivisionFilter.GetClassName()); textMapper.SetTextProperty(textProperty); textActor.SetMapper(textMapper); textActor.SetPosition(100, 16); //Create a mapper and actor vtkPolyDataMapper mapper = vtkPolyDataMapper.New(); mapper.SetInputConnection(subdivisionFilter.GetOutputPort()); vtkActor actor = vtkActor.New(); actor.SetMapper(mapper); renderer.AddActor(actor); renderer.AddActor(textActor); renderer.ResetCamera(); } renderWindow.Render(); }
/// <summary> /// The main entry method called by the CSharp driver /// </summary> /// <param name="argv"></param> public static void AVlabeledContours(String [] argv) { //Prefix Content is: "" // demonstrate labeling of contour with scalar value[] // Create the RenderWindow, Renderer and both Actors[] //[] ren1 = vtkRenderer.New(); renWin = vtkRenderWindow.New(); renWin.SetMultiSamples(0); renWin.AddRenderer((vtkRenderer)ren1); iren = new vtkRenderWindowInteractor(); iren.SetRenderWindow((vtkRenderWindow)renWin); // Read a slice and contour it[] v16 = new vtkVolume16Reader(); v16.SetDataDimensions((int)64, (int)64); v16.GetOutput().SetOrigin((double)0.0, (double)0.0, (double)0.0); v16.SetDataByteOrderToLittleEndian(); v16.SetFilePrefix((string)"" + (VTK_DATA_ROOT.ToString()) + "/Data/headsq/quarter"); v16.SetImageRange((int)45, (int)45); v16.SetDataSpacing((double)3.2, (double)3.2, (double)1.5); iso = new vtkContourFilter(); iso.SetInputConnection((vtkAlgorithmOutput)v16.GetOutputPort()); iso.GenerateValues((int)6, (double)500, (double)1150); iso.Update(); numPts = iso.GetOutput().GetNumberOfPoints(); isoMapper = vtkPolyDataMapper.New(); isoMapper.SetInputConnection((vtkAlgorithmOutput)iso.GetOutputPort()); isoMapper.ScalarVisibilityOn(); isoMapper.SetScalarRange((double)((vtkDataSet)iso.GetOutput()).GetScalarRange()[0], (double)((vtkDataSet)iso.GetOutput()).GetScalarRange()[1]); isoActor = new vtkActor(); isoActor.SetMapper((vtkMapper)isoMapper); // Subsample the points and label them[] mask = new vtkMaskPoints(); mask.SetInputConnection((vtkAlgorithmOutput)iso.GetOutputPort()); mask.SetOnRatio((int)(numPts / 50)); mask.SetMaximumNumberOfPoints((int)50); mask.RandomModeOn(); // Create labels for points - only show visible points[] visPts = new vtkSelectVisiblePoints(); visPts.SetInputConnection((vtkAlgorithmOutput)mask.GetOutputPort()); visPts.SetRenderer((vtkRenderer)ren1); ldm = new vtkLabeledDataMapper(); ldm.SetInputConnection((vtkAlgorithmOutput)mask.GetOutputPort()); // ldm SetLabelFormat "%g"[] ldm.SetLabelModeToLabelScalars(); tprop = ldm.GetLabelTextProperty(); tprop.SetFontFamilyToArial(); tprop.SetFontSize((int)10); tprop.SetColor((double)1, (double)0, (double)0); contourLabels = new vtkActor2D(); contourLabels.SetMapper((vtkMapper2D)ldm); // Add the actors to the renderer, set the background and size[] //[] ren1.AddActor2D((vtkProp)isoActor); ren1.AddActor2D((vtkProp)contourLabels); ren1.SetBackground((double)1, (double)1, (double)1); renWin.SetSize((int)500, (int)500); renWin.Render(); ren1.GetActiveCamera().Zoom((double)1.5); // render the image[] //[] // prevent the tk window from showing up then start the event loop[] //deleteAllVTKObjects(); }
private void ReadDICOMSeries() { // Path to vtk data must be set as an environment variable // VTK_DATA_ROOT = "C:\VTK\vtkdata-5.8.0" vtkTesting test = vtkTesting.New(); string root = test.GetDataRoot(); // Read all the DICOM files in the specified directory. // Caution: folder "DicomTestImages" don't exists by default in the standard vtk data folder // sample data are available at http://www.vtk.org/Wiki/images/1/12/VTK_Examples_StandardFormats_Input_DicomTestImages.zip //string folder = Path.Combine(root, @"Data\DicomTestImages"); string folder = @"provaDicom/" + studyUID; Console.WriteLine(folder); vtkDICOMImageReader reader = vtkDICOMImageReader.New(); reader.SetDirectoryName(folder); reader.Update(); // Visualize _ImageViewer = vtkImageViewer2.New(); _ImageViewer.SetInputConnection(reader.GetOutputPort()); // get range of slices (min is the first index, max is the last index) _ImageViewer.GetSliceRange(ref _MinSlice, ref _MaxSlice); Debug.WriteLine("slices range from : " + _MinSlice.ToString() + " to " + _MaxSlice.ToString()); // slice status message vtkTextProperty sliceTextProp = vtkTextProperty.New(); sliceTextProp.SetFontFamilyToCourier(); sliceTextProp.SetFontSize(20); sliceTextProp.SetVerticalJustificationToBottom(); sliceTextProp.SetJustificationToLeft(); _SliceStatusMapper = vtkTextMapper.New(); _SliceStatusMapper.SetInput("Slice No " + (_Slice + 1).ToString() + "/" + (_MaxSlice + 1).ToString()); _SliceStatusMapper.SetTextProperty(sliceTextProp); vtkActor2D sliceStatusActor = vtkActor2D.New(); sliceStatusActor.SetMapper(_SliceStatusMapper); sliceStatusActor.SetPosition(15, 10); // usage hint message vtkTextProperty usageTextProp = vtkTextProperty.New(); usageTextProp.SetFontFamilyToCourier(); usageTextProp.SetFontSize(14); usageTextProp.SetVerticalJustificationToTop(); usageTextProp.SetJustificationToLeft(); vtkTextMapper usageTextMapper = vtkTextMapper.New(); usageTextMapper.SetInput("Slice with mouse wheel\nor Up/Down-Key"); usageTextMapper.SetTextProperty(usageTextProp); vtkActor2D usageTextActor = vtkActor2D.New(); usageTextActor.SetMapper(usageTextMapper); usageTextActor.GetPositionCoordinate().SetCoordinateSystemToNormalizedDisplay(); usageTextActor.GetPositionCoordinate().SetValue(0.05, 0.95); vtkRenderWindow renderWindow = renderWindowControl1.RenderWindow; vtkInteractorStyleImage interactorStyle = vtkInteractorStyleImage.New(); // NOTA:non funziona la rotellina del mouse per cambiare slice <-------------------------------------- // l'errore è causato dalla funzione DicomCFindRequest(della sorgente di FellowOak) //in QueryFellowOak.cs, in particolare dal costruttore // DicomCFindRequest(DicomQueryRetrieveLevel level) // interactorStyle.MouseWheelForwardEvt += new vtkObject.vtkObjectEventHandler(interactor_MouseWheelForwardEvt); // interactorStyle.MouseWheelBackwardEvt += new vtkObject.vtkObjectEventHandler(interactor_MouseWheelBackwardEvt); renderWindow.GetInteractor().SetInteractorStyle(interactorStyle); renderWindow.GetRenderers().InitTraversal(); vtkRenderer ren; while ((ren = renderWindow.GetRenderers().GetNextItem()) != null) { ren.SetBackground(0.0, 0.0, 0.0); } _ImageViewer.SetRenderWindow(renderWindow); _ImageViewer.GetRenderer().AddActor2D(sliceStatusActor); _ImageViewer.GetRenderer().AddActor2D(usageTextActor); _ImageViewer.SetSlice(_MinSlice); _ImageViewer.Render(); }
void Test2() { int xmin = 0; int xlength = 1000; int xmax = xmin + xlength; int ymin = 0; int ylength = 1000; int ymax = ymin + ylength; #region 定义显示的rectActor vtkPoints pts = vtkPoints.New(); pts.InsertPoint(0, xmin, ymin, 0); pts.InsertPoint(1, xmax, ymin, 0); pts.InsertPoint(2, xmax, ymax, 0); pts.InsertPoint(3, xmin, ymax, 0); vtkCellArray rect = vtkCellArray.New(); rect.InsertNextCell(5); rect.InsertCellPoint(0); rect.InsertCellPoint(1); rect.InsertCellPoint(2); rect.InsertCellPoint(3); rect.InsertCellPoint(0); vtkPolyData selectRect = vtkPolyData.New(); selectRect.SetPoints(pts); selectRect.SetLines(rect); vtkPolyDataMapper2D rectMapper = vtkPolyDataMapper2D.New(); rectMapper.SetInput(selectRect); vtkActor2D rectActor = vtkActor2D.New(); rectActor.SetMapper(rectMapper); #endregion vtkSphereSource sphere = vtkSphereSource.New(); vtkPolyDataMapper sphereMapper = vtkPolyDataMapper.New(); sphereMapper.SetInputConnection(sphere.GetOutputPort()); // sphereMapper.SetImmediateModeRendering(1); vtkActor sphereActor = vtkActor.New(); sphereActor.SetMapper(sphereMapper); vtkIdFilter ids = vtkIdFilter.New(); ids.SetInputConnection(sphere.GetOutputPort()); ids.PointIdsOn(); ids.CellIdsOn(); ids.FieldDataOn(); #region 设置要显示的点的及其label vtkSelectVisiblePoints visPts = vtkSelectVisiblePoints.New(); visPts.SetInputConnection(ids.GetOutputPort()); visPts.SetRenderer(m_render); visPts.SelectionWindowOn(); visPts.SetSelection(xmin, xmin + xlength, ymin, ymin + ylength); vtkLabeledDataMapper pointsMapper = vtkLabeledDataMapper.New(); pointsMapper.SetInputConnection(visPts.GetOutputPort()); pointsMapper.SetLabelModeToLabelFieldData(); pointsMapper.GetLabelTextProperty().SetColor(0, 255, 0); pointsMapper.GetLabelTextProperty().BoldOff(); vtkActor2D pointLabels = vtkActor2D.New(); pointLabels.SetMapper(pointsMapper); #endregion #region 设置要显示的cell的id及其label vtkCellCenters cc = vtkCellCenters.New(); cc.SetInputConnection(ids.GetOutputPort()); vtkSelectVisiblePoints visCells = vtkSelectVisiblePoints.New(); visCells.SetInputConnection(cc.GetOutputPort()); visCells.SetRenderer(m_render); visCells.SelectionWindowOn(); visCells.SetSelection(xmin, xmin + xlength, ymin, ymin + ylength); ///显示每个Cell的id vtkLabeledDataMapper cellMapper = vtkLabeledDataMapper.New(); cellMapper.SetInputConnection(visCells.GetOutputPort()); cellMapper.SetLabelModeToLabelFieldData(); cellMapper.GetLabelTextProperty().SetColor(255, 0, 0); vtkActor2D cellLabels = vtkActor2D.New(); cellLabels.SetMapper(cellMapper); #endregion m_render.AddActor(sphereActor); m_render.AddActor2D(rectActor); m_render.AddActor2D(pointLabels); // m_render.AddActor2D(cellLabels); }