2016-04-01 12 views
0

私はある種のジオメトリの単位セルを作成し、それを複製して、例えば、単位セルの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() 

これは私がフィルタを大量に使用し、それらを削除するか、何も気にしないことを証明する必要があります。私の記憶をきれいにする正しい/好きな方法は何ですか?

答えて

0

私はこれを投稿して以来、VTKについて多くのことを読んできたので、Pythonはメモリ管理そのものを担当します。 SmartPointersとDelete()は、C++環境でのみ必要です。

さらに、Python 2.7とVTK 6.2からPython 3.4とVTK 7.0にアップグレードし、プログラムの全体的なパフォーマンスを大幅に改善しました。したがって、私は問題が古いVTKバージョンにあったと思います。