# Class: MeshShape

利用当前元素下的[Mesh组件](Mesh)或[GLTF组件](GLTF)，创建一个完全贴合的轮廓。如果当前元素下不存在Mesh组件或GLTF组件，则不生效。
可通过在标签上添加`mesh-shape`属性来为元素添加该组件。

> ⚠️ 如果Mesh或GLTF内部结构非常复杂，创建和维持该组件可能会占用较多的资源。如果发现该组件会导致小程序性能下降，可以考虑改用其他轮廓类型，并开启[autoFit](../interfaces/IShapeData#autoFit)属性。

> ⚠️ MeshShape使用的Mesh的顶点数量不能超过65535个。如果超过了，推荐使用CubeShape+autoFit来代替。

**`see`** [IMeshShapeData](/miniprogram/dev/reference/xr-frame/api/interfaces/IMeshShapeData)

## Hierarchy

- [`Shape`](Shape)

  ↳ **`MeshShape`**

## Table of contents

### Constructors

- constructor

### Events

- onAdd
- onRelease
- onRemove
- onTick
- onUpdate

### Properties

- implType
- priority
- schema
- shadowRoot
- EVENTS

### Accessors

- el
- scene
- type
- version

### Methods

- getBasicImpl
- getData
- getGLTFRootShape
- getShadowShapes
- initDelegates
- resetListeners
- setAsShadow
- setData
- setDataOne

## Constructors

### constructor

• **new MeshShape**()

#### Inherited from

[Shape](Shape).[constructor](Shape#constructor)

## Events

### onAdd

▸ **onAdd**(`parent`, `data`): `void`

所挂载的`element`被挂载到场景时触发的回调。

#### Parameters

| Name | Type |
| :------ | :------ |
| `parent` | [`Element`](Element) |
| `data` | [`IMeshShapeData`](/miniprogram/dev/reference/xr-frame/api/interfaces/IMeshShapeData) |

#### Returns

`void`

#### Inherited from

[Shape](Shape).[onAdd](Shape#onAdd)

___

### onRelease

▸ **onRelease**(`data`): `void`

从被挂载的`element`上被移除，或是`element`被销毁时，触发的回调。
一般用于释放持有的资源。

#### Parameters

| Name | Type |
| :------ | :------ |
| `data` | [`IShapeData`](/miniprogram/dev/reference/xr-frame/api/interfaces/IShapeData) |

#### Returns

`void`

#### Inherited from

[Shape](Shape).[onRelease](Shape#onRelease)

___

### onRemove

▸ **onRemove**(`parent`, `data`): `void`

所挂载的`element`从父节点`parent`被移除时，或者自己从`element`上被移除时，触发的回调。
一般用于消除功能的运作。
**如果一个组件的元素直接被销毁了，那这个组件就不会经历onRemove而是直接进入onRelease。**

#### Parameters

| Name | Type |
| :------ | :------ |
| `parent` | [`Element`](Element) |
| `data` | [`IShapeData`](/miniprogram/dev/reference/xr-frame/api/interfaces/IShapeData) |

#### Returns

`void`

#### Inherited from

[Shape](Shape).[onRemove](Shape#onRemove)

___

### onTick

▸ **onTick**(`dateTime`, `data`): `void`

渲染每帧触发的回调。

#### Parameters

| Name | Type |
| :------ | :------ |
| `dateTime` | `number` |
| `data` | [`IMeshShapeData`](/miniprogram/dev/reference/xr-frame/api/interfaces/IMeshShapeData) |

#### Returns

`void`

#### Inherited from

[Shape](Shape).[onTick](Shape#onTick)

___

### onUpdate

▸ **onUpdate**(`data`, `preData`): `void`

数据更新时触发的回调。

#### Parameters

| Name | Type |
| :------ | :------ |
| `data` | [`IMeshShapeData`](/miniprogram/dev/reference/xr-frame/api/interfaces/IMeshShapeData) |
| `preData` | [`IMeshShapeData`](/miniprogram/dev/reference/xr-frame/api/interfaces/IMeshShapeData) |

#### Returns

`void`

#### Inherited from

[Shape](Shape).[onUpdate](Shape#onUpdate)

## Properties

### implType

• **implType**: `ShapeImplType`

#### Inherited from

[Shape](Shape).[implType](Shape#implType)

___

### priority

• `Readonly` **priority**: `number` = `400`

自定义组件的更新优先级。

#### Inherited from

[Shape](Shape).[priority](Shape#priority)

___

### schema

• `Readonly` **schema**: [`IComponentSchema`](/miniprogram/dev/reference/xr-frame/api/interfaces/IComponentSchema)

自定义组件的`schema`。

#### Overrides

[Shape](Shape).[schema](Shape#schema)

___

### shadowRoot

• `Optional` **shadowRoot**: `GLTFAbstractShape`

#### Inherited from

[Shape](Shape).[shadowRoot](Shape#shadowRoot)

___

### EVENTS

▪ `Static` **EVENTS**: `string`[]

#### Overrides

[Shape](Shape).[EVENTS](Shape#EVENTS)

## Accessors

### el

• `get` **el**(): [`Element`](Element)

挂载的元素。

#### Returns

[`Element`](Element)

___

### scene

• `get` **scene**(): [`Scene`](Scene)

当前场景。

#### Returns

[`Scene`](Scene)

___

### type

• `get` **type**(): [`EShapeType`](/miniprogram/dev/reference/xr-frame/api/enums/EShapeType)

#### Returns

[`EShapeType`](/miniprogram/dev/reference/xr-frame/api/enums/EShapeType)

___

### version

• `get` **version**(): `number`

当前版本，每次有数据更新都会增加，可以用作和其他组件合作的依据。

#### Returns

`number`

## Methods

### getBasicImpl

▸ **getBasicImpl**(): `BasicShape`

#### Returns

`BasicShape`

#### Inherited from

[Shape](Shape).[getBasicImpl](Shape#getBasicImpl)

___

### getData

▸ **getData**(`key`): [`IShapeData`](/miniprogram/dev/reference/xr-frame/api/interfaces/IShapeData)[`T`]

获取一个当前值。

#### Type parameters

| Name | Type |
| :------ | :------ |
| `T` | extends keyof [`IShapeData`](/miniprogram/dev/reference/xr-frame/api/interfaces/IShapeData) |

#### Parameters

| Name | Type |
| :------ | :------ |
| `key` | `T` |

#### Returns

[`IShapeData`](/miniprogram/dev/reference/xr-frame/api/interfaces/IShapeData)[`T`]

#### Inherited from

[Shape](Shape).[getData](Shape#getData)

___

### getGLTFRootShape

▸ **getGLTFRootShape**(): [`Shape`](Shape)

#### Returns

[`Shape`](Shape)

#### Inherited from

[Shape](Shape).[getGLTFRootShape](Shape#getGLTFRootShape)

___

### getShadowShapes

▸ **getShadowShapes**(): [`Shape`](Shape)[]

#### Returns

[`Shape`](Shape)[]

#### Inherited from

[Shape](Shape).[getShadowShapes](Shape#getShadowShapes)

___

### initDelegates

▸ **initDelegates**(`el`): `void`

#### Parameters

| Name | Type |
| :------ | :------ |
| `el` | [`Element`](Element) |

#### Returns

`void`

#### Inherited from

[Shape](Shape).[initDelegates](Shape#initDelegates)

___

### resetListeners

▸ **resetListeners**(): `void`

#### Returns

`void`

#### Inherited from

[Shape](Shape).[resetListeners](Shape#resetListeners)

___

### setAsShadow

▸ **setAsShadow**(`root`, `transform`): `void`

#### Parameters

| Name | Type |
| :------ | :------ |
| `root` | `GLTFAbstractShape` |
| `transform` | `TQS` |

#### Returns

`void`

#### Inherited from

[Shape](Shape).[setAsShadow](Shape#setAsShadow)

___

### setData

▸ **setData**(`data`): `void`

不通过`xml`而是直接设置`data`，注意值的类型需要和`schema`中一致。

#### Parameters

| Name | Type |
| :------ | :------ |
| `data` | `Partial` |

#### Returns

`void`

#### Inherited from

[Shape](Shape).[setData](Shape#setData)

___

### setDataOne

▸ **setDataOne**(`key`, `value`): `void`

设置一个数据。

#### Type parameters

| Name | Type |
| :------ | :------ |
| `T` | extends keyof [`IShapeData`](/miniprogram/dev/reference/xr-frame/api/interfaces/IShapeData) |

#### Parameters

| Name | Type |
| :------ | :------ |
| `key` | `T` |
| `value` | [`IShapeData`](/miniprogram/dev/reference/xr-frame/api/interfaces/IShapeData)[`T`] |

#### Returns

`void`

#### Inherited from

[Shape](Shape).[setDataOne](Shape#setDataOne)
