Skip to content

Tools

This example demonstrates how to work with SketchUp tools using the JavaScript SDK.

  • The protocol version supports tools (SDK 2.19.0 / Protocol 1.16.0 or later).
let model = await SketchUpApi.getActiveModel();
let tool = await model.tools.getActive();
console.log(`Active tool: ${tool.name} (ID: ${tool.id})`);
let model = await SketchUpApi.getActiveModel();
// Return to the selection tool
let selectTool = await model.tools.clearActiveTool();
console.log(`Cleared to: ${selectTool.name}`);
let model = await SketchUpApi.getActiveModel();
let handle = model.tools.observeToolChanges((event) => {
if (event.event === 'Initial') {
console.log(`Initial tool: ${event.tool.name}`);
} else if (event.event === 'Activation') {
console.log(`Tool activated: ${event.tool.name}`);
} else if (event.event === 'StateChange') {
console.log(`Tool state changed: ${event.state.tool.name}, state: ${event.state.state}`);
}
});
// Make sure to close the handle when you no longer need the observer
setTimeout(() => handle.stop(), 60 * 1000);
let model = await SketchUpApi.getActiveModel();
// Get a component to place
let components = await model.getDefinitions();
if (components.length === 0) {
console.log('No components available');
return;
}
let component = components[0];
// Place the component once - returns the placed instance or undefined if cancelled
let instance = await model.tools.placeComponentOnce(component);
if (instance) {
console.log('Component placed:', instance.name);
} else {
console.log('Component placement cancelled');
}
let model = await SketchUpApi.getActiveModel();
// Get a component to place
let components = await model.getDefinitions();
if (components.length === 0) {
console.log('No components available');
return;
}
let component = components[0];
// Place multiple instances with callback for each placement
let instances = await model.tools.placeComponentRepeatedly(
component,
(addedInstances) => {
console.log(`Placed ${addedInstances.length} instances`);
}
);
console.log(`Total instances placed: ${instances.length}`);