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.

1611 lines
55 KiB
C++

1 month ago
#include "StdAfx.h"
#include "WellPoleLib/WellBaseObj.h"
#include "WellPoleLib/WellClassObjGroup.h"
#include "WellPoleLib/InTrackDepthSegment.h"
#include "WellPoleLib/TrackObj.h"
#include "WellPoleLib/InclinedTrack.h"
#include "WellPoleLib\InTrackResult.h"
#include "WellPoleLib\InTrackLayerGroup.h"
#include "WellPoleLib/WellPole.h"
#include "MultiWellSectionLib/BendObj.h"
#include "MultiWellSectionLib/FenceBendObj.h"
#include "MultiWellSectionLib/FaultObj.h"
#include "MultiWellSectionLib/SectionWellObj.h"
#include "MultiWellSectionLib/WellSection.h"
#include "MultiWellSectionLib/WellFence.h"
#include "ItemWcsTrackIn.h"
#include "ItemAddBend.h"
#include "MultiWellSectionDoc.h"
#include "MultiWellSectionlView.h"
namespace NItem
{
CItemAddBend::CItemAddBend(CSigmaDoc *pDoc)
: CItemWellBase(pDoc)
{
SetType(ITEM_ADDBEND);
m_pItemTrackIn = NULL;
m_pItemWell = NULL;
}
CItemAddBend::~CItemAddBend(void)
{
if(m_pItemTrackIn != NULL)
{
delete m_pItemTrackIn;
m_pItemTrackIn = NULL;
}
}
void CItemAddBend::OnDraw(CXyDC* pXyDC, CDC* pDC)
{
//CDC *pDC = GetDC()->GetDC();
CPen pen(PS_DOT, 0, RGB(0, 0, 0));
CPen *pOldPen = (CPen *)pDC->SelectObject(&pen);
int old = pDC->SetROP2(R2_NOTXORPEN);
if (m_bLDown)
{
pDC->MoveTo(m_firstPoint);
pDC->LineTo(m_lastPoint);
}
pDC->SelectObject(pOldPen);
pen.DeleteObject();
pDC->SetROP2(old);
}
void CItemAddBend::OnLButtonDown(CDC *pDC, UINT nFlags, CPoint point, int vk)
{
m_bLDown = TRUE;
CPoint2D ptReal = GetDC()->GetReal(point);
m_downPoint = m_firstPoint = m_lastPoint = point;
OnDraw(GetDC(),pDC);
}
void CItemAddBend::MakeBendForOld(CWellSection* pSection, CWellPole * pWell ,UINT nFlags, CPoint point)
{
m_lastPoint = point;
CPoint2D ptDown = GetDC()->GetReal(m_downPoint);
CPoint2D ptLast = GetDC()->GetReal(m_lastPoint);
double yMin = min(ptDown.y0, ptLast.y0);
double yMax = max(ptDown.y0, ptLast.y0);
if (fabs(yMin - yMax) == 0.0)
{
ReleaseCapture();
m_bLDown = FALSE;
return;
}
SetReUnDoAction();
int nHandleSize = HANDLESIZE;
CWellPole* pLeftWell = NULL;
CWellPole* pRightWell = NULL;
if (pSection->GetType() == KEP_FENCE)
{
if (m_pObj->GetType() == KEP_RESULT || m_pObj->GetType() == KEP_LAYERGROUP)
{
CWellFence* pFence = (CWellFence*)pSection;
POSITION pos = pFence->m_WellList.GetHeadPosition();
while (pos != NULL)
{
CSectionWellObj* pSectionWell = (CSectionWellObj*)pFence->m_WellList.GetNext(pos);
if (pSectionWell->GetPos().PtInRect(ptLast) && pSectionWell != pWell)
{
pRightWell = pSectionWell;
break;
}
}
if (pRightWell != NULL)
{
TRACKLIST tracklist;
pRightWell->GetAllTrack(&tracklist);
TRACKLIST::iterator pos = tracklist.begin();
for (; pos != tracklist.end(); pos++)
{
CTrackObj* pTrack = (CTrackObj*)*pos;
if ((m_pObj->GetType() == KEP_RESULT && pTrack->GetTrackType() == Track_Result) || (m_pObj->GetType() == KEP_LAYERGROUP && pTrack->GetTrackType() == Track_Stratum))
{
double xLeftValue, xRightValue;
CFenceBendObj *pBend = new CFenceBendObj();
pBend->SetParent(pSection);
pBend->m_pLayerLeft = m_pObj;
pBend->m_ptBeginBreak.x0 = ptDown.x0;
pBend->m_ptEndBreak.x0 = ptLast.x0;
pBend->m_pWellLeft = pWell;
pBend->m_pWellRight = pRightWell;
//pBend->GetBendXValue(xLeftValue,xRightValue);
xLeftValue = pWell->GetPos().right;
xRightValue = pRightWell->GetPos().left;
if (pWell->GetPos().CenterPoint().x0 > pRightWell->GetPos().CenterPoint().x0)
{
xLeftValue = pWell->GetPos().left;
xRightValue = pRightWell->GetPos().right;
}
pBend->m_fEndBreakPos = (xRightValue - xLeftValue) / (xRightValue - xLeftValue);
pBend->m_fEndBreakDepth = (ptLast.y0 - (pRightWell->GetPos().top - pRightWell->m_dHeightWellHead - pRightWell->m_dHeightTrackHead))
/ (pRightWell->GetPos().Height() - pRightWell->m_dHeightWellHead - pRightWell->m_dHeightTrackHead);
pBend->m_EndBreakXRatio = pBend->m_fEndBreakPos;
pBend->m_EndYRatio = pBend->m_fEndBreakDepth;
pBend->m_fBeginBreakPos = 0.5;
pBend->m_fOutBendControlLevel = 0.0;
BOOL bExist = FALSE;
WELLOBJLIST::iterator posLayer = pTrack->GetChildren().begin(); // pTrack->GetChildObjList().GetHeadPosition();
for (; posLayer != pTrack->GetChildren().end(); posLayer++)
{
CWellBaseObj* pLayer = (CWellBaseObj*)*posLayer; // pTrack->GetChildObjList().GetNext(posLayer);
CRect rect = GetDC()->GetScreen(pLayer->GetPos());
rect.NormalizeRect();
if (rect.PtInRect(m_lastPoint))
{
bExist = TRUE;
POSITION pos = pSection->m_BendList.GetHeadPosition();
while (pos != NULL)
{
CBendObj* p = (CBendObj*)pSection->m_BendList.GetNext(pos);
if (p->m_pLayerLeft == m_pObj && p->m_pLayerRight == NULL && p->m_pWellRight == pRightWell)
{
if (pBend != NULL)
{
delete pBend;
}
GetDoc()->Invalidate();
ReleaseCapture();
m_bLDown = FALSE;
return;
}
else if ((p->m_pLayerLeft == m_pObj && p->m_pLayerRight == pLayer) || (p->m_pLayerLeft == pLayer && p->m_pLayerRight == m_pObj))
{
if (pBend != NULL)
{
delete pBend;
}
GetDoc()->Invalidate();
ReleaseCapture();
m_bLDown = FALSE;
return;
}
}
pBend->m_pLayerRight = (CInTrackDepthSegment*)pLayer;
pBend->m_nLithoBreakStyle = 2;
pBend->m_fLithoBreakWidth = 0.1;
pBend->m_fTopLithoBreakPoint = 0.5;
pBend->m_fBottomLithoBreakPoint = 0.5;
if (m_pObj->GetType() == KEP_RESULT)
{
CInTrackResult* pLayerLeft = (CInTrackResult*)pBend->m_pLayerLeft;
CInTrackResult* pLayerRight = (CInTrackResult*)pBend->m_pLayerRight;
if ((pLayerLeft->m_strResult != pLayerRight->m_strResult) && !(pLayerLeft->m_strResult == "<EFBFBD>ɲ<EFBFBD>" || pLayerRight->m_strResult == "<EFBFBD>ɲ<EFBFBD>"))
{
pBend->m_fWaterTop = pBend->m_fGasBottom = pLayerLeft->GetPos().CenterPoint().y0 - (pLayerLeft->GetPos().CenterPoint().y0 - pLayerRight->GetPos().CenterPoint().y0) / 2;
}
}
//<2F><><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD>
double yLeftValue = pBend->m_pLayerLeft->GetPos().CenterPoint().y0;
double yRightValue = pBend->m_pLayerRight->GetPos().CenterPoint().y0;
pBend->AddControlPoints(xLeftValue, yLeftValue, xRightValue, yRightValue, xRightValue - xLeftValue);
pBend->CreateBendLines();
CString strLithoLeft;
CString strLithoRight;
if (m_pObj->GetType() == KEP_RESULT)
{
CInTrackResult* pLayerLeft = (CInTrackResult*)pBend->m_pLayerLeft;
strLithoLeft = pLayerLeft->m_strLitho;
if (NULL != pBend->m_pLayerRight)
{
CInTrackResult* pLayerRight = (CInTrackResult*)pBend->m_pLayerRight;
strLithoRight = pLayerRight->m_strLitho;
}
}
else if (m_pObj->GetType() == KEP_LAYERGROUP)
{
CInTrackLayerGroup* pLayerLeft = (CInTrackLayerGroup*)pBend->m_pLayerLeft;
strLithoLeft = pLayerLeft->m_strLitho;
if (NULL != pBend->m_pLayerRight)
{
CInTrackLayerGroup* pLayerRight = (CInTrackLayerGroup*)pBend->m_pLayerRight;
strLithoRight = pLayerRight->m_strLitho;
}
}
if (/*!strLithoLeft.IsEmpty() && !strLithoRight.IsEmpty() && */strLithoLeft != strLithoRight)
{
pBend->bBreakLithoTemp = TRUE;
pBend->CreateBendLithoBreak();
}
pBend->CreateBendFills();
pBend->SetShowFill(TRUE);
pBend->SetShowTopLine(TRUE);
pBend->SetShowBotLine(TRUE);
////<2F><><EFBFBD><EFBFBD>Bend<6E>Ķϲ<C4B6><CFB2><EFBFBD><EFBFBD><EFBFBD>
//pBend->BendReCut();
//if (pTrack->GetTrackType()==Track_Result)
//{
// pBend->SetBendLinkType(Bend_Layer);
//}
//else if (pTrack->GetTrackType()==Track_Text)
//{
// pBend->SetBendLinkType(Bend_Text);
//}
pFence->m_BendList.AddTail(pBend);
break;
}
}
if (!bExist)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD>
{
pBend->m_pLayerRight = NULL;
pBend->m_pWellRight = pRightWell;
pBend->m_ptEndBreak.x0 = xRightValue;
pBend->m_ptEndBreak.y0 = ptLast.y0;
pBend->m_ptBeginBreak.x0 = xLeftValue;
pBend->m_ptBeginBreak.y0 = pBend->m_pLayerLeft->GetPos().CenterPoint().y0;
//<2F><><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD>
pBend->AddControlPoints(xLeftValue, m_pObj->GetPos().CenterPoint().y0, ptLast.x0, ptLast.y0, xRightValue - xLeftValue);
pBend->CreateBendLines();
CString strLithoLeft;
CString strLithoRight;
if (m_pObj->GetType() == KEP_RESULT)
{
CInTrackResult* pLayerLeft = (CInTrackResult*)pBend->m_pLayerLeft;
strLithoLeft = pLayerLeft->m_strLitho;
if (NULL != pBend->m_pLayerRight)
{
CInTrackResult* pLayerRight = (CInTrackResult*)pBend->m_pLayerRight;
strLithoRight = pLayerRight->m_strLitho;
}
}
else if (m_pObj->GetType() == KEP_LAYERGROUP)
{
CInTrackLayerGroup* pLayerLeft = (CInTrackLayerGroup*)pBend->m_pLayerLeft;
strLithoLeft = pLayerLeft->m_strLitho;
if (NULL != pBend->m_pLayerRight)
{
CInTrackLayerGroup* pLayerRight = (CInTrackLayerGroup*)pBend->m_pLayerRight;
strLithoRight = pLayerRight->m_strLitho;
}
}
if (/*!strLithoLeft.IsEmpty() && !strLithoRight.IsEmpty() && */strLithoLeft != strLithoRight)
{
pBend->bBreakLithoTemp = TRUE;
pBend->CreateBendLithoBreak();
}
pBend->CreateBendFills();
pBend->SetShowFill(TRUE);
pBend->SetShowTopLine(TRUE);
pBend->SetShowBotLine(TRUE);
//<2F><><EFBFBD><EFBFBD>Bend<6E>Ķϲ<C4B6><CFB2><EFBFBD><EFBFBD><EFBFBD>
//pBend->BendReCut();
//if (pTrack->GetTrackType()==Track_Result)
//{
// pBend->SetBendLinkType(Bend_Layer);
//}
//else if (pTrack->GetTrackType()==Track_Text)
//{
// pBend->SetBendLinkType(Bend_Text);
//}
pFence->m_BendList.AddTail(pBend);
}
break;
}
}
tracklist.clear();
}
}
}
else if (pSection->GetType() == KEP_WELLSECTION)
{
POSITION posFind = pSection->m_WellList.Find(pWell);
pSection->m_WellList.GetNext(posFind);
if (posFind != NULL)
{
pRightWell = (CWellPole*)pSection->m_WellList.GetNext(posFind);
}
if (ptLast.x0 > ptDown.x0&&pRightWell != NULL)
{
if (m_pObj->GetType() == KEP_RESULT || m_pObj->GetType() == KEP_LAYERGROUP || m_pObj->GetType() == KEP_STANDARD)
{
double xLeftValue, xRightValue;
CBendObj *pBend = new CBendObj();
pBend->SetParent(pSection);
pBend->m_pLayerLeft = m_pObj;
///////////////////////////////////
pBend->m_ptBeginBreak.x0 = ptDown.x0;
pBend->m_ptEndBreak.x0 = ptLast.x0;
////////////////////////////////////
pBend->m_pWellLeft = pWell;
pBend->m_pWellRight = pRightWell;
//pBend->strLeftWellName = pWell->GetWellName();
//pBend->strRightWellName = pRightWell->GetWellName();
pBend->GetBendXValue(xLeftValue, xRightValue);
pBend->m_fEndBreakPos = (ptLast.x0 - xLeftValue) / (xRightValue - xLeftValue) * 100;
pBend->m_fBeginBreakPos = 0.5;
pBend->m_fOutBendControlLevel = 0.0;
if (ptLast.x0 > xLeftValue&&ptLast.x0 < xRightValue)
{
pBend->m_pLayerRight = NULL;
/////////////////////////////////////
pBend->m_ptBeginBreak.x0 = xLeftValue;
pBend->m_ptBeginBreak.y0 = m_pObj->GetPos().CenterPoint().y0;
pBend->m_ptEndBreak.x0 = ptLast.x0;
pBend->m_ptEndBreak.y0 = ptLast.y0;
////////////////////////////////////
POSITION pos = pSection->m_BendList.GetHeadPosition();
while (pos != NULL)
{
CBendObj* p = (CBendObj*)pSection->m_BendList.GetNext(pos);
if (p->m_pLayerLeft == m_pObj && p->m_pLayerRight == NULL && (p->m_ptEndBreak.x0 > xLeftValue&&p->m_ptEndBreak.x0 < xRightValue))
{
pSection->DeleteBend(p);
delete p;
break;
}
else if (p->m_pLayerRight != NULL && (p->m_pLayerLeft == m_pObj || p->m_pLayerRight == m_pObj) &&
(p->m_pWellLeft == pBend->m_pWellLeft&&p->m_pWellRight == pBend->m_pWellRight || p->m_pWellLeft == pBend->m_pWellRight&&p->m_pWellRight == pBend->m_pWellLeft))
{
if (pBend != NULL)
{
delete pBend;
GetDoc()->Invalidate();
ReleaseCapture();
m_bLDown = FALSE;
return;
}
}
}
pBend->AddControlPoints(xLeftValue, m_pObj->GetPos().CenterPoint().y0, pBend->m_ptEndBreak.x0, ptLast.y0, xRightValue - xLeftValue);
//////////////////////////////////////////////////////////////////////////////
dfPoint TempPoint;
TempPoint.x0 = xLeftValue;
TempPoint.y0 = m_pObj->GetPos().top;
pBend->m_ptArrCurveTopOld.Add(TempPoint);
TempPoint.y0 = m_pObj->GetPos().bottom;
pBend->m_ptArrCurveBotOld.Add(TempPoint);
TempPoint.x0 = ptLast.x0;
TempPoint.y0 = ptLast.y0;
pBend->m_ptArrCurveTopOld.Add(TempPoint);
pBend->m_ptArrCurveBotOld.Add(TempPoint);
//<2F><><EFBFBD><EFBFBD>Bend<6E>Ķϲ<C4B6><CFB2><EFBFBD><EFBFBD><EFBFBD>
pBend->BendAddFault();
pBend->ComputeSlopeAndConstant();
if (m_pObj->GetType() == KEP_STANDARD)
{
pBend->SetSlotTypeStandardLayer(TRUE);
}
pBend->CreateBendLines();
CString strLithoLeft;
CString strLithoRight;
CString strResultLeft;
CString strResultRight;
if (m_pObj->GetType() == KEP_RESULT)
{
CInTrackResult* pLayerLeft = (CInTrackResult*)pBend->m_pLayerLeft;
strLithoLeft = pLayerLeft->m_strLitho;
strResultLeft = pLayerLeft->m_strResult;
if (NULL != pBend->m_pLayerRight)
{
CInTrackResult* pLayerRight = (CInTrackResult*)pBend->m_pLayerRight;
strLithoRight = pLayerRight->m_strLitho;
strResultRight = pLayerRight->m_strResult;
}
}
else if (m_pObj->GetType() == KEP_LAYERGROUP)
{
CInTrackLayerGroup* pLayerLeft = (CInTrackLayerGroup*)pBend->m_pLayerLeft;
strLithoLeft = pLayerLeft->m_strLitho;
if (NULL != pBend->m_pLayerRight)
{
CInTrackLayerGroup* pLayerRight = (CInTrackLayerGroup*)pBend->m_pLayerRight;
strLithoRight = pLayerRight->m_strLitho;
}
}
else if (m_pObj->GetType() == KEP_STANDARD)
{
}
if ((/*!strLithoLeft.IsEmpty() && !strLithoRight.IsEmpty() && */strLithoLeft != strLithoRight) ||
(/*!strResultLeft.IsEmpty() && !strResultRight.IsEmpty() && */strResultLeft != strResultRight))
{
pBend->bBreakLithoTemp = TRUE;
pBend->CreateBendLithoBreak();
}
pBend->CreateBendFills();
pBend->SetShowFill(TRUE);
pBend->SetShowTopLine(TRUE);
pBend->SetShowBotLine(TRUE);
if (m_pObj->GetType() == KEP_RESULT)
{
pBend->SetSlotTypeResult(TRUE);
}
else if (m_pObj->GetType() == KEP_LAYERGROUP)
{
pBend->SetSlotTypeStratiUnit(TRUE);
}
//else if (m_pObj->GetType() == KEP_STANDARD)
//{
// pBend->SetSlotTypeStandardLayer(TRUE);
//}
pSection->m_BendList.AddTail(pBend);
if (pSection->IsStratumSmooth())
{
pBend->SmoothBendLines();
}
//break;
}
else if (ptLast.x0 > xRightValue)
{
TRACKLIST tracklist;
pRightWell->GetAllTrack(&tracklist);
TRACKLIST::iterator pos = tracklist.begin(); // GetHeadPosition();
for (; pos != tracklist.end(); pos++)
{
CTrackObj* pTrack = (CTrackObj*)*pos; // tracklist.GetNext(pos);
if ((m_pObj->GetType() == KEP_RESULT && pTrack->GetTrackType() == Track_Result) ||
(m_pObj->GetType() == KEP_LAYERGROUP && pTrack->GetTrackType() == Track_Stratum) ||
(m_pObj->GetType() == KEP_STANDARD && pTrack->GetTrackType() == Track_StandardLayer))
{
WELLOBJLIST::iterator posLayer = pTrack->GetChildren().begin(); // pTrack->GetChildObjList().GetHeadPosition();
for (; posLayer != pTrack->GetChildren().end(); posLayer++)
{
CWellBaseObj* pLayer = (CWellBaseObj*)*posLayer; // pTrack->GetChildObjList().GetNext(posLayer);
CRect rect = GetDC()->GetScreen(pLayer->GetPos());
rect.NormalizeRect();
/////////<2F><>׼<EFBFBD><D7BC><EFBFBD><EFBFBD>ʱ<EFBFBD>Ŵ<EFBFBD><C5B4><EFBFBD><EFBFBD>εĸ߶<C4B8>
if (m_pObj->GetType() == KEP_STANDARD)
{
rect.InflateRect(0, nHandleSize / 2);
}
if (rect.PtInRect(m_lastPoint))
{
BOOL bThis = FALSE;
BOOL bThat = FALSE;
POSITION pos = pSection->m_BendList.GetHeadPosition();
while (pos != NULL)
{
CBendObj* p = (CBendObj*)pSection->m_BendList.GetNext(pos);
if (p->m_pLayerLeft == m_pObj && p->m_pLayerRight == NULL && (p->m_ptEndBreak.x0 > xLeftValue&&p->m_ptEndBreak.x0 < xRightValue))
{
pSection->DeleteBend(p);
delete p;
bThis = TRUE;
}
else if (p->m_pLayerLeft == pLayer && p->m_pLayerRight == NULL && (p->m_ptEndBreak.x0 > xLeftValue&&p->m_ptEndBreak.x0 < xRightValue))
{
POSITION posBend = pSection->m_BendList.Find(p);
pSection->DeleteBend(p);
delete p;
bThat = TRUE;
}
else if ((p->m_pLayerLeft == m_pObj && p->m_pLayerRight == pLayer) || (p->m_pLayerLeft == pLayer && p->m_pLayerRight == m_pObj))
{
POSITION posBend = pSection->m_BendList.Find(p);
if (posBend != NULL)
{
pSection->DeleteBend(p);
}
delete p;
if (pBend != NULL)
{
delete pBend;
}
GetDoc()->Invalidate();
ReleaseCapture();
m_bLDown = FALSE;
return;
}
if (bThis && bThat)
break;
}
pBend->m_pLayerRight = (CInTrackDepthSegment*)pLayer;
pBend->m_nLithoBreakStyle = 2;
pBend->m_fLithoBreakWidth = 0.1;
pBend->m_fTopLithoBreakPoint = 0.5;
pBend->m_fBottomLithoBreakPoint = 0.5;
///// <20><><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ھ<EFBFBD>֮<EFBFBD><D6AE><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
POSITION posTemp = pSection->m_BendList.GetHeadPosition();
while (posTemp != NULL)
{
CWellBaseObj* pObj = pSection->m_BendList.GetNext(posTemp);
if (pObj->GetType() == KEP_SECTIONBEND)
{
CBendObj* pBendObj = (CBendObj*)pObj;
double topLeft, topRight;
if (pBendObj->m_pLayerRight != NULL)
{
CWellPole* pWellLeft = (CWellPole*)pBendObj->m_pLayerLeft->GetWell();
CWellPole* pWellRight = (CWellPole*)pBendObj->m_pLayerRight->GetWell();
if ((pWellLeft == pWell && pWellRight == pRightWell) || (pWellLeft == pRightWell && pWellRight == pWell))
{
if (pBendObj->m_pLayerRight->GetPos().left > pBendObj->m_pLayerLeft->GetPos().left)
{
topLeft = pBendObj->m_pLayerLeft->GetPos().top;
topRight = pBendObj->m_pLayerRight->GetPos().top;
}
else
{
topLeft = pBendObj->m_pLayerRight->GetPos().top;
topRight = pBendObj->m_pLayerLeft->GetPos().top;
}
BOOL bOne = topLeft > pBend->m_pLayerLeft->GetPos().top&&topRight < pBend->m_pLayerRight->GetPos().top;
BOOL bSecond = topLeft < pBend->m_pLayerLeft->GetPos().top&&topRight > pBend->m_pLayerRight->GetPos().top;
if (bOne || bSecond)
{
pBend = NULL;
delete pBend;
AfxMessageBox("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܳ<EFBFBD><EFBFBD>ֽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!");
GetDoc()->Invalidate();
ReleaseCapture();
m_bLDown = FALSE;
return;
}
}
}
}
}
///// <20><><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ھ<EFBFBD>֮<EFBFBD><D6AE><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
if (m_pObj->GetType() == KEP_RESULT)
{
CInTrackResult* pLayerLeft = (CInTrackResult*)pBend->m_pLayerLeft;
CInTrackResult* pLayerRight = (CInTrackResult*)pBend->m_pLayerRight;
if ((pLayerLeft->m_strResult != pLayerRight->m_strResult) && !(pLayerLeft->m_strResult == "<EFBFBD>ɲ<EFBFBD>" || pLayerRight->m_strResult == "<EFBFBD>ɲ<EFBFBD>"))
{
pBend->m_fWaterTop = pBend->m_fGasBottom = pLayerLeft->GetPos().CenterPoint().y0 - (pLayerLeft->GetPos().CenterPoint().y0 - pLayerRight->GetPos().CenterPoint().y0) / 2;
}
}
double valueLeft = m_pObj->GetPos().CenterPoint().y0;
double valueRight = pLayer->GetPos().CenterPoint().y0;
double HeightLeft = m_pObj->GetPos().Height();
double HeightRight = pLayer->GetPos().Height();
ReBendLeftRightList(pBend);
if (m_pObj->GetType() == KEP_STANDARD)
{
pBend->SetSlotTypeStandardLayer(TRUE);
}
pSection->ComputeBendPosition(pBend, valueLeft, valueRight, HeightLeft, HeightRight);
pBend->AddControlPoints(xLeftValue, valueLeft, xRightValue, valueRight, xRightValue - xLeftValue);
//////////////////////////////////////////////////////////////////////////
dfPoint ptTemp;
ptTemp.x0 = xLeftValue;
ptTemp.y0 = valueLeft + HeightLeft * 0.5;
pBend->m_ptArrCurveTopOld.Add(ptTemp);
ptTemp.y0 = valueLeft - HeightLeft * 0.5;
pBend->m_ptArrCurveBotOld.Add(ptTemp);
ptTemp.x0 = xRightValue;
ptTemp.y0 = valueRight + HeightRight * 0.5;
pBend->m_ptArrCurveTopOld.Add(ptTemp);
ptTemp.y0 = valueRight - HeightRight * 0.5;
pBend->m_ptArrCurveBotOld.Add(ptTemp);
//<2F><><EFBFBD><EFBFBD>Bend<6E>Ķϲ<C4B6><CFB2><EFBFBD><EFBFBD><EFBFBD>
pBend->BendAddFault();
pBend->ComputeSlopeAndConstant();
pBend->CreateBendLines();
CString strLithoLeft;
CString strLithoRight;
CString strResultLeft;
CString strResultRight;
if (m_pObj->GetType() == KEP_RESULT)
{
CInTrackResult* pLayerLeft = (CInTrackResult*)pBend->m_pLayerLeft;
strLithoLeft = pLayerLeft->m_strLitho;
strResultLeft = pLayerLeft->m_strResult;
if (NULL != pBend->m_pLayerRight)
{
CInTrackResult* pLayerRight = (CInTrackResult*)pBend->m_pLayerRight;
strLithoRight = pLayerRight->m_strLitho;
strResultRight = pLayerRight->m_strResult;
}
}
else if (m_pObj->GetType() == KEP_LAYERGROUP)
{
CInTrackLayerGroup* pLayerLeft = (CInTrackLayerGroup*)pBend->m_pLayerLeft;
strLithoLeft = pLayerLeft->m_strLitho;
if (NULL != pBend->m_pLayerRight)
{
CInTrackLayerGroup* pLayerRight = (CInTrackLayerGroup*)pBend->m_pLayerRight;
strLithoRight = pLayerRight->m_strLitho;
}
}
if ((/*!strLithoLeft.IsEmpty() && !strLithoRight.IsEmpty() &&*/ strLithoLeft != strLithoRight) ||
(/*!strResultLeft.IsEmpty() && !strResultRight.IsEmpty() && */strResultLeft != strResultRight))
{
pBend->bBreakLithoTemp = TRUE;
pBend->CreateBendLithoBreak();
}
pBend->CreateBendFills();
pBend->SetShowFill(TRUE);
pBend->SetShowTopLine(TRUE);
pBend->SetShowBotLine(TRUE);
if (pTrack->GetTrackType() == Track_Result)
{
pBend->SetSlotTypeResult(TRUE);
}
else if (pTrack->GetTrackType() == Track_Stratum)
{
pBend->SetSlotTypeStratiUnit(TRUE);
}
else if (pTrack->GetTrackType() == Track_StandardLayer)
{
pBend->SetSlotTypeStandardLayer(TRUE);
}
if (pSection->IsStratumSmooth())
{
pBend->SmoothBendLines();
}
pSection->m_BendList.AddTail(pBend);
break;
}
}
}
}
tracklist.clear();
}
}
}
posFind = pSection->m_WellList.Find(pWell);
pSection->m_WellList.GetPrev(posFind);
if (posFind != NULL)
{
pLeftWell = (CWellPole*)pSection->m_WellList.GetPrev(posFind);
}
if (ptLast.x0 < ptDown.x0&&pLeftWell != NULL)
{
if (m_pObj->GetType() == KEP_RESULT || m_pObj->GetType() == KEP_LAYERGROUP ||
m_pObj->GetType() == KEP_STANDARD)
{
double xLeftValue, xRightValue;
CBendObj *pBend = new CBendObj();
pBend->SetParent(pSection);
pBend->m_pLayerLeft = m_pObj;
pBend->m_ptBeginBreak.x0 = ptDown.x0;
pBend->m_ptEndBreak.x0 = ptLast.x0;
pBend->m_pWellLeft = pWell;
pBend->m_pWellRight = pLeftWell;
//pBend->strLeftWellName = pWell->GetWellName();
//pBend->strRightWellName = pLeftWell->GetWellName();
pBend->GetBendXValue(xLeftValue, xRightValue);
pBend->m_fEndBreakPos = (ptLast.x0 - xLeftValue) / (xRightValue - xLeftValue) * 100;
pBend->m_fBeginBreakPos = 0.5;
pBend->m_fOutBendControlLevel = 0.0;
if (ptLast.x0 > xRightValue&&ptLast.x0 < xLeftValue)
{
pBend->m_pLayerRight = NULL;
/////////////////////////////////////
pBend->m_ptBeginBreak.x0 = xLeftValue;
pBend->m_ptBeginBreak.y0 = m_pObj->GetPos().CenterPoint().y0;
pBend->m_ptEndBreak.x0 = ptLast.x0;
pBend->m_ptEndBreak.y0 = ptLast.y0;
////////////////////////////////////
POSITION pos = pSection->m_BendList.GetHeadPosition();
while (pos != NULL)
{
CBendObj* p = (CBendObj*)pSection->m_BendList.GetNext(pos);
if (p->m_pLayerLeft == m_pObj && p->m_pLayerRight == NULL && (p->m_ptEndBreak.x0<xLeftValue&&p->m_ptEndBreak.x0>xRightValue))
{
POSITION posBend = pSection->m_BendList.Find(p);
pSection->DeleteBend(p);
delete p;
break;
}
else if (p->m_pLayerRight != NULL && (p->m_pLayerLeft == m_pObj || p->m_pLayerRight == m_pObj) &&
(p->m_pWellLeft == pBend->m_pWellLeft&&p->m_pWellRight == pBend->m_pWellRight || p->m_pWellLeft == pBend->m_pWellRight&&p->m_pWellRight == pBend->m_pWellLeft))
{
if (pBend != NULL)
{
delete pBend;
GetDoc()->Invalidate();
ReleaseCapture();
m_bLDown = FALSE;
return;
}
}
}
pBend->AddControlPoints(xLeftValue, m_pObj->GetPos().CenterPoint().y0, pBend->m_ptEndBreak.x0, ptLast.y0, xRightValue - xLeftValue);
////////////////////////////////////////////////////////////////////////////////
dfPoint ptTemp;
ptTemp.x0 = xLeftValue;
ptTemp.y0 = pBend->m_pLayerLeft->GetPos().top;
pBend->m_ptArrCurveTopOld.Add(ptTemp);
ptTemp.y0 = pBend->m_pLayerLeft->GetPos().bottom;
pBend->m_ptArrCurveBotOld.Add(ptTemp);
ptTemp.x0 = ptLast.x0;
ptTemp.y0 = ptLast.y0;
pBend->m_ptArrCurveTopOld.Add(ptTemp);
pBend->m_ptArrCurveBotOld.Add(ptTemp);
//////////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD><EFBFBD>Bend<6E>Ķϲ<C4B6><CFB2><EFBFBD><EFBFBD><EFBFBD>
pBend->BendAddFault();
pBend->ComputeSlopeAndConstant();
if (m_pObj->GetType() == KEP_STANDARD)
{
pBend->SetSlotTypeStandardLayer(TRUE);
}
pBend->CreateBendLines();
CString strLithoLeft;
CString strLithoRight;
CString strResultLeft;
CString strResultRight;
if (m_pObj->GetType() == KEP_RESULT)
{
CInTrackResult* pLayerLeft = (CInTrackResult*)pBend->m_pLayerLeft;
strLithoLeft = pLayerLeft->m_strLitho;
strResultLeft = pLayerLeft->m_strResult;
if (NULL != pBend->m_pLayerRight)
{
CInTrackResult* pLayerRight = (CInTrackResult*)pBend->m_pLayerRight;
strLithoRight = pLayerRight->m_strLitho;
strResultRight = pLayerRight->m_strResult;
}
}
else if (m_pObj->GetType() == KEP_LAYERGROUP)
{
CInTrackLayerGroup* pLayerLeft = (CInTrackLayerGroup*)pBend->m_pLayerLeft;
strLithoLeft = pLayerLeft->m_strLitho;
if (NULL != pBend->m_pLayerRight)
{
CInTrackLayerGroup* pLayerRight = (CInTrackLayerGroup*)pBend->m_pLayerRight;
strLithoRight = pLayerRight->m_strLitho;
}
}
else if (m_pObj->GetType() == KEP_STANDARD)
{
}
if ((/*!strLithoLeft.IsEmpty() && !strLithoRight.IsEmpty() && */strLithoLeft != strLithoRight) ||
(/*!strResultLeft.IsEmpty() && !strResultRight.IsEmpty() && */strResultLeft != strResultRight))
{
pBend->bBreakLithoTemp = TRUE;
pBend->CreateBendLithoBreak();
}
pBend->CreateBendFills();
pBend->SetShowFill(TRUE);
pBend->SetShowTopLine(TRUE);
pBend->SetShowBotLine(TRUE);
if (m_pObj->GetType() == KEP_RESULT)
{
pBend->SetSlotTypeResult(TRUE);
}
else if (m_pObj->GetType() == KEP_LAYERGROUP)
{
pBend->SetSlotTypeStratiUnit(TRUE);
}
//else if (m_pObj->GetType()==KEP_STANDARD)
//{
// pBend->SetSlotTypeStandardLayer(TRUE);
//}
if (pSection->IsStratumSmooth())
{
pBend->SmoothBendLines();
}
pSection->m_BendList.AddTail(pBend);
//break;
}
else if (ptLast.x0 < xLeftValue)
{
TRACKLIST tracklist;
pLeftWell->GetAllTrack(&tracklist);
TRACKLIST::iterator pos = tracklist.begin();
for (; pos != tracklist.end(); pos++)
{
CTrackObj* pTrack = (CTrackObj*)*pos;
if ((m_pObj->GetType() == KEP_RESULT && pTrack->GetTrackType() == Track_Result) ||
(m_pObj->GetType() == KEP_LAYERGROUP && pTrack->GetTrackType() == Track_Stratum) ||
(m_pObj->GetType() == KEP_STANDARD && pTrack->GetTrackType() == Track_StandardLayer))
{
WELLOBJLIST::iterator posLayer = pTrack->GetChildren().begin();
for (; posLayer != pTrack->GetChildren().end(); posLayer++)
{
CWellBaseObj* pLayer = (CWellBaseObj*)*posLayer; // pTrack->GetChildObjList().GetNext(posLayer);
CRect rect = GetDC()->GetScreen(pLayer->GetPos());
rect.NormalizeRect();
/////////<2F><>׼<EFBFBD><D7BC><EFBFBD><EFBFBD>ʱ<EFBFBD>Ŵ<EFBFBD><C5B4><EFBFBD><EFBFBD>εĸ߶<C4B8>
if (m_pObj->GetType() == KEP_STANDARD)
{
rect.InflateRect(0, nHandleSize / 2);
}
if (rect.PtInRect(m_lastPoint))
{
BOOL bThis = FALSE;
BOOL bThat = FALSE;
POSITION pos = pSection->m_BendList.GetHeadPosition();
while (pos != NULL)
{
CBendObj* p = (CBendObj*)pSection->m_BendList.GetNext(pos);
if (p->m_pLayerLeft == m_pObj && p->m_pLayerRight == NULL && (p->m_ptEndBreak.x0<xLeftValue&&p->m_ptEndBreak.x0>xRightValue))
{
POSITION posBend = pSection->m_BendList.Find(p);
if (posBend != NULL)
{
pSection->DeleteBend(p);
}
delete p;
bThis = TRUE;
}
else if (p->m_pLayerLeft == pLayer && p->m_pLayerRight == NULL && (p->m_ptEndBreak.x0<xLeftValue&&p->m_ptEndBreak.x0>xRightValue))
{
POSITION posBend = pSection->m_BendList.Find(p);
if (posBend != NULL)
{
pSection->DeleteBend(p);
}
delete p;
bThat = TRUE;
}
else if ((p->m_pLayerLeft == m_pObj && p->m_pLayerRight == pLayer) || (p->m_pLayerLeft == pLayer && p->m_pLayerRight == m_pObj))
{
POSITION posBend = pSection->m_BendList.Find(p);
if (posBend != NULL)
{
pSection->DeleteBend(p);
}
delete p;
if (pBend != NULL)
{
delete pBend;
}
GetDoc()->Invalidate();
ReleaseCapture();
m_bLDown = FALSE;
return;
}
if (bThis && bThat)
break;
}
pBend->m_pLayerRight = (CInTrackDepthSegment*)pLayer;
pBend->m_nLithoBreakStyle = 2;
pBend->m_fLithoBreakWidth = 0.1;
pBend->m_fTopLithoBreakPoint = 0.5;
pBend->m_fBottomLithoBreakPoint = 0.5;
//// <20><><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ھ<EFBFBD>֮<EFBFBD><D6AE><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
POSITION posTemp = pSection->m_BendList.GetHeadPosition();
while (posTemp != NULL)
{
CWellBaseObj* pObj = pSection->m_BendList.GetNext(posTemp);
if (pObj->GetType() == KEP_SECTIONBEND)
{
CBendObj* pBendObj = (CBendObj*)pObj;
double topLeft, topRight;
if (pBendObj->m_pLayerRight != NULL)
{
CWellPole* pWellLeft = (CWellPole*)pBendObj->m_pLayerLeft->GetWell();
CWellPole* pWellRight = (CWellPole*)pBendObj->m_pLayerRight->GetWell();
if ((pWellLeft == pWell && pWellRight == pLeftWell) || (pWellLeft == pLeftWell && pWellRight == pWell))
{
if (pBendObj->m_pLayerRight->GetPos().left > pBendObj->m_pLayerLeft->GetPos().left)
{
topLeft = pBendObj->m_pLayerLeft->GetPos().top;
topRight = pBendObj->m_pLayerRight->GetPos().top;
}
else
{
topLeft = pBendObj->m_pLayerRight->GetPos().top;
topRight = pBendObj->m_pLayerLeft->GetPos().top;
}
BOOL bOne = topLeft > pBend->m_pLayerRight->GetPos().top&&topRight < pBend->m_pLayerLeft->GetPos().top;
BOOL bSecond = topLeft < pBend->m_pLayerRight->GetPos().top&&topRight > pBend->m_pLayerLeft->GetPos().top;
if (bOne || bSecond)
{
pBend = NULL;
delete pBend;
AfxMessageBox("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܳ<EFBFBD><EFBFBD>ֽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!");
GetDoc()->Invalidate();
ReleaseCapture();
m_bLDown = FALSE;
return;
}
}
}
}
}
/////////HFX 2014.10.22 <20><><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ھ<EFBFBD>֮<EFBFBD><D6AE><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
if (m_pObj->GetType() == KEP_RESULT)
{
CInTrackResult* pLayerLeft = (CInTrackResult*)pBend->m_pLayerLeft;
CInTrackResult* pLayerRight = (CInTrackResult*)pBend->m_pLayerRight;
if ((pLayerLeft->m_strResult != pLayerRight->m_strResult) && !(pLayerLeft->m_strResult == "<EFBFBD>ɲ<EFBFBD>" || pLayerRight->m_strResult == "<EFBFBD>ɲ<EFBFBD>"))
{
pBend->m_fWaterTop = pBend->m_fGasBottom = pLayerLeft->GetPos().CenterPoint().y0 - (pLayerLeft->GetPos().CenterPoint().y0 - pLayerRight->GetPos().CenterPoint().y0) / 2;
}
}
double valueLeft = m_pObj->GetPos().CenterPoint().y0;
double valueRight = pLayer->GetPos().CenterPoint().y0;
double HeightLeft = m_pObj->GetPos().Height();
double HeightRight = pLayer->GetPos().Height();
////<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E3B5BD><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ReBendLeftRightList(pBend);
if (m_pObj->GetType() == KEP_STANDARD)
{
pBend->SetSlotTypeStandardLayer(TRUE);
}
pSection->ComputeBendPosition(pBend, valueRight, valueLeft, HeightRight, HeightLeft);
pBend->AddControlPoints(xLeftValue, valueLeft, xRightValue, valueRight, xRightValue - xLeftValue);
dfPoint ptTemp;
ptTemp.x0 = xLeftValue;
ptTemp.y0 = valueLeft + HeightLeft * 0.5;
pBend->m_ptArrCurveTopOld.Add(ptTemp);
ptTemp.y0 = valueLeft - HeightLeft * 0.5;
pBend->m_ptArrCurveBotOld.Add(ptTemp);
ptTemp.x0 = xRightValue;
ptTemp.y0 = valueRight + HeightRight * 0.5;
pBend->m_ptArrCurveTopOld.Add(ptTemp);
ptTemp.y0 = valueRight - HeightRight * 0.5;
pBend->m_ptArrCurveBotOld.Add(ptTemp);
//<2F><><EFBFBD><EFBFBD>Bend<6E>Ķϲ<C4B6><CFB2><EFBFBD><EFBFBD><EFBFBD>
pBend->BendAddFault();
pBend->ComputeSlopeAndConstant();
pBend->CreateBendLines();
CString strLithoLeft;
CString strLithoRight;
CString strResultLeft;
CString strResultRight;
if (m_pObj->GetType() == KEP_RESULT)
{
CInTrackResult* pLayerLeft = (CInTrackResult*)pBend->m_pLayerLeft;
strLithoLeft = pLayerLeft->m_strLitho;
strResultLeft = pLayerLeft->m_strResult;
if (NULL != pBend->m_pLayerRight)
{
CInTrackResult* pLayerRight = (CInTrackResult*)pBend->m_pLayerRight;
strLithoRight = pLayerRight->m_strLitho;
strResultRight = pLayerRight->m_strResult;
}
}
else if (m_pObj->GetType() == KEP_LAYERGROUP)
{
CInTrackLayerGroup* pLayerLeft = (CInTrackLayerGroup*)pBend->m_pLayerLeft;
strLithoLeft = pLayerLeft->m_strLitho;
if (NULL != pBend->m_pLayerRight)
{
CInTrackLayerGroup* pLayerRight = (CInTrackLayerGroup*)pBend->m_pLayerRight;
strLithoRight = pLayerRight->m_strLitho;
}
}
if ((/*!strLithoLeft.IsEmpty() && !strLithoRight.IsEmpty() && */strLithoLeft != strLithoRight) ||
(/*!strResultLeft.IsEmpty() && !strResultRight.IsEmpty() && */strResultLeft != strResultRight))
{
pBend->bBreakLithoTemp = TRUE;
pBend->CreateBendLithoBreak();
}
pBend->CreateBendFills();
pBend->SetShowFill(TRUE);
pBend->SetShowTopLine(TRUE);
pBend->SetShowBotLine(TRUE);
if (pTrack->GetTrackType() == Track_Result)
{
pBend->SetSlotTypeResult(TRUE);
}
else if (pTrack->GetTrackType() == Track_Stratum)
{
pBend->SetSlotTypeStratiUnit(TRUE);
}
//else if (pTrack->GetTrackType()==Track_StandardLayer)
//{
// pBend->SetSlotTypeStandardLayer(TRUE);
//}
if (pSection->IsStratumSmooth())
{
pBend->SmoothBendLines();
}
pSection->m_BendList.AddTail(pBend);
break;
}
}
}
}
}
}
}
}
}
void CItemAddBend::MakeBendForResform(CWellSection* pSection, CWellPole * pWell ,UINT nFlags, CPoint point)
{
m_lastPoint = point;
CPoint2D ptDown = GetDC()->GetReal(m_downPoint);
CPoint2D ptLast = GetDC()->GetReal(m_lastPoint);
double yMin = min(ptDown.y0, ptLast.y0);
double yMax = max(ptDown.y0, ptLast.y0);
if (fabs(yMin - yMax) < 0.0001)
{
ReleaseCapture();
m_bLDown = FALSE;
return;
}
int nHandleSize = HANDLESIZE;
CWellPole* pLeftWell = NULL;
CWellPole* pRightWell = NULL;
if (pSection->GetType() == KEP_WELLSECTION)
{
POSITION posFind = pSection->m_WellList.Find(pWell);
pSection->m_WellList.GetNext(posFind);
if (posFind != NULL)
{
pRightWell = (CWellPole*)pSection->m_WellList.GetNext(posFind);
}
posFind = pSection->m_WellList.Find(pWell);
pSection->m_WellList.GetPrev(posFind);
if (posFind != NULL)
{
pLeftWell = (CWellPole*)pSection->m_WellList.GetPrev(posFind);
}
CBendObj *pNewBend = NULL;
CTrackObj * pDownTrack = (CTrackObj*)m_pObj->GetParent();
if (ptLast.x0 > ptDown.x0 && pRightWell != NULL &&(m_pObj->GetType() == KEP_RESULT || m_pObj->GetType() == KEP_LAYERGROUP))
{//<2F><><EFBFBD>Ҳྮ<D2B2><E0BEAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
double xleft, xright;
xleft = pWell->GetRect().right; xright = pRightWell->GetRect().left;
if (xleft < ptLast.x0 && ptLast.x0 < xright)
{//<2F><><EFBFBD><EFBFBD>
if (pSection->FindBend(m_pObj, NULL, pWell, pRightWell) == NULL)
{
pNewBend = new CBendObj();
pNewBend->SetParent(pSection);
pNewBend->m_pWellLeft = pWell;
pNewBend->m_pWellRight = pRightWell;
pNewBend->m_pLayerLeft = m_pObj;
pNewBend->m_LeftLayerName = m_pObj->GetLayerName();
//m_pObj->m_BendRightList.push_back(pNewBend);
//CWellSection::ReOrederBendList(m_pObj->m_BendRightList, 2);
CPoint2D pchpt = GetDC()->GetReal(m_lastPoint);
pNewBend->InitBendPchoutControlPoints(pchpt);
}
}
else if (ptLast.x0 > xright)
{
TRACKLIST trackList;
pRightWell->GetAllTrack(&trackList, pDownTrack->GetTrackType());//<2F><>ͬ<EFBFBD><CDAC><EFBFBD>͵ĵ<CDB5>
if (trackList.size() > 0)
{
CTrackObj *pTrack = (*trackList.begin());
WELLOBJLIST::iterator it = pTrack->GetChildren().begin();
for (; it != pTrack->GetChildren().end(); it++)
{
if ((*it)->GetType() == m_pObj->GetType())
{
CInTrackDepthSegment* pInTrack = (CInTrackDepthSegment*)*it;
CRect rect = GetDC()->GetScreen(pInTrack->GetPos());
rect.NormalizeRect();
if (rect.PtInRect(m_lastPoint))
{
if (pSection->FindBend(m_pObj, pInTrack,pWell,pRightWell) == NULL)
{
pNewBend = new CBendObj();
pNewBend->SetParent(pSection);
pNewBend->m_pWellLeft = pWell;
pNewBend->m_pWellRight = pRightWell;
pNewBend->m_pLayerLeft = m_pObj;
pNewBend->m_LeftLayerName = m_pObj->GetLayerName();
m_pObj->m_BendRightList.push_back(pNewBend);
pNewBend->m_pLayerRight = pInTrack;
pNewBend->m_RightLayerName = pInTrack->GetLayerName();
pInTrack->m_BendLeftList.push_back(pNewBend);
CWellSection::ReOrederBendList(m_pObj->m_BendRightList, 2);
CWellSection::ReOrederBendList(pInTrack->m_BendLeftList, 1);
pNewBend->InitBendControlPoints();
break;
}
}
}
}
}
}
}
else if (ptLast.x0 < ptDown.x0 && pLeftWell != NULL && (m_pObj->GetType() == KEP_RESULT || m_pObj->GetType() == KEP_LAYERGROUP))
{
double xleft, xright;
xleft = pLeftWell->GetRect().right; xright = pWell->GetRect().left;
if (xleft < ptLast.x0 && ptLast.x0 < xright)
{//<2F><><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD><EFBFBD>
if (pSection->FindBend(m_pObj, NULL, pWell, pLeftWell) == NULL)
{
pNewBend = new CBendObj();
pNewBend->SetParent(pSection);
pNewBend->m_pWellLeft = pWell;
pNewBend->m_pWellRight = pLeftWell;
pNewBend->m_pLayerLeft = m_pObj;
pNewBend->m_LeftLayerName = m_pObj->GetLayerName();
//m_pObj->m_BendRightList.push_back(pNewBend);
CPoint2D pchpt = GetDC()->GetReal(m_lastPoint);
pNewBend->InitBendPchoutControlPoints(pchpt);
}
}
else if (ptLast.x0 < xleft)
{
TRACKLIST trackList;
pLeftWell->GetAllTrack(&trackList, pDownTrack->GetTrackType());//<2F><>ͬ<EFBFBD><CDAC><EFBFBD>͵ĵ<CDB5>
if (trackList.size() > 0)
{
CTrackObj *pTrack = (*trackList.begin());
WELLOBJLIST::iterator it = pTrack->GetChildren().begin();
for (; it != pTrack->GetChildren().end(); it++)
{
if ((*it)->GetType() == m_pObj->GetType())
{
CInTrackDepthSegment* pInTrack = (CInTrackDepthSegment*)*it;
CRect rect = GetDC()->GetScreen(pInTrack->GetPos());
rect.NormalizeRect();
if (rect.PtInRect(m_lastPoint))
{
if (pSection->FindBend(pInTrack,m_pObj,pLeftWell, pWell) == NULL)
{
pNewBend = new CBendObj();
pNewBend->SetParent(pSection);
pNewBend->m_pWellLeft = pLeftWell;
pNewBend->m_pWellRight = pWell;
pNewBend->m_pLayerLeft = pInTrack;
pNewBend->m_LeftLayerName = pInTrack->GetLayerName();
pInTrack->m_BendRightList.push_back(pNewBend);
pNewBend->m_pLayerRight = m_pObj;
pNewBend->m_RightLayerName = m_pObj->GetLayerName();
m_pObj->m_BendLeftList.push_back(pNewBend);
CWellSection::ReOrederBendList(m_pObj->m_BendLeftList, 1);
CWellSection::ReOrederBendList(pInTrack->m_BendRightList, 2);
pNewBend->InitBendControlPoints();
break;
}
}
}
}
}
}
}
if (pNewBend)
{
SetReUnDoAction(FALSE, IDS_STRING_ACTION_MOVE, 2);
pNewBend->SetSlotType();
pNewBend->ComputeBend();
//pNewBend->SetResFormBendTopBotPoint();
//pNewBend->ComputeSlopeAndConstant();
//pNewBend->CreateBendLines();
//pNewBend->CreateBendFills();
pSection->m_BendList.AddTail(pNewBend);
if (pNewBend->m_pLayerRight != NULL)
{//<2F><><EFBFBD><EFBFBD>Ӱ<EFBFBD><D3B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>bend<6E><64><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>һ<EFBFBD><D2BB>
WELLOBJLIST::iterator it = pNewBend->m_pLayerLeft->m_BendRightList.begin();
for (; it != pNewBend->m_pLayerLeft->m_BendRightList.end(); it++)
{
CBendObj *pBend = (CBendObj*)(*it);
if (pBend != pNewBend)
{
//pBend->SetResFormBendTopBotPoint();
//pBend->ComputeSlopeAndConstant();
//pBend->CreateBendLines();
//pBend->CreateBendFills();
pBend->ComputeBend();
}
}
it = pNewBend->m_pLayerRight->m_BendLeftList.begin();
for (; it != pNewBend->m_pLayerRight->m_BendLeftList.end(); it++)
{
CBendObj *pBend = (CBendObj*)(*it);
if (pBend != pNewBend)
{
pBend->ComputeBend();
//pBend->SetResFormBendTopBotPoint();
//pBend->ComputeSlopeAndConstant();
//pBend->CreateBendLines();
//pBend->CreateBendFills();
}
}
}
}
}
}
void CItemAddBend::OnLButtonUp(CDC *pDC, UINT nFlags, CPoint point, int vk)
{
if(NULL == m_pItemWell)
{
return;
}
CWellPole * pWell = m_pItemWell->GetWellObject();
CWellSection* pSection = NULL;
if (pWell != NULL)
{
pSection = (CWellSection*)pWell->GetParent();
}
if(NULL == pSection)
{
return;
}
if (pSection->m_bResForm)
{
MakeBendForResform(pSection, pWell, nFlags, point);
}
else
{
MakeBendForOld(pSection, pWell, nFlags, point);
}
GetDoc()->Invalidate();
ReleaseCapture();
m_bLDown = FALSE;
}
void CItemAddBend::OnLButtonDblClk(UINT nFlags, CPoint point)
{
}
int CItemAddBend::OnMouseMove(CDC *pDC, UINT nFlags, CPoint point)
{
if(IsCaptureState() && m_bLDown)
{
OnDraw(GetDC(),pDC);
m_lastPoint = point;
OnDraw(GetDC(),pDC);
//OnSetCursor(/*GetView(),*/ 1, 512);
}
return 0;
}
BOOL CItemAddBend::OnSetCursor(CPoint pt, int& handle)
{
int nHandleSize = HANDLESIZE;
double dHandleSize = GetDC()->GetRealSize(CSize(nHandleSize / 2, nHandleSize / 2)).cx;
CPoint2D ptReal = GetDC()->GetReal(m_lastPoint);
CRect8 rectReal = CRect8(ptReal.x0, ptReal.y0, ptReal.x0 + 1, ptReal.y0 - 1);
//<2F>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
CWellPole * pWell = m_pItemWell->GetWellObject();
CWellSection* pSection = (CWellSection*)pWell->GetParent();
POSITION pos = pSection->m_WellList.GetHeadPosition();
CSectionWellObj* pWellIn = NULL;
while (pos != NULL)
{
CSectionWellObj* pSectionWell = (CSectionWellObj*)pSection->m_WellList.GetNext(pos);
if (pSectionWell->GetPos().PtInRect(ptReal) && pSectionWell != pWell)
{
pWellIn = pSectionWell;
break;
}
}
BOOL bExist = FALSE;
if (pWellIn != NULL)
{
TRACKLIST tracklist;
pWellIn->GetAllTrack(&tracklist);
if (m_pObj->GetType() == KEP_RESULT ||
m_pObj->GetType() == KEP_LAYERGROUP ||
m_pObj->GetType() == KEP_STANDARD)
{
TRACKLIST::iterator pos = tracklist.begin();
for (; pos != tracklist.end(); pos++)
{
CTrackObj* pTrack = *pos;
if ((m_pObj->GetType() == KEP_RESULT && pTrack->GetTrackType() == Track_Result) ||
(m_pObj->GetType() == KEP_LAYERGROUP && pTrack->GetTrackType() == Track_Stratum) ||
(m_pObj->GetType() == KEP_STANDARD && pTrack->GetTrackType() == Track_StandardLayer))
{
WELLOBJLIST::iterator posLayer = pTrack->GetChildren().begin();
for (; posLayer != pTrack->GetChildren().end(); posLayer++)
{
CWellBaseObj* pLayer = (CWellBaseObj*)*posLayer;
if (pLayer->GetType() == m_pObj->GetType())
{
CRect rect = GetDC()->GetScreen(pLayer->GetPos());
rect.NormalizeRect();
if (pLayer->Intersects(rectReal, dHandleSize))
{
bExist = TRUE;
}
}
}
if (bExist)
break;
}
}
}
tracklist.clear();
}
if (bExist)
handle = 14;
else
handle = 15;
return TRUE;
}
BOOL CItemAddBend::OnSetCursor(/*CWnd* pWnd,*/ UINT nHitTest, UINT message)
{
int nHandleSize= HANDLESIZE;
double dHandleSize = GetDC()->GetRealSize(CSize(nHandleSize/2, nHandleSize/2)).cx;
CPoint2D ptReal = GetDC()->GetReal(m_lastPoint);
CRect8 rectReal = CRect8(ptReal.x0,ptReal.y0,ptReal.x0+1,ptReal.y0-1);
//<2F>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
CWellPole * pWell = m_pItemWell->GetWellObject();
CWellSection* pSection = (CWellSection*)pWell->GetParent();
POSITION pos = pSection->m_WellList.GetHeadPosition();
CSectionWellObj* pWellIn = NULL;
while (pos!=NULL)
{
CSectionWellObj* pSectionWell = (CSectionWellObj*)pSection->m_WellList.GetNext(pos);
if (pSectionWell->GetPos().PtInRect(ptReal) && pSectionWell!=pWell)
{
pWellIn = pSectionWell;
break;
}
}
BOOL bExist = FALSE;
if(pWellIn!=NULL)
{
TRACKLIST tracklist;
pWellIn->GetAllTrack(&tracklist);
if (m_pObj->GetType()==KEP_RESULT||
m_pObj->GetType()==KEP_LAYERGROUP||
m_pObj->GetType()==KEP_STANDARD)
{
TRACKLIST::iterator pos = tracklist.begin();
for(; pos !=tracklist.end(); pos++)
{
CTrackObj* pTrack = *pos;
if ((m_pObj->GetType()==KEP_RESULT&&pTrack->GetTrackType()==Track_Result)||
(m_pObj->GetType()==KEP_LAYERGROUP&&pTrack->GetTrackType()==Track_Stratum)||
(m_pObj->GetType()==KEP_STANDARD&&pTrack->GetTrackType()==Track_StandardLayer))
{
WELLOBJLIST::iterator posLayer = pTrack->GetChildren().begin();
for(; posLayer != pTrack->GetChildren().end(); posLayer++)
{
CWellBaseObj* pLayer = (CWellBaseObj*)*posLayer;
if(pLayer->GetType() == m_pObj->GetType())
{
CRect rect = GetDC()->GetScreen(pLayer->GetPos());
rect.NormalizeRect();
if (pLayer->Intersects(rectReal,dHandleSize))
{
bExist = TRUE;
}
}
}
if(bExist)
break;
}
}
}
tracklist.clear();
}
if(bExist)
::SetCursor(AfxGetApp()->LoadCursor(IDC_ARROW));
else
::SetCursor(AfxGetApp()->LoadCursor(IDC_CROSS));
return TRUE;
}
//void CItemAddBend::ComputeBendPosition(CBendObj* pBend,double &valueLeft,double &valueRight,double &heightLeft,double &heightRight)
//{
// CDrawTopEndObj* pLayerLeft = pBend->m_pLayerLeft;
// CDrawTopEndObj* pLayerRight = pBend->m_pLayerRight;
// if(pBend->m_pLayerLeft->GetPos().left > pBend->m_pLayerRight->GetPos().left)
// {
// pLayerLeft = pBend->m_pLayerRight;
// pLayerRight = pBend->m_pLayerLeft;
// }
// //////////////////////////////////////////////////////////////////////////////<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>bendʱ
// if (pLayerLeft->m_BendRightList.GetCount()>1)
// {
// //<2F><><EFBFBD>в<EFBFBD><D0B2>ĸ߶Ⱥ<DFB6>
// double TotalH = 0.0;
// POSITION pos = pLayerLeft->m_BendRightList.GetHeadPosition();
// while (pos!=NULL)
// {
// CBendObj *pBend1 = (CBendObj *)pLayerLeft->m_BendRightList.GetNext(pos);
// CDrawTopEndObj* pLayer = pBend1->m_pLayerRight;
// if(pBend1->m_pLayerLeft->GetPos().left > pBend1->m_pLayerRight->GetPos().left)
// pLayer = pBend1->m_pLayerLeft;
// TotalH = TotalH+pLayer->GetPos().Height();
// }
// pos = pLayerLeft->m_BendRightList.GetHeadPosition();
// double H = 0.0;
// while(pos!=NULL)
// {
// CBendObj *pBend1 = (CBendObj *)pLayerLeft->m_BendRightList.GetNext(pos);
// CDrawTopEndObj* pLayer = pBend1->m_pLayerRight;
// if(pBend1->m_pLayerLeft->GetPos().left > pBend1->m_pLayerRight->GetPos().left)
// pLayer = pBend1->m_pLayerLeft;
// H = H+(pLayer->GetPos().Height()/TotalH)*pLayerLeft->GetPos().Height();
// if (pBend1==pBend)
// {
// valueLeft = pLayerLeft->GetPos().top-(H-(pLayer->GetPos().Height()/TotalH)*pLayerLeft->GetPos().Height())-((pLayer->GetPos().Height()/TotalH)*pLayerLeft->GetPos().Height())/2;
// heightLeft = (pLayer->GetPos().Height()/TotalH)*pLayerLeft->GetPos().Height();
// //break;
// }
// else
// {
// pBend1->ReComupteControls();
// }
// }
// }
// //////////////////////////////////////////////////////////////////////////////
// //////////////////////////////////////////////////////////////////////////////<2F>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>bendʱ
// if (pLayerRight->m_BendLeftList.GetCount()>1)
// {
// double TotalH = 0.0;
// POSITION pos = pLayerRight->m_BendLeftList.GetHeadPosition();
// while (pos!=NULL)
// {
// CBendObj *pBend1 = (CBendObj *)pLayerRight->m_BendLeftList.GetNext(pos);
// CDrawTopEndObj* pLayer = pBend1->m_pLayerLeft;
// if(pBend1->m_pLayerLeft->GetPos().left > pBend1->m_pLayerRight->GetPos().left)
// pLayer = pBend1->m_pLayerRight;
// TotalH = TotalH+pLayer->GetPos().Height();
// }
// pos = pLayerRight->m_BendLeftList.GetHeadPosition();
// double H = 0.0;
// while(pos!=NULL)
// {
// CBendObj *pBend1 = (CBendObj *)pLayerRight->m_BendLeftList.GetNext(pos);
// CDrawTopEndObj* pLayer = pBend1->m_pLayerLeft;
// if(pBend1->m_pLayerLeft->GetPos().left > pBend1->m_pLayerRight->GetPos().left)
// pLayer = pBend1->m_pLayerRight;
// H = H+(pLayer->GetPos().Height()/TotalH)*pLayerRight->GetPos().Height();
// if (pBend1==pBend)
// {
// valueRight = pLayerRight->GetPos().top-(H-(pLayer->GetPos().Height()/TotalH)*pLayerRight->GetPos().Height())-((pLayer->GetPos().Height()/TotalH)*pLayerRight->GetPos().Height())/2;
// heightRight = (pLayer->GetPos().Height()/TotalH)*pLayerRight->GetPos().Height();
// //break;
// }
// else
// {
// pBend1->ReComupteControls();
// }
// }
// }
//}
void CItemAddBend::ReBendLeftRightList(CBendObj* pBend)
{
CInTrackDepthSegment* pLayerLeft = pBend->m_pLayerLeft;
CInTrackDepthSegment* pLayerRight = pBend->m_pLayerRight;
if(pBend->m_pLayerLeft->GetPos().left > pBend->m_pLayerRight->GetPos().left)
{
pLayerLeft = pBend->m_pLayerRight;
pLayerRight = pBend->m_pLayerLeft;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>bend<6E><64><EFBFBD><EFBFBD>
WELLOBJLIST::iterator pos = pLayerLeft->m_BendRightList.begin(); // GetHeadPosition();
if (pLayerLeft->m_BendRightList.size() == 0)
{
pLayerLeft->m_BendRightList.push_back(pBend);
}
else
{
BOOL bInsert = FALSE;
for ( ; pos!= pLayerLeft->m_BendRightList.end() ; pos++)
{
WELLOBJLIST::iterator posFlag = pos;
CBendObj * p = (CBendObj *)*pos;
CInTrackDepthSegment* pLayer = p->m_pLayerRight;
if(p->m_pLayerLeft->GetPos().left > p->m_pLayerRight->GetPos().left)
pLayer = p->m_pLayerLeft;
if (pLayerRight->GetPos().top>pLayer->GetPos().top)
{
pLayerLeft->m_BendRightList.insert(posFlag,pBend);
bInsert = TRUE;
break;
}
}
if(!bInsert)
{
pLayerLeft->m_BendRightList.push_back(pBend);
}
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD><EFBFBD>bend<6E><64><EFBFBD><EFBFBD>
pos = pLayerRight->m_BendLeftList.begin();
if (pLayerRight->m_BendLeftList.size() == 0)
{
pLayerRight->m_BendLeftList.push_back(pBend);
}
else
{
BOOL bInsert = FALSE;
for (; pos != pLayerLeft->m_BendLeftList.end(); pos++)
{
WELLOBJLIST::iterator posFlag = pos;
CBendObj * p = (CBendObj *)*pos; // pLayerRight->m_BendLeftList.GetNext(pos);
CInTrackDepthSegment* pLayer = p->m_pLayerLeft;
if(p->m_pLayerLeft->GetPos().left > p->m_pLayerRight->GetPos().left)
pLayer = p->m_pLayerRight;
if (pLayerLeft->GetPos().top>pLayer->GetPos().top)
{
pLayerRight->m_BendLeftList.insert(posFlag,pBend);
bInsert = TRUE;
break;
}
}
if(!bInsert)
{
pLayerRight->m_BendLeftList.push_back(pBend);
}
}
}
int CItemAddBend::DeleteSelection(void)
{
if(this->m_WellObjSelectlist.GetCount() == 0)
return 0;
CItemWcsTrackIn itemtrackin(GetDoc());
CBendObj* pBendHead = (CBendObj*)m_WellObjSelectlist.GetHead();
CInTrackDepthSegment* pDrawTopEnd = NULL;
POSITION pos = m_WellObjSelectlist.GetTailPosition();
while(pos != NULL)
{
pDrawTopEnd = (CInTrackDepthSegment*)m_WellObjSelectlist.GetPrev(pos);
itemtrackin.SetDrawObj(pDrawTopEnd);
itemtrackin.Select(pDrawTopEnd);
}
itemtrackin.DeleteSelection();
m_WellObjSelectlist.RemoveAll();
return 1;
}
}