#include #include #include #include #include "MemRdWt.h" #include "DrawFac.h" #include #include "geometryutils.h" CDrawFac::CDrawFac(QMyCustomPlot *myCustomPlot, QString strSlfName, QString csCurve) { m_myCustomPlot = myCustomPlot; //隐藏刻度 myCustomPlot->xAxis->setTicks(false); myCustomPlot->yAxis->setTicks(false); myCustomPlot->xAxis2->setTicks(false); myCustomPlot->yAxis2->setTicks(false); //画2条竖线 int iMyWidth = myCustomPlot->axisRect(0)->width(); QCPItemStraightLine *qcpItemLine = new QCPItemStraightLine(myCustomPlot); qcpItemLine->point1->setCoords(-1, iMyWidth/2);//位置 qcpItemLine->point2->setCoords(-2, iMyWidth/2);//位置 //qcpItemLine->setPen(pPenStraightLine); QCPItemStraightLine *qcpItemLine2 = new QCPItemStraightLine(myCustomPlot); qcpItemLine2->point1->setCoords(-1, 3*iMyWidth/4);//位置 qcpItemLine2->point2->setCoords(-2, 3*iMyWidth/4);//位置 ReadFracDef(); ReadData(strSlfName, csCurve); DrawFac(1);//相 DrawFac(2);//亚相 } CDrawFac::~CDrawFac(void) { m_FracDef.clear(); m_ObjList.clear(); } void CDrawFac::ReadFracDef() { m_FracDef.clear(); QString fracFilePath = GetConfPath() + "GEoFac.ini"; // FAC_DEF fd; char str[512],fac[512],phase[64],mFac[64]; int r,g,b,id; FILE *fp; QString qs; fp = fopen(fracFilePath.toStdString().c_str(), "r"); if ( fp != nullptr ) { fgets(str,256,fp); // 跳过第一行 while (!feof(fp)) { fgets(str,256,fp); qs = str; qs.trimmed(); if (qs.length() < 8) break ; //代码 微相 亚相 相 sscanf(str,"%d %s %s %s",&fd.iCode,mFac,phase,fac); fd.mFac = mFac; fd.Fac = fac; fd.Phase = phase; m_FracDef.append(fd); if ( feof(fp)) break; } fclose(fp); } else { sprintf(fac,"打开沉积相参数配置文件错误:%s!",str); QMessageBox::information(nullptr, "读取文件失败", fac); } } void CDrawFac::ReadData(QString strSlfName, QString csCurve) { if(strSlfName.isEmpty()) return; //清空 m_ObjList.clear(); QString cs; int nLineWidth=2; int nField; QColor crColor(255,0,0); FAC_TABLE frac; CMemRdWt mrw; char strFracTable[256]; int i,j,iIndex,nCount,iType=1; if (mrw.Open(strSlfName.toStdString().c_str()) ) // 打开井文件 { iIndex=mrw.OpenTable(csCurve.toStdString().c_str()); if(iIndex>=0) { nField=mrw.GetTableFieldCount(iIndex); nCount=mrw.GetTableRecordCount(iIndex); cs =""; if ( nField != 7 ) nCount = 0; for(i=0;iaddMFacToPlot(-frac.edep, -frac.sdep, QString::fromLocal8Bit(frac.mFac)); } mrw.CloseTable(iIndex); } mrw.Close(); //关闭井文件 } } void CDrawFac::DrawFac(int iType) { int j; float dep1,dep2; float top,bottom; QString str1,str2; QColor crColor(0,0,0); QPen qPen(crColor, 1, Qt::SolidLine); if ( m_ObjList.count()<2 ) return ; //绘制相、亚相 FAC_TABLE pObj; pObj =m_ObjList[0]; if (iType==1) str1 = QString::fromLocal8Bit(pObj.Fac); else str1 = QString::fromLocal8Bit(pObj.Phase); str1.trimmed(); top = pObj.sdep; for (j=1;jaddFacToPlot(-bottom, -top, str1); } else { //亚相 m_myCustomPlot->addPhaseToPlot(-bottom, -top, str1); } top = pObj.sdep; str1=str2; } } } //void CDrawFac::DrawFrac(QPainter* pDC,QRectF mrt) //{ // QRectF rt; // float flDepthScale = m_DepthScale*m_nVertRatio; // float sdepc,edepc,sdep,edep; // float temp,temp2; // CFracObj *pObj; // QString cs; // int i,j,n,nCol=2; // QColor crColor(0,0,0); // QPen qPen(crColor, 1, Qt::SolidLine); // rt=mrt; // flDepthScale = m_DepthScale*m_nVertRatio; // rt = mrt; // // 计算显示深度 // GetDepth(pDC,mrt,rt,sdep,edep,sdepc,edepc); // if ( edep > m_PlotEdep ) edep = m_PlotEdep; // if ( sdep < m_PlotSdep ) sdep = m_PlotSdep; // if ( sdep > m_PlotEdep ) return ; // if ( edep < m_PlotSdep ) return ; // if ( edep > m_PlotEdep ) edep = m_PlotEdep; // pDC->setBrush(Qt::NoBrush); // pDC->setFont(m_LabelFont); // if ( m_bDrawFac) // nCol++; // if ( m_bDrawPhase) // nCol++; // n = m_FracDef.count(); // pDC->setPen(qPen); // //绘制微相 // for (j=0;jm_Frac.edep m_Frac.sdep > edep) // continue; // rt= pObj->m_Rect; // temp = mrt.left()+2.*mrt.width()/nCol; // rt.setRight(temp); // if (m_bSymbol) //绘制微相符号 // pObj->Draw(pDC,rt,m_iMode); // if ( m_bDrawMFac ) // { // cs = pObj->m_Frac.mFac; // pDC->drawText(rt,Qt::AlignCenter| Qt::AlignVCenter,cs); // } // pDC->drawLine(QPoint(mrt.left(),rt.top()),QPoint(temp,rt.top())); // pDC->drawLine(QPoint(mrt.left(),rt.bottom()),QPoint(temp,rt.bottom())); // } // if ( m_bDrawFac && m_bDrawPhase) // { // temp = mrt.left()+2.*mrt.width()/nCol; // temp2 = mrt.left()+3.*mrt.width()/nCol; // DrawFac(pDC,mrt,2,temp,temp2); // DrawFac(pDC,mrt,1,temp2,mrt.right()); // pDC->drawLine(QPoint(temp,mrt.top()),QPoint(temp,mrt.bottom())); // pDC->drawLine(QPoint(temp2,mrt.top()),QPoint(temp2,mrt.bottom())); // } // else // { // if ( m_bDrawFac || m_bDrawPhase) // { // temp = mrt.left()+2.*mrt.width()/nCol; // if ( m_bDrawFac ) // DrawFac(pDC,mrt,1,temp,mrt.right()); // else // DrawFac(pDC,mrt,2,temp,mrt.right()); // pDC->drawLine(QPoint(temp,mrt.top()),QPoint(temp,mrt.bottom())); // } // } // // 绘制边框 // if ( m_selection.count() > 0 ) // { // CFracObj *pObj = m_selection[0]; // if (pObj->m_bSelected !=0 ) // { // CalQRectF(pObj,mrt,sdep,flDepthScale); // pObj->DrawTracker(pDC,selected,1); // } // } //}