在早期版本中,ActiViz 對 Windows Presentation Foundation (WPF) 框架的支持是通過 WindowsFormHost 組件實現的,這種方式依賴于 WindowsForm 和 WPF 的互操作性。然而,這種方法存在一個眾所周知的“空域問題”(airspace issue),即 WindowsForm 的內容總是覆蓋在 WPF 組件之上,影響了界面的渲染效果。
在最新版本后 ,ActiViz 提供了通過原生 D3DImage 控件實現的無縫 VTK 渲染管道集成。消除了“空域問題”,說是這樣說,我試了試vtk9.2版本的,可惜...嘗試是失敗的
public partial class MainWindow : Window
{private vtkRenderWindow renderWindow;private D3DImage d3dImage;public MainWindow(){InitializeComponent();}private void InitializeVTK(){// 創建 VTK 渲染窗口renderWindow = vtkRenderWindow.New();vtkRenderer renderer = vtkRenderer.New();renderWindow.AddRenderer(renderer);// 創建一個簡單的示例對象vtkSphereSource sphereSource = vtkSphereSource.New();vtkPolyDataMapper mapper = vtkPolyDataMapper.New();mapper.SetInputConnection(sphereSource.GetOutputPort());vtkActor actor = vtkActor.New();actor.SetMapper(mapper);renderer.AddActor(actor);// 設置背景顏色renderer.SetBackground(0.1, 0.2, 0.4);// 使用 D3DImage 進行渲染d3dImage = new D3DImage();IntPtr hwnd = renderWindow.GetGenericWindowId();d3dImage.Lock();d3dImage.SetBackBuffer(D3DResourceType.IDirect3DSurface9, hwnd);d3dImage.Unlock();// 將 D3DImage 綁定到 WPF 的 Image 控件vtkImage.Source = d3dImage;}private void Window_Loaded(object sender, RoutedEventArgs e){InitializeVTK();}
}
但是,也有解決:,我之前就有過嘗試,是要重寫控件一系列消息事件,然后跟隨主窗口進行標記
?