首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅将vtkImageData的结构复制到另一个用零填充的vtkImageData中

仅将vtkImageData的结构复制到另一个用零填充的vtkImageData中
EN

Stack Overflow用户
提问于 2018-02-06 16:01:32
回答 1查看 566关注 0票数 2

我现在正在使用c++和vtk构建一个医学注释系统。

我想要在3d vtkimagedata的切片(轴向、冠状、矢状)上绘制线条或绘画,并连续保存绘制的3d vtkimagedata图像。因此,我计划创建一个新的空(用零填充),但具有与原始vtkimagedata相同的属性。

有没有人知道如何只将vtkimagedata的结构复制到另一个结构?

提前谢谢你!

EN

回答 1

Stack Overflow用户

发布于 2018-02-13 20:57:33

您可以使用ShallowCopy()DeepCopy()函数复制vtkDataSet对象的属性,但如果您只对给定vtkImageData对象的几何结构感兴趣,我认为您可以这样做:

代码语言:javascript
复制
// copy attributes from a to b (assuming access to a by address)
vtkSmartPointer<vtkImageData> b = vtkSmartPointer<vtkImageData>::New();
b->SetOrigin(a->GetOrigin());
b->SetSpacing(a->GetSpacing());
b->SetExtent(a->GetExtent());

然后,您可以添加一个新字段(在下例中与点关联)。您可以随意修改类型和名称以满足您的需求:

代码语言:javascript
复制
// allocate memory for a new scalar field
vtkIdType numberOfPoints = b->GetNumberOfPoints();
vtkSmartPointer<vtkCharArray> f = vtkSmartPointer<vtkCharArray>::New();
f->SetNumberOfComponents(1);
f->SetNumberOfTuples(numberOfPoints);
f->SetName("NewScalarFieldName");

// fill the array with zeros
char *arr = static_cast<char*>(f->GetVoidPointer(0));
std::fill(arr, arr + numberOfPoints, 0);

// add the field to the data set
b->GetPointData()->AddArray(f);

在这里,我使用static_cast是为了能够访问原始数据并对其进行修改,而不会产生太多开销,但您也可以使用SetTuple()函数。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48638114

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档