Я написал довольно сложную программу на языке питона, которая создает элементарную ячейку определенной геометрии и дублирует ее так, что я получаю, например. массив 3x3x3 элементарной ячейки. Результат сохраняется как .stl. Цель заключалась в том, чтобы создать эти структуры напрямую, вместо использования САПР.Управление памятью с помощью python и VTK
Моя проблема заключается в том, что время вычисления раздражает (~ 2 минуты для 8x8x8, что меньше, чем мне нужно). Самая большая проблема заключается в том, что 10x10x10 даже невозможен. VTK немедленно выдает ошибку «Невозможно выделить [большое количество] элементов размером 8 байтов». Это заставляет меня думать, что моего управления памятью недостаточно (не существует).
Я прочитал около 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()
Это должно продемонстрировать, что я использую много фильтров и никогда не заботиться об удалении их или что-нибудь. Каков правильный/предпочтительный способ очистки памяти?