> **本文回答**：vjcad 的入口是 `new MainView({...}) → initCadContainer(elementId, cadView) → await cadView.onLoad()`，`MainView` 接受 appname / version / wasmServiceUrl / serviceUrl / accessToken / accessKey / sidebarStyle / pluginMarketUrl / fonts / locale / viewMode / showUcsIcon / showAxis 等配置项。

## 一、最小初始化（npm + TS）

```ts
import { MainView, initCadContainer } from 'vjcad';

const cadView = new MainView({
  appname: '我的CAD应用',
  version: 'v1.0.0'
});

initCadContainer('cad-app', cadView);
await cadView.onLoad();
```

MCP 参考：`vjcad/doc/guide/quick-start.md`、`vjcad/example/basic/01init.js`。

## 二、`MainViewConfig` 字段

> 构造参数类型为 `MainViewConfig`（`types.d.ts` 导出），官方 guide 中或称 `MainViewOptions`。

| 字段 | 类型 | 说明 |
|---|---|---|
| `appname` | `string` | 应用名称，显示在标题栏 |
| `version` | `string` | 应用版本号 |
| `wasmServiceUrl` | `string` | WASM 服务地址，用于加载 WebAssembly 模块 |
| `serviceUrl` | `string` | 后端服务地址（文件操作等 API） |
| `accessToken` | `string` | 访问令牌，身份验证 |
| `accessKey` | `string` | 访问密钥，加密图纸 |
| `pluginMarketUrl` | `string` | 插件市场配置文件地址。留空/不传时自动使用 `<服务根>/_webcad/plugins/plugins.json`（无 `serviceUrl` 时 `./plugins/plugins.json`），启动时总会请求它并加载其中 `autoLoad` 插件；空串无法关闭 |
| `sidebarStyle` | `'both' \| 'left' \| 'right' \| 'none'` | 侧边栏样式，默认 `'right'` |
| `locale` | `'zh-CN' \| 'en-US'` | 界面语言；不传则按优先级自动检测 |
| `fonts` | `FontConfig[]` | 字体配置列表，见 [fonts](fonts.md) |
| `viewMode` | `'viewer'`（按示例） | 只读查看模式开关，见 [viewer-mode](viewer-mode.md) |
| `showUcsIcon` | `boolean`（按示例） | 是否显示左下角坐标轴 |
| `showAxis` | `boolean`（按示例） | 是否显示图中坐标轴 |

`FontConfig`：

```ts
interface FontConfig {
  path: string;             // 字体文件路径
  name?: string;            // 字体名称（与自动创建的 TextStyle 同名）
  kind?: 'woff' | 'ttf' | 'otf' | 'shx';  // 字体类型
}
```

MCP 参考：`vjcad/doc/guide/quick-start.md`。

## 三、Playground 完整配置（CDN 全局）

```js
const { MainView, initCadContainer, message } = vjcad;

const cadView = new MainView({
  appname: '唯杰CAD',
  version: 'v1.0.0',
  serviceUrl: env.serviceUrl,
  accessToken: env.accessToken,
  accessKey: '',
  sidebarStyle: 'right',
  pluginMarketUrl: '',   // 空串 = 使用默认市场地址（见上表）
  fonts: []              // 空数组 = 不加载任何字体；不传 fonts 才默认加载 simkai.woff + _default.shx
});

initCadContainer('map', cadView);
await cadView.onLoad();
message.info('WebCAD 引擎初始化完成');
```

MCP 参考：`vjcad/example/basic/01init.js`。

## 四、`initCadContainer` 签名

```ts
initCadContainer(container: string | HTMLElement, cadViewElement?: HTMLElement): HTMLElement
```

- `container`：容器 DOM 的 id 或元素本身。
- `cadViewElement`：`new MainView({...})` 创建的实例（`MainView` 继承 `LitElement`，本身即 HTMLElement）。
- 调用前必须保证容器存在且**有非零宽高**，否则首屏会黑屏（与初始化无关）。

## 反例

- 在 `await cadView.onLoad()` 之前就调 `Engine.addEntities(...)` 或 `Engine.eventManager.on(...)`：此时 `Engine` 尚未就绪。
- 配置 `viewerMode: true`：示例里实际配置项是 `viewMode: "viewer"`（注意拼写）。
- 把 `new vjmap.Service()` / `new vjmap.Map()` 也写进来：vjcad 不需要这些，初始化只走 `MainView + initCadContainer`。

## 参考（官方文档 MCP）

- 文档：`vjcad/doc/guide/quick-start.md`
- 示例：`vjcad/example/basic/01init.js`、`vjcad/example/basic/02onload.js`
