質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

STL

STL(Standard Template Library)は、ジェネティックコンテイナー、イテレーター、アルゴリズム、そして関数オブジェクトのC++ライブラリーです。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

3806閲覧

メッシュで構成された3Dモデルの座標位置を取得したい

jy8666

総合スコア2

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

STL

STL(Standard Template Library)は、ジェネティックコンテイナー、イテレーター、アルゴリズム、そして関数オブジェクトのC++ライブラリーです。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2021/10/19 18:35

編集2021/12/21 03:24

前提・実現したいこと

3Dモデルの表面座標を取得するプログラムをPythonで作りたいと考えています。
ポリゴンで構成されているSTLファイル上で、マウスでクリックした表面の座標を取得したいです。

発生している問題・エラーメッセージ

まずSTLファイルを読み込めない。
3次元の座標位置を取得するためのアルゴリズムがわからない。

該当のソースコード

ソースコード
import pyvista as pv

filename='ファイル名.stl'
mesh=pv.read(filename)

pv.Plotter.pick_click_position(mesh) #クリック位置の取得

cpos=mesh.show()

試したこと

Pyvistaの関数でPlotter.pick_click_position()が使えると聞いて試したものの、多分使い方が間違ってる。(データプロット用?)
他にも関数を変えてみたりしましたが、自力で解決は叶いませんでした…。

補足情報(FW/ツールのバージョンなど)

[環境]
Windouws10
Python3.8
Anaconda

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

etherbeg

2021/10/20 23:26

エラーメッセージは一部を抜き出すのではなく、Traceback (most recent call last): から始まるすべての行をそのまま記載してください。
jy8666

2021/10/22 01:13

ご指摘ありがとうございます。修正いたしました。
guest

回答1

0

ベストアンサー

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)

投稿2021/10/22 13:49

etherbeg

総合スコア1195

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問