我正在使用vtk庫構建地震動態地圖。Python - 如何追蹤(添加/刪除)多個迭代中的大量類實例?
我已經做了一個靜態的(見這裏:https://github.com/yacobuk/QuakeCloud和這裏:http://www.youtube.com/watch?v=4HVdTcI_ozI),所以我知道基本思想的作品,但現在我想嘗試並隨時間顯示地震。
我有一些代碼示例,告訴我如何更新框架,以及如何添加/刪除對象,但我堅持搞清楚如何啓動一個實例,跟蹤它幾個時期,然後刪除它。
基本的添加/刪除的代碼看起來是這樣的:
for point_and_mag in pm.points_mag:
time.sleep(0.5)
mag = point_and_mag[1]
point = point_and_mag[0]
if mag > 2:
pointCloud = VtkPointCloud(pm)
pointCloud.addPoint(point, math.log(mag)*10)
renderer.AddActor(pointCloud.vtkActor)
renderer.ResetCamera()
renderWindow.Render()
time.sleep(0.3)
renderer.RemoveActor(pointCloud.vtkActor)
renderer.ResetCamera()
renderWindow.Render()
但當然,這僅允許一個對象在時間(通過renderer.AddActor(pointCloud.vtkActor)
的pointCloud.vtkActor
一個實例等待一段時間,然後用renderer.RemoveActor(pointCloud.vtkActor)
如何添加一些演員(我將使用10分鐘的時間間隔,並且當時有多達5次地震),用計數器標記它,在每次循環迭代時增加計數器,並且當它達到5次迭代時,刪除演員?
有一些更多的上下文這個問題在這裏:Python/vtk - set each point size individually in a vtkPolyData object?
啊,OK。我認爲我正朝着正確的方向前進,計劃是將一個時間段中的每個點添加到單個演員,然後我只有5個演員跟蹤該集。我沒有意識到這個想法,我可以看到使用滾動緩衝區/隊列來有效地窗口實時數據的價值。謝謝,這很好。我還看到了雙開箱,並認爲它是笨拙的,我打算單獨解開它,但你的方法是waaaay更清潔 - 謝謝你的提示!讚賞。 –
這是非常接近的,但是當它碰到'不是None'子句--' AttributeError:removeActor'時會拋出一個錯誤。我查看了'rendered_actors [-1]'對象,它看起來是相同的對象(數據在'pointCloud.vtkActor' =='rendered_actors [-1]'中。 –
糾錯:'renderer.RemoveActor(rendered_actors [-1])'。就像一個魅力!太棒了,謝謝! –