LeaderFromText.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. include("scripts/EAction.js");
  2. include("scripts/library.js");
  3. function LeaderFromText(guiAction) {
  4. EAction.call(this, guiAction);
  5. }
  6. LeaderFromText.prototype = new EAction();
  7. LeaderFromText.prototype.verifySelectedEntity = function (doc, entityIds) {
  8. // check selected one entity
  9. if (entityIds.length === 1) {
  10. // check selected text entity
  11. if (isTextEntity(doc.queryEntity(entityIds[0]))) {
  12. return "ОК";
  13. }
  14. return "Select text object!"
  15. }
  16. return "Select one text object!"
  17. }
  18. LeaderFromText.prototype.setLeftLeader = function (leader, vectorArr, offset) {
  19. leader.appendVertex(new RVector(vectorArr[0].getX() - offset, vectorArr[0].getY() - offset, 0));
  20. leader.appendVertex(vectorArr[0]);
  21. leader.appendVertex(vectorArr[1]);
  22. return leader;
  23. }
  24. LeaderFromText.prototype.setRightLeader = function (leader, vectorArr, offset) {
  25. leader.appendVertex(new RVector(vectorArr[1].getX() + offset, vectorArr[1].getY() - offset, 0));
  26. leader.appendVertex(vectorArr[1]);
  27. leader.appendVertex(vectorArr[0]);
  28. return leader;
  29. }
  30. LeaderFromText.prototype.beginEvent = function () {
  31. EAction.prototype.beginEvent.call(this);
  32. var doc = this.getDocument();
  33. var di = this.getDocumentInterface();
  34. var op = new RAddObjectsOperation();
  35. var ids = doc.querySelectedEntities();
  36. // checking the validity of an entity
  37. var msg = this.verifySelectedEntity(doc, ids);
  38. if (msg != "ОК") {
  39. EAction.handleUserWarning(qsTr(msg));
  40. this.terminate();
  41. return;
  42. }
  43. var entity = doc.queryEntity(ids[0]);
  44. var td = entity.getData();
  45. var th = entity.getTextHeight();
  46. // get the enlarged bounding box (10% of the text height)
  47. var box = td.getBoundingBox().grow(th*0.1);
  48. var vectorArr = box.getCorners2d();
  49. // delete 2 top corners
  50. vectorArr.pop();
  51. vectorArr.pop();
  52. // find the index of the point closest to the alignment point
  53. var index = entity.getAlignmentPoint().getClosestIndex2D(vectorArr);
  54. // choose the right or left leader depending on the alignment point
  55. var leader = new RLeaderEntity(doc, new RLeaderData());
  56. if (index == 0) {
  57. op.addObject(this.setLeftLeader(leader, vectorArr, th));
  58. } else {
  59. op.addObject(this.setRightLeader(leader, vectorArr, th));
  60. }
  61. di.applyOperation(op);
  62. EAction.handleUserMessage(qsTr("Leader was created successfully"));
  63. this.terminate();
  64. };