Files
geomative/GeomativeStudio/cpp/Operator/OperMediumPt.cpp
T
coco df489d5640 a
2026-07-03 16:05:30 +08:00

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;
}