@vitrosoftware/common-ui-ts 1.1.111 → 1.1.113

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/css/std/controls/criterion/criterion.css +0 -12
  2. package/css/std/controls/date-picker/date-picker.css +1 -0
  3. package/css/std/controls/dropdown-button/dropdown-button.css +8 -8
  4. package/css/std/controls/expand-control-group/expand-control-group.css +10 -32
  5. package/css/std/controls/field-iterator/field-iterator.css +55 -7
  6. package/css/std/controls/field-iterator/img/collapse-bottom.svg +4 -0
  7. package/css/std/controls/field-iterator/img/collapse-up.svg +4 -0
  8. package/css/std/controls/input/input.css +1 -1
  9. package/css/std/controls/message-input/message-input.css +3 -1
  10. package/css/std/controls/pdf-viewer/compare.css +24 -24
  11. package/css/std/controls/pdf-viewer/custom.css +2 -2
  12. package/css/std/controls/pdf-viewer/form.css +78 -1
  13. package/css/std/controls/pdf-viewer/img/cancel-white.svg +10 -0
  14. package/css/std/controls/pdf-viewer/img/close-compare-viewer-active.svg +5 -0
  15. package/css/std/controls/pdf-viewer/img/close-compare-viewer.svg +5 -0
  16. package/css/std/controls/pdf-viewer/img/collapse-bottom.svg +5 -0
  17. package/css/std/controls/pdf-viewer/img/collapse-up-blue.svg +5 -0
  18. package/css/std/controls/pdf-viewer/img/compare-dlg-separator.svg +1 -0
  19. package/css/std/controls/pdf-viewer/img/compare-overlay.svg +1 -0
  20. package/css/std/controls/pdf-viewer/img/compare-side-by-side.svg +5 -0
  21. package/css/std/controls/pdf-viewer/img/finish-align-active.svg +8 -0
  22. package/css/std/controls/pdf-viewer/img/finish-align.svg +8 -0
  23. package/css/std/controls/pdf-viewer/img/fit-to-view-active.svg +5 -0
  24. package/css/std/controls/pdf-viewer/img/fit-to-view.svg +5 -0
  25. package/css/std/controls/pdf-viewer/img/hide-colors-active.svg +1 -0
  26. package/css/std/controls/pdf-viewer/img/hide-colors.svg +3 -0
  27. package/css/std/controls/pdf-viewer/img/overlay-active.svg +4 -0
  28. package/css/std/controls/pdf-viewer/img/overlay.svg +4 -0
  29. package/css/std/controls/pdf-viewer/img/pan-active.svg +3 -0
  30. package/css/std/controls/pdf-viewer/img/pan.svg +3 -0
  31. package/css/std/controls/pdf-viewer/img/panel-visibility-active.svg +8 -0
  32. package/css/std/controls/pdf-viewer/img/panel-visibility.svg +8 -0
  33. package/css/std/controls/pdf-viewer/img/side-by-side-active.svg +4 -0
  34. package/css/std/controls/pdf-viewer/img/side-by-side.svg +4 -0
  35. package/css/std/controls/pdf-viewer/img/zoom-active.svg +5 -0
  36. package/css/std/controls/pdf-viewer/img/zoom.svg +5 -0
  37. package/css/std/controls/pdf-viewer/measure.css +138 -7
  38. package/css/std/controls/pdf-viewer/pdf-viewer-index.css +309 -64
  39. package/css/std/controls/pdf-viewer/pdf-viewer.css +66 -30
  40. package/css/std/controls/search/search.css +2 -6
  41. package/css/std/controls/tab-group/tab-group.css +0 -8
  42. package/css/std/controls/view/view.css +15 -2
  43. package/dist/index.css +106 -87
  44. package/dist/index.js +362 -285
  45. package/dist/index.js.map +1 -1
  46. package/dist/src/controls/ExpandControlGroup/ExpandControlGroup.d.ts +9 -4
  47. package/dist/src/controls/ExpandControlGroup/ExpandControlGroupConstants.d.ts +4 -0
  48. package/dist/src/controls/FieldIterator/FieldIterator.d.ts +2 -1
  49. package/dist/src/controls/LookupPicker/LookupPicker.d.ts +3 -0
  50. package/dist/src/controls/View/GroupControl.d.ts +2 -0
  51. package/package.json +1 -1
  52. package/src/controls/BimViewer/js/bim-viewer.js +2 -2
  53. package/src/controls/PdfViewer/js/pdf-viewer.js +1171 -238
@@ -18966,19 +18966,21 @@ const PDFViewerApplication = {
18966
18966
  let sidebarView = _app_options.AppOptions.get("sidebarViewOnLoad");
18967
18967
  let scrollMode = _app_options.AppOptions.get("scrollModeOnLoad");
18968
18968
  let spreadMode = _app_options.AppOptions.get("spreadModeOnLoad");
18969
- if (stored?.page && viewOnLoad !== ViewOnLoad.INITIAL) {
18970
- hash = `page=${stored.page}&zoom=${zoom || stored.zoom},` + `${stored.scrollLeft},${stored.scrollTop}`;
18971
- rotation = parseInt(stored.rotation, 10);
18972
- if (sidebarView === _ui_utils.SidebarView.UNKNOWN) {
18973
- sidebarView = stored.sidebarView | 0;
18974
- }
18975
- if (scrollMode === _ui_utils.ScrollMode.UNKNOWN) {
18976
- scrollMode = stored.scrollMode | 0;
18977
- }
18978
- if (spreadMode === _ui_utils.SpreadMode.UNKNOWN) {
18979
- spreadMode = stored.spreadMode | 0;
18980
- }
18981
- }
18969
+ // @TODO.SA - changed
18970
+ // Fix: always default scale = "auto"
18971
+ //if (stored?.page && viewOnLoad !== ViewOnLoad.INITIAL) {
18972
+ // hash = `page=${stored.page}&zoom=${zoom || stored.zoom},` + `${stored.scrollLeft},${stored.scrollTop}`;
18973
+ // rotation = parseInt(stored.rotation, 10);
18974
+ // if (sidebarView === _ui_utils.SidebarView.UNKNOWN) {
18975
+ // sidebarView = stored.sidebarView | 0;
18976
+ // }
18977
+ // if (scrollMode === _ui_utils.ScrollMode.UNKNOWN) {
18978
+ // scrollMode = stored.scrollMode | 0;
18979
+ // }
18980
+ // if (spreadMode === _ui_utils.SpreadMode.UNKNOWN) {
18981
+ // spreadMode = stored.spreadMode | 0;
18982
+ // }
18983
+ //}
18982
18984
  if (pageMode && sidebarView === _ui_utils.SidebarView.UNKNOWN) {
18983
18985
  sidebarView = (0, _ui_utils.apiPageModeToSidebarView)(pageMode);
18984
18986
  }
@@ -21206,7 +21208,7 @@ const defaultOptions = {
21206
21208
  kind: OptionKind.WORKER
21207
21209
  },
21208
21210
  workerSrc: {
21209
- value: "resource/pdfViewer/js/pdf.worker.js?version=1.1.111",
21211
+ value: "resource/pdfViewer/js/pdf.worker.js?version=1.1.113",
21210
21212
  kind: OptionKind.WORKER
21211
21213
  }
21212
21214
  };
