/************************************************************************************** 井内道操作 主要函数列表: 1 virtual BOOL InitPropertyGrid(CXTPPropertyGrid& grid); 初始化属性窗口 2 virtual void OnLButtonDown(UINT nFlags, CPoint point); 鼠标操作 3 virtual void OnLButtonUp(UINT nFlags, CPoint point); 4 virtual void OnMouseMove(UINT nFlags, CPoint point); 5 virtual void OnDraw(CXyDC* pXyDC); 绘制辅助手柄 6 virtual BOOL OnGridItemChangeValue(CXTPPropertyGridItem* pItem); 响应属性框改变消息的函数 **************************************************************************************/ #include "StdAfx.h" //#include "CustomItemButton.h" #include "WellPoleDoc.h" #include "WellPoleView.h" #include "WellPoleLib/WellMarkNamesList.h" #include "WellPoleLib/WellBaseObj.h" #include "WellPoleLib/WellClassObjGroup.h" #include "WellPoleLib/InTrackDepthSegment.h" #include "WellPoleLib/InTrackTextBase.h" //#include "WellPoleLib\TrackValidThick.h" #include "WellPoleLib\InTrackTextRange.h" #include "WellPoleLib\InTrackSymbol.h" #include "WellPoleLib\InTrackLith.h" #include "WellPoleLib\InTrackResult.h" #include "WellPoleLib\InTrackOilTest.h" #include "WellPoleLib\InTrackSample.h" #include "WellPoleLib\InTrackShot.h" #include "WellPoleLib\InTrackTestExtraction.h" #include "WellPoleLib\InTrackLayerGroup.h" #include "WellPoleLib\InTrackCoring.h" #include "WellPoleLib\InTrackCoreWell.h" #include "WellPoleLib\InTrackPicture.h" #include "WellPoleLib\InTrackFaultPoint.h" #include "WellPoleLib\TrackObj.h" #include "WellPoleLib\InclinedTrack.h" #include "WellPoleLib\TrackStratum.h" #include "WellPoleLib/TrackCurve.h" #include "WellPoleLib\TrackCorePosition.h" #include "WellPoleLib\TrackDepth.h" #include "WellPoleLib\TrackLith.h" #include "WellPoleLib\TrackOilTest.h" #include "WellPoleLib\TrackBury.h" #include "WellPoleLib\TrackShot.h" #include "WellPoleLib\TrackSample.h" #include "WellPoleLib\TrackText.h" #include "WellPoleLib\TrackPicture.h" #include "WellPoleLib\TrackResult.h" #include "WellPoleLib/TrackGroup.h" #include "WellPoleLib\TrackCoreWell.h" #include "WellPoleLib\TrackSymbol.h" #include "WellPoleLib\TrackTestExtraction.h" #include "WellPoleLib\TrackPicture.h" #include "WellPoleLib/WellPole.h" #include "WellPoleLib\Data\WellData_SandSet.h" #include "WellPoleLib\Data\WellData_ReservesLayer.h" #include "WellPoleLib/InTrackCycle.h" #include "WellPoleLib/InTrackSandstone.h" #include "WellPoleLib/TrackSandstone.h" #include "WellPoleLib/InTrackInnerLayer.h" #include "WellPoleLib/TrackInnerLayer.h" #include "WellPoleLib/TrackSandLayer.h" #include "WellPoleLib/InTrackFacies.h" #include "WellPoleLib/TrackCommonData.h" #include "WellPoleLib/InTrackCommonData.h" #include "WellPoleLib/InTrackFluidProducingProfile.h" #include "WellPoleLib/TrackFluidProducingProfile.h" #include "WellPoleLib/TrackWaterInjectionProfile.h" #include "WellPoleLib/InTrackWaterInjectionProfile.h" //#include "DataConfig.h" //#include "PropertyGridItemAdd.h" #include "ItemTrackIn.h" #include "ItemTrack.h" //#include "CustomItemGradientColor.h" //#include "DlgWellDataConfig.h" //#include "GDataIO/GDataBinder/DataBinderWell.h" //#include "GDataIO/GDataBinder/DataBinderBase.h" //#include "DialogCurveReverseRange.h" namespace NItem { // int GetDrawTypeIndex(DWORD dwDrawType) //{ // int nIndex = 0; //波形方式 // switch(dwDrawType) // { // default: // case CSeismicDrawBase::typeWiggle: nIndex = 0; break;//波形曲线显示 // case CSeismicDrawBase::typeRightVa: nIndex = 1; break;//右变面积 // case CSeismicDrawBase::typeLeftVa: nIndex = 2; break;//左变面积 // case CSeismicDrawBase::typeVarDensity: nIndex = 3; break;//变密度显示 // case CSeismicDrawBase::typeVarDensity|CSeismicDrawBase::typeWiggle: nIndex = 4; break;//变密度+波形曲线 // case CSeismicDrawBase::typeVarDensity|CSeismicDrawBase::typeRightVa:nIndex = 5; break;//变密度+右变面积 // case CSeismicDrawBase::typeVarDensity|CSeismicDrawBase::typeLeftVa: nIndex = 6; break;//变密度+左变面积 // } // return nIndex; //} //DWORD GetDrawType(int nIndex) //{ // DWORD dwType = CSeismicDrawBase::typeWiggle; // switch(nIndex) // { // default: // case 0: dwType = CSeismicDrawBase::typeWiggle; break; // case 1: dwType = CSeismicDrawBase::typeRightVa; break; // case 2: dwType = CSeismicDrawBase::typeLeftVa; break; // case 3: dwType = CSeismicDrawBase::typeVarDensity; break; // case 4: dwType = CSeismicDrawBase::typeVarDensity | CSeismicDrawBase::typeWiggle; break; // case 5: dwType = CSeismicDrawBase::typeVarDensity | CSeismicDrawBase::typeRightVa; break; // case 6: dwType = CSeismicDrawBase::typeVarDensity | CSeismicDrawBase::typeLeftVa; break; // } // return dwType; //} CItemTrack::CItemTrack(CSigmaDoc* pDoc) : CItemWellBase(pDoc) ,m_bAddTrackIn(FALSE) { SetType(ITEM_TRACK); m_pTrack = NULL; m_pItemWell = NULL; m_bWellFrame = TRUE; m_bAddFaultPoint = FALSE; //CMapEditFrame *pParentFrame = (CMapEditFrame*)pWnd->GetMapFrame(); //if(!pParentFrame->IsKindOf(RUNTIME_CLASS(CMapWellFrame))) //{ // m_bWellFrame = FALSE; //} //CMapWellFrame *pFrame = (CMapWellFrame*)pWnd->GetMapFrame(); //for(int ii = 0; ii< pFrame->GetMapFrame2D().m_SplitterWnd.GetSize(); ii++) //{ // m_DcVec.push_back(pFrame->GetMapFrame2D().m_SplitterWnd[ii].pMapWnd2D->GetDC()); // m_WndVec.push_back(pFrame->GetMapFrame2D().m_SplitterWnd[ii].pMapWnd2D); //} } CItemTrack::~CItemTrack(void) { } void CItemTrack::OnDraw(CXyDC* pXyDC, CDC* pDC) { CSigmaView* pView = GetView(); //pDC = pView->m_pImgDC; //if (this->m_bLDown && pView->GetScreenDC() != NULL) //{ // pDC = pView->GetScreenDC(); // pXyDC->GetDC(); // TRACE("use track draw screendc --------------\r\n"); //} //CDC *pDC = GetDC()->GetDC(); CPen pen(PS_DOT, 0, RGB(0, 0, 0)); CPen *pOldPen = (CPen *)pDC->SelectObject(&pen); int old = pDC->SetROP2(R2_NOTXORPEN); if (m_bLDown) { CWellPole* pWell = m_pTrack->GetWell(); if (pWell->GetWellType() == Well_Incline) { CInclinedTrack* pIncliendTrack = (CInclinedTrack*)m_pTrack; { CPoint2D lastPt = GetDC()->GetReal(m_lastPoint.x, m_lastPoint.y); CPoint2D lpt, rpt; double depth = pIncliendTrack->GetDepthInWellTrace(lastPt); pIncliendTrack->GetBorderPoint(depth, lpt, rpt); CPoint lcpt, rcpt; lcpt = GetDC()->GetScreen(lpt); rcpt = GetDC()->GetScreen(rpt); pDC->MoveTo(lcpt.x, lcpt.y); pDC->LineTo(rcpt.x, rcpt.y); } } else { CRect rect; rect.top = m_firstPoint.y; rect.bottom = m_lastPoint.y; rect.left = pXyDC->GetScreen(m_pTrack->GetPos()).left; rect.right = pXyDC->GetScreen(m_pTrack->GetPos()).right; if (rect.Height() == 0) { pDC->MoveTo(rect.left, rect.top); pDC->LineTo(rect.right, rect.top); } else pDC->Rectangle(rect); } } pDC->SelectObject(pOldPen); pen.DeleteObject(); pDC->SetROP2(old); } void CItemTrack::OnLButtonDown(CDC *pDC, UINT nFlags, CPoint point, int vk) { m_bLDown = TRUE; m_bAddTrackIn = FALSE; CPoint2D ptReal = GetDC()->GetReal(point); m_downPoint = m_firstPoint = m_lastPoint = point; //绘制十字线时,需要全图绘制可以去掉因为重复绘制导致的十字线错误,当不要十字线时直线 OnDraw效率高 //if (::GetPreferences().WorkaroundDisplay.m_bViewCrossLine) // GetDoc()->Invalidate(); //else CWellPole* pWell = m_pTrack->GetWell(); if (pWell->GetWellType() == Well_Incline) { CInclinedTrack* pIncliendTrack = (CInclinedTrack*)m_pTrack; CPoint2D downPt = GetDC()->GetReal(m_downPoint.x, m_downPoint.y); CPoint2D lpt, rpt; double depth = pIncliendTrack->GetDepthInWellTrace(downPt); pIncliendTrack->GetBorderPoint(depth, lpt, rpt); TRACE("depth = %.2f \r\n", depth); CPoint lcpt, rcpt; lcpt = GetDC()->GetScreen(lpt); rcpt = GetDC()->GetScreen(rpt); GetDC()->GetDC()->MoveTo(lcpt.x, lcpt.y); GetDC()->GetDC()->LineTo(rcpt.x, rcpt.y); } else OnDraw(GetDC(),pDC); //GetView()->SetCapture(); //CXTPPropertyGrid &grid = GetPropertyGrid(GetDoc()->GetMainFrame()); //InitPropertyGrid(grid); } void CItemTrack::OnLButtonUp(CDC *pDC, UINT nFlags, CPoint point, int vk) { ReleaseCapture(); m_lastPoint = point; CPoint2D ptDown = GetDC()->GetReal(m_downPoint); CPoint2D ptLast = GetDC()->GetReal(m_lastPoint); double yMax=max(ptDown.y0,ptLast.y0); double yMin=min(ptDown.y0,ptLast.y0); if (abs(m_downPoint.y-m_lastPoint.y)==0 && m_pTrack->GetTrackType() != Track_StandardLayer && m_pTrack->GetTrackType() != Track_FaultPoint && m_pTrack->GetTrackType() != Track_CoreWell) { OnDraw(GetDC(),pDC); m_bLDown = FALSE; return; } CWellPole *pWellObj = m_pTrack->GetWell(); BOOL bSelect = FALSE; CRect8 rect; if (pWellObj->GetWellType() != Well_Incline) { WELLOBJLIST::iterator it = m_pTrack->GetChildren().begin(); for (; it != m_pTrack->GetChildren().end(); it++) { CWellBaseObj* pObj = *it; rect = pObj->GetRect(); rect.NormalizeRect(); if (yMinrect.top) { if (m_pItemWell) { if (!m_bAddTrackIn) { m_pItemWell->m_WellObjSelectlist.RemoveAll(); } m_pItemWell->Select(pObj, TRUE); m_pItemWell->SetSelectMode(CItemNestBase::netSelect); m_pItemWell->SetDrawObj(pWellObj); } m_bAddTrackIn = TRUE; bSelect = TRUE; } } } if (bSelect) { m_bLDown = FALSE; GetDoc()->Invalidate();// m_pTrack); CItemTrackIn* pItemTrackIn = new CItemTrackIn(GetDoc()); pItemTrackIn->SetPos(GetPos()); if(m_pItemWell) { if(m_pItemWell->m_WellObjSelectlist.GetCount() == 1) { pItemTrackIn->SetDrawObj(m_pItemWell->m_WellObjSelectlist.GetHead()); //CXTPPropertyGrid &grid = GetPropertyGrid(GetDoc()->GetMainFrame()); //pItemTrackIn->InitPropertyGrid(grid); } m_pItemWell->SetItem(pItemTrackIn); } return; } //CXTPPropertyGrid &grid = GetPropertyGrid(GetDoc()->GetMainFrame()); CInTrackDepthSegment * pTrackIn = NULL; ///////标准层道、断点道、井壁取芯道时弹出提示对话框 if (m_pTrack->GetTrackType() == Track_StandardLayer /*|| m_pTrack->GetTrackType() == Track_FaultPoint || m_pTrack->GetTrackType() == Track_CoreWell*/) { OnDraw(GetDC(),pDC); if(AfxMessageBox(IDS_STRING_ACTION_ADD,MB_YESNO|MB_ICONQUESTION)!=IDYES) { m_bLDown = FALSE; return; } } m_bLDown = FALSE; pTrackIn = CreatTopEndObj(); if (pTrackIn!=NULL) { //备份 SetReUnDoAction(); if (pWellObj->GetWellType() == Well_Incline) { CInclinedTrack* pIncliendTrack = (CInclinedTrack*)m_pTrack; double dep1 = pIncliendTrack->GetDepthInWellTrace(ptDown); double dep2 = pIncliendTrack->GetDepthInWellTrace(ptLast); if (pTrackIn->GetType() == KEP_STANDARD) { pTrackIn->GetPos().top = ptDown.y0; pTrackIn->GetPos().bottom = ptDown.y0; pTrackIn->GetPos().left = m_pTrack->GetPos().left; pTrackIn->GetPos().right = m_pTrack->GetPos().right; pTrackIn->m_fSdep = pWellObj->ScreenYToDepth(pTrackIn->GetPos().top); pTrackIn->m_fEdep = pWellObj->ScreenYToDepth(pTrackIn->GetPos().bottom); pTrackIn->SetRectInTrack(pTrackIn->GetPos(), LPVOID(pWellObj)); } else if (pTrackIn->GetType() == KEP_FAULTPOINT || pTrackIn->GetType() == KEP_COREWELL) { pTrackIn->m_fSdep = pTrackIn->m_fEdep = (dep1 + dep2) / 2; pTrackIn->m_fSdep = pWellObj->ScreenYToDepth(pTrackIn->GetPos().top); pTrackIn->m_fEdep = pWellObj->ScreenYToDepth(pTrackIn->GetPos().bottom); //pTrackIn->SetRectInTrack(pTrackIn->GetPos(), LPVOID(pWellObj)); } else if (pTrackIn->GetType() == KEP_INTRACK_COMMONDATA) { if (dep1 > dep2) { pTrackIn->m_fEdep = dep1; pTrackIn->m_fSdep = dep2; } else { pTrackIn->m_fEdep = dep2; pTrackIn->m_fSdep = dep1; } CTrackCommonData* pTrackComm = (CTrackCommonData*)m_pTrack; CInTrackCommonData* pInTrackComm = (CInTrackCommonData*)pTrackIn; pInTrackComm->SetDataItemCount(pTrackComm->m_CommonDataDef.m_CommonDataItems.size()); } else { if (dep1 > dep2) { pTrackIn->m_fEdep = dep1; pTrackIn->m_fSdep = dep2; } else { pTrackIn->m_fEdep = dep2; pTrackIn->m_fSdep = dep1; } } } else { if (pTrackIn->GetType() == KEP_STANDARD/* || pTrackIn->GetType() == KEP_FAULTPOINT || pTrackIn->GetType() == KEP_COREWELL*/) { pTrackIn->GetPos().top = ptDown.y0; pTrackIn->GetPos().bottom = ptDown.y0; pTrackIn->GetPos().left = m_pTrack->GetPos().left; pTrackIn->GetPos().right = m_pTrack->GetPos().right; pTrackIn->m_fSdep = pWellObj->ScreenYToDepth(pTrackIn->GetPos().top); pTrackIn->m_fEdep = pWellObj->ScreenYToDepth(pTrackIn->GetPos().bottom); pTrackIn->SetRectInTrack(pTrackIn->GetPos(), LPVOID(pWellObj)); } else if (pTrackIn->GetType() == KEP_FAULTPOINT || pTrackIn->GetType() == KEP_COREWELL) { double cy = (ptDown.y0 + ptLast.y0) / 2; pTrackIn->GetPos().top = cy; pTrackIn->GetPos().bottom = cy; pTrackIn->GetPos().left = m_pTrack->GetPos().left; pTrackIn->GetPos().right = m_pTrack->GetPos().right; pTrackIn->m_fSdep = pWellObj->ScreenYToDepth(pTrackIn->GetPos().top); pTrackIn->m_fEdep = pWellObj->ScreenYToDepth(pTrackIn->GetPos().bottom); pTrackIn->SetRectInTrack(pTrackIn->GetPos(), LPVOID(pWellObj)); } else if (pTrackIn->GetType() == KEP_RESULT || pTrackIn->GetType() == KEP_LAYERGROUP) { CString strDateTime; CTime mTime; mTime = CTime::GetCurrentTime(); strDateTime = mTime.Format(_T("%H%M%S")); int nID; nID = atoi(strDateTime); pTrackIn->SetId(nID); pTrackIn->GetPos().top = yMax; pTrackIn->GetPos().bottom = yMin; pTrackIn->GetPos().left = m_pTrack->GetPos().left; pTrackIn->GetPos().right = m_pTrack->GetPos().right; pTrackIn->m_fSdep = pWellObj->ScreenYToDepth(pTrackIn->GetPos().top); pTrackIn->m_fEdep = pWellObj->ScreenYToDepth(pTrackIn->GetPos().bottom); pTrackIn->SetRectInTrack(pTrackIn->GetPos(), LPVOID(pWellObj)); } //else if (pTrackIn->GetType() == KEP_DISCRETESEGMENT) //{ // CInTrackDiscreteSegment* pDiscreteSegment = (CInTrackDiscreteSegment*)pTrackIn; // pDiscreteSegment->m_pTrackDiscrete = (CTrackDiscreteObj*)m_pTrack; // pDiscreteSegment->GetPos().top = yMax; // pDiscreteSegment->GetPos().bottom = yMin; // pDiscreteSegment->GetPos().left = m_pTrack->GetPos().left; // pDiscreteSegment->GetPos().right = m_pTrack->GetPos().right; // pDiscreteSegment->m_fSdep = pWellObj->ScreenYToDepth(pTrackIn->GetPos().top); // pDiscreteSegment->m_fEdep = pWellObj->ScreenYToDepth(pTrackIn->GetPos().bottom); // pDiscreteSegment->SetRectInTrack(pTrackIn->GetPos(),LPVOID(pWellObj)); // pDiscreteSegment->SetParentObj(m_pTrack); //} else if (pTrackIn->GetType() == KEP_INTRACK_COMMONDATA) { pTrackIn->GetPos().top = yMax; pTrackIn->GetPos().bottom = yMin; pTrackIn->GetPos().left = m_pTrack->GetPos().left; pTrackIn->GetPos().right = m_pTrack->GetPos().right; pTrackIn->m_fSdep = pWellObj->ScreenYToDepth(pTrackIn->GetPos().top); pTrackIn->m_fEdep = pWellObj->ScreenYToDepth(pTrackIn->GetPos().bottom); pTrackIn->SetRectInTrack(pTrackIn->GetPos(), LPVOID(pWellObj)); CTrackCommonData* pTrackComm = (CTrackCommonData*)m_pTrack; CInTrackCommonData* pInTrackComm = (CInTrackCommonData*)pTrackIn; pInTrackComm->SetDataItemCount(pTrackComm->m_CommonDataDef.m_CommonDataItems.size()); } else { pTrackIn->GetPos().top = yMax; pTrackIn->GetPos().bottom = yMin; pTrackIn->GetPos().left = m_pTrack->GetPos().left; pTrackIn->GetPos().right = m_pTrack->GetPos().right; pTrackIn->m_fSdep = pWellObj->ScreenYToDepth(pTrackIn->GetPos().top); pTrackIn->m_fEdep = pWellObj->ScreenYToDepth(pTrackIn->GetPos().bottom); pTrackIn->SetRectInTrack(pTrackIn->GetPos(), LPVOID(pWellObj)); } } pTrackIn->NormalText(); m_pTrack->AddChild(pTrackIn); if (pWellObj->GetWellType() == Well_Incline) { pTrackIn->CalcInclinedBorder(); } GetDoc()->Invalidate();// m_pTrack); CItemTrackIn* pItemTrackIn = new CItemTrackIn(GetDoc()); if(m_pItemWell) { m_pItemWell->Select(pTrackIn); pItemTrackIn->SetDrawObj(pTrackIn); pItemTrackIn->SetPos(GetPos()); //pItemTrackIn->InitPropertyGrid(grid); m_pItemWell->SetItem(pItemTrackIn); } } } CInTrackDepthSegment* CItemTrack::CreatTopEndObj() { CInTrackDepthSegment * pTrackIn = NULL; if (m_pTrack->GetTrackType()==Track_Text) { CInTrackTextRange *pRange = new CInTrackTextRange(); pTrackIn = pRange; pTrackIn->m_font = m_pTrack->m_fontChild; pTrackIn->m_pen = m_pTrack->m_penChild; pTrackIn->m_brush.m_color = m_pTrack->m_brushChild.m_color; } else if(m_pTrack->GetTrackType()==Track_Symbol) { CInTrackSymbol* pSymbol = new CInTrackSymbol(); pTrackIn = pSymbol; } else if (m_pTrack->GetTrackType()==Track_Lith) { CInTrackLith* pLith = new CInTrackLith(); pTrackIn = pLith; } //else if (m_pTrack->GetTrackType()==Track_Layer) //{ // CInTrackLayer* pLayer = new CInTrackLayer(); // pTrackIn = pLayer; //} else if (m_pTrack->GetTrackType()==Track_Result) { CInTrackResult* pResult = new CInTrackResult(); pTrackIn = pResult; pTrackIn->m_pen = m_pTrack->m_penChild; if (m_pTrack->GetChildren().size() > 0) { WELLOBJLIST::iterator it = m_pTrack->GetChildren().begin(); for (; it != m_pTrack->GetChildren().end(); it++) { if ((*it)->GetType() == KEP_RESULT) { CInTrackResult* pResult1 = (CInTrackResult*)(*it); if (pResult1->IsShowName()) pResult->SetShowName(TRUE); if (pResult1->IsShowPureThickness()) pResult->SetShowPureThickness(TRUE); if (pResult1->IsShowThickness()) pResult->SetShowThickness(TRUE); if (pResult1->IsShowRenderBrief()) pResult->SetShowRenderBrief(TRUE); break; } } } } else if (m_pTrack->GetTrackType()==Track_Picture) { CInTrackPicture* pPicture = new CInTrackPicture(); pTrackIn = pPicture; } else if (m_pTrack->GetTrackType()==Track_OilTest) { CInTrackOilTest* pOilTest = new CInTrackOilTest(); pTrackIn = pOilTest; pTrackIn->m_font = m_pTrack->m_fontChild; } else if (m_pTrack->GetTrackType()==Track_CorePosition) { CInTrackCoring* pCoring = new CInTrackCoring(); pTrackIn = pCoring; pTrackIn->m_font = m_pTrack->m_fontChild; pTrackIn->m_pen = m_pTrack->m_penChild; pTrackIn->m_brush.m_color = m_pTrack->m_brushChild.m_color; } else if (m_pTrack->GetTrackType()==Track_CoreWell) { CInTrackCoreWell* pCoreWell = new CInTrackCoreWell(); pTrackIn = pCoreWell; pTrackIn->m_font = m_pTrack->m_fontChild; pTrackIn->m_pen = m_pTrack->m_penChild; pTrackIn->m_brush.m_color = m_pTrack->m_brushChild.m_color; //TRACKINCOREWELLDATA trackInCoreData; //pCoreWell->AddCoreData(trackInCoreData); } else if (m_pTrack->GetTrackType()==Track_Sample) { CInTrackSample* pSample = new CInTrackSample(); pTrackIn = pSample; pTrackIn->m_font = m_pTrack->m_fontChild; } else if (m_pTrack->GetTrackType()==Track_Shot) { CInTrackShot* pShot = new CInTrackShot(); pTrackIn = pShot; } else if (m_pTrack->GetTrackType() == Track_CementingQuality) { //CInTrackCementing* pTrackInCementing = new CInTrackCementing(); //pTrackIn = pTrackInCementing; } else if (m_pTrack->GetTrackType() == Track_FluidProducingProfile) { CInTrackFluidProducingProfile* pTrackInProducedFluid = new CInTrackFluidProducingProfile(); pTrackIn = pTrackInProducedFluid; pTrackIn->m_font = m_pTrack->m_fontChild; pTrackIn->m_pen = m_pTrack->m_penChild; pTrackIn->m_brush = m_pTrack->m_brushChild; } else if (m_pTrack->GetTrackType() == Track_WaterInjectionProfile) { CTrackWaterInjectionProfile* pTrackWaterAbsorption = (CTrackWaterInjectionProfile*)m_pTrack; CInTrackWaterInjectionProfile* pWaterAbsorption = new CInTrackWaterInjectionProfile(); pWaterAbsorption->SetShowAbsolute(pTrackWaterAbsorption->IsShowAbsolute()); pWaterAbsorption->SetShowRelative(pTrackWaterAbsorption->IsShowRelative()); pTrackIn = pWaterAbsorption; pTrackIn->m_font = m_pTrack->m_fontChild; pTrackIn->m_pen = m_pTrack->m_penChild; pTrackIn->m_brush = m_pTrack->m_brushChild; } else if (m_pTrack->GetTrackType() == Track_TestExtraction) { CInTrackTestExtraction* pTestExtraction = new CInTrackTestExtraction(); pTrackIn = pTestExtraction; pTrackIn->m_font = m_pTrack->m_fontChild; pTrackIn->m_pen = m_pTrack->m_penChild; pTrackIn->m_brush = m_pTrack->m_brushChild; } else if ( m_pTrack->GetTrackType() == Track_OilLayerGroup || m_pTrack->GetTrackType() == Track_ProduceLayer ||m_pTrack->GetTrackType() == Track_ReserveUnit || m_pTrack->GetTrackType() == Track_Stratum) { CInTrackLayerGroup* pLayerGroup = new CInTrackLayerGroup(); pTrackIn = pLayerGroup; pTrackIn->m_font = m_pTrack->m_fontChild; pTrackIn->m_pen = m_pTrack->m_penChild; pTrackIn->m_brush = m_pTrack->m_brushChild; } else if (m_pTrack->GetTrackType() == Track_SandLayer) { if (m_bAddFaultPoint == FALSE) { CInTrackLayerGroup* pLayerGroup = new CInTrackLayerGroup(); pTrackIn = pLayerGroup; pTrackIn->m_font = m_pTrack->m_fontChild; pTrackIn->m_pen = m_pTrack->m_penChild; pTrackIn->m_brush = m_pTrack->m_brushChild; } else { CInTrackFaultPoint* pFaultPoint = new CInTrackFaultPoint(); pTrackIn = pFaultPoint; pTrackIn->m_font = m_pTrack->m_fontChild; } } else if (m_pTrack->GetTrackType() == Track_Discrete) { //CInTrackDiscreteSegment* pDiscreteSegment = new CInTrackDiscreteSegment(); //pTrackIn = pDiscreteSegment; } else if (m_pTrack->GetTrackType() == Track_FaultPoint) { CInTrackFaultPoint* pFaultPoint = new CInTrackFaultPoint(); pTrackIn = pFaultPoint; pTrackIn->m_font = m_pTrack->m_fontChild; } else if (m_pTrack->GetTrackType() == Track_Sandstone) { CInTrackSandstone* pInSandstone = new CInTrackSandstone(); pTrackIn = pInSandstone; pTrackIn->m_font = m_pTrack->m_fontChild; } else if (m_pTrack->GetTrackType() == Track_Facies) { CInTrackFacies *pRange = new CInTrackFacies(); pTrackIn = pRange; pTrackIn->m_font = m_pTrack->m_fontChild; pTrackIn->m_pen = m_pTrack->m_penChild; pTrackIn->m_brush.m_color = m_pTrack->m_brushChild.m_color; } else if (m_pTrack->GetTrackType() == Track_InnerLayer) { CInTrackInnerLayer *pRange = new CInTrackInnerLayer(); pTrackIn = pRange; pTrackIn->m_font = m_pTrack->m_fontChild; pTrackIn->m_pen = m_pTrack->m_penChild; pTrackIn->m_brush.m_color = m_pTrack->m_brushChild.m_color; } else if (m_pTrack->GetTrackType() == Track_Cycle) { CInTrackCycle* pRange = new CInTrackCycle(); pTrackIn = pRange; pTrackIn->m_font = m_pTrack->m_fontChild; pTrackIn->m_pen = m_pTrack->m_penChild; pTrackIn->m_brush.m_color = m_pTrack->m_brushChild.m_color; } else if (m_pTrack->GetTrackType() == Track_CommonData) { CInTrackCommonData* pInCommonData = new CInTrackCommonData(); pTrackIn = pInCommonData; } //else if(m_pTrack->GetTrackType() == Track_Curve) //{ //} //else if (m_pTrack->GetTrackType() == Track_CementingQualityCurve) //{ // CInTrackCementingCurve* pCementingCurve = new CInTrackCementingCurve(); // pTrackIn = pCementingCurve; //} return pTrackIn; } void CItemTrack::OnLButtonDblClk(UINT nFlags, CPoint point) { } int CItemTrack::OnMouseMove(CDC *pDC,UINT nFlags, CPoint point) { CPoint2D lastPoint = GetDC()->GetReal(point); if(IsCaptureState() && m_bLDown) { OnDraw(GetDC(),pDC); m_lastPoint = point; OnDraw(GetDC(),pDC); } return 0; } BOOL CItemTrack::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) { ::SetCursor(AfxGetApp()->LoadCursor(IDC_CURSOR_RANGE)); return TRUE; } int CItemTrack::DeleteSelection(void) { if(GetDrawObj() == NULL) return 0; CWellPole* pWellObj = (CWellPole*)m_pTrack->GetWell(); CTrackGroup* pParentTrack = (CTrackGroup*)m_pTrack->GetParent(); CWellBaseObj* pObj = NULL; CTrackObj* pTrack = NULL; int num = 0; num = pWellObj->GetTrackCount(); if (num<=1) { return 0; } if (pWellObj->GetParent()!=NULL) { //CWellSection* pSection = (CWellSection*)pWellObj->GetParentObj(); //POSITION posBend = pSection->m_BendList.GetHeadPosition(); //while (posBend!=NULL) //{ // CBendObj* pBend = (CBendObj*)pSection->m_BendList.GetNext(posBend); // if (pBend->m_pLayerLeft->GetParentObj() == m_pTrack||(pBend->m_pLayerRight!=NULL&&pBend->m_pLayerRight->GetParentObj()==m_pTrack)) // { // POSITION posFind = pSection->m_BendList.Find(pBend); // if (posFind!=NULL) // { // pSection->DeleteBend(pBend); // } // } //} } //pParentTrack->RemoveTrack(m_pTrack); pWellObj->RemoveTrack(m_pTrack); delete m_pTrack; //if (pParentTrack->GetTrackList().size() == 0 && pParentTrack->GetType() != KEP_WELL) //{//如果父道不是井,且没有子道,就删除 // CTrackGroup* pPParentTrack = (CTrackGroup*)pParentTrack->GetParent(); // pPParentTrack->RemoveTrack(pParentTrack); // delete pParentTrack; //} m_pTrack = NULL; CPoint2D point = pWellObj->GetAnchorPoint();//pWellObj->GetPos().TopLeft(); pWellObj->CalculateSize(point); //if (pWellObj->GetWellType()==Well_Section) //{ // CWellSection* pSection = (CWellSection*)pWellObj->GetParentObj(); // pSection->ReComputeBends(pWellObj); //} return 1; } //void CItemTrack::OnInplaceButtonDown(CXTPPropertyGridItem* pItem) //{ // if(pItem == NULL) // return; //// if(pItem->GetID() == IDS_STRING_DB_TABLEFIELD_CONFIG) //弹出字段配置对话框 // { // //Db::CSqlStatementManager *pSqlManager = AfxGetGeo()->GetSqlStatementManager(); // //if (pSqlManager->HasDB()) // //{ // // //获取图道的数据表、字段 // // CString strTrackType; // // CString curve; // // CString table; // // vector fields; // // if(m_pItemWell) // // m_pItemWell->GetTrackTable(m_pTrack, strTrackType, table, curve); // // /// 从文件中读取相关类型道的配置 // // CDataTableConfig TempDataConfig; // // TempDataConfig.SetTableID(strTrackType); // // TempDataConfig.Read(); // // CDlgWellDataConfig dlg; // // dlg.SetFields(TempDataConfig.GetFieldsBase()); // // if (!m_pTrack->m_strConfigTable.IsEmpty()) // // { // // dlg.SetConfigTable(m_pTrack->m_strConfigTable); // // dlg.SetConfigFields(m_pTrack->m_VecConfigField); // // dlg.SetConfigClass(m_pTrack->m_strConfigClass); // // } // // else // // { // // dlg.SetConfigTable(TempDataConfig.GetTableDB()); // // dlg.SetConfigFields(TempDataConfig.GetFieldsDB()); // // } // // dlg.SetBaseTable(TempDataConfig.GetTableBase()); // // dlg.m_strTitleName = TempDataConfig.GetTableBase(); // // dlg.m_strID = TempDataConfig.GetTableID(); // // dlg.SetDataConfigTableFields(TRUE); // // dlg.SetDataConfigDB(TRUE); // // if (dlg.DoModal() == IDOK) // // { // // m_pTrack->m_strConfigTable = dlg.GetConfigTable(); // // m_pTrack->m_VecConfigField = dlg.GetConfigFields(); // // m_pTrack->m_strConfigClass = dlg.GetConfigClass(); // // pItem->SetValue(m_pTrack->m_strConfigTable); // // CItemSingleWell itemsw(GetWnd()); // // itemsw.ImportTrackDataFromDB(m_pTrack, (CWellObj*)m_pTrack->GetParentObj(), AfxGetGeo()->GetSqlStatementManager()); // // m_pTrack->ReadCurveData(); // // GetDoc()->Invalidate(m_pTrack->GetParentObj()); // // } // //} // } //// else if (pItem->GetID() == IDS_STR_TRACK_CONFIGTOPANDBOT) // { // //Db::CSqlStatementManager *pSqlManager = AfxGetGeo()->GetSqlStatementManager(); // //if (pSqlManager->HasDB()) // //{ // // //获取图道的数据表、字段 // // CString strTrackType; // // CString curve; // // CString table; // // vector fields; // // 从文件中读取相关类型道的配置 // // CDataTableConfig TempDataConfig; // // TempDataConfig.SetTableID(_T("Text")); // // TempDataConfig.Read(); // // CDlgWellDataConfig dlg; // // dlg.SetFields(TempDataConfig.GetFieldsBase()); // // if (!m_pTrack->m_strConfigTableOther.IsEmpty()) // // { // // dlg.SetConfigTable(m_pTrack->m_strConfigTableOther); // // dlg.SetConfigFields(m_pTrack->m_VecConfigFieldOther); // // } // // else // // { // // dlg.SetConfigTable(TempDataConfig.GetTableDB()); // // dlg.SetConfigFields(TempDataConfig.GetFieldsDB()); // // } // // dlg.SetBaseTable(TempDataConfig.GetTableBase()); // // dlg.m_strTitleName = TempDataConfig.GetTableBase(); // // dlg.m_strID = TempDataConfig.GetTableID(); // // dlg.SetDataConfigTableFields(TRUE); // // dlg.SetDataConfigDB(TRUE); // // if (dlg.DoModal() == IDOK) // // { // // m_pTrack->m_strConfigTableOther = dlg.GetConfigTable(); // // m_pTrack->m_VecConfigFieldOther = dlg.GetConfigFields(); // // pItem->SetValue(m_pTrack->m_strConfigTableOther); // // } // //} // } //// else if (pItem->GetID() == IDS_REVERSE_SET_VALUERANGE) // { // //CDialogCurveReverseRange dlg; // //CTrackCurve *pTrackCurve = (CTrackCurve*)m_pTrack; // //dlg.m_curve_right = pTrackCurve->m_curve_right; // //dlg.m_RangeValueVec.insert(dlg.m_RangeValueVec.begin(),pTrackCurve->m_ReverseRangeVec.begin(),pTrackCurve->m_ReverseRangeVec.end()); // //if(dlg.DoModal()==IDOK) // //{//取到设置好的翻卷数值区间 // // pTrackCurve->m_ReverseRangeVec.clear(); // // pTrackCurve->m_ReverseRangeVec.insert(pTrackCurve->m_ReverseRangeVec.begin(), // // dlg.m_RangeValueVec.begin(),dlg.m_RangeValueVec.end()); // // if(pTrackCurve->m_ReversePenVec.size()< pTrackCurve->m_ReverseRangeVec.size()) // // { // // int num = pTrackCurve->m_ReverseRangeVec.size() - pTrackCurve->m_ReversePenVec.size(); // // for(int ii = 0; iim_ReversePenVec.push_back(pTrackCurve->m_penCurve); // // } // // if(pTrackCurve->m_ReversePenVec.size()> pTrackCurve->m_ReverseRangeVec.size()) // // { // // int num = pTrackCurve->m_ReversePenVec.size() - pTrackCurve->m_ReverseRangeVec.size() ; // // for(int ii = num-1; ii>-1 ;ii-- ) // // pTrackCurve->m_ReversePenVec.pop_back(); // // } // // CXTPPropertyGrid &grid = GetPropertyGrid(GetDoc()->GetMainFrame()); // // CXTPPropertyGridItems *pItems = grid.GetCategories(); // // CXTPPropertyGridItem *pItem1; // // int cateNum = pItems->GetCount(); // // int id ; // // for(int ii = 0; ii< cateNum; ii++) // // { // // pItem1 = pItems->GetAt(ii); // // id = pItem1->GetID(); // // if(id == IDS_REVERSE_VALUE_RANGE) // // { // // pItem1->GetChilds()->Clear(); // // AddReverseCurveRangeItem(pItem1,pTrackCurve); // // pTrackCurve->ComputePointsInclined(); // // GetDoc()->Invalidate(); // (pTrackCurve); // // break; // // } // // } // //} // } //} void CItemTrack::ReadCurveData(CTrackObj* pTrack) { CTrackCurveBase* TrackCurve = (CTrackCurveBase*)pTrack; CString strcurvename = TrackCurve->m_strTrackName; vector fields; StringVectorSet *pdatas = NULL; //CDataBinderWellCurve WellCurve; //CDataBinderWellDiscrete WellDis; //Db::CSqlStatementManager *pSqlManager = AfxGetGeo()->GetSqlStatementManager(); //if (pSqlManager->HasDB()) //{ // AfxGetApp()->BeginWaitCursor(); // CString tableng; // CString strWellName ; // if(m_pItemWell) // strWellName= m_pItemWell->GetWellObject()->GetWellName(); // // CTrackCurveObjBase* TrackCurve = (CTrackCurveObjBase*)pTrack; // if (TrackCurve->GetTrackType() == Track_Curve) // { // fields.push_back("depth"); // fields.push_back(strcurvename); // CString strSGXh; // CString strVer; // WellCurve.SetParams(strWellName,strcurvename,strSGXh,strVer,Db::LOG_CURVE); // WellCurve.AttachInput(pSqlManager); // WellCurve.ReadData(); // //pdatas = &WellCurve.GetDataSet(); // TrackCurve->BuidChildObject(WellCurve.GetCurveDepth(),WellCurve.GetCurveData(),WellCurve.GetDataNum(),TRUE); // } // else if (TrackCurve->GetTrackType() == Track_Discrete) // { // fields.push_back("depth"); // fields.push_back(strcurvename); // //CDataBinderWellDiscrete WellDis(strWellName,strcurvename); // WellDis.SetParams(strWellName,strcurvename); // WellDis.AttachInput(pSqlManager); // WellDis.ReadData(); // TrackCurve->BuidChildObject(WellDis.GetCurveDepth(),WellDis.GetCurveData(),WellDis.GetDataNum(),TRUE); // //pdatas = &WellDis.GetDataSet(); // } // AfxGetApp()->EndWaitCursor(); //} //else {//使用井缓冲的曲线数据 CTrackCurve *pTrackCurve = (CTrackCurve*)pTrack; CWellPole *pWell = pTrack->GetWell(); for(int ii = 0; ii< pWell->m_CurveDataVecs.size(); ii++) { if(strcurvename == pWell->m_CurveDataVecs[ii]->m_curve_name) { pTrackCurve->m_dataObj = *pWell->m_CurveDataVecs[ii]; pTrackCurve->m_fRlev = pTrackCurve->m_dataObj.m_rlev; pTrackCurve->CaculateStartAndEnd(pWell); break; } } } } } //void CItemTrack::AddReverseCurveRangeItem(CXTPPropertyGridItem* pParentItem,CTrackObj *pTrack) //{ // CTrackCurve *pTarckCurve = (CTrackCurve*)pTrack; // CPropertyGridItemAdd ItemAdd(NULL); // // CString str; // str.LoadString(IDS_REVERSE_VALUE_RANGE); // int rangeNum = pTarckCurve->m_ReverseRangeVec.size(); // if(rangeNum>0) // { // CString tmpStr; // CXTPPropertyGridItem *pGridItem,*pItem1; // double left,right; // GDFLOGPEN tlogPen; // for(int ii = 0; ii< rangeNum; ii++) // { // tmpStr.Format("%s%d",str,ii+1); // pGridItem = pParentItem->AddChildItem(new CXTPPropertyGridItemCategory(tmpStr)); // //pGridItem= grid.AddCategory(tmpStr); // // ItemAdd.SetItem(pGridItem); // if(ii ==0) // left = pTarckCurve->m_curve_right; // else // left = pTarckCurve->m_ReverseRangeVec[ii-1]; // // right = pTarckCurve->m_ReverseRangeVec[ii]; // // pItem1 = ItemAdd.AddItemDouble(IDS_REVERSE_VALUE_LEFT,left);// 曲线的左刻 // pItem1->SetReadOnly(TRUE); // // pItem1 = ItemAdd.AddItemDouble(IDS_REVERSE_VALUE_RIGHT,right);// 曲线的右刻 // pItem1->SetReadOnly(TRUE); // // ItemAdd.AddItemLine1(IDS_REVERSE_CURVE_LINE, pTarckCurve->m_ReversePenVec[ii], &pTarckCurve->m_ReversePenVec[ii],LineType_Curve);//曲线类型 // pGridItem->Expand(); // } // // pParentItem->Expand(); // } //} void CItemTrack::ReadWavetraceData(CTrackObj *pTrack,CString newname) { //Db::CSqlStatementManager *pSqlManager = AfxGetGeo()->GetSqlStatementManager(); //if (pSqlManager->HasDB()) //{ // AfxGetApp()->BeginWaitCursor(); // if(pTrack->GetTrackType() == Track_VdlImage) // { // CTrackVdlImage *pTrackVdl = (CTrackVdlImage*)pTrack; // CWellObj *pWell = (CWellObj*)pTrack->GetParentObj(); // int well_id = pSqlManager->GetWellID(pWell->GetWellName()); // std::vectorfields; // std::vectorfieldsType; // fields.push_back("top"); fieldsType.push_back(DB_DATA_DOUBLE); // fields.push_back("bottom"); fieldsType.push_back(DB_DATA_DOUBLE); // fields.push_back("DepthRelv"); fieldsType.push_back(DB_DATA_DOUBLE); // fields.push_back("startTime"); fieldsType.push_back(DB_DATA_DOUBLE); // fields.push_back("endTime"); fieldsType.push_back(DB_DATA_DOUBLE); // fields.push_back("timeRelv"); fieldsType.push_back(DB_DATA_DOUBLE); // fields.push_back("dataRow"); fieldsType.push_back(DB_DATA_INT); // fields.push_back("datalen"); fieldsType.push_back(DB_DATA_INT); // fields.push_back("SaveOrder"); fieldsType.push_back(DB_DATA_INT); // fields.push_back("datatype");fieldsType.push_back(DB_DATA_STRING); // fields.push_back("depthUnit");fieldsType.push_back(DB_DATA_STRING); // fields.push_back("timeUnit");fieldsType.push_back(DB_DATA_STRING); // fields.push_back("Data"); fieldsType.push_back(DB_DATA_BINARY); // CDataBlobOne bread("well_wavetrace",fields,fieldsType); // bread.AttachInput(pSqlManager); // CString strWhere,str1,str2; // str2.Format("'%s'", pWell->GetWellName() ); // str1 = bread.GetFieldFmtStr("well_id"); // strWhere = str1 + "=" +str2; // str1 = bread.GetFieldFmtStr("name"); // str2.Format("='%s'",newname); // strWhere =strWhere +" and " + str1 + str2; // bread.SetWhereSql(strWhere); // if(bread.GetBlobOneRecord()) // { // pTrackVdl->SetNewDataInTrack(bread.GetBlobRecord()[0].data.m_dVal,bread.GetBlobRecord()[1].data.m_dVal,bread.GetBlobRecord()[2].data.m_dVal // ,bread.GetBlobRecord()[3].data.m_dVal,bread.GetBlobRecord()[4].data.m_dVal,bread.GetBlobRecord()[5].data.m_dVal // ,bread.GetBlobRecord()[6].data.m_iVal,bread.GetBlobRecord()[7].data.m_iVal,bread.GetBlobRecord()[8].data.m_iVal // ,bread.GetBlobRecord()[9].m_str,bread.GetBlobRecord()[10].m_str,bread.GetBlobRecord()[11].m_str // ,bread.GetBlobRecord()[12].GetBlob().pData,bread.GetBlobRecord()[12].GetBlob().cbSize); // pTrack->m_strTrackName = newname; // } // bread.EndBlob(); // } // AfxGetApp()->EndWaitCursor(); //} }