> **本文回答**：`MainView` 配置除了 [mainview-init](mainview-init.md) 列出的常用项，还支持 `workspace / closeDocOnOpen / plugins / docUrl / wasmServiceUrl` 等；状态栏按钮可通过 `Engine.view.coordsBar.funcButtons` 访问，`Engine.ORTHOMODE / Engine.GRIDMODE` 程序化切换状态。

## 一、完整配置示例（来自 ui 示例）

```js
const fullConfig = {
  // 基本信息
  appname: '唯杰CAD',
  version: 'v1.0.0',

  // 后端服务
  serviceUrl: env.serviceUrl,
  accessToken: env.accessToken,
  workspace: '',          // CAD 后端工作区间
  accessKey: '',          // 加密图纸的访问密钥

  // WASM
  wasmServiceUrl: '',

  // 字体（见 setup/fonts）：非 http(s) 开头的 path（含 '/x'）在配置了 serviceUrl 时
  // 一律解析为 <服务根>/_webcad/<path>；字体在自己站点下请写绝对 URL
  fonts: [
    { path: 'https://your.site/fonts/simsun.ttf', name: '宋体',  kind: 'ttf' },
    { path: 'https://your.site/fonts/hztxt.shx',  name: 'hztxt', kind: 'shx' }
  ],

  // 文档行为
  closeDocOnOpen: true,   // 打开新图时关闭当前文档（单文档模式）

  // 插件
  plugins: [],            // 启动时自动加载的插件列表，例如 [{ url: '/plugins/x/plugin.js' }]
  pluginMarketUrl: '',    // 插件市场配置文件地址；留空 = 默认 <服务根>/_webcad/plugins/plugins.json（无法用空串关闭）

  // UI
  sidebarStyle: 'none',   // both / left / right / none
  docUrl: 'https://www.vjmap.com'  // 文档按钮链接
};
```

MCP 参考：`vjcad/example/ui/09mainviewconfig.js`。

> 本示例标题为"主视图配置 MainViewConfig 用法"，其字段是 vjcad 在 playground 内确认存在的。

## 二、状态栏（FuncButtons / CoordsBar）程序化操作

```js
const coordsBar = Engine.view.coordsBar;
const funcButtons = coordsBar.funcButtons;

// 通过修改 Engine 系统变量切换状态，按钮状态会自动同步
Engine.ORTHOMODE = 1;     // 开正交（F8）
Engine.GRIDMODE = 1;      // 开栅格（F7）
Engine.ORTHOMODE = 0;     // 关正交

console.log(funcButtons.orthomodeButton.isOn);  // 当前是否开启
console.log(funcButtons.gridmodeButton.isOn);
```

状态栏内置按钮 / 快捷键：

| 功能 | 快捷键 | Engine 变量 |
|---|---|---|
| 对象捕捉 OSNAP | F3 | `Engine.OSMODE` |
| 栅格显示 GRID | F7 | `Engine.GRIDMODE` |
| 正交模式 ORTHO | F8 | `Engine.ORTHOMODE` |
| 极轴追踪 POLAR | F10 | — |
| 主题切换 | — | 画布深/浅色用 `Engine.THEME_MODE = 0/1`；UI 配色用 `MainView({ themeColors })` / `cadView.setThemeColors()`。`MainView.setTheme()` 是遗留接口，只记录主题名、不切换任何配色（另见 [ui/theme-statusbar](../ui/theme-statusbar.md)） |

MCP 参考：`vjcad/example/ui/08statusbar.js`。

## 三、UI 进一步定制

| 想做的 | 去读 |
|---|---|
| Ribbon 按钮 / 菜单 / 命令注册 | [plugin/menu-ribbon](../plugin/menu-ribbon.md) |
| 右键菜单 | [ui/contextmenu](../ui/contextmenu.md) |
| 主题（亮 / 暗）+ 状态栏 | [ui/theme-statusbar](../ui/theme-statusbar.md) |
| 侧边栏面板 | [ui/sidebar-panel](../ui/sidebar-panel.md) |
| 对话框 / 浮动工具栏 | [ui/dialogs](../ui/dialogs.md)、[ui/floating-toolbar](../ui/floating-toolbar.md) |

## 反例

- 在 `await onLoad()` 之前访问 `Engine.view.coordsBar`：拿到 `undefined`。
- 把 `closeDocOnOpen: false` 用作"打开新图后台并存"的开关：实际行为是是否关闭旧文档，不是是否后台保留。

## 参考（官方文档 MCP）

- 文档：`vjcad/doc/ui/index.md`、`vjcad/doc/ui/controls.md`
- 示例：`vjcad/example/ui/09mainviewconfig.js`、`vjcad/example/ui/08statusbar.js`
