颜色映射图例,规格尺寸修改

This commit is contained in:
2026-01-15 16:13:36 +08:00
parent f700dd360e
commit 354552dc88
21 changed files with 1200 additions and 223 deletions

View File

@@ -41,6 +41,10 @@ static void matIdentity(float m[16]) {
m[0] = m[5] = m[10] = m[15] = 1;
}
static QVector3D toColorVec(const QColor& color) {
return QVector3D(color.redF(), color.greenF(), color.blueF());
}
GLWidget::GLWidget(QWidget *parent)
: QOpenGLWidget(parent) {
setMinimumSize(640, 480);
@@ -191,6 +195,30 @@ void GLWidget::setShowBg(bool on = true) {
update();
}
void GLWidget::setColorLow(const QColor& color) {
const QVector3D next = toColorVec(color);
if (m_colorLow == next)
return;
m_colorLow = next;
update();
}
void GLWidget::setColorMid(const QColor& color) {
const QVector3D next = toColorVec(color);
if (m_colorMid == next)
return;
m_colorMid = next;
update();
}
void GLWidget::setColorHigh(const QColor& color) {
const QVector3D next = toColorVec(color);
if (m_colorHigh == next)
return;
m_colorHigh = next;
update();
}
void GLWidget::initializeGL() {
initializeOpenGLFunctions();
@@ -211,6 +239,14 @@ void GLWidget::initializeGL() {
matIdentity(m_proj);
}
void GLWidget::initGeometry_() {
initDotTexture_();
initBackgroundGeometry_();
initPanelGeometry_();
initDotGeometry_();
initRoomGeometry_();
}
void GLWidget::resizeGL(int w, int h) {
glViewport(0, 0, w, h);
}
@@ -293,8 +329,11 @@ void GLWidget::paintGL() {
// uMinV/uMaxV: 传感值范围,用于 fragment shader 把 value 映射成颜色
m_dotsProg->setUniformValue("uMinV", float(m_min));
m_dotsProg->setUniformValue("uMaxV", float(m_max));
m_dotsProg->setUniformValue("uColorLow", m_colorLow);
m_dotsProg->setUniformValue("uColorMid", m_colorMid);
m_dotsProg->setUniformValue("uColorHigh", m_colorHigh);
const int hasData = (m_hasData.load() || m_dotTex == 0) ? 1 : 0;
m_dotsProg->setUniformValue("uHasData", 0);
m_dotsProg->setUniformValue("uHasData", hasData);
m_dotsProg->setUniformValue("uCameraPos", m_cameraPos);
m_dotsProg->setUniformValue("uDotTex", 0);
if (m_dotTex) {
@@ -427,6 +466,7 @@ void GLWidget::mousePressEvent(QMouseEvent *event) {
if (event->button() == Qt::LeftButton) {
QVector3D world;
const int index = pickDotIndex_(event->pos(), &world);
qInfo() << "clicked index: " << index;
if (index >= 0) {
float value = 0.0f;
int row = 0;
@@ -1098,3 +1138,17 @@ void GLWidget::setShowGrid(bool on) {
m_showGrid = on;
update();
}
void GLWidget::setRow(int row) {
row = qMax(0, row);
if (m_rows == row)
return;
setSpec(row, m_cols, m_pitch, m_dotRadius);
}
void GLWidget::setCol(int col) {
col = qMax(0, col);
if (m_cols == col)
return;
setSpec(m_rows, col, m_pitch, m_dotRadius);
}