2026-05-19 11:19:43 +08:00
|
|
|
|
#include "FormWave.h"
|
|
|
|
|
|
#include "ui_FormWave.h"
|
|
|
|
|
|
#include <QPainter>
|
|
|
|
|
|
#include "CallManage.h"
|
|
|
|
|
|
#include "forminfo.h"
|
|
|
|
|
|
#include "formtrack.h"
|
|
|
|
|
|
#include "geometryutils.h"
|
|
|
|
|
|
#include "qtColorSchemeComboBox.h"
|
|
|
|
|
|
|
|
|
|
|
|
extern double g_dPixelPerCm;//每厘米像素数
|
|
|
|
|
|
|
|
|
|
|
|
FormWave::FormWave(QWidget *parent, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName) :
|
|
|
|
|
|
QWidget(parent),
|
|
|
|
|
|
ui(new Ui::FormWave)
|
|
|
|
|
|
{
|
|
|
|
|
|
ui->setupUi(this);
|
|
|
|
|
|
|
|
|
|
|
|
m_strSlfName = strSlfName;
|
|
|
|
|
|
m_strWellName = strWellName;
|
|
|
|
|
|
m_strTrackName = strTrackName;
|
|
|
|
|
|
m_strLineName = strLineName;
|
|
|
|
|
|
|
|
|
|
|
|
QString path = GetConfPath() + "selfcolorrank.ini";
|
|
|
|
|
|
FILE*fp = fopen(path.toStdString().c_str(), "rt");
|
|
|
|
|
|
if (fp)
|
|
|
|
|
|
{
|
|
|
|
|
|
float val = 0;
|
|
|
|
|
|
while (!feof(fp))
|
|
|
|
|
|
{
|
|
|
|
|
|
if (fscanf(fp, "%f\n", &val))
|
|
|
|
|
|
{
|
|
|
|
|
|
selfcolorrank.append(val);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
fclose(fp);
|
|
|
|
|
|
}
|
|
|
|
|
|
changeColor(schemIndex, colornum);
|
|
|
|
|
|
|
|
|
|
|
|
LoadFromSLF_wave();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
m_parent = parent;
|
|
|
|
|
|
//斜井三图一表
|
|
|
|
|
|
// connect(CallManage::getInstance(), SIGNAL(sig_ChangeTvdProperty(QString, QString, QString, QString, QString, QString, QString, QVariant)),
|
|
|
|
|
|
// this, SLOT(s_ChangeTvdProperty(QString, QString, QString, QString, QString, QString, QString, QVariant)));
|
|
|
|
|
|
//自定义滚动条
|
|
|
|
|
|
//connect(CallManage::getInstance(), SIGNAL(sig_vertScrollBarChanged_santuyibiao(QString, double, double, double)), this, SLOT(vertScrollBarChanged(QString, double, double, double)));
|
|
|
|
|
|
//打印
|
|
|
|
|
|
//connect(CallManage::getInstance(), SIGNAL(sig_vertScrollBarChanged_santu_Print(QString, int, int)), this, SLOT(vertScrollBarChanged_Print(QString, int, int)));
|
|
|
|
|
|
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, int)), this, SLOT(vertScrollBarChanged_setGeometry(QString, double, double, double, int)));
|
|
|
|
|
|
connect(CallManage::getInstance(), SIGNAL(sig_ResizeDepth(QString, int, float)), this, SLOT(s_ResizeDepth(QString, int, float)));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
FormWave::~FormWave()
|
|
|
|
|
|
{
|
|
|
|
|
|
delete ui;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void FormWave::initGeometry(QString strUuid, int nscale, double fW, int nH)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (strUuid.length() > 0)
|
|
|
|
|
|
this->m_strUuid = strUuid;
|
|
|
|
|
|
m_iScale = nscale;
|
|
|
|
|
|
|
|
|
|
|
|
// double dHight = (m_iY2 - m_iY1)*100.0 / (double)nscale * g_dPixelPerCm;
|
|
|
|
|
|
// // if (g_iShow == 1)
|
|
|
|
|
|
// // {
|
|
|
|
|
|
// // //显示刻度
|
|
|
|
|
|
// // dHight = dHight + 30;
|
|
|
|
|
|
// // }
|
|
|
|
|
|
//
|
|
|
|
|
|
// qDebug() << "FormWave dHight=" << QString::number((int)dHight);
|
|
|
|
|
|
// if (dHight > 32767)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// dHight = 32767;
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
int ntmpw = fW * g_dPixelPerCm;
|
|
|
|
|
|
this->setGeometry(0, 0, ntmpw - 2, (int)nH);
|
|
|
|
|
|
|
|
|
|
|
|
//修改滚动条,针对新建的
|
|
|
|
|
|
emit CallManage::getInstance()->sig_changeScrollBar(m_strUuid);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void FormWave::setDepthY(float fy1, float fy2)
|
|
|
|
|
|
{
|
|
|
|
|
|
this->m_iY1 = fy1;
|
|
|
|
|
|
this->m_iY2 = fy2;
|
|
|
|
|
|
|
|
|
|
|
|
m_PlotSdep = qAbs(this->m_iY2);
|
|
|
|
|
|
m_fTopY = m_PlotSdep;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void FormWave::updateDepthY(float fy1, float fy2)
|
|
|
|
|
|
{
|
|
|
|
|
|
this->m_iY1 = fy1;
|
|
|
|
|
|
this->m_iY2 = fy2;
|
|
|
|
|
|
m_fTopY = qAbs(this->m_iY2);
|
|
|
|
|
|
update();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool FormWave::LoadFromSLF_wave()
|
|
|
|
|
|
{
|
|
|
|
|
|
CLogIO * logio = new CLogIO();
|
|
|
|
|
|
if (!logio->Open(m_strSlfName.toStdString().c_str(), CSlfIO::modeRead))
|
|
|
|
|
|
{
|
|
|
|
|
|
delete logio;
|
|
|
|
|
|
m_vMD.SetSize(0);
|
|
|
|
|
|
m_vMD.m_vProperty = 0;
|
|
|
|
|
|
m_vProperty.SetSize(0);
|
|
|
|
|
|
m_vProperty.m_vProperty = NULL;
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
int curveindex = logio->OpenWave(m_strLineName.toStdString().c_str());
|
|
|
|
|
|
if (curveindex < 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_vMD.SetSize(0);
|
|
|
|
|
|
m_vMD.m_vProperty = 0;
|
|
|
|
|
|
m_vProperty.SetSize(0);
|
|
|
|
|
|
m_vProperty.m_vProperty = NULL;
|
|
|
|
|
|
delete logio;
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
//m_ObjectType = WAVE_OBJECT;
|
|
|
|
|
|
logio->GetWaveInfo(curveindex, &waveinfo);
|
|
|
|
|
|
// if (m_ArrayNum > 1) {
|
|
|
|
|
|
// if (waveinfo.RepCode == REPR_CHAR) waveinfo.RepCode = REPR_UCHAR;
|
|
|
|
|
|
// }
|
|
|
|
|
|
// acurveinfo.RepCode = waveinfo.RepCode;
|
|
|
|
|
|
// acurveinfo.CodeLen = waveinfo.CodeLen;
|
|
|
|
|
|
// acurveinfo.DepLevel = waveinfo.DepLevel;
|
|
|
|
|
|
// acurveinfo.StartDepth = waveinfo.StartDepth;
|
|
|
|
|
|
// acurveinfo.EndDepth = waveinfo.EndDepth;
|
|
|
|
|
|
// isRun = true;
|
|
|
|
|
|
|
|
|
|
|
|
int samplenum = (waveinfo.EndDepth - waveinfo.StartDepth) / waveinfo.DepLevel + 1.5;
|
|
|
|
|
|
QString name = m_strSlfName + m_strLineName;
|
|
|
|
|
|
// if (m_ArrayNum > 1) {
|
|
|
|
|
|
// name += "Array";
|
|
|
|
|
|
// }
|
|
|
|
|
|
// key = name;
|
|
|
|
|
|
int nbpp = waveinfo.SamplePoint;
|
|
|
|
|
|
int mlen = 0;
|
|
|
|
|
|
int myWidth = 0;
|
|
|
|
|
|
int chlen = 0;
|
|
|
|
|
|
int nPadZ = 0;
|
|
|
|
|
|
int myWidth1 = waveinfo.SamplePoint;
|
|
|
|
|
|
int shift0 = 0;
|
|
|
|
|
|
// if (m_ArrayNum > 1) {
|
|
|
|
|
|
// shift0 = pMsa->shift0;
|
|
|
|
|
|
// nPadZ = pMsa->nPadZ;
|
|
|
|
|
|
// myWidth = pMsa->Width;
|
|
|
|
|
|
// nbpp = pMsa->nSample;
|
|
|
|
|
|
// m_ArrayNum = pMsa->nPad;
|
|
|
|
|
|
// mlen = myWidth - m_ArrayNum * nbpp;//总盲区宽度
|
|
|
|
|
|
// mlen /= m_ArrayNum;
|
|
|
|
|
|
// if (mlen % 2 != 0) mlen += 1;
|
|
|
|
|
|
// if (nPadZ < 4) chlen = mlen / 8;
|
|
|
|
|
|
// else chlen = mlen / 4;
|
|
|
|
|
|
// if (chlen % 2 != 0) chlen += 1;
|
|
|
|
|
|
// if (chlen == 0) chlen = 2;
|
|
|
|
|
|
// // mlen=mlen-chlen;
|
|
|
|
|
|
// mlen = m_ArrayNum * chlen / nPadZ;
|
|
|
|
|
|
// if (mlen % 2 != 0) mlen++;
|
|
|
|
|
|
// if (mlen > 20) mlen = 20;
|
|
|
|
|
|
// if (chlen < 4) chlen = 4;
|
|
|
|
|
|
// // chlen=(myWidth-(mlen*m_ArrayNum+nbpp*m_ArrayNum))/nPadZ;
|
|
|
|
|
|
// int klen = pMsa->nPadZ*waveinfo.SamplePoint + mlen + pMsa->nPadZ*chlen;
|
|
|
|
|
|
// myWidth1 = klen * pMsa->nPad / pMsa->nPadZ;
|
|
|
|
|
|
// }
|
|
|
|
|
|
// else
|
|
|
|
|
|
myWidth = waveinfo.SamplePoint;
|
|
|
|
|
|
int nlen = waveinfo.CodeLen*waveinfo.SamplePoint;
|
|
|
|
|
|
int reclen = waveinfo.CodeLen*myWidth*waveinfo.ArrayNum;
|
|
|
|
|
|
|
|
|
|
|
|
m_SDep = waveinfo.StartDepth;
|
|
|
|
|
|
m_EDep = waveinfo.EndDepth;
|
|
|
|
|
|
m_Rlev = waveinfo.DepLevel;
|
|
|
|
|
|
m_nSamples = waveinfo.SamplePoint*waveinfo.ArrayNum;
|
|
|
|
|
|
m_PointNum = (float)(fabs((m_EDep - m_SDep) / m_Rlev + 0.5));
|
|
|
|
|
|
|
|
|
|
|
|
m_sharedMemory.setKey(name);
|
|
|
|
|
|
// 3. 创建或附加到共享内存
|
|
|
|
|
|
if (m_sharedMemory.isAttached())
|
|
|
|
|
|
{
|
|
|
|
|
|
m_sharedMemory.detach();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
int nMemnum = 3 * sizeof(float) + sizeof(int) + reclen * (samplenum + 1);
|
|
|
|
|
|
|
|
|
|
|
|
if (!m_sharedMemory.attach())
|
|
|
|
|
|
{
|
|
|
|
|
|
// 尝试创建共享内存
|
|
|
|
|
|
if (!m_sharedMemory.create(nMemnum))
|
|
|
|
|
|
{
|
|
|
|
|
|
qDebug() << "Failed to create shared memory:"
|
|
|
|
|
|
<< m_sharedMemory.errorString();
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
float *buffer = (float*)m_sharedMemory.data();
|
|
|
|
|
|
buffer[0] = waveinfo.StartDepth;
|
|
|
|
|
|
buffer[1] = waveinfo.EndDepth;
|
|
|
|
|
|
buffer[2] = waveinfo.DepLevel;
|
|
|
|
|
|
((int *)buffer)[3] = samplenum;
|
|
|
|
|
|
char *pchar = (char *)&buffer[4];
|
|
|
|
|
|
//double laa = (double)reclen*(double)samplenum / waveinfo.CodeLen;
|
|
|
|
|
|
int num = reclen * samplenum / waveinfo.CodeLen;
|
|
|
|
|
|
float defval = -9999;
|
|
|
|
|
|
if (waveinfo.RepCode == REPR_CHAR || waveinfo.RepCode == REPR_UCHAR) defval = 0;
|
|
|
|
|
|
else if (waveinfo.RepCode == REPR_SHORT || waveinfo.RepCode == REPR_USHORT) defval = 0xffff;
|
|
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < num; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
this->SetData(waveinfo.RepCode, &pchar[i*waveinfo.CodeLen], defval);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
logio->ReadWave(curveindex, waveinfo.StartDepth, samplenum, (void *)pchar);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 4. 锁定共享内存并写入数据
|
|
|
|
|
|
if (!m_sharedMemory.lock())
|
|
|
|
|
|
{
|
|
|
|
|
|
qDebug() << "Failed to lock shared memory";
|
|
|
|
|
|
m_sharedMemory.detach();
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
m_vMD.SetSize(3);
|
|
|
|
|
|
m_vMD.m_vProperty = (float *)m_sharedMemory.data();
|
|
|
|
|
|
int size = ((int *)m_sharedMemory.data())[3];
|
|
|
|
|
|
m_vProperty.SetSize(size);
|
|
|
|
|
|
m_vProperty.m_vProperty = &m_vMD.m_vProperty[4];
|
|
|
|
|
|
|
|
|
|
|
|
if (m_vMD.size() > 0) {
|
|
|
|
|
|
m_TopDepth = m_vMD.m_vProperty[0];
|
|
|
|
|
|
m_BottomDepth = m_vMD.m_vProperty[1];
|
|
|
|
|
|
m_Rlev = m_vMD.m_vProperty[2];
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
float val = 0;
|
|
|
|
|
|
valMin.clear();
|
|
|
|
|
|
valMax.clear();
|
|
|
|
|
|
valMin.resize((waveinfo.SamplePoint)*waveinfo.ArrayNum);
|
|
|
|
|
|
valMax.resize((waveinfo.SamplePoint)*waveinfo.ArrayNum);
|
|
|
|
|
|
for (int j = 0; j < (waveinfo.SamplePoint)*waveinfo.ArrayNum; j++) {
|
|
|
|
|
|
valMin[j] = 999999999;
|
|
|
|
|
|
valMax[j] = -99999999;
|
|
|
|
|
|
}
|
|
|
|
|
|
char buf[200];
|
|
|
|
|
|
for (int i = 0; i < samplenum; i++) {
|
|
|
|
|
|
for (int j = 0; j < waveinfo.SamplePoint*waveinfo.ArrayNum; j++)
|
|
|
|
|
|
{
|
|
|
|
|
|
val = GetData(i, j, buf);
|
|
|
|
|
|
if (val == 0 || val == -9999 || val == -999.25 || val == -99999 || val == -32767 || val == 32767) continue;
|
|
|
|
|
|
if (_isnan(val) || !_finite(val)) continue;
|
|
|
|
|
|
if (valMax[j] < val)valMax[j] = val;
|
|
|
|
|
|
if (valMin[j] > val)valMin[j] = val;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
if (waveinfo.MaxValue == -50 || waveinfo.MinValue == 50 || fabs(waveinfo.MaxValue) < 1e-6 || waveinfo.MinValue < 1e-6 || waveinfo.MaxValue == -99999 || waveinfo.MaxValue == -9999 || waveinfo.MinValue == 999999 || waveinfo.MinValue == 999999 || waveinfo.MinValue == 99999 || waveinfo.MinValue == 99999 || waveinfo.MinValue == -9999)
|
|
|
|
|
|
{
|
|
|
|
|
|
float valmin = 99999;
|
|
|
|
|
|
float valmax = -99999;
|
|
|
|
|
|
for (int j = 0; j < waveinfo.SamplePoint*waveinfo.ArrayNum; j++) {
|
|
|
|
|
|
if (valmin > valMax[j]) valmin = valMax[j];
|
|
|
|
|
|
if (valmin > valMin[j]) valmin = valMin[j];
|
|
|
|
|
|
if (valmax < valMin[j]) valmin = valMin[j];
|
|
|
|
|
|
if (valmax < valMax[j]) valmax = valMax[j];
|
|
|
|
|
|
}
|
|
|
|
|
|
waveinfo.MaxValue = valmax;
|
|
|
|
|
|
waveinfo.MinValue = valmin;
|
|
|
|
|
|
//BWAVEINFO.MaxValue = valmax;
|
|
|
|
|
|
//BWAVEINFO.MinValue = valmin;
|
|
|
|
|
|
//logio->SetWaveInfo(curveindex, &BWAVEINFO);
|
|
|
|
|
|
}
|
|
|
|
|
|
m_sharedMemory.unlock();
|
|
|
|
|
|
|
|
|
|
|
|
logio->Clear();
|
|
|
|
|
|
delete logio;
|
|
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void FormWave::changeColor(int nidx, int ncolorNum)
|
|
|
|
|
|
{
|
|
|
|
|
|
QList<QRgb> rgbList = QtColorTableData::getInstance()->GetRgb_UseTag(0, nidx, ncolorNum);
|
|
|
|
|
|
for (int i = 0; i < rgbList.size(); i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
QColor acolor = rgbList.at(i);
|
|
|
|
|
|
m_Color[i] = acolor;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void FormWave::paintEvent(QPaintEvent*)
|
|
|
|
|
|
{
|
|
|
|
|
|
//
|
|
|
|
|
|
QPainter painter(this);
|
|
|
|
|
|
QRect rect = this->rect();
|
|
|
|
|
|
// QRect rect = m_parent->rect();
|
|
|
|
|
|
//背景透明
|
|
|
|
|
|
painter.fillRect(rect.left(), rect.top(), rect.width(), rect.height(), QColor(0, 0, 0, 0)); //QColor(67, 67, 67, 100)
|
|
|
|
|
|
if (m_formTrack)
|
|
|
|
|
|
{
|
|
|
|
|
|
this->DrawWave(&painter, rect);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void FormWave::s_ResizeDepth(QString strUuid, int nHeight, float fDepthLowerY)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (m_strUuid != strUuid)
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
|
|
this->setFixedHeight(nHeight);
|
|
|
|
|
|
m_fDepthLowerY = qAbs(fDepthLowerY);
|
|
|
|
|
|
m_fAddY = m_fDepthLowerY - m_fTopY;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void FormWave::s_ChangeTvdProperty(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName,
|
|
|
|
|
|
QString strGroup, QString strProperty, QVariant variant)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(m_strUuid != strUuid ||
|
|
|
|
|
|
m_strSlfName != strSlfName ||
|
|
|
|
|
|
m_strWellName != strWellName ||
|
|
|
|
|
|
m_strTrackName != strTrackName ||
|
|
|
|
|
|
m_strLineName != strLineName)
|
|
|
|
|
|
{
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
if("通常" == strGroup)
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
if("绘制图形对象" == strGroup)
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
if("边框线型" == strGroup)
|
|
|
|
|
|
{
|
|
|
|
|
|
if ("线宽" == strProperty)
|
|
|
|
|
|
;
|
|
|
|
|
|
else if ("颜色" == strProperty)
|
|
|
|
|
|
;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
update();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//自定义滚动条
|
|
|
|
|
|
void FormWave::vertScrollBarChanged(QString strUuid, double value, double low, double upper)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(m_strUuid==strUuid)
|
|
|
|
|
|
{
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
m_fTopY = value;
|
|
|
|
|
|
update();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//打印
|
|
|
|
|
|
void FormWave::vertScrollBarChanged_Print(QString strUuid, int iNum, int iHeightOfScreen)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(m_strUuid==strUuid)
|
|
|
|
|
|
{
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
//上移或下移
|
|
|
|
|
|
QRect geoRect = geometry();
|
|
|
|
|
|
//
|
|
|
|
|
|
double dDelta = iHeightOfScreen*(iNum-1);
|
|
|
|
|
|
setGeometry(0, -dDelta, geoRect.width(), geoRect.height());
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void FormWave::vertScrollBarChanged_setGeometry(QString strUuid, double value, double low, double upper, int ndepth)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (m_strUuid == strUuid)
|
|
|
|
|
|
{
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
m_fTopY = ndepth;
|
|
|
|
|
|
update();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void FormWave::wheelEvent(QWheelEvent *event) // 滚轮事件
|
|
|
|
|
|
{
|
|
|
|
|
|
emit CallManage::getInstance()->sig_mouseWheel(event);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*图像的转置函数*/
|
|
|
|
|
|
QImage Transpose(QImage* image)
|
|
|
|
|
|
{
|
|
|
|
|
|
QImage newImage(image->height(), image->width(), QImage::Format_ARGB32);
|
|
|
|
|
|
unsigned char* copyPixel = NULL;
|
|
|
|
|
|
unsigned char* objPixel = NULL;
|
|
|
|
|
|
unsigned int tempJ = 0;
|
|
|
|
|
|
for (int j = 0; j < image->height(); j++)
|
|
|
|
|
|
{
|
|
|
|
|
|
for (int i = 0; i < image->width(); i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
copyPixel = image->bits() + j * image->width() * 4 + i * 4;
|
|
|
|
|
|
objPixel = newImage.bits() + i * image->height() * 4 + j * 4;
|
|
|
|
|
|
memcpy(objPixel, copyPixel, 4);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
return newImage;
|
|
|
|
|
|
}
|
|
|
|
|
|
/*图像的转置函数*/
|
|
|
|
|
|
QImage TTranspose(QImage* image)
|
|
|
|
|
|
{
|
|
|
|
|
|
QImage newImage(image->width(), image->height(), QImage::Format_ARGB32);
|
|
|
|
|
|
unsigned char* copyPixel = NULL;
|
|
|
|
|
|
unsigned char* objPixel = NULL;
|
|
|
|
|
|
unsigned int tempJ = 0;
|
|
|
|
|
|
for (int j = 0; j < image->height(); j++)
|
|
|
|
|
|
{
|
|
|
|
|
|
memmove((void *)newImage.constScanLine(j), (void *)image->constScanLine(image->height() - 1 - j), image->bytesPerLine());
|
|
|
|
|
|
}
|
|
|
|
|
|
return newImage;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void FormWave::DrawWave(QPainter* pdc, QRectF mrt1)
|
|
|
|
|
|
{
|
2026-05-20 11:47:07 +08:00
|
|
|
|
if (m_vMD.size() <= 0 || m_vProperty.size() <= 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
2026-05-19 11:19:43 +08:00
|
|
|
|
if (m_pInfo == NULL)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_pInfo = m_formTrack->getFormInfoByParameters(m_strUuid, m_strWellName, m_strTrackName, m_strLineName);
|
|
|
|
|
|
}
|
|
|
|
|
|
if (m_pInfo == NULL)
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
|
|
if (!m_pInfo->m_pWave)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_pInfo->m_pWave = this;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (m_pInfo->m_nSchemeIndex != schemIndex || m_pInfo->m_nColorNum != colornum)
|
|
|
|
|
|
{
|
|
|
|
|
|
schemIndex = m_pInfo->m_nSchemeIndex;
|
|
|
|
|
|
colornum = m_pInfo->m_nColorNum;
|
|
|
|
|
|
changeColor(schemIndex, colornum);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (m_vMD.m_vProperty) {
|
|
|
|
|
|
m_EDep = m_vMD.m_vProperty[1];
|
|
|
|
|
|
m_SDep = m_vMD.m_vProperty[0];
|
|
|
|
|
|
m_Rlev = m_vMD.m_vProperty[2];
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
float m_MaxRange = m_pInfo->m_fMaxAmp;
|
|
|
|
|
|
float m_Base = m_pInfo->m_fWaveBase;
|
|
|
|
|
|
if (fabs(m_MaxRange - /*mWaveMes.*/m_Base) < 1e-6) {
|
|
|
|
|
|
m_MaxRange = waveinfo.MaxValue;
|
|
|
|
|
|
//objViewInfo->m_maxRange = mWaveMes.m_MaxRange;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
float m_flRlev2 = waveinfo.TimeLevel;
|
|
|
|
|
|
QColor crColor = qRgb(0, 200, 200);
|
|
|
|
|
|
QPen cPen;
|
|
|
|
|
|
QBrush cBrush;
|
|
|
|
|
|
float sdep, edep, scale, flDepthScale, temp;
|
|
|
|
|
|
int i, j, k, iPoint = 0, nOffset = 0;
|
|
|
|
|
|
float y = 9999999.0;
|
|
|
|
|
|
//POINT *points;
|
|
|
|
|
|
flDepthScale = 1;
|
|
|
|
|
|
float te00 = 0;
|
|
|
|
|
|
|
|
|
|
|
|
qDebug() << "FormWave : m_fTopY " << m_fTopY;
|
|
|
|
|
|
// 计算显示深度
|
|
|
|
|
|
float sdepc = m_fTopY, edepc = m_fTopY + m_fAddY;
|
|
|
|
|
|
QRectF rt;// = mrt1;
|
|
|
|
|
|
//GetDepth(pdc, mrt1, rt, sdep, edep, sdepc, edepc);
|
|
|
|
|
|
int SamplePoint = 0;
|
|
|
|
|
|
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;
|
|
|
|
|
|
// 计算开始数据点及数据点数
|
|
|
|
|
|
temp = (sdep - m_SDep) / m_Rlev;
|
|
|
|
|
|
iPoint = (float)(temp + 0.5);
|
|
|
|
|
|
int nPoint, lpoint, flag, nFillPoint, m, nStep;
|
|
|
|
|
|
int iStartPoint = 0;
|
|
|
|
|
|
float ch, nRep;
|
|
|
|
|
|
int flColorScale;
|
|
|
|
|
|
int m_ArrayNum = 0;
|
|
|
|
|
|
|
|
|
|
|
|
QRectF mrt = mrt1;
|
|
|
|
|
|
float y0 = mrt1.top();//ConvertY0(sdepc);
|
|
|
|
|
|
float y1 = mrt1.bottom();//ConvertY0(edepc);
|
|
|
|
|
|
float ddep = (y1 - y0);
|
|
|
|
|
|
|
|
|
|
|
|
rt = mrt;
|
|
|
|
|
|
QRectF rtd = mrt;
|
|
|
|
|
|
QRectF tt;
|
|
|
|
|
|
if (m_flRlev2 <= 0) m_flRlev2 = 0.1;
|
|
|
|
|
|
int Mode = m_pInfo->m_nCurveMode;// objViewInfo->GetLogarithmic();
|
|
|
|
|
|
//objViewInfo->m_Rlev = waveinfo.DepLevel;
|
|
|
|
|
|
if (Mode == 2 || Mode == 5) {
|
|
|
|
|
|
if (m_pInfo->m_vmin < waveinfo.StartTime)m_pInfo->m_vmin = waveinfo.StartTime;
|
|
|
|
|
|
if (m_pInfo->m_vmax < waveinfo.StartTime)m_pInfo->m_vmax = waveinfo.StartTime;
|
|
|
|
|
|
// if (mWaveMes.m_Left < waveinfo.StartTime)mWaveMes.m_Left = waveinfo.StartTime;
|
|
|
|
|
|
// if (mWaveMes.m_Right < waveinfo.StartTime)mWaveMes.m_Right = waveinfo.StartTime;
|
|
|
|
|
|
temp = m_nSamples;
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (Mode == 3) {
|
|
|
|
|
|
if (m_pInfo->m_ArrayNum > 1) {
|
|
|
|
|
|
m_ArrayNum = m_pInfo->m_ArrayNum;
|
|
|
|
|
|
SamplePoint = m_nSamples / m_ArrayNum;
|
|
|
|
|
|
}
|
|
|
|
|
|
else {
|
|
|
|
|
|
m_ArrayNum = sqrt((double)m_nSamples);
|
|
|
|
|
|
m_pInfo->m_ArrayNum = m_ArrayNum;
|
|
|
|
|
|
SamplePoint = m_ArrayNum;
|
|
|
|
|
|
}
|
|
|
|
|
|
temp = SamplePoint;//(mWaveMes.m_Right - mWaveMes.m_Left) / m_flRlev2;
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (Mode == 6) {
|
|
|
|
|
|
if (m_pInfo->m_vmin < pow(2.f, waveinfo.StartTime))m_pInfo->m_vmin = pow(2.f, waveinfo.StartTime);
|
|
|
|
|
|
if (m_pInfo->m_vmax < pow(2.f, waveinfo.StartTime))m_pInfo->m_vmax = pow(2.f, waveinfo.StartTime);
|
|
|
|
|
|
temp = m_nSamples;
|
|
|
|
|
|
}
|
|
|
|
|
|
else {
|
|
|
|
|
|
temp = (m_pInfo->m_vmax - m_pInfo->m_vmin) / m_flRlev2;
|
|
|
|
|
|
}
|
|
|
|
|
|
if (temp < 0)
|
|
|
|
|
|
temp -= 0.5;
|
|
|
|
|
|
|
|
|
|
|
|
nPoint = fabs(temp);
|
|
|
|
|
|
QPointF *cPoints = new QPointF[nPoint + 10];
|
|
|
|
|
|
QPointF *points = new QPointF[nPoint + 10];
|
|
|
|
|
|
cBrush = QBrush();
|
|
|
|
|
|
cPen = QPen();
|
|
|
|
|
|
// osg::Vec4f vco = objViewInfo->GetLineProperty().GetLineColor();
|
|
|
|
|
|
// if (!m_pWellSceneManager->m_isColorPrint) {
|
|
|
|
|
|
// cPen.setColor(qRgb(0, 0, 0));
|
|
|
|
|
|
// }
|
|
|
|
|
|
//else
|
|
|
|
|
|
cPen.setColor(m_pInfo->m_lineColor);// QColor::fromRgb(vco[0] * 255, vco[1] * 255, vco[2] * 255, vco[3] * 255));
|
|
|
|
|
|
cPen.setWidth(m_pInfo->m_dWidth);// objViewInfo->GetLineProperty().GetLineWidth());
|
|
|
|
|
|
cPen.setStyle(m_pInfo->m_lineStyle);
|
|
|
|
|
|
// osgLineStyle iLineStyle = objViewInfo->GetLineProperty().GetLineStyle();
|
|
|
|
|
|
// TranslateOSGLineStyleToQtPenStyle(cPen, iLineStyle);
|
|
|
|
|
|
switch (m_pInfo->m_nDrawType)
|
|
|
|
|
|
{
|
|
|
|
|
|
case 1:
|
|
|
|
|
|
switch (m_pInfo->m_nFillType){//mWaveMes.Mode) {
|
|
|
|
|
|
case 1:
|
|
|
|
|
|
case 2:
|
|
|
|
|
|
cBrush = QBrush(m_pInfo->m_FillColor);
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case 2:
|
|
|
|
|
|
case 6:
|
|
|
|
|
|
case 10:
|
|
|
|
|
|
case 13:
|
|
|
|
|
|
cBrush = QBrush();
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
j = 0;
|
|
|
|
|
|
|
|
|
|
|
|
float d = 1;
|
|
|
|
|
|
|
|
|
|
|
|
if (m_pInfo->m_nDrawType/*mWaveMes.WaveType*/ == 6) {
|
|
|
|
|
|
float w = rt.width();
|
|
|
|
|
|
if (nPoint > 1) scale = w / (float)(nPoint - 1);
|
|
|
|
|
|
else scale = w;
|
|
|
|
|
|
}
|
|
|
|
|
|
else {
|
|
|
|
|
|
if (nPoint > 1) scale = ((float)rt.right() - (float)rt.left()) / (float)(nPoint - 1);//change by whp 11.13 from nPoint to nPoint-1因为波列画不到头
|
|
|
|
|
|
else scale = ((float)rt.right() - (float)rt.left());
|
|
|
|
|
|
}
|
|
|
|
|
|
lpoint = (/*mWaveMes.m_Left*/m_pInfo->m_vmin - waveinfo.StartTime) / m_flRlev2;
|
|
|
|
|
|
|
|
|
|
|
|
float dpoint = (edepc - sdepc) / m_Rlev;
|
|
|
|
|
|
if (dpoint < 1) {
|
|
|
|
|
|
delete cPoints;
|
|
|
|
|
|
delete points;
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
int v = qRound(dpoint / mrt.height() + 0.5);
|
|
|
|
|
|
if (v < 1) v = 1;
|
|
|
|
|
|
float MH = 0;
|
|
|
|
|
|
if (m_ArrayNum) {
|
|
|
|
|
|
//WellWindowViewInfo *m_pWellWindowViewInfo = dynamic_cast<WellWindowViewInfo *>(m_pSceneManager->GetViewInfo(m_pSceneManager->GetVecWindow()->GetWindowID()));
|
|
|
|
|
|
float scale = m_iScale;
|
|
|
|
|
|
//if (m_pWellWindowViewInfo) {
|
|
|
|
|
|
// scale = m_pWellWindowViewInfo->GetYScale();
|
|
|
|
|
|
//}
|
|
|
|
|
|
MH = 2;
|
|
|
|
|
|
if (scale == 1000) MH = 10;
|
|
|
|
|
|
else if (scale == 2000) MH = 20;
|
|
|
|
|
|
nStep = ((int)(MH / m_Rlev + 0.5));
|
|
|
|
|
|
// if (objViewInfo) {
|
|
|
|
|
|
// if (objViewInfo->GetisDot()) nStep = mWaveMes.m_WaveSpace;
|
|
|
|
|
|
// }
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
nStep = m_pInfo->m_nWaveJg;// .m_WaveSpace;
|
|
|
|
|
|
if (nStep < 1) nStep = 1;
|
|
|
|
|
|
if (nStep < v) nStep = v;
|
|
|
|
|
|
float m_r = m_Rlev * nStep;
|
|
|
|
|
|
float dd = (ddep) / dpoint;
|
|
|
|
|
|
nRep = fabs(dd)*nStep;
|
|
|
|
|
|
if (nRep < 1) nRep = 1;
|
|
|
|
|
|
|
|
|
|
|
|
pdc->setPen(cPen);
|
|
|
|
|
|
pdc->setBrush(cBrush);
|
|
|
|
|
|
// 绘制
|
|
|
|
|
|
float Base0;
|
|
|
|
|
|
QRectF wrt;
|
|
|
|
|
|
int dep = 0;
|
|
|
|
|
|
float m_MoveDep = 0;
|
|
|
|
|
|
float m_MoveSdep = -9999;
|
|
|
|
|
|
float m_MoveEdep = -9999;
|
|
|
|
|
|
// if (m_pWellLog)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// m_MoveDep = m_pWellLog->GetShiftOffset();
|
|
|
|
|
|
// m_MoveSdep = m_pWellLog->GetShiftTopDepth();
|
|
|
|
|
|
// m_MoveEdep = m_pWellLog->GetShiftBottomDepth();
|
|
|
|
|
|
// if (m_MoveDep != 0 && m_MoveDep != -9999 && (m_MoveSdep == -9999.0 || m_MoveEdep == -9999.0)) {
|
|
|
|
|
|
// m_MoveSdep = m_SDep;
|
|
|
|
|
|
// m_MoveEdep = m_EDep;
|
|
|
|
|
|
// }
|
|
|
|
|
|
// }
|
|
|
|
|
|
////////////深度方向比例因子
|
|
|
|
|
|
float yscale = m_pInfo->m_fWaveHei;// mWaveMes.m_WaveHight;
|
|
|
|
|
|
//if (mWaveMes.WaveType == 0 || mWaveMes.WaveType == 1)
|
|
|
|
|
|
if (m_pInfo->m_nDrawType == 0 || m_pInfo->m_nDrawType == 1)
|
|
|
|
|
|
yscale *= g_dPixelPerCm;// m_pSceneManager->GetCoordinate()->GetPixelPerCm();
|
|
|
|
|
|
float base = m_pInfo->m_fWaveBase; //mWaveMes.m_Base;
|
|
|
|
|
|
if (Mode == AXIS_LOGARITHMIC) {
|
|
|
|
|
|
if (base < 0) base = 0.1;
|
|
|
|
|
|
if (m_pInfo->m_nDrawType == 6 || m_pInfo->m_nDrawType == 2) {
|
|
|
|
|
|
float DifBase = (log10(/*mWaveMes.m_MaxRange*/m_MaxRange) - log10(base)) / m_pInfo->m_nColorNum;
|
|
|
|
|
|
if (fabs(DifBase) <= 1e-6) DifBase = 1;
|
|
|
|
|
|
yscale = yscale / DifBase;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
float DifBase = 1;
|
|
|
|
|
|
if (m_pInfo->m_nDrawType == 2 || m_pInfo->m_nDrawType == 6 || m_pInfo->m_nDrawType == 10) {
|
|
|
|
|
|
DifBase = (m_MaxRange - m_Base) / m_pInfo->m_nColorNum;
|
|
|
|
|
|
}
|
|
|
|
|
|
else {
|
|
|
|
|
|
DifBase = (m_MaxRange - m_Base) / 1;
|
|
|
|
|
|
}
|
|
|
|
|
|
if (fabs(DifBase) <= 1e-6) DifBase = 1;
|
|
|
|
|
|
yscale = yscale / DifBase;
|
|
|
|
|
|
}
|
|
|
|
|
|
if (_isnan(m_MaxRange) || !_finite(m_MaxRange)) yscale = 1;
|
|
|
|
|
|
|
|
|
|
|
|
int mOffset = m_MoveDep / m_Rlev;
|
|
|
|
|
|
float detp = sdepc;
|
|
|
|
|
|
int ppos = 0;
|
|
|
|
|
|
float vval = 0;
|
|
|
|
|
|
if (detp < m_PlotSdep) detp = m_PlotSdep;
|
|
|
|
|
|
detp = sdepc;
|
|
|
|
|
|
int tl = m_pInfo->m_vmin;
|
|
|
|
|
|
int atime = 0;
|
|
|
|
|
|
// if (m_vTimeMD.size()) {
|
|
|
|
|
|
// vTime.vchar = &((char *)m_vTimeProperty.m_vProperty)[0 * TimeCurveInfo.TimeSamples*TimeCurveInfo.CodeLen];
|
|
|
|
|
|
// float vval = GetData(TimeCurveInfo.RepCode, (char *)&vTime.vchar[0 * TimeCurveInfo.CodeLen]);
|
|
|
|
|
|
// if (vval == -32767) vval = 0;
|
|
|
|
|
|
// for (int i = 1; i < TimeCurveInfo.TimeSamples; i++) {
|
|
|
|
|
|
// float vval1 = GetData(TimeCurveInfo.RepCode, (char *)&vTime.vchar[i*TimeCurveInfo.CodeLen]);
|
|
|
|
|
|
// if (vval == -32767) vval = 0;
|
|
|
|
|
|
// if (tl >= vval && tl < vval1) atime = vval;
|
|
|
|
|
|
// if (tl == vval1) atime = vval1;
|
|
|
|
|
|
// }
|
|
|
|
|
|
// }
|
|
|
|
|
|
//////////////////// 数据值方向
|
|
|
|
|
|
int left = 0;
|
|
|
|
|
|
int right = 0;
|
|
|
|
|
|
if (Mode == AXIS_LINEAR || Mode == AXIS_LOGARITHMIC || Mode == 4) {
|
|
|
|
|
|
left = (tl - waveinfo.StartTime + atime) / m_flRlev2;
|
|
|
|
|
|
right = (m_pInfo->m_vmax - waveinfo.StartTime) / m_flRlev2;
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (Mode == 2) {
|
|
|
|
|
|
left = 0;
|
|
|
|
|
|
right = m_nSamples;
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (Mode == 3) {
|
|
|
|
|
|
left = 0;
|
|
|
|
|
|
if (m_pInfo->m_ArrayNum > 1) {
|
|
|
|
|
|
right = m_nSamples / m_ArrayNum;
|
|
|
|
|
|
}
|
|
|
|
|
|
else {
|
|
|
|
|
|
right = sqrt((double)m_nSamples);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (Mode == 5) {
|
|
|
|
|
|
if (waveinfo.StartTime <= 0) {
|
|
|
|
|
|
left = log10(m_pInfo->m_vmin / 1) / m_flRlev2 + 0.5;
|
|
|
|
|
|
right = log10(m_pInfo->m_vmax / 1) / m_flRlev2 + 1.5;
|
|
|
|
|
|
}
|
|
|
|
|
|
else {
|
|
|
|
|
|
left = log10(m_pInfo->m_vmin / waveinfo.StartTime) / m_flRlev2 + 0.5;
|
|
|
|
|
|
right = log10(m_pInfo->m_vmax / waveinfo.StartTime) / m_flRlev2 + 1.5;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (Mode == 6) {
|
|
|
|
|
|
left = log10(m_pInfo->m_vmin / waveinfo.StartTime) / m_flRlev2 + 0.5;
|
|
|
|
|
|
right = log10(m_pInfo->m_vmax / waveinfo.StartTime) / m_flRlev2 + 1.5;
|
|
|
|
|
|
}
|
|
|
|
|
|
if (right == left) right = left + 1;
|
|
|
|
|
|
if (m_pInfo->m_nDrawType == 10) {
|
|
|
|
|
|
if (left > m_pInfo->m_FirstRange) left = m_pInfo->m_FirstRange;
|
|
|
|
|
|
if (right < m_pInfo->m_EndRange) right = m_pInfo->m_EndRange;
|
|
|
|
|
|
}
|
|
|
|
|
|
if (m_pInfo->m_nDrawType == 0 || m_pInfo->m_nDrawType == 1)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (abs(right - left) > 1) {
|
|
|
|
|
|
scale = rt.width() / (right - left - 1);
|
|
|
|
|
|
}
|
|
|
|
|
|
else scale = rt.width();
|
|
|
|
|
|
}
|
|
|
|
|
|
else scale = rt.width() / (right - left);
|
|
|
|
|
|
int left1 = left;
|
|
|
|
|
|
int right1 = right;
|
|
|
|
|
|
if (left > right) {
|
|
|
|
|
|
left1 = right;
|
|
|
|
|
|
right1 = left;
|
|
|
|
|
|
}
|
|
|
|
|
|
if (left1 < 0) left1 = 0;
|
|
|
|
|
|
if (right1 > m_nSamples) right1 = m_nSamples;
|
|
|
|
|
|
|
|
|
|
|
|
/////////////绘图缓冲区
|
|
|
|
|
|
int w = right1 - left1;
|
|
|
|
|
|
float yy0 = mrt.top();
|
|
|
|
|
|
float yy1 = mrt.bottom();
|
|
|
|
|
|
float curEdep = edepc;
|
|
|
|
|
|
float curSdep = sdepc;
|
|
|
|
|
|
//if (pWellNode->m_curEdep - pWellNode->m_curSdep <= 0) return;
|
|
|
|
|
|
if (curEdep - curSdep <= 0) return;
|
|
|
|
|
|
d = (yy1 - yy0) / (curEdep - curSdep);
|
|
|
|
|
|
wrt.setTop((int)(yy0));
|
|
|
|
|
|
wrt.setBottom((int)(yy1));
|
|
|
|
|
|
|
|
|
|
|
|
if (left > right) {
|
|
|
|
|
|
wrt.setLeft(rt.left() + (left1 - right)*scale);
|
|
|
|
|
|
wrt.setRight(rt.right() - (right1 - left)*scale);
|
|
|
|
|
|
}
|
|
|
|
|
|
else {
|
|
|
|
|
|
wrt.setLeft(rt.left() + (left1 - left)*scale);
|
|
|
|
|
|
wrt.setRight(rt.left() + (right1 - left)*scale);
|
|
|
|
|
|
}
|
|
|
|
|
|
float h = int(wrt.height() / nRep + 0.5);
|
|
|
|
|
|
QRectF srt(0, 0, w, h);
|
|
|
|
|
|
QImage aa(srt.width(), srt.height(), QImage::Format::Format_RGB32);
|
|
|
|
|
|
aa.fill(qRgba(255, 255, 255, 0));
|
|
|
|
|
|
int mh = srt.bottom();
|
|
|
|
|
|
float te01 = 0;
|
|
|
|
|
|
float *val = NULL;
|
|
|
|
|
|
int point = (m_EDep - m_SDep) / m_Rlev + 1.5;
|
|
|
|
|
|
if (m_pInfo->m_nDrawType == 10) {
|
|
|
|
|
|
val = new float[point + 1];
|
|
|
|
|
|
CMemRdWt mrw;
|
|
|
|
|
|
QString wellname(m_strSlfName);
|
|
|
|
|
|
if (mrw.Open(wellname.toStdString().c_str())) // 打开井文件
|
|
|
|
|
|
{
|
|
|
|
|
|
int index = mrw.OpenCurve("JIEGU");
|
|
|
|
|
|
if (index > -1) {
|
|
|
|
|
|
mrw.ReadCurve(index, m_SDep, point, val);
|
|
|
|
|
|
}
|
|
|
|
|
|
else {
|
|
|
|
|
|
memset(val, 0, sizeof(float)*(point + 1));
|
|
|
|
|
|
}
|
|
|
|
|
|
mrw.Clear();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
int basecolor = m_pInfo->m_nColorNum / 4.0;
|
|
|
|
|
|
QVector<float> vals;
|
|
|
|
|
|
float vmin = waveinfo.MinValue;
|
|
|
|
|
|
float vmax = -waveinfo.MaxValue;
|
|
|
|
|
|
///////////////////////////////////////
|
|
|
|
|
|
// QRegion qRgn;
|
|
|
|
|
|
// rt.setBottom(rt.top()+ConvertY( eCoord_GEO,edepc,eCoord_GEONormal ));
|
|
|
|
|
|
// 设置裁剪区域,预防画出边界
|
|
|
|
|
|
// qRgn = pdc->clipRegion();
|
|
|
|
|
|
// rt.adjust(0,0,0,1);
|
|
|
|
|
|
pdc->setClipRect(rt);
|
|
|
|
|
|
detp = int((detp - m_PlotSdep) / m_r)*m_r + m_PlotSdep;
|
|
|
|
|
|
/*
|
|
|
|
|
|
osg::Vec3d vecSheet;
|
|
|
|
|
|
m_pSceneManager->GetCoordinate()->ConvertCoordDouble(this->GetID(),eCoord_GEO,osg::Vec3d(0,detp,0) ,eCoord_GDIPixel,vecSheet );
|
|
|
|
|
|
if(m_pWellSceneManager->IsWellSectonHorizonLayout()) yy0=vecSheet[0];
|
|
|
|
|
|
else yy0=vecSheet[1];
|
|
|
|
|
|
*/
|
|
|
|
|
|
// yy0=yy0-(pWellNode->m_curSdep-(detp-10*m_r))*d;
|
|
|
|
|
|
pdc->setPen(m_pInfo->m_WaveColor);
|
|
|
|
|
|
int odd = 0;
|
|
|
|
|
|
int ifist = -lpoint, eend = nPoint;
|
|
|
|
|
|
if (ifist < 0) ifist = 0;
|
|
|
|
|
|
if (eend > m_nSamples - lpoint) eend = m_nSamples - lpoint;
|
|
|
|
|
|
// if (objViewInfo->GetisDrawBase()) {
|
|
|
|
|
|
// ifist = 0, eend = nPoint;
|
|
|
|
|
|
// }
|
|
|
|
|
|
int m_Logarithmic = 0;
|
|
|
|
|
|
|
|
|
|
|
|
int iIndex;
|
|
|
|
|
|
for (float dep1 = detp - 10 * m_r; dep1 < edepc + m_MoveDep + 10 * m_r; dep1 += m_r)
|
|
|
|
|
|
{
|
|
|
|
|
|
odd++;
|
|
|
|
|
|
dep = Slf_Int(dep1, curSdep, m_Rlev);
|
|
|
|
|
|
if (dep1 > m_MoveSdep&&dep1 < m_MoveEdep) {
|
|
|
|
|
|
dep -= mOffset;
|
|
|
|
|
|
if (dep < 0) dep = 0;
|
|
|
|
|
|
if (dep*m_Rlev + m_SDep > m_EDep) dep = (m_EDep - m_SDep) / m_Rlev;
|
|
|
|
|
|
}
|
|
|
|
|
|
if (dep1 >= m_EDep || dep1 + m_r < m_SDep)
|
|
|
|
|
|
{
|
|
|
|
|
|
continue;
|
|
|
|
|
|
}
|
|
|
|
|
|
iIndex = Slf_Int(dep1 + m_MoveDep, m_SDep, m_Rlev);
|
|
|
|
|
|
if (iIndex < 0) {
|
|
|
|
|
|
continue;
|
|
|
|
|
|
}
|
|
|
|
|
|
if (iIndex >= 0 && iIndex < m_PointNum&&iIndex < m_vProperty.size())
|
|
|
|
|
|
{
|
|
|
|
|
|
short nv = -9999.0f;
|
|
|
|
|
|
vVdl.vchar = &((char *)m_vProperty.m_vProperty)[iIndex*m_nSamples*waveinfo.CodeLen];
|
|
|
|
|
|
// if (m_vTimeProperty.size()) {
|
|
|
|
|
|
// vTime.vchar = &((char *)m_vTimeProperty.m_vProperty)[iIndex*TimeCurveInfo.TimeSamples*TimeCurveInfo.CodeLen];
|
|
|
|
|
|
// }
|
|
|
|
|
|
// if (m_vGainProperty.size()) {
|
|
|
|
|
|
// vGain.vchar = &((char *)m_vGainProperty.m_vProperty)[iIndex*GainCurveInfo.TimeSamples*GainCurveInfo.CodeLen];
|
|
|
|
|
|
// }
|
|
|
|
|
|
}
|
|
|
|
|
|
else {
|
|
|
|
|
|
continue;
|
|
|
|
|
|
}
|
|
|
|
|
|
y = yy0 + dep * dd;
|
|
|
|
|
|
te00 = (int)((y - yy0) / nRep + 0.5);
|
|
|
|
|
|
if (te00 >= mh) {
|
|
|
|
|
|
te00 = mh - 1;
|
|
|
|
|
|
}
|
|
|
|
|
|
if (te01 == 0) te01 = te00;
|
|
|
|
|
|
flag = 1;
|
|
|
|
|
|
int Num = 0;
|
|
|
|
|
|
Base0 = y;
|
|
|
|
|
|
|
|
|
|
|
|
int i0 = 0;
|
|
|
|
|
|
int pos = 0;
|
|
|
|
|
|
int jpos = 0;
|
|
|
|
|
|
int isVert = 0;// objViewInfo->GetIsVertDraw();
|
|
|
|
|
|
switch (m_pInfo->m_nDrawType)
|
|
|
|
|
|
{
|
|
|
|
|
|
case 6: // 变密度
|
|
|
|
|
|
case 2: // 变密度
|
|
|
|
|
|
case 10: // 电磁探伤
|
|
|
|
|
|
case 13: // 电磁探伤
|
|
|
|
|
|
switch (m_pInfo->m_nFillType)
|
|
|
|
|
|
{
|
|
|
|
|
|
case 0:
|
|
|
|
|
|
flag = 0;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case 1:
|
|
|
|
|
|
flag = 1;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case 2:
|
|
|
|
|
|
flag = -1;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (!m_ArrayNum) {
|
|
|
|
|
|
QRgb rgb = 0;
|
|
|
|
|
|
for (int i = left1; i < right1; i += 1)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (i < 0) continue;
|
|
|
|
|
|
pos = i - left1;
|
|
|
|
|
|
if (left > right || m_pInfo->m_nDrawType == 6) {
|
|
|
|
|
|
pos = aa.width() - pos - 1;
|
|
|
|
|
|
}
|
|
|
|
|
|
if (pos >= aa.width() || pos < 0) continue;
|
|
|
|
|
|
if (waveinfo.RepCode == REPR_CHAR) {
|
|
|
|
|
|
ch = vVdl.vchar[i];
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (waveinfo.RepCode == REPR_UCHAR) {
|
|
|
|
|
|
ch = vVdl.vuchar[i];
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (waveinfo.RepCode == REPR_SHORT) {
|
|
|
|
|
|
ch = vVdl.vshort[i];
|
|
|
|
|
|
if (ch == -32767) {
|
|
|
|
|
|
// if (objViewInfo->Getskipinval()) aa.setPixel(pos, j, qRgba(0, 0, 0, 0));
|
|
|
|
|
|
// else aa.setPixel(pos, j, qRgb(255, 255, 255));
|
|
|
|
|
|
continue;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (waveinfo.RepCode == REPR_USHORT) {
|
|
|
|
|
|
ch = vVdl.vushort[i];
|
|
|
|
|
|
if ((short)ch == -32767) {
|
|
|
|
|
|
// if (objViewInfo->Getskipinval()) aa.setPixel(pos, j, qRgba(0, 0, 0, 0));
|
|
|
|
|
|
// else aa.setPixel(pos, j, qRgb(255, 255, 255));
|
|
|
|
|
|
continue;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (waveinfo.RepCode == REPR_FLOAT) {
|
|
|
|
|
|
ch = vVdl.vfloat[i];
|
|
|
|
|
|
if (ch == -9999.0) {
|
|
|
|
|
|
// if (objViewInfo->Getskipinval()) aa.setPixel(pos, j, qRgba(0, 0, 0, 0));
|
|
|
|
|
|
// else aa.setPixel(pos, j, qRgb(255, 255, 255));
|
|
|
|
|
|
continue;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
else ch = GetData(waveinfo.RepCode, (char *)&vVdl.vchar[i*waveinfo.CodeLen]);
|
|
|
|
|
|
if (/*objViewInfo->GetisRGBA() || */m_pInfo->m_nDrawType == 13) {
|
|
|
|
|
|
if (waveinfo.RepCode == REPR_UINT) {
|
|
|
|
|
|
rgb = vVdl.vulong[i];
|
|
|
|
|
|
}
|
|
|
|
|
|
else rgb = ch;
|
|
|
|
|
|
}
|
|
|
|
|
|
else {
|
|
|
|
|
|
// if (m_vGainProperty.size()) {
|
|
|
|
|
|
// ppos = i / WaveInfo.TimeSamples;
|
|
|
|
|
|
// if (ppos < 0) ppos = 0;
|
|
|
|
|
|
// if (ppos >= GainCurveInfo.TimeSamples) ppos >= GainCurveInfo.TimeSamples - 1;
|
|
|
|
|
|
// vval = GetData(GainCurveInfo.RepCode, (char *)&vGain.vchar[ppos*GainCurveInfo.CodeLen]);
|
|
|
|
|
|
// if (vval == -32767) vval = 0;
|
|
|
|
|
|
// if (vval > 0 && vval < 1000) ch = 10 * ch / powf(1.4142, vval);
|
|
|
|
|
|
// }
|
|
|
|
|
|
if (flag == 0) ch = fabs(ch);
|
|
|
|
|
|
else ch = ch * flag;
|
|
|
|
|
|
if (m_Logarithmic == AXIS_LOGARITHMIC) {
|
|
|
|
|
|
ch = (ch - /*pWave->*/valMin[i]) / (/*pWave->*/valMax[i] - /*pWave->*/valMin[i]) * 100000;
|
|
|
|
|
|
if (ch <= 0) ch = 0;
|
|
|
|
|
|
else ch = log10(ch) - log10(base);
|
|
|
|
|
|
m = (int)(ch*m_pInfo->m_nColorNum / log10(100000.0) + 0.5);
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (m_Logarithmic == 4)
|
|
|
|
|
|
{
|
|
|
|
|
|
ch = ch - m_pInfo->m_bDrawBase;
|
|
|
|
|
|
if (ch < 0) ch = 0;
|
|
|
|
|
|
m = selfcolorrank.size();
|
|
|
|
|
|
for (int j = 1; j < selfcolorrank.size(); j++)
|
|
|
|
|
|
{
|
|
|
|
|
|
float v0 = selfcolorrank[j - 1];
|
|
|
|
|
|
float v1 = selfcolorrank[j];
|
|
|
|
|
|
if (ch >= v0 && ch < v1)
|
|
|
|
|
|
{
|
|
|
|
|
|
m = j - 1;
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
if (m_pInfo->m_nDrawType == 10) {
|
|
|
|
|
|
//平滑接箍
|
|
|
|
|
|
if ((m_pInfo->m_vmax - waveinfo.StartTime) / waveinfo.TimeLevel > i&&i >= (m_pInfo->m_vmin - waveinfo.StartTime) / waveinfo.TimeLevel) {
|
|
|
|
|
|
if (iIndex >= 6 && iIndex + 6 < point) {
|
|
|
|
|
|
if (val && (val[iIndex - 4] || val[iIndex - 3] || val[iIndex - 2] || val[iIndex - 1] || val[iIndex] || val[iIndex + 1] || val[iIndex + 2] || val[iIndex + 3] || val[iIndex + 4])) {
|
|
|
|
|
|
char *p = (char *)m_vProperty.m_vProperty;
|
|
|
|
|
|
int j0 = iIndex - 1;
|
|
|
|
|
|
if (val[iIndex - 4]) j0 = iIndex - 4;
|
|
|
|
|
|
else if (val[iIndex - 3]) j0 = iIndex - 3;
|
|
|
|
|
|
else if (val[iIndex - 2]) j0 = iIndex - 2;
|
|
|
|
|
|
else if (val[iIndex - 1]) j0 = iIndex - 1;
|
|
|
|
|
|
else if (val[iIndex]) j0 = iIndex;
|
|
|
|
|
|
else if (val[iIndex + 1]) j0 = iIndex + 1;
|
|
|
|
|
|
else if (val[iIndex + 2]) j0 = iIndex + 2;
|
|
|
|
|
|
else if (val[iIndex + 3]) j0 = iIndex + 3;
|
|
|
|
|
|
else if (val[iIndex + 4]) j0 = iIndex + 4;
|
|
|
|
|
|
int j2 = j0;
|
|
|
|
|
|
for (j2 = j0; j2 > 0; j2--) {
|
|
|
|
|
|
if (val[j2] < 1) break;
|
|
|
|
|
|
}
|
|
|
|
|
|
int j1 = j0;
|
|
|
|
|
|
for (j1 = j0; j1 < point; j1++) {
|
|
|
|
|
|
if (val[j1] < 1) break;
|
|
|
|
|
|
}
|
|
|
|
|
|
int n = 0;
|
|
|
|
|
|
if (j2 - 4 >= 0) {
|
|
|
|
|
|
ch = GetData(waveinfo.RepCode, &p[(j2 - 4)* waveinfo.SamplePoint*waveinfo.ArrayNum*waveinfo.CodeLen + i * waveinfo.CodeLen]);
|
|
|
|
|
|
n++;
|
|
|
|
|
|
}
|
|
|
|
|
|
if (j1 + 4 < point) {
|
|
|
|
|
|
ch += GetData(waveinfo.RepCode, &p[(j1 + 4)* waveinfo.SamplePoint*waveinfo.ArrayNum*waveinfo.CodeLen + i * waveinfo.CodeLen]);
|
|
|
|
|
|
n++;
|
|
|
|
|
|
}
|
|
|
|
|
|
if (n) ch /= n;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
if (valMax[i] - valMin[i] == 0) m = 2 * basecolor;
|
|
|
|
|
|
else {
|
|
|
|
|
|
ch = (ch - valMin[i]) / (valMax[i] - valMin[i])*(m_pInfo->m_nColorNum - 2 * basecolor);
|
|
|
|
|
|
m = ch * m_pInfo->m_fWaveHei + basecolor;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (m_pInfo->m_midValue) {
|
|
|
|
|
|
ch = (ch - valMin[i]) / (valMax[i] - valMin[i])*m_pInfo->m_midValue;
|
|
|
|
|
|
m = (int)((ch - m_pInfo->m_fWaveBase)*yscale + 0.5);
|
|
|
|
|
|
}
|
|
|
|
|
|
else m = (int)((ch - m_pInfo->m_fWaveBase)*yscale + 0.5);
|
|
|
|
|
|
}
|
|
|
|
|
|
if (m >= m_pInfo->m_nColorNum) m = m_pInfo->m_nColorNum - 1;
|
|
|
|
|
|
else if (m < 0) m = 0;
|
|
|
|
|
|
rgb = m_Color[m].rgb();
|
|
|
|
|
|
}
|
|
|
|
|
|
if (te01 + 1 > te00) {
|
|
|
|
|
|
if (te00 >= 0) {
|
|
|
|
|
|
aa.setPixel(pos, te00, rgb);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
else for (int j = te01 + 1; j <= te00; j++) {
|
|
|
|
|
|
if (j >= 0) {
|
|
|
|
|
|
aa.setPixel(pos, j, rgb);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
else {
|
|
|
|
|
|
QImage aaa = QImage(right1 - left1, m_ArrayNum, QImage::Format::Format_RGB32);
|
|
|
|
|
|
float cc = 0;
|
|
|
|
|
|
int nu0 = 0;
|
|
|
|
|
|
bool ffg = 0;
|
|
|
|
|
|
float m_LeftVal = 0;
|
|
|
|
|
|
float m_RightVal = 0;
|
|
|
|
|
|
for (int j = 0; j < m_ArrayNum; j++)
|
|
|
|
|
|
{
|
|
|
|
|
|
for (int i = left1; i < right1; i += 1)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (i < 0) continue;
|
|
|
|
|
|
pos = i - left1;
|
|
|
|
|
|
if (m_RightVal < m_LeftVal || m_pInfo->m_nDrawType == 6)
|
|
|
|
|
|
{
|
|
|
|
|
|
pos = aaa.width() - pos - 1;
|
|
|
|
|
|
}
|
|
|
|
|
|
if (pos >= aaa.width() || pos < 0) continue;
|
|
|
|
|
|
if (waveinfo.RepCode == REPR_CHAR) {
|
|
|
|
|
|
ch = vVdl.vchar[j*SamplePoint + i];
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (waveinfo.RepCode == REPR_UCHAR) {
|
|
|
|
|
|
ch = vVdl.vuchar[j*SamplePoint + i];
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (waveinfo.RepCode == REPR_SHORT) {
|
|
|
|
|
|
ch = vVdl.vshort[j*SamplePoint + i];
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (waveinfo.RepCode == REPR_USHORT) {
|
|
|
|
|
|
ch = vVdl.vushort[j*SamplePoint + i];
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (waveinfo.RepCode == REPR_FLOAT) {
|
|
|
|
|
|
ch = vVdl.vfloat[j*SamplePoint + i];
|
|
|
|
|
|
}
|
|
|
|
|
|
else ch = GetData(waveinfo.RepCode, (char *)&vVdl.vchar[(j*SamplePoint + i)*waveinfo.CodeLen]);
|
|
|
|
|
|
m = (int)((ch - m_pInfo->m_fWaveBase)*yscale + 0.5);
|
|
|
|
|
|
if (m >= m_pInfo->m_nColorNum) m = m_pInfo->m_nColorNum - 1;
|
|
|
|
|
|
else if (m < 0) m = 0;
|
|
|
|
|
|
jpos = isVert ? m_ArrayNum - j - 1 : j;
|
|
|
|
|
|
if (jpos < aaa.height()) {
|
|
|
|
|
|
if (m_RightVal < m_LeftVal) pos = aaa.width() - pos - 1;
|
|
|
|
|
|
aaa.setPixel(pos, jpos, m_Color[m].rgb());
|
|
|
|
|
|
}
|
|
|
|
|
|
if (!nu0)cc = ch;
|
|
|
|
|
|
else if (!ffg&&cc != ch) ffg = true;
|
|
|
|
|
|
nu0++;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
bool m_isDot = false;
|
|
|
|
|
|
if (!ffg&&/*objViewInfo->GetisDot()*/m_isDot) continue;
|
|
|
|
|
|
float v11 = MH;
|
|
|
|
|
|
if (dep1 + MH > edepc) {
|
|
|
|
|
|
v11 = dep1 + MH - edepc;
|
|
|
|
|
|
v11 = MH - v11;
|
|
|
|
|
|
}
|
|
|
|
|
|
QRectF wrt1(wrt.left(), y, wrt.width(), v11 / m_Rlev * dd);
|
|
|
|
|
|
int line = 0;
|
|
|
|
|
|
bool m_IsExchange = false; //objViewInfo->m_IsExchange
|
|
|
|
|
|
if (m_IsExchange) {
|
|
|
|
|
|
aaa = Transpose(&aaa);
|
|
|
|
|
|
aaa = TTranspose(&aaa);
|
|
|
|
|
|
int w = aaa.width();
|
|
|
|
|
|
int h1 = aaa.height();
|
|
|
|
|
|
for (int i = 0; i < w; i++) aaa.setPixel(i, h1 - 1, qRgb(255, 255, 255));
|
|
|
|
|
|
line = m_ArrayNum / m_r * v11;
|
|
|
|
|
|
if (line > h1) line = h1;
|
|
|
|
|
|
int line0 = 0;
|
|
|
|
|
|
// if(xban) {
|
|
|
|
|
|
// line0=xban*m_ArrayNum/m_r;
|
|
|
|
|
|
// dep1=vpos;
|
|
|
|
|
|
// }
|
|
|
|
|
|
pdc->drawImage(wrt1, aaa, QRectF(0, line0, w, line - line0));
|
|
|
|
|
|
}
|
|
|
|
|
|
else {
|
|
|
|
|
|
int w = aaa.width();
|
|
|
|
|
|
int h1 = aaa.height();
|
|
|
|
|
|
for (int i = 0; i < w; i++) aaa.setPixel(i, h1 - 1, qRgb(255, 255, 255));
|
|
|
|
|
|
int line0 = 0;
|
|
|
|
|
|
if (dep1 < sdepc) {
|
|
|
|
|
|
//line0=(sdepc-dep1)*m_ArrayNum/m_r;
|
|
|
|
|
|
h1 = (m_r - (sdepc - dep1)) / m_Rlev * dd;
|
|
|
|
|
|
}
|
|
|
|
|
|
line = m_ArrayNum / m_r * v11;
|
|
|
|
|
|
if (line > m_ArrayNum) line = m_ArrayNum;
|
|
|
|
|
|
|
|
|
|
|
|
pdc->drawImage(wrt1, aaa, QRectF(0, line0, right1 - left1, line - line0));
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case 0:// wf
|
|
|
|
|
|
case 1://填充
|
|
|
|
|
|
{
|
|
|
|
|
|
vals.resize(nPoint);
|
|
|
|
|
|
if (/*objViewInfo->m_Logarithmic==AXIS_LOGARITHMIC||*/
|
|
|
|
|
|
m_pInfo->m_fMaxAmp == -99999) {
|
|
|
|
|
|
vmin = waveinfo.MinValue;
|
|
|
|
|
|
vmax = waveinfo.MaxValue;
|
|
|
|
|
|
}
|
|
|
|
|
|
for (int i = 0; i < nPoint; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (i + lpoint < 0) ch = 0;
|
|
|
|
|
|
else if (i + lpoint < m_nSamples) {
|
|
|
|
|
|
if (waveinfo.RepCode == REPR_CHAR) {
|
|
|
|
|
|
ch = vVdl.vchar[i + lpoint];
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (waveinfo.RepCode == REPR_UCHAR) {
|
|
|
|
|
|
ch = vVdl.vuchar[i + lpoint];
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (waveinfo.RepCode == REPR_SHORT) {
|
|
|
|
|
|
ch = vVdl.vshort[i + lpoint];
|
|
|
|
|
|
if (ch == -32767) ch = 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (waveinfo.RepCode == REPR_USHORT) {
|
|
|
|
|
|
ch = vVdl.vushort[i + lpoint];
|
|
|
|
|
|
if ((short)ch == -32767) ch = 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (waveinfo.RepCode == REPR_FLOAT) {
|
|
|
|
|
|
ch = vVdl.vfloat[i + lpoint];
|
|
|
|
|
|
}
|
|
|
|
|
|
else ch = GetData(waveinfo.RepCode, (char *)&vVdl.vchar[(i + lpoint)*waveinfo.CodeLen]);
|
|
|
|
|
|
if (ch == -9999.0 || ch == -99999.0 || ch == -999.25) ch = 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
else ch = 0;
|
|
|
|
|
|
vals[i] = ch;
|
|
|
|
|
|
if (m_Logarithmic == AXIS_LOGARITHMIC ||
|
|
|
|
|
|
m_pInfo->m_fMaxAmp == -99999) {
|
|
|
|
|
|
if (vmin > ch) vmin = ch;
|
|
|
|
|
|
if (vmax < ch) vmax = ch;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
int ffl = 0;
|
|
|
|
|
|
float cc = 0;
|
|
|
|
|
|
for (int i = ifist; i < eend; i++) {
|
|
|
|
|
|
if (left <= right) temp = rt.left() + (i)*scale;
|
|
|
|
|
|
else temp = rt.right() - (i)*scale;
|
|
|
|
|
|
points[i].setX(temp);
|
|
|
|
|
|
if (m_Logarithmic == AXIS_LOGARITHMIC) {
|
|
|
|
|
|
ch = (vals[i] - vmin) / (vmax - vmin)*vmax;
|
|
|
|
|
|
if (ch <= 0) ch = 1;
|
|
|
|
|
|
ch = log10(ch);//-log10(mWaveMes.m_Base);
|
|
|
|
|
|
points[i].setY((log10(vmax) - ch)*yscale + y);
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
if (m_pInfo->m_fMaxAmp == -99999)
|
|
|
|
|
|
ch = (vals[i] - vmin) / (vmax - vmin)*vmax;
|
|
|
|
|
|
else ch = (vals[i] - m_pInfo->m_fWaveBase);
|
|
|
|
|
|
points[i].setY(-ch * yscale + y);
|
|
|
|
|
|
}
|
|
|
|
|
|
if (points[i].y() < yy0) points[i].setY(yy0);
|
|
|
|
|
|
if (points[i].y() > yy1) points[i].setY(yy1);
|
|
|
|
|
|
if (!i) cc = ch;
|
|
|
|
|
|
else if (!ffl&&cc != ch) ffl = 1;
|
|
|
|
|
|
}
|
|
|
|
|
|
if (!ffl) continue;
|
|
|
|
|
|
if (m_pInfo->m_nDrawType == 0) {
|
|
|
|
|
|
bool isOddColor = false; //objViewInfo->GetisOddColor()
|
|
|
|
|
|
bool isDrawBase0 = false; //objViewInfo->GetisDrawBase0()
|
|
|
|
|
|
bool isDrawDepth = false; //objViewInfo->GetisDrawDepth()
|
|
|
|
|
|
if (isOddColor) {
|
|
|
|
|
|
if (odd % 2)
|
|
|
|
|
|
pdc->setPen(m_pInfo->m_WaveColor);
|
|
|
|
|
|
else pdc->setPen(QColor(255, 0, 0));
|
|
|
|
|
|
}
|
|
|
|
|
|
pdc->drawPolyline(&points[ifist], eend - ifist);
|
|
|
|
|
|
if (isDrawBase0) {
|
|
|
|
|
|
pdc->drawLine(QPointF(mrt.x(), y), QPointF(mrt.right(), y));
|
|
|
|
|
|
}
|
|
|
|
|
|
if (isDrawDepth)
|
|
|
|
|
|
{
|
|
|
|
|
|
pdc->drawText(mrt.x(), y, QString::number(dep1));
|
|
|
|
|
|
}
|
|
|
|
|
|
continue;
|
|
|
|
|
|
}
|
|
|
|
|
|
switch (m_pInfo->m_nFillType) {
|
|
|
|
|
|
case 2: // fill down :波列,下部填充
|
|
|
|
|
|
flag = -1;
|
|
|
|
|
|
case 1: // fill up :波列,上部填充
|
|
|
|
|
|
{
|
|
|
|
|
|
nFillPoint = 0;
|
|
|
|
|
|
iStartPoint = 0;
|
|
|
|
|
|
for (i = ifist; i < eend; i++) {
|
|
|
|
|
|
if ((flag == 1 && points[i].y() < y) || (flag == -1 && points[i].y() > Base0))
|
|
|
|
|
|
{
|
|
|
|
|
|
if (nFillPoint == 0) {
|
|
|
|
|
|
iStartPoint = i;
|
|
|
|
|
|
int i0 = 0;
|
|
|
|
|
|
if (i&&flag == 1 && points[i - 1].y() >= Base0) {
|
|
|
|
|
|
float x = points[i - 1].x() + (points[i].x() - points[i - 1].x()) / (points[i].y() - points[i - 1].y())*(y - points[i - 1].y());
|
|
|
|
|
|
cPoints[0].setX(x);
|
|
|
|
|
|
i0 = 1;
|
|
|
|
|
|
}
|
|
|
|
|
|
if (i&&flag == -1 && points[i - 1].y() <= Base0) {
|
|
|
|
|
|
float x = points[i - 1].x() + (points[i].x() - points[i - 1].x()) / (points[i].y() - points[i - 1].y())*(y - points[i - 1].y());
|
|
|
|
|
|
cPoints[0].setX(x);
|
|
|
|
|
|
i0 = 1;
|
|
|
|
|
|
}
|
|
|
|
|
|
if (!i0) {
|
|
|
|
|
|
cPoints[0].setX(points[i].x());
|
|
|
|
|
|
}
|
|
|
|
|
|
cPoints[0].setY(Base0);
|
|
|
|
|
|
}
|
|
|
|
|
|
nFillPoint++;
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
if (nFillPoint)///两端已被封闭
|
|
|
|
|
|
{
|
|
|
|
|
|
if (nFillPoint == 1) cPoints[1] = points[iStartPoint];
|
|
|
|
|
|
else for (m = 1; m < nFillPoint; m++)
|
|
|
|
|
|
{
|
|
|
|
|
|
cPoints[m] = points[m + iStartPoint - 1];
|
|
|
|
|
|
}
|
|
|
|
|
|
int i0 = 0;
|
|
|
|
|
|
if (i&&flag == 1 && points[i - 1].y() <= Base0) {
|
|
|
|
|
|
cPoints[nFillPoint] = points[i - 1];
|
|
|
|
|
|
nFillPoint++;
|
|
|
|
|
|
float x = points[i - 1].x() + (points[i].x() - points[i - 1].x()) / (points[i].y() - points[i - 1].y())*(y - points[i - 1].y());
|
|
|
|
|
|
cPoints[nFillPoint].setX(x);
|
|
|
|
|
|
i0 = 1;
|
|
|
|
|
|
}
|
|
|
|
|
|
if (i&&flag == -1 && points[i - 1].y() >= Base0) {
|
|
|
|
|
|
cPoints[nFillPoint] = points[i - 1];
|
|
|
|
|
|
nFillPoint++;
|
|
|
|
|
|
float x = points[i - 1].x() + (points[i].x() - points[i - 1].x()) / (points[i].y() - points[i - 1].y())*(y - points[i - 1].y());
|
|
|
|
|
|
cPoints[nFillPoint].setX(x);
|
|
|
|
|
|
i0 = 1;
|
|
|
|
|
|
}
|
|
|
|
|
|
if (!i0) {
|
|
|
|
|
|
cPoints[nFillPoint].setX(points[nPoint - 1].x());
|
|
|
|
|
|
}
|
|
|
|
|
|
cPoints[nFillPoint].setY(Base0);
|
|
|
|
|
|
cPoints[nFillPoint + 1] = cPoints[0];
|
|
|
|
|
|
QPolygonF cRgn;
|
|
|
|
|
|
for (int j = 0; j < nFillPoint + 2; j++) {
|
|
|
|
|
|
cRgn.push_back(cPoints[j]);
|
|
|
|
|
|
}
|
|
|
|
|
|
QPainterPath path;
|
|
|
|
|
|
path.addPolygon(cRgn);
|
|
|
|
|
|
//paths.append(path);
|
|
|
|
|
|
pdc->fillPath(path, cBrush);
|
|
|
|
|
|
nFillPoint = 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
////////////////////
|
|
|
|
|
|
//数据已结束,但尾没被封住
|
|
|
|
|
|
if (nFillPoint > 1) {
|
|
|
|
|
|
for (m = 1; m < nFillPoint; m++)
|
|
|
|
|
|
{
|
|
|
|
|
|
cPoints[m] = points[m + iStartPoint];
|
|
|
|
|
|
}
|
|
|
|
|
|
cPoints[nFillPoint].setY(Base0);
|
|
|
|
|
|
cPoints[nFillPoint].setX(cPoints[nFillPoint - 1].x());
|
|
|
|
|
|
cPoints[nFillPoint + 1] = cPoints[0];
|
|
|
|
|
|
QPolygonF cRgn;
|
|
|
|
|
|
for (int j = 0; j < nFillPoint + 2; j++) {
|
|
|
|
|
|
cRgn.push_back(cPoints[j]);
|
|
|
|
|
|
}
|
|
|
|
|
|
QPainterPath path;
|
|
|
|
|
|
path.addPolygon(cRgn);
|
|
|
|
|
|
pdc->fillPath(path, cBrush);
|
|
|
|
|
|
}
|
|
|
|
|
|
pdc->drawPolyline(&points[ifist], eend - ifist);//nPoint);
|
|
|
|
|
|
bool isDrawBase0 = false; //objViewInfo->GetisDrawBase0()
|
|
|
|
|
|
if (isDrawBase0) {
|
|
|
|
|
|
pdc->drawLine(QPointF(mrt.x(), y), QPointF(mrt.right(), y));
|
|
|
|
|
|
}
|
|
|
|
|
|
bool isDrawDepth = false; //objViewInfo->GetisDrawDepth()
|
|
|
|
|
|
if (isDrawDepth)
|
|
|
|
|
|
{
|
|
|
|
|
|
pdc->drawText(mrt.x(), y, QString::number(dep1));
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
te01 = te00;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (Mode == 3) {
|
|
|
|
|
|
delete[]cPoints;
|
|
|
|
|
|
delete[]points;
|
|
|
|
|
|
//m_Value = 0;
|
|
|
|
|
|
// pdc->setClipRegion(qRgn);
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (m_pInfo->m_nDrawType == 2 ||
|
|
|
|
|
|
m_pInfo->m_nDrawType == 6 ||
|
|
|
|
|
|
m_pInfo->m_nDrawType == 10 ||
|
|
|
|
|
|
m_pInfo->m_nDrawType == 13
|
|
|
|
|
|
) {
|
|
|
|
|
|
pdc->setRenderHint(QPainter::SmoothPixmapTransform, true/*m_AutoSmooth*/);
|
|
|
|
|
|
if (m_pInfo->m_nDrawType == 10) {
|
|
|
|
|
|
QRectF srt1 = wrt, srt2 = wrt,
|
|
|
|
|
|
srt12(0.0f, srt.y(), m_pInfo->m_EndRange - m_pInfo->m_FirstRange, srt.height()),
|
|
|
|
|
|
srt22((m_pInfo->m_vmin - waveinfo.StartTime) / waveinfo.TimeLevel - left1, srt.y(), (m_pInfo->m_vmax - m_pInfo->m_vmin) / waveinfo.TimeLevel, srt.height());
|
|
|
|
|
|
srt1.setWidth(wrt.width() / 2.0);
|
|
|
|
|
|
srt2.setLeft(srt1.right());
|
|
|
|
|
|
pdc->drawImage(srt1, aa, srt12);
|
|
|
|
|
|
pdc->drawImage(srt2, aa, srt22);
|
|
|
|
|
|
}
|
|
|
|
|
|
else {
|
|
|
|
|
|
int w = aa.width();
|
|
|
|
|
|
int h = aa.height();
|
|
|
|
|
|
pdc->drawImage(wrt, aa, srt);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
delete[]cPoints;
|
|
|
|
|
|
delete[]points;
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
double FormWave::GetData(int i, int j, char *buffer)
|
|
|
|
|
|
{
|
|
|
|
|
|
float yy = -9999;
|
|
|
|
|
|
if (m_vProperty.size() > i) {
|
|
|
|
|
|
int pos = (int)(i*waveinfo.TimeSamples + j);
|
|
|
|
|
|
yy = GetData(waveinfo.RepCode, (char *)&((char *)m_vProperty.m_vProperty)[pos*waveinfo.CodeLen], waveinfo.CodeLen);
|
|
|
|
|
|
}
|
|
|
|
|
|
return yy;
|
|
|
|
|
|
}
|
|
|
|
|
|
double FormWave::GetData(int repCode, char *buffer, int repLen)
|
|
|
|
|
|
{
|
|
|
|
|
|
double yy = -99999;
|
|
|
|
|
|
if (!buffer)
|
|
|
|
|
|
{
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
switch (repCode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case REPR_INT: //0
|
|
|
|
|
|
yy = (double)(*((int*)buffer));
|
|
|
|
|
|
break;
|
|
|
|
|
|
case REPR_SHORT: //1
|
|
|
|
|
|
yy = (double)(*((short *)buffer));
|
|
|
|
|
|
break;
|
|
|
|
|
|
case REPR_LONG://2
|
|
|
|
|
|
yy = (double)(*((long *)buffer));
|
|
|
|
|
|
break;
|
|
|
|
|
|
case REPR_FLOAT://3
|
|
|
|
|
|
yy = (double)(*((float *)buffer));
|
|
|
|
|
|
break;
|
|
|
|
|
|
case REPR_DOUBLE://4
|
|
|
|
|
|
yy = (double)(*((double *)buffer));
|
|
|
|
|
|
break;
|
|
|
|
|
|
case REPR_CHAR://5
|
|
|
|
|
|
yy = (double)(*((char *)buffer));
|
|
|
|
|
|
break;
|
|
|
|
|
|
case REPR_UCHAR://6
|
|
|
|
|
|
yy = (double)(*((unsigned char *)buffer));
|
|
|
|
|
|
break;
|
|
|
|
|
|
case REPR_USHORT://7
|
|
|
|
|
|
yy = (double)(*((unsigned short *)buffer));
|
|
|
|
|
|
break;
|
|
|
|
|
|
case REPR_UINT://8
|
|
|
|
|
|
yy = (double)(*((unsigned int *)buffer));
|
|
|
|
|
|
break;
|
|
|
|
|
|
case REPR_ULONG://9
|
|
|
|
|
|
yy = (double)(*((unsigned long *)buffer));
|
|
|
|
|
|
break;
|
|
|
|
|
|
case REPR_STRING://10
|
|
|
|
|
|
if (repLen >= 200)
|
|
|
|
|
|
repLen = 199;
|
|
|
|
|
|
if (repLen > 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
memmove(m_strValue, buffer, repLen);
|
|
|
|
|
|
m_strValue[repLen] = 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
m_strValue[0] = 0;
|
|
|
|
|
|
yy = -99999;
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
return yy;
|
|
|
|
|
|
}
|
|
|
|
|
|
void FormWave::SetData(int repCode, char *buffer, double yy)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (!buffer)
|
|
|
|
|
|
{
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
switch (repCode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case REPR_INT: //0
|
|
|
|
|
|
(*((int*)buffer)) = (int)yy;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case REPR_SHORT: //1
|
|
|
|
|
|
(*((short *)buffer)) = (short)yy;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case REPR_LONG://2
|
|
|
|
|
|
(*((long *)buffer)) = (long)yy;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case REPR_FLOAT://3
|
|
|
|
|
|
(*((float *)buffer)) = yy;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case REPR_DOUBLE://4
|
|
|
|
|
|
(*((double *)buffer)) = (double)yy;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case REPR_CHAR://5
|
|
|
|
|
|
(*((char *)buffer)) = (char)yy;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case REPR_UCHAR://6
|
|
|
|
|
|
(*((unsigned char *)buffer)) = (unsigned char)yy;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case REPR_USHORT://7
|
|
|
|
|
|
(*((unsigned short *)buffer)) = (unsigned short)yy;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case REPR_UINT://8
|
|
|
|
|
|
(*((unsigned int *)buffer)) = (unsigned int)yy;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case REPR_ULONG://9
|
|
|
|
|
|
(*((unsigned long *)buffer)) = (unsigned long)yy;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case REPR_STRING://10
|
|
|
|
|
|
// *yy=-99999;
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|