modTXlnkDimPl(ObjectId idObj, TypedValue[] tvsTX, Point3d pnt3dX) { double txtSize, sizeRow; MText mTxt = (MText)idObj.getEnt(); int annoScale = Misc.getCurrAnnoScale(); Double.TryParse(tvsTX[5].Value.ToString(), out txtSize); Double.TryParse(tvsTX[6].Value.ToString(), out sizeRow); Point3d pnt3d1a = new Point3d((double)tvsTX[7].Value, (double)tvsTX[8].Value, 0.0); Point3d pnt3d2a = new Point3d((double)tvsTX[9].Value, (double)tvsTX[10].Value, 0.0); Handle hPoly1 = tvsTX[11].Value.ToString().stringToHandle(); Handle hPoly2 = tvsTX[12].Value.ToString().stringToHandle(); Handle hEntX = tvsTX[13].Value.ToString().stringToHandle(); Object xRefPath = tvsTX[14].Value; Handle hLine1 = tvsTX[16].Value.ToString().stringToHandle(); Handle hLine2 = tvsTX[17].Value.ToString().stringToHandle(); List <Handle> handles = new List <Handle>(); handles.Add(hEntX); handles.Add(hLine1); handles.Add(hLine2); using (BaseObjs._acadDoc.LockDocument()) { hPoly1.getObjectId().delete(); hPoly2.getObjectId().delete(); double dir = pnt3d1a.getDirection(pnt3d2a); double distT = pnt3d1a.getDistance(pnt3d2a); int maxRows = 0; if (txtSize == 0.075) { maxRows = DimPL_Global.maxRows075; } else { maxRows = DimPL_Global.maxRows090; } double txtHeight = Math.Round(txtSize * annoScale, 3); DimPL_App.addOrMoveTX(pnt3dX, pnt3d1a, pnt3d2a, txtSize, annoScale, sizeRow, txtHeight, maxRows, dir, distT, handles, mTxt, xRefPath); } }
updateDimPL(ObjectId idMTxt, string nameFile) { TypedValue[] tvsTX = idMTxt.getXData(apps.lnkDimPL).AsArray(); string xRefPath = tvsTX[14].Value.ToString(); if (xRefPath != nameFile) { return; } int row, side, annoScale; double txtSize, sizeRow; int.TryParse(tvsTX[2].Value.ToString(), out row); int.TryParse(tvsTX[3].Value.ToString(), out side); int.TryParse(tvsTX[4].Value.ToString(), out annoScale); Double.TryParse(tvsTX[5].Value.ToString(), out txtSize); Double.TryParse(tvsTX[6].Value.ToString(), out sizeRow); Point3d pnt3d1a = new Point3d((double)tvsTX[7].Value, (double)tvsTX[8].Value, 0.0); //endpoint of segment Point3d pnt3d2a = new Point3d((double)tvsTX[9].Value, (double)tvsTX[10].Value, 0.0); //endpoint of segment Handle hPolyLdr1 = tvsTX[11].Value.ToString().stringToHandle(); Handle hPolyLdr2 = tvsTX[12].Value.ToString().stringToHandle(); Handle hEntX = tvsTX[13].Value.ToString().stringToHandle(); //parent entity double station = (double)tvsTX[15].Value; //location along parent entity from pnt3d1a Handle hLine1 = tvsTX[16].Value.ToString().stringToHandle(); Handle hLine2 = tvsTX[17].Value.ToString().stringToHandle(); List <Handle> handles = new List <Handle>(); handles.Add(hEntX); handles.Add(hLine1); handles.Add(hLine2); List <Point3d> pnts3dX = xRef.getNestedEntityCoordinates2(hEntX, xRefPath); if (pnts3dX == null || pnts3dX.Count == 0) { cleanUp(idMTxt, hPolyLdr1, hPolyLdr2); return; } List <Point3d> pnts3dL1 = null; if (hLine1 != null) { pnts3dL1 = xRef.getNestedEntityCoordinates2(hLine1, xRefPath); if (pnts3dL1 == null || pnts3dL1.Count == 0) { cleanUp(idMTxt, hPolyLdr1, hPolyLdr2); return; } } List <Point3d> pnts3dL2 = null; if (hLine2 != null) { pnts3dL2 = xRef.getNestedEntityCoordinates2(hLine2, xRefPath); if (pnts3dL2 == null) { cleanUp(idMTxt, hPolyLdr1, hPolyLdr2); return; } } List <Point3d> pnts3d1a = pnts3dL1.intersectWith(pnts3dX, true, extend.both); if (pnts3d1a == null) { cleanUp(idMTxt, hPolyLdr1, hPolyLdr2); return; } Point3d pnt3d1aX = pnts3d1a[0]; if (pnt3d1aX.X == -1) { pnts3d1a = pnts3dX.intersectWith(pnts3d1a, true, extend.source); pnt3d1aX = pnts3d1a[0]; if (pnt3d1aX.X == -1) { cleanUp(idMTxt, hPolyLdr1, hPolyLdr2); return; } } List <Point3d> pnts3d2a = pnts3dL2.intersectWith(pnts3dX, true, extend.both); if (pnts3d2a == null) { //idMTxt.activateObj(); idMTxt.delete(); return; } Point3d pnt3d2aX = pnts3d2a[0]; if (pnt3d2aX.X == -1) { pnts3d2a = pnts3dX.intersectWith(pnts3d2a, true, extend.source); pnt3d2aX = pnts3d2a[0]; if (pnt3d2aX.X == -1) { cleanUp(idMTxt, hPolyLdr1, hPolyLdr2); return; } } if (pnt3d1a == pnt3d1aX && pnt3d2a == pnt3d2aX) { return; } double dir = pnt3d1aX.getDirection(pnt3d2aX); double distT = pnt3d1aX.getDistance(pnt3d2aX); int maxRows = 0; if (txtSize == 0.075) { maxRows = DimPL_Global.maxRows075; } else { maxRows = DimPL_Global.maxRows090; } double txtHeight = Math.Round(txtSize * annoScale, 3); Point3d pnt3dX = Pub.pnt3dO; using (BaseObjs._acadDoc.LockDocument()) { cleanUp(idMTxt, hPolyLdr1, hPolyLdr2); DimPL_App.addOrMoveTX(pnt3dX, pnt3d1aX, pnt3d2aX, txtSize, annoScale, sizeRow, txtHeight, maxRows, dir, distT, handles, null, xRefPath, station, row, side); } DimPL_Global.countUpdates++; }