geokernel-electron 1.1.37 → 1.1.38

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.
Binary file
Binary file
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "geokernel-electron",
3
- "version": "1.1.37",
3
+ "version": "1.1.38",
4
4
  "description": "Electron bindings for the GeoKernel GIS SDK.",
5
5
  "main": "src/index.js",
6
6
  "type": "commonjs",
@@ -294,6 +294,8 @@ const SIGNATURES = Object.freeze({
294
294
  "GeoKernelWindow_GetSelectedLayerIndex": ["int", ["void_p"]],
295
295
  "GeoKernelWindow_IsVisible": ["bool", ["void_p"]],
296
296
  "GeoKernelWindow_SetCentralViewer": ["void_p", ["void_p"]],
297
+ "GeoKernelWindow_SetCentralTextPanel": ["bool", ["void_p", "wchar_p"]],
298
+ "GeoKernelWindow_SetCentralText": ["bool", ["void_p", "wchar_p"]],
297
299
  "GeoKernelWindow_SetControlValue": ["bool", ["void_p", "int", "double", "wchar_p"]],
298
300
  "GeoKernelWindow_SetLegendItemsJson": ["bool", ["void_p", "wchar_p"]],
299
301
  "GeoKernelWindow_SetLegendTitle": ["bool", ["void_p", "wchar_p"]],
package/src/types.js CHANGED
@@ -56,6 +56,14 @@ const ShapeType = Object.freeze({
56
56
  MULTI_POINT_Z: 18,
57
57
  });
58
58
 
59
+ const AttributeType = Object.freeze({
60
+ STRING: 0,
61
+ INTEGER: 1,
62
+ DOUBLE: 2,
63
+ BOOLEAN: 3,
64
+ DATE_TIME: 4,
65
+ });
66
+
59
67
  const SpatialIndexType = Object.freeze({
60
68
  LINEAR: 0,
61
69
  RTREE: 1,
@@ -135,6 +143,7 @@ function routeSummary(value) {
135
143
  }
136
144
 
137
145
  module.exports = {
146
+ AttributeType,
138
147
  ClassificationMethod,
139
148
  ColorRampMode,
140
149
  MeasureMode,
package/src/viewer.js CHANGED
@@ -246,6 +246,22 @@ class ViewerWindow {
246
246
  this.library.function("GeoKernelWindow_SetStatusText")(this.windowHandle, text ?? "");
247
247
  }
248
248
 
249
+ setCentralTextPanel(text = "") {
250
+ const ok = this.library.function("GeoKernelWindow_SetCentralTextPanel")(
251
+ this.windowHandle,
252
+ text,
253
+ );
254
+ if (!ok) throw new Error("GeoKernelWindow_SetCentralTextPanel failed.");
255
+ }
256
+
257
+ setCentralText(text) {
258
+ const ok = this.library.function("GeoKernelWindow_SetCentralText")(
259
+ this.windowHandle,
260
+ text,
261
+ );
262
+ if (!ok) throw new Error("GeoKernelWindow_SetCentralText failed.");
263
+ }
264
+
249
265
  addLogPanel(title = "Event log") {
250
266
  const ok = this.library.function("GeoKernelWindow_AddLogPanel")(this.windowHandle, title);
251
267
  if (!ok) throw new Error("GeoKernelWindow_AddLogPanel failed.");
@@ -400,16 +416,128 @@ class ViewerWindow {
400
416
  commitEditLayer(index) { return this._call("GeoKernelViewer_CommitEditLayer", Number(index)); }
401
417
  rollbackEditLayer(index) { return this._call("GeoKernelViewer_RollbackEditLayer", Number(index)); }
402
418
  isLayerEditing(index) { return this._call("GeoKernelViewer_IsLayerEditing", Number(index)); }
419
+ canEditLayer(index) { return this._call("GeoKernelViewer_CanEditLayer", Number(index)); }
403
420
  setActiveEditLayerIndex(index) { return this._call("GeoKernelViewer_SetActiveEditLayerIndex", Number(index)); }
404
- addPointToEditLayer(index, x, y) { return this._call("GeoKernelViewer_AddPointToEditLayer", Number(index), Number(x), Number(y)); }
405
- addPolylineToEditLayer(index, points) {
421
+ addLayerAttributeDefinition(index, name, type, length = 0, decimalCount = 0) {
422
+ return this._call(
423
+ "GeoKernelViewer_AddLayerAttributeDefinition",
424
+ Number(index),
425
+ name,
426
+ Number(type),
427
+ Number(length),
428
+ Number(decimalCount),
429
+ );
430
+ }
431
+ addPointToEditLayer(index, x, y, attributes) {
432
+ if (attributes === undefined) {
433
+ return this._call("GeoKernelViewer_AddPointToEditLayer", Number(index), Number(x), Number(y));
434
+ }
435
+ return this._call(
436
+ "GeoKernelViewer_AddPointToEditLayerWithAttributes",
437
+ Number(index),
438
+ Number(x),
439
+ Number(y),
440
+ jsonText(attributes),
441
+ );
442
+ }
443
+ addPolylineToEditLayer(index, points, attributes) {
406
444
  const xy = xyArray(points);
445
+ if (attributes !== undefined) {
446
+ return this._call(
447
+ "GeoKernelViewer_AddPolylineToEditLayerWithAttributes",
448
+ Number(index),
449
+ xy,
450
+ xy.length / 2,
451
+ jsonText(attributes),
452
+ );
453
+ }
407
454
  return this._call("GeoKernelViewer_AddPolylineToEditLayer", Number(index), xy, xy.length / 2);
408
455
  }
409
- addPolygonToEditLayer(index, points) {
456
+ addPolygonToEditLayer(index, points, attributes) {
410
457
  const xy = xyArray(points);
458
+ if (attributes !== undefined) {
459
+ return this._call(
460
+ "GeoKernelViewer_AddPolygonToEditLayerWithAttributes",
461
+ Number(index),
462
+ xy,
463
+ xy.length / 2,
464
+ jsonText(attributes),
465
+ );
466
+ }
411
467
  return this._call("GeoKernelViewer_AddPolygonToEditLayer", Number(index), xy, xy.length / 2);
412
468
  }
469
+ deleteShapeFromEditLayer(index, shapeId) {
470
+ return this._call("GeoKernelViewer_DeleteShapeFromEditLayer", Number(index), Number(shapeId));
471
+ }
472
+ deleteSelectedFeaturesFromEditLayer() {
473
+ return this._call("GeoKernelViewer_DeleteSelectedFeaturesFromEditLayer");
474
+ }
475
+ canMoveSelectedFeatures() {
476
+ return this._call("GeoKernelViewer_CanMoveSelectedFeatures");
477
+ }
478
+ canEditSelectedFeatures() {
479
+ return this._call("GeoKernelViewer_CanEditSelectedFeatures");
480
+ }
481
+ canEditSelectedVertices() {
482
+ return this._call("GeoKernelViewer_CanEditSelectedVertices");
483
+ }
484
+ deleteSelectedVertexFromEditLayer() {
485
+ return this._call("GeoKernelViewer_DeleteSelectedVertexFromEditLayer");
486
+ }
487
+ insertSelectedFeatureVertexInEditLayer(partIndex, insertIndex, worldX, worldY) {
488
+ return this._call(
489
+ "GeoKernelViewer_InsertSelectedFeatureVertexInEditLayer",
490
+ Number(partIndex),
491
+ Number(insertIndex),
492
+ Number(worldX),
493
+ Number(worldY),
494
+ );
495
+ }
496
+ deleteSelectedFeatureVertexInEditLayer(partIndex, vertexIndex) {
497
+ return this._call(
498
+ "GeoKernelViewer_DeleteSelectedFeatureVertexInEditLayer",
499
+ Number(partIndex),
500
+ Number(vertexIndex),
501
+ );
502
+ }
503
+ canUndoEditLayer(index) {
504
+ return this._call("GeoKernelViewer_CanUndoEditLayer", Number(index));
505
+ }
506
+ canRedoEditLayer(index) {
507
+ return this._call("GeoKernelViewer_CanRedoEditLayer", Number(index));
508
+ }
509
+ undoEditLayer(index) {
510
+ return this._call("GeoKernelViewer_UndoEditLayer", Number(index));
511
+ }
512
+ redoEditLayer(index) {
513
+ return this._call("GeoKernelViewer_RedoEditLayer", Number(index));
514
+ }
515
+ setShapeAttributesInEditLayer(index, shapeId, attributes) {
516
+ return this._call(
517
+ "GeoKernelViewer_SetShapeAttributesInEditLayerJson",
518
+ Number(index),
519
+ Number(shapeId),
520
+ jsonText(attributes),
521
+ );
522
+ }
523
+ editSnappingEnabled() {
524
+ return this._call("GeoKernelViewer_GetEditSnappingEnabled");
525
+ }
526
+ setEditSnappingEnabled(enabled) {
527
+ this._call("GeoKernelViewer_SetEditSnappingEnabled", Boolean(enabled));
528
+ }
529
+ editSnappingTolerancePixels() {
530
+ return this._call("GeoKernelViewer_GetEditSnappingTolerancePixels");
531
+ }
532
+ setEditSnappingTolerancePixels(tolerance) {
533
+ this._call("GeoKernelViewer_SetEditSnappingTolerancePixels", Number(tolerance));
534
+ }
535
+ isLayerDirty(index) {
536
+ return this._call("GeoKernelViewer_IsLayerDirty", Number(index));
537
+ }
538
+ moveSelectedFeaturesInEditLayer(deltaX, deltaY) {
539
+ return this._call("GeoKernelViewer_MoveSelectedFeaturesInEditLayer", Number(deltaX), Number(deltaY));
540
+ }
413
541
 
414
542
  addPointLayer(name, points, style) {
415
543
  const xy = xyArray(points);
@@ -623,6 +751,49 @@ class ViewerWindow {
623
751
  this._call("GeoKernelViewer_SetViewExtent", extentObject(value));
624
752
  }
625
753
 
754
+ setCoordinateSystemPreset(preset) {
755
+ return this._call("GeoKernelViewer_SetCoordinateSystemPreset", String(preset));
756
+ }
757
+
758
+ setLayerCoordinateSystemPreset(index, preset) {
759
+ return this._call(
760
+ "GeoKernelViewer_SetLayerCoordinateSystemPreset",
761
+ Number(index),
762
+ String(preset),
763
+ );
764
+ }
765
+
766
+ transformPoint(sourceEpsg, targetEpsg, x, y) {
767
+ const transformedX = [0];
768
+ const transformedY = [0];
769
+ const ok = this.library.function("GeoKernelViewer_TransformPoint")(
770
+ Number(sourceEpsg),
771
+ Number(targetEpsg),
772
+ Number(x),
773
+ Number(y),
774
+ transformedX,
775
+ transformedY,
776
+ );
777
+ return ok ? point(transformedX[0], transformedY[0]) : null;
778
+ }
779
+
780
+ coordinateSystemFromAuthority(authority, code) {
781
+ return this._readStaticJson(
782
+ "GeoKernelViewer_CoordinateSystemFromAuthorityJson",
783
+ {},
784
+ String(authority),
785
+ Number(code),
786
+ );
787
+ }
788
+
789
+ coordinateSystemFromEpsg(code) {
790
+ return this._readStaticJson(
791
+ "GeoKernelViewer_CoordinateSystemFromEpsgJson",
792
+ {},
793
+ Number(code),
794
+ );
795
+ }
796
+
626
797
  worldToScreen(x, y) {
627
798
  const screenX = [0];
628
799
  const screenY = [0];
@@ -697,6 +868,68 @@ class ViewerWindow {
697
868
  return this._readJson("GeoKernelViewer_GetLayerFeatureAttributesJson", {}, Number(index), Number(rowIndex));
698
869
  }
699
870
 
871
+ hitTestTopFeatureAt(screenX, screenY, pixelTolerance = 8) {
872
+ return this._readJson(
873
+ "GeoKernelViewer_HitTestTopFeatureAtJson",
874
+ null,
875
+ Number(screenX),
876
+ Number(screenY),
877
+ Number(pixelTolerance),
878
+ );
879
+ }
880
+
881
+ hitTestFeaturesAt(screenX, screenY, pixelTolerance = 8) {
882
+ return this._readJson(
883
+ "GeoKernelViewer_HitTestFeaturesAtJson",
884
+ [],
885
+ Number(screenX),
886
+ Number(screenY),
887
+ Number(pixelTolerance),
888
+ );
889
+ }
890
+
891
+ hitTestFeatures(worldX, worldY, worldTolerance) {
892
+ return this._readJson(
893
+ "GeoKernelViewer_HitTestFeaturesJson",
894
+ [],
895
+ Number(worldX),
896
+ Number(worldY),
897
+ Number(worldTolerance),
898
+ );
899
+ }
900
+
901
+ hitTestFeaturesInScreenRect(left, top, right, bottom) {
902
+ return this._readJson(
903
+ "GeoKernelViewer_HitTestFeaturesInScreenRectJson",
904
+ [],
905
+ Number(left),
906
+ Number(top),
907
+ Number(right),
908
+ Number(bottom),
909
+ );
910
+ }
911
+
912
+ selectFeaturesInScreenRect(left, top, right, bottom, selectionMode = 0) {
913
+ const x = Math.min(Number(left), Number(right));
914
+ const y = Math.min(Number(top), Number(bottom));
915
+ const width = Math.abs(Number(right) - Number(left)) + 1;
916
+ const height = Math.abs(Number(bottom) - Number(top)) + 1;
917
+ return this._call("GeoKernelViewer_SelectFeaturesInScreenRect", x, y, width, height, Number(selectionMode));
918
+ }
919
+
920
+ selectFeatureHit(hit, worldTolerance) {
921
+ if (!hit?.worldPoint) return false;
922
+ return this._call(
923
+ "GeoKernelViewer_SelectFeatureHit",
924
+ Number(hit.worldPoint.x),
925
+ Number(hit.worldPoint.y),
926
+ Number(worldTolerance),
927
+ Number(hit.layerIndex),
928
+ Number(hit.shapeId),
929
+ Number(hit.featureId),
930
+ );
931
+ }
932
+
700
933
  layerProjectedExtent(index) {
701
934
  const value = {};
702
935
  const ok = this._call("GeoKernelViewer_GetLayerProjectedExtent", Number(index), value);
@@ -748,10 +981,30 @@ class ViewerWindow {
748
981
  this._call("GeoKernelViewer_ClearSelectedFeatures");
749
982
  }
750
983
 
984
+ selectTopFeatureAt(screenX, screenY, pixelTolerance = 8) {
985
+ return this._call("GeoKernelViewer_SelectTopFeatureAt", Number(screenX), Number(screenY), Number(pixelTolerance));
986
+ }
987
+
988
+ addTopFeatureToSelectionAt(screenX, screenY, pixelTolerance = 8) {
989
+ return this._call("GeoKernelViewer_AddTopFeatureToSelectionAt", Number(screenX), Number(screenY), Number(pixelTolerance));
990
+ }
991
+
992
+ toggleTopFeatureSelectionAt(screenX, screenY, pixelTolerance = 8) {
993
+ return this._call("GeoKernelViewer_ToggleTopFeatureSelectionAt", Number(screenX), Number(screenY), Number(pixelTolerance));
994
+ }
995
+
996
+ selectedFeatures() {
997
+ return this._readJson("GeoKernelViewer_GetSelectedFeaturesJson", []);
998
+ }
999
+
751
1000
  selectedFeatureCount() {
752
1001
  return this._call("GeoKernelViewer_GetSelectedFeatureCount");
753
1002
  }
754
1003
 
1004
+ zoomToSelectedFeatures() {
1005
+ return this._call("GeoKernelViewer_ZoomToSelectedFeatures");
1006
+ }
1007
+
755
1008
  clearLayers() {
756
1009
  this._call("GeoKernelViewer_ClearLayers");
757
1010
  }
@@ -844,6 +1097,21 @@ class ViewerWindow {
844
1097
  return parseJson(readWideJson(this.library.function(name), this.viewerHandle, ...args), fallback);
845
1098
  }
846
1099
 
1100
+ _readStaticJson(name, fallback, ...args) {
1101
+ const fn = this.library.function(name);
1102
+ let bufferLength = 4096;
1103
+ for (let attempt = 0; attempt < 4; attempt += 1) {
1104
+ const out = ["\0".repeat(bufferLength)];
1105
+ const length = fn(...args, out, bufferLength);
1106
+ if (length < 0) throw new Error(`${name} failed with result ${length}.`);
1107
+ const nullIndex = out[0].indexOf("\0");
1108
+ const text = nullIndex >= 0 ? out[0].slice(0, nullIndex) : out[0];
1109
+ if (length < bufferLength - 1) return parseJson(text, fallback);
1110
+ bufferLength = Math.max(bufferLength * 2, length + 1);
1111
+ }
1112
+ throw new Error(`${name} output exceeded the supported buffer size.`);
1113
+ }
1114
+
847
1115
  _requireViewer() {
848
1116
  if (!this.viewerHandle) {
849
1117
  throw new Error("GeoKernel viewer is closed.");