diff --git a/logPlus/CallManage.h b/logPlus/CallManage.h index 7827687..e88f090 100644 --- a/logPlus/CallManage.h +++ b/logPlus/CallManage.h @@ -180,7 +180,7 @@ signals: void sig_changeScale(QString strUuid, int iNewScale); //自定义滚动条 - void sig_vertScrollBarChanged_setGeometry(QString strUuid, double iNewValue, double low, double upper); + void sig_vertScrollBarChanged_setGeometry(QString strUuid, double iNewValue, double low, double upper, int ndepth); //自定义滚动条 void sig_vertScrollBarChanged(QString strUuid, double iNewValue, double low, double upper); //自定义滚动条(三图一表) diff --git a/logPlus/mainwindowcurve.cpp b/logPlus/mainwindowcurve.cpp index c3e7ab5..bcb891c 100644 --- a/logPlus/mainwindowcurve.cpp +++ b/logPlus/mainwindowcurve.cpp @@ -266,7 +266,7 @@ void MainWindowCurve::vertScrollBarChanged(int value) { double iCurValue = dDelta - (iNumShow-1)*dScrollHeight; //通知界面重设范围 - emit CallManage::getInstance()->sig_vertScrollBarChanged_setGeometry(m_strUuid, iCurValue, dScrollHeight_setGeometry, 0); + emit CallManage::getInstance()->sig_vertScrollBarChanged_setGeometry(m_strUuid, iCurValue, dScrollHeight_setGeometry, 0, value); } else if(iNumShow>0) { diff --git a/logPlus/qmycustomplot.cpp b/logPlus/qmycustomplot.cpp index 70a715d..86b0865 100644 --- a/logPlus/qmycustomplot.cpp +++ b/logPlus/qmycustomplot.cpp @@ -37,13 +37,14 @@ extern double g_SDepthFac; extern double g_EDepthFac; extern QString g_SelectMFac; -QMyCustomPlot::QMyCustomPlot(QWidget *parent, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName) : +QMyCustomPlot::QMyCustomPlot(QWidget *parent, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, QString strType) : QCustomPlot(parent) { m_strSlfName = strSlfName; m_strWellName = strWellName; m_strTrackName = strTrackName; m_strLineName = strLineName; + m_strType = strType; // 创建一个新的顶层图层(如果还没有) if (!this->layer("topLayer")) { @@ -131,7 +132,7 @@ QMyCustomPlot::QMyCustomPlot(QWidget *parent, QString strSlfName, QString strWel //自定义滚动条 connect(CallManage::getInstance(), SIGNAL(sig_vertScrollBarChanged(QString, double, double, double)), this, SLOT(vertScrollBarChanged(QString, double, double, double))); - connect(CallManage::getInstance(), SIGNAL(sig_vertScrollBarChanged_setGeometry(QString, double, double, double)), this, SLOT(vertScrollBarChanged_setGeometry(QString, double, double, double))); + connect(CallManage::getInstance(), SIGNAL(sig_vertScrollBarChanged_setGeometry(QString, double, double, double, int)), this, SLOT(vertScrollBarChanged_setGeometry(QString, double, double, double, int))); //曲线选中,置顶 connect(CallManage::getInstance(), SIGNAL(sig_Raise(QString, QString, QString, QString, QString, int, QString)), this, SLOT(s_Raise(QString, QString, QString, QString, QString, int, QString))); @@ -635,147 +636,7 @@ void QMyCustomPlot::initCurve(QString strSlfName, QString strLineName) void QMyCustomPlot::initImage(QString strSlfName, QString strWaveName) { - if (strSlfName.isEmpty()) return; - if (strWaveName == "" || strWaveName == "AC") strWaveName = "DYNIMAGE"; - - CLogIO *logio = new CLogIO(); - logio->Open(strSlfName.toStdString().c_str(), CSlfIO::modeRead); - // - int index = logio->OpenWave(strWaveName.toStdString().c_str()); - if (index < 0) { - delete logio; - return; - } - - m_nUseColor = 1; - QMyCustomPlot* widget = this; - Slf_WAVE _wave; - logio->GetWaveInfo(index, &_wave); - float _SDep, _EDep, _Rlev; - _SDep = _wave.StartDepth; - _EDep = _wave.EndDepth; - m_SDep = _SDep; - m_EDep = _EDep; - // _SDep = 0.0 - m_iY2; - // _EDep = 0.0 - m_iY1; - _Rlev = _wave.DepLevel; - int m_Record = (float)(fabs((_EDep - _SDep) / _Rlev + 0.5)); - - int _nSamples = _wave.TimeSamples; - m_nSamples = _nSamples; - if (m_fScaleV <= 0.0f) - m_fScaleV = _nSamples; - char *value = new char[(_nSamples + 1)*m_Record*_wave.CodeLen + 1]; - logio->ReadWave(index, _SDep, m_Record, (void *)value); - logio->CloseWave(index); - delete logio; - - bool bFistValue = false; - float vmax = -9999;//(float)_nSamples; - float vmin = -9999; - - float detp = _SDep; - float edepc = _EDep; - if (m_nWaveJg < 10) - m_nWaveJg = 10; - float m_r = _Rlev * m_nWaveJg; - float m_MoveDep = 0.0f; - - float yscale = 1; - if (m_nWaveHei > 1) - { - float DifBase = 1; - if (m_nDrawType == 2 || m_nDrawType == 6 || m_nDrawType == 10) { - DifBase = (m_MaxRange - m_Base) / m_nColorNum; - } - else { - DifBase = (m_MaxRange - m_Base) / 1; - } - if (fabs(DifBase) <= 1e-6) DifBase = 1; - - yscale = m_nWaveHei + DifBase; - yscale = yscale / DifBase; - } - - //QVector< QVector > vecWave; - m_vecWaveData.clear(); - for (float dep1 = detp - 10 * m_r; dep1 < edepc + m_MoveDep + 10 * m_r; dep1 += m_r) - { - int iIndex = Slf_Int(dep1 + m_MoveDep, _SDep, _Rlev); - if (iIndex < 0) { - continue; - } - - if (iIndex >= m_Record) - break; - - QVector ve(_nSamples); - for (int kk = 0; kk < _nSamples; kk++) - { - double val = GetData(_wave.RepCode, (char *)&value[iIndex * _nSamples*_wave.CodeLen + kk * _wave.CodeLen]); - ve[kk] = val;// 256 * (val - m_LeftVal) / (m_RightVal - m_LeftVal); - //ve[kk] = (int)((val - m_Base)*yscale); - if (val == -9999) - { - continue; - } - - if (bFistValue == false) - { - //最大值,最小值默认采用第一个有效值 - bFistValue = true; - vmax = vmin = val; - } - // - if (vmax < val)vmax = val; - if (vmin > val)vmin = val; - } - m_vecWaveData << ve; - } - - delete[] value; - - widget->m_fmin = vmin; - widget->m_fmax = vmax; - // - if (!widget->m_bX2Y) - { - widget->setScaleX(0, 264); - widget->xAxis->setVisible(false); - widget->xAxis2->setVisible(false); - widget->yAxis->setVisible(false); - widget->yAxis2->setVisible(false); - - //对调XY轴,在最前面设置 - QCPAxis *yAxis = widget->yAxis; - QCPAxis *xAxis = widget->xAxis; - widget->xAxis = yAxis; - widget->yAxis = xAxis; - widget->m_bX2Y = true; - } - - //------------------- - // set up the QCPColorMap: - if (widget->m_colorMap == NULL) - { - QCPColorMap *colorMap = new QCPColorMap(widget->xAxis, widget->yAxis); - widget->m_colorMap = colorMap; - // 添加色标: - QCPColorScale *colorScale = new QCPColorScale(widget); - colorMap->setColorScale(colorScale); // 将颜色图与色标关联 - - // :现在,我们通过访问颜色贴图的QCPColorMapData实例来分配一些数据: - this->updateImageWave(); - - // 重新缩放数据维度(颜色),以使所有数据点都位于颜色渐变显示的范围内: - //colorMap->rescaleDataRange(); - - this->setSchemeIndex(m_nSchemeIndex, m_nColorNum); - } - else - { - this->updateImageWave(); - } + updateImage(m_iY2); } void QMyCustomPlot::initColorTable() @@ -856,45 +717,418 @@ QCPColorMap * QMyCustomPlot::updateWave() return m_colorMap; } -QCPColorMap * QMyCustomPlot::updateImageWave() +void QMyCustomPlot::updateImage(float fTopY) { - int nx = m_vecWaveData.size(); - int ny = m_nSamples; - - m_colorMap->data()->setSize(nx, ny); // 我们希望彩色地图有nx*ny的数据点 - float f = 0.99;// 264 / 269.0f; - m_colorMap->data()->setRange(QCPRange(0 - m_EDep, 0 - m_SDep), QCPRange(this->m_iX1, this->m_iX2*f)); - - int nbs = 1024; - - float fLeftVal = 0; - float fRightVal = 128; FormInfo* pInfo = m_formTrack->getFormInfoByParameters(m_strUuid, m_strWellName, m_strTrackName, m_strLineName); + bool bShow3D = false; if (pInfo) { - fLeftVal = pInfo->m_ImgMinVal; - fRightVal = pInfo->m_ImgMaxVal; + bShow3D = pInfo->m_bShow3D; + } + if (bShow3D) + { + updateImage3D(fTopY, pInfo); + } + else + { + updateImage(fTopY, pInfo); + } +} + +void QMyCustomPlot::updateImage(float fTopY, FormInfo* pInfo) +{ + CLogIO *logio = new CLogIO(); + logio->Open(m_strSlfName.toStdString().c_str(), CSlfIO::modeRead); + // + int iIndex = logio->OpenWave(m_strLineName.toStdString().c_str()); + if (iIndex < 0) { + delete logio; + return; } - for (int xIndex = 0; xIndex < nx; ++xIndex) + m_nUseColor = 1; + + Slf_WAVE _wave; + logio->GetWaveInfo(iIndex, &_wave); + + m_SDep = _wave.StartDepth; + m_EDep = _wave.EndDepth; + m_Rlev = _wave.DepLevel; + + float sdep, edep, flDepthScale = 18.897617f, temp; + float sdepc = abs(fTopY);// _wave.StartDepth; + sdep = sdepc; + edep = sdep + 50; + + if (edep > m_EDep) edep = m_EDep; + if (sdep < m_SDep) sdep = m_SDep; + if (sdep > m_EDep) return; + if (edep < m_SDep) return; + if (edep > m_EDep) edep = m_EDep; + if (edep < sdep) edep = sdep; + if (edep > m_EDep) edep = m_EDep; + if (sdep > m_EDep) sdep = m_EDep; + + int incount = (edep - sdep) / m_Rlev; + if (incount == 0) + return; + + float flDep; + int i, ii, j, nPoint = 0, m; + QRectF rt, wrt; + float dep, ch; + double ratio; + CString cs; + QString qs; + + int ytmp = -1; + float y = 9999999.0; + + //计算数据点数 + temp = _wave.TimeSamples; + if (temp < 0) temp -= 0.5; + nPoint = abs(temp); + + ratio = 1.0;// int((float)incount * 1000 / rt.height()) / 1000.0; //比例 + + char *value = new char[incount*nPoint*_wave.CodeLen]; + + //按块读数据 + if (iIndex >= 0) { - for (int yIndex = 0; yIndex < ny; ++yIndex) - { - double dz = m_vecWaveData[xIndex][yIndex]; - if (dz == -9999) - { - dz = m_fmin; - } - dz = dz * nbs/ (fRightVal - fLeftVal); - if (dz > m_fmax) - { - dz = m_fmax; - } - m_colorMap->data()->setCell(nx - xIndex - 1, yIndex, dz); - } + logio->ReadWave(iIndex, sdep, incount, (void *)value); } - m_colorMap->setDataRange(QCPRange(m_fmin, m_fmax)); - return m_colorMap; + else memset(value, 0, incount*nPoint*_wave.CodeLen); + + float depcount = (float)incount / (edep - sdep); + float depcount1 = 0; + + QSize qsize; + + int rh = 1000;// rt.height(); + int rw = this->size().width(); + long nLnBytes = (nPoint * 3 + 3) / 4 * 4; + unsigned char *pData = new unsigned char[nLnBytes*(int)(rh + 0.5)]; + memset(pData, 255, nLnBytes*(int)(rh + 0.5)); + + int datatype = 0; + int m_LeftVal = 0; + int m_RightVal = 128; + float m_flBackVal = -9999; + if (pInfo) + { + datatype = pInfo->m_nCoord; + m_LeftVal = pInfo->m_ImgMinVal; + m_RightVal = pInfo->m_ImgMaxVal; + m_flBackVal = -9999; + m_nSchemeIndex = pInfo->m_nSchemeIndex; + } + //获取颜色数组 + QList rgbList = QtColorTableData::getInstance()->GetRgb_UseTag(1, m_nSchemeIndex, 256); + QRgb rgbbg = QtColorTableData::getInstance()->getRgb_Bg(m_nSchemeIndex); + + for (double dep1 = sdep; dep1 < edep; dep1 += ratio * m_Rlev) + { + y = (dep1 - sdepc)*flDepthScale; + //y = ConvertY( eCoord_GEO,dep1,eCoord_GEONormal ); + if (y < 0) continue; + if (ytmp == int(y)) continue; + else ytmp = y; + wrt.setTop(y); + depcount1 = (dep1 - sdep)*depcount; + + for (i = 0; i < nPoint; i++) + { + ch = GetData(_wave.RepCode, (char *)&value[(int(depcount1)*nPoint + i)*_wave.CodeLen]); + if (wrt.top() >= rh) + break; + m = (int)wrt.top(); + if (m_flBackVal != ch) + { + if (datatype == 0) //线性刻度 + { + ii = 256 * (ch - m_LeftVal) / (m_RightVal - m_LeftVal); + } + else + { + if (m_LeftVal < 1.0) + ii = 256 * (log10(ch)) / log10(m_RightVal); + else + ii = 256 * (log10(ch) - log10(m_LeftVal)) / (log10(m_RightVal) - log10(m_LeftVal)); + } + if (ii > 254) ii = 254; + if (ii < 0) ii = 0; + + pData[m*nLnBytes + 3 * i] = qRed(rgbList.at(ii)); + pData[m*nLnBytes + 3 * i + 1] = qGreen(rgbList.at(ii)); + pData[m*nLnBytes + 3 * i + 2] = qBlue(rgbList.at(ii)); + } + else + { + pData[m*nLnBytes + 3 * i] = qRed(rgbbg); + pData[m*nLnBytes + 3 * i + 1] = qGreen(rgbbg); + pData[m*nLnBytes + 3 * i + 2] = qBlue(rgbbg); + } + } + } //read data end + + int nheight = rh; + if (wrt.top() < rh - 1) + nheight = (int)(wrt.top() + 0.5); //若数据行数小于rt.Height() + + //防止图片扭曲:同时限定每一行的数据大小可以保证 + QImage membmp(pData, nPoint, nheight, 3 * nPoint, QImage::Format_RGB888); + qsize.setWidth(rw - 2); + qsize.setHeight(nheight); + // 图像缩放 + QImage result = membmp.scaled(qsize, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); + //result.save("E:\\ALogplus\\doc\\1.png"); + //pDC->drawImage(rt.left() + 1, mrt.top(), result); + if (mPixmap_tx == NULL) + { + mPixmap_tx = new QCPItemPixmap(this); + } + //mPixmap->setScaled(true, Qt::IgnoreAspectRatio); // 设置缩放方式 + mPixmap_tx->topLeft->setCoords(m_iX1, -sdep); + mPixmap_tx->bottomRight->setCoords(m_iX2, -edep); + mPixmap_tx->setPixmap(QPixmap::fromImage(result)); + delete[]pData; pData = NULL; + delete[]value; + this->replot(); +} + +void QMyCustomPlot::updateImage3D(float fTopY, FormInfo* pInfo) +{ + CLogIO *logio = new CLogIO(); + logio->Open(m_strSlfName.toStdString().c_str(), CSlfIO::modeRead); + // + int iIndex = logio->OpenWave(m_strLineName.toStdString().c_str()); + if (iIndex < 0) { + delete logio; + return; + } + + m_nUseColor = 1; + + Slf_WAVE _wave; + logio->GetWaveInfo(iIndex, &_wave); + + m_SDep = _wave.StartDepth; + m_EDep = _wave.EndDepth; + m_Rlev = _wave.DepLevel; + + float sdep, edep, flDepthScale = 18.897617f, temp; + float sdepc = abs(fTopY);// _wave.StartDepth; + sdep = sdepc; + edep = sdep + 50; + + if (sdep > m_EDep) sdep = m_EDep; + if (edep < m_SDep) edep = m_SDep; + if (sdep < m_SDep) sdep = m_SDep; + if (edep > m_EDep) edep = m_EDep; + if (edep < sdep) edep = sdep; + + int iDepCount = (edep - sdep) / m_Rlev; + if (iDepCount == 0) + return; + + // 计算开始数据点及数据点数 + int nPoint, m; + float flVal; + //计算数据点数 + temp = _wave.TimeSamples; + if (temp < 0) temp -= 0.5; + nPoint = abs(temp); + // 绘制 + QRectF wrt; + int dep = 0; + float detp = sdepc; + + int rh = 1000;// rt.height(); + int rw = this->size().width(); + double ratio = 1;// int((float)iDepCount * 1000 / rt.height()) / 1000.0; + if (ratio > 1) ratio = 1; + char *value = new char[iDepCount*nPoint*_wave.CodeLen]; + long nLnBytes = (nPoint * 3 + 3) / 4 * 4; + unsigned char *pData = new unsigned char[nLnBytes*(int)(rh + 0.5)]; + memset(pData, 255, nLnBytes*(int)(rh + 0.5)); + + int m_iStartAngle = 20; + int m_iStartPos = 0; + int datatype = 0; + int m_LeftVal = 0; + int m_RightVal = 128; + if (pInfo) + { + m_iStartAngle = pInfo->m_nOverlook; + m_iStartPos = pInfo->m_nAzimuth; + datatype = pInfo->m_nCoord; + m_LeftVal = pInfo->m_ImgMinVal; + m_RightVal = pInfo->m_ImgMaxVal; + m_nSchemeIndex = pInfo->m_nSchemeIndex; + } + QList rgbList = QtColorTableData::getInstance()->GetRgb_UseTag(1, m_nSchemeIndex, 256); + float pi = 3.1415926; + float angle = pi / ((float)nPoint / 2.0); + int drawdep; + float fangle = m_iStartAngle / 90.0; + int r = rw / 4 * fangle; + int dis = nPoint / 4; + float flOffset = 0; + int drawFlag = -1; + int drawHead = 0; + + + bool flag1 = ((sdep > detp) || (sdep > detp)); + bool flag2 = ((m_SDep < sdep) || (m_SDep > sdep)); + int ioffset = m_iStartPos * nPoint / 360.0 + 0.5; + + int ytmp = -1; + for (double dep1 = sdep; dep1 < edep; dep1 += ratio * m_Rlev) + { + float y = (dep1 - sdepc)*flDepthScale; + if (ytmp == int(y)) continue; + else ytmp = y; + wrt.setTop(y); + + drawFlag++; + if (!drawFlag) + drawHead = wrt.top(); + if (!flag1) + drawHead = r; + if (!flag2) + wrt.setTop(wrt.top() - r); + + if (wrt.top() == r) + flOffset = dep1 - sdep; + + //画带头的圆柱 + if (!flag1 || !flag2) + { + if (iIndex >= 0) + { + logio->ReadWave(iIndex, dep1 + flOffset, 1, (void *)value); + } + else memset(value, 0, m_nSamples*_wave.DepLevel); + + for (int i = 0; i <= nPoint / 2; i++) + { + drawdep = wrt.top() + r + r * sin(angle*i); + flVal = GetData(_wave.RepCode, (char *)&value[(i + ioffset) % nPoint*_wave.CodeLen]); + + if (drawdep > rh - 1) + continue; + else + { + // if (m_flBackVal == flVal) + // { + // pData[drawdep*nLnBytes + 3 * (i + dis)] = GetBValue(m_GraInfo.GetBackgroundColour()); + // pData[drawdep*nLnBytes + 3 * (i + dis) + 1] = GetGValue(m_GraInfo.GetBackgroundColour()); + // pData[drawdep*nLnBytes + 3 * (i + dis) + 2] = GetRValue(m_GraInfo.GetBackgroundColour()); + // } + // else + { + int ii; + if (datatype == 0) //线性刻度 + { + ii = 256 * (flVal - m_LeftVal) / (m_RightVal - m_LeftVal); + } + else + { + if (m_LeftVal < 1.0) + ii = 256 * (log10(flVal)) / log10(m_RightVal); + else + ii = 256 * (log10(flVal) - log10(m_LeftVal)) / (log10(m_RightVal) - log10(m_LeftVal)); + } + if (ii > 254) ii = 254; + if (ii < 0) ii = 0; + + pData[drawdep*nLnBytes + 3 * (i + dis)] = qRed(rgbList.at(ii));// GetBValue(pColorArr[ii]); + pData[drawdep*nLnBytes + 3 * (i + dis) + 1] = qGreen(rgbList.at(ii));// GetGValue(pColorArr[ii]); + pData[drawdep*nLnBytes + 3 * (i + dis) + 2] = qBlue(rgbList.at(ii));// GetRValue(pColorArr[ii]); + } + } + } + } + /* else //不带头 + { + if (iIndex >= 0) + { + mrw.ReadWave(iIndex, dep1 - flOffset, 1, (void *)value); + } + else memset(value, 0, m_nSamples*WaveInfo.DepLevel); + + for (i = 0; i <= nPoint / 2; i++) + { + drawdep = wrt.top() - r + r * sin(angle*i); + + + if (drawdep < 0) + continue; + else + { + flVal = GetData(WaveInfo.RepCode, (char *)&value[(i + ioffset) % nPoint*WaveInfo.CodeLen]); + if (m_flBackVal == flVal) + { + pData[drawdep*nLnBytes + 3 * (i + dis)] = GetBValue(m_GraInfo.GetBackgroundColour()); + pData[drawdep*nLnBytes + 3 * (i + dis) + 1] = GetGValue(m_GraInfo.GetBackgroundColour()); + pData[drawdep*nLnBytes + 3 * (i + dis) + 2] = GetRValue(m_GraInfo.GetBackgroundColour()); + } + else + { + int ii; + if (datatype == LINEAR) //线性刻度 + { + ii = 256 * (flVal - m_LeftVal) / (m_RightVal - m_LeftVal); + } + else + { + if (m_LeftVal < 1.0) + ii = 256 * (log10(flVal)) / log10(m_RightVal); + else + ii = 256 * (log10(flVal) - log10(m_LeftVal)) / (log10(m_RightVal) - log10(m_LeftVal)); + } + + if (ii > 255) ii = 255; + if (ii < 0) ii = 0; + + pData[drawdep*nLnBytes + 3 * (i + dis)] = GetBValue(pColorArr[ii]); + pData[drawdep*nLnBytes + 3 * (i + dis) + 1] = GetGValue(pColorArr[ii]); + pData[drawdep*nLnBytes + 3 * (i + dis) + 2] = GetRValue(pColorArr[ii]); + } + } + } + }*/ + } + + int nheight = rh; + if (wrt.top() < rh - 1) + nheight = (int)(wrt.top() + 0.5); + + long nLnBytes1 = (nPoint * 3 + 3) / 4 * 4; + BYTE *pData1 = new BYTE[nLnBytes1*nheight]; + memcpy(pData1, pData, nLnBytes1*nheight); + + QImage membmp(pData1, nPoint, nheight, 3 * nPoint, QImage::Format_RGB888); + QSize qsize; + qsize.setWidth(rw - 2); + qsize.setHeight(nheight); + // 图像缩放 + QImage result = membmp.scaled(qsize, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); + + if (mPixmap_tx == NULL) + { + mPixmap_tx = new QCPItemPixmap(this); + } + //mPixmap->setScaled(true, Qt::IgnoreAspectRatio); // 设置缩放方式 + mPixmap_tx->topLeft->setCoords(m_iX1, -sdep); + mPixmap_tx->bottomRight->setCoords(m_iX2, -edep); + mPixmap_tx->setPixmap(QPixmap::fromImage(result)); + delete[]pData1; + delete[]pData; + delete[]value; + delete logio; + this->replot(); } float QMyCustomPlot::getScaleV() @@ -5726,8 +5960,7 @@ void QMyCustomPlot::s_changeDrawProperty(QVariantList vlist) m_MaxRange = varVal.toDouble(); this->changePropertyWaveUpdate(); } - else if ("色板" == strProperty - || "配色方案" == strProperty) + else if ("色板" == strProperty) { this->setSchemeIndex(varVal.toInt(), m_nColorNum); } @@ -5794,9 +6027,14 @@ void QMyCustomPlot::s_changeDrawProperty(QVariantList vlist) this->changeCurveValSetting(); } else if ("最小值" == strProperty - || "最大值" == strProperty) + || "最大值" == strProperty + || "三维显示" == strProperty + || "俯视角度" == strProperty + || "显示方位" == strProperty + || "坐标类型" == strProperty + || "配色方案" == strProperty) { - this->updateImageWave(); + this->updateImage(m_fTopY); } this->replot(); @@ -11095,6 +11333,7 @@ void QMyCustomPlot::setDepthY(float fy1, float fy2) { this->m_iY1 = fy1; this->m_iY2 = fy2; + m_fTopY = fy2; this->yAxis->setRange(m_iY1, m_iY2); if (m_bRowGridVisible) @@ -11105,6 +11344,7 @@ void QMyCustomPlot::updateDepthY(float fy1, float fy2) { this->m_iY1 = fy1; this->m_iY2 = fy2; + m_fTopY = fy2; //深度改变 if (this->m_bX2Y == true) { @@ -12527,7 +12767,7 @@ void QMyCustomPlot::addQCPItemLine(QMyCustomPlot *widget, float cx, float cy, co pLine->setPoints(myPolygon); } -void QMyCustomPlot::vertScrollBarChanged_setGeometry(QString strUuid, double value, double low, double upper) +void QMyCustomPlot::vertScrollBarChanged_setGeometry(QString strUuid, double value, double low, double upper, int ndepth) { if(m_strUuid==strUuid) { @@ -12544,6 +12784,12 @@ void QMyCustomPlot::vertScrollBarChanged_setGeometry(QString strUuid, double val //move(0, -(dPercent*geoRect.height())); setGeometry(0, -(dPercent*geoRect.height()), geoRect.width(), geoRect.height()); + + if ("DrawImageObject" == m_strType) + { + m_fTopY = ndepth; + updateImage(ndepth); + } return; } diff --git a/logPlus/qmycustomplot.h b/logPlus/qmycustomplot.h index ea0a69c..d158ca6 100644 --- a/logPlus/qmycustomplot.h +++ b/logPlus/qmycustomplot.h @@ -71,6 +71,7 @@ typedef struct FRACTABLE float X[16],Y[16];//X0,Y0,X1,Y1,X2,Y2,X3,Y3,X4,Y4,X5,Y5,X6,Y6,X7,Y7,X8,Y8,X9,Y9; }FRAC_TABLE; +class FormInfo; class FormTrack; class FormDraw; class TransparentGroupResult; @@ -78,7 +79,7 @@ class QMyCustomPlot : public QCustomPlot { Q_OBJECT public: - QMyCustomPlot(QWidget *parent = nullptr, QString strSlfName="", QString strWellName="", QString strTrackName="", QString strLineName=""); + QMyCustomPlot(QWidget *parent = nullptr, QString strSlfName="", QString strWellName="", QString strTrackName="", QString strLineName="", QString strType = ""); virtual ~QMyCustomPlot() { @@ -100,7 +101,10 @@ public: void setSchemeIndex(int nidx, int colorNum); QCPColorMap * updateWave(); - QCPColorMap * updateImageWave(); + + void updateImage(float fTopY); + void updateImage(float fTopY, FormInfo* pInfo); + void updateImage3D(float fTopY, FormInfo* pInfo); float getScaleV(); @@ -167,12 +171,14 @@ public: QString m_strWellName; QString m_strTrackName; QString m_strLineName; + QString m_strType = ""; FormTrack *m_formTrack = NULL; FormDraw *m_formDraw = NULL; // float m_iX1, m_iX2; float m_iY1, m_iY2; + float m_fTopY = 0; // 显示深度upper qint8 m_nLeftCross = 0; // 左跨道个数 qint8 m_nRightCross = 0; // 右跨道个数 @@ -408,6 +414,8 @@ public: //检查套管组件名称,是否需要更新套管图形 bool checkTubingName(QString m_Result); + QCPItemPixmap *mPixmap_tx = nullptr; //图像 + signals: //信号槽刷新 void sig_replot(); @@ -415,7 +423,7 @@ public slots: void slot_time(); //自定义滚动条 void vertScrollBarChanged(QString strUuid, double value, double low, double upper); - void vertScrollBarChanged_setGeometry(QString strUuid, double value, double low, double upper); + void vertScrollBarChanged_setGeometry(QString strUuid, double value, double low, double upper, int ndepth); //信号槽刷新 void slot_replot(); diff --git a/qtpropertybrowser/qtColorSchemeComboBox.cpp b/qtpropertybrowser/qtColorSchemeComboBox.cpp index dd7d92f..fb49e22 100644 --- a/qtpropertybrowser/qtColorSchemeComboBox.cpp +++ b/qtpropertybrowser/qtColorSchemeComboBox.cpp @@ -478,6 +478,7 @@ bool QtColorTableData::LoadColorConfig() { colorList.push_back(QtColorItem(QColor(pColorArr[k]))); } + m_colorBg.push_back(QtColorItem(QColor(m_GraInfo.GetBackgroundColour()))); QString str = qvFiles.at(i); QStringList slist = str.split("_"); @@ -566,6 +567,12 @@ QList QtColorTableData::GetRgb_UseTag(int nuse, int schemIndex, int colorn return rgbList; } +QRgb QtColorTableData::getRgb_Bg(int schemIndex) const +{ + const QtColorItem& item = m_colorBg[schemIndex]; + return qRgb(item.color.red(),item.color.green(),item.color.blue()); +} + void QtColorTableData::ChangeDataRange(QtSchemeColor *scheme) { int colorNum=scheme->colorList.count(); diff --git a/qtpropertybrowser/qtColorSchemeComboBox.h b/qtpropertybrowser/qtColorSchemeComboBox.h index 8883050..5bd394f 100644 --- a/qtpropertybrowser/qtColorSchemeComboBox.h +++ b/qtpropertybrowser/qtColorSchemeComboBox.h @@ -179,6 +179,8 @@ public: QList GetRgb_UseTag(int nuse, int schemIndex, int colornum=0) const; + QRgb getRgb_Bg(int schemIndex) const; + void ChangeDataRange(QtSchemeColor *scheme); void ReadSettings(); @@ -206,6 +208,7 @@ private: // 当前所有的颜色方案,包括系统方案,自定义方案 QList m_colorSchemeList; QList m_colorCfgList; + QList m_colorBg; // 备份的颜色方案 QList m_systemSchemeList;