您好,登錄后才能下訂單哦!
這篇文章主要介紹了怎么用Python VTK映射三維模型表面距離的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇怎么用Python VTK映射三維模型表面距離文章都會有所收獲,下面我們一起來看看吧。
數據準備: 需要準備兩個stl文件、Python需要安裝vtk庫
步驟一:數據讀取 首先通過vtk.vtkSTLReader() 定義stl文件讀取接口,再通過reader1.GetOutput() 就可以獲得stl在vtk工作流的數據。
步驟二:去除重復點 通過vtk.vtkCleanPolyData() 可以去除模型中的重復點
步驟三:計算距離 使用 vtk.vtkDistancePolyDataFilter() ,使用上一步中過濾掉重復點后的數據作為輸入。如distanceFilter.SetInputConnection(1, clean1.GetOutputPort()), 其中第一個參數就是輸入數據的標號,從0開始計數;第二個參數就是輸入的數據。我們將vtkDistancePolyDataFilter的輸出到mapper就完成距離映射了。
步驟四:顏色配置 lut = vtk.vtkLookupTable() 相當于一個調色盤函數,通過對其參數改變可以,調整最終映射的顏色范圍。 scalarBar = vtk.vtkScalarBarActor() 就是顏色條,按照前面的調色盤的結果將距離數值映射成顏色。
import vtk input1 = vtk.vtkPolyData() reader1 = vtk.vtkSTLReader() reader1.SetFileName('model1.stl') reader1.Update() input1 = reader1.GetOutput() # 讀取模型A input2 = vtk.vtkPolyData() reader2 = vtk.vtkSTLReader() reader2.SetFileName('model2.stl') reader2.Update() input2 = reader2.GetOutput() # 讀取模型B # 數據合并,可以合并顯示兩個模型 clean1 = vtk.vtkCleanPolyData() clean1.SetInputData(input1) clean2 = vtk.vtkCleanPolyData() clean2.SetInputData(input2) distanceFilter = vtk.vtkDistancePolyDataFilter() distanceFilter.SetInputConnection(1, clean1.GetOutputPort()) distanceFilter.SetInputConnection(0, clean2.GetOutputPort()) distanceFilter.SignedDistanceOff() distanceFilter.Update() # 計算距離 distanceFilter.GetOutputPort() mapper = vtk.vtkPolyDataMapper() # 配置mapper mapper.SetInputConnection(distanceFilter.GetOutputPort()) mapper.SetScalarRange( # 設置顏色映射范圍 distanceFilter.GetOutput().GetPointData().GetScalars().GetRange()[0], distanceFilter.GetOutput().GetPointData().GetScalars().GetRange()[1]) actor = vtk.vtkActor() actor.SetMapper(mapper) actor1 = vtk.vtkActor() actor1.SetMapper(mapper) lut = vtk.vtkLookupTable() lut.SetHueRange(0.2, 0.7) # 映射的顏色變換參數(自己調顏色) # lut.SetAlphaRange(1.0, 1.0) # lut.SetValueRange(1.0, 1.0) # lut.SetSaturationRange(1.0, 1.0) # lut.SetNumberOfTableValues(256) mapper.SetLookupTable(lut) mapper2 = vtk.vtkPolyDataMapper() mapper2.SetInputData((distanceFilter.GetSecondDistanceOutput())) mapper2.SetScalarRange( # 設置顏色映射范圍 distanceFilter.GetSecondDistanceOutput().GetPointData().GetScalars().GetRange()[0], distanceFilter.GetSecondDistanceOutput().GetPointData().GetScalars().GetRange()[1]) actor2 = vtk.vtkActor() actor2.SetMapper(mapper2) scalarBar = vtk.vtkScalarBarActor() # 設置color_bar scalarBar.SetLookupTable(mapper.GetLookupTable()) scalarBar.SetTitle("SD(mm)") scalarBar.SetNumberOfLabels(5) # 設置要顯示的刻度標簽數。自己設定色帶的位置 scalarBar.SetMaximumNumberOfColors(10) # scalarBar.GetPositionCoordinate().SetCoordinateSystemToNormalizedViewport() # scalarBar.GetPositionCoordinate().SetValue(0.01, 0.49) # 參數越小越靠左,第二個參數越大越往上 # scalarBar.SetWidth(0.16) # scalarBar.SetHeight(0.5) # scalarBar.SetTextPositionToPrecedeScalarBar() # 標題和刻度標記是否應在標量欄之前(文字會出現在條形左邊) # # 設置標題和條形之間的邊距 # scalarBar.SetVerticalTitleSeparation(10) # # 設置標題顏色 scalarBar.DrawTickLabelsOn() scalarBar.GetTitleTextProperty().SetColor(0, 0, 0) scalarBar.GetLabelTextProperty().SetColor(0, 0, 0) arender = vtk.vtkRenderer() arender.SetViewport(0, 0.0, 1, 1.0) renWin = vtk.vtkRenderWindow() renWin.AddRenderer(arender) iren = vtk.vtkRenderWindowInteractor() iren.SetRenderWindow(renWin) style = vtk.vtkInteractorStyleTrackballActor() iren.SetInteractorStyle(style) aCamera = vtk.vtkCamera() aCamera.SetViewUp(0, 0, -1) aCamera.SetPosition(0, -1, 0) aCamera.ComputeViewPlaneNormal() aCamera.Azimuth(30.0) aCamera.Elevation(30.0) aCamera.Dolly(1.5) arender.AddActor(actor) # arender.AddActor(actor1) arender.SetActiveCamera(aCamera) arender.ResetCamera() arender.SetBackground(1, 1, 1) arender.ResetCameraClippingRange() arender.AddActor2D(scalarBar) renWin.Render() iren.Initialize() iren.Start()
結果示例:
關于“怎么用Python VTK映射三維模型表面距離”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“怎么用Python VTK映射三維模型表面距離”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。