添加捕捉吸附标识(使用QT+OpenGL开发三维CAD)

捕捉吸附标识怎么画出来?在点吸附的时候能够展示吸附标识可以让用户更直观的看到当前捕捉点,从而更准确的进行设计和绘制。

效果视频见原文:添加捕捉吸附标识(使用QT+OpenGL开发三维CAD)

16.Add snap label

鼠标捕捉吸附标识主要作用是提高用户在使用鼠标时的操作效率和准确性‌。当鼠标移动到某个特定区域时,捕捉吸附标识会触发鼠标的吸附功能,使得鼠标指针能够自动吸附到该区域,从而减少移动距离和操作时间,能够显著提升用户的操作体验和效率‌。

我们把此功能的实现归类到DrawingViewerElemHolder中,我们来看下实现后其public函数的调用逻辑。

图:`DrawingViewerElemHolder`接口调用逻辑

好像没有增加接口,没有看错?画错?设计错吧?是的,snapLabel的配置、绘制过程放在了已有的setupdrawViewElement中,并没有对外新增接口,而内部的修改如下,

  • 新增:setupSnapprivate函数,负责snapLabel的配置,完成其数据到渲染桥梁的搭建;

  • 扩展:drawViewElement函数,使其能够兼容绘制没有纹理贴图的viewer元素,如snapLabel

  • 扩展:ViewerCache类,增加字段;

  • 扩展:在GLView.paintGL中调用绘制,代码如下;

cpp 复制代码
//  snap label
if (ViewerSetting::previewData.previewNextPt)
{
    QMatrix4x4 modelSnap;
    modelSnap.translate(m_modelMatrix * QVector3D(ViewerSetting::previewData.previewNextPt->X, ViewerSetting::previewData.previewNextPt->Y, ViewerSetting::previewData.previewNextPt->Z));

//modelSnap = m_modelMatrix * modelSnap;
    m_lightShader.setUniformValue("model", modelSnap);
    m_model->DrawViewElement(m_lightShader, ViewerCache::snapLabel);
}

可以看到我们没有做太多的改动即实现了snapLabel的绘制,也没有在DrawingViewerElemHolder中新增字段,其构建好的绘制数据放在了已有的map<string, MeshInfo> mapName2VMesh中;

尽管如此,我们还是做了关键的事情的,比如setupSnap,构建了一个只有圆形边框的mesh,这个也就是显示出来的效果,详细请查看函数实现~

如果一切正常,或者遇到的问题被排查解决,那么鼠标捕捉吸附效果和下图很像。

图:捕捉吸附标识效果

专注于图形学(渲染和几何算法)、数据处理、并行计算相关研究和研发,欢迎交流~

学习!《从零开发一款三维CAD软件(OpenGL/QT/C++)》课程上线啦

系列课程已上线,详细的视频讲解,打下扎实的图形学基础,欢迎大家观看和支持~

往期文章:

相关推荐
zhooyu1 小时前
利用叉乘判断OpenGL中的左右关系
c++·3d·opengl
m0_497214152 小时前
Qt事件系统
开发语言·qt
秋月的私语3 小时前
遥感影像拼接线优化工具:基于Qt+GDAL+OpenCV的从零到一实践
开发语言·qt·opencv
姓刘的哦3 小时前
Qt自定义控件
开发语言·qt
AlanW4 小时前
Qt Model/View 框架完全指南:从入门到性能优化
qt
艾莉丝努力练剑6 小时前
【QT】Qt常用控件与布局管理深度解析:从原理到实践的架构思考
linux·运维·服务器·开发语言·网络·qt·架构
Z文的博客6 小时前
嵌入式 ARM 设备交叉编译 mosquitto 2.0.20 (完整 TLS 支持) 详细教程 TRAE全程辅助,没敲一行代码
qt·mqtt·嵌入式·ai编程·mosquitto·嵌入式linux·trae
特立独行的猫a7 小时前
HarmonyOS 鸿蒙PC端 Qt 应用开发:第三方 Qt 开源软件移植指南
qt·harmonyos·鸿蒙·鸿蒙pc
C++ 老炮儿的技术栈17 小时前
GCC编译时无法向/tmp 目录写入临时汇编文件,因为设备空间不足,解决
linux·运维·开发语言·汇编·c++·git·qt
米优21 小时前
qt+vlc实现国标客户端测试工具
qt·gb28181·vlc