# ESTestObject（测试对象）

> 分类：**基类** | 引擎：- | 基类：是
> 继承链：`Destroyable -> ESSceneObject -> ESTestObject`

ESTestObject 是 earthsdk3 场景对象的规范示例（测试对象），用于演示对象的标准写法：规范的注册元数据、带 JSDoc 的响应式属性、带 JSDoc 的方法、以及业务事件的声明模式。

## JSON 示例

```json
{ "id": "test_xxx", "type": "ESTestObject", "name": "测试对象", "show": true, "position": [116.39, 39.9, 100], "url": "http://localhost:8080/earthsdk3/earthsdk3.gltf" }
```

## 属性

| 属性 | 类型 | 默认值 | 说明 | 来源 |
| --- | --- | --- | --- | --- |
| `code` | string | console.log("hello world") | 可执行的 JS 代码字符串 | ESTestObject |
| `color` | ESJColor | [1, 0, 0, 1] | 颜色 [红, 绿, 蓝, 透明度]，取值 0~1 | ESTestObject |
| `dashPattern` | number | 255 | 虚线图案，0~255 的位掩码 | ESTestObject |
| `devTags` | string[] \| undefined | undefined | 对象类型名称相关的开发标签数组，使用 reactArrayWithUndefined 进行响应式处理，默认为 undefined。 | ESSceneObject |
| `execOnceFuncStr` | string \| undefined | undefined | 一次性执行函数的字符串表示，默认为 undefined。 | ESSceneObject |
| `extras` | JsonValue | undefined | 扩展属性 JSON，必须整体赋值，使用 reactJson 进行响应式处理，默认为 undefined。 | ESSceneObject |
| `height` | number | 100 | 高度（米） | ESTestObject |
| `name` | string | "未命名场景对象" | 对象名称，默认为 '未命名场景对象'。 | ESSceneObject |
| `offset` | ESJVector2D | [10, 0] | 像素偏移 [x, y] | ESTestObject |
| `padding` | ESJVector4D | [0, 2, 0, 2] | 内边距 [上, 右, 下, 左] | ESTestObject |
| `paramType` | string | screen | 参数类型：'screen'（屏幕像素）或 'world'（世界坐标） | ESTestObject |
| `points` | ESJVector3DArray | [] | 点坐标数组 [经,纬,高][] | ESTestObject |
| `position` | ESJVector3D | [116.39, 39.9, 100] | 位置 [经度, 纬度, 高度] | ESTestObject |
| `positionOffset` | ESJVector3D | [0, 2, 0] | 位置偏移 [x, y, z] | ESTestObject |
| `ref` | string \| undefined | undefined | 对象引用，设置后可通过对象管理器 objm.$refs.xxx 快速获取到对象，默认为 undefined。 | ESSceneObject |
| `rotation` | ESJVector3D | [0, -90, 0] | 姿态 [航向, 俯仰, 翻滚]（度） | ESTestObject |
| `show` | boolean | true | 是否显示对象 | ESTestObject |
| `startTime` | - | Date.now() | 开始时间（毫秒时间戳） | ESTestObject |
| `strokeStyle` | object | {"width":1,"widthType":"screen","color":[1,1,1,1],"material":"","materialParams":{},"ground":false} | 线样式参数：{ width, widthType, color, material, materialParams, ground } | ESTestObject |
| `text` | string | 默认 | 文本内容 | ESTestObject |
| `times` | number[] | [] | 时间组（毫秒时间戳数组） | ESTestObject |
| `toDestroyFuncStr` | string \| undefined | undefined | 销毁函数的字符串表示，默认为 undefined。 | ESSceneObject |
| `updateFuncStr` | string \| undefined | undefined | 更新函数的字符串表示，默认为 undefined。 | ESSceneObject |
| `url` | string | http://localhost:8080/earthsdk3/earthsdk3.gltf | 模型/数据服务地址 | ESTestObject |

## 方法

