281 lines
7.1 KiB

#include "pch.h" // use stdafx.h in Visual Studio 2017 and earlier
#include "ReadXML.h"
string ini = "--";
map<pair<P, P>, Bund> wire_node;
vector<Bund> wire_pairs;
map<string, P> mp;
map<string, Wire> wiremap;
map<string, string> pinidmap;
map<string, Pin> pinmap;
int cnt = 0;
// 针脚
Pin::Pin(string name1, string id1)
{
name = name1;
id = id1;
}
Pin::Pin(string name1, string id1, P coord1)
{
name = name1;
id = id1;
coord = coord1;
}
Pin::Pin()
{
name = id = "";
}
// 逻辑上的导线
Wire::Wire(string name1, Pin sn1, Pin en1)
{
name = name1;
sn = sn1;
en = en1;
}
Wire::Wire()
{
name = "";
}
// 逻辑上的线束
Bund::Bund()
{
dia = length = 0;
}
9 months ago
// void init_readxml()
// {
// wire_node.clear();
// wire_pairs.clear();
// mp.clear();
// wiremap.clear();
// pinidmap.clear();
// pinmap.clear();
// cnt = 0;
// }
//
// void producePin(TiXmlElement* pin){
// pinidmap[pin->Attribute("id")]=pin->Attribute("name");
//}
// string safegave(TiXmlElement* pEle,const char * t){
// if(pEle->Attribute(t)==NULL)return ini;
// else {
// string v=pEle->Attribute(t);
// if(v=="")return ini;
// else return v;
// }
//}
//
// TiXmlElement* GetNodePointerByName(TiXmlElement* pRootEle, const char* strNodeName)
//{
// // if equal root node then return
// if (0 == strcmp(strNodeName, pRootEle->Value()))
// {
// return pRootEle;
// }
//
// TiXmlElement* pEle = pRootEle;
// for (pEle = pRootEle->FirstChildElement(); pEle; pEle = pEle->NextSiblingElement())
// {
// // recursive find sub node return node pointer
// if (0 != strcmp(pEle->Value(), strNodeName))
// {
// TiXmlElement* res=GetNodePointerByName(pEle,strNodeName);
// if(res!=NULL)return res;
// }
// else return pEle;
// }
//
// return NULL;
//}
// TiXmlElement* GetNextNodePointerByName(TiXmlElement* pRootEle, const char* strNodeName)
//{
// // if equal root node then return
// TiXmlElement* pEle;
// for (pEle = pRootEle->NextSiblingElement(); pEle; pEle = pEle->NextSiblingElement())
// {
// // recursive find sub node return node pointer
// if (0 == strcmp(pEle->Value(), strNodeName))return pEle;
// }
// return NULL;
//}
// void produceConnector(TiXmlElement* pcon){
// Connector con;
// con.id=pcon->Attribute("id");
// con.name=pcon->Attribute("name");
// con.partnumber=pcon->Attribute("partnumber");
// con.coord=mp[con.name];
// con.dir=P(0,0,0);
// connectorNum++;
// con.ID=connectorNum;
// con.coord.type=3;
// con.coord.ref=connectorNum;
//
// connectors[connectorNum]=con;
//
// TiXmlElement* pEle;
// TiXmlElement* p;
// for (pEle = pcon->FirstChildElement(); pEle; pEle = pEle->NextSiblingElement()){
// if(strcmp(pEle->Value(), "backshell")==0){
// for(p=pEle->FirstChildElement();p;p = p->NextSiblingElement()){
// if(strcmp(p->Value(), "termination")==0){
// string id=p->Attribute("id");
// string name=p->Attribute("name");
//
// pinmap[id]=Pin(name,id,con.coord);
// break;
// }
// }
// break;
// }
// }
// for (pEle = pcon->FirstChildElement(); pEle; pEle = pEle->NextSiblingElement()){
// if(strcmp(pEle->Value(), "pin")==0){
// string id=pEle->Attribute("id");
// string name=pEle->Attribute("name");
// pinmap[id]=Pin(name,id,con.coord);
// }
// }
//
//
//}
//
// void produceWire(TiXmlElement* pwire){
// Pin sn,en;
// TiXmlElement* pconnection=GetNodePointerByName(pwire,"connection");
// if(pconnection!=NULL){
// sn=pinmap[pconnection->Attribute("pinref")];
// TiXmlElement* pconnection2=GetNextNodePointerByName(pconnection,"connection");
// if(pconnection2!=NULL)en=pinmap[pconnection2->Attribute("pinref")];
// else en=sn;
// }
// Wire wire;
// wire.sn=sn;
// wire.en=en;
// wire.name=pwire->Attribute("name");
// if(pwire->Attribute("outsidediameter")!=NULL){
// wire.diameter=atof(pwire->Attribute("outsidediameter"));
// }
// else if(pwire->Attribute("wirecsa")!=NULL){
// wire.diameter=atof(pwire->Attribute("wirecsa"))*2;
// }
// else wire.diameter=0.4;
// wiremap[wire.name]=wire;
// if(sn.coord==P(0,0,0)||en.coord==P(0,0,0)||sn.coord==en.coord)return;
//
// pair<P,P> p=make_pair(sn.coord,en.coord);
// pair<P,P> pr=make_pair(en.coord,sn.coord);
// if(wire_node.find(p)!=wire_node.end()){
// Bund bd=wire_node[p];
// bd.wirelist.push_back(wire);
// bd.d.push_back(wire.diameter);
// wire_node[p]=bd;
// }
// else if(wire_node.find(pr)!=wire_node.end()){
// Bund bd=wire_node[pr];
// bd.wirelist.push_back(wire);
// bd.d.push_back(wire.diameter);
// wire_node[pr]=bd;
// }
// else {
// Bund bd;
// bd.start=sn.coord;
// bd.goal=en.coord;
// bd.wirelist.push_back(wire);
// bd.d.push_back(wire.diameter);
// wire_node[p]=bd;
//
// }
//
//}
// void produce(TiXmlElement* pEle){
// if(strcmp(pEle->Value(),"wire")==0)produceWire(pEle);
// else produceConnector(pEle);
// return;
//}
// void ProduceNodePointerByName(TiXmlElement* pRootEle, const char* strNodeName)
//{
// // if equal root node then return
// if (0 == strcmp(strNodeName, pRootEle->Value()))
// {
// produce(pRootEle);
// return;
// }
//
// TiXmlElement* pEle = pRootEle;
// for (pEle = pRootEle->FirstChildElement(); pEle; pEle = pEle->NextSiblingElement())
// {
// // recursive find sub node return node pointer
// if (0 != strcmp(pEle->Value(), strNodeName))
// {
// ProduceNodePointerByName(pEle,strNodeName);
// }
// else {
// produce(pEle);
// }
// }
//
// return;
//}
// void readxml(const char * xml,const char * connectorFile){
// init_readxml();
// ifstream infile;
// infile.open(connectorFile);//XXXX是csv的路径
//
// string s;
//
// while(getline(infile,s))
// {
// //cout<<s<<endl;
// istringstream sin(s); //将整行字符串line读入到字符串流istringstream中
// vector<string> fields; //声明一个字符串向量
// string field;
// while (getline(sin, field, ',')) //将字符串流sin中的字符读入到field字符串中,以逗号为分隔符
// {
// fields.push_back(field); //将刚刚读取的字符串添加到向量fields中
// }
// //cout<<fields[0]<<endl;
// //cout<<"read_xml getline"<<endl;
// //cout<<fields[0]<<" "<<fields[1]<<" "<<fields[2]<<" "<<fields[3]<<endl;
// mp[fields[0]]=P(atof(fields[1].c_str()),atof(fields[2].c_str()),atof(fields[3].c_str()));
// }
//
// TiXmlDocument* pDoc = new TiXmlDocument(xml);
// if(!(pDoc->LoadFile()))return;
// //pDoc->Print();
// //获得根元素,即Persons。
//
// //cout<<"connectivity"<<endl<<endl;
// TiXmlElement *RootElement = pDoc->RootElement();
// TiXmlElement * connectivity=GetNodePointerByName(RootElement, "connectivity");
// //cout<<(connectivity->Value())<<endl;
// //cout<<(connectivity->Attribute("id")==NULL)<<endl;
// ProduceNodePointerByName(connectivity,"connector");
// ProduceNodePointerByName(connectivity,"splice");
// ProduceNodePointerByName(connectivity,"wire");
// for(map< pair<P,P> ,Bund>::iterator it=wire_node.begin();it!=wire_node.end();it++){
// wire_pairs.push_back(it->second);
//
// }
// for(int i=0;i<wire_pairs.size();i++){
// Bund &bd=wire_pairs[i];
// for(int j=0;j<bd.d.size();j++){
// bd.dia+=(bd.d[j])*(bd.d[j]);
// //cout<<bd.d[j]<<" ";
// }
// bd.dia=sqrt(bd.dia);
// for(int j=0;j<bd.wirelist.size();j++){
// Wire & wire=bd.wirelist[j];
// bd.wirenamelist.push_back(wire.name);
// }
// }
// cout<<"read xml Finish"<<endl;
//
//}