在MFC/win32窗口中集成PCL Visualizer

问题描述 投票:0回答:1

我正在尝试使用 PCL Visializer,因为它位于 MFC CStatic 控件内:

pcl::visualization::PCLVisualizer::Ptr simpleVis(pcl::PointCloud<pcl::PointXYZ>::ConstPtr cloud , HWND hParent_display )
{
    // --------------------------------------------
    // -----Open 3D viewer and add point cloud-----
    // --------------------------------------------
    pcl::visualization::PCLVisualizer::Ptr viewer(new pcl::visualization::PCLVisualizer("3D Viewer"));
    
    if (hParent_display) {
        
        SetParent((HWND)viewer->getRenderWindow()->GetGenericWindowId(), hParent_display);

        viewer->setWindowBorders(false);
        viewer->getRenderWindow()->SetParentId(hParent_display);

        //viewer->setPosition(-10, -50);  // Hacky way to hide the window borders

        viewer->setBackgroundColor(0, 0, 0);
        viewer->addPointCloud<pcl::PointXYZ>(cloud, "sample cloud");
        viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "sample cloud");
        viewer->addCoordinateSystem(1.0);
        viewer->initCameraParameters();

    }

    return (viewer);
}

我在MFC中调用上面的函数

OnInitDialog()
,如下所示:

viewer = simpleVis(basic_cloud_ptr , GetDlgItem(IDC_STATIC_3D_VIWER)->m_hWnd);

这就是结果:

如您所见,子窗口标题栏是可见的,用户可以使用鼠标移动它。

viewer->setWindowBorders(false);
不起作用。 使用
viewer->setPosition(-10, -50);
隐藏标题栏,但我不确定这是否是实现该目的的正确方法。

有没有更好的方法来集成展示台?

c++ mfc vtk win32gui pcl
1个回答
0
投票

我不确定你的

viewer->setWindowBorders(false);
是做什么的。

我会使用普通的 Win32 API 来删除标题栏。

请注意,修改样式后需要重新绘制该窗框:

 SetWindowPos(hwnd,0,0,0,0,0,SWP_DRAWFRAME|SWP_NOZORDER|SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE);
© www.soinside.com 2019 - 2024. All rights reserved.