private MapNodeTube ConstructTubeTree(Transform root15, Transform baseSrc, Transform baseDstRedu) { Queue <MapNode> bfsQSrc = new Queue <MapNode>(); Queue <MapNodeTube> bfsQDst = new Queue <MapNodeTube>(); Debug.Assert(m_rootOut.name == root15.name); MapNodeTube rootTube = new MapNodeTube(m_rootOut, root15, baseSrc, baseDstRedu); bfsQSrc.Enqueue(m_rootOut); bfsQDst.Enqueue(rootTube); //bind tree(m_rootOut) with transform tree(rootDstRedu) while (bfsQSrc.Count > 0) { Debug.Assert(bfsQDst.Count > 0); MapNode p_nodeOut = bfsQSrc.Dequeue(); MapNodeTube p_nodeTube = bfsQDst.Dequeue(); p_nodeTube.children = new MapNodeTube[p_nodeOut.children.Count]; for (int i_childSrc = 0; i_childSrc < p_nodeOut.children.Count; i_childSrc++) { MapNode c_nodeOut = (MapNode)p_nodeOut.children[i_childSrc]; Debug.Assert(null != p_nodeTube.nodeOut.Find(c_nodeOut.name)); MapNodeTube c_nodeTube = new MapNodeTube(c_nodeOut, p_nodeTube.nodeOut.Find(c_nodeOut.name), baseSrc, baseDstRedu); p_nodeTube.children[i_childSrc] = c_nodeTube; bfsQSrc.Enqueue(c_nodeOut); bfsQDst.Enqueue(c_nodeTube); } } return(rootTube); }
public new void Initialize(Transform rootSrc, Transform rootDstIgnore, Transform rootDstRedu , Transform baseSrc, Transform baseDstIgnore, Transform baseDstRedu , string[] j_ori, string[] j_redu) { base.Initialize(rootSrc, j_ori, j_redu); m_rootTubeRedu = ConstructTubeTree(rootDstRedu, baseSrc, baseDstRedu); m_rootTubeIgnore = ConstructTubeTree(rootDstIgnore, baseSrc, baseDstIgnore); }
private void UpdateTubeCmp(MapNodeTube tube15) { Queue <MapNodeTube> bfsQ = new Queue <MapNodeTube>(); bfsQ.Enqueue(tube15); while (bfsQ.Count > 0) { MapNodeTube p_tube = bfsQ.Dequeue(); p_tube.UpdateCmp(); for (int i_child = 0; i_child < p_tube.children.Length; i_child++) { MapNodeTube c_tube = p_tube.children[i_child]; bfsQ.Enqueue(c_tube); } } }