137 lines
3.1 KiB
C++
137 lines
3.1 KiB
C++
// OperMediumPt.cpp: implementation of the COperMediumPt class.
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
#include "geomative.h"
|
|
#include "OperMediumPt.h"
|
|
|
|
#ifdef _DEBUG
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[]=__FILE__;
|
|
#define new DEBUG_NEW
|
|
#endif
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
// Construction/Destruction
|
|
//////////////////////////////////////////////////////////////////////
|
|
extern int g_iUILanguage;
|
|
COperMediumPt::COperMediumPt(int iAR)
|
|
{
|
|
m_iAR = iAR;
|
|
m_mapDepthSort.clear();
|
|
|
|
}
|
|
|
|
COperMediumPt::~COperMediumPt()
|
|
{
|
|
m_mapDepthSort.clear();
|
|
|
|
}
|
|
|
|
bool COperMediumPt::InitiSortInfo(int iMethod)
|
|
{
|
|
if (1 == iMethod )
|
|
{
|
|
if ((m_iAR > 16 && m_iAR < 39) || AR_CROSS_HOLE_TYPE == m_iAR || AR_BIPOLE_HOLE_SPT == m_iAR)
|
|
{
|
|
if (LANG_ZHCN == g_iUILanguage)
|
|
AfxMessageBox(_T("不支持深度排序"));
|
|
else
|
|
MessageBoxEx(NULL, _T("Unsupport sort by depth medium"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
|
return false;
|
|
}
|
|
m_mapDepthSort.clear();
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
if (LANG_ZHCN == g_iUILanguage)
|
|
AfxMessageBox(_T("未知排序方法"));
|
|
else
|
|
MessageBoxEx(NULL, _T("Unknow sort method"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
|
return false;
|
|
}
|
|
|
|
}
|
|
|
|
bool COperMediumPt::AddSortPtInfo(int iA, int iB, int iM, int iN, int iLayer,int iIndex)
|
|
{
|
|
STDepthSortKey stDepSortKey;
|
|
stDepSortKey.fXPos = GetUniSptXPos(iA, iB, iM, iN);
|
|
stDepSortKey.iLayer = iLayer;
|
|
m_mapDepthSort[stDepSortKey] = iIndex;
|
|
return true;
|
|
|
|
}
|
|
|
|
float COperMediumPt::GetUniSptXPos(int iA, int iB, int iM, int iN)
|
|
{
|
|
|
|
int iMin = 100000, iMax = 0, iTotalVal = 0;
|
|
int iDataArr[4] = {iA, iB, iM, iN};
|
|
int iNegativeCnt = 0;//非正整数的个数
|
|
for (int i = 0; i < 4; i++)
|
|
{
|
|
if (iDataArr[i] > 0)
|
|
{
|
|
if (iDataArr[i] > iMax)
|
|
{
|
|
iMax = iDataArr[i];
|
|
}
|
|
if (iDataArr[i] < iMin)
|
|
{
|
|
iMin = iDataArr[i];
|
|
}
|
|
iTotalVal += iDataArr[i];
|
|
}
|
|
else
|
|
iNegativeCnt++;
|
|
}
|
|
//如果全部是正整数(四级装置),则此时iTotalVal表示的是四个数的总和,那么需要剪掉最大的和最小的
|
|
if (0 == iNegativeCnt)
|
|
return (iTotalVal-iMin-iMax)*1.0/2;
|
|
|
|
//如果此时是三级装置,那么此时只需要减掉最小值即可
|
|
if (1 == iNegativeCnt)
|
|
return (iTotalVal-iMin)*1.0/2;
|
|
|
|
//如果是二级装置,则不需进行再处理
|
|
if (2 == iNegativeCnt)
|
|
return iTotalVal*1.0/2;
|
|
|
|
CString strErr;
|
|
if (LANG_ZHCN == g_iUILanguage)
|
|
{
|
|
strErr.Format(_T("GetUniSptXPos错误,负数为%d"), iNegativeCnt);
|
|
AfxMessageBox(strErr);
|
|
}
|
|
else
|
|
{
|
|
strErr.Format(_T("GetUniSptXPos error,number of negative is %d"), iNegativeCnt);
|
|
MessageBoxEx(NULL, strErr, STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
|
}
|
|
|
|
return -1;
|
|
}
|
|
|
|
int COperMediumPt::GetFirstSortID(int iMethod)
|
|
{
|
|
m_iterSortDepth = m_mapDepthSort.begin();
|
|
if (m_iterSortDepth == m_mapDepthSort.end())
|
|
{
|
|
return -1;
|
|
}
|
|
return m_iterSortDepth->second;
|
|
|
|
}
|
|
|
|
int COperMediumPt::GetNextSortID()
|
|
{
|
|
m_iterSortDepth++;
|
|
if (m_iterSortDepth == m_mapDepthSort.end())
|
|
{
|
|
return -1;
|
|
}
|
|
return m_iterSortDepth->second;
|
|
|
|
} |