private void Shadow_Delete(LINE lpa, PO lpa_pk, LINE lshadow, PO ls_pk) { /* * 将影子点的边转移到父点中去 * shap是影子点,shapflag是影子点的标记点 * pap是父点,papflag是父点的标记点 */ util u1 = new util(); if (lpa.sl.Head.Data.Belongme(lpa_pk)) {//如果标记点在父点的首边上 if (lshadow.sl.Head.Data.Belongme(ls_pk)) { info.Insert("case1"); #region case1 Node <SURFACE> sn = lshadow.sl.Head; while (sn != null) { //用父点换掉边中的影子点 lpa.sl.Head_Insert(sn.Data); sn = sn.Next; } #endregion case1 } else { info.Insert("case2"); #region case2 LinkList <SURFACE> st = new LinkList <SURFACE>(); Node <SURFACE> sn = lshadow.sl.Head; while (sn != null)//将shap的线链反序 { st.Head_Insert(sn.Data); sn = sn.Next; } sn = st.Head; while (sn != null) { lpa.sl.Head_Insert(sn.Data); sn = sn.Next; } #endregion case2 } } else {//如果标记点在父点的尾边上 if (lshadow.sl.Head.Data.Belongme(ls_pk)) { info.Insert("case3"); #region case3 Node <SURFACE> sn = lshadow.sl.Head; while (sn != null) { //用父点换掉边中的影子点 lpa.sl.Insert(sn.Data); sn = sn.Next; } #endregion } else { info.Insert("case4"); #region case4 LinkList <SURFACE> st = new LinkList <SURFACE>(); Node <SURFACE> sn = lshadow.sl.Head; while (sn != null)//将shap的线链反序 { st.Head_Insert(sn.Data); sn = sn.Next; } sn = st.Head; while (sn != null) { lpa.sl.Insert(sn.Data); sn = sn.Next; } #endregion } } lpa.p1.ll.Delete(lshadow); lpa.p2.ll.Delete(lshadow); sn_current = lpa.sl.Last; }
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); } }