唯杰地图 logo唯杰地图
VJMAP
EN

viewer-mode

vjcad/references/setup/viewer-mode.md 3.6 KB84 行
原文

本文回答:在 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