public bool InitTopoFromXml() { Log.InfoStart(LogTags.DbInit, "InitTopoFromXml"); try { string initFile = InitPaths.GetInitInfo(); if (!File.Exists(initFile)) { Log.Error("InitTopoFromXml找不到文件:" + initFile); return(false); } InitInfo initInfo = XmlSerializeHelper.LoadFromFile <InitInfo>(initFile); if (initInfo == null) { Log.Error("解析失败:" + XmlSerializeHelper.ExceptionText); } TopoInfo topoInfo = initInfo.TopoInfo; //if(!string.IsNullOrEmpty(parkName)) // for (int i = 0; i < topoInfo.Children.Count; i++) // { // var child = topoInfo.Children[i]; // if (child.Name != parkName) // { // topoInfo.Children.RemoveAt(i); // i--; // } // } var nodes = topoInfo.GetAllTopos(); foreach (TopoInfo node in nodes) { if (node.Type != AreaTypes.园区) { if (node.BoundInfo != null) { if (node.BoundInfo.Points != null) { foreach (PointInfo point in node.BoundInfo.Points) { LocationContext.Transform(point);//设置位置偏移 } } } } } foreach (TopoInfo node in nodes) { if (node.Type == AreaTypes.大楼) { if (node.IsCommon == true) { var floor1 = node.Children[0]; if (floor1.IsCommon == true) { List <TopoInfo> commonList = floor1.Children.FindAll(i => i.IsCommon); for (int i = 1; i < node.Children.Count; i++)//拷贝第一层的柱子给下面所有层 { var floor = node.Children[i]; IList <TopoInfo> cloneList = ConvertHelper.CloneObjectList(commonList); foreach (TopoInfo item in cloneList) { floor.Children.Add(item); } } } } } } InitTopo(topoInfo); Log.InfoEnd("InitTopoFromXml"); return(true); } catch (Exception ex) { Log.Error(LogTags.DbInit, "InitTopoFromXml:" + ex); Log.InfoEnd("InitTopoFromXml"); return(false); } }