成像到属性的开发,完成属性,剩余滤波方式,N*N取奇数。
This commit is contained in:
parent
3bcc8f031d
commit
21f354d061
|
|
@ -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);
|
||||
//自定义滚动条(三图一表)
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@
|
|||
#include "PropertyWidget.h"
|
||||
#include "DrawTvd.h"
|
||||
#include "DepthProgress.h"
|
||||
#include "CylinderImagePlot.h"
|
||||
|
||||
//以下参数从配置文件读取
|
||||
extern int g_iOneWidth; //道宽
|
||||
|
|
@ -3338,7 +3339,7 @@ void FormDraw::s_AddLine_Property(QString strUuid, QString strSlfName, QString s
|
|||
|
||||
AppendConsole(PAI_INFO, "FormDraw s_AddLine_Property end");
|
||||
}
|
||||
//#include "CylinderImagePlot.h"
|
||||
|
||||
void FormDraw::s_addWave(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strWaveName)
|
||||
{
|
||||
//井名&道名不一致
|
||||
|
|
@ -4031,9 +4032,10 @@ void FormDraw::s_addDrawImage(QString strUuid, QString strSlfName, QString strWe
|
|||
}
|
||||
|
||||
//
|
||||
QMyCustomPlot *curv = new QMyCustomPlot(this, strSlfName, strWellName, strTrackName, strLineName);
|
||||
QMyCustomPlot *curv = new QMyCustomPlot(this, strSlfName, strWellName, strTrackName, strLineName, "DrawImageObject");
|
||||
//绑定m_formTrack,方便关联formInfo
|
||||
curv->m_formTrack = m_formTrack;
|
||||
curv->setScaleX(0, 264);
|
||||
curv->setDepthY(m_iY1, m_iY2);
|
||||
if (nW <= 0)
|
||||
nW = g_iOneWidth;
|
||||
|
|
@ -4045,8 +4047,18 @@ void FormDraw::s_addDrawImage(QString strUuid, QString strSlfName, QString strWe
|
|||
QString strWaveName = "";
|
||||
int _nSamples = 0;
|
||||
curv->initImage(strSlfName, strWaveName);
|
||||
//curv->initImage3D(strSlfName, strWaveName);
|
||||
|
||||
//DrawImageNew_NoFilter(curv, strSlfName, strWaveName, _nSamples);
|
||||
|
||||
//curv->m_colorMap->setVisible(false);
|
||||
//CylindricalImageMap* cylinderMap = new CylindricalImageMap(curv->xAxis, curv->yAxis);
|
||||
//cylinderMap->setData(curv->m_colorMap->data());
|
||||
//cylinderMap->setCylinderRadius(2.0);
|
||||
//cylinderMap->setSourceColorMap(curv->m_colorMap); // 共享梯度
|
||||
//cylinderMap->setAzimuth(45);
|
||||
//cylinderMap->setElevation(30);
|
||||
|
||||
//
|
||||
connect(curv, SIGNAL(mouseWheel(QWheelEvent*)), this, SLOT(s_mouseWheel(QWheelEvent*)));
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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 <double>> 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 <double> 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<QRgb> 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<QRgb> 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()
|
||||
|
|
@ -5687,8 +5921,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);
|
||||
}
|
||||
|
|
@ -5755,9 +5988,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();
|
||||
|
|
@ -11042,6 +11280,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)
|
||||
|
|
@ -11052,6 +11291,7 @@ void QMyCustomPlot::updateDepthY(float fy1, float fy2)
|
|||
{
|
||||
this->m_iY1 = fy1;
|
||||
this->m_iY2 = fy2;
|
||||
m_fTopY = fy2;
|
||||
//深度改变
|
||||
if (this->m_bX2Y == true)
|
||||
{
|
||||
|
|
@ -12474,7 +12714,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)
|
||||
{
|
||||
|
|
@ -12490,6 +12730,12 @@ void QMyCustomPlot::vertScrollBarChanged_setGeometry(QString strUuid, double val
|
|||
double dPercent = dDelta / (low-upper);
|
||||
|
||||
setGeometry(0, -(dPercent*geoRect.height()), geoRect.width(), geoRect.height());
|
||||
|
||||
if ("DrawImageObject" == m_strType)
|
||||
{
|
||||
m_fTopY = ndepth;
|
||||
updateImage(ndepth);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user