VTK 7 - 为什么对象被销毁?
VTK 7 - why object gets destroyed?
我正在尝试使用 vtkImageImport
加载原始图像数据并显示 2D 纹理:
char* data = (char*)imgData->data(); // size is 786432
vtkSmartPointer<vtkImageImport> importer = vtkSmartPointer<vtkImageImport>::New();
importer->SetWholeExtent(0, 511, 0, 511, 0, 0);
importer->SetDataExtentToWholeExtent();
importer->SetDataScalarTypeToUnsignedChar();
importer->SetImportVoidPointer(data);
importer->SetNumberOfScalarComponents(3);
importer->Update();
double bounds[6];
vtkImageData* vtk_image_data = importer->GetOutput(); // this is null
vtk_image_data->GetBounds(bounds);
当我调用 importer->Update()
时,vtkDataSet 的析构函数被调用,并且 importer->GetOutput()
returns null...知道为什么会这样吗?
我使用 VTK 6.2.0 在 MSVC 2010 上编译并 运行 你的代码。我没有得到任何 null vtk_image_data。查看一些可能有帮助的宏预处理器。
终于找到问题的原因了。一般来说,我们正在移植 VTK 以与 Google Chrome 的便携式本地客户端 (PNaCl) 一起使用,我必须从头开始创建项目 vtkCommonCore 并将所有设置设置为与 PPAPI\PNACL 一起使用。我缺少 vtkInformationDataObjectKey.cxx
的特殊构建规则,必须在 .vcxproj:
中手动设置
<ClCompile Include="vtkInformationDataObjectKey.cxx">
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">vtkCommonDataModel_ENABLED;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">vtkCommonDataModel_ENABLED;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|Win32'">vtkCommonDataModel_ENABLED;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|Win32'">vtkCommonDataModel_ENABLED;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|PPAPI'">vtkCommonDataModel_ENABLED;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<!-- adding above rule for Debug|PPAPI solved the problem -->
</ClCompile>
我正在尝试使用 vtkImageImport
加载原始图像数据并显示 2D 纹理:
char* data = (char*)imgData->data(); // size is 786432
vtkSmartPointer<vtkImageImport> importer = vtkSmartPointer<vtkImageImport>::New();
importer->SetWholeExtent(0, 511, 0, 511, 0, 0);
importer->SetDataExtentToWholeExtent();
importer->SetDataScalarTypeToUnsignedChar();
importer->SetImportVoidPointer(data);
importer->SetNumberOfScalarComponents(3);
importer->Update();
double bounds[6];
vtkImageData* vtk_image_data = importer->GetOutput(); // this is null
vtk_image_data->GetBounds(bounds);
当我调用 importer->Update()
时,vtkDataSet 的析构函数被调用,并且 importer->GetOutput()
returns null...知道为什么会这样吗?
我使用 VTK 6.2.0 在 MSVC 2010 上编译并 运行 你的代码。我没有得到任何 null vtk_image_data。查看一些可能有帮助的宏预处理器。
终于找到问题的原因了。一般来说,我们正在移植 VTK 以与 Google Chrome 的便携式本地客户端 (PNaCl) 一起使用,我必须从头开始创建项目 vtkCommonCore 并将所有设置设置为与 PPAPI\PNACL 一起使用。我缺少 vtkInformationDataObjectKey.cxx
的特殊构建规则,必须在 .vcxproj:
<ClCompile Include="vtkInformationDataObjectKey.cxx">
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">vtkCommonDataModel_ENABLED;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">vtkCommonDataModel_ENABLED;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|Win32'">vtkCommonDataModel_ENABLED;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|Win32'">vtkCommonDataModel_ENABLED;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|PPAPI'">vtkCommonDataModel_ENABLED;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<!-- adding above rule for Debug|PPAPI solved the problem -->
</ClCompile>