doDelete(List <EM_EData> enData) { List <Handle> hDeletes = new List <Handle>(); foreach (var edata in enData) { hDeletes.Add(edata.h); } bool pass = false; foreach (EM_EData eData in enData) { if (pass) { return; } List <ObjectId> ids = null; ObjectId idEnt, idDict, idTxTop, idTxBot, idTxBot2, idLdr, idLdr1, idLdr2, idCgPnt1, idCgPnt2; List <Handle> handles = null; TypedValue[] tvs = eData.tvs; string nameApp = tvs[0].Value.ToString(); string nameObj, nameCmd; ObjectId id = ObjectId.Null; bool exists; TypedValue[] tvsTx; try { switch (nameApp) { case "AVG": ObjectId idDictGRADEDOCK = Dict.getNamedDictionary("GRADEDOCK", out exists); if (!exists) { continue; } Dict.delSubDict(idDictGRADEDOCK, tvs[2].Value.ToString()); break; case apps.lnkBubs: nameObj = tvs[1].Value.ToString(); if (nameObj == "TX") { BB_Events.deleteSmWoLdrs(tvs); } break; case apps.lnkCO: try { nameCmd = tvs[1].Value.ToString(); nameObj = tvs[2].Value.ToString(); switch (nameObj) { case "TX": idLdr = tvs.getObjectId(3); idTxBot = tvs.getObjectId(4); idTxBot2 = tvs.getObjectId(5); idCgPnt1 = tvs.getObjectId(10); xData.removeCmdXDataFromCogoPoint(idCgPnt1, nameApp, nameCmd); //remove xdata from point for this entry idLdr.delete(); idTxBot.delete(); idTxBot2.delete(); break; case "LDR": idTxTop = tvs.getObjectId(3); idTxBot = tvs.getObjectId(4); idTxBot2 = tvs.getObjectId(5); tvsTx = idTxTop.getXData(nameApp).AsArray(); idCgPnt1 = tvsTx.getObjectId(10); xData.removeCmdXDataFromCogoPoint(idCgPnt1, nameApp, nameCmd); //remove xdata from point for this entry idTxTop.delete(); idTxBot.delete(); idTxBot2.delete(); break; case "CogoPoint": foreach (TypedValue tv in tvs) { if (tv.TypeCode == 1005) { idTxTop = tv.Value.ToString().stringToHandle().getObjectId(); ResultBuffer rb = idTxTop.getXData(nameApp); TypedValue[] tvsTxTop = rb.AsArray(); tvsTxTop.deleteLinkedEnts(); idTxTop.delete(); } } break; } if (eData.objType == "MText") { idDict = Dict.getNamedDictionary(nameApp, out exists); Dict.delSubDict(idDict, eData.h.ToString()); } } catch (System.Exception ex) { BaseObjs.writeDebug(ex.Message + " EM_Delete.cs: line: 107"); } break; case apps.lnkDimPL: idLdr1 = tvs.getObjectId(11); idLdr2 = tvs.getObjectId(12); idLdr1.delete(); idLdr2.delete(); idDict = Dict.getNamedDictionary(nameApp, out exists); Dict.delSubDict(idDict, eData.h.ToString()); break; case apps.lnkGS: if (eData.objType == "CogoPoint") { for (int i = 2; i < tvs.Length; i++) { idTxTop = tvs.getObjectId(i); ResultBuffer rbTxt = idTxTop.getXData(apps.lnkGS); idTxTop.delete(); if (rbTxt == null) { continue; } TypedValue[] tvsTxt = rbTxt.AsArray(); idLdr = tvsTxt[3].getObjectId(); idLdr.delete(); handles = new List <Handle>(); handles.Add(tvsTxt[9].getObjectId().getHandle()); handles.Add(tvsTxt[10].getObjectId().getHandle()); handles.Remove(eData.h); idCgPnt1 = handles[0].getObjectId(); idCgPnt1.removeHandleFromXDataGS(apps.lnkGS, eData.h); } } if (eData.objType == "MText") { idLdr = tvs.getObjectId(3); idLdr.delete(); idCgPnt1 = tvs.getObjectId(9); idCgPnt1.removeHandleFromXDataGS(apps.lnkGS, eData.h); idCgPnt2 = tvs.getObjectId(10); idCgPnt2.removeHandleFromXDataGS(apps.lnkGS, eData.h); } break; case apps.lnkDP: break; case apps.lnkLD: try { if (tvs[2].Value.ToString() == "TX") { idLdr = tvs.getObjectId(3); idTxBot = tvs.getObjectId(4); if (!idLdr.IsErased && idLdr != ObjectId.Null) { idLdr.delete(); } if (!idTxBot.IsErased && idTxBot != ObjectId.Null) { idTxBot.delete(); } idDict = Dict.getNamedDictionary(nameApp, out exists); Dict.delSubDict(idDict, eData.h.ToString()); } if (tvs[2].Value.ToString() == "LDR") { idTxTop = tvs.getObjectId(3); if (!idTxTop.IsErased && idTxTop != ObjectId.Null) { Handle h = idTxTop.getHandle(); idTxTop.delete(); idDict = Dict.getNamedDictionary(nameApp, out exists); Dict.delSubDict(idDict, h.ToString()); } idTxBot = tvs.getObjectId(4); if (!idTxBot.IsErased && idTxBot != ObjectId.Null) { idTxBot.delete(); } } } catch (System.Exception ex) { BaseObjs.writeDebug(ex.Message + " EM_Delete.cs: line: 189"); } break; case apps.lblPnts: case apps.lblPntsPT: try { switch (eData.objType) { case "BlockReference": tvs.deleteLinkedEnts(); //**************need to remove BlockReference handle from point****************** break; case "Leader": tvs.deleteLinkedEnts(); break; case "CogoPoint": ObjectId idBr = tvs.getObjectId(1); if (idBr == ObjectId.Null) { return; } ResultBuffer rbBr = idBr.getXData(apps.lblPnts); //= Point XData -> Point links BlockReference / BlockReference links Leader TypedValue[] tvsBr = rbBr.AsArray(); idLdr = tvsBr.getObjectId(1); //linked handle is in position 1 for lblPnts and lblPntsPT idBr.delete(); idLdr.delete(); break; } } catch (System.Exception ex) { BaseObjs.writeDebug(ex.Message + " EM_Delete.cs: line: 222"); } break; case apps.lnkBrks: try { ids = tvs.getObjectIdList(); if (ids.Count == 0) { continue; } //MessageBox.Show(ids[0].getType()); if (eData.objType == "CogoPoint") //Deleted ent was a CogoPoint { foreach (ObjectId idX in ids) //idX is poly3d(s) linked to CogoPoint { if (!idX.IsValid || idX.IsErased) { continue; } foreach (EM_EData eDataX in enData) { if (eDataX.tvs[0].Value.ToString() == apps.lnkBrks3) { ObjectId idPoly3d = eDataX.tvs[1].getObjectId(); List <Handle> hBrks = idPoly3d.getXData(apps.lnkBrks).rb_handles(); //CogoPoints on each end of BB or GT List <Handle> hBrks3 = idPoly3d.getXData(apps.lnkBrks3).rb_handles(); //FL handle Handle hFL = hBrks3[0]; Handle hCgPnt1 = hBrks[0]; Handle hCgPnt2 = hBrks[1]; ObjectId idFL = hFL.getObjectId(); idFL.removeHandleFromXdata(apps.lnkBrks3, hCgPnt1); //remove CogoPoint from FL.lnkBrks3 idFL.removeHandleFromXdata(apps.lnkBrks3, hCgPnt2); //remove CogoPoint from FL.lnkBrks3 idFL.removeHandleFromXdata(apps.lnkBrks3, idPoly3d.getHandle()); //remove poly3d from FL.lnkBrks3 hBrks.Remove(eData.h); //remove deleted CogoPoint from list leaving CogoPoint at opposite end of poly3d hBrks[0].getObjectId().delete(); //delete CogoPoint at opposite end ResultBuffer rbSLP = idPoly3d.getXData(apps.lnkSLP); if (rbSLP != null) { TypedValue[] tvsSLP = rbSLP.AsArray(); List <ObjectId> idsSLP = tvsSLP.getObjectIdList(); foreach (ObjectId idSLP in idsSLP) { idSLP.delete(); } } idPoly3d.delete(); //delete poly3d pass = true; } } if (!pass) { Handle hP3d = idX.getHandle(); //poly3d handle attached to CogoPoint ResultBuffer rbX = idX.getXData(apps.lnkBrks); //path to other points linked to poly3d which is going to be deleted List <Handle> hPnts = rbX.rb_handles(); //handles of points linked to poly3d including point to be deleted foreach (Handle h in hPnts) { if (h == eData.h) { continue; } ObjectId idT = h.getObjectId(); //id of other point linked to poly3d if (!idT.IsValid || idT.IsEffectivelyErased || idT.IsErased) { continue; } if (hDeletes.Contains(h)) { continue; } ResultBuffer rbT = idT.getXData(apps.lnkBrks); if (rbT == null) { continue; } List <Handle> hPolys = rbT.rb_handles(); //list of poly3d linked to other point if (hPolys.Contains(hP3d)) { hPolys.Remove(hP3d); //remove poly3d handle from other point list } if (hPolys.Count > 0) { idT.setXData(hPolys, apps.lnkBrks); } else { idT.clearXData(apps.lnkBrks); } } idX.delete(); } } } else if (eData.objType == "Polyline3d" || eData.objType == "FeatureLine") { //Deleted ent was a Polyline3d or Featureline ids = tvs.getObjectIdList(); //points linked to poly3d or feature line foreach (ObjectId idP in ids) { if (idP.IsValid && !idP.IsEffectivelyErased && !idP.IsErased) { ResultBuffer rbP = idP.getXData(apps.lnkBrks); if (rbP == null) { continue; } List <Handle> hPnts = rbP.rb_handles(); if (hPnts.Contains(eData.h)) { hPnts.Remove(eData.h); } if (hPnts.Count > 0) { idP.setXData(hPnts, apps.lnkBrks2); } else { idP.clearXData(apps.lnkBrks); } } } } } catch (System.Exception ex) { BaseObjs.writeDebug(ex.Message + " EM_Delete.cs: line: 329"); } break; case apps.lnkBrks2: try { ids = tvs.getObjectIdList(); //FL stores end Cogo Points / Cogo Points store FL if (ids.Count == 0) { continue; } idEnt = ids[0]; //idEnt is either a CogoPoint or a poly3d //COGOPOINT DELETED if (eData.objType == "CogoPoint") { //Deleted ent was a CogoPoint - get lnkBrks3 from poly3d (FL) and delete all entities listed ResultBuffer rbFL2 = idEnt.getXData(apps.lnkBrks2); if (rbFL2 == null) { continue; } List <Handle> hCgPnts = rbFL2.rb_handles(); if (hCgPnts.Contains(eData.h)) { hCgPnts.Remove(eData.h); //remove deleted point leaving point at other end } if (hCgPnts.Count == 1) { ObjectId idCgPntX = hCgPnts[0].getObjectId(); updateCogoPointDict3(idCgPntX, idEnt.getHandle()); idCgPntX.removeHandleFromXdata(apps.lnkBrks2, idEnt.Handle); } ResultBuffer rbP3d3 = idEnt.getXData(apps.lnkBrks3); if (rbP3d3 == null) { continue; } TypedValue[] tvsP3D3 = rbP3d3.AsArray(); List <ObjectId> idsEdge = tvsP3D3.getObjectIdList(); foreach (ObjectId idEdge in idsEdge) { idEdge.delete(); } idEnt.delete(); //delete FL //POLYLINE3D DELETED } else if (eData.objType == "Polyline3d") { //Deleted ent was a Polyline3d !!!!!!!!!!!!!!!!!!!!!!! SAME AS lnkBrks !!!!!!!!!!!!!!!!!!!!!!!! foreach (ObjectId idP3d in ids) { ResultBuffer rbP = idP3d.getXData(apps.lnkBrks2); if (rbP == null) { continue; } handles = rbP.rb_handles(); if (handles.Contains(eData.h)) // clean up xdata on points; lnkBrks3 will take care of edges { handles.Remove(eData.h); } if (handles.Count > 0) { idP3d.setXData(handles, apps.lnkBrks2); } else { idP3d.clearXData(apps.lnkBrks2); } updateCogoPointDict3(idP3d, eData.h); } } } catch (System.Exception ex) { BaseObjs.writeDebug(ex.Message + " EM_Delete.cs: line: 388"); } break; case apps.lnkBrks3: try { ids = tvs.getObjectIdList(); switch (ids.Count) { case 0: break; case 1: ids[0].removeHandleFromXdata(apps.lnkBrks3, eData.h); break; default: foreach (ObjectId idP in ids) { if (idP.getType() == "CogoPoint") { ResultBuffer rbX = null; rbX = idP.getXData(apps.lnkBrks); if (rbX != null) { TypedValue[] tvsX = rbX.AsArray(); List <ObjectId> idsX = tvsX.getObjectIdList(); foreach (ObjectId idX in idsX) { idX.delete(); } } } idP.delete(); } break; } } catch (System.Exception ex) { BaseObjs.writeDebug(ex.Message + " EM_Delete.cs: line: 427"); } break; case apps.lnkSLP: ids = tvs.getObjectIdList(); foreach (ObjectId idSLP in ids) { idSLP.delete(); } break; } } catch (System.Exception ex) { BaseObjs.writeDebug(ex.Message + " EM_Delete.cs: line: 440"); } } }
doStretchMove(List <EM_EData> enData) { foreach (EM_EData eData in enData) { List <ObjectId> ids = null; ObjectId idP3d, idLdr; List <Handle> handles = null; ObjectId idCgPnt, idMTxt; bool exists; TypedValue[] tvs = eData.tvs; string nameApp = tvs[0].Value.ToString(); switch (nameApp) { case apps.lnkGS: switch (eData.objType) { case "CogoPoint": idCgPnt = eData.id; Grading_Utility.updateGS(tvs, "Grip_Stretch_Move"); break; case "MText": idMTxt = eData.id; LdrText_Move.moveLdrGS(idMTxt, tvs, eData.pnt3d); break; case "Leader": idLdr = eData.id; LdrText_Move.moveTxtGS(idLdr, tvs); break; } break; case apps.lnkBrks: ids = tvs.getObjectIdList(); handles = tvs.getHandleList(); foreach (Handle handle in handles) { idP3d = Grading_Utility.update3dPoly_lnkBrks1_2(apps.lnkBrks, eData.id, handle); if (idP3d == ObjectId.Null) { handles.Remove(handle); } } break; case apps.lnkBrks2: ids = tvs.getObjectIdList(); handles = tvs.getHandleList(); foreach (Handle handle in handles) { idP3d = Grading_Utility.update3dPoly_lnkBrks1_2(apps.lnkBrks2, eData.id, handle); if (idP3d == ObjectId.Null) { handles.Remove(handle); } } ObjectId idDictM = Dict.getNamedDictionary(apps.lnkBrks3, out exists); ObjectId idDictPnt = Dict.getSubEntry(idDictM, eData.id.getHandle().ToString()); List <DBDictionaryEntry> entries = Dict.getEntries(idDictPnt); foreach (DBDictionaryEntry entry in entries) { ObjectId idDictX = Dict.getSubEntry(idDictPnt, entry.Key); ResultBuffer rb2 = Dict.getXRec(idDictX, "Offset"); tvs = rb2.AsArray(); double offset = (double)tvs[0].Value; rb2 = Dict.getXRec(idDictX, "DeltaZ"); tvs = rb2.AsArray(); double deltaZ = (double)tvs[0].Value; rb2 = Dict.getXRec(idDictX, "HandleFL"); tvs = rb2.AsArray(); Handle handleFL = (Handle)tvs[0].Value; rb2 = Dict.getXRec(idDictX, "Beg"); tvs = rb2.AsArray(); double beg = (double)tvs[0].Value; rb2 = Dict.getXRec(idDictX, "End"); tvs = rb2.AsArray(); double end = (double)tvs[0].Value; Grading_Utility.update3dPoly_lnkBrks3(idDictX.getHandle(), offset, deltaZ, handleFL, beg, end); } break; case apps.lnkBubs: switch (eData.objType) { case "MText": BB_Events.modTXlnkBubs(eData.id, tvs); break; case "Leader": BB_Events.modLDRlnkBubs(eData.id, tvs); break; } break; case apps.lnkCO: case apps.lnkLD: switch (eData.objType) { case "CogoPoint": idCgPnt = eData.id; idMTxt = tvs.getObjectId(3); ResultBuffer rbMTxt = idMTxt.getXData(nameApp); TypedValue[] tvsMTxt = rbMTxt.AsArray(); idLdr = tvsMTxt.getObjectId(3); Point3d pnt3dCgPoint = idCgPnt.getCogoPntCoordinates(); Point3d pnt3dLdr = idLdr.getBegPnt(); if (!pnt3dCgPoint.X.Equals(pnt3dLdr.X) || !pnt3dCgPoint.Y.Equals(pnt3dLdr.Y)) { idLdr.adjLdrBegPnt(pnt3dCgPoint); } Grading_Utility.updatePntCalloutElev(pnt3dCgPoint.Z, tvs); break; case "MText": idMTxt = eData.id; try { LdrText_Move.moveTX(idMTxt, tvs, eData.pnt3d); } catch (System.Exception ex) { BaseObjs.writeDebug(ex.Message + " EM_StretchMove.cs: line: 147"); } break; case "Leader": idLdr = eData.id; LdrText_Rotate.adjTxt(idLdr, nameApp); break; } break; //case apps.lnkLD: // switch (eData.objType) // { // case "CogoPoint": // break; // case "MText": // idMTxt = eData.id; // try // { // LdrText_Move.moveTX(idMTxt, tvs, eData.pnt3d); // } // catch (System.Exception ex) // { // BaseObjs.writeDebug(string.Format("{0} EM_StretchMove.cs: line: 138", ex.Message)); // } // break; // case "Leader": // idLdr = eData.id; // LdrText_Rotate.adjTxt(idLdr, nameApp); // break; // } // break; case apps.lnkDimPL: if (eData.objType == "MText") { idMTxt = eData.id; DimPL_Move.modTXlnkDimPl(idMTxt, tvs, idMTxt.getMTextLocation()); } break; case apps.lnkMNP: ObjectId id = eData.id; switch (eData.objType) { case "Pipe": using (Transaction tr = BaseObjs.startTransactionDb()) { Pipe pipe = (Pipe)tr.GetObject(id, OpenMode.ForWrite); idCgPnt = tvs.getObjectId(1); CogoPoint cgPNt = (CogoPoint)tr.GetObject(idCgPnt, OpenMode.ForWrite); double dZ = pipe.InnerDiameterOrWidth / (2 * System.Math.Cos(System.Math.Atan(System.Math.Abs(pipe.Slope)))); double inv = pipe.StartPoint.Z - dZ; cgPNt.Elevation = inv; ResultBuffer rb = idCgPnt.getXData(apps.lnkCO); if (rb != null) { TypedValue[] tvsCgPNt = rb.AsArray(); Grading.Grading_Utility.updatePntCalloutElev(inv, tvsCgPNt); BaseObjs.updateGraphics(); } idCgPnt = tvs.getObjectId(2); cgPNt = (CogoPoint)tr.GetObject(idCgPnt, OpenMode.ForWrite); inv = pipe.EndPoint.Z - dZ; cgPNt.Elevation = inv; rb = idCgPnt.getXData(apps.lnkCO); if (rb != null) { TypedValue[] tvsCgPNt = rb.AsArray(); Grading.Grading_Utility.updatePntCalloutElev(inv, tvsCgPNt); BaseObjs.updateGraphics(); } tr.Commit(); } break; case "Structure": Structure s = (Structure)id.getEnt(); break; } break; } } }