私はある種のジオメトリの単位セルを作成し、それを複製して、例えば、単位セルの3×3×3アレイ。結果は.stlとして保存されます。目標は、CADを使用する代わりに、これらの構造を直接作成することでした。PythonとVTKを使ったメモリ管理
私の問題は、計算時間が煩わしいことです(8x8x8の場合は2分〜、通常よりも小さくなります)。最大の問題は、10x10x10も不可能だということです。 VTKは直ちに「サイズの大きい要素の[大きい数]を割り当てることができません」というエラーをスローします。これは、私の記憶管理が不十分である(存在しない)と私に信じさせる。
私は約vtkSmartPointer
を読んでいますが、C++の説明を見つけることしかできないようです。 vtkSmartPointer
をPythonで正しく使用するにはどうすればよいですか?私はC++の経験が全くないと付け加えるべきです。
MWEは、プログラムサイズのために不可能です。ここにあります代わりに私のアルゴリズムのパイプラインの一部の短縮例は次のとおりです。
import vtk
appendFilter = vtk.vtkAppendPolyData()
# create all 12 struts and combine them into one object
for i in range(1, 13, 1):
tf = create_strut(i, node_dist, amp, d, sides, mode, render=False) # method that creates my unit cell out of 12 struts, parameters are irrelevant
appendFilter.AddInputData(tf.GetOutput())
appendFilter.Update()
# clean up poly data
cleanFilter = vtk.vtkCleanPolyData()
cleanFilter.SetInputConnection(appendFilter.GetOutputPort())
cleanFilter.Update()
# cut the cell to its right size
planes = plane_collection(node_dist) # method that generates 6 planes
clip = vtk.vtkClipClosedSurface()
clip.SetInputData(cleanFilter.GetOutput())
clip.SetClippingPlanes(planes)
clip.Update()
# assemble an array from the unit cell
array = duplicate_cells(clip, xyz[0], xyz[1], xyz[2], node_dist)
# save as .stl
data = array.GetOutputPort()
stlwriter = vtk.vtkSTLWriter()
stlwriter.SetInputConnection(data)
stlwriter.SetFileName("Z:/example.stl")
stlwriter.Update()
stlwriter.Write()
これは私がフィルタを大量に使用し、それらを削除するか、何も気にしないことを証明する必要があります。私の記憶をきれいにする正しい/好きな方法は何ですか?