| 方法 | 参数 | 返回 | 说明 | 来源 |
| --- | --- | --- | --- | --- |
| `addToViewer(viewer: ESViewer)` | viewer: ESViewer | - | 将对象添加到指定视口中。<br>**参数**：viewer - 要添加对象的视口。 | ESSceneObject |
| `createAttachedObject(createViewerPropSceneObject: (viewer: ESViewer) => Destroyable | undefined)` | createViewerPropSceneObject: (viewer: ESViewer) => Destroyable \| undefined | - | 创建与视口关联的对象，并返回一个销毁函数，用于手动销毁关联对象。<br>**参数**：createViewerPropSceneObject - 一个函数，用于创建与视口关联的对象。<br>**返回**：一个销毁函数，调用该函数可以销毁所有关联对象。 | ESSceneObject |
| `flush()` | - | - | 刷新对象，触发刷新事件。 | ESSceneObject |
| `func(type: string[], isMsg: boolean = true)` | type: string[], isMsg: boolean = true | - | 测试方法：按指令打印对象 JSON 并触发 testEvent。<br>**参数**：type - 指令数组，含 'completeJson' 则打印完整 JSON，含 'json' 则打印精简 JSON。；isMsg - 是否打印方法调用提示，默认 true。 | ESTestObject |
| `func1(type: string[], isMsg: boolean)` | type: string[], isMsg: boolean | - | 测试方法（无默认参数版）。行为同 {@link func}。<br>**参数**：type - 指令数组。；isMsg - 是否打印方法调用提示。 | ESTestObject |
| `getESProperties()` | - | - | 配置对象的 UI 层属性面板。 返回按分区组织的属性描述器数组，供属性面板/编辑器渲染；`MethodProperty` 暴露为可调用方法按钮。<br>**返回**：属性面板分区配置。 | ESTestObject |
| `getPadding()` | - | - | 获取对象的 padding 属性值。<br>**返回**：内边距 [上, 右, 下, 左]。 | ESTestObject |
| `registerAttachedObject(createViewerPropSceneObject: (viewer: ESViewer) => Destroyable | undefined)` | createViewerPropSceneObject: (viewer: ESViewer) => Destroyable \| undefined | - | 注册与视口关联的对象，当对象被添加到视口或从视口移除时，会自动创建或销毁关联对象。<br>**参数**：createViewerPropSceneObject - 一个函数，用于创建与视口关联的对象。 | ESSceneObject |
| `registerAttachedObjectForContainer(createContainerPropSceneObject: (viewer: ESViewer, container: HTMLDivElement) => Destroyable | undefined)` | createContainerPropSceneObject: (viewer: ESViewer, container: HTMLDivElement) => Destroyable \| undefined | - | 注册与视口容器关联的对象，当对象被添加到视口或从视口移除时，会自动创建或销毁关联对象。<br>**参数**：createContainerPropSceneObject - 一个函数，用于创建与视口容器关联的对象。 | ESSceneObject |
| `reload()` | - | - | - | ESSceneObject |
| `removefromViewer(viewer: ESViewer)` | viewer: ESViewer | - | 将对象从指定视口中移除。<br>**参数**：viewer - 要移除对象的视口。 | ESSceneObject |

## 事件

| 事件 | 说明 | 来源 |
| --- | --- | --- |
| `activeViewerChanged` | - | ESSceneObject |
| `createdEvent` | 获取对象创建事件。 | ESSceneObject |
| `flushEvent` | 获取刷新对象事件。 | ESSceneObject |
| `readyEvent` | - | ESSceneObject |
| `reloadEvent` | - | ESSceneObject |
| `testEvent` | 获取测试事件，外部用 `obj.testEvent.don(handler)` 订阅。 | ESTestObject |
| `toDestroyFuncChanged` | 获取销毁函数改变事件。 | ESSceneObject |
| `updateFuncChanged` | 获取更新函数改变事件。 | ESSceneObject |

---
> 本文由 `generate-docs.mjs` 从源码自动生成，请勿手改。修改对象属性/方法后重跑脚本刷新。