@@ -32242,24 +32244,24 @@ function createNote(pageNr, index, options) {
32242
32244
  note.html(options.content.label);
32243
32245
 
32244
32246
  var currentScale = getPdfCanvasScale();
32245
- var scalledOptions = jQuery.extend(true, {}, options);
32247
+ var scalledOptions = jQuery.extend(true, {}, options);
32246
32248
 
32247
32249
  // Change default label position for ellipse, polygon, line, arrow
32248
- if(scalledOptions.svg && (scalledOptions.svg.type == 'ellipse' || scalledOptions.svg.type == 'polygon')) {
32249
- scalledOptions.position.y = scalledOptions.position.y + scalledOptions.svg.height/2;
32250
- } else if(scalledOptions.svg && (scalledOptions.svg.type == 'line' || scalledOptions.svg.type == 'arrow')) {
32251
- if(scalledOptions.svg.direction == 'bltr') {
32250
+ if (scalledOptions.svg && (scalledOptions.svg.type == 'ellipse' || scalledOptions.svg.type == 'polygon')) {
32251
+ scalledOptions.position.y = scalledOptions.position.y + scalledOptions.svg.height / 2;
32252
+ } else if (scalledOptions.svg && (scalledOptions.svg.type == 'line' || scalledOptions.svg.type == 'arrow' || scalledOptions.svg.type == 'msr_line')) {
32253
+ if (scalledOptions.svg.direction == 'bltr') {
32252
32254
  scalledOptions.position.y = scalledOptions.position.y + scalledOptions.svg.height;
32253
- } else if(scalledOptions.svg.direction == 'trbl') {
32255
+ } else if (scalledOptions.svg.direction == 'trbl') {
32254
32256
  scalledOptions.position.x = scalledOptions.position.x + scalledOptions.svg.width;
32255
- } else if(scalledOptions.svg.direction == 'brtl') {
32257
+ } else if (scalledOptions.svg.direction == 'brtl') {
32256
32258
  scalledOptions.position.x = scalledOptions.position.x + scalledOptions.svg.width;
32257
32259
  scalledOptions.position.y = scalledOptions.position.y + scalledOptions.svg.height;
32258
32260
  }
32259
32261
  }
32260
32262
 
32261
- scalledOptions.position.x = scalledOptions.position.x*currentScale;
32262
- scalledOptions.position.y = scalledOptions.position.y*currentScale;
32263
+ scalledOptions.position.x = scalledOptions.position.x * currentScale;
32264
+ scalledOptions.position.y = scalledOptions.position.y * currentScale;
32263
32265
 
32264
32266
  var noteCssPosLeft = scalledOptions.position.x;
32265
32267
  var noteCssPosTop = scalledOptions.position.y;
@@ -32267,8 +32269,8 @@ function createNote(pageNr, index, options) {
32267
32269
 
32268
32270
  var pagesRotation = getPdfPagesRotation();
32269
32271
 
32270
- if(pagesRotation > 0) {
32271
- var noteNormalizedPosition = getNoteLabelPositionWithRotation({pageNr: pageNr, position: scalledOptions.position}, pagesRotation);
32272
+ if (pagesRotation > 0) {
32273
+ var noteNormalizedPosition = getNoteLabelPositionWithRotation({ pageNr: pageNr, position: scalledOptions.position }, pagesRotation);
32272
32274
  noteCssPosLeft = noteNormalizedPosition.x;
32273
32275
  noteCssPosTop = noteNormalizedPosition.y;
32274
32276
  noteCssTransform += ' rotate(' + pagesRotation + 'deg)';
@@ -32277,7 +32279,7 @@ function createNote(pageNr, index, options) {
32277
32279
  note.css('left', noteCssPosLeft + 'px');
32278
32280
  note.css('top', noteCssPosTop + 'px');
32279
32281
 
32280
- var pageElm = $('.page[data-page-number="' + pageNr + '"]');
32282
+ var pageElm = $('.page[data-page-number="' + pageNr + '"]');
32281
32283
  note.css('transform', noteCssTransform);
32282
32284
 
32283
32285
  bindOnClickNote(note);
@@ -32359,7 +32361,7 @@ function initDlg(pageNr, $triggerElement, clickEvent) {
32359
32361
  });
32360
32362
  }
32361
32363
 
32362
- function initDlgForSvg(svgData) {
32364
+ function initDlgForSvg(svgData, fnSuccess, fnCancel, fnSuccessParam, fnCancelParam) {
32363
32365
  createDlgElm();
32364
32366
 
32365
32367
  dialog = getDlgElm().dialog({
@@ -32369,17 +32371,24 @@ function initDlgForSvg(svgData) {
32369
32371
  modal: true,
32370
32372
  resizable: true,
32371
32373
  buttons: {
32372
- "Add Note": function() {
32374
+ "Add Note": function () {
32373
32375
  saveNote(false, false, false, true, svgData);
32376
+ if ($.isFunction(fnSuccess)) {
32377
+ fnSuccess(fnSuccessParam);
32378
+ }
32374
32379
  closeDlg();
32375
32380
  },
32376
- Cancel: function() {
32377
- removeSvg(svgData.data); // remove SVG
32381
+ Cancel: function () {
32382
+ if ($.isFunction(fnCancel)) {
32383
+ fnCancel(fnCancelParam);
32384
+ }
32378
32385
  closeDlg();
32379
32386
  }
32380
32387
  },
32381
- close: function() {
32382
- removeSvg(svgData.data); // remove SVG
32388
+ close: function () {
32389
+ if ($.isFunction(fnCancel)) {
32390
+ fnCancel(fnCancelParam);
32391
+ }
32383
32392
  closeDlg();
32384
32393
  }
32385
32394
  });
@@ -32710,7 +32719,17 @@ function normalizeNoteLabel270dg(pos, pageH) {
32710
32719
 
32711
32720
  var label_deleteMeasure = "Delete Measure";
32712
32721
  var label_cancel = "Cancel";
32713
-
32722
+ var label_measures2PointHint = "Click & drag to calibrate";
32723
+ var label_errMsgCalibrationTitle = 'Настройки не были сохранены.';
32724
+ var label_errMsgNoCalibrationItem = 'Создайте пожалуйста калибровочный отрезок.';
32725
+ var label_errMsgCalibrationSizeNotDefined = 'Заполните пожалуйста поле "Size" в форме настроек "Измерений".';
32726
+
32727
+ var label_warningCalibrationPage_title = 'Внимание!';
32728
+ var label_warningCalibrationPage_body = 'Вы ушли со страницы, для которой производится калибровка измерений. ' +
32729
+ 'Вернитесь пожалуйста на калибруемую страницу или закройте диалог настроек "Измерений" (без сохранения).';
32730
+ var label_warningCalibrationPage_btnClose = 'Закрыть настройки (без сохранения)';
32731
+ var label_warningCalibrationPage_btnGoToPage = 'Перейти на страницу калибровки';
32732
+ var label_createAnnotation = 'Create annotation';
32714
32733
  /* *** Sketchpad *** */
32715
32734
  var fillVal = 'none';
32716
32735
  var strokeColorVal = 'yellowgreen';
@@ -32727,6 +32746,7 @@ var isSketchpadActive = false;
32727
32746
  var measuresNodes = {};
32728
32747
  var isSketchpadMeasureActive = false;
32729
32748
  var measureStrokeColorVal = 'red';
32749
+ var measureCalibrationStrokeColorVal = '#4092c3';
32730
32750
  var measureStrokeWidthVal = 3;
32731
32751
  var measureFillVal = 'none';
32732
32752
  var measureBlockStrokeColorVal = 'blue'; // TODO
@@ -32735,10 +32755,38 @@ var measureFontSize = 16;
32735
32755
  var measureFontFamily = 'Arial';
32736
32756
  var measureOutlineText = null;
32737
32757
  var measureOutlineTextBg = null;
32758
+ // Default measure settings
32738
32759
  var measurePrecision = 0; // decimal symbols. TODO - calibration!
32739
32760
  var measureUnit = 'mm'; // TODO - calibration!
32740
32761
  var measurePxScale = 1; // TODO - calibration!
32762
+ //
32741
32763
  var measureLast = null;
32764
+ // User defined measure settings
32765
+ var measuresPageSettings = {};
32766
+ /*
32767
+ var measuresPageSettings = {
32768
+ {pageNr}: {
32769
+ page: ...,
32770
+ type: ...,
32771
+ measurePrecision: ...,
32772
+ measureUnit: ...,
32773
+ measurePxScale: ...
32774
+ calibrationSize: ...,
32775
+ calibrationSizePx: ...,
32776
+ user: ...,
32777
+ date: ...
32778
+ },
32779
+ ...
32780
+ }
32781
+ */
32782
+ var isCalibrationLineChanged = false;
32783
+ var calibrationLineChangedDataOrg = false;
32784
+
32785
+ var measureUnitLabel = {
32786
+ 'mm': 'мм',
32787
+ 'cm': 'см',
32788
+ 'm': 'м'
32789
+ };
32742
32790
 
32743
32791
  var arrowMarkerAngle = 45;
32744
32792
  var arrowMarkerSize = 30;
@@ -32748,7 +32796,9 @@ function initSketchpadCanvasByPageNr(pageNr) {
32748
32796
  sketchpad[pageNr] = svg;
32749
32797
  var surface = svg.rect(0, 0, '100%', '100%', {id: 'surface-'+pageNr, fill: 'transparent'});
32750
32798
 
32751
- createMeasureLineMarker(pageNr);
32799
+ createMeasureLineMarker(pageNr, getMeasureLineMarkerId(pageNr), getMeasureLineMarkerSettings());
32800
+ createMeasureLineMarker(pageNr, getMeasureCalibrationLineMarkerId(pageNr), getMeasureCalibrationLineMarkerSettings());
32801
+ createMeasureLineMarker(pageNr, getMeasureNoteLineMarkerId(pageNr), getMeasureNoteLineMarkerSettings());
32752
32802
  createMeasureTxtFilterBg(pageNr);
32753
32803
 
32754
32804
  $(surface).mousedown(function(eMousedown) {
@@ -32775,7 +32825,7 @@ function sketchpadCanvasMouseupHandler(eMouseup, pageNr) {
32775
32825
  function sketchpadCanvasMousemoveHandler(eMousemove, pageNr) {
32776
32826
  if(isSketchpadActive) {
32777
32827
  dragging(eMousemove, pageNr);
32778
- } else if(isSketchpadMeasureActive) {
32828
+ } else if(isSketchpadMeasureActive && drawStart) {
32779
32829
  draggingMeasure(eMousemove, pageNr);
32780
32830
  }
32781
32831
  }
@@ -32784,6 +32834,10 @@ function sketchpadCanvasMousedownHandler(eMousedown, pageNr) {
32784
32834
  if(isSketchpadActive) {
32785
32835
  startDrag(eMousedown, pageNr);
32786
32836
  } else if(isSketchpadMeasureActive) {
32837
+ if(isMeasuresCalibrationActive() && measuresNodes[pageNr] && (getCalibrationShapeId(pageNr) in measuresNodes[pageNr])) {
32838
+ return false;
32839
+ }
32840
+
32787
32841
  startDragMeasure(eMousedown, pageNr);
32788
32842
  }
32789
32843
  }
@@ -32831,10 +32885,40 @@ function getMeasureLineMarkerSettings() {
32831
32885
  };
32832
32886
 
32833
32887
  return settings;
32834
- }
32888
+ }
32835
32889
 
32836
- function createMeasureLineMarker(pageNr) {
32837
- var measureLineMarkerStart = sketchpad[pageNr].marker('measureLineMarker'+pageNr, 2, 2, 4, 4, 'auto', getMeasureLineMarkerSettings());
32890
+ function getMeasureNoteLineMarkerSettings() {
32891
+ var settings = {
32892
+ fill: fillVal,
32893
+ stroke: strokeColorVal
32894
+ };
32895
+
32896
+ return settings;
32897
+ }
32898
+
32899
+ function getMeasureCalibrationLineMarkerSettings() {
32900
+ var settings = {
32901
+ fill: measureFillVal,
32902
+ stroke: measureCalibrationStrokeColorVal
32903
+ };
32904
+
32905
+ return settings;
32906
+ }
32907
+
32908
+ function getMeasureLineMarkerId(pageNr) {
32909
+ return 'measureLineMarker'+pageNr;
32910
+ }
32911
+
32912
+ function getMeasureNoteLineMarkerId(pageNr) {
32913
+ return 'measureNoteLineMarker'+pageNr;
32914
+ }
32915
+
32916
+ function getMeasureCalibrationLineMarkerId(pageNr) {
32917
+ return 'measureLineMarker'+pageNr+'c';
32918
+ }
32919
+
32920
+ function createMeasureLineMarker(pageNr, markerId, markerSettings) {
32921
+ var measureLineMarkerStart = sketchpad[pageNr].marker(markerId, 2, 2, 4, 4, 'auto', markerSettings);
32838
32922
  sketchpad[pageNr].path(measureLineMarkerStart, 'M 2 0 L 2 4 M 0 4 L 4 0');
32839
32923
  }
32840
32924
 
@@ -32853,52 +32937,68 @@ function draggingMeasure(event, pageNr) {
32853
32937
  if (!drawStart) {
32854
32938
  return;
32855
32939
  }
32856
-
32940
+
32857
32941
  if (!outline) {
32858
32942
  var outlineSettings = getOutlineMeasureSettings();
32859
- var outlineTextSettings = getMeasureTextSettings();
32860
- outlineTextSettings.style = 'pointer-events: none; user-select: none;';
32861
- outlineTextSettings.filter = 'url(#txtFilterBg)';
32862
-
32863
- if(isMeasureLine()) {
32943
+ if(isMeasuresCalibrationActive()) {
32944
+ outlineSettings.stroke = measureCalibrationStrokeColorVal;
32945
+ } else {
32946
+ var outlineTextSettings = getMeasureTextSettings();
32947
+ outlineTextSettings.style = 'pointer-events: none; user-select: none;';
32948
+ outlineTextSettings.filter = 'url(#txtFilterBg)';
32949
+ }
32950
+
32951
+ if(isMeasureLine() || isMeasuresCalibrationActive()) {
32864
32952
  // TODO: Path? - connectors for edit mode
32865
32953
  // Measure Line
32866
- outlineSettings.markerStart = 'url(#measureLineMarker'+pageNr+')';
32867
- outlineSettings.markerEnd = 'url(#measureLineMarker'+pageNr+')';
32954
+ var markerId = isMeasuresCalibrationActive() ? getMeasureCalibrationLineMarkerId(pageNr) : getMeasureLineMarkerId(pageNr);
32955
+ outlineSettings.markerStart = 'url(#'+markerId+')';
32956
+ outlineSettings.markerEnd = 'url(#'+markerId+')';
32868
32957
  outline = sketchpad[pageNr].line(0, 0, 0, 0, outlineSettings);
32869
- // Measure Text
32870
- measureOutlineText = sketchpad[pageNr].text(0, 0, '', outlineTextSettings);
32958
+
32959
+ if(!isMeasuresCalibrationActive()) {
32960
+ // Measure Text
32961
+ measureOutlineText = sketchpad[pageNr].text(0, 0, '', outlineTextSettings);
32962
+ }
32871
32963
  } else if(isMeasureArea()) {
32872
32964
  outline = sketchpad[pageNr].rect(0, 0, 0, 0, outlineSettings);
32873
32965
  measureOutlineText = sketchpad[pageNr].text('', outlineTextSettings);
32874
32966
  }
32875
-
32876
- $(outline).mouseup(function(e) {
32967
+
32968
+ $(outline).mouseup(function(e) {
32877
32969
  endDragMeasure(e, pageNr);
32878
32970
  });
32879
32971
  }
32880
-
32972
+
32881
32973
  var otlineMeasureLabel;
32882
32974
  var textWidth;
32883
32975
  var textHeight;
32884
32976
 
32885
- if(isMeasureLine()) {
32977
+ if(isMeasureLine() || isMeasuresCalibrationActive()) {
32886
32978
  sketchpad[pageNr].change(outline, {
32887
32979
  x1: drawStart.X,
32888
32980
  y1: drawStart.Y,
32889
32981
  x2: (event.clientX - offset.left),
32890
32982
  y2: (event.clientY - offset.top)
32891
32983
  });
32892
-
32893
- otlineMeasureLabel = getMeasureLineLabelByCoords(event.clientX, event.clientY);
32894
- $(sketchpad[pageNr].getElementById('tmpOutlineMeasureTxt')).html(otlineMeasureLabel);
32895
-
32896
- textWidth = measureOutlineText.getBBox().width;
32897
- textHeight = measureOutlineText.getBBox().height;
32898
-
32899
- textX = (drawStart.X + event.clientX - offset.left)/2;
32900
- textY = (drawStart.Y + event.clientY - offset.top)/2 + getMeasureLineTxtShiftY(drawStart.Y, event.clientY-offset.top);
32901
-
32984
+
32985
+ if(isMeasuresCalibrationActive()) {
32986
+ textWidth = 0;
32987
+ textHeight = 0;
32988
+ textX = 0;
32989
+ textY = 0;
32990
+ otlineMeasureLabel = '';
32991
+ } else {
32992
+ otlineMeasureLabel = getMeasureLineLabelByCoords(event.clientX, event.clientY, pageNr);
32993
+ $(sketchpad[pageNr].getElementById('tmpOutlineMeasureTxt')).html(otlineMeasureLabel);
32994
+
32995
+ textWidth = measureOutlineText.getBBox().width;
32996
+ textHeight = measureOutlineText.getBBox().height;
32997
+
32998
+ textX = (drawStart.X + event.clientX - offset.left)/2;
32999
+ textY = (drawStart.Y + event.clientY - offset.top)/2 + getMeasureLineTxtShiftY(drawStart.Y, event.clientY-offset.top);
33000
+ }
33001
+
32902
33002
  } else if(isMeasureArea()) {
32903
33003
  var outlineWidth = Math.abs(event.clientX - offset.left - drawStart.X);
32904
33004
  var outlineHeight = Math.abs(event.clientY - offset.top - drawStart.Y);
@@ -32910,7 +33010,7 @@ function draggingMeasure(event, pageNr) {
32910
33010
  height: outlineHeight
32911
33011
  });
32912
33012
 
32913
- otlineMeasureLabel = getMeasureAreaLabelBySize(outlineWidth, outlineHeight);
33013
+ otlineMeasureLabel = getMeasureAreaLabelBySize(outlineWidth, outlineHeight, pageNr);
32914
33014
  $(sketchpad[pageNr].getElementById('tmpOutlineMeasureTxt')).html(otlineMeasureLabel);
32915
33015
 
32916
33016
  textWidth = measureOutlineText.getBBox().width;
@@ -32924,21 +33024,25 @@ function draggingMeasure(event, pageNr) {
32924
33024
  }
32925
33025
  }
32926
33026
 
32927
- sketchpad[pageNr].change(measureOutlineText, {x:textX, y:textY});
32928
-
32929
- if(isMeasureLine()) {
33027
+ if(!isMeasuresCalibrationActive()) {
33028
+ sketchpad[pageNr].change(measureOutlineText, {x:textX, y:textY});
33029
+ }
33030
+
33031
+ if(isMeasureLine() || isMeasuresCalibrationActive()) {
32930
33032
  setMeasureLast(textX, textY, textWidth, textHeight, otlineMeasureLabel, getMeasureLinePxVal(event.clientX, event.clientY), 'line');
32931
33033
  } else if(isMeasureArea()) {
32932
33034
  setMeasureLast(textX, textY, textWidth, textHeight, otlineMeasureLabel, getMeasureAreaPxVal(outlineWidth, outlineHeight), 'rect');
32933
- }
32934
-
32935
- event.preventDefault();
33035
+ }
33036
+
33037
+ event.preventDefault();
32936
33038
  }
32937
33039
 
32938
- function getMeasureAreaLabelBySize(width, height) {
33040
+ function getMeasureAreaLabelBySize(width, height, pageNr) {
33041
+ var measurePageSettings = getMeasurePageSettings(pageNr);
32939
33042
  var measureVal = getMeasureAreaPxVal(width, height);
32940
- measureVal = getMeasureValSq(measureVal);
32941
- var measureLabel = getMeasureAreaLabel(measureVal);
33043
+ measureVal = getMeasureValSq(measureVal, measurePageSettings.measurePxScale, measurePageSettings.measurePrecision, measurePageSettings.measureUnit);
33044
+ var measureLabel = getMeasureAreaLabel(measureVal, measurePageSettings.measureUnit);
33045
+
32942
33046
  return measureLabel;
32943
33047
  }
32944
33048
 
@@ -32969,42 +33073,65 @@ function getMeasureLineTxtShiftY(yStart, y) {
32969
33073
  }
32970
33074
  }
32971
33075
 
32972
- function getMeasureLineLabel(measureVal) {
32973
- var measureTxtVal = ' <tspan class="measure-val-lbl">' + measureVal + '</tspan>' + ' <tspan class="measure-unit-lbl">' + measureUnit + '</tspan>';
33076
+ function getMeasureLineLabel(measureVal, measurePageUnit) {
33077
+ var measureTxtVal = ' <tspan class="measure-val-lbl">' + measureVal + '</tspan>' + ' <tspan class="measure-unit-lbl">' + measureUnitLabel[measurePageUnit] + '</tspan>';
32974
33078
  return measureTxtVal;
32975
33079
  }
32976
33080
 
32977
- function getMeasureAreaLabel(measureVal) {
33081
+ function getMeasureAreaLabel(measureVal, measurePageUnit) {
32978
33082
  var measureTxtVal = ' <tspan class="measure-val-lbl">' + measureVal + '</tspan>'
32979
- + ' <tspan class="measure-unit-lbl">' + measureUnit + '<tspan font-size="'+(measureFontSize-4)+'" dy="-6">2</tspan></tspan>';
33083
+ + ' <tspan class="measure-unit-lbl">' + measureUnitLabel[measurePageUnit] + '<tspan font-size="'+(measureFontSize-4)+'" dy="-6">2</tspan></tspan>';
32980
33084
  return measureTxtVal;
32981
33085
  }
32982
33086
 
32983
- function getMeasureLineLabelByCoords(clientX, clientY) {
33087
+ function getMeasureLineLabelByCoords(clientX, clientY, pageNr) {
33088
+ var measurePageSettings = getMeasurePageSettings(pageNr);
32984
33089
  var measureVal = getMeasureLinePxVal(clientX, clientY);
32985
- measureVal = getMeasureVal(measureVal);
32986
- var measureLabel = getMeasureLineLabel(measureVal);
33090
+ measureVal = getMeasureVal(measureVal, measurePageSettings.measurePxScale, measurePageSettings.measurePrecision, measurePageSettings.measureUnit);
33091
+ var measureLabel = getMeasureLineLabel(measureVal, measurePageSettings.measureUnit);
33092
+
32987
33093
  return measureLabel;
32988
33094
  }
32989
33095
 
33096
+ function getMeasurePageSettings(pageNr) {
33097
+ var settings;
33098
+ if(pageNr in measuresPageSettings) {
33099
+ settings = measuresPageSettings[pageNr];
33100
+ } else {
33101
+ settings = getMeasureDefaultSettings();
33102
+ settings.page = pageNr;
33103
+ }
33104
+ return settings;
33105
+ }
33106
+
33107
+ function getMeasureDefaultSettings() {
33108
+ var settings = {
33109
+ type: 'scale',
33110
+ measurePrecision: measurePrecision,
33111
+ measureUnit: measureUnit,
33112
+ measurePxScale: measurePxScale
33113
+ };
33114
+ return settings;
33115
+ }
33116
+
32990
33117
  function getMeasureLinePxVal(clientX, clientY) {
32991
33118
  var measureVal = Math.sqrt(Math.pow(Math.abs(clientX - offset.left - drawStart.X), 2) + Math.pow(Math.abs(clientY - offset.top - drawStart.Y), 2))/getPdfCanvasScale();
32992
33119
  return measureVal;
32993
33120
  }
32994
33121
 
32995
- function getMeasureValSqWithPxScale(measurePxVal) {
32996
- var measureVal = measurePxVal*Math.pow(measurePxScale, 2);
33122
+ function getMeasureValSqWithPxScale(measurePxVal, measurePagePxScale) {
33123
+ var measureVal = measurePxVal*Math.pow(measurePagePxScale, 2);
32997
33124
  return measureVal;
32998
33125
  }
32999
33126
 
33000
- function getMeasureValWithPxScale(measurePxVal) {
33001
- var measureVal = measurePxVal*measurePxScale;
33127
+ function getMeasureValWithPxScale(measurePxVal, measurePagePxScale) {
33128
+ var measureVal = measurePxVal*measurePagePxScale;
33002
33129
  return measureVal;
33003
33130
  }
33004
33131
 
33005
- function getMeasureValWithPrecision(measureVal) {
33006
- if(measurePrecision) {
33007
- measureVal = measureVal.toFixed(measurePrecision);
33132
+ function getMeasureValWithPrecision(measureVal, measurePagePrecision) {
33133
+ if(measurePagePrecision) {
33134
+ measureVal = measureVal.toFixed(measurePagePrecision);
33008
33135
  } else {
33009
33136
  measureVal = Math.round(measureVal);
33010
33137
  }
@@ -33012,17 +33139,17 @@ function getMeasureValWithPrecision(measureVal) {
33012
33139
  return measureVal;
33013
33140
  }
33014
33141
 
33015
- function getMeasureValSq(measurePxVal) {
33016
- var measureVal = getMeasureValSqByPx(measurePxVal);
33017
- measureVal = getMeasureValSqWithPxScale(measureVal);
33018
- measureVal = getMeasureValWithPrecision(measureVal);
33142
+ function getMeasureValSq(measurePxVal, measurePagePxScale, measurePagePrecision, measurePageUnit) {
33143
+ var measureVal = getMeasureValSqByPx(measurePxVal, measurePageUnit);
33144
+ measureVal = getMeasureValSqWithPxScale(measureVal, measurePagePxScale);
33145
+ measureVal = getMeasureValWithPrecision(measureVal, measurePagePrecision);
33019
33146
  return measureVal;
33020
33147
  }
33021
33148
 
33022
- function getMeasureVal(measurePxVal) {
33023
- var measureVal = getMeasureValByPx(measurePxVal);
33024
- measureVal = getMeasureValWithPxScale(measureVal);
33025
- measureVal = getMeasureValWithPrecision(measureVal);
33149
+ function getMeasureVal(measurePxVal, measurePagePxScale, measurePagePrecision, measurePageUnit) {
33150
+ var measureVal = getMeasureValByPx(measurePxVal, measurePageUnit);
33151
+ measureVal = getMeasureValWithPxScale(measureVal, measurePagePxScale);
33152
+ measureVal = getMeasureValWithPrecision(measureVal, measurePagePrecision);
33026
33153
  return measureVal;
33027
33154
  }
33028
33155
 
@@ -33041,9 +33168,14 @@ function endDragMeasure(event, pageNr) {
33041
33168
 
33042
33169
  removeMeasureOutlineItems();
33043
33170
 
33044
- if(measureLast?.pxVal > 0) {
33171
+ if(measureLast.pxVal > 0) {
33045
33172
  var shape = getMeasureType();
33046
33173
  drawMeasure(drawStart.X, drawStart.Y, event.clientX - offset.left, event.clientY - offset.top, pageNr, shape);
33174
+
33175
+ if(isMeasuresCalibrationActive()) {
33176
+ deactivateMeasuresCalibration();
33177
+ removeMeasuresCalibrationHint();
33178
+ }
33047
33179
  }
33048
33180
 
33049
33181
  drawStart = null;
@@ -33051,8 +33183,10 @@ function endDragMeasure(event, pageNr) {
33051
33183
  }
33052
33184
 
33053
33185
  function removeMeasureOutlineItems() {
33054
- $(measureOutlineText).remove();
33055
- $(measureOutlineTextBg).remove();
33186
+ if(!isMeasuresCalibrationActive()) {
33187
+ $(measureOutlineText).remove();
33188
+ $(measureOutlineTextBg).remove();
33189
+ }
33056
33190
  $(outline).remove();
33057
33191
 
33058
33192
  outline = null;
@@ -33073,7 +33207,8 @@ function startDrag(event, pageNr) {
33073
33207
  offset.top -= document.documentElement.scrollTop || document.body.scrollTop;
33074
33208
  }
33075
33209
  drawStart = {X: event.clientX - offset.left, Y: event.clientY - offset.top};
33076
- event.preventDefault();
33210
+
33211
+ event.preventDefault();
33077
33212
  }
33078
33213
 
33079
33214
  /* Provide feedback as we drag */
@@ -33174,7 +33309,13 @@ function drawMeasure(x1, y1, x2, y2, pageNr, shape) {
33174
33309
  var right = Math.max(x1, x2);
33175
33310
  var bottom = Math.max(y1, y2);
33176
33311
 
33177
- var measureGrpId = getMeasureGrpId();
33312
+ var measureGrpId;
33313
+ if(isMeasuresCalibrationActive()) {
33314
+ measureGrpId = 'calibration_'+pageNr;
33315
+ } else {
33316
+ measureGrpId = getMeasureGrpId();
33317
+ }
33318
+
33178
33319
  var measureGrp = sketchpad[pageNr].group(measureGrpId);
33179
33320
 
33180
33321
  var measureNode = null;
@@ -33182,32 +33323,46 @@ function drawMeasure(x1, y1, x2, y2, pageNr, shape) {
33182
33323
 
33183
33324
  var measureSettings = getOutlineMeasureSettings();
33184
33325
  measureSettings.id = getMeasureShapeId(measureGrpId);
33185
-
33186
- var measureTextSettings = getMeasureTextSettings();
33187
- measureTextSettings.id = getMeasureTxtId(measureGrpId);
33188
- measureTextSettings.filter = 'url(#txtFilterBg)';
33326
+
33327
+ if(isMeasuresCalibrationActive()) {
33328
+ measureSettings.stroke = measureCalibrationStrokeColorVal;
33329
+ } else {
33330
+ var measureTextSettings = getMeasureTextSettings();
33331
+ measureTextSettings.id = getMeasureTxtId(measureGrpId);
33332
+ measureTextSettings.filter = 'url(#txtFilterBg)';
33333
+ }
33189
33334
 
33190
33335
  if (shape == 'rect') {
33191
33336
  measureNode = sketchpad[pageNr].rect(measureGrp, left, top, right - left, bottom - top, measureSettings);
33192
- } else if (shape == 'line') {
33193
- measureSettings.markerStart = 'url(#measureLineMarker'+pageNr+')';
33194
- measureSettings.markerEnd = 'url(#measureLineMarker'+pageNr+')';
33337
+ } else if (shape == 'line' || isMeasuresCalibrationActive()) {
33338
+ var markerId = isMeasuresCalibrationActive() ? getMeasureCalibrationLineMarkerId(pageNr) : getMeasureLineMarkerId(pageNr);
33339
+ measureSettings.markerStart = 'url(#'+markerId+')';
33340
+ measureSettings.markerEnd = 'url(#'+markerId+')';
33195
33341
  measureNode = sketchpad[pageNr].line(measureGrp, x1, y1, x2, y2, measureSettings);
33196
33342
  }
33197
-
33198
- //measureTextSettings.fontSize = measureTextSettings.fontSize*getPdfCanvasScale(); // ?
33199
- measureText = sketchpad[pageNr].text(measureGrp, measureLast.txt.x, measureLast.txt.y, '', measureTextSettings);
33200
- $(measureText).html(measureLast.txt.label);
33343
+
33344
+ if(!isMeasuresCalibrationActive()) {
33345
+ //measureTextSettings.fontSize = measureTextSettings.fontSize*getPdfCanvasScale(); // ?
33346
+ measureText = sketchpad[pageNr].text(measureGrp, measureLast.txt.x, measureLast.txt.y, '', measureTextSettings);
33347
+ $(measureText).html(measureLast.txt.label);
33348
+ }
33201
33349
 
33202
33350
  // Bind context menu
33203
- bindMeasureContextMenu(measureSettings.id);
33204
- bindMeasureContextMenu(measureTextSettings.id);
33351
+ if(!isMeasuresCalibrationActive()) {
33352
+ bindMeasureContextMenu(measureTextSettings.id);
33353
+ }
33205
33354
 
33206
33355
  var width = right - left;
33207
33356
  var height = bottom - top;
33208
33357
  var pagesRotation = getPdfPagesRotation();
33209
33358
  var direction = getDrawDirectionByPagesRotation(x1, y1, x2, y2, pagesRotation);
33210
-
33359
+
33360
+ var txtOptions;
33361
+
33362
+ if(isMeasuresCalibrationActive()) {
33363
+ txtOptions = {x:null, y:null, width: null, height: null};
33364
+ }
33365
+
33211
33366
  if(pagesRotation > 0) {
33212
33367
  var measureData = {
33213
33368
  pageNr: pageNr,
@@ -33220,25 +33375,42 @@ function drawMeasure(x1, y1, x2, y2, pageNr, shape) {
33220
33375
  };
33221
33376
  var measureSvgData = getNormalizedSvgData(measureData, pagesRotation);
33222
33377
 
33223
- var measureTxtSvgData = getMeasureTxtNormalizedSvgData(measureSvgData.position.x, measureSvgData.position.y, measureSvgData.width, measureSvgData.height,
33378
+ if(!isMeasuresCalibrationActive()) {
33379
+ var measureTxtSvgData = getMeasureTxtNormalizedSvgData(measureSvgData.position.x, measureSvgData.position.y, measureSvgData.width, measureSvgData.height,
33224
33380
  shape, measureLast.txt.width, measureLast.txt.height);
33381
+ txtOptions = {x:measureTxtSvgData.x, y:measureTxtSvgData.y, width:measureLast.txt.width, height: measureLast.txt.height};
33382
+ }
33383
+
33225
33384
  setMeasure(pageNr, measureGrpId, measureGrp, measureSvgData.position.x, measureSvgData.position.y, measureSvgData.width, measureSvgData.height,
33226
- shape, direction, measureLast.txt.label, {x:measureTxtSvgData.x, y:measureTxtSvgData.y, width:measureLast.txt.width, height: measureLast.txt.height},
33227
- measureLast.pxVal);
33385
+ shape, direction, measureLast.txt.label, txtOptions, measureLast.pxVal);
33228
33386
  } else {
33229
- setMeasure(pageNr, measureGrpId, measureGrp, left, top, width, height, shape, direction,
33230
- measureLast.txt.label, {x:measureLast.txt.x, y:measureLast.txt.y, width:measureLast.txt.width, height: measureLast.txt.height},
33231
- measureLast.pxVal);
33387
+ if(!isMeasuresCalibrationActive()) {
33388
+ txtOptions = {x:measureLast.txt.x, y:measureLast.txt.y, width:measureLast.txt.width, height: measureLast.txt.height};
33389
+ }
33390
+ setMeasure(pageNr, measureGrpId, measureGrp, left, top, width, height, shape, direction, measureLast.txt.label, txtOptions, measureLast.pxVal);
33391
+ }
33392
+
33393
+ if(isMeasuresCalibrationActive()) {
33394
+ setDlgMeasureSettings2PointSizePx(measureLast.pxVal);
33232
33395
  }
33233
33396
 
33234
- measureLast = null;
33235
-
33236
- // TODO - save measure data to server
33237
- saveMeasure(pageNr, measureGrpId);
33397
+ measureLast = null;
33398
+
33399
+ if(!isMeasuresCalibrationActive()) {
33400
+ // TODO - save measure data to server
33401
+ saveMeasure(pageNr, measureGrpId);
33402
+ } else {
33403
+ setCalibrationItemId(measureGrpId);
33404
+ enableBtnMeasureSettingsDelete();
33405
+ }
33238
33406
 
33239
33407
  $('#svgsketch-'+[pageNr]).focus();
33240
33408
  }
33241
33409
 
33410
+ function setCalibrationItemId(id) {
33411
+ $('#measures2PointId').val(id);
33412
+ }
33413
+
33242
33414
  function getMeasureTxtNormalizedSvgData(measureX, measureY, measureW, measureH, measureType, txtW, txtH) {
33243
33415
  var textY;
33244
33416
  var textX = (2*measureX + measureW)/2;
@@ -33278,6 +33450,10 @@ function bindMeasureContextMenu(measureElmId) {
33278
33450
  $(document).trigger(key, [options.$trigger]);
33279
33451
  },
33280
33452
  items: {
33453
+ "addMeasureNote": {
33454
+ name: label_createAnnotation,
33455
+ icon: "add"
33456
+ },
33281
33457
  "deleteMeasure": {
33282
33458
  name: label_deleteMeasure,
33283
33459
  icon: 'delete'
@@ -33293,10 +33469,48 @@ function bindMeasureContextMenu(measureElmId) {
33293
33469
  });
33294
33470
  }
33295
33471
 
33472
+ function bindAddMeasureNoteEventHandler() {
33473
+ $(document).on('addMeasureNote', function(e, item) {
33474
+ var measureId = getMeasureIdByItem(item);
33475
+ var pageNr = getMeasurePageByItem(item);
33476
+ var measureNode = jQuery.extend(true, {}, measuresNodes[pageNr][measureId]);
33477
+ measureNode.data.id = Date.now();
33478
+ measureNode.data.type = addMeasureAnnotationTypePrefix(measureNode.data.type);
33479
+ measureNode.data.stroke.color = strokeColorVal;
33480
+ measureNode.data.stroke.width = strokeWidthVal;
33481
+ delete measureNode.data.measure;
33482
+
33483
+ initDlgForSvg(measureNode, addMeasureNoteSuccessFn, false, [pageNr, measureId/*, measureNode.data.id*/], false);
33484
+ });
33485
+ }
33486
+
33487
+ function addMeasureAnnotationTypePrefix(type) {
33488
+ return 'msr_' + type;
33489
+ }
33490
+
33491
+ function addMeasureNoteSuccessFn(arrParams) {
33492
+ var pageNr = arrParams[0];
33493
+ var measureId = arrParams[1];
33494
+ //var noteId = arrParams[2];
33495
+
33496
+ var measureNode = measuresNodes[pageNr][measureId];
33497
+ measureNode.data.type = addMeasureAnnotationTypePrefix(measureNode.data.type);
33498
+ delete measureNode.data.measure;
33499
+ delete measuresNodes[pageNr][measureId];
33500
+ $('#'+measureId).remove();
33501
+
33502
+ //
33503
+ // TODO - remove measure data from server!!!
33504
+ //
33505
+
33506
+ // load shape as note-shape
33507
+ loadSvgShape(measureNode.data);
33508
+ }
33509
+
33296
33510
  function bindDeleteMeasureEventHandler() {
33297
33511
  $(document).on('deleteMeasure', function(e, item) {
33298
- var measureId = item.closest('g').attr('id');
33299
- var pageNr = item.closest('.page').attr('data-page-number');
33512
+ var measureId = getMeasureIdByItem(item);
33513
+ var pageNr = getMeasurePageByItem(item);
33300
33514
 
33301
33515
  // TODO -> Ajax -> send data to server
33302
33516
  // ...
@@ -33305,6 +33519,14 @@ function bindDeleteMeasureEventHandler() {
33305
33519
  });
33306
33520
  }
33307
33521
 
33522
+ function getMeasureIdByItem(item) {
33523
+ return item.closest('g').attr('id');
33524
+ }
33525
+
33526
+ function getMeasurePageByItem(item) {
33527
+ return item.closest('.page').attr('data-page-number');
33528
+ }
33529
+
33308
33530
  function deleteMeasure(measureId, pageNr) {
33309
33531
  delete measuresNodes[pageNr][measureId];
33310
33532
  sketchpad[pageNr].getElementById(measureId).remove();
@@ -33316,6 +33538,8 @@ function setMeasure(pageNr, measureGrpId, measureGrp, posX, posY, width, height,
33316
33538
  measuresNodes[pageNr] = {};
33317
33539
  }
33318
33540
 
33541
+ var settings = getMeasurePageSettings(pageNr);
33542
+
33319
33543
  measuresNodes[pageNr][measureGrpId] = {
33320
33544
  data: {
33321
33545
  id: measureGrpId,
@@ -33346,9 +33570,9 @@ function setMeasure(pageNr, measureGrpId, measureGrp, posX, posY, width, height,
33346
33570
  },
33347
33571
  measure: {
33348
33572
  pxVal: measurePxVal,
33349
- pxScale: measurePxScale,
33350
- unit: measureUnit,
33351
- precision: measurePrecision
33573
+ pxScale: settings.measurePxScale,
33574
+ unit: settings.measureUnit,
33575
+ precision: settings.measurePrecision
33352
33576
  }
33353
33577
  },
33354
33578
  nodeObj: measureGrp
@@ -33432,7 +33656,7 @@ function drawShape(x1, y1, x2, y2, pageNr, shape) {
33432
33656
 
33433
33657
  $('#svgsketch-'+[pageNr]).focus();
33434
33658
 
33435
- initDlgForSvg(drawNodes[nodeId]);
33659
+ initDlgForSvg(drawNodes[nodeId], false, removeSvg, false, drawNodes[nodeId].data);
33436
33660
  }
33437
33661
 
33438
33662
  function getArrowPath(x1, y1, x2, y2) {
@@ -33678,6 +33902,7 @@ function loadSvgShape(svgData) {
33678
33902
  if(typeof svgData === 'object' && svgData !== null && svgData !== false) {
33679
33903
 
33680
33904
  // setTimeout(function() {
33905
+ var pageNr = svgData.pageNr;
33681
33906
  var scale = getPdfCanvasScale();
33682
33907
 
33683
33908
  var node = null;
@@ -33697,7 +33922,7 @@ function loadSvgShape(svgData) {
33697
33922
  // }
33698
33923
 
33699
33924
  if(drawNodes[svgData.id]) {
33700
- sketchpad[svgData.pageNr].remove(drawNodes[svgData.id].nodeObj);
33925
+ sketchpad[pageNr].remove(drawNodes[svgData.id].nodeObj);
33701
33926
  }
33702
33927
 
33703
33928
  var x1 = nodeSvgData.position.x*scale;
@@ -33707,31 +33932,63 @@ function loadSvgShape(svgData) {
33707
33932
 
33708
33933
  var direction = ('direction' in svgData) ? svgData.direction : false;
33709
33934
 
33935
+ var msrGrp;
33936
+ var msrNode;
33937
+ if(svgData.type == 'msr_rect' || svgData.type == 'msr_line') {
33938
+ msrGrp = sketchpad[pageNr].group(svgData.id);
33939
+ settings.id = getMeasureShapeId(svgData.id);
33940
+
33941
+ node = msrGrp;
33942
+ }
33943
+
33710
33944
  if (svgData.type == 'rect') {
33711
- node = sketchpad[nodeSvgData.pageNr].rect(x1, y1, nodeSvgData.width*scale, nodeSvgData.height*scale, settings);
33945
+ node = sketchpad[pageNr].rect(x1, y1, nodeSvgData.width*scale, nodeSvgData.height*scale, settings);
33712
33946
  } else if(svgData.type == 'ellipse') {
33713
33947
  var rx = nodeSvgData.width*scale / 2;
33714
33948
  var ry = nodeSvgData.height*scale / 2;
33715
- node = sketchpad[nodeSvgData.pageNr].ellipse(x1 + rx, y1 + ry, rx, ry, settings);
33949
+ node = sketchpad[pageNr].ellipse(x1 + rx, y1 + ry, rx, ry, settings);
33716
33950
  } else if(svgData.type == 'polygon') {
33717
33951
  var polygonPos = getPolygonPosByPageRotation(x1, y1, x2, y2, pagesRotation);
33718
- node = sketchpad[nodeSvgData.pageNr].polygon(polygonPos, settings);
33952
+ node = sketchpad[pageNr].polygon(polygonPos, settings);
33719
33953
  } else if(svgData.type == 'cloud') {
33720
33954
  var cloudPath = getCloudPath(x1, y1, x2, y2);
33721
- node = sketchpad[nodeSvgData.pageNr].path(cloudPath, settings);
33955
+ node = sketchpad[pageNr].path(cloudPath, settings);
33722
33956
  } else if(svgData.type == 'line') {
33723
33957
  var linePos = getLinePosByPagesRotation(x1, y1, x2, y2, direction, pagesRotation);
33724
- node = sketchpad[nodeSvgData.pageNr].line(linePos[0], linePos[1], linePos[2], linePos[3], settings);
33958
+ node = sketchpad[pageNr].line(linePos[0], linePos[1], linePos[2], linePos[3], settings);
33725
33959
  } else if(svgData.type == 'arrow') {
33726
33960
  var linePos = getLinePosByPagesRotation(x1, y1, x2, y2, direction, pagesRotation);
33727
33961
  var arrowPath = getArrowPath(linePos[0], linePos[1], linePos[2], linePos[3]);
33728
- node = sketchpad[nodeSvgData.pageNr].path(arrowPath, settings);
33729
- }
33962
+ node = sketchpad[pageNr].path(arrowPath, settings);
33963
+ } else if(svgData.type == 'msr_line') {
33964
+ var markerId = getMeasureNoteLineMarkerId(pageNr);
33965
+ settings.markerStart = 'url(#'+markerId+')';
33966
+ settings.markerEnd = 'url(#'+markerId+')';
33967
+ var linePos = getLinePosByPagesRotation(x1, y1, x2, y2, direction, pagesRotation);
33968
+ msrNode = sketchpad[pageNr].line(msrGrp, linePos[0], linePos[1], linePos[2], linePos[3], settings);
33969
+ } else if(svgData.type == 'msr_rect') {
33970
+ msrNode = sketchpad[pageNr].rect(msrGrp, x1, y1, nodeSvgData.width*scale, nodeSvgData.height*scale, settings);
33971
+ }
33730
33972
 
33731
- var direction = ('direction' in svgData) ? svgData.direction : false;
33973
+ if(svgData.type == 'msr_line' || svgData.type == 'msr_rect') {
33974
+ var measureTextSettings = getMeasureTextSettings();
33975
+ measureTextSettings.fill = strokeColorVal;
33976
+ measureTextSettings.id = getMeasureTxtId(svgData.id);
33977
+ measureTextSettings.filter = 'url(#txtFilterBg)';
33978
+ var shape = svgData.type.replace('msr_', '');
33979
+
33980
+ var measureTxtData = getMeasureTxtNormalizedSvgData(x1, y1, nodeSvgData.width*scale, nodeSvgData.height*scale,
33981
+ shape, svgData.measureLabel.width, svgData.measureLabel.height);
33982
+
33983
+ //measureTextSettings.fontSize = measureTextSettings.fontSize*getPdfCanvasScale(); // ?
33984
+ var measureText = sketchpad[pageNr].text(msrGrp, measureTxtData.x, measureTxtData.y, '', measureTextSettings);
33732
33985
 
33986
+ $(measureText).html(nodeSvgData.measureLabel.txt);
33987
+ }
33988
+
33989
+ var direction = ('direction' in svgData) ? svgData.direction : false;
33733
33990
 
33734
- setDrawNodes(svgData.pageNr, svgData.id, node, svgData.position.x, svgData.position.y, svgData.width, svgData.height, svgData.type, direction);
33991
+ setDrawNodes(pageNr, svgData.id, node, svgData.position.x, svgData.position.y, svgData.width, svgData.height, svgData.type, direction);
33735
33992
  // }, 50);
33736
33993
  showNotesLayer();
33737
33994
  }
@@ -33747,6 +34004,8 @@ function loadMeasureShape(measure) {
33747
34004
  var measureId = measure.data.id;
33748
34005
  var measureObj = $('#'+measureId);
33749
34006
 
34007
+ var isCalibrationItem = isMeasureCalibrationItem(measureId);
34008
+
33750
34009
  var pagesRotation = getPdfPagesRotation();
33751
34010
  var nodeSvgData = measure.data;
33752
34011
 
@@ -33772,32 +34031,50 @@ function loadMeasureShape(measure) {
33772
34031
 
33773
34032
  var measureSettings = getOutlineMeasureSettings();
33774
34033
  measureSettings.id = getMeasureShapeId(measureId);
33775
-
33776
- var measureTextSettings = getMeasureTextSettings();
33777
- measureTextSettings.id = getMeasureTxtId(measureId);
33778
- measureTextSettings.filter = 'url(#txtFilterBg)';
34034
+
34035
+ if(isCalibrationItem) {
34036
+ measureSettings.stroke = measureCalibrationStrokeColorVal;
34037
+ }
34038
+
34039
+ if(!isCalibrationItem) {
34040
+ var measureTextSettings = getMeasureTextSettings();
34041
+ measureTextSettings.id = getMeasureTxtId(measureId);
34042
+ measureTextSettings.filter = 'url(#txtFilterBg)';
34043
+ }
33779
34044
 
33780
34045
  if (shape == 'rect') {
33781
34046
  measureNode = sketchpad[pageNr].rect(measureGrp, x1, y1, nodeSvgData.width*scale, nodeSvgData.height*scale, measureSettings);
33782
34047
  } else if (shape == 'line') {
33783
- measureSettings.markerStart = 'url(#measureLineMarker'+pageNr+')';
33784
- measureSettings.markerEnd = 'url(#measureLineMarker'+pageNr+')';
34048
+ var markerId;
34049
+ if(isCalibrationItem) {
34050
+ markerId = getMeasureCalibrationLineMarkerId(pageNr);
34051
+ } else {
34052
+ markerId = getMeasureLineMarkerId(pageNr);
34053
+ }
34054
+ measureSettings.markerStart = 'url(#'+markerId+')';
34055
+ measureSettings.markerEnd = 'url(#'+markerId+')';
33785
34056
  var linePos = getLinePosByPagesRotation(x1, y1, x2, y2, direction, pagesRotation);
33786
34057
  measureNode = sketchpad[pageNr].line(measureGrp, linePos[0], linePos[1], linePos[2], linePos[3], measureSettings);
33787
34058
  }
33788
-
33789
- var measureTxtData = getMeasureTxtNormalizedSvgData(x1, y1, nodeSvgData.width*scale, nodeSvgData.height*scale,
34059
+
34060
+ if(!isCalibrationItem) {
34061
+ var measureTxtData = getMeasureTxtNormalizedSvgData(x1, y1, nodeSvgData.width*scale, nodeSvgData.height*scale,
33790
34062
  shape, measure.data.measureLabel.width, measure.data.measureLabel.height);
33791
34063
 
33792
- //measureTextSettings.fontSize = measureTextSettings.fontSize*getPdfCanvasScale(); // ?
33793
- measureText = sketchpad[pageNr].text(measureGrp, measureTxtData.x, measureTxtData.y, '', measureTextSettings);
34064
+ //measureTextSettings.fontSize = measureTextSettings.fontSize*getPdfCanvasScale(); // ?
34065
+ measureText = sketchpad[pageNr].text(measureGrp, measureTxtData.x, measureTxtData.y, '', measureTextSettings);
33794
34066
 
33795
- $(measureText).html(nodeSvgData.measureLabel.txt);
34067
+ $(measureText).html(nodeSvgData.measureLabel.txt);
34068
+ }
33796
34069
 
33797
34070
  measuresNodes[pageNr][measureId].nodeObj = measureGrp;
33798
34071
  }
33799
34072
  }
33800
34073
 
34074
+ function isMeasureCalibrationItem(id) {
34075
+ return (id.substring(0, 11) == 'calibration');
34076
+ }
34077
+
33801
34078
  function getLinePosByPagesRotation(x1, y1, x2, y2, direction, pagesRotation) {
33802
34079
  var linePos;
33803
34080
  if(pagesRotation == '90') {
@@ -33970,6 +34247,8 @@ function initBtnDrawAnnotationToolbar() {
33970
34247
  btnDrawAnnotationToolbar.on('click', function() {
33971
34248
  $(this).toggleClass('toggled');
33972
34249
  if($(this).hasClass('toggled')) {
34250
+ untoggleBtnsMeasure();
34251
+ hideMeasureToolbar();
33973
34252
  showDrawAnnotationToolbar();
33974
34253
  } else {
33975
34254
  hideDrawAnnotationToolbar();
@@ -34025,6 +34304,7 @@ function activateDrawAnnotation() {
34025
34304
  var svgsketchWrap = $('.svgsketch-wrap');
34026
34305
  svgsketchWrap.addClass('active');
34027
34306
  isSketchpadActive = true;
34307
+ $('#cursorSelectTool').click();
34028
34308
  }
34029
34309
 
34030
34310
  function deactivateDrawAnnotation() {
@@ -34120,7 +34400,7 @@ function bindMeasureToolbarBtnOnclickHandler() {
34120
34400
  untoggleBtnsDrawNote();
34121
34401
  activateMeasuresSketchpad();
34122
34402
  } else {
34123
- $('.svgsketch-wrap').removeClass('active').removeClass('measures');
34403
+ $('.svgsketch-wrap').removeClass('active').removeClass('measures').removeClass('measures-2-point');
34124
34404
  $('.measure-toolbar-btn').removeClass('active');
34125
34405
  }
34126
34406
  });
@@ -34137,7 +34417,7 @@ function toggleMeasureToolbar() {
34137
34417
  function untoggleBtnsMeasure() {
34138
34418
  $('.measure-toolbar-btn').removeClass('active');
34139
34419
  $('#btnMeasure').removeClass('toggled');
34140
- $('.svgsketch-wrap').removeClass('measures');
34420
+ $('.svgsketch-wrap').removeClass('measures').removeClass('measures-2-point');
34141
34421
  isSketchpadMeasureActive = false;
34142
34422
  }
34143
34423
 
@@ -34161,20 +34441,24 @@ function activateMeasuresSketchpad() {
34161
34441
 
34162
34442
  function bindMeasureBtnOnclickHandler(btnId, fnActive) {
34163
34443
  $(document).on('click', '#'+btnId, function() {
34164
- $(this).toggleClass('active');
34165
- if($(this).hasClass('active')) {
34166
- var t_ = $(this);
34167
- $('.measure-toolbar-btn').not('#'+t_.attr('id')).removeClass('active');
34168
-
34169
- isSketchpadMeasureActive = true;
34170
- $('.svgsketch-wrap').addClass('active');
34171
- if($.isFunction(fnActive)) {
34172
- fnActive();
34173
- }
34444
+ if($(this).hasClass('disabled')) {
34445
+ return false;
34174
34446
  } else {
34175
- $('.svgsketch-wrap').removeClass('active');
34176
- isSketchpadMeasureActive = false;
34177
- }
34447
+ $(this).toggleClass('active');
34448
+ if($(this).hasClass('active')) {
34449
+ var t_ = $(this);
34450
+ $('.measure-toolbar-btn').not('#'+t_.attr('id')).removeClass('active');
34451
+
34452
+ isSketchpadMeasureActive = true;
34453
+ $('.svgsketch-wrap').addClass('active');
34454
+ if($.isFunction(fnActive)) {
34455
+ fnActive();
34456
+ }
34457
+ } else {
34458
+ $('.svgsketch-wrap').removeClass('active');
34459
+ isSketchpadMeasureActive = false;
34460
+ }
34461
+ }
34178
34462
  });
34179
34463
  }
34180
34464
 
@@ -34266,9 +34550,12 @@ function normalizeRect270dg(rectPos, rectW, rectH, pageH) {
34266
34550
 
34267
34551
  function initMeasures() {
34268
34552
  bindDeleteMeasureEventHandler();
34553
+ bindAddMeasureNoteEventHandler();
34269
34554
 
34270
- // TODO -> load and set measures settings
34271
- initMeasuresSettings();
34555
+ // TODO -> load and set measures default settings
34556
+ initMeasuresDefaultSettings();
34557
+ // TODO -> load measures settings per page
34558
+ initMeasuresPageSettings();
34272
34559
  // TODO - load and set measures data
34273
34560
  initMeasuresData();
34274
34561
 
@@ -34277,6 +34564,9 @@ function initMeasures() {
34277
34564
 
34278
34565
  if($('#btnMeasure').hasClass('toggled')) {
34279
34566
  $('.svgsketch-wrap').addClass('active').addClass('measures');
34567
+ if($('body').hasClass('calibration-2-point')) {
34568
+ $('.svgsketch-wrap').addClass('measures-2-point');
34569
+ }
34280
34570
  }
34281
34571
  });
34282
34572
 
@@ -34288,13 +34578,18 @@ function initMeasuresData() {
34288
34578
  // measuresNodes = ...;
34289
34579
  }
34290
34580
 
34291
- // TODO -> load and set measures settings
34292
- function initMeasuresSettings() {
34581
+ // TODO -> load default measures settings
34582
+ function initMeasuresDefaultSettings() {
34293
34583
  // measurePrecision = ...; // TODO
34294
34584
  // measureUnit = ...; // TODO
34295
34585
  // measurePxScale = ...; // TODO
34296
34586
  }
34297
34587
 
34588
+ // TODO -> load measures settings
34589
+ function initMeasuresPageSettings() {
34590
+ // measuresPageSettings = {...}};
34591
+ }
34592
+
34298
34593
  function initMeasuresByPageNr(pageNr) {
34299
34594
  doInitMeasuresByPageNr(pageNr);
34300
34595
  }
@@ -34306,12 +34601,12 @@ function doInitMeasuresByPageNr(pageNr) {
34306
34601
  });
34307
34602
  }
34308
34603
 
34309
- function getMeasureValSqByPx(px) {
34310
- if(measureUnit == 'mm') {
34604
+ function getMeasureValSqByPx(px, measurePageUnit) {
34605
+ if(measurePageUnit == 'mm') {
34311
34606
  return getMeasureMmValSqByPx(px);
34312
- } else if(measureUnit == 'cm') {
34607
+ } else if(measurePageUnit == 'cm') {
34313
34608
  return getMeasureCmValSqByPx(px);
34314
- } else if(measureUnit == 'm') {
34609
+ } else if(measurePageUnit == 'm') {
34315
34610
  return getMeasureMValSqByPx(px);
34316
34611
  }
34317
34612
  }
@@ -34336,12 +34631,12 @@ function getMeasureMValSqByPx(pxSq) {
34336
34631
  return mValSq;
34337
34632
  }
34338
34633
 
34339
- function getMeasureValByPx(px) {
34340
- if(measureUnit == 'mm') {
34634
+ function getMeasureValByPx(px, measurePageUnit) {
34635
+ if(measurePageUnit == 'mm') {
34341
34636
  return getMeasureMmValByPx(px);
34342
- } else if(measureUnit == 'cm') {
34637
+ } else if(measurePageUnit == 'cm') {
34343
34638
  return getMeasureCmValByPx(px);
34344
- } else if(measureUnit == 'm') {
34639
+ } else if(measurePageUnit == 'm') {
34345
34640
  return getMeasureMValByPx(px);
34346
34641
  }
34347
34642
  }
@@ -34385,26 +34680,138 @@ function getDeviceDpi() {
34385
34680
  function initDlgMeasures() {
34386
34681
  bindBtnMeasureSettingsOnclickHandler();
34387
34682
  bindButtonsDlgMeasuresOnclickHandler();
34683
+ bindShowMeasuresCalibrationPageWarningHandler();
34388
34684
  }
34389
34685
  function bindBtnMeasureSettingsOnclickHandler() {
34390
34686
  $('#btnMeasuresSettings').on('click', function() {
34391
- showDlgOverlay();
34392
- showDlgMeasureSettings();
34687
+ if(isDlgMeasureSettingsOpened()) {
34688
+ return false;
34689
+ } else {
34690
+ showDlgMeasureSettings();
34691
+ }
34393
34692
  });
34394
34693
  }
34395
34694
 
34695
+ function isDlgMeasureSettingsOpened() {
34696
+ return ($('.measures-dlg-wrap').length && $('.measures-dlg-wrap').is(':visible'));
34697
+ }
34698
+
34396
34699
  function showDlgMeasureSettings() {
34700
+ var settings;
34701
+ var pageNr = getCurrentPage();
34702
+
34703
+ disableMeasureDrawBtns();
34704
+
34705
+ if(pageNr in measuresPageSettings) {
34706
+ settings = measuresPageSettings[pageNr];
34707
+ } else {
34708
+ settings = getMeasureDefaultSettings();
34709
+ settings['page'] = pageNr;
34710
+ hideDlgMeasureSettingsStatusbar();
34711
+ }
34712
+ prepareDlgMeasureSettings(settings);
34713
+
34714
+ $('.svgsketch-wrap').removeClass('transparent'); // TODO
34715
+
34716
+ $('body').addClass('measures-dlg-visible');
34397
34717
  $('.measures-dlg-wrap').show();
34398
34718
  }
34399
34719
 
34720
+ function disableMeasureDrawBtns() {
34721
+ $('#btnMeasureLine').removeClass('active').addClass('disabled');
34722
+ $('#btnMeasureArea').removeClass('active').addClass('disabled');
34723
+ }
34724
+
34725
+ function enableMeasureDrawBtns() {
34726
+ $('#btnMeasureLine').removeClass('disabled');
34727
+ $('#btnMeasureArea').removeClass('disabled');
34728
+ }
34729
+
34730
+ function prepareDlgMeasureSettings(settings) {
34731
+ setDlgMeasureSettingsType(settings.type);
34732
+ setDlgMeasureSettingsPrecision(settings.measurePrecision);
34733
+ setDlgMeasureSettingsUnits(settings.measureUnit);
34734
+
34735
+ if(isMeasureSettingType2Point(settings.type)) {
34736
+ setMeasuresSettingsType2Point();
34737
+ setDlgMeasureSettings2PointSize(settings.calibrationSize);
34738
+ setDlgMeasureSettings2PointSizePx(settings.calibrationSizePx);
34739
+ } else {
34740
+ setMeasuresSettingsTypeScale();
34741
+ setDlgMeasureSettingsScale(settings.measurePxScale);
34742
+ }
34743
+
34744
+ setDlgMeasureSettingsPageNr(settings.page);
34745
+ setDlgMeasureSettingsStatusbar(settings.user, settings.date);
34746
+ }
34747
+
34748
+ function setDlgMeasureSettingsPageNr(pageNr) {
34749
+ $('#measuresPageNr').val(pageNr);
34750
+ $('#msrDlgTitlePageNr').text(pageNr);
34751
+ }
34752
+
34753
+ function setDlgMeasureSettingsStatusbar(user, date) {
34754
+ if(user && date) {
34755
+ setDlgMeasureSettingsStatusbarUser(user);
34756
+ setDlgMeasureSettingsStatusbarDate(date);
34757
+ showDlgMeasureSettingsStatusbar();
34758
+ }
34759
+ }
34760
+
34761
+ function setDlgMeasureSettingsStatusbarUser(user) {
34762
+ $('.measures-settings-user').text(user);
34763
+ }
34764
+
34765
+ function setDlgMeasureSettingsStatusbarDate(date) {
34766
+ $('.measures-settings-date').text(date);
34767
+ }
34768
+
34769
+ function showDlgMeasureSettingsStatusbar() {
34770
+ $('.measures-dlg-statusbar').addClass('show');
34771
+ }
34772
+
34773
+ function hideDlgMeasureSettingsStatusbar() {
34774
+ $('.measures-dlg-statusbar').removeClass('show');
34775
+ }
34776
+
34777
+ function setDlgMeasureSettings2PointSize(size) {
34778
+ $('#measures2PointSize').val(size);
34779
+ }
34780
+
34781
+ function setDlgMeasureSettings2PointSizePx(sizePx) {
34782
+ $('#measures2PointSizePx').val(sizePx);
34783
+ }
34784
+
34785
+ function setDlgMeasureSettingsScale(scale) {
34786
+ $('#measuresScale').val(scale);
34787
+ }
34788
+
34789
+ function setDlgMeasureSettingsType(type) {
34790
+ $('[name="measuresSettingsType"][value="' + type + '"]').prop('checked', true);
34791
+ }
34792
+
34793
+ function setDlgMeasureSettingsUnits(units) {
34794
+ $('#measuresUnits').val(units);
34795
+ }
34796
+
34797
+ function setDlgMeasureSettingsPrecision(precision) {
34798
+ $('#measuresPrecision').val(precision);
34799
+ }
34800
+
34400
34801
  function hideDlgMeasureSettings() {
34802
+ $('body').removeClass('measures-dlg-visible');
34803
+ removeBodyCalibration2PointClass();
34401
34804
  $('.measures-dlg-wrap').hide();
34805
+ enableMeasureDrawBtns();
34402
34806
  }
34403
34807
 
34404
34808
  function bindButtonsDlgMeasuresOnclickHandler() {
34405
34809
  bindDlgMeasuresBtnSave();
34406
34810
  bindBtnDlgMeasuresCancel();
34407
34811
  bindBtnDlgMeasuresClose();
34812
+
34813
+ bindMeasuresSettingsTypeChange();
34814
+ bindBtnMeasureSettingsDelete();
34408
34815
  }
34409
34816
 
34410
34817
  function bindDlgMeasuresBtnSave() {
@@ -34413,57 +34820,196 @@ function bindDlgMeasuresBtnSave() {
34413
34820
  });
34414
34821
  }
34415
34822
 
34823
+ function getDlgMeasuresSettingsPageNr() {
34824
+ return parseInt($('#measuresPageNr').val());
34825
+ }
34416
34826
  function saveMeasuresSettings() {
34417
- var scaleNew = parseInt($('#measuresScale').val());
34827
+ var pageNr = getDlgMeasuresSettingsPageNr(); // getCurrentPage();
34828
+ var settingsTypeNew = $('[name="measuresSettingsType"]:checked').val();
34418
34829
  var unitsNew = $('#measuresUnits').val();
34830
+ var calibrationSizeNew = isMeasureSettingType2Point(settingsTypeNew) ? $('#measures2PointSize').val() : null;
34831
+ var calibrationSizePxNew = isMeasureSettingType2Point(settingsTypeNew) ? $('#measures2PointSizePx').val() : null;
34832
+ var scaleNew = isMeasureSettingType2Point(settingsTypeNew) ? getMeasureScaleBy2PointSize(calibrationSizeNew, calibrationSizePxNew, unitsNew) : parseInt($('#measuresScale').val());
34419
34833
  var precisionNew = parseInt($('#measuresPrecision').val());
34420
34834
 
34421
- if(scaleNew != measurePxScale || unitsNew != measureUnit || precisionNew != measurePrecision) {
34422
- measurePxScale = scaleNew;
34423
- measureUnit = unitsNew;
34424
- measurePrecision = precisionNew;
34425
34835
 
34836
+
34837
+ var isDataValid;
34838
+ if(isMeasureSettingType2Point(settingsTypeNew)) {
34839
+ var validationResult = checkCalibration2PointData(pageNr);
34840
+ isDataValid = validationResult.isCalibrationItemExist && validationResult.isFormDataValid;
34841
+ } else {
34842
+ isDataValid = true;
34843
+ }
34844
+
34845
+ if(isDataValid) {
34846
+ if(!isMeasuresPageSettingsExist(pageNr) || isMeasuresPageSettingsChanged(pageNr, scaleNew, settingsTypeNew, unitsNew, precisionNew, calibrationSizeNew, calibrationSizePxNew)) {
34847
+ setMeasuresPageSettings(pageNr, settingsTypeNew, scaleNew, unitsNew, precisionNew, calibrationSizeNew, calibrationSizePxNew);
34848
+
34849
+ // TODO
34850
+ doSaveMeasuresSettings(pageNr);
34851
+ updateMeasuresData(pageNr);
34852
+
34853
+ if(!isMeasureSettingType2Point(settingsTypeNew)) {
34854
+ removeCalibrationMeasureShape(pageNr);
34855
+ removeCalibrationMeasureShapeData(pageNr);
34856
+ } else {
34857
+ // TODO save calibration shape data
34858
+ doSaveCalibrationShapeData(pageNr);
34859
+ }
34860
+ }
34861
+ hideDlgMeasureSettings();
34862
+ } else {
34426
34863
  // TODO
34427
- doSaveMeasuresSettings();
34428
- // TODO
34429
- updateMeasuresData();
34864
+
34865
+ var msgTxt = getMeasureSettingsValidationMsgTxt(validationResult);
34866
+ showMeasureSettingsValidationMsg(msgTxt);
34867
+ }
34868
+ }
34869
+
34870
+ function getMeasureSettingsValidationMsgTxt(validationResult) {
34871
+ var msg = label_errMsgCalibrationTitle + ' \n';
34872
+
34873
+ if(!validationResult.isClibrationItemExist) {
34874
+ msg += label_errMsgNoCalibrationItem + ' \n';
34875
+ }
34876
+
34877
+ if(!validationResult.isFormDataValid) {
34878
+ msg += label_errMsgCalibrationSizeNotDefined;
34879
+ }
34880
+
34881
+ return msg;
34882
+ }
34883
+ function showMeasureSettingsValidationMsg(msgTxt) {
34884
+ // TOOD -> msg
34885
+ alert(msgTxt);
34886
+ }
34887
+
34888
+ function isMeasuresPageSettingsExist(pageNr) {
34889
+ return pageNr in measuresPageSettings;
34890
+ }
34891
+
34892
+ function isMeasuresPageSettingsChanged(pageNr, scale, type, units, precision, calibrationSize, calibrationSizePx) {
34893
+ if(isMeasuresPageSettingsExist(pageNr)) {
34894
+ if(isMeasuresPageSettingsScaleChanged(pageNr, scale) || isMeasuresPageSettingsTypeChanged(pageNr, type)
34895
+ || isMeasuresPageSettingsUnitsChanged(pageNr, units) || isMeasuresPageSettingsPrecisionChanged(pageNr, precision)
34896
+ || isMeasuresPageSettingsCalibrationSizeChanged(pageNr, calibrationSize)
34897
+ || isMeasuresPageSettingsCalibrationSizePxChanged(pageNr, calibrationSizePx)) {
34898
+ return true;
34899
+ } else {
34900
+ return false;
34901
+ }
34902
+ } else {
34903
+ return true;
34904
+ }
34905
+ }
34906
+
34907
+ function isMeasuresPageSettingsScaleChanged(pageNr, scale) {
34908
+ return measuresPageSettings[pageNr].measurePxScale != scale;
34909
+ }
34910
+
34911
+ function isMeasuresPageSettingsTypeChanged(pageNr, type) {
34912
+ return measuresPageSettings[pageNr].type != type;
34913
+ }
34914
+
34915
+ function isMeasuresPageSettingsUnitsChanged(pageNr, units) {
34916
+ return measuresPageSettings[pageNr].measureUnit != units;
34917
+ }
34918
+
34919
+ function isMeasuresPageSettingsPrecisionChanged(pageNr, precision) {
34920
+ return measuresPageSettings[pageNr].measurePrecision != precision;
34921
+ }
34922
+
34923
+ function isMeasuresPageSettingsCalibrationSizeChanged(pageNr, calibrationSize) {
34924
+ return measuresPageSettings[pageNr].calibrationSize != calibrationSize;
34925
+ }
34926
+
34927
+ function isMeasuresPageSettingsCalibrationSizePxChanged(pageNr, calibrationSizePx) {
34928
+ return measuresPageSettings[pageNr].calibrationSizePx != calibrationSizePx;
34929
+ }
34930
+
34931
+ function setMeasuresPageSettings(pageNr, type, scale, units, precision, calibrationSize, calibrationSizePx) {
34932
+ measuresPageSettings[pageNr] = {
34933
+ page: pageNr,
34934
+ type: type,
34935
+ measurePxScale: scale,
34936
+ measureUnit: units,
34937
+ measurePrecision: precision,
34938
+ calibrationSize: calibrationSize,
34939
+ calibrationSizePx: calibrationSizePx,
34940
+ user: 'Иванов В.С.',// TODO!!!
34941
+ date: '25.03.2023 11:42'// TODO!!!
34942
+ };
34943
+ }
34944
+
34945
+ function doSaveCalibrationShapeData(pageNr) {
34946
+ var calibrationShapeId = getCalibrationShapeId(pageNr);
34947
+ var calibrationShapeData = measuresNodes[pageNr][calibrationShapeId];
34948
+ // TODO save calibration shape data
34949
+ }
34950
+
34951
+ function removeCalibrationMeasureShape(pageNr) {
34952
+ var calibrationMeasure = $('#calibration_' + pageNr);
34953
+ if(calibrationMeasure.length) {
34954
+ calibrationMeasure.remove();
34955
+ }
34956
+ }
34957
+
34958
+ function getCalibrationShapeId(pageNr) {
34959
+ var calibrationShapeId = 'calibration_'+pageNr;
34960
+ return calibrationShapeId;
34961
+ }
34962
+
34963
+ function removeCalibrationMeasureShapeData(pageNr) {
34964
+ var calibrationShapeId = getCalibrationShapeId(pageNr);
34965
+ if(measuresNodes[pageNr] && calibrationShapeId in measuresNodes[pageNr]) {
34966
+ delete measuresNodes[pageNr][calibrationShapeId];
34967
+ // TODO if exist -> remove calibration shape data from server
34968
+ }
34969
+ }
34970
+
34971
+ function isMeasureSettingType2Point(type) {
34972
+ return (type == '2-point');
34973
+ }
34974
+
34975
+ function getMeasureScaleBy2PointSize(size, sizePx, measurePageUnit) {
34976
+ if(sizePx > 0 && size > 0) {
34977
+ return size/getMeasureValByPx(sizePx, measurePageUnit);
34978
+ } else {
34979
+ return 0;
34430
34980
  }
34431
- hideDlgOverlay();
34432
- hideDlgMeasureSettings();
34433
34981
  }
34434
34982
 
34435
34983
  // TODO - save to server
34436
- function doSaveMeasuresSettings() {
34437
- // measurePxScale
34438
- // measureUnit
34439
- // measurePrecision
34984
+ function doSaveMeasuresSettings(pageNr) {
34985
+ // measuresPageSettings[pageNr]
34440
34986
  }
34441
34987
 
34442
34988
  // TODO - update measures data and save to server
34443
- function updateMeasuresData() {
34444
- $.each(measuresNodes, function(indexPage, measuresNodesPage) {
34445
- $.each(measuresNodesPage, function(indexItem, measuresNodesPageItem){
34446
- updateMeasure(measuresNodesPageItem);
34989
+ function updateMeasuresData(pageNr) {
34990
+ $.each(measuresNodes[pageNr], function(indexItem, measuresNodesPageItem){
34991
+ if(!isMeasureCalibrationItem(measuresNodesPageItem.data.id)) {
34992
+ updateMeasure(measuresNodesPageItem, pageNr);
34447
34993
  // TODO - save to server
34448
34994
  // measuresNodesPageItem['data']
34449
- });
34995
+ }
34450
34996
  });
34451
34997
  }
34452
34998
 
34453
- function updateMeasure(measure) {
34454
- measure['data']['measure']['pxScale'] = measurePxScale;
34455
- measure['data']['measure']['unit'] = measureUnit;
34456
- measure['data']['measure']['precision'] = measurePrecision;
34999
+ function updateMeasure(measure, page) {
35000
+ measure['data']['measure']['pxScale'] = measuresPageSettings[page].measurePxScale;
35001
+ measure['data']['measure']['unit'] = measuresPageSettings[page].measureUnit;
35002
+ measure['data']['measure']['precision'] = measuresPageSettings[page].measurePrecision;
34457
35003
 
34458
35004
  var measureVal;
34459
35005
  var measureLabel;
34460
35006
 
34461
35007
  if(measure['data']['type'] == 'line') {
34462
- measureVal = getMeasureVal(measure['data']['measure']['pxVal']);
34463
- measureLabel = getMeasureLineLabel(measureVal);
35008
+ measureVal = getMeasureVal(measure['data']['measure']['pxVal'], measure['data']['measure']['pxScale'], measure['data']['measure']['precision'], measure['data']['measure']['unit']);
35009
+ measureLabel = getMeasureLineLabel(measureVal, measure['data']['measure']['unit']);
34464
35010
  } else if(measure['data']['type'] == 'rect') {
34465
- measureVal = getMeasureValSq(measure['data']['measure']['pxVal']);
34466
- measureLabel = getMeasureAreaLabel(measureVal);
35011
+ measureVal = getMeasureValSq(measure['data']['measure']['pxVal'], measure['data']['measure']['pxScale'], measure['data']['measure']['precision'], measure['data']['measure']['unit']);
35012
+ measureLabel = getMeasureAreaLabel(measureVal, measure['data']['measure']['unit']);
34467
35013
  }
34468
35014
 
34469
35015
  measure['data']['measureLabel']['txt'] = measureLabel;
@@ -34481,23 +35027,279 @@ function updateMeasure(measure) {
34481
35027
 
34482
35028
  function bindBtnDlgMeasuresCancel() {
34483
35029
  $('#btnMeasuresSettingsCancel').click(function() {
34484
- hideDlgOverlay();
34485
- hideDlgMeasureSettings();
35030
+ closeDlgMeasuresHandler();
34486
35031
  });
34487
35032
  }
34488
35033
 
34489
35034
  function bindBtnDlgMeasuresClose() {
34490
35035
  $('.measures-dlg-header .close').click(function() {
34491
- hideDlgOverlay();
34492
- hideDlgMeasureSettings();
35036
+ closeDlgMeasuresHandler();
34493
35037
  });
34494
35038
  }
34495
35039
 
35040
+ function closeDlgMeasuresHandler() {
35041
+ hideMeasuresCalibrationPageWarning();
35042
+ removeMeasuresCalibrationHint();
35043
+
35044
+ var pageNr = getDlgMeasuresSettingsPageNr(); // getCurrentPage();
35045
+ var calibrationShapeId = getCalibrationShapeId(pageNr);
35046
+
35047
+ if(!isMeasuresPageSettingsExist(pageNr) || (isMeasuresPageSettingsExist(pageNr) && !isMeasureSettingType2Point(measuresPageSettings[pageNr].type))) {
35048
+ removeCalibrationMeasureShape(pageNr);
35049
+ if(measuresNodes[pageNr] && calibrationShapeId in measuresNodes[pageNr]) {
35050
+ delete measuresNodes[pageNr][calibrationShapeId];
35051
+ }
35052
+ }
35053
+
35054
+ if(isMeasuresPageSettingsExist(pageNr) && isMeasureSettingType2Point(measuresPageSettings[pageNr].type) && isCalibrationLineChanged) {
35055
+ var calibrationShape = $('#'+calibrationShapeId);
35056
+ if(calibrationShape.length) {
35057
+ calibrationShape.remove();
35058
+ }
35059
+ loadMeasureShape(calibrationLineChangedDataOrg);
35060
+ measuresNodes[pageNr][calibrationShapeId] = calibrationLineChangedDataOrg;
35061
+ isCalibrationLineChanged = false;
35062
+ calibrationLineChangedDataOrg = false;
35063
+ }
35064
+
35065
+ hideDlgMeasureSettings();
35066
+ }
35067
+
34496
35068
  function bindToggleMeasures() {
34497
35069
  $(document).on('click', '#btnToggleMeasures', function() {
34498
35070
  $('#viewer').toggleClass('hide-measures');
34499
35071
  $(this).toggleClass('show');
34500
35072
  });
35073
+ }
35074
+
35075
+ function bindMeasuresSettingsTypeChange() {
35076
+ $('[name="measuresSettingsType"]').on('change', function() {
35077
+ measuresSettingsTypeChangeHandler();
35078
+ });
35079
+ }
35080
+
35081
+ function measuresSettingsTypeChangeHandler() {
35082
+ if($('#measuresSettingsTypeScale').is(':checked')) {
35083
+ setMeasuresSettingsTypeScale();
35084
+ } else {
35085
+ setMeasuresSettingsType2Point();
35086
+ }
35087
+ }
35088
+
35089
+ function addBodyCalibration2PointClass() {
35090
+ $('body').addClass('calibration-2-point');
35091
+ }
35092
+
35093
+ function removeBodyCalibration2PointClass() {
35094
+ $('body').removeClass('calibration-2-point');
35095
+ }
35096
+
35097
+ function enableBtnMeasuresSettingsSave() {
35098
+ $('#btnMeasuresSettingsSave').prop('disabled', false);
35099
+ }
35100
+
35101
+ function disableBtnMeasuresSettingsSave() {
35102
+ $('#btnMeasuresSettingsSave').prop('disabled', 'disabled');
35103
+ }
35104
+
35105
+ function hideBtnMeasureSettingsDelete() {
35106
+ $('#btnMeasuresSettingsDelete').removeClass('show');
35107
+ }
35108
+
35109
+ function showBtnMeasureSettingsDelete() {
35110
+ $('#btnMeasuresSettingsDelete').addClass('show');
35111
+ }
35112
+
35113
+ function disableBtnMeasureSettingsDelete() {
35114
+ $('#btnMeasuresSettingsDelete').prop('disabled', 'disabled');
35115
+ }
35116
+
35117
+ function enableBtnMeasureSettingsDelete() {
35118
+ $('#btnMeasuresSettingsDelete').prop('disabled', false);
35119
+ }
35120
+
35121
+ function bindBtnMeasureSettingsDelete() {
35122
+ $('#btnMeasuresSettingsDelete').on('click', function() {
35123
+ var pageNr = getDlgMeasuresSettingsPageNr();
35124
+ deleteMeasuresCalibrationLine(pageNr);
35125
+ });
35126
+ }
35127
+
35128
+ function deleteMeasuresCalibrationLine(pageNr) {
35129
+ var calibrationShapeId = getCalibrationShapeId(pageNr);
35130
+ isCalibrationLineChanged = true;
35131
+ calibrationLineChangedDataOrg = measuresNodes[pageNr][getCalibrationShapeId(pageNr)];
35132
+ delete measuresNodes[pageNr][getCalibrationShapeId(pageNr)];
35133
+ $('#'+calibrationShapeId).remove();
35134
+ disableBtnMeasureSettingsDelete();
35135
+ createMeasuresCalibrationHint();
35136
+ activateMeasuresCalibration();
35137
+ }
35138
+
35139
+ function setMeasuresSettingsTypeScale() {
35140
+ removeMeasuresCalibrationHint();
35141
+ removeBodyCalibration2PointClass();
35142
+ enableBtnMeasuresSettingsSave();
35143
+ hideBtnMeasureSettingsDelete();
35144
+ $('.measures-settings-controls').removeClass('type-2-point').addClass('type-scale');
35145
+ }
35146
+
35147
+ function setMeasuresSettingsType2Point() {
35148
+ addBodyCalibration2PointClass();
35149
+ clearCalibration2PointSizeInput();
35150
+
35151
+ enableBtnMeasuresSettingsSave();
35152
+
35153
+ var pageNr = getDlgMeasuresSettingsPageNr(); // getCurrentPage();
35154
+ var currentPage = getCurrentPage();
35155
+
35156
+ if(currentPage != pageNr) {
35157
+ showMeasuresCalibrationPageWarning();
35158
+ }
35159
+
35160
+ if(pageNr in measuresPageSettings) {
35161
+ //enableBtnMeasuresSettingsSave();
35162
+ showBtnMeasureSettingsDelete();
35163
+ } else {
35164
+ //disableBtnMeasuresSettingsSave();
35165
+ hideBtnMeasureSettingsDelete();
35166
+ }
35167
+
35168
+ showBtnMeasureSettingsDelete();
35169
+
35170
+ if(isCalibration2PointLineExist(pageNr)) {
35171
+ enableBtnMeasureSettingsDelete();
35172
+ } else {
35173
+ createMeasuresCalibrationHint();
35174
+ disableBtnMeasureSettingsDelete();
35175
+ }
35176
+
35177
+ activateMeasuresCalibration();
35178
+
35179
+ $('.measures-settings-controls').removeClass('type-scale').addClass('type-2-point');
35180
+ }
35181
+
35182
+ function checkCalibration2PointData(pageNr) {
35183
+ var checkResult = {
35184
+ isFormDataValid: isCalibration2PointFormDataValid(),
35185
+ isCalibrationItemExist: isCalibration2PointLineExist(pageNr)
35186
+ }
35187
+ return checkResult;
35188
+ }
35189
+
35190
+ function isCalibration2PointLineExist(pageNr) {
35191
+ var shapeId = getCalibrationShapeId(pageNr);
35192
+
35193
+ return $('#'+shapeId).length && $('#'+shapeId).is(':visible');
35194
+ }
35195
+
35196
+ function isCalibration2PointFormDataValid() {
35197
+ if($('#measures2PointSize').val() > 0) {
35198
+ return true;
35199
+ } else {
35200
+ return false;
35201
+ }
35202
+ }
35203
+
35204
+ function clearCalibration2PointSizeInput() {
35205
+ $('#measures2PointSize').val('');
35206
+ }
35207
+
35208
+ function createMeasuresCalibrationHint() {
35209
+ var hintElm = $('<div id="measures2PointHint" />');
35210
+ hintElm.text(label_measures2PointHint);
35211
+ $('body').append(hintElm);
35212
+ }
35213
+
35214
+ function removeMeasuresCalibrationHint() {
35215
+ var hintElm = $('#measures2PointHint');
35216
+ if(hintElm.length) {
35217
+ $('#measures2PointHint').remove();
35218
+ }
35219
+ }
35220
+
35221
+ function activateMeasuresCalibration() {
35222
+ $('.svgsketch-wrap').addClass('active').addClass('measures').addClass('measures-2-point');
35223
+ $('#cursorSelectTool').click();
35224
+ isSketchpadMeasureActive = true;
35225
+ }
35226
+
35227
+ function deactivateMeasuresCalibration() {
35228
+ $('.svgsketch-wrap').removeClass('active').removeClass('measures').removeClass('measures-2-point');
35229
+ isSketchpadMeasureActive = false;
35230
+ }
35231
+
35232
+ function isMeasuresCalibrationActive() {
35233
+ return $('.svgsketch-wrap').hasClass('measures-2-point');
35234
+ }
35235
+
35236
+ function bindShowMeasuresCalibrationPageWarningHandler() {
35237
+ $(document).on('showMeasuresCalibrationPageWarning', function() {
35238
+ showMeasuresCalibrationPageWarning();
35239
+ });
35240
+ }
35241
+
35242
+ function showMeasuresCalibrationPageWarning() {
35243
+ var currentPage = parseInt(getCurrentPage());
35244
+ var calibrationPage = parseInt(getDlgMeasuresSettingsPageNr());
35245
+
35246
+ if(currentPage != calibrationPage) {
35247
+ showMeasuresCalibrationPageWarning();
35248
+ } else {
35249
+ hideMeasuresCalibrationPageWarning();
35250
+ }
35251
+ }
35252
+
35253
+ function hideMeasuresCalibrationPageWarning() {
35254
+ var warning = $('#calibrationPageWarning');
35255
+ if(warning.length) {
35256
+ warning.remove();
35257
+ }
35258
+ var overlay = $('#calibrationPageWarningOverlay');
35259
+ if(overlay.length) {
35260
+ overlay.remove();
35261
+ }
35262
+ }
35263
+
35264
+ function showMeasuresCalibrationPageWarning() {
35265
+ if($('#calibrationPageWarning').length) {
35266
+ return false;
35267
+ } else {
35268
+ createMeasuresCalibrationPageWarning();
35269
+ }
35270
+ }
35271
+
35272
+ function createMeasuresCalibrationPageWarning() {
35273
+ var warning = $('<div class="warning-wrap" id="calibrationPageWarning"/>');
35274
+
35275
+ var title = $('<div class="warning-title"/>');
35276
+ title.text(label_warningCalibrationPage_title);
35277
+
35278
+ var body = $('<div class="warning-body"/>');
35279
+ body.html(label_warningCalibrationPage_body);
35280
+
35281
+ var footer = $('<div class="warning-footer"/>');
35282
+ var btnCloseSettings = $('<button id="btnCalibrationPageWarningClose" class="uk-button uk-button-default uk-button-full-width" />');
35283
+ btnCloseSettings.text(label_warningCalibrationPage_btnClose);
35284
+ btnCloseSettings.off('click');
35285
+ btnCloseSettings.on('click', function() {
35286
+ closeDlgMeasuresHandler();
35287
+ });
35288
+ var btnGoToCalibrationPage = $('<button id="btnCalibrationPageWarning" class="uk-button uk-button-primary uk-button-full-width" />');
35289
+ btnGoToCalibrationPage.text(label_warningCalibrationPage_btnGoToPage);
35290
+ btnGoToCalibrationPage.off('click');
35291
+ btnGoToCalibrationPage.on('click', function() {
35292
+ PDFViewerApplication.page = getDlgMeasuresSettingsPageNr();
35293
+ closeDlgMeasuresHandler();
35294
+ });
35295
+ footer.append(btnGoToCalibrationPage);
35296
+ footer.append(btnCloseSettings);
35297
+
35298
+ warning.append(title).append(body).append(footer);
35299
+
35300
+ var warningOverlay = $('<div class="warning-overlay" id="calibrationPageWarningOverlay"/>');
35301
+
35302
+ $('#outerContainer').append(warningOverlay).append(warning);
34501
35303
  }
34502
35304
  var needZoomEventsTimeout = 250; // ms
34503
35305
  var scrollStoppedEventsTimeout = 200; // ms
@@ -34557,10 +35359,14 @@ function initZoomPageEvent() {
34557
35359
  // console.log('pagechange', e);
34558
35360
  // });
34559
35361
  PDFViewerApplication.eventBus.on('pagechanging', function(e) {
34560
- // console.log('pagechanging', e);
35362
+ //console.log('pagechanging', e);
34561
35363
  $('.pdfViewer .page').removeClass('current');
34562
35364
  $('.pdfViewer .page').eq(getCurrentPage()-1).addClass('current');
34563
35365
  $(document).trigger('needZoom');
35366
+
35367
+ if($('body').hasClass('measures-dlg-visible') && $('body').hasClass('calibration-2-point')) {
35368
+ $(document).trigger('showMeasuresCalibrationPageWarning');
35369
+ }
34564
35370
  });
34565
35371
  PDFViewerApplication.eventBus.on('pagesinit', function(e) {
34566
35372
  // console.log('pagesinit', e);
@@ -36421,6 +37227,9 @@ lbl_comparisonWarning = context.createLocale('app.viewer.pdf.compare.warning');
36421
37227
 
36422
37228
  var label_deleteMeasure = context.createLocale('app.viewer.pdf.contextMenu.deleteMeasure');
36423
37229
  var label_cancel = context.createLocale('app.viewer.pdf.contextMenu.cancel');
37230
+ var label_createAnnotation = context.createLocale('app.viewer.pdf.contextMenu.addNote');
37231
+ var label_measures2PointHint = context.createLocale('app.viewer.pdf.measures.twoPointHint');
37232
+
36424
37233
  function initContextMenuCanvas() {
36425
37234
  var pages = '#viewer .page';
36426
37235
  $.contextMenu({
@@ -36908,7 +37717,7 @@ function createNote(pageNr, index, issue) {
36908
37717
 
36909
37718
  if (scalledOptions.svg && (scalledOptions.svg.type == 'ellipse' || scalledOptions.svg.type == 'polygon')) {
36910
37719
  scalledOptions.position.y = scalledOptions.position.y + scalledOptions.svg.height / 2;
36911
- } else if (scalledOptions.svg && (scalledOptions.svg.type == 'line' || scalledOptions.svg.type == 'arrow')) {
37720
+ } else if (scalledOptions.svg && (scalledOptions.svg.type == 'line' || scalledOptions.svg.type == 'arrow' || scalledOptions.svg.type == 'msr_line')) {
36912
37721
  if (scalledOptions.svg.direction == 'bltr') {
36913
37722
  scalledOptions.position.y = scalledOptions.position.y + scalledOptions.svg.height;
36914
37723
  } else if (scalledOptions.svg.direction == 'trbl') {
@@ -37011,6 +37820,7 @@ function getShapeSettings(nodeId, color) {
37011
37820
  function loadSvgShape(svgData) {
37012
37821
  if (typeof svgData === 'object' && svgData !== null && svgData !== false) {
37013
37822
 
37823
+ var pageNr = svgData.pageNr;
37014
37824
  var scale = getPdfCanvasScale();
37015
37825
 
37016
37826
  var node = null;
@@ -37024,7 +37834,7 @@ function loadSvgShape(svgData) {
37024
37834
  }
37025
37835
 
37026
37836
  if (drawNodes[svgData.id]) {
37027
- sketchpad[svgData.pageNr].remove(drawNodes[svgData.id].nodeObj);
37837
+ sketchpad[pageNr].remove(drawNodes[svgData.id].nodeObj);
37028
37838
  }
37029
37839
 
37030
37840
  var x1 = nodeSvgData.position.x * scale;
@@ -37034,30 +37844,62 @@ function loadSvgShape(svgData) {
37034
37844
 
37035
37845
  var direction = ('direction' in svgData) ? svgData.direction : false;
37036
37846
 
37847
+ var msrGrp;
37848
+ var msrNode;
37849
+ if (svgData.type == 'msr_rect' || svgData.type == 'msr_line') {
37850
+ msrGrp = sketchpad[pageNr].group(svgData.id);
37851
+ settings.id = getMeasureShapeId(svgData.id);
37852
+
37853
+ node = msrGrp;
37854
+ }
37855
+
37037
37856
  if (svgData.type == 'rect') {
37038
- node = sketchpad[nodeSvgData.pageNr].rect(x1, y1, nodeSvgData.width * scale, nodeSvgData.height * scale, settings);
37857
+ node = sketchpad[pageNr].rect(x1, y1, nodeSvgData.width * scale, nodeSvgData.height * scale, settings);
37039
37858
  } else if (svgData.type == 'ellipse') {
37040
37859
  var rx = nodeSvgData.width * scale / 2;
37041
37860
  var ry = nodeSvgData.height * scale / 2;
37042
- node = sketchpad[nodeSvgData.pageNr].ellipse(x1 + rx, y1 + ry, rx, ry, settings);
37861
+ node = sketchpad[pageNr].ellipse(x1 + rx, y1 + ry, rx, ry, settings);
37043
37862
  } else if (svgData.type == 'polygon') {
37044
37863
  var polygonPos = getPolygonPosByPageRotation(x1, y1, x2, y2, pagesRotation);
37045
- node = sketchpad[nodeSvgData.pageNr].polygon(polygonPos, settings);
37864
+ node = sketchpad[pageNr].polygon(polygonPos, settings);
37046
37865
  } else if (svgData.type == 'cloud') {
37047
37866
  var cloudPath = getCloudPath(x1, y1, x2, y2);
37048
- node = sketchpad[nodeSvgData.pageNr].path(cloudPath, settings);
37867
+ node = sketchpad[pageNr].path(cloudPath, settings);
37049
37868
  } else if (svgData.type == 'line') {
37050
37869
  var linePos = getLinePosByPagesRotation(x1, y1, x2, y2, direction, pagesRotation);
37051
37870
  node = sketchpad[nodeSvgData.pageNr].line(linePos[0], linePos[1], linePos[2], linePos[3], settings);
37052
37871
  } else if (svgData.type == 'arrow') {
37053
37872
  var linePos = getLinePosByPagesRotation(x1, y1, x2, y2, direction, pagesRotation);
37054
37873
  var arrowPath = getArrowPath(linePos[0], linePos[1], linePos[2], linePos[3]);
37055
- node = sketchpad[nodeSvgData.pageNr].path(arrowPath, settings);
37874
+ node = sketchpad[pageNr].path(arrowPath, settings);
37875
+ } else if (svgData.type == 'msr_line') {
37876
+ var markerId = getMeasureNoteLineMarkerId(pageNr);
37877
+ settings.markerStart = 'url(#' + markerId + ')';
37878
+ settings.markerEnd = 'url(#' + markerId + ')';
37879
+ var linePos = getLinePosByPagesRotation(x1, y1, x2, y2, direction, pagesRotation);
37880
+ msrNode = sketchpad[pageNr].line(msrGrp, linePos[0], linePos[1], linePos[2], linePos[3], settings);
37881
+ } else if (svgData.type == 'msr_rect') {
37882
+ msrNode = sketchpad[pageNr].rect(msrGrp, x1, y1, nodeSvgData.width * scale, nodeSvgData.height * scale, settings);
37883
+ }
37884
+
37885
+ if (svgData.type == 'msr_line' || svgData.type == 'msr_rect') {
37886
+ var measureTextSettings = getMeasureTextSettings();
37887
+ measureTextSettings.fill = svgData.stroke.color || strokeColorVal;
37888
+ measureTextSettings.id = getMeasureTxtId(svgData.id);
37889
+ measureTextSettings.filter = 'url(#txtFilterBg)';
37890
+ var shape = svgData.type.replace('msr_', '');
37891
+
37892
+ var measureTxtData = getMeasureTxtNormalizedSvgData(x1, y1, nodeSvgData.width * scale, nodeSvgData.height * scale,
37893
+ shape, svgData.measureLabel.width, svgData.measureLabel.height);
37894
+
37895
+ var measureText = sketchpad[pageNr].text(msrGrp, measureTxtData.x, measureTxtData.y, '', measureTextSettings);
37896
+
37897
+ $(measureText).html(nodeSvgData.measureLabel.txt);
37056
37898
  }
37057
37899
 
37058
37900
  var direction = ('direction' in svgData) ? svgData.direction : false;
37059
37901
 
37060
- setDrawNodes(svgData.pageNr, svgData.id, node, svgData.position.x, svgData.position.y, svgData.width, svgData.height, svgData.type, direction, svgData.stroke.color);
37902
+ setDrawNodes(pageNr, svgData.id, node, svgData.position.x, svgData.position.y, svgData.width, svgData.height, svgData.type, direction, svgData.stroke.color);
37061
37903
  }
37062
37904
  }
37063
37905
 
@@ -37125,6 +37967,8 @@ function initBtnDrawAnnotation() {
37125
37967
  if (isHandToolActive) {
37126
37968
  $('#cursorSelectTool').click();
37127
37969
  }
37970
+ untoggleBtnsMeasure();
37971
+ hideMeasureToolbar();
37128
37972
  activateDrawAnnotation();
37129
37973
  } else {
37130
37974
  if (!isHandToolActive) {
@@ -37232,40 +38076,129 @@ function drawShape(x1, y1, x2, y2, pageNr, shape) {
37232
38076
 
37233
38077
  $('#svgsketch-' + [pageNr]).focus();
37234
38078
 
37235
- initDlgForSvg(drawNodes[nodeId]);
38079
+ initDlgForSvg(drawNodes[nodeId], false, removeSvg, false, drawNodes[nodeId].data);
37236
38080
 
37237
38081
  deactivateDrawAnnotation();
37238
38082
  }
37239
38083
 
37240
38084
  function saveMeasuresSettings() {
37241
- var scaleNew = parseInt($('#measuresScale').data('value'));
38085
+ var pageNr = getDlgMeasuresSettingsPageNr(); // getCurrentPage();
38086
+ var settingsTypeNew = $('[name="measuresSettingsType"]:checked').val();
37242
38087
  var unitsNew = $('#measuresUnits').data('value');
38088
+ var calibrationSizeNew = isMeasureSettingType2Point(settingsTypeNew) ? $('#measures2PointSize').val() : null;
38089
+ var calibrationSizePxNew = isMeasureSettingType2Point(settingsTypeNew) ? $('#measures2PointSizePx').val() : null;
38090
+ var scaleNew = isMeasureSettingType2Point(settingsTypeNew) ? getMeasureScaleBy2PointSize(calibrationSizeNew, calibrationSizePxNew, unitsNew) : parseInt($('#measuresScale').data('value'));
37243
38091
  var precisionNew = parseInt($('#measuresPrecision').data('value'));
37244
38092
 
37245
- let isChanged = false;
37246
- if (scaleNew && scaleNew != measurePxScale) {
37247
- measurePxScale = scaleNew;
37248
- isChanged = true;
38093
+ var isDataValid;
38094
+ if (isMeasureSettingType2Point(settingsTypeNew)) {
38095
+ var validationResult = checkCalibration2PointData(pageNr);
38096
+ isDataValid = validationResult.isCalibrationItemExist && validationResult.isFormDataValid;
38097
+ } else {
38098
+ isDataValid = true;
37249
38099
  }
37250
38100
 
37251
- if (unitsNew && unitsNew != measureUnit) {
37252
- measureUnit = unitsNew;
37253
- isChanged = true;
38101
+ if (isDataValid) {
38102
+ if (!isMeasuresPageSettingsExist(pageNr) || isMeasuresPageSettingsChanged(pageNr, scaleNew, settingsTypeNew, unitsNew, precisionNew, calibrationSizeNew, calibrationSizePxNew)) {
38103
+ setMeasuresPageSettings(pageNr, settingsTypeNew, scaleNew, unitsNew, precisionNew, calibrationSizeNew, calibrationSizePxNew);
38104
+
38105
+ // TODO
38106
+ doSaveMeasuresSettings(pageNr);
38107
+ updateMeasuresData(pageNr);
38108
+
38109
+ if (!isMeasureSettingType2Point(settingsTypeNew)) {
38110
+ removeCalibrationMeasureShape(pageNr);
38111
+ removeCalibrationMeasureShapeData(pageNr);
38112
+ } else {
38113
+ // TODO save calibration shape data
38114
+ doSaveCalibrationShapeData(pageNr);
38115
+ }
38116
+ }
38117
+ hideDlgMeasureSettings();
38118
+ } else {
38119
+ // TODO
38120
+
38121
+ var msgTxt = getMeasureSettingsValidationMsgTxt(validationResult);
38122
+ showMeasureSettingsValidationMsg(msgTxt);
37254
38123
  }
38124
+ }
38125
+
38126
+ function getMeasureNoteLineMarkerSettings(color) {
38127
+ var settings = {
38128
+ fill: fillVal,
38129
+ stroke: color || strokeColorVal
38130
+ };
38131
+
38132
+ return settings;
38133
+ }
37255
38134
 
37256
- if (precisionNew && precisionNew != measurePrecision) {
37257
- measurePrecision = precisionNew;
37258
- isChanged = true;
38135
+ function initSketchpadCanvasByPageNr(pageNr) {
38136
+ $('#svgsketch-' + pageNr).svg({
38137
+ onLoad: function (svg) {
38138
+ sketchpad[pageNr] = svg;
38139
+ var surface = svg.rect(0, 0, '100%', '100%', { id: 'surface-' + pageNr, fill: 'transparent' });
38140
+
38141
+ createMeasureLineMarker(pageNr, getMeasureLineMarkerId(pageNr), getMeasureLineMarkerSettings());
38142
+ createMeasureLineMarker(pageNr, getMeasureCalibrationLineMarkerId(pageNr), getMeasureCalibrationLineMarkerSettings());
38143
+ createMeasureLineMarker(pageNr, getMeasureNoteLineMarkerId(pageNr), getMeasureNoteLineMarkerSettings('context-stroke'));
38144
+ createMeasureTxtFilterBg(pageNr);
38145
+
38146
+ $(surface).mousedown(function (eMousedown) {
38147
+ sketchpadCanvasMousedownHandler(eMousedown, pageNr);
38148
+ }).mousemove(function (eMousemove) {
38149
+ sketchpadCanvasMousemoveHandler(eMousemove, pageNr);
38150
+ }).mouseup(function (eMouseup) {
38151
+ sketchpadCanvasMouseupHandler(eMouseup, pageNr);
38152
+ });
38153
+
38154
+ resetSize(svg, '100%', '100%');
38155
+ }
38156
+ });
38157
+ }
38158
+
38159
+ function endDragMeasure(event, pageNr) {
38160
+ if (!drawStart) {
38161
+ return;
37259
38162
  }
37260
38163
 
37261
- if (isChanged) {
37262
- // TODO
37263
- doSaveMeasuresSettings();
37264
- // TODO
37265
- updateMeasuresData();
38164
+ removeMeasureOutlineItems();
38165
+
38166
+ if (measureLast && measureLast.pxVal > 0) {
38167
+ var shape = getMeasureType();
38168
+ drawMeasure(drawStart.X, drawStart.Y, event.clientX - offset.left, event.clientY - offset.top, pageNr, shape);
38169
+
38170
+ if (isMeasuresCalibrationActive()) {
38171
+ deactivateMeasuresCalibration();
38172
+ removeMeasuresCalibrationHint();
38173
+ }
38174
+ }
38175
+
38176
+ drawStart = null;
38177
+ event.preventDefault();
38178
+ }
38179
+
38180
+ function setDlgMeasureSettingsScale(scale) {
38181
+ let child = $('#measuresScaleList').children().toArray().find(child => $(child).attr('value') === scale);
38182
+ if (child) {
38183
+ $('#measuresScale').val($(child).text());
38184
+ $('#measuresScale').data('value', scale);
38185
+ }
38186
+ }
38187
+
38188
+ function setDlgMeasureSettingsUnits(units) {
38189
+ let child = $('#measuresUnitsList').children().toArray().find(child => $(child).attr('value') === units);
38190
+ if (child) {
38191
+ $('#measuresUnits').val($(child).text());
38192
+ $('#measuresUnits').data('value', units);
38193
+ }
38194
+ }
38195
+
38196
+ function setDlgMeasureSettingsPrecision(precision) {
38197
+ let child = $('#measuresPrecisionList').children().toArray().find(child => $(child).attr('value') === precision);
38198
+ if (child) {
38199
+ $('#measuresPrecision').val($(child).text());
38200
+ $('#measuresPrecision').data('value', precision);
37266
38201
  }
37267
- hideDlgOverlay();
37268
- hideDlgMeasureSettings();
37269
38202
  }
37270
38203
  $(document).ready(function() {
37271
38204
  context.openFile();