开源众包
14人浏览/6人投稿
393天前
已托管赏金
价格可议,提供一个Demo即可,目前剩余裁剪部分实现这个功能的第一步就是要能在VR图像上画一个多边形的标注,并获取多边形的顶点,在VTK中我们可以通过vtkInteractorStyleDrawPolygon实现。this->m_iren->SetInteractorStyle(this->m_lassoStyle);this->m_lassoStyle->GetPolygonPoints()有了多边形的顶点,我们需要计算出体数据场vtkBoundingBox垂直屏幕方向最远点、和最近点,然后根据最近点和最远点以及顶点信息生成一个多边形vtkPolyData,计算该多边形与体数据场的最大交集,并根据交集生成一个vtkImageData用于掩膜。上面过程我们用到了VTK中的vtkPolyDataToImageStencil、vtkImageStencilToImage类。stencilToImage->SetInputData(BrushPolyDataToStencil->GetOutput());stencilToImage->SetInsideValue(0);stencilToImage->SetOutsideValue(255);stencilToImage->SetOutputScalarType(VTK_UNSIGNED_CHAR);stencilToImage->Update();有了掩膜vtkImageData后,我们就可以进行裁剪操作了,如果体绘制使用的是vtkGPUVolumeRayCastMapper类,可以调用SetMaskInput函数来实现裁剪操作。如果体绘制用的不是vtkGPUVolumeRayCastMapper,则可以根据掩膜结果直接操作原始vtkImageData,将原始数据中对应的值设置成一个边缘值,通过映射后该边缘值会被映射成一个黑色。