#pragma warning( push ,0) #include // #include // #include #include #include #include #include #include "QPainter" // #include "QtWindowWellSection.h" // #include "HeadObj.h" //#include "geometryutils.h" #include "DrawBase.h" // #include "WellSectionConst.h" // #include "VecSceneManager.h" // #include "QtWellTrackNode.h" // #include "ConsoleOutputWidget.h" // #include "ObjProject.h" #pragma warning( pop ) BEGIN_OSGGRAPHICS_NAMESPACE; CDrawBase::CDrawBase()/*:CQtWellLogTrackNode() */ { // hHeadObj = new HeadObj(this,GL_LINES); // m_pWave = new ClientItem(this); m_Value=0; m_SDep=0; m_EDep=0; m_Rlev=0.125; iIndex=-1; nHeight=0; nWidth=0; m_PlotSdep=0; m_PlotEdep=0; // m_MoveDep=0; m_PointNum=0; LITH_WIDTH=32; LITH_HEIGHT=16; // m_pLeftText = new CItemText(); // m_pRightText = new CItemText(); // m_pCurveNameText=new CItemText(); // m_pUnitText=new CItemText(); m_pWellLog=NULL; } CDrawBase::~CDrawBase() { if(m_Value!=NULL) delete []m_Value; // if(hHeadObj&&(long long)hHeadObj->pFF>0x00ffff&&hHeadObj->pFF!=(CDrawBase*)0xfeeefeeefeeefeee&&hHeadObj->pFF!=(CDrawBase*)0xdddddddddddddddd) { // if(m_pLeftText){ // m_pLeftText->setParentItem(NULL); // delete m_pLeftText; // m_pLeftText=NULL; // } // if(m_pRightText){ // m_pRightText->setParentItem(NULL); // delete m_pRightText; // m_pRightText=NULL; // } // if(m_pCurveNameText){ // m_pCurveNameText->setParentItem(NULL); // delete m_pCurveNameText; // m_pCurveNameText=NULL; // } // if(m_pUnitText) { // m_pUnitText->setParentItem(NULL); // delete m_pUnitText; // m_pUnitText=NULL; // } // m_pWave->pFF=NULL; // hHeadObj->setParentItem(NULL); // delete hHeadObj; // hHeadObj=NULL; // } // if(m_pWave&&m_pWave->pFF&&m_pWave->pFF!=(CDrawBase*)0xfeeefeeefeeefeee&&m_pWave->pFF!=(CDrawBase*)0xdddddddddddddddd&&m_pWave->pFF!=(CDrawBase*)0xabababababababab) { // m_pWave->pFF=NULL; // m_pWave->setParentItem(NULL); // delete m_pWave; // m_pWave=NULL; // } } double CDrawBase::getYOSGGlobalFromPixel(double y) { // if(!m_pSceneManager) return 0; // CObjWellLogTrack *pLogTrack = m_pWellSceneManager->GetWellSectionGeomtry().GetLogTrack( m_pWellLog); // if( pLogTrack ) // { // CObjWellTrack*m_pWellTrack = pLogTrack->GetWellTrack(); // if(!m_pWellTrack) return 0; // CQtWindowWellSection *pWin=dynamic_cast(m_pSceneManager->GetVecWindow()); // if(pWin){ // return pWin->getYOSGGlobalFromPixel(m_pWellTrack,y); // } // osg::Vec3d vecGeoNormal; // m_pSceneManager->GetCoordinate()->ConvertCoordDouble( m_pWellTrack->GetID(),eCoord_OSGPixel,osg::Vec3d(0,y,0),eCoord_OSGGlobal,vecGeoNormal ); // return vecGeoNormal[1]; // } return 0; } // osg::Vec3d CDrawBase::OSGPixleToOSGLocal(osg::Vec3d vOSGPixel ) // { // osg::Vec3d vecOSGLocal; // m_pQtSceneManager->GetCoordinate()->ConvertCoordDouble(NULL,eCoord_OSGPixel, vOSGPixel, // eCoord_OSGLocal,vecOSGLocal ); // return vecOSGLocal; // } double CDrawBase::getYGeoNormalFromPixel(double y) { // if(!m_pSceneManager) return 0; // CObjWellLogTrack *pLogTrack = m_pWellSceneManager->GetWellSectionGeomtry().GetLogTrack( m_pWellLog); // if( pLogTrack ) // { // CObjWellTrack*m_pWellTrack = pLogTrack->GetWellTrack(); // if(!m_pWellTrack) return 0; // CQtWindowWellSection *pWin=dynamic_cast(m_pSceneManager->GetVecWindow()); // if(pWin){ // return pWin->getYGeoNormalFromPixel(m_pWellTrack,y); // } // osg::Vec3d vecGeoNormal; // m_pSceneManager->GetCoordinate()->ConvertCoordDouble( m_pWellTrack->GetID(),eCoord_OSGPixel,osg::Vec3d(0,y,0),eCoord_GEO,vecGeoNormal ); // return vecGeoNormal[1]; // } return 0; } double CDrawBase::getYFromOSGPixel(double y) { return 0; // CQtWellTrackNode *pWellNode = GetWellTrackNode(); // if(!pWellNode) return 0; // if(m_pSceneManager->IsWellSectonHorizonLayout()) // { // return pWellNode->ConvertX(eCoord_OSGPixel,y,eCoord_GEO); // } // else { // return pWellNode->ConvertY(eCoord_OSGPixel,y,eCoord_GEO); // } // return 0; } double CDrawBase::getXFromOSGPixel(double x,bool IsWF,bool CalType) { return 0; // CQtWellTrackNode *pWellNode = GetWellTrackNode(); // if(!pWellNode) return 0; // float x0=0; // CSheet& sheet = GetWellTrackNode()->GetWellSheet(); // if(m_pSceneManager->IsWellSectonHorizonLayout()) { // osg::Vec3d vecSheet = sheet.VecToSheetCoord( osg::Vec3d(1,x,1),eCoord_OSGPixel,this->GetID() ); // x0=vecSheet[0]; // } // else { // osg::Vec3d vecSheet = sheet.VecToSheetCoord( osg::Vec3d(x,1,1),eCoord_OSGPixel,this->GetID() ); // x0=vecSheet[0]; // } // const sTrack& sTrack = m_pWellSceneManager->GetWellSectionGeomtry().GetLogTrackInfo(m_pWellLog); // CObjWellLogTrack *pLogTrack = m_pWellSceneManager->GetWellSectionGeomtry().GetLogTrack( m_pWellLog ); // int nColumeIndex = sTrack.nBeginColumIndex; // if( nColumeIndex<0 ) // { // return 0; // } // QList mchilds; // pLogTrack->GetChildren(mchilds); // CellRange cellRange = sTrack.GetCellRange(); // cellRange.nEndRow = cellRange.nBeginRow + mchilds.indexOf( m_pWellLog ) + 1 ; // cellRange.nBeginRow = cellRange.nEndRow; // int nRowNumber = pWellNode->GetWellSheet().GetRowNumber(); // QRectF rcF = pWellNode->GetWellSheet().GetCellRect( CellRange(nRowNumber-1,nRowNumber-1, // sTrack.nBeginColumIndex,sTrack.nEndColumIndex)); // if(rcF.width()==0) return 0; // float val=0; // float lsc=0,rsc=0; // if ( CalType !=AXIS_LINEAR ) { // if(IsWF) { // if(mWaveMes.m_Right-mWaveMes.m_Left>0) { // rsc=log10f(mWaveMes.m_Left); // lsc=log10f(mWaveMes.m_Right); // } // else { // lsc=log10f(mWaveMes.m_Left); // rsc=log10f(mWaveMes.m_Right); // } // } // else { // if(m_RightVal-m_LeftVal>0) { // rsc=log10f(m_LeftVal); // lsc=log10f(m_RightVal); // } // else { // lsc=log10f(m_LeftVal); // rsc=log10f(m_RightVal); // } // } // } // else { // if(IsWF) { // if(mWaveMes.m_Right-mWaveMes.m_Left>0) { // rsc=(mWaveMes.m_Left); // lsc=(mWaveMes.m_Right); // } // else { // lsc=(mWaveMes.m_Right); // rsc=(mWaveMes.m_Left); // } // } // else { // if(m_RightVal-m_LeftVal>0) { // rsc=(m_LeftVal); // lsc=(m_RightVal); // } // else { // lsc=(m_RightVal); // rsc=(m_LeftVal); // } // } // } // val=(rcF.width()-(x0-rcF.left()))*(rsc-lsc)/rcF.width()+lsc; // if ( CalType !=AXIS_LINEAR ) { // val=powf(10.0f,val); // } // return val; } double CDrawBase::getYGeoFromOSGGlobal(double yOSGGlobal) { return 0; // if(!m_pSceneManager) return 0; // CObjWellLogTrack *pLogTrack = m_pWellSceneManager->GetWellSectionGeomtry().GetLogTrack( m_pWellLog); // if( pLogTrack ) // { // CObjWellTrack*m_pWellTrack = pLogTrack->GetWellTrack(); // if(!m_pWellTrack) return 0; // osg::Vec3d vecGeoNormal; // bool bHorizonLayout=m_pWellSceneManager->IsWellSectonHorizonLayout(); // if(bHorizonLayout) { // m_pSceneManager->GetCoordinate()->ConvertCoordDouble( m_pWellTrack->GetID(),eCoord_OSGGlobal,osg::Vec3d(yOSGGlobal,yOSGGlobal,0),eCoord_GEO,vecGeoNormal ); // } // else { // m_pSceneManager->GetCoordinate()->ConvertCoordDouble( m_pWellTrack->GetID(),eCoord_OSGGlobal,osg::Vec3d(0,yOSGGlobal,0),eCoord_GEO,vecGeoNormal ); // } // return vecGeoNormal[1]; // } // return 0; } double CDrawBase::getXGeoFromOSGGlobal(double xOSGGlobal,bool IsWF) { return 0; // if(!m_pSceneManager) return 0; // CSheet *pSheet=m_pWellSceneManager->GetCurrentSheet(); // osg::Vec3d vecSheet = pSheet->VecToSheetCoord( osg::Vec3d(xOSGGlobal,0,0),eCoord_OSGGlobal,this->GetID() ); // int x0=vecSheet[0]; // CQtWellTrackNode *pWellNode = GetWellTrackNode(); // if( !pWellNode ) return 0; // const sTrack& sTrack = m_pWellSceneManager->GetWellSectionGeomtry().GetLogTrackInfo(m_pWellLog); // CObjWellLogTrack *pLogTrack = m_pWellSceneManager->GetWellSectionGeomtry().GetLogTrack( m_pWellLog ); // int nColumeIndex = sTrack.nBeginColumIndex; // if( nColumeIndex<0 ) // { // return 0; // } // QList mchilds; // pLogTrack->GetChildren(mchilds); // CellRange cellRange = sTrack.GetCellRange(); // cellRange.nEndRow = cellRange.nBeginRow + mchilds.indexOf( m_pWellLog ) + 1 ; // cellRange.nBeginRow = cellRange.nEndRow; // int nRowNumber = pWellNode->GetWellSheet().GetRowNumber(); // QRectF rcF = pWellNode->GetWellSheet().GetCellRect( CellRange(nRowNumber-1,nRowNumber-1, // sTrack.nBeginColumIndex,sTrack.nEndColumIndex)); // if(rcF.width()==0) return 0; // float val=0; // if(IsWF) { // if(mWaveMes.m_Right-mWaveMes.m_Left>0) val=(x0-rcF.left())*(mWaveMes.m_Right-mWaveMes.m_Left)/rcF.width()+mWaveMes.m_Left; // else val=(rcF.width()-(x0-rcF.left()))*(mWaveMes.m_Left-mWaveMes.m_Right)/rcF.width()+mWaveMes.m_Right; // } // else { // if(m_RightVal-m_LeftVal>0) val=(x0-rcF.left())*(m_RightVal-m_LeftVal)/rcF.width()+m_LeftVal; // else val=(rcF.width()-(x0-rcF.left()))*(m_LeftVal-m_RightVal)/rcF.width()+m_RightVal; // } // return val; } double CDrawBase::getXOSGGlobalFromPixel(double x) { // if(!m_pSceneManager) return 0; // CObjWellLogTrack *pLogTrack = m_pWellSceneManager->GetWellSectionGeomtry().GetLogTrack( m_pWellLog); // if( pLogTrack ) // { // CObjWellTrack*m_pWellTrack = pLogTrack->GetWellTrack(); // if(!m_pWellTrack) return 0; // osg::Vec3d vecGeoNormal; // m_pSceneManager->GetCoordinate()->ConvertCoordDouble( m_pWellTrack->GetID(),eCoord_OSGPixel,osg::Vec3d(x,0,0),eCoord_OSGGlobal,vecGeoNormal ); // return vecGeoNormal[0]; // } return 0; } void CDrawBase::ReadData() { //CMemRdWt mrw; //if (!mrw.Open(sFilePath.toStdString().c_str())) // 打开井文件 // return; //iIndex = mrw.OpenWave(sName.toStdString().c_str());//("EP_S"); //if(iIndex<0)return; //objViewInfo->m_LogName = sName; //mrw.GetWaveInfo(iIndex,&WaveInfo); //m_SDep = WaveInfo.StartDepth; //m_EDep = WaveInfo.EndDepth; //m_Rlev = WaveInfo.DepLevel; //int m_nSamples = WaveInfo.TimeSamples; //int m_flRlev2 = WaveInfo.TimeLevel; //m_PointNum = (float)(fabs((m_EDep-m_SDep)/m_Rlev+0.5)); //if(m_Value!=NULL) // delete []m_Value; } void CDrawBase::SaveData() { } void CDrawBase::InitProperty() { } void CDrawBase::GetProperty() { } void CDrawBase::Refurbish() { } void CDrawBase::DrawLith(QPainter *pDC,QPointF *pt,int nPoint,QBrush m_Colorbrush,QColor pColor,QColor bkColor) { int x=15; unsigned char *tPixel=new unsigned char[16*16]; nHeight=x+1; nWidth=x+1; LITH_HEIGHT=x+1; LITH_WIDTH=x+1; // mScale=cx*cy; QImage MemDC(LITH_WIDTH,LITH_HEIGHT,QImage::Format_ARGB32); QPainter pa1(&MemDC); pa1.fillRect(QRectF(0,0,LITH_WIDTH,LITH_HEIGHT),m_Colorbrush); JudgePixel(MemDC,bkColor,tPixel); // x=15/25.0*cy*cx; // x=(int)(x/16.0)*16-1; // if(x>4*16-1) x=4*14-1; if(x<15) x=15; x/=2; nHeight=x+1; nWidth=x+1; LITH_HEIGHT=x+1; LITH_WIDTH=x+1; //mScale=cx*cy; unsigned char *bPixel = new unsigned char[LITH_WIDTH*LITH_HEIGHT]; memset(bPixel,0,LITH_WIDTH*LITH_HEIGHT); QPointF *point = new QPointF[LITH_WIDTH*LITH_HEIGHT]; for(int i=0;i15) ja=15; int ib=i/scale; if(ib>15) ib=15; if(tPixel[ja*16+ib]) { bPixel[j*LITH_WIDTH+i]=1; } } } delete []tPixel; for (int j=0; jsave(); QPen pen=pDC->pen(); pen.setColor(crFore); pen.setStyle(Qt::PenStyle::SolidLine); pen.setWidth(penw); pDC->setPen(pen); int i=0,j=0,k=0; int y0=0,y1=0; // 扫描线的最大和最小y坐标 LPEdge pAET=NULL; // 活化边表头指针 LPEdge * pET=NULL; // 边表头指针 pAET=new Edge; // 初始化表头指针,第一个元素不用 pAET->pNext=NULL; // 获取y方向扫描线边界 for(i=1;iy1) y1=lpPoints[i].y(); } if(y0>=y1) { delete pAET; pDC->restore(); return; } // 初始化边表,第一个元素不用 pET=new LPEdge[(y1-y0)/penw+1]; for(i=0;i<=y1-y0;i+=penw) { pET[i/penw]= new Edge; pET[i/penw]->pNext=NULL; } for(i=0;ilpPoints[j].y())?i:j; peg->ymax=lpPoints[k].y(); // 该边最大y坐标 k=(k==j)?i:j; peg->x=(float)lpPoints[k].x(); // 该边与扫描线焦点x坐标 peg->dx=(float)(lpPoints[i].x()-lpPoints[j].x())/(lpPoints[i].y()-lpPoints[j].y());// 该边斜率的倒数 peg->pNext=NULL; // 插入边 ppeg=pET[(int)((lpPoints[k].y()-y0)/penw)]; while(ppeg->pNext) ppeg=ppeg->pNext; ppeg->pNext=peg; }// end if }// end for i // 扫描 for(i=y0;i<=y1;i+=penw) { LPEdge peg0=pET[(i-y0)/penw]->pNext; LPEdge peg1=pET[(i-y0)/penw]; if(peg0)// 有新边加入 { while(peg1->pNext) peg1=peg1->pNext; peg1->pNext=pAET->pNext; pAET->pNext=peg0; } // 按照x递增排序pAET peg0=pAET; while(peg0->pNext) { LPEdge pegmax=peg0; LPEdge peg1=peg0; LPEdge pegi=NULL; while(peg1->pNext) { if(peg1->pNext->x>pegmax->pNext->x) pegmax=peg1; peg1=peg1->pNext; } pegi=pegmax->pNext; pegmax->pNext=pegi->pNext; pegi->pNext=pAET->pNext; pAET->pNext=pegi; if(peg0 == pAET) peg0=pegi; } // 遍历活边表,画线 peg0=pAET; while(peg0->pNext) { if(peg0->pNext->pNext) { LineFillLith(pDC,(int)peg0->pNext->x,(int)peg0->pNext->pNext->x,i/penw,penw,crFore,crBack,pixels,pointn,nWidth,nHeight); peg0=peg0->pNext->pNext; } else break; } // 把ymax=i的节点从活边表删除并把每个节点的x值递增dx peg0=pAET; while(peg0->pNext) { if(peg0->pNext->ymax < i+penw+1) { peg1=peg0->pNext; peg0->pNext=peg0->pNext->pNext; //删除 delete peg1; continue; } peg0->pNext->x+=peg0->pNext->dx; //把每个节点的x值递增dx peg0=peg0->pNext; } } // 删除边表 for(i=0;i<=y1-y0;i+=penw) if(pET[i/penw]) { delete pET[i/penw]; } if(pAET) delete pAET; if(pET) delete[] pET; pDC->restore(); } void CDrawBase::FillLith(QPainter *pDC,QPointF *lpPoints,int nCount,QColor crFore,QColor crBack,QImage image,int x00,int y00) { int penw = 1; if(penw<0) penw=1; // 检查参数合法性 if(nCount<=2) return; pDC->save(); QPen pen=pDC->pen(); pen.setColor(crFore); pen.setStyle(Qt::PenStyle::SolidLine); pen.setWidth(penw); pDC->setPen(pen); int i=0,j=0,k=0; int y0=0,y1=0; // 扫描线的最大和最小y坐标 LPEdge pAET=NULL; // 活化边表头指针 LPEdge * pET=NULL; // 边表头指针 pAET=new Edge; // 初始化表头指针,第一个元素不用 pAET->pNext=NULL; // 获取y方向扫描线边界 for(i=1;iy1) y1=lpPoints[i].y(); } if(y0>=y1) { delete pAET; pDC->restore(); return; } // 初始化边表,第一个元素不用 pET=new LPEdge[(y1-y0)/penw+1]; for(i=0;i<=y1-y0;i+=penw) { pET[i/penw]= new Edge; pET[i/penw]->pNext=NULL; } for(i=0;ilpPoints[j].y())?i:j; peg->ymax=lpPoints[k].y(); // 该边最大y坐标 k=(k==j)?i:j; peg->x=(float)lpPoints[k].x(); // 该边与扫描线焦点x坐标 peg->dx=(float)(lpPoints[i].x()-lpPoints[j].x())/(lpPoints[i].y()-lpPoints[j].y());// 该边斜率的倒数 peg->pNext=NULL; // 插入边 ppeg=pET[(int)((lpPoints[k].y()-y0)/penw)]; while(ppeg->pNext) ppeg=ppeg->pNext; ppeg->pNext=peg; }// end if }// end for i // 扫描 for(i=y0;i<=y1;i+=penw) { LPEdge peg0=pET[(i-y0)/penw]->pNext; LPEdge peg1=pET[(i-y0)/penw]; if(peg0)// 有新边加入 { while(peg1->pNext) peg1=peg1->pNext; peg1->pNext=pAET->pNext; pAET->pNext=peg0; } // 按照x递增排序pAET peg0=pAET; while(peg0->pNext) { LPEdge pegmax=peg0; LPEdge peg1=peg0; LPEdge pegi=NULL; while(peg1->pNext) { if(peg1->pNext->x>pegmax->pNext->x) pegmax=peg1; peg1=peg1->pNext; } pegi=pegmax->pNext; pegmax->pNext=pegi->pNext; pegi->pNext=pAET->pNext; pAET->pNext=pegi; if(peg0 == pAET) peg0=pegi; } // 遍历活边表,画线 peg0=pAET; while(peg0->pNext) { if(peg0->pNext->pNext) { LineFillLith(pDC,(int)peg0->pNext->x,(int)peg0->pNext->pNext->x,i/penw,penw,crFore,crBack,image,x00,y00); peg0=peg0->pNext->pNext; } else break; } // 把ymax=i的节点从活边表删除并把每个节点的x值递增dx peg0=pAET; while(peg0->pNext) { if(peg0->pNext->ymax < i+penw+1) { peg1=peg0->pNext; peg0->pNext=peg0->pNext->pNext; //删除 delete peg1; continue; } peg0->pNext->x+=peg0->pNext->dx; //把每个节点的x值递增dx peg0=peg0->pNext; } } // 删除边表 for(i=0;i<=y1-y0;i+=penw) if(pET[i/penw]) { delete pET[i/penw]; } if(pAET) delete pAET; if(pET) delete[] pET; pDC->restore(); } void CDrawBase::LineFillLith(QPainter *hdc,int x1,int x2,int y,int ipen,QColor crFore,QColor crBack,QPointF *pixels,int *pointn,int nWidth,int nHeight) { int iy,i,ix1,ix2,l1,l2,l3; int x11; bool bQuit = FALSE; iy = y % nHeight; if(iy<0) return; l1 = x1 % nWidth; l3 = x1 / nWidth; l2 = nWidth; int x0=l3*nWidth; x11 = x0;//max width int loop=0; while ( 1 ) { if ( x11+nWidth > x2 ) l2 = x2-x11;//end pos for(i=0;il2) break; ix1=x11+pixels[iy*nWidth+i].x()*ipen; ix2=x11+pixels[iy*nWidth+i].y()*ipen; // if(ix1l2) ix2=l2; // hdc->drawPoint(x11+ix1,y,ix2-ix1,1,crFore); // ix2=x11+ix2*ipen; // ix1=x11+ix1*ipen; if(ix1x2) ix2=x2; hdc->drawLine(ix1,y*ipen,ix2,y*ipen); } l1 = 0; l3 ++;//new begin loop++; x11 = x0+loop*nWidth*ipen; if ( x11 > x2) break; } } void CDrawBase::LineFillLith(QPainter *hdc,int x1,int x2,int y,int ipen,QColor crFore,QColor crBack,QImage image,int x0,int y0) { for(int i=x1;idrawPoint(i+x0,y+y0); } } return; } void CDrawBase::_Build() { // m_IsDrawTrack=0; // m_pWellLog = dynamic_cast(this->GetOSGObject()); // CQtWellLogTrackNode::_Build(); // m_pLogTrackViewinfo->SetDrawGrid(false); // m_pWellSceneManager = dynamic_cast(m_pSceneManager); // if(!GetWellTrackNode()) // return; // //////读取数据 // GetProperty(); // if(m_pWellLog) { // sName = m_pWellLog->GetName(); // sFilePath = m_pWellLog->GetSlfFileName(); // } // /////////////////////// // /// // /// read data // /// // ReadData(); // int nLen = 0; // //////////////////////////////////////// // //开始build wave部分 // //道的最小最大值一样 // m_pWellLogXScalTransform->boundingRect().setWidth(0); // QGraphicsRectItem *sheetMatrix = GetWellTrackNode()->GetTextContainer(); // if(hHeadObj) { // hHeadObj->setParentItem(sheetMatrix); // hHeadObj->setWellLog(m_pWellLog); // } // if(m_pLeftText)m_pLeftText->setParentItem(sheetMatrix); // if(m_pRightText)m_pRightText->setParentItem(sheetMatrix); // if(m_pCurveNameText)m_pCurveNameText->setParentItem(sheetMatrix); // if(m_pUnitText)m_pUnitText->setParentItem(sheetMatrix); // SettingHeaderElements(); // if(m_pWave) { // m_pWave->setWellLog(m_pWellLog); // m_pWave->setFlag( QGraphicsItem::ItemClipsToShape,true); // m_pWave->setParentItem(m_pHUDSwitch); // m_pWave->m_pWellSceneManager=m_pWellSceneManager; // } // if(m_pWellSceneManager->GetTrackNodeByLogID(m_pWellLog->GetID())) // { // m_pWellLogTrack=dynamic_cast(m_pWellSceneManager->GetTrackNodeByLogID(m_pWellLog->GetID())->GetOSGObject()); // } // SetXScaleTransform(); } // void CDrawBase::_Update( eUpdateEvent e,CObjectEventParam *pEventParam ) // { // GetProperty(); // Refurbish(); // CQtWellLogTrackNode::_Update(e,pEventParam); // } // void CDrawBase::SetWellSheet(CSheet* wellSheet) // { // m_pWellSheet = wellSheet; // } // CQtWellTrackNode * CDrawBase::GetWellTrackNode() // { // m_pWellLogTrack = m_pWellSceneManager->GetWellSectionGeomtry().GetLogTrack( m_pWellLog); // if( m_pWellLogTrack ) // { // QUuid wellTrackID = m_pWellLogTrack->GetWellTrack()->GetID(); // return dynamic_cast( m_pSceneManager->GetBuilder( wellTrackID ) ); // } // return NULL; // } void CDrawBase::DrawCurve(QPainter* pdc,QRectF mrt) { } void CDrawBase::_UpdateHUD() { // CQtWellTrackNode *pWellNode = GetWellTrackNode(); // if( !pWellNode ) return; // const sTrack& sTrack = m_pWellSceneManager->GetWellSectionGeomtry().GetLogTrackInfo(m_pWellLog); // if(sTrack.nEndColumIndex<0) return; // if(sTrack.nEndRowIndex<0) return; // if(sTrack.nBeginRowIndex<0) return; // int nColumeIndex = sTrack.nBeginColumIndex; // if( nColumeIndex<0 ) // { // return; // } // CSheet *pSheet=m_pWellSceneManager->GetCurrentSheet(); // QList mchilds; // m_pWellLogTrack->GetChildren(mchilds); // CellRange cellRange = sTrack.GetCellRange(); // cellRange.nEndRow = cellRange.nBeginRow + mchilds.indexOf( m_pWellLog ) + 1 ; // cellRange.nBeginRow = cellRange.nEndRow; // QRectF headrcF = pWellNode->GetWellSheet().GetCellRect( cellRange ); // int nRowNumber = pWellNode->GetWellSheet().GetRowNumber(); // QRectF rcGDIViewPort = m_pSceneManager->GetCameraCommand().GetViewPortSize( true,false,true ); // CSheet &m_pWellSheet=pWellNode->GetWellSheet(); // osg::Vec3d vec1,vec2,vec3,vec4,vec1_Sheet(rcGDIViewPort.x(),rcGDIViewPort.y(),0); // m_pSceneManager->GetCoordinate()->ConvertCoordDouble(this->GetID(),eCoord_OSGPixel, osg::Vec3d(rcGDIViewPort.left(),rcGDIViewPort.top(),0), eCoord_OSGGlobal,vec1 ); // m_pSceneManager->GetCoordinate()->ConvertCoordDouble(this->GetID(),eCoord_OSGPixel, osg::Vec3d(rcGDIViewPort.right(),rcGDIViewPort.top(),0), eCoord_OSGGlobal,vec2 ); // QRectF rcF = m_pWellSheet.GetCellRect( CellRange(nRowNumber-1,nRowNumber-1,sTrack.nBeginColumIndex,sTrack.nEndColumIndex)); // vec3 = m_pWellSheet.SheetCoordToVec(osg::Vec3d(rcF.left(),rcF.top(),0), eCoord_OSGGlobal,this->GetID()); // vec4 = m_pWellSheet.SheetCoordToVec(osg::Vec3d(rcF.right(),rcF.top(),0), eCoord_OSGGlobal,this->GetID()); // if(vec4[0]vec2[0]) return; // float dTopDepth = pWellNode->GetWellTrack()->GetTopWellLogDepth(); // float dBottomDepth = pWellNode->GetWellTrack()->GetBottomWellLogDepth(); // float dTopDepth1,dBottomDepth1; // this->GetVisibleDepth(dTopDepth,dBottomDepth,dTopDepth1,dBottomDepth1); // if(m_pLogCurveLines){//处理绘图范围 // double yOSGMinTmp = pWellNode->ConvertY( eCoord_GEO, dTopDepth1 ,eCoord_GEONormal ); // double yOSGMaxTmp = pWellNode->ConvertY( eCoord_GEO,dBottomDepth1, eCoord_GEONormal ); // double yOSGMin = qMin( yOSGMinTmp,yOSGMaxTmp ); // double yOSGMax = qMax( yOSGMinTmp,yOSGMaxTmp ); // m_pLogCurveLines->Init(2,osg::Vec4f(0,0,1,1)); // QVector vPoints; // vPoints << QPointF( m_dOSGPropertyMin,yOSGMin ) // << QPointF( m_dOSGPropertyMax,yOSGMax ); // m_pLogCurveLines->SetPoints(vPoints); // m_pLogCurveLines->setVisible(false); // } // double dMarginOSGPixelY = m_pSceneManager->GetCoordinate()->ConvertDeltaX( QUuid(),eCoord_GDICM,m_pWellSceneManager->FIXED_LOGHead_MARGIN_CM, eCoord_OSGPixel,true); // if(m_pWellSceneManager->GetVecWindow()->GetWindowType()!=GetWindowTypeID_QtMultiWellSection())rcF.setY(rcGDIViewPort.y()-dMarginOSGPixelY);//修正高度 // QMatrix cmpx=GetWellTrackNode()->GetSheetMatrix()->matrix(); // int drawcurvetype=m_pWellSceneManager->GetCurveDrawType(); // if(drawcurvetype==DRAWHEAD) { // if(hHeadObj)hHeadObj->setRect(headrcF,headrcF); // if(m_pWave) { // rcF.setHeight(0); // m_pWave->setRect(rcF); // m_pWave->setMatrix(cmpx); // } // } // else if(drawcurvetype==DRAWCURVE) { // headrcF.setHeight(0); // if(hHeadObj)hHeadObj->setRect(headrcF,headrcF); // if(m_pWave) { // m_pWave->setRect(rcF); // m_pWave->setMatrix(cmpx); // } // } // else { // if(hHeadObj)hHeadObj->setRect(headrcF,headrcF); // if(m_pWave) { // m_pWave->setRect(rcF); // m_pWave->setMatrix(cmpx); // } // } } double CDrawBase::GetData(int RepCode,char *buffer) { double yy; 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 yy=-99999; break; } return yy; } void CDrawBase::SetData(int RepCode,char *buffer,float yy) { 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; } } void CDrawBase::SettingHeaderElements() { // if(m_pUnitText) m_pUnitText->setVisible(false); // if(m_pCurveNameText)m_pCurveNameText->setVisible(false); // if(m_pLeftText)m_pLeftText->setVisible(false); // if(m_pRightText)m_pRightText->setVisible(false); } void CDrawBase::DrawHead(QPainter *pPainter,QRectF rt,QRectF trect) { // CVecNodeBuilder::DrawHead(pPainter,rt,trect); // if(!m_pWellSceneManager) return; // CQtWellTrackNode *pWellNode = GetWellTrackNode(); // if( !pWellNode ) return; // const sTrack& sTrack = m_pWellSceneManager->GetWellSectionGeomtry().GetLogTrackInfo(m_pWellLog); // CObjWellLogTrack *pLogTrack = m_pWellSceneManager->GetWellSectionGeomtry().GetLogTrack( m_pWellLog ); // int nColumeIndex = sTrack.nBeginColumIndex; // if( nColumeIndex<0 ) // { // return; // } // CSheet *pSheet=m_pWellSceneManager->GetCurrentSheet(); // double yTop_OSGPixel(0),xMin_OSGPixel(0),xMax_OSGPixel(0),yBottom_OSGPixel(0); // CellRange cellRange = sTrack.GetCellRange(); // QList mchilds; // pLogTrack->GetChildren(mchilds); // cellRange.nEndRow = cellRange.nBeginRow + mchilds.indexOf( m_pWellLog ) + 1 ; // cellRange.nBeginRow = cellRange.nEndRow; // QRectF rcF = pWellNode->GetWellSheet().GetCellRect( cellRange ); // yTop_OSGPixel = rcF.top(); // xMin_OSGPixel = rcF.left(); // xMax_OSGPixel = rcF.right(); // yBottom_OSGPixel = rcF.bottom(); // float rowheight=45; // if(m_pWellSceneManager->IsWellSectonHorizonLayout()) rowheight=m_pWellSceneManager->GetCoordinate()->ConvertDeltaX( QUuid(),eCoord_GDICM,DEFAULT_ROW_HEIGHT,eCoord_GDIPixel,true); // else rowheight=m_pWellSceneManager->GetCoordinate()->ConvertDeltaY( QUuid(),eCoord_GDICM,DEFAULT_ROW_HEIGHT,eCoord_GDIPixel,true); // rowheight/=m_pSceneManager->GetZoomYRatio(); // double dYOSGPixel = yTop_OSGPixel +rowheight; // if(m_pLeftText) { // m_pLeftText->SetPosition(pPainter, osg::Vec3d( xMin_OSGPixel+2,dYOSGPixel,0),Qt::AlignLeft |Qt::AlignBottom); //设置位置 // } // if(m_pRightText) { // m_pRightText->SetPosition(pPainter, osg::Vec3d( xMax_OSGPixel-1,dYOSGPixel,0),Qt::AlignRight |Qt::AlignBottom);; // } // double cellcentre_y=yTop_OSGPixel+rowheight/4; // if(m_pCurveNameText) { // osg::Vec3d vTextPos = osg::Vec3d((xMin_OSGPixel+xMax_OSGPixel)/2.0,cellcentre_y,ZVALUE_HUDGeometry); // if(IsSelected()) { // QColor co=GetSelectedObjectColor(); // m_pCurveNameText->SetColor(osg::Vec4f(co.red()/255.0,co.green()/255.0,co.blue()/255.0,co.alpha()/255.0));//co.red()/255.0,co.green()/255.0,co.blue()/255.0,co.alphaF()/255.0)); // } // m_pCurveNameText->SetText(sName); // m_pCurveNameText->SetPosition(pPainter, vTextPos,Qt::AlignHCenter|Qt::AlignVCenter ); // } // dYOSGPixel = yTop_OSGPixel +rowheight*1/3+rowheight*1/4+rowheight*1/8; // if(m_pUnitText) { // m_pUnitText->SetText(sUnit); // m_pUnitText->SetPosition(pPainter,osg::Vec3d((xMin_OSGPixel+xMax_OSGPixel)/2.0,dYOSGPixel,0),Qt::AlignHCenter|Qt::AlignVCenter); // } // m_pSelectedLine->setVisible(false); // pPainter->save(); // if(IsSelected()) { // QPen pPen=pPainter->pen(); // pPen.setColor(GetSelectedObjectColor()); // pPen.setWidth(2); // pPainter->setBrush(Qt::NoBrush); // TranslateOSGLineStyleToQtPenStyle(pPen, DOTLINE ); // pPainter->setPen(pPen); // pPainter->drawRect(rt); // } // pPainter->restore(); } void CDrawBase::DrawClient(QPainter *pPainter,QRectF rt) { // CVecNodeBuilder::DrawClient(pPainter,rt); } void CDrawBase::GetClientItem(float sdep,float edep, QVector &lines) { } void CDrawBase::DrawSidelines(QPainter *pPainter,QRectF rt) { } void CDrawBase::GetDepth(QPainter *pDC,QRectF &mrt,QRectF &rt,float &sdep,float &edep,float &sdepc,float &edepc) { // CQtWellTrackNode *pWellNode = GetWellTrackNode(); // if(!pWellNode) return; // m_PlotSdep=pWellNode->GetOSGViewerTopDepth(); // m_PlotEdep=pWellNode->GetOSGViewerBottomDepth(); // sdep=pWellNode->m_curSdep; // edep=pWellNode->m_curEdep; sdepc=sdep; edepc=edep; rt = mrt; } //计算曲线位置 float CDrawBase::ComputePosToCurveVal(float x,float lsc,float rsc,float lps,float rps,int iType,float scale,float flMin,float flMax) { return 0; // float flVal=0; // flVal = lsc+(x-lps)/(rps-lps)*(rsc-lsc); // if ( iType == LOGDepth ) // { // flVal = powf(10.0f,flVal); // } // // 截止值 // if ( flVal > flMax ) flVal = flMax; // if ( flVal < flMin ) flVal = flMin; // return flVal; } //计算曲线位置 float CDrawBase::ComputeCurvePos(float flVal,float lsc,float rsc,float lps,float rps,int iType,float scale,float flMin,float flMax) { return 0; // bool bFlag; // float x; // /* // // 截止值 // if ( flVal > flMax ) // flVal = flMax; // if ( flVal < flMin ) // flVal = flMin; // */ // if ( iType == LOGDepth ) // { // bFlag = FALSE; // if (flVal <= 0) // bFlag = TRUE; // else // flVal = log10f(flVal); // x = lps+(flVal-lsc)/scale; // if (bFlag ) // x = lps; // } // else // { // x = lps+(flVal-lsc)/scale; // } // if (x < flMin) { // x = flMin; // } // if (x > flMax) { // x = flMax; // } // return x; } float CDrawBase::ConvertY(eCoordType eInCoordType, double flDep, eCoordType eOutCoordType ) { return ConvertY(flDep); } // float CDrawBase::YConvertToGEO(float y) // { // CQtWellTrackNode *pWellNode = GetWellTrackNode(); // if(!pWellNode) return -9999; // CSheet& sheet = pWellNode->GetWellSheet(); // osg::Vec3d vecSheet =sheet.SheetCoordToVec( osg::Vec3d( 1,y,0),eCoord_GEO,this->GetID() ); // return vecSheet[1]; // } // float CDrawBase::XConvertToGEO(float x) // { // CQtWellTrackNode *pWellNode = GetWellTrackNode(); // if(!pWellNode) return -9999; // CSheet& sheet = pWellNode->GetWellSheet(); // osg::Vec3d vecSheet =sheet.SheetCoordToVec( osg::Vec3d( x,1,0),eCoord_GEO,this->GetID() ); // return vecSheet[0]; // } float CDrawBase::ConvertY(float fDep) { return 0; // CQtWellTrackNode *pWellNode = GetWellTrackNode(); // if(!pWellNode) return -9999; // CSheet& sheet = pWellNode->GetWellSheet(); // if(!m_pObjWell) { // m_pObjWell=pWellNode->GetWellTrack()->GetWelllogRound()->GetWell(); // if(!m_pObjWell) { // m_pObjWell = dynamic_cast(GetProject()->GetObjectByID(pWellNode->GetWellTrack()->GetWellID())); // if(!m_pObjWell) { // CVecWindowDocument *pDoc=m_pSceneManager->GetDocument(); // if(pDoc) { // m_pObjWell=pDoc->GetCurrentWell(); // pWellNode->GetWellTrack()->SetWelllogRound(m_pObjWell->GetCurrentObjWellRound()); // } // } // } // } // if(m_pSceneManager->GetDrawType()==1&&m_pObjWell) { // fDep=m_pObjWell->GetDZ(fDep); // } // else if(m_pSceneManager->GetDrawType()==2&&m_pObjWell) { // fDep=m_pObjWell->GetDX(fDep); // } // else if(m_pSceneManager->GetDrawType()==3&&m_pObjWell){ // fDep=m_pObjWell->GetDZ(fDep); // } // osg::Vec3d vecSheet = sheet.VecToSheetCoord( osg::Vec3d( 1,fDep,0),eCoord_GEO,this->GetID() ); // osg::Vec3d vec=sheet.ToSheetCoord(vecSheet); // m_pSceneManager->GetCoordinate()->ConvertCoordDouble(this->GetID(),eCoord_OSGGlobal,vec ,eCoord_GDIPixel,vecSheet ); // if(IsXYSwap(eCoord_GEO,eCoord_GDIPixel)) return vecSheet[0]; // else return vecSheet[1]; } double CDrawBase::GetDdep() { return 0; // CQtWellTrackNode *pWellNode = GetWellTrackNode(); // if(!pWellNode) return 1; // float m_Rlev=0.125; // float y0=ConvertY0(pWellNode->m_curSdep); // float y11=ConvertY0(pWellNode->m_curEdep); // float pointn=(pWellNode->m_curEdep-pWellNode->m_curSdep)/m_Rlev; // float ddep=(y11-y0)/pointn;//float ddep = 3.5625000; // if(ddep==0) { // y0=ConvertY( eCoord_GEO,pWellNode->m_curSdep,eCoord_GDIPixel ); // y11=ConvertY( eCoord_GEO,pWellNode->m_curEdep,eCoord_GDIPixel ); // ddep=(y11-y0)/pointn;//float ddep = 3.5625000; // } // double xScaleOld=1,yScaleOld=1; // m_pSceneManager->GetCameraCommand().GetXYScale( xScaleOld,yScaleOld ); // if(getFacter()) return ddep/=xScaleOld; // else return ddep; } void CDrawBase::Destory() { // if(hHeadObj&&hHeadObj->pFF!=(CDrawBase*)0xfeeefeeefeeefeee&&hHeadObj->pFF!=(CDrawBase*)0xdddddddddddddddd) { // if(m_pLeftText){ // m_pLeftText->setParentItem(NULL); // delete m_pLeftText; // m_pLeftText=NULL; // } // if(m_pRightText){ // m_pRightText->setParentItem(NULL); // delete m_pRightText; // m_pRightText=NULL; // } // if(m_pCurveNameText){ // m_pCurveNameText->setParentItem(NULL); // delete m_pCurveNameText; // m_pCurveNameText=NULL; // } // if(m_pUnitText) { // m_pUnitText->setParentItem(NULL); // delete m_pUnitText; // m_pUnitText=NULL; // } // m_pWave->pFF=NULL; // hHeadObj->setParentItem(NULL); // delete hHeadObj; // hHeadObj=NULL; // } // if(m_pWave&&m_pWave->pFF!=(CDrawBase*)0xfeeefeeefeeefeee&&m_pWave->pFF!=(CDrawBase*)0xdddddddddddddddd&&m_pWave->pFF!=(CDrawBase*)0xabababababababab) { // m_pWave->pFF=NULL; // m_pWave->setParentItem(NULL); // delete m_pWave; // m_pWave=NULL; // } // CQtWellLogTrackNode::Destory(); } END_OSGGRAPHICS_NAMESPACE