src/contextMenus/ModelsContextMenu.js
import {ContextMenu} from "@xeokit/xeokit-sdk/dist/xeokit-sdk.es.js";
/**
* @private
* @param {*} cfg Configs
* @param {Boolean} [cfg.enableEditModels=false] Set true to show Add/Edit/Delete options in the menu.
*/
class ModelsContextMenu extends ContextMenu {
constructor(cfg = {}) {
const enableEditModels = (!!cfg.enableEditModels);
const items = [
[
{
getTitle: (context) => {
return context.viewer.localeService.translate("modelsContextMenu.loadModel") || "Load";
},
getEnabled: (context) => {
return (!context.bimViewer.isModelLoaded(context.modelId));
},
doAction: (context) => {
context.bimViewer.loadModel(context.modelId);
}
},
{
getTitle: (context) => {
return context.viewer.localeService.translate("modelsContextMenu.unloadModel") || "Unload";
},
getEnabled: (context) => {
return context.bimViewer.isModelLoaded(context.modelId);
},
doAction: (context) => {
context.bimViewer.unloadModel(context.modelId);
}
}
]
];
if (enableEditModels) {
items.push([
{
getTitle: (context) => {
return context.viewer.localeService.translate("modelsContextMenu.editModel") || "Edit";
},
getEnabled: (context) => {
return true;
},
doAction: (context) => {
context.bimViewer.editModel(context.modelId);
}
},
{
getTitle: (context) => {
return context.viewer.localeService.translate("modelsContextMenu.deleteModel") || "Delete";
},
getEnabled: (context) => {
return true;
},
doAction: (context) => {
context.bimViewer.deleteModel(context.modelId);
}
}
]);
}
items.push([
{
getTitle: (context) => {
return context.viewer.localeService.translate("modelsContextMenu.loadAllModels") || "Load All";
},
getEnabled: (context) => {
const bimViewer = context.bimViewer;
const modelIds = bimViewer.getModelIds();
const loadedModelIds = bimViewer.getLoadedModelIds();
return (loadedModelIds.length < modelIds.length);
},
doAction: (context) => {
context.bimViewer.loadAllModels();
}
},
{
getTitle: (context) => {
return context.viewer.localeService.translate("modelsContextMenu.unloadAllModels") || "Unload All";
},
getEnabled: (context) => {
const loadedModelIds = context.bimViewer.getLoadedModelIds();
return (loadedModelIds.length > 0);
},
doAction: (context) => {
context.bimViewer.unloadAllModels();
}
}
]);
items.push([
{
getTitle: (context) => {
return context.viewer.localeService.translate("modelsContextMenu.clearSlices") || "Clear Slices";
},
getEnabled: (context) => {
return (context.bimViewer.getNumSections() > 0);
},
doAction: (context) => {
context.bimViewer.clearSections();
}
}
]);
super({
hideOnAction: cfg.hideOnAction,
context: cfg.context,
items: items
});
}
}
export {ModelsContextMenu};