Guest User

Untitled

a guest
Apr 19th, 2018
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.74 KB | None | 0 0
  1. public void EXPTXT()
  2. {
  3. var doc = Application.DocumentManager.MdiActiveDocument;
  4. var db = doc.Database;
  5. var ed = doc.Editor;
  6.  
  7. // selection text
  8. ObjectId[] dbtextIds = ed.SelectTextEntitesInModelSpace();
  9. foreach (ObjectId id in dbtextIds)
  10. {
  11. using (Transaction tr = db.TransactionManager.StartTransaction())
  12. {
  13. var text = (DBText)tr.GetObject(id, OpenMode.ForWrite);
  14. ObjectId[] ids = new ObjectId[1];
  15. ids[0] = id;
  16. ed.SetImpliedSelection(ids);
  17. var tempFile = Path.Combine(Path.GetTempPath(), "Q.wmf");
  18.  
  19. if (File.Exists(tempFile))
  20. {
  21. File.Delete(tempFile);
  22. }
  23. ed.Command("_.WMFOUT", tempFile, "", "");
  24. var viewSize = (double)Application.GetSystemVariable("VIEWSIZE");
  25. var screenSize = (Point2d)Application.GetSystemVariable("SCREENSIZE");
  26. double factor = viewSize * (screenSize.X / screenSize.Y);
  27. var viewCtr = (Point3d)Application.GetSystemVariable("VIEWCTR");
  28. //Transform viewCtr from UCS to DCS
  29. Matrix3d matUCS2DCS = ed.UCS2WCS() * ed.WCS2DCS();
  30. viewCtr = viewCtr.TransformBy(matUCS2DCS);
  31. var p1 = new Point3d(viewCtr.X - (factor / 2.0), viewCtr.Y - (viewSize / 2.0), .0);
  32. var p2 = new Point3d(viewCtr.X + (factor / 2.0), viewCtr.Y + (viewSize / 2.0), .0);
  33. //Transorm p1,p2 from DCS to UCS;
  34. Matrix3d matDCS2UCS = ed.DCS2WCS() * ed.WCS2UCS();
  35. p1 = p1.TransformBy(matDCS2UCS);
  36. p2 = p2.TransformBy(matDCS2UCS);
  37. Point2d wmfinBlockPos = new Point2d(p1.X, p2.Y);
  38. var tempWithOutExt = Path.Combine(Path.GetDirectoryName(tempFile),
  39. Path.GetFileNameWithoutExtension(tempFile));
  40. ed.Command("_.WMFIN", tempWithOutExt, wmfinBlockPos, "2", "", "");
  41. try
  42. {
  43. var wmfBlock = tr.GetObject(ed.SelectLastEnt(), OpenMode.ForWrite) as BlockReference;
  44. DBObjectCollection pElems = new DBObjectCollection();
  45. wmfBlock?.Explode(pElems);
  46. var space = (BlockTableRecord)tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite);
  47. foreach (DBObject elem in pElems)
  48. {
  49. space.AppendEntity(elem as Entity);
  50. tr.AddNewlyCreatedDBObject(elem, true);
  51. }
  52. //Purge unused WMFIN Block and reference
  53. ObjectId wmfBtr = GetNonErasedTableRecordId(db.BlockTableId, wmfBlock.Name);
  54. ObjectIdCollection blockIds = new ObjectIdCollection();
  55. blockIds.Add(wmfBtr);
  56. db.Purge(blockIds);
  57. foreach (ObjectId oId in blockIds)
  58. {
  59. DBObject obj = tr.GetObject(oId, OpenMode.ForWrite);
  60. obj.Erase();
  61.  
  62. }
  63. }
  64. catch (Exception ex)
  65. {
  66. ed.WriteMessage(ex.Message);
  67. }
  68. finally
  69. {
  70. //Erase text entity
  71. text.Erase();
  72. tr.Commit();
  73. }
  74. }
  75.  
  76. }
  77.  
  78. }
Add Comment
Please, Sign In to add comment