中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么用Python?VTK映射三維模型表面距離

發布時間:2022-04-18 15:26:38 來源:億速云 閱讀:229 作者:iii 欄目:開發技術

這篇文章主要介紹了怎么用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映射三維模型表面距離”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“怎么用Python VTK映射三維模型表面距離”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南乐县| 北流市| 温州市| 湘乡市| 峡江县| 宝丰县| 平乐县| 玉环县| 田阳县| 客服| 江陵县| 临邑县| 九寨沟县| 广宗县| 鹤壁市| 绥棱县| 石嘴山市| 伊金霍洛旗| 石渠县| 洪泽县| 海盐县| 克山县| 辽阳县| 若羌县| 崇仁县| 苍梧县| 彰化县| 乐东| 翼城县| 阜新市| 象山县| 武穴市| 双牌县| 安义县| 阿拉善右旗| 兰溪市| 汉沽区| 临洮县| 堆龙德庆县| 黔西县| 桐柏县|