//对话框的初始化函数OnInitDialog()
//http://www.manongjc.com/detail/25-owjledgivqlvees.html
CListBox* plistb; //标定的对话框的参数,指针
BOOL Cmy3DScanMFCDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
// TODO: 在此添加额外的初始化代码
cv::namedWindow("1", cv::WINDOW_AUTOSIZE);//利用opencv创建一个窗口
GetDlgItem(IDC_STATIC)->GetWindowRect(&rec1);//得到窗口的矩形大小
cv::resizeWindow("1", rec1.Width(), rec1.Height());//将opencv的窗口设置和MFC创建的矩形同样的大小
HWND hWnd = (HWND)cvGetWindowHandle("1");//将cv获取窗口的句柄,强制转换成MFC的句柄
HWND hParent = ::GetParent(hWnd);//将子窗口的父窗口句柄捕获,赋值给hParent
::SetParent(hWnd, GetDlgItem(IDC_STATIC)->m_hWnd);
::ShowWindow(hParent, SW_HIDE);//隐藏父窗口
//MyPointCloud mpc
//创建一个PCL实例,并将点云的观察视觉复位
mpc.viewer.reset(new pcl::visualization::PCLVisualizer("3D viewer", false));
//点云复位
mpc.cloud.reset(new pcl::PointCloud<pcl::PointXYZ>);
设置背景颜色为黑色
mpc.viewer->setBackgroundColor(0, 0, 0);
//mpc.viewer->addCoordinateSystem(0.05f);
//创建一个windows的窗口静态控件
CStatic *pclStatic = new CStatic();
LPRECT rect = new CRect;
//PCL静态窗口
pclStatic = (CStatic*)GetDlgItem(IDC_STATIC2);
//点云的窗口vtkRenderWindow
//renwin指针,指向viewer这个窗口
mpc.renwin = mpc.viewer->getRenderWindow();
//将renwin的父窗口ID,设置为MFC的pclStatic的ID。
mpc.renwin->SetParentId(pclStatic->m_hWnd);
//将VTK显示的一些信息,关闭
刚开用Qt编写VTK程序里,总是弹出vtkOutputWindow窗口,
//虽然对程序结果没有影响,但很让人不爽,尝
// 试像VC中一样运用GlobalWarningDisplayOff()函数来关闭,
// 仅能关闭一些信息,但不能关闭因Qt和VTK版本更新再来的一些用法警告。
// 经过各种验证,需要关闭所有的警告,需要在用CMake配置VTK的安装sln时选择
// VTK_LEGACY_SILENT为on。如果你已经安装好,
// 需要重新用CMake配置,并再安装一次。
mpc.iren->GlobalWarningDisplayOff();
//具体的使用流程:创建一个交互器iren
//1.创建一个交互器vtkRenderWindowInteractor对象iren;
// 2.给对象iren设定SetRenderWindow()需要交互的窗口;
// 3.给对象iren指定SetInteractorStyle()特定的交互方式,如果没有指定,交互器会使用默认交互方式;
// 4.对对象iren初始化Initialize,调用Start开始进行交互;
// ————————————————
// 版权声明:本文为CSDN博主「黑山老妖的博客」的原创文章,遵循CC 4.0 BY - SA版权协议,转载请附上原文出处链接及本声明。
// 原文链接:https ://blog.csdn.net/liushao1031177/article/details/117585653
mpc.iren = vtkRenderWindowInteractor::New();
//该函数返回指定pclStatic窗口的边框矩形的大小,赋值给rect
pclStatic->GetWindowRect(rect);
//将控件pclStatic的矩形大小计算出来,设置点云的窗口大小等于pclstatic的大小
mpc.renwin->SetSize(rect->right - rect->left, rect->bottom - rect->top);
//将renwein窗口的位置,设置为00
mpc.renwin->SetPosition(0, 0);
//将交互器iren设定为点云的renwin
mpc.iren->SetRenderWindow(mpc.renwin);
mpc.viewer->createInteractor();
mpc.iren->Render();
mpc.renwin->Render();
//dlp初始化,如何调用?????
//将标定参数控件,指针到plistb
plistb = ((CListBox*)GetDlgItem(IDC_LIST1));
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
vtk初始化代码学习1
最新推荐文章于 2023-10-20 18:26:18 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)