QT-简单的CNC控制面板

  • 前言
  • 一、演示效果
  • 二、关键程序
  • 三、程序链接


前言

实现cnc导入显示和基本动作调试,具体模块可以尝试获取程序后自己做参考

一、演示效果



二、关键程序

部分程序代码参考如下,这里不一一列举了

//#define sNan qQNaN();#include "shaderdrawable.h"#ifdef GLES
#include <GLES/gl.h>
#endifShaderDrawable::ShaderDrawable()
{m_needsUpdateGeometry = true;m_visible = true;m_lineWidth = 1.0;m_pointSize = 1.0;m_texture = NULL;
}ShaderDrawable::~ShaderDrawable()
{if (!m_vao.isCreated()) m_vao.destroy();if (!m_vbo.isCreated()) m_vbo.destroy();
}void ShaderDrawable::init()
{// Init openGL functionsinitializeOpenGLFunctions();// Create buffersm_vao.create();m_vbo.create();
}void ShaderDrawable::update()
{m_needsUpdateGeometry = true;
}void ShaderDrawable::updateGeometry(QOpenGLShaderProgram *shaderProgram)
{// Init in contextif (!m_vbo.isCreated()) init();if (m_vao.isCreated()) {// Prepare vaom_vao.bind();}// Prepare vbom_vbo.bind();// Update vertex bufferif (updateData()) {// Fill vertices bufferQVector<VertexData> vertexData(m_triangles);vertexData += m_lines;vertexData += m_points;m_vbo.allocate(vertexData.constData(), vertexData.count() * sizeof(VertexData));} else {m_vbo.release();        if (m_vao.isCreated()) m_vao.release();m_needsUpdateGeometry = false;return;}if (m_vao.isCreated()) {// Offset for positionquintptr offset = 0;// Tell OpenGL programmable pipeline how to locate vertex position dataint vertexLocation = shaderProgram->attributeLocation("a_position");shaderProgram->enableAttributeArray(vertexLocation);shaderProgram->setAttributeBuffer(vertexLocation, GL_FLOAT, offset, 3, sizeof(VertexData));// Offset for coloroffset = sizeof(QVector3D);// Tell OpenGL programmable pipeline how to locate vertex color dataint color = shaderProgram->attributeLocation("a_color");shaderProgram->enableAttributeArray(color);shaderProgram->setAttributeBuffer(color, GL_FLOAT, offset, 3, sizeof(VertexData));// Offset for line start pointoffset += sizeof(QVector3D);// Tell OpenGL programmable pipeline how to locate vertex line start pointint start = shaderProgram->attributeLocation("a_start");shaderProgram->enableAttributeArray(start);shaderProgram->setAttributeBuffer(start, GL_FLOAT, offset, 3, sizeof(VertexData));m_vao.release();}m_vbo.release();m_needsUpdateGeometry = false;
}bool ShaderDrawable::updateData()
{// Test datam_lines = {{QVector3D(0, 0, 0), QVector3D(1, 0, 0), QVector3D(sNan, 0, 0)},{QVector3D(10, 0, 0), QVector3D(1, 0, 0), QVector3D(sNan, 0, 0)},{QVector3D(0, 0, 0), QVector3D(0, 1, 0), QVector3D(sNan, 0, 0)},{QVector3D(0, 10, 0), QVector3D(0, 1, 0), QVector3D(sNan, 0, 0)},{QVector3D(0, 0, 0), QVector3D(0, 0, 1), QVector3D(sNan, 0, 0)},{QVector3D(0, 0, 10), QVector3D(0, 0, 1), QVector3D(sNan, 0, 0)}};return true;
}bool ShaderDrawable::needsUpdateGeometry() const
{return m_needsUpdateGeometry;
}void ShaderDrawable::draw(QOpenGLShaderProgram *shaderProgram)
{if (!m_visible) return;if (m_vao.isCreated()) {// Prepare vaom_vao.bind();} else {// Prepare vbom_vbo.bind();// Offset for positionquintptr offset = 0;// Tell OpenGL programmable pipeline how to locate vertex position dataint vertexLocation = shaderProgram->attributeLocation("a_position");shaderProgram->enableAttributeArray(vertexLocation);shaderProgram->setAttributeBuffer(vertexLocation, GL_FLOAT, offset, 3, sizeof(VertexData));// Offset for coloroffset = sizeof(QVector3D);// Tell OpenGL programmable pipeline how to locate vertex color dataint color = shaderProgram->attributeLocation("a_color");shaderProgram->enableAttributeArray(color);shaderProgram->setAttributeBuffer(color, GL_FLOAT, offset, 3, sizeof(VertexData));// Offset for line start pointoffset += sizeof(QVector3D);// Tell OpenGL programmable pipeline how to locate vertex line start pointint start = shaderProgram->attributeLocation("a_start");shaderProgram->enableAttributeArray(start);shaderProgram->setAttributeBuffer(start, GL_FLOAT, offset, 3, sizeof(VertexData));}if (!m_triangles.isEmpty()) {if (m_texture) {m_texture->bind();shaderProgram->setUniformValue("texture", 0);}glDrawArrays(GL_TRIANGLES, 0, m_triangles.count());}if (!m_lines.isEmpty()) {glLineWidth(m_lineWidth);glDrawArrays(GL_LINES, m_triangles.count(), m_lines.count());}if (!m_points.isEmpty()) {glDrawArrays(GL_POINTS, m_triangles.count() + m_lines.count(), m_points.count());}if (m_vao.isCreated()) m_vao.release(); else m_vbo.release();
}QVector3D ShaderDrawable::getSizes()
{return QVector3D(0, 0, 0);
}QVector3D ShaderDrawable::getMinimumExtremes()
{return QVector3D(0, 0, 0);
}QVector3D ShaderDrawable::getMaximumExtremes()
{return QVector3D(0, 0, 0);
}int ShaderDrawable::getVertexCount()
{return m_lines.count() + m_points.count() + m_triangles.count();
}double ShaderDrawable::lineWidth() const
{return m_lineWidth;
}void ShaderDrawable::setLineWidth(double lineWidth)
{m_lineWidth = lineWidth;
}bool ShaderDrawable::visible() const
{return m_visible;
}void ShaderDrawable::setVisible(bool visible)
{m_visible = visible;
}double ShaderDrawable::pointSize() const
{return m_pointSize;
}void ShaderDrawable::setPointSize(double pointSize)
{m_pointSize = pointSize;
}

三、程序链接

https://download.csdn.net/download/u013083044/86784801

QT-简单的CNC控制面板相关推荐

  1. QT简单入门程序——实现可修改用户信息界面

    QT简单入门程序 一.先行准备 二.新建项目 三.添加文件 四.编辑代码 1.基本信息窗口类 2.详细资料窗口类 3.联系信息窗口类 4.导航界面 5.main函数 五.CTRL+R运行 六.额外知识 ...

  2. Qt 简单计算器实现 附源码

    Windows+Qt 简单表达式计算器实现 实现思路 实现原理 核心功能 表达式运算 小数点的处理 实时判断算式合法性 UI设计 无边框窗口和Win10下的背景模糊 透明按钮 原创标签页切换组件 重写 ...

  3. c++Qt简单实现金融软件部分界面以及ui效果

    1.开发环境 qt5.9.9以及自带的Qt Creator,并且导入qcustomplot库以实现图表效果. 2.效果展示 原软件截图: qt程序截图: 新手通过本程序的学习,可初步掌握qt部分控件使 ...

  4. QT 简单五子棋实现

    看了一点qt,尝试自己写了一下简单的五子棋 使用了mousePressEvent和paintEvent两个事件 实现界面: 文件结构: widget.h文件代码: #ifndef WIDGET_H # ...

  5. QT简单添加背景图片

    简介:使用QT制作STM32控制器时,为了美化添加了简单背景图片,点击按钮弹出相应图片.此次主要介绍添加背景及弹出图片部分,此次没有和STM32连接所以部分功能没有展示,仅截取与图片相关部分.(此方法 ...

  6. Qt简单项目实例之(二)——多功能计算器

    有问题可以加我QQ:2273864757 进行交流学习!!!! 一.简单介绍 整个计算器设计整体按照"插件式,微内核"进行开发,里面包含各个功能的插件,将这些插件集成到我们的主工程 ...

  7. QT 简单仿写QQ界面

    因为要写一个跨平台内网传输工具DKD,为了最大程度的代码复用,所以考虑使用QT,对QT不熟悉,10天的摸索,终于画出简易的仿QQ界面,开发环境为:qt creator+gcc,效果如下: 主窗口的区域 ...

  8. 闲暇时,写的一个Qt简单桌面日程工具

    前几天,因为工作关系,由于鄙人交懒,记忆较差,所以便向同事要一款日程管理软件.可以内嵌在桌面中的,同事便推荐了一款蓝果软件,便下载了一个,试了试还不错.刚好,他的原理比较简单,自己便用qt自己做了一个 ...

  9. 使用QT简单制作中国象棋之棋子的摆放

    1 引子   要制作象棋,棋子是必不可少的,但是在网上找了很久,没有找到满意且配套的棋子,有的还需要VIP下载就很难受.于是自己通过QT的标签写字功能调整大小,然后使用绘图事件(QPaintEvent ...

最新文章

  1. xcode6 dyld_sim is not owned by root
  2. 从CES 2017看今年智能汽车发展趋势之三:智能座舱异军突起
  3. 知乎首页 粒子效果 动态背景
  4. 暴力子字符串查找算法
  5. findbugs教程
  6. P2517-订货【网络流,费用流】
  7. 第五十六期:IPv6只是增加了地址数量?其实真相并没有那么简单!
  8. 编写一个程序实现方法的覆盖java_编写Java程序代码必须先声明一个____,然后在其中编写实现需求的业务代码。...
  9. java 读取硬件设备发送数据_Java网络编程基础
  10. ArcEngine中加载ArcGIS Server地图服务
  11. BERT4Rec:当NLP王者BERT进军推荐领域
  12. mysql foundrows 并发_MySQL 中的 FOUND_ROWS() 函数
  13. 看半小时漫画,通晓计算机基础
  14. 写于公元2006年2月14日
  15. 计算机论文格式要求吗,计算机论文格式(写作要求详细介绍)
  16. Python菜鸟起飞day2--数据类型(元组,字典,字符串)
  17. 数据管理管的是哪些方面
  18. 码流 / 码率 / 比特率 / 帧速率 / 分辨率 / 高清的区别
  19. Unity3D Webplayer Socket网络通信经验分享
  20. 内网渗透-内网环境下的横向移动总结

热门文章

  1. python实现打电话功能_使用python代码调用三汇语音卡硬件拨打电话
  2. Mac自带FTP工具用法
  3. 产品故事:一家服装厂的创新之路
  4. 阿里云过期域名的赎回与删除
  5. arm920t中断系统详解
  6. 银行、券商们的下一代App该往哪里走?
  7. 簇是操作系统读写文件的基本单位
  8. Bootstrap栅格系统 xs sm md lg xl
  9. SQL Server事务日志分析
  10. java sql查询空内容,sql查询空指针异常