perf: ⚡️ Throttle UI refresh of synced WL value in vtk port (#1070)
This commit is contained in:
parent
1a539d04c2
commit
9d08e81aa5
@ -48,7 +48,8 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/runtime": "^7.5.5",
|
"@babel/runtime": "^7.5.5",
|
||||||
"react-vtkjs-viewport": "^0.3.1"
|
"react-vtkjs-viewport": "^0.3.1",
|
||||||
|
"lodash.throttle": "^4.1.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@ohif/core": "^1.4.0",
|
"@ohif/core": "^1.4.0",
|
||||||
|
|||||||
@ -213,6 +213,10 @@ class OHIFVTKViewport extends Component {
|
|||||||
|
|
||||||
volumeMapper.setSampleDistance(sampleDistance);
|
volumeMapper.setSampleDistance(sampleDistance);
|
||||||
|
|
||||||
|
// Be generous to surpress warnings, as the logging really hurts performance.
|
||||||
|
// TODO: maybe we should auto adjust samples to 1000.
|
||||||
|
volumeMapper.setMaximumSamplesPerRay(4000);
|
||||||
|
|
||||||
volumeCache[displaySetInstanceUid] = volumeActor;
|
volumeCache[displaySetInstanceUid] = volumeActor;
|
||||||
|
|
||||||
return volumeActor;
|
return volumeActor;
|
||||||
|
|||||||
@ -9,6 +9,7 @@ import {
|
|||||||
import setMPRLayout from './utils/setMPRLayout.js';
|
import setMPRLayout from './utils/setMPRLayout.js';
|
||||||
import setViewportToVTK from './utils/setViewportToVTK.js';
|
import setViewportToVTK from './utils/setViewportToVTK.js';
|
||||||
import Constants from 'vtk.js/Sources/Rendering/Core/VolumeMapper/Constants.js';
|
import Constants from 'vtk.js/Sources/Rendering/Core/VolumeMapper/Constants.js';
|
||||||
|
import throttle from 'lodash.throttle';
|
||||||
|
|
||||||
const { BlendMode } = Constants;
|
const { BlendMode } = Constants;
|
||||||
|
|
||||||
@ -102,15 +103,23 @@ const actions = {
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
enableLevelTool: () => {
|
enableLevelTool: () => {
|
||||||
|
function updateVOI(apis, windowWidth, windowCenter) {
|
||||||
|
apis.forEach(api => {
|
||||||
|
api.updateVOI(windowWidth, windowCenter);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const throttledUpdateVOIs = throttle(updateVOI, 16, { trailing: true }); // ~ 60 fps
|
||||||
|
|
||||||
const callbacks = {
|
const callbacks = {
|
||||||
setOnLevelsChanged: ({ windowCenter, windowWidth }) => {
|
setOnLevelsChanged: ({ windowCenter, windowWidth }) => {
|
||||||
apis.forEach(api => {
|
apis.forEach(api => {
|
||||||
const renderWindow = api.genericRenderWindow.getRenderWindow();
|
const renderWindow = api.genericRenderWindow.getRenderWindow();
|
||||||
|
|
||||||
renderWindow.render();
|
renderWindow.render();
|
||||||
|
|
||||||
api.updateVOI(windowWidth, windowCenter);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
throttledUpdateVOIs(apis, windowWidth, windowCenter);
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user