mitk的渲染管道繼承自vtk的渲染管道
vtk渲染管道
在vtk中,vtkrenderwindow協調渲染過程。多個vtkrenderer可能被關聯到乙個vtkrenderwindow。所有能夠存在於乙個渲染場景(2d或3d)中的可見物體,都繼承自vtkprop(或其子類vtkactor)。vtkpropassembly是多個vtkprop的集合,看起來像是乙個vtkprop。
mitk使用新的介面類,vtkmitkrenderprop,同樣繼承自vtkprop。同vtkpropassembly一樣,所有的mitk渲染工作都通過這個介面類進行。所以,mitk的渲染過程被完全融入vtk的渲染管道。從vtk的角度看,mitk的renders就像是自定義的vtkprop。
mitk渲染管道
這個過程與vtk緊密相關。我們使用vtkmitkrenderprop,協同mitk::vtkproprenderer 共同保證與vtk渲染管道的整合。qmitkrenderwindow沒有繼承 mitk::renderwindow,而是繼承自vtk的qvtkwidget
mitk渲染過程中最重要的幾個類如下所示:
向vtkrenderwindow傳送的乙個render請求並不僅僅更新vtk的管道,同樣也更新mitk管道。但是,mitk::renderingmanager仍然協調渲染過程中的更新行為。更新請求應該被送給renderingmanager,如有需要,renderingmanager會請求更新所有的vtkrenderwindow。vtkrenderwindow然後呼叫它關聯著的所有vtkrenderer的render()函式。
sequence diagram for mitk vtk rendering
sequence diagram for mitk opengl rendering
使用者指導:關於渲染的程式設計提示
注意個別渲染管道的建立有時,我們需要某個(或多個)qmitkrenderwindow的管理不同於「通常」的qmitkstdmultiwidget中定義的renderwindow。這可能涉及到被渲染的資料以及可能的互動。為達成這個目的,我們需要一組物件:大多數情況下並不需要用到forceimmediateupdateall()
這幾個類的設定和關聯十分簡單:
// create a new instance of mitk::renderingmanager
mitk::renderingmanager
::pointer renderingmanager = mitk::renderingmanager
::new();
// create new instances of datastorage and globalinteraction
mitk::datastorage
::pointer datastorage = mitk::datastorage
::new();
mitk::globalinteraction
::pointer globalinteraction = mitk::globalinteraction
::new();
// add both to the renderingmanager
renderingmanager->setdatastorage( datastorage );
renderingmanager->setglobalinteraction( globalinteraction );
// now create a new qmitkrenderwindow with this renderingmanager as parameter
qmitkrenderwindow* renderwindow =
new qmitkrenderwindow( parent, "name", renderer, renderingmanager );
這就是建立自己的渲染管道所需的全部內容。顯然,你需要將所有想渲染的資料加入到新的datastorage中。如果你想跟這個renderwindow互動,還需要新增interactors/listeners。
注意重寫getvtkprop(),它應該返回generatedataforrender() 中生成的具體vtkprop(單個actor或者多個actor的組合–propassembly)。應避免將mitk::baserenderer dynamic cast到openglrenderer(或vtkproprenderer)。」mitk scene」 vtkrenderer和vtkrenderwindow 也包含到了mitk::baserenderer中。
在自定義外掛程式中建立MITK類
mtik自帶的類對我們很有借鑑意義,編寫自己的外掛程式時,如果想改寫mitk自帶的類,那麼最好不要在源 中更改,而是自己新建乙個類,將mitk自帶的類移植過來。這個方法同樣適用於想在命名空間mitk中新增自定義類。下面看乙個例子。mitk中自帶的mitkpointsetdatainteractor....
MITK 在原始檔中引用自定義標頭檔案
mitk程式設計中,我們常常需要自定義標頭檔案,比如在vs工程裡面給外掛程式addnoise建立乙個標頭檔案testheadfile.h 正確的做法是 將testheadfile.h複製到原始檔 mitk projecttemplate plugins my.awesomeproject.addno...
Vue 中的列表渲染
let vm new vue 上面是乙個最基礎的列表渲染,在實際開發中,還有很多細節點,為了提公升迴圈的效能,會給迴圈項加乙個唯一的key值。我們可以用index作為唯一的key值。其實不推薦大家這樣使用index的,因為這樣使用index作為key值,在你頻繁操作dom元素時,會比較費效能,無法充...