import { ConfigEntity, PositionSchema } from '../../../common'; import { Adsorber } from '../../utils'; export interface Snapline { id: string; // id color: string // 颜色 strokeWidth: number // 宽度 start: PositionSchema // 开始位置 end?: PositionSchema // 结束位置, 如果是水平或垂直,则不需要提供 oldStart?: PositionSchema horizontal?: boolean // 水平的 vertical?: boolean // 垂直的 isMove?: boolean; } export interface SnaplineConfigEntityData { lines: Snapline[] originlineVisible: boolean // 是否显示原点线 } /** * 参考线配置 */ export class SnaplineConfigEntity extends ConfigEntity { static type = 'SnaplineConfigEntity'; getDefaultConfig(): SnaplineConfigEntityData { return { lines: [], originlineVisible: true, }; } toDataJSON(): SnaplineConfigEntityData { return { ...this.config, lines: this.config.lines.filter(s => !s.isMove), }; } getAdsoberLines(): Adsorber.Line[] { const originLines = this.config.originlineVisible ? [ {pos: 0, type: Adsorber.Direction.HORIZONTAL}, // 垂直线 {pos: 0, type: Adsorber.Direction.VERTICAL}, // 水平线 ] : []; const customLines = this.config.lines.filter(l => l.vertical || l.horizontal) .map(l => l.vertical ? ({pos: l.start.y, type: Adsorber.Direction.VERTICAL}) : ({pos: l.start.x, type: Adsorber.Direction.HORIZONTAL} )); return originLines.concat(customLines); } }