viewer-mode
本文回答:在
MainView({...})中设置viewMode: "viewer"进入只读查看模式,只显示绘图区域,隐藏菜单/工具栏/命令行;常用配套选项是showUcsIcon: false / showAxis: false / enableContextMenu: false / showGrips: false。
一、最小用法
const { MainView, initCadContainer, Engine, message } = vjcad;
const cadView = new MainView({
appname: '唯杰CAD',
version: 'v1.0.0',
serviceUrl: env.serviceUrl,
accessToken: env.accessToken,
viewMode: 'viewer', // 关键:注意是 viewMode 不是 viewerMode
showUcsIcon: false,
showAxis: false
});
initCadContainer('map', cadView);
await cadView.onLoad();
MCP 参考:vjcad/example/basic/03viewermode.js。
二、隐藏选项一览(按示例)
| 选项 | 含义 |
|---|---|
viewMode: 'viewer' |
只显示绘图区域(隐藏菜单/工具栏/命令行/侧边栏等) |
showUcsIcon: false |
隐藏左下角 UCS 坐标轴图标 |
showAxis: false |
隐藏图中坐标轴 |
enableContextMenu: false |
禁用右键菜单(默认) |
showGrips: false |
禁用夹点(默认) |
MCP 参考:vjcad/example/basic/03viewermode.js。
三、配合远程图纸(只读)
viewMode: 'viewer' + DrawingManagerService.openDrawing(...) + Engine.view.openDbDoc(file, data, true) 适用于"嵌入第三方系统的只读图纸查看"场景(真正只读靠 openDbDoc 第三参,openDrawing 的 readOnly 只是在返回值里标 isReadOnly):
const { MainView, initCadContainer, Engine, DrawingManagerService } = vjcad;
const cadView = new MainView({
appname: '唯杰CAD', version: 'v1.0.0',
serviceUrl: env.serviceUrl, accessToken: env.accessToken,
viewMode: 'viewer', showUcsIcon: false, showAxis: false
});
initCadContainer('map', cadView);
await cadView.onLoad();
const drawingManager = new DrawingManagerService();
const openResult = await drawingManager.openDrawing({
type: 'imports',
mapid: env.exampleMapId,
version: 'v1',
branch: 'main',
patchId: 'base',
readOnly: true // 仅让返回值 isReadOnly=true,本身不锁定任何东西
});
if (!openResult.success) throw new Error(openResult.error);
const virtualFile = new File([openResult.webcadJson], `${env.exampleMapId}_v1_main`,
{ type: 'application/json' });
await Engine.view.openDbDoc(virtualFile, openResult.webcadData, true); // 第三参 true 才真正只读(实体进只读层,不可选/编辑)
Engine.zoomExtents();
MCP 参考:vjcad/example/basic/04viewerremote.js(官方示例未传 openDbDoc 第三参,打开后其实可编辑;上面已按源码修正)。
四、注意
- viewer 模式下编辑命令(
LINE / MOVE / ERASE / COPY / ROTATE...)依然能从代码触发;如果你不希望用户改图纸,用Engine.view.openDbDoc(file, data, true)让已有实体进只读层(不可选/编辑),并在业务侧禁用编辑命令。openDrawing({ readOnly: true })只在返回值标isReadOnly,不锁定任何东西;只读打开后仍可新建实体。 - viewer 模式不写回服务端:示例里
Engine.currentDoc.serverSource = {...}这一行被特意注释掉。
反例
viewerMode: true:vjcad 实际配置项是viewMode: "viewer"(字符串),不是布尔。- viewer 模式下还想保存:需要去掉 viewer 模式或自己处理保存路径。
参考(官方文档 MCP)
- 文档:
vjcad/doc/basic/index.md - 示例:
vjcad/example/basic/03viewermode.js、vjcad/example/basic/04viewerremote.js