📄 jointlist.cpp
字号:
POSITION posE = pOther->pElementList.m_pListElement.GetHeadPosition();
while(posE != NULL)
{
CAElement* pE = pOther->pElementList.m_pListElement.GetNext(posE);
if(!pE->IsWorked() && pE!=pSwitch)
{
SetSpecialElCurrent(pE,pOther);
}
if( pE != pSwitch )
{
if((pE->IsTheP1Joint( pOther ) && !pSwitch->IsTheP1Joint( pOther ))
|| (!pE->IsTheP1Joint( pOther ) && pSwitch->IsTheP1Joint( pOther )))
{
i += pE->GetCurrent();
}
else if(( pE->IsTheP1Joint( pOther ) && pSwitch->IsTheP1Joint( pOther ))
|| ( !pE->IsTheP1Joint( pOther ) && !pSwitch->IsTheP1Joint( pOther )))
{
i += -pE->GetCurrent();
}
}
}
}
else
{
i = 0;
}
pSwitch->SetWorked(true);
pSwitch->SetCurrent(i);
}
void CJointList::SetInductorCurrent(CAElement* pInductor,CAJoint* p)
{
float i = 0;
CAJoint* p1 = pInductor->GetJointStruct()->pJoint1;
CAJoint* p2 = pInductor->GetJointStruct()->pJoint2;
CAJoint* pOther;
if(p1 == p) pOther = p2;
else pOther = p1;
POSITION posE = pOther->pElementList.m_pListElement.GetHeadPosition();
while(posE != NULL)
{
CAElement* pE = pOther->pElementList.m_pListElement.GetNext(posE);
if(!pE->IsWorked() && pE!=pInductor)
{
SetSpecialElCurrent(pE,pOther);
}
if( pE != pInductor )
{
if((pE->IsTheP1Joint( pOther ) && !pInductor->IsTheP1Joint( pOther ))
|| (!pE->IsTheP1Joint( pOther ) && pInductor->IsTheP1Joint( pOther )))
{
i += pE->GetCurrent();
}
else if(( pE->IsTheP1Joint( pOther ) && pInductor->IsTheP1Joint( pOther ))
|| ( !pE->IsTheP1Joint( pOther ) && !pInductor->IsTheP1Joint( pOther )))
{
i += -pE->GetCurrent();
}
}
}
pInductor->SetWorked(true);
pInductor->SetCurrent(i);
}
void CJointList::SetCapacityCurrent(CAElement* pCapacity,CAJoint *p)
{
pCapacity->SetCurrent(0);
}
void CJointList::SetResistanceCurrent(CAElement* pResistance,CAJoint* p)
{
CAJoint* p1 = pResistance->GetJointStruct()->pJoint1;
CAJoint* p2 = pResistance->GetJointStruct()->pJoint2;
float v1 = p1->GetVoltage();
float v2 = p2->GetVoltage();
/* if(v1 > v2)
{
pResistance->SetCurrent((v1-v2)/pResistance->GetValue());
}
else
{
pResistance->SetCurrent((v2-v1)/pResistance->GetValue());
}*/
pResistance->SetCurrent((v2-v1)/pResistance->GetValue());
pResistance->SetWorked(true);
}
void CJointList::SetPowerCurrent(CAElement* pPower,CAJoint* p)
{
float i = 0;
/*CAJoint* p1InSave = pPower->GetJointStruct()->pJoint1;
CAJoint* p2InSave = pPower->GetJointStruct()->pJoint2;
CAElement* pRealP = GetElement( pPower,m_pSaveRealList );
CAJoint* p1InReal = pRealP->GetJointStruct()->pJoint1;
CAJoint* p2InReal = pRealP->GetJointStruct()->pJoint2;
CAElement* pR;
if(pPOwer == p1InReal->pElementList.m_pListElement.GetHead())
{
pR = p1InReal->pElementList.m_pListElement.GetTail();
}
else
{
pR = p1InReal->pElementList.m_pListElement.GetHead();
}*/
CAJoint* p1 = pPower->GetJointStruct()->pJoint1;
CAJoint* p2 = pPower->GetJointStruct()->pJoint2;
CAJoint* pOther;
// int nCount1 = p1->pElementList.m_pListElement.GetCount();
// int nCount2 = p2->pElementList.m_pListElement.GetCount();
// if( nCount1 == 2 )
// {
// pOther = p1;
// }
// else
// {
// pOther = p2;
// }
if(p1 == p) pOther = p2;
else pOther = p1;
int nParelCount = SetParrelPowerCurrent( pPower,pOther);
POSITION posE = pOther->pElementList.m_pListElement.GetHeadPosition();
int nCount = pOther->pElementList.m_pListElement.GetCount();
while(posE != NULL)
{
CAElement* pE = pOther->pElementList.m_pListElement.GetNext(posE);
// if(nCount == 2 )
// {
// if(!pE->IsWorked() && pE!=pPower )
// {
// SetSpecialElCurrent(pE,pOther);
// }
// }
// else
// {
// if(!pE->IsWorked() && pE->GetType()!= ID_POWER )
if( !pE->IsWorked() && pE != pPower && !pE->IsSetParel() )
{
SetSpecialElCurrent(pE,pOther);
}
if( !pE->IsSetParel() && pE != pPower )
{
if((pE->IsTheP1Joint( pOther ) && !pPower->IsTheP1Joint( pOther ))
|| (!pE->IsTheP1Joint( pOther ) && pPower->IsTheP1Joint( pOther )))
{
i += pE->GetCurrent();
}
else if(( pE->IsTheP1Joint( pOther ) && pPower->IsTheP1Joint( pOther ))
|| ( !pE->IsTheP1Joint( pOther ) && !pPower->IsTheP1Joint( pOther )))
{
i += -pE->GetCurrent();
}
}
// i += pE->GetCurrent();
pE->SetIsParel( false );
// }
}
pPower->SetWorked(true);
pPower->SetCurrent(i/nParelCount);
pPower->SetIsParel( false );
}
void CJointList::SetDiodeCurrent(CAElement* pDiode,CAJoint* p)
{
float i = 0;
CAJoint* p1 = pDiode->GetJointStruct()->pJoint1;
CAJoint* p2 = pDiode->GetJointStruct()->pJoint2;
if(p1->GetVoltage() != p2->GetVoltage())
{
pDiode->SetCurrent(0);
}
else
{
CAJoint* pOther;
if(p1 == p) pOther = p2;
else pOther = p1;
POSITION posE = pOther->pElementList.m_pListElement.GetHeadPosition();
while(posE != NULL)
{
CAElement* pE = pOther->pElementList.m_pListElement.GetNext(posE);
if(!pE->IsWorked() && pE!=pDiode)
{
SetSpecialElCurrent(pE,pOther);
}
if( pE!=pDiode )
{
if((pE->IsTheP1Joint( pOther ) && !pDiode->IsTheP1Joint( pOther ))
|| (!pE->IsTheP1Joint( pOther ) && pDiode->IsTheP1Joint( pOther )))
{
i += pE->GetCurrent();
}
else if(( pE->IsTheP1Joint( pOther ) && pDiode->IsTheP1Joint( pOther ))
|| ( !pE->IsTheP1Joint( pOther ) && !pDiode->IsTheP1Joint( pOther )))
{
i += -pE->GetCurrent();
}
}
// i += pE->GetCurrent();
}
}
pDiode->SetWorked(true);
pDiode->SetCurrent(i);
}
void CJointList::SetSpecialElCurrent(CAElement *pE,CAJoint* p)
{
int type = pE->GetType();
switch(type)
{
case ID_POWER:
SetPowerCurrent(pE,p);
break;
case ID_RESISTANCE:
SetResistanceCurrent(pE,p);
break;
case ID_CAPACITANCE:
SetCapacityCurrent(pE,p);
break;
case ID_INDUCTANCE:
SetInductorCurrent(pE,p);
break;
case ID_SWITCH:
SetSwitchCurrent(pE,p);
break;
case ID_DIODE:
SetDiodeCurrent(pE,p);
break;
case ID_CURRENT_METER:
SetAmpermeterCurrent(pE,p);
break;
case ID_VOLTAGE_METER:
SetVoltmeterCurrent(pE,p);
break;
default:
break;
}
}
/*CAElement* CJointList::GetSameElInOtherList(CAElement *pE, JointList *pList)
{
CAJoint* p1 = pE->GetJointStruct()->pJoint1;
CAJoint* p2 = pE->GetJointStruct()->pJoint2;
int order1 = p1->GetOrder();
int order2 = p2->GetOrder();
int type1 = pE->GetType();
POSITION pos = pList->GetHeadPosition();
while(pos != NULL)
{
CAJoint* pJ = pList->GetNext(pos);
POSITION posE = pJ->pElementList.m_pListElement.GetHeadPosition();
while(posE != NULL)
{
CAElement* pEOther = pJ->pElementList.m_pListElement.GetNext(posE);
int type2 = pEOther->GetType();
CAJoint* p11 = pEOther->GetJointStruct()->pJoint1;
CAJoint* p22 = pEOther->GetJointStruct()->pJoint2;
int order11 = p11->GetOrder();
int order22 = p22->GetOrder();
if(type1 == type2)
{
if (order11 == order1 && order22 == order2)
{
return pEOther;
}
else if(order11 == order2 && order22 == order1)
{
return pEOther;
}
}
}
}
return NULL;
}*/
void CJointList::GiveMeBase(int base)
{
m_nBase = base;
}
int CJointList::GetBaseOrder()
{
return m_nBase;
}
void CJointList::SetVoltOutput(ElementList *pElList, JointList *pList)
{
POSITION pos = pElList->GetHeadPosition();
while( pos != NULL )
{
CAElement* pE = pElList->GetNext( pos );
// int order1 = pE->GetOrderStruct()->order1;
// int order2 = pE->GetOrderStruct()->order2;
CAElement* pEInSave = GetElement(pE,pList);
pE->SetVoltage( pEInSave->GetVoltage() );
}
}
void CJointList::SetAmperOutput(ElementList *pElList, JointList *pList)
{
POSITION pos = pElList->GetHeadPosition();
while( pos != NULL )
{
CAElement* pE = pElList->GetNext( pos );
// int order1 = pE->GetOrderStruct()->order1;
// int order2 = pE->GetOrderStruct()->order2;
CAElement* pEInSave = GetElement(pE,pList);
pE->SetCurrent( pEInSave->GetCurrent() );
}
}
/*CAElement* CJointList::GetSameElInOtherList(int type,int order1, int order2, JointList *pList)
{
POSITION posJ = pList->GetHeadPosition();
while( posJ != NULL )
{
CAJoint* pJ = pList->GetNext( posJ );
POSITION posE = pJ->pElementList.m_pListElement.GetHeadPosition();
while( posE != NULL )
{
CAElement* pE = pJ->pElementList.m_pListElement.GetNext( posE );
if( pE->GetType() == type )
{
CAJoint* p1 = pE->GetJointStruct()->pJoint1;
CAJoint* p2 = pE->GetJointStruct()->pJoint2;
int o1 = p1->GetOrder();
int o2 = p2->GetOrder();
if( order1 == o1 && order2 == o2 )
{
return pE;
}
else if( order1 == o2 && order2 == o1 )
{
return pE;
}
}
}
}
return NULL;
}
*/
int CJointList::GetElementCount(JointList* pList)
{
int nCount = 0;
SetWorkedInList( false,pList );
POSITION posJ = pList->GetHeadPosition();
while( posJ != NULL )
{
CAJoint* pJ = pList->GetNext( posJ );
POSITION posE = pJ->pElementList.m_pListElement.GetHeadPosition();
while( posE != NULL )
{
CAElement* pE = pJ->pElementList.m_pListElement.GetNext( posE );
if( !pE->IsWorked() )
{
nCount ++;
pE->SetWorked( true );
}
}
}
return nCount;
}
void CJointList::SetAllIsSetVoltage(BOOL b, JointList *pList)
{
POSITION pos = pList->GetHeadPosition();
while( pos != NULL )
{
CAJoint* pJoint = pList->GetNext( pos );
pJoint->SetIsSetVoltage( b );
}
}
BOOL CJointList::GoTheWay(CAJoint *pJoint)
{
return false;
//1.All Is Resistance;
//2.Only one and it IsSetVoltage;
//3.
}
int CJointList::SetParrelPowerCurrent(CAElement *pPower,CAJoint* pJ)
{
int nCount = 1;
pPower->SetIsParel( false );
// CAJoint* p1 = pPower->GetJointStruct()->pJoint1;
// CAJoint* p2 = pPower->GetJointStruct()->pJoint2;
POSITION pos = pJ->pElementList.m_pListElement.GetHeadPosition();
while( pos != NULL )
{
CAElement* pE = pJ->pElementList.m_pListElement.GetNext( pos );
pE->SetIsParel( false );
if( pE->GetType() == ID_POWER && pE != pPower )
{
if( IsSameJoint( pPower,pE ) )
{
nCount ++;
// pE->SetIsParel( true );
pE->SetIsParel( true );
pPower->SetIsParel( true );
}
}
}
return nCount;
}
BOOL CJointList::IsSameJoint(CAElement *pE1, CAElement *pE2)
{
BOOL b1,b2;
if(pE1->GetJointStruct()->pJoint1==pE2->GetJointStruct()->pJoint1)
{
b1=true;
}
else
{
b1=false;
}
if(pE1->GetJointStruct()->pJoint2==pE2->GetJointStruct()->pJoint2)
{
b2=true;
}
else
{
b2=false;
}
if(b1&&b2)
{
return true;
}
else
{
return false;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -