PluginManager API
Less than 1 minute
PluginManager API
PluginManager loads, unloads, and manages plugin lifecycle.
Import
const { PluginManager } = vjmapext;Usually mapcadLayer.pluginManager or mapcadLayer.loadPlugin(plugin).
Methods
load(plugin)
Install a plugin.
| Parameter | Type | Description |
|---|---|---|
| plugin | Plugin | Plugin object |
| Returns | Promise<void> | Resolves when installed |
await mapcadLayer.loadPlugin({
manifest: { name: 'my-plugin', version: '1.0.0' },
install(ctx) {
ctx.commandRegistry.register('MYCMD', MyCommand);
}
});unload(name)
Unload by manifest.name. Calls deactivate if provided.
| Parameter | Type | Description |
|---|---|---|
| name | string | Plugin name |
getLoaded()
| Returns | Type | Description |
|---|---|---|
| — | Plugin[] | Loaded plugins |
Types
Plugin
interface Plugin {
manifest: PluginManifest;
install(ctx: PluginContext): void | Promise<void>;
activate?(): void;
deactivate?(): void;
}PluginManifest
interface PluginManifest {
name: string;
version: string;
description?: string;
}PluginContext
Context passed to install.
interface PluginContext {
commandRegistry: CommandRegistry;
entityRegistry: EntityRegistry;
eventBus: EventBus;
store: EntityStore;
on(event: string, handler: Function): void;
off(event: string, handler: Function): void;
}| Property | Description |
|---|---|
commandRegistry | Register commands |
entityRegistry | Register entity types |
eventBus | Subscribe / publish |
store | Entity data |
on / off | EventBus shortcuts |
Example
const measurePlugin = {
manifest: {
name: 'measure-tool',
version: '1.0.0',
description: '测量工具插件'
},
install(ctx) {
ctx.commandRegistry.register('MEASURE', {
async main(cmdCtx) {
const p1 = await cmdCtx.inputManager.getPoint({ prompt: '起点' });
if (p1.status !== 0) return;
const p2 = await cmdCtx.inputManager.getPoint({ prompt: '终点' });
if (p2.status !== 0) return;
const dx = p2.point.x - p1.point.x;
const dy = p2.point.y - p1.point.y;
const dist = Math.sqrt(dx * dx + dy * dy);
console.log(`距离: ${dist.toFixed(2)}`);
}
});
},
activate() {
console.log('测量插件已激活');
},
deactivate() {
console.log('测量插件已停用');
}
};
await mapcadLayer.loadPlugin(measurePlugin);
await mapcadLayer.executeCommand('MEASURE');