vtk中用布林運算進行資料裁剪

2021-09-16 18:52:16 字數 1631 閱讀 2428

在vtk中,我們通常需要的並不是嚴格標準的幾何體,我們需要對這些幾何體進行加工,修改其內容,得到我們想要的效果,下面結合例子介紹如何在vtk中實現對幾何體的裁剪。

要對幾何體進行裁剪,需要建立好幾何體模型,然後定義乙個隱函式,利用vtkclippolydata,通過隱函式vtkimplicitfunction實現對模型的裁剪,在vtk中,類似vtkplane,vtksphere,vtkcylinder這些後面沒有source的類,都是隱函式類。

#include "vtkactor.h"

#include "vtkrenderer.h"

#include "vtkrenderwindow.h"

#include "vtkrenderwindowinteractor.h"

#include "vtkcylinder.h"

#include "vtkplane.h"

#include "vtkimplicitboolean.h"

#include "vtkspheresource.h"

#include "vtkproperty.h"

#include "vtkclippolydata.h"

#include "vtktransformpolydatafilter.h"

#include "vtktransform.h"

#include "vtkinteractorstyletrackballcamera.h"

int main()

其中1~14行包含相應標頭檔案

18~22行定義乙個球,其圓心在原點,半徑為10,設定經緯方向的三角片數均為40;

24~26行定義圓柱的隱函式,設定半徑為3,中心在原點,在vtk中的圓柱隱函式是沒有設定長度的,其方向為沿y軸方向,此處的圓柱用於對剛才定義的球進行裁剪,裁剪效果就是把球給打通了,兩面都進行的裁剪,如果要只裁剪球的一面,則用半個圓柱。接下來的28~30行定義了乙個平面,用平面與圓柱求交可得出半個圓柱。

32~35行將平面和圓柱進行bool求交運算(setoperationtypetointersection())得出半個圓柱的隱函式表示cuted_cylinder,如果是求和運算則用setoperationtypetounion()。

37~42行定義了乙個vtkclippolydata物件clipper,將其輸入設定為18~24行建立的球,裁剪函式設定為圓柱cylinder,接下來的三行40~42行似乎沒有什麼用處。

上面得到的只是用乙個圓柱裁剪球的效果,但是為了同時顯示用半個圓柱裁剪的效果,將剛才的裁剪體演x軸移動一定位置,然後用剛才bool運算獲得的半個圓柱進行裁剪,以便於比較。對幾何物件的移動需要指定乙個變換transform,然後定義乙個vtktransformpolydatafilter物件filter,然後將filter的輸入設定為要移動的幾何物件,變換設定為transform。44~48行實現了將裁剪球的移動,其移動結果在filter中。

49~54行將移動後得到的filter作為新一次裁剪的輸入,以半個圓柱cuted_cylinder為裁剪函式進行裁剪,得到裁剪結果clipper2

接下來的就是設定map,actor等常規物件。

ps軟體中怎麼使用布林運算

ps軟體中布林運算的使用方法 首先開啟ps新建一塊畫布,選擇矩形選框工具,這時布林運算的命令就會出現在我們工具欄的上面 然後選擇矩形選框工具,任意拉取乙個新的選框 最後執行布林運算中的第三個命令,從選取減去意思是相減。ps軟體中使用布林運算步驟如下 1 開啟ps新建一塊畫布。2 我們先選擇矩形選框工...

python 布林運算

給定乙個布林表示式和乙個期望的布林結果 result,布林表示式由 0 false 1 true and or 和 xor 符號組成。實現乙個函式,算出有幾種可使該表示式得出 result 值的括號方法。示例 1 輸入 s 1 0 0 1 result 0輸出 2解釋 兩種可能的括號方法是1 0 0...

布林運算製做火箭

首先把要製作的火箭看一下 如圖 首先畫兩個橢圓,然後把它們交集獲得乙個這樣的圖形有一點像火箭的身體了 再然後又畫兩個橢圓還是跟剛剛一樣的但是不是交集了,畫出來以後,把乙個橢圓放到另乙個橢圓的上面,然後來乙個減去頂層形狀就行了.又畫乙個橢圓,把橢圓放到有點像火箭的下面,但是橢圓的圖層一定要到火箭圖層的...