0.7.0 • Published 9 months ago

@vis-three/module-solid-object v0.7.0

Weekly downloads
-
License
MPL-2.0
Repository
-
Last release
9 months ago

@vis-three/module-solid-object

最新版本

license

模块信息

这是一个虚拟公共模块,是其他实体物体模块的基础模块,没有实际的模块对象,只提供相关方法属性。

:::tip 实体物体也就是这个物体既有geometry又有material。 :::

模块规则

SolidObjectRule

此规则目前仅作为ts的声明拓展使用。

import { Rule } from "@vis-three/middleware";
import { SolidObject3D, SolidObjectCompiler } from "./SolidObjectCompiler";
import { SolidObjectConfig } from "./SolidObjectConfig";

export type SolidObjectRule<
  E extends SolidObjectCompiler<C, O>,
  C extends SolidObjectConfig,
  O extends SolidObject3D
> = Rule<E>;

使用

import { ProxyNotice } from "@vis-three/middleware";
import { ObjectRule } from "@vis-three/module-object";
import { SolidObjectRule } from "@vis-three/module-solid-object";
import { Mesh } from "three";

import { MeshCompiler } from "./MeshCompiler";
import { MeshConfig } from "./MeshConfig";

export type MeshRule = SolidObjectRule<MeshCompiler, MeshConfig, Mesh>;

export const MeshRule: MeshRule = function (
  notice: ProxyNotice,
  compiler: MeshCompiler
) {
  ObjectRule(notice, compiler);
};

模块编译器

export abstract class SolidObjectCompiler<
  C extends SolidObjectConfig,
  O extends SolidObject3D
> extends ObjectCompiler<C, O> {
  constructor() {
    super();
  }
}

使用

import { SolidObjectCompiler } from "@vis-three/module-solid-object";
import { Mesh } from "three";
import { MeshConfig } from "./MeshConfig";

export class MeshCompiler extends SolidObjectCompiler<MeshConfig, Mesh> {
  constructor() {
    super();
  }
}

模块处理器

实体物体命令链-SolidObjectCommands

Ƭ SolidObjectCommands<C, T>: ObjectCommands<C, T>

作为公共的实体物体命令链模块使用,也可以使用其中的部分命令。

类型参数

NameType
Cextends SolidObjectConfig
Textends SolidObject3D

预览

export const solidObjectCommands: SolidObjectCommands<
  SolidObjectConfig,
  SolidObject3D
> = {
  add: {
    material: materialHandler,
    ...(<SolidObjectCommands<SolidObjectConfig, SolidObject3D>>(
      objectCommands.add
    )),
  },
  set: {
    geometry: geometryHandler,
    material: materialHandler,
    ...(<SolidObjectCommands<SolidObjectConfig, SolidObject3D>>(
      objectCommands.set
    )),
  },
  delete: {
    material: materialHandler,
    ...(<SolidObjectCommands<SolidObjectConfig, SolidObject3D>>(
      objectCommands.delete
    )),
  },
};

使用

import { defineProcessor, EngineSupport } from "@vis-three/middleware";
import {
  solidObjectCommands,
  SolidObjectCommands,
  solidObjectCreate,
  solidObjectDispose,
} from "@vis-three/module-solid-object";
import { Mesh } from "three";

import { MeshCompiler } from "../MeshCompiler";
import { getMeshConfig, MeshConfig } from "../MeshConfig";

export default defineProcessor<MeshConfig, Mesh, EngineSupport, MeshCompiler>({
  type: "Mesh",
  config: getMeshConfig,
  commands: <SolidObjectCommands<MeshConfig, Mesh>>(
    (<unknown>solidObjectCommands)
  ),
  create(config: MeshConfig, engine: EngineSupport): Mesh {
    return solidObjectCreate(new Mesh(), config, {}, engine);
  },
  dispose: solidObjectDispose,
});

geometryHandler

geometryHandler<C, O>(«destructured»): void

类型参数

NameType
Cextends SolidObjectConfig
Oextends SolidObject3D<O>

参数

NameType
«destructured»ProcessParams<C, O, EngineSupport, any>

Returns

void


materialHandler

materialHandler<C, O>(«destructured»): void

类型参数

NameType
Cextends SolidObjectConfig
Oextends SolidObject3D<O>

参数

NameType
«destructured»ProcessParams<C, O, EngineSupport, any>

Returns

void


solidObjectCreate

solidObjectCreate<C, O>(object, config, filter, engine): O

类型参数

NameType
Cextends SolidObjectConfig
Oextends SolidObject3D<O>

参数

NameType
objectO
configC
filterDeepUnion<DeepPartial<DeepRecord<C, boolean>>, boolean>
engineEngineSupport

Returns

O

solidObjectDispose

solidObjectDispose<O>(target): void

类型参数

NameType
Oextends SolidObject3D<O>

参数

NameType
targetO

Returns

void

提供配置

实体物体-SolidObject

  • 类型SolidObject
  • 配置类型:
export interface SolidObjectConfig extends ObjectConfig {
  material: string | string[];
  geometry: string;
}
  • 默认配置:
{
    material: "",
    geometry: "",
  }

:::tip 此配置供其他物体模块使用。 :::