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

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

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

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

STL

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

プログラミング言語

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

Python

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

Q&A

解決済

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

jy8666
jy8666

総合スコア2

Anaconda

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

STL

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

プログラミング言語

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

Python

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

1回答

0グッド

1クリップ

1532閲覧

投稿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

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

etherbeg

2021/10/20 23:26

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

2021/10/22 01:13

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

回答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

総合スコア1190

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Anaconda

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

STL

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

プログラミング言語

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

Python

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