src/contextMenus/CanvasContextMenu.js
import {math, ContextMenu} from "@xeokit/xeokit-sdk/dist/xeokit-sdk.es.js";
/**
* @private
*/
class CanvasContextMenu extends ContextMenu {
constructor(cfg = {}) {
super({
hideOnAction: cfg.hideOnAction,
context: cfg.context,
items: [
[
{
getTitle: (context) => {
return context.viewer.localeService.translate("canvasContextMenu.viewFitAll") || "View Fit All";
},
doAction: (context) => {
const viewer = context.viewer;
const scene = viewer.scene;
const sceneAABB = scene.getAABB(scene.visibleObjectIds);
viewer.cameraFlight.flyTo({
aabb: sceneAABB,
duration: 0.5
});
viewer.cameraControl.pivotPos = math.getAABB3Center(sceneAABB);
}
},
{
getTitle: (context) => {
return context.viewer.localeService.translate("canvasContextMenu.viewFitSelection") || "View Fit Selected";
},
getEnabled: (context) => {
return (context.viewer.scene.numSelectedObjects > 0);
},
doAction: (context) => {
const viewer = context.viewer;
const scene = viewer.scene;
const sceneAABB = scene.getAABB(scene.selectedObjectIds);
viewer.cameraFlight.flyTo({
aabb: sceneAABB,
duration: 0.5
});
viewer.cameraControl.pivotPos = math.getAABB3Center(sceneAABB);
}
}
],
[
{
getTitle: (context) => {
return context.viewer.localeService.translate("canvasContextMenu.hideAll") || "Hide All";
},
getEnabled: (context) => {
return (context.viewer.scene.numVisibleObjects > 0);
},
doAction: (context) => {
context.viewer.scene.setObjectsVisible(context.viewer.scene.visibleObjectIds, false);
}
},
{
getTitle: (context) => {
return context.viewer.localeService.translate("canvasContextMenu.showAll") || "Show All";
},
getEnabled: (context) => {
const scene = context.viewer.scene;
return ((scene.numVisibleObjects < scene.numObjects) || (context.viewer.scene.numXRayedObjects > 0));
},
doAction: (context) => {
const scene = context.viewer.scene;
scene.setObjectsVisible(scene.objectIds, true);
scene.setObjectsXRayed(scene.xrayedObjectIds, false);
}
}
],
[
{
getTitle: (context) => {
return context.viewer.localeService.translate("canvasContextMenu.xRayAll") || "X-Ray All";
},
getEnabled: (context) => {
const scene = context.viewer.scene;
return (scene.numXRayedObjects < scene.numObjects);
},
doAction: (context) => {
const scene = context.viewer.scene;
scene.setObjectsVisible(scene.objectIds, true);
scene.setObjectsXRayed(scene.objectIds, true);
if (!context.bimViewer.getConfig("xrayPickable")) {
scene.setObjectsPickable(scene.objectIds, false);
}
}
},
{
getTitle: (context) => {
return context.viewer.localeService.translate("canvasContextMenu.xRayNone") || "X-Ray None";
},
getEnabled: (context) => {
return (context.viewer.scene.numXRayedObjects > 0);
},
doAction: (context) => {
const xrayedObjectIds = context.viewer.scene.xrayedObjectIds;
context.viewer.scene.setObjectsPickable(xrayedObjectIds, true);
context.viewer.scene.setObjectsXRayed(xrayedObjectIds, false);
}
}
],
[
{
getTitle: (context) => {
return context.viewer.localeService.translate("canvasContextMenu.selectNone") || "Select None";
},
getEnabled: (context) => {
return (context.viewer.scene.numSelectedObjects > 0);
},
doAction: (context) => {
context.viewer.scene.setObjectsSelected(context.viewer.scene.selectedObjectIds, false);
}
}
],
[
{
getTitle: (context) => {
return context.viewer.localeService.translate("canvasContextMenu.resetView") || "Reset View";
},
doAction: (context) => {
context.bimViewer.resetView();
}
}
],
[
{
getTitle: (context) => {
return context.viewer.localeService.translate("canvasContextMenu.clearSlices") || "Clear Slices";
},
getEnabled: (context) => {
return (context.bimViewer.getNumSections() > 0);
},
doAction: (context) => {
context.bimViewer.clearSections();
}
}
]
]
});
}
}
export {CanvasContextMenu};