Files
Yajbir Singh f1b860b25c
Some checks failed
check / markdownlint (push) Has been cancelled
check / spellchecker (push) Has been cancelled
updated
2025-12-11 19:03:17 +05:30

2499 lines
103 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* (c) Copyright Ascensio System SIA 2010-2024
*
* This program is a free software product. You can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License (AGPL)
* version 3 as published by the Free Software Foundation. In accordance with
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
* that Ascensio System SIA expressly excludes the warranty of non-infringement
* of any third-party rights.
*
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
*
* You can contact Ascensio System SIA at 20A-6 Ernesta Birznieka-Upish
* street, Riga, Latvia, EU, LV-1050.
*
* The interactive user interfaces in modified source and object code versions
* of the Program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU AGPL version 3.
*
* Pursuant to Section 7(b) of the License you must retain the original Product
* logo when distributing the program. Pursuant to Section 7(e) we decline to
* grant you any rights under trademark law for use of our trademarks.
*
* All the Product's GUI elements, including illustrations and icon sets, as
* well as technical writing content are licensed under the terms of the
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
*
*/
"use strict";
(function(window, undefined){
// Import
var global_MatrixTransformer = AscCommon.global_MatrixTransformer;
var TRANSLATE_HANDLE_NO_FLIP = [];
TRANSLATE_HANDLE_NO_FLIP[0] = 0;
TRANSLATE_HANDLE_NO_FLIP[1] = 1;
TRANSLATE_HANDLE_NO_FLIP[2] = 2;
TRANSLATE_HANDLE_NO_FLIP[3] = 3;
TRANSLATE_HANDLE_NO_FLIP[4] = 4;
TRANSLATE_HANDLE_NO_FLIP[5] = 5;
TRANSLATE_HANDLE_NO_FLIP[6] = 6;
TRANSLATE_HANDLE_NO_FLIP[7] = 7;
var TRANSLATE_HANDLE_FLIP_H = [];
TRANSLATE_HANDLE_FLIP_H[0] = 2;
TRANSLATE_HANDLE_FLIP_H[1] = 1;
TRANSLATE_HANDLE_FLIP_H[2] = 0;
TRANSLATE_HANDLE_FLIP_H[3] = 7;
TRANSLATE_HANDLE_FLIP_H[4] = 6;
TRANSLATE_HANDLE_FLIP_H[5] = 5;
TRANSLATE_HANDLE_FLIP_H[6] = 4;
TRANSLATE_HANDLE_FLIP_H[7] = 3;
var TRANSLATE_HANDLE_FLIP_V = [];
TRANSLATE_HANDLE_FLIP_V[0] = 6;
TRANSLATE_HANDLE_FLIP_V[1] = 5;
TRANSLATE_HANDLE_FLIP_V[2] = 4;
TRANSLATE_HANDLE_FLIP_V[3] = 3;
TRANSLATE_HANDLE_FLIP_V[4] = 2;
TRANSLATE_HANDLE_FLIP_V[5] = 1;
TRANSLATE_HANDLE_FLIP_V[6] = 0;
TRANSLATE_HANDLE_FLIP_V[7] = 7;
var TRANSLATE_HANDLE_FLIP_H_AND_FLIP_V = [];
TRANSLATE_HANDLE_FLIP_H_AND_FLIP_V[0] = 4;
TRANSLATE_HANDLE_FLIP_H_AND_FLIP_V[1] = 5;
TRANSLATE_HANDLE_FLIP_H_AND_FLIP_V[2] = 6;
TRANSLATE_HANDLE_FLIP_H_AND_FLIP_V[3] = 7;
TRANSLATE_HANDLE_FLIP_H_AND_FLIP_V[4] = 0;
TRANSLATE_HANDLE_FLIP_H_AND_FLIP_V[5] = 1;
TRANSLATE_HANDLE_FLIP_H_AND_FLIP_V[6] = 2;
TRANSLATE_HANDLE_FLIP_H_AND_FLIP_V[7] = 3;
var SHAPE_EXT = {};
SHAPE_EXT["can"] = 3616635/36000;
SHAPE_EXT["moon"] = 457200/36000;
SHAPE_EXT["leftBracket"] = 73152/36000;
SHAPE_EXT["rightBracket"] = 73152/36000;
SHAPE_EXT["leftBrace"] = 155448/36000;
SHAPE_EXT["rightBrace"] = 155448/36000;
SHAPE_EXT["triangle"] = 1060704/36000;
SHAPE_EXT["parallelogram"] = 1216152/36000;
SHAPE_EXT["trapezoid"] = 914400/36000;
SHAPE_EXT["pentagon"] = 960120/36000;
SHAPE_EXT["hexagon"] = 1060704/36000;
SHAPE_EXT["bracePair"] = 1069848/36000;
SHAPE_EXT["rightArrow"] = 978408/36000;
SHAPE_EXT["leftArrow"] = 978408/36000;
SHAPE_EXT["upArrow"] = 484632/36000;
SHAPE_EXT["downArrow"] = 484632/36000;
SHAPE_EXT["leftRightArrow"] = 1216152/36000;
SHAPE_EXT["upDownArrow"] = 484632/36000;
SHAPE_EXT["bentArrow"] = 813816/36000;
SHAPE_EXT["uturnArrow"] = 886968/36000;
SHAPE_EXT["bentUpArrow"] = 850392/36000;
SHAPE_EXT["curvedRightArrow"] = 731520/36000;
SHAPE_EXT["curvedLeftArrow"] = 731520/36000;
SHAPE_EXT["curvedUpArrow"] = 1216152/36000;
SHAPE_EXT["curvedDownArrow"] = 1216152/36000;
SHAPE_EXT["stripedRightArrow"] = 978408/36000;
SHAPE_EXT["notchedRightArrow"] = 978408/36000;
SHAPE_EXT["homePlate"] = 978408/36000;
SHAPE_EXT["leftRightArrowCallout"] = 1216152/36000;
SHAPE_EXT["flowChartProcess"] = 914400/36000;
SHAPE_EXT["flowChartAlternateProcess"] = 914400/36000;
SHAPE_EXT["flowChartDecision"] = 914400/36000;
SHAPE_EXT["flowChartInputOutput"] = 914400/36000;
SHAPE_EXT["flowChartPredefinedProcess"] = 914400/36000;
SHAPE_EXT["flowChartDocument"] = 914400/36000;
SHAPE_EXT["flowChartMultidocument"] = 1060704/36000;
SHAPE_EXT["flowChartTerminator"] = 914400/36000;
SHAPE_EXT["flowChartPreparation"] = 1060704/36000;
SHAPE_EXT["flowChartManualInput"] = 914400/36000;
SHAPE_EXT["flowChartManualOperation"] = 914400/36000;
SHAPE_EXT["flowChartPunchedCard"] = 914400/36000;
SHAPE_EXT["flowChartPunchedTape"] = 914400/36000;
SHAPE_EXT["flowChartPunchedTape"] = 457200/36000;
SHAPE_EXT["flowChartSort"] = 457200/36000;
SHAPE_EXT["flowChartOnlineStorage"] = 914400/36000;
SHAPE_EXT["flowChartMagneticDisk"] = 914400/36000;
SHAPE_EXT["flowChartMagneticDrum"] = 914400/36000;
SHAPE_EXT["flowChartDisplay"] = 914400/36000;
SHAPE_EXT["ribbon2"] = 1216152/36000;
SHAPE_EXT["ribbon"] = 1216152/36000;
SHAPE_EXT["ellipseRibbon2"] = 1216152/36000;
SHAPE_EXT["ellipseRibbon"] = 1216152/36000;
SHAPE_EXT["verticalScroll"] = 1033272/36000;
SHAPE_EXT["horizontalScroll"] = 1143000/36000;
SHAPE_EXT["wedgeRectCallout"] = 914400/36000;
SHAPE_EXT["wedgeRoundRectCallout"] = 914400/36000;
SHAPE_EXT["wedgeEllipseCallout"] = 914400/36000;
SHAPE_EXT["cloudCallout"] = 914400/36000;
SHAPE_EXT["borderCallout1"] = 914400/36000;
SHAPE_EXT["borderCallout2"] = 914400/36000;
SHAPE_EXT["borderCallout3"] = 914400/36000;
SHAPE_EXT["accentCallout1"] = 914400/36000;
SHAPE_EXT["accentCallout2"] = 914400/36000;
SHAPE_EXT["accentCallout3"] = 914400/36000;
SHAPE_EXT["callout1"] = 914400/36000;
SHAPE_EXT["callout2"] = 914400/36000;
SHAPE_EXT["callout3"] = 914400/36000;
SHAPE_EXT["accentBorderCallout1"] = 914400/36000;
SHAPE_EXT["accentBorderCallout2"] = 914400/36000;
SHAPE_EXT["accentBorderCallout3"] = 914400/36000;
SHAPE_EXT["cube"] = 1216152/36000;
SHAPE_EXT["bevel"] = 1042416/36000;
SHAPE_EXT["quadArrow"] = 1216152/36000;
SHAPE_EXT["leftUpArrow"] = 850392/36000;
SHAPE_EXT["chevron"] = 484632/36000;
SHAPE_EXT["quadArrowCallout"] = 1216152/36000;
SHAPE_EXT["circularArrow"] = 978408/36000;
SHAPE_EXT["flowChartInternalStorage"] = 612648/36000;
SHAPE_EXT["flowChartConnector"] = 457200/36000;
SHAPE_EXT["flowChartOffpageConnector"] = 612648/36000;
SHAPE_EXT["flowChartSummingJunction"] = 612648/36000;
SHAPE_EXT["flowChartOr"] = 612648/36000;
SHAPE_EXT["flowChartExtract"] = 685800/36000;
SHAPE_EXT["flowChartMerge"] = 685800/36000;
SHAPE_EXT["flowChartDelay"] = 612648/36000;
SHAPE_EXT["flowChartMagneticTape"] = 612648/36000;
SHAPE_EXT["actionButtonHome"] = 1042416/36000;
var MIN_SHAPE_SIZE = 1.27;//размер меньше которого нельзя уменшить автофигуру или картинку по горизонтали или вертикали
function CreatePenBrushForChartTrack()
{
return AscFormat.ExecuteNoHistory(function()
{
var brush = new AscFormat.CUniFill();
brush.setFill(new AscFormat.CSolidFill());
brush.fill.setColor(new AscFormat.CUniColor());
brush.fill.color.RGBA = {R:255, G:255, B:255, A:255};
brush.fill.color.setColor(new AscFormat.CRGBColor());
brush.fill.color.color.RGBA = {R:255, G:255, B:255, A:255};
var pen = new AscFormat.CLn();
pen.setFill(new AscFormat.CUniFill());
pen.Fill.setFill(new AscFormat.CSolidFill());
pen.Fill.fill.setColor(new AscFormat.CUniColor());
pen.Fill.fill.color.setColor(new AscFormat.CRGBColor());
return {brush: brush, pen: pen};
},
this, []);
}
function ResizeTrackShapeImage(originalObject, cardDirection, drawingsController)
{
AscFormat.ExecuteNoHistory(function()
{
this.bLastCenter = false;
this.bIsTracked = false;
this.originalObject = originalObject;
this.numberHandle = originalObject.getNumByCardDirection(cardDirection);
this.lastSpPr = null;
this.startShape = null;
this.endShape = null;
this.smartartParent = this.originalObject.isObjectInSmartArt() ? this.originalObject.group.group.parent : null;
this.beginShapeId = null;
this.beginShapeIdx = null;
this.endShapeId = null;
this.endShapeIdx = null;
if(drawingsController && drawingsController.selectedObjects.length === 1){
if(originalObject.getObjectType() === AscDFH.historyitem_type_Cnx){
this.drawingsController = drawingsController;
var stId = originalObject.nvSpPr.nvUniSpPr.stCnxId;
var endId = originalObject.nvSpPr.nvUniSpPr.endCnxId;
this.startShape = AscCommon.g_oTableId.Get_ById(stId);
this.endShape = AscCommon.g_oTableId.Get_ById(endId);
this.bConnector = true;
// if(this.startShape || this.endShape){
// this.bConnector = true;
// }
}
}
this.pageIndex = null;
var numberHandle = this.numberHandle;
this.flipH = originalObject.flipH;
this.flipV = originalObject.flipV;
var _flip_h = originalObject.flipH;
var _flip_v = originalObject.flipV;
var _half_height = originalObject.extY*0.5;
var _half_width = originalObject.extX*0.5;
var _sin = Math.sin(originalObject.rot);
var _cos = Math.cos(originalObject.rot);
var _translated_num_handle;
if(!_flip_h && !_flip_v)
{
_translated_num_handle = numberHandle;
}
else if(_flip_h && !_flip_v)
{
_translated_num_handle = TRANSLATE_HANDLE_FLIP_H[numberHandle];
}
else if(!_flip_h && _flip_v)
{
_translated_num_handle = TRANSLATE_HANDLE_FLIP_V[numberHandle];
}
else
{
_translated_num_handle = TRANSLATE_HANDLE_FLIP_H_AND_FLIP_V[numberHandle];
}
this.bAspect = numberHandle % 2 === 0;
this.aspect = this.bAspect === true ? this.originalObject.getAspect(_translated_num_handle) : 0;
this.sin = _sin;
this.cos = _cos;
this.translatetNumberHandle = _translated_num_handle;
switch (_translated_num_handle)
{
case 0:
case 1:
{
this.fixedPointX = (_half_width*_cos - _half_height*_sin) + _half_width + originalObject.x;
this.fixedPointY = (_half_width*_sin + _half_height*_cos) + _half_height + originalObject.y;
break;
}
case 2:
case 3:
{
this.fixedPointX = (-_half_width*_cos - _half_height*_sin) + _half_width + originalObject.x;
this.fixedPointY = (-_half_width*_sin + _half_height*_cos) + _half_height + originalObject.y;
break;
}
case 4:
case 5:
{
this.fixedPointX = (-_half_width*_cos + _half_height*_sin) + _half_width + originalObject.x;
this.fixedPointY = (-_half_width*_sin - _half_height*_cos) + _half_height + originalObject.y;
break;
}
case 6:
case 7:
{
this.fixedPointX = (_half_width*_cos + _half_height*_sin) + _half_width + originalObject.x;
this.fixedPointY = (_half_width*_sin - _half_height*_cos) + _half_height + originalObject.y;
break;
}
}
this.mod = this.translatetNumberHandle % 4;
this.centerPointX = originalObject.x + _half_width;
this.centerPointY = originalObject.y + _half_height;
//this.lineFlag = originalObject.checkLine();
this.originalExtX = originalObject.extX;
this.originalExtY = originalObject.extY;
this.originalFlipH = _flip_h;
this.originalFlipV = _flip_v;
this.usedExtX = this.originalExtX === 0 ? (/*this.lineFlag ? this.originalExtX :*/ 0.01) : this.originalExtX;
this.usedExtY = this.originalExtY === 0 ? (/*this.lineFlag ? this.originalExtY :*/ 0.01) : this.originalExtY;
this.resizedExtX = this.originalExtX;
this.resizedExtY = this.originalExtY;
this.resizedflipH = _flip_h;
this.resizedflipV = _flip_v;
this.resizedPosX = originalObject.x;
this.resizedPosY = originalObject.y;
this.resizedRot = originalObject.rot;
this.transform = originalObject.transform.CreateDublicate();
this.geometry = AscFormat.ExecuteNoHistory(function(){ return originalObject.getTrackGeometry().createDuplicate();}, this, []);
this.cropObject = originalObject.cropObject;
var nObjectType = originalObject.getObjectType && originalObject.getObjectType();
if(nObjectType === AscDFH.historyitem_type_Chart
|| nObjectType === AscDFH.historyitem_type_GraphicFrame
|| nObjectType === AscDFH.historyitem_type_SlicerView)
{
var pen_brush = CreatePenBrushForChartTrack();
this.brush = pen_brush.brush;
this.pen = pen_brush.pen;
}
else
{
if(originalObject.blipFill)
{
this.brush = new AscFormat.CUniFill();
this.brush.fill = originalObject.blipFill;
}
else
{
this.brush = originalObject.brush;
}
this.pen = originalObject.pen;
if (originalObject.GetEditField && originalObject.GetEditField()) {
this.brush = null;
this.pen = null;
}
}
this.isLine = originalObject.spPr && originalObject.spPr.geometry && originalObject.spPr.geometry.preset === "line";
this.bChangeCoef = this.translatetNumberHandle % 2 === 0 && this.originalFlipH !== this.originalFlipV;
if(this.originalObject.cropObject)
{
if(this.brush)
{
this.brush = this.brush.createDuplicate();
}
this.pen = AscFormat.CreatePenBrushForChartTrack().pen;
}
this.overlayObject = new AscFormat.OverlayObject(this.geometry, this.resizedExtX, this.resizedExtY, this.brush, this.pen, this.transform);
this.resizeConnector = function(kd1, kd2, e, x, y){
var oConnectorInfo = this.originalObject.nvSpPr.nvUniSpPr;
var oBeginShape = AscCommon.g_oTableId.Get_ById(oConnectorInfo.stCnxId);
if(oBeginShape && oBeginShape.bDeleted){
oBeginShape = null;
}
var oEndShape = AscCommon.g_oTableId.Get_ById(oConnectorInfo.endCnxId);
if(oEndShape && oEndShape.bDeleted){
oEndShape = null;
}
var aDrawings = [];
this.drawingsController.getAllSingularDrawings(this.drawingsController.getDrawingArray(), aDrawings);
var oConnectionInfo = null;
var oNewShape = null;
this.oNewShape = null;
this.beginShapeId = null;
this.beginShapeIdx = null;
this.endShapeId = null;
this.endShapeIdx = null;
for(var i = aDrawings.length-1; i > -1; --i) {
if(aDrawings[i] === this.originalObject){
continue;
}
oConnectionInfo = aDrawings[i].findConnector(x, y);
if (oConnectionInfo) {
oNewShape = aDrawings[i];
this.oNewShape = oNewShape;
break;
}
}
if(!this.oNewShape){
for(var i = aDrawings.length - 1; i > -1; --i){
if(aDrawings[i] === this.originalObject){
continue;
}
var oCs = aDrawings[i].findConnectionShape(x, y);
if(oCs ){
this.oNewShape = oCs;
break;
}
}
}
if (Asc.editor.isPdfEditor())
oConnectionInfo = null;
var _beginConnectionInfo, _endConnectionInfo;
if(this.numberHandle === 0){
if(oEndShape){
var oConectionObject = oEndShape.getTrackGeometry().cnxLst[oConnectorInfo.endCnxIdx];
var g_conn_info = {idx: oConnectorInfo.endCnxIdx, ang: oConectionObject.ang, x: oConectionObject.x, y: oConectionObject.y};
var _flipH = oEndShape.flipH;
var _flipV = oEndShape.flipV;
var _rot = oEndShape.rot;
if(oEndShape.group){
_rot = AscFormat.normalizeRotate(oEndShape.group.getFullRotate() + _rot);
if(oEndShape.group.getFullFlipH()){
_flipH = !_flipH;
}
if(oEndShape.group.getFullFlipV()){
_flipV = !_flipV;
}
}
_endConnectionInfo = oEndShape.convertToConnectionParams(_rot, _flipH, _flipV, oEndShape.transform, oEndShape.bounds, g_conn_info);
}
_beginConnectionInfo = oConnectionInfo;
if(_beginConnectionInfo){
this.beginShapeId = this.oNewShape.Id;
this.beginShapeIdx = _beginConnectionInfo.idx;
}
}
else{
if(oBeginShape){
var oConectionObject = oBeginShape.getTrackGeometry().cnxLst[oConnectorInfo.stCnxIdx];
var g_conn_info = {idx: oConnectorInfo.stCnxIdx, ang: oConectionObject.ang, x: oConectionObject.x, y: oConectionObject.y};
var _flipH = oBeginShape.flipH;
var _flipV = oBeginShape.flipV;
var _rot = oBeginShape.rot;
if(oBeginShape.group){
_rot = AscFormat.normalizeRotate(oBeginShape.group.getFullRotate() + _rot);
if(oBeginShape.group.getFullFlipH()){
_flipH = !_flipH;
}
if(oBeginShape.group.getFullFlipV()){
_flipV = !_flipV;
}
}
_beginConnectionInfo = oBeginShape.convertToConnectionParams(_rot, _flipH, _flipV, oBeginShape.transform, oBeginShape.bounds, g_conn_info);
}
_endConnectionInfo = oConnectionInfo;
if(_endConnectionInfo){
this.endShapeId = this.oNewShape.Id;
this.endShapeIdx = _endConnectionInfo.idx;
}
}
var _x, _y;
if(_beginConnectionInfo || _endConnectionInfo){
if(!_beginConnectionInfo){
if(this.numberHandle === 0){
_beginConnectionInfo = AscFormat.fCalculateConnectionInfo(_endConnectionInfo, x, y);
}
else{
_x = this.originalObject.transform.TransformPointX(0, 0);
_y = this.originalObject.transform.TransformPointY(0, 0);
_beginConnectionInfo = AscFormat.fCalculateConnectionInfo(_endConnectionInfo, _x, _y);
}
}
if(!_endConnectionInfo){
if(this.numberHandle === 0){
_x = this.originalObject.transform.TransformPointX(this.originalObject.extX, this.originalObject.extY);
_y = this.originalObject.transform.TransformPointY(this.originalObject.extX, this.originalObject.extY);
_endConnectionInfo = AscFormat.fCalculateConnectionInfo(_beginConnectionInfo, _x, _y);
}
else{
_endConnectionInfo = AscFormat.fCalculateConnectionInfo(_beginConnectionInfo, x, y);
}
}
}
if(_beginConnectionInfo && _endConnectionInfo){
this.oSpPr = AscFormat.fCalculateSpPr(_beginConnectionInfo, _endConnectionInfo, this.originalObject.spPr.geometry.preset, this.overlayObject.pen.w);
if(this.originalObject.group){
var _xc = this.oSpPr.xfrm.offX + this.oSpPr.xfrm.extX / 2.0;
var _yc = this.oSpPr.xfrm.offY + this.oSpPr.xfrm.extY / 2.0;
var xc = this.originalObject.group.invertTransform.TransformPointX(_xc, _yc);
var yc = this.originalObject.group.invertTransform.TransformPointY(_xc, _yc);
this.oSpPr.xfrm.setOffX(xc - this.oSpPr.xfrm.extX / 2.0);
this.oSpPr.xfrm.setOffY(yc - this.oSpPr.xfrm.extY / 2.0);
this.oSpPr.xfrm.setFlipH(this.originalObject.group.getFullFlipH() ? !this.oSpPr.xfrm.flipH : this.oSpPr.xfrm.flipH);
this.oSpPr.xfrm.setFlipV(this.originalObject.group.getFullFlipV() ? !this.oSpPr.xfrm.flipV : this.oSpPr.xfrm.flipV);
this.oSpPr.xfrm.setRot(AscFormat.normalizeRotate(this.oSpPr.xfrm.rot - this.originalObject.group.getFullRotate()));
}
var _xfrm = this.oSpPr.xfrm;
this.resizedExtX = _xfrm.extX;
this.resizedExtY = _xfrm.extY;
this.resizedflipH = _xfrm.flipH;
this.resizedflipV = _xfrm.flipV;
this.resizedPosX = _xfrm.offX;
this.resizedPosY = _xfrm.offY;
this.resizedRot = _xfrm.rot;
this.recalculateTransform();
this.geometry = this.oSpPr.geometry;
this.overlayObject.geometry = this.geometry;
this.geometry.Recalculate(this.oSpPr.xfrm.extX, this.oSpPr.xfrm.extY);
}
else{
this.oSpPr = null;
this.resizedRot = this.originalObject.rot;
this.geometry = AscFormat.ExecuteNoHistory(function(){
return originalObject.spPr.geometry.createDuplicate();
}, this, []);
this.overlayObject.geometry = this.geometry;
this.resize(kd1, kd2, e.ShiftKey);
}
};
this.correctKDForPdfFreeText = function(kd1, kd2) {
// точка коннектора соединённая с перпендикулярной линией должна двигаться только по одной из осей
// этот метод обрабатывает данный случай и корректирует координаты
let oFreeText = this.originalObject.group;
let oFreeTextRect = oFreeText.GetTextBoxRect().map(function(measure) {
return measure * g_dKoef_pt_to_mm;
});
let aCallout = oFreeText.GetCallout();
let oExitPoint = undefined; // перпендикулярная линия выходящая из freetext аннотации
let oCalloutArrowPt = undefined; // x2, y2 точка линии (точка начала стрелки)
let oCalloutArrowEndPt = undefined; // x1, y1 точка линии (точка конца стрелки)
if (aCallout && aCallout.length == 6) {
// точка выхода callout из аннотации
oExitPoint = {
x: (aCallout[2 * 2]) * g_dKoef_pt_to_mm,
y: (aCallout[2 * 2 + 1]) * g_dKoef_pt_to_mm
};
// x2, y2 линии
oCalloutArrowPt = {
x: aCallout[1 * 2] * g_dKoef_pt_to_mm,
y: (aCallout[1 * 2 + 1]) * g_dKoef_pt_to_mm
};
oCalloutArrowEndPt = {
x: aCallout[0 * 2] * g_dKoef_pt_to_mm,
y: (aCallout[0 * 2 + 1]) * g_dKoef_pt_to_mm
}
}
else {
return;
}
if (this.numberHandle == 4) {
// если x начала стрелки находится в пределах ректа аннотации то фиксируем x
if (oCalloutArrowPt.x < oFreeTextRect[0] || oCalloutArrowPt.x > oFreeTextRect[2]) {
kd2 = 1;
}
else {
kd1 = 1;
}
}
return {kd1: kd1, kd2: kd2};
};
this.correctXYForPdfFreeText = function(x, y) {
let oFreeText = this.originalObject.group;
let aCallout = oFreeText.GetCallout(true);
let aCalloutMM = aCallout ? aCallout.map(function(measure) {return measure * g_dKoef_pt_to_mm}) : undefined;
let aTextBoxRectMM = oFreeText.GetTextBoxRect().map(function(measure) {return measure * g_dKoef_pt_to_mm});
let nExitPos = oFreeText.GetCalloutExitPos();
if (!aCalloutMM)
return {x: x, y: y};
// x1, y1 линии callout
if (this.numberHandle == 0) {
// если конец стрелки внутри textbox то поднимаем выше/ниже
if (x >= aTextBoxRectMM[0] && x <= aTextBoxRectMM[2] && y >= aTextBoxRectMM[1] && y <= aTextBoxRectMM[3]) {
if (y <= aTextBoxRectMM[1] + (aTextBoxRectMM[3] - aTextBoxRectMM[1]) / 2) {
y = aTextBoxRectMM[1] - 10;
}
else if (y >= aTextBoxRectMM[3] - (aTextBoxRectMM[3] - aTextBoxRectMM[1]) / 2) {
y = aTextBoxRectMM[3] + 10;
}
}
}
// x2, y2 линии
else if (this.numberHandle == 4) {
// фиксируем x или y в зависимости от положения стрелки
switch (nExitPos) {
case AscPDF.CALLOUT_EXIT_POS.left:
case AscPDF.CALLOUT_EXIT_POS.right:
y = aCalloutMM[1 * 2 + 1];
break;
case AscPDF.CALLOUT_EXIT_POS.top:
case AscPDF.CALLOUT_EXIT_POS.bottom:
x = aCalloutMM[1 * 2];
break;
}
}
return {x: x, y: y};
};
this.track = function(kd1, kd2, e, x, y){
AscFormat.ExecuteNoHistory(function () {
this.bIsTracked = true;
if(this.bConnector){
this.resizeConnector(kd1, kd2, e, x, y);
}
else if(!(e.CtrlKey || this.originalObject.isObjectInSmartArt())){
this.resize(kd1, kd2, e.ShiftKey);
}
else{
this.resizeRelativeCenter(kd1, kd2, e.ShiftKey)
}
}, this, []);
};
this.resize = function(kd1, kd2, ShiftKey)
{
this.bLastCenter = false;
var _cos = this.cos;
var _sin = this.sin;
var _real_height, _real_width;
var _abs_height, _abs_width;
var _new_resize_half_width;
var _new_resize_half_height;
var _new_used_half_width;
var _new_used_half_height;
var _temp;
if (Asc.editor.isPdfEditor()) {
let isFreeText = this.originalObject.group && this.originalObject.group.IsAnnot() && this.originalObject.group.IsFreeText();
if (isFreeText && this.originalObject.getPresetGeom() == "line" && this.numberHandle == 4) {
let oXY = this.correctKDForPdfFreeText(kd1, kd2);
kd1 = oXY.kd1;
kd2 = oXY.kd2;
}
}
if(this.originalObject.getObjectType && this.originalObject.getObjectType() === AscDFH.historyitem_type_GraphicFrame){
if(kd1 < 0){
kd1 = 0;
}
if(kd2 < 0){
kd2 = 0;
}
}
var isCrop = (this.originalObject.isCrop || !!this.originalObject.cropObject);
if((ShiftKey === true || (window.AscAlwaysSaveAspectOnResizeTrack === true && !this.isLine) || (!isCrop && this.originalObject.getNoChangeAspect())) && this.bAspect === true)
{
var _new_aspect = this.aspect*(Math.abs(kd1/ kd2));
if (_new_aspect >= this.aspect)
kd2 = Math.abs(kd1)*(kd2 >= 0 ? 1 : -1 );
else
kd1 = Math.abs(kd2)*(kd1 >= 0 ? 1 : -1);
}
if(this.bChangeCoef)
{
_temp = kd1;
kd1 = kd2;
kd2 = _temp;
}
switch (this.translatetNumberHandle)
{
case 0:
case 1:
{
if(this.translatetNumberHandle === 0)
{
_real_width = this.usedExtX*kd1;
_abs_width = Math.abs(_real_width);
if(!this.isLine)
{
this.resizedExtX = _abs_width >= MIN_SHAPE_SIZE ? _abs_width : MIN_SHAPE_SIZE;
}
else
{
this.resizedExtX = _abs_width >= MIN_SHAPE_SIZE ? _abs_width : 0;
}
if(_real_width < 0 )
{
this.resizedflipH = !this.originalFlipH;
}
else
this.resizedflipH = this.originalFlipH;
}
if(this.translatetNumberHandle === 1)
{
_temp = kd1;
kd1 = kd2;
kd2 = _temp;
}
_real_height = this.usedExtY*kd2;
_abs_height = Math.abs(_real_height);
if(!this.isLine)
{
this.resizedExtY = _abs_height >= MIN_SHAPE_SIZE ? _abs_height : MIN_SHAPE_SIZE;
}
else
{
this.resizedExtY = _abs_height >= MIN_SHAPE_SIZE ? _abs_height : 0;
}
this.resizedExtY = _abs_height >= MIN_SHAPE_SIZE || this.isLine ? _abs_height : MIN_SHAPE_SIZE;
if(_real_height < 0 )
{
this.resizedflipV = !this.originalFlipV;
if(this.isLine && ShiftKey)
{
this.resizedflipH = !this.originalFlipH;
}
}
else
{
this.resizedflipV = this.originalFlipV;
if(this.isLine && ShiftKey && this.resizedflipH !== this.originalFlipH)
{
this.resizedflipV = !this.originalFlipV;
}
}
_new_resize_half_width = this.resizedExtX*0.5;
_new_resize_half_height = this.resizedExtY*0.5;
if(this.resizedflipH !== this.originalFlipH)
{
_new_used_half_width = -_new_resize_half_width;
}
else
{
_new_used_half_width = _new_resize_half_width;
}
if(this.resizedflipV !== this.originalFlipV)
{
_new_used_half_height = -_new_resize_half_height;
}
else
{
_new_used_half_height = _new_resize_half_height;
}
this.resizedPosX = this.fixedPointX + (-_new_used_half_width*_cos + _new_used_half_height*_sin) - _new_resize_half_width;
this.resizedPosY = this.fixedPointY + (-_new_used_half_width*_sin - _new_used_half_height*_cos) - _new_resize_half_height;
break;
}
case 2:
case 3:
{
if(this.translatetNumberHandle === 2)
{
_temp = kd2;
kd2 = kd1;
kd1 = _temp;
_real_height = this.usedExtY*kd2;
_abs_height = Math.abs(_real_height);
this.resizedExtY = _abs_height >= MIN_SHAPE_SIZE ? _abs_height : (this.isLine ? 0 : MIN_SHAPE_SIZE);
if(_real_height < 0 )
this.resizedflipV = !this.originalFlipV;
else
this.resizedflipV = this.originalFlipV;
}
_real_width = this.usedExtX*kd1;
_abs_width = Math.abs(_real_width);
this.resizedExtX = _abs_width >= MIN_SHAPE_SIZE ? _abs_width : (this.isLine ? 0 : MIN_SHAPE_SIZE);
if(_real_width < 0 )
{
this.resizedflipH = !this.originalFlipH;
if(this.isLine && ShiftKey)
{
this.resizedflipV = !this.originalFlipV;
}
}
else
{
this.resizedflipH = this.originalFlipH;
if(this.isLine && ShiftKey && this.resizedflipV !== this.originalFlipV)
{
this.resizedflipH = !this.originalFlipH;
}
}
_new_resize_half_width = this.resizedExtX*0.5;
_new_resize_half_height = this.resizedExtY*0.5;
if(this.resizedflipH !== this.originalFlipH)
{
_new_used_half_width = -_new_resize_half_width;
}
else
{
_new_used_half_width = _new_resize_half_width;
}
if(this.resizedflipV !== this.originalFlipV)
{
_new_used_half_height = -_new_resize_half_height;
}
else
{
_new_used_half_height = _new_resize_half_height;
}
this.resizedPosX = this.fixedPointX + (_new_used_half_width*_cos + _new_used_half_height*_sin) - _new_resize_half_width;
this.resizedPosY = this.fixedPointY + (_new_used_half_width*_sin - _new_used_half_height*_cos) - _new_resize_half_height;
break;
}
case 4:
case 5:
{
if(this.translatetNumberHandle === 4)
{
_real_width = this.usedExtX*kd1;
_abs_width = Math.abs(_real_width);
this.resizedExtX = _abs_width >= MIN_SHAPE_SIZE ? _abs_width : (this.isLine ? 0 :MIN_SHAPE_SIZE);
if(_real_width < 0 )
this.resizedflipH = !this.originalFlipH;
else
this.resizedflipH = this.originalFlipH;
}
else
{
_temp = kd2;
kd2 = kd1;
kd1 = _temp;
}
_real_height = this.usedExtY*kd2;
_abs_height = Math.abs(_real_height);
this.resizedExtY = _abs_height >= MIN_SHAPE_SIZE ? _abs_height : (this.isLine ? 0 : MIN_SHAPE_SIZE);
if(_real_height < 0 )
{
this.resizedflipV = !this.originalFlipV;
if(this.isLine && ShiftKey)
{
this.resizedflipH = !this.originalFlipH;
}
}
else
{
this.resizedflipV = this.originalFlipV;
if(this.isLine && ShiftKey && this.resizedflipH !== this.originalFlipH)
{
this.resizedflipV = !this.originalFlipV;
}
}
_new_resize_half_width = this.resizedExtX*0.5;
_new_resize_half_height = this.resizedExtY*0.5;
if(this.resizedflipH !== this.originalFlipH)
{
_new_used_half_width = -_new_resize_half_width;
}
else
{
_new_used_half_width = _new_resize_half_width;
}
if(this.resizedflipV !== this.originalFlipV)
{
_new_used_half_height = -_new_resize_half_height;
}
else
{
_new_used_half_height = _new_resize_half_height;
}
this.resizedPosX = this.fixedPointX + (_new_used_half_width*_cos - _new_used_half_height*_sin) - _new_resize_half_width;
this.resizedPosY = this.fixedPointY + (_new_used_half_width*_sin + _new_used_half_height*_cos) - _new_resize_half_height;
break;
}
case 6:
case 7:
{
if(this.translatetNumberHandle === 6)
{
_real_height = this.usedExtY*kd1;
_abs_height = Math.abs(_real_height);
this.resizedExtY = _abs_height >= MIN_SHAPE_SIZE ? _abs_height : (this.isLine ? 0 : MIN_SHAPE_SIZE);
if(_real_height < 0 )
this.resizedflipV = !this.originalFlipV;
else
this.resizedflipV = this.originalFlipV;
}
else
{
_temp = kd2;
kd2 = kd1;
kd1 = _temp;
}
_real_width = this.usedExtX*kd2;
_abs_width = Math.abs(_real_width);
this.resizedExtX = _abs_width >= MIN_SHAPE_SIZE ? _abs_width : (this.isLine ? 0 : MIN_SHAPE_SIZE);
if(_real_width < 0 )
{
this.resizedflipH = !this.originalFlipH;
if(this.isLine && ShiftKey)
{
this.resizedflipV = !this.originalFlipV;
}
}
else
{
this.resizedflipH = this.originalFlipH;
if(this.isLine && ShiftKey && this.resizedflipV !== this.originalFlipV)
{
this.resizedflipH = !this.originalFlipH;
}
}
_new_resize_half_width = this.resizedExtX*0.5;
_new_resize_half_height = this.resizedExtY*0.5;
if(this.resizedflipH !== this.originalFlipH)
{
_new_used_half_width = -_new_resize_half_width;
}
else
{
_new_used_half_width = _new_resize_half_width;
}
if(this.resizedflipV !== this.originalFlipV)
{
_new_used_half_height = -_new_resize_half_height;
}
else
{
_new_used_half_height = _new_resize_half_height;
}
this.resizedPosX = this.fixedPointX + (-_new_used_half_width*_cos - _new_used_half_height*_sin) - _new_resize_half_width;
this.resizedPosY = this.fixedPointY + (-_new_used_half_width*_sin + _new_used_half_height*_cos) - _new_resize_half_height;
break;
}
}
if(isCrop){
this.resizedflipH = this.originalFlipH;
this.resizedflipV = this.originalFlipV;
}
if(this.originalObject.signatureLine ||
(this.originalObject.getObjectType && this.originalObject.getObjectType() === AscDFH.historyitem_type_OleObject)){
this.resizedflipH = false;
this.resizedflipV = false;
}
if (Asc.editor.isPdfEditor() && this.originalObject.IsAnnot && this.originalObject.IsAnnot()) {
if (this.originalObject.IsLine()) {
this.geometry.Recalculate(this.resizedExtX, this.resizedExtY);
}
else {
let xMin = this.resizedPosX;
let xMax = this.resizedPosX + this.resizedExtX;
let yMin = this.resizedPosY;
let yMax = this.resizedPosY + this.resizedExtY;
this.originalObject.RefillGeometry(this.geometry, [xMin, yMin, xMax, yMax]);
}
}
else {
this.geometry.Recalculate(this.resizedExtX, this.resizedExtY);
}
this.overlayObject.updateExtents(this.resizedExtX, this.resizedExtY);
this.recalculateTransform();
if(this.bConnector){
if(this.numberHandle === 0){
this.beginShapeIdx = null;
this.beginShapeId = null;
}
else{
this.endShapeIdx = null;
this.endShapeId = null;
}
}
};
this.resizeRelativeCenter = function(kd1, kd2, ShiftKey)
{
if(this.isLine)
{
this.resize(kd1, kd2, ShiftKey);
return;
}
this.bLastCenter = true;
kd1 = 2*kd1 - 1;
kd2 = 2*kd2 - 1;
if(this.originalObject.getObjectType && this.originalObject.getObjectType() === AscDFH.historyitem_type_GraphicFrame){
if(kd1 < 0){
kd1 = 0;
}
if(kd2 < 0){
kd2 = 0;
}
}
var _real_height, _real_width;
var _abs_height, _abs_width;
var isCrop = (this.originalObject.isCrop || !!this.originalObject.cropObject);
if((ShiftKey === true || window.AscAlwaysSaveAspectOnResizeTrack === true || (!isCrop && this.originalObject.getNoChangeAspect())) && this.bAspect === true)
{
var _new_aspect = this.aspect*(Math.abs(kd1/ kd2));
if (_new_aspect >= this.aspect)
kd2 = Math.abs(kd1)*(kd2 >= 0 ? 1 : -1 );
else
kd1 = Math.abs(kd2)*(kd1 >= 0 ? 1 : -1);
}
var _temp;
if(this.bChangeCoef)
{
_temp = kd1;
kd1 = kd2;
kd2 = _temp;
}
if(this.mod === 0 || this.mod === 1)
{
if(this.mod === 0)
{
_real_width = this.usedExtX*kd1;
_abs_width = Math.abs(_real_width);
this.resizedExtX = _abs_width >= MIN_SHAPE_SIZE || this.isLine ? _abs_width : MIN_SHAPE_SIZE;
this.resizedflipH = _real_width < 0 ? !this.originalFlipH : this.originalFlipH;
}
else
{
_temp = kd1;
kd1 = kd2;
kd2 = _temp;
}
_real_height = this.usedExtY*kd2;
_abs_height = Math.abs(_real_height);
this.resizedExtY = _abs_height >= MIN_SHAPE_SIZE || this.isLine ? _abs_height : MIN_SHAPE_SIZE;
this.resizedflipV = _real_height < 0 ? !this.originalFlipV : this.originalFlipV;
}
else
{
if(this.mod === 2)
{
_temp = kd1;
kd1 = kd2;
kd2 = _temp;
_real_height = this.usedExtY*kd2;
_abs_height = Math.abs(_real_height);
this.resizedExtY = _abs_height >= MIN_SHAPE_SIZE || this.isLine ? _abs_height : MIN_SHAPE_SIZE;
this.resizedflipV = _real_height < 0 ? !this.originalFlipV : this.originalFlipV;
}
_real_width = this.usedExtX*kd1;
_abs_width = Math.abs(_real_width);
this.resizedExtX = _abs_width >= MIN_SHAPE_SIZE || this.isLine ? _abs_width : MIN_SHAPE_SIZE;
this.resizedflipH = _real_width < 0 ? !this.originalFlipH : this.originalFlipH;
}
if(isCrop){
this.resizedflipH = this.originalFlipH;
this.resizedflipV = this.originalFlipV;
}
this.resizedPosX = this.centerPointX - this.resizedExtX*0.5;
this.resizedPosY = this.centerPointY - this.resizedExtY*0.5;
this.geometry.Recalculate(this.resizedExtX, this.resizedExtY);
this.overlayObject.updateExtents(this.resizedExtX, this.resizedExtY);
this.recalculateTransform();
};
this.recalculateTransform = function(){
var _transform = this.transform;
_transform.Reset();
var _horizontal_center = this.resizedExtX*0.5;
var _vertical_center = this.resizedExtY*0.5;
global_MatrixTransformer.TranslateAppend(_transform, -_horizontal_center, -_vertical_center);
// no flip inside FreeText annot
let isInFreeTextBody = this.originalObject.group && this.originalObject.group.IsFreeText && this.originalObject.group.IsFreeText() && this.originalObject.group.GetTextBoxShape() == this.originalObject;
if (!isInFreeTextBody)
{
if(this.resizedflipH)
{
global_MatrixTransformer.ScaleAppend(_transform, -1, 1);
}
if(this.resizedflipV)
{
global_MatrixTransformer.ScaleAppend(_transform, 1, -1);
}
}
global_MatrixTransformer.RotateRadAppend(_transform, -this.resizedRot);
global_MatrixTransformer.TranslateAppend(_transform, this.resizedPosX, this.resizedPosY);
global_MatrixTransformer.TranslateAppend(_transform, _horizontal_center, _vertical_center);
if(this.originalObject.group)
{
global_MatrixTransformer.MultiplyAppend(_transform, this.originalObject.group.transform);
}
if (this.smartartParent)
{
var parent_transform = this.smartartParent.Get_ParentTextTransform && this.smartartParent.Get_ParentTextTransform();
if(parent_transform)
{
global_MatrixTransformer.MultiplyAppend(_transform, parent_transform);
}
}
if(this.originalObject.parent)
{
var parent_transform = this.originalObject.parent.Get_ParentTextTransform && this.originalObject.parent.Get_ParentTextTransform();
if(parent_transform)
{
global_MatrixTransformer.MultiplyAppend(_transform, parent_transform);
}
}
if(this.chartSpace)
{
global_MatrixTransformer.MultiplyAppend(_transform, this.chartSpace.transform);
}
if(this.originalObject.cropObject)
{
var oShapeDrawer = new AscCommon.CShapeDrawer();
oShapeDrawer.bIsCheckBounds = true;
oShapeDrawer.Graphics = new AscFormat.CSlideBoundsChecker();
this.overlayObject.check_bounds(oShapeDrawer);
this.brush.fill.srcRect = AscFormat.CalculateSrcRect(_transform, oShapeDrawer, this.originalObject.cropObject.invertTransform, this.originalObject.cropObject.extX, this.originalObject.cropObject.extY);
}
};
this.draw = function(overlay, transform)
{
if(AscFormat.isRealNumber(this.originalObject.selectStartPage) && overlay.SetCurrentPage)
{
overlay.SetCurrentPage(this.originalObject.selectStartPage);
}
if(this.originalObject.isCrop)
{
var dOldAlpha = null;
var oGraphics = overlay.Graphics ? overlay.Graphics : overlay;
if(AscFormat.isRealNumber(oGraphics.globalAlpha) && oGraphics.put_GlobalAlpha)
{
dOldAlpha = oGraphics.globalAlpha;
oGraphics.put_GlobalAlpha(false, 1);
}
this.overlayObject.draw(overlay);
var oldFill = this.brush.fill;
this.brush.fill = this.originalObject.cropBrush.fill;
this.overlayObject.shapeDrawer.Clear();
this.overlayObject.draw(overlay);
this.brush.fill = oldFill;
var oldSrcRect, oldPen;
var parentCrop = this.originalObject.parentCrop;
var oShapeDrawer = new AscCommon.CShapeDrawer();
oShapeDrawer.bIsCheckBounds = true;
oShapeDrawer.Graphics = new AscFormat.CSlideBoundsChecker();
parentCrop.check_bounds(oShapeDrawer);
var srcRect = AscFormat.CalculateSrcRect(parentCrop.transform, oShapeDrawer, global_MatrixTransformer.Invert(this.transform), this.resizedExtX, this.resizedExtY);
oldPen = this.originalObject.parentCrop.pen;
this.originalObject.parentCrop.pen = AscFormat.CreatePenBrushForChartTrack().pen;
if(this.originalObject.parentCrop.blipFill)
{
oldSrcRect = this.originalObject.parentCrop.blipFill.srcRect;
this.originalObject.parentCrop.blipFill.srcRect = srcRect;
this.originalObject.parentCrop.draw(overlay);
this.originalObject.parentCrop.blipFill.srcRect = oldSrcRect;
}
else
{
oldSrcRect = this.originalObject.parentCrop.brush.fill.srcRect;
this.originalObject.parentCrop.brush.fill.srcRect = srcRect;
this.originalObject.parentCrop.draw(overlay);
this.originalObject.parentCrop.brush.fill.srcRect = oldSrcRect;
}
this.originalObject.parentCrop.pen = oldPen;
if(AscFormat.isRealNumber(dOldAlpha) && oGraphics.put_GlobalAlpha)
{
oGraphics.put_GlobalAlpha(true, dOldAlpha);
}
return;
}
if(this.originalObject.cropObject)
{
var dOldAlpha = null;
var oGraphics = overlay.Graphics ? overlay.Graphics : overlay;
if(AscFormat.isRealNumber(oGraphics.globalAlpha) && oGraphics.put_GlobalAlpha)
{
dOldAlpha = oGraphics.globalAlpha;
oGraphics.put_GlobalAlpha(false, 1);
}
this.originalObject.cropObject.draw(overlay);
this.overlayObject.pen = AscFormat.CreatePenBrushForChartTrack().pen;
this.overlayObject.draw(overlay, transform);
if(AscFormat.isRealNumber(dOldAlpha) && oGraphics.put_GlobalAlpha)
{
oGraphics.put_GlobalAlpha(true, dOldAlpha);
}
return;
}
if(this.oNewShape){
this.oNewShape.drawConnectors(overlay);
}
this.overlayObject.draw(overlay, transform);
};
this.getBounds = function()
{
var boundsChecker = new AscFormat.CSlideBoundsChecker();
var tr = null;
if(this.originalObject && this.originalObject.parent)
{
var parent_transform = this.originalObject.parent.Get_ParentTextTransform && this.originalObject.parent.Get_ParentTextTransform();
if(parent_transform)
{
tr = this.transform.CreateDublicate();
global_MatrixTransformer.MultiplyAppend(tr, global_MatrixTransformer.Invert(parent_transform));
}
}
this.draw(boundsChecker, tr ? tr : null);
tr = this.transform;
var arr_p_x = [];
var arr_p_y = [];
arr_p_x.push(tr.TransformPointX(0,0));
arr_p_y.push(tr.TransformPointY(0,0));
arr_p_x.push(tr.TransformPointX(this.resizedExtX,0));
arr_p_y.push(tr.TransformPointY(this.resizedExtX,0));
arr_p_x.push(tr.TransformPointX(this.resizedExtX,this.resizedExtY));
arr_p_y.push(tr.TransformPointY(this.resizedExtX,this.resizedExtY));
arr_p_x.push(tr.TransformPointX(0,this.resizedExtY));
arr_p_y.push(tr.TransformPointY(0,this.resizedExtY));
arr_p_x.push(boundsChecker.Bounds.min_x);
arr_p_x.push(boundsChecker.Bounds.max_x);
arr_p_y.push(boundsChecker.Bounds.min_y);
arr_p_y.push(boundsChecker.Bounds.max_y);
boundsChecker.Bounds.min_x = Math.min.apply(Math, arr_p_x);
boundsChecker.Bounds.max_x = Math.max.apply(Math, arr_p_x);
boundsChecker.Bounds.min_y = Math.min.apply(Math, arr_p_y);
boundsChecker.Bounds.max_y = Math.max.apply(Math, arr_p_y);
boundsChecker.Bounds.posX = this.resizedPosX;
boundsChecker.Bounds.posY = this.resizedPosY;
boundsChecker.Bounds.extX = this.resizedExtX;
boundsChecker.Bounds.extY = this.resizedExtY;
return boundsChecker.Bounds;
};
this.trackEnd = function(bWord)
{
if(!this.bIsTracked){
return;
}
if (this.originalObject.IsAnnot && this.originalObject.IsAnnot()) {
// changed size in SetRect method
return;
}
if(this.originalObject.animMotionTrack)
{
this.originalObject.updateAnimation(this.resizedPosX, this.resizedPosY,
this.resizedExtX, this.resizedExtY, this.originalObject.rot);
return;
}
if (this.originalObject.isObjectInSmartArt()) {
return;
if (this.resizedPosX < 0) {
this.resizedExtX = this.originalExtX + this.originalObject.x;
this.resizedPosX = 0;
}
if (this.resizedPosY < 0) {
this.resizedPosY = 0.000001; // TODO: fix this
this.resizedExtY = this.originalExtY + this.originalObject.y;
}
var oSmartArt = this.originalObject.group && this.originalObject.group.group;
if(oSmartArt) {
if (oSmartArt.x + oSmartArt.extX < this.resizedPosX + this.resizedExtX) {
this.resizedExtX = oSmartArt.extX - this.resizedPosX;
}
if (oSmartArt.y + oSmartArt.extY < this.resizedPosY + this.resizedExtY) {
this.resizedExtY = oSmartArt.extY - this.resizedPosY;
}
}
var point = this.originalObject.getSmartArtShapePoint();
if (point) {
var prSet = point.getPrSet();
var defaultExtX = this.originalExtX;
var defaultExtY = this.originalExtY;
if (prSet) {
if (prSet.custScaleX) {
defaultExtX /= prSet.custScaleX;
}
if (prSet.custScaleY) {
defaultExtY /= prSet.custScaleY;
}
if (this.resizedExtX !== this.originalExtX) {
prSet.setCustScaleX((this.resizedExtX / defaultExtX));
}
if (this.resizedExtY !== this.originalExtY) {
prSet.setCustScaleY((this.resizedExtY / defaultExtY));
}
}
}
}
if(this.chartSpace)
{
var oObjectToSet = this.originalObject;
if(!oObjectToSet.layout)
{
oObjectToSet.setLayout(new AscFormat.CLayout());
}
let pos;
if(this.originalObject.parent && this.originalObject.parent.getObjectType() === AscDFH.historyitem_type_TrendLine) {
pos = this.chartSpace.chartObj.recalculatePositionText(this.originalObject.parent);
pos = {x: pos.coordinate.catVal, y: pos.coordinate.valVal};
}
else {
pos = this.chartSpace.chartObj.recalculatePositionText(this.originalObject);
}
oObjectToSet.layout.setXMode(AscFormat.LAYOUT_MODE_EDGE);
oObjectToSet.layout.setYMode(AscFormat.LAYOUT_MODE_EDGE);
if(oObjectToSet instanceof AscFormat.CPlotArea)
{
oObjectToSet.layout.setLayoutTarget(AscFormat.LAYOUT_TARGET_INNER);
}
var fLayoutX = this.chartSpace.calculateLayoutByPos(pos.x, oObjectToSet.layout.xMode, this.resizedPosX, this.chartSpace.extX);
var fLayoutY = this.chartSpace.calculateLayoutByPos(pos.y, oObjectToSet.layout.yMode, this.resizedPosY, this.chartSpace.extY);
var fLayoutW = this.chartSpace.calculateLayoutBySize(this.resizedPosX, oObjectToSet.layout.wMode, this.chartSpace.extX, this.resizedExtX);
var fLayoutH = this.chartSpace.calculateLayoutBySize(this.resizedPosY, oObjectToSet.layout.hMode, this.chartSpace.extY, this.resizedExtY);
oObjectToSet.layout.setX(fLayoutX);
oObjectToSet.layout.setY(fLayoutY);
oObjectToSet.layout.setW(fLayoutW);
oObjectToSet.layout.setH(fLayoutH);
return;
}
if(!this.bConnector || !this.oSpPr){
var scale_coefficients, ch_off_x, ch_off_y;
if(this.originalObject.group)
{
scale_coefficients = this.originalObject.group.getResultScaleCoefficients();
ch_off_x = this.originalObject.group.spPr.xfrm.chOffX;
ch_off_y = this.originalObject.group.spPr.xfrm.chOffY;
}
else
{
scale_coefficients = {cx: 1, cy: 1};
ch_off_x = 0;
ch_off_y = 0;
if(bWord)
{
this.resizedPosX = 0;
this.resizedPosY = 0;
}
}
if(!this.originalObject.isCrop){
AscFormat.CheckSpPrXfrm(this.originalObject);
}
else{
AscFormat.ExecuteNoHistory(function () {
AscFormat.CheckSpPrXfrm(this.originalObject);
}, this, []);
}
var xfrm = this.originalObject.spPr.xfrm;
if (this.originalObject.txXfrm) {
var previousTxXfrmX = this.originalObject.txXfrm.offX;
var previousTxXfrmY = this.originalObject.txXfrm.offY;
var previousTxXfrmExtX = this.originalObject.txXfrm.extX;
var previousTxXfrmExtY = this.originalObject.txXfrm.extY;
var currentXfrmX = this.resizedPosX;
var currentXfrmY = this.resizedPosY;
var currentXfrmExtX = this.resizedExtX;
var currentXfrmExtY = this.resizedExtY;
this.originalObject.txXfrm.setOffX( currentXfrmX + (previousTxXfrmX - xfrm.offX));
this.originalObject.txXfrm.setOffY( currentXfrmY + (previousTxXfrmY - xfrm.offY));
this.originalObject.txXfrm.setExtX( previousTxXfrmExtX - (xfrm.extX - currentXfrmExtX));
this.originalObject.txXfrm.setExtY( previousTxXfrmExtY - (xfrm.extY - currentXfrmExtY));
}
if(this.originalObject.getObjectType() !== AscDFH.historyitem_type_GraphicFrame)
{
if(!this.originalObject.isCrop)
{
xfrm.setOffX(this.resizedPosX/scale_coefficients.cx + ch_off_x);
xfrm.setOffY(this.resizedPosY/scale_coefficients.cy + ch_off_y);
xfrm.setExtX(this.resizedExtX/scale_coefficients.cx);
xfrm.setExtY(this.resizedExtY/scale_coefficients.cy);
}
else
{
AscFormat.ExecuteNoHistory(function () {
xfrm.setOffX(this.resizedPosX/scale_coefficients.cx + ch_off_x);
xfrm.setOffY(this.resizedPosY/scale_coefficients.cy + ch_off_y);
xfrm.setExtX(this.resizedExtX/scale_coefficients.cx);
xfrm.setExtY(this.resizedExtY/scale_coefficients.cy);
}, this, []);
}
}
else
{
var oldX = xfrm.offX;
var oldY = xfrm.offY;
var newX = this.resizedPosX/scale_coefficients.cx + ch_off_x;
var newY = this.resizedPosY/scale_coefficients.cy + ch_off_y;
this.originalObject.resize(this.resizedExtX, this.resizedExtY);
if(!this.bLastCenter){
if(!AscFormat.fApproxEqual(oldX, newX, 0.5)){
xfrm.setOffX(this.resizedPosX/scale_coefficients.cx + ch_off_x - this.originalObject.extX + this.resizedExtX);
}
if(!AscFormat.fApproxEqual(oldY, newY, 0.5)){
xfrm.setOffY(this.resizedPosY/scale_coefficients.cy + ch_off_y - this.originalObject.extY + this.resizedExtY);
}
}
else{
xfrm.setOffX(this.resizedPosX + this.resizedExtX/2.0 - this.originalObject.extX/2);
xfrm.setOffY(this.resizedPosY + this.resizedExtY/2.0 - this.originalObject.extY/2);
}
}
if(this.originalObject.getObjectType() !== AscDFH.historyitem_type_ChartSpace &&
this.originalObject.getObjectType() !== AscDFH.historyitem_type_GraphicFrame &&
this.originalObject.getObjectType() !== AscDFH.historyitem_type_SlicerView)
{
if(!this.originalObject.isCrop)
{
xfrm.setFlipH(this.resizedflipH);
xfrm.setFlipV(this.resizedflipV);
}
else
{
AscFormat.ExecuteNoHistory(function () {
xfrm.setFlipH(this.resizedflipH);
xfrm.setFlipV(this.resizedflipV);
}, this, []);
}
}
if(this.originalObject.getObjectType && this.originalObject.getObjectType() === AscDFH.historyitem_type_OleObject)
{
this.originalObject.callPluginOnResize();
}
if(this.bConnector){
var nvUniSpPr = this.originalObject.nvSpPr.nvUniSpPr.copy();
if(this.numberHandle === 0){
nvUniSpPr.stCnxIdx = this.beginShapeIdx;
nvUniSpPr.stCnxId = this.beginShapeId;
this.originalObject.nvSpPr.setUniSpPr(nvUniSpPr);
}
else{
nvUniSpPr.endCnxIdx = this.endShapeIdx;
nvUniSpPr.endCnxId = this.endShapeId;
this.originalObject.nvSpPr.setUniSpPr(nvUniSpPr);
}
}
if(this.originalObject.isCrop)
{
AscFormat.ExecuteNoHistory(function(){
this.originalObject.recalculateGeometry();
}, this, []);
this.originalObject.transform = this.transform;
this.originalObject.invertTransform = AscCommon.global_MatrixTransformer.Invert(this.transform);
this.originalObject.extX = this.resizedExtX;
this.originalObject.extY = this.resizedExtY;
if(!this.originalObject.parentCrop.cropObject)
{
this.originalObject.parentCrop.cropObject = this.originalObject;
}
this.originalObject.parentCrop.calculateSrcRect();
}
if(this.cropObject && !this.originalObject.cropObject)
{
this.originalObject.cropObject = this.cropObject;
}
if(this.originalObject.cropObject)
{
this.originalObject.transform = this.transform;
this.originalObject.invertTransform = AscCommon.global_MatrixTransformer.Invert(this.transform);
this.originalObject.extX = this.resizedExtX;
this.originalObject.extY = this.resizedExtY;
this.originalObject.calculateSrcRect();
}
}
else{
var _xfrm = this.originalObject.spPr.xfrm;
var _xfrm2 = this.oSpPr.xfrm;
_xfrm.setOffX(_xfrm2.offX);
_xfrm.setOffY(_xfrm2.offY);
_xfrm.setExtX(_xfrm2.extX);
_xfrm.setExtY(_xfrm2.extY);
_xfrm.setFlipH(_xfrm2.flipH);
_xfrm.setFlipV(_xfrm2.flipV);
_xfrm.setRot(_xfrm2.rot);
this.originalObject.spPr.setGeometry(this.oSpPr.geometry.createDuplicate());
var nvUniSpPr = this.originalObject.nvSpPr.nvUniSpPr.copy();
if(this.numberHandle === 0){
nvUniSpPr.stCnxIdx = this.beginShapeIdx;
nvUniSpPr.stCnxId = this.beginShapeId;
this.originalObject.nvSpPr.setUniSpPr(nvUniSpPr);
}
else{
nvUniSpPr.endCnxIdx = this.endShapeIdx;
nvUniSpPr.endCnxId = this.endShapeId;
this.originalObject.nvSpPr.setUniSpPr(nvUniSpPr);
}
}
if(!this.originalObject.isCrop)
{
this.originalObject.ResetParametersWithResize();
this.originalObject.checkDrawingBaseCoords();
if(this.originalObject.checkExtentsByDocContent)
{
this.originalObject.checkExtentsByDocContent(true, true);
}
}
else
{
AscFormat.ExecuteNoHistory(function () {
this.originalObject.ResetParametersWithResize();
this.originalObject.checkDrawingBaseCoords();
}, this, []);
}
if (this.originalObject instanceof AscFormat.CShape && this.originalObject.isForm())
{
var nW = this.originalObject.spPr.xfrm.extX;
var nH = this.originalObject.spPr.xfrm.extY;
var oForm = this.originalObject.getInnerForm();
if (oForm)
oForm.OnChangeFixedFormTrack(nW, nH);
}
};
this.checkDrawingPartWithHistory = function () {
if (this.originalObject.checkDrawingPartWithHistory) {
const newObject = this.originalObject.checkDrawingPartWithHistory();
if (newObject) {
this.originalObject = newObject;
}
}
};
}, this, []);
}
function ResizeTrackGroup(originalObject, cardDirection, parentTrack)
{
AscFormat.ExecuteNoHistory(function()
{
this.bIsTracked = false;
this.original = originalObject;
this.originalObject = originalObject;
this.parentTrack = parentTrack;
var numberHandle;
if(AscFormat.isRealNumber(cardDirection))
{
this.numberHandle = originalObject.getNumByCardDirection(cardDirection);
numberHandle = this.numberHandle;
}
this.x = originalObject.x;
this.y = originalObject.y;
this.extX = originalObject.extX;
this.extY = originalObject.extY;
this.rot = originalObject.rot;
this.flipH = originalObject.flipH;
this.flipV = originalObject.flipV;
this.transform = originalObject.transform.CreateDublicate();
this.bSwapCoef = !(AscFormat.checkNormalRotate(this.rot));
this.childs = [];
var a = originalObject.spTree;
for(var i = 0; i < a.length; ++i)
{
if(a[i].isGroup())
this.childs[i] = new ResizeTrackGroup(a[i], null, this);
else
this.childs[i] = new ShapeForResizeInGroup(a[i], this);
}
if(typeof numberHandle === "number")
{
var _translated_num_handle;
var _flip_h = this.flipH;
var _flip_v = this.flipV;
var _sin = Math.sin(this.rot);
var _cos = Math.cos(this.rot);
var _half_width = this.extX*0.5;
var _half_height = this.extY*0.5;
if(!_flip_h && !_flip_v)
{
_translated_num_handle = numberHandle;
}
else if(_flip_h && !_flip_v)
{
_translated_num_handle = TRANSLATE_HANDLE_FLIP_H[numberHandle];
}
else if(!_flip_h && _flip_v)
{
_translated_num_handle = TRANSLATE_HANDLE_FLIP_V[numberHandle];
}
else
{
_translated_num_handle = TRANSLATE_HANDLE_FLIP_H_AND_FLIP_V[numberHandle];
}
this.bAspect = numberHandle % 2 === 0;
this.aspect = this.bAspect === true ? this.original.getAspect(_translated_num_handle) : 0;
this.sin = _sin;
this.cos = _cos;
this.translatetNumberHandle = _translated_num_handle;
switch (_translated_num_handle)
{
case 0:
case 1:
{
this.fixedPointX = (_half_width*_cos - _half_height*_sin) + _half_width + this.x;
this.fixedPointY = (_half_width*_sin + _half_height*_cos) + _half_height + this.y;
break;
}
case 2:
case 3:
{
this.fixedPointX = (-_half_width*_cos - _half_height*_sin) + _half_width + this.x;
this.fixedPointY = (-_half_width*_sin + _half_height*_cos) + _half_height + this.y;
break;
}
case 4:
case 5:
{
this.fixedPointX = (-_half_width*_cos + _half_height*_sin) + _half_width + this.x;
this.fixedPointY = (-_half_width*_sin - _half_height*_cos) + _half_height + this.y;
break;
}
case 6:
case 7:
{
this.fixedPointX = (_half_width*_cos + _half_height*_sin) + _half_width + this.x;
this.fixedPointY = (_half_width*_sin - _half_height*_cos) + _half_height + this.y;
break;
}
}
this.mod = this.translatetNumberHandle % 4;
this.centerPointX = this.x + _half_width;
this.centerPointY = this.y + _half_height;
this.lineFlag = false;
this.originalExtX = this.extX;
this.originalExtY = this.extY;
this.originalFlipH = _flip_h;
this.originalFlipV = _flip_v;
this.usedExtX = this.originalExtX === 0 ? (/*this.lineFlag ? this.originalExtX :*/ 0.01) : this.originalExtX;
this.usedExtY = this.originalExtY === 0 ? (/*this.lineFlag ? this.originalExtY :*/ 0.01) : this.originalExtY;
this.resizedExtX = this.originalExtX;
this.resizedExtY = this.originalExtY;
this.resizedflipH = _flip_h;
this.resizedflipV = _flip_v;
this.resizedPosX = this.x;
this.resizedPosY = this.y;
this.resizedRot = this.rot;
this.bChangeCoef = this.translatetNumberHandle % 2 === 0 && this.originalFlipH !== this.originalFlipV;
}
if(this.parentTrack)
{
this.centerDistX = this.x + this.extX*0.5 - this.parentTrack.extX*0.5;
this.centerDistY = this.y + this.extY*0.5 - this.parentTrack.extY*0.5;
}
this.track = function(kd1, kd2, e)
{
AscFormat.ExecuteNoHistory(function () {
this.bIsTracked = true;
if(!e.CtrlKey)
this.resize(kd1, kd2, e.ShiftKey);
else
this.resizeRelativeCenter(kd1, kd2, e.ShiftKey)
}, this, [])
};
this.resize = function(kd1, kd2, ShiftKey)
{
if (this.originalObject.hasSmartArt && this.originalObject.hasSmartArt()) {
if (this.bAspect === false) {
return;
}
ShiftKey = true;
}
var _cos = this.cos;
var _sin = this.sin;
var _real_height, _real_width;
var _abs_height, _abs_width;
var _new_resize_half_width;
var _new_resize_half_height;
var _new_used_half_width;
var _new_used_half_height;
var _temp;
var isCrop = (this.originalObject.isCrop || !!this.originalObject.cropObject);
if((ShiftKey === true || window.AscAlwaysSaveAspectOnResizeTrack === true || (!isCrop && this.originalObject.getNoChangeAspect())) && this.bAspect === true)
{
var _new_aspect = this.aspect*(Math.abs(kd1/ kd2));
if (_new_aspect >= this.aspect)
kd2 = Math.abs(kd1)*(kd2 >= 0 ? 1 : -1 );
else
kd1 = Math.abs(kd2)*(kd1 >= 0 ? 1 : -1);
}
if(this.bChangeCoef)
{
_temp = kd1;
kd1 = kd2;
kd2 = _temp;
}
switch (this.translatetNumberHandle)
{
case 0:
case 1:
{
if(this.translatetNumberHandle === 0)
{
_real_width = this.usedExtX*kd1;
_abs_width = Math.abs(_real_width);
this.resizedExtX = _abs_width >= MIN_SHAPE_SIZE || this.lineFlag ? _abs_width : MIN_SHAPE_SIZE;
if(_real_width < 0)
this.resizedflipH = !this.originalFlipH;
else
this.resizedflipH = this.originalFlipH;
}
if(this.translatetNumberHandle === 1)
{
_temp = kd1;
kd1 = kd2;
kd2 = _temp;
}
_real_height = this.usedExtY*kd2;
_abs_height = Math.abs(_real_height);
this.resizedExtY = _abs_height >= MIN_SHAPE_SIZE || this.lineFlag ? _abs_height : MIN_SHAPE_SIZE;
if(_real_height < 0)
this.resizedflipV = !this.originalFlipV;
else
this.resizedflipV = this.originalFlipV;
_new_resize_half_width = this.resizedExtX*0.5;
_new_resize_half_height = this.resizedExtY*0.5;
if(this.resizedflipH !== this.originalFlipH)
{
_new_used_half_width = -_new_resize_half_width;
}
else
{
_new_used_half_width = _new_resize_half_width;
}
if(this.resizedflipV !== this.originalFlipV)
{
_new_used_half_height = -_new_resize_half_height;
}
else
{
_new_used_half_height = _new_resize_half_height;
}
this.resizedPosX = this.fixedPointX + (-_new_used_half_width*_cos + _new_used_half_height*_sin) - _new_resize_half_width;
this.resizedPosY = this.fixedPointY + (-_new_used_half_width*_sin - _new_used_half_height*_cos) - _new_resize_half_height;
break;
}
case 2:
case 3:
{
if(this.translatetNumberHandle === 2)
{
_temp = kd2;
kd2 = kd1;
kd1 = _temp;
_real_height = this.usedExtY*kd2;
_abs_height = Math.abs(_real_height);
this.resizedExtY = _abs_height >= MIN_SHAPE_SIZE || this.lineFlag ? _abs_height : MIN_SHAPE_SIZE;
if(_real_height < 0)
this.resizedflipV = !this.originalFlipV;
else
this.resizedflipV = this.originalFlipV;
}
_real_width = this.usedExtX*kd1;
_abs_width = Math.abs(_real_width);
this.resizedExtX = _abs_width >= MIN_SHAPE_SIZE || this.lineFlag ? _abs_width : MIN_SHAPE_SIZE;
if(_real_width < 0)
this.resizedflipH = !this.originalFlipH;
else
this.resizedflipH = this.originalFlipH;
_new_resize_half_width = this.resizedExtX*0.5;
_new_resize_half_height = this.resizedExtY*0.5;
if(this.resizedflipH !== this.originalFlipH)
{
_new_used_half_width = -_new_resize_half_width;
}
else
{
_new_used_half_width = _new_resize_half_width;
}
if(this.resizedflipV !== this.originalFlipV)
{
_new_used_half_height = -_new_resize_half_height;
}
else
{
_new_used_half_height = _new_resize_half_height;
}
this.resizedPosX = this.fixedPointX + (_new_used_half_width*_cos + _new_used_half_height*_sin) - _new_resize_half_width;
this.resizedPosY = this.fixedPointY + (_new_used_half_width*_sin - _new_used_half_height*_cos) - _new_resize_half_height;
break;
}
case 4:
case 5:
{
if(this.translatetNumberHandle === 4)
{
_real_width = this.usedExtX*kd1;
_abs_width = Math.abs(_real_width);
this.resizedExtX = _abs_width >= MIN_SHAPE_SIZE || this.lineFlag ? _abs_width : MIN_SHAPE_SIZE;
if(_real_width < 0)
this.resizedflipH = !this.originalFlipH;
else
this.resizedflipH = this.originalFlipH;
}
else
{
_temp = kd2;
kd2 = kd1;
kd1 = _temp;
}
_real_height = this.usedExtY*kd2;
_abs_height = Math.abs(_real_height);
this.resizedExtY = _abs_height >= MIN_SHAPE_SIZE || this.lineFlag ? _abs_height : MIN_SHAPE_SIZE;
if(_real_height < 0)
this.resizedflipV = !this.originalFlipV;
else
this.resizedflipV = this.originalFlipV;
_new_resize_half_width = this.resizedExtX*0.5;
_new_resize_half_height = this.resizedExtY*0.5;
if(this.resizedflipH !== this.originalFlipH)
{
_new_used_half_width = -_new_resize_half_width;
}
else
{
_new_used_half_width = _new_resize_half_width;
}
if(this.resizedflipV !== this.originalFlipV)
{
_new_used_half_height = -_new_resize_half_height;
}
else
{
_new_used_half_height = _new_resize_half_height;
}
this.resizedPosX = this.fixedPointX + (_new_used_half_width*_cos - _new_used_half_height*_sin) - _new_resize_half_width;
this.resizedPosY = this.fixedPointY + (_new_used_half_width*_sin + _new_used_half_height*_cos) - _new_resize_half_height;
break;
}
case 6:
case 7:
{
if(this.translatetNumberHandle === 6)
{
_real_height = this.usedExtY*kd1;
_abs_height = Math.abs(_real_height);
this.resizedExtY = _abs_height >= MIN_SHAPE_SIZE || this.lineFlag ? _abs_height : MIN_SHAPE_SIZE;
if(_real_height < 0)
this.resizedflipV = !this.originalFlipV;
else
this.resizedflipV = this.originalFlipV;
}
else
{
_temp = kd2;
kd2 = kd1;
kd1 = _temp;
}
_real_width = this.usedExtX*kd2;
_abs_width = Math.abs(_real_width);
this.resizedExtX = _abs_width >= MIN_SHAPE_SIZE || this.lineFlag ? _abs_width : MIN_SHAPE_SIZE;
if(_real_width < 0)
this.resizedflipH = !this.originalFlipH;
else
this.resizedflipH = this.originalFlipH;
_new_resize_half_width = this.resizedExtX*0.5;
_new_resize_half_height = this.resizedExtY*0.5;
if(this.resizedflipH !== this.originalFlipH)
{
_new_used_half_width = -_new_resize_half_width;
}
else
{
_new_used_half_width = _new_resize_half_width;
}
if(this.resizedflipV !== this.originalFlipV)
{
_new_used_half_height = -_new_resize_half_height;
}
else
{
_new_used_half_height = _new_resize_half_height;
}
this.resizedPosX = this.fixedPointX + (-_new_used_half_width*_cos - _new_used_half_height*_sin) - _new_resize_half_width;
this.resizedPosY = this.fixedPointY + (-_new_used_half_width*_sin + _new_used_half_height*_cos) - _new_resize_half_height;
break;
}
}
this.x = this.resizedPosX;
this.y = this.resizedPosY;
this.extX = this.resizedExtX;
this.extY = this.resizedExtY;
this.flipH = this.resizedflipH;
this.flipV = this.resizedflipV;
var _transform = this.transform;
_transform.Reset();
var _horizontal_center = this.resizedExtX*0.5;
var _vertical_center = this.resizedExtY*0.5;
global_MatrixTransformer.TranslateAppend(_transform, -_horizontal_center, -_vertical_center);
if(this.resizedflipH)
{
global_MatrixTransformer.ScaleAppend(_transform, -1, 1);
}
if(this.resizedflipV)
{
global_MatrixTransformer.ScaleAppend(_transform, 1, -1);
}
global_MatrixTransformer.RotateRadAppend(_transform, -this.resizedRot);
global_MatrixTransformer.TranslateAppend(_transform, this.resizedPosX, this.resizedPosY);
global_MatrixTransformer.TranslateAppend(_transform, _horizontal_center, _vertical_center);
if(this.originalObject.parent)
{
var parent_transform = this.originalObject.parent.Get_ParentTextTransform && this.originalObject.parent.Get_ParentTextTransform();
if(parent_transform)
{
global_MatrixTransformer.MultiplyAppend(_transform, parent_transform);
}
}
var originalExtX, originalExtY;
if(AscFormat.isRealNumber(this.original.extX) && AscFormat.isRealNumber(this.original.extY)){
originalExtX = this.original.extX;
originalExtY = this.original.extY;
if(AscFormat.fApproxEqual(0.0, originalExtX)){
originalExtX = 1;
}
if(AscFormat.fApproxEqual(0.0, originalExtY)){
originalExtY = 1;
}
}
else {
var xfrm = this.original.spPr.xfrm;
if(xfrm){
originalExtX = xfrm.extX;
originalExtY = xfrm.extY;
}
if(!AscFormat.isRealNumber(originalExtX)){
originalExtX = 1;
}
if(!AscFormat.isRealNumber(originalExtY)){
originalExtY = 1;
}
}
if(AscFormat.fApproxEqual(0.0, originalExtX)){
originalExtX = 1;
}
if(AscFormat.fApproxEqual(0.0, originalExtY)){
originalExtY = 1;
}
var kw = this.resizedExtX/originalExtX;
var kh = this.resizedExtY/originalExtY;
for(var i = 0; i < this.childs.length; ++i)
{
var cur_child = this.childs[i];
cur_child.updateSize(kw, kh);
}
};
this.resizeRelativeCenter = function(kd1, kd2, ShiftKey)
{
kd1 = 2*kd1 - 1;
kd2 = 2*kd2 - 1;
var _real_height, _real_width;
var _abs_height, _abs_width;
var isCrop = (this.originalObject.isCrop || !!this.originalObject.cropObject);
if((ShiftKey === true || window.AscAlwaysSaveAspectOnResizeTrack === true || (!isCrop && this.originalObject.getNoChangeAspect())) && this.bAspect === true)
{
var _new_aspect = this.aspect*(Math.abs(kd1/ kd2));
if (_new_aspect >= this.aspect)
kd2 = Math.abs(kd1)*(kd2 >= 0 ? 1 : -1 );
else
kd1 = Math.abs(kd2)*(kd1 >= 0 ? 1 : -1);
}
var _temp;
if(this.bChangeCoef)
{
_temp = kd1;
kd1 = kd2;
kd2 = _temp;
}
if(this.mod === 0 || this.mod === 1)
{
if(this.mod === 0)
{
_real_width = this.usedExtX*kd1;
_abs_width = Math.abs(_real_width);
this.resizedExtX = _abs_width >= MIN_SHAPE_SIZE || this.lineFlag ? _abs_width : MIN_SHAPE_SIZE;
this.resizedflipH = _real_width < 0 ? !this.originalFlipH : this.originalFlipH;
}
else
{
_temp = kd1;
kd1 = kd2;
kd2 = _temp;
}
_real_height = this.usedExtY*kd2;
_abs_height = Math.abs(_real_height);
this.resizedExtY = _abs_height >= MIN_SHAPE_SIZE || this.lineFlag ? _abs_height : MIN_SHAPE_SIZE;
this.resizedflipV = _real_height < 0 ? !this.originalFlipV : this.originalFlipV;
}
else
{
if(this.mod === 2)
{
_temp = kd1;
kd1 = kd2;
kd2 = _temp;
_real_height = this.usedExtY*kd2;
_abs_height = Math.abs(_real_height);
this.resizedExtY = _abs_height >= MIN_SHAPE_SIZE || this.lineFlag ? _abs_height : MIN_SHAPE_SIZE;
this.resizedflipV = _real_height < 0 ? !this.originalFlipV : this.originalFlipV;
}
_real_width = this.usedExtX*kd1;
_abs_width = Math.abs(_real_width);
this.resizedExtX = _abs_width >= MIN_SHAPE_SIZE || this.lineFlag ? _abs_width : MIN_SHAPE_SIZE;
this.resizedflipH = _real_width < 0 ? !this.originalFlipH : this.originalFlipH;
}
this.resizedPosX = this.centerPointX - this.resizedExtX*0.5;
this.resizedPosY = this.centerPointY - this.resizedExtY*0.5;
this.x = this.resizedPosX;
this.y = this.resizedPosY;
this.extX = this.resizedExtX;
this.extY = this.resizedExtY;
this.flipH = this.resizedflipH;
this.flipV = this.resizedflipV;
var _transform = this.transform;
_transform.Reset();
var _horizontal_center = this.resizedExtX*0.5;
var _vertical_center = this.resizedExtY*0.5;
global_MatrixTransformer.TranslateAppend(_transform, -_horizontal_center, -_vertical_center);
if(this.resizedflipH)
{
global_MatrixTransformer.ScaleAppend(_transform, -1, 1);
}
if(this.resizedflipV)
{
global_MatrixTransformer.ScaleAppend(_transform, 1, -1);
}
global_MatrixTransformer.RotateRadAppend(_transform, -this.resizedRot);
global_MatrixTransformer.TranslateAppend(_transform, this.resizedPosX, this.resizedPosY);
global_MatrixTransformer.TranslateAppend(_transform, _horizontal_center, _vertical_center);
var xfrm = this.original.spPr.xfrm;
var kw = this.resizedExtX/xfrm.extX;
var kh = this.resizedExtY/xfrm.extY;
for(var i = 0; i< this.childs.length; ++i)
{
this.childs[i].updateSize(kw, kh);
}
};
this.updateSize = function(kw, kh)
{
this.bIsTracked = true;
var _kw, _kh;
if(this.bSwapCoef)
{
_kw = kh;
_kh = kw;
}
else
{
_kw = kw;
_kh = kh;
}
var xfrm = this.original.spPr.xfrm;
this.extX = xfrm.extX*_kw;
this.extY = xfrm.extY*_kh;
this.x = this.centerDistX*kw + this.parentTrack.extX*0.5 - this.extX*0.5;
this.y = this.centerDistY*kh + this.parentTrack.extY*0.5 - this.extY*0.5;
this.transform.Reset();
var t = this.transform;
global_MatrixTransformer.TranslateAppend(t, -this.extX*0.5, -this.extY*0.5);
if(xfrm.flipH == null ? false : xfrm.flipH)
{
global_MatrixTransformer.ScaleAppend(t, -1, 1);
}
if(xfrm.flipV == null ? false : xfrm.flipV)
{
global_MatrixTransformer.ScaleAppend(t, 1, -1);
}
global_MatrixTransformer.RotateRadAppend(t, xfrm.rot == null ? 0 : -xfrm.rot);
global_MatrixTransformer.TranslateAppend(t, this.x + this.extX*0.5, this.y+this.extY*0.5);
global_MatrixTransformer.MultiplyAppend(t, this.parentTrack.transform);
for(var i = 0; i < this.childs.length; ++i)
{
this.childs[i].updateSize(_kw, _kh);
}
};
this.draw = function(graphics)
{
if( AscFormat.isRealNumber(this.originalObject.selectStartPage) && graphics.SetCurrentPage)
{
graphics.SetCurrentPage(this.originalObject.selectStartPage);
}
for(var i = 0; i < this.childs.length; ++i)
{
this.childs[i].draw(graphics);
}
};
this.getBounds = function()
{
var boundsChecker = new AscFormat.CSlideBoundsChecker();
this.draw(boundsChecker);
var tr = this.transform;
var arr_p_x = [];
var arr_p_y = [];
arr_p_x.push(tr.TransformPointX(0,0));
arr_p_y.push(tr.TransformPointY(0,0));
arr_p_x.push(tr.TransformPointX(this.resizedExtX,0));
arr_p_y.push(tr.TransformPointY(this.resizedExtX,0));
arr_p_x.push(tr.TransformPointX(this.resizedExtX,this.resizedExtY));
arr_p_y.push(tr.TransformPointY(this.resizedExtX,this.resizedExtY));
arr_p_x.push(tr.TransformPointX(0,this.resizedExtY));
arr_p_y.push(tr.TransformPointY(0,this.resizedExtY));
arr_p_x.push(boundsChecker.Bounds.min_x);
arr_p_x.push(boundsChecker.Bounds.max_x);
arr_p_y.push(boundsChecker.Bounds.min_y);
arr_p_y.push(boundsChecker.Bounds.max_y);
boundsChecker.Bounds.min_x = Math.min.apply(Math, arr_p_x);
boundsChecker.Bounds.max_x = Math.max.apply(Math, arr_p_x);
boundsChecker.Bounds.min_y = Math.min.apply(Math, arr_p_y);
boundsChecker.Bounds.max_y = Math.max.apply(Math, arr_p_y);
boundsChecker.Bounds.posX = this.resizedPosX;
boundsChecker.Bounds.posY = this.resizedPosY;
boundsChecker.Bounds.extX = this.resizedExtX;
boundsChecker.Bounds.extY = this.resizedExtY;
return boundsChecker.Bounds;
};
this.trackEnd = function(bWord)
{
if (this.flipH !== this.original.flipH || this.flipV !== this.original.flipV) return;
if(!this.bIsTracked){
return;
}
if(!AscCommon.isRealObject(this.original.group))
{
this.original.normalize();
}
if(!this.original.spPr)
{
this.original.setSpPr(new AscFormat.CSpPr());
}
if(!this.original.spPr.xfrm)
{
this.original.spPr.setXfrm(new AscFormat.CXfrm());
this.original.spPr.xfrm.setParent(this.original.spPr);
}
var xfrm = this.original.spPr.xfrm;
if(bWord)
{
this.x = 0;
this.y = 0;
}
xfrm.setOffX(this.x);
xfrm.setOffY(this.y);
xfrm.setExtX(this.extX);
xfrm.setExtY(this.extY);
xfrm.setChExtX(this.extX);
xfrm.setChExtY(this.extY);
xfrm.setFlipH(this.flipH);
xfrm.setFlipV(this.flipV);
for(var i = 0; i < this.childs.length; ++i)
{
this.childs[i].trackEnd();
}
this.original.checkDrawingBaseCoords();
this.original.ResetParametersWithResize();
};
this.checkDrawingPartWithHistory = function () {
if (this.originalObject.getObjectType && this.originalObject.getObjectType() === AscDFH.historyitem_type_SmartArt) {
this.originalObject.checkDrawingPartWithHistory();
}
for(var i = 0; i < this.childs.length; ++i)
{
this.childs[i].checkDrawingPartWithHistory();
}
};
}, this, []);
}
function ShapeForResizeInGroup(originalObject, parentTrack)
{
AscFormat.ExecuteNoHistory(function()
{
this.originalObject = originalObject;
this.parentTrack = parentTrack;
this.x = originalObject.x;
this.y = originalObject.y;
this.extX = originalObject.extX;
this.extY = originalObject.extY;
this.rot = originalObject.rot;
this.flipH = originalObject.flipH;
this.flipV = originalObject.flipV;
this.origX = this.x;
this.origY = this.y;
this.origExtX = this.extX;
this.origExtY = this.extY;
this.transform = originalObject.transform.CreateDublicate();
this.bSwapCoef = !(AscFormat.checkNormalRotate(this.rot));
this.centerDistX = this.x + this.extX*0.5 - this.parentTrack.extX*0.5;
this.centerDistY = this.y + this.extY*0.5 - this.parentTrack.extY*0.5;
this.geometry = AscFormat.ExecuteNoHistory(function(){ return originalObject.getTrackGeometry().createDuplicate();}, this, []);
if(this.geometry)
{
this.geometry.Recalculate(this.extX, this.extY);
}
var brush;
if(originalObject.blipFill)
{
brush = new AscFormat.CUniFill();
brush.fill = originalObject.blipFill;
}
else
{
brush = originalObject.brush;
}
this.overlayObject = new AscFormat.OverlayObject(this.geometry, this.extX, this.extY, brush, originalObject.pen, this.transform);
this.updateSize = function(kw, kh)
{
var _kw, _kh;
if(this.bSwapCoef)
{
_kw = kh;
_kh = kw;
}
else
{
_kw = kw;
_kh = kh;
}
this.extX = this.originalObject.extX*_kw;
this.extY = this.originalObject.extY*_kh;
this.x = this.centerDistX*kw + this.parentTrack.extX*0.5 - this.extX*0.5;
this.y = this.centerDistY*kh + this.parentTrack.extY*0.5 - this.extY*0.5;
//if(this.geometry)
//{
// this.geometry.Recalculate(this.extX, this.extY);
//}
this.overlayObject.updateExtents(this.extX, this.extY);
this.transform.Reset();
var t = this.transform;
global_MatrixTransformer.TranslateAppend(t, -this.extX*0.5, -this.extY*0.5);
if(this.flipH)
{
global_MatrixTransformer.ScaleAppend(t, -1, 1);
}
if(this.flipV)
{
global_MatrixTransformer.ScaleAppend(t, 1, -1);
}
global_MatrixTransformer.RotateRadAppend(t, -this.rot);
global_MatrixTransformer.TranslateAppend(t, this.x + this.extX*0.5, this.y+this.extY*0.5);
global_MatrixTransformer.MultiplyAppend(t, this.parentTrack.transform);
};
this.draw = function(overlay)
{
this.overlayObject.draw(overlay);
};
this.getBounds = function()
{
var bounds_checker = new AscFormat.CSlideBoundsChecker();
bounds_checker.init(Page_Width, Page_Height, Page_Width, Page_Height);
this.draw(bounds_checker);
return {l: bounds_checker.Bounds.min_x, t: bounds_checker.Bounds.min_y, r: bounds_checker.Bounds.max_x , b: bounds_checker.Bounds.max_y};
};
this.trackEnd = function()
{
if(!this.originalObject.spPr.xfrm)
{
this.originalObject.spPr.setXfrm(new AscFormat.CXfrm());
this.originalObject.spPr.xfrm.setParent(this.originalObject.spPr);
}
var xfrm = this.originalObject.spPr.xfrm;
var txXfrm = this.originalObject.txXfrm;
if (txXfrm) {
var previousTxXfrmX = txXfrm.offX;
var previousTxXfrmY = txXfrm.offY;
var previousTxXfrmExtX = txXfrm.extX;
var previousTxXfrmExtY = txXfrm.extY;
var currentXfrmX = this.x;
var currentXfrmY = this.y;
var currentXfrmExtX = this.extX;
var currentXfrmExtY = this.extY;
var previousXfrmOffX = this.origX || 0.0001;
var previousXfrmOffY = this.origY || 0.0001;
var previousXfrmExtX = this.origExtX || 0.0001;
var previousXfrmExtY = this.origExtY || 0.0001;
txXfrm.setOffX( previousTxXfrmX * (currentXfrmX / previousXfrmOffX));
txXfrm.setOffY(previousTxXfrmY * (currentXfrmY / previousXfrmOffY));
txXfrm.setExtX( previousTxXfrmExtX * (currentXfrmExtX / previousXfrmExtX));
txXfrm.setExtY( previousTxXfrmExtY * (currentXfrmExtY / previousXfrmExtY));
}
xfrm.setOffX(this.x);
xfrm.setOffY(this.y);
xfrm.setExtX(this.extX);
xfrm.setExtY(this.extY);
this.originalObject.ResetParametersWithResize();
};
this.updateTransform = function()
{
this.transform.Reset();
var t = this.transform;
global_MatrixTransformer.TranslateAppend(t, -this.extX*0.5, -this.extY*0.5);
if(this.flipH)
{
global_MatrixTransformer.ScaleAppend(t, -1, 1);
}
if(this.flipV)
{
global_MatrixTransformer.ScaleAppend(t, 1, -1);
}
global_MatrixTransformer.RotateRadAppend(t, -this.rot);
global_MatrixTransformer.TranslateAppend(t, this.x + this.extX*0.5, this.y+this.extY*0.5);
if(this.parentTrack)
global_MatrixTransformer.MultiplyAppend(t, this.parentTrack.transform);
};
this.checkDrawingPartWithHistory = function () {};
}, this, []);
}
//--------------------------------------------------------export----------------------------------------------------
window['AscFormat'] = window['AscFormat'] || {};
window['AscFormat'].SHAPE_EXT = SHAPE_EXT;
window['AscFormat'].CreatePenBrushForChartTrack = CreatePenBrushForChartTrack;
window['AscFormat'].ResizeTrackShapeImage = ResizeTrackShapeImage;
window['AscFormat'].ResizeTrackGroup = ResizeTrackGroup;
})(window);