Hello @Adrian_G. ,
tested your project on HoloLens 2 device but so far it was working OK.

when clicking on the checkbox it displayed the 3dImage widget and the display was OK.
Whe it not work in your project - there is possibly something based on other reasons and is not a problem of the 3DImage or file format
I think the following points could be checked there:
- please, check if your device OS is updated and if the Vuforia View is also updated - to last possible version
- is there a enough memory on your device- possibly there are a lot of app installed or lot of data is recorded. So, you can check in the MS HoloLens dev portal. and delete the data e.g.

- in the picture above you can see the Vuforia View log file. You can start a new session and test the issue so that it is sometimes reproducible . Then you can take the VuforiaViewLog (the last 3 versions) and check there is there is an error pointing that is display issue. Respectively you can share there the log files
- You can use another pictures and check if they are displayed in your project. So to be user that issue on your system is relevant with the pictures
you can create a new project having only one space target and 3DWidget and check if in this minimal project the issue still occurs.
Regarding to the project implementation I have some remarks so that we make it more efficient:
- I see that for each component what you want to highlight you use and extra 3d Model - the whole top assembly . I think this not efficient regarding to memory usage. Better is instead to use only one Top assembly model and to define for specific component extra modelItem widget which could be highlighted by setting of colors or shader properties (for HoloLens sharers will work but requires extra efforts to get the GLSL to work , so far I know).
- To be sure that the javascript will update you have to add an asynchronous call – example :
$scope.belt=function()
{
$scope.view.wdg['model-1']['src'] = 'app/resources/Uploaded/Belt_Low.pvz';
$scope.view.wdg['3DImage-1']['src'] = 'app/resources/Uploaded/Slide21.JPG';
$scope.$applyAsync();
};
or better to use the setWidgetProp api:
$scope.belt=function()
{
$scope.setWidgetProp('model-1', 'src', 'app/resources/Uploaded/Belt_Low.pvz')
$scope.setWidgetProp('3DImage-1', 'src', 'app/resources/Uploaded/Slide21.JPG');
$scope.$applyAsync();
};
- I did also not see an unset function for the case that the check box is unselected. This could be helpful to see any difference when a checkbox is unselected.