| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- include("scripts/EAction.js");
- include("scripts/library.js");
- function LeaderFromText(guiAction) {
- EAction.call(this, guiAction);
- }
- LeaderFromText.prototype = new EAction();
- LeaderFromText.prototype.verifySelectedEntity = function (doc, entityIds) {
- // check selected one entity
- if (entityIds.length === 1) {
-
- // check selected text entity
- if (isTextEntity(doc.queryEntity(entityIds[0]))) {
- return "ОК";
- }
- return "Select text object!"
- }
- return "Select one text object!"
- }
- LeaderFromText.prototype.setLeftLeader = function (leader, vectorArr, offset) {
- leader.appendVertex(new RVector(vectorArr[0].getX() - offset, vectorArr[0].getY() - offset, 0));
- leader.appendVertex(vectorArr[0]);
- leader.appendVertex(vectorArr[1]);
- return leader;
- }
- LeaderFromText.prototype.setRightLeader = function (leader, vectorArr, offset) {
- leader.appendVertex(new RVector(vectorArr[1].getX() + offset, vectorArr[1].getY() - offset, 0));
- leader.appendVertex(vectorArr[1]);
- leader.appendVertex(vectorArr[0]);
- return leader;
- }
- LeaderFromText.prototype.beginEvent = function () {
- EAction.prototype.beginEvent.call(this);
- var doc = this.getDocument();
- var di = this.getDocumentInterface();
- var op = new RAddObjectsOperation();
- var ids = doc.querySelectedEntities();
- // checking the validity of an entity
- var msg = this.verifySelectedEntity(doc, ids);
- if (msg != "ОК") {
- EAction.handleUserWarning(qsTr(msg));
- this.terminate();
- return;
- }
-
- var entity = doc.queryEntity(ids[0]);
- var td = entity.getData();
- var th = entity.getTextHeight();
- // get the enlarged bounding box (10% of the text height)
- var box = td.getBoundingBox().grow(th*0.1);
- var vectorArr = box.getCorners2d();
- // delete 2 top corners
- vectorArr.pop();
- vectorArr.pop();
- // find the index of the point closest to the alignment point
- var index = entity.getAlignmentPoint().getClosestIndex2D(vectorArr);
- // choose the right or left leader depending on the alignment point
- var leader = new RLeaderEntity(doc, new RLeaderData());
- if (index == 0) {
- op.addObject(this.setLeftLeader(leader, vectorArr, th));
- } else {
- op.addObject(this.setRightLeader(leader, vectorArr, th));
- }
- di.applyOperation(op);
- EAction.handleUserMessage(qsTr("Leader was created successfully"));
- this.terminate();
- };
|