private void CreateColorMap() { // Create the color map colorLookupTable = vtkLookupTable.New(); LegendStyle1(); colorLookupTable.Build(); }
public VTKPoint(int w, int h, int d) { width = w; height = h; depth = h; data = new int[w * h]; pIds = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(int)) * data.Length); //lut lut.SetHueRange(0.667, 0.0); lut.Build(); //セルの生成 using (var points = vtkPoints.New()) using (var vertices = vtkCellArray.New()) { int[] ids = new int[w * h]; for (int y = 0; y < h; y++) { for (int x = 0; x < w; x++) { ids[x + w * y] = points.InsertNextPoint(x, -y, 0); } } int size = Marshal.SizeOf(typeof(int)) * w * h; IntPtr pIds = Marshal.AllocHGlobal(size); Marshal.Copy(ids, 0, pIds, w * h); vertices.InsertNextCell(w * h, pIds); Marshal.FreeHGlobal(pIds); pointPoly.SetPoints(points); pointPoly.SetVerts(vertices); } }
private void PlatonicSolid() { vtkPlatonicSolidSource platonicSolidSource = vtkPlatonicSolidSource.New(); platonicSolidSource.SetSolidTypeToOctahedron(); // Each face has a different cell scalar vtkLookupTable lut = vtkLookupTable.New(); lut.SetNumberOfTableValues(8); lut.SetTableRange(0.0, 7.0); lut.Build(); lut.SetTableValue(0, 0, 0, 0, 1); lut.SetTableValue(1, 0, 0, 1, 1); lut.SetTableValue(2, 0, 1, 0, 1); lut.SetTableValue(3, 0, 1, 1, 1); lut.SetTableValue(4, 1, 0, 0, 1); lut.SetTableValue(5, 1, 0, 1, 1); lut.SetTableValue(6, 1, 1, 0, 1); lut.SetTableValue(7, 1, 1, 1, 1); // Visualize vtkPolyDataMapper mapper = vtkPolyDataMapper.New(); mapper.SetInputConnection(platonicSolidSource.GetOutputPort()); mapper.SetLookupTable(lut); mapper.SetScalarRange(0, 7); vtkActor actor = vtkActor.New(); actor.SetMapper(mapper); RenderAddActor(actor); }
public static vtkLookupTable Create(LutPreset preset, double rangeMin, double rangeMax) { var lut = new vtkLookupTable(); lut.SetTableRange(rangeMin, rangeMax); switch (preset) { case LutPreset.BlueRed: lut.SetHueRange(0.66, 1.0); lut.SetNumberOfColors(128); break; case LutPreset.RedBlue: lut.SetHueRange(1.0, 0.66); lut.SetNumberOfColors(128); //lut.SetNumberOfTableValues(2); //lut.SetTableValue(0, 1.0, 0.0, 0.0, 1.0); //lut.SetTableValue(1, 0.0, 0.0, 1.0, 1.0); break; case LutPreset.Rainbow: lut.SetHueRange(0.0, 0.66); lut.SetNumberOfColors(256); break; } lut.Build(); return lut; }
protected DatasetUnit() { lookupTable = vtkLookupTable.New(); lookupTable.SetNumberOfColors(100); lookupTable.SetHueRange(0.67, 0.0); lookupTable.Build(); scalarBarActor.SetOrientationToHorizontal(); scalarBarActor.SetLookupTable(lookupTable); scalarBarActor.SetTitle(fieldName); scalarBarActor.GetAnnotationTextProperty().SetColor(0, 0, 0); scalarBarActor.GetTitleTextProperty().SetColor(0, 0, 0); scalarBarActor.GetLabelTextProperty().SetColor(0, 0, 0); scalarBarActor.GetAnnotationTextProperty().SetFontSize(20); scalarBarActor.GetTitleTextProperty().SetFontSize(20); scalarBarActor.GetLabelTextProperty().SetFontSize(20); scalarBarActor.GetAnnotationTextProperty().SetFontFamilyToArial(); scalarBarActor.GetTitleTextProperty().SetFontFamilyToArial(); scalarBarActor.GetLabelTextProperty().SetFontFamilyToArial(); scalarBarActor.GetAnnotationTextProperty().ItalicOff(); scalarBarActor.GetTitleTextProperty().ItalicOff(); scalarBarActor.GetLabelTextProperty().ItalicOff(); scalarBarActor.GetAnnotationTextProperty().BoldOff(); scalarBarActor.GetTitleTextProperty().BoldOff(); scalarBarActor.GetLabelTextProperty().BoldOff(); scalarBarActor.SetUnconstrainedFontSize(true); scalarBarActor.SetBarRatio(0.15); scalarBarActor.SetNumberOfLabels(11); }
public void ExtractEdgesVTKBuilderWithoutRunning(ref vtkActor actor, ref vtkPoints points, ref vtkCellArray polys, ref vtkFloatArray scalars, ref vtkLookupTable Luk) { int pointsNum = 0; TowerModelInstance.VTKDrawModel(ref points, ref polys, ref scalars, ref pointsNum, paras); vtkPolyData profile = vtkPolyData.New(); profile.SetPoints(points); profile.SetPolys(polys); vtkExtractEdges ExtProfile = new vtkExtractEdges(); vtkPolyDataMapper mapper = vtkPolyDataMapper.New(); if (paras.RotateAngle == 0) { profile.GetCellData().SetScalars(scalars); ExtProfile.SetInput(profile); mapper.SetInputConnection(ExtProfile.GetOutputPort()); } else { vtkRotationalExtrusionFilter refilter = vtkRotationalExtrusionFilter.New(); profile.Update(); profile.GetCellData().SetScalars(scalars); //profile.GetPointData().SetScalars(scalars); ExtProfile.SetInput(profile); refilter.SetInputConnection(ExtProfile.GetOutputPort()); refilter.SetResolution(50); refilter.SetAngle(paras.RotateAngle); refilter.SetTranslation(0); refilter.SetDeltaRadius(0); mapper.SetInputConnection(refilter.GetOutputPort()); } mapper.SetScalarRange(0, 5); mapper.SetLookupTable(Luk); actor.SetMapper(mapper); Luk.SetNumberOfTableValues(7); Luk.SetTableValue(0, 0, 1, 0, 1); // Luk.SetTableValue(1, 0, 0, 0.8, 1); //inner surface Luk.SetTableValue(2, 0, 1, 0, 1); // Luk.SetTableValue(3, 0, 0, 1, 1); Luk.SetTableValue(4, 0, 0, 0.8, 1); //insider Luk.SetTableValue(5, 0, 0.8, 0, 1); //outer surface Luk.Build(); }
//切片模式_初始化颜色 private void InitializeColor_Slice(ExGrid Grid) { m_LookupTable = vtkLookupTable.New(); m_LookupTable.SetTableRange(Grid.Min, Grid.Max); //蓝色->红色 m_LookupTable.SetHueRange(0.667, 0); m_LookupTable.SetNumberOfColors(100); m_LookupTable.Build(); //线性插值透明度 m_PiecewiseFunction = vtkPiecewiseFunction.New(); m_PiecewiseFunction.AddPoint(Grid.Min, 1); m_PiecewiseFunction.AddPoint(Grid.Max, 1); }
public void Init() { lut.SetHueRange(0.0, 0.667); /* 赤-> 青*/ lut.Build(); switch (plane) { case Plane.Curve: InitCurve(); break; case Plane.Flat: InitFlat(); break; } }
//wizualizacja 3d ----------------------------------------------------------------- public Visualization3D(RenderWindowControl window, vtkDICOMImageReader dicomReader) { this.window = window; this.dicomReader = dicomReader; this.presetMapper = new PresetMapper(); vtkRenderer renderer = window.RenderWindow.GetRenderers().GetFirstRenderer(); vtkSmartVolumeMapper mapper = vtkSmartVolumeMapper.New(); vol = vtkVolume.New(); vtkLookupTable bwLut = vtkLookupTable.New(); bwLut.SetTableRange(0, 2000); bwLut.SetSaturationRange(0, 0); bwLut.SetHueRange(0, 0); bwLut.SetValueRange(0, 1); bwLut.Build(); //effective built vtkImageMapToColors sagittalColors = vtkImageMapToColors.New(); sagittalColors.SetInputConnection(dicomReader.GetOutputPort()); sagittalColors.SetLookupTable(bwLut); sagittalColors.Update(); vtkImageActor sagittal = vtkImageActor.New(); sagittal.SetInput(sagittalColors.GetOutput()); sagittal.SetDisplayExtent(117, 117, 0, 173, 1, 180); vtkImageReslice reslicer = vtkImageReslice.New(); reslicer.SetResliceAxesDirectionCosines(1, 0, 0, 2, 0, 0, 0, 0, 0); mapper.SetInputConnection(dicomReader.GetOutputPort()); this.setColorFunction(); this.setOpacityFunction(); this.setGradientOpacity(); vol.SetMapper(mapper); renderer.AddActor(sagittal); renderer.AddVolume(vol); }
/// <summary> /// The main entry method called by the CSharp driver /// </summary> /// <param name="argv"></param> public static void AVTestImageStreamer(String [] argv) { //Prefix Content is: "" reader = new vtkImageReader(); reader.ReleaseDataFlagOff(); reader.SetDataByteOrderToLittleEndian(); reader.SetDataExtent((int)0,(int)63,(int)0,(int)63,(int)1,(int)93); reader.SetFilePrefix((string)"" + (VTK_DATA_ROOT.ToString()) + "/Data/headsq/quarter"); reader.SetDataMask((int)0x7fff); rangeStart = 0.0; rangeEnd = 0.2; LUT = new vtkLookupTable(); LUT.SetTableRange((double)0,(double)1800); LUT.SetSaturationRange((double)1,(double)1); LUT.SetHueRange((double)rangeStart,(double)rangeEnd); LUT.SetValueRange((double)1,(double)1); LUT.SetAlphaRange((double)1,(double)1); LUT.Build(); // added these unused default arguments so that the prototype[] // matches as required in python.[] //method moved mapToRGBA = new vtkImageMapToColors(); mapToRGBA.SetInputConnection((vtkAlgorithmOutput)reader.GetOutputPort()); mapToRGBA.SetOutputFormatToRGBA(); mapToRGBA.SetLookupTable((vtkScalarsToColors)LUT); mapToRGBA.EndEvt += new Kitware.VTK.vtkObject.vtkObjectEventHandler(changeLUT_Command.Execute); streamer = new vtkMemoryLimitImageDataStreamer(); streamer.SetInputConnection((vtkAlgorithmOutput)mapToRGBA.GetOutputPort()); streamer.SetMemoryLimit((uint)100); streamer.UpdateWholeExtent(); // set the window/level to 255.0/127.5 to view full range[] viewer = new vtkImageViewer(); viewer.SetInputConnection((vtkAlgorithmOutput)streamer.GetOutputPort()); viewer.SetColorWindow((double)255.0); viewer.SetColorLevel((double)127.5); viewer.SetZSlice((int)50); viewer.Render(); //deleteAllVTKObjects(); }
/// <summary> /// The main entry method called by the CSharp driver /// </summary> /// <param name="argv"></param> public static void AVTestImageStreamer(String [] argv) { //Prefix Content is: "" reader = new vtkImageReader(); reader.ReleaseDataFlagOff(); reader.SetDataByteOrderToLittleEndian(); reader.SetDataExtent((int)0, (int)63, (int)0, (int)63, (int)1, (int)93); reader.SetFilePrefix((string)"" + (VTK_DATA_ROOT.ToString()) + "/Data/headsq/quarter"); reader.SetDataMask((int)0x7fff); rangeStart = 0.0; rangeEnd = 0.2; LUT = new vtkLookupTable(); LUT.SetTableRange((double)0, (double)1800); LUT.SetSaturationRange((double)1, (double)1); LUT.SetHueRange((double)rangeStart, (double)rangeEnd); LUT.SetValueRange((double)1, (double)1); LUT.SetAlphaRange((double)1, (double)1); LUT.Build(); // added these unused default arguments so that the prototype[] // matches as required in python.[] //method moved mapToRGBA = new vtkImageMapToColors(); mapToRGBA.SetInputConnection((vtkAlgorithmOutput)reader.GetOutputPort()); mapToRGBA.SetOutputFormatToRGBA(); mapToRGBA.SetLookupTable((vtkScalarsToColors)LUT); mapToRGBA.EndEvt += new Kitware.VTK.vtkObject.vtkObjectEventHandler(changeLUT_Command.Execute); streamer = new vtkMemoryLimitImageDataStreamer(); streamer.SetInputConnection((vtkAlgorithmOutput)mapToRGBA.GetOutputPort()); streamer.SetMemoryLimit((uint)100); streamer.UpdateWholeExtent(); // set the window/level to 255.0/127.5 to view full range[] viewer = new vtkImageViewer(); viewer.SetInputConnection((vtkAlgorithmOutput)streamer.GetOutputPort()); viewer.SetColorWindow((double)255.0); viewer.SetColorLevel((double)127.5); viewer.SetZSlice((int)50); viewer.Render(); //deleteAllVTKObjects(); }
//镂空模式_初始化颜色 private void InitializeColor_HollowOut(ExGrid Grid) { m_LookupTable = vtkLookupTable.New(); m_LookupTable.SetTableRange(Grid.Min, Grid.Max); //蓝色->红色 m_LookupTable.SetHueRange(0.666667, 0); m_LookupTable.SetNumberOfColors(100); m_LookupTable.Build(); //设定标量值的颜色 m_ColorTransferFunction = vtkColorTransferFunction.New(); for (int i = 0; i < 100; i += 10) { var color = m_LookupTable.GetTableValue(i); double Range = Grid.Max - Grid.Min; m_ColorTransferFunction.AddRGBPoint(Grid.Min + i * Range / 100.0, color[0], color[1], color[2]); } m_ColorTransferFunction.Build(); //线性插值透明度 m_PiecewiseFunction = vtkPiecewiseFunction.New(); // [,) InitRanges(); foreach (var range in m_IntersectRanges) { double Min = range.Min; double Max = range.Max; ////由于VTK的特性,对Max进行修正 //如果透明 if (range.Transparent) { m_PiecewiseFunction.AddSegment(Min, Transparency_Yes, Max, Transparency_Yes); } //不透明 else { Min = Min + EPSILON; Max = Max - EPSILON; m_PiecewiseFunction.AddSegment(Min, Transparency_Not, Max, Transparency_Not); } } }
//普通模式_初始化颜色 private void InitializeColor_Normal(ExGrid Grid) { m_LookupTable = vtkLookupTable.New(); m_LookupTable.SetTableRange(Grid.Min, Grid.Max); //蓝色->红色 m_LookupTable.SetHueRange(0.667, 0); m_LookupTable.SetNumberOfColors(100); m_LookupTable.Build(); //设定标量值的颜色 m_ColorTransferFunction = vtkColorTransferFunction.New(); for (int i = 0; i < 100; i += 10) { var color = m_LookupTable.GetTableValue(i); double Range = Grid.Max - Grid.Min; m_ColorTransferFunction.AddRGBPoint(Grid.Min + i * Range / 100.0, color[0], color[1], color[2]); } m_ColorTransferFunction.Build(); //线性插值透明度 m_PiecewiseFunction = vtkPiecewiseFunction.New(); m_PiecewiseFunction.AddPoint(Grid.Min, 1); m_PiecewiseFunction.AddPoint(Grid.Max, 1); }
public VTK(int width, int height, int depth) { Width = width; Height = height; Depth = depth; data = new int[Size]; pIds = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(int)) * Size); //lutの生成 lut.SetHueRange(0.667, 0.0); lut.Build(); //セルの生成 using (var points = vtkPoints.New()) using (var vertices = vtkCellArray.New()) { IntPtr pIds = Marshal.AllocHGlobal(Size * Marshal.SizeOf(typeof(int))); int[] ids = new int[Size]; for (int y = 0; y < Height; y++) { for (int x = 0; x < Width; x++) { ids[x + y * Width] = points.InsertNextPoint(x, -y, 0); } } Marshal.Copy(ids, 0, pIds, Size); vertices.InsertNextCell(Size, pIds); Marshal.FreeHGlobal(pIds); // = vertex.GetPointIds().SetId(0, 0); // pointPoly.SetPoints(points); pointPoly.SetVerts(vertices); } }
private void ColoredElevationMap() { // Create a grid of points (height/terrian map) vtkPoints points = vtkPoints.New(); uint GridSize = 20; double xx, yy, zz; for (uint x = 0; x < GridSize; x++) { for (uint y = 0; y < GridSize; y++) { xx = x + vtkMath.Random(-.2, .2); yy = y + vtkMath.Random(-.2, .2); zz = vtkMath.Random(-.5, .5); points.InsertNextPoint(xx, yy, zz); } } // Add the grid points to a polydata object vtkPolyData inputPolyData = vtkPolyData.New(); inputPolyData.SetPoints(points); // Triangulate the grid points vtkDelaunay2D delaunay = vtkDelaunay2D.New(); #if VTK_MAJOR_VERSION_5 delaunay.SetInput(inputPolyData); #else delaunay.SetInputData(inputPolyData); #endif delaunay.Update(); vtkPolyData outputPolyData = delaunay.GetOutput(); double[] bounds = outputPolyData.GetBounds(); // Find min and max z double minz = bounds[4]; double maxz = bounds[5]; Debug.WriteLine("minz: " + minz); Debug.WriteLine("maxz: " + maxz); // Create the color map vtkLookupTable colorLookupTable = vtkLookupTable.New(); colorLookupTable.SetTableRange(minz, maxz); colorLookupTable.Build(); // Generate the colors for each point based on the color map vtkUnsignedCharArray colors = vtkUnsignedCharArray.New(); colors.SetNumberOfComponents(3); colors.SetName("Colors"); Debug.WriteLine("There are " + outputPolyData.GetNumberOfPoints() + " points."); #if UNSAFE // fastest way to fill color array colors.SetNumberOfTuples(outputPolyData.GetNumberOfPoints()); unsafe { byte *pColor = (byte *)colors.GetPointer(0).ToPointer(); for (int i = 0; i < outputPolyData.GetNumberOfPoints(); i++) { double[] p = outputPolyData.GetPoint(i); double[] dcolor = colorLookupTable.GetColor(p[2]); Debug.WriteLine("dcolor: " + dcolor[0] + " " + dcolor[1] + " " + dcolor[2]); byte[] color = new byte[3]; for (uint j = 0; j < 3; j++) { color[j] = (byte)(255 * dcolor[j]); } Debug.WriteLine("color: " + color[0] + " " + color[1] + " " + color[2]); *(pColor + 3 * i) = color[0]; *(pColor + 3 * i + 1) = color[1]; *(pColor + 3 * i + 2) = color[2]; } } #else for (int i = 0; i < outputPolyData.GetNumberOfPoints(); i++) { double[] p = outputPolyData.GetPoint(i); double[] dcolor = colorLookupTable.GetColor(p[2]); Debug.WriteLine("dcolor: " + dcolor[0] + " " + dcolor[1] + " " + dcolor[2]); byte[] color = new byte[3]; for (uint j = 0; j < 3; j++) { color[j] = (byte)(255 * dcolor[j]); } Debug.WriteLine("color: " + color[0] + " " + color[1] + " " + color[2]); colors.InsertNextTuple3(color[0], color[1], color[2]); //IntPtr pColor = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(byte)) * 3); //Marshal.Copy(color, 0, pColor, 3); //colors.InsertNextTupleValue(pColor); //Marshal.FreeHGlobal(pColor); } #endif outputPolyData.GetPointData().SetScalars(colors); // Create a mapper and actor vtkPolyDataMapper mapper = vtkPolyDataMapper.New(); #if VTK_MAJOR_VERSION_5 mapper.SetInputConnection(outputPolyData.GetProducerPort()); #else mapper.SetInputData(outputPolyData); #endif vtkActor actor = vtkActor.New(); actor.SetMapper(mapper); // get a reference to the renderwindow of our renderWindowControl1 vtkRenderWindow renderWindow = renderWindowControl1.RenderWindow; // renderer vtkRenderer renderer = renderWindow.GetRenderers().GetFirstRenderer(); // set background color renderer.SetBackground(0.2, 0.3, 0.4); // add our actor to the renderer renderer.AddActor(actor); }
/// <summary> /// The main entry method called by the CSharp driver /// </summary> /// <param name="argv"></param> public static void AVTestExtractCTHPart(String [] argv) { //Prefix Content is: "" // we need to use composite data pipeline with multiblock datasets[] alg = new vtkAlgorithm(); pip = new vtkCompositeDataPipeline(); vtkAlgorithm.SetDefaultExecutivePrototype((vtkExecutive)pip); //skipping Delete pip // Create the RenderWindow, Renderer and both Actors[] //[] Ren1 = vtkRenderer.New(); Ren1.SetBackground((double)0.33, (double)0.35, (double)0.43); renWin = vtkRenderWindow.New(); renWin.AddRenderer((vtkRenderer)Ren1); renWin.SetSize((int)300, (int)300); iren = new vtkRenderWindowInteractor(); iren.SetRenderWindow((vtkRenderWindow)renWin); pvTemp59 = new vtkXMLRectilinearGridReader(); pvTemp59.SetFileName((string)"" + (VTK_DATA_ROOT.ToString()) + "/Data/cth.vtr"); pvTemp59.UpdateInformation(); pvTemp59.SetCellArrayStatus((string)"X Velocity", (int)0); pvTemp59.SetCellArrayStatus((string)"Y Velocity", (int)0); pvTemp59.SetCellArrayStatus((string)"Z Velocity", (int)0); pvTemp59.SetCellArrayStatus((string)"Mass for Armor Plate", (int)0); pvTemp59.SetCellArrayStatus((string)"Mass for Body, Nose", (int)0); pvTemp79 = new vtkExtractCTHPart(); pvTemp79.SetInputConnection((vtkAlgorithmOutput)pvTemp59.GetOutputPort()); pvTemp79.AddVolumeArrayName((string)"Volume Fraction for Armor Plate"); pvTemp79.AddVolumeArrayName((string)"Volume Fraction for Body, Nose"); pvTemp79.SetClipPlane(null); pvTemp104 = new vtkLookupTable(); pvTemp104.SetNumberOfTableValues((int)256); pvTemp104.SetHueRange((double)0.6667, (double)0); pvTemp104.SetSaturationRange((double)1, (double)1); pvTemp104.SetValueRange((double)1, (double)1); pvTemp104.SetTableRange((double)0, (double)1); pvTemp104.SetVectorComponent((int)0); pvTemp104.Build(); pvTemp87 = new vtkCompositePolyDataMapper(); pvTemp87.SetInputConnection((vtkAlgorithmOutput)pvTemp79.GetOutputPort()); pvTemp87.SetImmediateModeRendering((int)1); pvTemp87.SetScalarRange((double)0, (double)1); pvTemp87.UseLookupTableScalarRangeOn(); pvTemp87.SetScalarVisibility((int)1); pvTemp87.SetScalarModeToUsePointFieldData(); pvTemp87.SelectColorArray((string)"Part Index"); pvTemp87.SetLookupTable((vtkScalarsToColors)pvTemp104); pvTemp88 = new vtkActor(); pvTemp88.SetMapper((vtkMapper)pvTemp87); pvTemp88.GetProperty().SetRepresentationToSurface(); pvTemp88.GetProperty().SetInterpolationToGouraud(); pvTemp88.GetProperty().SetAmbient((double)0); pvTemp88.GetProperty().SetDiffuse((double)1); pvTemp88.GetProperty().SetSpecular((double)0); pvTemp88.GetProperty().SetSpecularPower((double)1); pvTemp88.GetProperty().SetSpecularColor((double)1, (double)1, (double)1); Ren1.AddActor((vtkProp)pvTemp88); renWin.Render(); vtkAlgorithm.SetDefaultExecutivePrototype(null); //deleteAllVTKObjects(); }
private void FilledContours(string filePath, int numberOfContours) { // Read the file vtkXMLPolyDataReader reader = vtkXMLPolyDataReader.New(); reader.SetFileName(filePath); reader.Update(); // Update so that we can get the scalar range double[] scalarRange = reader.GetOutput().GetPointData().GetScalars().GetRange(); vtkAppendPolyData appendFilledContours = vtkAppendPolyData.New(); double delta = (scalarRange[1] - scalarRange[0]) / (numberOfContours - 1); // Keep the clippers alive List <vtkClipPolyData> clippersLo = new List <vtkClipPolyData>(); List <vtkClipPolyData> clippersHi = new List <vtkClipPolyData>(); for (int i = 0; i < numberOfContours; i++) { double valueLo = scalarRange[0] + i * delta; double valueHi = scalarRange[0] + (i + 1) * delta; clippersLo.Add(vtkClipPolyData.New()); clippersLo[i].SetValue(valueLo); if (i == 0) { clippersLo[i].SetInputConnection(reader.GetOutputPort()); } else { clippersLo[i].SetInputConnection(clippersHi[i - 1].GetOutputPort(1)); } clippersLo[i].InsideOutOff(); clippersLo[i].Update(); clippersHi.Add(vtkClipPolyData.New()); clippersHi[i].SetValue(valueHi); clippersHi[i].SetInputConnection(clippersLo[i].GetOutputPort()); clippersHi[i].GenerateClippedOutputOn(); clippersHi[i].InsideOutOn(); clippersHi[i].Update(); if (clippersHi[i].GetOutput().GetNumberOfCells() == 0) { continue; } vtkFloatArray cd = vtkFloatArray.New(); cd.SetNumberOfComponents(1); cd.SetNumberOfTuples(clippersHi[i].GetOutput().GetNumberOfCells()); cd.FillComponent(0, valueLo); clippersHi[i].GetOutput().GetCellData().SetScalars(cd); appendFilledContours.AddInputConnection(clippersHi[i].GetOutputPort()); } vtkCleanPolyData filledContours = vtkCleanPolyData.New(); filledContours.SetInputConnection(appendFilledContours.GetOutputPort()); vtkLookupTable lut = vtkLookupTable.New(); lut.SetNumberOfTableValues(numberOfContours + 1); lut.Build(); vtkPolyDataMapper contourMapper = vtkPolyDataMapper.New(); contourMapper.SetInputConnection(filledContours.GetOutputPort()); contourMapper.SetScalarRange(scalarRange[0], scalarRange[1]); contourMapper.SetScalarModeToUseCellData(); contourMapper.SetLookupTable(lut); vtkActor contourActor = vtkActor.New(); contourActor.SetMapper(contourMapper); contourActor.GetProperty().SetInterpolationToFlat(); vtkContourFilter contours = vtkContourFilter.New(); contours.SetInputConnection(filledContours.GetOutputPort()); contours.GenerateValues(numberOfContours, scalarRange[0], scalarRange[1]); vtkPolyDataMapper contourLineMapperer = vtkPolyDataMapper.New(); contourLineMapperer.SetInputConnection(contours.GetOutputPort()); contourLineMapperer.SetScalarRange(scalarRange[0], scalarRange[1]); contourLineMapperer.ScalarVisibilityOff(); vtkActor contourLineActor = vtkActor.New(); contourLineActor.SetMapper(contourLineMapperer); contourLineActor.GetProperty().SetLineWidth(2); // get a reference to the renderwindow of our renderWindowControl1 vtkRenderWindow renderWindow = renderWindowControl1.RenderWindow; // renderer vtkRenderer renderer = renderWindow.GetRenderers().GetFirstRenderer(); // set background color renderer.SetBackground(.2, .3, .4); // add our actor to the renderer renderer.AddActor(contourActor); renderer.AddActor(contourLineActor); }
/// <summary> /// The main entry method called by the CSharp driver /// </summary> /// <param name="argv"></param> public static void AVTestMultiBlockStreamer(String [] argv) { //Prefix Content is: "" // we need to use composite data pipeline with multiblock datasets[] alg = new vtkAlgorithm(); pip = new vtkCompositeDataPipeline(); vtkAlgorithm.SetDefaultExecutivePrototype((vtkExecutive)pip); //skipping Delete pip Ren1 = vtkRenderer.New(); Ren1.SetBackground((double)0.33, (double)0.35, (double)0.43); renWin = vtkRenderWindow.New(); renWin.AddRenderer((vtkRenderer)Ren1); iren = new vtkRenderWindowInteractor(); iren.SetRenderWindow((vtkRenderWindow)renWin); Plot3D0 = new vtkMultiBlockPLOT3DReader(); Plot3D0.SetFileName((string)"" + (VTK_DATA_ROOT.ToString()) + "/Data/combxyz.bin"); Plot3D0.SetQFileName((string)"" + (VTK_DATA_ROOT.ToString()) + "/Data/combq.bin"); Plot3D0.SetBinaryFile((int)1); Plot3D0.SetMultiGrid((int)0); Plot3D0.SetHasByteCount((int)0); Plot3D0.SetIBlanking((int)0); Plot3D0.SetTwoDimensionalGeometry((int)0); Plot3D0.SetForceRead((int)0); Plot3D0.SetByteOrder((int)0); Plot3D0.Update(); Geometry5 = new vtkStructuredGridOutlineFilter(); Geometry5.SetInputData((vtkDataSet)Plot3D0.GetOutput().GetBlock(0)); Mapper5 = vtkPolyDataMapper.New(); Mapper5.SetInputConnection((vtkAlgorithmOutput)Geometry5.GetOutputPort()); Mapper5.SetImmediateModeRendering((int)1); Mapper5.UseLookupTableScalarRangeOn(); Mapper5.SetScalarVisibility((int)0); Mapper5.SetScalarModeToDefault(); Actor5 = new vtkActor(); Actor5.SetMapper((vtkMapper)Mapper5); Actor5.GetProperty().SetRepresentationToSurface(); Actor5.GetProperty().SetInterpolationToGouraud(); Actor5.GetProperty().SetAmbient((double)0.15); Actor5.GetProperty().SetDiffuse((double)0.85); Actor5.GetProperty().SetSpecular((double)0.1); Actor5.GetProperty().SetSpecularPower((double)100); Actor5.GetProperty().SetSpecularColor((double)1, (double)1, (double)1); Actor5.GetProperty().SetColor((double)1, (double)1, (double)1); Ren1.AddActor((vtkProp)Actor5); ExtractGrid[0] = new vtkExtractGrid(); ExtractGrid[0].SetInputData((vtkDataSet)Plot3D0.GetOutput().GetBlock(0)); ExtractGrid[0].SetVOI((int)0, (int)14, (int)0, (int)32, (int)0, (int)24); ExtractGrid[0].SetSampleRate((int)1, (int)1, (int)1); ExtractGrid[0].SetIncludeBoundary((int)0); ExtractGrid[1] = new vtkExtractGrid(); ExtractGrid[1].SetInputData((vtkDataSet)Plot3D0.GetOutput().GetBlock(0)); ExtractGrid[1].SetVOI((int)14, (int)29, (int)0, (int)32, (int)0, (int)24); ExtractGrid[1].SetSampleRate((int)1, (int)1, (int)1); ExtractGrid[1].SetIncludeBoundary((int)0); ExtractGrid[2] = new vtkExtractGrid(); ExtractGrid[2].SetInputData((vtkDataSet)Plot3D0.GetOutput().GetBlock(0)); ExtractGrid[2].SetVOI((int)29, (int)56, (int)0, (int)32, (int)0, (int)24); ExtractGrid[2].SetSampleRate((int)1, (int)1, (int)1); ExtractGrid[2].SetIncludeBoundary((int)0); LineSourceWidget0 = new vtkLineSource(); LineSourceWidget0.SetPoint1((double)3.05638, (double)-3.00497, (double)28.2211); LineSourceWidget0.SetPoint2((double)3.05638, (double)3.95916, (double)28.2211); LineSourceWidget0.SetResolution((int)20); mbds = new vtkMultiBlockDataSet(); mbds.SetNumberOfBlocks((uint)3); i = 0; while ((i) < 3) { ExtractGrid[i].Update(); sg[i] = vtkStructuredGrid.New(); sg[i].ShallowCopy(ExtractGrid[i].GetOutput()); mbds.SetBlock((uint)i, sg[i]); //skipping Delete sg[i] i = i + 1; } Stream0 = new vtkStreamTracer(); Stream0.SetInputData((vtkDataObject)mbds); Stream0.SetSourceConnection(LineSourceWidget0.GetOutputPort()); Stream0.SetIntegrationStepUnit(2); Stream0.SetMaximumPropagation((double)20); Stream0.SetInitialIntegrationStep((double)0.5); Stream0.SetIntegrationDirection((int)0); Stream0.SetIntegratorType((int)0); Stream0.SetMaximumNumberOfSteps((int)2000); Stream0.SetTerminalSpeed((double)1e-12); //skipping Delete mbds aa = new vtkAssignAttribute(); aa.SetInputConnection((vtkAlgorithmOutput)Stream0.GetOutputPort()); aa.Assign((string)"Normals", (string)"NORMALS", (string)"POINT_DATA"); Ribbon0 = new vtkRibbonFilter(); Ribbon0.SetInputConnection((vtkAlgorithmOutput)aa.GetOutputPort()); Ribbon0.SetWidth((double)0.1); Ribbon0.SetAngle((double)0); Ribbon0.SetDefaultNormal((double)0, (double)0, (double)1); Ribbon0.SetVaryWidth((int)0); LookupTable1 = new vtkLookupTable(); LookupTable1.SetNumberOfTableValues((int)256); LookupTable1.SetHueRange((double)0, (double)0.66667); LookupTable1.SetSaturationRange((double)1, (double)1); LookupTable1.SetValueRange((double)1, (double)1); LookupTable1.SetTableRange((double)0.197813, (double)0.710419); LookupTable1.SetVectorComponent((int)0); LookupTable1.Build(); Mapper10 = vtkPolyDataMapper.New(); Mapper10.SetInputConnection((vtkAlgorithmOutput)Ribbon0.GetOutputPort()); Mapper10.SetImmediateModeRendering((int)1); Mapper10.UseLookupTableScalarRangeOn(); Mapper10.SetScalarVisibility((int)1); Mapper10.SetScalarModeToUsePointFieldData(); Mapper10.SelectColorArray((string)"Density"); Mapper10.SetLookupTable((vtkScalarsToColors)LookupTable1); Actor10 = new vtkActor(); Actor10.SetMapper((vtkMapper)Mapper10); Actor10.GetProperty().SetRepresentationToSurface(); Actor10.GetProperty().SetInterpolationToGouraud(); Actor10.GetProperty().SetAmbient((double)0.15); Actor10.GetProperty().SetDiffuse((double)0.85); Actor10.GetProperty().SetSpecular((double)0); Actor10.GetProperty().SetSpecularPower((double)1); Actor10.GetProperty().SetSpecularColor((double)1, (double)1, (double)1); Ren1.AddActor((vtkProp)Actor10); // enable user interface interactor[] iren.Initialize(); // prevent the tk window from showing up then start the event loop[] vtkAlgorithm.SetDefaultExecutivePrototype(null); //skipping Delete alg //deleteAllVTKObjects(); }
//Parameters for building a model private void BasicVTKBuilder(ref vtkActor actor, ref vtkPoints points, ref vtkCellArray polys, ref vtkFloatArray scalars, ref vtkLookupTable Luk, ref vtkActor2D actor2D) { int pointsNum = 0; TowerModelInstance.VTKDrawModel(ref points, ref polys, ref scalars, ref pointsNum, paras); vtkPolyData profile = vtkPolyData.New(); profile.SetPoints(points); profile.SetPolys(polys); vtkPolyDataMapper mapper = vtkPolyDataMapper.New(); if (paras.RotateAngle == 0) { profile.GetCellData().SetScalars(scalars); mapper.SetInput(profile); } else { vtkRotationalExtrusionFilter refilter = vtkRotationalExtrusionFilter.New(); profile.Update(); profile.GetCellData().SetScalars(scalars); //profile.GetPointData().SetScalars(scalars); refilter.SetInput(profile); refilter.SetResolution(50); refilter.SetAngle(paras.RotateAngle); refilter.SetTranslation(0); refilter.SetDeltaRadius(0); mapper.SetInputConnection(refilter.GetOutputPort()); } mapper.SetScalarRange(TowerModelInstance.GetColorGenColorTableMinvalue(), TowerModelInstance.GetColorGenColorTableMaxValue()); actor.SetMapper(mapper); // This text property is for scalarBar vtkTextProperty textProperty = vtkTextProperty.New(); //textProperty.SetFontFamilyToCourier(); //textProperty.SetColor(1.0, 1.0, 0.5); textProperty.SetFontSize(10); vtkScalarBarActor scalarBar = vtkScalarBarActor.New(); scalarBar.SetLookupTable(mapper.GetLookupTable()); scalarBar.SetTitle("Color Table"); scalarBar.SetNumberOfLabels(TowerModelInstance.GetColorGenColorTableSize()); scalarBar.SetTitleTextProperty(textProperty); scalarBar.SetLabelTextProperty(textProperty); scalarBar.SetWidth(0.07); scalarBar.SetHeight(0.6); //scalarBar.SetDrawFrame(1); vtkLookupTable hueLut = vtkLookupTable.New(); hueLut.SetTableRange(TowerModelInstance.GetColorGenColorTableMinvalue(), TowerModelInstance.GetColorGenColorTableMaxValue()); hueLut.SetHueRange(0.667, 0); hueLut.SetSaturationRange(1, 1); hueLut.SetValueRange(1, 1); hueLut.SetNumberOfTableValues(TowerModelInstance.GetColorGenColorTableSize()); hueLut.Build(); mapper.SetLookupTable(hueLut); scalarBar.SetLookupTable(hueLut); // The actor links the data pipeline to the rendering subsystem actor2D = scalarBar; //actor.GetProperty().SetColor(0.388, 0.388, 0.388); }
/// <summary> /// The main entry method called by the CSharp driver /// </summary> /// <param name="argv"></param> public static void AVTestExtractCTHPart(String [] argv) { //Prefix Content is: "" // we need to use composite data pipeline with multiblock datasets[] alg = new vtkAlgorithm(); pip = new vtkCompositeDataPipeline(); vtkAlgorithm.SetDefaultExecutivePrototype((vtkExecutive)pip); //skipping Delete pip // Create the RenderWindow, Renderer and both Actors[] //[] Ren1 = vtkRenderer.New(); Ren1.SetBackground((double)0.33,(double)0.35,(double)0.43); renWin = vtkRenderWindow.New(); renWin.AddRenderer((vtkRenderer)Ren1); renWin.SetSize((int)300,(int)300); iren = new vtkRenderWindowInteractor(); iren.SetRenderWindow((vtkRenderWindow)renWin); pvTemp59 = new vtkXMLRectilinearGridReader(); pvTemp59.SetFileName((string)"" + (VTK_DATA_ROOT.ToString()) + "/Data/cth.vtr"); pvTemp59.UpdateInformation(); pvTemp59.SetCellArrayStatus((string)"X Velocity",(int)0); pvTemp59.SetCellArrayStatus((string)"Y Velocity",(int)0); pvTemp59.SetCellArrayStatus((string)"Z Velocity",(int)0); pvTemp59.SetCellArrayStatus((string)"Mass for Armor Plate",(int)0); pvTemp59.SetCellArrayStatus((string)"Mass for Body, Nose",(int)0); pvTemp79 = new vtkExtractCTHPart(); pvTemp79.SetInputConnection((vtkAlgorithmOutput)pvTemp59.GetOutputPort()); pvTemp79.AddVolumeArrayName((string)"Volume Fraction for Armor Plate"); pvTemp79.AddVolumeArrayName((string)"Volume Fraction for Body, Nose"); pvTemp79.SetClipPlane(null); pvTemp104 = new vtkLookupTable(); pvTemp104.SetNumberOfTableValues((int)256); pvTemp104.SetHueRange((double)0.6667,(double)0); pvTemp104.SetSaturationRange((double)1,(double)1); pvTemp104.SetValueRange((double)1,(double)1); pvTemp104.SetTableRange((double)0,(double)1); pvTemp104.SetVectorComponent((int)0); pvTemp104.Build(); pvTemp87 = new vtkCompositePolyDataMapper(); pvTemp87.SetInputConnection((vtkAlgorithmOutput)pvTemp79.GetOutputPort()); pvTemp87.SetImmediateModeRendering((int)1); pvTemp87.SetScalarRange((double)0,(double)1); pvTemp87.UseLookupTableScalarRangeOn(); pvTemp87.SetScalarVisibility((int)1); pvTemp87.SetScalarModeToUsePointFieldData(); pvTemp87.SelectColorArray((string)"Part Index"); pvTemp87.SetLookupTable((vtkScalarsToColors)pvTemp104); pvTemp88 = new vtkActor(); pvTemp88.SetMapper((vtkMapper)pvTemp87); pvTemp88.GetProperty().SetRepresentationToSurface(); pvTemp88.GetProperty().SetInterpolationToGouraud(); pvTemp88.GetProperty().SetAmbient((double)0); pvTemp88.GetProperty().SetDiffuse((double)1); pvTemp88.GetProperty().SetSpecular((double)0); pvTemp88.GetProperty().SetSpecularPower((double)1); pvTemp88.GetProperty().SetSpecularColor((double)1,(double)1,(double)1); Ren1.AddActor((vtkProp)pvTemp88); renWin.Render(); vtkAlgorithm.SetDefaultExecutivePrototype(null); //deleteAllVTKObjects(); }
/// <summary> /// The main entry method called by the CSharp driver /// </summary> /// <param name="argv"></param> public static void AVTestMultiBlockStreamer(String [] argv) { //Prefix Content is: "" // we need to use composite data pipeline with multiblock datasets[] alg = new vtkAlgorithm(); pip = new vtkCompositeDataPipeline(); vtkAlgorithm.SetDefaultExecutivePrototype((vtkExecutive)pip); //skipping Delete pip Ren1 = vtkRenderer.New(); Ren1.SetBackground((double)0.33,(double)0.35,(double)0.43); renWin = vtkRenderWindow.New(); renWin.AddRenderer((vtkRenderer)Ren1); iren = new vtkRenderWindowInteractor(); iren.SetRenderWindow((vtkRenderWindow)renWin); Plot3D0 = new vtkPLOT3DReader(); Plot3D0.SetFileName((string)"" + (VTK_DATA_ROOT.ToString()) + "/Data/combxyz.bin"); Plot3D0.SetQFileName((string)"" + (VTK_DATA_ROOT.ToString()) + "/Data/combq.bin"); Plot3D0.SetBinaryFile((int)1); Plot3D0.SetMultiGrid((int)0); Plot3D0.SetHasByteCount((int)0); Plot3D0.SetIBlanking((int)0); Plot3D0.SetTwoDimensionalGeometry((int)0); Plot3D0.SetForceRead((int)0); Plot3D0.SetByteOrder((int)0); Geometry5 = new vtkStructuredGridOutlineFilter(); Geometry5.SetInputConnection((vtkAlgorithmOutput)Plot3D0.GetOutputPort()); Mapper5 = vtkPolyDataMapper.New(); Mapper5.SetInputConnection((vtkAlgorithmOutput)Geometry5.GetOutputPort()); Mapper5.SetImmediateModeRendering((int)1); Mapper5.UseLookupTableScalarRangeOn(); Mapper5.SetScalarVisibility((int)0); Mapper5.SetScalarModeToDefault(); Actor5 = new vtkActor(); Actor5.SetMapper((vtkMapper)Mapper5); Actor5.GetProperty().SetRepresentationToSurface(); Actor5.GetProperty().SetInterpolationToGouraud(); Actor5.GetProperty().SetAmbient((double)0.15); Actor5.GetProperty().SetDiffuse((double)0.85); Actor5.GetProperty().SetSpecular((double)0.1); Actor5.GetProperty().SetSpecularPower((double)100); Actor5.GetProperty().SetSpecularColor((double)1,(double)1,(double)1); Actor5.GetProperty().SetColor((double)1,(double)1,(double)1); Ren1.AddActor((vtkProp)Actor5); ExtractGrid[0] = new vtkExtractGrid(); ExtractGrid[0].SetInputConnection((vtkAlgorithmOutput)Plot3D0.GetOutputPort()); ExtractGrid[0].SetVOI((int)0,(int)14,(int)0,(int)32,(int)0,(int)24); ExtractGrid[0].SetSampleRate((int)1,(int)1,(int)1); ExtractGrid[0].SetIncludeBoundary((int)0); ExtractGrid[1] = new vtkExtractGrid(); ExtractGrid[1].SetInputConnection((vtkAlgorithmOutput)Plot3D0.GetOutputPort()); ExtractGrid[1].SetVOI((int)14,(int)29,(int)0,(int)32,(int)0,(int)24); ExtractGrid[1].SetSampleRate((int)1,(int)1,(int)1); ExtractGrid[1].SetIncludeBoundary((int)0); ExtractGrid[2] = new vtkExtractGrid(); ExtractGrid[2].SetInputConnection((vtkAlgorithmOutput)Plot3D0.GetOutputPort()); ExtractGrid[2].SetVOI((int)29,(int)56,(int)0,(int)32,(int)0,(int)24); ExtractGrid[2].SetSampleRate((int)1,(int)1,(int)1); ExtractGrid[2].SetIncludeBoundary((int)0); LineSourceWidget0 = new vtkLineSource(); LineSourceWidget0.SetPoint1((double)3.05638,(double)-3.00497,(double)28.2211); LineSourceWidget0.SetPoint2((double)3.05638,(double)3.95916,(double)28.2211); LineSourceWidget0.SetResolution((int)20); mbds = new vtkMultiBlockDataSet(); mbds.SetNumberOfBlocks((uint)3); i = 0; while((i) < 3) { ExtractGrid[i].Update(); sg[i] = vtkStructuredGrid.New(); sg[i].ShallowCopy(ExtractGrid[i].GetOutput()); mbds.SetBlock((uint)i, sg[i]); //skipping Delete sg[i] i = i + 1; } Stream0 = new vtkStreamTracer(); Stream0.SetInput((vtkDataObject)mbds); Stream0.SetSource((vtkDataSet)LineSourceWidget0.GetOutput()); Stream0.SetIntegrationStepUnit(2); Stream0.SetMaximumPropagation((double)20); Stream0.SetInitialIntegrationStep((double)0.5); Stream0.SetIntegrationDirection((int)0); Stream0.SetIntegratorType((int)0); Stream0.SetMaximumNumberOfSteps((int)2000); Stream0.SetTerminalSpeed((double)1e-12); //skipping Delete mbds aa = new vtkAssignAttribute(); aa.SetInputConnection((vtkAlgorithmOutput)Stream0.GetOutputPort()); aa.Assign((string)"Normals",(string)"NORMALS",(string)"POINT_DATA"); Ribbon0 = new vtkRibbonFilter(); Ribbon0.SetInputConnection((vtkAlgorithmOutput)aa.GetOutputPort()); Ribbon0.SetWidth((double)0.1); Ribbon0.SetAngle((double)0); Ribbon0.SetDefaultNormal((double)0,(double)0,(double)1); Ribbon0.SetVaryWidth((int)0); LookupTable1 = new vtkLookupTable(); LookupTable1.SetNumberOfTableValues((int)256); LookupTable1.SetHueRange((double)0,(double)0.66667); LookupTable1.SetSaturationRange((double)1,(double)1); LookupTable1.SetValueRange((double)1,(double)1); LookupTable1.SetTableRange((double)0.197813,(double)0.710419); LookupTable1.SetVectorComponent((int)0); LookupTable1.Build(); Mapper10 = vtkPolyDataMapper.New(); Mapper10.SetInputConnection((vtkAlgorithmOutput)Ribbon0.GetOutputPort()); Mapper10.SetImmediateModeRendering((int)1); Mapper10.UseLookupTableScalarRangeOn(); Mapper10.SetScalarVisibility((int)1); Mapper10.SetScalarModeToUsePointFieldData(); Mapper10.SelectColorArray((string)"Density"); Mapper10.SetLookupTable((vtkScalarsToColors)LookupTable1); Actor10 = new vtkActor(); Actor10.SetMapper((vtkMapper)Mapper10); Actor10.GetProperty().SetRepresentationToSurface(); Actor10.GetProperty().SetInterpolationToGouraud(); Actor10.GetProperty().SetAmbient((double)0.15); Actor10.GetProperty().SetDiffuse((double)0.85); Actor10.GetProperty().SetSpecular((double)0); Actor10.GetProperty().SetSpecularPower((double)1); Actor10.GetProperty().SetSpecularColor((double)1,(double)1,(double)1); Ren1.AddActor((vtkProp)Actor10); // enable user interface interactor[] iren.Initialize(); // prevent the tk window from showing up then start the event loop[] vtkAlgorithm.SetDefaultExecutivePrototype(null); //skipping Delete alg //deleteAllVTKObjects(); }
private void ElevationFilter() { // Created a grid of points (heigh/terrian map) vtkPoints points = vtkPoints.New(); uint GridSize = 10; for (uint x = 0; x < GridSize; x++) { for (uint y = 0; y < GridSize; y++) { points.InsertNextPoint(x, y, (x + y) / (y + 1)); } } double[] bounds = points.GetBounds(); // Add the grid points to a polydata object vtkPolyData inputPolyData = vtkPolyData.New(); inputPolyData.SetPoints(points); // Triangulate the grid points vtkDelaunay2D delaunay = vtkDelaunay2D.New(); #if VTK_MAJOR_VERSION_5 delaunay.SetInput(inputPolyData); #else delaunay.SetInputData(inputPolyData); #endif delaunay.Update(); vtkElevationFilter elevationFilter = vtkElevationFilter.New(); elevationFilter.SetInputConnection(delaunay.GetOutputPort()); elevationFilter.SetLowPoint(0.0, 0.0, bounds[4]); elevationFilter.SetHighPoint(0.0, 0.0, bounds[5]); elevationFilter.Update(); vtkPolyData output = vtkPolyData.New(); output.ShallowCopy(vtkPolyData.SafeDownCast(elevationFilter.GetOutput())); vtkFloatArray elevation = vtkFloatArray.SafeDownCast(output.GetPointData().GetArray("Elevation")); // Create the color map vtkLookupTable colorLookupTable = vtkLookupTable.New(); colorLookupTable.SetTableRange(bounds[4], bounds[5]); colorLookupTable.Build(); // Generate the colors for each point based on the color map vtkUnsignedCharArray colors = vtkUnsignedCharArray.New(); colors.SetNumberOfComponents(3); colors.SetName("Colors"); for (int i = 0; i < output.GetNumberOfPoints(); i++) { double val = elevation.GetValue(i); Debug.WriteLine("val: " + val); double[] dcolor = colorLookupTable.GetColor(val); //Debug.WriteLine("dcolor: " // + dcolor[0] + " " // + dcolor[1] + " " // + dcolor[2]); byte[] color = new byte[3]; for (int j = 0; j < 3; j++) { color[j] = (byte)(255 * dcolor[j]); } //Debug.WriteLine("color: " // + color[0] + " " // + color[1] + " " // + color[2]); colors.InsertNextTuple3(color[0], color[1], color[2]); } output.GetPointData().AddArray(colors); // Visualize vtkPolyDataMapper mapper = vtkPolyDataMapper.New(); #if VTK_MAJOR_VERSION_5 mapper.SetInputConnection(output.GetProducerPort()); #else mapper.SetInputData(output); #endif vtkActor actor = vtkActor.New(); actor.SetMapper(mapper); // get a reference to the renderwindow of our renderWindowControl1 vtkRenderWindow renderWindow = renderWindowControl1.RenderWindow; // renderer vtkRenderer renderer = renderWindow.GetRenderers().GetFirstRenderer(); // set background color renderer.SetBackground(0.2, 0.3, 0.4); // add our actor to the renderer renderer.AddActor(actor); }
static public vtkProp3D genFieldActor(FieldBase data) { int N_width = data.Ex.Count; int M_depth = data.Ex.Count; double ds = data.ds_x; double width = N_width * ds; double depth = M_depth * ds; vtkImageData img = vtkImageData.New(); img.SetDimensions(N_width, M_depth, 1); img.SetSpacing(0.01 * ds / 0.01, 0.01 * ds / 0.01, 1); img.SetScalarTypeToDouble(); img.SetNumberOfScalarComponents(1); double max = -100000000, min = 0; List <List <Complex> > tempEH = null; int content = 1; bool isPhs = false; bool isLinear = true; const double dB_RABNGE = 60; switch (content) { case 0: tempEH = data.Ex; break; case 1: tempEH = data.Ey; break; case 2: tempEH = data.Ez; break; case 3: tempEH = data.Hx; break; case 4: tempEH = data.Hy; break; case 5: tempEH = data.Hz; break; default: break; } double[] data_tmp = new double[M_depth * N_width]; int count = 0; for (int j = 0; j < M_depth; j++) { for (int i = 0; i < N_width; i++) { double tempD; Complex temp; temp = tempEH[i][j]; if (isPhs) { if (temp.real != 0) { tempD = Math.Atan2(temp.imag, temp.real); } else { tempD = 0; } } else { tempD = Math.Pow((temp.real * temp.real + temp.imag * temp.imag), 0.5); } if (!isLinear && !isPhs) { tempD = 20 * Math.Log(tempD + 0.000000001); if (min > tempD) { min = tempD; } if (max < tempD) { max = tempD; } } else { if (max < tempD) { max = tempD; } if (min > tempD) { min = tempD; } } data_tmp[count++] = tempD; } } //ptr = img.GetScalarPointer(); vtkLookupTable colorTable = vtkLookupTable.New(); if (!isLinear && !isPhs) { min = max - dB_RABNGE; } if (!isPhs) { for (int i = 0; i < N_width * M_depth * 1; i++) { data_tmp[i] = max - data_tmp[i]; } colorTable.SetRange(0, max - min); } else { colorTable.SetRange(min, max); } IntPtr ptr = img.GetScalarPointer(); System.Runtime.InteropServices.Marshal.Copy(data_tmp, 0, ptr, M_depth * N_width); colorTable.Build(); vtkImageMapToColors colorMap = vtkImageMapToColors.New(); colorMap.SetInput(img); colorMap.SetLookupTable(colorTable); colorMap.Update(); vtkTransform transform = vtkTransform.New(); transform.Translate(data.coordinate.pos.x, data.coordinate.pos.y, data.coordinate.pos.z); transform.RotateWXYZ(data.coordinate.rotate_theta, data.coordinate.rotate_axis.x, data.coordinate.rotate_axis.y, data.coordinate.rotate_axis.z); transform.Translate(-width / 2, -depth / 2, 0); vtkImageActor actor = vtkImageActor.New(); actor.SetInput(colorMap.GetOutput()); actor.SetUserTransform(transform); return(actor); }
private void DrawRainBow() { //# First create pipeline a simple pipeline that reads a structure grid //# and then extracts a plane from the grid. The plane will be colored //# differently by using different lookup tables. //# //# Note: the Update method is manually invoked because it causes the //# reader to read; later on we use the output of the reader to set //# a range for the scalar values. vtkMultiBlockPLOT3DReader pl3d = vtkMultiBlockPLOT3DReader.New(); pl3d.SetXYZFileName(@"..\..\Data\combxyz.bin"); pl3d.SetQFileName(@"..\..\Data\combq.bin"); pl3d.SetScalarFunctionNumber(100); pl3d.SetVectorFunctionNumber(202); pl3d.Update(); vtkDataObject pl3d_output = pl3d.GetOutput().GetBlock(0); vtkStructuredGridGeometryFilter planeFilter = vtkStructuredGridGeometryFilter.New(); planeFilter.SetInputData(pl3d_output); planeFilter.SetExtent(1, 100, 1, 100, 7, 7); vtkLookupTable lut = vtkLookupTable.New(); vtkPolyDataMapper planeMapper = vtkPolyDataMapper.New(); planeMapper.SetLookupTable(lut); planeMapper.SetInputConnection(planeFilter.GetOutputPort()); //planeMapper.SetScalarRange(pl3d_output.) vtkActor planeActor = vtkActor.New(); planeActor.SetMapper(planeMapper); //this creates an outline around the data vtkStructuredGridOutlineFilter outlineFilter = vtkStructuredGridOutlineFilter.New(); outlineFilter.SetInputData(pl3d_output); vtkPolyDataMapper outlineMapper = vtkPolyDataMapper.New(); outlineMapper.SetInputConnection(outlineFilter.GetOutputPort()); vtkActor outlineActor = vtkActor.New(); outlineActor.SetMapper(outlineMapper); //Much of the following is commented out. To try different lookup tables. //This create a black to white lut //lut.SetHueRange(0, 0); //lut.SetSaturationRange(0, 0); //lut.SetValueRange(0.2, 1.0); //This creates a red to blue lut //lut.SetHueRange(0.0, 0.677); //This creates a blue to red lue lut.SetHueRange(0.667, 0.0); //This creates a weird effect. the Build() method cause lookup //table to allocate memory and create a table based on the correct //hue, saturatioin, value, and alpha range. Here we then //manully overwrite the value generated by the Build() method. lut.SetNumberOfColors(256); lut.Build(); for (int i = 0; i < 16; i++) { lut.SetTableValue(i * 16, (float)Color.Red.R / 256, (float)Color.Red.G / 256, (float)Color.Red.B / 256, 1); lut.SetTableValue(i * 16 + 1, (float)Color.Green.R / 256, (float)Color.Green.G / 256, (float)Color.Green.B / 256, 1); lut.SetTableValue(i * 16 + 2, (float)Color.Blue.R / 256, (float)Color.Blue.G / 256, (float)Color.Blue.B / 256, 1); lut.SetTableValue(i * 16 + 3, (float)Color.Black.R / 256, (float)Color.Black.G / 256, (float)Color.Black.B / 256, 1); } //Create the renderwindow, the render and both actors vtkRenderer ren = vtkRenderer.New(); vtkRenderWindow renWin = myRenderWindowControl.RenderWindow; renWin.AddRenderer(ren); //Add the actors to the renderer, set the backgroud ren.AddActor(outlineActor); ren.AddActor(planeActor); ren.SetBackground(0.1, 0.2, 0.4); ren.TwoSidedLightingOff(); }