#include "StdAfx.h" #include "stdio.h" #include #include "WellPoleDoc.h" #include "WellPoleView.h" #include "WellPoleLib/WellBaseObj.h" #include "WellPoleLib/WellClassObjGroup.h" #include "WellPoleLib/InTrackDepthSegment.h" #include "WellPoleLib/InTrackTextBase.h" #include "WellPoleLib\InTrackTextRange.h" #include "WellPoleLib\InTrackPicture.h" #include "WellPoleLib\InTrackLith.h" #include "WellPoleLib\InTrackResult.h" #include "WellPoleLib\InTrackSymbol.h" #include "WellPoleLib\TrackObj.h" #include "WellPoleLib/InclinedTrack.h" #include "WellPoleLib\TrackGroup.h" #include "WellPoleLib\TrackCurveBase.h" #include "WellPoleLib\TrackSample.h" #include "WellPoleLib\TrackSymbol.h" #include "WellPoleLib\TrackLith.h" #include "WellPoleLib\TrackResult.h" #include "WellPoleLib/TrackDiscrete.h" #include "WellPoleLib/TrackCurve.h" #include "WellPoleLib/WellPole.h" #include "WellPoleLib/InclinedWellPole.h" #include "WellPoleLib/WellObjExtendInfo.h" #include "ItemText.h" #include "ActionAddItem.h" #include "ItemTrack.h" #include "ItemTrackIn.h" #include "ItemSingleWell.h" //#include "DlgAddTrack.h" //#include "DataTrackPropertyPage.h" //#include "PropertyGridItemAdd.h" //过点(ptx,pty)与向量(x1,y1),(x2,y2)垂线的交点. CPoint2D GetVPt_Line(double x1,double y1,double x2,double y2, double ptx,double pty) { CPoint2D ptf; if(abs(x1-x2)<0.000001 && abs(y1-y2)<0.000001) { ptf.x0 = x1; ptf.y0 = y1; } else { if(abs(y1-y2)<0.000001) {//向量(x1,y1),(x2,y2)水平,则其垂线垂直 ptf.x0 = ptx; ptf.y0 = y1; } else if(abs(x1-x2)<0.000001) {//向量垂直 ptf.x0 = x1; ptf.y0 = pty; } else { double k = -(x1-x2)/(y1-y2); ptf.x0 =( pty - k*ptx - y1 + x1*(y2-y1)/(x2-x1)) /((y2-y1)/(x2-x1) -k); ptf.y0 = k*ptf.x0 + pty - k*ptx; } } return ptf; } /*得到一个点,这个点距离点(ox,oy)的距离是l,与向量start点和end点垂直。,oid是方向标志,=1表示顺时针旋转90,=2表示逆时针 距离一个点的距离l且与某向量垂直的位置有两个,因此要用oid表示是哪个*/ CPoint2D GetPtV_Vector(double ox,double oy,double startx,double starty,double endx,double endy,double l,int oid) { CPoint2D retPt; if(abs(startx-endx)<0.00001 && abs(starty-endy)<0.00001) { retPt.x0 = startx ; retPt.y0 = starty; } else { double sel = sqrt((endx - startx)*(endx - startx) + (endy - starty)*(endy - starty) ); if(oid == 1) { retPt.x0 = ox + l* (starty - endy)/sel; retPt.y0 = oy + l*(endx - startx)/sel; } else { retPt.x0 = ox - l* (starty - endy )/sel; retPt.y0 = oy - l*(endx - startx)/sel; } } return retPt; } namespace NItem { CItemSingleWell::CItemSingleWell(CSigmaDoc* pDoc) : CItemWellBase(pDoc) { m_pWndOld = pDoc; SetType(ITEM_WELLPOLE); m_pItemSelected = NULL; m_pWell = NULL; m_pDragImage = NULL; m_bEditTrackInData = FALSE; m_nTrackPos = -1; m_bDragImage = FALSE; m_VCursor = m_HCursor = NULL; m_pVCursorBmp = m_pVCursorMaskBmp = m_pHCursorBmp = m_pHCursorMaskBmp = NULL; m_PointNum = 0; m_pPointBuf = NULL; m_bWellFrame = TRUE; //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); //} strcpy(m_logFont.lfFaceName,"宋体"); m_logFont.lfHeight = -12; m_logFont.lfWidth = 0; m_logFont.lfCharSet = 1;//中文字集 m_logFont.lfUnderline = 0;//无下划线 m_logFont.lfStrikeOut = 0;//无贯穿线 m_logFont.lfWeight = 400;//正常//粗 700; m_logFont.lfItalic = 0; //正常 m_logFont.lfCharSet = GB2312_CHARSET; m_logFont.lfEscapement = 0; m_logFont.lfOrientation = 0; } CItemSingleWell::~CItemSingleWell(void) { DestroyVHCursor(); if(m_pItemSelected != NULL) { delete m_pItemSelected; m_pItemSelected = NULL; } if(m_pDragImage != NULL) { delete m_pDragImage; m_pDragImage = NULL; } if (m_pWell != NULL) { m_pWell->ClearCurveSegmentObj(); } if(m_pPointBuf) delete []m_pPointBuf; } CWellBaseObj* CItemSingleWell::GetDrawObj() { CWellPoleDoc* pDoc = (CWellPoleDoc*)(GetView()->m_pDoc); return pDoc->GetWellPole(); } void CItemSingleWell::OnLButtonDown(CDC *pDC, UINT nFlags, CPoint point, int vk) { if(m_bEditTrackInData) { if(m_pItemSelected != NULL) { m_pItemSelected->OnLButtonDown(pDC,nFlags,point,vk); return; } } CWellPoleDoc* pDoc = (CWellPoleDoc*)GetDoc(); m_bLDown = TRUE; int nHandleSize = HADNLESIZE;// ::GetPreferences().WorkaroundHandle.m_nHandleSize; double dHandleSize = GetDC()->GetRealSize(CSize(nHandleSize/2, nHandleSize/2)).cx; CPoint2D ptReal = GetDC()->GetReal(point); m_downPoint = m_firstPoint = m_lastPoint = point; selectMode = CItemNestBase::selnone; CWellPole *pWell = GetWellObject(); CWellBaseObj* pObj = NULL; CTrackObj* pTrackObj = NULL; CWellBaseObj* pObjSelected = NULL; if(m_WellObjSelectlist.GetCount() > 0) pObjSelected = m_WellObjSelectlist.GetHead(); if (pObjSelected == NULL) { nDragHandle = pWell->HitTest(ptReal,dHandleSize,TRUE); if (nDragHandle!=0) { selectMode = CItemNestBase::size; //GetView()->SetCapture(); return; } } else { pObj = pObjSelected; nDragHandle = pObj->HitTest(ptReal,dHandleSize,TRUE); if (nDragHandle!=0) { selectMode = CItemNestBase::size; //GetView()->SetCapture(); return; } } //选中道边框拖动道宽 BeSelectBorderLine(pWell,ptReal,dHandleSize); if (selectMode==CItemNestBase::selnone) { CRect8 r(ptReal.x0,ptReal.y0,ptReal.x0,ptReal.y0); CSize8 sz=GetDoc()->GetSelectSize(); double sx=GetDC()->GetRealWidth(sz.cx); double sy=fabs(GetDC()->GetRealHeight(sz.cy)); r.InflateRect(sx,sy); ////有当前选中对象 先判断当前对象及其子对象(如果有子对象),若果为NULL再判断井内其它对象 CWellBaseObj *pCurrentObj = NULL; if (pObjSelected != NULL) { pCurrentObj = pObjSelected->ObjectAt(r, dHandleSize, TRUE); } if (pCurrentObj) { pObj = pCurrentObj; } else { pObj = pWell->ObjectAt(r,dHandleSize,TRUE); } if (pObjSelected != NULL) { /////// 非岩芯归为编辑下清除散点道内链表m_childObjects内的对象 //if (pObjSelected->GetType() == GDOUBLEFOX_DISCRETESEGMENT && pObj != pObjSelected) //{ // CTrackDiscreteObj* pTrackDiscrete = (CTrackDiscreteObj*)pObjSelected->GetParentObj(); // if(pTrackDiscrete != NULL) // pTrackDiscrete->GetChildObjList().RemoveAll(); //} ///////非选中曲线道中深度段则清除曲线道内链表m_childObjects内的对象 //else if (pObjSelected->GetType() == GDOUBLEFOX_LOGCURVESEGMENT && pObj != pObjSelected) //{ // CTrackCurveObj* pTrackCurveObj = (CTrackCurveObj*)pObjSelected->GetParentObj(); // if(pTrackCurveObj != NULL) // pTrackCurveObj->GetChildObjList().RemoveAll(); //} } BOOL bChange = FALSE; if(pObj!= NULL && !IsSelected(pObj)) { bChange = TRUE; //OnDraw(GetDC()); Select(pObj); m_pItemSelected = CreateItem(pObj); ((CItemWellBase*)m_pItemSelected)->SetDrawObj(pObj); m_pItemSelected->SetPos(GetPos()); } if(pObj!=NULL) { //if (!IsSelected(pObj)) //{ // Select(pObj, (nFlags & MK_SHIFT) != 0); //} selectMode = CItemNestBase::move; if (pObj->GetType()== KEP_TRACK) { CTrackObj* pTrackObj = (CTrackObj*)pObj; if(!pTrackObj->IsInTrackHead(ptReal,sx,sy) && pWell->GetWellType() != Well_Incline) { if (pTrackObj->GetTrackType()==Track_Curve) { CTrackCurveBase* pCurveTrack = (CTrackCurveBase*)pTrackObj; selectMode = CItemNestBase::selnone; if(m_pItemSelected != NULL) delete m_pItemSelected; m_pItemSelected = NULL; //清除道内之前的移动曲线对象 //POSITION pos = pCurveTrack->GetChildObjList().GetHeadPosition(); //while (pos != NULL) //{ // CWellBaseObj *pObj = pCurveTrack->GetChildObjList().GetNext(pos); // if (pObj->GetType() == GDOUBLEFOX_LOGCURVESEGMENT) // { // pCurveTrack->RemoveFromObjList(pObj); // m_WellObjSelectlist.RemoveAll(); // delete pObj; // } //} //CItemTrackInCurveSegment *pItemTrackInCurveSegment = new CItemTrackInCurveSegment(GetWnd()); //pItemTrackInCurveSegment->SetPos(GetPos()); //pItemTrackInCurveSegment->SetItemWell(this); //pItemTrackInCurveSegment->SetTracCurve(pCurveTrack); //m_pItemSelected = pItemTrackInCurveSegment; //m_pItemSelected->OnLButtonDown(nFlags,point); //m_bEditTrackInData = TRUE; //GetDoc()->Invalidate(pCurveTrack); return; } else { if((pTrackObj->GetTrackType() == Track_Depth) || pWell->GetWellType() == Well_Incline) { //深度道,斜井道不需要添加道内对象s if (bChange) { //绘制十字线时,需要全图绘制可以去掉因为重复绘制导致的十字线错误,当不要十字线时直线 OnDraw效率高 //if (::GetPreferences().WorkaroundDisplay.m_bViewCrossLine) // GetDoc()->Invalidate(); //else OnDraw(GetDC()); //GetView()->SetCapture(); } return; } selectMode = CItemNestBase::selnone; if(m_pItemSelected != NULL) delete m_pItemSelected; CItemTrack *pItemTrack = (CItemTrack *)CreateItem(pTrackObj)/*new CItemTrack(GetDoc())*/; m_pItemSelected = pItemTrack; pItemTrack->SetDrawObj(pTrackObj); pItemTrack->SetItemWell(this); m_pItemSelected->OnLButtonDown(pDC,nFlags,point,vk); m_bEditTrackInData = TRUE; return; } } } else { if (pWell->GetWellType()==Well_Section&& (pObj->GetType()== KEP_RESULT|| pObj->GetType()== KEP_LAYERGROUP|| pObj->GetType()== KEP_STANDARD)) { //CXTPPropertyGrid &grid = GetPropertyGrid(GetDoc()->GetMainFrame()); //InitPropertyGrid(grid); //CItemAddBend *pAddBend = new CItemAddBend(GetWnd()); //pAddBend->SetPos(GetPos()); //pAddBend->SetItemWell(this); //pAddBend->SetDrawObj(pObj); //POSITION pos = m_WellObjSelectlist.GetHeadPosition(); //while(pos) //{ // pAddBend->m_WellObjSelectlist.AddTail(m_WellObjSelectlist.GetNext(pos)); //} //m_pItemSelected = pAddBend; //m_pItemSelected->OnLButtonDown(nFlags,point); //m_bEditTrackInData = TRUE; return; } else { //selectMode = CItemSelect::selnone; //if(m_pItemSelected != NULL) // delete m_pItemSelected; //CItemWellBase *pItem= CreateItem(pObj); //m_pItemSelected = pItem; //pItem->SetDrawObj(pObj); //if (m_pItemSelected!=NULL) //{ // m_pItemSelected->OnLButtonDown(nFlags,point); // m_bAddObj = TRUE; //} //return; } } //GetView()->SetCapture(); CreateDragImage(); } else { //if(GetType() == ITEM_SECTIONWELL) // selectMode = CItemSelect::move; //GetView()->SetCapture(); m_WellObjSelectlist.RemoveAll(); if(m_pItemSelected != NULL) { delete m_pItemSelected; m_pItemSelected = NULL; } if (pObj != pObjSelected) { //OnDraw(GetDC()); bChange = TRUE;// FALSE; } DrawHandle(GetDC()); } if(bChange) {//绘制十字线时,需要全图绘制可以去掉因为重复绘制导致的十字线错误,当不要十字线时直线 OnDraw效率高 //if (::GetPreferences().WorkaroundDisplay.m_bViewCrossLine) // GetDoc()->Invalidate(); //else //OnDraw(GetDC()); //CWellPoleView *pView = (CWellPoleView*)GetView(); //pView->m_pWndCallBack(eWellPoleCallbackMsgDef::tInvalidateWnd,0); } } //CXTPPropertyGrid &grid = GetPropertyGrid(GetDoc()->GetMainFrame()); //InitPropertyGrid(grid); } void CItemSingleWell::OnLButtonUp(CDC *pDC, UINT nFlags, CPoint point, int vk ) { CWellPole *pWellObj = GetWellObject(); m_firstPoint = m_lastPoint = point; BOOL bDiscreteNoAdd = FALSE; if(m_pItemSelected != NULL&&m_bEditTrackInData) { CWellPole* pWell = GetWellObject(); bDiscreteNoAdd = TRUE; m_bEditTrackInData = FALSE; m_pItemSelected->OnLButtonUp(pDC,nFlags, point,vk); if(m_downPoint == point) { OnDraw(GetDC()); } ReleaseCapture(); m_bDrag = FALSE; m_bLDown = FALSE; nDragHandle = 0; selectMode = CItemNestBase::selnone; } CRect oldrect = GetDC()->GetScreen(pWellObj->GetRect()); CPoint2D downPoint = GetDC()->GetReal(m_downPoint); CPoint2D lastPoint = GetDC()->GetReal(m_lastPoint); CPoint2D delta(lastPoint.x0-downPoint.x0,lastPoint.y0-downPoint.y0); if((m_downPoint.x-m_lastPoint.x)!=0 || (m_downPoint.y-m_lastPoint.y)!=0) { if (IsCaptureState()) { //拖井头、道头纵向边界 if(selectMode== CItemNestBase::border) { SetReUnDoAction(); pWellObj = GetWellObject(); CPoint2D ptf = pWellObj->GetAnchorPoint();//使用井头的点在斜井时也能用(因为斜井的m_position会变化) CPoint2D dpt,lpt; dpt = pWellObj->ReCalculatePoint(downPoint); lpt = pWellObj->ReCalculatePoint(lastPoint); delta.SetPoint(lpt.x0 - dpt.x0,lpt.y0 - dpt.y0); if (nDragHandle==6) { double oldHigh = pWellObj->m_dHeightTrackHead; pWellObj->m_dHeightTrackHead += delta.y0; //////控制道头最小高度 if (pWellObj->m_dHeightTrackHead < 5) { pWellObj->m_dHeightTrackHead = 5; delta.y0 = pWellObj->m_dHeightTrackHead - oldHigh; } ptf.y0 += delta.y0; } else if (nDragHandle==2) { double oldHigh = pWellObj->m_dHeightWellHead; pWellObj->m_dHeightWellHead += delta.y0; if (pWellObj->m_dHeightWellHead m_font.m_dHeight) { pWellObj->m_dHeightWellHead =pWellObj->m_font.m_dHeight; delta.y0 = pWellObj->m_dHeightWellHead -oldHigh; } ptf.y0 += delta.y0; } pWellObj->CalculateSize(ptf); } else { CWellBaseObj* pObjSelected = NULL; if(m_WellObjSelectlist.GetCount() > 0) pObjSelected = m_WellObjSelectlist.GetHead(); if (pObjSelected == NULL)//拖动井 { if(selectMode==CItemSelect::move&&(GetWellObject()->GetParent()!=NULL&&GetWellObject()->GetParent()->GetType()!= KEP_FENCE)) { CRect8 position = pWellObj->GetPos(); pWellObj->m_delta = delta; position.OffsetRect(delta.x0, delta.y0); pWellObj->MoveTo(position); } else if(selectMode == CItemSelect::size)//拖动井控制点,整体缩放图道宽度 { SetReUnDoAction(); pWellObj = GetWellObject(); CPoint2D lastPoint = GetDC()->GetReal(m_lastPoint); pWellObj->MoveHandleTo(nDragHandle, lastPoint); //if (pWellObj->GetParentObj()!=NULL) //{ // CWellSection* pSection = (CWellSection*)pWellObj->GetParentObj(); // if (pSection->GetType()==GDOUBLEFOX_FENCE) // { // CWellFence* pFence = (CWellFence*)pSection; // pFence->SortBendList(); // } //} } } else { CWellBaseObj* pObj = pObjSelected; if(selectMode == CItemNestBase::move) { if (pObj->GetType()== KEP_TRACK) { CTrackObj* pTrackObj = (CTrackObj*)pObj; CSize size(m_lastPoint.x - m_downPoint.x, m_lastPoint.y - m_downPoint.y); if(size.cx != 0) { ////移动井内图道、组合道后重新排列道的位置 //if(pTrackObj->GetTrackType() == Track_Group) // pWellObj->SortTrack((CTrackGroupObj*)pTrackObj); //else // pWellObj->SortTrack(pTrackObj); int ideep = 0; SortTrackWhenMoving(pWellObj,pTrackObj, ideep); CPoint2D ptf =pWellObj->GetAnchorPoint();//使用井头的点在斜井时也能用(因为斜井的m_position会变化) pWellObj->GetPos().TopLeft(); pWellObj->CalculateSize(ptf); //重新计算道内子对象 pWellObj->ResetChildPosition(); //if (pWellObj->GetWellType()==Well_Section) //{ // CWellSection* pSection = (CWellSection*)pWellObj->GetParentObj(); // if (pSection->GetType()==GDOUBLEFOX_FENCE) // { // CWellFence* pFence = (CWellFence*)pSection; // POSITION pos = pFence->m_BendList.GetHeadPosition(); // while (pos!=NULL) // { // CFenceBendObj* pBend = (CFenceBendObj*)pFence->m_BendList.GetNext(pos); // if (pBend->m_pLayerLeft->GetParentObj()->GetParentObj()==pWellObj||(pBend->m_pLayerRight!=NULL&&pBend->m_pLayerRight->GetParentObj()->GetParentObj()==pWellObj)) // { // pBend->CreateBendLines(); // pBend->CreateBendFills(); // } // } // } //} } } //else if (pObj->GetType()==GDOUBLEFOX_LOGCURVESEGMENT)//曲线段 //{ // CTrackInCurveSegment* pSegment = (CTrackInCurveSegment*)pObj; // pSegment->m_fSdep = pWellObj->ScreenYToDepth(pSegment->GetPos().top); // 曲线段的起始深度 // pSegment->m_fEdep = pWellObj->ScreenYToDepth(pSegment->GetPos().bottom); // 曲线段的结束深度 //} //// 岩芯归为时 //else if (pObj->GetType() == GDOUBLEFOX_DISCRETESEGMENT) //{ // if (m_WellObjSelectlist.GetCount()==1) // { // MoveDiscreteSegement(pObj,delta.y0); // CRect8 position = pObj->GetRect(); // CRect8 RectOld = position; // pObj->SetDelta(CPoint2D(0, delta.y0)); // position.OffsetRect(delta.x0, delta.y0); // pObj->MoveTo(position); // CRect8 RectNew = position; // double fTop = max(RectOld.top,RectNew.top); // double fBot = min(RectOld.bottom,RectNew.bottom); // CArray ArrDepth; // CArray ArrValue; // int nStartIndex = 0; // int nEndIndex = 0; // GetDepthAndValueDiscreteSegement(pObj,ArrDepth,ArrValue,fTop,fBot,nStartIndex,nEndIndex); // SortDiscreteSegment(ArrDepth,ArrValue); // SetDiscreteSegment(pObj,ArrDepth,ArrValue,nStartIndex,nEndIndex); // ArrDepth.RemoveAll(); // ArrValue.RemoveAll(); // } //} else { SetReUnDoAction(); pWellObj = GetWellObject(); if(pWellObj->GetWellType() != Well_Incline) { if(delta.y0 > 0) { POSITION pos = m_WellObjSelectlist.GetHeadPosition(); while(pos!=NULL) { CWellBaseObj* pObj = m_WellObjSelectlist.GetNext(pos); CRect8 position = pObj->GetRect(); pObj->SetDelta(CPoint2D(0, delta.y0)); position.OffsetRect(delta.x0, delta.y0); pObj->MoveTo(position); } } else { POSITION pos = m_WellObjSelectlist.GetTailPosition(); while(pos!=NULL) { CWellBaseObj* pObj = m_WellObjSelectlist.GetPrev(pos); CRect8 position = pObj->GetRect(); pObj->SetDelta(CPoint2D(0, delta.y0)); position.OffsetRect(delta.x0, delta.y0); pObj->MoveTo(position); } } } } } else if (selectMode==CItemNestBase::size&&nDragHandle!=0) { SetReUnDoAction(); pWellObj = GetWellObject(); if (pObj->GetType()== KEP_TRACK) { CPoint2D ptf =pWellObj->GetAnchorPoint();//使用井头的点在斜井时也能用(因为斜井的m_position会变化) pWellObj->GetPos().TopLeft(); CTrackObj *pCTrackObj = (CTrackObj *) pObj; if (nDragHandle==4) { //交互对象句柄 CPoint2D lastPoint = GetDC()->GetReal(m_lastPoint); lastPoint = pWellObj->ReCalculatePoint(lastPoint); pObj->MoveHandleTo(nDragHandle,lastPoint); } pWellObj->CalculateSize(ptf); } else { //内置对象交互句柄 pObj->MoveHandleTo(nDragHandle, lastPoint); } } //CXTPPropertyGrid &grid = GetPropertyGrid(GetDoc()->GetMainFrame()); //InitPropertyGrid(grid); } } //刷新整个井 GetDoc()->Invalidate(/*rect*/); } } /// 鼠标在散点道道体范围之内且非添加岩芯归位深度段时取消散点道选中状态 if ((m_downPoint.y-m_lastPoint.y)==0) { CWellBaseObj* pObjSelected = NULL; if(m_WellObjSelectlist.GetCount() > 0) pObjSelected = m_WellObjSelectlist.GetHead(); if (pObjSelected != NULL) { if (pObjSelected->GetType() == KEP_TRACK) { CTrackObj* pTrack = (CTrackObj*)pObjSelected; if (pTrack->GetTrackType() == Track_Discrete) { CTrackDiscrete* pTrackDiscrete = (CTrackDiscrete*)pTrack; if(bDiscreteNoAdd) { if (pTrackDiscrete->GetChildren().size() == 0) { if(m_pItemSelected != NULL) { delete m_pItemSelected; m_pItemSelected = NULL; } m_pItemSelected = CreateItem(pTrack); ((CItemWellBase*)m_pItemSelected)->SetDrawObj(pTrack); m_pItemSelected->SetPos(GetPos()); //OnDraw(GetDC()); //CXTPPropertyGrid &grid = GetPropertyGrid(GetDoc()->GetMainFrame()); //InitPropertyGrid(grid); } } } else if(pTrack->GetTrackType() == Track_Curve) { if(m_pItemSelected != NULL &&m_pItemSelected->GetType() != ITEM_SELECT) {//在曲线道中,如果原地点击鼠标,就还选中曲线道 delete m_pItemSelected; m_pItemSelected = CreateItem(pTrack); ((CItemWellBase*)m_pItemSelected)->SetDrawObj(pTrack); m_pItemSelected->SetPos(GetPos()); //OnDraw(GetDC()); //CXTPPropertyGrid &grid = GetPropertyGrid(GetDoc()->GetMainFrame()); //InitPropertyGrid(grid); } } } } } // End dragging image if(m_pDragImage != NULL) { CWnd* pWnd = CWnd::FromHandle(GetView()->GetHWND()); m_pDragImage->DragLeave(pWnd); m_pDragImage->EndDrag(); delete m_pDragImage; m_pDragImage=NULL; m_bDragImage = FALSE; } ReleaseCapture(); m_bDrag = FALSE; m_bLDown = FALSE; nDragHandle = 0; } void CItemSingleWell::OnLButtonDblClk(UINT nFlags, CPoint point) { } int CItemSingleWell::OnMouseMove(CDC *pDC, UINT nFlags, CPoint point) { if(m_pItemSelected != NULL&&m_bEditTrackInData) { return m_pItemSelected->OnMouseMove(pDC,nFlags, point); } CPoint2D lastPoint = GetDC()->GetReal(point); CWellPole *pWellObj = GetWellObject(); CWellBaseObj* pObjSelected = NULL; if(m_WellObjSelectlist.GetCount() == 1) pObjSelected = m_WellObjSelectlist.GetHead(); //设置拖拽开始点 int nHandleSize = HADNLESIZE;//::GetPreferences().WorkaroundHandle.m_nHandleSize; double dHandleSize = GetDC()->GetRealSize(CSize(nHandleSize/2, nHandleSize/2)).cx; if(IsCaptureState() && m_bLDown) { if(m_pDragImage != NULL) { CPoint scpt = point; //BOOL b = ClientToScreen(GetView()->GetHWND(), &scpt); //DWORD error = GetLastError(); //ClientToScreen(GetView()->GetHWND(), &crClient); CPoint pt = scpt; pt.x -= m_rectImage.left; pt.y -= m_rectImage.top; if (pObjSelected != NULL) { //if (pObjSelected->GetType() == GDOUBLEFOX_DISCRETESEGMENT) //{ // point.x = m_downPoint.x; //} } if(!m_bDragImage) { m_pDragImage->BeginDrag(0, pt); CWnd* pWnd = CWnd::FromHandle(GetView()->GetHWND()); //m_pDragImage->DragEnter(pWnd, point); m_pDragImage->DragEnter(pWnd, scpt); m_bDragImage = TRUE; } m_pDragImage->DragMove(scpt); //move the drag image to those coordinates } if (m_pDragImage == NULL) { //OnDraw(GetDC()); CWnd* pWnd = CWnd::FromHandle(GetView()->GetHWND()); DrawSelected(GetDC(), pWnd); } //刷新 //OnDraw(GetDC()); if(m_pDragImage != NULL && pObjSelected != NULL) { if(pObjSelected->GetType() == KEP_TRACK) { CTrackObj* pTrack = (CTrackObj*)pObjSelected; CPoint2D ptBegin, ptEnd; int nPos = pWellObj->FindTrackPosition(pTrack, ptBegin, ptEnd); m_nTrackPos = nPos; if(nPos >= 0) { m_ptBegin = ptBegin; m_ptEnd = ptEnd; } } } m_bDrag = TRUE; m_lastPoint = point; if (selectMode==CItemSelect::move && pObjSelected != NULL)// 移动图元(道头、曲线头) { CPoint2D endPoint = GetDC()->GetReal(m_lastPoint); CPoint2D startPoint = GetDC()->GetReal(m_firstPoint); endPoint = pWellObj->ReCalculatePoint(endPoint); startPoint = pWellObj->ReCalculatePoint(startPoint); CPoint2D delta(endPoint.x0-startPoint.x0,endPoint.y0-startPoint.y0); CWellBaseObj *pDrawObj = pObjSelected; pDrawObj->m_delta = delta; ///???? //m_pObjSelected->m_delta = delta; if(pDrawObj->GetType() == KEP_TRACK) { CTrackObj *pTrackObj = (CTrackObj *) pObjSelected; CRect8 activehead = pTrackObj->m_active_head; //移动道头交互框 activehead.OffsetRect(delta.x0, delta.y0); pTrackObj->MoveToActiveTrackHead(activehead); } } //刷新 //OnDraw(GetDC()); if (m_pDragImage == NULL) { CWnd* pWnd = CWnd::FromHandle(GetView()->GetHWND()); DrawSelected(GetDC(), pWnd); } m_firstPoint = m_lastPoint; } else { m_lastPoint = point; } return 1; } void CItemSingleWell::OnRButtonDown(UINT nFlags, CPoint point) { //OnLButtonDown(nFlags, point); m_bLDown = FALSE; CItem::OnRButtonDown(nFlags, point); //OnLButtonUp(nFlags, point); } int CItemSingleWell::GetSubMenu() {//??????? // 井 int iRMenu = 42; CWellBaseObj* pObjSelected = NULL; if(m_WellObjSelectlist.GetCount() > 0) pObjSelected = m_WellObjSelectlist.GetHead(); if(pObjSelected == NULL) return iRMenu; if (pObjSelected->GetType()== KEP_TRACK) { CTrackObj* pTrackObj = (CTrackObj*)pObjSelected; // 深度道、组合道 if(pTrackObj->GetTrackType()==Track_Depth || pTrackObj->GetTrackType()==Track_Group) { iRMenu = 44; } else if (pTrackObj->GetTrackType()==Track_Curve || pTrackObj->GetTrackType() == Track_Discrete) { iRMenu = 43; } else if(pTrackObj->GetTrackType() == Track_VdlImage || pTrackObj->GetTrackType() == Track_WaveCurve || pTrackObj->GetTrackType() == Track_SeisSection) iRMenu = 54; else iRMenu = 43; TRACE("select track right menu \r\n"); } else if (GetWellObject()->GetWellType()==Well_Section&& (pObjSelected->GetType()== KEP_RESULT|| pObjSelected->GetType()== KEP_LAYERGROUP|| pObjSelected->GetType()== KEP_STANDARD)) { iRMenu = 38; } //else if (pObjSelected->GetType()==GDOUBLEFOX_LOGCURVESEGMENT) //{ // iRMenu = 51; //} else if (pObjSelected->GetType()== KEP_MARK) { iRMenu = 45; } //else if (pObjSelected->GetType()== KEP_TEXTBOX) //{ // iRMenu = 41; //} //else if (pObjSelected->GetType()==GDOUBLEFOX_DISCRETESEGMENT) //{ // iRMenu = 50; //} else if(pObjSelected->GetType()!=NULL && pObjSelected->GetParent()->GetType()== KEP_TRACK) { TRACE("select track in right menu \r\n"); iRMenu = 45; } return iRMenu; } BOOL CItemSingleWell::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) { return TRUE; if(m_pItemSelected != NULL && m_bEditTrackInData) { //return m_pItemSelected->OnSetCursor(pWnd, nHitTest, message); } CWellPole* pWellObj = GetWellObject(); CWellBaseObj* pObjSelected = NULL; if(m_WellObjSelectlist.GetCount() == 1) pObjSelected = m_WellObjSelectlist.GetHead(); int nHandleSize = HADNLESIZE;// ::GetPreferences().WorkaroundHandle.m_nHandleSize; double dHandleSize = GetDC()->GetRealSize(CSize(nHandleSize/2, nHandleSize/2)).cx; CPoint2D lastPoint = GetDC()->GetReal(m_lastPoint); if(pObjSelected == NULL) { int nHandle = pWellObj->HitTest(lastPoint,dHandleSize,TRUE); if(nHandle!=0) { ::SetCursor(GetHandleCursor(nHandle)); return TRUE; } } else /*if(pObjSelected != NULL)*/ { //光标移动到非道对象时的状态 if (pObjSelected->GetType()!= KEP_TRACK) { //if (pObjSelected->GetType()!=GDOUBLEFOX_STANDARD && // pObjSelected->GetType()!=GDOUBLEFOX_FAULTPOINT) { int nHandle = pObjSelected->HitTest(lastPoint,dHandleSize,TRUE); if(nHandle!=0) { SetCursor(GetHandleCursor(nHandle)); return TRUE; } } } } if(SetMoveCursor(pWellObj,lastPoint,dHandleSize,pWellObj)) return TRUE; //else //{ // GetDoc()->GetCursor().SetCursor(CursorSelect); // return GetDoc()->GetCursor().SetCursor(); //} return TRUE; } BOOL CItemSingleWell::OnSetCursor(CPoint pt, int& handle) { handle = -1; if (m_pItemSelected != NULL && m_bEditTrackInData) { return m_pItemSelected->OnSetCursor(pt , handle); } CWellPole* pWellObj = GetWellObject(); CWellBaseObj* pObjSelected = NULL; if (m_WellObjSelectlist.GetCount() == 1) pObjSelected = m_WellObjSelectlist.GetHead(); int nHandleSize = HADNLESIZE;// ::GetPreferences().WorkaroundHandle.m_nHandleSize; double dHandleSize = GetDC()->GetRealSize(CSize(nHandleSize / 2, nHandleSize / 2)).cx; CPoint2D lastPoint = GetDC()->GetReal(pt);// m_lastPoint); CPoint ptt = m_lastPoint; if (pObjSelected == NULL) { int nHandle = pWellObj->HitTest(lastPoint, dHandleSize, TRUE); if (nHandle != 0) { if (nHandle > 1) handle = 3; return TRUE; } //if (nHandle != 0) //{ // ::SetCursor(GetHandleCursor(nHandle)); // return TRUE; //} } else /*if(pObjSelected != NULL)*/ { //光标移动到非道对象时的状态 if (pObjSelected->GetType() != KEP_TRACK) { //if (pObjSelected->GetType()!=GDOUBLEFOX_STANDARD && // pObjSelected->GetType()!=GDOUBLEFOX_FAULTPOINT) { int nHandle = pObjSelected->HitTest(lastPoint, dHandleSize, TRUE); if (nHandle != 0) { handle = 2; return TRUE; } //if (nHandle != 0) //{ // SetCursor(GetHandleCursor(nHandle)); // return TRUE; //} } } } if (SetMoveCursor(pWellObj, lastPoint, dHandleSize, pWellObj,handle)) return TRUE; return TRUE; } void CItemSingleWell::OnDraw(CXyDC* pXyDC) { //if(m_bAddObj) //{ // m_pItemSelected->OnDraw(pXyDC); // return; //} CWellPoleView *pView = (CWellPoleView*)GetView(); CWnd* pWnd = CWnd::FromHandle(GetView()->GetHWND()); if(!m_bWellFrame) { DrawHandle(pXyDC); DrawSelected(pXyDC, pWnd); } else { //DrawHandle(pXyDC); //DrawSelected(pXyDC, GetView()); CXyDC xyDC; xyDC = *GetDC(); pView->BeginSelectBmpDC(); xyDC.Create(&pView->GetSelectDC()); DrawHandle(&xyDC); DrawSelected(&xyDC, pWnd); pView->EndItemSelectBmpDC(); // pView->GetMemDC()); pView->m_pDoc->Invalidate(); } } void CItemSingleWell::OnDraw(CXyDC* pXyDC, CDC* pDC) { //if(m_bAddObj) //{ // m_pItemSelected->OnDraw(pXyDC); // return; //} CWellPoleView *pView = (CWellPoleView*)GetView(); CWnd* pWnd = CWnd::FromHandle(GetView()->GetHWND()); if (!m_bWellFrame) { DrawHandle(pXyDC); DrawSelected(pXyDC, pWnd); } else { //DrawHandle(pXyDC); //DrawSelected(pXyDC, GetView()); CXyDC xyDC; xyDC = *GetDC(); pView->BeginSelectBmpDC(); xyDC.Create(&pView->GetSelectDC()); DrawHandle(&xyDC); DrawSelected(&xyDC, pWnd); pView->EndItemSelectBmpDC(); // pView->GetMemDC()); pView->m_pDoc->Invalidate(); } } void CItemSingleWell::DrawMoveSelected(CXyDC *pXyDC,CWnd *pWnd) { CSigmaView* pView = GetView(); CDC *pDC = pView->m_pImgDC; if (this->m_bLDown && pView->GetScreenDC() != NULL) { pDC = pView->GetScreenDC(); // pXyDC->GetDC(); //TRACE("use screendc --------------\r\n"); } //else //{ // TRACE("use imgDC --- --------------\r\n"); //} CPen pen(PS_DOT, 0, RGB(0, 0, 0)); CPen *pOldPen = (CPen *)pDC->SelectObject(&pen); int old = pDC->SetROP2(R2_NOTXORPEN); CWellPoleDoc* pDoc = (CWellPoleDoc *)GetDoc(); CWellPole *pWell = GetWellObject(); BOOL bInclineWell = FALSE; if(m_pWell->GetWellType() == Well_Incline) bInclineWell = TRUE; if(m_bDrag && m_lastPoint!=m_downPoint)//画拖拽框(整体、控制点) { CPoint pt1,pt2; if(selectMode==CItemNestBase::border)//拖道头、井头横线 { if(pWell->GetWellType() == Well_Incline) { CPoint2D tpt1,tpt2,vpt,lastpt,fpt,tpt3,tpt4; if(nDragHandle == 6) {//道头部向量 tpt1.x0 = pWell->GetWellHeadCurve().x[3] ; tpt1.y0 = pWell->GetWellHeadCurve().y[3]; tpt2.x0 = pWell->GetWellHeadCurve().x[2] ; tpt2.y0 = pWell->GetWellHeadCurve().y[2]; } else if(nDragHandle == 2) {//井头部向量 tpt1.x0 = pWell->GetWellHeadCurve().x[0] ; tpt1.y0 = pWell->GetWellHeadCurve().y[0]; tpt2.x0 = pWell->GetWellHeadCurve().x[1] ; tpt2.y0 = pWell->GetWellHeadCurve().y[1]; } if(nDragHandle == 2 || nDragHandle == 6) { lastpt = pXyDC->GetReal(m_lastPoint); fpt.x0 = lastpt.x0 - (tpt2.x0 - tpt1.x0); fpt.y0 = lastpt.y0 - (tpt2.y0 - tpt1.y0);// fpt,lastpt相当于向量tpt1,tpt2同样的向量(可以看作是向量(tpt1,tpt2)偏移到了(fpt,lastPt)位置) vpt = nsWellPoleFunc::GetVPt_Line(tpt1.x0,tpt1.y0,tpt2.x0,tpt2.y0,lastpt.x0,lastpt.y0); //vpt=鼠标点在向量tpt1,tpt2上的投影 double xx = (tpt2.x0 - vpt.x0); double yy = (tpt2.y0 - vpt.y0); tpt3.x0 = fpt.x0 +xx; tpt3.y0 = fpt.y0 + yy;// 将向量(fpt,lastpt)偏移xx,yy后就得到(tpt1,tpt2)在过鼠标点lastPt的平行向量上的投影 tpt4.x0 = lastpt.x0 + xx; tpt4.y0 = lastpt.y0+ yy; pt1 = pXyDC->GetScreen(tpt3); pt2 = pXyDC->GetScreen(tpt4); pDC->MoveTo(pt1); pDC->LineTo(pt2); } } else { if(nDragHandle == 6)//拖道头 { pt1.x = pXyDC->GetScreen(pWell->GetPos().TopLeft()).x; pt2.x = pXyDC->GetScreen(pWell->GetPos().BottomRight()).x; pt1.y = pt2.y = m_lastPoint.y; pDC->MoveTo(pt1); pDC->LineTo(pt2); } else if(nDragHandle == 2)//拖拽井头 { pt1.x = pXyDC->GetScreen(pWell->GetPos().TopLeft()).x; pt2.x = pXyDC->GetScreen(pWell->GetPos().BottomRight()).x; pt1.y = pt2.y = m_lastPoint.y; pDC->MoveTo(pt1); pDC->LineTo(pt2); } } } else { if(m_WellObjSelectlist.GetCount() == 0)//无选中子对象,画井选中状态 { if(selectMode == CItemNestBase::move)//整体 { CRect position = pXyDC->GetScreen(pWell->GetRect()); position.NormalizeRect(); CRect rect = position; CPoint delta = CPoint(m_lastPoint.x-m_downPoint.x,m_lastPoint.y-m_downPoint.y); rect.OffsetRect(delta.x, delta.y); pDC->Rectangle(rect); } else if (nDragHandle!=0)//控制点 { CRect rect = pXyDC->GetScreen(pWell->GetRect()); MoveHandle(nDragHandle, m_lastPoint, rect); pDC->Rectangle(rect); } } else { CWellBaseObj* pObjSelected = m_WellObjSelectlist.GetHead(); BOOL bNoInclineObj = TRUE; CWellBaseObj *pParentObj = pObjSelected->GetParent(); if(pParentObj && bInclineWell) {//判断是斜井道内子对象, if(pParentObj->GetType() == KEP_TRACK) bNoInclineObj = FALSE; //如果是斜井道内对象,就不绘制移动状态 } if(bNoInclineObj) { if(selectMode== CItemNestBase::move)//整体 { if(pObjSelected->GetType()!=KEP_TRACK /*&& */ /* pObjSelected->GetType()!=GDOUBLEFOX_LOGCURVESEGMENT && pObjSelected->GetType()!=GDOUBLEFOX_DISCRETESEGMENT*/) { CWellPole *pWell = GetWellObject(); POSITION pos = m_WellObjSelectlist.GetHeadPosition(); while(pos!=NULL) { CWellBaseObj *pObj = m_WellObjSelectlist.GetNext(pos); CRect position = pXyDC->GetScreen(pObj->GetSelectedRange()); position.NormalizeRect(); CRect rect = position; CPoint delta = CPoint(0,m_lastPoint.y-m_downPoint.y); rect.OffsetRect(delta.x, delta.y); if (pObj->GetType() == KEP_STANDARD ||//标准层道内对象拖拽框 pObj->GetType() == KEP_FAULTPOINT/*||//断点道内对象拖拽框 pObj->GetType() == GDOUBLEFOX_COREWELL*/)//井壁取芯道内对象拖拽框 { pDC->MoveTo(rect.TopLeft()); pDC->LineTo(rect.BottomRight()); } else { pDC->Rectangle(rect); } } } } else if (nDragHandle!=0)//控制点 { if (pObjSelected->GetType()== KEP_TRACK)//道对象 { CTrackObj* pTrackObj = (CTrackObj*)pObjSelected; if(nDragHandle == 4)//左右拖拽 { if(pWell->GetWellType() == Well_Incline) { double h = pWell->GetTrackHeadHigh(); CPoint2D tpt1,tpt2; //tpt1,tpt2是道头底部的横线段 tpt1.x0 = pWell->GetWellHeadCurve().x[2]; tpt1.y0 = pWell->GetWellHeadCurve().y[2]; tpt2.x0 = pWell->GetWellHeadCurve().x[3]; tpt2.y0 = pWell->GetWellHeadCurve().y[3]; if(abs(tpt1.x0-tpt2.x0)>0.0001 && abs(tpt1.y0- tpt2.y0)>0.0001) { CPoint2D tpt3,tpt4,lastpt; lastpt = pXyDC->GetReal(m_lastPoint); tpt3 = nsWellPoleFunc::GetVPt_Line(tpt1.x0,tpt1.y0,tpt2.x0,tpt2.y0,lastpt.x0,lastpt.y0); //tpt3过鼠标点与是道头底部横线向量相交的点 //tpt4 = GetPtAlongVector(tpt3.x0,tpt3.y0,lastpt.x0,lastpt.y0,h,1);//tpt3,tpt4是与道头底部横线垂直的 tpt4 = nsWellPoleFunc::GetPtV_Vector(tpt3.x0,tpt3.y0,tpt1.x0,tpt1.y0,tpt2.x0,tpt2.y0,h,1); pt1 = pXyDC->GetScreen(tpt3); pt2 = pXyDC->GetScreen(tpt4); pDC->MoveTo(pt1); pDC->LineTo(pt2); } } else { CRect8 headrect = pWell->m_HeadRect; pt1.y = pXyDC->GetScreen(headrect).bottom; pt2.y = pXyDC->GetScreen(pWell->GetPos()).bottom; pt1.x = pt2.x = m_lastPoint.x; pDC->MoveTo(pt1); pDC->LineTo(pt2); } } } else if(pObjSelected->GetType()== KEP_STANDARD || pObjSelected->GetType()== KEP_FAULTPOINT || pObjSelected->GetType()== KEP_COREWELL) { //if(GetView()->GetCapture() == pWnd) { CRect rect = pXyDC->GetScreen(pObjSelected->GetRect()); pDC->MoveTo(CPoint(rect.left, m_lastPoint.y)); pDC->LineTo(CPoint(rect.right, m_lastPoint.y)); } } else { //if(GetView()->GetCapture() == pWnd)//绘制拖动的道内对象时需要判断是否当前窗口 { CRect rect = pXyDC->GetScreen(pObjSelected->GetRect()); if (nDragHandle == 2) { if (m_lastPoint.y > rect.bottom) { m_lastPoint.y = rect.bottom; } } else if (nDragHandle == 6) { if (m_lastPoint.y < rect.top) { m_lastPoint.y = rect.top; } } MoveHandle(nDragHandle, m_lastPoint, rect); pDC->Rectangle(rect); } } } } } } } if(!m_bDrag || m_firstPoint==m_downPoint) { CPoint2D point; //画选中状态 if(m_WellObjSelectlist.GetCount() == 0)//无选中子对象,画井选中状态 { //画控制点 point = pWell->GetHandle(4); DrawHandle(pXyDC, point); point = pWell->GetHandle(8); DrawHandle(pXyDC, point); } else { POSITION pos = m_WellObjSelectlist.GetHeadPosition(); CBrush brush; brush.CreateSolidBrush(RGB(95,63,0)); CPen penLine(PS_DOT, 0, RGB(255,0,0)); CPen *pOldPenLine = NULL; CRect rect, oldrect; CWellBaseObj* pObj = NULL; while(pos!=NULL) { pObj = m_WellObjSelectlist.GetNext(pos); rect = pXyDC->GetScreen(pObj->GetRect()); oldrect = CRect(0,0,0,0); if(pObj->GetType()== KEP_TRACK) { CTrackObj* pTrack = (CTrackObj*)pObj; rect = pXyDC->GetScreen(pTrack->m_HeadRect); //TRACE(" draw tarck select "); if(bInclineWell) { //pTrack->DrawSelectRange(pXyDC); std::vector PtsVec; pTrack->GetSelectRange(PtsVec); DrawSelectPolyRange(pXyDC,PtsVec); continue; } } else {//画选中框 TRACE(" draw in obj select \r\n"); CWellBaseObj *pParentObj = pObj->GetParent(); if(pParentObj && bInclineWell) {//判断是斜井道内子对象,就自绘制选中状态 if(pParentObj->GetType() == KEP_TRACK) { CWellBaseObj *pDrawObj = pObj; if(pDrawObj->IsTrackChildTopEnd()) { CInTrackDepthSegment *pTopEndObj = (CInTrackDepthSegment*)pDrawObj; std::vector PtsVec; pTopEndObj->GetSelectRange(PtsVec); DrawSelectPolyRange(pXyDC,PtsVec); continue; } } } rect = pXyDC->GetScreen(pObj->GetSelectedRange()); pOldPenLine = (CPen *)pDC->SelectObject(&penLine); pDC->Rectangle(rect); pDC->SelectObject(pOldPenLine); //画控制点 if(pObj->GetType() != KEP_COREWELL) //取芯数据不画控制点 { point = pObj->GetHandle(2); DrawHandle(pXyDC, point); if(pObj->GetType()!= KEP_STANDARD && pObj->GetType()!= KEP_FAULTPOINT /*&&*/ /*pObj->GetType()!=GDOUBLEFOX_COREWELL*/) { point = pObj->GetHandle(6); DrawHandle(pXyDC, point); } //if(pObj->GetType() == GDOUBLEFOX_LOGCURVESEGMENT || //pObj->GetType() == GDOUBLEFOX_DISCRETESEGMENT) //{ // //写名字 // CFont font; // font.CreateFontIndirect(&m_logFont); // CFont* oldFont=pDC->SelectObject(&font); // CTrackCurveObjBase* pTrack = (CTrackCurveObjBase*)pObj->GetParentObj(); // pDC->TextOut(rect.left, rect.top, pTrack->m_strTrackName); // pDC->SelectObject(oldFont); //} } } //选择范围反色 rect = GetNegativeRect(&rect); rect.left = max(0L,rect.left); rect.right = max(0L, rect.right); rect.top = max(0L, rect.top); rect.bottom = max(0L,rect.bottom); rect.InflateRect(1,1); pDC->DrawDragRect(&rect,CSize(1,1),&oldrect,CSize(1,1),&brush); } } } pDC->SelectObject(pOldPen); pen.DeleteObject(); pDC->SetROP2(old); } void CItemSingleWell::DrawSelected(CXyDC *pXyDC,CWnd *pWnd) { DrawMoveSelected(pXyDC,pWnd); } //BOOL CItemSingleWell::InitPropertyGrid(CXTPPropertyGrid& grid) //{ // if (!this->IsEditState()) // return FALSE; // if(grid.GetSafeHwnd() == NULL) // return FALSE; // grid.ResetContent(); // CWellBaseObj* pObjSelected = NULL; // if(m_WellObjSelectlist.GetCount() == 1) // pObjSelected = m_WellObjSelectlist.GetHead(); // else if(m_WellObjSelectlist.GetCount() > 1) // return FALSE; // if (pObjSelected != NULL) // { // if(m_pItemSelected != NULL) // { // if(((CItemWellBase*)m_pItemSelected)->GetDrawObj()==pObjSelected && !m_bEditTrackInData) // return m_pItemSelected->InitPropertyGrid(grid); // else // { // delete m_pItemSelected; // m_pItemSelected = NULL; // } // } // } // CWellPole *pWell = GetWellObject(); // if(m_pItemSelected != NULL) // delete m_pItemSelected; // m_pItemSelected = NULL; // CPropertyGridItemAdd ItemAdd(NULL); // //基本属性 // CXTPPropertyGridItem *pItem= grid.AddCategory(IDS_STR_WELL_BASICPROPERTY); // ItemAdd.SetItem(pItem); // ItemAdd.AddItemString(IDS_STR_WELL_TITLE, pWell->m_strTitle);//标题 // ItemAdd.AddItemString(IDS_STR_WELL_NAME, pWell->GetWellName());//井名 // //补心海拔 // CString Level; // Level.Format("%.3f", pWell->m_fLevel); // ItemAdd.AddItemString(IDS_STR_WELL_LEVEL, Level); // //深度比例 // CXTPPropertyGridItem* ComboxEditSc; // double startvalue; // startvalue = pWell->m_fProportion; // ComboxEditSc =pItem->AddChildItem(new CXTPPropertyGridItemDouble(IDS_STR_WELL_DEPTHSCALER,startvalue)); // ComboxEditSc->GetConstraints()->AddConstraint("100"); // ComboxEditSc->GetConstraints()->AddConstraint("200"); // ComboxEditSc->GetConstraints()->AddConstraint("500"); // ComboxEditSc->GetConstraints()->AddConstraint("800"); // ComboxEditSc->GetConstraints()->AddConstraint("1000"); // ComboxEditSc->GetConstraints()->AddConstraint("1500"); // ComboxEditSc->GetConstraints()->AddConstraint("2000"); // ComboxEditSc->GetConstraints()->AddConstraint("3000"); // ComboxEditSc->GetConstraints()->AddConstraint("5000"); // ComboxEditSc->GetConstraints()->AddConstraint("8000"); // ComboxEditSc->GetConstraints()->AddConstraint("10000"); // ComboxEditSc->GetConstraints()->AddConstraint("50000"); // ComboxEditSc->GetConstraints()->AddConstraint("80000"); // ComboxEditSc->GetConstraints()->AddConstraint("100000"); // ComboxEditSc->SetFlags(xtpGridItemHasComboButton | xtpGridItemHasEdit); // //CWellSection* pWellSection = (CWellSection*)pWell->GetParentObj(); // //if(pWell->GetWellType() == Well_Incline && pWellSection == NULL) // //{//水平比例尺(多井剖面时不需要这个,直接是剖面的水平比例) // // CInclinedWellObj *pIncWell = (CInclinedWellObj *)pWell; // // startvalue = pIncWell->m_level_proportion; // // ComboxEditSc =pItem->AddChildItem(new CXTPPropertyGridItemDouble(IDS_HORIZONTAL_SCALE,startvalue)); // // ComboxEditSc->GetConstraints()->AddConstraint("100"); // // ComboxEditSc->GetConstraints()->AddConstraint("200"); // // ComboxEditSc->GetConstraints()->AddConstraint("500"); // // ComboxEditSc->GetConstraints()->AddConstraint("800"); // // ComboxEditSc->GetConstraints()->AddConstraint("1000"); // // ComboxEditSc->GetConstraints()->AddConstraint("1500"); // // ComboxEditSc->GetConstraints()->AddConstraint("2000"); // // ComboxEditSc->GetConstraints()->AddConstraint("3000"); // // ComboxEditSc->GetConstraints()->AddConstraint("5000"); // // ComboxEditSc->GetConstraints()->AddConstraint("8000"); // // ComboxEditSc->GetConstraints()->AddConstraint("10000"); // // ComboxEditSc->GetConstraints()->AddConstraint("50000"); // // ComboxEditSc->GetConstraints()->AddConstraint("80000"); // // ComboxEditSc->GetConstraints()->AddConstraint("100000"); // // ComboxEditSc->SetFlags(xtpGridItemHasComboButton | xtpGridItemHasEdit); // //} // ////起始深度 // //if(pWell->GetWellType() == Well_Incline) // { // CString Sdep; // Sdep.Format("%.3f", pWell->m_dSdep); // ItemAdd.AddItemString(IDS_STR_WELL_TOPDEPTH, Sdep); // //结束深度 // CString Edep; // Edep.Format("%.3f", pWell->m_dEdep); // ItemAdd.AddItemString(IDS_STR_WELL_ENDDEPTH, Edep); // } // //左右空白间隔 // CString MarginLR; // MarginLR.Format("%.3f", pWell->m_fMarginLR); // ItemAdd.AddItemString(IDS_STR_WELL_MARGINLR, MarginLR); // //上下空白间隔 // CString MarginTB; // MarginTB.Format("%.3f", pWell->m_fMarginTB); // ItemAdd.AddItemString(IDS_STR_WELL_MARGINTB, MarginTB); // pItem->Expand(); // //if(pWell->GetWellType() != Well_Incline) // //{ // // CXTPPropertyGridItem *pParentGridItem = grid.AddCategory(IDS_STR_WELL_INTERVAL_INFO); // // // // AddWellIntervals(pParentGridItem); // // pParentGridItem->Expand(); // //} // if(pWell->GetWellType() == Well_Incline) // { // CString str; // CInclinedWellPole *pInclineWell = (CInclinedWellPole *)pWell; // str.Format("%.3f", pInclineWell->GetProjectionAngle()); // ItemAdd.AddItemString(IDS_STR_WELL_PROJECTANGLE, str); // } // //刻度间隔 // pItem=grid.AddCategory(IDS_STR_WELL_SPACE_SET); // ItemAdd.SetItem(pItem); // //主刻度间隔 // CString MajorSpace; // MajorSpace.Format("%.3f", pWell->m_fMajorSpace); // ItemAdd.AddItemString(IDS_STR_WELL_MAJORSPACE,MajorSpace); // //副刻度间隔 // CString MinorSpace; // MinorSpace.Format("%.3f", pWell->m_fMinorSpace); // ItemAdd.AddItemString(IDS_STR_WELL_MINORSPACE, MinorSpace); // pItem->Expand(); // //字体 // pItem=grid.AddCategory(IDS_STR_FONT); // ItemAdd.SetItem(pItem); // ItemAdd.AddItemFont(IDS_STR_WELL_FONT, pWell->m_font.m_logFont, pWell->m_font.m_color); // ItemAdd.AddItemFont(IDS_STR_WELL_FONTTRACK, pWell->m_fontTrack.m_logFont,pWell->m_fontTrack.m_color); // ItemAdd.AddItemFont(IDS_STR_WELL_FONTHEADMARK, pWell->m_fontHeadMark.m_logFont, pWell->m_fontHeadMark.m_color); // ItemAdd.AddItemFont(IDS_STR_WELL_FONTGRIDMARK, pWell->m_fontGridMark.m_logFont , pWell->m_fontGridMark.m_color); // pItem->Expand(); // //线属性 // pItem= grid.AddCategory(IDS_STR_WELL_LINEPROPERTY); // ItemAdd.SetItem(pItem); // ItemAdd.AddItemLine1(IDS_STR_WELL_LINE, pWell->m_pen, &pWell->m_pen , LineType_Frame); // ItemAdd.AddItemLine1(IDS_STR_WELL_LINETRACK, pWell->m_penTrack, &pWell->m_penTrack , LineType_Curve); // ItemAdd.AddItemLine1(IDS_STR_WELL_LINEMAJORGRID, pWell->m_penGridMajor, &pWell->m_penGridMajor, LineType_Curve); // ItemAdd.AddItemLine1(IDS_STR_WELL_LINEMINORGRID, pWell->m_penGridMinor, &pWell->m_penGridMinor, LineType_Curve); // pItem->Expand(); // //CItem::InitPropertyGrid(grid); // return TRUE; //} // //void CItemSingleWell::OnInplaceButtonDown(CXTPPropertyGridItem* pItem) //{ // //if(pItem == NULL) // // return; // //if(pItem->GetID() == IDS_STR_WELLDEPTHSETUP && m_pWell != NULL) // //{ // // CDialogWellIntervalSetup dlg; // // for(int ii = 0; ii< m_pWell->GetIntervalVec()->size(); ii++) // // { // // dlg.m_wellTopVec.push_back(m_pWell->GetIntervalTop(ii)); // // dlg.m_wellBottomVec.push_back(m_pWell->GetIntervalBottom(ii)); // // } // // if(dlg.DoModal() == IDOK) // // { // // if(dlg.m_wellTopVec.size()>0) // // { // // m_pWell->GetIntervalVec()->clear(); // // for(int ii =0 ;ii< dlg.m_wellTopVec.size(); ii++) // // { // // m_pWell->AddWellInterval(dlg.m_wellTopVec[ii],dlg.m_wellBottomVec[ii]); // // } // // m_pWell->m_fSdep = m_pWell->GetIntervalTop(0); // // m_pWell->m_fEdep = m_pWell->GetIntervalBottom(m_pWell->GetIntervalVec()->size()-1); // // m_pWell->SetIntervalSpaceDis(0,0); // // m_pWell->ComputeSize(m_pWell->GetAnchorPoint()); // // m_pWell->ReadCurveData(); // // m_pWell->ResetChildPosition(); // // CXTPPropertyGrid &grid = GetPropertyGrid(GetDoc()->GetActiveFrame()->GetMapCtrl()); // // 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_STR_WELL_INTERVAL_INFO) // // { // // pItem1->GetChilds()->Clear(); // // AddWellIntervals(pItem1); // // break; // // } // // } // // 重设滚动条 // // SetScrollBarRange(); // // GetDoc()->Invalidate(); // // } // // } // //} //} // //void CItemSingleWell::SetScrollBarRange() //{ // //CMapFrame2D& mapFrame2D = GetWnd()->GetMapFrame()->GetMapFrame2D(); // //for(int i=mapFrame2D.m_SplitterWnd.GetCount()-1; i>-1; i--) // //{ // // mapFrame2D.m_SplitterWnd[i].pMapWnd2D->SetScrollBarRange(); // //} //} //BOOL CItemSingleWell::OnGridItemChangeValue(CXTPPropertyGridItem* pItem) //{ // if(m_pItemSelected != NULL) // return m_pItemSelected->OnGridItemChangeValue(pItem); // if(!IsEditState()) // return FALSE; // CWellPole *pWell = GetWellObject(); // CRect oldrect = GetDC()->GetScreen(pWell->GetRect()); // CWellPoleDoc* pWellDoc = (CWellPoleDoc*)GetDoc(); // double dOldSdep = pWell->m_dSdep; // double dProp = pWell->m_fProportion; // double dOldProp = pWell->m_fProportion; // double dDelDepth = 0; // switch (pItem->GetID()) // { // case IDS_STR_WELL_NAME://井名 // { // pWell->SetWellName(pItem->GetValue()); // pWell->SetTitle(pWell->GetWellName()); // CXTPPropertyGridItem *pItemFind=FindItem(pItem, IDS_STR_WELL_TITLE); // pItemFind->SetValue(pWell->GetWellName()); // } // break; // case IDS_STR_WELL_TITLE://标题 // { // pWell->SetTitle(pItem->GetValue()); // } // break; // case IDS_STR_WELL_FONT:// 标题字体 // { // ((CXTPPropertyGridItemFont*)pItem)->GetFont(&pWell->m_font.m_logFont); // pWell->m_font.m_color = ((CXTPPropertyGridItemFont*)pItem)->GetColor(); // // pWellDoc->NormalEXTLogFont(pWell->m_font); // //重新设置道内子对象位置 // double dOldWellHead = pWell->m_dHeightWellHead; // pWell->ReSetWellHead(); // double dNewWellHead = pWell->m_dHeightWellHead; // if(fabs(dNewWellHead - dOldWellHead) > ZERO) // { // CPoint2D pt = pWell->GetAnchorPoint(); //pWell->GetPos().TopLeft(); // pt.y0 += (dNewWellHead-dOldWellHead); // pWell->CalculateSize(pt); // } // } // break; // case IDS_STR_WELL_FONTTRACK:// 道头字体 // { // ((CXTPPropertyGridItemFont*)pItem)->GetFont(&pWell->m_fontTrack.m_logFont); // pWell->m_fontTrack.m_color = ((CXTPPropertyGridItemFont*)pItem)->GetColor(); // pWellDoc->NormalEXTLogFont(pWell->m_fontTrack); // pWell->SetFontTrack(pWell->m_fontTrack); // } // break; // case IDS_STR_WELL_FONTHEADMARK:// 道头刻度字体 // { // ((CXTPPropertyGridItemFont*)pItem)->GetFont(&pWell->m_fontHeadMark.m_logFont); // pWell->m_fontHeadMark.m_color = ((CXTPPropertyGridItemFont*)pItem)->GetColor(); // pWellDoc->NormalEXTLogFont(pWell->m_fontHeadMark); // //pWell->SetFontHeadMark(pWell->m_fontHeadMark); // } // break; // case IDS_STR_WELL_FONTGRIDMARK:// 深度刻度字体 // { // ((CXTPPropertyGridItemFont*)pItem)->GetFont(&pWell->m_fontGridMark.m_logFont); // pWell->m_fontGridMark.m_color = ((CXTPPropertyGridItemFont*)pItem)->GetColor(); // pWellDoc->NormalEXTLogFont(pWell->m_fontGridMark); // pWell->SetFontGridMark(pWell->m_fontGridMark); // } // break; // case IDS_STR_WELL_LINETRACK://道框 // { // pWell->SetPenTrack(pWell->m_penTrack); // } // break; // case IDS_STR_WELL_LINEMAJORGRID://主刻格线 // { // pWell->SetPenGrid(pWell->m_penGridMajor, pWell->m_penGridMinor); // } // break; // case IDS_STR_WELL_LINEMINORGRID://次刻格线 // { // pWell->SetPenGrid(pWell->m_penGridMajor, pWell->m_penGridMinor); // } // break; // case IDS_STR_WELL_MAJORSPACE:// 主深度标注间隔 // { // pWell->m_fMajorSpace=atof(pItem->GetValue()); // pWell->SetSpace(pWell->m_fMajorSpace, pWell->m_fMinorSpace); // } // break; // case IDS_STR_WELL_MINORSPACE:// 副深度标注间隔 // { // pWell->m_fMinorSpace=atof(pItem->GetValue()); // pWell->SetSpace(pWell->m_fMajorSpace, pWell->m_fMinorSpace); // } // break; // case IDS_STR_WELL_TOPDEPTH:// 起始深度 // { // double fSdep; // fSdep = atof(pItem->GetValue()); // pWell->m_dSdep=fSdep; // if (fSdep>pWell->m_dEdep) // { // pWell->m_dSdep = pWell->m_dEdep; // } // CWellPoleView* pWellView = (CWellPoleView*)GetView(); // if (pWellView->m_bLockWellHead) // { // pWellView->ReComputeLockWellHead(); // } // else // { // pWell->SetIntervalTop(0, pWell->m_dSdep); // pWell->ReadCurveData(); // pWell->CalculateSize(pWell->GetAnchorPoint()); // pWell->ResetChildPosition(); // CreateVHCursor(); //斜井如果起始深度调整,有可能影响光标变化 // //重设滚动条 // SetScrollBarRange(); // } // } // break; // case IDS_STR_WELL_ENDDEPTH:// 结束深度 // { // double fEdep; // fEdep = atof(pItem->GetValue()); // pWell->m_dEdep=fEdep; // if (fEdepm_dSdep) // { // pWell->m_dEdep = pWell->m_dSdep; // } // CWellPoleView* pWellView = (CWellPoleView*)GetView(); // if (pWellView->m_bLockWellHead) // { // pWellView->ReComputeLockWellHead(); // } // else // { // pWell->SetIntervalBottom(pWell->GetIntervalVec()->size() - 1, pWell->m_dEdep); // pWell->ReadCurveData(); // pWell->CalculateSize(pWell->GetAnchorPoint()); // pWell->ResetChildPosition(); // //重设滚动条 // SetScrollBarRange(); // } // } // break; // case IDS_STR_WELL_MARGINLR:// 左右空白范围 // { // if (atof(pItem->GetValue())>=0) // { // pWell->m_fMarginLR=atof(pItem->GetValue()); // //重设滚动条 // SetScrollBarRange(); // } // } // break; // case IDS_STR_WELL_MARGINTB:// 上下空白范围 // { // if (atof(pItem->GetValue())>=0) // { // pWell->m_fMarginTB=atof(pItem->GetValue()); // //重设滚动条 // SetScrollBarRange(); // } // } // break; // case IDS_STR_WELL_DEPTHSCALER:// 深度比例 // { // pWell->m_fProportion=atof(pItem->GetValue()); // CWellPoleView* pWellView = (CWellPoleView*)GetView(); // if (pWellView->m_bLockWellHead) // { // pWellView->ReComputeLockWellHead(); // } // else // { // pWell->CalculateSize(pWell->GetAnchorPoint()); // //重设滚动条 // SetScrollBarRange(); // } // } // break; // case IDS_HORIZONTAL_SCALE: // { // pWell->m_level_proportion=atof(pItem->GetValue()); // pWell->CalculateSize(pWell->GetAnchorPoint()); //重设滚动条 // SetScrollBarRange(); // } // break; // case IDS_STR_WELL_PROJECTANGLE: // { // if(pWell->GetWellType() == Well_Incline) // { // CInclinedWellPole *pIncWell = (CInclinedWellPole*)pWell; // pIncWell->SetProjectionAngle(atof(pItem->GetValue())); // pIncWell->ComputeTrajectory(); // pIncWell->CalculateSize(pIncWell->GetAnchorPoint()); // //CRaconObj *pRaconObj = ((CMapWellDoc*)GetDoc())->GetWellRaconObj(); // //if(pRaconObj) // // pRaconObj->m_prejectionang = pIncWell->GetProjectionAngle(); // } // } // break; // default: // break; // } // dProp = pWell->m_fProportion; // dDelDepth = pWell->m_dSdep - dOldSdep; // //重新设置道内子对象位置 // if(fabs(dOldProp-dProp) > ZERO || fabs(dDelDepth) > ZERO) // { // pWell->ResetChildPosition(dOldProp, dProp, dDelDepth); // } // GetDoc()->Invalidate(); // return TRUE;//CItem::OnGridItemChangeValue(pItem); //} bool CItemSingleWell::AddTrack() { CWellPole* pWellPole = GetWellObject(); return AddTrackDlg(pWellPole,NULL); } bool CItemSingleWell::AddTrackDlg(CWellPole* pWellObj, CTrackObj* pSelectTrack) { //CDlgAddTrack dlg; //if (dlg.DoModal() != IDOK) //{ // return false; //} //if (dlg.m_SelectTrackTypes.size() == 0) // return false; //TRACKLIST trackList; //CTrackObj* pTrackObj = NULL; //CString strTrack,str; //strTrack.LoadString(IDS_STR_TRACK); //for (int ii = 0; ii < dlg.m_SelectTrackTypes.size(); ii++) //{ // pTrackObj = CTrackObj::CreateTrackObj(ETrackType(dlg.m_SelectTrackTypes[ii].type)); // str = dlg.m_SelectTrackTypes[ii].trackName; // int pos = str.Find(strTrack); // if (pos > 0)//去掉 “道" // str = str.Left(pos); // pTrackObj->m_strTrackName = pTrackObj->m_strTitle = str; // trackList.push_back(pTrackObj); //} //AddTrack(pSelectTrack, trackList); return true; } BOOL CItemSingleWell::AddTrack(CTrackObj* pSelectTrack,int trackType[], int trackNum) { TRACKLIST trackList; CTrackObj* pTrackObj = NULL; CString strTrack,str; strTrack = "道"; for (int ii = 0; ii < trackNum; ii++) { pTrackObj = CTrackObj::CreateTrackObj(ETrackType(trackType[ii])); CWellObjExtendInfo objInfo; CWellObjExtendInfoMgr::GetInstance()->GetTypeInfo(trackType[ii], objInfo); str = objInfo.m_cTypeStr; int pos = str.Find(strTrack); if (pos > 0)//去掉 “道" str = str.Left(pos); pTrackObj->m_strTrackName = pTrackObj->m_strTitle = str; trackList.push_back(pTrackObj); } AddTrack(pSelectTrack, trackList); return TRUE; } CTrackObj* CItemSingleWell::GetSelectedTrack() { if(m_WellObjSelectlist.GetCount() == 1) { CWellBaseObj* pObjSelected = m_WellObjSelectlist.GetHead(); if (pObjSelected->GetType() == KEP_TRACK) { return (CTrackObj*)pObjSelected; } } return NULL; } bool CItemSingleWell::AddTrackAfterSelected() { CTrackObj* pTrackSelected = NULL; CWellBaseObj* pObjSelected = NULL; if(m_WellObjSelectlist.GetCount() > 0) pObjSelected = m_WellObjSelectlist.GetHead(); if (pObjSelected->GetType() == KEP_TRACK) { pTrackSelected = (CTrackObj*)pObjSelected; } if (NULL == pTrackSelected) { return false; } AddTrackDlg(GetWellObject(), pTrackSelected); return true; } void CItemSingleWell::AddTrack(CTrackObj* pTrackSelected, TRACKLIST& trackAddList, BOOL bTrackGroup) {//增加到道的几种情况,(1、井直接加道,加到井最后)(2、选中了一个井道增加,加到此井道的后面) //(3、选中了一组合道中的子道,加入此组合道内选中的井口道)(4、将增加的道与选中的道组合一下,然后将这个组合道加入,这个功能生成多个曲线道时或数据道时可以试用) CTrackObj* pTrackObj = NULL; BOOL bAddTrackCurve = FALSE; TRACKLIST::iterator it = trackAddList.begin(); for(; it != trackAddList.end(); it++) { pTrackObj = *it; if(pTrackObj->GetTrackType()==Track_Curve || pTrackObj->GetTrackType()==Track_Discrete) { bAddTrackCurve = TRUE; break; } } //备份 SetReUnDoAction(!bAddTrackCurve); CWellBaseObj* pObj = NULL; CTrackObj* pTrack = NULL; CWellPole* pWellObj = (CWellPole*)GetWellObject(); CTrackGroup* pGroupParent = pWellObj; BOOL posSlected = FALSE; if(pTrackSelected) { pGroupParent = (CTrackGroup*)pTrackSelected->GetParent(); posSlected = pGroupParent->FindTrack(pTrackSelected,true); if(pGroupParent->GetTrackType() != Track_Group && posSlected && bTrackGroup) {//将trackAddList中的道组合一下,然后加入,并将pTrackSelected也加入其中, pGroupParent = new CTrackGroup(); pGroupParent->SetGroupType(Group_Vertical); pGroupParent->m_font = pWellObj->m_font; pGroupParent->m_pen = pWellObj->m_pen; pGroupParent->m_HeadRect = pTrackSelected->m_HeadRect; pGroupParent->SetRange(pTrackSelected->m_HeadRect); pGroupParent->m_dTrackWidth = pTrackSelected->m_dTrackWidth; pGroupParent->SetParent(pWellObj); pGroupParent->SetParentXY(pWellObj->GetParentXY()); pGroupParent->AddTrack(pTrackSelected); TRACKLIST::const_iterator cit = std::find(pWellObj->GetTrackList().begin(), pWellObj->GetTrackList().end(), pTrackSelected); pWellObj->GetTrackList().insert(cit, pGroupParent); cit = std::find(pWellObj->GetTrackList().begin(), pWellObj->GetTrackList().end(), pTrackSelected); pWellObj->GetTrackList().erase(cit); } } TRACKLIST tracklist; pWellObj->GetAllTrack(&tracklist); //CDataTableConfig dataConfig; CString strTrackType, tableinfo, strcurvename; CString str, strRight; int nNumber = -1; int nIndex = 0; CString strNumber; TRACKLIST::iterator itpos; if (pTrackSelected) { itpos = std::find(pGroupParent->GetTrackList().begin(), pGroupParent->GetTrackList().end(), pTrackSelected); //选中道在新道集中的位置 if (itpos != pGroupParent->GetTrackList().end()) itpos++; //使新道加入选中道的后面 } it = trackAddList.begin(); for(; it!= trackAddList.end(); it++) { //将传入链表中的道加入到新建立的道组中 pTrackObj = *it; pTrackObj->SetParent(pGroupParent); //pTrackObj->SetParentObj(pWellObj); pTrackObj->SetParentXY(pWellObj->GetParentXY()); pTrackObj->SetPenTrack(pWellObj->m_penTrack); pTrackObj->SetPenGrid(pWellObj->m_penGridMajor, pWellObj->m_penGridMinor); pTrackObj->SetFontTrack(pWellObj->m_fontTrack); pTrackObj->SetFontHeadMark(pWellObj->m_fontHeadMark); pTrackObj->SetFontGridMark(pWellObj->m_fontGridMark); pTrackObj->SetSpace(pWellObj->m_fMajorSpace, pWellObj->m_fMinorSpace); /////判断新添加的道与已有道是否重名, 若重名则在添加一个编号 nNumber = -1; str = pTrackObj->m_strTrackName; str.MakeUpper(); TRACKLIST::iterator it1 = tracklist.begin(); for (; it1 != tracklist.end(); it1++) { CWellBaseObj* pObj = *it1; if (pObj->GetType() == KEP_TRACK) { CTrackObj* pTrack = (CTrackObj*)pObj; CString strTrackName = pTrack->m_strTrackName; strTrackName.MakeUpper(); nIndex = strTrackName.Find(str); if(nIndex > -1) { strRight = strTrackName.Right(strTrackName.GetLength()-str.GetLength()-nIndex); nNumber = max(nNumber,atoi(strRight)); } } } if(nNumber > -1) { str.Format("%d", ++nNumber); pTrackObj->m_strTrackName += str; } //添加道 if (posSlected) { pGroupParent->GetTrackList().insert(itpos, pTrackObj); // InsertAfter(posSlected, pTrackObj); pTrackObj->m_dTrackWidth = pTrackSelected->GetWidth(); } else pGroupParent->GetTrackList().push_back(pTrackObj); if (GetWellObject()->GetWellType()==Well_Straight) { str = pTrackObj->m_strTrackName; } else { str = pTrackObj->m_strTrackName+"/"+pWellObj->m_strTrackName; } pTrackObj->m_strTitle = pTrackObj->m_strTrackName; pTrackObj->m_strDataRef = str; //tracklist.AddTail(pTrackObj); } CPoint2D ptf = pWellObj->GetAnchorPoint(); //->GetPos().TopLeft(); pWellObj->CalculateSize(ptf); //this->SetActionAddTrackItem(trackAddList); //自动增加道数据配置,并读取数据 //pos = trackAddList.GetHeadPosition(); //while(pos != NULL) //{ // pTrackObj = trackAddList.GetNext(pos); // GetTrackTable(pTrackObj, strTrackType, tableinfo, strcurvename); // dataConfig.SetTableID(strTrackType); // dataConfig.Read(); // pTrackObj->m_strConfigTable = dataConfig.GetTableDB(); // pTrackObj->m_VecConfigField = dataConfig.GetFieldsDB(); // ImportTrackDataFromDB(pTrackObj, pWellObj, AfxGetGeo()->GetSqlStatementManager()); // pTrackObj->ReadCurveData(); //} GetDoc()->Invalidate(); } CTrackObj* CItemSingleWell::GetLastTrackFromTrackGroup(CTrackGroup* trackGroupObj) { CTrackObj* pTrack = NULL; TRACKLIST::reverse_iterator rit = trackGroupObj->GetTrackList().rbegin(); if (rit != trackGroupObj->GetTrackList().rend()) { pTrack = *rit; if (pTrack->GetTrackType() == Track_Group) { pTrack = GetLastTrackFromTrackGroup((CTrackGroup*)pTrack); } else { return pTrack; } } return pTrack; } CItemWellBase* CItemSingleWell::CreateItem(CWellBaseObj* pObj) { CItemWellBase* pItem = NULL; if(pObj->GetType() == KEP_TRACK) { pItem = new CItemTrack(GetDoc()); pItem->SetPos(GetPos()); pItem->SetDrawObj(pObj); pItem->SetItemWell(this); } else if(pObj->GetParent() != NULL && pObj->GetParent()->GetType() == KEP_TRACK) { pItem = new CItemTrackIn(GetDoc()); pItem->SetPos(GetPos()); ((CItemTrackIn*)pItem)->SetDrawObj(pObj); pItem->SetItemWell(this); } //else if (pObj->GetType()==GDOUBLEFOX_LOGCURVESEGMENT) //{ // pItem = new CItemTrackInCurveSegment(GetWnd()); // pItem->SetPos(GetPos()); // CTrackInCurveSegment* pTrackInCurveSegment = (CTrackInCurveSegment*)pObj; // ((CItemTrackInCurveSegment*)pItem)->SetTracCurve(pTrackInCurveSegment->m_pCurve); // ((CItemTrackInCurveSegment*)pItem)->SetDrawObj(pObj); // pItem->SetItemWell(this); //} //else if(pObj->GetType() == GDOUBLEFOX_MARK) //{ // //pItem = new CItemWellMark(GetWnd()); // //pItem->SetPos(GetPos()); // //((CItemWellMark*)pItem)->SetDrawObj(pObj); // //pItem->SetItemWell(this); //} //else if (pObj->GetType()==GDOUBLEFOX_TEXTBOX) //{ // //pItem = new CItemTextBox(GetWnd()); // //pItem->SetPos(GetPos()); // //((CItemTextBox*)pItem)->SetDrawObj(pObj); // //pItem->SetItemWell(this); //} return pItem; } void CItemSingleWell::DeleteItem() { CItemWellBase::DeleteItem(); CWellPole *pWell = GetWellObject(); m_WellObjSelectlist.RemoveAll(); } void CItemSingleWell::CreateDragImage() { CWellBaseObj* pObjSelected = NULL; if(m_WellObjSelectlist.GetCount() == 1) pObjSelected = m_WellObjSelectlist.GetHead(); if(pObjSelected == NULL) return; CRect rect = GetDC()->GetScreen(pObjSelected->GetRect()); CRect inclineWellRect ; BOOL bTrack = FALSE; CPoint plgPts[4]; if(pObjSelected->GetType() == KEP_TRACK) { CTrackObj *pTrackObj = (CTrackObj *)pObjSelected; //rect = GetDC()->GetScreen(pTrackObj->m_HeadRect); rect = GetDC()->GetScreen(pTrackObj->GetDragMoveRect()); // (pTrackObj->GetRect()); //绘制大拖动框 rect.InflateRect(2, 2, 2, 2); if(m_pWell->GetWellType() == Well_Incline) { CPoint topleftPt,botRightPt,tpt; if(pTrackObj->GetTrackType() == Track_Group) { /* CPoint2D pospts[4]; pospts[0].x0 = pTrackObj->m_HeadRect.left; pospts[0].y0 = pTrackObj->m_HeadRect.top; pospts[1].x0 = pTrackObj->m_HeadRect.right; pospts[1].y0 = pTrackObj->m_HeadRect.top; pospts[2].x0 = pTrackObj->m_HeadRect.right; pospts[2].y0 = pTrackObj->m_HeadRect.bottom; pospts[3].x0 = pTrackObj->m_HeadRect.left; pospts[3].y0 = pTrackObj->m_HeadRect.bottom; for(int ii = 0; ii< 4; ii++) { pospts[ii].RotatePt(m_pWell->GetTraceStartPt().x0,m_pWell->GetTraceStartPt().y0,m_pWell->GetHeadLineAngle()); } botRightPt = topleftPt = GetDC()->GetScreen(pospts[0].x0,pospts[0].y0); plgPts[0] = botRightPt; for(int ii =1;ii<4; ii++) { tpt = GetDC()->GetScreen(pospts[ii].x0,pospts[ii].y0); plgPts[ii] = tpt; if(tpt.x botRightPt.x) botRightPt.x = tpt.x; if(tpt.y< topleftPt.y) topleftPt.y = tpt.y; if(tpt.y>botRightPt.y) botRightPt.y = tpt.y; inclineWellRect.SetRect(topleftPt,botRightPt); }*/ } else { botRightPt = topleftPt = GetDC()->GetScreen(pTrackObj->m_HeadCurve.x[0],pTrackObj->m_HeadCurve.y[0]); plgPts[0] = botRightPt; for(int ii =1;ii<4; ii++) { tpt = GetDC()->GetScreen(pTrackObj->m_HeadCurve.x[ii],pTrackObj->m_HeadCurve.y[ii]); plgPts[ii] = tpt; if(tpt.x botRightPt.x) botRightPt.x = tpt.x; if(tpt.y< topleftPt.y) topleftPt.y = tpt.y; if(tpt.y>botRightPt.y) botRightPt.y = tpt.y; inclineWellRect.SetRect(topleftPt,botRightPt); } } bTrack = TRUE; } } //else if (pObjSelected->GetType()==GDOUBLEFOX_LOGCURVESEGMENT) //{ // CTrackInCurveSegment* pSegment = (CTrackInCurveSegment*)pObjSelected; // rect = GetDC()->GetScreen(pSegment->GetPos()); //} //else if (pObjSelected->GetType()==GDOUBLEFOX_DISCRETESEGMENT) //{ // CTrackInDiscreteSegment* pDiscreteSegment = (CTrackInDiscreteSegment*)pObjSelected; // rect = GetDC()->GetScreen(pDiscreteSegment->GetPos()); //} else return; if(m_pWell->GetWellType() == Well_Incline) m_rectImage = inclineWellRect; else m_rectImage = rect; CBitmap* pBitmap = GetBitmap(m_pScreenDC/*GetDC()->GetDC()*/, rect, inclineWellRect, bTrack, (CPoint*)plgPts); if (pBitmap == NULL) return; //// Create a drag image m_pDragImage = new CImageList;//m_wndList.CreateDragImage(m_nDragIndex, &pt); m_pDragImage->Create(m_rectImage.Width(), m_rectImage.Height(), ILC_COLOR24|ILC_MASK,0,0); ASSERT(m_pDragImage); //make sure it was created //We will call delete later (in LButtonUp) to clean this up m_pDragImage->Add(pBitmap, RGB(255,255,255)); delete pBitmap; } CBitmap* CItemSingleWell::GetBitmap(CDC* pdc,CRect wellHRect,CRect ilnWellHRect,BOOL bTrack,CPoint *plgPts) { CWellBaseObj* pObjSelected = NULL; if(m_WellObjSelectlist.GetCount() == 1) pObjSelected = m_WellObjSelectlist.GetHead(); CRect rect = wellHRect; //m_rectImage; CDC dc; BOOL b = dc.CreateCompatibleDC(pdc); if (b == FALSE) { DWORD error = GetLastError(); return NULL; } CXyDC xyDC; xyDC = *GetDC(); xyDC.Create(&dc); CRect rt = CRect(0, 0, rect.Width(), rect.Height()); int planes = dc.GetDeviceCaps(PLANES); int bpp = dc.GetDeviceCaps(BITSPIXEL); CBitmap *pBitmap,*pOldBitmap; pBitmap=new CBitmap(); pBitmap->CreateBitmap(rt.Width(),rt.Height(),planes,bpp,NULL); pOldBitmap = dc.SelectObject(pBitmap); dc.FillSolidRect(0,0,rt.Width(),rt.Height(),RGB(255,255,255)); if(pObjSelected!=NULL) { CRect8 rectReal = xyDC.GetReal(rect); xyDC.Extend(rectReal,rt,EXTEND_MODE_CENTER); if (pObjSelected->GetType()== KEP_TRACK) { CTrackObj* pTrackObj = (CTrackObj*)pObjSelected; pTrackObj->DrawActiveTrackHead(&xyDC); GDFLOGPEN pen = pTrackObj->m_pen; pen.m_color = RGB(230, 35, 35); pen.m_dWidth = 4; CRect8 rect = pTrackObj->GetDragMoveRect(); // pTrackObj->GetRect();//绘制大拖动框 xyDC.DrawRect(rect, pen); } //else if (pObjSelected->GetType()==GDOUBLEFOX_LOGCURVESEGMENT || // pObjSelected->GetType() ==GDOUBLEFOX_DISCRETESEGMENT) //{ // pObjSelected->Draw(xyDC); //} } dc.SelectObject(pOldBitmap); if(m_pWell->GetWellType() == Well_Incline && bTrack) { CRect ilnrt = CRect(0, 0, ilnWellHRect.Width(), ilnWellHRect.Height()); CBitmap *pplgBitmap,*pplgOldBitmap; pplgBitmap=new CBitmap(); pplgBitmap->CreateBitmap(ilnrt.Width(),ilnrt.Height(),planes,bpp,NULL); pplgOldBitmap = dc.SelectObject(pplgBitmap); dc.FillSolidRect(0,0,ilnrt.Width(),ilnrt.Height(),RGB(255,255,255)); CDC memDC; memDC.CreateCompatibleDC(&dc); CBitmap maskBmp; ZeroMemory((void*)(&maskBmp),sizeof(maskBmp)); memDC.SelectObject(pBitmap); CPoint points[3]; points[0] = plgPts[0]; points[0].Offset(-ilnWellHRect.left,-ilnWellHRect.top); points[1] = plgPts[1]; points[1].Offset(-ilnWellHRect.left,-ilnWellHRect.top); points[2] = plgPts[3]; points[2].Offset(-ilnWellHRect.left,-ilnWellHRect.top); dc.PlgBlt(points,&memDC,0,0,wellHRect.Width(),wellHRect.Height(),maskBmp,0,0); dc.SelectObject(&pplgOldBitmap); memDC.Detach(); //maskBmp.DeleteObject(); delete pBitmap; pBitmap = pplgBitmap; } dc.Detach(); return pBitmap; } void CItemSingleWell::TrackLeftGroup() { CWellPole* pWellObj = GetWellObject(); CTrackObj* pTrackObj = NULL; CWellBaseObj* pObjSelected = NULL; if(m_WellObjSelectlist.GetCount() == 1) pObjSelected = m_WellObjSelectlist.GetHead(); if (pObjSelected->GetType()== KEP_TRACK) { pTrackObj = (CTrackObj*)pObjSelected; } if(pTrackObj==NULL) return; CTrackGroup* pParentGroup = (CTrackGroup*)pTrackObj->GetParent(); // GetParentGroup(); POSITION posFind = NULL; POSITION pos =NULL; TRACKLIST::iterator it = pParentGroup->GetTrackList().begin(); if (it == pParentGroup->GetTrackList().end()) return; if (*it == pTrackObj) // 如果当前选中道左侧没有道则返回 return; SetReUnDoAction(); pWellObj = GetWellObject();//调用了undoaction需要重新获得一下井柱对象指针 TRACKLIST::reverse_iterator rit = std::find(pParentGroup->GetTrackList().rbegin(), pParentGroup->GetTrackList().rend(), pTrackObj); rit++; CTrackObj* pTrackLeft = *rit; // CTrackGroup* pGroupNew = new CTrackGroup; pGroupNew->SetGroupType(Group_Horizon); pGroupNew->m_font = m_pWell->m_fontTrack; pGroupNew->m_pen = m_pWell->m_penTrack; pGroupNew->m_dTrackWidth = pTrackLeft->m_dTrackWidth + pTrackObj->m_dTrackWidth; pGroupNew->SetParent(pTrackObj->GetParent()); pGroupNew->SetParentXY(pTrackObj->GetParentXY()); pGroupNew->AddTrack(pTrackLeft); pGroupNew->AddTrack(pTrackObj); TRACKLIST::const_iterator cit = std::find(pParentGroup->GetTrackList().begin(), pParentGroup->GetTrackList().end(), pTrackLeft); pParentGroup->GetTrackList().insert(cit, pGroupNew); //插入,增加都使用正向迭代器 pParentGroup->GetTrackList().erase(cit); cit = std::find(pParentGroup->GetTrackList().begin(), pParentGroup->GetTrackList().end(), pTrackObj); pParentGroup->GetTrackList().erase(cit); CPoint2D point = pWellObj->GetAnchorPoint() ;//pWellObj->GetPos().TopLeft(); pWellObj->CalculateSize(point); } void CItemSingleWell::TrackRightGroup() { CWellPole* pWellObj = GetWellObject(); CTrackObj* pTrackObj = NULL; CWellBaseObj* pObjSelected = NULL; if(m_WellObjSelectlist.GetCount() == 1) pObjSelected = m_WellObjSelectlist.GetHead(); if (pObjSelected->GetType()== KEP_TRACK) { pTrackObj = (CTrackObj*)pObjSelected; } if(pTrackObj==NULL) return; CTrackGroup* pParentGroup = (CTrackGroup*)pTrackObj->GetParent(); TRACKLIST::reverse_iterator rit = pParentGroup->GetTrackList().rbegin(); if (rit == pParentGroup->GetTrackList().rend()) return; if (*rit == pTrackObj) // 如果当前选中道右侧没有道则返回 return; SetReUnDoAction(); pWellObj = GetWellObject(); TRACKLIST::iterator it = std::find(pParentGroup->GetTrackList().begin(), pParentGroup->GetTrackList().end(), pTrackObj); TRACKLIST::iterator it1 = it; it++; CTrackObj* pTrackRight = *it; // pParentGroup->GetTrackList()->GetAt(pos); CTrackGroup* pGroupNew = new CTrackGroup; pGroupNew->SetGroupType(Group_Horizon); pGroupNew->m_font = m_pWell->m_fontTrack; pGroupNew->m_pen = m_pWell->m_penTrack; pGroupNew->m_dTrackWidth = pTrackRight->m_dTrackWidth + pTrackObj->m_dTrackWidth; pGroupNew->SetParent(pTrackObj->GetParent()); pGroupNew->SetParentXY(pTrackObj->GetParentXY()); pGroupNew->AddTrack(pTrackObj); pGroupNew->AddTrack(pTrackRight); pParentGroup->GetTrackList().insert(it1,pGroupNew); pParentGroup->GetTrackList().erase(it1); pParentGroup->GetTrackList().erase(it); CPoint2D point = pWellObj->GetAnchorPoint() ; pWellObj->CalculateSize(point); } void CItemSingleWell::Clear() { if(m_pItemSelected != NULL) delete m_pItemSelected; m_pItemSelected = NULL; m_WellObjSelectlist.RemoveAll(); } int CItemSingleWell::DeleteSelection(void) { //if(GetDrawObj() == NULL) // return; if (m_WellObjSelectlist.GetCount() == 0) { return 0; } if (m_pItemSelected!=NULL) { SetReUnDoAction(); if (GetWellObject()!=NULL&&m_WellObjSelectlist.GetCount()>0 && m_pItemSelected->GetType() == ITEM_TRACKIN) { delete m_pItemSelected; CItemTrackIn *pItemTrackIn = new CItemTrackIn(GetDoc()); m_pItemSelected = pItemTrackIn; POSITION pos = m_WellObjSelectlist.GetHeadPosition(); while(pos!=NULL) { CWellBaseObj* pObj = m_WellObjSelectlist.GetNext(pos); pItemTrackIn->SetDrawObj(pObj); pItemTrackIn->DeleteSelection(); } } else ((CItemWellBase*)m_pItemSelected)->DeleteSelection(); /* CXTPPropertyGrid &grid = GetPropertyGrid(GetDoc()->GetMainFrame()); InitPropertyGrid(grid); */ } else { if(m_WellObjSelectlist.GetCount() == 0) delete GetWellObject(); else { SetReUnDoAction(FALSE); POSITION pos = m_WellObjSelectlist.GetHeadPosition(); while(pos!=NULL) { CWellBaseObj* pObj = m_WellObjSelectlist.GetNext(pos); if(pObj->GetType()==KEP_TRACK) { CItemTrack itemtrack(GetDoc()); itemtrack.SetDrawObj(pObj); itemtrack.DeleteSelection(); } } //TRACKLIST trackList; //POSITION pos = m_WellObjSelectlist.GetHeadPosition(); //while(pos!=NULL) //{ // CWellBaseObj* pObj = m_WellObjSelectlist.GetNext(pos); // if(pObj->GetType()==KEP_TRACK) // { // trackList.push_back((CTrackObj*)pObj); // } //} //SetActionDeleteTrackItem(trackList); } } m_WellObjSelectlist.RemoveAll(); GetDoc()->Invalidate(); return 1; } void CItemSingleWell::GetTrackTable(CTrackObj* pTrackObj, CString &strTrackType, CString& table, CString& curve) { switch(pTrackObj->GetTrackType()) { case Track_Trajectory: break; case Track_Block: break; case Track_Facies: break; case Track_ValidThick: break; case Track_Bury: break; case Track_Curve: { strTrackType = "Curve"; curve = ((CTrackCurveBase*)pTrackObj)->m_strTrackName; } break; case Track_Discrete: { strTrackType = "Discrete"; curve = ((CTrackCurveBase*)pTrackObj)->m_strTrackName; } break; case Track_Stratum: { strTrackType = "Stratum"; } break; case Track_SandLayer: { strTrackType = "SandLayer"; } break; case Track_OilLayerGroup: { strTrackType = "OilLayerGroup"; } break; case Track_ProduceLayer: { strTrackType = "ProduceLayer"; } break; case Track_ReserveUnit: { strTrackType = "ReserveUnit"; } break; case Track_StandardLayer: { strTrackType = "StandardLayer"; } break; case Track_Lith: { strTrackType = "Lith"; } break; case Track_CorePosition: { strTrackType = "CorePosition"; } break; case Track_CoreWell: { strTrackType = "CoreWell"; } break; case Track_OilTest: { strTrackType = "OilTest"; } break; case Track_Result: { strTrackType = "Result"; } break; case Track_Picture: { strTrackType = "Picture"; } break; case Track_Text: { strTrackType = "Text"; } break; case Track_Symbol: { strTrackType = "Symbol"; } break; case Track_Sample: { strTrackType = "Sample"; } break; case Track_Shot: { strTrackType = "Shot"; } break; case Track_TestExtraction: { strTrackType = "TestExtraction"; } break; case Track_CementingQuality: { strTrackType = "CementingQuality"; } break; case Track_CementingQualityCurve: { strTrackType = "CementingQualityCurve"; } break; case Track_ProducedFluidSection: { strTrackType = "ProducedFluidSection"; } break; case Track_WaterAbsorptionSection: { strTrackType = "WaterAbsorptionSection"; } break; case Track_WaveShape: { strTrackType = "WaveShape"; } break; case Track_FaultPoint: strTrackType = "FaultPoint"; break; case Track_VdlImage: strTrackType = "well_wavetrace"; break; case Track_WaveCurve: strTrackType = "well_wavetrace"; break; default: break; } } void CItemSingleWell::AddTrackInObjData() { if(NULL == m_pItemSelected) return; //if(m_pItemSelected->GetType() == ITEM_TRACK) //{ // CItemTrack *pItemTrack = static_cast(m_pItemSelected); // CTrackObj *pTrackObj = static_cast(pItemTrack->GetDrawObj()); // if(NULL == pTrackObj) // return; // CString strTitle; // strTitle.LoadString(IDS_STRING_PANE_PROPERTIES); // CString strTrackType; // CString curve; // CString table; // vectorfieldsID; // CDataTableConfig TempDataConfig; // // GetTrackTable(pTrackObj, strTrackType, table, curve); // ::AfxGetApp()->BeginWaitCursor(); // //获取图道的数据表、字段 // TempDataConfig.SetTableID(strTrackType); // TempDataConfig.Read(); // table = TempDataConfig.GetTableBase(); // /// 从文件中读取相关类型道的配置 // CPropertySheet sheet("["+table+"] " + strTitle); // sheet.m_psh.dwFlags |= PSH_NOAPPLYNOW; // StringVectorSet datas; // pTrackObj->GetChildDatas(datas); // CDataTrackPropertyPage dataPage(GetWellObject(),pTrackObj, datas, table, curve); // dataPage.SetDataConfig(TempDataConfig); // /////曲线道时,冲库中得到曲线所有的施工号和版本号 // //if (strTrackType == "Curve" && AfxGetGeo()->GetSqlStatementManager()->HasDB()) // //{ // // CWellPole* pWellObj = static_cast(pTrackObj->GetParentObj()); // // CString strWellName = pWellObj->GetWellName(); // // CTrackCurveObjBase* pTrackCurve = (CTrackCurveObjBase*)pTrackObj; // // CString strCurveName = pTrackCurve->m_strTrackName; // // GetOperationAndVersion(strWellName, strCurveName, dataPage.m_Vecperation, dataPage.m_VecrVersion); // // dataPage.m_bCurve = TRUE; // //} // sheet.AddPage(&dataPage); // ////如果是岩样道则添加第二个page页 // CDataTableConfig DataConfigTopAndBot; // DataConfigTopAndBot.SetTableID("Text"); // DataConfigTopAndBot.Read(); // CString tableTopAndBot = DataConfigTopAndBot.GetTableBase(); // vectorfieldsIDTopAndBot; // StringVectorSet datasTopAndBot; // if (strTrackType == "Sample") // { // CTrackSample* pTrackSample = (CTrackSample*)pTrackObj; // pTrackSample->GetChildTopAndBotDatas(datasTopAndBot); // } // CDataTrackPropertyPage dataPageTopAndBot(GetWellObject(),pTrackObj, datasTopAndBot, tableTopAndBot, curve); // dataPageTopAndBot.SetDataConfig(DataConfigTopAndBot); // if (strTrackType == "Sample") // { // sheet.AddPage(&dataPageTopAndBot); // } // if(sheet.DoModal() ==IDOK && (dataPage.IsChangeData() || dataPageTopAndBot.IsChangeData())) // { // if(pTrackObj->GetTrackType()==Track_Curve || pTrackObj->GetTrackType()==Track_Discrete) // SetReUnDoAction(FALSE); // else // SetReUnDoAction(); // fieldsID = TempDataConfig.GetFieldsID(); // datas = dataPage.GetContent(); // fieldsIDTopAndBot = DataConfigTopAndBot.GetFieldsID(); // datasTopAndBot = dataPageTopAndBot.GetContent(); // BuildTrackInObj(pTrackObj, fieldsID, datas,fieldsIDTopAndBot,datasTopAndBot); // ///////记录选择的表名,若果是曲线道则记录选择的施工号和版本号 // if (pTrackObj->GetTrackType() == Track_Curve) // { // CTrackCurve *pTrackCurve = (CTrackCurve*)pTrackObj; // //pTrackCurve->m_strOperationNum = dataPage.GetOperationNum(); // //pTrackCurve->m_strVersionNum = dataPage.GetVersionNum(); // } // else if (pTrackObj->GetTrackType() != Track_Curve && pTrackObj->GetTrackType() != Track_Discrete && // pTrackObj->GetTrackType() != Track_Sample) // { // pTrackObj->m_strConfigTable = dataPage.GetDBTable(); // pTrackObj->m_VecConfigField = dataPage.GetDBFields(); // } // GetDoc()->Invalidate(); // } //} } void CItemSingleWell::BuildTrackInObj(CTrackObj* pTrackObj, double *pDepth,double *pData,int datanum) { CWellPole* pWellObj = pTrackObj->GetWell(); //static_cast(pTrackObj->GetParent()); if(NULL == pWellObj) return; if(datanum == 0) return; pTrackObj->ClearChildren(); pTrackObj->BuidChildObject(pDepth,pData,datanum); } void CItemSingleWell::BuildTrackInObj(CTrackObj* pTrackObj, vector &fields, StringVectorSet &datas, vector &fields2,StringVectorSet &vecdatas2) { CWellPole* pWellObj = pTrackObj->GetWell(); // static_cast(pTrackObj->GetParent()); if(NULL == pWellObj) return; if (datas.size() == 0 && vecdatas2.size() == 0) { if (pTrackObj->GetTrackType() == Track_Curve) { CTrackCurve* pTrackCurve = (CTrackCurve*)pTrackObj; pTrackCurve->ClearCurveData(); } else pTrackObj->ClearChildren(); GetDoc()->Invalidate(); return; } // 剖面情况下解释结论道和地层道导入数据时删除相关连层 //if (pTrackObj->GetTrackType() == Track_Result || pTrackObj->GetTrackType() == Track_Stratum) //{ // CWellSection* pWellSection = (CWellSection*)pWellObj->GetParentObj(); // if (NULL != pWellSection) // { // POSITION pos = pWellSection->m_BendList.GetHeadPosition(); // while(NULL != pos) // { // CWellBaseObj* pObj = (CDrawObj*)pWellSection->m_BendList.GetNext(pos); // if (pObj->GetType() == GDOUBLEFOX_SECTIONBEND) // { // CBendObj* pBend = (CBendObj*)pObj; // CTrackObj* pTrackLeft = NULL; // CTrackObj* pTrackRight = NULL; // pTrackLeft = (CTrackObj*)pBend->m_pLayerLeft->GetParentObj(); // if (pBend->m_pLayerRight != NULL) // { // pTrackRight = (CTrackObj*)pBend->m_pLayerRight->GetParentObj(); // } // if (pTrackRight == pTrackObj || pTrackLeft ==pTrackObj) // { // pWellSection->DeleteBend(pBend); // GetDoc()->Invalidate(pWellSection); // } // } // } // } //} //清空道内的子对象 pTrackObj->ClearChildren(); if (pTrackObj->GetTrackType() != Track_Sample) { pTrackObj->BuidChildObject(fields,datas); } else { if(vecdatas2.size() == 0) return; CTrackSample* pTrackSample = (CTrackSample*)pTrackObj; pTrackSample->BuidChildObject(fields,datas,fields2, vecdatas2); } } void CItemSingleWell::ApplingWellDbTemplate() { //CDlgApplyTemplate dlg("WellColumn"); // //if(dlg.DoModal() == IDCANCEL) // return; //if(dlg.m_pMemFile) // ApplingFileTemplate(*dlg.m_pMemFile); } void CItemSingleWell::ApplingFileTemplate(CFile &fr) { CWellPole *pWellObj = GetWellObject(); SetReUnDoAction(FALSE); //备份井内道对象 //CTrackList tracklist; TRACKLIST tracklist; tracklist.assign(pWellObj->GetTrackList().begin(), pWellObj->GetTrackList().end()); pWellObj->GetTrackList().clear(); //POSITION pos = pWellObj->GetTrackList()->GetTailPosition(); //while (pos!=NULL) //{ // CTrackObj* pTrackObj = (CTrackObj*)pWellObj->GetTrackList()->GetPrev(pos); // tracklist.AddHead(pTrackObj); //} //pWellObj->GetTrackList()->RemoveAll(); CString strWellTitle = pWellObj->m_strTitle; CString strWellName = pWellObj->GetWellName(); double fLevel = pWellObj->m_fLevel; double topDepth = pWellObj->m_dSdep; double endDepth = pWellObj->m_dEdep; double top = pWellObj->GetPos().top; double left = pWellObj->GetPos().left; double proportion = pWellObj->m_fProportion; double dOldTrackHead = pWellObj->m_dHeightTrackHead; double dOldWellHead = pWellObj->m_dHeightTrackHead; std::vector oldWellIntervalVec; oldWellIntervalVec.insert(oldWellIntervalVec.begin(),pWellObj->GetIntervalVec()->begin(),pWellObj->GetIntervalVec()->end()); AfxGetPublicFunction()->SetCodeType(CODE_GB2321); if(pWellObj->ReadPCG(fr, -1) == 0) { //恢复道备份 TRACKLIST::reverse_iterator rit = tracklist.rbegin(); for (; rit != tracklist.rend(); rit++) { pWellObj->GetTrackList().push_front(*rit); } tracklist.clear(); //POSITION pos = tracklist.GetTailPosition(); //while (pos!=NULL) //{ // CTrackObj* pTrackObj = (CTrackObj*)tracklist.GetPrev(pos); // pWellObj->GetTrackList()->AddHead(pTrackObj); //} //tracklist.RemoveAll(); //AfxGetPublicFunction()->SetCodeType((DWORD)::GetPreferences().WorkaroundSave.m_nCodeMode); return ; } else { pWellObj->m_strTitle = strWellTitle; pWellObj->SetWellName(strWellName); pWellObj->m_fLevel = fLevel; pWellObj->GetPos().left = left; pWellObj->GetPos().top = top; pWellObj->m_dSdep = topDepth; pWellObj->m_dEdep = endDepth; pWellObj->GetIntervalVec()->clear(); pWellObj->GetIntervalVec()->insert(pWellObj->GetIntervalVec()->begin(),oldWellIntervalVec.begin(),oldWellIntervalVec.end()); pWellObj->m_fProportion = proportion; pWellObj->ReSetWellHead(); pWellObj->CalculateSize(pWellObj->GetPos().TopLeft()); //应用井模板 TRACKLIST::iterator it = tracklist.begin(); for (; it != tracklist.end(); it++) pWellObj->GetTemplateList().push_front(*it); pWellObj->ApplingTemplate(TRUE,dOldTrackHead,dOldWellHead); ImportDataAll(pWellObj, FALSE); } //AfxGetPublicFunction()->SetCodeType((DWORD)::GetPreferences().WorkaroundSave.m_nCodeMode); } void CItemSingleWell::ApplingWellTemplate() { CFileDialog dlg(TRUE,NULL,"", OFN_EXPLORER|OFN_ENABLESIZING|OFN_HIDEREADONLY|OFN_ALLOWMULTISELECT, "Well Template (*.dml)|*.dml|",NULL,0); CString filepathstr; if (dlg.DoModal()!=IDOK) { return; } //保存路径 filepathstr=dlg.GetPathName(); CString ext = dlg.GetFileExt(); if(ext == "dml") //dml格式 { CStdioFile fr; if(!fr.Open(filepathstr,CFile::modeRead)) return; ApplingFileTemplate(fr); //CWellPole *pWellObj = GetWellObject(); //SetReUnDoAction(); ////备份井内道对象 //CTrackList tracklist; //POSITION pos = pWellObj->GetTrackList()->GetTailPosition(); //while (pos!=NULL) //{ // CTrackObj* pTrackObj = (CTrackObj*)pWellObj->GetTrackList()->GetPrev(pos); // tracklist.AddHead(pTrackObj); //} //pWellObj->GetTrackList()->RemoveAll(); //CString strWellTitle = pWellObj->m_strTitle; //CString strWellName = pWellObj->GetWellName(); //double fLevel = pWellObj->m_fLevel; //double topDepth = pWellObj->m_fSdep; //double endDepth = pWellObj->m_fEdep; //double top = pWellObj->GetPos().top; //double left = pWellObj->GetPos().left; //double proportion = pWellObj->m_fProportion; //double dOldTrackHead = pWellObj->m_fHighTrackHead; //double dOldWellHead = pWellObj->m_fHighWellHead; //AfxGetPublicFunction()->SetCodeType(CODE_GB2321); //if(pWellObj->ReadDML(fr, -1) == 0) //{ // //恢复道备份 // POSITION pos = tracklist.GetTailPosition(); // while (pos!=NULL) // { // CTrackObj* pTrackObj = (CTrackObj*)tracklist.GetPrev(pos); // pWellObj->GetTrackList()->AddHead(pTrackObj); // } // tracklist.RemoveAll(); // AfxGetPublicFunction()->SetCodeType((DWORD)::GetPreferences().WorkaroundSave.m_nCodeMode); // return ; //} //else //{ // pWellObj->m_strTitle = strWellTitle; // pWellObj->SetWellName(strWellName); // pWellObj->m_fLevel = fLevel; // pWellObj->GetPos().left = left; // pWellObj->GetPos().top = top; // pWellObj->m_fSdep = topDepth; // pWellObj->m_fEdep = endDepth; // pWellObj->m_fProportion = proportion; // pWellObj->ReSetWellHead(); // pWellObj->ComputeSize(pWellObj->GetPos().TopLeft()); // //应用井模板 // pos = tracklist.GetHeadPosition(); // while(pos != NULL) // pWellObj->GetTemplateList().AddHead(tracklist.GetNext(pos)); // pWellObj->ApplingTemplate(TRUE,dOldTrackHead,dOldWellHead); //} //AfxGetPublicFunction()->SetCodeType((DWORD)::GetPreferences().WorkaroundSave.m_nCodeMode); //fr.Close(); } } void CItemSingleWell::ImportDataAll(CWellPole* pWell, BOOL bReplace) { AfxGetMainWnd()->BeginWaitCursor(); if (NULL == pWell) { return; } CString strWellName = pWell->GetWellName(); //SetReUnDoAction(FALSE); //Db::CSqlStatementManager *pSqlManager = AfxGetGeo()->GetSqlStatementManager(); // ////如果是斜井,读取井斜数据 //if(pWell->GetWellType() == Well_Incline) //{ // if(pSqlManager->HasDB()) // { // vector fields; // //fields.push_back("well_name"); // fields.push_back("inclined_deep"); // fields.push_back("angle"); // fields.push_back("azimuth"); // fields.push_back("vertical_deep"); // fields.push_back("x_offset"); // fields.push_back("y_offset"); // CDataBinderWell BinderWell("well_deviation",fields,pWell->GetWellName()); // BinderWell.AttachInput(AfxGetGeo()->GetSqlStatementManager()); // BinderWell.ReadData(); // StringVectorSet data; // BinderWell.PutDataInStrVector(data); // //data = BinderWell.GetDataSet(); // pWell->LoadFromStringVec(data); // pWell->ComputeTrajectory(); // } // // CInclinedWellObj* pIncWell = (CInclinedWellObj*)pWell;//static_cast(pWell);//ggff // //pIncWell->LoadFromStringVec(data); // double angle = GetWellProjecttionAngle(pIncWell); // pIncWell->SetProjectionAngle(angle); //设置投影角度 // pIncWell->SetLevelProportion( pIncWell->m_fProportion); // //pIncWell->ComputeTrajectory(); // pIncWell->ComputeSize(pIncWell->GetAnchorPoint()); //} //else //{ // if(pWell->m_InclinedWellList.GetCount()>0 && pWell->m_bVWell) // pWell->ComputeSize(pWell->GetAnchorPoint()); //} //ImportDataFromDB(pWell,pWell,pSqlManager,bReplace); //GetDoc()->Invalidate(); } //void CItemSingleWell::ImportDataFromLM(CTrackGroupObj* pGroup,CWellPole* pWell,CLMInterface* pLM) //{ // CString strID; // strID.Format("%d", pWell->GetWellName()); // POSITION pos = pGroup->GetTrackList()->GetHeadPosition(); // while( NULL != pos) // { // CTrackObj* pTrack = (CTrackObj*)pGroup->GetTrackList()->GetNext(pos); // if (pTrack->GetTrackType() == Track_Group) // { // CTrackGroupObj* pTrackGroup = (CTrackGroupObj*)pTrack; // ImportDataFromLM(pTrackGroup,pWell,pLM); // } // else // { // vector fields; // StringVectorSet datas; // //读井分层数据 // if (pTrack->GetTrackType() == Track_StandardLayer) // { // fields.push_back("name"); // fields.push_back("depth"); // long rt = pLM->ReadWellPickSet(strID.GetBuffer(), fields, datas); // //删除井外的数据 // for(int i=0; im_fSdep || atof(datas[i][1])>pWell->m_fEdep) // datas.erase(datas.begin()+i); // } // }//读岩性数据 // else if (pTrack->GetTrackType() == Track_Lith) // { // fields.push_back("lithology"); // fields.push_back("color"); // fields.push_back("top"); // fields.push_back("bottom"); // long rt = pLM->ReadWellLithSet(strID.GetBuffer(), fields, datas); // //删除井外的数据 // for(int i=0; im_fSdep || atof(datas[i][2])>pWell->m_fEdep) // datas.erase(datas.begin()+i); // } // }//读测井曲线 // else if (pTrack->GetTrackType() == Track_Curve) // { // CTrackCurveObj* pTrackCurve = (CTrackCurveObj*)pTrack; // long rt = pLM->ReadWellLogValue(strID.GetBuffer(), pTrackCurve->m_strTrackName.GetBuffer(),pTrackCurve->GetDataObj()); // pTrackCurve->ReadCurveData(); // } // pTrack->BuidChildObject(fields, datas); // fields,Clear(); // datas.clear(); // } // } //} //void CItemSingleWell::ImportDataFromDB(CTrackGroupObj* pGroup, CWellPole* pWell,Db::CSqlStatementManager *pSqlManager, BOOL bReplace) //{ // //从文件中读取相关类型道的配置 // POSITION pos = pGroup->GetTrackList()->GetHeadPosition(); // while( NULL != pos) // { // CTrackObj* pTrack = pGroup->GetTrackList()->GetNext(pos); // if (pTrack->GetTrackType() == Track_Group) // { // CTrackGroupObj* pTrackGroup = (CTrackGroupObj*)pTrack; // ImportDataFromDB(pTrackGroup, pWell, pSqlManager, bReplace); // } // else // { // ImportTrackDataFromDB(pTrack, pWell, pSqlManager, bReplace); // } // } //} // //void CItemSingleWell::ImportTrackDataFromDB(CTrackObj* pTrack, CWellPole* pWell,Db::CSqlStatementManager *pSqlManager, BOOL bReplace) //{ // if (pTrack->GetTrackType() == Track_Depth) // return; // if(!bReplace && pTrack->GetChildObjList().GetCount() > 0) // { // pTrack->ResetChildProperties(); // return; // } // if(!pSqlManager->HasDB()) // return; // CString strTrackType; // CString tableinfo; // CString tableother; // CString strcurvename; // CString str; // vector fieldsID; // vector fieldinfo; // vector fieldother; // CDataTableConfig dataConfig; // GetTrackTable(pTrack, strTrackType, tableinfo, strcurvename); // dataConfig.SetTableID(strTrackType); // dataConfig.Read(); // fieldsID = dataConfig.GetFieldsID(); // //库查询时需要的表名和字段名 // tableinfo = pSqlManager->GetTableName(pTrack->m_strConfigTable); // tableother = pSqlManager->GetTableName(pTrack->m_strConfigTableOther); // if (pTrack->GetTrackType() == Track_Curve) // { // tableinfo = "well_log"; // } // else if (pTrack->GetTrackType() == Track_Discrete) // { // tableinfo = "well_discrete"; // } // if (pSqlManager->HasTable(tableinfo)) // { // Db::CSqlStatementManager::CTableInfo *pTableInfo = pSqlManager->GetTableInfo(tableinfo); // fieldinfo.clear(); // for(int i = 0; i < pTrack->m_VecConfigField.size(); i++) // { // str = pTableInfo->GetColumnIdName(pTrack->m_VecConfigField[i]); // //if(str.IsEmpty()) // // continue; // fieldinfo.push_back(str); // //if(i< fieldsID0.size()) // // fieldsID.push_back(fieldsID0[i]); // } // StringVectorSet data; // StringVectorSet dataother; // if (pTrack->GetTrackType() == Track_Curve) // { // CTrackCurveObj* pCurveObj = (CTrackCurveObj*)pTrack; // strcurvename = pCurveObj->m_strTrackName; // fieldinfo.push_back("depth"); // fieldinfo.push_back(strcurvename); // CString strSGXh; // CString strVer; // CDataBinderWellCurve WellCurve(pWell->GetWellName(),strcurvename,strSGXh,strVer); // WellCurve.AttachInput(AfxGetGeo()->GetSqlStatementManager()); // WellCurve.ReadData(); // BuildTrackInObj(pTrack,WellCurve.GetCurveDepth(),WellCurve.GetCurveData(),WellCurve.GetDataNum()); // CTrackCurveObj *pTrackCurve = (CTrackCurveObj*)pTrack; // pTrackCurve->ComputePointsInclined(); // } // else if (pTrack->GetTrackType() == Track_Discrete) // { // CTrackDiscreteObj* pDiscreteObj = (CTrackDiscreteObj*)pTrack; // strcurvename = pDiscreteObj->m_strTrackName; // fieldinfo.push_back("depth"); // fieldinfo.push_back(strcurvename); // CDataBinderWellDiscrete WellDis(pWell->GetWellName(),strcurvename); // WellDis.AttachInput(AfxGetGeo()->GetSqlStatementManager()); // WellDis.ReadData(); // BuildTrackInObj(pTrack,WellDis.GetCurveDepth(),WellDis.GetCurveData(),WellDis.GetDataNum()); // } // else // { // CDataBinderWell databinder(tableinfo,fieldinfo,pWell->GetWellName()); // databinder.AttachInput(AfxGetGeo()->GetSqlStatementManager()); // databinder.ReadData(); // databinder.PutDataInStrVector(data); // CDataTrackPropertyPage datapage(pWell, pTrack); // if (!pTrack->m_strConfigClass.IsEmpty() && (tableinfo == "well_stratum" || tableinfo == "well_facies")) // { // datapage.SelectDatas(data,tableinfo,pTrack->m_strConfigClass,pWell->GetWellName()); // } // if (AfxGetGeo()->GetSqlStatementManager()->HasTable(tableother)) // { // Db::CSqlStatementManager::CTableInfo *pTableInfo2 = pSqlManager->GetTableInfo(tableother); // fieldother.clear(); // for(int i = 0; i < pTrack->m_VecConfigFieldOther.size(); i++) // { // str = pTableInfo2->GetColumnIdName(pTrack->m_VecConfigFieldOther[i]); // fieldother.push_back(str); // } // CDataBinderWell databinder2(tableother,fieldother,pWell->GetWellName()); // databinder2.AttachInput(AfxGetGeo()->GetSqlStatementManager()); // databinder2.ReadData(); // databinder2.PutDataInStrVector(dataother); // } // BuildTrackInObj(pTrack, fieldsID, data,fieldother,dataother); // } // } // fieldsID.clear(); // fieldinfo.clear(); // fieldother.clear(); //} void CItemSingleWell::ExportDataAll(CWellPole* pWell) { TRACKLIST tracklist; pWell->GetAllTrack(&tracklist); TRACKLIST::iterator it = tracklist.begin(); for (; it != tracklist.end(); it++) ExportDataToDB(*it); } void CItemSingleWell::ExportDataToDB(CTrackObj* pTrackObj) { //Db::CSqlStatementManager *pSqlManager = AfxGetGeo()->GetSqlStatementManager(); //CWellPole *pWell = (CWellPole*)pTrackObj->GetParentObj(); //CString strWellName = pWell->GetWellName(); //CString updateTabName; //修改过的表数据 /////////非曲线、散点道、岩样道回写 //if (pTrackObj->GetTrackType() != Track_Curve && pTrackObj->GetTrackType() != Track_Discrete) //{ // Db::CSqlStatementManager *pSqlManager = AfxGetGeo()->GetSqlStatementManager(); // vector fieldeng; // CString tableng; // if(pSqlManager->HasDB()) // { // /////库查询时需要的表名和字段名 // tableng = pSqlManager->GetTableName(pTrackObj->m_strConfigTable); // if (!tableng.IsEmpty()) // { // Db::CSqlStatementManager::CTableInfo *pTableInfo = pSqlManager->GetTableInfo(tableng); // CString str; // for(int i = 0; i < pTrackObj->m_VecConfigField.size(); i++) // { // str = pTableInfo->GetColumnIdName(pTrackObj->m_VecConfigField[i]); // fieldeng.push_back(str); // } // } // } // if (AfxGetGeo()->GetSqlStatementManager()->HasTable(tableng)) // { // CDataTableNoQueryExec DataNoQueryExec; // DataNoQueryExec.AttachInput(pSqlManager); // DataNoQueryExec.SetTableName(tableng); // //////把库中的表数据删除 // CString str1,strwhere; // str1 = "well_name"; // str1 = DataNoQueryExec.GetFieldFmtStr(str1); // strwhere.Format("%s='%s'",str1,strWellName); // DataNoQueryExec.DelFromWhere(strwhere); // //////把数据写入库中 // StringVectorSet datas; // vector valuevector; // pTrackObj->GetChildDatas(datas); // for (int i = 0; i < datas.size(); i++) // { // valuevector.clear(); // valuevector = datas[i]; // DataNoQueryExec.AddRecord(fieldeng,valuevector); // } // updateTabName = tableng; // } //} /////////曲线道回写 //else if (pTrackObj->GetTrackType() == Track_Curve) //{ // CTrackCurveObj *pTrackCurve = (CTrackCurveObj*)pTrackObj; // CString strCurve = pTrackCurve->m_strTrackName; // if (pTrackCurve->GetDataObj()->GetCount() > 0) // { // CDataObj_Curve *pCurveChild = (CDataObj_Curve *)pTrackCurve->GetDataObj(); // CString strOperNum = pTrackCurve->m_strOperationNum; // CString strVerNum = pTrackCurve->m_strVersionNum; // double fsdep,fedep,frlev; // int nCount = 0; // fsdep = pCurveChild->m_startdep; // fedep = pCurveChild->m_enddep; // frlev = pCurveChild->m_rlev; // nCount = pCurveChild->m_sample_count; // double *pCuveData = new double[nCount]; // for (int i = 0; i < nCount; i++) // { // pCuveData[i] = pCurveChild->m_curve_value[i]; // } // CDataCurveNoQueryExec DataCurve; // DataCurve.SetTable("well_log"); // DataCurve.AttachInput(pSqlManager); // DataCurve.SetParams(strWellName,strCurve,strOperNum,strVerNum); // DataCurve.DeleteData(); // DataCurve.AddCurve(strWellName,strCurve,strOperNum,strVerNum,fsdep,fedep,frlev,pCuveData,nCount); // updateTabName = "well_log"; // } //} /////////散点道回写 //else if (pTrackObj->GetTrackType() == Track_Discrete) //{ // CTrackDiscreteObj *pTrackDiscrete = (CTrackDiscreteObj*)pTrackObj; // CString strCurve = pTrackDiscrete->m_strTrackName; // if (pTrackDiscrete->GetDataObj()->GetCount() > 0) // { // CDataObj_Discrete *pCurveChild = (CDataObj_Discrete *)pTrackDiscrete->GetDataObj(); // int nCount = 0; // nCount = pCurveChild->m_nDataCount; // double *pDepth = new double[nCount]; // double *pValue = new double[nCount]; // for (int j=0; j < nCount; j++) // { // pValue[j] = pCurveChild->m_fDataArr[j]; // pDepth[j] = pCurveChild->m_fDepth[j]; // } // CDataDiscreteNoQueryExec DataDiscrete; // DataDiscrete.SetTable("well_discrete"); // DataDiscrete.AttachInput(pSqlManager); // DataDiscrete.SetParams(strWellName,strCurve); // DataDiscrete.DeleteData(); // DataDiscrete.AddData(strWellName,strCurve,pDepth,pValue,nCount); // updateTabName = "well_discrete"; // } //} //if(!updateTabName.IsEmpty()) //{//发送修改数据的通知给其它模块 // GeoNetwork::CMsgContent msgContent; // msgContent.SetMsgUpdateTable(GeoNetwork::BROADCAST,updateTabName,strWellName,0); // CMapEditCtrl* pEditCtrl = (CMapEditCtrl*)(GetWnd()->GetMapCtrl()); // pEditCtrl->m_ClientService.PushSendMsg(&msgContent); //} } //void CItemSingleWell::MoveDiscreteSegement(CWellBaseObj* pObj,const double fdistance) //{ // if (pObj->GetType() == GDOUBLEFOX_DISCRETESEGMENT) // { // CTrackInDiscreteSegment* pDiscreteSegment = (CTrackInDiscreteSegment*)pObj; // CRect8 RectOld = pDiscreteSegment->GetPosition(); // CTrackDiscreteObj* pTrackDiscrete = (CTrackDiscreteObj*)pDiscreteSegment->GetParentObj(); // CWellPole* pWell = (CWellPole*)pTrackDiscrete->GetParentObj(); // float fdepth = 0.0; // double ftopdepth = pWell->ScreenYToDepth(RectOld.top); // double fbotdepth = pWell->ScreenYToDepth(RectOld.bottom); // //int nCount = pTrackDiscrete->m_sample_count; // //for(int i = 0; i < nCount; i++) // //{ // // fdepth = pTrackDiscrete->m_curve_depth[i]; // // if (fdepth >= ftopdepth && fdepth <= fbotdepth) // // { // // pTrackDiscrete->m_curve_depth[i] += -pWell->ScreenCYToHeight(fdistance); // // } // //} // //pTrackDiscrete->ComputePoints(); // CDataObj_Discrete *pChild = (CDataObj_Discrete*)pTrackDiscrete->GetDataObj(); // if (pChild != NULL) // { // for (int kk=0;kkm_nDataCount;kk++) // { // fdepth = pChild->m_fDepth[kk]; // if (fdepth >= ftopdepth && fdepth <= fbotdepth) // { // pChild->m_fDepth[kk] -= pWell->ScreenCYToHeight(fdistance); // } // } // } // pTrackDiscrete->ReadCurveData(); // } //} //void CItemSingleWell::GetDepthAndValueDiscreteSegement(CWellBaseObj* pObj,CArray &ArrDepth,CArray &ArrValue,const double dTop, const double dBot,int &nStartIndex,int &nEndIndex) //{ // CWellPole* pWell = (CWellPole*)GetWellObject(); // double ftopdepth = pWell->ScreenYToDepth(dTop); // double fbotdepth = pWell->ScreenYToDepth(dBot); // nStartIndex = 0; // nEndIndex = 0; // float fdepth = 0; // BOOL bFirst = TRUE; // if (pObj != NULL && pObj->GetType() == GDOUBLEFOX_DISCRETESEGMENT) // { // CTrackDiscreteObj* pTrackDiscrete = (CTrackDiscreteObj*)pObj->GetParentObj(); // CDataObj_Discrete* pDataObj = (CDataObj_Discrete*)pTrackDiscrete->GetDataObj(); // int nCount = pDataObj->m_nDataCount; // for (int i = 0; i < nCount; i++) // { // fdepth = pDataObj->m_fDepth[i]; // if (fdepth >= ftopdepth && fdepth <= fbotdepth) // { // if (bFirst) // { // nStartIndex = i; // bFirst = FALSE; // } // nEndIndex = i; // fdepth = pDataObj->m_fDepth[i]; // double fvalue = pDataObj->m_fDataArr[i]; // ArrDepth.Add(pDataObj->m_fDepth[i]); // ArrValue.Add(pDataObj->m_fDataArr[i]); // } // } // } //} //void CItemSingleWell::SortDiscreteSegment(CArray &ArrDepth,CArray &ArrValue) //{ // int nCount = ArrDepth.GetCount(); // double dNumber; // double ddepth1; // double ddepth2; // for (int i = 0; i < nCount-1; i++) // { // for (int j = i+1; j < nCount; j++) // { // ddepth1 = ArrDepth.GetAt(i); // ddepth2 = ArrDepth.GetAt(j); // if (ddepth1 > ddepth2) // { // dNumber = ArrDepth.GetAt(i); // ArrDepth.SetAt(i,ArrDepth.GetAt(j)); // ArrDepth.SetAt(j,dNumber); // dNumber = ArrValue.GetAt(i); // ArrValue.SetAt(i,ArrValue.GetAt(j)); // ArrValue.SetAt(j,dNumber); // } // } // } //} //void CItemSingleWell::SetDiscreteSegment(CWellBaseObj* pObj,CArray &ArrDepth,CArray &ArrValue,const int nStartIndex,const int nEndIndex) //{ // if (pObj != NULL && pObj->GetType() == GDOUBLEFOX_DISCRETESEGMENT) // { // CTrackDiscreteObj* pTrackDiscrete = (CTrackDiscreteObj*)pObj->GetParentObj(); // CDataObj_Discrete* pDataObj = (CDataObj_Discrete*)pTrackDiscrete->GetDataObj(); // if (nStartIndex >= nEndIndex || nStartIndex < 0 || nEndIndex < 0 || ArrDepth.GetCount() == 0 || ArrValue.GetCount() == 0) // { // return; // } // for (int i = nStartIndex; i <= nEndIndex; i++) // { // pDataObj->m_fDataArr[i] = ArrValue.GetAt(i - nStartIndex); // pDataObj->m_fDepth[i] = ArrDepth.GetAt(i - nStartIndex); // } // pTrackDiscrete->ReadCurveData(); // } //} void CItemSingleWell::DrawWellHandle() { DrawHandle(&GetView()->m_pDoc->GetDC()); } void CItemSingleWell::GetOperationAndVersion(const CString strWellName, const CString strCurveName, vector &OperatVec, vector &VersionVec) { //vector fields; //fields.push_back("version"); //fields.push_back("operation_number"); //Db::CSqlStatementManager *pSqlManager = AfxGetGeo()->GetSqlStatementManager(); //if (!pSqlManager->HasDB()) //{ // return; //} //CDataBinderWell CurveTab("well_log",fields,strWellName); //CurveTab.AttachInput(pSqlManager); //CString strWhere1; //CString str1 = CurveTab.GetFieldFmtStr("curve_name"); //strWhere1 = str1 + "=" + "'" + strCurveName + "'"; //CurveTab.SetWhereSql(strWhere1); //CurveTab.ReadData(); //StringVectorSet Datas; //CString strOperat,strVersion; ////Datas = CurveTab.GetDataSet(); //CurveTab.PutDataInStrVector(Datas); //OperatVec.clear(); //VersionVec.clear(); //for (int i = 0; i < Datas.size(); i++) //{ // strVersion = Datas[i][0]; // strOperat = Datas[i][1]; // OperatVec.push_back(strOperat); // VersionVec.push_back(strVersion); //} } void CItemSingleWell::GetAllCurveNameInDb(CStringArray &strNameArr,const CString strTableName,CString nameField) { //Db::CSqlStatementManager *pSqlManager = AfxGetGeo()->GetSqlStatementManager(); //if (pSqlManager->HasDB()) //{ // vector fields; // fields.push_back(nameField); // CString strWellName = m_pWell->GetWellName(); // CDataBinderWell CurveTab(strTableName,fields,strWellName); // CurveTab.AttachInput(pSqlManager); // CurveTab.ReadData(); // StringVectorSet Datas; // CString strCurveName; // //Datas = CurveTab.GetDataSet(); // CurveTab.PutDataInStrVector(Datas); // strNameArr.RemoveAll(); // for (int i = 0; i < Datas.size(); i++) // { // strCurveName = Datas[i][0]; // strNameArr.Add(strCurveName); // } //} //else //{ // for(int ii = 0; ii< m_pWell->m_CurveDataVecs.size(); ii++) // { // strNameArr.Add(m_pWell->m_CurveDataVecs[ii]->m_curve_name); // } //} } //void CItemSingleWell::GetLegendObject(const CStringArray &StyleList,CRect8 rt) //{ // if (NULL == m_pWell || StyleList.GetCount() == 0) // { // return; // } // CWellBaseObjList Objectlist; // GetSymbolObj(Objectlist,StyleList,m_pWell); // CXy* pXy = (CXy*)m_pWell->GetParentXY(); // CreatLegendObject(Objectlist,rt,pXy); //} //BOOL CItemSingleWell::IsRepeat(CWellBaseObjList &Objectlist,const CString strName) //{ // BOOL bRepeat = FALSE; // CWellBaseObjList ListLast; // POSITION pos = Objectlist.GetHeadPosition(); // while(pos) // { // CInsertDraw* pInsertDraw = (CInsertDraw*)Objectlist.GetNext(pos); // if (strName == pInsertDraw->GetName()) // { // bRepeat = TRUE; // } // } // return bRepeat; //} //void CItemSingleWell::CreatLegendObject(CWellBaseObjList &Objectlist,CRect8 rt,CXy* pXy) //{ // if (NULL == pXy || Objectlist.GetCount() == 0) // { // return; // } // double legendW = GetDC()->GetRealWidth(60.0); // int nIndexRow = 0;//行 // int nIndexCol = 1;//列 // nIndexCol = (int)rt.Width()/legendW; // if (nIndexCol < 1) // { // nIndexCol = 1; // } // CRect8 rtOne; // double ftop = rt.top; // int nIndexColAdd = 1; // CInsertDraw* pInsertDraw = NULL; // CCurveEx* pLegendCurve = NULL; // CText* pText = NULL; // CRect8 rttext; // CString strText; // CStringArray StrArr; // POSITION posAdd = NULL; // CPositionList addList; // int nNumber = 0; // int nIndex = 0; // POSITION pos = Objectlist.GetHeadPosition(); // while(pos) // { // nIndex = nNumber%nIndexCol; // if (nIndex==0 && nNumber>0) // { // ftop = rtOne.bottom - 0.25*legendW; // nIndexRow++; // } // nNumber++; // rtOne.left = rt.left + nIndex*1.2*legendW; // rtOne.right = rtOne.left + 0.8*legendW; // rtOne.top = ftop; // rtOne.bottom = rtOne.top - 0.8*legendW; // pInsertDraw = (CInsertDraw*)Objectlist.GetNext(pos); // pInsertDraw->x0=rtOne.left; // pInsertDraw->y0=rtOne.bottom; // pInsertDraw->rect=((CXyBase*)pInsertDraw->pDraw)->m_range; // pInsertDraw->m_size.cy=rtOne.Height(); // pInsertDraw->m_size.cx=rtOne.Width(); // // pLegendCurve = new CCurveEx(5); // pLegendCurve->x[0] = pInsertDraw->x0; // pLegendCurve->y[0] = pInsertDraw->y0 + pInsertDraw->m_size.cy; // pLegendCurve->x[1] = pLegendCurve->x[0] + pInsertDraw->m_size.cx; // pLegendCurve->y[1] = pLegendCurve->y[0]; // pLegendCurve->x[2] = pLegendCurve->x[1]; // pLegendCurve->y[2] = pInsertDraw->y0; // pLegendCurve->x[3] = pInsertDraw->x0; // pLegendCurve->y[3] = pInsertDraw->y0; // pLegendCurve->x[4] = pLegendCurve->x[0]; // pLegendCurve->y[4] = pLegendCurve->y[0]; // CText* pText = new CText(); // rttext.top = pLegendCurve->y[2] + 0; // rttext.bottom = rttext.top - 0.20*legendW; // rttext.left = pLegendCurve->x[0]; // rttext.right = pLegendCurve->x[1]; // pText->SetRange(rttext); // pText->m_size.cx = GetDC()->GetRealWidth(5.0); // pText->m_size.cy = pText->m_size.cx*2.5; // pText->SetAlignsH(CText::alignCenterH); // pText->x0 = rttext.CenterPoint().x0; // pText->SetAlignsV(CText::alignCenterV); // pText->y0 = rttext.CenterPoint().y0; // strText = pInsertDraw->GetName(); // StrArr.RemoveAll(); // AfxGetPublicFunction()->ScanfString(StrArr,strText, '\\'); // strText = StrArr.GetAt(StrArr.GetCount()-1); // pText->SetName(strText); // posAdd = pXy->AddElement(pText,DOUBLEFOX_TEXT); // addList.AddTail(posAdd); // posAdd = pXy->AddElement(pInsertDraw,DOUBLEFOX_DRAW); // addList.AddTail(posAdd); // //pXy->AddMark((CXyBase*)pInsertDraw->pDraw); // posAdd = pXy->AddElement(pLegendCurve,DOUBLEFOX_CURVE); // addList.AddTail(posAdd); // } // //for undo/redo // if(addList.GetCount()>0) // { // CActionAddItem* pAction = new CActionAddItem(GetDoc(), 0, addList); // GetDoc()->SetActionItem(pAction); // } //} CInsertDraw *CItemSingleWell::GetLegendInsertDraw(CString strMark) { CInsertDraw *pNewDraw = NULL; //AfxGetGlobalMark()->BackupMark(); //AfxGetGlobalMark()->AttachMark(GetDoc()->GetDraw()->GetMark()); //CXy* AddCXy = NULL; //CXy* pMark = NULL; //CXy *pGMark = NULL; //pGMark = (CXy*)AfxGetGlobalMark()->FindMark(strMark); //pMark = (CXy*)AfxGetGlobalWellXy()->GetMark()->FindMark(strMark); //if(pGMark != NULL || pMark != NULL) //{ // if(pGMark == NULL) // { // pNewDraw = new CInsertDraw; // pMark->m_strName = strMark;//pTrackChild->m_strLith; // AddCXy = new CXy(); // *AddCXy = *pMark; // pNewDraw->SetName(strMark); // pNewDraw->pDraw = AddCXy; // pNewDraw->SetExtendMode(CInsertDraw::modeCenter); // GetDoc()->GetDraw()->AddMark(AddCXy); // } // else // { // pNewDraw = new CInsertDraw; // pNewDraw->SetName(strMark); // pNewDraw->pDraw = pGMark; // pNewDraw->SetExtendMode(CInsertDraw::modeCenter); // } //} //AfxGetGlobalMark()->RestoreMark(); return pNewDraw; } //void CItemSingleWell::GetSymbolObj(CWellBaseObjList &Objectlist,const CStringArray &StyleList, CWellPole* pWell) //{ // CStringArray StrArr; // if (NULL == pWell) // { // return; // } // //符号类别名 // CString strMarkNormal; strMarkNormal.Format("%s", LIB_MARK_NORMAL); strMarkNormal.TrimRight("\\"); // CString strMarkFill; strMarkFill.Format("%s", LIB_MARK_FILL); strMarkFill.TrimRight("\\"); // CString strMarkLitho; strMarkLitho.Format("%s", LIB_MARK_LITHO); strMarkLitho.TrimRight("\\"); // CString strMarkResult; strMarkResult.Format("%s", LIB_MARK_RESULT);strMarkResult.TrimRight("\\"); // CString strMarkBreakStratum; strMarkBreakStratum.Format("%s", LIB_MARK_BREAKSTRATUM); strMarkBreakStratum.TrimRight("\\"); // CString strMarkBreakLitho; strMarkBreakLitho.Format("%s", LIB_MARK_BREAKLITHO); strMarkBreakLitho.TrimRight("\\"); // CString strMarkStratum; strMarkStratum.Format("%s", LIB_MARK_STRATUMFLUID); strMarkStratum.TrimRight("\\"); // CString strMarkChart; strMarkChart.Format("%s", LIB_MARK_CHART); strMarkChart.TrimRight("\\"); // CString strMarkFluid; strMarkFluid.Format("%s", LIB_MARK_FLUID); strMarkFluid.TrimRight("\\"); // CTrackList tracklist; // pWell->GetAllTrack(&tracklist); // CInsertDraw* pInsertDraw = NULL; // CXyBase* AddCXy = NULL; // CString strMark; // CXy* pMark = NULL; // CXy *pGMark = NULL; // POSITION pos = tracklist.GetHeadPosition(); // while(pos) // { // CTrackObj* pTrack = (CTrackObj*)tracklist.GetNext(pos); // POSITION posChildren = pTrack->GetChildObjList().GetHeadPosition(); // if (pTrack->GetTrackType() == Track_Text || pTrack->GetTrackType() == Track_Stratum || pTrack->GetTrackType() == Track_SandLayer || // pTrack->GetTrackType() == Track_OilLayerGroup || pTrack->GetTrackType() == Track_ReserveUnit) // { // while(posChildren) // { // CTrackInTextRange* pObjChild = (CTrackInTextRange*)pTrack->GetChildObjList().GetNext(posChildren); // for (int i = 0; iScanfString(StrArr,StyleList.GetAt(i), '\\'); // if (StrArr.GetAt(0) == strMarkFill) // { // if (!pObjChild->m_strLitho.IsEmpty() && StrArr.GetAt(1) == pObjChild->m_strLitho) // { // strMark.Format("%s", LIB_MARK_FILL); // strMark = strMark + pObjChild->m_strLitho; // if (!IsRepeat(Objectlist,strMark)) // { // pInsertDraw = GetLegendInsertDraw(strMark); // if(pInsertDraw) // Objectlist.AddTail(pInsertDraw); // } // } // } // } // } // } // else if (pTrack->GetTrackType() == Track_Lith) // { // CTrackLithObj* pTrackLitho = (CTrackLithObj*)pTrack; // while(posChildren) // { // CTrackInLith* pTrackChild = (CTrackInLith*)pTrackLitho->GetChildObjList().GetNext(posChildren); // for (int i = 0; iScanfString(StrArr,StyleList.GetAt(i), '\\'); // if (StrArr.GetAt(0) == strMarkLitho) // { // if(AfxGetGlobalWellXy() != NULL) // { // ////主名 // if(!pTrackChild->m_strLith.IsEmpty() && StrArr.GetAt(1) == pTrackChild->m_strLith) // { // strMark.Format("%s", LIB_MARK_LITHOMAIN); // strMark = strMark + pTrackChild->m_strLith; // if (!IsRepeat(Objectlist,strMark)) // { // pInsertDraw = GetLegendInsertDraw(strMark); // if(pInsertDraw) // Objectlist.AddTail(pInsertDraw); // // } // } // ////次名 // if(!pTrackChild->m_strFront.IsEmpty() && StrArr.GetAt(1) == pTrackChild->m_strFront) // { // strMark.Format("%s", LIB_MARK_LITHOFRONT); // strMark = strMark + pTrackChild->m_strFront; // if (!IsRepeat(Objectlist,strMark)) // { // pInsertDraw = GetLegendInsertDraw(strMark); // if(pInsertDraw) // Objectlist.AddTail(pInsertDraw); // } // } // ////含油气性 // if(!pTrackChild->m_strOilGas.IsEmpty() && StrArr.GetAt(1) == pTrackChild->m_strOilGas) // { // strMark.Format("%s", LIB_MARK_LITHOOILGAS); // strMark = strMark + pTrackChild->m_strOilGas; // if (!IsRepeat(Objectlist,strMark)) // { // pInsertDraw = GetLegendInsertDraw(strMark); // if(pInsertDraw) // Objectlist.AddTail(pInsertDraw); // // } // } // ////含油物 // if (!pTrackChild->m_strContent.IsEmpty() && StrArr.GetAt(1) == pTrackChild->m_strContent) // { // strMark.Format("%s", LIB_MARK_LITHOCONTENT); // strMark = strMark + pTrackChild->m_strContent; // if (!IsRepeat(Objectlist,strMark)) // { // pInsertDraw = GetLegendInsertDraw(strMark); // if(pInsertDraw) // Objectlist.AddTail(pInsertDraw); // } // } // ////构造 // if (!pTrackChild->m_strConstitution.IsEmpty() && StrArr.GetAt(1) == pTrackChild->m_strConstitution) // { // strMark.Format("%s", LIB_MARK_LITHOCONSTITU); // strMark = strMark + pTrackChild->m_strConstitution; // if (!IsRepeat(Objectlist,strMark)) // { // pInsertDraw = GetLegendInsertDraw(strMark); // if(pInsertDraw) // Objectlist.AddTail(pInsertDraw); // } // } // } // } // } // } // } // else if (pTrack->GetTrackType() == Track_Curve || pTrack->GetTrackType() == Track_Discrete) // { // CTrackCurveObjBase* pTrckCurve = (CTrackCurveObjBase*)pTrack; // if(AfxGetGlobalWellXy() != NULL) // { // for (int i = 0; iScanfString(StrArr,StyleList.GetAt(i), '\\'); // if (StrArr.GetAt(0) == strMarkFill) // { // if (pTrckCurve->IsFillBrushPattern() && pTrckCurve->m_pMarkFill != NULL) // { // strMark.Format("%s", LIB_MARK_FILL); // strMark = strMark + pTrckCurve->m_strFillSymbol; // if (!IsRepeat(Objectlist,strMark) && StrArr.GetAt(1) == pTrckCurve->m_strFillSymbol) // { // pInsertDraw = GetLegendInsertDraw(strMark); // if(pInsertDraw) // Objectlist.AddTail(pInsertDraw); // } // } // } // else if (StrArr.GetAt(0) == strMarkChart) // { // if (pTrckCurve->IsShowDot() && pTrckCurve->m_pMarkChart != NULL) // { // strMark.Format("%s", LIB_MARK_CHART); // strMark = strMark + pTrckCurve->m_strDotSymbol; // if (!IsRepeat(Objectlist,strMark) && StrArr.GetAt(1) == pTrckCurve->m_strDotSymbol) // { // pInsertDraw = GetLegendInsertDraw(strMark); // if(pInsertDraw) // Objectlist.AddTail(pInsertDraw); // } // } // } // } // } // } // else if (pTrack->GetTrackType() == Track_Result) // { // CTrackResultObj* pTrackResult = (CTrackResultObj*)pTrack; // if (pTrackResult->m_nKind == 0 && AfxGetGlobalWellXy() != NULL) // { // while(posChildren) // { // CTrackInResult* pTrackChild = (CTrackInResult*)pTrack->GetChildObjList().GetNext(posChildren); // for (int i = 0; iScanfString(StrArr,StyleList.GetAt(i), '\\'); // if (StrArr.GetAt(0) == "解释") // { // if (pTrackChild->m_pMarkSymbol != NULL && StrArr.GetAt(1) == pTrackChild->m_strResult) // { // strMark = pTrackChild->GetMarkSymbol(); // if (!IsRepeat(Objectlist,strMark)) // { // pInsertDraw = GetLegendInsertDraw(strMark); // if(pInsertDraw) // Objectlist.AddTail(pInsertDraw); // } // } // } // if (StrArr.GetAt(0) == "流体") // { // if (StrArr.GetAt(1) == pTrackChild->m_strResult) // { // strMark.Format("%s", LIB_MARK_FLUIDCOLOR); // strMark = strMark + pTrackChild->m_strResult; // if (!IsRepeat(Objectlist,strMark)) // { // pInsertDraw = GetLegendInsertDraw(strMark); // if(pInsertDraw) // Objectlist.AddTail(pInsertDraw); // } // } // } // if (StrArr.GetAt(0) == "连层") // { // if (pTrackChild->m_pMarkResult != NULL && StrArr.GetAt(1) == pTrackChild->m_strResult) // { // strMark.Format("%s", LIB_MARK_STRATUMFLUID); // strMark = strMark + pTrackChild->m_strResult; // if (!IsRepeat(Objectlist,strMark)) // { // pInsertDraw = GetLegendInsertDraw(strMark); // if(pInsertDraw) // Objectlist.AddTail(pInsertDraw); // } // } // } // if (StrArr.GetAt(0) == "填充") // { // if(!pTrackChild->m_strLitho.IsEmpty() && StrArr.GetAt(1) == pTrackChild->m_strLitho) // { // strMark.Format("%s", LIB_MARK_FILL); // strMark = strMark + pTrackChild->m_strLitho; // if (!IsRepeat(Objectlist,strMark)) // { // pInsertDraw = GetLegendInsertDraw(strMark); // if(pInsertDraw) // Objectlist.AddTail(pInsertDraw); // } // } // } // } // } // } // } // else if (pTrack->GetTrackType() == Track_Symbol) // { // CTrackSymbolObj* pTrackSymbol = (CTrackSymbolObj*)pTrack; // if (AfxGetGlobalWellXy() != NULL) // { // while(posChildren) // { // CTrackInSymbol* pTrackChild = (CTrackInSymbol*)pTrack->GetChildObjList().GetNext(posChildren); // for (int i = 0; iScanfString(StrArr,StyleList.GetAt(i), '\\'); // if (StrArr.GetAt(0) == "符号") // { // if (pTrackChild->m_pMarkSymbol != NULL && StrArr.GetAt(1) == pTrackChild->m_strName) // { // strMark.Format("%s", LIB_MARK_NORMAL); // strMark = strMark+pTrackChild->m_strName; // if (!IsRepeat(Objectlist,strMark)) // { // pInsertDraw = GetLegendInsertDraw(strMark); // if(pInsertDraw) // Objectlist.AddTail(pInsertDraw); // } // } // } // } // } // } // } // } // tracklist.RemoveAll(); //} void CItemSingleWell::BeSelectBorderLine(CTrackGroup* pGroup,CPoint2D pt,double dHandleSize) { CTrackObj* pTrack = NULL; CTrackGroup* pTrackGroup = NULL; TRACKLIST::reverse_iterator rit = pGroup->GetTrackList().rbegin(); for (; rit != pGroup->GetTrackList().rend(); rit++) { pTrack = *rit; if (pTrack->IsOnTrackRight(pt,dHandleSize)) { //左右拖动 nDragHandle = 4; selectMode = CItemNestBase::size; OnDraw(GetDC()); Select(pTrack); OnDraw(GetDC()); //GetView()->SetCapture(); return; } else if (pTrack->IsOnTrackTop(pt,dHandleSize)) {//上下拖动 nDragHandle = 6; selectMode = CItemNestBase::border; //GetView()->SetCapture(); return; } else if (pTrack->IsOnWellTop(pt,dHandleSize)) {//井头上下拖动 nDragHandle = 2; selectMode = CItemNestBase::border; //GetView()->SetCapture(); return; } else if (pTrack->GetTrackType() == Track_Group) { pTrackGroup = (CTrackGroup*)pTrack; BeSelectBorderLine(pTrackGroup,pt,dHandleSize); } } } BOOL CItemSingleWell::SetMoveCursor(CTrackGroup* pGroup,CPoint2D pt,double dHandleSize,CWellPole* pWell) { CTrackObj* pTrack = NULL; CWellBaseObj* pObjIn = NULL; CTrackGroup* pTrackGroup = NULL; TRACKLIST::reverse_iterator rit = pGroup->GetTrackList().rbegin(); for (; rit != pGroup->GetTrackList().rend(); rit++) { //设置光标移动到道边界、道头、道内对象时的状态 double tracktop = pWell->m_HeadRect.bottom-pWell->m_dHeightTrackHead; double trackbot = pWell->GetPos().bottom; pTrack = *rit; if (pTrack->GetTrackType()==Track_Group) { pTrackGroup = (CTrackGroup*)pTrack; if(pTrackGroup->FindTrackGroupOnRight(pt,dHandleSize) != NULL) { if(pWell->GetWellType() == Well_Incline && m_VCursor) SetCursor(m_VCursor); else SetCursor(AfxGetApp()->LoadCursor(IDC_SIZEWE)); return TRUE; } else { if(SetMoveCursor(pTrackGroup,pt,dHandleSize,pWell)) return TRUE; else if(pTrackGroup->IsInTrackHead(pt,dHandleSize)) { SetCursor(AfxGetApp()->LoadCursor(IDC_MOVE4WAY)); return TRUE; } } } else if(pTrack->IsOnTrackRight(pt,dHandleSize)) { if(pWell->GetWellType() == Well_Incline && m_VCursor) SetCursor(m_VCursor); else SetCursor(AfxGetApp()->LoadCursor(IDC_SIZENS)); return TRUE; } //道头上下边界 else if (pTrack->IsOnTrackTop(pt,dHandleSize)) { if(pWell->GetWellType() == Well_Incline && m_HCursor) SetCursor(m_HCursor); else SetCursor(AfxGetApp()->LoadCursor(IDC_SIZENS)); return TRUE; } //井头边界 else if (pTrack->IsOnWellTop(pt,dHandleSize)) { if(pWell->GetWellType() == Well_Incline && m_HCursor) SetCursor(m_HCursor); else SetCursor(AfxGetApp()->LoadCursor(IDC_SIZENS)); return TRUE; } ////道内 else if(pTrack->IsInTrackHead(pt,dHandleSize)) { SetCursor(AfxGetApp()->LoadCursor(IDC_MOVE4WAY)); return TRUE; } //道内子对象 else if ((pt.y0trackbot)&&(pt.x0>pTrack->m_HeadRect.left)&&(pt.x0GetPos().right)) { CRect8 r = CRect8(pt.x0,pt.y0,pt.x0,pt.y0); CSize8 sz=GetDoc()->GetSelectSize(); double sx=GetDC()->GetRealWidth(sz.cx); double sy=fabs(GetDC()->GetRealHeight(sz.cy)); r.InflateRect(sx,sy); pObjIn = pTrack->ObjectAt(r,dHandleSize); if(pObjIn) { if ((pWell->GetWellType()==Well_Section) && (pTrack->GetTrackType() == Track_Stratum || pTrack->GetTrackType() == Track_Result || pTrack->GetTrackType() == Track_StandardLayer)) { SetCursor(AfxGetApp()->LoadCursor(IDC_MOVE4WAY));// (IDC_DRAG_BREAK)); return TRUE; } else { if((pObjIn == pTrack &&(pTrack->GetTrackType()==Track_Curve||pTrack->GetTrackType()==Track_Discrete)) || pObjIn != pTrack) { SetCursor(AfxGetApp()->LoadCursor(IDC_MOVE4WAY)); return TRUE; } } } } } return FALSE; } BOOL CItemSingleWell::SetMoveCursor(CTrackGroup* pGroup, CPoint2D pt, double dHandleSize, CWellPole* pWell, int& handle) { CTrackObj* pTrack = NULL; CWellBaseObj* pObjIn = NULL; CTrackGroup* pTrackGroup = NULL; TRACKLIST::reverse_iterator rit = pGroup->GetTrackList().rbegin(); for (; rit != pGroup->GetTrackList().rend(); rit++) { //设置光标移动到道边界、道头、道内对象时的状态 double tracktop = pWell->m_HeadRect.bottom - pWell->m_dHeightTrackHead; double trackbot = pWell->GetPos().bottom; pTrack = *rit; if (pTrack->GetTrackType() == Track_Group) { pTrackGroup = (CTrackGroup*)pTrack; if (pTrackGroup->FindTrackGroupOnRight(pt, dHandleSize) != NULL) { if (pWell->GetWellType() == Well_Incline && m_VCursor) SetCursor(m_VCursor); else handle = 11;// SetCursor(AfxGetApp()->LoadCursor(IDC_SIZEWE)); return TRUE; } else { if (SetMoveCursor(pTrackGroup, pt, dHandleSize, pWell, handle)) return TRUE; else if (pTrackGroup->IsInTrackHead(pt, dHandleSize)) { handle = 5; //SetCursor(AfxGetApp()->LoadCursor(IDC_MOVE4WAY)); return TRUE; } } } else if (pTrack->IsOnTrackRight(pt, dHandleSize)) { if (pWell->GetWellType() == Well_Incline && m_VCursor) SetCursor(m_VCursor); else handle = 11; // SetCursor(AfxGetApp()->LoadCursor(IDC_SIZENS)); return TRUE; } //道头上下边界 else if (pTrack->IsOnTrackTop(pt, dHandleSize)) { if (pWell->GetWellType() == Well_Incline && m_HCursor) SetCursor(m_HCursor); else handle = 10; // SetCursor(AfxGetApp()->LoadCursor(IDC_SIZENS)); return TRUE; } //井头边界 else if (pTrack->IsOnWellTop(pt, dHandleSize)) { if (pWell->GetWellType() == Well_Incline && m_HCursor) SetCursor(m_HCursor); else handle = 10; // SetCursor(AfxGetApp()->LoadCursor(IDC_SIZENS)); return TRUE; } ////道内 else if (pTrack->IsInTrackHead(pt, dHandleSize)) { handle = 5;//SetCursor(AfxGetApp()->LoadCursor(IDC_MOVE4WAY)); return TRUE; } //道内子对象 else if ((pt.y0 < tracktop) && (pt.y0 > trackbot) && (pt.x0 > pTrack->m_HeadRect.left) && (pt.x0 < pTrack->GetPos().right)) { CRect8 r = CRect8(pt.x0, pt.y0, pt.x0, pt.y0); CSize8 sz = GetDoc()->GetSelectSize(); double sx = GetDC()->GetRealWidth(sz.cx); double sy = fabs(GetDC()->GetRealHeight(sz.cy)); r.InflateRect(sx, sy); pObjIn = pTrack->ObjectAt(r, dHandleSize); if (pObjIn) { if ((pWell->GetWellType() == Well_Section) && (pTrack->GetTrackType() == Track_Stratum || pTrack->GetTrackType() == Track_Result || pTrack->GetTrackType() == Track_StandardLayer)) { handle = 5;//SetCursor(AfxGetApp()->LoadCursor(IDC_MOVE4WAY));// (IDC_DRAG_BREAK)); return TRUE; } else { if ((pObjIn == pTrack && (pTrack->GetTrackType() == Track_Curve || pTrack->GetTrackType() == Track_Discrete)) || pObjIn != pTrack) { handle = 5; // SetCursor(AfxGetApp()->LoadCursor(IDC_MOVE4WAY)); return TRUE; } } } } } return FALSE; } BOOL CItemSingleWell::SortTrackWhenMoving(CTrackGroup* pGroup,CTrackObj* pTrackMoving, int& ideep) { ////不移动 if(pTrackMoving->m_HeadRect.PtInRect(pTrackMoving->m_active_head.CenterPoint())) { return FALSE; } if(ideep == 0) //记录undo/redo时,执行一次就可以了,防止挪动一次道时如果递归调用,会有多次进行undo/redo SetReUnDoAction(); ideep++; CTrackObj* pTrack = NULL; CTrackObj* pParentGroup = NULL; CWellBaseObj* pParentObj = NULL; pGroup->RemoveTrack(pTrackMoving); TRACKLIST::iterator posObj; TRACKLIST::iterator it = pGroup->GetTrackList().begin(); for(; it!= pGroup->GetTrackList().end(); it++) { pTrack = *it; // pGroup->GetTrackList()->GetAt(pos); posObj = it; pParentGroup = (CTrackGroup*)pTrack->GetParent(); pParentObj = pTrack->GetParent(); //由于插入道时从左到右,依次与链表中的道进行比较,所以下边判断落脚点在左部时只要横坐标小于目的道的中心点即可 BOOL bLeft = pTrackMoving->m_active_head.CenterPoint().x0 <= pTrack->m_HeadRect.CenterPoint().x0; BOOL bRight = pTrackMoving->m_active_head.CenterPoint().x0 >= pTrack->m_HeadRect.CenterPoint().x0 && pTrackMoving->m_active_head.CenterPoint().x0 <= pTrack->m_HeadRect.right; BOOL bIn = pTrack->m_HeadRect.PtInRect(pTrackMoving->m_active_head.CenterPoint()); /////在道左侧 //if (bLeft) //{ // if (pTrack->GetTrackType() == Track_Group) // { // CTrackGroup* pTrackGroup = (CTrackGroup*)pTrack; // if (pTrackGroup->m_HeadRect.PtInRect(pTrackMoving->m_active_head.CenterPoint())) // {//移动道的落脚点在pTrack内部 // if (pTrackGroup->GetGroupType() == Group_Vertical) // { // pTrackMoving->SetTrackWidth(pTrack->m_dTrackWidth / pTrackMoving->m_dTrackWidth); // //TRACKLIST::iterator tit = pTrackGroup->GetTrackList().begin(); // //for (; tit != pTrackGroup->GetTrackList().end(); tit++) // //{ // //} // pTrackGroup->GetTrackList().push_back(pTrackMoving); // //pTrackGroup->GetTrackList().insert(posObj, pTrackMoving); // pTrackMoving->SetParent(pTrackGroup); // return TRUE; // } // else // {//水平组合道,则进入递归 // (SortTrackWhenMoving(pTrackGroup, pTrackMoving, ideep)); // return TRUE; // } // } // else // { // if(pGroup->GetGroupType() == Group_Vertical) // { // pTrackMoving->SetTrackWidth(pGroup->m_dTrackWidth/pTrackMoving->m_dTrackWidth); // } // //pGroup->GetTrackList()->InsertBefore(posObj,pTrackMoving); // pGroup->GetTrackList().insert(posObj, pTrackMoving); // pTrackMoving->SetParent(pGroup); // return TRUE; // } // } // else // { // ///////曲线与散点组合成纵向的组合道 // if ((pTrack->GetTrackType() == Track_Curve || pTrack->GetTrackType() == Track_Discrete || // pTrackMoving->GetTrackType() == Track_Curve || pTrackMoving->GetTrackType() == Track_Discrete) && // bIn) // { // CTrackGroup* pTrackGroup = new CTrackGroup(); // pTrackGroup->SetGroupType(Group_Vertical); // pTrackGroup->m_font = pGroup->m_font; // pTrackGroup->m_pen = pGroup->m_pen; // pTrackGroup->m_HeadRect = pTrack->m_HeadRect; // pTrackGroup->SetRange(pTrack->m_HeadRect); // pTrackGroup->m_dTrackWidth = pTrack->m_dTrackWidth; // pTrackMoving->m_dTrackWidth = pTrack->m_dTrackWidth; // pTrackGroup->SetParent(pParentObj); // pTrackGroup->SetParentXY(pGroup->GetParentXY()); // if (pTrack->m_HeadRect.CenterPoint().y0 > pTrackMoving->m_active_head.CenterPoint().y0) // { // pTrackGroup->AddTrack(pTrack); // pTrackGroup->AddTrack(pTrackMoving); // } // else // { // pTrackGroup->AddTrack(pTrackMoving); // pTrackGroup->AddTrack(pTrack); // } // pGroup->GetTrackList().insert(posObj, pTrackGroup); // pGroup->GetTrackList().erase(posObj); // return TRUE; // } // ///////非曲线与散点道组合成水平方向的组合道 // else // { // if (pGroup->GetGroupType() == Group_Vertical) // { // pTrackMoving->SetTrackWidth(pGroup->m_dTrackWidth / pTrackMoving->m_dTrackWidth); // } // pGroup->GetTrackList().insert(posObj, pTrackMoving); // pTrackMoving->SetParent(pGroup); // return TRUE; // } // } //} ///////道右侧 //else if (bRight) if(bLeft || bRight) { if (pTrack->GetTrackType() == Track_Group) {//移动道的落脚点是子组合道,且在其右边的范围。 CTrackGroup* pTrackGroup = (CTrackGroup*)pTrack; if(bIn) //pTrackGroup->m_HeadRect.PtInRect(pTrackMoving->m_active_head.CenterPoint())) {//移动道的落脚点在pTrack内部 if (pTrackGroup->GetGroupType() == Group_Vertical) { pTrackMoving->SetTrackWidthRatio(pTrack->m_dTrackWidth/pTrackMoving->m_dTrackWidth); pTrackGroup->GetTrackList().push_back(pTrackMoving); pTrackMoving->SetParent(pTrackGroup); return TRUE; } else {//水平组合道,则进入递归 (SortTrackWhenMoving(pTrackGroup, pTrackMoving, ideep)); return TRUE; } } else {//移动道的落脚点不在pTrack内部,但其落脚点在pTrack的上边或下边,则直接加入到pGroup if(pGroup->GetGroupType() == Group_Vertical) { pTrackMoving->SetTrackWidthRatio(pGroup->m_dTrackWidth/pTrackMoving->m_dTrackWidth); } if(bRight) //落脚点在目的道的右侧,则加入到目的道的后面 posObj++; pGroup->GetTrackList().insert(posObj,pTrackMoving); pTrackMoving->SetParent(pGroup); return TRUE; } } else {//移动道的落脚点是不是组合道,在右边的范围 if ((pTrack->GetTrackType() == Track_Curve || pTrack->GetTrackType() == Track_Discrete || pTrackMoving->GetTrackType() == Track_Curve || pTrackMoving->GetTrackType() == Track_Discrete) && bIn) {//曲线或散点道进行垂直组合,并将新的组合道加入 CTrackGroup* pTrackGroup = new CTrackGroup(); pTrackGroup->SetGroupType(Group_Vertical); pTrackGroup->m_font = pGroup->m_font; pTrackGroup->m_pen = pGroup->m_pen; pTrackGroup->m_dTrackWidth = pTrack->m_dTrackWidth; pTrackMoving->m_dTrackWidth = pTrack->m_dTrackWidth; pTrackGroup->SetParent(pParentObj); pTrackGroup->SetParentXY(pGroup->GetParentXY()); if (pTrack->m_HeadRect.CenterPoint().y0 > pTrackMoving->m_active_head.CenterPoint().y0) { pTrackGroup->AddTrack(pTrack); pTrackGroup->AddTrack(pTrackMoving); } else { pTrackGroup->AddTrack(pTrackMoving); pTrackGroup->AddTrack(pTrack); } pGroup->GetTrackList().insert(posObj, pTrackGroup); pGroup->GetTrackList().erase(posObj); return TRUE; } else {//其它类型的道,直接加入。 if (pGroup->GetGroupType() == Group_Vertical) { pTrackMoving->SetTrackWidthRatio(pGroup->m_dTrackWidth / pTrackMoving->m_dTrackWidth); } if (bRight) posObj++; pGroup->GetTrackList().insert(posObj, pTrackMoving); pTrackMoving->SetParent(pGroup); return TRUE; } } } } //最后一条道右侧 if(pGroup->GetGroupType() == Group_Vertical) { pTrackMoving->SetTrackWidthRatio(pGroup->m_dTrackWidth/pTrackMoving->m_dTrackWidth); } pGroup->GetTrackList().push_back(pTrackMoving); pTrackMoving->SetParent(pGroup); return TRUE; // return FALSE; } void CItemSingleWell::SetDrawObj(CWellBaseObj* pObj) { double oldangle = 0 ; //if(m_pWell) // oldangle = m_pWell->GetHeadLineAngle(); m_pWell = (CWellPole*)pObj; if(m_pWell) { //if(abs(m_pWell->GetHeadLineAngle() - oldangle)>0.0001) // CreateVHCursor(); } } void CItemSingleWell::DestroyVHCursor() { if(m_HCursor) { ::DestroyCursor(m_HCursor); m_HCursor = NULL; m_pHCursorBmp->DeleteObject(); delete m_pHCursorBmp; m_pHCursorMaskBmp->DeleteObject(); delete m_pHCursorMaskBmp; } if(m_VCursor) { ::DestroyCursor(m_VCursor); m_VCursor = NULL; m_pVCursorBmp->DeleteObject(); delete m_pVCursorBmp; m_pVCursorMaskBmp->DeleteObject(); delete m_pVCursorMaskBmp; } } void CItemSingleWell::CreateVHCursor() { if(!m_pWell) return; if(m_pWell->GetWellType() == Well_Incline) { if(abs(m_pWell->GetHeadLineAngle())<0.0001) return; DestroyVHCursor(); HCURSOR cursor = AfxGetApp()->LoadCursor(IDC_SIZEWE) ;//AfxGetApp()->LoadStandardCursor(IDC_DRAG_HOR); m_pVCursorBmp = new CBitmap; m_pVCursorMaskBmp = new CBitmap; m_VCursor = CreateAngleCursor(cursor,m_pVCursorBmp,m_pVCursorMaskBmp,-m_pWell->GetHeadLineAngle()); cursor = AfxGetApp()->LoadCursor(IDC_SIZENS) ;//AfxGetApp()->LoadStandardCursor(IDC_DRAG_HOR); m_pHCursorBmp = new CBitmap; m_pHCursorMaskBmp = new CBitmap; m_HCursor = CreateAngleCursor(cursor,m_pHCursorBmp,m_pHCursorMaskBmp,-m_pWell->GetHeadLineAngle()); } } HCURSOR CItemSingleWell::CreateAngleCursor(HCURSOR cursor,CBitmap* pCursorBmp ,CBitmap* pCursorMaskBmp,double angle) { HCURSOR retCursor = NULL; ICONINFO cursorinfo; BOOL b = GetIconInfo((HICON)(cursor),&cursorinfo); BITMAP maskBitInfo,cursorBitInfo; ::GetObject((HGDIOBJ)cursorinfo.hbmMask,sizeof(BITMAP),&maskBitInfo);//得到原始光标的掩码为图信息 ::GetObject((HGDIOBJ)cursorinfo.hbmColor,sizeof(BITMAP),&cursorBitInfo);//得到原始光标的位图信息 CBitmap sCousorbmp,sMaskbmp; sCousorbmp.Attach(cursorinfo.hbmColor); sMaskbmp.Attach(cursorinfo.hbmMask); CDC *pDC = GetDC()->GetDC(); CPoint2D pospts[4]; //原始光标的大小 pospts[0].x0 = 0; pospts[0].y0 = maskBitInfo.bmHeight; pospts[1].x0 = maskBitInfo.bmWidth; pospts[1].y0 = maskBitInfo.bmHeight; pospts[2].x0 = maskBitInfo.bmWidth; pospts[2].y0 = 0; pospts[3].x0 = 0; pospts[3].y0 = 0; for(int ii = 0; ii< 4; ii++) { //pospts[ii].RotatePt(0,0,angle); } CPoint plgPts[4];//旋转后放置新光标的四个角坐标 CPoint topleftPt,botRightPt,tpt; //放置旋转后光标区域的左上,右下角 botRightPt.x = topleftPt.x = int(pospts[0].x0); botRightPt.y = topleftPt.y = int(pospts[0].y0); for(int ii =0;ii<4; ii++) { tpt.x = int(pospts[ii].x0); tpt.y = int(pospts[ii].y0); plgPts[ii] = tpt; if(tpt.x botRightPt.x) botRightPt.x = tpt.x; if(tpt.y< topleftPt.y) topleftPt.y = tpt.y; if(tpt.y>botRightPt.y) botRightPt.y = tpt.y; } if(topleftPt.y<0) //如果旋转后有坐标小于0,就偏移一下,确保光标的区域及坐标是正数 { int l = -topleftPt.y; topleftPt.y += l; botRightPt.y+=l; for(int ii = 0; ii<4; ii++) { plgPts[ii].y+=l; } } if(topleftPt.x<0)//如果旋转后有坐标小于0,就偏移一下,确保光标的区域及坐标是正数 { int l = -topleftPt.x; botRightPt.x += l; topleftPt.x+=l; for(int ii = 0; ii<4; ii++) { plgPts[ii].x+=l; } } CRect rect; rect.SetRect(topleftPt,botRightPt); //旋转后光标的区域 CBitmap *pOldBitmap; CBitmap *pOldmaskmap; CDC dc; dc.CreateCompatibleDC(pDC); CDC smaskdc,scursordc; smaskdc.CreateCompatibleDC(pDC); scursordc.CreateCompatibleDC(pDC); pOldmaskmap = smaskdc.SelectObject(&sMaskbmp); //使用原始光标的掩码位图 pOldBitmap = scursordc.SelectObject(&sCousorbmp); //使用原始光标的位图 CDC memDC; memDC.CreateCompatibleDC(&dc); CBitmap *pNewbkCousorbmp; //使用原始光标的位图及掩码位图形成一个新的光标位图,这个新的光标位图的背景色制定为蓝色 pNewbkCousorbmp = new CBitmap; pNewbkCousorbmp->CreateBitmap(cursorBitInfo.bmWidth,cursorBitInfo.bmHeight,cursorBitInfo.bmPlanes,cursorBitInfo.bmBitsPixel,NULL); CBitmap *pOldNewbkBmp = memDC.SelectObject(pNewbkCousorbmp); memDC.FillSolidRect(0,0,cursorBitInfo.bmWidth,cursorBitInfo.bmHeight,RGB(0,0,255));//新位图充填蓝色 scursordc.SetBkColor(RGB(0,0,0)); scursordc.SetTextColor(RGB(255,255,255)); scursordc.BitBlt(0,0,maskBitInfo.bmWidth,maskBitInfo.bmHeight,&smaskdc,0,0,SRCAND); memDC.SetBkColor(RGB(255,255,255)); memDC.SetTextColor(RGB(0,0,0)); memDC.BitBlt(0,0,cursorBitInfo.bmWidth,cursorBitInfo.bmHeight,&smaskdc,0,0,SRCAND); memDC.BitBlt(0,0,cursorBitInfo.bmWidth,cursorBitInfo.bmHeight,&scursordc,0,0,SRCPAINT);//声称了所需的新光标位图,蓝色背景色(上述代码是透明位图的原理) //pDC->BitBlt(10,100,maskBitInfo.bmWidth,maskBitInfo.bmHeight,&memDC,0,0,SRCCOPY); smaskdc.SelectObject(pOldmaskmap); scursordc.SelectObject(pOldBitmap); smaskdc.DeleteDC(); scursordc.DeleteDC(); //pCursorBmp = new CBitmap(); pCursorBmp->CreateBitmap(rect.Width(),rect.Height(),cursorBitInfo.bmPlanes,cursorBitInfo.bmBitsPixel,NULL);//将需要的光标位图按照旋转后的大小生成 pOldBitmap = dc.SelectObject(pCursorBmp); //pCursorMaskmap = new CBitmap(); pCursorMaskBmp->CreateBitmap(rect.Width(),rect.Height(),1,1,NULL);//将需要的光标掩码位图按照旋转后的大小生成 CPoint points[3]; points[0] = plgPts[0]; /*points[0].Offset(-rect.left,-rect.top);*/ points[1] = plgPts[1];/* points[1].Offset(-rect.left,-rect.top);*/ points[2] = plgPts[3]; /*points[2].Offset(-rect.left,-rect.top);*/ CBitmap maskBmp; ZeroMemory(&maskBmp,sizeof(maskBmp)); dc.FillSolidRect(0,0,rect.Width(),rect.Height(),RGB(0,0,255)); //将有角度光标的位图背景全部蓝色 dc.PlgBlt(points,&memDC,0,0,cursorBitInfo.bmWidth,cursorBitInfo.bmHeight,maskBmp,0,0);//将上面新制作的新背景光标位图旋转 maskBmp.DeleteObject(); memDC.SelectObject(pOldNewbkBmp); delete pNewbkCousorbmp; pOldmaskmap = memDC.SelectObject(pCursorMaskBmp); dc.SetBkColor(RGB(0,0,255)); memDC.BitBlt(0,0,rect.Width(),rect.Height(),&dc,0,0,SRCCOPY);//生成有角度光标的掩码为图,透明色是蓝色 //pDC->BitBlt(100,10,rect.Width(),rect.Height(),&memDC,0,0,SRCCOPY); //pDC->BitBlt(100,100,rect.Width(),rect.Height(),&dc,0,0,SRCCOPY); memDC.SelectObject(pOldmaskmap); memDC.DeleteDC(); dc.SelectObject(pOldBitmap); ICONINFO newicon; newicon.fIcon = FALSE; newicon.xHotspot = rect.Width()/2; newicon.yHotspot = rect.Height()/2; newicon.hbmMask = HBITMAP(pCursorMaskBmp->GetSafeHandle()); newicon.hbmColor = HBITMAP(pCursorBmp->GetSafeHandle()); retCursor = ::CreateIconIndirect(&newicon); sCousorbmp.Detach(); sMaskbmp.Detach(); ::DeleteObject(cursorinfo.hbmColor); ::DeleteObject(cursorinfo.hbmMask); return retCursor; } void CItemSingleWell::DrawHandle(CXyDC *pDC, const CPoint2D &point) { CItemNestBase::DrawHandle(pDC,point); } void CItemSingleWell::DrawHandle(CXyDC *pDC) { if(m_pWell != NULL) { if(m_pWell->GetWellType() == Well_Incline) { //std::vector pts; //m_pWell->GetFrameCurve(pts); //LOGBRUSH logBrush ; //logBrush.lbStyle = BS_SOLID; //logBrush.lbColor = RGB(255,133,133); //CPen pen,*pOldPen; //pen.CreatePen(PS_DOT|PS_GEOMETRIC|PS_ENDCAP_SQUARE,3,&logBrush); //pOldPen = pDC->GetDC()->SelectObject(&pen); //CPoint pt,pt0; //if(pts.size()>0) //{ // pt0 = pDC->GetScreen(pts[0]); // pDC->GetDC()->MoveTo(pt0); // for(int ii = 1; ii< pts.size(); ii++) // { // pt = pDC->GetScreen(pts[ii]); // pDC->GetDC()->LineTo(pt); // } // pDC->GetDC()->LineTo(pt0); //} ////pDC->GetDC()->SetROP2(rop2); //pen.DeleteObject(); //pDC->GetDC()->SelectObject(pOldPen); } else CItemNestBase::DrawHandle(pDC); } else CItemNestBase::DrawHandle(pDC); } BOOL CItemSingleWell::AnalysisPor() { /* CWellPole* pWell = GetWellObject(); if (NULL == pWell) { return FALSE; } CDlgCurvePorAnalysis dlg; CTrackList CurveList; pWell->GetTrackCurve(&CurveList); POSITION pos = CurveList.GetHeadPosition(); while(pos) { CTrackCurveObj* pTrackCurve = (CTrackCurveObj*)CurveList.GetNext(pos); dlg.m_CurveList.AddTail(pTrackCurve->GetDataObj()); dlg.m_Por1.m_CurveList.AddTail(pTrackCurve->GetDataObj()); } CDataObj_Curve *pChild = NULL; if(dlg.m_CurveList.GetCount() > 0) { pChild = (CDataObj_Curve*)dlg.m_CurveList.GetHead(); } if(pChild == NULL) { return FALSE; } double PorTemp,SwWaterTemp,SwOilTemp,AnalysisHd; dlg.m_Por1.m_stdep = pChild->m_startdep; dlg.m_Por1.m_endep = pChild->m_enddep; dlg.m_Por1.m_rlev = pChild->m_rlev; dlg.m_Por1.m_porPara.sdep = dlg.m_Por1.m_stdep; dlg.m_Por1.m_porPara.edep = dlg.m_Por1.m_endep; dlg.m_Por2.m_stdep = pWell->m_fSdep; dlg.m_Por2.m_endep = pWell->m_fEdep; if (dlg.DoModal() != IDOK) { return FALSE; } PorTemp = dlg.m_Por; SwWaterTemp = dlg.m_SwWater; SwOilTemp = dlg.m_SwOil; AnalysisHd = dlg.m_AnalysisHd; if (!dlg.m_bAddTrack) { return FALSE; } CreatePorTrack(pWell,dlg.m_Por1.m_CurveList,dlg.m_bShowAnalysis,PorTemp,SwWaterTemp,SwOilTemp,AnalysisHd);*/ return TRUE; } BOOL CItemSingleWell::AnalysisSand() { //CWellPole* pWell = GetWellObject(); //if (NULL == pWell) //{ // return FALSE; //} //CDlgCurveSandAnalysis dlg; //CTrackList CurveList; //pWell->GetTrackCurve(&CurveList); //POSITION pos = CurveList.GetHeadPosition(); //while(pos) //{ // CTrackCurveObj* pTrackCurve = (CTrackCurveObj*)CurveList.GetNext(pos); // dlg.m_CurveList.AddTail(pTrackCurve->GetDataObj()); // dlg.m_Sand1.m_CurveList.AddTail(pTrackCurve->GetDataObj()); // dlg.m_Sand2.m_CurveList.AddTail(pTrackCurve->GetDataObj()); //} //CurveList.RemoveAll(); //CDataObj_Curve *pChild = NULL; //if(dlg.m_CurveList.GetCount() > 0) //{ // pChild = (CDataObj_Curve*)dlg.m_CurveList.GetHead(); //} //if(pChild == NULL) //{ // return FALSE; //} //dlg.m_Sand1.m_rlev = pChild->m_rlev; //dlg.m_Sand1.m_stdep = pWell->m_fSdep; //dlg.m_Sand1.m_endep = pWell->m_fEdep; //dlg.m_Sand1.m_sandPara.sdep = pChild->m_startdep; //dlg.m_Sand1.m_sandPara.edep = pChild->m_enddep; ////dlg.m_Sand1.m_pCurve = pCurveData; ////dlg.m_Sand2.m_pCurve = pCurveData; //dlg.m_Sand2.m_rlev = pChild->m_rlev; //dlg.m_Sand2.m_sandPara.sdep = pWell->m_fSdep; //dlg.m_Sand2.m_sandPara.edep = pWell->m_fEdep; //dlg.m_Sand2.m_stdep = pWell->m_fSdep; //dlg.m_Sand2.m_endep = pWell->m_fEdep; //if(dlg.DoModal() != IDOK) //{ // return FALSE; //} //double PorTemp,SwWaterTemp,SwOilTemp,AnalysisHd; //PorTemp = dlg.m_Por; //SwWaterTemp = dlg.m_SwWater; //SwOilTemp = dlg.m_SwOil; //AnalysisHd = dlg.m_AnalysisHd; //if (!dlg.m_bAddTrack) //{ // return FALSE; //} //CreateSandTrack(pWell,dlg.m_Sand1.m_CurveList,dlg.m_bShowAnalysis,PorTemp,SwWaterTemp,SwOilTemp,AnalysisHd); return TRUE; } BOOL CItemSingleWell::CalculatePor() { //CTrackObj* pTrackSelected = NULL; //CWellBaseObj* pObjSelected = NULL; //if(m_WellObjSelectlist.GetCount() > 0) // pObjSelected = m_WellObjSelectlist.GetHead(); //if (pObjSelected->GetType() == GDOUBLEFOX_TRACK) //{ // pTrackSelected = (CTrackObj*)pObjSelected; //} //if (NULL == pTrackSelected) // return FALSE; //if(pTrackSelected->GetTrackType() != Track_Curve) // return FALSE; //CTrackCurveObj* pTrackCurve = (CTrackCurveObj*)pTrackSelected; //CDlgCurvePor dlg; //dlg.m_dSkeleon = pTrackCurve->m_curve_left; //dlg.m_dFluid = pTrackCurve->m_curve_right; //if(dlg.DoModal() != IDOK) // return FALSE; //CTrackCurveObj* pTrackCurveNew = new CTrackCurveObj; //pTrackCurveNew->m_strTrackName = "POR"; //pTrackCurveNew->m_curve_left = 0.0; //pTrackCurveNew->m_curve_right = 100.0; //pTrackCurveNew->m_pen = pTrackCurve->m_pen; //pTrackCurveNew->m_penCurve = pTrackCurve->m_penCurve; //pTrackCurveNew->m_font = pTrackCurve->m_font; //pTrackCurveNew->m_fontHeadMark = pTrackCurve->m_fontHeadMark; //pTrackCurveNew->m_dataObj.m_curve_name = pTrackCurveNew->m_strTitle; //pTrackCurveNew->m_dataObj.m_curve_unit = pTrackCurve->m_dataObj.m_depth_unit; //pTrackCurveNew->m_dataObj.m_startdep = pTrackCurve->m_dataObj.m_startdep; //pTrackCurveNew->m_dataObj.m_enddep = pTrackCurve->m_dataObj.m_enddep; //pTrackCurveNew->m_dataObj.m_rlev = pTrackCurve->m_dataObj.m_rlev; //pTrackCurveNew->m_dataObj.m_construct_num = pTrackCurve->m_dataObj.m_construct_num; //pTrackCurveNew->m_dataObj.m_maxvalue = pTrackCurve->m_dataObj.m_maxvalue; //pTrackCurveNew->m_dataObj.m_minvalue = pTrackCurve->m_dataObj.m_minvalue; //pTrackCurveNew->m_dataObj.m_sample_count = pTrackCurve->m_dataObj.m_sample_count; //if(pTrackCurveNew->m_dataObj.m_sample_count > 0) //{ // pTrackCurveNew->m_dataObj.m_curve_depth = new float [pTrackCurveNew->m_dataObj.m_sample_count]; // pTrackCurveNew->m_dataObj.m_curve_value = new float [pTrackCurveNew->m_dataObj.m_sample_count]; // double dValue = 0; // for(int i=0; im_dataObj.m_sample_count; i++) // { // pTrackCurveNew->m_dataObj.m_curve_depth[i] = pTrackCurve->m_dataObj.m_curve_depth[i]; // dValue = (pTrackCurve->m_dataObj.m_curve_value[i]-dlg.m_dSkeleon)/(dlg.m_dFluid-dlg.m_dSkeleon); // pTrackCurveNew->m_dataObj.m_curve_value[i] = dValue * 100.0; // } //} ////插入道下方 //CTrackList tracklist; //tracklist.AddTail(pTrackCurveNew); //AddTrack(pTrackSelected, tracklist, TRUE); return TRUE; } BOOL CItemSingleWell::CalculateSH() { //CTrackObj* pTrackSelected = NULL; //CWellBaseObj* pObjSelected = NULL; //if(m_WellObjSelectlist.GetCount() > 0) // pObjSelected = m_WellObjSelectlist.GetHead(); //if (pObjSelected->GetType() == GDOUBLEFOX_TRACK) //{ // pTrackSelected = (CTrackObj*)pObjSelected; //} //if (NULL == pTrackSelected) // return FALSE; //if(pTrackSelected->GetTrackType() != Track_Curve) // return FALSE; //CTrackCurveObj* pTrackCurve = (CTrackCurveObj*)pTrackSelected; //CDlgCurveSH dlg; //dlg.m_dSand = pTrackCurve->m_curve_left; //dlg.m_dMud = pTrackCurve->m_curve_right; //if(dlg.DoModal() != IDOK) // return FALSE; //CTrackCurveObj* pTrackCurveNew = new CTrackCurveObj; //pTrackCurveNew->m_strTrackName = "SH"; //pTrackCurveNew->m_curve_left = 0.0; //pTrackCurveNew->m_curve_right = 100.0; //pTrackCurveNew->m_pen = pTrackCurve->m_pen; //pTrackCurveNew->m_penCurve = pTrackCurve->m_penCurve; //pTrackCurveNew->m_font = pTrackCurve->m_font; //pTrackCurveNew->m_fontHeadMark = pTrackCurve->m_fontHeadMark; //pTrackCurveNew->m_dataObj.m_curve_name = pTrackCurveNew->m_strTitle; //pTrackCurveNew->m_dataObj.m_curve_unit = pTrackCurve->m_dataObj.m_depth_unit; //pTrackCurveNew->m_dataObj.m_startdep = pTrackCurve->m_dataObj.m_startdep; //pTrackCurveNew->m_dataObj.m_enddep = pTrackCurve->m_dataObj.m_enddep; //pTrackCurveNew->m_dataObj.m_rlev = pTrackCurve->m_dataObj.m_rlev; //pTrackCurveNew->m_dataObj.m_construct_num = pTrackCurve->m_dataObj.m_construct_num; //pTrackCurveNew->m_dataObj.m_maxvalue = pTrackCurve->m_dataObj.m_maxvalue; //pTrackCurveNew->m_dataObj.m_minvalue = pTrackCurve->m_dataObj.m_minvalue; //pTrackCurveNew->m_dataObj.m_sample_count = pTrackCurve->m_dataObj.m_sample_count; //if(pTrackCurveNew->m_dataObj.m_sample_count > 0) //{ // pTrackCurveNew->m_dataObj.m_curve_depth = new float [pTrackCurveNew->m_dataObj.m_sample_count]; // pTrackCurveNew->m_dataObj.m_curve_value = new float [pTrackCurveNew->m_dataObj.m_sample_count]; // double dValue = 0; // for(int i=0; im_dataObj.m_sample_count; i++) // { // pTrackCurveNew->m_dataObj.m_curve_depth[i] = pTrackCurve->m_dataObj.m_curve_depth[i]; // dValue = (pTrackCurve->m_dataObj.m_curve_value[i] - dlg.m_dSand)/(dlg.m_dMud - dlg.m_dSand); // if(dValue < 0.0) dValue = 0.0; // if(dValue > 1.0) dValue = 1.0; // dValue = (exp(dlg.m_dGCUR * dValue * log(2.0)) - 1.0) / (exp(dlg.m_dGCUR * log(2.0)) - 1.0); // if(dValue < 0.0) dValue = 0.0; // if(dValue > .999) dValue = .999; // pTrackCurveNew->m_dataObj.m_curve_value[i] = dValue * 100.0; // } //} ////插入到道下面 //CTrackList tracklist; //tracklist.AddTail(pTrackCurveNew); //AddTrack(pTrackSelected, tracklist, TRUE); return TRUE; } void CItemSingleWell::CurveDataStatistic() { if(GetItem() == NULL) return; CWellBaseObj* pObjSelect = ((CItemWellBase*)GetItem())->GetDrawObj(); //if (pObjSelect->GetType() == GDOUBLEFOX_LOGCURVESEGMENT) //{ // CTrackInCurveSegment* pTrackInCurveSegment = (CTrackInCurveSegment*)pObjSelect; // CTrackCurveObj* pTrackCurve = (CTrackCurveObj*)pTrackInCurveSegment->GetParentObj(); // double sdep = pTrackInCurveSegment->m_fSdep; // double edep = pTrackInCurveSegment->m_fEdep; // //标准化顶底深 // if(float(sdep/pTrackCurve->m_fRlev) != int(sdep/pTrackCurve->m_fRlev)) // { // sdep = float(int(sdep/pTrackCurve->m_fRlev + 1)*pTrackCurve->m_fRlev); // } // if(float(edep/pTrackCurve->m_fRlev) != int(edep/pTrackCurve->m_fRlev)) // { // edep = float(int(edep/pTrackCurve->m_fRlev)*pTrackCurve->m_fRlev); // } // StringVectorSet datas; // vector vectorfield; // vectorfield.push_back("DEPTH"); // vectorfield.push_back(pTrackCurve->m_strTrackName); // CString strDepth; // CString strValue; // double fDepth; // vector vectorinfor; // int nCount = int((edep - sdep)/pTrackCurve->m_fRlev) + 1; // CString strTitle; // strTitle.LoadString(IDS_STR_TEMPLATE_CHART); // CPropertySheet StatisticSheet(strTitle); // StatisticSheet.m_psh.dwFlags |= PSH_NOAPPLYNOW; // CDlgCurveStatisticHistogram page1; // page1.m_StructCurveData.fSdep = sdep; // page1.m_StructCurveData.fEdep = edep; // page1.m_StructCurveData.fRlev = pTrackCurve->m_fRlev; // page1.m_StructCurveData.curve_name = pTrackCurve->m_strTrackName; // page1.m_StructCurveData.curve_num = pTrackCurve->m_curve_num; // page1.m_StructCurveData.curve_value = new float[nCount]; // page1.m_StructCurveData.curve_depth = new float[nCount]; // int curveStart = int((sdep - pTrackCurve->m_fSdep)/pTrackCurve->m_fRlev+0.5); // for(int j=0; jGetCurveValue(curveStart+j); // page1.m_StructCurveData.curve_depth[j] = sdep+j*pTrackCurve->m_fRlev; // vectorinfor.clear(); // strValue.Format("%f",pTrackCurve->GetCurveValue(curveStart+j)); // fDepth = sdep+j*pTrackCurve->m_fRlev; // strDepth.Format("%f",fDepth); // vectorinfor.push_back(strDepth); // vectorinfor.push_back(strValue); // datas.push_back(vectorinfor); // } // page1.m_strTrackName = pTrackCurve->m_strTrackName; // StatisticSheet.AddPage(&page1); // CDataPropertyPage datapage(vectorfield,datas); // datapage.SetGridCtrlEdit(false); // datapage.SetCurveStatistic(true); // StatisticSheet.AddPage(&datapage); // StatisticSheet.DoModal(); //} //if (pObjSelect->GetType() == KEP_TRACK) //{ // CTrackObj* pTrack = (CTrackObj*)pObjSelect; // //获取图道的数据表、字段 // CString table; // CDataTableConfig TempDataConfig; // CString strTitle; // strTitle.LoadString(IDS_STR_TEMPLATE_CHART); // if (pTrack->GetTrackType() == Track_Curve) // { // CTrackCurveObj* pTrackCurve = (CTrackCurveObj*)pTrack; // if (0 == pTrackCurve->GetDataCount()) // { // return; // } // double sdep = pTrackCurve->m_fSdep; // double edep = pTrackCurve->m_fEdep; // //标准化顶底深 // if(float(sdep/pTrackCurve->m_fRlev) != int(sdep/pTrackCurve->m_fRlev)) // { // sdep = float(int(sdep/pTrackCurve->m_fRlev + 1)*pTrackCurve->m_fRlev); // } // if(float(edep/pTrackCurve->m_fRlev) != int(edep/pTrackCurve->m_fRlev)) // { // edep = float(int(edep/pTrackCurve->m_fRlev)*pTrackCurve->m_fRlev); // } // StringVectorSet datas; // vector vectorfield; // vectorfield.push_back("DEPTH"); // vectorfield.push_back(pTrackCurve->m_strTrackName); // CString strDepth; // CString strValue; // double fDepth; // vector vectorinfor; // CPropertySheet StatisticSheet(strTitle); // StatisticSheet.m_psh.dwFlags |= PSH_NOAPPLYNOW; // CDlgCurveStatisticHistogram page1; // page1.m_StructCurveData.fSdep = sdep; // page1.m_StructCurveData.fEdep = edep; // page1.m_StructCurveData.fRlev = pTrackCurve->m_fRlev; // page1.m_StructCurveData.curve_name = pTrackCurve->m_strTrackName; // page1.m_StructCurveData.curve_num = pTrackCurve->m_curve_num; // page1.m_StructCurveData.curve_value = new float[pTrackCurve->GetDataCount()]; // page1.m_StructCurveData.curve_depth = new float[pTrackCurve->GetDataCount()]; // for(int j=0; jGetDataCount(); j++) // { // page1.m_StructCurveData.curve_value[j] = pTrackCurve->GetCurveValue(j); // page1.m_StructCurveData.curve_depth[j] = sdep+j*pTrackCurve->m_fRlev; // vectorinfor.clear(); // strValue.Format("%f",pTrackCurve->GetCurveValue(j)); // fDepth = sdep+j*pTrackCurve->m_fRlev; // strDepth.Format("%f",fDepth); // vectorinfor.push_back(strDepth); // vectorinfor.push_back(strValue); // datas.push_back(vectorinfor); // } // page1.m_strTrackName = pTrackCurve->m_strTrackName; // StatisticSheet.AddPage(&page1); // TempDataConfig.SetTableID("Curve"); // TempDataConfig.Read(); // table = TempDataConfig.GetTableBase(); // CDataTrackPropertyPage datapage(GetWellObject(),pTrackCurve,datas,table,pTrackCurve->m_strTrackName); // datapage.m_bCurve = TRUE; // datapage.SetDataConfig(TempDataConfig); // datapage.SetGridCtrlEdit(false); // datapage.SetCurveStatistic(true); // StatisticSheet.AddPage(&datapage); // StatisticSheet.DoModal(); // } // else if (pTrack->GetTrackType() == Track_Discrete) // { // CTrackDiscreteObj* pTrackDiscrete = (CTrackDiscreteObj*)pTrack; // if (0 == pTrackDiscrete->GetDataCount()) // { // return; // } // CWellPole* pWell = (CWellPole*)pTrackDiscrete->GetParentObj(); // double sdep = pWell->m_fSdep; // double edep = pWell->m_fEdep; // StringVectorSet datas; // vector vectorfield; // vectorfield.push_back("DEPTH"); // vectorfield.push_back(pTrackDiscrete->m_strTrackName); // CString strDepth; // CString strValue; // double fDepth; // vector vectorinfor; // CPropertySheet StatisticSheet(strTitle); // StatisticSheet.m_psh.dwFlags |= PSH_NOAPPLYNOW; // CDlgCurveStatisticHistogram page1; // page1.m_bDiscrete = true; // page1.m_StructCurveData.fSdep = sdep; // page1.m_StructCurveData.fEdep = edep; // page1.m_StructCurveData.curve_name = pTrackDiscrete->m_strTrackName; // page1.m_StructCurveData.curve_num = pTrackDiscrete->m_curve_num; // page1.m_nDiscreteCount = pTrackDiscrete->GetDataCount(); // page1.m_StructCurveData.curve_value = new float[pTrackDiscrete->GetDataCount()]; // page1.m_StructCurveData.curve_depth = new float[pTrackDiscrete->GetDataCount()]; // for(int j=0; jGetDataCount(); j++) // { // page1.m_StructCurveData.curve_value[j] = pTrackDiscrete->GetCurveValue(j); // page1.m_StructCurveData.curve_depth[j] = pTrackDiscrete->GetCurveDepth(j); // vectorinfor.clear(); // strValue.Format("%f",pTrackDiscrete->GetCurveValue(j)); // fDepth = pTrackDiscrete->GetCurveDepth(j); // strDepth.Format("%f",fDepth); // vectorinfor.push_back(strDepth); // vectorinfor.push_back(strValue); // datas.push_back(vectorinfor); // } // page1.m_strTrackName = pTrackDiscrete->m_strTrackName; // StatisticSheet.AddPage(&page1); // TempDataConfig.SetTableID("Discrete"); // TempDataConfig.Read(); // table = TempDataConfig.GetTableBase(); // CDataTrackPropertyPage datapage(GetWellObject(),pTrackDiscrete, datas, table,pTrackDiscrete->m_strTrackName); // datapage.m_bCurve = TRUE; // datapage.SetDataConfig(TempDataConfig); // datapage.SetGridCtrlEdit(false); // datapage.SetCurveStatistic(true); // StatisticSheet.AddPage(&datapage); // StatisticSheet.DoModal(); // } //} } //void CItemSingleWell::CreatePorTrack(CWellPole* pWell,CDataObjList& CurveList,BOOL bAddResult,double PorTemp,double SwWaterTemp,double SwOilTemp,double AnalysisHd) //{ // CTrackList trackList; // CWellBaseObj* pObj = NULL; // CTrackObj* pTrack = NULL; // ///////////////////////////////////////////////////////////////////////////////////////////////// // //生成新的组合道 // CTrackGroupObj* pTrackGroup_1 = new CTrackGroupObj; // pTrackGroup_1->SetGroupType(Group_Vertical); // pTrackGroup_1->m_font = pWell->m_fontTrack; // pTrackGroup_1->m_pen = pWell->m_penTrack; // pTrackGroup_1->SetPenGrid(pWell->m_penGridMajor, pWell->m_penGridMinor); // pTrackGroup_1->SetFontHeadMark(pWell->m_fontHeadMark); // pTrackGroup_1->SetFontGridMark(pWell->m_fontGridMark); // pTrackGroup_1->SetSpace(pWell->m_fMajorSpace, pWell->m_fMinorSpace); // pTrackGroup_1->m_dTrackWidth = 30.0; // CTrackCurveObj* pTrackCurveObj_11 = NULL; // pTrackCurveObj_11 = CreateNewCurveTrack(pWell,"SW","%",30.0,atof("100"),float(atof("0")),FALSE,RGB(0,0,255)); // CTrackCurveObj* pTrackCurveObj_12 = NULL; // pTrackCurveObj_12 = CreateNewCurveTrack(pWell,"PERM","豪达西",30.0,atof("0.1"),atof("1000"),TRUE,RGB(255,128,0)); // pTrackGroup_1->SetParentGroup(pWell); // pTrackGroup_1->SetParentObj(pWell); // pTrackGroup_1->SetParentXY(pWell->GetParentXY()); // pTrackGroup_1->AddTrack(pTrackCurveObj_11); // pTrackGroup_1->AddTrack(pTrackCurveObj_12); // ///////////////////////////////////////////////////////////////////////////////////////////////// // //生成新的组合道 // CTrackGroupObj* pTrackGroup_2 = new CTrackGroupObj; // pTrackGroup_2->SetGroupType(Group_Vertical); // pTrackGroup_2->m_font = pWell->m_fontTrack; // pTrackGroup_2->m_pen = pWell->m_penTrack; // pTrackGroup_2->SetPenGrid(pWell->m_penGridMajor, pWell->m_penGridMinor); // pTrackGroup_2->SetFontHeadMark(pWell->m_fontHeadMark); // pTrackGroup_2->SetFontGridMark(pWell->m_fontGridMark); // pTrackGroup_2->SetSpace(pWell->m_fMajorSpace, pWell->m_fMinorSpace); // pTrackGroup_2->m_dTrackWidth = 30.0; // CTrackCurveObj* pTrackCurveObj_21 = NULL; // pTrackCurveObj_21 = CreateNewCurveTrack(pWell,"SH","%",30.0,atof("0"),atof("100"),FALSE,RGB(255,0,0)); // CTrackCurveObj* pTrackCurveObj_22 = NULL; // pTrackCurveObj_22 = CreateNewCurveTrack(pWell,"POR","%",30.0,atof("100"),atof("0"),FALSE,RGB(0,0,255)); // ////// // pTrackCurveObj_21->SetFillStyleLeft(TRUE); // pTrackCurveObj_21->SetFillBrushPattern(TRUE); // pTrackCurveObj_21->SetShowHeadFill(FALSE); // pTrackCurveObj_21->m_fillClr = RGB(213, 213, 213); // pTrackCurveObj_21->m_penCurve.m_color = RGB(255,0,0); // pTrackCurveObj_21->m_strFillSymbol = "砂质泥岩"; // if(!pTrackCurveObj_21->m_strFillSymbol.IsEmpty()) // { // CString strMark; // strMark.Format("%s", LIB_MARK_FILL); // strMark = strMark + pTrackCurveObj_21->m_strFillSymbol; // pTrackCurveObj_21->m_pMarkFill = (CXyBase*)AfxGetGlobalWellXy()->GetMark()->FindMark(strMark); // } // pTrackCurveObj_22->SetFillStyleLeft(TRUE); // pTrackCurveObj_22->SetFillBrushPattern(TRUE); // pTrackCurveObj_22->SetShowHeadFill(FALSE); // pTrackCurveObj_22->m_fillClr = RGB(255, 255, 0); // pTrackCurveObj_22->m_penCurve.m_color = RGB(0,0,255); // pTrackCurveObj_22->m_strFillSideCurve = "SH"; // pTrackCurveObj_22->m_strFillSymbol = "砂岩"; // if(!pTrackCurveObj_22->m_strFillSymbol.IsEmpty()) // { // CString strMark; // strMark.Format("%s", LIB_MARK_FILL); // strMark = strMark + pTrackCurveObj_22->m_strFillSymbol; // pTrackCurveObj_22->m_pMarkFill = (CXyBase*)AfxGetGlobalWellXy()->GetMark()->FindMark(strMark); // } // ////// // pTrackGroup_2->SetParentGroup(pWell); // pTrackGroup_2->SetParentObj(pWell); // pTrackGroup_2->SetParentXY(pWell->GetParentXY()); // pTrackGroup_2->AddTrack(pTrackCurveObj_21); // pTrackGroup_2->AddTrack(pTrackCurveObj_22); // ///////////////////////////////////////////////////////////////////////////////////////////////// // pWell->AddTrack(pTrackGroup_1); // pWell->AddTrack(pTrackGroup_2); // int nIndex = 0; // CDataObj_Curve* pDataObj_Curve = NULL; // POSITION pos = CurveList.GetHeadPosition(); // while(pos) // { // pDataObj_Curve = (CDataObj_Curve*)CurveList.GetNext(pos); // if (nIndex == 4) // { // break; // } // if (pDataObj_Curve->m_curve_name == pTrackCurveObj_11->m_strTrackName) // { // pTrackCurveObj_11->m_dataObj = *pDataObj_Curve; // pTrackCurveObj_11->m_fSdep = pDataObj_Curve->m_startdep; // pTrackCurveObj_11->m_fEdep = pDataObj_Curve->m_enddep; // pTrackCurveObj_11->ReadCurveData(); // nIndex++; // } // else if (pDataObj_Curve->m_curve_name == pTrackCurveObj_12->m_strTrackName) // { // pTrackCurveObj_12->m_dataObj = *pDataObj_Curve; // pTrackCurveObj_12->m_fSdep = pDataObj_Curve->m_startdep; // pTrackCurveObj_12->m_fEdep = pDataObj_Curve->m_enddep; // pTrackCurveObj_12->ReadCurveData(); // nIndex++; // } // else if (pDataObj_Curve->m_curve_name == pTrackCurveObj_21->m_strTrackName) // { // pTrackCurveObj_21->m_dataObj = *pDataObj_Curve; // pTrackCurveObj_21->m_fSdep = pDataObj_Curve->m_startdep; // pTrackCurveObj_21->m_fEdep = pDataObj_Curve->m_enddep; // pTrackCurveObj_21->ReadCurveData(); // nIndex++; // } // else if (pDataObj_Curve->m_curve_name == pTrackCurveObj_22->m_strTrackName) // { // pTrackCurveObj_22->m_dataObj = *pDataObj_Curve; // pTrackCurveObj_22->m_fSdep = pDataObj_Curve->m_startdep; // pTrackCurveObj_22->m_fEdep = pDataObj_Curve->m_enddep; // pTrackCurveObj_22->ReadCurveData(); // nIndex++; // } // } // if(bAddResult) // { // //增加解释道 // CClientDC dc(NULL); // //设置井内所有道对象的属性 // CTrackResultObj* pTrackResult = new CTrackResultObj(); // pTrackResult->m_strTitle = "解释"; // pTrackResult->m_font = pWell->m_fontTrack; // pTrackResult->m_pen = pWell->m_penTrack; // pTrackResult->SetPenGrid(pWell->m_penGridMajor, pWell->m_penGridMinor); // pTrackResult->SetFontHeadMark(pWell->m_fontHeadMark,FALSE); // pTrackResult->SetFontGridMark(pWell->m_fontGridMark); // pTrackResult->SetSpace(pWell->m_fMajorSpace, pWell->m_fMinorSpace); // CString titlename = pTrackResult->m_strTitle; // pTrackResult->m_dTrackWidth = 30.0; // pWell->AddTrack(pTrackResult); // CPoint2D ptf = pWell->GetPos().TopLeft(); // pWell->ComputeSize(ptf); // //////////////////////////////////////////////////////////////////////// // if (pTrackCurveObj_11!=NULL&&pTrackCurveObj_22!=NULL) // { // double sdep = pTrackCurveObj_11->m_fSdep; // double edep = pTrackCurveObj_11->m_fEdep; // //标准化顶底深 // if(float(sdep/pTrackCurveObj_11->m_fRlev) != int(sdep/pTrackCurveObj_11->m_fRlev)) // { // sdep = float(int(sdep/pTrackCurveObj_11->m_fRlev + 1)*pTrackCurveObj_11->m_fRlev); // } // if(float(edep/pTrackCurveObj_11->m_fRlev) != int(edep/pTrackCurveObj_11->m_fRlev)) // { // edep = float(int(edep/pTrackCurveObj_11->m_fRlev)*pTrackCurveObj_11->m_fRlev); // } // int index1,index2; // //曲线数据的起始点和结束点序号 // index1 = int((pWell->m_fSdep - sdep)/pTrackCurveObj_11->m_fRlev); // index2 = int((pWell->m_fEdep - sdep)/pTrackCurveObj_11->m_fRlev); // index2 +=1; // float fTop,fEnd; // CString strType,strType1; // CRect8 analysisrect; // int analysisIndex = -1; // CRect8 rect = pTrackResult->GetPos(); // rect.top= pTrackResult->m_HeadRect.bottom; // for (int i=index1;im_fRlev; // if (pTrackCurveObj_11->GetCurveValue(i)>=SwWaterTemp&&pTrackCurveObj_11->GetCurveValue(i)<=100&&pTrackCurveObj_22->GetCurveValue(i)>PorTemp) // { // analysisIndex = i; // strType = "水层"; // } // else if (pTrackCurveObj_11->GetCurveValue(i)>=SwOilTemp&&pTrackCurveObj_11->GetCurveValue(i)GetCurveValue(i)>PorTemp) // { // analysisIndex = i; // strType = "油水同层"; // } // else if (pTrackCurveObj_11->GetCurveValue(i)GetCurveValue(i)>PorTemp) // { // analysisIndex = i; // strType = "油层"; // } // } // else // { // strType1=""; // if (pTrackCurveObj_11->GetCurveValue(i)>=SwWaterTemp&&pTrackCurveObj_11->GetCurveValue(i)<=100) // { // strType1 = "水层"; // } // else if (pTrackCurveObj_11->GetCurveValue(i)>=SwOilTemp&&pTrackCurveObj_11->GetCurveValue(i)GetCurveValue(i)GetCurveValue(i)<=PorTemp||strType1!=strType)&&(fEnd>fTop)) // { // if((fEnd-fTop)>AnalysisHd) // { // analysisrect.left = pTrackResult->GetPos().left; // analysisrect.right = pTrackResult->GetPos().right; // //analysisrect.top = pTrackResult->m_HeadRect.bottom+(fTop-pWell->m_fSdep)/0.0254/ // // (double)pWell->m_fProportion * dc.GetDeviceCaps(LOGPIXELSY); // //analysisrect.bottom = pTrackResult->m_HeadRect.bottom+(fEnd-pWell->m_fSdep)/0.0254/ // // (double)pWell->m_fProportion * dc.GetDeviceCaps(LOGPIXELSY); // //创建岩性对象 // CTrackInResult* pTrackInResult = new CTrackInResult(); // pTrackInResult->m_fSdep = fTop/*pWell->ScreenYToDepth(pTrackInResult->GetPos().top)*/; // pTrackInResult->m_fEdep = fEnd/*pWell->ScreenYToDepth(pTrackInResult->GetPos().bottom)*/; // analysisrect.top = pWell->DepthToScreenY(pTrackInResult->m_fSdep); // analysisrect.bottom = pWell->DepthToScreenY(pTrackInResult->m_fEdep); // pTrackInResult->SetRange(analysisrect); // pTrackInResult->m_strResult = strType; // if(!pTrackInResult->m_strResult.IsEmpty()) // { // CString strMark; // strMark.Format("%s", LIB_MARK_STRATUMFLUID); // strMark = strMark + pTrackInResult->m_strResult; // if(AfxGetGlobalWellXy() != NULL) // pTrackInResult->m_pMarkResult = (CXyBase*)AfxGetGlobalWellXy()->GetMark()->FindMark(strMark); // strMark = pTrackInResult->GetMarkSymbol(); // if(AfxGetGlobalWellXy() != NULL) // pTrackInResult->m_pMarkSymbol = (CXyBase*)AfxGetGlobalWellXy()->GetMark()->FindMark(strMark); // strMark.Format("%s", LIB_MARK_FLUIDCOLOR); // strMark = strMark + pTrackInResult->m_strResult; // if(AfxGetGlobalWellXy() != NULL) // pTrackInResult->m_brush.m_color = AfxGetGlobalWellXy()->GetMark()->FindMarkColor(strMark); // } // pTrackInResult->m_fValidThick = pTrackInResult->m_fEdep - pTrackInResult->m_fSdep; // //if (pTrackInResult->GetPos().top < rect.top||pTrackInResult->GetPos().bottom>rect.bottom) // //{ // // //隐藏对象 // // pTrackInResult->SetViewState(UNVIEW_STATE); // //} // if(pTrackInResult->m_fSdep >= pWell->m_fEdep || pTrackInResult->m_fEdep <= pWell->m_fSdep) // pTrackInResult->SetViewState(UNVIEW_STATE); // //添加到子对象链表中 // pTrackResult->Add(pTrackInResult); // } // analysisIndex = -1; // } // else // { // fEnd = sdep+(i-index1)*pTrackCurveObj_11->m_fRlev; // } // } // } // //最后一个解释结果 // if(analysisIndex!=-1) // { // if ((fEnd-fTop)>AnalysisHd) // { // analysisrect.left = pTrackResult->GetPos().left; // analysisrect.right = pTrackResult->GetPos().right; // //analysisrect.top = pTrackResult->m_HeadRect.bottom+(fTop-pWell->m_fSdep)/0.0254/ // // (double)pWell->m_fProportion * dc.GetDeviceCaps(LOGPIXELSY); // //analysisrect.bottom = pTrackResult->m_HeadRect.bottom+(fEnd-pWell->m_fEdep)/0.0254/ // // (double)pWell->m_fProportion * dc.GetDeviceCaps(LOGPIXELSY); // //创建岩性对象 // CTrackInResult* pTrackInResult = new CTrackInResult(); // pTrackInResult->m_fSdep = fTop/*pWell->ScreenYToDepth(pTrackInResult->GetPos().top)*/; // pTrackInResult->m_fEdep = fEnd/*pWell->ScreenYToDepth(pTrackInResult->GetPos().bottom)*/; // analysisrect.top = pWell->DepthToScreenY(pTrackInResult->m_fSdep); // analysisrect.bottom = pWell->DepthToScreenY(pTrackInResult->m_fEdep); // pTrackInResult->SetRange(analysisrect); // //if (pTrackInResult->GetPos().top < rect.top||pTrackInResult->GetPos().bottom>rect.bottom) // //{ // // //隐藏对象 // // pTrackInResult->SetViewState(UNVIEW_STATE); // //} // pTrackInResult->m_fValidThick = pTrackInResult->m_fEdep - pTrackInResult->m_fSdep; // if(pTrackInResult->m_fSdep >= pWell->m_fEdep || pTrackInResult->m_fEdep <= pWell->m_fSdep) // pTrackInResult->SetViewState(UNVIEW_STATE); // //添加到子对象链表中 // pTrackResult->Add(pTrackInResult); // } // } // } // } // else // { // //重新排列组合关系 // //pWell->SortTrackGroup(); // CPoint2D ptf = pWell->GetPos().TopLeft(); // pWell->ComputeSize(ptf); // } //} //void CItemSingleWell::CreateSandTrack(CWellPole* pWell,CDataObjList& CurveList,BOOL bAddResult,double PorTemp,double SwWaterTemp,double SwOilTemp,double AnalysisHd) //{ // CTrackList trackList; // CWellBaseObj* pObj = NULL; // CTrackObj* pTrack = NULL; // ///////////////////////////////////////////////////////////////////////////////////////////////// // //生成新的组合道 // CTrackGroupObj* pTrackGroup_1 = new CTrackGroupObj; // pTrackGroup_1->SetGroupType(Group_Vertical); // pTrackGroup_1->m_font = pWell->m_fontTrack; // pTrackGroup_1->m_pen = pWell->m_penTrack; // pTrackGroup_1->SetPenGrid(pWell->m_penGridMajor, pWell->m_penGridMinor); // pTrackGroup_1->SetFontHeadMark(pWell->m_fontHeadMark); // pTrackGroup_1->SetFontGridMark(pWell->m_fontGridMark); // pTrackGroup_1->SetSpace(pWell->m_fMajorSpace, pWell->m_fMinorSpace); // pTrackGroup_1->m_dTrackWidth = 30.0; // CTrackCurveObj* pTrackCurveObj_11 = NULL; // pTrackCurveObj_11 = CreateNewCurveTrack(pWell,"SH","%",30.0,float(atof("0")),float(atof("100")),FALSE,RGB(0,0,255)); // CTrackCurveObj* pTrackCurveObj_12 = NULL; // pTrackCurveObj_12 = CreateNewCurveTrack(pWell,"PERM","豪达西",30.0,float(atof("0.1")),float(atof("1000")),TRUE,RGB(255,128,0)); // pTrackGroup_1->SetParentGroup(pWell); // pTrackGroup_1->SetParentObj(pWell); // pTrackGroup_1->SetParentXY(pWell->GetParentXY()); // pTrackGroup_1->AddTrack(pTrackCurveObj_11); // pTrackGroup_1->AddTrack(pTrackCurveObj_12); // ///////////////////////////////////////////////////////////////////////////////////////////////// // //生成新的组合道 // CTrackGroupObj* pTrackGroup_2 = new CTrackGroupObj; // pTrackGroup_2->SetGroupType(Group_Vertical); // pTrackGroup_2->m_font = pWell->m_fontTrack; // pTrackGroup_2->m_pen = pWell->m_penTrack; // pTrackGroup_2->SetPenGrid(pWell->m_penGridMajor, pWell->m_penGridMinor); // pTrackGroup_2->SetFontHeadMark(pWell->m_fontHeadMark); // pTrackGroup_2->SetFontGridMark(pWell->m_fontGridMark); // pTrackGroup_2->SetSpace(pWell->m_fMajorSpace, pWell->m_fMinorSpace); // pTrackGroup_2->m_dTrackWidth = 30.0; // CTrackCurveObj* pTrackCurveObj_21 = NULL; // pTrackCurveObj_21 = CreateNewCurveTrack(pWell,"SW","%",30.0,float(atof("100")),float(atof("0")),FALSE,RGB(0,0,255)); // CTrackCurveObj* pTrackCurveObj_22 = NULL; // pTrackCurveObj_22 = CreateNewCurveTrack(pWell,"PORH","%",30.0,float(atof("0")),float(atof("25")),FALSE,RGB(255,128,0)); // CTrackCurveObj* pTrackCurveObj_23 = NULL; // pTrackCurveObj_23 = CreateNewCurveTrack(pWell,"PORX","%",30.0,float(atof("0")),float(atof("25")),FALSE,RGB(255,128,255)); // pTrackGroup_2->SetParentGroup(pWell); // pTrackGroup_2->SetParentObj(pWell); // pTrackGroup_2->SetParentXY(pWell->GetParentXY()); // pTrackGroup_2->AddTrack(pTrackCurveObj_21); // pTrackGroup_2->AddTrack(pTrackCurveObj_22); // pTrackGroup_2->AddTrack(pTrackCurveObj_23); // ///////////////////////////////////////////////////////////////////////////////////////////////// // //生成新的组合道 // CTrackGroupObj* pTrackGroup_3 = new CTrackGroupObj; // pTrackGroup_3->SetGroupType(Group_Vertical); // pTrackGroup_3->m_font = pWell->m_fontTrack; // pTrackGroup_3->m_pen = pWell->m_penTrack; // pTrackGroup_3->SetPenGrid(pWell->m_penGridMajor, pWell->m_penGridMinor); // pTrackGroup_3->SetFontHeadMark(pWell->m_fontHeadMark); // pTrackGroup_3->SetFontGridMark(pWell->m_fontGridMark); // pTrackGroup_3->SetSpace(pWell->m_fMajorSpace, pWell->m_fMinorSpace); // pTrackGroup_3->m_dTrackWidth = 30.0; // CTrackCurveObj* pTrackCurveObj_31 = NULL; // pTrackCurveObj_31 = CreateNewCurveTrack(pWell,"CAL","英寸",30.0,float(atof("8")),float(atof("18")),FALSE,RGB(255,0,0)); // CTrackCurveObj* pTrackCurveObj_32 = NULL; // pTrackCurveObj_32 = CreateNewCurveTrack(pWell,"POR","%",30.0,float(atof("50")),float(atof("0")),FALSE,RGB(255,128,0)); // CTrackCurveObj* pTrackCurveObj_33 = NULL; // pTrackCurveObj_33 = CreateNewCurveTrack(pWell,"PORF","%",30.0,float(atof("50")),float(atof("0")),FALSE,RGB(0,0,255)); // CTrackCurveObj* pTrackCurveObj_34 = NULL; // pTrackCurveObj_34 = CreateNewCurveTrack(pWell,"PORW","%",30.0,float(atof("50")),float(atof("0")),FALSE,RGB(0,0,255)); // pTrackCurveObj_33->SetFillStyleLeft(TRUE); // pTrackCurveObj_33->SetFillBrushPattern(TRUE); // pTrackCurveObj_33->SetShowHeadFill(FALSE); // pTrackCurveObj_33->m_fillClr = RGB(0,0,0); // pTrackCurveObj_33->m_strFillSideCurve = "POR"; // pTrackCurveObj_34->SetFillStyleLeft(TRUE); // pTrackCurveObj_34->SetFillBrushPattern(TRUE); // pTrackCurveObj_34->SetShowHeadFill(FALSE); // pTrackCurveObj_34->m_fillClr = RGB(255,0,0); // pTrackCurveObj_34->m_strFillSideCurve = "PORF"; // pTrackGroup_3->SetParentGroup(pWell); // pTrackGroup_3->SetParentObj(pWell); // pTrackGroup_3->SetParentXY(pWell->GetParentXY()); // pTrackGroup_3->AddTrack(pTrackCurveObj_31); // pTrackGroup_3->AddTrack(pTrackCurveObj_32); // pTrackGroup_3->AddTrack(pTrackCurveObj_33); // pTrackGroup_3->AddTrack(pTrackCurveObj_34); // ///////////////////////////////////////////////////////////////////////////////////////////////// // //生成新的组合道 // CTrackGroupObj* pTrackGroup_4 = new CTrackGroupObj; // pTrackGroup_4->SetGroupType(Group_Vertical); // pTrackGroup_4->m_font = pWell->m_fontTrack; // pTrackGroup_4->m_pen = pWell->m_penTrack; // pTrackGroup_4->SetPenGrid(pWell->m_penGridMajor, pWell->m_penGridMinor); // pTrackGroup_4->SetFontHeadMark(pWell->m_fontHeadMark); // pTrackGroup_4->SetFontGridMark(pWell->m_fontGridMark); // pTrackGroup_4->SetSpace(pWell->m_fMajorSpace, pWell->m_fMinorSpace); // pTrackGroup_4->m_dTrackWidth = 30.0; // CTrackCurveObj* pTrackCurveObj_41 = NULL; // pTrackCurveObj_41 = CreateNewCurveTrack(pWell,"SH","%",30.0,float(atof("0")),float(atof("100")),FALSE,RGB(255,0,0)); // CTrackCurveObj* pTrackCurveObj_42 = NULL; // pTrackCurveObj_42 = CreateNewCurveTrack(pWell,"POR","%",30.0,float(atof("100")),float(atof("0")),FALSE,RGB(0,0,255)); // pTrackCurveObj_41->SetFillStyleLeft(TRUE); // pTrackCurveObj_41->SetFillBrushPattern(TRUE); // pTrackCurveObj_41->SetShowHeadFill(FALSE); // pTrackCurveObj_41->m_fillClr = RGB(213, 213, 213); // pTrackCurveObj_41->m_strFillSymbol = "砂质泥岩"; // if(!pTrackCurveObj_41->m_strFillSymbol.IsEmpty()) // { // CString strMark; // strMark.Format("%s", LIB_MARK_FILL); // strMark = strMark + pTrackCurveObj_41->m_strFillSymbol; // pTrackCurveObj_41->m_pMarkFill = (CXyBase*)AfxGetGlobalWellXy()->GetMark()->FindMark(strMark); // } // pTrackCurveObj_42->SetFillStyleLeft(TRUE); // pTrackCurveObj_42->SetFillBrushPattern(TRUE); // pTrackCurveObj_42->SetShowHeadFill(FALSE); // pTrackCurveObj_42->m_fillClr = RGB(255, 255, 0); // pTrackCurveObj_42->m_strFillSideCurve = "SH"; // pTrackCurveObj_42->m_strFillSymbol = "砂岩"; // if(!pTrackCurveObj_42->m_strFillSymbol.IsEmpty()) // { // CString strMark; // strMark.Format("%s", LIB_MARK_FILL); // strMark = strMark + pTrackCurveObj_42->m_strFillSymbol; // pTrackCurveObj_42->m_pMarkFill = (CXyBase*)AfxGetGlobalWellXy()->GetMark()->FindMark(strMark); // } // pTrackGroup_4->SetParentGroup(pWell); // pTrackGroup_4->SetParentObj(pWell); // pTrackGroup_4->SetParentXY(pWell->GetParentXY()); // pTrackGroup_4->AddTrack(pTrackCurveObj_41); // pTrackGroup_4->AddTrack(pTrackCurveObj_42); // ///////////////////////////////////////////////////////////////////////////////////////////////// // pWell->AddTrack(pTrackGroup_1); // pWell->AddTrack(pTrackGroup_2); // pWell->AddTrack(pTrackGroup_3); // pWell->AddTrack(pTrackGroup_4); // int nIndex = 0; // CDataObj_Curve* pDataObj_Curve = NULL; // POSITION pos = CurveList.GetHeadPosition(); // while(pos) // { // pDataObj_Curve = (CDataObj_Curve*)CurveList.GetNext(pos); // if (nIndex == 11) // { // break; // } // if (pDataObj_Curve->m_curve_name == pTrackCurveObj_11->m_strTrackName) // { // pTrackCurveObj_11->m_dataObj = *pDataObj_Curve; // pTrackCurveObj_11->m_fSdep = pDataObj_Curve->m_startdep; // pTrackCurveObj_11->m_fEdep = pDataObj_Curve->m_enddep; // pTrackCurveObj_11->ReadCurveData(); // nIndex++; // } // /*else*/ if (pDataObj_Curve->m_curve_name == pTrackCurveObj_12->m_strTrackName) // { // pTrackCurveObj_12->m_dataObj = *pDataObj_Curve; // pTrackCurveObj_12->m_fSdep = pDataObj_Curve->m_startdep; // pTrackCurveObj_12->m_fEdep = pDataObj_Curve->m_enddep; // pTrackCurveObj_12->ReadCurveData(); // nIndex++; // } // /*else*/ if (pDataObj_Curve->m_curve_name == pTrackCurveObj_21->m_strTrackName) // { // pTrackCurveObj_21->m_dataObj = *pDataObj_Curve; // pTrackCurveObj_21->m_fSdep = pDataObj_Curve->m_startdep; // pTrackCurveObj_21->m_fEdep = pDataObj_Curve->m_enddep; // pTrackCurveObj_21->ReadCurveData(); // nIndex++; // } // /*else*/ if (pDataObj_Curve->m_curve_name == pTrackCurveObj_22->m_strTrackName) // { // pTrackCurveObj_22->m_dataObj = *pDataObj_Curve; // pTrackCurveObj_22->m_fSdep = pDataObj_Curve->m_startdep; // pTrackCurveObj_22->m_fEdep = pDataObj_Curve->m_enddep; // pTrackCurveObj_22->ReadCurveData(); // nIndex++; // } // /*else*/ if (pDataObj_Curve->m_curve_name == pTrackCurveObj_23->m_strTrackName) // { // pTrackCurveObj_23->m_dataObj = *pDataObj_Curve; // pTrackCurveObj_23->m_fSdep = pDataObj_Curve->m_startdep; // pTrackCurveObj_23->m_fEdep = pDataObj_Curve->m_enddep; // pTrackCurveObj_23->ReadCurveData(); // nIndex++; // } // /*else*/ if (pDataObj_Curve->m_curve_name == pTrackCurveObj_31->m_strTrackName) // { // pTrackCurveObj_31->m_dataObj = *pDataObj_Curve; // pTrackCurveObj_31->m_fSdep = pDataObj_Curve->m_startdep; // pTrackCurveObj_31->m_fEdep = pDataObj_Curve->m_enddep; // pTrackCurveObj_31->ReadCurveData(); // nIndex++; // } // /*else*/ if (pDataObj_Curve->m_curve_name == pTrackCurveObj_32->m_strTrackName) // { // pTrackCurveObj_32->m_dataObj = *pDataObj_Curve; // pTrackCurveObj_32->m_fSdep = pDataObj_Curve->m_startdep; // pTrackCurveObj_32->m_fEdep = pDataObj_Curve->m_enddep; // pTrackCurveObj_32->ReadCurveData(); // nIndex++; // } // /*else*/ if (pDataObj_Curve->m_curve_name == pTrackCurveObj_33->m_strTrackName) // { // pTrackCurveObj_33->m_dataObj = *pDataObj_Curve; // pTrackCurveObj_33->m_fSdep = pDataObj_Curve->m_startdep; // pTrackCurveObj_33->m_fEdep = pDataObj_Curve->m_enddep; // pTrackCurveObj_33->ReadCurveData(); // nIndex++; // } // /*else*/ if (pDataObj_Curve->m_curve_name == pTrackCurveObj_34->m_strTrackName) // { // pTrackCurveObj_34->m_dataObj = *pDataObj_Curve; // pTrackCurveObj_34->m_fSdep = pDataObj_Curve->m_startdep; // pTrackCurveObj_34->m_fEdep = pDataObj_Curve->m_enddep; // pTrackCurveObj_34->ReadCurveData(); // nIndex++; // } // /*else*/ if (pDataObj_Curve->m_curve_name == pTrackCurveObj_41->m_strTrackName) // { // pTrackCurveObj_41->m_dataObj = *pDataObj_Curve; // pTrackCurveObj_41->m_fSdep = pDataObj_Curve->m_startdep; // pTrackCurveObj_41->m_fEdep = pDataObj_Curve->m_enddep; // pTrackCurveObj_41->ReadCurveData(); // nIndex++; // } // /*else*/ if (pDataObj_Curve->m_curve_name == pTrackCurveObj_42->m_strTrackName) // { // pTrackCurveObj_42->m_dataObj = *pDataObj_Curve; // pTrackCurveObj_42->m_fSdep = pDataObj_Curve->m_startdep; // pTrackCurveObj_42->m_fEdep = pDataObj_Curve->m_enddep; // pTrackCurveObj_42->ReadCurveData(); // nIndex++; // } // } // if(bAddResult) // { // //增加解释道 // CClientDC dc(NULL); // //设置井内所有道对象的属性 // CTrackResultObj* pTrackResult = new CTrackResultObj(); // pTrackResult->m_strTitle = "解释"; // pTrackResult->m_font = pWell->m_fontTrack; // pTrackResult->m_pen = pWell->m_penTrack; // pTrackResult->SetPenGrid(pWell->m_penGridMajor, pWell->m_penGridMinor); // pTrackResult->SetFontHeadMark(pWell->m_fontHeadMark,FALSE); // pTrackResult->SetFontGridMark(pWell->m_fontGridMark); // pTrackResult->SetSpace(pWell->m_fMajorSpace, pWell->m_fMinorSpace); // CString titlename = pTrackResult->m_strTitle; // pTrackResult->m_dTrackWidth = 30.0; // pWell->AddTrack(pTrackResult); // //重新排列组合关系 // //pWell->SortTrackGroup(); // CPoint2D ptf = pWell->GetPos().TopLeft(); // pWell->ComputeSize(ptf); // //////////////////////////////////////////////////////////////////////// // if (pTrackCurveObj_21!=NULL&&pTrackCurveObj_32!=NULL) // { // double sdep = pTrackCurveObj_21->m_fSdep; // double edep = pTrackCurveObj_21->m_fEdep; // //标准化顶底深 // if(float(sdep/pTrackCurveObj_21->m_fRlev) != int(sdep/pTrackCurveObj_21->m_fRlev)) // { // sdep = float(int(sdep/pTrackCurveObj_21->m_fRlev + 1)*pTrackCurveObj_21->m_fRlev); // } // if(float(edep/pTrackCurveObj_21->m_fRlev) != int(edep/pTrackCurveObj_21->m_fRlev)) // { // edep = float(int(edep/pTrackCurveObj_21->m_fRlev)*pTrackCurveObj_21->m_fRlev); // } // int index1,index2; // //曲线数据的起始点和结束点序号 // index1 = int((pWell->m_fSdep - sdep)/pTrackCurveObj_21->m_fRlev); // index2 = int((pWell->m_fEdep - sdep)/pTrackCurveObj_21->m_fRlev); // index2 +=1; // float fTop,fEnd; // CString strType,strType1; // CRect8 analysisrect; // int analysisIndex = -1; // CRect8 rect = pTrackResult->GetPos(); // rect.top= pTrackResult->m_HeadRect.bottom; // for (int i=index1;im_fRlev; // if (pTrackCurveObj_21->GetCurveValue(i)>=SwWaterTemp&&pTrackCurveObj_21->GetCurveValue(i)<=100&&pTrackCurveObj_32->GetCurveValue(i)>PorTemp) // { // analysisIndex = i; // strType = "水层"; // } // else if (pTrackCurveObj_21->GetCurveValue(i)>=SwOilTemp&&pTrackCurveObj_21->GetCurveValue(i)GetCurveValue(i)>PorTemp) // { // analysisIndex = i; // strType = "油水同层"; // } // else if (pTrackCurveObj_21->GetCurveValue(i)GetCurveValue(i)>PorTemp) // { // analysisIndex = i; // strType = "油层"; // } // } // else // { // strType1=""; // if (pTrackCurveObj_21->GetCurveValue(i)>=SwWaterTemp&&pTrackCurveObj_21->GetCurveValue(i)<=100) // { // strType1 = "水层"; // } // else if (pTrackCurveObj_21->GetCurveValue(i)>=SwOilTemp&&pTrackCurveObj_21->GetCurveValue(i)GetCurveValue(i)GetCurveValue(i)<=PorTemp||strType1!=strType)&&(fEnd>fTop)) // { // if((fEnd-fTop)>AnalysisHd) // { // analysisrect.left = pTrackResult->GetPos().left; // analysisrect.right = pTrackResult->GetPos().right; // //analysisrect.top = pTrackResult->m_HeadRect.bottom+(fTop-pWell->m_fSdep)/0.0254/ // // (double)pWell->m_fProportion * dc.GetDeviceCaps(LOGPIXELSY); // //analysisrect.bottom = pTrackResult->m_HeadRect.bottom+(fEnd-pWell->m_fSdep)/0.0254/ // // (double)pWell->m_fProportion * dc.GetDeviceCaps(LOGPIXELSY); // //创建岩性对象 // CTrackInResult* pTrackInResult = new CTrackInResult(); // pTrackInResult->m_fSdep = fTop/*pWell->ScreenYToDepth(pTrackInResult->GetPos().top)*/; // pTrackInResult->m_fEdep = fEnd/*pWell->ScreenYToDepth(pTrackInResult->GetPos().bottom)*/; // analysisrect.top = pWell->DepthToScreenY(pTrackInResult->m_fSdep); // analysisrect.bottom = pWell->DepthToScreenY(pTrackInResult->m_fEdep); // pTrackInResult->SetRange(analysisrect); // pTrackInResult->m_strResult = strType; // if(!pTrackInResult->m_strResult.IsEmpty()) // { // CString strMark; // strMark.Format("%s", LIB_MARK_STRATUMFLUID); // strMark = strMark + pTrackInResult->m_strResult; // if(AfxGetGlobalWellXy() != NULL) // pTrackInResult->m_pMarkResult = (CXyBase*)AfxGetGlobalWellXy()->GetMark()->FindMark(strMark); // strMark = pTrackInResult->GetMarkSymbol(); // if(AfxGetGlobalWellXy() != NULL) // pTrackInResult->m_pMarkSymbol = (CXyBase*)AfxGetGlobalWellXy()->GetMark()->FindMark(strMark); // strMark.Format("%s", LIB_MARK_FLUIDCOLOR); // strMark = strMark + pTrackInResult->m_strResult; // if(AfxGetGlobalWellXy() != NULL) // pTrackInResult->m_brush.m_color = AfxGetGlobalWellXy()->GetMark()->FindMarkColor(strMark); // } // pTrackInResult->m_fValidThick = pTrackInResult->m_fEdep - pTrackInResult->m_fSdep; // //if (pTrackInResult->GetPos().top < rect.top||pTrackInResult->GetPos().bottom>rect.bottom) // //{ // // //隐藏对象 // // pTrackInResult->SetViewState(UNVIEW_STATE); // //} // if(pTrackInResult->m_fSdep >= pWell->m_fEdep || pTrackInResult->m_fEdep <= pWell->m_fSdep) // pTrackInResult->SetViewState(UNVIEW_STATE); // //添加到子对象链表中 // pTrackResult->Add(pTrackInResult); // } // analysisIndex = -1; // } // else // { // fEnd = sdep+(i-index1)*pTrackCurveObj_21->m_fRlev; // } // } // } // //最后一个解释结果 // if(analysisIndex!=-1) // { // if ((fEnd-fTop)>AnalysisHd) // { // analysisrect.left = pTrackResult->GetPos().left; // analysisrect.right = pTrackResult->GetPos().right; // //analysisrect.top = pTrackResult->m_HeadRect.bottom+(fTop-pWell->m_fSdep)/0.0254/ // // (double)pWell->m_fProportion * dc.GetDeviceCaps(LOGPIXELSY); // //analysisrect.bottom = pTrackResult->m_HeadRect.bottom+(fEnd-pWell->m_fEdep)/0.0254/ // // (double)pWell->m_fProportion * dc.GetDeviceCaps(LOGPIXELSY); // //创建岩性对象 // CTrackInResult* pTrackInResult = new CTrackInResult(); // pTrackInResult->m_fSdep = fTop/*pWell->ScreenYToDepth(pTrackInResult->GetPos().top)*/; // pTrackInResult->m_fEdep = fEnd/*pWell->ScreenYToDepth(pTrackInResult->GetPos().bottom)*/; // analysisrect.top = pWell->DepthToScreenY(pTrackInResult->m_fSdep); // analysisrect.bottom = pWell->DepthToScreenY(pTrackInResult->m_fEdep); // pTrackInResult->SetRange(analysisrect); // //if (pTrackInResult->GetPos().top < rect.top||pTrackInResult->GetPos().bottom>rect.bottom) // //{ // // //隐藏对象 // // pTrackInResult->SetViewState(UNVIEW_STATE); // //} // pTrackInResult->m_fValidThick = pTrackInResult->m_fEdep - pTrackInResult->m_fSdep; // if(pTrackInResult->m_fSdep >= pWell->m_fEdep || pTrackInResult->m_fEdep <= pWell->m_fSdep) // pTrackInResult->SetViewState(UNVIEW_STATE); // //添加到子对象链表中 // pTrackResult->Add(pTrackInResult); // } // } // } // } // else // { // //重新排列组合关系 // //pWell->SortTrackGroup(); // CPoint2D ptf = pWell->GetPos().TopLeft(); // pWell->ComputeSize(ptf); // } //} CTrackCurve* CItemSingleWell::CreateNewCurveTrack(CWellPole* pWell,CString strTrackName,CString strUnit,double TrackWidth,double LeftValue,double RightValue,BOOL bLog,COLORREF clr) { CTrackCurve* pTrackCurveObj = new CTrackCurve; pTrackCurveObj->m_font = pWell->m_fontTrack; pTrackCurveObj->m_pen = pWell->m_penTrack; pTrackCurveObj->SetPenGrid(pWell->m_penGridMajor, pWell->m_penGridMinor); pTrackCurveObj->SetFontHeadMark(pWell->m_fontHeadMark,FALSE); pTrackCurveObj->SetFontGridMark(pWell->m_fontGridMark); pTrackCurveObj->SetSpace(pWell->m_fMajorSpace, pWell->m_fMinorSpace); pTrackCurveObj->m_dTrackWidth = TrackWidth; pTrackCurveObj->m_strTrackName = strTrackName; pTrackCurveObj->m_strTitle = strTrackName; pTrackCurveObj->m_curve_num = 1; pTrackCurveObj->m_curve_unit = strUnit; pTrackCurveObj->m_curve_left = LeftValue; pTrackCurveObj->m_curve_right = RightValue; pTrackCurveObj->SetLog(bLog); pTrackCurveObj->m_penCurve.m_color = clr; return pTrackCurveObj; } void CItemSingleWell::DrawSelectPolyRange(CXyDC* pXyDC,std::vector& PtsVec) { if(PtsVec.size() == 0) return; int ptNum = PtsVec.size(); if(m_PointNum < ptNum) { if(m_PointNum>0) { delete [] m_pPointBuf; } m_PointNum = ptNum; m_pPointBuf = new CPoint [m_PointNum]; } for(int ii = 0; ii< ptNum; ii++) { m_pPointBuf[ii] = pXyDC->GetScreen(PtsVec[ii].x0,PtsVec[ii].y0);//m_HeadPtArr[ii].x0,m_HeadPtArr[ii].y0); } CBrush brush,*pbrush; brush.CreateSolidBrush(RGB(160,192,255)); CDC *pCDC = pXyDC->GetDC(); pbrush = pCDC->SelectObject(&brush); pCDC->Polygon(m_pPointBuf,ptNum); pCDC->SelectObject(pbrush); } double CItemSingleWell::GetWellProjecttionAngle(CWellPole *pWellObj) { double angle = 0; typedef struct _JXTraceStruct//斜井数据结构 { double xs; //井斜深 double xj; //井斜角 double zfwj; //真方位角 double x; //投影横坐标 double y; //投影纵坐标 } JXTraceStruct; JXTraceStruct jx,jx1; //CArray JxArray;;//井斜数据,这张表里存得全是原始数据 std::vector JxArray; Struct_InclinedWell incWellStruct; INCLINEDWELLSTRUCTLIST::iterator it = pWellObj->m_InclinedWellList.begin(); for(; it!= pWellObj->m_InclinedWellList.end(); it++) { incWellStruct = *it; jx.xs = incWellStruct.depth; jx.xj = incWellStruct.bevel; jx.zfwj = incWellStruct.azimuth; //JxArray.Add(jx); JxArray.push_back(jx); } if(JxArray.size()>0 /*.GetSize() >0*/) { //sina1,cosa1=前一个点井斜角,sina2,cosa2=后一个点斜井角,sinb1,cosb1=前一个点方位角 //,cosb2,sinb2,=后一点方位角,cosb2b1=后一个方位角减去前一个方位角; double sina1,sina2,cosa1,cosa2,cosb1,cosb2,sinb1,sinb2,cosb2b1; double x3,y3,depV ;//井轨迹点 x3=y3 = 0 ; double dx,dy,dh;//井位移增量,井垂深增量 int ii,num; double b1,b2; //方位角1,方位角2; double ya; //狗腿角,全方位角 double tmpY,tmpY2; depV = 0; double tdmp ; BOOL bAddFirst = FALSE; jx = JxArray[0]; if(jx.xs>0.000001) {//如果第一个点不是从0点开始,就添加一个,这样就能让原始的第一个点数据能正常计算。 jx1.xs = jx1.x = jx1.y = jx1.zfwj = jx1.xj = 0; //JxArray.InsertAt(0,jx1); JxArray.insert(JxArray.begin(),jx1); bAddFirst = TRUE; } else { jx.x = jx.y = 0; JxArray[0] = jx; } num =JxArray.size(); // JxArray.GetCount(); for(ii = 1; ii0.0000001) //当第一个井斜角为0时,设其方位角同第二个一样。 b1 = b2; if(jx.xj>0.0000001 && jx1.xj<0.0000001)//当第2个井斜角为0时,设其方位角同第1个一样。 b2 = b1; sina1 = sin(jx.xj/180*PI); cosa1 = cos(jx.xj/180*PI); sina2 = sin(jx1.xj/180*PI); cosa2 = cos(jx1.xj/180*PI); sinb1 = sin(b1); cosb1 = cos(b1); sinb2 = sin(b2); cosb2 = cos(b2); cosb2b1 = cos(b2 - b1); tdmp= cosa1*cosa2 + sina1*sina2*cosb2b1; if(tdmp>1) tdmp = 1; if(tdmp<-1) tdmp = -1; ya = acos(tdmp);//acos参数在1和-1之间 //tmpY = tan(Ya/2)/ya; if(ya<0.0000001) tmpY = 0.5; else if(ya<0.00001) { tmpY2 = tmpY*tmpY; tmpY = 0.5+tmpY2/24+tmpY2*tmpY2/240+17*tmpY2*tmpY2*tmpY2/40320;//幂级数 } else { tmpY = tan(ya/2)/ya; } dy = (jx1.xs - jx.xs)*(sina1*cosb1+sina2*cosb2)*tmpY; dx = (jx1.xs - jx.xs)*(sina1*sinb1+sina2*sinb2)*tmpY; dh = (jx1.xs - jx.xs)*(cosa1+cosa2)*tmpY; } depV =depV+dh; //jx1.depV = depV; x3 = x3+dx; y3 = y3+dy; jx1.x = x3; jx1.y = y3; JxArray[ii] = jx1; } int firstid = 0; if(bAddFirst) { firstid = 1; } double k; BOOL bleft = FALSE; double xh,yh,xt,yt; xh = JxArray[firstid].x; yh = JxArray[firstid].y; xt = JxArray[JxArray.size()-1].x; yt = JxArray[JxArray.size() -1].y; //JxArray.RemoveAt(0); if(!(abs(xh-xt)<0.00001 && abs(yh-yt)<0.00001)) {//井头和井尾位置一样就不做计算了。 if(abs(xh-xt)<0.00001) {//垂直 if(yh>yt) bleft = FALSE; else bleft = TRUE; k = 999999.99999; angle = 0; } else if(abs(yh-yt)<0.00001) {//水平 k = 0; if(xh>xt) bleft = FALSE; else bleft = TRUE; angle = 90; } else { k = -1*(yh-yt)/(xh-xt);//注意K的计算,因为这个窗口坐标系下,y轴是向下增长的。 if(k<0) { if(xh0) { if(bleft) tmpa = 360 - tmpa*180/PI ; else tmpa = 180 - tmpa*180/PI; } else { if(bleft) tmpa = - tmpa*180/PI ; else tmpa = 180 - tmpa*180/PI; } angle = 90+ tmpa; //k = -1.0*(xh -xt)/(yh-yt); //开始视角方向,与井起始结束点连线垂直 } } } return angle; } //void CItemSingleWell::AddWellIntervals(CXTPPropertyGridItem* pParentItem) //{ // //CCustomItemButton* pItemButton = new CCustomItemButton(IDS_STR_WELLDEPTHSETUP, GetOwner(),""); // //pItemButton->SetFlags(xtpGridItemHasExpandButton/*|xtpGridItemHasEdit*/); // //pParentItem->AddChildItem(pItemButton); // //CPropertyGridItemAdd ItemAdd(NULL); // //CString strTitle; // //strTitle.LoadString(IDS_STR_WELL_INTERVAL); // //if(m_pWell) // //{ // // CString strDepth; // // CString tmpStr; // // CXTPPropertyGridItem *pGridItem,*pItem1; // // if(m_pWell->GetIntervalVec()->size()>0) // // { // // for(int ii = 0; ii< m_pWell->GetIntervalVec()->size(); ii++) // // { // // tmpStr.Format("%s%d",strTitle,ii+1); // // pGridItem = pParentItem->AddChildItem(new CXTPPropertyGridItemCategory(tmpStr)); // // ItemAdd.SetItem(pGridItem); // // pItem1 = ItemAdd.AddItemDouble(IDS_STR_WELL_TOPDEPTH,m_pWell->GetIntervalTop(ii)); // // pItem1->SetReadOnly(TRUE); // // pItem1 = ItemAdd.AddItemDouble(IDS_STR_WELL_ENDDEPTH,m_pWell->GetIntervalBottom(ii)); // // pItem1->SetReadOnly(TRUE); // // pGridItem->Expand(); // // if(!strDepth.IsEmpty()) // // strDepth += ";"; // // tmpStr.Format("%g-%g", m_pWell->GetIntervalTop(ii),m_pWell->GetIntervalBottom(ii)); // // strDepth += tmpStr; // // } // // } // // else // // { // // tmpStr.Format("%s%d",strTitle,1); // // pGridItem = pParentItem->AddChildItem(new CXTPPropertyGridItemCategory(tmpStr)); // // ItemAdd.SetItem(pGridItem); // // pItem1 = ItemAdd.AddItemDouble(IDS_STR_WELL_TOPDEPTH,m_pWell->m_fSdep); // // pItem1->SetReadOnly(TRUE); // // pItem1 = ItemAdd.AddItemDouble(IDS_STR_WELL_ENDDEPTH,m_pWell->m_fEdep); // // pItem1->SetReadOnly(TRUE); // // pGridItem->Expand(); // // strDepth.Format("%g-%g", m_pWell->m_fSdep, m_pWell->m_fEdep); // // } // // pItemButton->SetValue(strDepth); // //} //} CWellPole *CItemSingleWell::GetWellObject() { CWellPoleDoc* pDoc = (CWellPoleDoc*)(GetView()->m_pDoc); return pDoc->GetWellPole(); } void CItemSingleWell::SetReUnDoAction(BOOL bNoSaveData , UINT actionType) { CItemWellBase::SetReUnDoAction(bNoSaveData, actionType); m_pWell = GetWellObject(); } void CItemSingleWell::CancelSelection(void) { CItemWellBase::CancelSelection(); if (m_pWell != NULL) { m_pWell->ClearCurveSegmentObj(); } m_pWell = NULL; } }