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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

Q&A

1回答

855閲覧

pyvistaによる3Dデータ同士の足し引きについて

sp191

総合スコア1

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

0グッド

0クリップ

投稿2022/12/05 07:42

前提

pythonのpyvistaを用いて、2つの3Dデータ同士の足し引きを行おうと考えています。

実現したいこと

以下のような平行六面体の中から、
イメージ説明
固定位置にある球体をくりぬいていき、
イメージ説明
最終的に平行六面体の中にクレーターができたような立体を作りたいと考えています。

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

しかし、以下のようなエラーが表示され、思うように立体が出力されません。

ERROR:root:No points/cells to operate on
Traceback (most recent call last):
File "C:\Users*\cad3.py", line 34, in <module>
subtracted=subtracted-pv.Sphere(radius=1.5, center=(x[0], x[1], x[2]))
File "C:\Users*
\pyvista\core\pointset.py", line 928, in sub
return self.boolean_difference(cutting_mesh)
File "C:\Users*\pyvista\core\filters\poly_data.py", line 316, in boolean_difference
return self._boolean('difference', other_mesh, tolerance, progress_bar=progress_bar)
File "C:\Users*
\pyvista\core\filters\poly_data.py", line 78, in _boolean
raise NotAllTrianglesError("Make sure both the input and output are triangulated.")
pyvista.core.errors.NotAllTrianglesError: Make sure both the input and output are triangulated.

該当のソースコード

ソースコードは以下の通りとなります。

import numpy as np
import pyvista as pv
from pyvista import examples

#平行六面体
a=[10.3559103, 0, 0]
b=[5.896951249, 8.512980919, 0]
c=[5.896951249, 3.088725841, 7.932881999]
vertices=np.array([[0, 0, 0], a, [x+y for x, y in zip(a, b)], b, c, [x+y for x, y in zip(a, c)], [x+y+z for x, y, z in zip(a, b, c)], [x+y for x, y in zip(b, c)]])
faces=np.hstack([[4, 0, 1, 2, 3], [4, 4, 5, 6, 7], [4, 0, 1, 5, 4], [4, 3, 2, 6, 7], [4, 0, 4, 7, 3], [4, 1, 5, 6, 2]])
hexahedron=pv.PolyData(vertices, faces).triangulate()

#球体の座標
particle_coordinates=[
[6.09692140007496, 7.11117400736113, 0.90998651328237],
[8.81611700568463, 4.18411507652898, 4.41893502931168],
[12.5421432054935, 4.99850518084874, 7.46484920848187],
[5.7222559705099, 1.92865547036078, 2.66685804719921],
[15.5954635493239, 4.07668654519134, 7.87222596090579],
[13.0365970393955, 7.2950214675815, 4.89336477824595],
[12.1461765720701, 7.69670673623446, 7.6901335880258],
[14.9977694749948, 8.27629391793453, 7.31868302287639],
[13.6403367137098, 8.26192585787121, 1.63089634553616],
[14.4373121118686, 4.67871533316406, 5.11464550601519],
]

#平行六面体から球体を引いていく処理
subtracted=hexahedron
for x in particle_coordinates:
subtracted=subtracted-pv.Sphere(radius=1.5, center=(x[0], x[1], x[2]))

#立体の表示
pl=pv.Plotter()
pl.add_mesh(subtracted)
pl.show()

おそらく初歩的な内容かと存じますが、どなたか原因のわかる方がいらしたら、お教えいただけますでしょうか。

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

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

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

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

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

guest

回答1

0

pyvista使ったことなくエラーメッセージからだけの推測ですが、pv.Sphere(...)も平行六面体と同じく.triangulate()しないといけないのではないでしょうか?

投稿2022/12/05 07:48

can110

総合スコア38266

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問