private LINE Seek_line_in_initial_line(PO p1, PO p2) { Node <LINE> ln = initial_ll.Head; if (initial_ll.Head == null) { return(null); } util u1 = new util(); while (ln != null) { if (ln.Data.Po_insideme(p1) && ln.Data.Po_insideme(p2)) { initial_ll.Delete(ln.Data); return(ln.Data); } ln = ln.Next; } return(null); }
private void shadowpo(PO shap, PO shapflag, PO pap, PO papflag) { /* * 将影子点的边转移到父点中去 * shap是影子点,shapflag是影子点的标记点 * pap是父点,papflag是父点的标记点 */ if (pap.ll.Head.Data.Po_insideme(papflag)) {//如果标记点在父点的首边上 if (shap.ll.Head.Data.Po_insideme(shapflag)) { #region case1 Node <LINE> lnt = shap.ll.Head; while (lnt != null) { //用父点换掉边中的影子点 lnt.Data.Po_insideme_and_changeit(pap); pap.ll.Head_Insert(lnt.Data); lnt = lnt.Next; } #endregion case1 } else { #region case2 LinkList <LINE> lt = new LinkList <LINE>(); Node <LINE> lnt = shap.ll.Head; while (lnt != null)//将shap的线链反序 { lt.Head_Insert(lnt.Data); lnt = lnt.Next; } lnt = lt.Head; while (lnt != null) { lnt.Data.Po_insideme_and_changeit(pap); pap.ll.Head_Insert(lnt.Data); lnt = lnt.Next; } #endregion case2 } } else {//如果标记点在父点的尾边上 if (shap.ll.Head.Data.Po_insideme(shapflag)) { #region case3 Node <LINE> lnt = shap.ll.Head; while (lnt != null) { lnt.Data.Po_insideme_and_changeit(pap); pap.ll.Insert(lnt.Data); lnt = lnt.Next; } #endregion case3 } else { #region case4 LinkList <LINE> lt = new LinkList <LINE>(); Node <LINE> lnt = shap.ll.Head; while (lnt != null)//将shap的线链反序 { lt.Head_Insert(lnt.Data); lnt = lnt.Next; } lnt = lt.Head; while (lnt != null) { lnt.Data.Po_insideme_and_changeit(pap); pap.ll.Insert(lnt.Data); lnt = lnt.Next; } #endregion case4 } } work_pl.Delete(shap); }
private void shadowPO(PO shap, PO shapflag, PO pap, PO papflag) { /* * 将影子点的边转移到父点中去 * shap是影子点,shapflag是影子点的标记点 * pap是父点,papflag是父点的标记点 */ util u1 = new util(); if (pap.ll.Head.Data.Po_insideme(papflag)) {//如果标记点在父点的首边上 if (shap.ll.Head.Data.Po_insideme(shapflag)) { #region case1 Node <LINE> lnt = shap.ll.Head; while (lnt != null) { //用父点换掉边中的影子点 lnt.Data.Po_insideme_and_changeit(pap); pap.ll.Head_Insert(lnt.Data); lnt = lnt.Next; } #endregion case1 } else { #region case2 LinkList <LINE> lt = new LinkList <LINE>(); Node <LINE> lnt = shap.ll.Head; while (lnt != null)//将shap的线链反序 { lt.Head_Insert(lnt.Data); lnt = lnt.Next; } lnt = lt.Head; while (lnt != null) { lnt.Data.Po_insideme_and_changeit(pap); pap.ll.Head_Insert(lnt.Data); lnt = lnt.Next; } #endregion case2 } } else {//如果标记点在父点的尾边上 if (shap.ll.Head.Data.Po_insideme(shapflag)) { shap.ToString(); #region case3 Node <LINE> lnt = shap.ll.Head; while (lnt != null) { lnt.Data.Po_insideme_and_changeit(pap); pap.ll.Insert(lnt.Data); lnt = lnt.Next; } #endregion case3 } else { #region case4 LinkList <LINE> lt = new LinkList <LINE>(); Node <LINE> lnt = shap.ll.Head; while (lnt != null)//将shap的线链反序 { lt.Head_Insert(lnt.Data); lnt = lnt.Next; } lnt = lt.Head; while (lnt != null) { lnt.Data.Po_insideme_and_changeit(pap); pap.ll.Insert(lnt.Data); lnt = lnt.Next; } #endregion case4 } } work_pl.Delete(shap); //如果此时父节点的尾边封闭,则开启其尾边相应方向 if (!pap.ll.Last.Data.negtive && !pap.ll.Last.Data.positive && pkey.key != 3) { Open_direction(pap.ll, pap); } }