bool Prepare::Initial(string xmlPath)
{
TiXmlDocument* Document = new TiXmlDocument();
if (!Document->LoadFile(xmlPath.c_str(), TIXML_ENCODING_UNKNOWN))
{
cout << "无法加载xml文件!" << endl;
cin.get();
return false;
}
TiXmlElement* RootElement = Document->RootElement(); //根节点
TiXmlAttribute *FirstAtt = RootElement->FirstAttribute();
projectName = FirstAtt->Value();//读取工程名
FirstAtt = FirstAtt->Next(); //下一个属性
worker = FirstAtt->Value();//读取工作人员
FirstAtt = FirstAtt->Next(); //下一个属性
date = FirstAtt->Value();//读取工作时间
FirstAtt = FirstAtt->Next(); //下一个属性
simulationType = FirstAtt->Value();//读取分析类型
TiXmlElement* NextElement = RootElement->FirstChildElement(); //根节点下的第一个节点层
while (NextElement != NULL) //判断有没有读完
{
if (NextElement->ValueTStr() == "Workbench") //读到Workbench节点
{
TiXmlElement* ModelElement = NextElement->FirstChildElement();
if (ModelElement->ValueTStr() =="Model")//读取Model节点
{
TiXmlElement* ModeFormat = ModelElement->FirstChildElement();
modelFormat = ModeFormat->GetText();
TiXmlElement* ModePath = ModeFormat->NextSiblingElement();
modelPath = ModePath->GetText();
}
ModelElement = ModelElement->NextSiblingElement();
if (ModelElement->ValueTStr() == "Material")
{
TiXmlElement* MaterialPath = ModelElement->FirstChildElement();
materialInfoPath = MaterialPath->GetText();
}
}
NextElement = NextElement->NextSiblingElement();
if (NextElement->ValueTStr() == "MultypleSys")
{
TiXmlElement* NameSelection = NextElement->FirstChildElement();
while (NameSelection != NULL)
{
if (NameSelection->ValueTStr() == "NameSelection")//读取Nameselection的内容
{
TiXmlElement* SelectionInfo = NameSelection->FirstChildElement();
while (SelectionInfo!=NULL)
{
TiXmlAttribute *FirstAtt = SelectionInfo->FirstAttribute();
nameSel_struct.selId = FirstAtt->Value();//Id
FirstAtt = FirstAtt->Next(); //下一个属性
nameSels_struct.nameSel_name = FirstAtt->Value();//读取名称
TiXmlElement* subSelectionInfo = SelectionInfo->FirstChildElement();
while (subSelectionInfo != NULL)
{
TiXmlAttribute *FirstAtt = subSelectionInfo->FirstAttribute();
nameSel_struct.selPartId = FirstAtt->Value();//selpartid
FirstAtt = FirstAtt->Next(); //下一个属性
nameSel_struct.nameSelNo = FirstAtt->Value();
FirstAtt = FirstAtt->Next(); //下一个属性
nameSel_struct.partName = FirstAtt->Value();
nameSels_struct.singleNameSelections.push_back(nameSel_struct);//将这个结构体存入vector中
nameSel_struct.reset();
subSelectionInfo = subSelectionInfo->NextSiblingElement();
}
NameSelectionInfos.push_back(nameSels_struct);
nameSels_struct.reset();
SelectionInfo = SelectionInfo->NextSiblingElement();
}
}
NameSelection = NameSelection->NextSiblingElement();
if (NameSelection->ValueTStr() == "MaterailSet")//读取材料设置节点
{
TiXmlElement* MaterialExcel = NameSelection->FirstChildElement();
materialReflectExcelPath = MaterialExcel->GetText();
}
NameSelection = NameSelection->NextSiblingElement();
if (NameSelection->ValueTStr() == "SimulationEnvironment")//读取材料设置节点
{
TiXmlElement* SimulitinType = NameSelection->FirstChildElement();
while (SimulitinType!=NULL)
{
FirstAtt = SimulitinType->FirstAttribute();
singlgeAns_struct.analysisName = FirstAtt->Value();//获取当前分析名称
TiXmlElement* boundaryElement = SimulitinType->FirstChildElement();
TiXmlElement* condition = boundaryElement->FirstChildElement();
if (boundaryElement->ValueTStr() == "BoundaryCondition")//边界条件信息
{
while (condition!=NULL)
{
FirstAtt = condition->FirstAttribute();
restrain_struct.restrainId = FirstAtt->Value();//获取约束ID
TiXmlElement* conditionPara = condition->FirstChildElement();
if (conditionPara->ValueTStr() == "ConditionType")//获取约束类型信息
{
FirstAtt = conditionPara->FirstAttribute();
restrain_struct.restrain_type = FirstAtt->Value();//获取约束ID
FirstAtt = FirstAtt->Next();
restrain_struct.value = FirstAtt->Value();
}
conditionPara = conditionPara->NextSiblingElement();
if (conditionPara->ValueTStr() == "RelateBody")//获取几何体信息
{
FirstAtt = conditionPara->FirstAttribute();
restrain_struct.geoInfo.body_No = FirstAtt->Value();//获取体编号
FirstAtt = FirstAtt->Next();
restrain_struct.geoInfo.body_name = FirstAtt->Value();//获取体名称
}
conditionPara = conditionPara->NextSiblingElement();
if (conditionPara->ValueTStr() == "GeoType")//获取几何体信息
{
FirstAtt = conditionPara->FirstAttribute();
restrain_struct.geoInfo.element_type = FirstAtt->Value();//获取体编号
FirstAtt = FirstAtt->Next();
restrain_struct.geoInfo.units = FirstAtt->Value();//获取体名称
}
conditionPara = conditionPara->NextSiblingElement();
if (conditionPara->ValueTStr() == "ElementCoordinate")//获取几何体信息
{
FirstAtt = conditionPara->FirstAttribute();
restrain_struct.geoInfo.coordinates = FirstAtt->Value();//获取
}
singlgeAns_struct.vector_restrain.push_back(restrain_struct);
restrain_struct.reset();
condition = condition->NextSiblingElement();
}
}
boundaryElement = boundaryElement->NextSiblingElement();
TiXmlElement* load = boundaryElement->FirstChildElement();
if (boundaryElement->ValueTStr() == "LoadConfigure")//载荷信息
{
while (load != NULL)
{
FirstAtt = load->FirstAttribute();
load_struct.loadId = FirstAtt->Value();
TiXmlElement* loadPara = load->FirstChildElement();
if (loadPara->ValueTStr() == "LoadType")
{
FirstAtt = loadPara->FirstAttribute();
load_struct.load_type = FirstAtt->Value();
FirstAtt = FirstAtt->Next();
load_struct.direction = FirstAtt->Value();
FirstAtt = FirstAtt->Next();
load_struct.value = FirstAtt->Value(); //如果是随机振动和响应谱分析此处参数为对应谱的路径参数
}
loadPara = loadPara->NextSiblingElement();
if (loadPara->ValueTStr() == "RelateBody")//获取几何体信息
{
FirstAtt = loadPara->FirstAttribute();
load_struct.geoInfo.body_No = FirstAtt->Value();//获取体编号
FirstAtt = FirstAtt->Next();
load_struct.geoInfo.body_name = FirstAtt->Value();
}
loadPara = loadPara->NextSiblingElement();
if (loadPara->ValueTStr() == "GeoType")//获取几何体信息
{
FirstAtt = loadPara->FirstAttribute();
load_struct.geoInfo.element_type = FirstAtt->Value();//获取体编号
FirstAtt = FirstAtt->Next();
load_struct.geoInfo.units = FirstAtt->Value();
}
loadPara = loadPara->NextSiblingElement();
if (loadPara->ValueTStr() == "ElementCoordinate")//获取几何体信息
{
FirstAtt = loadPara->FirstAttribute();
load_struct.geoInfo.coordinates = FirstAtt->Value();//获取
}
singlgeAns_struct.vector_load.push_back(load_struct);
load_struct.reset();
load = load->NextSiblingElement();
}
}
boundaryElement = boundaryElement->NextSiblingElement();
TiXmlElement* post = boundaryElement->FirstChildElement();
if (boundaryElement->ValueTStr() == "PostConfigure")//后处理信息
{
while (post != NULL)
{
FirstAtt = post->FirstAttribute();
post_struct.postId = FirstAtt->Value();
TiXmlElement* postPara = post->FirstChildElement();
if (postPara->ValueTStr() == "ResultType")
{
TiXmlAttribute *FirstAtt = postPara->FirstAttribute();
post_struct.result_type = FirstAtt->Value();
}
postPara = postPara->NextSiblingElement();
if (postPara->ValueTStr() == "RelateBody")//获取几何体信息
{
FirstAtt = postPara->FirstAttribute();
post_struct.geoInfo.body_No = FirstAtt->Value();//获取体编号
FirstAtt = FirstAtt->Next();
post_struct.geoInfo.body_name = FirstAtt->Value();
}
postPara = postPara->NextSiblingElement();
if (postPara->ValueTStr() == "GeoType")//获取几何体信息
{
FirstAtt = postPara->FirstAttribute();
post_struct.geoInfo.element_type = FirstAtt->Value();//获取体编号
FirstAtt = FirstAtt->Next();
post_struct.geoInfo.units = FirstAtt->Value();
}
postPara = postPara->NextSiblingElement();
if (postPara->ValueTStr ()== "ElementCoordinate")//获取几何体信息
{
FirstAtt = postPara->FirstAttribute();
post_struct.geoInfo.coordinates = FirstAtt->Value();
}
singlgeAns_struct.vector_post.push_back(post_struct);
post_struct.reset();
post = post->NextSiblingElement();
}
}
vector_AllInfos.push_back(Pair(singlgeAns_struct.analysisName, singlgeAns_struct));
singlgeAns_struct.reset();
SimulitinType = SimulitinType->NextSiblingElement();
}
NameSelection=NameSelection->NextSiblingElement();
}
}
}
NextElement = NextElement->NextSiblingElement();
}
return true;
}