2016-01-20 633 views
2

我有大約1百萬個數據點,代表許多小球的x,y,z,t座標。我試圖創建一個系統來查看它們隨時間的變化。如何使VTK中的「點」變大/變粗/球狀

我正在嘗試製作3D圖。

如果我在VTK中將球作爲「點」來繪製,我發現它們可以很快渲染。但是,在理想情況下,我將使用小球體來表示數據點。

我擔心1M球體渲染時間過長。所以我想知道是否有一些方法來使用vtkpoints類,但是1)看圓形(而不是矩形)和2)當我放大時,迫使它們在屏幕上顯得更大。

回答

0

是的,那裏是。 1)有可能通過vtkPlotPoints課程。 2)通過SetWidth方法是可能的。

這裏是一個可運行的腳本來開導更好,與其他功能可能對您有用:

import vtk 
import math 

view = vtk.vtkContextView() 
view.GetRenderer().SetBackground(1.0, 1.0, 1.0) 
view.GetRenderWindow().SetSize(400, 300) 

chart = vtk.vtkChartXY() 
view.GetScene().AddItem(chart) 
chart.SetShowLegend(True) 

table = vtk.vtkTable() 

arrX = vtk.vtkFloatArray() 
arrX.SetName('X Axis') 

arrC = vtk.vtkFloatArray() 
arrC.SetName('Cosine') 

arrS = vtk.vtkFloatArray() 
arrS.SetName('Sine') 

arrT = vtk.vtkFloatArray() 
arrT.SetName('Sine-Cosine') 

table.AddColumn(arrC) 
table.AddColumn(arrS) 
table.AddColumn(arrX) 
table.AddColumn(arrT) 

numPoints = 40 

inc = 7.5/(numPoints-1) 
table.SetNumberOfRows(numPoints) 
for i in range(numPoints): 
    table.SetValue(i, 0, i*inc) 
    table.SetValue(i, 1, math.cos(i*inc)) 
    table.SetValue(i, 2, math.sin(i*inc)) 
    table.SetValue(i, 3, math.sin(i*inc)-math.cos(i*inc)) 

points = chart.AddPlot(vtk.vtkChart.POINTS) 
points.SetInput(table, 0, 1) 
points.SetColor(0, 0, 0, 255) 
points.SetWidth(4.0) 
points.SetMarkerStyle(vtk.vtkPlotPoints.DIAMOND) #CROSS, SQUARE, CIRCLE... 

points = chart.AddPlot(vtk.vtkChart.POINTS) 
points.SetInput(table, 0, 2) 
points.SetColor(0, 0, 0, 255) 
points.SetWidth(1.0) 
points.SetMarkerStyle(vtk.vtkPlotPoints.PLUS) 

points = chart.AddPlot(vtk.vtkChart.POINTS) 
points.SetInput(table, 0, 3) 
points.SetColor(0, 0, 255, 255) 
points.SetWidth(1.0) 
points.SetMarkerStyle(vtk.vtkPlotPoints.CIRCLE) 

view.GetRenderWindow().SetMultiSamples(0) 
view.GetInteractor().Initialize() 
view.GetInteractor().Start() 

希望這有助於!