/// import { EventType, Handler } from 'mitt'; import { Canvas } from './canvas'; import { Options } from './options'; import { calcTextDrawRect, calcTextLines, calcTextRect, facePen, getWords, LockState, Pen, renderPenRaw, IValue, setElemPosition } from './pen'; import { Point } from './point'; import { EditAction, register, registerAnchors, registerCanvasDraw, TopologyData, TopologyStore } from './store'; import { Padding } from './utils'; import { Rect } from './rect'; import { Event } from './event'; import { ViewMap } from './map'; import { MqttClient } from 'mqtt'; export declare class Topology { store: TopologyStore; canvas: Canvas; websocket: WebSocket; mqttClient: MqttClient; socketFn: (e: string, topic: string) => boolean; events: Record void>; map: ViewMap; mapTimer: NodeJS.Timeout; constructor(parent: string | HTMLElement, opts?: Options); facePen: typeof facePen; getWords: typeof getWords; calcTextLines: typeof calcTextLines; calcTextRect: typeof calcTextRect; calcTextDrawRect: typeof calcTextDrawRect; /** * @deprecated 改用 beforeAddPens */ get beforeAddPen(): (pen: Pen) => boolean; /** * @deprecated 改用 beforeAddPens */ set beforeAddPen(fn: (pen: Pen) => boolean); get beforeAddPens(): (pens: Pen[]) => Promise; set beforeAddPens(fn: (pens: Pen[]) => Promise); get beforeAddAnchor(): (pen: Pen, anchor: Point) => Promise; set beforeAddAnchor(fn: (pen: Pen, anchor: Point) => Promise); get beforeRemovePens(): (pens: Pen[]) => Promise; set beforeRemovePens(fn: (pens: Pen[]) => Promise); get beforeRemoveAnchor(): (pen: Pen, anchor: Point) => Promise; set beforeRemoveAnchor(fn: (pen: Pen, anchor: Point) => Promise); setOptions(opts?: Options): void; getOptions(): Options; setDatabyOptions(options?: Options): void; private init; initEventFns(): void; doSendDataEvent(value: any): void; resize(width?: number, height?: number): void; /** * * @param emit 是否发送消息 */ addPen(pen: Pen, history?: boolean, emit?: boolean): Promise; addPens(pens: Pen[], history?: boolean): Promise; render(patchFlags?: boolean | number): void; setBackgroundImage(url: string): void; setBackgroundColor(color?: string): void; setGrid({ grid, gridColor, gridSize, gridRotate, }?: { grid?: boolean; gridColor?: string; gridSize?: number; gridRotate?: number; }): void; setRule({ rule, ruleColor, }?: { rule?: boolean; ruleColor?: string; }): void; open(data?: TopologyData): void; initBindDatas(): void; connectSocket(): void; /** * open 后执行初始化 Js ,每个图纸可配置一个初始化 js */ private doInitJS; drawLine(lineName?: string): void; drawingPencil(): void; stopPencil(): void; lock(lock: LockState): void; finishDrawLine(end?: boolean): Promise; finishPencil(): Promise; updateLineType(pen: Pen, lineName: string): void; addDrawLineFn(fnName: string, fn: Function): void; removeDrawLineFn(fnName: string): void; showMagnifier(): void; hideMagnifier(): void; toggleMagnifier(): void; /** * 擦除画布,释放 store 上的 pens * @param render 是否重绘 */ clear(render?: boolean): void; emit(eventType: EventType, data: unknown): void; on(eventType: EventType, handler: Handler): this; off(eventType: EventType, handler: Handler): this; register: typeof register; registerCanvasDraw: typeof registerCanvasDraw; registerAnchors: typeof registerAnchors; registerMoveDock(dock: (store: TopologyStore, rect: Rect, pens: Pen[], offset: Point) => { xDock: Point; yDock: Point; }): void; /** * 参数同方法 registerMoveDock ,最后一个参数由 offset 偏移修改成了当前 resize 的点 */ registerResizeDock(dock: (store: TopologyStore, rect: Rect, pens: Pen[], resizeIndex: number) => { xDock: Point; yDock: Point; }): void; find(id: string): Pen[]; find(tag: string): Pen[]; /** * 使用 Array.find 找到即返回,否则返回 undefined */ findOne(id: string): Pen | undefined; findOne(tag: string): Pen | undefined; getPenRect(pen: Pen): { x: number; y: number; width: number; height: number; }; setPenRect(pen: Pen, rect: Rect, render?: boolean): void; startAnimate(idOrTagOrPens?: string | Pen[]): void; pauseAnimate(idOrTagOrPens?: string | Pen[]): void; stopAnimate(idOrTagOrPens?: string | Pen[]): void; startVideo(idOrTagOrPens?: string | Pen[]): void; pauseVideo(idOrTagOrPens?: string | Pen[]): void; stopVideo(idOrTagOrPens?: string | Pen[]): void; calcAnimateDuration(pen: Pen): number; /** * 组合 * @param pens 组合的画笔们 * @param showChild 组合后展示第几个孩子 */ combine(pens?: Pen[], showChild?: number): void; uncombine(pen?: Pen): void; isCombine(pen: Pen): boolean; active(pens: Pen[], emit?: boolean): void; inactive(): void; /** * 删除画笔 * @param pens 需要删除的画笔们 * @param canDelLocked 是否删除已经锁住的画笔 */ delete(pens?: Pen[], canDelLocked?: boolean, history?: boolean): void; scale(scale: number, center?: { x: number; y: number; }): void; translate(x: number, y: number): void; translatePens(pens: Pen[], x: number, y: number): void; getParent(pen: Pen, root?: boolean): Pen; data(): TopologyData; copy(pens?: Pen[]): void; cut(pens?: Pen[]): void; paste(): void; undo(): void; redo(): void; listenSocket(): boolean; connectWebsocket(websocket?: string): void; closeWebsocket(): void; connectMqtt(params?: { mqtt: string; mqttTopics: string; mqttOptions?: { clientId?: string; username?: string; password?: string; customClientId?: boolean; }; }): void; closeMqtt(): void; httpTimer: NodeJS.Timeout; connectHttp(): void; sendDatabyHttp(data: string): Promise; closeHttp(): void; socketCallback(message: string, topic?: string): void; setDatas(datas: { dataId: string; value: any; }[], { render, doEvent, history, }?: { render?: boolean; doEvent?: boolean; history?: boolean; }): void; setValue(data: IValue, { render, doEvent, history, }?: { render?: boolean; doEvent?: boolean; history?: boolean; }): void; /** * @deprecated 改用 setValue */ _setValue(data: IValue, history?: boolean): void; pushHistory(action: EditAction): void; showInput(pen: Pen, rect?: Rect): void; hideInput(): void; clearDropdownList(): void; private onEvent; private doEvent; pushChildren(parent: Pen, children: Pen[]): void; renderPenRaw: typeof renderPenRaw; toPng(padding?: Padding, callback?: BlobCallback, containBkImg?: boolean): string; /** * 下载 png * @param name 传入参数自带文件后缀名 例如:'test.png' * @param padding 上右下左的内边距 */ downloadPng(name?: string, padding?: Padding): void; getRect(pens?: Pen[]): Rect; /** * 放大到屏幕尺寸,并居中 * @param fit true,填满但完整展示;false,填满,但长边可能截取(即显示不完整) */ fitView(fit?: boolean, viewPadding?: Padding): void; centerView(): void; /** * 画布是否有 画笔 * RuleLine 不算 */ hasView(): boolean; private getViewCenter; /** * 大小相同 * @param pens 画笔们 */ beSameByFirst(pens?: Pen[], attribute?: string): void; /** * 格式刷(样式相同,大小无需一致。) * @param pens 画笔们 */ formatPainterByFirst(pens?: Pen[]): void; alignNodes(align: string, pens?: Pen[], rect?: Rect): void; /** * 对齐画笔,基于第一个画笔 * @param align 左对齐,右对齐,上对齐,下对齐,居中对齐 * @param pens */ alignNodesByFirst(align: string, pens?: Pen[]): void; /** * 将画笔参照 rect 进行 align 对齐 * @param align 左对齐,右对齐,上对齐,下对齐,居中对齐 * @param pen 当前需要对齐的画笔 * @param rect 参照矩形 * @returns */ private alignPen; /** * 水平或垂直方向的均分 * @param direction 方向,width 说明水平方向间距相同 * @param pens 节点们,默认全部的 * @param distance 总的宽 or 高 */ private spaceBetweenByDirection; spaceBetween(pens?: Pen[], width?: number): void; spaceBetweenColumn(pens?: Pen[], height?: number): void; layout(pens?: Pen[], width?: number, space?: number): void; gotoView(pen: Pen): void; showMap(): void; hideMap(): void; onSizeUpdate(): void; toggleAnchorMode(): void; addAnchorHand(): void; removeAnchorHand(): void; toggleAnchorHand(): void; /** * 将该画笔置顶,即放到数组最后,最后绘制即在顶部 * @param pen pen 置顶的画笔 * @param pens 画笔们,注意 pen 必须在该数组内才有效 */ top(pen: Pen, pens?: Pen[]): void; /** * 若本次改变的画笔存在图片,并且在上层 or 下层,需要擦除上层 or 下层 * 子节点中包含图片,也需要重绘 * @param pens 本次改变的 pens */ initImageCanvas(pens: Pen[]): void; /** * 该画笔置底,即放到数组最前,最后绘制即在底部 * @param pens 画笔们,注意 pen 必须在该数组内才有效 */ bottom(pen: Pen, pens?: Pen[]): void; /** * 该画笔上移,即把该画笔在数组中的位置向后移动一个 * @param pens 画笔们,注意 pen 必须在该数组内才有效 */ up(pen: Pen, pens?: Pen[]): void; /** * 该画笔下移,即把该画笔在该数组中的位置前移一个 * @param pens 画笔们,注意 pen 必须在该数组内才有效 */ down(pen: Pen, pens?: Pen[]): void; setLayer(pen: Pen, toIndex: number, pens?: Pen[]): void; changePenId(oldId: string, newId: string): void; /** * 得到与当前节点连接的线 * @param node 节点,非连线 * @param type 类型,全部的连接线/入线/出线 */ getLines(node: Pen, type?: 'all' | 'in' | 'out'): Pen[]; /** * 得到当前节点的下一个节点,即出口节点数组 * 得到当前连线的出口节点 * @param pen 节点或连线 */ nextNode(pen: Pen): Pen[]; /** * 得到当前节点的上一个节点,即入口节点数组 * 得到当前连线的入口节点 * @param pen 节点或连线 */ previousNode(pen: Pen): Pen[]; /** * 获取节点所有的下一个连接关系 * @param pen * */ getNext(pen: Pen): any[]; /** * 为画布添加锚点 * @param pen 画笔 * @param anchor 待添加锚点 * @param index 连线类型 添加锚点到哪个位置 */ addAnchor(pen: Pen, anchor: Point, index?: number): void; /** * * @param from 连接节点 * @param fromAnchor 连接节点锚点 * @param to 被连接节点 * @param toAnchor 被连接节点锚点 */ connectLine(from: Pen, to: Pen, fromAnchor?: Point, toAnchor?: Point, render?: boolean): Pen; /** * 生成一个拷贝组合后的 画笔数组(组合图形),不影响原画布画笔,常用作 二次复用的组件 * @param pens 画笔数组 * @param showChild 是否作为状态复用(参考 combine showChild) * @returns 组合图形 */ toComponent(pens?: Pen[], showChild?: number): Pen[]; setVisible(pen: Pen, visible: boolean, render?: boolean): void; clearHover(): void; closeSocket(): void; setElemPosition: typeof setElemPosition; destroy(onlyData?: boolean): void; }