Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:numpy数组到vtk stl文件创建者。如何设置间距?_Python_Arrays_Numpy_Vtk - Fatal编程技术网

Python:numpy数组到vtk stl文件创建者。如何设置间距?

Python:numpy数组到vtk stl文件创建者。如何设置间距?,python,arrays,numpy,vtk,Python,Arrays,Numpy,Vtk,尊敬的Python和VTK用户。我正在努力从巨大的3D numpy阵列中生成合适的STL。STL文件是使用VTK库生成的,但是当我在CAD软件中打开它时,我可以观察到不正确的形状(由于缺少间距)。似乎所有这些“体素”的大小都是(1,1,1),但是,它们的大小应该是(0.48,0.48,0.625)-缺少与像素间距有关的数据。我是一个新手程序员,几乎不懂python和VTK,所以我需要你的帮助。当我将numpy阵列转换为VTK时,如何添加有关像素间距的信息已找到答案。 #my_numpy_arra

尊敬的Python和VTK用户。我正在努力从巨大的3D numpy阵列中生成合适的STL。STL文件是使用VTK库生成的,但是当我在CAD软件中打开它时,我可以观察到不正确的形状(由于缺少间距)。似乎所有这些“体素”的大小都是(1,1,1),但是,它们的大小应该是(0.48,0.48,0.625)-缺少与像素间距有关的数据。我是一个新手程序员,几乎不懂python和VTK,所以我需要你的帮助。当我将numpy阵列转换为VTK时,如何添加有关像素间距的信息已找到答案。

#my_numpy_array is defined in other part of my script

stack=my_numpy_array[:,:,:]
dataImporter = vtk.vtkImageImport()
data_string = stack.tostring()

dataImporter.CopyImportVoidPointer(data_string, len(data_string))
dataImporter.SetDataScalarTypeToUnsignedChar()
dataImporter.SetNumberOfScalarComponents(1)


w, d, h = stack.shape
dataImporter.SetDataExtent(0, h-1,0, d-1, 0, w-1)
dataImporter.SetWholeExtent(0, h-1,0, d-1, 0, w-1)

#here is the line that I was missing:
dataImporter.SetDataSpacing( 0.625, 0.48, 0.48)



threshold = vtk.vtkImageThreshold ()
threshold.SetInputConnection(dataImporter.GetOutputPort())
threshold.ThresholdByLower(128)
threshold.ReplaceInOn()
threshold.SetInValue(0)
threshold.ReplaceOutOn()
threshold.SetOutValue(1)
threshold.Update()

"""imageData = vtk.vtkImageData()
imageData.SetSpacing(0.48,0.48,0.625)
imageData.SetInputConnection(threshold.GetOutputPort())
imageData.Update())"""

dmc = vtk.vtkDiscreteMarchingCubes()
dmc.SetInputConnection(threshold.GetOutputPort())
dmc.GenerateValues(1, 1, 1)
dmc.Update()

writer = vtk.vtkSTLWriter()
writer.SetInputConnection(dmc.GetOutputPort())
writer.SetFileTypeToBinary()
writer.SetFileName("file.stl")
writer.Write()

我尝试使用vtkImageData(),但是,它不起作用。如果你能帮我解决这场巨大的斗争,我将非常高兴。

很抱歉论坛上出现垃圾邮件,但我已经解决了。我只需要添加一行:dataImporter.setdataspace(0.625,0.48,0.48)很好@Zibi,但我认为您应该制定一个答案。回答你自己的问题是可以的,但是请提供一个高质量的答案(也许通过扩展你的评论,在相关部分显示正确的代码)。请原谅。我想粘贴一部分代码作为答案,但我做不到(这是我第一次使用stackoverflow,请原谅)。尽管如此,我还是试图在错误的位置添加SetDataSpace(),这就是为什么它之前没有工作的原因。我已经用代码的正确部分编辑了这篇文章,很抱歉论坛上有垃圾邮件,但我已经找到了答案。我只需要添加一行:dataImporter.setdataspace(0.625,0.48,0.48)很好@Zibi,但我认为您应该制定一个答案。回答你自己的问题是可以的,但是请提供一个高质量的答案(也许通过扩展你的评论,在相关部分显示正确的代码)。请原谅。我想粘贴一部分代码作为答案,但我做不到(这是我第一次使用stackoverflow,请原谅)。尽管如此,我还是试图在错误的位置添加SetDataSpace(),这就是为什么它之前没有工作的原因。我已经用代码的正确部分编辑了OP