a
This commit is contained in:
@@ -0,0 +1,181 @@
|
||||
// MediumEdgeGradient.cpp: implementation of the CMediumEdgeGradient class.
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "geomative.h"
|
||||
#include "MediumEdgeGradient.h"
|
||||
|
||||
#ifdef _DEBUG
|
||||
#undef THIS_FILE
|
||||
static char THIS_FILE[]=__FILE__;
|
||||
#define new DEBUG_NEW
|
||||
#endif
|
||||
extern int g_iUILanguage;
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Construction/Destruction
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
CMediumEdgeGradient::CMediumEdgeGradient(int iAR): CMedium(iAR)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
CMediumEdgeGradient::~CMediumEdgeGradient()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
bool CMediumEdgeGradient::GenerateSptRecElecVal(int iEAmount, int* pMaxLevel, int* pPtAmount, CPtrArray* pSptRecArray)
|
||||
{
|
||||
if (iEAmount < 4)
|
||||
{
|
||||
if (LANG_ZHCN == g_iUILanguage)
|
||||
AfxMessageBox(_T("Edge Gradient中EA_MOUNT的个数是错误的!"));
|
||||
else
|
||||
MessageBoxEx(NULL, _T("The number of EA_MOUNT in Edge Gradient is error!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
||||
return false;
|
||||
}
|
||||
if (NULL == pSptRecArray)
|
||||
{
|
||||
if (LANG_ZHCN == g_iUILanguage)
|
||||
AfxMessageBox(_T("pSptRecArray不能为空!"));
|
||||
else
|
||||
MessageBoxEx(NULL, _T("pSptRecArray can't be NULL!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
||||
return false;
|
||||
}
|
||||
pSptRecArray->RemoveAll();
|
||||
//装置的位置顺序为AMNB
|
||||
int iC1Pos = 1, iC2Pos = 4,iP1Pos = 2,iP2Pos = 3;
|
||||
int iTsn = 0;
|
||||
CSptRecord *pSptRec = NULL;
|
||||
//此时固定A的位置不动,B点向右移动,然后M从2开始往右移动,MN的间距始终为1
|
||||
while(iC2Pos <= iEAmount)
|
||||
{
|
||||
iP1Pos = 2;
|
||||
iP2Pos = iP1Pos + 1;
|
||||
while(iP2Pos <= iC2Pos-1)
|
||||
{
|
||||
pSptRec = new CSptRecord();
|
||||
pSptRec->m_iC1 = iC1Pos;
|
||||
pSptRec->m_iC2 = iC2Pos;
|
||||
pSptRec->m_iP1 = iP1Pos;
|
||||
pSptRec->m_iP2 = iP2Pos;
|
||||
pSptRec->m_fK = CalculateCESptKVal(iC1Pos, iC2Pos, iP1Pos, iP2Pos);
|
||||
//由于不需要画剖面图,所以这里暂时对m_iPtNum赋值为0
|
||||
pSptRec->m_iPtNum = 0;
|
||||
// pSptRec->m_iPtNum = iC1Pos;
|
||||
pSptRec->m_iLevel = GenSptRecLevel(iC1Pos, iC2Pos, iP1Pos, iP2Pos);
|
||||
pSptRec->m_colorREF = RGB(0, 255, 0);
|
||||
pSptRec->m_iN = 1;
|
||||
pSptRec->m_bIsSel = TRUE;
|
||||
pSptRec->m_iTsn = ++iTsn;
|
||||
pSptRecArray->Add(pSptRec);
|
||||
iP1Pos++;
|
||||
iP2Pos = iP1Pos+1;
|
||||
}
|
||||
iC2Pos++;
|
||||
}
|
||||
//此时将B不动,A开始移动
|
||||
iC2Pos = iEAmount;
|
||||
iC1Pos = 2;
|
||||
while(TRUE)
|
||||
{
|
||||
iP1Pos = iC1Pos + 1;
|
||||
iP2Pos = iP1Pos + 1;
|
||||
if (iP2Pos >= iC2Pos)
|
||||
{
|
||||
break;
|
||||
}
|
||||
//开始将M,N循环向右移动
|
||||
while(iP2Pos <= iC2Pos-1)
|
||||
{
|
||||
pSptRec = new CSptRecord();
|
||||
pSptRec->m_iC1 = iC1Pos;
|
||||
pSptRec->m_iC2 = iC2Pos;
|
||||
pSptRec->m_iP1 = iP1Pos;
|
||||
pSptRec->m_iP2 = iP2Pos;
|
||||
pSptRec->m_fK = CalculateCESptKVal(iC1Pos, iC2Pos, iP1Pos, iP2Pos);
|
||||
//由于不需要画剖面图,所以这里暂时对m_iPtNum赋值为0
|
||||
pSptRec->m_iPtNum = 0;
|
||||
// pSptRec->m_iPtNum = iC1Pos;
|
||||
pSptRec->m_iLevel = GenSptRecLevel(iC1Pos, iC2Pos, iP1Pos, iP2Pos);
|
||||
pSptRec->m_colorREF = RGB(0, 255, 0);
|
||||
pSptRec->m_iN = 1;
|
||||
pSptRec->m_bIsSel = TRUE;
|
||||
pSptRec->m_iTsn = ++iTsn;
|
||||
pSptRecArray->Add(pSptRec);
|
||||
iP1Pos++;
|
||||
iP2Pos = iP1Pos+1;
|
||||
}
|
||||
iC1Pos++;
|
||||
}
|
||||
|
||||
*pPtAmount = pSptRecArray->GetSize();
|
||||
*pMaxLevel = iEAmount-1;
|
||||
return true;
|
||||
}
|
||||
|
||||
float CMediumEdgeGradient::CalculateCESptKVal(float fA, float fB, float fX, float fY)
|
||||
{
|
||||
float fAM = fabs(fX - fA);
|
||||
float fAN = fabs(fY - fA);
|
||||
float fBM = fabs(fB - fX);
|
||||
float fBN = fabs(fB - fY);
|
||||
if (0 == fAM || 0 ==fAN || 0 == fBM || 0 == fBN)
|
||||
{
|
||||
return 0;
|
||||
// AfxMessageBox(_T("Calcualte K value error.value = "))
|
||||
}
|
||||
return fabs(2*VAL_PI/(1.0/fAM - 1.0/fAN - 1.0/fBM + 1.0/fBN));
|
||||
}
|
||||
|
||||
int CMediumEdgeGradient::GetMaxLevelByEAmount(int iEAmount)
|
||||
{
|
||||
if (iEAmount < 4)
|
||||
{
|
||||
if (LANG_ZHCN == g_iUILanguage)
|
||||
AfxMessageBox(_T("Edge Gradient中EA_MOUNT的个数是错误的!"));
|
||||
else
|
||||
MessageBoxEx(NULL, _T("The number of EA_MOUNT in Edge Gradient is error!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
||||
return 0;
|
||||
}
|
||||
int iC1Pos = 1, iC2Pos = 4,iP1Pos = 2,iP2Pos = 3;
|
||||
int iCnt = 0;
|
||||
|
||||
//此时固定A的位置不动,B点向右移动,然后M从2开始往右移动,MN的间距始终为1
|
||||
while(iC2Pos <= iEAmount)
|
||||
{
|
||||
iP1Pos = 2;
|
||||
iP2Pos = iP1Pos + 1;
|
||||
while(iP2Pos <= iC2Pos-1)
|
||||
{
|
||||
iCnt++;
|
||||
iP1Pos++;
|
||||
iP2Pos = iP1Pos+1;
|
||||
}
|
||||
iC2Pos++;
|
||||
}
|
||||
//此时将B不动,A开始移动
|
||||
iC2Pos = iEAmount;
|
||||
iC1Pos = 2;
|
||||
while(TRUE)
|
||||
{
|
||||
iP1Pos = iC1Pos + 1;
|
||||
iP2Pos = iP1Pos + 1;
|
||||
if (iP2Pos >= iC2Pos)
|
||||
{
|
||||
break;
|
||||
}
|
||||
//开始将M,N循环向右移动
|
||||
while(iP2Pos <= iC2Pos-1)
|
||||
{
|
||||
iCnt++;
|
||||
iP1Pos++;
|
||||
iP2Pos = iP1Pos+1;
|
||||
}
|
||||
iC1Pos++;
|
||||
}
|
||||
return iCnt;
|
||||
}
|
||||
Reference in New Issue
Block a user