You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

4739 lines
146 KiB
C++

1 month ago
#include "StdAfx.h"
#include "stdio.h"
#include <vector>
#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 "MultiWellSectionLib/SectionWellObj.h"
#include "MultiWellSectionLib/BendObj.h"
#include "MultiWellSectionLib/FenceBendObj.h"
#include "MultiWellSectionLib/WellSection.h"
#include "MultiWellSectionLib/WellFence.h"
#include "ActionAddItem.h"
#include "ItemAddBend.h"
#include "ItemWcsTrack.h"
#include "ItemWcsTrackIn.h"
#include "ItemWcsSingleWell.h"
#include "MultiWellSectionDoc.h"
#include "MultiWellSectionlView.h"
//<2F><><EFBFBD><EFBFBD>(ptx,pty)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>x1,y1),(x2,y2)<29><><EFBFBD>ߵĽ<DFB5><C4BD><EFBFBD>.
extern CPoint2D GetVPt_Line(double x1, double y1, double x2, double y2, double ptx, double pty);
/*<2A>õ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><E3A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㣨ox<6F><78>oy<6F><79><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD><EFBFBD><EFBFBD>l,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>start<72><74><EFBFBD><EFBFBD>end<6E>㴹ֱ<E3B4B9><D6B1>,oid<69>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE>=1<><31>ʾ˳ʱ<CBB3><CAB1><EFBFBD><EFBFBD>ת90<39><30>=2<><32>ʾ<EFBFBD><CABE>ʱ<EFBFBD><CAB1>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><EFBFBD><EFBFBD>l<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD>oid<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD>*/
extern CPoint2D GetPtV_Vector(double ox, double oy, double startx, double starty, double endx, double endy, double l, int oid);
namespace NItem
{
CItemWcsSingleWell::CItemWcsSingleWell(CSigmaDoc* pDoc)
: CItemWellBase(pDoc)
{
m_pWndOld = pDoc;
SetType(ITEM_WELL);
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;
//}
strcpy(m_logFont.lfFaceName,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
m_logFont.lfHeight = -12;
m_logFont.lfWidth = 0;
m_logFont.lfCharSet = 1;//<2F><><EFBFBD><EFBFBD><EFBFBD>ּ<EFBFBD>
m_logFont.lfUnderline = 0;//<2F><><EFBFBD>»<EFBFBD><C2BB><EFBFBD>
m_logFont.lfStrikeOut = 0;//<2F>޹ᴩ<DEB9><E1B4A9>
m_logFont.lfWeight = 400;//<2F><><EFBFBD><EFBFBD>//<2F><> 700;
m_logFont.lfItalic = 0; //<2F><><EFBFBD><EFBFBD>
m_logFont.lfCharSet = GB2312_CHARSET;
m_logFont.lfEscapement = 0;
m_logFont.lfOrientation = 0;
}
CItemWcsSingleWell::~CItemWcsSingleWell(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* CItemWcsSingleWell::GetDrawObj()
{
CMultiWellSectionDoc* pDoc = (CMultiWellSectionDoc*)(GetView()->m_pDoc);
return m_pWell;
}
void CItemWcsSingleWell::OnLButtonDown(CDC *pDC, UINT nFlags, CPoint point, int vk)
{
if(m_bEditTrackInData)
{
if(m_pItemSelected != NULL)
{
m_pItemSelected->OnLButtonDown(pDC, nFlags, point, vk);
return;
}
}
CMultiWellSectionDoc* pDoc = (CMultiWellSectionDoc*)GetDoc();
m_bLDown = TRUE;
int nHandleSize=10;
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;
return;
}
}
else
{
pObj = pObjSelected;
nDragHandle = pObj->HitTest(ptReal,dHandleSize,TRUE);
if (nDragHandle!=0)
{
selectMode = CItemNestBase::size;
return;
}
}
//ѡ<>е<EFBFBD><D0B5>߿<EFBFBD><DFBF>϶<EFBFBD><CFB6><EFBFBD><EFBFBD><EFBFBD>
BeSelectBorderLine(pWell,ptReal,dHandleSize ,pDC);
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);
////<2F>е<EFBFBD>ǰѡ<C7B0>ж<EFBFBD><D0B6><EFBFBD> <20><><EFBFBD>жϵ<D0B6>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӷ<EFBFBD><D3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӷ<EFBFBD><D3B6><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>ΪNULL<4C><4C><EFBFBD>жϾ<D0B6><CFBE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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)
{
/////// <20><><EFBFBD><EFBFBD>о<EFBFBD><D0BE>Ϊ<EFBFBD><EFBFBD><E0BCAD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɢ<EFBFBD><C9A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>m_childObjects<74>ڵĶ<DAB5><C4B6><EFBFBD>
//if (pObjSelected->GetType() == GDOUBLEFOX_DISCRETESEGMENT && pObj != pObjSelected)
//{
// CTrackDiscreteObj* pTrackDiscrete = (CTrackDiscreteObj*)pObjSelected->GetParentObj();
// if(pTrackDiscrete != NULL)
// pTrackDiscrete->GetChildObjList().RemoveAll();
//}
///////<2F><>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȶ<EFBFBD><C8B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>m_childObjects<74>ڵĶ<DAB5><C4B6><EFBFBD>
//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;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮ǰ<D6AE><C7B0><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD>߶<EFBFBD><DFB6><EFBFBD>
//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)
{ //<2F><><EFBFBD>ȵ<EFBFBD>,б<><D0B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>ӵ<EFBFBD><D3B5>ڶ<EFBFBD><DAB6><EFBFBD>s
if (bChange)
{
//<2F><><EFBFBD><EFBFBD>ʮ<EFBFBD><CAAE><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ҫȫͼ<C8AB><CDBC><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD>Ϊ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>µ<EFBFBD>ʮ<EFBFBD><CAAE><EFBFBD>ߴ<EFBFBD><DFB4>󣬵<EFBFBD><F3A3ACB5><EFBFBD>Ҫʮ<D2AA><CAAE><EFBFBD><EFBFBD>ʱֱ<CAB1><D6B1> OnDrawЧ<77>ʸ<EFBFBD>
OnDraw(GetDC(), pDC);
}
return;
}
selectMode = CItemNestBase::selnone;
if(m_pItemSelected != NULL)
delete m_pItemSelected;
CItemWcsTrack *pItemTrack = (CItemWcsTrack *)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->IsSectionWell() &&
(pObj->GetType()== KEP_RESULT||
pObj->GetType()== KEP_LAYERGROUP||
pObj->GetType()== KEP_STANDARD))
{
CItemAddBend *pAddBend = new CItemAddBend(GetDoc());
pAddBend->SetPos(GetPos());
pAddBend->SetItemWell(this);
pAddBend->SetDrawObj(pObj);
POSITION pos = m_WellObjSelectlist.GetHeadPosition();
while(pos)
{
pAddBend->m_WellObjSelectlist.AddTail(m_WellObjSelectlist.GetNext(pos));
}
if (m_pItemSelected != NULL)
delete m_pItemSelected;
m_pItemSelected = pAddBend;
m_pItemSelected->OnLButtonDown(pDC, nFlags, point, vk);
m_bEditTrackInData = TRUE;
OnDraw(GetDC() ,pDC);
return;
}
}
CreateDragImage();
}
else
{
if(GetType() == ITEM_SECTIONWELL)
selectMode = ESelectMode::move;
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)
{//<2F><><EFBFBD><EFBFBD>ʮ<EFBFBD><CAAE><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ҫȫͼ<C8AB><CDBC><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD>Ϊ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>µ<EFBFBD>ʮ<EFBFBD><CAAE><EFBFBD>ߴ<EFBFBD><DFB4>󣬵<EFBFBD><F3A3ACB5><EFBFBD>Ҫʮ<D2AA><CAAE><EFBFBD><EFBFBD>ʱֱ<CAB1><D6B1> OnDrawЧ<77>ʸ<EFBFBD>
//if (::GetPreferences().WorkaroundDisplay.m_bViewCrossLine)
// GetDoc()->Invalidate();
//else
// OnDraw(GetDC());
}
}
}
void CItemWcsSingleWell::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(),pDC);
}
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())
{
//<2F>Ͼ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD>
if(selectMode== CItemNestBase::border)
{
SetReUnDoAction(TRUE, IDS_STRING_ACTION_MOVE, 3);
pWellObj = GetWellObject();
CPoint2D ptf = pWellObj->GetAnchorPoint();//ʹ<>þ<EFBFBD>ͷ<EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD>б<EFBFBD><D0B1>ʱҲ<CAB1><D2B2><EFBFBD><EFBFBD>(<28><>Ϊб<CEAA><D0B1><EFBFBD><EFBFBD>m_position<6F><6E><EFBFBD>仯)
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;
//////<2F><><EFBFBD>Ƶ<EFBFBD>ͷ<EFBFBD><CDB7>С<EFBFBD>߶<EFBFBD>
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 <pWellObj->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)//<2F>϶<EFBFBD><CFB6><EFBFBD>
{
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)//<2F>϶<EFBFBD><CFB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ㣬<C6B5><E3A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
SetReUnDoAction(TRUE, IDS_STRING_ACTION_MOVE, 3);
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)
{
////<2F>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD>λ<EFBFBD><CEBB>
//if(pTrackObj->GetTrackType() == Track_Group)
// pWellObj->SortTrack((CTrackGroupObj*)pTrackObj);
//else
// pWellObj->SortTrack(pTrackObj);
int ideep = 0;
SortTrackWhenMoving(pWellObj,pTrackObj, ideep);
CPoint2D ptf =pWellObj->GetAnchorPoint();//ʹ<>þ<EFBFBD>ͷ<EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD>б<EFBFBD><D0B1>ʱҲ<CAB1><D2B2><EFBFBD><EFBFBD>(<28><>Ϊб<CEAA><D0B1><EFBFBD><EFBFBD>m_position<6F><6E><EFBFBD>仯) pWellObj->GetPos().TopLeft();
pWellObj->CalculateSize(ptf);
//<2F><><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӷ<EFBFBD><D3B6><EFBFBD>
pWellObj->ResetChildPosition();
if (pWellObj->IsSectionWell())
{
CWellSection* pSection = (CWellSection*)pWellObj->GetParent();
if (pSection->GetType()== KEP_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->GetWell() == pWellObj||(pBend->m_pLayerRight!=NULL&&pBend->m_pLayerRight->GetWell() == pWellObj))
{
pBend->CreateBendLines();
pBend->CreateBendFills();
}
}
}
}
}
}
//else if (pObj->GetType()==GDOUBLEFOX_LOGCURVESEGMENT)//<2F><><EFBFBD>߶<EFBFBD>
//{
// CTrackInCurveSegment* pSegment = (CTrackInCurveSegment*)pObj;
// pSegment->m_fSdep = pWellObj->ScreenYToDepth(pSegment->GetPos().top); // <20><><EFBFBD>߶ε<DFB6><CEB5><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
// pSegment->m_fEdep = pWellObj->ScreenYToDepth(pSegment->GetPos().bottom); // <20><><EFBFBD>߶εĽ<CEB5><C4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//}
//// <20><>о<EFBFBD><D0BE>Ϊʱ
//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<double> ArrDepth;
// CArray<double> 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(TRUE, IDS_STRING_ACTION_MOVE, 3);
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(TRUE, IDS_STRING_ACTION_MOVE, 3);
pWellObj = GetWellObject();
if (pObj->GetType()== KEP_TRACK)
{
CPoint2D ptf =pWellObj->GetAnchorPoint();//ʹ<>þ<EFBFBD>ͷ<EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD>б<EFBFBD><D0B1>ʱҲ<CAB1><D2B2><EFBFBD><EFBFBD>(<28><>Ϊб<CEAA><D0B1><EFBFBD><EFBFBD>m_position<6F><6E><EFBFBD>仯) pWellObj->GetPos().TopLeft();
CTrackObj *pCTrackObj = (CTrackObj *) pObj;
if (nDragHandle==4)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CPoint2D lastPoint = GetDC()->GetReal(m_lastPoint);
lastPoint = pWellObj->ReCalculatePoint(lastPoint);
pObj->MoveHandleTo(nDragHandle,lastPoint);
}
pWellObj->CalculateSize(ptf);
}
else
{
//<2F><><EFBFBD>ö<EFBFBD><C3B6>󽻻<EFBFBD><F3BDBBBB><EFBFBD><EFBFBD><EFBFBD>
pObj->MoveHandleTo(nDragHandle, lastPoint);
}
}
}
}
//ˢ<><CBA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
GetDoc()->Invalidate(/*rect*/);
}
}
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɢ<EFBFBD><C9A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ֮<CEA7><D6AE><EFBFBD>ҷ<EFBFBD><D2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>о<EFBFBD><D0BE>λ<EFBFBD><CEBB><EFBFBD>ȶ<EFBFBD>ʱȡ<CAB1><C8A1>ɢ<EFBFBD><C9A2><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>״̬
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());
}
}
}
else if(pTrack->GetTrackType() == Track_Curve)
{
if(m_pItemSelected != NULL &&m_pItemSelected->GetType() != ITEM_SELECT)
{//<2F><><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD><DFB5>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>
delete m_pItemSelected;
m_pItemSelected = CreateItem(pTrack);
((CItemWellBase*)m_pItemSelected)->SetDrawObj(pTrack);
m_pItemSelected->SetPos(GetPos());
//OnDraw(GetDC());
}
}
}
}
}
// 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 CItemWcsSingleWell::OnLButtonDblClk(UINT nFlags, CPoint point)
{
}
int CItemWcsSingleWell::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();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ק<EFBFBD><D7A7>ʼ<EFBFBD><CABC>
int nHandleSize= HANDLESIZE;
double dHandleSize = GetDC()->GetRealSize(CSize(nHandleSize/2, nHandleSize/2)).cx;
if(IsCaptureState() && m_bLDown)
{
//if(m_pDragImage != NULL)
//{
// CPoint scpt = point;
// CPoint pt = point;
// 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->BeginDrag(0, pt);
// //m_pDragImage->DragEnter(GetWnd(), point);
// m_pDragImage->DragMove(point); //move the drag image to those coordinates
// //TRACE("ppp \r\n");
// //m_pDragImage->Draw(GetDC()->GetDC(),0,point,ILD_TRANSPARENT);
//}
if (m_pDragImage == NULL)
{
CWnd* pWnd = CWnd::FromHandle(GetView()->GetHWND());
DrawSelected(GetDC(), pWnd);
}
//ˢ<><CBA2>
//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)// <20>ƶ<EFBFBD>ͼԪ<CDBC><D4AA><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>
{
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;
//<2F>ƶ<EFBFBD><C6B6><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
activehead.OffsetRect(delta.x0, delta.y0);
pTrackObj->MoveToActiveTrackHead(activehead);
}
}
//ˢ<><CBA2>
if (m_pDragImage == NULL)
{
CWnd* pWnd = CWnd::FromHandle(GetView()->GetHWND());
DrawSelected(GetDC(), pWnd);
}
m_firstPoint = m_lastPoint;
}
else
{
m_lastPoint = point;
}
return 1;
}
void CItemWcsSingleWell::OnRButtonDown(UINT nFlags, CPoint point)
{
//OnLButtonDown(nFlags, point);
m_bLDown = FALSE;
CItem::OnRButtonDown(nFlags, point);
//OnLButtonUp(nFlags, point);
}
int CItemWcsSingleWell::GetSubMenu()
{
// <20><>
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;
// <20><><EFBFBD>ȵ<EFBFBD><C8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>
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()->IsSectionWell() &&
(pObjSelected->GetType()== KEP_RESULT||
pObjSelected->GetType()== KEP_LAYERGROUP||
pObjSelected->GetType()== KEP_STANDARD))
{
iRMenu = 49;
}
//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 CItemWcsSingleWell::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
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 = HANDLESIZE;// ::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)*/
{
//<2F><><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>״̬
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 CItemWcsSingleWell::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 = HANDLESIZE;// ::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;
}
}
else /*if(pObjSelected != NULL)*/
{
//<2F><><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>״̬
if (pObjSelected->GetType() != KEP_TRACK)
{
int nHandle = pObjSelected->HitTest(lastPoint, dHandleSize, TRUE);
if (nHandle != 0)
{
handle = 2;
return TRUE;
}
}
}
if (SetMoveCursor(pWellObj, lastPoint, dHandleSize, pWellObj, handle))
return TRUE;
return TRUE;
}
BOOL CItemWcsSingleWell::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++)
{
//<2F><><EFBFBD>ù<EFBFBD><C3B9><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߽硢<DFBD><E7A1A2>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD>ʱ<EFBFBD><CAB1>״̬
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;
}
//<2F><>ͷ<EFBFBD><CDB7><EFBFBD>±߽<C2B1>
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;
}
//<2F><>ͷ<EFBFBD>߽<EFBFBD>
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;
}
////<2F><><EFBFBD><EFBFBD>
else if (pTrack->IsInTrackHead(pt, dHandleSize))
{
handle = 5;//SetCursor(AfxGetApp()->LoadCursor(IDC_MOVE4WAY));
return TRUE;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>Ӷ<EFBFBD><D3B6><EFBFBD>
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->IsSectionWell()) &&
(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;
}
void CItemWcsSingleWell::OnDraw(CXyDC* pXyDC)
{
CMultiWellSectionView *pView = (CMultiWellSectionView*)GetView();
CWnd* pWnd = CWnd::FromHandle(GetView()->GetHWND());
if(!m_bWellFrame)
{
DrawHandle(pXyDC);
DrawSelected(pXyDC, pWnd);
}
else
{
CXyDC xyDC;
xyDC = *GetDC();
pView->BeginSelectBmpDC();
xyDC.Create(&pView->GetSelectDC());
DrawHandle(&xyDC);
DrawSelected(&xyDC, pWnd);
pView->EndItemSelectBmpDC(); // pView->GetMemDC());
pView->m_pDoc->Invalidate();
}
}
void CItemWcsSingleWell::OnDraw(CXyDC* pXyDC,CDC *pDC)
{
CMultiWellSectionView *pView = (CMultiWellSectionView*)GetView();
CWnd* pWnd = CWnd::FromHandle(GetView()->GetHWND());
if (!m_bWellFrame)
{
DrawHandle(pXyDC);
DrawSelected(pXyDC, pWnd);
}
else
{
CXyDC xyDC;
xyDC = *GetDC();
//pView->BeginSelectBmpDC();
//xyDC.Create(&pView->GetSelectDC());
//DrawHandle(&xyDC);
//DrawSelected(&xyDC, pWnd);
//pView->EndItemSelectBmpDC(); // pView->GetMemDC());
DrawHandle(pXyDC);
DrawSelected(pXyDC,pWnd);
pView->m_pDoc->Invalidate();
}
}
void CItemWcsSingleWell::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);
CMultiWellSectionView* pDoc = (CMultiWellSectionView *)GetDoc();
CWellPole *pWell = GetWellObject();
BOOL bInclineWell = FALSE;
if (m_pWell->GetWellType() == Well_Incline)
bInclineWell = TRUE;
if (m_bDrag && m_lastPoint != m_downPoint)//<2F><><EFBFBD><EFBFBD>ק<EFBFBD><D7A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E5A1A2><EFBFBD>Ƶ㣩
{
CPoint pt1, pt2;
if (selectMode == CItemNestBase::border)//<2F>ϵ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>
{
if (pWell->GetWellType() == Well_Incline)
{
CPoint2D tpt1, tpt2, vpt, lastpt, fpt, tpt3, tpt4;
if (nDragHandle == 6)
{//<2F><>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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)
{//<2F><>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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<70><EFBFBD><E0B5B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>tpt1,tpt2ͬ<32><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD>Կ<EFBFBD><D4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(tpt1,tpt2)ƫ<>Ƶ<EFBFBD><C6B5><EFBFBD>(fpt,lastPt)λ<><CEBB>)
vpt = nsWellPoleFunc::GetVPt_Line(tpt1.x0, tpt1.y0, tpt2.x0, tpt2.y0, lastpt.x0, lastpt.y0); //vpt=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>tpt1,tpt2<74>ϵ<EFBFBD>ͶӰ
double xx = (tpt2.x0 - vpt.x0);
double yy = (tpt2.y0 - vpt.y0);
tpt3.x0 = fpt.x0 + xx; tpt3.y0 = fpt.y0 + yy;// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(fpt,lastpt)ƫ<><C6AB>xx,yy<79><79><EFBFBD>͵õ<CDB5>(tpt1,tpt2)<29>ڹ<EFBFBD><DAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>lastPt<50><74>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>ͶӰ
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)//<2F>ϵ<EFBFBD>ͷ
{
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)//<2F><>ק<EFBFBD><D7A7>ͷ
{
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)//<2F><>ѡ<EFBFBD><D1A1><EFBFBD>Ӷ<EFBFBD><D3B6>󣬻<EFBFBD><F3A3ACBB><EFBFBD>ѡ<EFBFBD><D1A1>״̬
{
if (selectMode == CItemNestBase::move)//<2F><><EFBFBD><EFBFBD>
{
if (pWell->GetParent() != NULL)
{
CWellSection* pSection = (CWellSection*)pWell->GetParent();
CWellPole* pFWell = (CWellPole*)pSection->m_WellList.GetHead();
if (pWell != pFWell)
{
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
{
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)//<2F><><EFBFBD>Ƶ<EFBFBD>
{
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)
{//<2F>ж<EFBFBD><D0B6><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӷ<EFBFBD><D3B6><EFBFBD>,
if (pParentObj->GetType() == KEP_TRACK)
bNoInclineObj = FALSE; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD>,<2C>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD>״̬
}
if (bNoInclineObj)
{
if (selectMode == CItemNestBase::move)//<2F><><EFBFBD><EFBFBD>
{
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 ||//<2F><>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD>ק<EFBFBD><D7A7>
pObj->GetType() == KEP_FAULTPOINT/*||//<2F>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD>ק<EFBFBD><D7A7>
pObj->GetType() == GDOUBLEFOX_COREWELL*/)//<2F><><EFBFBD><EFBFBD>ȡо<C8A1><D0BE><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD>ק<EFBFBD><D7A7>
{
pDC->MoveTo(rect.TopLeft());
pDC->LineTo(rect.BottomRight());
}
else
{
pDC->Rectangle(rect);
}
}
}
}
else if (nDragHandle != 0)//<2F><><EFBFBD>Ƶ<EFBFBD>
{
if (pObjSelected->GetType() == KEP_TRACK)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
CTrackObj* pTrackObj = (CTrackObj*)pObjSelected;
if (nDragHandle == 4)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ק
{
if (pWell->GetWellType() == Well_Incline)
{
double h = pWell->GetTrackHeadHigh();
CPoint2D tpt1, tpt2; //tpt1,tpt2<74>ǵ<EFBFBD>ͷ<EFBFBD>ײ<EFBFBD><D7B2>ĺ<EFBFBD><C4BA>߶<EFBFBD>
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<74><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD>ͷ<EFBFBD>ײ<EFBFBD><D7B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>
//tpt4 = GetPtAlongVector(tpt3.x0,tpt3.y0,lastpt.x0,lastpt.y0,h,1);//tpt3,tpt4<74><34><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>ײ<EFBFBD><D7B2><EFBFBD><EFBFBD>ߴ<EFBFBD>ֱ<EFBFBD><D6B1>
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)//<2F><><EFBFBD><EFBFBD><EFBFBD>϶<EFBFBD><CFB6>ĵ<EFBFBD><C4B5>ڶ<EFBFBD><DAB6><EFBFBD>ʱ<EFBFBD><CAB1>Ҫ<EFBFBD>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
{
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;
//<2F><>ѡ<EFBFBD><D1A1>״̬
if (m_WellObjSelectlist.GetCount() == 0)//<2F><>ѡ<EFBFBD><D1A1><EFBFBD>Ӷ<EFBFBD><D3B6>󣬻<EFBFBD><F3A3ACBB><EFBFBD>ѡ<EFBFBD><D1A1>״̬
{
//<2F><><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD>
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<CPoint2D> PtsVec;
pTrack->GetSelectRange(PtsVec);
DrawSelectPolyRange(pXyDC, PtsVec);
continue;
}
}
else
{//<2F><>ѡ<EFBFBD>п<EFBFBD>
TRACE(" draw in obj select \r\n");
if (pObj->GetViewState() == UNVIEW_STATE)
continue;
CWellBaseObj *pParentObj = pObj->GetParent();
if (pParentObj && bInclineWell)
{//<2F>ж<EFBFBD><D0B6><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӷ<EFBFBD><D3B6><EFBFBD>,<2C><><EFBFBD>Ի<EFBFBD><D4BB><EFBFBD>ѡ<EFBFBD><D1A1>״̬
if (pParentObj->GetType() == KEP_TRACK)
{
CWellBaseObj *pDrawObj = pObj;
if (pDrawObj->IsTrackChildTopEnd())
{
CInTrackDepthSegment *pTopEndObj = (CInTrackDepthSegment*)pDrawObj;
std::vector<CPoint2D> PtsVec;
pTopEndObj->GetSelectRange(PtsVec);
DrawSelectPolyRange(pXyDC, PtsVec);
continue;
}
}
}
rect = pXyDC->GetScreen(pObj->GetSelectedRange());
pOldPenLine = (CPen *)pDC->SelectObject(&penLine);
pDC->Rectangle(rect);
pDC->SelectObject(pOldPenLine);
//<2F><><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD>
if (pObj->GetType() != KEP_COREWELL) //ȡо<C8A1><D0BE><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD>
{
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)
//{
// //д<><D0B4><EFBFBD><EFBFBD>
// 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);
//}
}
}
//ѡ<><D1A1><EFBFBD><EFBFBD>Χ<EFBFBD><CEA7>ɫ
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 CItemWcsSingleWell::DrawSelected(CXyDC *pXyDC,CWnd *pWnd)
{
DrawMoveSelected(pXyDC,pWnd);
}
void CItemWcsSingleWell::SetScrollBarRange()
{
//CMapFrame2D& mapFrame2D = GetWnd()->GetMapFrame()->GetMapFrame2D();
//for(int i=mapFrame2D.m_SplitterWnd.GetCount()-1; i>-1; i--)
//{
// mapFrame2D.m_SplitterWnd[i].pMapWnd2D->SetScrollBarRange();
//}
}
bool CItemWcsSingleWell::AddTrack()
{
CWellPole* pWellPole = GetWellObject();
return true;
}
BOOL CItemWcsSingleWell::AddTrack(CTrackObj* pSelectTrack, int trackType[], int trackNum, TRACKLIST& newTracks)
{
TRACKLIST trackList;
CTrackObj* pTrackObj = NULL;
CString strTrack, str;
strTrack = "<EFBFBD><EFBFBD>";
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)//ȥ<><C8A5> <20><><EFBFBD><EFBFBD>"
str = str.Left(pos);
pTrackObj->m_strTrackName = pTrackObj->m_strTitle = str;
trackList.push_back(pTrackObj);
newTracks.push_back(pTrackObj);
}
AddTrack(pSelectTrack, trackList);
return TRUE;
}
CTrackObj* CItemWcsSingleWell::GetSelectedTrack()
{
if(m_WellObjSelectlist.GetCount() == 1)
{
CWellBaseObj* pObjSelected = m_WellObjSelectlist.GetHead();
if (pObjSelected->GetType() == KEP_TRACK)
{
return (CTrackObj*)pObjSelected;
}
}
return NULL;
}
bool CItemWcsSingleWell::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 CItemWcsSingleWell::AddTrack(CTrackObj* pTrackSelected, TRACKLIST& trackAddList, BOOL bTrackGroup)
{//<2F><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӽӵ<D3BC><D3B5><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>󣩣<EFBFBD>2<EFBFBD><32>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD><D3A3>ӵ<EFBFBD><D3B5>˾<EFBFBD><CBBE><EFBFBD><EFBFBD>ĺ<EFBFBD><C4BA>
//<2F><>3<EFBFBD><33>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ϵ<EFBFBD><CFB5>е<EFBFBD><D0B5>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD>ѡ<EFBFBD>еľ<D0B5><C4BE>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD>4<EFBFBD><34><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵĵ<D3B5><C4B5><EFBFBD>ѡ<EFBFBD>еĵ<D0B5><C4B5><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>£<EFBFBD>Ȼ<EFBFBD><C8BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EBA3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>
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;
}
}
//<2F><><EFBFBD><EFBFBD>
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)
{//<2F><>trackAddList<73>еĵ<D0B5><C4B5><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>£<EFBFBD>Ȼ<EFBFBD><C8BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBA3AC><EFBFBD><EFBFBD>pTrackSelectedҲ<64><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD>
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); //ѡ<>е<EFBFBD><D0B5><EFBFBD><EFBFBD>µ<EFBFBD><C2B5><EFBFBD><EFBFBD>е<EFBFBD>λ<EFBFBD><CEBB>
if (itpos != pGroupParent->GetTrackList().end())
itpos++; //ʹ<>µ<EFBFBD><C2B5><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD>е<EFBFBD><D0B5>ĺ<EFBFBD><C4BA><EFBFBD>
}
it = trackAddList.begin();
for (; it != trackAddList.end(); it++)
{ //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>еĵ<D0B5><C4B5><EFBFBD><EFBFBD><EFBFBD>½<EFBFBD><C2BD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD>
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);
/////<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵĵ<D3B5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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;
}
//<2F><><EFBFBD>ӵ<EFBFBD>
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);
//<2F>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
//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* CItemWcsSingleWell::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* CItemWcsSingleWell::CreateItem(CWellBaseObj* pObj)
{
CItemWellBase* pItem = NULL;
if(pObj->GetType() == KEP_TRACK)
{
pItem = new CItemWcsTrack(GetDoc());
pItem->SetPos(GetPos());
pItem->SetDrawObj(pObj);
pItem->SetItemWell(this);
}
else if(pObj->GetParent() != NULL && pObj->GetParent()->GetType() == KEP_TRACK)
{
pItem = new CItemWcsTrackIn(GetDoc());
pItem->SetPos(GetPos());
((CItemWcsTrackIn*)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 CItemWcsSingleWell::DeleteItem()
{
CItemWellBase::DeleteItem();
CWellPole *pWell = GetWellObject();
m_WellObjSelectlist.RemoveAll();
}
void CItemWcsSingleWell::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()); //<2F><><EFBFBD>ƴ<EFBFBD><C6B4>϶<EFBFBD><CFB6><EFBFBD>
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 <topleftPt.x)
topleftPt.x = tpt.x;
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 <topleftPt.x)
topleftPt.x = tpt.x;
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;
//// 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
CBitmap* pBitmap=GetBitmap(GetDC()->GetDC(),rect,inclineWellRect,bTrack,(CPoint*)plgPts);
m_pDragImage->Add(pBitmap, RGB(255,255,255));
delete pBitmap;
}
CBitmap* CItemWcsSingleWell::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);
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();//<2F><><EFBFBD>ƴ<EFBFBD><C6B4>϶<EFBFBD><CFB6><EFBFBD>
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 CItemWcsSingleWell::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) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰѡ<C7B0>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>е<EFBFBD><D0B5>򷵻<EFBFBD>
return;
SetReUnDoAction();
pWellObj = GetWellObject();//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>undoaction<6F><6E>Ҫ<EFBFBD><D2AA><EFBFBD>»<EFBFBD><C2BB><EFBFBD>һ<EFBFBD>¾<EFBFBD><C2BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
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); //<2F><><EFBFBD><EFBFBD><EBA3AC><EFBFBD>Ӷ<EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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 CItemWcsSingleWell::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) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰѡ<C7B0>е<EFBFBD><D0B5>Ҳ<EFBFBD>û<EFBFBD>е<EFBFBD><D0B5>򷵻<EFBFBD>
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 CItemWcsSingleWell::Clear()
{
if(m_pItemSelected != NULL)
delete m_pItemSelected;
m_pItemSelected = NULL;
m_WellObjSelectlist.RemoveAll();
}
int CItemWcsSingleWell::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;
CItemWcsTrackIn *pItemTrackIn = new CItemWcsTrackIn(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();
delete m_pItemSelected;
m_pItemSelected = NULL;
}
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)
{
CItemWcsTrack 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 CItemWcsSingleWell::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_FluidProducingProfile:
{
strTrackType = "FluidProducingProfile";
}
break;
case Track_WaterInjectionProfile:
{
strTrackType = "WaterInjectionProfile";
}
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 CItemWcsSingleWell::AddTrackInObjData()
{
if(NULL == m_pItemSelected)
return;
}
void CItemWcsSingleWell::BuildTrackInObj(CTrackObj* pTrackObj, double *pDepth,double *pData,int datanum)
{
CWellPole* pWellObj = pTrackObj->GetWell(); //static_cast<CWellPole*>(pTrackObj->GetParent());
if(NULL == pWellObj)
return;
if(datanum == 0)
return;
pTrackObj->ClearChildren();
pTrackObj->BuidChildObject(pDepth,pData,datanum);
}
void CItemWcsSingleWell::BuildTrackInObj(CTrackObj* pTrackObj, vector<CString> &fields, StringVectorSet &datas, vector<CString> &fields2,StringVectorSet &vecdatas2)
{
CWellPole* pWellObj = pTrackObj->GetWell(); // static_cast<CWellPole*>(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;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>½<EFBFBD><C2BD>ͽ<EFBFBD><CDBD>۵<EFBFBD><DBB5>͵ز<CDB5><D8B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱɾ<CAB1><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (pTrackObj->GetTrackType() == Track_Result || pTrackObj->GetTrackType() == Track_Stratum)
{
CWellSection* pWellSection = (CWellSection*)pWellObj->GetParent();
if (NULL != pWellSection)
{
POSITION pos = pWellSection->m_BendList.GetHeadPosition();
while(NULL != pos)
{
CWellBaseObj* pObj = (CWellBaseObj*)pWellSection->m_BendList.GetNext(pos);
if (pObj->GetType() == KEP_SECTIONBEND)
{
CBendObj* pBend = (CBendObj*)pObj;
CTrackObj* pTrackLeft = NULL;
CTrackObj* pTrackRight = NULL;
pTrackLeft = (CTrackObj*)pBend->m_pLayerLeft->GetParent();
if (pBend->m_pLayerRight != NULL)
{
pTrackRight = (CTrackObj*)pBend->m_pLayerRight->GetParent();
}
if (pTrackRight == pTrackObj || pTrackLeft ==pTrackObj)
{
pWellSection->DeleteBend(pBend);
GetDoc()->Invalidate();// pWellSection);
}
}
}
}
}
//<2F><><EFBFBD>յ<EFBFBD><D5B5>ڵ<EFBFBD><DAB5>Ӷ<EFBFBD><D3B6><EFBFBD>
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 CItemWcsSingleWell::ApplingWellDbTemplate()
{
//CDlgApplyTemplate dlg("WellColumn");
//
//if(dlg.DoModal() == IDCANCEL)
// return;
//if(dlg.m_pMemFile)
// ApplingFileTemplate(*dlg.m_pMemFile);
}
void CItemWcsSingleWell::ApplingFileTemplate(CFile &fr)
{
CWellPole *pWellObj = GetWellObject();
SetReUnDoAction(FALSE);
//<2F><><EFBFBD>ݾ<EFBFBD><DDBE>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD>
//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<CWellPole::well_interval > oldWellIntervalVec;
oldWellIntervalVec.insert(oldWellIntervalVec.begin(),pWellObj->GetIntervalVec()->begin(),pWellObj->GetIntervalVec()->end());
AfxGetPublicFunction()->SetCodeType(CODE_GB2321);
if(pWellObj->ReadPCG(fr, -1) == 0)
{
//<2F>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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());
//Ӧ<>þ<EFBFBD>ģ<EFBFBD><C4A3>
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);
}
BOOL CItemWcsSingleWell::ApplingTemplate(CKXmlParse& xp)
{
CWellPole* pWellObj = GetWellObject();
SetReUnDoAction();
//<2F><><EFBFBD>ݾ<EFBFBD><DDBE>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD>
//CTrackList tracklist;
TRACKLIST tracklist;
tracklist.assign(pWellObj->GetTrackList().begin(), pWellObj->GetTrackList().end());
pWellObj->GetTrackList().clear();
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<CWellPole::well_interval > oldWellIntervalVec;
oldWellIntervalVec.insert(oldWellIntervalVec.begin(), pWellObj->GetIntervalVec()->begin(), pWellObj->GetIntervalVec()->end());
AfxGetPublicFunction()->SetCodeType(CODE_GB2321);
if (pWellObj->ReadPCG(xp, -1) == 0)
{
//<2F>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
TRACKLIST::reverse_iterator rit = tracklist.rbegin();
for (; rit != tracklist.rend(); rit++)
{
pWellObj->GetTrackList().push_front(*rit);
}
tracklist.clear();
return FALSE;
}
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());
//Ӧ<>þ<EFBFBD>ģ<EFBFBD><C4A3>
TRACKLIST::iterator it = tracklist.begin();
for (; it != tracklist.end(); it++)
pWellObj->GetTemplateList().push_front(*it);
pWellObj->ApplingTemplate(TRUE, dOldTrackHead, dOldWellHead);
//ImportDataAll(pWellObj, FALSE);
}
return TRUE;
}
BOOL CItemWcsSingleWell::ApplingWellTemplate(CString filePath)
{
//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;
//}
////<2F><><EFBFBD><EFBFBD>·<EFBFBD><C2B7>
//filepathstr=dlg.GetPathName();
//CString ext = dlg.GetFileExt();
//if(ext == "dml") //dml<6D><6C>ʽ
//{
// CStdioFile fr;
// if(!fr.Open(filepathstr,CFile::modeRead))
// return;
// ApplingFileTemplate(fr);
//}
BOOL b = FALSE;
CString strExt = "";
if (filePath.GetLength() < 4)
return FALSE;
strExt = filePath.Right(4);
strExt = strExt.MakeLower();
if (strExt == ".pcg")
{
CKXmlParse xp;
if (xp.ReadXmlFile(filePath.GetBuffer()))
{
b = ApplingTemplate(xp);
}
else
b = TRUE;
}
return b;
}
void CItemWcsSingleWell::ImportDataAll(CWellPole* pWell, BOOL bReplace)
{
//AfxGetMainWnd()->BeginWaitCursor();
//if (NULL == pWell)
//{
// return;
//}
//CString strWellName = pWell->GetWellName();
}
void CItemWcsSingleWell::ExportDataAll(CWellPole* pWell)
{
TRACKLIST tracklist;
pWell->GetAllTrack(&tracklist);
TRACKLIST::iterator it = tracklist.begin();
for (; it != tracklist.end(); it++)
ExportDataToDB(*it);
}
void CItemWcsSingleWell::ExportDataToDB(CTrackObj* pTrackObj)
{
}
void CItemWcsSingleWell::DrawWellHandle()
{
DrawHandle(&GetView()->m_pDoc->GetDC());
}
void CItemWcsSingleWell::GetOperationAndVersion(const CString strWellName, const CString strCurveName, vector<CString> &OperatVec, vector<CString> &VersionVec)
{
}
void CItemWcsSingleWell::GetAllCurveNameInDb(CStringArray &strNameArr,const CString strTableName,CString nameField)
{
}
CInsertDraw *CItemWcsSingleWell::GetLegendInsertDraw(CString strMark)
{
CInsertDraw *pNewDraw = NULL;
return pNewDraw;
}
void CItemWcsSingleWell::BeSelectBorderLine(CTrackGroup* pGroup,CPoint2D pt,double dHandleSize, CDC *pDC)
{
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))
{
//<2F><><EFBFBD><EFBFBD><EFBFBD>϶<EFBFBD>
nDragHandle = 4;
selectMode = CItemNestBase::size;
OnDraw(GetDC(),pDC);
Select(pTrack);
OnDraw(GetDC(),pDC);
//GetView()->SetCapture();
return;
}
else if (pTrack->IsOnTrackTop(pt, dHandleSize))
{//<2F><><EFBFBD><EFBFBD><EFBFBD>϶<EFBFBD>
nDragHandle = 6;
selectMode = CItemNestBase::border;
//GetView()->SetCapture();
return;
}
else if (pTrack->IsOnWellTop(pt, dHandleSize))
{//<2F><>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD>϶<EFBFBD>
nDragHandle = 2;
selectMode = CItemNestBase::border;
//GetView()->SetCapture();
return;
}
else if (pTrack->GetTrackType() == Track_Group)
{
pTrackGroup = (CTrackGroup*)pTrack;
BeSelectBorderLine(pTrackGroup, pt, dHandleSize ,pDC);
}
}
}
BOOL CItemWcsSingleWell::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++)
{
//<2F><><EFBFBD>ù<EFBFBD><C3B9><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߽硢<DFBD><E7A1A2>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD>ʱ<EFBFBD><CAB1>״̬
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;
}
//<2F><>ͷ<EFBFBD><CDB7><EFBFBD>±߽<C2B1>
else if (pTrack->IsOnTrackTop(pt, dHandleSize))
{
if (pWell->GetWellType() == Well_Incline && m_HCursor)
SetCursor(m_HCursor);
else
SetCursor(AfxGetApp()->LoadCursor(IDC_SIZENS));
return TRUE;
}
//<2F><>ͷ<EFBFBD>߽<EFBFBD>
else if (pTrack->IsOnWellTop(pt, dHandleSize))
{
if (pWell->GetWellType() == Well_Incline && m_HCursor)
SetCursor(m_HCursor);
else
SetCursor(AfxGetApp()->LoadCursor(IDC_SIZENS));
return TRUE;
}
////<2F><><EFBFBD><EFBFBD>
else if (pTrack->IsInTrackHead(pt, dHandleSize))
{
SetCursor(AfxGetApp()->LoadCursor(IDC_MOVE4WAY));
return TRUE;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>Ӷ<EFBFBD><D3B6><EFBFBD>
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->IsSectionWell()) &&
(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 CItemWcsSingleWell::SortTrackWhenMoving(CTrackGroup* pGroup,CTrackObj* pTrackMoving, int& ideep)
{
////<2F><><EFBFBD>ƶ<EFBFBD>
if(pTrackMoving->m_HeadRect.PtInRect(pTrackMoving->m_active_head.CenterPoint()))
{
return FALSE;
}
if(ideep == 0) //<2F><>¼undo/redoʱ<6F><CAB1>ִ<EFBFBD><D6B4>һ<EFBFBD>ξͿ<CEBE><CDBF><EFBFBD><EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD>ֹŲ<D6B9><C5B2>һ<EFBFBD>ε<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>ݹ<EFBFBD><DDB9><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD>ж<EFBFBD><D0B6>ν<EFBFBD><CEBD><EFBFBD>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();
//<2F><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ң<EFBFBD><D2A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>еĵ<D0B5><C4B5><EFBFBD><EFBFBD>бȽϣ<C8BD><CFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD><C2B1>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>ŵ<EFBFBD><C5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱֻҪ<D6BB><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1>Ŀ<EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ㼴<C4B5><E3BCB4>
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 || bRight)
{
if (pTrack->GetTrackType() == Track_Group)
{//<2F>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD><C5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ұߵķ<DFB5>Χ<EFBFBD><CEA7>
CTrackGroup* pTrackGroup = (CTrackGroup*)pTrack;
if(bIn) //pTrackGroup->m_HeadRect.PtInRect(pTrackMoving->m_active_head.CenterPoint()))
{//<2F>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD><C5B5><EFBFBD>pTrack<63>ڲ<EFBFBD>
if (pTrackGroup->GetGroupType() == Group_Vertical)
{
pTrackMoving->SetTrackWidthRatio(pTrack->m_dTrackWidth/pTrackMoving->m_dTrackWidth);
pTrackGroup->GetTrackList().push_back(pTrackMoving);
pTrackMoving->SetParent(pTrackGroup);
return TRUE;
}
else
{//ˮƽ<CBAE><C6BD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݹ<EFBFBD>
(SortTrackWhenMoving(pTrackGroup, pTrackMoving, ideep));
return TRUE;
}
}
else
{//<2F>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ㲻<C5B5><E3B2BB>pTrack<63>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD><C5B5><EFBFBD>pTrack<63><6B><EFBFBD>ϱ߻<CFB1><DFBB>±ߣ<C2B1><DFA3><EFBFBD>ֱ<EFBFBD>Ӽ<EFBFBD><D3BC>뵽pGroup
if(pGroup->GetGroupType() == Group_Vertical)
{
pTrackMoving->SetTrackWidthRatio(pGroup->m_dTrackWidth/pTrackMoving->m_dTrackWidth);
}
if(bRight) //<2F><><EFBFBD>ŵ<EFBFBD><C5B5><EFBFBD>Ŀ<EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD>Ҳ࣬<D2B2><E0A3AC><EFBFBD><EFBFBD><EFBFBD>뵽Ŀ<EBB5BD>ĵ<EFBFBD><C4B5>ĺ<EFBFBD><C4BA><EFBFBD>
posObj++;
pGroup->GetTrackList().insert(posObj,pTrackMoving);
pTrackMoving->SetParent(pGroup);
return TRUE;
}
}
else
{//<2F>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD><C5B5>Dz<EFBFBD><C7B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>,<2C><><EFBFBD>ұߵķ<DFB5>Χ
if ((pTrack->GetTrackType() == Track_Curve || pTrack->GetTrackType() == Track_Discrete ||
pTrackMoving->GetTrackType() == Track_Curve || pTrackMoving->GetTrackType() == Track_Discrete) &&
bIn)
{//<2F><><EFBFBD>߻<EFBFBD>ɢ<EFBFBD><C9A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><C2B5><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD>
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
{//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵ĵ<CDB5><C4B5><EFBFBD>ֱ<EFBFBD>Ӽ<EFBFBD><D3BC>
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;
}
}
}
}
//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD>
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 CItemWcsSingleWell::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 CItemWcsSingleWell::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 CItemWcsSingleWell::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 CItemWcsSingleWell::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);//<2F>õ<EFBFBD>ԭʼ<D4AD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊͼ<CEAA><CDBC>Ϣ
::GetObject((HGDIOBJ)cursorinfo.hbmColor,sizeof(BITMAP),&cursorBitInfo);//<2F>õ<EFBFBD>ԭʼ<D4AD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λͼ<CEBB><CDBC>Ϣ
CBitmap sCousorbmp,sMaskbmp;
sCousorbmp.Attach(cursorinfo.hbmColor);
sMaskbmp.Attach(cursorinfo.hbmMask);
CDC *pDC = GetDC()->GetDC();
CPoint2D pospts[4]; //ԭʼ<D4AD><CABC><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD>С
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];//<2F><>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¹<EFBFBD><C2B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CPoint topleftPt,botRightPt,tpt; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD>½<EFBFBD>
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 <topleftPt.x)
topleftPt.x = tpt.x;
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) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1>0<EFBFBD><30><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>һ<EFBFBD>£<EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
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)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1>0<EFBFBD><30><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>һ<EFBFBD>£<EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
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); //<2F><>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CBitmap *pOldBitmap;
CBitmap *pOldmaskmap;
CDC dc; dc.CreateCompatibleDC(pDC);
CDC smaskdc,scursordc;
smaskdc.CreateCompatibleDC(pDC);
scursordc.CreateCompatibleDC(pDC);
pOldmaskmap = smaskdc.SelectObject(&sMaskbmp); //ʹ<><CAB9>ԭʼ<D4AD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λͼ
pOldBitmap = scursordc.SelectObject(&sCousorbmp); //ʹ<><CAB9>ԭʼ<D4AD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λͼ
CDC memDC;
memDC.CreateCompatibleDC(&dc);
CBitmap *pNewbkCousorbmp; //ʹ<><CAB9>ԭʼ<D4AD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λͼ<CEBB><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λͼ<CEBB>γ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>µĹ<C2B5><C4B9><EFBFBD>λͼ<CEBB><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µĹ<C2B5><C4B9><EFBFBD>λͼ<CEBB>ı<EFBFBD><C4B1><EFBFBD>ɫ<EFBFBD>ƶ<EFBFBD>Ϊ<EFBFBD><CEAA>ɫ
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));//<2F><>λͼ<CEBB><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
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);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¹<EFBFBD><C2B9><EFBFBD>λͼ<CEBB><CDBC><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD>ɫ(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD><CDB8>λͼ<CEBB><CDBC>ԭ<EFBFBD><D4AD>)
//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);//<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD>Ĺ<EFBFBD><C4B9><EFBFBD>λͼ<CEBB><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD>Ĵ<EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>
pOldBitmap = dc.SelectObject(pCursorBmp);
//pCursorMaskmap = new CBitmap();
pCursorMaskBmp->CreateBitmap(rect.Width(),rect.Height(),1,1,NULL);//<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD>Ĺ<EFBFBD><C4B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λͼ<CEBB><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD>Ĵ<EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>
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)); //<2F><><EFBFBD>нǶȹ<C7B6><C8B9><EFBFBD><EFBFBD><EFBFBD>λͼ<CEBB><CDBC><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD>ɫ
dc.PlgBlt(points,&memDC,0,0,cursorBitInfo.bmWidth,cursorBitInfo.bmHeight,maskBmp,0,0);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD><C2B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λͼ<CEBB><CDBC>ת
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);//<2F><><EFBFBD><EFBFBD><EFBFBD>нǶȹ<C7B6><C8B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊͼ,͸<><CDB8>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD>ɫ
//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 CItemWcsSingleWell::DrawHandle(CXyDC *pDC, const CPoint2D &point)
{
CItemNestBase::DrawHandle(pDC,point);
}
void CItemWcsSingleWell::DrawHandle(CXyDC *pDC)
{
if(m_pWell != NULL)
{
if(m_pWell->GetWellType() == Well_Incline)
{
}
else
CItemNestBase::DrawHandle(pDC);
}
else
CItemNestBase::DrawHandle(pDC);
}
BOOL CItemWcsSingleWell::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 CItemWcsSingleWell::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 CItemWcsSingleWell::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; i<pTrackCurveNew->m_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;
// }
//}
////<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD>
//CTrackList tracklist;
//tracklist.AddTail(pTrackCurveNew);
//AddTrack(pTrackSelected, tracklist, TRUE);
return TRUE;
}
BOOL CItemWcsSingleWell::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; i<pTrackCurveNew->m_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;
// }
//}
////<2F><><EFBFBD><EFBFBD><EBB5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//CTrackList tracklist;
//tracklist.AddTail(pTrackCurveNew);
//AddTrack(pTrackSelected, tracklist, TRUE);
return TRUE;
}
void CItemWcsSingleWell::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;
// //<2F><>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 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<CString> vectorfield;
// vectorfield.push_back("DEPTH");
// vectorfield.push_back(pTrackCurve->m_strTrackName);
// CString strDepth;
// CString strValue;
// double fDepth;
// vector<CString> 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; j<nCount; j++)
// {
// page1.m_StructCurveData.curve_value[j] = pTrackCurve->GetCurveValue(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;
// //<2F><>ȡͼ<C8A1><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD>ֶ<EFBFBD>
// 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;
// //<2F><>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 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<CString> vectorfield;
// vectorfield.push_back("DEPTH");
// vectorfield.push_back(pTrackCurve->m_strTrackName);
// CString strDepth;
// CString strValue;
// double fDepth;
// vector<CString> 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; j<pTrackCurve->GetDataCount(); 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<CString> vectorfield;
// vectorfield.push_back("DEPTH");
// vectorfield.push_back(pTrackDiscrete->m_strTrackName);
// CString strDepth;
// CString strValue;
// double fDepth;
// vector<CString> 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; j<pTrackDiscrete->GetDataCount(); 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 CItemWcsSingleWell::CreatePorTrack(CWellPole* pWell,CDataObjList& CurveList,BOOL bAddResult,double PorTemp,double SwWaterTemp,double SwOilTemp,double AnalysisHd)
//{
// CTrackList trackList;
// CWellBaseObj* pObj = NULL;
// CTrackObj* pTrack = NULL;
// /////////////////////////////////////////////////////////////////////////////////////////////////
// //<2F><><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><C2B5><EFBFBD><EFBFBD>ϵ<EFBFBD>
// 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","<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",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);
// /////////////////////////////////////////////////////////////////////////////////////////////////
// //<2F><><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><C2B5><EFBFBD><EFBFBD>ϵ<EFBFBD>
// 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 = "ɰ<><C9B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
// 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 = "ɰ<><C9B0>";
// 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)
// {
// //<2F><><EFBFBD>ӽ<EFBFBD><D3BD>͵<EFBFBD>
// CClientDC dc(NULL);
// //<2F><><EFBFBD>þ<EFBFBD><C3BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// CTrackResultObj* pTrackResult = new CTrackResultObj();
// pTrackResult->m_strTitle = "<22><><EFBFBD><EFBFBD>";
// 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;
// //<2F><>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 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;
// //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 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;i<index2;i++)
// {
// if(analysisIndex == -1)
// {
// fTop = fEnd = sdep+(i-index1)*pTrackCurveObj_11->m_fRlev;
// if (pTrackCurveObj_11->GetCurveValue(i)>=SwWaterTemp&&pTrackCurveObj_11->GetCurveValue(i)<=100&&pTrackCurveObj_22->GetCurveValue(i)>PorTemp)
// {
// analysisIndex = i;
// strType = "ˮ<><CBAE>";
// }
// else if (pTrackCurveObj_11->GetCurveValue(i)>=SwOilTemp&&pTrackCurveObj_11->GetCurveValue(i)<SwWaterTemp&&pTrackCurveObj_22->GetCurveValue(i)>PorTemp)
// {
// analysisIndex = i;
// strType = "<22><>ˮͬ<CBAE><CDAC>";
// }
// else if (pTrackCurveObj_11->GetCurveValue(i)<SwOilTemp&&pTrackCurveObj_22->GetCurveValue(i)>PorTemp)
// {
// analysisIndex = i;
// strType = "<22>Ͳ<EFBFBD>";
// }
// }
// else
// {
// strType1="";
// if (pTrackCurveObj_11->GetCurveValue(i)>=SwWaterTemp&&pTrackCurveObj_11->GetCurveValue(i)<=100)
// {
// strType1 = "ˮ<><CBAE>";
// }
// else if (pTrackCurveObj_11->GetCurveValue(i)>=SwOilTemp&&pTrackCurveObj_11->GetCurveValue(i)<SwWaterTemp)
// {
// strType1 = "<22><>ˮͬ<CBAE><CDAC>";
// }
// else if (pTrackCurveObj_11->GetCurveValue(i)<SwOilTemp)
// {
// strType1 = "<22>Ͳ<EFBFBD>";
// }
// if ((pTrackCurveObj_22->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);
// //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD>
// 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)
// //{
// // //<2F><><EFBFBD>ض<EFBFBD><D8B6><EFBFBD>
// // pTrackInResult->SetViewState(UNVIEW_STATE);
// //}
// if(pTrackInResult->m_fSdep >= pWell->m_fEdep || pTrackInResult->m_fEdep <= pWell->m_fSdep)
// pTrackInResult->SetViewState(UNVIEW_STATE);
// //<2F><><EFBFBD>ӵ<EFBFBD><D3B5>Ӷ<EFBFBD><D3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// pTrackResult->Add(pTrackInResult);
// }
// analysisIndex = -1;
// }
// else
// {
// fEnd = sdep+(i-index1)*pTrackCurveObj_11->m_fRlev;
// }
// }
// }
// //<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD>
// 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);
// //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD>
// 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)
// //{
// // //<2F><><EFBFBD>ض<EFBFBD><D8B6><EFBFBD>
// // 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);
// //<2F><><EFBFBD>ӵ<EFBFBD><D3B5>Ӷ<EFBFBD><D3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// pTrackResult->Add(pTrackInResult);
// }
// }
// }
// }
// else
// {
// //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϲ<EFBFBD>ϵ
// //pWell->SortTrackGroup();
// CPoint2D ptf = pWell->GetPos().TopLeft();
// pWell->ComputeSize(ptf);
// }
//}
//void CItemWcsSingleWell::CreateSandTrack(CWellPole* pWell,CDataObjList& CurveList,BOOL bAddResult,double PorTemp,double SwWaterTemp,double SwOilTemp,double AnalysisHd)
//{
// CTrackList trackList;
// CWellBaseObj* pObj = NULL;
// CTrackObj* pTrack = NULL;
// /////////////////////////////////////////////////////////////////////////////////////////////////
// //<2F><><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><C2B5><EFBFBD><EFBFBD>ϵ<EFBFBD>
// 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","<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",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);
// /////////////////////////////////////////////////////////////////////////////////////////////////
// //<2F><><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><C2B5><EFBFBD><EFBFBD>ϵ<EFBFBD>
// 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);
// /////////////////////////////////////////////////////////////////////////////////////////////////
// //<2F><><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><C2B5><EFBFBD><EFBFBD>ϵ<EFBFBD>
// 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","Ӣ<><D3A2>",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);
// /////////////////////////////////////////////////////////////////////////////////////////////////
// //<2F><><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><C2B5><EFBFBD><EFBFBD>ϵ<EFBFBD>
// 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 = "ɰ<><C9B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
// 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 = "ɰ<><C9B0>";
// 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)
// {
// //<2F><><EFBFBD>ӽ<EFBFBD><D3BD>͵<EFBFBD>
// CClientDC dc(NULL);
// //<2F><><EFBFBD>þ<EFBFBD><C3BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// CTrackResultObj* pTrackResult = new CTrackResultObj();
// pTrackResult->m_strTitle = "<22><><EFBFBD><EFBFBD>";
// 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);
// //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϲ<EFBFBD>ϵ
// //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;
// //<2F><>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 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;
// //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 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;i<index2;i++)
// {
// if(analysisIndex == -1)
// {
// fTop = fEnd = sdep+(i-index1)*pTrackCurveObj_21->m_fRlev;
// if (pTrackCurveObj_21->GetCurveValue(i)>=SwWaterTemp&&pTrackCurveObj_21->GetCurveValue(i)<=100&&pTrackCurveObj_32->GetCurveValue(i)>PorTemp)
// {
// analysisIndex = i;
// strType = "ˮ<><CBAE>";
// }
// else if (pTrackCurveObj_21->GetCurveValue(i)>=SwOilTemp&&pTrackCurveObj_21->GetCurveValue(i)<SwWaterTemp&&pTrackCurveObj_32->GetCurveValue(i)>PorTemp)
// {
// analysisIndex = i;
// strType = "<22><>ˮͬ<CBAE><CDAC>";
// }
// else if (pTrackCurveObj_21->GetCurveValue(i)<SwOilTemp&&pTrackCurveObj_32->GetCurveValue(i)>PorTemp)
// {
// analysisIndex = i;
// strType = "<22>Ͳ<EFBFBD>";
// }
// }
// else
// {
// strType1="";
// if (pTrackCurveObj_21->GetCurveValue(i)>=SwWaterTemp&&pTrackCurveObj_21->GetCurveValue(i)<=100)
// {
// strType1 = "ˮ<><CBAE>";
// }
// else if (pTrackCurveObj_21->GetCurveValue(i)>=SwOilTemp&&pTrackCurveObj_21->GetCurveValue(i)<SwWaterTemp)
// {
// strType1 = "<22><>ˮͬ<CBAE><CDAC>";
// }
// else if (pTrackCurveObj_21->GetCurveValue(i)<SwOilTemp)
// {
// strType1 = "<22>Ͳ<EFBFBD>";
// }
// if ((pTrackCurveObj_32->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);
// //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD>
// 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)
// //{
// // //<2F><><EFBFBD>ض<EFBFBD><D8B6><EFBFBD>
// // pTrackInResult->SetViewState(UNVIEW_STATE);
// //}
// if(pTrackInResult->m_fSdep >= pWell->m_fEdep || pTrackInResult->m_fEdep <= pWell->m_fSdep)
// pTrackInResult->SetViewState(UNVIEW_STATE);
// //<2F><><EFBFBD>ӵ<EFBFBD><D3B5>Ӷ<EFBFBD><D3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// pTrackResult->Add(pTrackInResult);
// }
// analysisIndex = -1;
// }
// else
// {
// fEnd = sdep+(i-index1)*pTrackCurveObj_21->m_fRlev;
// }
// }
// }
// //<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD>
// 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);
// //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD>
// 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)
// //{
// // //<2F><><EFBFBD>ض<EFBFBD><D8B6><EFBFBD>
// // 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);
// //<2F><><EFBFBD>ӵ<EFBFBD><D3B5>Ӷ<EFBFBD><D3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// pTrackResult->Add(pTrackInResult);
// }
// }
// }
// }
// else
// {
// //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϲ<EFBFBD>ϵ
// //pWell->SortTrackGroup();
// CPoint2D ptf = pWell->GetPos().TopLeft();
// pWell->ComputeSize(ptf);
// }
//}
CTrackCurve* CItemWcsSingleWell::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 CItemWcsSingleWell::DrawSelectPolyRange(CXyDC* pXyDC,std::vector<CPoint2D>& 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 CItemWcsSingleWell::GetWellProjecttionAngle(CWellPole *pWellObj)
{
double angle = 0;
typedef struct _JXTraceStruct//б<><D0B1><EFBFBD><EFBFBD><EFBFBD>ݽṹ
{
double xs; //<2F><>б<EFBFBD><D0B1>
double xj; //<2F><>б<EFBFBD><D0B1>
double zfwj; //<2F>淽λ<E6B7BD><CEBB>
double x; //ͶӰ<CDB6><D3B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
double y; //ͶӰ<CDB6><D3B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
} JXTraceStruct;
JXTraceStruct jx,jx1;
//CArray <JXTraceStruct,JXTraceStruct> JxArray;;//<2F><>б<EFBFBD><D0B1><EFBFBD><EFBFBD>,<2C><><EFBFBD>ű<EFBFBD><C5B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB>ԭʼ<D4AD><CABC><EFBFBD><EFBFBD>
std::vector<JXTraceStruct> 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=ǰһ<C7B0><D2BB><EFBFBD>б<E3BEAE>ǣ<EFBFBD>sina2,cosa2=<3D><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD>,sinb1,cosb1=ǰһ<C7B0><D2BB><EFBFBD>㷽λ<E3B7BD><CEBB>
//,cosb2,sinb2,=<3D><>һ<EFBFBD>㷽λ<E3B7BD><CEBB>,cosb2b1=<3D><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>λ<EFBFBD>Ǽ<EFBFBD>ȥǰһ<C7B0><D2BB><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>;
double sina1,sina2,cosa1,cosa2,cosb1,cosb2,sinb1,sinb2,cosb2b1;
double x3,y3,depV ;//<2F><><EFBFBD><EFBFBD><ECBCA3>
x3=y3 = 0 ;
double dx,dy,dh;//<2F><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int ii,num;
double b1,b2; //<2F><>λ<EFBFBD><CEBB>1<EFBFBD><31><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>2;
double ya; //<2F><><EFBFBD>Ƚǣ<C8BD>ȫ<EFBFBD><C8AB>λ<EFBFBD><CEBB>
double tmpY,tmpY2;
depV = 0;
double tdmp ;
BOOL bAddFirst = FALSE;
jx = JxArray[0];
if(jx.xs>0.000001)
{//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>Ǵ<EFBFBD>0<EFBFBD>ʼ<E3BFAA><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭʼ<D4AD>ĵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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; ii<num; ii++)
{
jx = JxArray[ii-1];
jx1 = JxArray[ii];
if(jx.xj<0.0000001 && jx1.xj<0.0000001)
{
dx = 0; dy = 0; dh = jx1.xs - jx.xs;
}
else
{
b1 = jx.zfwj / 180 * PI ; b2 = jx1.zfwj / 180 * PI;;
if(jx.xj<0.0000001 && jx1.xj>0.0000001) //<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>б<EFBFBD><D0B1>Ϊ0ʱ<30><CAB1><EFBFBD><EFBFBD><EFBFBD>䷽λ<E4B7BD><CEBB>ͬ<EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
b1 = b2;
if(jx.xj>0.0000001 && jx1.xj<0.0000001)//<2F><><EFBFBD><EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD>б<EFBFBD><D0B1>Ϊ0ʱ<30><CAB1><EFBFBD><EFBFBD><EFBFBD>䷽λ<E4B7BD><CEBB>ͬ<EFBFBD><CDAC>1<EFBFBD><31>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
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<6F><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31>-1֮<31><D6AE>
//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;//<2F>ݼ<EFBFBD><DDBC><EFBFBD>
}
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))
{//<2F><>ͷ<EFBFBD>;<EFBFBD>βλ<CEB2><CEBB>һ<EFBFBD><D2BB><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD>
if(abs(xh-xt)<0.00001)
{//<2F><>ֱ
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);//ע<><D7A2>K<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><E3A3AC>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>£<EFBFBD>y<EFBFBD><79><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ<EFBFBD>
if(k<0)
{
if(xh<xt )
{
bleft = TRUE;
}
else
{
bleft = FALSE;
}
}
else
{
if(xh<xt )
{
bleft = FALSE;
}
else
{
bleft = TRUE;
}
}
double tmpa;
tmpa = atan(-1/k);
if(tmpa>0)
{
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); //<2F><>ʼ<EFBFBD>ӽǷ<D3BD><C7B7><EFBFBD>,<2C><EFBFBD><EBBEAE>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߴ<EFBFBD>ֱ
}
}
}
return angle;
}
CWellPole *CItemWcsSingleWell::GetWellObject()
{
//CMultiWellSectionDoc* pDoc = (CMultiWellSectionDoc*)(GetView()->GetDocument());
//return pDoc->GetWellPole();
return m_pWell;
}
void CItemWcsSingleWell::SetReUnDoAction(BOOL bNoSaveData , UINT actionType , int actionItemType, CWellBaseObj* pWellBase)
{
CItemWellBase::SetReUnDoAction(bNoSaveData, actionType ,actionItemType, m_pWell);
//m_pWell = GetWellObject();
m_pWell = GetWellObject();
}
void CItemWcsSingleWell::DrawMovedTrackPicture(CDC* pDC)
{
if (m_WellObjSelectlist.GetCount() != 1)
return;
CTrackObj* pTrackObj = (CTrackObj*)m_WellObjSelectlist.GetHead();
CXyDC xyDC;
xyDC = *GetDC();
xyDC.Create(pDC);
CWellPole* pWellObj = GetWellObject();
CTrackObj* pCurrentInTrack = GetMoveInTrack(pWellObj, pTrackObj);
if (pCurrentInTrack)
{
CRect oldrect;
CRect rect = GetDC()->GetScreen(pCurrentInTrack->m_HeadRect);
CBrush brush;
brush.CreateSolidBrush(RGB(230, 230, 150));
xyDC.GetDC()->FillRect(rect, &brush);
pCurrentInTrack->DrawMoveTrackFrame(&xyDC, CPoint2D(0, 0));
}
CPoint2D endPoint = GetDC()->GetReal(m_lastPoint);
CPoint2D downPoint = GetDC()->GetReal(m_downPoint);
CPoint2D deltaPt(endPoint.x0 - downPoint.x0, endPoint.y0 - downPoint.y0);
pTrackObj->DrawMoveTrackFrame(&xyDC, deltaPt);
}
CTrackObj* CItemWcsSingleWell::GetMoveInTrack(CTrackGroup* pGroup, CTrackObj* pTrackMoving)
{
CTrackObj* pRetTrack = NULL;
if (pTrackMoving->m_HeadRect.PtInRect(pTrackMoving->m_active_head.CenterPoint()))
{
return pRetTrack;
}
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();
//<2F><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ң<EFBFBD><D2A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>еĵ<D0B5><C4B5><EFBFBD><EFBFBD>бȽϣ<C8BD><CFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD><C2B1>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>ŵ<EFBFBD><C5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱֻҪ<D6BB><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1>Ŀ<EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ㼴<C4B5><E3BCB4>
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 || bRight)
{
if (pTrack->GetTrackType() == Track_Group)
{//<2F>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD><C5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ұߵķ<DFB5>Χ<EFBFBD><CEA7>
CTrackGroup* pTrackGroup = (CTrackGroup*)pTrack;
if (bIn) //pTrackGroup->m_HeadRect.PtInRect(pTrackMoving->m_active_head.CenterPoint()))
{//<2F>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD><C5B5><EFBFBD>pTrack<63>ڲ<EFBFBD>
if (pTrackGroup->GetGroupType() == Group_Vertical)
{
return pTrackGroup;
}
else
{//ˮƽ<CBAE><C6BD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݹ<EFBFBD>
return (GetMoveInTrack(pTrackGroup, pTrackMoving));
}
}
else
{//<2F>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ㲻<C5B5><E3B2BB>pTrack<63>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD><C5B5><EFBFBD>pTrack<63><6B><EFBFBD>ϱ߻<CFB1><DFBB>±ߣ<C2B1><DFA3><EFBFBD>ֱ<EFBFBD>Ӽ<EFBFBD><D3BC>뵽pGroup
return pTrack;
}
}
else
{//<2F>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ㲻<C5B5><E3B2BB><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>,<2C><><EFBFBD>ұߵķ<DFB5>Χ
return pTrack;
}
}
}
//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD>
return pTrack;
}
}