// // clipboardExample.js // hifi // // Created by Brad Hefta-Gaub on 1/28/14. // Copyright (c) 2014 HighFidelity, Inc. All rights reserved. // // This is an example script that demonstrates use of the Clipboard class // // var selectedVoxel = { x: 0, y: 0, z: 0, s: 0 }; var selectedSize = 4; function setupMenus() { // hook up menus Menu.menuItemEvent.connect(menuItemEvent); // delete the standard application menu item Menu.removeMenuItem("Edit", "Cut"); Menu.removeMenuItem("Edit", "Copy"); Menu.removeMenuItem("Edit", "Paste"); Menu.removeMenuItem("Edit", "Delete"); Menu.removeMenuItem("Edit", "Nudge"); Menu.removeMenuItem("File", "Export Voxels"); Menu.removeMenuItem("File", "Import Voxels"); // delete the standard application menu item Menu.addMenuItem({ menuName: "Edit", menuItemName: "Cut", shortcutKey: "CTRL+X", afterItem: "Voxels" }); Menu.addMenuItem({ menuName: "Edit", menuItemName: "Copy", shortcutKey: "CTRL+C", afterItem: "Cut" }); Menu.addMenuItem({ menuName: "Edit", menuItemName: "Paste", shortcutKey: "CTRL+V", afterItem: "Copy" }); Menu.addMenuItem({ menuName: "Edit", menuItemName: "Nudge", shortcutKey: "CTRL+N", afterItem: "Paste" }); Menu.addMenuItem({ menuName: "Edit", menuItemName: "Delete", shortcutKeyEvent: { text: "backspace" }, afterItem: "Nudge" }); Menu.addMenuItem({ menuName: "File", menuItemName: "Export Voxels", shortcutKey: "CTRL+E", afterItem: "Voxels" }); Menu.addMenuItem({ menuName: "File", menuItemName: "Import Voxels", shortcutKey: "CTRL+I", afterItem: "Export Voxels" }); } function menuItemEvent(menuItem) { var debug = true; if (debug) { print("menuItemEvent " + menuItem); } // Note: this sample uses Alt+ as the key codes for these clipboard items if (menuItem == "Copy") { print("copying..."); Clipboard.copyVoxel(selectedVoxel.x, selectedVoxel.y, selectedVoxel.z, selectedVoxel.s); } if (menuItem == "Cut") { print("cutting..."); Clipboard.cutVoxel(selectedVoxel.x, selectedVoxel.y, selectedVoxel.z, selectedVoxel.s); } if (menuItem == "Paste") { print("pasting..."); Clipboard.pasteVoxel(selectedVoxel.x, selectedVoxel.y, selectedVoxel.z, selectedVoxel.s); } if (menuItem == "Delete") { print("deleting..."); Clipboard.deleteVoxel(selectedVoxel.x, selectedVoxel.y, selectedVoxel.z, selectedVoxel.s); } if (menuItem == "Export Voxels") { print("export"); Clipboard.exportVoxel(selectedVoxel.x, selectedVoxel.y, selectedVoxel.z, selectedVoxel.s); } if (menuItem == "Import Voxels") { print("import"); Clipboard.importVoxels(); } if (menuItem == "Nudge") { print("nudge"); Clipboard.nudgeVoxel(selectedVoxel.x, selectedVoxel.y, selectedVoxel.z, selectedVoxel.s, { x: -1, y: 0, z: 0 }); } } var selectCube = Overlays.addOverlay("cube", { position: { x: 0, y: 0, z: 0}, size: selectedSize, color: { red: 255, green: 255, blue: 0}, alpha: 1, solid: false, visible: false, lineWidth: 4 }); function mouseMoveEvent(event) { var pickRay = Camera.computePickRay(event.x, event.y); var debug = false; if (debug) { print("mouseMoveEvent event.x,y=" + event.x + ", " + event.y); print("called Camera.computePickRay()"); print("computePickRay origin=" + pickRay.origin.x + ", " + pickRay.origin.y + ", " + pickRay.origin.z); print("computePickRay direction=" + pickRay.direction.x + ", " + pickRay.direction.y + ", " + pickRay.direction.z); } var intersection = Voxels.findRayIntersection(pickRay); if (intersection.intersects) { if (debug) { print("intersection voxel.red/green/blue=" + intersection.voxel.red + ", " + intersection.voxel.green + ", " + intersection.voxel.blue); print("intersection voxel.x/y/z/s=" + intersection.voxel.x + ", " + intersection.voxel.y + ", " + intersection.voxel.z+ ": " + intersection.voxel.s); print("intersection face=" + intersection.face); print("intersection distance=" + intersection.distance); print("intersection intersection.x/y/z=" + intersection.intersection.x + ", " + intersection.intersection.y + ", " + intersection.intersection.z); } var x = Math.floor(intersection.voxel.x / selectedSize) * selectedSize; var y = Math.floor(intersection.voxel.y / selectedSize) * selectedSize; var z = Math.floor(intersection.voxel.z / selectedSize) * selectedSize; selectedVoxel = { x: x, y: y, z: z, s: selectedSize }; Overlays.editOverlay(selectCube, { position: selectedVoxel, size: selectedSize, visible: true } ); } else { Overlays.editOverlay(selectCube, { visible: false } ); selectedVoxel = { x: 0, y: 0, z: 0, s: 0 }; } } Controller.mouseMoveEvent.connect(mouseMoveEvent); function wheelEvent(event) { var debug = false; if (debug) { print("wheelEvent"); print(" event.x,y=" + event.x + ", " + event.y); print(" event.delta=" + event.delta); print(" event.orientation=" + event.orientation); print(" event.isLeftButton=" + event.isLeftButton); print(" event.isRightButton=" + event.isRightButton); print(" event.isMiddleButton=" + event.isMiddleButton); print(" event.isShifted=" + event.isShifted); print(" event.isControl=" + event.isControl); print(" event.isMeta=" + event.isMeta); print(" event.isAlt=" + event.isAlt); } } Controller.wheelEvent.connect(wheelEvent); function scriptEnding() { Overlays.deleteOverlay(selectCube); } Script.scriptEnding.connect(scriptEnding); setupMenus();