本文整理汇总了C++中Pipe::GetKey方法的典型用法代码示例。如果您正苦于以下问题:C++ Pipe::GetKey方法的具体用法?C++ Pipe::GetKey怎么用?C++ Pipe::GetKey使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Pipe
的用法示例。
在下文中一共展示了Pipe::GetKey方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: CalPipeCloseSubtract
bool CPFAOptimize::CalPipeCloseSubtract( ComponentManager& ComManager, PFAOptimitationData& OptData, map< int, double >& OptimitationParameterMap, map< int, double >& OptimitationAssistantMap )
{
//
ASSERT( NULL != &ComManager );
ASSERT( NULL != &OptData );
double dTemp = 0.0;
double dTempDummyFlux = 0.0;
double dTempFactFlux = 0.0;
double dTempLength = 0.0;
Pipe* pPipe = NULL;
Component* pPipeComponent = NULL;
map< int, double >::iterator IntDouMap;
IteratorPtr<Component> PipeItPtr( ComManager.CreatPipeIterator() );
for( PipeItPtr->Fist(); !PipeItPtr->IsDone(); PipeItPtr->Next() )
{
pPipeComponent = &PipeItPtr->CurrentItem();
pPipe = dynamic_cast<Pipe*>( pPipeComponent );
// 管道的属性:管道虚流量、管道流量和管道长度,如果其中有一个属性不存在
if( !OptData.GetProperty( pPipe->GetKey(), 1, dTempFactFlux ) || !OptData.GetProperty( pPipe->GetKey(), 2, dTempLength)
|| !OptData.GetProperty( pPipe->GetKey(), 0, dTempDummyFlux ) )
{
return false;
}
// 每根管道的计算参数,都取绝对值是为了避免pow出现错误
dTemp = pow( fabs( dTempFactFlux ), 2.0 * OptData.GetAlfaModulus() / ( OptData.GetAlfaModulus() + OptData.GetMModulus() ) )
* pow( fabs( dTempLength ), ( OptData.GetAlfaModulus() + OptData.GetMModulus() ) / OptData.GetMModulus() )
* pow( fabs( dTempDummyFlux ), -1.0 * OptData.GetMModulus() / ( OptData.GetAlfaModulus() + OptData.GetMModulus() ) );
IntDouMap = OptimitationParameterMap.find( pPipe->GetKey() );
if( OptimitationParameterMap.end() == IntDouMap )
{
OptimitationParameterMap.insert( map< int, double >::value_type( pPipe->GetKey(), dTemp ) );
}
else
{
IntDouMap->second = dTemp;
}
// 就最后虚流量的指数不同
dTemp = pow( fabs( dTempFactFlux ), 2.0 * OptData.GetAlfaModulus() / ( OptData.GetAlfaModulus() + OptData.GetMModulus() ) )
* pow( fabs( dTempLength ), ( OptData.GetAlfaModulus() + OptData.GetMModulus() ) / OptData.GetMModulus() )
* pow( fabs( dTempDummyFlux ), -1.0 * ( OptData.GetAlfaModulus() + 2 * OptData.GetMModulus() ) / ( OptData.GetAlfaModulus() + OptData.GetMModulus() ) );
IntDouMap = OptimitationAssistantMap.find( pPipe->GetKey() );
if( OptimitationAssistantMap.end() == IntDouMap )
{
OptimitationAssistantMap.insert( map< int, double >::value_type( pPipe->GetKey(), dTemp ) );
}
else
{
IntDouMap->second = dTemp;
}
}
return true;
}
示例2: CalFactFlux
bool CPFAOptimize::CalFactFlux( ComponentManager& ComManager, const double& dPrecision, const long& lMaxIterative, PFAOptimitationData& OptData )
{
//
ASSERT( NULL != & ComManager );
ASSERT( 0 < dPrecision );
ASSERT( 0 < lMaxIterative );
vector< double > TempVector;
vector< int >* pPipeVector = NULL;
vector< int >* pJunVector = NULL;
map< int, double > OptimitationParameterMap; // 管段的闭合差,用来计算环的闭合差
map< int, double > PTempMap; // 环的Sq_2,有正负的
map< int, double > ATempMap; // 环的Sq
map< int, double > ResultMap; // 校正流量,int表示环
double dTemp = 0.0;
double dTempDiameter = 0.0;
double dTempFactFlux = 0.0;
double dTempLength = 0.0;
bool bPrecisionFlag = false; // 精度要求标志,为true表示全部计算参数都符合精度要求
long lIterativeTime = 0; // 精度迭代次数
Pipe* pPipe = NULL;
Component* pPipeComponent = NULL;
IteratorPtr<Component> PipeItPtr( ComManager.CreatPipeIterator() );
map< int, double > CircleCloseSubtract; // 环的闭合差
map< int, double > CircleMiddleVariable; // 中间变量
map< int, vector< double > > FluxModulusMetrix; // 求解流量的系数矩阵
int i = 0;
int j = 0;
// 初始化流量系数矩阵,矩阵是从1开始的
for( i = 0; i <= OptData.GetPropertyCount( 100 ); i++ )
{
vector< double > DoubleVector;
for( j = 0; j <= OptData.GetPropertyCount( 100 ); j++ )
{
DoubleVector.push_back( 0.0 );
}
FluxModulusMetrix.insert( map< int, vector< double > >::value_type( i+1, DoubleVector ) );
}
// 计算每根管道
for( PipeItPtr->Fist(); !PipeItPtr->IsDone(); PipeItPtr->Next() )
{
pPipeComponent = &PipeItPtr->CurrentItem();
pPipe = dynamic_cast<Pipe*>( pPipeComponent );
// 管道的属性:管道流量和管道长度,如果其中有一个属性不存在
if( !OptData.GetProperty( pPipe->GetKey(), 1, dTempFactFlux ) && !OptData.GetProperty( pPipe->GetKey(), 2, dTempLength)
&& !OptData.GetProperty( pPipe->GetKey(), 4, dTempDiameter ) )
{
return false;
}
// 每根管道的计算参数
// 如果k和m都设置了值,就直接计算
if( ( 0 > fabs( OptData.GetKModulus() - 1.0e-13 ) ) && ( 0 > fabs( OptData.GetMModulus() - 1.0e-6 ) ) )
{
if( 0 < fabs( dTempDiameter -1e-6 ) ) // 分母不能为0
{
dTemp = OptData.GetKModulus() * dTempLength / pow( fabs( dTempDiameter ), 5.3 ); // 公式?
}
}
// Re
if( 0 > fabs( dTempDiameter - 1e-6) ) // 防止下面公式分母为0,而且直径为0也没意义
{
return false;
}
double dSpeed = 4.0 * dTempFactFlux / ( PI * dTempDiameter * dTempDiameter ); // 每根管道的流速
QuantityManager& qm = QuantityManager::Instance();
NumFlyWeight DynamicViscosity = ( ComManager.SysProperty().GetFuild() )->ms_Viscos; // 流体的动力粘度
double dDynamicViscosity = DynamicViscosity.GetfValue();
if( "kg/sec-m" != DynamicViscosity.GetUnit() ) // 转换到标准单位
{
qm.TransformFromStd( dDynamicViscosity, DynamicViscosity.GetUnit().GetBuffer( 15 ), DynamicViscosity.GetfValue() );
}
if( 0 > fabs( dDynamicViscosity - 1e-6) ) // 动力粘度不能为0
{
return false;
}
double dRe = dSpeed * dTempDiameter / dDynamicViscosity;
// 牛顿迭代法解柯尔勃洛克-魏特公式
if( !ColebrookNewton( 4.572e-5, dTempDiameter, dRe, dTemp ) ) // 牛顿法迭代失败
{
return false;
}
dTemp = dTemp * 8.0 * dTempLength / ( 9.8 * PI * PI * pow( fabs( dTempDiameter ), 5 ) ); // S的计算,跟选的摩擦阻力公式有关
OptimitationParameterMap.insert( map< int, double >::value_type( pPipe->GetKey(), dTemp ) );
}
// 为实际流量平差做准备
map< int, vector< double > >::iterator FluxModMetIt = FluxModulusMetrix.begin();
for( i = 1; i <= OptData.GetPropertyCount( 100 ); i++ ) // 从1号环开始
{
double dPTemp = 0.0;
//.........这里部分代码省略.........
示例3: CalEconomyDiameterAndWaterHarmer
//.........这里部分代码省略.........
{
pPipe = ComManager.LookUpPipe( abs( *PipeIt ) );
if( 0 < *PipeIt )
{
OptIt = OptimitationParameterMap.find( abs( *PipeIt ) );
dTemp = OptIt->second;
dParameterTemp += fabs( OptIt->second );
OptIt = OptimitationAssistantMap.find( abs( *PipeIt ) );
dAssistantTemp += fabs( OptIt->second );
}
else
{
OptIt = OptimitationParameterMap.find( abs( *PipeIt ) );
dTemp = OptIt->second;
dParameterTemp -= fabs( OptIt->second );
OptIt = OptimitationAssistantMap.find( abs( *PipeIt ) );
dAssistantTemp -= fabs( OptIt->second );
}
}
CircleCloseSubtract.insert( map< int, double >::value_type( i, dParameterTemp ) );
}
map< int, double >::iterator IntDouMapIt;
for( i = 1; i < OptData.GetPropertyCount( 102 ); i++ )
{
int iKeyOfPipe = i;
j = 0;
while( !OptData.GetPropertyCount( iKeyOfPipe, 102 ) )
{
iKeyOfPipe++;
if( 5000 < j) // 防止死循环
{
return false;
}
j++;
}
int iKeyOfCircle = 0;
dTemp = 0.0;
for( j = 0; j < OptData.GetPropertyCount( iKeyOfPipe, 102 ); j++ )
{
OptData.GetProperty( iKeyOfPipe, 102, j, iKeyOfCircle );
IntDouMapIt = CircleCloseSubtract.find( abs( iKeyOfCircle) );
if( 0 < iKeyOfCircle )
{
dTemp += IntDouMapIt->second;
}
else
{
dTemp -= IntDouMapIt->second;
}
}
OptData.GetProperty( iKeyOfPipe, 0, dParameterTemp );
dParameterTemp += dTemp;
OptData.SetProperty( iKeyOfPipe, 0, dParameterTemp );
}
lIterativeTime++; // 迭代次数加一
}
// 如果虚流量平差成功
if( ( false != bPrecisionFlag ) && ( lMaxIterative > lIterativeTime ) )
{
// 计算经济管径和水头损失
ASSERT( 0 < OptData.GetEconomyFactor() );
int iKeyOfPipe = 0;
Pipe* pPipe = NULL;
Component* pPipeComponent = NULL;
// 遍历所有管道
IteratorPtr<Component> PipeItPtr( ComManager.CreatPipeIterator() );
for( PipeItPtr->Fist(); !PipeItPtr->IsDone(); PipeItPtr->Next() )
{
pPipeComponent = &PipeItPtr->CurrentItem();
pPipe = dynamic_cast<Pipe*>( pPipeComponent );
if( NULL == pPipe )
{
return false; // 找不到管道,是否应该发送个自定义消息或错误?
}
OptData.GetProperty( pPipe->GetKey(), 0, dTempDummyFlux );
OptData.GetProperty( pPipe->GetKey(), 1, dTempFactFlux );
OptData.GetProperty( pPipe->GetKey(), 2, dTempLength );
dTemp = OptData.GetEconomyFactor() * OptData.GetFluxSummation() * dTempDummyFlux
* dTempFactFlux*dTempFactFlux;
// 经济管径
if( 0 > fabs( ( OptData.GetAlfaModulus() + OptData.GetMModulus() ) - 1e-6 ) )
{
AfxMessageBox( MODULUS_ZERO );
return false;
}
dTemp = pow( fabs( dTemp ), 1.0 / ( OptData.GetAlfaModulus() + OptData.GetMModulus() ) );
OptData.SetProperty( pPipe->GetKey(), 4, dTemp );
// 水头损失
dTemp = OptData.GetKModulus() * pow( fabs( dTempFactFlux ), OptData.GetNModulus() ) * dTempLength
/ pow( fabs( dTemp ), OptData.GetMModulus() );
OptData.SetProperty( pPipe->GetKey(), 5, dTemp );
}
}
return bPrecisionFlag;
}
示例4: Example
void CPFAOptimize::Example()
{
CMainFrame* pMainFrame = NULL;
pMainFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd;
CChildFrame* pChildFrame = NULL;
pChildFrame = (CChildFrame*)pMainFrame->GetActiveFrame();
CAutoPFAView* pAutoView = NULL;
pAutoView = (CAutoPFAView*)pChildFrame->GetActiveView();
ComponentManager* pComManager = pAutoView->GetDocument()->m_scenarioManager.GetCurScenario()->GetCompManager();
JunSystemTransformCircleSystem( *pComManager, OptData );
DisplayMatrix( "F://CirPipe.txt", 100, OptData );
InitializePipeCircle( OptData );
DisplayMatrix( "F://Pipe.txt", 102, OptData );
// 从pComManager中初始化OptData的 初始实际流量,管道长度,节点流量,配水源,控制点,
// 先手动设置配水源和控制点
int iTemp = 1;
OptData.SetProperty( 0, 200, iTemp ); // 节点1为配水源
iTemp = 6;
OptData.SetProperty( 0, 201, iTemp ); // 节点10为控制点
CMinimumSquareSum MinSquSum;
//MinSquSum.InitializeFactFlux( *pComManager, OptData ); // 初始实际流量
///////////////////////////////////////
int i = 0;
int iKeyOfPipe = 0;
double Temp = 0.0;
Temp = 0.03;
OptData.SetProperty( 1, 1, Temp );
OptData.SetProperty( 3, 1, Temp );
OptData.SetProperty( 6, 1, Temp );
OptData.SetProperty( 7, 1, Temp );
Temp = 0.02;
OptData.SetProperty( 2, 1, Temp );
OptData.SetProperty( 4, 1, Temp );
OptData.SetProperty( 5, 1, Temp );
////////////////////////////////////////
double dTemp = 0.0;
Pipe* pPipe = NULL;
Component* pComponent = NULL;
map< int, double > BeforeDiameterMap; // 存储了上一次计算的直径
int iIteratorTime = 0; // 迭代次数
IteratorPtr<Component> PipeItPtr( pComManager->CreatPipeIterator() );
for( PipeItPtr->Fist(); !PipeItPtr->IsDone(); PipeItPtr->Next() )
{
pComponent = &PipeItPtr->CurrentItem();
pPipe = dynamic_cast<Pipe*>( pComponent );
dTemp = pPipe->Len();
OptData.SetProperty( pPipe->GetKey(), 2, dTemp );
dTemp = pPipe->InDia();
OptData.SetProperty( pPipe->GetKey(), 4, dTemp );
}
// 节点流量
QuantityManager& qm = QuantityManager::Instance();
CString strUnit = "";
CString strValue = "";
Jun* pJun = NULL;
IteratorPtr<Component> JunItPtr( pComManager->CreatJunIterator() );
for( JunItPtr->Fist(); !JunItPtr->IsDone(); JunItPtr->Next() )
{
pComponent = &JunItPtr->CurrentItem();
pJun = dynamic_cast<Jun*>( pComponent );
strUnit = pJun->ms_InitGuess.GetValue( 2 ); // 获得单位
strValue = pJun->ms_InitGuess.GetValue( 1 );
TCHAR* pChar = NULL;
qm.TransformToStd( dTemp, strUnit.GetBuffer( 32 ), _tcstod( strValue.GetBuffer( 32 ), &pChar ) ); // 转化成标准单位
if( IDS_STRVOLUMEFLOW != _ttoi( pJun->ms_InitGuess.GetValue( 0 ).GetBuffer( 32 ) ) ) // 质量流量,要转化为体积流量
{
double dTempDensity = 0.0;
NumFlyWeight *pDensity = &( ( pComManager->SysProperty().GetFuild() )->ms_Density );
dTemp *= pDensity->GetNum(); // GetNum返回标准单位数
}
OptData.SetProperty( pJun->GetKey(), 3, dTemp );
}
////////////
dTemp = 0.06;
OptData.SetProperty( 1, 3, dTemp );
dTemp = -0.06;
OptData.SetProperty( 6, 3, dTemp );
////////////
// 初始化经济参数
OptData.SetAModulus( 8.4 );
OptData.SetBModulus( 107 );
OptData.SetAlfaModulus( 1.6 );
OptData.SetDisinvestmentTime( 1.0e3 );
OptData.SetRepairModulus( 3.3 );
OptData.SetEletricityPrice( 0.5 );
OptData.SetAsymmetryModulus( 1.0 );
OptData.SetPumpEfficiency( 0.7 );
OptData.SetKModulus( 1.34e-10 );
OptData.SetMModulus( 5.3 );
OptData.SetNModulus( 2 );
OptData.Initialization();
//.........这里部分代码省略.........
示例5: FindBaseCircle
BOOL CPFAOptimize::FindBaseCircle( ComponentManager& ComManager, Pipe& BasePipe, BaseCircleDirection Direction, ComMap& JunKeyMap, ComMap& PipeKeyMap, int iMostCircle[] )
{
//参数有效性判断
ASSERT( NULL != &ComManager );
ASSERT( NULL != &BasePipe );
ComAndCloseComs JunAndCloseJuns;
JunAndCenter CloseJuns; // 记录节点和节点位置的Vector,形式如(节点编号,节点位置)
Jun* pJun = NULL;
Component* pJunComponent = NULL;
Pipe* pPipe = NULL;
Component* pPipeComponent = NULL;
Jun* pPreJun = NULL;
Jun* pNextJun = NULL;
Jun* pStartJun = NULL;
Jun* pStartNextJun = NULL;
// 图形的上、左、右、下四个顶点的位置,为确定最大环做准备
int iTop = 2147483647; // 2的32次方减一
int iLeft = 2147483647;
int iRight = 0;
int iBotton = 0;
IteratorPtr<Component> JunItPtr( ComManager.CreatJunIterator() );
// 把节点和与节点相连的节点信息都放入JunAndCloseJuns
// 如节点1和节点3,4,5相连,则( 1, ( (3,节点3位置), (4,节点4位置), (5,节点5位置) ) )
// 然后把管道和与管道相连的管道编号放入PipeAndClosePipes
// 如管道1和管道3,4,5相连,则(1,(3,4,5))
for( JunItPtr->Fist(); !JunItPtr->IsDone(); JunItPtr->Next() )
{
CloseJuns.clear();
pJunComponent = &JunItPtr->CurrentItem();
pJun = dynamic_cast<Jun*>( pJunComponent );
IteratorPtr<Component> PipeItPtr( ComManager.CreatPipeIterator() );
for( PipeItPtr->Fist(); !PipeItPtr->IsDone(); PipeItPtr->Next() )
{
pPipeComponent = &PipeItPtr->CurrentItem();
pPipe = dynamic_cast<Pipe*>( pPipeComponent );
if( pPipe->StartJun() == pJun->GetKey() )
{
pair< int , CPoint > Temp( pPipe->EndJun(), pPipe->EndPt() );
CloseJuns.push_back( Temp );
}
if( pPipe->EndJun() == pJun->GetKey() )
{
pair< int , CPoint > Temp( pPipe->StartJun(), pPipe->StartPt() );
CloseJuns.push_back( Temp );
}
if( pPipe->GetKey() == BasePipe.GetKey() )
{
if ( DEASIL_DIRECTION == Direction )
{
pPreJun = ComManager.LookUpJun( pPipe->StartJun() );
pNextJun = ComManager.LookUpJun( pPipe->EndJun() );
}
else
{
pPreJun = ComManager.LookUpJun( pPipe->EndJun() );
pNextJun = ComManager.LookUpJun( pPipe->StartJun() );
}
}
}
JunAndCloseJuns.insert( ComAndCloseComs::value_type( pJun->GetKey(), CloseJuns ) );
// 确定四个顶点
if( iTop > pJun->CenterPt().y )
{
iTop = pJun->CenterPt().y;
iMostCircle[0] = pJun->GetKey();
}
if( iBotton < pJun->CenterPt().y )
{
iBotton = pJun->CenterPt().y;
iMostCircle[1] = pJun->GetKey();
}
if( iLeft > pJun->CenterPt().x )
{
iLeft = pJun->CenterPt().x;
iMostCircle[2] = pJun->GetKey();
}
if( iRight < pJun->CenterPt().x )
{
iRight = pJun->CenterPt().x;
iMostCircle[3] = pJun->GetKey();
}
}
JunItPtr->Fist();
pJunComponent = &JunItPtr->CurrentItem();
pJun = dynamic_cast<Jun*>( pJunComponent );
CloseJuns.clear();
ComAndCloseComs::iterator JunIt = JunAndCloseJuns.find( pJun->GetKey() );
CopyVector( CloseJuns, JunIt->second );
// 寻找环—节点矩阵
pStartJun = pPreJun;
pStartNextJun = pNextJun;
int iKeyOfChoiceJun = 0; // 用来标记哪个节点编号作为基环的下一节点编号
//.........这里部分代码省略.........
示例6: FindShortCut
//.........这里部分代码省略.........
Component *pComponent = NULL;
Pipe *pPipe = NULL;
int iStartJun = 0;
int iEndJun = 0;
IteratorPtr<Component> PipeItPtr( ComManager.CreatPipeIterator() );
for( PipeItPtr->Fist(); !PipeItPtr->IsDone(); PipeItPtr->Next() )
{
pComponent = &PipeItPtr->CurrentItem();
pPipe = dynamic_cast<Pipe*>(pComponent);
iStartJun = pPipe->StartJun();
iEndJun = pPipe->EndJun();
SetProperties( AbutMatrix, iStartJun, iEndJun, 1 );
SetProperties( AbutMatrix, iEndJun, iStartJun, 1);
}
//赋初值
SetProperties( MarkVector, iKeyOfStartJun, 1 );
SetProperties( TempVector, iKeyOfStartJun, 0 );
for( i = 1; i <= iCountOfJun; i++ )
{
iTemp = GetProperties( AbutMatrix, 1, i );
SetProperties( DistanceVector, i, iTemp );
if( 0 < iTemp )
{
SetProperties( TempVector, i, 1 );
}
}
//Dijkstra
for( i = 0; i <= iCountOfJun; i++ )
{
//找到没有标号的最小dist下标
iMinDistance = 32000;
k = 0;
for( j = 1; j <= iCountOfJun; j++ )
{
if( ( 0 == GetProperties( MarkVector, j ) ) && ( 0 < GetProperties( DistanceVector, j ) )
&& ( iMinDistance > GetProperties( DistanceVector, j ) ) )
{
k = j;
iMinDistance = GetProperties( DistanceVector, j );
}
}
if( 0 == k ) //如果找不到就直接退出
{
break;
}
SetProperties( MarkVector, k, 1 ); //标记
//修改最短值和路径
for( j = 1; j <= iCountOfJun; j++ )
{
if( ( 0 == GetProperties( MarkVector, j ) ) && ( 0 < GetProperties( AbutMatrix, k, j ) )
&& ( ( 0 == GetProperties( DistanceVector, j ) )
|| ( GetProperties( DistanceVector, k ) + GetProperties( AbutMatrix, k, j ) < GetProperties( DistanceVector, j ) ) ) )
{
iTemp = GetProperties( DistanceVector, k ) + GetProperties( AbutMatrix, k, j );
SetProperties( DistanceVector, j, iTemp );
SetProperties( TempVector, j, k );
}
}
}
//输出值和路径
k = iKeyOfEndJun;
i = 0;
while( 0 < GetProperties( TempVector, k ) )
{
SetProperties( PipePathVector, i++, k );
k = GetProperties( PipePathVector, k );
}
SetProperties( PipePathVector, i, 1 );
// 根据节点把管道编号写进里,负号表示管道方向与前进方向相反
JunToJunPipePath.clear();
vector< int >::iterator IntVecIt = PipePathVector.begin();
iStartJun = *IntVecIt;
IntVecIt++;
for( ; PipePathVector.end() != IntVecIt; IntVecIt++ )
{
iEndJun = *IntVecIt;
for( PipeItPtr->Fist(); !PipeItPtr->IsDone(); PipeItPtr->Next() )
{
pComponent = &PipeItPtr->CurrentItem();
pPipe = dynamic_cast<Pipe*>(pComponent);
if( ( pPipe->StartJun() == iStartJun ) && ( pPipe->EndJun() == iEndJun ) )
{
JunToJunPipePath.push_back( pPipe->GetKey() );
break;
}
if( ( pPipe->StartJun() == iEndJun ) && ( pPipe->EndJun() == iStartJun ) )
{
JunToJunPipePath.push_back( -1 * pPipe->GetKey() );
break;
}
}
iStartJun = iEndJun;
}
return true;
}