@ohif/app 3.13.0-beta.64 → 3.13.0-beta.66
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.
- package/dist/{2851.bundle.f4f60fab803d915d29c9.js → 2851.bundle.8757dd07775645121b52.js} +5 -7
- package/dist/{7537.bundle.1726a7f7a4c378296085.js → 7537.bundle.889ba5f2707418c6fd88.js} +1 -1
- package/dist/{9039.bundle.7afa93b103c3b26d4855.js → 9039.bundle.f72736f47fedeff521e2.js} +123 -47
- package/dist/{9205.bundle.315c3b56464a7590235a.js → 9205.bundle.ed7bce8436a7a431955e.js} +122 -47
- package/dist/{9567.bundle.be350438bed4e656f278.js → 9567.bundle.ff782480a4c66e306027.js} +438 -85
- package/dist/{app.bundle.db872e626c172c6ad084.js → app.bundle.7dbea386d6c9c10848ea.js} +3 -3
- package/dist/{compute.bundle.a41ec0ba4f935200ab93.js → compute.bundle.b7c2ea55f1a69f4a736b.js} +1 -1
- package/dist/index.html +1 -1
- package/dist/{polySeg.bundle.be57af5b834dd833a418.js → polySeg.bundle.e1f6f05d81ea1352bef3.js} +1 -1
- package/dist/sw.js +1 -1
- package/package.json +21 -21
- /package/dist/{1459.bundle.075f1c281d008449f184.js → 1459.bundle.97fb6947a59096bd69ba.js} +0 -0
- /package/dist/{1933.bundle.8ab15ac46f3904309eee.js → 1933.bundle.d265a398d717d9a65980.js} +0 -0
- /package/dist/{2018.bundle.45bbc23e30f022f0f051.js → 2018.bundle.75d45a73f6d29f4502eb.js} +0 -0
- /package/dist/{213.bundle.a5eb36962ddcf90bcf1f.js → 213.bundle.ec5f15baa925dfbfa439.js} +0 -0
- /package/dist/{2424.bundle.aebb08690e66ee2d4cb6.js → 2424.bundle.b79e5c986efb65d01a14.js} +0 -0
- /package/dist/{3138.bundle.3bbb1dcd1744680d059b.js → 3138.bundle.45d9fe9f3ec46eabf6e6.js} +0 -0
- /package/dist/{3461.bundle.1f379ffaaa0fa18a557d.js → 3461.bundle.2524724cb7e8b1a20592.js} +0 -0
- /package/dist/{4507.bundle.5ce023184cf2bcaa1670.js → 4507.bundle.8ffd9859aca01712144c.js} +0 -0
- /package/dist/{4819.bundle.758017f50435d201d4b2.js → 4819.bundle.276d17abd4bb0504612a.js} +0 -0
- /package/dist/{5015.bundle.8c007df25792b1e1f7aa.js → 5015.bundle.23373b09d96bd5fccf83.js} +0 -0
- /package/dist/{5028.bundle.03f40e29fdff23f6849a.js → 5028.bundle.00c40ff6fea856c6f090.js} +0 -0
- /package/dist/{5457.bundle.b44b51c1cd66d564910a.js → 5457.bundle.1bebe4c433dd5945aa2b.js} +0 -0
- /package/dist/{5485.bundle.25750f0b942d84d64902.js → 5485.bundle.adc11bc68e91358ea7bf.js} +0 -0
- /package/dist/{6027.bundle.ec904d1b23d3802ff878.js → 6027.bundle.01b5aca8656c7120845c.js} +0 -0
- /package/dist/{7166.bundle.3dbcf50dcc98c5a2dc58.js → 7166.bundle.12ada8e535973df9c8fd.js} +0 -0
- /package/dist/{7639.bundle.80cfc93c666ebaf624e1.js → 7639.bundle.b3db519e0e73c1efc492.js} +0 -0
- /package/dist/{8305.bundle.fb3d726f0b3cc90f1e0a.js → 8305.bundle.76beb137050442689584.js} +0 -0
- /package/dist/{8499.bundle.5456c7de8e58ee651477.js → 8499.bundle.00368cb353ec9096ba82.js} +0 -0
- /package/dist/{85.bundle.cbf41aeda04786647753.js → 85.bundle.bb782db282876c8b886d.js} +0 -0
- /package/dist/{8558.bundle.deca7697a26442ff37ec.js → 8558.bundle.20a44fd8d2aa42371d80.js} +0 -0
- /package/dist/{8583.bundle.a3c87b570c9206a60c5b.js → 8583.bundle.4d01961aa80e4ca39ea9.js} +0 -0
- /package/dist/{9927.bundle.0c91b35dba333bce3a49.js → 9927.bundle.c2acd65fc6ae5ee07148.js} +0 -0
|
@@ -2571,6 +2571,35 @@ function getVOIMultipliers(viewport, volumeId, options) {
|
|
|
2571
2571
|
|
|
2572
2572
|
|
|
2573
2573
|
|
|
2574
|
+
/***/ },
|
|
2575
|
+
|
|
2576
|
+
/***/ 51970
|
|
2577
|
+
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
2578
|
+
|
|
2579
|
+
"use strict";
|
|
2580
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
2581
|
+
/* harmony export */ Js: () => (/* binding */ beginOwnedDrag),
|
|
2582
|
+
/* harmony export */ Xt: () => (/* binding */ endOwnedDrag),
|
|
2583
|
+
/* harmony export */ lq: () => (/* binding */ isDragOwnedBy)
|
|
2584
|
+
/* harmony export */ });
|
|
2585
|
+
const dragOwnerByViewportId = new Map();
|
|
2586
|
+
function beginOwnedDrag(viewportId, owner) {
|
|
2587
|
+
if (dragOwnerByViewportId.has(viewportId)) {
|
|
2588
|
+
return false;
|
|
2589
|
+
}
|
|
2590
|
+
dragOwnerByViewportId.set(viewportId, owner);
|
|
2591
|
+
return true;
|
|
2592
|
+
}
|
|
2593
|
+
function endOwnedDrag(viewportId, owner) {
|
|
2594
|
+
if (dragOwnerByViewportId.get(viewportId) === owner) {
|
|
2595
|
+
dragOwnerByViewportId.delete(viewportId);
|
|
2596
|
+
}
|
|
2597
|
+
}
|
|
2598
|
+
function isDragOwnedBy(viewportId, owner) {
|
|
2599
|
+
return dragOwnerByViewportId.get(viewportId) === owner;
|
|
2600
|
+
}
|
|
2601
|
+
|
|
2602
|
+
|
|
2574
2603
|
/***/ },
|
|
2575
2604
|
|
|
2576
2605
|
/***/ 38776
|
|
@@ -5674,22 +5703,26 @@ var vtkCellPicker$1 = {
|
|
|
5674
5703
|
|
|
5675
5704
|
// EXTERNAL MODULE: ../../../node_modules/@kitware/vtk.js/Rendering/Core/Actor.js
|
|
5676
5705
|
var Actor = __webpack_require__(44404);
|
|
5706
|
+
// EXTERNAL MODULE: ../../../node_modules/@kitware/vtk.js/Common/Core/CellArray.js
|
|
5707
|
+
var CellArray = __webpack_require__(32461);
|
|
5708
|
+
// EXTERNAL MODULE: ../../../node_modules/@kitware/vtk.js/Rendering/Core/Mapper.js + 1 modules
|
|
5709
|
+
var Mapper = __webpack_require__(81418);
|
|
5710
|
+
// EXTERNAL MODULE: ../../../node_modules/@kitware/vtk.js/Common/Core/Points.js
|
|
5711
|
+
var Points = __webpack_require__(74973);
|
|
5712
|
+
// EXTERNAL MODULE: ../../../node_modules/@kitware/vtk.js/Common/DataModel/PolyData.js + 7 modules
|
|
5713
|
+
var PolyData = __webpack_require__(27480);
|
|
5714
|
+
// EXTERNAL MODULE: ../../../node_modules/@kitware/vtk.js/Rendering/Core/Renderer.js + 2 modules
|
|
5715
|
+
var Renderer = __webpack_require__(55524);
|
|
5677
5716
|
// EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/index.js + 1 modules
|
|
5678
5717
|
var dist_esm = __webpack_require__(15327);
|
|
5679
5718
|
// EXTERNAL MODULE: ../../../node_modules/@kitware/vtk.js/macros.js
|
|
5680
5719
|
var macros = __webpack_require__(28241);
|
|
5681
|
-
// EXTERNAL MODULE: ../../../node_modules/@kitware/vtk.js/Rendering/Core/Mapper.js + 1 modules
|
|
5682
|
-
var Mapper = __webpack_require__(81418);
|
|
5683
5720
|
// EXTERNAL MODULE: ../../../node_modules/@kitware/vtk.js/Common/Core/DataArray.js
|
|
5684
5721
|
var DataArray = __webpack_require__(445);
|
|
5685
5722
|
// EXTERNAL MODULE: ../../../node_modules/@kitware/vtk.js/Rendering/Core/Texture.js
|
|
5686
5723
|
var Texture = __webpack_require__(41090);
|
|
5687
5724
|
// EXTERNAL MODULE: ../../../node_modules/@kitware/vtk.js/Common/Core/ImageHelper.js
|
|
5688
5725
|
var ImageHelper = __webpack_require__(74821);
|
|
5689
|
-
// EXTERNAL MODULE: ../../../node_modules/@kitware/vtk.js/Common/Core/CellArray.js
|
|
5690
|
-
var CellArray = __webpack_require__(32461);
|
|
5691
|
-
// EXTERNAL MODULE: ../../../node_modules/@kitware/vtk.js/Common/DataModel/PolyData.js + 7 modules
|
|
5692
|
-
var PolyData = __webpack_require__(27480);
|
|
5693
5726
|
;// ../../../node_modules/@cornerstonejs/tools/dist/esm/utilities/vtkjs/RhombicuboctahedronSource/index.js
|
|
5694
5727
|
|
|
5695
5728
|
|
|
@@ -5708,6 +5741,7 @@ const EDGE_FACES = [
|
|
|
5708
5741
|
11, 4, 5, 6, 22, 21, 4, 6, 7, 15, 14, 4, 7, 4, 17, 18, 4, 8, 11, 17, 16, 4, 9,
|
|
5709
5742
|
20, 21, 10, 4, 13, 23, 22, 14, 4, 12, 19, 18, 15,
|
|
5710
5743
|
];
|
|
5744
|
+
const FACE_HALF_SIZE = 0.792;
|
|
5711
5745
|
function vtkRhombicuboctahedronSource(publicAPI, model) {
|
|
5712
5746
|
model.classHierarchy.push('vtkRhombicuboctahedronSource');
|
|
5713
5747
|
publicAPI.requestData = (inData, outData) => {
|
|
@@ -5723,32 +5757,31 @@ function vtkRhombicuboctahedronSource(publicAPI, model) {
|
|
|
5723
5757
|
}
|
|
5724
5758
|
}
|
|
5725
5759
|
const phi = 1.4;
|
|
5726
|
-
const faceSize = 0.88;
|
|
5727
5760
|
const vertices = [];
|
|
5728
|
-
vertices.push(-
|
|
5729
|
-
vertices.push(
|
|
5730
|
-
vertices.push(
|
|
5731
|
-
vertices.push(-
|
|
5732
|
-
vertices.push(-
|
|
5733
|
-
vertices.push(
|
|
5734
|
-
vertices.push(
|
|
5735
|
-
vertices.push(-
|
|
5736
|
-
vertices.push(-
|
|
5737
|
-
vertices.push(
|
|
5738
|
-
vertices.push(
|
|
5739
|
-
vertices.push(-
|
|
5740
|
-
vertices.push(-
|
|
5741
|
-
vertices.push(
|
|
5742
|
-
vertices.push(
|
|
5743
|
-
vertices.push(-
|
|
5744
|
-
vertices.push(-phi, -
|
|
5745
|
-
vertices.push(-phi, -
|
|
5746
|
-
vertices.push(-phi,
|
|
5747
|
-
vertices.push(-phi,
|
|
5748
|
-
vertices.push(phi, -
|
|
5749
|
-
vertices.push(phi, -
|
|
5750
|
-
vertices.push(phi,
|
|
5751
|
-
vertices.push(phi,
|
|
5761
|
+
vertices.push(-FACE_HALF_SIZE, -FACE_HALF_SIZE, -phi);
|
|
5762
|
+
vertices.push(FACE_HALF_SIZE, -FACE_HALF_SIZE, -phi);
|
|
5763
|
+
vertices.push(FACE_HALF_SIZE, FACE_HALF_SIZE, -phi);
|
|
5764
|
+
vertices.push(-FACE_HALF_SIZE, FACE_HALF_SIZE, -phi);
|
|
5765
|
+
vertices.push(-FACE_HALF_SIZE, -FACE_HALF_SIZE, phi);
|
|
5766
|
+
vertices.push(FACE_HALF_SIZE, -FACE_HALF_SIZE, phi);
|
|
5767
|
+
vertices.push(FACE_HALF_SIZE, FACE_HALF_SIZE, phi);
|
|
5768
|
+
vertices.push(-FACE_HALF_SIZE, FACE_HALF_SIZE, phi);
|
|
5769
|
+
vertices.push(-FACE_HALF_SIZE, -phi, -FACE_HALF_SIZE);
|
|
5770
|
+
vertices.push(FACE_HALF_SIZE, -phi, -FACE_HALF_SIZE);
|
|
5771
|
+
vertices.push(FACE_HALF_SIZE, -phi, FACE_HALF_SIZE);
|
|
5772
|
+
vertices.push(-FACE_HALF_SIZE, -phi, FACE_HALF_SIZE);
|
|
5773
|
+
vertices.push(-FACE_HALF_SIZE, phi, -FACE_HALF_SIZE);
|
|
5774
|
+
vertices.push(FACE_HALF_SIZE, phi, -FACE_HALF_SIZE);
|
|
5775
|
+
vertices.push(FACE_HALF_SIZE, phi, FACE_HALF_SIZE);
|
|
5776
|
+
vertices.push(-FACE_HALF_SIZE, phi, FACE_HALF_SIZE);
|
|
5777
|
+
vertices.push(-phi, -FACE_HALF_SIZE, -FACE_HALF_SIZE);
|
|
5778
|
+
vertices.push(-phi, -FACE_HALF_SIZE, FACE_HALF_SIZE);
|
|
5779
|
+
vertices.push(-phi, FACE_HALF_SIZE, FACE_HALF_SIZE);
|
|
5780
|
+
vertices.push(-phi, FACE_HALF_SIZE, -FACE_HALF_SIZE);
|
|
5781
|
+
vertices.push(phi, -FACE_HALF_SIZE, -FACE_HALF_SIZE);
|
|
5782
|
+
vertices.push(phi, -FACE_HALF_SIZE, FACE_HALF_SIZE);
|
|
5783
|
+
vertices.push(phi, FACE_HALF_SIZE, FACE_HALF_SIZE);
|
|
5784
|
+
vertices.push(phi, FACE_HALF_SIZE, -FACE_HALF_SIZE);
|
|
5752
5785
|
let textureCoords = null;
|
|
5753
5786
|
if (model.generate3DTextureCoordinates) {
|
|
5754
5787
|
textureCoords = new Float64Array(24 * 3);
|
|
@@ -6081,7 +6114,7 @@ function vtkAnnotatedRhombicuboctahedronActor(publicAPI, model) {
|
|
|
6081
6114
|
}
|
|
6082
6115
|
}
|
|
6083
6116
|
if (model.showEdgeFaces !== false) {
|
|
6084
|
-
const edgeColor = [200, 200, 200];
|
|
6117
|
+
const edgeColor = model.edgeColor ?? [200, 200, 200];
|
|
6085
6118
|
const edgeData = createEdgeFacesMesh(sourceScale, edgeColor);
|
|
6086
6119
|
if (edgeData) {
|
|
6087
6120
|
const edgeFacesActor = Actor/* default.newInstance */.Ay.newInstance();
|
|
@@ -6102,7 +6135,7 @@ function vtkAnnotatedRhombicuboctahedronActor(publicAPI, model) {
|
|
|
6102
6135
|
}
|
|
6103
6136
|
}
|
|
6104
6137
|
if (model.showCornerFaces !== false) {
|
|
6105
|
-
const cornerColor = [150, 150, 150];
|
|
6138
|
+
const cornerColor = model.cornerColor ?? [150, 150, 150];
|
|
6106
6139
|
const cornerData = createCornerFacesMesh(sourceScale, cornerColor);
|
|
6107
6140
|
if (cornerData) {
|
|
6108
6141
|
const cornerFacesActor = Actor/* default.newInstance */.Ay.newInstance();
|
|
@@ -6229,17 +6262,30 @@ function AnnotatedRhombicuboctahedronActor_extend(publicAPI, model, initialValue
|
|
|
6229
6262
|
const AnnotatedRhombicuboctahedronActor_newInstance = macros/* default.newInstance */.Ay.newInstance(AnnotatedRhombicuboctahedronActor_extend, 'vtkAnnotatedRhombicuboctahedronActor');
|
|
6230
6263
|
/* harmony default export */ const AnnotatedRhombicuboctahedronActor = ({ newInstance: AnnotatedRhombicuboctahedronActor_newInstance, extend: AnnotatedRhombicuboctahedronActor_extend });
|
|
6231
6264
|
|
|
6265
|
+
// EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/tools/dist/esm/utilities/interactionDragCoordinator.js
|
|
6266
|
+
var interactionDragCoordinator = __webpack_require__(51970);
|
|
6232
6267
|
;// ../../../node_modules/@cornerstonejs/tools/dist/esm/utilities/vtkjs/OrientationControllerWidget/index.js
|
|
6233
6268
|
|
|
6234
6269
|
|
|
6235
6270
|
|
|
6236
6271
|
|
|
6272
|
+
|
|
6273
|
+
|
|
6274
|
+
|
|
6275
|
+
|
|
6276
|
+
|
|
6277
|
+
|
|
6237
6278
|
class vtkOrientationControllerWidget {
|
|
6238
6279
|
constructor() {
|
|
6239
6280
|
this.actors = new Map();
|
|
6240
6281
|
this.pickers = new Map();
|
|
6282
|
+
this.overlayRenderers = new Map();
|
|
6283
|
+
this.renderWindows = new Map();
|
|
6241
6284
|
this.highlightedFace = null;
|
|
6242
6285
|
this.mouseHandlers = new Map();
|
|
6286
|
+
this._highlightColor = [255, 255, 255];
|
|
6287
|
+
this._restingAmbient = 1.0;
|
|
6288
|
+
this._hoverAmbient = 1.0;
|
|
6243
6289
|
}
|
|
6244
6290
|
createActors(config) {
|
|
6245
6291
|
const rgbToHex = (rgb) => {
|
|
@@ -6253,7 +6299,10 @@ class vtkOrientationControllerWidget {
|
|
|
6253
6299
|
const rgbToHexColor = (rgb) => {
|
|
6254
6300
|
return `rgb(${rgb[0]}, ${rgb[1]}, ${rgb[2]})`;
|
|
6255
6301
|
};
|
|
6256
|
-
const actorFactory = AnnotatedRhombicuboctahedronActor.newInstance(
|
|
6302
|
+
const actorFactory = AnnotatedRhombicuboctahedronActor.newInstance({
|
|
6303
|
+
edgeColor: config.edgeColor ?? [200, 200, 200],
|
|
6304
|
+
cornerColor: config.cornerColor ?? [150, 150, 150],
|
|
6305
|
+
});
|
|
6257
6306
|
const defaultStyle = {
|
|
6258
6307
|
fontStyle: 'bold',
|
|
6259
6308
|
fontFamily: 'Arial',
|
|
@@ -6303,9 +6352,13 @@ class vtkOrientationControllerWidget {
|
|
|
6303
6352
|
actorFactory.setShowEdgeFaces(config.showEdgeFaces);
|
|
6304
6353
|
actorFactory.setShowCornerFaces(config.showCornerFaces);
|
|
6305
6354
|
const actors = actorFactory.getActors();
|
|
6355
|
+
this._highlightColor = config.highlightColor ?? [255, 255, 255];
|
|
6356
|
+
this._restingAmbient = config.restingAmbient ?? 1.0;
|
|
6357
|
+
this._hoverAmbient = config.hoverAmbient ?? 1.0;
|
|
6306
6358
|
actors.forEach((actor) => {
|
|
6307
6359
|
const property = actor.getProperty();
|
|
6308
6360
|
property.setOpacity(config.opacity);
|
|
6361
|
+
property.setAmbient(this._restingAmbient);
|
|
6309
6362
|
actor.setVisibility(true);
|
|
6310
6363
|
});
|
|
6311
6364
|
return actors;
|
|
@@ -6315,19 +6368,48 @@ class vtkOrientationControllerWidget {
|
|
|
6315
6368
|
if (existingActors) {
|
|
6316
6369
|
this.removeActorsFromViewport(viewportId, viewport);
|
|
6317
6370
|
}
|
|
6318
|
-
|
|
6319
|
-
|
|
6320
|
-
viewport.
|
|
6371
|
+
const renderWindow = viewport
|
|
6372
|
+
.getRenderingEngine()
|
|
6373
|
+
.getOffscreenMultiRenderWindow(viewport.id)
|
|
6374
|
+
.getRenderWindow();
|
|
6375
|
+
const mainRenderer = viewport
|
|
6376
|
+
.getRenderingEngine()
|
|
6377
|
+
?.getRenderer(viewportId) ?? viewport.getRenderer();
|
|
6378
|
+
const vtkMainRenderer = mainRenderer;
|
|
6379
|
+
const overlayRenderer = Renderer/* default.newInstance */.Ay.newInstance();
|
|
6380
|
+
overlayRenderer.setLayer(1);
|
|
6381
|
+
overlayRenderer.setInteractive(false);
|
|
6382
|
+
overlayRenderer.setPreserveColorBuffer(true);
|
|
6383
|
+
overlayRenderer.setActiveCamera(vtkMainRenderer.getActiveCamera());
|
|
6384
|
+
const vp = vtkMainRenderer.getViewport();
|
|
6385
|
+
overlayRenderer.setViewport(...vp);
|
|
6386
|
+
if (renderWindow.getNumberOfLayers() < 2) {
|
|
6387
|
+
renderWindow.setNumberOfLayers(2);
|
|
6388
|
+
}
|
|
6389
|
+
renderWindow.addRenderer(overlayRenderer);
|
|
6390
|
+
actors.forEach((actor) => {
|
|
6391
|
+
overlayRenderer.addActor(actor);
|
|
6321
6392
|
});
|
|
6322
6393
|
this.actors.set(viewportId, actors);
|
|
6394
|
+
this.overlayRenderers.set(viewportId, overlayRenderer);
|
|
6395
|
+
this.renderWindows.set(viewportId, renderWindow);
|
|
6323
6396
|
}
|
|
6324
|
-
removeActorsFromViewport(viewportId,
|
|
6397
|
+
removeActorsFromViewport(viewportId, _viewport) {
|
|
6325
6398
|
const actors = this.actors.get(viewportId);
|
|
6326
|
-
|
|
6327
|
-
|
|
6328
|
-
|
|
6329
|
-
|
|
6399
|
+
const overlayRenderer = this.overlayRenderers.get(viewportId);
|
|
6400
|
+
const renderWindow = this.renderWindows.get(viewportId);
|
|
6401
|
+
if (actors && overlayRenderer) {
|
|
6402
|
+
actors.forEach((actor) => {
|
|
6403
|
+
overlayRenderer.removeActor(actor);
|
|
6404
|
+
});
|
|
6405
|
+
if (renderWindow) {
|
|
6406
|
+
renderWindow.removeRenderer(overlayRenderer);
|
|
6407
|
+
}
|
|
6408
|
+
overlayRenderer.delete();
|
|
6330
6409
|
}
|
|
6410
|
+
this.actors.delete(viewportId);
|
|
6411
|
+
this.overlayRenderers.delete(viewportId);
|
|
6412
|
+
this.renderWindows.delete(viewportId);
|
|
6331
6413
|
}
|
|
6332
6414
|
setupPicker(viewportId, actors) {
|
|
6333
6415
|
const picker = vtkCellPicker$1.newInstance({ opacityThreshold: 0.0001 });
|
|
@@ -6345,10 +6427,11 @@ class vtkOrientationControllerWidget {
|
|
|
6345
6427
|
if (!picker) {
|
|
6346
6428
|
return null;
|
|
6347
6429
|
}
|
|
6348
|
-
const
|
|
6349
|
-
|
|
6350
|
-
|
|
6351
|
-
|
|
6430
|
+
const renderer = this.overlayRenderers.get(viewportId) ??
|
|
6431
|
+
viewport
|
|
6432
|
+
.getRenderingEngine()
|
|
6433
|
+
?.getRenderer(viewportId) ??
|
|
6434
|
+
viewport.getRenderer();
|
|
6352
6435
|
if (!renderer) {
|
|
6353
6436
|
return null;
|
|
6354
6437
|
}
|
|
@@ -6383,7 +6466,7 @@ class vtkOrientationControllerWidget {
|
|
|
6383
6466
|
}
|
|
6384
6467
|
return null;
|
|
6385
6468
|
}
|
|
6386
|
-
calculateMarkerPosition(viewport, position) {
|
|
6469
|
+
calculateMarkerPosition(viewport, position, screenSizePixels) {
|
|
6387
6470
|
const canvas = viewport.canvas;
|
|
6388
6471
|
if (!canvas) {
|
|
6389
6472
|
return null;
|
|
@@ -6391,25 +6474,30 @@ class vtkOrientationControllerWidget {
|
|
|
6391
6474
|
const devicePixelRatio = window.devicePixelRatio || 1;
|
|
6392
6475
|
const canvasWidth = canvas.clientWidth || canvas.width / devicePixelRatio;
|
|
6393
6476
|
const canvasHeight = canvas.clientHeight || canvas.height / devicePixelRatio;
|
|
6394
|
-
const
|
|
6477
|
+
const marginRatio = viewport.type === dist_esm.Enums.ViewportType.VOLUME_3D ? 1.3 : 1.1;
|
|
6478
|
+
const marginPxRaw = marginRatio * screenSizePixels;
|
|
6479
|
+
const halfPx = screenSizePixels * 0.5;
|
|
6480
|
+
const maxMarginX = Math.max(0, (canvasWidth - screenSizePixels) / 2);
|
|
6481
|
+
const maxMarginY = Math.max(0, (canvasHeight - screenSizePixels) / 2);
|
|
6482
|
+
const marginPx = Math.min(marginPxRaw, maxMarginX, maxMarginY);
|
|
6395
6483
|
let canvasX;
|
|
6396
6484
|
let canvasY;
|
|
6397
6485
|
switch (position) {
|
|
6398
6486
|
case 'top-left':
|
|
6399
|
-
canvasX =
|
|
6400
|
-
canvasY =
|
|
6487
|
+
canvasX = marginPx + halfPx;
|
|
6488
|
+
canvasY = marginPx + halfPx;
|
|
6401
6489
|
break;
|
|
6402
6490
|
case 'top-right':
|
|
6403
|
-
canvasX = canvasWidth -
|
|
6404
|
-
canvasY =
|
|
6491
|
+
canvasX = canvasWidth - marginPx - halfPx;
|
|
6492
|
+
canvasY = marginPx + halfPx;
|
|
6405
6493
|
break;
|
|
6406
6494
|
case 'bottom-left':
|
|
6407
|
-
canvasX =
|
|
6408
|
-
canvasY = canvasHeight -
|
|
6495
|
+
canvasX = marginPx + halfPx;
|
|
6496
|
+
canvasY = canvasHeight - marginPx - halfPx;
|
|
6409
6497
|
break;
|
|
6410
6498
|
default:
|
|
6411
|
-
canvasX = canvasWidth -
|
|
6412
|
-
canvasY = canvasHeight -
|
|
6499
|
+
canvasX = canvasWidth - marginPx - halfPx;
|
|
6500
|
+
canvasY = canvasHeight - marginPx - halfPx;
|
|
6413
6501
|
}
|
|
6414
6502
|
const canvasPos = [canvasX, canvasY];
|
|
6415
6503
|
const worldPos = viewport.canvasToWorld(canvasPos);
|
|
@@ -6439,7 +6527,7 @@ class vtkOrientationControllerWidget {
|
|
|
6439
6527
|
const markerSize = screenSizePixels * worldUnitsPerPixel;
|
|
6440
6528
|
actors.forEach((actor) => {
|
|
6441
6529
|
actor.setScale(markerSize, markerSize, markerSize);
|
|
6442
|
-
const worldPos = this.calculateMarkerPosition(viewport, config.position);
|
|
6530
|
+
const worldPos = this.calculateMarkerPosition(viewport, config.position, screenSizePixels);
|
|
6443
6531
|
if (!worldPos) {
|
|
6444
6532
|
console.warn('OrientationControllerWidget: Could not get world position');
|
|
6445
6533
|
return;
|
|
@@ -6458,6 +6546,172 @@ class vtkOrientationControllerWidget {
|
|
|
6458
6546
|
}
|
|
6459
6547
|
this.clearHighlight();
|
|
6460
6548
|
if (isMainFace) {
|
|
6549
|
+
const textureCollection = actor.getTextures?.();
|
|
6550
|
+
const textureCandidate = Array.isArray(textureCollection)
|
|
6551
|
+
? textureCollection[0]
|
|
6552
|
+
: textureCollection?.getItem?.(0);
|
|
6553
|
+
const texture = textureCandidate;
|
|
6554
|
+
const imageData = texture?.getInputData?.();
|
|
6555
|
+
const scalars = imageData?.getPointData().getScalars();
|
|
6556
|
+
const pixels = scalars?.getData();
|
|
6557
|
+
const dims = imageData?.getDimensions();
|
|
6558
|
+
if (!imageData ||
|
|
6559
|
+
!scalars ||
|
|
6560
|
+
!pixels ||
|
|
6561
|
+
!dims ||
|
|
6562
|
+
cellId < 0 ||
|
|
6563
|
+
cellId > 5) {
|
|
6564
|
+
const mapper = actor.getMapper();
|
|
6565
|
+
const polyData = mapper.getInputData();
|
|
6566
|
+
if (!polyData?.getCellPoints) {
|
|
6567
|
+
return;
|
|
6568
|
+
}
|
|
6569
|
+
const { cellPointIds } = polyData.getCellPoints(cellId);
|
|
6570
|
+
if (!cellPointIds || cellPointIds.length < 3) {
|
|
6571
|
+
return;
|
|
6572
|
+
}
|
|
6573
|
+
const src = polyData.getPoints().getData();
|
|
6574
|
+
const coords = [];
|
|
6575
|
+
Array.from(cellPointIds).forEach((pid) => {
|
|
6576
|
+
const o = pid * 3;
|
|
6577
|
+
coords.push(src[o], src[o + 1], src[o + 2]);
|
|
6578
|
+
});
|
|
6579
|
+
const points = Points/* default.newInstance */.Ay.newInstance();
|
|
6580
|
+
points.setData(new Float32Array(coords), 3);
|
|
6581
|
+
const polys = CellArray/* default.newInstance */.Ay.newInstance({
|
|
6582
|
+
values: new Uint32Array([
|
|
6583
|
+
cellPointIds.length,
|
|
6584
|
+
...Array.from(cellPointIds, (_, i) => i),
|
|
6585
|
+
]),
|
|
6586
|
+
});
|
|
6587
|
+
const poly = PolyData/* default.newInstance */.Ay.newInstance();
|
|
6588
|
+
poly.setPoints(points);
|
|
6589
|
+
poly.setPolys(polys);
|
|
6590
|
+
const faceMapper = Mapper/* default.newInstance */.Ay.newInstance();
|
|
6591
|
+
faceMapper.setInputData(poly);
|
|
6592
|
+
const faceActor = Actor/* default.newInstance */.Ay.newInstance();
|
|
6593
|
+
faceActor.setMapper(faceMapper);
|
|
6594
|
+
const [sx, sy, sz] = actor.getScale();
|
|
6595
|
+
const [px, py, pz] = actor.getPosition();
|
|
6596
|
+
const [ox, oy, oz] = actor.getOrientation();
|
|
6597
|
+
faceActor.setScale(sx, sy, sz);
|
|
6598
|
+
faceActor.setPosition(px, py, pz);
|
|
6599
|
+
faceActor.setOrientation(ox, oy, oz);
|
|
6600
|
+
faceActor.setPickable(false);
|
|
6601
|
+
const p = faceActor.getProperty();
|
|
6602
|
+
p.setLighting(false);
|
|
6603
|
+
p.setAmbient(1);
|
|
6604
|
+
p.setDiffuse(0);
|
|
6605
|
+
p.setColor(1, 1, 1);
|
|
6606
|
+
p.setOpacity(0.58);
|
|
6607
|
+
this.overlayRenderers.get(viewport.id)?.addActor(faceActor);
|
|
6608
|
+
this.highlightedFace = {
|
|
6609
|
+
actor,
|
|
6610
|
+
cellId,
|
|
6611
|
+
originalColor: [0, 0, 0, 0],
|
|
6612
|
+
viewport,
|
|
6613
|
+
isMainFace: true,
|
|
6614
|
+
mainFaceHighlightActor: faceActor,
|
|
6615
|
+
};
|
|
6616
|
+
viewport.render();
|
|
6617
|
+
return;
|
|
6618
|
+
}
|
|
6619
|
+
const [imageWidth, imageHeight] = dims;
|
|
6620
|
+
const tileWidth = Math.floor(imageWidth / 3);
|
|
6621
|
+
const tileHeight = Math.floor(imageHeight / 2);
|
|
6622
|
+
const tileCol = cellId % 3;
|
|
6623
|
+
const tileRow = Math.floor(cellId / 3);
|
|
6624
|
+
const x0 = tileCol * tileWidth;
|
|
6625
|
+
const y0 = tileRow * tileHeight;
|
|
6626
|
+
const tileBackup = new Uint8Array(tileWidth * tileHeight * 4);
|
|
6627
|
+
let b = 0;
|
|
6628
|
+
for (let y = 0; y < tileHeight; y++) {
|
|
6629
|
+
for (let x = 0; x < tileWidth; x++) {
|
|
6630
|
+
const srcIndex = ((y0 + y) * imageWidth + (x0 + x)) * 4;
|
|
6631
|
+
tileBackup[b++] = pixels[srcIndex];
|
|
6632
|
+
tileBackup[b++] = pixels[srcIndex + 1];
|
|
6633
|
+
tileBackup[b++] = pixels[srcIndex + 2];
|
|
6634
|
+
tileBackup[b++] = pixels[srcIndex + 3];
|
|
6635
|
+
}
|
|
6636
|
+
}
|
|
6637
|
+
const bgSampleIndices = [
|
|
6638
|
+
((y0 + 8) * imageWidth + (x0 + 8)) * 4,
|
|
6639
|
+
((y0 + 8) * imageWidth + (x0 + tileWidth - 9)) * 4,
|
|
6640
|
+
((y0 + tileHeight - 9) * imageWidth + (x0 + 8)) * 4,
|
|
6641
|
+
((y0 + tileHeight - 9) * imageWidth + (x0 + tileWidth - 9)) * 4,
|
|
6642
|
+
];
|
|
6643
|
+
const bgColor = [0, 0, 0];
|
|
6644
|
+
bgSampleIndices.forEach((idx) => {
|
|
6645
|
+
bgColor[0] += pixels[idx];
|
|
6646
|
+
bgColor[1] += pixels[idx + 1];
|
|
6647
|
+
bgColor[2] += pixels[idx + 2];
|
|
6648
|
+
});
|
|
6649
|
+
bgColor[0] /= bgSampleIndices.length;
|
|
6650
|
+
bgColor[1] /= bgSampleIndices.length;
|
|
6651
|
+
bgColor[2] /= bgSampleIndices.length;
|
|
6652
|
+
const glyphThreshold = 42;
|
|
6653
|
+
const faceBrighten = 72;
|
|
6654
|
+
const isGlyphPixel = (x, y) => {
|
|
6655
|
+
if (x < 0 || x >= tileWidth || y < 0 || y >= tileHeight) {
|
|
6656
|
+
return false;
|
|
6657
|
+
}
|
|
6658
|
+
const idx = ((y0 + y) * imageWidth + (x0 + x)) * 4;
|
|
6659
|
+
const dr = pixels[idx] - bgColor[0];
|
|
6660
|
+
const dg = pixels[idx + 1] - bgColor[1];
|
|
6661
|
+
const db = pixels[idx + 2] - bgColor[2];
|
|
6662
|
+
return Math.sqrt(dr * dr + dg * dg + db * db) >= glyphThreshold;
|
|
6663
|
+
};
|
|
6664
|
+
const borderWidth = Math.max(4, Math.floor(tileWidth * 0.035));
|
|
6665
|
+
for (let y = 0; y < tileHeight; y++) {
|
|
6666
|
+
for (let x = 0; x < tileWidth; x++) {
|
|
6667
|
+
const onBorder = x < borderWidth ||
|
|
6668
|
+
x >= tileWidth - borderWidth ||
|
|
6669
|
+
y < borderWidth ||
|
|
6670
|
+
y >= tileHeight - borderWidth;
|
|
6671
|
+
if (onBorder || isGlyphPixel(x, y)) {
|
|
6672
|
+
continue;
|
|
6673
|
+
}
|
|
6674
|
+
const idx = ((y0 + y) * imageWidth + (x0 + x)) * 4;
|
|
6675
|
+
pixels[idx] = Math.min(255, pixels[idx] + faceBrighten);
|
|
6676
|
+
pixels[idx + 1] = Math.min(255, pixels[idx + 1] + faceBrighten);
|
|
6677
|
+
pixels[idx + 2] = Math.min(255, pixels[idx + 2] + faceBrighten);
|
|
6678
|
+
}
|
|
6679
|
+
}
|
|
6680
|
+
for (let y = 0; y < tileHeight; y++) {
|
|
6681
|
+
for (let x = 0; x < tileWidth; x++) {
|
|
6682
|
+
const onBorder = x < borderWidth ||
|
|
6683
|
+
x >= tileWidth - borderWidth ||
|
|
6684
|
+
y < borderWidth ||
|
|
6685
|
+
y >= tileHeight - borderWidth;
|
|
6686
|
+
if (!onBorder) {
|
|
6687
|
+
continue;
|
|
6688
|
+
}
|
|
6689
|
+
const idx = ((y0 + y) * imageWidth + (x0 + x)) * 4;
|
|
6690
|
+
pixels[idx] = 0;
|
|
6691
|
+
pixels[idx + 1] = 0;
|
|
6692
|
+
pixels[idx + 2] = 0;
|
|
6693
|
+
}
|
|
6694
|
+
}
|
|
6695
|
+
scalars.modified();
|
|
6696
|
+
imageData.modified();
|
|
6697
|
+
texture.modified?.();
|
|
6698
|
+
actor.modified?.();
|
|
6699
|
+
this.highlightedFace = {
|
|
6700
|
+
actor,
|
|
6701
|
+
cellId,
|
|
6702
|
+
originalColor: [0, 0, 0, 0],
|
|
6703
|
+
viewport,
|
|
6704
|
+
isMainFace: true,
|
|
6705
|
+
mainFaceTextureData: tileBackup,
|
|
6706
|
+
mainFaceTile: {
|
|
6707
|
+
x0,
|
|
6708
|
+
y0,
|
|
6709
|
+
width: tileWidth,
|
|
6710
|
+
height: tileHeight,
|
|
6711
|
+
imageWidth,
|
|
6712
|
+
},
|
|
6713
|
+
};
|
|
6714
|
+
viewport.render();
|
|
6461
6715
|
return;
|
|
6462
6716
|
}
|
|
6463
6717
|
const mapper = actor.getMapper();
|
|
@@ -6485,9 +6739,10 @@ class vtkOrientationControllerWidget {
|
|
|
6485
6739
|
viewport,
|
|
6486
6740
|
isMainFace: false,
|
|
6487
6741
|
};
|
|
6488
|
-
|
|
6489
|
-
colorArray[offset
|
|
6490
|
-
colorArray[offset +
|
|
6742
|
+
const hc = this._highlightColor;
|
|
6743
|
+
colorArray[offset] = hc[0];
|
|
6744
|
+
colorArray[offset + 1] = hc[1];
|
|
6745
|
+
colorArray[offset + 2] = hc[2];
|
|
6491
6746
|
colorArray[offset + 3] = 255;
|
|
6492
6747
|
colors.modified();
|
|
6493
6748
|
inputData.modified();
|
|
@@ -6498,9 +6753,35 @@ class vtkOrientationControllerWidget {
|
|
|
6498
6753
|
return;
|
|
6499
6754
|
}
|
|
6500
6755
|
const { actor, cellId, originalColor, viewport, isMainFace } = this.highlightedFace;
|
|
6501
|
-
if (isMainFace
|
|
6502
|
-
const
|
|
6503
|
-
|
|
6756
|
+
if (isMainFace) {
|
|
6757
|
+
const backup = this.highlightedFace.mainFaceTextureData;
|
|
6758
|
+
const tile = this.highlightedFace.mainFaceTile;
|
|
6759
|
+
const textures = actor.getTextures?.();
|
|
6760
|
+
const texture = textures?.[0];
|
|
6761
|
+
const imageData = texture?.getInputData?.();
|
|
6762
|
+
const scalars = imageData?.getPointData().getScalars();
|
|
6763
|
+
const pixels = scalars?.getData();
|
|
6764
|
+
if (backup && tile && scalars && imageData && pixels) {
|
|
6765
|
+
let b = 0;
|
|
6766
|
+
for (let y = 0; y < tile.height; y++) {
|
|
6767
|
+
for (let x = 0; x < tile.width; x++) {
|
|
6768
|
+
const dstIndex = ((tile.y0 + y) * tile.imageWidth + (tile.x0 + x)) * 4;
|
|
6769
|
+
pixels[dstIndex] = backup[b++];
|
|
6770
|
+
pixels[dstIndex + 1] = backup[b++];
|
|
6771
|
+
pixels[dstIndex + 2] = backup[b++];
|
|
6772
|
+
pixels[dstIndex + 3] = backup[b++];
|
|
6773
|
+
}
|
|
6774
|
+
}
|
|
6775
|
+
scalars.modified();
|
|
6776
|
+
imageData.modified();
|
|
6777
|
+
texture.modified?.();
|
|
6778
|
+
actor.modified?.();
|
|
6779
|
+
}
|
|
6780
|
+
else if (this.highlightedFace.mainFaceHighlightActor) {
|
|
6781
|
+
const overlayRenderer = this.overlayRenderers.get(viewport.id);
|
|
6782
|
+
overlayRenderer?.removeActor(this.highlightedFace.mainFaceHighlightActor);
|
|
6783
|
+
this.highlightedFace.mainFaceHighlightActor.delete();
|
|
6784
|
+
}
|
|
6504
6785
|
viewport.render();
|
|
6505
6786
|
this.highlightedFace = null;
|
|
6506
6787
|
return;
|
|
@@ -6530,21 +6811,46 @@ class vtkOrientationControllerWidget {
|
|
|
6530
6811
|
}
|
|
6531
6812
|
setupMouseHandlers(viewportId, element, viewport, actors, callbacks) {
|
|
6532
6813
|
let isMouseDown = false;
|
|
6814
|
+
let isCubeHovered = false;
|
|
6815
|
+
const setAmbient = (full) => {
|
|
6816
|
+
actors.forEach((actor) => {
|
|
6817
|
+
const property = actor.getProperty();
|
|
6818
|
+
property.setAmbient(full ? this._hoverAmbient : this._restingAmbient);
|
|
6819
|
+
});
|
|
6820
|
+
viewport.render();
|
|
6821
|
+
};
|
|
6822
|
+
let didDrag = false;
|
|
6823
|
+
let pendingPickResult = null;
|
|
6824
|
+
let mouseDownCanvas = null;
|
|
6825
|
+
const clickTolerancePx = 3;
|
|
6533
6826
|
const hoverHandler = (evt) => {
|
|
6534
6827
|
if (isMouseDown) {
|
|
6828
|
+
if (mouseDownCanvas) {
|
|
6829
|
+
const dx = evt.clientX - mouseDownCanvas.x;
|
|
6830
|
+
const dy = evt.clientY - mouseDownCanvas.y;
|
|
6831
|
+
if (dx * dx + dy * dy > clickTolerancePx * clickTolerancePx) {
|
|
6832
|
+
didDrag = true;
|
|
6833
|
+
}
|
|
6834
|
+
}
|
|
6535
6835
|
return;
|
|
6536
6836
|
}
|
|
6537
6837
|
const pickResult = this.pickAtPosition(evt, viewportId, viewport, element, actors);
|
|
6538
6838
|
if (pickResult) {
|
|
6539
|
-
|
|
6540
|
-
|
|
6541
|
-
|
|
6839
|
+
if (!isCubeHovered) {
|
|
6840
|
+
isCubeHovered = true;
|
|
6841
|
+
setAmbient(true);
|
|
6542
6842
|
}
|
|
6843
|
+
const { pickedActor, cellId, actorIndex } = pickResult;
|
|
6844
|
+
this.highlightFace(pickedActor, cellId, viewport, actorIndex === 0);
|
|
6543
6845
|
if (callbacks.onFaceHover) {
|
|
6544
6846
|
callbacks.onFaceHover(pickResult);
|
|
6545
6847
|
}
|
|
6546
6848
|
}
|
|
6547
6849
|
else {
|
|
6850
|
+
if (isCubeHovered) {
|
|
6851
|
+
isCubeHovered = false;
|
|
6852
|
+
setAmbient(false);
|
|
6853
|
+
}
|
|
6548
6854
|
this.clearHighlight();
|
|
6549
6855
|
if (callbacks.onFaceHover) {
|
|
6550
6856
|
callbacks.onFaceHover(null);
|
|
@@ -6560,22 +6866,37 @@ class vtkOrientationControllerWidget {
|
|
|
6560
6866
|
return;
|
|
6561
6867
|
}
|
|
6562
6868
|
isMouseDown = true;
|
|
6563
|
-
|
|
6564
|
-
|
|
6565
|
-
|
|
6566
|
-
|
|
6567
|
-
else if (pickResult.actorIndex === 2) {
|
|
6568
|
-
globalCellId = pickResult.cellId + 18;
|
|
6569
|
-
}
|
|
6570
|
-
callbacks.onFacePicked({
|
|
6571
|
-
...pickResult,
|
|
6572
|
-
cellId: globalCellId,
|
|
6573
|
-
});
|
|
6574
|
-
evt.preventDefault();
|
|
6575
|
-
evt.stopPropagation();
|
|
6869
|
+
didDrag = false;
|
|
6870
|
+
pendingPickResult = pickResult;
|
|
6871
|
+
mouseDownCanvas = { x: evt.clientX, y: evt.clientY };
|
|
6872
|
+
(0,interactionDragCoordinator/* beginOwnedDrag */.Js)(viewportId, 'orientation-controller');
|
|
6576
6873
|
};
|
|
6577
|
-
const mouseUpHandler = () => {
|
|
6874
|
+
const mouseUpHandler = (evt) => {
|
|
6875
|
+
if (isMouseDown && !didDrag && pendingPickResult) {
|
|
6876
|
+
let globalCellId = pendingPickResult.cellId;
|
|
6877
|
+
if (pendingPickResult.actorIndex === 1) {
|
|
6878
|
+
globalCellId = pendingPickResult.cellId + 6;
|
|
6879
|
+
}
|
|
6880
|
+
else if (pendingPickResult.actorIndex === 2) {
|
|
6881
|
+
globalCellId = pendingPickResult.cellId + 18;
|
|
6882
|
+
}
|
|
6883
|
+
callbacks.onFacePicked({
|
|
6884
|
+
...pendingPickResult,
|
|
6885
|
+
cellId: globalCellId,
|
|
6886
|
+
});
|
|
6887
|
+
evt.preventDefault();
|
|
6888
|
+
evt.stopImmediatePropagation();
|
|
6889
|
+
evt.stopPropagation();
|
|
6890
|
+
}
|
|
6578
6891
|
isMouseDown = false;
|
|
6892
|
+
if (isCubeHovered) {
|
|
6893
|
+
isCubeHovered = false;
|
|
6894
|
+
setAmbient(false);
|
|
6895
|
+
}
|
|
6896
|
+
didDrag = false;
|
|
6897
|
+
pendingPickResult = null;
|
|
6898
|
+
mouseDownCanvas = null;
|
|
6899
|
+
(0,interactionDragCoordinator/* endOwnedDrag */.Xt)(viewportId, 'orientation-controller');
|
|
6579
6900
|
this.clearHighlight();
|
|
6580
6901
|
};
|
|
6581
6902
|
const dblclickHandler = (evt) => {
|
|
@@ -6585,17 +6906,18 @@ class vtkOrientationControllerWidget {
|
|
|
6585
6906
|
evt.stopImmediatePropagation();
|
|
6586
6907
|
}
|
|
6587
6908
|
};
|
|
6588
|
-
element.addEventListener('mousemove', hoverHandler);
|
|
6589
|
-
element.addEventListener('mousedown', clickHandler);
|
|
6909
|
+
element.addEventListener('mousemove', hoverHandler, true);
|
|
6910
|
+
element.addEventListener('mousedown', clickHandler, true);
|
|
6590
6911
|
element.addEventListener('mouseup', mouseUpHandler);
|
|
6591
6912
|
element.addEventListener('mouseleave', mouseUpHandler);
|
|
6592
6913
|
element.addEventListener('dblclick', dblclickHandler, true);
|
|
6593
6914
|
const cleanup = () => {
|
|
6594
|
-
element.removeEventListener('mousemove', hoverHandler);
|
|
6595
|
-
element.removeEventListener('mousedown', clickHandler);
|
|
6915
|
+
element.removeEventListener('mousemove', hoverHandler, true);
|
|
6916
|
+
element.removeEventListener('mousedown', clickHandler, true);
|
|
6596
6917
|
element.removeEventListener('mouseup', mouseUpHandler);
|
|
6597
6918
|
element.removeEventListener('mouseleave', mouseUpHandler);
|
|
6598
6919
|
element.removeEventListener('dblclick', dblclickHandler, true);
|
|
6920
|
+
(0,interactionDragCoordinator/* endOwnedDrag */.Xt)(viewportId, 'orientation-controller');
|
|
6599
6921
|
};
|
|
6600
6922
|
this.mouseHandlers.set(viewportId, { cleanup });
|
|
6601
6923
|
return { cleanup };
|
|
@@ -6603,7 +6925,19 @@ class vtkOrientationControllerWidget {
|
|
|
6603
6925
|
getActors(viewportId) {
|
|
6604
6926
|
return this.actors.get(viewportId);
|
|
6605
6927
|
}
|
|
6606
|
-
syncOverlayViewport(
|
|
6928
|
+
syncOverlayViewport(viewportId, viewport) {
|
|
6929
|
+
const overlayRenderer = this.overlayRenderers.get(viewportId);
|
|
6930
|
+
if (!overlayRenderer) {
|
|
6931
|
+
return;
|
|
6932
|
+
}
|
|
6933
|
+
const mainRenderer = viewport
|
|
6934
|
+
.getRenderingEngine()
|
|
6935
|
+
?.getRenderer(viewportId) ?? viewport.getRenderer();
|
|
6936
|
+
if (!mainRenderer) {
|
|
6937
|
+
return;
|
|
6938
|
+
}
|
|
6939
|
+
const mainVp = mainRenderer.getViewport();
|
|
6940
|
+
overlayRenderer.setViewport(...mainVp);
|
|
6607
6941
|
}
|
|
6608
6942
|
getOrientationForFace(cellId) {
|
|
6609
6943
|
const orientations = new Map();
|
|
@@ -6704,12 +7038,31 @@ class vtkOrientationControllerWidget {
|
|
|
6704
7038
|
handler.cleanup();
|
|
6705
7039
|
this.mouseHandlers.delete(viewportId);
|
|
6706
7040
|
}
|
|
7041
|
+
const overlayRenderer = this.overlayRenderers.get(viewportId);
|
|
7042
|
+
const renderWindow = this.renderWindows.get(viewportId);
|
|
7043
|
+
if (overlayRenderer) {
|
|
7044
|
+
if (renderWindow) {
|
|
7045
|
+
renderWindow.removeRenderer(overlayRenderer);
|
|
7046
|
+
}
|
|
7047
|
+
overlayRenderer.delete();
|
|
7048
|
+
}
|
|
6707
7049
|
this.actors.delete(viewportId);
|
|
6708
7050
|
this.pickers.delete(viewportId);
|
|
7051
|
+
this.overlayRenderers.delete(viewportId);
|
|
7052
|
+
this.renderWindows.delete(viewportId);
|
|
6709
7053
|
}
|
|
6710
7054
|
else {
|
|
6711
7055
|
this.mouseHandlers.forEach((handler) => handler.cleanup());
|
|
6712
7056
|
this.mouseHandlers.clear();
|
|
7057
|
+
this.overlayRenderers.forEach((overlayRenderer, vpId) => {
|
|
7058
|
+
const renderWindow = this.renderWindows.get(vpId);
|
|
7059
|
+
if (renderWindow) {
|
|
7060
|
+
renderWindow.removeRenderer(overlayRenderer);
|
|
7061
|
+
}
|
|
7062
|
+
overlayRenderer.delete();
|
|
7063
|
+
});
|
|
7064
|
+
this.overlayRenderers.clear();
|
|
7065
|
+
this.renderWindows.clear();
|
|
6713
7066
|
this.actors.clear();
|
|
6714
7067
|
this.pickers.clear();
|
|
6715
7068
|
}
|