public static void MergeFrame(xxFrame oldFrame, xxFrame newFrame) { for (int i = oldFrame.Count - 1; i >= 0; i--) { xxFrame oldChild = oldFrame[i]; xxFrame newChild = null; for (int j = 0; j < newFrame.Count; j++) { if (oldChild.Name == newFrame[j].Name) { newChild = newFrame[j]; break; } } if (newChild == null) { newFrame.InsertChild(0, oldChild.Clone(true, true)); } else { if ((newChild.Mesh == null) && (oldChild.Mesh != null)) { newChild.Mesh = oldChild.Mesh.Clone(true, true, true); newChild.Bounds = oldChild.Bounds; } CopyUnknowns(oldChild, newChild); MergeFrame(oldChild, newChild); } } }
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); } } }