diff --git a/__test__/FeedingToolPath/FeedingToolPath.test.ts b/__test__/FeedingToolPath/FeedingToolPath.test.ts index ba05d49ff..b5b1a1203 100644 --- a/__test__/FeedingToolPath/FeedingToolPath.test.ts +++ b/__test__/FeedingToolPath/FeedingToolPath.test.ts @@ -19,7 +19,7 @@ function testPathCount(br: Board, count?: number) expect(cu.Length).toMatchSnapshot("曲线长度"); } } -let feedUtil = new FeedingToolPath(); +let feedUtil = FeedingToolPath.GetInstance(); test("通孔造型测试", () => { diff --git a/__test__/FeedingToolPath/__snapshots__/FeedingToolPath.test.ts.snap b/__test__/FeedingToolPath/__snapshots__/FeedingToolPath.test.ts.snap index ceb16aa68..6589e076d 100644 --- a/__test__/FeedingToolPath/__snapshots__/FeedingToolPath.test.ts.snap +++ b/__test__/FeedingToolPath/__snapshots__/FeedingToolPath.test.ts.snap @@ -48,8 +48,6 @@ exports[`复杂极限刀半径: 曲线长度 5`] = `2927.3167299028455`; exports[`复杂极限刀半径: 曲线长度 6`] = `3278.917934988776`; -exports[`复杂极限刀半径: 曲线长度 7`] = `3278.917934988776`; - exports[`复杂极限刀半径: 走刀数量 1`] = `4`; exports[`复杂造型测试: 曲线长度 1`] = `2402.511185283596`; diff --git a/src/Add-on/Array.ts b/src/Add-on/Array.ts index 5b91bb561..6e1b7d0b9 100644 --- a/src/Add-on/Array.ts +++ b/src/Add-on/Array.ts @@ -1,20 +1,20 @@ import * as THREE from 'three'; -import { Box3, Vector3, Matrix4 } from 'three'; +import { Box3, Matrix4, Vector3 } from 'three'; import { observable } from '../../node_modules/mobx'; import { app } from '../ApplicationServices/Application'; +import { CheckObjectType, CheckoutValid } from '../Common/CheckoutVaildValue'; +import { Vec3DTo2D } from '../Common/CurveUtils'; +import { DataAdapter } from '../Common/DataAdapter'; +import { Singleton } from '../Common/Singleton'; import { Entity } from '../DatabaseServices/Entity'; +import { Polyline } from '../DatabaseServices/Polyline'; import { Command } from '../Editor/CommandMachine'; +import { JigUtils } from '../Editor/JigUtils'; import { PromptStatus } from '../Editor/PromptResult'; import { SelectSet } from '../Editor/SelectSet'; import { MoveMatrix, rotatePoint } from '../Geometry/GeUtils'; import { ArrayModal } from '../UI/Components/Modal/ArrayModal'; -import { ModalState, ModalPosition } from '../UI/Components/Modal/ModalsManage'; -import { Polyline } from '../DatabaseServices/Polyline'; -import { JigUtils } from '../Editor/JigUtils'; -import { Vec3DTo2D } from '../Common/CurveUtils'; -import { DataAdapter } from '../Common/DataAdapter'; -import { Singleton } from '../Common/Singleton'; -import { CheckObjectType, CheckoutValid } from '../Common/CheckoutVaildValue'; +import { ModalPosition, ModalState } from '../UI/Components/Modal/ModalsManage'; import { AppToaster } from '../UI/Components/Toaster'; export enum ArrayType @@ -55,7 +55,7 @@ export interface ArrayOptioins method: CirArrMethod; isCorrect: boolean; } -export class ArrayStore +export class ArrayStore extends Singleton { protected m_UiOption; @observable m_Option: ArrayOptioins = { @@ -106,7 +106,7 @@ export class ArrayStore } export class Command_Array implements Command { - arrayStore = Singleton.GetInstance(ArrayStore); + arrayStore = ArrayStore.GetInstance(); async exec() { diff --git a/src/Add-on/CommandFeeding.ts b/src/Add-on/CommandFeeding.ts index b1495a3a3..d3e7aa4e7 100644 --- a/src/Add-on/CommandFeeding.ts +++ b/src/Add-on/CommandFeeding.ts @@ -25,7 +25,7 @@ export class FeedingCommand implements Command .filter((br: Board) => br.BoardModeling.length > 0) as Board[]; if (brs.length > 0) { - let feedingTool = Singleton.GetInstance(FeedingToolPath); + let feedingTool = FeedingToolPath.GetInstance(); let retCus = brs.map(br => feedingTool.CalcPath(br)); diff --git a/src/Add-on/DrawBoard/DrawBoardTool.ts b/src/Add-on/DrawBoard/DrawBoardTool.ts index 2f022de3b..9f8d46e8a 100644 --- a/src/Add-on/DrawBoard/DrawBoardTool.ts +++ b/src/Add-on/DrawBoard/DrawBoardTool.ts @@ -22,15 +22,15 @@ export abstract class DrawBoardTool implements Command switch (this.drawType) { case BoardType.Layer: - this.store = Singleton.GetInstance(LayerBoardStore); + this.store = LayerBoardStore.GetInstance(); this.modalType = BoardModalType.Ly; break; case BoardType.Vertical: - this.store = Singleton.GetInstance(VerticalBoardStore); + this.store = VerticalBoardStore.GetInstance(); this.modalType = BoardModalType.Ve; break; case BoardType.Behind: - this.store = Singleton.GetInstance(BehindBoardStore); + this.store = BehindBoardStore.GetInstance(); this.modalType = BoardModalType.Be; } app.m_Editor.m_ModalManage.RenderModeless( diff --git a/src/Add-on/DrawBoard/DrawClosingStrip.ts b/src/Add-on/DrawBoard/DrawClosingStrip.ts index 9713e0a49..5da2b821d 100644 --- a/src/Add-on/DrawBoard/DrawClosingStrip.ts +++ b/src/Add-on/DrawBoard/DrawClosingStrip.ts @@ -1,6 +1,5 @@ import { Matrix4, Vector3 } from 'three'; import { app } from '../../ApplicationServices/Application'; -import { Singleton } from '../../Common/Singleton'; import { Board, BoardType } from '../../DatabaseServices/Board'; import { Command } from '../../Editor/CommandMachine'; import { PromptStatus } from '../../Editor/PromptResult'; @@ -27,7 +26,7 @@ export class DrawClosingStrip implements Command if (boards.length > 0) { - this.store = Singleton.GetInstance(ClosingStripStore); + this.store = ClosingStripStore.GetInstance(); app.m_Editor.m_ModalManage.RenderModeless(BoardModal, ModalPosition.Center, { store: this.store, type: BoardModalType.Skt }); let state = await app.m_Editor.m_ModalManage.Wait(); diff --git a/src/Add-on/DrawBoard/DrawDoor.ts b/src/Add-on/DrawBoard/DrawDoor.ts index 0e70ad51c..94d1f967e 100644 --- a/src/Add-on/DrawBoard/DrawDoor.ts +++ b/src/Add-on/DrawBoard/DrawDoor.ts @@ -1,15 +1,14 @@ -import { Command } from "../../Editor/CommandMachine"; import { app } from "../../ApplicationServices/Application"; +import { Command } from "../../Editor/CommandMachine"; import { DoorModal } from "../../UI/Components/Board/DoorModal"; -import { DoorStore } from "../../UI/Store/BoardStore"; -import { Singleton } from "../../Common/Singleton"; import { ModalPosition, ModalState } from "../../UI/Components/Modal/ModalsManage"; +import { DoorStore } from "../../UI/Store/BoardStore"; export class DrawDoor implements Command { async exec() { - let store = Singleton.GetInstance(DoorStore) + let store = DoorStore.GetInstance(); app.m_Editor.m_ModalManage.RenderModeless(DoorModal, ModalPosition.Center, { store }); let state = await app.m_Editor.m_ModalManage.Wait(); diff --git a/src/Add-on/DrawBoard/DrawLeftRightBoard.ts b/src/Add-on/DrawBoard/DrawLeftRightBoard.ts index 0c65988c3..6df5176f8 100644 --- a/src/Add-on/DrawBoard/DrawLeftRightBoard.ts +++ b/src/Add-on/DrawBoard/DrawLeftRightBoard.ts @@ -15,7 +15,7 @@ export class DrawLeftRight implements Command { async exec() { - let store = Singleton.GetInstance(SideBoardStore); + let store = SideBoardStore.GetInstance(); app.m_Editor.m_ModalManage.RenderModeless(BoardModal, ModalPosition.Center, { store, type: BoardModalType.LR }); diff --git a/src/Add-on/DrawBoard/DrawSingleBoard.ts b/src/Add-on/DrawBoard/DrawSingleBoard.ts index 0d6716fb8..792ac24d4 100644 --- a/src/Add-on/DrawBoard/DrawSingleBoard.ts +++ b/src/Add-on/DrawBoard/DrawSingleBoard.ts @@ -1,6 +1,5 @@ import { Math } from 'three'; import { app } from '../../ApplicationServices/Application'; -import { Singleton } from '../../Common/Singleton'; import { Board } from '../../DatabaseServices/Board'; import { Command } from '../../Editor/CommandMachine'; import { JigUtils } from '../../Editor/JigUtils'; @@ -14,7 +13,7 @@ export class DrawSingleBoard implements Command { async exec() { - let store = Singleton.GetInstance(SingleBoardStore); + let store = SingleBoardStore.GetInstance(); app.m_Editor.m_ModalManage.RenderModeless(BoardModal, ModalPosition.Center, { store, type: BoardModalType.Sg }); app.m_Editor.m_ModalManage.Callback = async () => diff --git a/src/Add-on/DrawBoard/DrawSpecialShapedBoard.ts b/src/Add-on/DrawBoard/DrawSpecialShapedBoard.ts index fdc7ee495..c9dcc1fb5 100644 --- a/src/Add-on/DrawBoard/DrawSpecialShapedBoard.ts +++ b/src/Add-on/DrawBoard/DrawSpecialShapedBoard.ts @@ -1,6 +1,5 @@ import { Matrix4, Vector3 } from "three"; import { app } from "../../ApplicationServices/Application"; -import { Singleton } from "../../Common/Singleton"; import { FixedNotZero } from "../../Common/Utils"; import { Arc } from "../../DatabaseServices/Arc"; import { Board, BoardType } from "../../DatabaseServices/Board"; @@ -32,7 +31,7 @@ export class DrawSpecialShapedBoard implements Command if (shape) { shape = shape.Clone(); - const store = Singleton.GetInstance(SpecialShapeStore); + const store = SpecialShapeStore.GetInstance(); let cu = shape.Outline.Curve; let cuOcs = cu.OCS; diff --git a/src/Add-on/DrawBoard/DrawTopBottomBoard.ts b/src/Add-on/DrawBoard/DrawTopBottomBoard.ts index 225fee0a6..bda57b66c 100644 --- a/src/Add-on/DrawBoard/DrawTopBottomBoard.ts +++ b/src/Add-on/DrawBoard/DrawTopBottomBoard.ts @@ -1,7 +1,7 @@ import { Vector3 } from 'three'; import { app } from '../../ApplicationServices/Application'; -import { Singleton } from '../../Common/Singleton'; +import { log } from '../../Common/Utils'; import { Board, BoardType } from '../../DatabaseServices/Board'; import { Command } from '../../Editor/CommandMachine'; import { MoveMatrix } from '../../Geometry/GeUtils'; @@ -11,7 +11,6 @@ import { BoardModal, BoardModalType } from '../../UI/Components/Board/BoardModal import { ModalPosition, ModalState } from '../../UI/Components/Modal/ModalsManage'; import { BoardData, ComposingType, PXLFaceType, TBBoardOption } from '../../UI/Store/BoardInterface'; import { TopBottomBoardStore } from '../../UI/Store/BoardStore'; -import { log } from '../../Common/Utils'; export class DrawTopBottomBoard implements Command { @@ -26,7 +25,7 @@ export class DrawTopBottomBoard implements Command return; } - this.store = Singleton.GetInstance(TopBottomBoardStore); + this.store = TopBottomBoardStore.GetInstance(); app.m_Editor.m_ModalManage.RenderModal(BoardModal, ModalPosition.Center, { store: this.store, type: BoardModalType.TB }); let state = await app.m_Editor.m_ModalManage.Wait(); diff --git a/src/Add-on/DrawDrilling/DrawDrilling.ts b/src/Add-on/DrawDrilling/DrawDrilling.ts index f5c025a85..602c43eb6 100644 --- a/src/Add-on/DrawDrilling/DrawDrilling.ts +++ b/src/Add-on/DrawDrilling/DrawDrilling.ts @@ -3,7 +3,6 @@ import { Board } from "../../DatabaseServices/Board"; import { Command } from "../../Editor/CommandMachine"; import { PromptStatus } from "../../Editor/PromptResult"; import { DrawDrillingTool } from "./DrawDrillingTool"; -import { Singleton } from "../../Common/Singleton"; export class DrawDrilling implements Command @@ -19,7 +18,7 @@ export class DrawDrilling implements Command let brs = brsRes.SelectSet.SelectEntityList.filter(e => e instanceof Board) as Board[]; if (brs.length >= 2) { - Singleton.GetInstance(DrawDrillingTool).StartGangDrill(brs); + DrawDrillingTool.GetInstance().StartGangDrill(brs); } else { diff --git a/src/Add-on/DrawDrilling/DrawDrillingTool.ts b/src/Add-on/DrawDrilling/DrawDrillingTool.ts index 03e4bc84c..91e0ce317 100644 --- a/src/Add-on/DrawDrilling/DrawDrillingTool.ts +++ b/src/Add-on/DrawDrilling/DrawDrillingTool.ts @@ -13,7 +13,7 @@ import { DrillingOption, SpacingType } from "../../UI/Components/Board/drillInte import { PXLFaceType } from "../../UI/Store/BoardInterface"; import { DrillStore } from "../../UI/Store/DrillStore"; -export class DrawDrillingTool +export class DrawDrillingTool extends Singleton { private m_MoveDistList: number[] = []; private m_Face: Face; @@ -22,7 +22,7 @@ export class DrawDrillingTool private GetDrillingConfig() { //TODO:完善用户配置类,暂用store得数据进行测试 - return Singleton.GetInstance(DrillStore).rules; + return DrillStore.GetInstance().rules; } private GetRuleByFace(f: Face): DrillingOption { diff --git a/src/Add-on/DrawDrilling/DrillConfig.ts b/src/Add-on/DrawDrilling/DrillConfig.ts index f94a969ec..2246500fc 100644 --- a/src/Add-on/DrawDrilling/DrillConfig.ts +++ b/src/Add-on/DrawDrilling/DrillConfig.ts @@ -1,15 +1,14 @@ -import { Command } from '../../Editor/CommandMachine'; import { app } from '../../ApplicationServices/Application'; +import { Command } from '../../Editor/CommandMachine'; import { DrillModal } from '../../UI/Components/Board/GangDrillModal'; import { ModalPosition } from '../../UI/Components/Modal/ModalsManage'; -import { Singleton } from '../../Common/Singleton'; import { DrillStore } from '../../UI/Store/DrillStore'; export class DrillConfig implements Command { async exec() { - let store = Singleton.GetInstance(DrillStore); + let store = DrillStore.GetInstance(); app.m_Editor.m_ModalManage.RenderModal(DrillModal, ModalPosition.Center, { store }); } } diff --git a/src/Add-on/DrawText.ts b/src/Add-on/DrawText.ts index cbf3c41b4..e28f307dd 100644 --- a/src/Add-on/DrawText.ts +++ b/src/Add-on/DrawText.ts @@ -31,7 +31,7 @@ export class DrawText implements Command }); if (hRes.Status !== PromptStatus.Cancel && hRes.Value !== undefined) { - let text = Singleton.GetInstance(TextArea); + let text = TextArea.GetInstance(); text.StartDrawText(startPoint, height, hRes.Value, ""); } } diff --git a/src/Add-on/Insert.ts b/src/Add-on/Insert.ts index 16f817239..bfd8e7d54 100644 --- a/src/Add-on/Insert.ts +++ b/src/Add-on/Insert.ts @@ -17,7 +17,7 @@ export class Command_Insert implements Command { async exec() { - let fileServer = Singleton.GetInstance(FileServer); + let fileServer = FileServer.GetInstance(); let files = await fileServer.ReadFileList(); let finfo: FileInfo; diff --git a/src/Add-on/Open.ts b/src/Add-on/Open.ts index 30ef76a62..3737e7972 100644 --- a/src/Add-on/Open.ts +++ b/src/Add-on/Open.ts @@ -23,7 +23,7 @@ export class Open implements Command cadF.database = app.m_Database; cadF.Data = file; app.m_Database.FileRead(cadF); - Singleton.GetInstance(RightPanelStore).lightStore.InitScene(); + RightPanelStore.GetInstance().lightStore.InitScene(); } } } diff --git a/src/Add-on/Save.ts b/src/Add-on/Save.ts index 967765d2a..6006c2093 100644 --- a/src/Add-on/Save.ts +++ b/src/Add-on/Save.ts @@ -1,5 +1,4 @@ import { app } from '../ApplicationServices/Application'; -import { Singleton } from '../Common/Singleton'; import { formateDate } from '../Common/Utils'; import { FileInfo, FileServer } from '../DatabaseServices/FileServer'; import { Command } from '../Editor/CommandMachine'; @@ -16,7 +15,7 @@ export class Save implements Command app.m_Viewer.OnSize(); app.m_Viewer.Render(); - let fileServer = Singleton.GetInstance(FileServer); + let fileServer = FileServer.GetInstance(); let fileInfo: FileInfo; if (fileServer.m_CurFileId) diff --git a/src/Add-on/Wblock.ts b/src/Add-on/Wblock.ts index ffd7d9a25..5c88cef3a 100644 --- a/src/Add-on/Wblock.ts +++ b/src/Add-on/Wblock.ts @@ -1,5 +1,4 @@ import { app } from "../ApplicationServices/Application"; -import { Singleton } from "../Common/Singleton"; import { formateDate } from "../Common/Utils"; import { Database } from "../DatabaseServices/Database"; import { Entity } from "../DatabaseServices/Entity"; @@ -26,7 +25,7 @@ export class Command_Wblock implements Command for (let en of cloneEns) en.ApplyMatrix(moveM); - let fileServer = Singleton.GetInstance(FileServer); + let fileServer = FileServer.GetInstance(); let fileInfo = await fileServer.CreateFile(); //更新最后修改时间 diff --git a/src/Common/Singleton.ts b/src/Common/Singleton.ts index 14d49c061..f23004f93 100644 --- a/src/Common/Singleton.ts +++ b/src/Common/Singleton.ts @@ -2,47 +2,20 @@ /** * 构造单例类的静态类. * # Example: - * class A(){}; - * + * class A extends Singleton(){}; * //获得单例 - * let a = Singleton.GetInstance(A); - * //销毁单例对象 - * Singleton.DestroyInstance(A); + * let a = A.GetInstance(); * @class Singleton */ export class Singleton { - static singletonMap = new Map(); - - /** - * 构建一个单例实例,注意该实例不会被GC回收,如果需要被回收. - * - * @static - * @template T - * @param {{ new(): T; }} Class 类 - * @returns {T} - * @memberof Singleton - */ - static GetInstance(Class: { new(): T; }): T - { - let instance = this.singletonMap.get(Class); - if (!instance) - { - instance = new Class(); - this.singletonMap.set(Class, instance); - } - return instance; - } - - /** - * 将类的单例实例从缓存中清除,如果该单例没有被引用,那么将被GC - * @static - * @template T - * @param {{ new(): T; }} Class - * @memberof Singleton - */ - static DestroyInstance(Class: { new(): T; }) + protected constructor() { } + private static __instance__ = undefined; + static GetInstance() { - this.singletonMap.delete(Class); + if (this.__instance__) return this.__instance__; + //@ts-ignore + this.__instance__ = new this.prototype.constructor(); + return this.__instance__; } } diff --git a/src/DatabaseServices/CommandServer.ts b/src/DatabaseServices/CommandServer.ts index fc101cfdf..a755fd114 100644 --- a/src/DatabaseServices/CommandServer.ts +++ b/src/DatabaseServices/CommandServer.ts @@ -1,6 +1,7 @@ -import { ICommand } from "../UI/Components/CommandPanel/CommandList"; -import { IndexedDbStore, StoreName } from "../IndexedDb/IndexedDbStore"; import { toJS } from "mobx"; +import { Singleton } from "../Common/Singleton"; +import { IndexedDbStore, StoreName } from "../IndexedDb/IndexedDbStore"; +import { ICommand } from "../UI/Components/CommandPanel/CommandList"; export interface CommandData { @@ -10,11 +11,8 @@ export interface CommandData * File server * 保存CAD的自定义命令,统一由这里经过CRUD操作 */ -export class CommandServer +export class CommandServer extends Singleton { - constructor() - { - } async UpdateCommandInfo(icommand: ICommand) { let store = await IndexedDbStore.CADStore(); diff --git a/src/DatabaseServices/FileServer.ts b/src/DatabaseServices/FileServer.ts index deba68b68..9cf3702d0 100644 --- a/src/DatabaseServices/FileServer.ts +++ b/src/DatabaseServices/FileServer.ts @@ -1,5 +1,6 @@ import { IndexedDbStore, StoreName } from "../IndexedDb/IndexedDbStore"; import { formateDate } from "../Common/Utils"; +import { Singleton } from "../Common/Singleton"; /** * Store.Data 保存了FileInfo @@ -28,10 +29,11 @@ export interface FileInfo * File server * 保存CAD的文件服务,统一由这里经过文件的CRUD操作 */ -export class FileServer +export class FileServer extends Singleton { constructor() { + super(); this.GetLastOpenId(); } diff --git a/src/DatabaseServices/Text/TextArea.ts b/src/DatabaseServices/Text/TextArea.ts index aeeaf086c..1f5e7bc8c 100644 --- a/src/DatabaseServices/Text/TextArea.ts +++ b/src/DatabaseServices/Text/TextArea.ts @@ -1,14 +1,15 @@ import { Object3D, Vector3 } from 'three'; import { app } from '../../ApplicationServices/Application'; import { KeyBoard } from '../../Common/KeyEnum'; +import { Singleton } from '../../Common/Singleton'; import { GetEntity } from '../../Common/Utils'; +import { commandMachine } from '../../Editor/CommandMachine'; import { DownPanelStore } from '../../UI/Store/DownPanelStore'; import { FontLoader } from './FontLoader'; import { Text } from './Text'; -import { commandMachine } from '../../Editor/CommandMachine'; //这是一个单例类. -export class TextArea +export class TextArea extends Singleton { private m_AreaContiner: HTMLElement;//编辑框容器 private m_EditorElList: Map = new Map(); @@ -20,6 +21,7 @@ export class TextArea private m_EditoringObject: Object3D; //正在编辑的对象 constructor() { + super(); this.m_AreaContiner = document.createElement("div"); this.m_AreaContiner.tabIndex = -1; this.m_AreaContiner.style.cssText = ` diff --git a/src/Editor/CommandRegister.ts b/src/Editor/CommandRegister.ts index e9869d8e2..38c28fc0f 100644 --- a/src/Editor/CommandRegister.ts +++ b/src/Editor/CommandRegister.ts @@ -269,7 +269,7 @@ export function registerCommand() export async function RegistCustomCommand() { let commandList: ICommand[] = []; - let cserver = Singleton.GetInstance(CommandServer); + let cserver = CommandServer.GetInstance(); commandList = await cserver.ReadCommandlist(); for (let i of commandList) commandMachine.RegisterCustomCommand(i.common, i.customize); diff --git a/src/Editor/DbClick/DBClickPolyline.ts b/src/Editor/DbClick/DBClickPolyline.ts index 152be7f3c..172847cb9 100644 --- a/src/Editor/DbClick/DBClickPolyline.ts +++ b/src/Editor/DbClick/DBClickPolyline.ts @@ -2,6 +2,8 @@ import { app } from "../../ApplicationServices/Application"; import { arraySortByNumber } from "../../Common/ArrayExt"; import { curveLinkGroup, Vec3DTo2D } from "../../Common/CurveUtils"; import { KeyWord } from "../../Common/InputState"; +import { Singleton } from "../../Common/Singleton"; +import { log } from "../../Common/Utils"; import { Curve } from "../../DatabaseServices/Curve"; import { Point } from "../../DatabaseServices/Point"; import { Polyline, PolylineProps } from "../../DatabaseServices/Polyline"; @@ -9,14 +11,13 @@ import { Spline } from "../../DatabaseServices/Spline"; import { equaln, equalv3 } from "../../Geometry/GeUtils"; import { JigUtils } from "../JigUtils"; import { PromptStatus } from "../PromptResult"; -import { log } from "../../Common/Utils"; interface IVertex { index: number; point: Point; } -export class DBClickPolyline +export class DBClickPolyline extends Singleton { private entity: Curve; HandlePolyline = async (pl: Polyline) => diff --git a/src/Editor/DbClick/DbClick.ts b/src/Editor/DbClick/DbClick.ts index f581d54ab..1ba190874 100644 --- a/src/Editor/DbClick/DbClick.ts +++ b/src/Editor/DbClick/DbClick.ts @@ -19,7 +19,7 @@ import { commandMachine } from "../CommandMachine"; import { PointPick } from "../PointPick"; import { DBClickPolyline } from "./DBClickPolyline"; -export class DbClickManager +export class DbClickManager extends Singleton { OnDbClick = async () => { @@ -28,7 +28,7 @@ export class DbClickManager if (!pickEnt) return; - let enStore = Singleton.GetInstance(EntityStore); + let enStore = EntityStore.GetInstance(); //如果打开曲线特性框,后续的双击的图元加入属性框进行设置 if (enStore.isWorking) @@ -42,7 +42,7 @@ export class DbClickManager if (pickEnt instanceof Light) { - let rightStore = Singleton.GetInstance(RightPanelStore); + let rightStore = RightPanelStore.GetInstance(); rightStore.m_IsShow = true; rightStore.m_TabId = "scene"; @@ -91,7 +91,7 @@ export class DbClickManager } else if (pickEnt instanceof Text) { - let textarea = Singleton.GetInstance(TextArea); + let textarea = TextArea.GetInstance(); textarea.StartEditorText(pickObj); } else if (pickEnt instanceof Board) @@ -106,7 +106,7 @@ export class DbClickManager else if (pickEnt instanceof Polyline) { commandMachine.CommandStart("_pedit"); - await Singleton.GetInstance(DBClickPolyline).HandlePolyline(pickEnt); + await DBClickPolyline.GetInstance().HandlePolyline(pickEnt); commandMachine.CommandEnd(); } else diff --git a/src/Editor/MouseControls.ts b/src/Editor/MouseControls.ts index 3e0d7c329..fb43e6f7f 100644 --- a/src/Editor/MouseControls.ts +++ b/src/Editor/MouseControls.ts @@ -117,7 +117,7 @@ export class MouseControls onDBClick(e: MouseEvent) { if (app.m_Editor.m_InputState === InputState.None) - Singleton.GetInstance(DbClickManager).OnDbClick() + DbClickManager.GetInstance().OnDbClick() } updateWordPoint = (e: MouseEvent) => { diff --git a/src/GraphicsSystem/ToolPath/FeedingToolPath.ts b/src/GraphicsSystem/ToolPath/FeedingToolPath.ts index 300670bd4..dc8a33f49 100644 --- a/src/GraphicsSystem/ToolPath/FeedingToolPath.ts +++ b/src/GraphicsSystem/ToolPath/FeedingToolPath.ts @@ -1,3 +1,4 @@ +import { Singleton } from "../../Common/Singleton"; import { Board } from "../../DatabaseServices/Board"; import { Circle } from "../../DatabaseServices/Circle"; import { Contour } from "../../DatabaseServices/Contour"; @@ -11,7 +12,7 @@ import { OptimizeToolPath } from "./OptimizeToolPath"; /** *计算走刀工具类 */ -export class FeedingToolPath +export class FeedingToolPath extends Singleton { /** *处理形状,内偏移 diff --git a/src/UI/Components/Board/BoardConfigModal.tsx b/src/UI/Components/Board/BoardConfigModal.tsx index 3ad3f633d..ffeaa3be6 100644 --- a/src/UI/Components/Board/BoardConfigModal.tsx +++ b/src/UI/Components/Board/BoardConfigModal.tsx @@ -74,7 +74,7 @@ export class BoardConfigModal extends React.Component{ let cus = selectBox.SelectEntityList.filter((cu: Polyline | Circle) => cu.IsClose) as Curve[]; - const rightStore = Singleton.GetInstance(RightPanelStore); + const rightStore = RightPanelStore.GetInstance(); //曲线按颜色分类 let cuMap: Map = new Map(); @@ -158,7 +158,7 @@ export class BoardConfigModal extends React.Component{ let cu = JigUtils.Draw(br.Shape.Outline.Curve.Clone().ApplyMatrix(br.OCS)); let moveCus = [cu]; - let store = Singleton.GetInstance(RightPanelStore); + let store = RightPanelStore.GetInstance(); //初始化造型数据,提取出形状 store.InitModelingItems(); diff --git a/src/UI/Components/CommandPanel/CommandItem.tsx b/src/UI/Components/CommandPanel/CommandItem.tsx index 3c7b6dcfb..e27cb2e3c 100644 --- a/src/UI/Components/CommandPanel/CommandItem.tsx +++ b/src/UI/Components/CommandPanel/CommandItem.tsx @@ -101,7 +101,7 @@ export class CommandItem extends React.Component{ } handleOnBlur = (e: React.FocusEvent) => { - let cserver = Singleton.GetInstance(CommandServer); + let cserver = CommandServer.GetInstance(); if (this.flag === TipType.InputNull || this.flag === TipType.IsExist || this.flag === TipType.StrIllegal) this.props.commandData.customize = this.props.commandData.customizeed; else//ok diff --git a/src/UI/Components/CommandPanel/commandPanel.tsx b/src/UI/Components/CommandPanel/commandPanel.tsx index 1883fa3eb..f742e74e9 100644 --- a/src/UI/Components/CommandPanel/commandPanel.tsx +++ b/src/UI/Components/CommandPanel/commandPanel.tsx @@ -1,13 +1,12 @@ -import * as React from 'react'; -import { Tabs, Tab, Classes } from '@blueprintjs/core'; +import { Classes, Tab, Tabs } from '@blueprintjs/core'; import { observable } from 'mobx'; import { observer } from 'mobx-react'; -import { ICommand, CommandList } from './CommandList'; -import { CommandItem } from './CommandItem'; -import { Singleton } from '../../../Common/Singleton'; -import { CommandServer } from '../../../DatabaseServices/CommandServer'; -import { app } from '../../../ApplicationServices/Application'; +import * as React from 'react'; import { end } from 'xaop'; +import { app } from '../../../ApplicationServices/Application'; +import { CommandServer } from '../../../DatabaseServices/CommandServer'; +import { CommandItem } from './CommandItem'; +import { CommandList, ICommand } from './CommandList'; interface CommandPanelState { @@ -44,7 +43,7 @@ export class CommandPanel extends React.Component<{}, CommandPanelState> //获取最后一次滚动条位置 GetLastScrollTop() { - let cserver = Singleton.GetInstance(CommandServer); + let cserver = CommandServer.GetInstance(); if (cserver.m_LastScrollTop) this.scrollCard.scrollTop = cserver.m_LastScrollTop; } @@ -66,7 +65,7 @@ export class CommandPanel extends React.Component<{}, CommandPanelState> } async initCommandData() { - let cServer = Singleton.GetInstance(CommandServer); + let cServer = CommandServer.GetInstance(); for (let c of this.searchRes) { let res = await cServer.FindCommand(c.common) @@ -80,7 +79,7 @@ export class CommandPanel extends React.Component<{}, CommandPanelState> } handleTabsClick = async () => { - let cserver = Singleton.GetInstance(CommandServer); + let cserver = CommandServer.GetInstance(); let elc = this.ulRef.querySelector(`#${this.id}`) as HTMLElement; if (elc) this.scrollCard.scrollTop = elc.offsetTop - elc.offsetHeight * 2 - 55; @@ -166,8 +165,8 @@ export class CommandPanel extends React.Component<{}, CommandPanelState> className="bp3-card bp3-elevation-0" onScroll={async () => { - let cserver = Singleton.GetInstance(CommandServer); - let index = Math.floor(this.scrollCard.scrollTop / 57); + let cserver = CommandServer.GetInstance(); + let index = Math.floor(this.scrollCard.scrollTop / 57); if (index < this.searchRes.length) this.id = this.searchRes[index].typeId; else diff --git a/src/UI/Components/SourceManage/FileItem.tsx b/src/UI/Components/SourceManage/FileItem.tsx index c2aba9f28..b001b514b 100644 --- a/src/UI/Components/SourceManage/FileItem.tsx +++ b/src/UI/Components/SourceManage/FileItem.tsx @@ -1,13 +1,12 @@ -import { Button, Position, Tooltip, Intent, Popover, Classes } from "@blueprintjs/core"; +import { Button, Classes, Intent, Popover, Position, Tooltip } from "@blueprintjs/core"; +import { observable, toJS } from 'mobx'; +import { observer } from 'mobx-react'; import * as React from 'react'; +import { KeyBoard } from "../../../Common/KeyEnum"; import { FileInfo, FileServer } from '../../../DatabaseServices/FileServer'; -import { observer } from 'mobx-react'; -import { Singleton } from '../../../Common/Singleton'; -import { toJS, observable } from 'mobx'; -import '../../Css/style.less' -import '../../Css/switchTheme.less' +import '../../Css/style.less'; +import '../../Css/switchTheme.less'; import { appUi } from "../../Layout/ApplicationLayout"; -import { KeyBoard } from "../../../Common/KeyEnum"; import { TopPanelStore } from '../../Store/TopPanelStore'; enum TipType @@ -58,7 +57,7 @@ export class FileItem extends React.Component{ render() { - const filelist = Singleton.GetInstance(TopPanelStore).m_FileList; + const filelist = TopPanelStore.GetInstance().m_FileList; const fileInfo = this.props.fileInfo; const imgStyle: React.CSSProperties = {}; const popStyle: React.CSSProperties = { @@ -156,7 +155,7 @@ export class FileItem extends React.Component{ //如果标题被更新,那么更新数据库 if (this.flag !== TipType.InputNull && newName !== this.props.fileInfo.title) { - let fserver = Singleton.GetInstance(FileServer); + let fserver = FileServer.GetInstance(); this.props.fileInfo.title = newName; fserver.UpdateFileInfo(toJS(this.props.fileInfo)); if (fserver.m_CurFileId == this.props.fileInfo.fileId) diff --git a/src/UI/Components/SourceManage/FilePanel.tsx b/src/UI/Components/SourceManage/FilePanel.tsx index f5ee1de87..678d3bdad 100644 --- a/src/UI/Components/SourceManage/FilePanel.tsx +++ b/src/UI/Components/SourceManage/FilePanel.tsx @@ -29,12 +29,12 @@ export class FilePanel extends React.Component<{ store?: TopPanelStore }, {}> //添加新文件 handleAddNewFile = async () => { - let server = Singleton.GetInstance(FileServer); + let server = FileServer.GetInstance(); if (server.m_CurFileId) { server.m_CurFileId = undefined; app.CreateDocument(); - Singleton.GetInstance(RightPanelStore).lightStore.InitScene(); + RightPanelStore.GetInstance().lightStore.InitScene(); } this.props.store.m_FileManageOpen = false; } @@ -47,7 +47,7 @@ export class FilePanel extends React.Component<{ store?: TopPanelStore }, {}> let f = files[0]; let fileData = await FileSystem.readFileAsText(f); - let fserver = Singleton.GetInstance(FileServer); + let fserver = FileServer.GetInstance(); let fileInfo = await fserver.CreateFile(); fserver.UpdateFile(fileInfo.fileId, JSON.parse(fileData)); @@ -57,7 +57,7 @@ export class FilePanel extends React.Component<{ store?: TopPanelStore }, {}> handleFile = async (fid: string, fname: string, type: string) => { - let fserver = Singleton.GetInstance(FileServer); + let fserver = FileServer.GetInstance(); switch (type) { case "delete": @@ -77,7 +77,7 @@ export class FilePanel extends React.Component<{ store?: TopPanelStore }, {}> let fileInfo = await fserver.ReadFileInfo(fid); appUi.setDocumentName(fileInfo.title); - Singleton.GetInstance(RightPanelStore).lightStore.InitScene(); + RightPanelStore.GetInstance().lightStore.InitScene(); } this.props.store.m_FileManageOpen = false; break; @@ -95,7 +95,7 @@ export class FilePanel extends React.Component<{ store?: TopPanelStore }, {}> //将滚动条滚动到上次打开的文件的位置 scrollToLastFile() { - let fserver = Singleton.GetInstance(FileServer); + let fserver = FileServer.GetInstance(); if (fserver.m_LastFileId) { let el = this.filesRef.current; diff --git a/src/UI/Layout/ApplicationLayout.tsx b/src/UI/Layout/ApplicationLayout.tsx index 6be262f93..2c1ffd58c 100644 --- a/src/UI/Layout/ApplicationLayout.tsx +++ b/src/UI/Layout/ApplicationLayout.tsx @@ -146,7 +146,7 @@ export class WebCAD { let topPanelEl = document.getElementById("TopPanel"); ReactDOM.render( - + , topPanelEl @@ -179,7 +179,7 @@ export class WebCAD document.getElementById("Webgl").parentElement.appendChild(right); ReactDOM.render( - + , right diff --git a/src/UI/Store/BoardStore.ts b/src/UI/Store/BoardStore.ts index 957c785cd..19583eba8 100644 --- a/src/UI/Store/BoardStore.ts +++ b/src/UI/Store/BoardStore.ts @@ -3,12 +3,13 @@ import { observable, toJS } from 'mobx'; import { app } from '../../ApplicationServices/Application'; import { CheckObjectType, CheckoutValid } from '../../Common/CheckoutVaildValue'; import { DataAdapter } from '../../Common/DataAdapter'; -import { BoardType, Board } from '../../DatabaseServices/Board'; +import { Singleton } from '../../Common/Singleton'; +import { Board, BoardType } from '../../DatabaseServices/Board'; import { IConfigOption } from '../Components/Board/UserConfig'; import { ModalState } from '../Components/Modal/ModalsManage'; import { BehindBoardOption, BehindHeightPositon, BoardConfigOption, BoardOption, BoardProcessOption, BrRelativePos, ClosingStripOption, ComposingType, DrillType, LayerBoardOption, LayerNailOption, LinesType, PXLFaceType, SideBoardOption, SingleBoardOption, StripType, TBBoardOption, VerticalBoardOption } from './BoardInterface'; -export class BoardStore +export class BoardStore extends Singleton { m_Option: BoardOption; protected m_UiOption; diff --git a/src/UI/Store/EntityStore.ts b/src/UI/Store/EntityStore.ts index caac0eb6e..6f6ec51ce 100644 --- a/src/UI/Store/EntityStore.ts +++ b/src/UI/Store/EntityStore.ts @@ -1,12 +1,13 @@ -import { Entity } from "../../DatabaseServices/Entity"; import { observable } from "mobx"; +import { Singleton } from "../../Common/Singleton"; +import { Arc } from "../../DatabaseServices/Arc"; +import { Circle } from "../../DatabaseServices/Circle"; +import { Entity } from "../../DatabaseServices/Entity"; import { Line } from "../../DatabaseServices/Line"; import { Polyline } from "../../DatabaseServices/Polyline"; import { Region } from "../../DatabaseServices/Region"; -import { Circle } from "../../DatabaseServices/Circle"; -import { Arc } from "../../DatabaseServices/Arc"; -export class EntityStore +export class EntityStore extends Singleton { isWorking = false; @observable currentEnType = "all"; diff --git a/src/UI/Store/RightPanelStore.ts b/src/UI/Store/RightPanelStore.ts index 657729932..6bca86a6e 100644 --- a/src/UI/Store/RightPanelStore.ts +++ b/src/UI/Store/RightPanelStore.ts @@ -1,11 +1,12 @@ import { observable, toJS } from "mobx"; +import { Singleton } from "../../Common/Singleton"; import { IModeling } from "../../DatabaseServices/Board"; import { IConfigOption } from "../Components/Board/UserConfig"; import { IModelingItem } from "../Components/RightPanel/ModelingComponent"; import { PXLFaceType } from "./BoardInterface"; import { LightStore } from "./LightStore"; -export class RightPanelStore +export class RightPanelStore extends Singleton { @observable m_TabId: string = "modeling"; @observable m_IsShow = false; @@ -14,6 +15,7 @@ export class RightPanelStore lightStore = new LightStore(); constructor() { + super(); this.InitModelingItems(); } InitModelingItems() diff --git a/src/UI/Store/TopPanelStore.ts b/src/UI/Store/TopPanelStore.ts index b7fea5440..fdd8c7bcf 100644 --- a/src/UI/Store/TopPanelStore.ts +++ b/src/UI/Store/TopPanelStore.ts @@ -4,7 +4,7 @@ import { arrayRemoveIf } from "../../Common/ArrayExt"; import { Singleton } from "../../Common/Singleton"; import { FileInfo, FileServer } from "../../DatabaseServices/FileServer"; -export class TopPanelStore +export class TopPanelStore extends Singleton { @observable m_FileManageOpen: boolean = false; @@ -13,7 +13,7 @@ export class TopPanelStore async UpdateFileList() { if (this.m_FileList.length > 0) return; - let fileServer = Singleton.GetInstance(FileServer); + let fileServer = FileServer.GetInstance(); this.m_FileList.push(...await fileServer.ReadFileList()); end(fileServer, fileServer.CreateFileEvent, (f: FileInfo) => {