@realsee/dnalogel
Version:
84 lines (83 loc) • 3.42 kB
TypeScript
import { TagComputer } from './TagComputer';
import type { Tag, TagInstance, TagGLTFObject, TagObjectGroup, TagGLTFObjectGroup, ImagePlaneGroup, TagContentType, ElementRenderer, TagRendererMap, TagContentTypeMapping } from '../typings';
import type { TemporaryState } from '../typings';
import type { Object3D } from 'three';
import TagContainerSvelte from '../Components/TagContainer.svelte';
import type { Five } from '@realsee/five';
export declare abstract class TagRender extends TagComputer {
rendererMap: TagRendererMap;
contentTypeMap: TagContentTypeMapping;
protected group: TagObjectGroup;
protected imagePlaneGroup: ImagePlaneGroup;
protected gltfObjectGroup: TagGLTFObjectGroup;
/** 维护一个可用模型表,用于快速删除不应该在场景中的模型 */
protected enabledModelTagSet: Set<string | number>;
/** 临时状态 */
protected temporaryState: TemporaryState;
/** 点标签 */
protected TagContainerSvelte?: TagContainerSvelte;
constructor(five: Five);
/**
* @description: 设置 contentType 的渲染器
* @param {string} contentType
* 如果是 `TagContentType` 中的类型,将会覆盖掉插件内部默认的渲染器,
* 如果是其他任意 str
* ing 如:'Foo',则可以将类似 `{id: 1, contentType: 'Foo', position: [0,0,0]}` 的 tag 交给插件渲染
* @param config.usePoint 是否需要标签点, 默认为 false
* @note 优先级低于 tag.element
*/
registerRenderer(contentType: string, renderer: ElementRenderer, config?: {
usePoint?: boolean;
}): void;
bindRenderer(contentType: string, builtInRenderer: TagContentType): void;
clearTags(): void;
/**
* @description: 更新所有标签
*/
protected updateRenderAllTags(): void;
protected updateRenderVideoPlane(): void;
/**
* @description: 渲染图片贴片
*/
protected updateRenderImagePlane(): void;
/**
* @description: 渲染3D贴片
*/
protected updateRender3DDomTag(): void;
/** 更新所有模型标签
*
* 1. 移除不应该在场景中的模型
* 2. 更新模型的可见性
*
* FIXME: 有性能问题,但是之前的逻辑都是这么写,暂时先这样吧
*/
protected updateRenderModelTag(): void;
protected updateTagModelVisible(): void;
/** 更新标签中多媒体面片的位置
* @param tag 标签
* @param model 模型
*/
protected updateTagCss3DObjectMatrix<S extends 'Model' | 'Plane' = 'Model'>(tag: TagInstance<TagContentType, S>, model: Object3D): void;
/** 添加模型标签 */
protected addMediaModelTag(tags: Tag[]): Promise<void>;
/**
* @description: 一个点的标签
*/
protected setPointTagPosition(): void;
/**
* @description: 渲染单个点的标签
*/
protected updateRenderPointTag(): void;
protected updatePointTagPosition(): void;
protected updateTagContainerVisible(): void;
protected disposeAllCSS3DContainer(): void;
/**
* @description: 检查并销毁不用的3D贴片
*/
protected clearUnusedPanelTag(): void;
/** 加载外部模型 */
protected loadModel: (tag: TagInstance<'Model', 'Model'> | TagInstance<'MediaModel', 'Model'>) => Promise<TagGLTFObject>;
protected updateDomView(params?: {
withAnimation?: boolean;
}): void;
}