vtkReflectionFilter :用于将数据集沿一个平面进行镜像反射的过滤器
- SetPlane:设置镜像平面,有x_min,y_min,z_min,x_max,y_max,z_max,x,y,z几种选项
- SetCenter:平面位置,仅在Plane设为 X, Y, Z 时有效,用于指定平面的具体坐标
- SetCopyInput:是否复制原数据。设为 On (默认) 则输出镜像和原数据,设为 Off 则仅输出镜像数据
- SetFlipAllInputArrays:翻转所有数组。默认仅翻转向量、法线等。开启后会翻转输入中的所有3分量数组,需注意:此选项仅在 VTK 7.0+ 版本中可用
cpp
int vtkPlaneMode = vtkReflectionFilter::USE_X;
double planeCenter = model.planePosition;
m_reflectFilter = vtkSmartPointer<vtkReflectionFilter>::New();
m_reflectFilter->SetInputData(m_dataSet);
switch (model.planeMode) {
case 0: vtkPlaneMode = vtkReflectionFilter::USE_X_MIN; break;
case 1: vtkPlaneMode = vtkReflectionFilter::USE_Y_MIN; break;
case 2: vtkPlaneMode = vtkReflectionFilter::USE_Z_MIN; break;
case 3: vtkPlaneMode = vtkReflectionFilter::USE_X_MAX; break;
case 4: vtkPlaneMode = vtkReflectionFilter::USE_Y_MAX; break;
case 5: vtkPlaneMode = vtkReflectionFilter::USE_Z_MAX; break;
case 6: vtkPlaneMode = vtkReflectionFilter::USE_X; break;
case 7: vtkPlaneMode = vtkReflectionFilter::USE_Y; break;
case 8: vtkPlaneMode = vtkReflectionFilter::USE_Z; break;
default:
return false;
}
m_reflectFilter->SetPlane(vtkPlaneMode);
m_reflectFilter->SetCenter(planeCenter);
m_reflectFilter->SetCopyInput(static_cast<int>(model.copyInput));
m_reflectFilter->SetFlipAllInputArrays(true);
m_reflectMapper = vtkSmartPointer<vtkDataSetMapper>::New();
m_reflectMapper->SetInputConnection(m_reflectFilter->GetOutputPort());
m_reflectMapper->ScalarVisibilityOff();
if (!m_reflectActor) {
m_reflectActor = vtkSmartPointer<vtkActor>::New();
}
m_renderer->RemoveActor(m_reflectActor);
m_renderer->AddActor(m_reflectActor);
m_reflectActor->SetMapper(m_reflectMapper);
m_reflectActor->GetProperty()->SetColor(0.9, 0.9, 0.9);
setActorRenderMode(m_reflectActor);