#include "topologyrecorder.h" #include TopologyRecorder::TopologyRecorder(const QHash& elementHT, QObject *parent):eleHT(elementHT) { } TopologyRecorder::~TopologyRecorder() { std::cout<<"total tf"<tfs.length()< &ht=this->eleHT; Substation *sfd=static_cast(ht[substatinID]); if(sfd==NULL) { std::cout<<"can not find"<getSubstationMemberOf_Feeder(); return feederID=="FD-2056"||sfd->getNamingDescription()=="V馈线站"; } return false; } bool TopologyRecorder::startWithNode(const QString& node) { if(node=="") { return true; } const QHash &ht=this->eleHT; QString anotherTerminal; QVector anotherTerminalVector; anotherTerminalVector=this->nodeToTerminal.value(node);//一个Node可以找到多个与之相连的Terminal for(int atI=0;atIreachedTerminal.contains(anotherTerminal)) { continue; } this->reachedTerminal[anotherTerminal]=0; Terminal *anotherTerminalP=static_cast(ht[anotherTerminal]); QString ce; ce=anotherTerminalP->getConductingEquipment(); QPair fromTo; QString terminalA; QString terminalB; //通过ACSegmentLine的ID来找Terminal。下同。 if(ce.startsWith("AC")) { QString acID=ce; fromTo.first=node; fromTo.second=acID; ACLineSegment *AC=static_cast(ht[acID]); if(!AC) { continue; } terminalA=AC->getTerminalA(); terminalB=AC->getTerminalB(); std::cout<<"find"<getID().toStdString()<getNamingDescription().toStdString()<getName()=="Breaker") { std::cout<getName().toStdString()<(ht[swID]); if(!SW) { continue; } //显示开关状态 if(SW->getOpenState()==true) { std::cout<<"sw "<getNamingDescription().toStdString()<<"is open"<getNamingDescription().toStdString()<<"is close"<getTerminalA(); terminalB=SW->getTerminalB(); std::cout<<"find"<getID().toStdString()<getName()=="Disconnector") { std::cout<getName().toStdString()<(ht[disConID]); //先判断一下是不是需要的Disconnector QString container=Dis->getEquipmentMemberOf_EquipmentContainer(); if(!this->isEquipmentNeeded(container)) { std::cout<<"Dissw not belong "<getOpenState()==true) { std::cout<<"Dissw "<getNamingDescription().toStdString()<<"is open"<getNamingDescription().toStdString()<<"is close"<getTerminalA(); terminalB=Dis->getTerminalB(); std::cout<<"find"<getID().toStdString()<(ht[ce]); if(bs==NULL) { std::cout<<"not find bussection"<getEquipmentMemberOf_EquipmentContainer(); Substation *sfd=static_cast(ht[container]); if(sfd==NULL) { std::cout<<"can not find"<getNamingDescription().toStdString()<(ht[tfID]); std::cout<<"TF"<getNamingDescription().toStdString()<getEquipmentMemberOf_EquipmentContainer(); if(this->isEquipmentNeeded(equipmentContainer)) { this->tfs.push_back(tf->getNamingDescription()); fromTo.first=node; fromTo.second=tfID; foundEle=tf; } else { std::cout<getNamingDescription().toStdString()<<"not belong"<(foundEle),this); this->cimExporter.add(fromTo,static_cast(branch)); break; case TopologyRecorder::Type::BREAKER: branch=new Switch(fromTo,this); this->cimExporter.add(fromTo,static_cast(branch)); break; case TopologyRecorder::Type::DISCONNECTOR: branch=new Switch(fromTo,this); this->cimExporter.add(fromTo,static_cast(branch)); break; case TopologyRecorder::Type::TF: branch=new Transformer(fromTo,static_cast(foundEle),this); this->cimExporter.add(fromTo,static_cast(branch)); break; default: break; } QString nextTerminal; nextTerminal=(terminalA==anotherTerminal)?terminalB:terminalA; Terminal *nextTerminalP=static_cast(ht[nextTerminal]); if(!nextTerminalP) { continue; } QString nextNode=nextTerminalP->getConnectivityNode(); this->startWithNode(nextNode); } else { std::cout<<"not found cate "<