重新优化了TopologyRecorder的结构,代码更合理。

Signed-off-by: facat@lab.com <facat@lab.com>
This commit is contained in:
facat@lab.com 2014-12-09 22:03:56 +08:00
parent 000f9b89fa
commit d6bcb9a0c5
1 changed files with 58 additions and 43 deletions

View File

@ -20,85 +20,100 @@ bool TopologyRecorder::startWithNode(const QString& node)
anotherTerminal=anotherTerminalVector.at(atI); anotherTerminal=anotherTerminalVector.at(atI);
if(this->reachedTerminal.contains(anotherTerminal)) if(this->reachedTerminal.contains(anotherTerminal))
{ {
// std::cout<<anotherTerminal.toStdString()<<"reached"<<std::endl; //@1 // std::cout<<anotherTerminal.toStdString()<<"reached"<<std::endl; //@1
continue; continue;
} }
this->reachedTerminal[anotherTerminal]=0; this->reachedTerminal[anotherTerminal]=0;
// std::cout<<"anotherTerminal"<<anotherTerminal.toStdString()<<std::endl;//@1 // std::cout<<"anotherTerminal"<<anotherTerminal.toStdString()<<std::endl;//@1
Terminal *anotherTerminalP=static_cast<Terminal *>(ht[anotherTerminal]); Terminal *anotherTerminalP=static_cast<Terminal *>(ht[anotherTerminal]);
QString ce; QString ce;
ce=anotherTerminalP->getConductingEquipment(); ce=anotherTerminalP->getConductingEquipment();
// std::cout<<ce.toStdString()<<"from "<<anotherTerminal.toStdString() <<std::endl;//@1 // std::cout<<ce.toStdString()<<"from "<<anotherTerminal.toStdString() <<std::endl;//@1
QPair<QString,QString> fromTo;
QString terminalA;
QString terminalB;
//通过ACSegmentLine的ID来找Terminal。下同。
if(ce.startsWith("AC")) if(ce.startsWith("AC"))
{ {
foundCate=true;
QString acID=ce; QString acID=ce;
QPair<QString,QString> fromTo;
fromTo.first=node; fromTo.first=node;
fromTo.second=acID; fromTo.second=acID;
this->branch.push_back(fromTo);
//通过ACSegmentLine的ID来找Terminal。下同。
ACLineSegment *AC=static_cast<ACLineSegment *>(ht[acID]); ACLineSegment *AC=static_cast<ACLineSegment *>(ht[acID]);
if(!AC) if(!AC)
{ {
// std::cout<<"can not find "<<acID.toStdString()<<std::endl;//@1 // std::cout<<"can not find "<<acID.toStdString()<<std::endl;//@1
continue; continue;
} }
QString terminalA;
QString terminalB;
terminalA=AC->getTerminalA(); terminalA=AC->getTerminalA();
terminalB=AC->getTerminalB(); terminalB=AC->getTerminalB();
QString nextTerminal; std::cout<<"find"<<AC->getID().toStdString()<<std::endl;
nextTerminal=(terminalA==anotherTerminal)?terminalB:terminalA; foundCate=true;
// std::cout<<"new Terminal"<<nextTerminal.toStdString()<<std::endl;//@1
Terminal *nextTerminalP=static_cast<Terminal *>(ht[nextTerminal]);
if(!nextTerminalP)
{
// std::cout<<"can not terminal "<<nextTerminal.toStdString()<<std::endl;//@1
continue;
}
QString nextNode=nextTerminalP->getConnectivityNode();
// std::cout<<"next node"<<nextNode.toStdString()<<"from"<<nextTerminal.toStdString()<<std::endl;//@1
this->startWithNode(nextNode);
} }
if(ce.startsWith("SW")) if(ce.startsWith("SW"))
{ {
foundCate=true;
QString swID=ce; QString swID=ce;
QPair<QString,QString> fromTo;
fromTo.first=node; fromTo.first=node;
fromTo.second=swID; fromTo.second=swID;
this->branch.push_back(fromTo);
Breaker *SW=static_cast<Breaker *>(ht[swID]); Breaker *SW=static_cast<Breaker *>(ht[swID]);
if(!SW) if(!SW)
{ {
// std::cout<<"can not SW "<<swID.toStdString()<<std::endl;//@1 // std::cout<<"can not SW "<<swID.toStdString()<<std::endl;//@1
continue; continue;
} }
QString terminalA;
QString terminalB;
terminalA=SW->getTerminalA(); terminalA=SW->getTerminalA();
terminalB=SW->getTerminalB(); terminalB=SW->getTerminalB();
// std::cout<<"terminalA"<<terminalA.toStdString()<<std::endl;//@1 std::cout<<"find"<<SW->getID().toStdString()<<std::endl;
// std::cout<<"terminalB"<<terminalB.toStdString()<<std::endl;//@1 foundCate=true;
QString nextTerminal;
nextTerminal=(terminalA==anotherTerminal)?terminalB:terminalA;
Terminal *nextTerminalP=static_cast<Terminal *>(ht[nextTerminal]);
if(!nextTerminalP)
{
// std::cout<<"can not terminal "<<nextTerminal.toStdString()<<std::endl;//@1
continue;
}
QString nextNode=nextTerminalP->getConnectivityNode();
// std::cout<<"next node"<<nextNode.toStdString()<<"from"<<nextTerminal.toStdString()<<std::endl;//@1
this->startWithNode(nextNode);
} }
if(ce.startsWith("BS")) if(ce.startsWith("BS"))
{ {
continue; continue;
} }
if(!foundCate)
// if(ce.startsWith("SW"))
// {
// foundCate=true;
// QPair<QString,QString> fromTo;
// this->branch.push_back(fromTo);
// QString terminalA;
// QString terminalB;
// // std::cout<<"terminalA"<<terminalA.toStdString()<<std::endl;//@1
// // std::cout<<"terminalB"<<terminalB.toStdString()<<std::endl;//@1
// QString nextTerminal;
// nextTerminal=(terminalA==anotherTerminal)?terminalB:terminalA;
// Terminal *nextTerminalP=static_cast<Terminal *>(ht[nextTerminal]);
// if(!nextTerminalP)
// {
// // std::cout<<"can not terminal "<<nextTerminal.toStdString()<<std::endl;//@1
// continue;
// }
// QString nextNode=nextTerminalP->getConnectivityNode();
// // std::cout<<"next node"<<nextNode.toStdString()<<"from"<<nextTerminal.toStdString()<<std::endl;//@1
// this->startWithNode(nextNode);
// }
if(foundCate)
{
this->branch.push_back(fromTo);
QString nextTerminal;
nextTerminal=(terminalA==anotherTerminal)?terminalB:terminalA;
// std::cout<<"new Terminal"<<nextTerminal.toStdString()<<std::endl;//@1
Terminal *nextTerminalP=static_cast<Terminal *>(ht[nextTerminal]);
if(!nextTerminalP)
{
// std::cout<<"can not terminal "<<nextTerminal.toStdString()<<std::endl;//@1
continue;
}
QString nextNode=nextTerminalP->getConnectivityNode();
// std::cout<<"next node"<<nextNode.toStdString()<<"from"<<nextTerminal.toStdString()<<std::endl;//@1
this->startWithNode(nextNode);
}
else
{ {
std::cout<<"not found cate "<<ce.toStdString()<<std::endl; std::cout<<"not found cate "<<ce.toStdString()<<std::endl;
continue; continue;