Cloudcompare 界面解读与界面修改

这篇具有很好参考价值的文章主要介绍了Cloudcompare 界面解读与界面修改。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

引言

Cloudcompare功能强大,界面让人看着眼花缭乱,但是我们往往只需要部分功能,故尝试对界面进行简化和修改。

一、创建主窗体

0. 读取全局配置

首先读取在上次运行过程中的一些配置,比如界面的样式等等

    //restore some global parameters
	{
		QSettings settings;
		settings.beginGroup(ccPS::GlobalShift());
		...... //省略

1. 启动画面

跳过一些不常用代码,直接看splash screen部分

    QScopedPointer<QSplashScreen> splash(nullptr); // 创建QSplashScreen
	QTimer splashTimer;    // 倒计时 主界面启动之后会用到 关闭启动画面
	...//省略一些代码
	//splash screen
	QPixmap pixmap(QString::fromUtf8(":/CC/images/imLogoV2Qt.png"));     // 启动画面在这里修改
	splash.reset(new QSplashScreen(pixmap, Qt::WindowStaysOnTopHint));
	splash->show();
	QApplication::processEvents();

2. 主界面-mainWindow

主界面创建

	MainWindow* mainWindow = MainWindow::TheInstance();   // 主界面
	mainWindow->initPlugins();                            // 插件
	mainWindow->show();
	QApplication::processEvents();

构造函数部分代码

	setWindowTitle(QStringLiteral("窗口标题"));  // 设置窗口标题
	...//省略一些代码
	//MDI Area    存放3D view窗口的窗口 
	//之后创建好的3D view 都会加入到这个窗口  m_mdiArea->addSubWindow(viewWidget);
	{
		m_mdiArea = new QMdiArea(this);
		setCentralWidget(m_mdiArea);
		connect(m_mdiArea, &QMdiArea::subWindowActivated, this, &MainWindow::updateMenus);
		connect(m_mdiArea, &QMdiArea::subWindowActivated, this, &MainWindow::on3DViewActivated);
		m_mdiArea->installEventFilter(this);
	}

new3DView 显示点云的界面,底层使用openGL

	QWidget* viewWidget = nullptr;
	ccGLWindow* view3D = nullptr;
	createGLWindow(view3D, viewWidget);   // 创建
	m_mdiArea->addSubWindow(viewWidget);  // 加入到m_mdiArea窗口
	...//省略一些代码
	view3D->setSceneDB(m_ccRoot->getRootEntity());

需要注意的是view3D的SceneDB绑定的是m_ccRoot->getRootEntity(),不太理解
故看其函数,传递的参数类型为ccHObject,尝试传递其他继承ccHObject的类亦可正常显示,比如:ccPointCloud (绑定读取后的点云数据)

void ccGLWindow::setSceneDB(ccHObject* root)  // 看源码,ccGLWindow里实现了基于这个SceneDB的三维可视化代码
// 存在两个DB m_globalDBRoot (全局DB) 和 m_winDBRoot (GL window own DB)

还有一些界面控件,没有在构造函数中创建,而是在ui文件中创建,更多细节可以通过Qt Designer打开mainWindow.ui查看

二、插件初始化

在mainWindow显示之前会进行插件初始化

	mainWindow->initPlugins();
	mainWindow->show();

核心就是将插件的工具栏显示加入到主界面上,把插件action加入到工具栏中

void MainWindow::initPlugins( )
{
	m_pluginUIManager->init();  // 插件初始化 
	
	// Set up dynamic tool bars
	addToolBar( Qt::RightToolBarArea, m_pluginUIManager->glFiltersToolbar() );
	addToolBar( Qt::RightToolBarArea, m_pluginUIManager->mainPluginToolbar() );
	
	for ( QToolBar *toolbar : m_pluginUIManager->additionalPluginToolbars() )
	{
		addToolBar( Qt::TopToolBarArea, toolbar );
	}
	...//省略将插件添加到菜单栏

使用插件式开发还是蛮方便的,详情可以看我的Cloudcompare 标准插件初探(MyPlugin)

三、界面修改

大致的了解Cloudcompare 的界面,下面进行适当修改(程序图标修改1
小建议:不要轻易尝试移植代码,CloudCompare很多都是高耦合低内聚的

引用一段深有同感的话:移植CC相关功能时就想简单粗暴把它整个代码复制黏贴过来,然后各种改,缺什么给它补什么,其实最后你会发现,你就差把整个CC的平台都移植过来了2:点云平台之cloudCompare开发三

3.1 源码修改

main.cpp修改

	//mainWindow->initPlugins();     // 取消插件初始化
	mainWindow->show();
	mainWindow->change_UI();         // 对界面进行修改
	QApplication::processEvents();

在mainwindow.h的添加

public:
	// 自定义
	QAction *MyAciton;
	QToolBar *MyToolBar;
	void change_UI();     // 这个是主要的 以上两次测试使用

在mainwindow.cpp的添加

setWindowTitle(QStringLiteral("哈哈 ^_^ "));   // 构造函数中修改了窗口标题
void MainWindow::change_UI()
{
	// 0.隐藏
	m_UI->toolBarView->setVisible(false);       // 左侧工具栏
	m_UI->toolBarMainTools->setVisible(false);  // 上方工具栏
	m_UI->toolBarSFTools->setVisible(false);    // 上方工具栏 (右侧)
	...//省略一些代码

显示如下 主要隐藏了工具栏
cloudcompare 左侧工具栏,# Qt,ui,qt,Cloudcompare,界面 —> cloudcompare 左侧工具栏,# Qt,ui,qt,Cloudcompare,界面

3.2 问题总结

为什么要在show之后增加mainWindow->change_UI()

  • cpp构造函数中修改mainwindow.ui中的控件无效 比如使用hide(),但主界面show之后还是显示了,并没有隐藏3
  • 尽量不修改源码,方便版本迭代维护

四、参考博文


  1. CloudCompare 二次开发注意事项 ↩︎

  2. 点云平台之cloudCompare开发三 ↩︎

  3. 对setVisible(false)的调用在QWidget的构造函数中不起作用 ↩︎文章来源地址https://www.toymoban.com/news/detail-555847.html

到了这里,关于Cloudcompare 界面解读与界面修改的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • CloudCompare——拟合空间球

    本文由CSDN点云侠原创,CloudCompare——拟合空间球,爬虫自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT生成的文章。    源码里用到了四点定球,具体计算原理如下 :   已知空间内不共面的四个点,设其坐标为 A ( x 1 , y 1 , z 1 ) A(x_1,y_

    2024年02月02日
    浏览(34)
  • CloudCompare——CANUPO点云分类

      CANUPO插件是一种自动分类点云的简单而有效的方法。它允许用户创建自己的分类器(通过在小样本上训练它们)和/或在点云上一次应用一个分类器,以便将其分成两个子集。它还为每个点输出分类置信度值,以便用户可以快速识别有问题的案例(问题一般出现在边界上)

    2024年02月12日
    浏览(39)
  • QT6+CloudCompare显示3D点云

        CloudCompare是一个三维点云(网格)编辑和处理软件。最初,它被设计用来对稠密的三维点云进行直接比较。它依赖于一种特定的八叉树结构,在进行点云对比这类任务时具有出色的性能。此外,由于大多数点云都是由地面激光扫描仪采集的,CloudCompare的目的是在一台标准

    2023年04月08日
    浏览(47)
  • CloudCompare 二次开发(20)——二次曲面拟合

    本文由CSDN点云侠原创,原文链接。爬虫网站自重。   由CloudCompare——点云二次曲面拟合一文知:CloudCompare软件中的已经集成了二次曲面拟合功能,但是计算出来的拟合参数是不正确的。因此,本文在原有算法的基础上进行修改,使输出的参数结果正确。 mainwindow.cpp 文件

    2024年02月06日
    浏览(48)
  • CloudCompare 二次开发(26)——RANSAC分割多个平面

      使用CloudCompare与PCL编程实现的RANSAC分割多个平面。具体计算原理见:PCL RANSAC分割多个平面。 1、 mainwindow.h 文件 public 中添加: 2、 mainwindow.cpp 文件 void MainWindow::connectActions() 函数中添加:

    2024年01月25日
    浏览(43)
  • CloudCompare 二次开发(13)——点云投影到圆柱

      不依赖任何第三方点云相关库,使用CloudCompare编程实现点云投影到指定圆柱,具体计算原理见:PCL 点云投影到圆柱 1、 mainwindow.h 文件 public 中添加: 2、 mainwindow.cpp 文件 void MainWindow::connectActions() 函数中添加:

    2024年02月09日
    浏览(31)
  • cloudcompare 编译安装解决无法load pcd文件问题

    参考 https://github.com/CloudCompare/CloudCompare/blob/master/BUILD.md 特别注意 git clone是时要带–recursive 编译后,一定要sudo make install,否则在build/qCC/下启动CloudCompare无法加载pcd文件。

    2024年02月03日
    浏览(40)
  • 【CloudCompare教程】008:基于点云的三维模型重建(泊松重建)

    本文讲述基于点云的三维模型重建方法,PoissonRecon是“Poisson Surface Reconstruction”的缩写,它是由约翰霍普金斯大学的Misha Kazhdan47提出的三角形网格生成算法的简单接口。 加载兔子点云,如下图所示: 在三维模型构建之前,应先计算法向量,否则会有以下提示:点云必须具有

    2024年02月07日
    浏览(48)
  • CloudCompare二次开发之如何通过PCL进行点云分割?

      因笔者课题涉及点云处理,需要通过PCL进行点云数据一系列处理分析,查阅现有网络资料,对常用PCL点云分割进行代码实现,本文记录分割实现过程。    (1)设计.ui文件    ①设计按钮       ②编译.ui       (2)修改mainwindow.h文件       (3)修改ma

    2024年02月05日
    浏览(41)
  • CloudCompare二次开发之如何通过PCL进行点云滤波?

      因笔者课题涉及点云处理,需要通过PCL进行点云数据一系列处理分析,查阅现有网络资料,对常用PCL点云滤波器进行代码实现,本文记录滤波器实现过程。    (1)设计.ui文件    ①设计按钮       ②编译.ui       (2)修改mainwindow.h文件       (3)修改

    2024年02月05日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包