做過三維圖形的朋友應該都知道一般在介面左下角會有乙個固定座標系,用來顯示指示方向,便於識別
本人的環境是vs+qt+vtk
以下兩種方法都可以設定座標系:
方法一:(可以參考**:
三維程式設計中,通常會在控制項視窗中設定和顯示座標軸系線,方便操作和使用。vty庫中提供vtkaxesactor類,方便使用者快捷實現三維座標的實現。效果如下:
c#核心**如下:
vtkaxesactor axesactor = vtkaxesactor.new(); // 建立「座標」角色
render1.addactor(axesactor); // 渲染座標角色
說明:1.座標原點位於世界座標系的(0,0,0)點。
2. 座標自帶箭頭和預設顏色、大小。
3.座標物件自帶帶告示板效果的「x」,「y」和「z」。
4.座標軸會自動與視點控制項聯動(不需要另外程式設計)。
5.可通過vtktransform類的設定,移動、旋轉和縮放座標軸。
6.可通過設定 vtkaxesactor的屬性改變座標軸顏色等屬性。
本人在長時間嘗試之後發現本方法可行,但是有以下缺點:
1.單獨使用vs可以顯示x、y、z軸向符號,但是在qvtkwidget中無法實現顯示;
2.座標軸而且不能實現固定大小會伴隨互動器出現放大縮小。
方法二:
查閱資料後,發現可以採用vtkorientationmarkerwidget解決該問題
結合官網例子
一、二:
大致就是這麼幾句話:
vtkorientationmarkerwidget widget = new vtkorientationmarkerwidget();
widget.setoutlinecolor(0, 0, 0);
widget.setorientationmarker(assembly); // 必須:傳乙個vtkprop物件
widget.setinteractor(panel.getiren());// 必須:傳乙個互動物件
widget.setviewport(0.8, 0.0, 1, 0.2);
widget.setenabled(1);
widget.interactiveoff();
但是呢?同樣在vs執行極其順利,到qt中就不行了
這位朋友遇到相同的情況,指明是智慧型指標的問題,出現自動析構,個人突然覺得vtk的vtksmartpointer::new()這個模板生成的變數是在棧空間上?但是事實不是的,很簡單的校驗方法,在不同函式實現呼叫即可,發現沒有被析構,這裡面具體的機理不太清除。
本以為可以解決了,但是依然不可以!!!
心態崩潰,大家現在可以避免和我一樣的問題了!
參考這位大佬的blog,其實我第一次看到的時候也認真看了,但是忽略了後面的核心。。。。。
具體的原因是這樣的,大家可以嘗試理解:
vtk畫圖是分圖層的,有沒有和ps一樣哈哈哈哈哈啊哈哈哈,賊6
vtkorientationmarkerwidget就類似與這麼乙個效果
但是我一直在思考乙個問題,既然是圖層,它怎麼知道我要放在哪個圖裡面呢?因為我用的多個qvtkwidget,所以我一直setposition但是一直沒出來,我以為是多個的問題,但是利用乙個的時候也沒出來。。。
最後看blog的時候,我才知道是因為
widgetaxes->setinteractor(ren1->getrenderwindow()->getinteractor());
這句話把指定視窗與圖層聯絡起來。
另外這句話一定要在renderwindow->setrenderer(ren)之後,不然沒辦法得到renderwindow,因為場景沒有給視窗,又怎麼能通過視窗獲得場景呢,對不對?
最後,我必須得大讚一波vtk的互動器,在乙個介面裡面只需要設定乙個互動器,它可以自動識別每個視窗,通過移動滑鼠在不同視窗上可以實現對不同視窗的互動!!!
最後還有乙個優秀的聯動互動方法
513 找樹左下角的值
給定乙個二叉樹,在樹的最後一行找到最左邊的值。示例 1 輸入 2 1 3 輸出 1 示例 2 輸入 1 2 3 4 5 6 7 輸出 7思路 維護乙個最大深度max depth如果深度更新,則對應的值也更新。這裡注意先更新右邊再更新左邊,這樣最後的值將會是最左邊的值,左邊的值會把右邊的覆蓋掉,如果深...
2021 03 14 513 找樹左下角的值
給定乙個二叉樹,在樹的最後一行找到最左邊的值。示例 1 輸入 2 13輸出 1 示例 2 輸入 1 23 456 7輸出 7 注意 您可以假設樹 即給定的根節點 不為null。這裡可以對二叉樹進行層序遍歷,而層序遍歷就是基於廣度優先遍歷的。在遍歷的過程中,我們初始化乙個佇列來儲存當前層的節點,這個過...
有道雲筆記去除左下角廣告
印象限制登入台數,為知收費,只能投靠有道了,哎!找到有道雲筆記的安裝路徑,youdao youdaonote theme build.xml 用筆記本開啟這個檔案,找到 左下角廣告 這幾個字,把下面的 刪掉 type adpanel css public ass mainform panelclie...