Optmi renderer model
This commit is contained in:
@@ -369,9 +369,8 @@ class Model extends Emitter<ModelEvent> {
|
||||
} as any);
|
||||
}
|
||||
if (object.display && object instanceof Range) {
|
||||
this.renderer.cube(object.id, object.position, {
|
||||
color: object.color,
|
||||
radius: object.radius
|
||||
this.renderer.cube(object.id, object.position, object.radius, {
|
||||
color: object.color
|
||||
} as any);
|
||||
}
|
||||
}
|
||||
|
||||
+27
-28
@@ -1,20 +1,31 @@
|
||||
import { Emitter, EventType } from "@Model/Emitter";
|
||||
import { IAnyObject, ObjectID } from "@Model/Model";
|
||||
import { IParameter, IParameterOption, IParameterValue } from "@Model/Parameter";
|
||||
|
||||
/**
|
||||
* 默认类型
|
||||
*/
|
||||
type IDefaultType<T, D> = T extends undefined ? D : T;
|
||||
|
||||
/**
|
||||
* 渲染器参数
|
||||
*/
|
||||
interface IRendererParam {
|
||||
|
||||
/**
|
||||
* 渲染器参数
|
||||
*/
|
||||
renderer?: IParameter;
|
||||
|
||||
/**
|
||||
* 绘制点需要的参数
|
||||
*/
|
||||
points?: IAnyObject
|
||||
points?: IParameter;
|
||||
|
||||
/**
|
||||
* 绘制立方体需要的参数
|
||||
*/
|
||||
cube?: IAnyObject
|
||||
cube?: IParameter;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -35,12 +46,8 @@ interface ICommonParam {
|
||||
*/
|
||||
type ObjectData = Array<number> | Float32Array;
|
||||
|
||||
interface IRendererConstructor<
|
||||
M extends IAnyObject = {}
|
||||
> {
|
||||
new (canvas: HTMLCanvasElement, param?: M): AbstractRenderer<
|
||||
IRendererParam, IAnyObject, AbstractRendererEvent
|
||||
>
|
||||
interface IRendererConstructor {
|
||||
new (): AbstractRenderer<IRendererParam, AbstractRendererEvent>
|
||||
}
|
||||
|
||||
type AbstractRendererEvent = {
|
||||
@@ -56,7 +63,6 @@ type AbstractRendererEvent = {
|
||||
*/
|
||||
abstract class AbstractRenderer<
|
||||
P extends IRendererParam = {},
|
||||
M extends IAnyObject = {},
|
||||
E extends AbstractRendererEvent = {loop: number}
|
||||
> extends Emitter<E> {
|
||||
|
||||
@@ -65,28 +71,17 @@ abstract class AbstractRenderer<
|
||||
/**
|
||||
* 渲染器参数
|
||||
*/
|
||||
abstract param: Partial<M>;
|
||||
public rendererParameterOption: IParameterOption<IDefaultType<P["renderer"], {}>> = {} as any;
|
||||
public pointsParameterOption: IParameterOption<IDefaultType<P["points"], {}>> = {} as any;
|
||||
public cubeParameterOption: IParameterOption<IDefaultType<P["cube"], {}>> = {} as any;
|
||||
|
||||
/**
|
||||
* 类型断言
|
||||
* 渲染器参数
|
||||
*/
|
||||
get isRenderer() {
|
||||
return true;
|
||||
}
|
||||
public rendererParameter: IParameterValue<IDefaultType<P["renderer"], {}>> = {} as any;
|
||||
|
||||
/**
|
||||
* 断言对象是否是渲染器
|
||||
*/
|
||||
public static isRenderer(render: any): render is AbstractRenderer {
|
||||
if (render instanceof Object) {
|
||||
return !!(render as AbstractRenderer).isRenderer;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* @function start
|
||||
* @function clean
|
||||
* 开始一次数据更新 \
|
||||
* 此函数将清除固定对象的绘制状态 \
|
||||
* 在每次数据更新前调用 \
|
||||
@@ -103,7 +98,9 @@ abstract class AbstractRenderer<
|
||||
* @param id 使用的标识符
|
||||
* @param position 做标集合
|
||||
*/
|
||||
abstract points(id: ObjectID, position?: ObjectData, param?: Readonly<P["points"] & ICommonParam>): this;
|
||||
abstract points(id: ObjectID, position?: ObjectData, param?:
|
||||
Readonly<IParameterValue<IDefaultType<P["points"], {}>>>
|
||||
): this;
|
||||
|
||||
/**
|
||||
* @function cube 绘制立方体
|
||||
@@ -113,7 +110,9 @@ abstract class AbstractRenderer<
|
||||
*
|
||||
* 注意: 这里的半径指的是立方体重心与立方体任意一面几何中心的距离
|
||||
*/
|
||||
abstract cube(id: ObjectID, position?: ObjectData, param?: Readonly<P["cube"] & ICommonParam>): this;
|
||||
abstract cube(id: ObjectID, position?: ObjectData, radius?: ObjectData, param?:
|
||||
Readonly<IParameterValue<IDefaultType<P["cube"], {}>>>
|
||||
): this;
|
||||
}
|
||||
|
||||
export default AbstractRenderer;
|
||||
|
||||
Reference in New Issue
Block a user