pyvistaというライブラリを初めて知りましたが、検索しても日本語の解説記事はほとんどないですね。これではとりわけプログラミングの初心者の方には難しいと思います。私も調べたり試したりしながら書いています。
まずSTLファイルを読み込めない
エラーのトレースバックを見る限りはファイルの読み込みはできていると思います。まず座標位置の取得の前に、そこだけ先に確認しましょう。
試行錯誤する際にはPythonの対話モードを使うのが有効です。
ここでは国土地理院の以下のページのSTLファイルを借りて試しています。
立体模型を作る(ダウンロード編)
python
1$ python3
2Python 3.9.6 (v3.9.6:db3ff76da1, Jun 28 2021, 11:49:53)
3[Clang 6.0 (clang-600.0.57)] on darwin
4Type "help", "copyright", "credits" or "license" for more information.
5>>> import pyvista as pv
6>>> filename = "Kurobe_gorge_and_dam.stl"
7>>> mesh = pv.read(filename)
8>>> mesh.n_points
9274045
10>>> mesh.n_faces
11548086
12>>> mesh.points
13pyvista_ndarray([[ 0. , 0. , 37.85],
14 [ 0.31, 0. , 37.92],
15 [ 0. , 0.31, 37.78],
16 ...,
17 [159.69, 158.47, 0. ],
18 [159.69, 158.77, 0. ],
19 [159.69, 159.08, 0. ]], dtype=float32)
20>>> mesh.faces
21array([ 3, 0, 1, ..., 271964, 273006, 274044])
22>>> mesh.center
23[79.84500122070312, 79.69499969482422, 27.979999542236328]
24>>> mesh.plot()
上のようにエラーなく実行できたらちゃんとファイルは読み込めています。
最後に mesh.plot()
で画像表示していますが、こちらののショートカットキーが使えるはずなのですが、私の環境 (macOS 11.6) では q で画面が閉じません(Pythonを終了しないと閉じてくれない)。
さて問題の座標位置の取得ですが、track_click_position
を使うとできました。ここでは取得した座標は標準出力に出力しています。引数についての説明は以下のドキュメントを参照してください。
track_click_position — PyVista 0.32.dev0 ドキュメント
python
1$ python3
2Python 3.9.6 (v3.9.6:db3ff76da1, Jun 28 2021, 11:49:53)
3[Clang 6.0 (clang-600.0.57)] on darwin
4Type "help", "copyright", "credits" or "license" for more information.
5>>> import pyvista as pv
6>>> filename = "Kurobe_gorge_and_dam.stl"
7>>> mesh = pv.read(filename)
8>>> plotter = pv.Plotter()
9>>> plotter.add_mesh(mesh)
10(vtkmodules.vtkRenderingOpenGL2.vtkOpenGLActor)0x7fd048024220
11>>> plotter.track_click_position(callback=lambda x:print(x), side='left')
12>>> plotter.show()
13(39.357952388891874, 69.84216556248087, 28.931912243273718)
14(65.3450093773272, 48.55748717111935, 17.09973168410912)
15(120.28932461208045, 86.98870357797509, 12.0977042859857)
16(118.18047189072215, 137.8723684859511, 39.556068323343524)