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.

987 lines
25 KiB
C++

1 month ago
#include "stdafx.h"
#include <cctype>
#include <set>
//#include "WellPoleDoc.h"
//#include "WellPoleView.h"
#include "WellPoleLib/WellBaseObj.h"
#include "WellPoleLib/InTrackDepthSegment.h"
#include "WellPoleLib/TrackObj.h"
#include "WellPoleLib/InclinedTrack.h"
#include "WellPoleLib/InTrackLith.h"
#include "WellPoleLib/InTrackSymbol.h"
#include "WellPoleLib/InTrackResult.h"
#include "WellPoleLib/InTrackTextRange.h"
#include "WellPoleLib/TrackGroup.h"
#include "WellPoleLib/WellPole.h"
#include "WellPoleLib/TrackDepth.h"
#include "WellPoleLib/TrackCurve.h"
#include "WellPoleLib/TrackSymbol.h"
#include "WellPoleLib/TrackResult.h"
#include "WellPoleLib/TrackLith.h"
#include "WellPoleLib/TrackText.h"
#include "WellPoleLib/WellObjExtendInfo.h"
#include "WellPoleLib/WellMarkNamesList.h"
#include "WellPoleLib/WellPole.h"
#include "ItemSingleWell.h"
#include "WellPoleLib/Data/WellData_FaultPoints.h"
#include "WellPoleLib/Data/WellData_ReservesLayer.h"
#include "WellPoleLib/Data/WellData_SandSet.h"
#include "CPlusCallBack.h"
#include "WellObjectAttributesJson.h"
#include "WellObjectAttributesXml.h"
#include "DrawOperator/Encoding.h"
#include "MultiWellSectionLib/SectionWellObj.h"
#include "MultiWellSectionLib/BendObj.h"
#include "MultiWellSectionLib/FaultObj.h"
#include "MultiWellSectionLib/WellSection.h"
#include "./WellSection/ItemWcsTrack.h"
#include "./WellSection/ItemSectionWell.h"
#include "./WellSection/ItemAddFault.h"
#include "./WellSection/ItemBend.h"
#include "./WellSection/ItemFault.h"
#include "./WellSection/MultiWellSectionDoc.h"
#include "./WellSection/MultiWellSectionlView.h"
extern "C" __declspec(dllexport)
CMultiWellSectionView* CreateWellSectionView()
{
CMultiWellSectionView* pWellSectionView = new CMultiWellSectionView();
return pWellSectionView;
}
extern "C" __declspec(dllexport)
BOOL SetBendsSmooth(CMultiWellSectionView * pView)
{
return pView->OnSetBendSmooth();
}
extern "C" __declspec(dllexport)
BOOL IsSelectedWellSection(CMultiWellSectionView * pView)
{
CMultiWellSectionDoc* pDoc = pView->GetDocument();
CItem *pItem = pDoc->GetItem();
if (NULL == pItem)
return FALSE;
BOOL b = FALSE;
if (pItem->GetType() == ITEM_WELLSECTION)
b = TRUE;
return b;
}
extern "C" __declspec(dllexport)
BOOL IsWellSectionBendsSmooth(CMultiWellSectionView * pView)
{
CMultiWellSectionDoc* pDoc = pView->GetDocument();
CItem *pItem = pDoc->GetItem();
if (NULL == pItem)
return FALSE;
BOOL b = FALSE;
if (pItem->GetType() == ITEM_WELLSECTION)
{
CItemWellSection* pItemWellSection = (CItemWellSection*)pItem;
CWellSection* pSection = pItemWellSection->GetWellSection();
b = pSection->IsStratumSmooth();
}
return b;
}
extern "C" __declspec(dllexport)
int WellSectionFlatternStyle(CMultiWellSectionView * pView)
{
int rt = 0;
CMultiWellSectionDoc* pDoc = pView->GetDocument();
CItem *pItem = pDoc->GetItem();
if (NULL == pItem)
return rt;
if (pItem->GetType() == ITEM_WELLSECTION)
{
CItemWellSection* pItemWellSection = (CItemWellSection*)pItem;
CWellSection* pSection = pItemWellSection->GetWellSection();
rt = pSection->m_nLayerFlatten;
}
return rt;
}
extern "C" __declspec(dllexport)
BOOL SetWellSectionFlatternStyle(CMultiWellSectionView * pView , int style)
{//<2F><><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD>ʽ 0<><30><EFBFBD><EFBFBD>λ<EFBFBD>ã<EFBFBD>1<EFBFBD><EFBFBD><E3B6A5>ƽ<EFBFBD><C6BD>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ,3<><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD>4<EFBFBD><34><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ
BOOL b = FALSE;
CMultiWellSectionDoc* pDoc = pView->GetDocument();
CItem *pItem = pDoc->GetItem();
if (NULL == pItem)
return FALSE;
if (pItem->GetType() == ITEM_WELLSECTION)
{
CItemWellSection* pItemWellSection = (CItemWellSection*)pItem;
if (NULL != pItemWellSection)
pItemWellSection->SetReUnDoAction();
CWellSection* pSection = (CWellSection*)pItemWellSection->GetWellSection();
if (style == 1)
{
pSection->m_nLayerFlatten = style;
double topValue = 0.0;
POSITION pos = pItemWellSection->m_WellObjSelectlist.GetHeadPosition();
while (pos != NULL)
{
CWellBaseObj* pObj = pItemWellSection->m_WellObjSelectlist.GetNext(pos);
if (pObj->GetType() == KEP_SECTIONBEND)
{
CBendObj* pBend = (CBendObj*)pObj;
pSection->FlatLayer(pBend, FALSE);
}
}
pSection->SetRealLevel(TRUE);
b = TRUE;
}
else if (style == 2)
{
pSection->m_nLayerFlatten = style;
POSITION pos = pItemWellSection->m_WellObjSelectlist.GetHeadPosition();
while (pos != NULL)
{
CWellBaseObj* pObj = pItemWellSection->m_WellObjSelectlist.GetNext(pos);
if (pObj->GetType() == KEP_SECTIONBEND)
{
CBendObj* pBend = (CBendObj*)pObj;
pSection->FlatLayer(pBend, TRUE);
}
}
pSection->SetRealLevel(TRUE);
b = TRUE;
}
else if (style == 3)
{
CWellSection* pSection = (CWellSection*)pItemWellSection->GetWellSection();
pSection->m_nLayerFlatten = style;
pSection->FlatWell(TRUE);
pSection->SetRealLevel(TRUE);
b = TRUE;
}
else if (style == 4)
{
CWellSection* pSection = (CWellSection*)pItemWellSection->GetWellSection();
pSection->m_nLayerFlatten = style;
pSection->FlatWell(FALSE);
pSection->SetRealLevel(TRUE);
b = TRUE;
}
else if (style == 0)
{
CWellSection* pSection = (CWellSection*)pItemWellSection->GetWellSection();
pSection->m_nLayerFlatten = style;
pSection->FlatRealPosition();
pSection->SetRealLevel(FALSE);
b = TRUE;
}
}
return b;
}
extern "C" __declspec(dllexport)
int SectionWellShowStyle(CMultiWellSectionView * pView)
{ // 1 =<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ <20><>2= <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ , 3= <20>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>ʽ
int rt = 0;
CMultiWellSectionDoc* pDoc = pView->GetDocument();
CItem *pItem = pDoc->GetItem();
if (NULL == pItem)
return rt;
if (pItem->GetType() == ITEM_WELLSECTION)
{
CItemWellSection* pItemWellSection = (CItemWellSection*)pItem;
CWellSection* pSection = pItemWellSection->GetWellSection();
if (pSection->GetFeature()->IsWellStyleComplete())
rt = 2;
else if (pSection->GetFeature()->IsWellStyleDividLine())
rt = 3;
else if (pSection->GetFeature()->IsWellStyleSimple())
rt = 1;
}
return rt;
}
extern "C" __declspec(dllexport)
BOOL SetSectionWellShowStyle(CMultiWellSectionView * pView, int style)
{ // 1 =<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ <20><>2= <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ , 3= <20>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>ʽ
BOOL b = FALSE;
CMultiWellSectionDoc* pDoc = pView->GetDocument();
CItem *pItem = pDoc->GetItem();
if (NULL == pItem)
return FALSE;
if (pItem->GetType() == ITEM_WELLSECTION)
{
CItemWellSection* pItemWellSection = (CItemWellSection*)pItem;
if (NULL != pItemWellSection)
pItemWellSection->SetReUnDoAction();
CWellSection* pSection = (CWellSection*)pItemWellSection->GetWellSection();
if (style == 1)
{
CWellSection* pSection = (CWellSection*)pItemWellSection->GetWellSection();
pSection->GetFeature()->SetWellStyleSimple(TRUE);
b = TRUE;
}
else if (style == 2)
{
CWellSection* pSection = (CWellSection*)pItemWellSection->GetWellSection();
pSection->GetFeature()->SetWellStyleComplete(TRUE);
b = TRUE;
}
else if (style == 3)
{
CWellSection* pSection = (CWellSection*)pItemWellSection->GetWellSection();
pSection->GetFeature()->SetWellStyleDividLine(TRUE);
b = TRUE;
}
}
return b;
}
extern "C" __declspec(dllexport)
BOOL WellSectionConnectAllLayers(CMultiWellSectionView * pView)
{
BOOL b = FALSE;
CMultiWellSectionDoc* pDoc = pView->GetDocument();
CItem *pItem = pDoc->GetItem();
if (NULL == pItem)
return FALSE;
if (pItem->GetType() == ITEM_WELLSECTION)
{
CItemWellSection* pItemWellSection = (CItemWellSection*)pItem;
if (NULL != pItemWellSection)
pItemWellSection->SetReUnDoAction();
CWellSection* pSection = (CWellSection*)pItemWellSection->GetWellSection();
pItemWellSection->CreateLayers();
}
return b;
}
extern "C" __declspec(dllexport)
BOOL WellSectionBreakAllBends(CMultiWellSectionView * pView)
{
BOOL b = FALSE;
CMultiWellSectionDoc* pDoc = pView->GetDocument();
CItem *pItem = pDoc->GetItem();
if (NULL == pItem)
return FALSE;
if (pItem->GetType() == ITEM_WELLSECTION)
{
CItemWellSection* pItemWellSection = (CItemWellSection*)pItem;
if (NULL != pItemWellSection)
pItemWellSection->SetReUnDoAction();
CWellSection* pSection = (CWellSection*)pItemWellSection->GetWellSection();
pItemWellSection->BreakLayers();
}
return b;
}
extern "C" __declspec(dllexport)
int WellSectionBendLinkStyle(CMultiWellSectionView * pView)
{ //=1 <20><><EFBFBD><EFBFBD><EFBFBD>⣬ =2 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 3= <20>ز<EFBFBD><D8B2><EFBFBD> <20><>4=С<><D0A1><EFBFBD><EFBFBD>
int rt = 0;
CMultiWellSectionDoc* pDoc = pView->GetDocument();
CItem *pItem = pDoc->GetItem();
if (NULL == pItem)
return FALSE;
if (pItem->GetType() == ITEM_WELLSECTION)
{
CItemWellSection* pItemWellSection = (CItemWellSection*)pItem;
CWellSection* pSection = (CWellSection*)pItemWellSection->GetWellSection();
if (pSection->GetFeature()->IsWellLinkOut())
rt = 1;
else if (pSection->GetFeature()->IsWellLinkCenter())
rt = 2;
else if (pSection->GetFeature()->IsWellLinkStratiBounds())
rt = 3;
else if (pSection->GetFeature()->IsWellLinkLayerBounds())
rt = 4;
}
return rt;
}
extern "C" __declspec(dllexport)
BOOL SetWellSectionBendLinkStyle(CMultiWellSectionView * pView, int style)
{ //=1 <20><><EFBFBD><EFBFBD><EFBFBD>⣬ =2 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 3= <20>ز<EFBFBD><D8B2><EFBFBD> <20><>4=С<><D0A1><EFBFBD><EFBFBD>
BOOL b = FALSE;
CMultiWellSectionDoc* pDoc = pView->GetDocument();
CItem *pItem = pDoc->GetItem();
if (NULL == pItem)
return FALSE;
if (pItem->GetType() == ITEM_WELLSECTION)
{
CItemWellSection* pItemWellSection = (CItemWellSection*)pItem;
if (style == 1)
{
pView->OnLinkStyleOut();
b = TRUE;
}
else if (style == 2)
{
pView->OnLinkStyleCenter();
b = TRUE;
}
else if (style == 3)
{
pView->OnLinkStyleStratumBound();
b = TRUE;
}
else if (style == 4)
{
pView->OnLinkStyleResultBound();
b = TRUE;
}
}
return b;
}
extern "C" __declspec(dllexport)
int WellSectionBendLeftExtendStyle(CMultiWellSectionView * pView)
{//=1 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> =2ˮƽ<CBAE><C6BD><EFBFBD>죬3=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int rt = 0;
CMultiWellSectionDoc* pDoc = pView->GetDocument();
CItem *pItem = pDoc->GetItem();
if (NULL == pItem)
return FALSE;
if (pItem->GetType() == ITEM_WELLSECTION)
{
CItemWellSection* pItemWellSection = (CItemWellSection*)pItem;
CWellSection* pSection = (CWellSection*)pItemWellSection->GetWellSection();
if (!pSection->GetFeature()->IsBendExtendLeftLevel() && !pSection->GetFeature()->IsBendExtendLeftTrend())
rt = 1;
else if (pSection->GetFeature()->IsBendExtendLeftLevel())
rt = 2;
else if (pSection->GetFeature()->IsBendExtendLeftTrend())
rt = 3;
}
return rt;
}
extern "C" __declspec(dllexport)
BOOL SetWellSectionBendLeftExtendStyle(CMultiWellSectionView * pView, int style)
{
BOOL b = FALSE;
CMultiWellSectionDoc* pDoc = pView->GetDocument();
CItem *pItem = pDoc->GetItem();
if (NULL == pItem)
return FALSE;
if (pItem->GetType() == ITEM_WELLSECTION)
{
CItemWellSection* pItemWellSection = (CItemWellSection*)pItem;
CWellSection* pSection = (CWellSection*)pItemWellSection->GetWellSection();
if (style == 1)
{
if (NULL != pItemWellSection)
pItemWellSection->SetReUnDoAction(FALSE, IDS_STRING_ACTION_MOVE, 2);
pSection->GetFeature()->SetBendExtendLeftLevel(FALSE);
pSection->GetFeature()->SetBendExtendLeftTrend(FALSE);
b = TRUE;
}
else if (style == 2)
{
if (NULL != pItemWellSection)
pItemWellSection->SetReUnDoAction(FALSE, IDS_STRING_ACTION_MOVE, 2);
pSection->GetFeature()->SetBendExtendLeftLevel(TRUE);
b = TRUE;
}
else if (style == 3)
{
if (NULL != pItemWellSection)
pItemWellSection->SetReUnDoAction(FALSE, IDS_STRING_ACTION_MOVE, 2);
pSection->GetFeature()->SetBendExtendLeftTrend(TRUE);
b = TRUE;
}
if (b)
{
CWellPole* pWell = (CWellPole*)pSection->m_WellList.GetHead();
POSITION pos = pSection->m_BendList.GetHeadPosition();
while (pos)
{
CBendObj* pBend = (CBendObj*)pSection->m_BendList.GetNext(pos);
if (pBend->m_pWellLeft == pWell || pBend->m_pWellRight == pWell)
{
pBend->CreateBendLines();
pBend->CreateBendFills();
}
}
}
}
return b;
}
extern "C" __declspec(dllexport)
int WellSectionBendRightExtendStyle(CMultiWellSectionView * pView)
{//=1 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> =2ˮƽ<CBAE><C6BD><EFBFBD>죬3=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int rt = 0;
CMultiWellSectionDoc* pDoc = pView->GetDocument();
CItem *pItem = pDoc->GetItem();
if (NULL == pItem)
return FALSE;
if (pItem->GetType() == ITEM_WELLSECTION)
{
CItemWellSection* pItemWellSection = (CItemWellSection*)pItem;
CWellSection* pSection = (CWellSection*)pItemWellSection->GetWellSection();
if (!pSection->GetFeature()->IsBendExtendRightLevel() && !pSection->GetFeature()->IsBendExtendRightTrend())
rt = 1;
else if (pSection->GetFeature()->IsBendExtendRightLevel())
rt = 2;
else if (pSection->GetFeature()->IsBendExtendRightTrend())
rt = 3;
}
return rt;
}
extern "C" __declspec(dllexport)
BOOL SetWellSectionBendRightExtendStyle(CMultiWellSectionView * pView, int style)
{
BOOL b = FALSE;
CMultiWellSectionDoc* pDoc = pView->GetDocument();
CItem *pItem = pDoc->GetItem();
if (NULL == pItem)
return FALSE;
if (pItem->GetType() == ITEM_WELLSECTION)
{
CItemWellSection* pItemWellSection = (CItemWellSection*)pItem;
CWellSection* pSection = (CWellSection*)pItemWellSection->GetWellSection();
if (style == 1)
{
if (NULL != pItemWellSection)
pItemWellSection->SetReUnDoAction(FALSE, IDS_STRING_ACTION_MOVE, 2);
pSection->GetFeature()->SetBendExtendRightLevel(FALSE);
pSection->GetFeature()->SetBendExtendRightTrend(FALSE);
b = TRUE;
}
else if (style == 2)
{
if (NULL != pItemWellSection)
pItemWellSection->SetReUnDoAction(FALSE, IDS_STRING_ACTION_MOVE, 2);
pSection->GetFeature()->SetBendExtendRightLevel(TRUE);
b = TRUE;
}
else if (style == 3)
{
if (NULL != pItemWellSection)
pItemWellSection->SetReUnDoAction(FALSE, IDS_STRING_ACTION_MOVE, 2);
pSection->GetFeature()->SetBendExtendRightTrend(TRUE);
b = TRUE;
}
if (b)
{
CWellPole* pWell = (CWellPole*)pSection->m_WellList.GetTail();
POSITION pos = pSection->m_BendList.GetHeadPosition();
while (pos)
{
CBendObj* pBend = (CBendObj*)pSection->m_BendList.GetNext(pos);
if (pBend->m_pWellLeft == pWell || pBend->m_pWellRight == pWell)
{
pBend->CreateBendLines();
pBend->CreateBendFills();
}
}
}
}
return b;
}
extern "C" __declspec(dllexport)
BOOL SetWellSectionDrawAddFaultItem(CMultiWellSectionView * pView)
{
BOOL b = FALSE;
CMultiWellSectionDoc* pDoc = pView->GetDocument();
CItem *pItem = pDoc->GetItem();
if (NULL == pItem)
return b;
if (pItem->GetType() == ITEM_WELLSECTION)
{
BOOL bFind = FALSE;
CItemWellSection* pItemWellSection = (CItemWellSection*)pItem;
if (pItemWellSection->GetItem() != NULL)
{
if (pItemWellSection->GetItem()->GetType() == ITEM_ADDFAULT)
{
bFind = TRUE;
}
}
if (!bFind)
{
CItemAddFault* pItemFault = new CItemAddFault(pDoc);
if (NULL != pItemWellSection)
{
pItemWellSection->SetReUnDoAction(FALSE, IDS_STRING_ACTION_MOVE, 2);
}
pItemFault->SetItemSection(pItem);
pItemWellSection->SetItem(pItemFault);
pItemWellSection->SetState(TRUE);
b = TRUE;
}
else
{
pItemWellSection->SetItem(NULL);
}
}
return b;
}
extern "C" __declspec(dllexport)
BOOL WellSectionAddDepthRuler(CMultiWellSectionView * pView)
{
return pView->OnAddRuler();
}
extern "C" __declspec(dllexport)
BOOL WellSectionIsAddBendLayerPoint(CMultiWellSectionView * pView)
{
CMultiWellSectionDoc* pDoc = pView->GetDocument();
CItem *pItem = pDoc->GetItem();
if (NULL == pItem)
return FALSE;
if (pItem->GetType() == ITEM_WELLSECTION)
{
CItemWellSection* pItemSection = (CItemWellSection*)pItem;
return pItemSection->IsAddBendLayerPoint();
}
else
return FALSE;
}
extern "C" __declspec(dllexport)
BOOL WellSectionAddBendLayerPoint(CMultiWellSectionView* pView)
{
return pView->OnAddBendLayerPoint();
}
extern "C" __declspec(dllexport)
BOOL WellSectionDeleteBendLayerPoint(CMultiWellSectionView* pView)
{
return pView->OnDeleteLayerPoint();
}
extern "C" __declspec(dllexport)
BOOL WellSectionIsAddFaultPoint(CMultiWellSectionView * pView)
{
CMultiWellSectionDoc* pDoc = pView->GetDocument();
CItem *pItem = pDoc->GetItem();
if (NULL == pItem)
return FALSE;
if (pItem->GetType() == ITEM_WELLSECTION)
{
CItemWellSection* pItemSection = (CItemWellSection*)pItem;
return pItemSection->IsAddFaultPoint();
}
else
return FALSE;
}
extern "C" __declspec(dllexport)
BOOL WellSectionAddFaultPoint(CMultiWellSectionView* pView)
{
return pView->OnAddFaultPoint();
}
extern "C" __declspec(dllexport)
BOOL WellSectionDeleteFaultPoint(CMultiWellSectionView* pView)
{
return pView->OnDeleteFaultPoint();
}
extern "C" __declspec(dllexport)
BOOL WellSectionBreakLeftBend(CMultiWellSectionView* pView)
{
return pView->OnBreakLeftBend();
}
extern "C" __declspec(dllexport)
BOOL WellSectionBreakRightBend(CMultiWellSectionView* pView)
{
return pView->OnBreakRightBend();
}
extern "C" __declspec(dllexport)
BOOL WellSectionConnectLeftLayer(CMultiWellSectionView* pView)
{
return pView->OnNameConnectLeft();
}
extern "C" __declspec(dllexport)
BOOL WellSectionConnectRightLayer(CMultiWellSectionView* pView)
{
return pView->OnNameConnectRight();
}
extern "C" __declspec(dllexport)
BOOL WellSectionConnectLeftRightLayer(CMultiWellSectionView* pView)
{
return pView->OnNameConnectAll();
}
extern "C" __declspec(dllexport)
CWellSection* CreateWellSection(CMultiWellSectionView* pView, LPCTSTR title, double depthScale, double levelScale, double horizonScale)
{
return pView->GetDocument()->CreateNewWellSection(title,depthScale,levelScale,horizonScale);
}
extern "C" __declspec(dllexport)
BOOL WellSectionAddNewWell(CMultiWellSectionView* pView, LPCSTR wellName, double depthScale, double top, double bottom,double x,double y,double bushingLevel, LPCTSTR wellTemplateFile ,ULONGLONG & wellHandle)
{
BOOL b = FALSE;
CWellPole* pWell = pView->GetDocument()->AddNewWell(wellName, depthScale, top, bottom,x,y,bushingLevel, wellTemplateFile);
if (pWell)
{
wellHandle = (ULONGLONG)(pWell);
b = TRUE;
}
return b;
}
extern "C" __declspec(dllexport)
BOOL WellSectionReSetAllWellsPosition(CMultiWellSectionView* pView, BOOL bNeedComputedDepth,double topExtent,double bottomExtent)
{
BOOL b = TRUE;
pView->GetDocument()->WellSectionReSetAllWellsPosition(bNeedComputedDepth,topExtent,bottomExtent);
return b;
}
extern "C" __declspec(dllexport)
BOOL WellSectionConnectLayers(CMultiWellSectionView* pView, LPCSTR layersTrackStrBuf)
{
BOOL b = TRUE;
CString str = layersTrackStrBuf;
CStringArray strTrackTypeArr;
nsWellPoleFunc::MakeStrToArr1(str, strTrackTypeArr, ";");
pView->GetDocument()->WellSectionConnectLayers(strTrackTypeArr);
return b;
}
extern "C" __declspec(dllexport)
BOOL SetWellSectionStratificationJson(CWellSection* pSection, LPCSTR str)
{
BOOL b = FALSE;
CString strJson = str;
b = pSection->SetWellStratification(strJson);
CWellPole* pWell = NULL;
POSITION pos = pSection->m_WellList.GetHeadPosition();
while (pos)
{
pWell = (CWellPole*)pSection->m_WellList.GetNext(pos);
pWell->m_WellStratiTree = pSection->m_WellStratiTree;
}
return b;
}
extern "C" __declspec(dllexport)
BOOL SetWellSectionStratumDivisionJson(CWellSection* pSection, LPCSTR str)
{
BOOL b = FALSE;
CString strJson = str;
b = pSection->SetStratumDivision(strJson);
CWellPole* pWell = NULL;
POSITION pos = pSection->m_WellList.GetHeadPosition();
while (pos)
{
pWell = (CWellPole*)pSection->m_WellList.GetNext(pos);
pWell->m_StratumDivisionTree = pSection->m_StratumDivisionTree;
}
return b;
}
extern "C" __declspec(dllexport)
BOOL WellSectionApplyingTemplateFileForWell(CMultiWellSectionView* pView, LPCSTR filePath, ULONGLONG wellHandle)
{
BOOL b = FALSE;
b = pView->ApplyingTemplateFileForWell(filePath, wellHandle);
return b;
}
extern "C" __declspec(dllexport)
BOOL WellSectionApplyingTemplateFileForSection(CMultiWellSectionView* pView, LPCSTR filePath)
{
BOOL b = FALSE;
b = pView->ApplyingTemplateFileForSection(filePath);
return b;
}
extern "C" __declspec(dllexport)
BOOL WellSectionApplyingWellTemplateForSection(CMultiWellSectionView* pView, ULONGLONG wellHandle)
{
BOOL b = FALSE;
b = pView->ApplyingWellTemplateForSection(wellHandle);
return b;
}
extern "C" __declspec(dllexport)
BOOL WellSectionGetLinkTracksTypes(ULONGLONG sectionHandle,BYTE*& strTracks, int& dataLen)
{
BOOL b = FALSE;
strTracks = NULL;
dataLen = 0;
CWellSection* pSection = (CWellSection*)sectionHandle;
CString strTotal;
std::set<CString> tracksTypesSet;
CWellObjExtendInfo typeInfo;
POSITION pos = pSection->m_BendList.GetHeadPosition();
while (pos)
{
CBendObj* pBend = (CBendObj*)pSection->m_BendList.GetNext(pos);
if (pBend->m_pLayerLeft != NULL)
{
CTrackObj* pTrack = (CTrackObj*)pBend->m_pLayerLeft->GetParent();
int type = pTrack->GetTrackType();
CWellObjExtendInfoMgr::GetInstance()->GetTypeInfo(type, typeInfo);
tracksTypesSet.insert(typeInfo.m_cTypeStr);
}
if (pBend->m_pLayerRight != NULL)
{
CTrackObj* pTrack = (CTrackObj*)pBend->m_pLayerRight->GetParent();
int type = pTrack->GetTrackType();
CWellObjExtendInfoMgr::GetInstance()->GetTypeInfo(type, typeInfo);
tracksTypesSet.insert(typeInfo.m_cTypeStr);
}
}
std::set<CString>::iterator it = tracksTypesSet.begin();
for (; it != tracksTypesSet.end(); it++)
{
strTotal =strTotal+ "|"+ (*it);
}
strTotal.TrimLeft("|");
strTracks = (new BYTE[strTotal.GetLength()]);
memcpy((char*)strTracks, strTotal.GetBuffer(), strTotal.GetLength());
dataLen = strTotal.GetLength();
b = TRUE;
return b;
}
extern "C" __declspec(dllexport)
BOOL WellSectionBreakBends(CMultiWellSectionView* pView,ULONGLONG sectionHandle, LPCSTR strTrackTypes)
{
BOOL b = FALSE;
CMultiWellSectionDoc* pDoc = pView->GetDocument();
CItem* pItem = pDoc->GetItem();
if (NULL == pItem)
return FALSE;
if (pItem->GetType() == ITEM_WELLSECTION)
{
CItemWellSection* pItemWellSection = (CItemWellSection*)pItem;
CWellSection* pSection = (CWellSection*)sectionHandle;
CString str = strTrackTypes;
CStringArray strArr;
nsWellPoleFunc::MakeStrToArr1(str, strArr, "|");
std::set<int>typeSets;
std::vector<CWellObjExtendInfo*> infos = CWellObjExtendInfoMgr::GetInstance()->GetWellTrackInfos();
for (int i = 0; i < strArr.GetSize(); i++)
{
for (int k = 0; k < infos.size(); k++)
{
if (strArr[i] == infos[k]->m_cTypeStr && infos[k]->m_mtype == KEP_TRACK)
{
typeSets.insert(infos[k]->m_type);
break;
}
}
}
if (typeSets.size() > 0)
{
if (NULL != pItemWellSection)
pItemWellSection->SetReUnDoAction();
POSITION pos = pSection->m_BendList.GetHeadPosition();
while (pos)
{
CBendObj* pBend = (CBendObj*)pSection->m_BendList.GetNext(pos);
if (pBend->m_pLayerLeft != NULL)
{
CTrackObj* pTrack = (CTrackObj*)pBend->m_pLayerLeft->GetParent();
int type = pTrack->GetTrackType();
if (typeSets.find(type) != typeSets.end())
{
pSection->DeleteBend(pBend);
}
}
}
}
}
b = TRUE;
return b;
}
extern "C" __declspec(dllexport)
BOOL WellSectionGetWellStratumTracksTypes(ULONGLONG sectionHandle, BYTE*& strTracks, int& dataLen)
{
BOOL b = FALSE;
strTracks = NULL;
dataLen = 0;
CWellSection* pSection = (CWellSection*)sectionHandle;
CString strTotal;
std::set<CString> tracksTypesSet;
CWellObjExtendInfo typeInfo;
POSITION pos = pSection->m_WellList.GetHeadPosition();
while (pos)
{
CWellPole* pWell = (CWellPole*)pSection->m_WellList.GetNext(pos);
TRACKLIST trackList;
pWell->GetAllTrack(&trackList);
TRACKLIST::iterator it = trackList.begin();
for (; it != trackList.end(); it++)
{
int type = (*it)->GetTrackType();
if (type == Track_Result || type == Track_Stratum || type == Track_SandLayer || type == Track_OilLayerGroup)
{
CWellObjExtendInfoMgr::GetInstance()->GetTypeInfo(type, typeInfo);
tracksTypesSet.insert(typeInfo.m_cTypeStr);
}
}
}
std::set<CString>::iterator it = tracksTypesSet.begin();
for (; it != tracksTypesSet.end(); it++)
{
strTotal = strTotal + "|" + (*it);
}
strTotal.TrimLeft("|");
strTracks = (new BYTE[strTotal.GetLength()]);
memcpy((char*)strTracks, strTotal.GetBuffer(), strTotal.GetLength());
dataLen = strTotal.GetLength();
b = TRUE;
return b;
}
extern "C" __declspec(dllexport)
BOOL WellSectionSetWellRealDistance(CMultiWellSectionView* pView)
{
BOOL b = FALSE;
CMultiWellSectionDoc* pDoc = pView->GetDocument();
CItem* pItem = pDoc->GetItem();
if (NULL == pItem)
return FALSE;
if (pItem->GetType() == ITEM_WELLSECTION)
{
CItemWellSection* pItemWellSection = (CItemWellSection*)pItem;
pItemWellSection->SetReUnDoAction();
CWellSection* pSection = pItemWellSection->GetWellSection();
pSection->ReSetWellRealDistance(FALSE);
b = TRUE;
}
return b;
}
extern "C" __declspec(dllexport)
BOOL WellSectionGetTotalWellsDistance(ULONGLONG sectionHandle, int& wellNums, double* totalDistance)
{
BOOL b = TRUE;
CWellSection* pSection = (CWellSection*)sectionHandle;
wellNums = pSection->m_WellList.GetCount();
*totalDistance = 0;
BOOL bFirst = TRUE;
double fX, fY, fDistance;
POSITION pos = pSection->m_WellList.GetHeadPosition();
while (pos)
{
CSectionWellObj* pWellSectionObj = (CSectionWellObj*)pSection->m_WellList.GetNext(pos);
pWellSectionObj->m_tOldPos = pWellSectionObj->GetRect();
if (bFirst)
{
bFirst = FALSE;
}
else
{
fDistance = sqrt((fX - pWellSectionObj->m_fX)*(fX - pWellSectionObj->m_fX) + (fY - pWellSectionObj->m_fY)*(fY - pWellSectionObj->m_fY));
(*totalDistance) += fDistance;
}
fX = pWellSectionObj->m_fX;
fY = pWellSectionObj->m_fY;
}
return b;
}
extern "C" __declspec(dllexport)
BOOL WellSectionSetWellsDistance(ULONGLONG sectionHandle, double distance)
{
BOOL b = TRUE;
CWellSection* pSection = (CWellSection*)sectionHandle;
pSection->ReSetWellRealDistance(TRUE, distance);
return b;
}
extern "C" __declspec(dllexport)
BOOL WellSectionAddWellsMap(CMultiWellSectionView* pView, LPCTSTR symbolPath)
{
return pView->OnWellsMap(symbolPath);
}