void MergeFrame(xxFrame newFrame, int destParentId) { xxFrame srcParent = new xxFrame(); srcParent.InitChildren(1); srcParent.AddChild(newFrame); xxFrame destParent; if (destParentId < 0) { destParent = new xxFrame(); destParent.InitChildren(1); destParent.AddChild(Parser.Frame); } else { destParent = Frames[destParentId]; } MergeFrame(srcParent, destParent); if (destParentId < 0) { Parser.Frame = srcParent[0]; srcParent.RemoveChild(0); } Frames.Clear(); Meshes.Clear(); InitFrames(Parser.Frame); }
void MergeFrame(xxFrame srcParent, xxFrame destParent) { for (int i = 0; i < destParent.Count; i++) { var dest = destParent[i]; for (int j = 0; j < srcParent.Count; j++) { var src = srcParent[j]; if (src.Name == dest.Name) { MergeFrame(src, dest); srcParent.RemoveChild(j); destParent.RemoveChild(i); destParent.InsertChild(i, src); break; } } } if (srcParent.Name == destParent.Name) { while (destParent.Count > 0) { var dest = destParent[0]; destParent.RemoveChild(0); srcParent.AddChild(dest); } } else { while (srcParent.Count > 0) { var src = srcParent[0]; srcParent.RemoveChild(0); destParent.AddChild(src); } } }