<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
資料準備: 需要準備兩個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 對映內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45