@ccpc/platform 0.1.27 → 0.1.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.js +1 -0
- package/index.js.map +1 -0
- package/package.json +5 -5
package/index.js
CHANGED
package/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/cmd/cmd_mgr.ts","../src/cmd/cmd_action_controller.ts","../src/cmd/build_in_action/pick_util.ts","../src/cmd/build_in_action/default_action.ts","../src/cmd/editor_mgr.ts","../src/selection/selection.ts","../src/selection/high_light.ts","../src/app/app.ts","../src/types/type_define.ts","../src/cmd/action_result.ts","../src/cmd/action.ts","../src/cmd/cmd.ts","../src/model/snap_helper_manager.ts","../src/cmd/build_in_action/i_picked_result.ts","../src/cmd/build_in_action/snap_helper_curve.ts","../src/cmd/build_in_action/run_snap_util.ts","../src/cmd/build_in_action/pick_point_action.ts","../src/cmd/cmd_decorator.ts"],"sourcesContent":["import { IKeyboardEvent, IMouseEvent, IProcessEvent } from '@ccpc/canvas';\nimport { ClassManager, DebugUtil, IConstructor, Signal } from '@ccpc/core'\nimport { Cmd } from './cmd';\nimport { CmdActionController } from './cmd_action_controller';\n\nexport class CmdMgr implements IProcessEvent {\n private static _instance?: CmdMgr\n\n private _busy?: boolean = false;\n\n private _currentCmd?: Cmd\n\n private _clsMgr = new ClassManager<string, IConstructor<Cmd>>()\n\n public readonly signalCmdFinish = new Signal(this)\n\n public static instance() {\n if (!this._instance) {\n this._instance = new CmdMgr()\n }\n return this._instance\n }\n\n /**\n * 注册cmd\n */\n public registerCmd(cmdId: string, cmd: IConstructor<Cmd>): boolean {\n const rCmd = this._clsMgr.getCls(cmdId)\n DebugUtil.assert(rCmd === undefined, `${cmdId}已注册`, 'wg', '2026-03-09')\n this._clsMgr.registerCls(cmdId, cmd)\n return true;\n }\n\n /**\n * 发起一个命令\n */\n public async sendCmd<C extends Cmd>(Ctor: IConstructor<C>, ...cmdParams: Parameters<C['execute']>): Promise<boolean> {\n this._clsMgr.getClsNameEnsure(Ctor);\n // 上一个命令没结束,必须等待\n while (this._busy) {\n this.resetAllActions();\n return new Promise(resolve => setTimeout(resolve, 50));\n }\n // TODO 发送命令开始事件\n const cmd = new Ctor();\n this._currentCmd = cmd;\n this._busy = true;\n\n const status = cmd.initStatus();\n const promiseExe = cmd.execute(...cmdParams);\n\n // 立即模式\n if (cmd.executeImmediately) {\n status.resolve();\n }\n // 两次异步全部结束,才结束cmd\n await Promise.all([status.promise, promiseExe]).catch(e => {\n console.error(e)\n // TODO 发送事件\n })\n cmd.onDestroy();\n delete this._currentCmd;\n delete this._busy;\n // 发送命令结束事件\n this.signalCmdFinish.dispatch()\n return true;\n }\n\n public getCurrentAction() {\n let node: CmdActionController | undefined = this.getCurrentCmd()\n while (node?.action) {\n node = node.action\n }\n return node\n }\n\n public getCurrentCmd() {\n return this._currentCmd\n }\n\n public resetAllActions() {\n const cmd = this.getCurrentCmd()\n if (!cmd) return;\n const actions: Array<CmdActionController> = [cmd]\n while (true) {\n const next = actions[actions.length - 1]?.action\n if (!next) break\n actions.push(next)\n }\n actions.reverse().forEach(c => c.cancel())\n }\n\n public processMouseEvent(evt: IMouseEvent): boolean {\n const target = this.getCurrentAction();\n return !!target?.processMouseEvent(evt);\n }\n\n public processKeyboardEvent(evt: IKeyboardEvent): boolean {\n const target = this.getCurrentAction();\n return !!target?.processKeyboardEvent(evt);\n }\n}\n\nexport const cmdMgr = CmdMgr.instance()\n","import { DefaultController, IKeyboardEvent, IMouseEvent } from '@ccpc/canvas'\r\nimport { DebugUtil, GRep, IDocument, TmpElementPainter } from '@ccpc/core'\r\nimport { ActionResult } from './action_result'\r\nimport { app } from '../app/app'\r\n\r\nexport type ICmdStatus<T = unknown> = {\r\n promise: Promise<T | undefined>,\r\n resolve: (result?: T) => void,\r\n finish?: boolean\r\n}\r\n\r\nexport class CmdActionController<T = unknown> extends DefaultController {\r\n\r\n /**\r\n * promise结束,cmd才结束\r\n */\r\n private _status: ICmdStatus<T> = {\r\n promise: new Promise<T>(() => undefined),\r\n resolve: () => undefined,\r\n }\r\n\r\n /**\r\n * 启动的action\r\n */\r\n public action?: CmdActionController<unknown>\r\n\r\n /**\r\n * 临时元素绘制器\r\n */\r\n private _tmpElementPainters: Array<TmpElementPainter> = []\r\n\r\n /**\r\n * !!仅由CmdMgr调用\r\n */\r\n public initStatus() {\r\n this._status.promise = new Promise<T | undefined>(resolve => this._status.resolve = resolve)\r\n delete this._status.finish\r\n const painter = new TmpElementPainter(this.getDoc())\r\n this._tmpElementPainters.push(painter)\r\n return this._status\r\n }\r\n\r\n /**\r\n * 获取画布\r\n */\r\n public getCanvas() {\r\n return app.getCanvas()\r\n }\r\n\r\n /**\r\n * 获取文档\r\n */\r\n public getDoc(): IDocument {\r\n return app.doc\r\n }\r\n\r\n /**\r\n * 命令是否已结束\r\n */\r\n public isFinished() {\r\n return this._status.finish === true\r\n }\r\n\r\n /**\r\n * 执行动作\r\n */\r\n public async runAction<T>(action: CmdActionController<ActionResult<T>>) {\r\n this.action = action as CmdActionController<unknown>;\r\n const actionPromise = action.initStatus().promise\r\n await Promise.all([actionPromise, action.execute()])\r\n delete this.action\r\n return actionPromise\r\n }\r\n\r\n /**\r\n * 命令执行\r\n */\r\n public async execute(..._params: unknown[]) { }\r\n\r\n /**\r\n * 命令取消\r\n */\r\n public cancel() {\r\n this._resolve()\r\n }\r\n\r\n /**\r\n * cmd被销毁\r\n */\r\n public onDestroy() { }\r\n\r\n /**\r\n * 获取所有临时元素绘制器\r\n */\r\n public getTmpElementPainters() {\r\n return this._tmpElementPainters\r\n }\r\n\r\n /**\r\n * 获取默认临时元素绘制器\r\n */\r\n public getBuildInTmpElementPainter() {\r\n return this._tmpElementPainters[0]\r\n }\r\n\r\n /**\r\n * 获取指定的临时元素绘制器\r\n */\r\n public getTmpElementPainterByIndex(index: number) {\r\n if (index < 0 || index >= this._tmpElementPainters.length) {\r\n DebugUtil.assert(false, 'index无效', 'wg', '2026-03-15')\r\n return\r\n }\r\n return this._tmpElementPainters[index]\r\n }\r\n\r\n /**\r\n * 用户创建临时元素绘制器\r\n */\r\n public applyNewTmpElementPainter() {\r\n const painter = new TmpElementPainter(this.getDoc())\r\n this._tmpElementPainters.push(painter)\r\n return painter\r\n }\r\n\r\n /**\r\n * 销毁用户创建的临时元素绘制器\r\n */\r\n public clearUsersTmpElementPainters() {\r\n for (let i = 1; i < this._tmpElementPainters.length; i += 1) {\r\n this._tmpElementPainters[i].destroy()\r\n }\r\n this._tmpElementPainters.splice(1)\r\n }\r\n\r\n /**\r\n * 在指定临时元素绘制器上绘制临时元素\r\n */\r\n public drawTmpGRep(grep: GRep, index: number = 0) {\r\n if (index < 0 || index >= this._tmpElementPainters.length) {\r\n DebugUtil.assert(false, 'index无效', 'wg', '2026-03-15')\r\n return\r\n }\r\n this._tmpElementPainters[index].drawTmpGRep(grep)\r\n }\r\n\r\n /**\r\n * 清除所有绘制的临时元素\r\n */\r\n public clearTmp() {\r\n app.highLight.clear()\r\n for (const painter of this._tmpElementPainters) {\r\n if (painter) {\r\n painter.clearTmp()\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 刷新视图\r\n */\r\n protected _updateView() {\r\n this.getDoc().updateView()\r\n }\r\n\r\n /**\r\n * 结束cmd\r\n */\r\n protected _resolve(data?: T) {\r\n this.clearTmp()\r\n if (this._status.finish) return\r\n\r\n this._status.finish = true\r\n this._status.resolve(data)\r\n this.onDestroy()\r\n }\r\n\r\n public onKeyDown(evt: IKeyboardEvent): boolean {\r\n if (evt.domEvent.key === 'Escape') {\r\n this.cancel()\r\n return true\r\n }\r\n return false;\r\n }\r\n\r\n public onMouseEnter(_evt: IMouseEvent): boolean {\r\n window?.focus()\r\n return false\r\n }\r\n\r\n}\r\n","import { CCanvas } from '@ccpc/canvas'\r\nimport { GCurve2d, GNode, GPoint2d, GPolycurve, GPolygon, GText2d } from '@ccpc/core'\r\nimport { Vec2 } from '@ccpc/math'\r\nimport type { PickFilter } from './pick_filter'\r\n\r\nexport class PickUtil {\r\n /**\r\n * 返回pick结果,是否从场景中拾取[gnode]\r\n */\r\n // TODO 考虑容差\r\n public static pickGNode(\r\n ccanvas: CCanvas,\r\n screenPos: Vec2,\r\n pickFilter?: PickFilter,\r\n forSnap?: boolean,\r\n ) {\r\n return this.pickGNodes(ccanvas, screenPos, pickFilter, forSnap)[0]\r\n }\r\n\r\n public static pickGNodes(\r\n ccanvas: CCanvas,\r\n screenPos: Vec2,\r\n pickFilter?: PickFilter,\r\n forSnap?: boolean,\r\n ) {\r\n const gNodes = ccanvas.pick(screenPos.x, screenPos.y)\r\n if (!gNodes.length) return []\r\n\r\n let pickedNodes = gNodes\r\n if (forSnap) {\r\n pickedNodes = pickedNodes.filter(_ => _.canSnap)\r\n } else {\r\n pickedNodes = pickedNodes.filter(_ => _.canPick)\r\n }\r\n if (!pickedNodes.length) return []\r\n\r\n if (pickFilter) {\r\n pickedNodes = pickedNodes.filter(gnode => {\r\n return pickFilter.isEnable(gnode, screenPos)\r\n })\r\n }\r\n if (!pickedNodes.length) return []\r\n\r\n const nodeValueCache = new Map<GNode, number>()\r\n pickedNodes.forEach(node => {\r\n nodeValueCache.set(node, this._getPickPriority(node))\r\n })\r\n // 优先选择点\r\n pickedNodes.sort((a, b) => {\r\n return (nodeValueCache.get(a) || 100) - (nodeValueCache.get(b) || 100)\r\n })\r\n\r\n return pickedNodes\r\n }\r\n\r\n private static _getPickPriority(gnode: GNode) {\r\n if (gnode instanceof GPoint2d) {\r\n return 0\r\n }\r\n if (gnode instanceof GCurve2d || gnode instanceof GPolycurve) {\r\n return 1\r\n }\r\n if (gnode instanceof GPolygon) {\r\n return 2\r\n }\r\n if (gnode instanceof GText2d) {\r\n return 3\r\n }\r\n return 100\r\n }\r\n}\r\n","import { IKeyboardEvent, IMouseEvent } from '@ccpc/canvas'\r\nimport { app } from '../../app/app'\r\nimport { CmdActionController } from '../cmd_action_controller'\r\nimport { PickUtil } from './pick_util'\r\n\r\n/**\r\n * 默认空闲态交互\r\n * - move 时更新高亮\r\n * - click 时更新选中\r\n */\r\nexport class DefaultAction extends CmdActionController {\r\n public onMouseMove(evt: IMouseEvent): boolean {\r\n const picked = PickUtil.pickGNode(this.getCanvas(), evt.pos)\r\n\r\n if (!picked) {\r\n app.highLight.clear()\r\n this._updateView()\r\n return false\r\n }\r\n\r\n app.highLight.reset([picked])\r\n this._updateView()\r\n return false\r\n }\r\n\r\n public onClick(evt: IMouseEvent): boolean {\r\n const picked = PickUtil.pickGNode(this.getCanvas(), evt.pos)\r\n\r\n app.highLight.clear()\r\n\r\n if (!picked && !evt.fnKey.ctrlKey) {\r\n app.selection.clear()\r\n this._updateView()\r\n return false\r\n }\r\n\r\n if (!picked) {\r\n return false\r\n }\r\n\r\n if (evt.fnKey.ctrlKey) {\r\n app.selection.add([picked])\r\n } else {\r\n app.selection.reset([picked])\r\n }\r\n\r\n this._updateView()\r\n return false\r\n }\r\n\r\n public onRButtonDown(_evt: IMouseEvent): boolean {\r\n app.highLight.clear()\r\n app.selection.clear()\r\n this._updateView()\r\n return false\r\n }\r\n\r\n public onKeyDown(evt: IKeyboardEvent): boolean {\r\n if (evt.domEvent.key !== 'Escape') {\r\n return false\r\n }\r\n\r\n app.highLight.clear()\r\n app.selection.clear()\r\n this._updateView()\r\n return true\r\n }\r\n}\r\n","import { IKeyboardEvent, IMouseEvent, IProcessEvent } from '@ccpc/canvas'\nimport { DefaultAction } from './build_in_action/default_action'\n\n/**\n * 精简版 EditorMgr:\n * 当前只负责把未被 cmd 消费的输入转给默认交互控制器。\n */\nexport class EditorMgr implements IProcessEvent {\n private static _instance?: EditorMgr\n\n public defaultController: IProcessEvent\n\n private constructor() {\n this.defaultController = new DefaultAction()\n }\n\n public static instance() {\n if (!this._instance) {\n this._instance = new EditorMgr()\n }\n return this._instance\n }\n\n public processMouseEvent(evt: IMouseEvent): boolean {\n return !!this.defaultController?.processMouseEvent(evt)\n }\n\n public processKeyboardEvent(evt: IKeyboardEvent): boolean {\n return !!this.defaultController?.processKeyboardEvent(evt)\n }\n}\n\nexport const editorMgr = EditorMgr.instance()\n","import { ElementId, GNode, IDocument, IElement } from '@ccpc/core';\r\n\r\n/**\r\n * 选择集\r\n */\r\nexport class Selection {\r\n private static _instance: Selection\r\n\r\n private _doc!: IDocument\r\n\r\n private _selectedIds: number[] = [];\r\n\r\n private _selectedGNodes: GNode[] = [];\r\n\r\n public static instance() {\r\n if (!Selection._instance) {\r\n Selection._instance = new Selection();\r\n }\r\n return Selection._instance;\r\n }\r\n\r\n constructor() {\r\n // TODO 补充事件\r\n }\r\n\r\n public setDoc(doc: IDocument) {\r\n this._doc = doc;\r\n }\r\n\r\n public getDoc(): IDocument {\r\n return this._doc;\r\n }\r\n\r\n /**\r\n * 获取选中的GNodes\r\n */\r\n public getSelectedGNodes(): GNode[] {\r\n return this._selectedGNodes;\r\n }\r\n\r\n /**\r\n * 获取所有选中的ElementId\r\n */\r\n public getAllSelectedEIds(): number[] {\r\n const selectedEleIds: number[] = this._selectedIds;\r\n const result: Set<number> = new Set(selectedEleIds);\r\n this._selectedGNodes.forEach(g => {\r\n if (g.elementId.isValid()) result.add(g.elementId.asInt())\r\n });\r\n return [...result];\r\n }\r\n\r\n /**\r\n * 获取所有选中的Element\r\n */\r\n public getAllSelectedElements(): IElement[] {\r\n const selectedEleIds: number[] = this.getAllSelectedEIds();\r\n return this._doc.getElementsByIds(selectedEleIds);\r\n }\r\n\r\n /**\r\n * 获取不包括GNode的ElementId\r\n */\r\n public getSelectedEIds(): Array<ElementId> {\r\n if (!this._selectedIds.length) return []\r\n return this._selectedIds.map(_ => new ElementId(_))\r\n }\r\n\r\n /**\r\n * 获取不包括GNode的Element\r\n */\r\n public getSelectedElements(): Array<IElement> {\r\n return this._doc.getElementsByIds(this.getSelectedEIds())\r\n }\r\n\r\n /**\r\n * 清空高亮集合\r\n */\r\n public clear() {\r\n if (!this._selectedGNodes.length && !this._selectedIds.length) {\r\n return\r\n }\r\n this._selectedGNodes.splice(0)\r\n this._selectedIds.splice(0)\r\n this._doc.modelView.cacheForView.cacheSelection(this)\r\n // TODO 发送事件\r\n }\r\n\r\n /**\r\n * 将GNode或者ElementId假如选择集\r\n */\r\n public add(ids: number[] | GNode[]) {\r\n if (!ids.length) return\r\n let addGNodes: GNode[] = []\r\n let addEIds: number[] = []\r\n if (typeof ids[0] === 'number') {\r\n const numIds = ids as number[]\r\n addEIds = numIds.filter(id => !this._selectedIds.find(_ => _ === id))\r\n } else {\r\n const gNodes = ids as GNode[]\r\n addGNodes = gNodes.filter(gnode => !this._selectedGNodes.find(_ => _ === gnode))\r\n }\r\n if (!addEIds.length && !addGNodes.length) return\r\n\r\n this._selectedIds.push(...addEIds)\r\n this._selectedGNodes.push(...addGNodes)\r\n this._doc.modelView.cacheForView.cacheSelection(this)\r\n // TODO 发送事件\r\n }\r\n\r\n /**\r\n * 将对象从选择集去除\r\n */\r\n public delete(ids: number[] | GNode[]) {\r\n if (!ids.length) return\r\n let success = false\r\n if (typeof ids[0] === 'number') {\r\n const numIds = ids as number[]\r\n for (let i = 0; i < numIds.length; i += 1) {\r\n const index = this._selectedIds.findIndex(_ => _ === numIds[i])\r\n if (index > -1) {\r\n success = true\r\n this._selectedIds.splice(index, 1)\r\n }\r\n }\r\n\r\n } else {\r\n const gNodes = ids as GNode[]\r\n for (let i = 0; i < gNodes.length; i += 1) {\r\n const index = this._selectedGNodes.findIndex(_ => _ === gNodes[i])\r\n if (index > -1) {\r\n success = true\r\n this._selectedGNodes.splice(index, 1)\r\n }\r\n }\r\n }\r\n\r\n if (success) {\r\n this._doc.modelView.cacheForView.cacheSelection(this)\r\n // TODO发送事件\r\n }\r\n }\r\n\r\n public reset(ids: number[] | GNode[]) {\r\n this._selectedIds.splice(0)\r\n this._selectedGNodes.splice(0)\r\n this._doc.modelView.cacheForView.cacheSelection(this)\r\n\r\n if (!ids.length) return\r\n if (typeof ids[0] === 'number') {\r\n this._selectedIds.push(...new Set(ids as number[]))\r\n } else {\r\n this._selectedGNodes.push(...new Set(ids as GNode[]))\r\n }\r\n // TODO发送事件\r\n }\r\n}\r\n","import { GNode, IDocument } from '@ccpc/core';\r\n\r\n/**\r\n * 高亮集\r\n */\r\nexport class HighLight {\r\n private _doc!: IDocument;\r\n\r\n private static _instance: HighLight;\r\n\r\n private _selectedIds: Set<GNode | number> = new Set();\r\n\r\n public static instance() {\r\n if (!HighLight._instance) {\r\n HighLight._instance = new HighLight();\r\n }\r\n return HighLight._instance;\r\n }\r\n\r\n public setDoc(doc: IDocument) {\r\n this._doc = doc;\r\n }\r\n\r\n public getDoc() {\r\n return this._doc;\r\n }\r\n\r\n /**\r\n * 获取高亮的GNode\r\n */\r\n public getActiveGNodes(): GNode[] {\r\n const result: GNode[] = []\r\n this._selectedIds.forEach(e => {\r\n if (typeof e !== 'number') result.push(e)\r\n })\r\n return result\r\n }\r\n\r\n /**\r\n * 获取高亮的ElementId\r\n */\r\n public getActiveElementIds() {\r\n const result: number[] = [];\r\n this._selectedIds.forEach(e => {\r\n if (typeof e === 'number') result.push(e)\r\n })\r\n return result\r\n }\r\n\r\n /**\r\n * 获取高亮的Element\r\n */\r\n public getActiveElements() {\r\n const ids = this.getActiveElementIds()\r\n const eles = this._doc.getElementsByIds(ids)\r\n return eles\r\n }\r\n\r\n /**\r\n * 清空高亮集合\r\n */\r\n public clear() {\r\n if (this._selectedIds.size) {\r\n this._selectedIds.clear();\r\n // 将变化缓存起来\r\n this._doc.modelView.cacheForView.cacheHighLight(this)\r\n // TODO 触发事件\r\n }\r\n }\r\n\r\n /**\r\n * 重置当前高亮集合,并在内容变化时触发视图刷新。\r\n */\r\n public reset(gnodes: Array<GNode | number>) {\r\n const next = new Set(gnodes)\r\n if (\r\n next.size === this._selectedIds.size &&\r\n [...this._selectedIds].every(id => next.has(id))\r\n ) {\r\n return\r\n }\r\n this._selectedIds.clear()\r\n gnodes.forEach(_ => this._selectedIds.add(_))\r\n // TODO 触发事件\r\n this._doc.modelView.cacheForView.cacheHighLight(this)\r\n\r\n }\r\n}\r\n","import { CCanvas, IProcessEvent } from '@ccpc/canvas';\r\nimport { DebugUtil, IDocument } from '@ccpc/core';\r\nimport { cmdMgr } from '../cmd/cmd_mgr';\r\nimport { editorMgr } from '../cmd/editor_mgr';\r\nimport { Selection } from '../selection/selection';\r\nimport { HighLight } from '../selection/high_light';\r\n\r\n// TODO app补充完整, 高亮选中等\r\nexport class App {\r\n private static _instance: App\r\n\r\n private _curDoc?: IDocument\r\n\r\n private _curCanvas?: CCanvas\r\n\r\n private _cmdMgr = cmdMgr\r\n\r\n public selection: Selection\r\n\r\n public highLight: HighLight\r\n\r\n constructor() {\r\n this.selection = Selection.instance()\r\n this.highLight = HighLight.instance()\r\n }\r\n\r\n public get cmdMgr() {\r\n return this._cmdMgr\r\n }\r\n\r\n public static instance() {\r\n if (!this._instance) {\r\n this._instance = new App()\r\n }\r\n return this._instance\r\n }\r\n\r\n public get doc() {\r\n DebugUtil.assert(this._curDoc, '请先调用start方法给doc赋值', 'wg', '2026-03-11')\r\n return this._curDoc\r\n }\r\n\r\n /**\r\n * 获取画布\r\n */\r\n public getCanvas() {\r\n return this._curCanvas!\r\n }\r\n\r\n public start(doc: IDocument) {\r\n this._curDoc = doc\r\n doc.isMainDoc = true\r\n this.selection.setDoc(doc)\r\n this.highLight.setDoc(doc)\r\n }\r\n\r\n public stop() {\r\n this.highLight.clear()\r\n this.selection.clear()\r\n this._curCanvas?.destroy()\r\n this._curDoc?.destroy()\r\n delete this._curCanvas\r\n delete this._curDoc\r\n }\r\n\r\n /**\r\n * 创建画布\r\n */\r\n public createCanvas(container: HTMLElement) {\r\n const evtProcess: Array<IProcessEvent> = [this._cmdMgr, editorMgr]\r\n const cCanvas = new CCanvas(container, evtProcess)\r\n this._curCanvas = cCanvas\r\n if (this._curDoc) this._curCanvas.resetModelView(this._curDoc.modelView)\r\n this._curCanvas.startListening()\r\n return cCanvas\r\n }\r\n}\r\n\r\nexport const app = App.instance()\r\n","/**\r\n * Action状态枚举\r\n */\r\nexport enum EN_ActionStatus {\r\n OK,\r\n CANCEL\r\n}\r\n","import { EN_ActionStatus } from '../types/type_define';\r\n\r\nexport class ActionResult<T> {\r\n constructor(\r\n private _status: EN_ActionStatus,\r\n private _data?: T,\r\n ) { }\r\n\r\n public get data() {\r\n return this._data\r\n }\r\n\r\n public get isSuccess() {\r\n return this._status === EN_ActionStatus.OK\r\n }\r\n\r\n public get isCanceled() {\r\n return this._status === EN_ActionStatus.CANCEL\r\n }\r\n}\r\n","\r\nimport { EN_ActionStatus } from '../types/type_define';\r\nimport { ActionResult } from './action_result';\r\nimport { CmdActionController } from './cmd_action_controller';\r\n\r\nexport class Action<T> extends CmdActionController<ActionResult<T>> {\r\n protected _markSuccess(data: T) {\r\n super._resolve(new ActionResult(EN_ActionStatus.OK, data));\r\n }\r\n\r\n protected _markCanceled() {\r\n super._resolve(new ActionResult(EN_ActionStatus.CANCEL));\r\n }\r\n\r\n public cancel() {\r\n this._markCanceled();\r\n }\r\n}\r\n","import { CmdActionController } from './cmd_action_controller';\r\n\r\nexport class Cmd extends CmdActionController {\r\n /**\r\n * cmd是否立马结束\r\n */\r\n public executeImmediately = true\r\n\r\n}\r\n","import type { Curve2, Vec2 } from '@ccpc/math'\n\nexport enum EN_SNAP_HELPER_TYPE {\n UNKENOW = -1,\n BRIEF = 0, // 短期的, 一般一次取点结束后清空,清空时机业务定\n PERMANENT = 2, // 永久的,一直存在\n}\n\ntype SnapHelperKey = string\n\nexport class SnapHelpMgr {\n private static _instance: SnapHelpMgr\n\n public static instance(): SnapHelpMgr {\n if (!SnapHelpMgr._instance) {\n SnapHelpMgr._instance = new SnapHelpMgr()\n }\n return SnapHelpMgr._instance\n }\n\n // 参考线\n private _snapHelperCvs: Map<EN_SNAP_HELPER_TYPE, SnapHelperKey[]>\n\n // 参考方向\n private _snapHelperDirs: Map<EN_SNAP_HELPER_TYPE, SnapHelperKey[]>\n\n // 参考点\n private _snapHelperPts: Map<EN_SNAP_HELPER_TYPE, SnapHelperKey[]>\n\n private _keyToSnapHelperCvs: Map<SnapHelperKey, Curve2[]>\n\n private _keyToSnapHelperDirs: Map<SnapHelperKey, Vec2>\n\n private _keyToSnapHelperPts: Map<SnapHelperKey, Vec2>\n\n private constructor() {\n this._snapHelperCvs = new Map()\n this._snapHelperDirs = new Map()\n this._snapHelperPts = new Map()\n this._keyToSnapHelperCvs = new Map()\n this._keyToSnapHelperDirs = new Map()\n this._keyToSnapHelperPts = new Map()\n }\n\n public addSnapHelperCurves(snapHelperType: EN_SNAP_HELPER_TYPE, curves: Curve2[]) {\n if (!curves.length || this._keyToSnapHelperCvs.get(curves[0].toString())) {\n return\n }\n if (!this._snapHelperCvs.get(snapHelperType)) {\n this._snapHelperCvs.set(snapHelperType, [curves[0].toString()])\n } else {\n if (this._snapHelperCvs.get(snapHelperType)!.length > 1) {\n this._snapHelperCvs.get(snapHelperType)!.splice(0, this._snapHelperCvs.get(snapHelperType)!.length - 1)\n }\n this._snapHelperCvs.get(snapHelperType)!.push(curves[0].toString())\n }\n this._keyToSnapHelperCvs.set(curves[0].toString(), curves)\n }\n\n public addSnapHelperDirs(snapHelperType: EN_SNAP_HELPER_TYPE, dir: Vec2) {\n const key = dir.toString()\n if (this._keyToSnapHelperDirs.get(key)) {\n return\n }\n if (!this._snapHelperDirs.get(snapHelperType)) {\n this._snapHelperDirs.set(snapHelperType, [key])\n } else {\n if (this._snapHelperDirs.get(snapHelperType)!.length > 1) {\n this._snapHelperDirs.get(snapHelperType)!.splice(0, this._snapHelperDirs.get(snapHelperType)!.length - 1)\n }\n this._snapHelperDirs.get(snapHelperType)!.push(key)\n }\n this._keyToSnapHelperDirs.set(key, dir)\n }\n\n public addSnapHelperPoints(snapHelperType: EN_SNAP_HELPER_TYPE, point: Vec2) {\n const key = point.toString()\n if (this._keyToSnapHelperPts.get(key)) {\n return\n }\n if (!this._snapHelperPts.get(snapHelperType)) {\n this._snapHelperPts.set(snapHelperType, [key])\n } else {\n this._snapHelperPts.get(snapHelperType)!.push(key)\n }\n this._keyToSnapHelperPts.set(key, point)\n }\n\n public deleteSnapHelperPoints(snapHelperType: EN_SNAP_HELPER_TYPE, points: Vec2[]) {\n const keys = this._snapHelperPts.get(snapHelperType)\n if (!keys) {\n return\n }\n points.forEach(p => {\n const deleteKey = p.toString()\n const idx = keys.findIndex(_ => deleteKey === _)\n if (idx > -1) {\n keys.splice(idx, 1)\n }\n this._keyToSnapHelperPts.delete(deleteKey)\n })\n }\n\n public clearSnapHelperObjects(snapHelperType: EN_SNAP_HELPER_TYPE) {\n this._snapHelperCvs.get(snapHelperType)?.splice(0).forEach(c => this._keyToSnapHelperCvs.delete(c))\n this._snapHelperDirs.get(snapHelperType)?.splice(0).forEach(c => this._keyToSnapHelperDirs.delete(c))\n this._snapHelperPts.get(snapHelperType)?.splice(0).forEach(c => this._keyToSnapHelperPts.delete(c))\n\n this._snapHelperCvs.delete(snapHelperType)\n this._snapHelperDirs.delete(snapHelperType)\n this._snapHelperPts.delete(snapHelperType)\n }\n\n public deleteAllSnapHelperCurves() {\n this._snapHelperCvs = new Map()\n this._keyToSnapHelperCvs = new Map()\n }\n\n public deleteAllSnapHelperDirs() {\n this._snapHelperDirs = new Map()\n this._keyToSnapHelperDirs = new Map()\n }\n\n public deleteAllSnapHelperPoints() {\n this._snapHelperPts = new Map()\n this._keyToSnapHelperPts = new Map()\n }\n\n public getAllSnapHelperCurves(): Curve2[][] {\n const res: Curve2[][] = []\n for (const curvesKey of this._snapHelperCvs.values()) {\n curvesKey.forEach(key => {\n const curves = this._keyToSnapHelperCvs.get(key)\n if (curves) {\n res.push(curves)\n }\n })\n }\n return res\n }\n\n public getAllSnapHelperDirs(): Vec2[] {\n const res: Vec2[] = []\n for (const keys of this._snapHelperDirs.values()) {\n keys.forEach(key => {\n const dir = this._keyToSnapHelperDirs.get(key)\n if (dir) {\n res.push(dir)\n }\n })\n }\n return res\n }\n\n public getAllSnapHelperPoints(): Vec2[] {\n const res: Vec2[] = []\n for (const keys of this._snapHelperPts.values()) {\n keys.forEach(key => {\n const pt = this._keyToSnapHelperPts.get(key)\n if (pt) {\n res.push(pt)\n }\n })\n }\n return res\n }\n\n public getSnapHelperPoints(type: EN_SNAP_HELPER_TYPE): Vec2[] {\n const res: Vec2[] = []\n for (const key of this._snapHelperPts.get(type) || []) {\n const pt = this._keyToSnapHelperPts.get(key)\n if (pt) {\n res.push(pt)\n }\n }\n return res\n }\n}\n","import { GNode } from '@ccpc/core'\nimport { EN_SNAP_TYPE } from '@ccpc/snap'\nimport { Curve2, Plane, Vec2, Vec3 } from '@ccpc/math'\n\n/**\n * 拾取结果类型\n */\nexport type IPickedResult = {\n /** pick到的点 */\n point: Vec3,\n /** 屏幕坐标 */\n screenPt?: Vec2,\n /** pick到的平面 */\n pickedPlane?: Plane,\n /** pick到的GNode */\n pickedGNodes?: Array<GNode>\n /** pick到的参考对象 */\n pickedRefObject?: (Curve2 | Vec2)[]\n /** 吸附类型 */\n snapType?: EN_SNAP_TYPE\n}\n\nexport enum EN_SNAP_PT_COLOR {\n POINT_ON_FACE = 0x1c1c1c,\n END_POINT = 0x3dffc5,\n POINT_ON_CURVE = 0x1c1c1c,\n MIDDLE_POINT = 0x3dffc5,\n PARALLEL_TO_AXIS = 0x3dffc5,\n INTERSECT_POINT = 0x3dffc5,\n VERTICAL_PARALLEL = 0x3dffc5,\n}\n","import { GCurve2d, GPoint2d, GRep, GNODE_TYPE, GPolygon, GPolycurve } from '@ccpc/core'\r\nimport { Arc2, CONST, Ln2, Vec2, alg } from '@ccpc/math'\r\nimport { EN_SNAP_TYPE, PtSnap, SnapSetting } from '@ccpc/snap'\r\nimport { Plane } from '@ccpc/math'\r\n\r\nimport { EN_SNAP_HELPER_TYPE, SnapHelpMgr } from '../../model/snap_helper_manager'\r\nimport { EN_SNAP_PT_COLOR, type IPickedResult } from './i_picked_result'\r\n\r\nconst HOVER_TIME = 200\r\n\r\n/**\r\n * 吸附结果上悬停一段时间后,生成平行坐标系的辅助线\r\n */\r\nexport function createReferenceCurves(lastPickedResult: IPickedResult | undefined, lastTime: number) {\r\n if (!SnapSetting.instance().canSnapHelperObject || !lastPickedResult?.pickedGNodes?.length) {\r\n return\r\n }\r\n\r\n const nowTime = new Date().getTime()\r\n if (\r\n lastPickedResult &&\r\n (lastPickedResult.snapType === EN_SNAP_TYPE.MiddlePoint ||\r\n lastPickedResult.snapType === EN_SNAP_TYPE.EndPoint) &&\r\n nowTime - lastTime > HOVER_TIME &&\r\n lastPickedResult.pickedPlane\r\n ) {\r\n const localPt = lastPickedResult.pickedPlane.getUVAt(lastPickedResult.point)\r\n const curveX = new Ln2(localPt, Vec2.X(), [-CONST.MODEL_MAX_LENGTH, CONST.MODEL_MAX_LENGTH])\r\n curveX.userData = { snapType: EN_SNAP_TYPE.ReferCurve, lastPickedPt: localPt.clone() }\r\n\r\n const curveY = new Ln2(localPt, Vec2.Y(), [-CONST.MODEL_MAX_LENGTH, CONST.MODEL_MAX_LENGTH])\r\n curveY.userData = { snapType: EN_SNAP_TYPE.ReferCurve, lastPickedPt: localPt.clone() }\r\n\r\n SnapHelpMgr.instance().addSnapHelperCurves(EN_SNAP_HELPER_TYPE.BRIEF, [curveX, curveY])\r\n }\r\n}\r\n\r\n/**\r\n * 生成参考方向\r\n */\r\nexport function createReferenceDirs(\r\n lastPickedResult: IPickedResult | undefined,\r\n lastTime: number,\r\n previousSnapPt?: Vec2,\r\n) {\r\n if (!SnapSetting.instance().canSnapHelperDir) {\r\n return\r\n }\r\n\r\n const nowTime = new Date().getTime()\r\n if (!(lastPickedResult && nowTime - lastTime > HOVER_TIME && lastPickedResult.pickedGNodes?.length === 1)) {\r\n return\r\n }\r\n\r\n const gnode = lastPickedResult.pickedGNodes[0]\r\n let line2d: Ln2 | undefined\r\n if (gnode.getType() === GNODE_TYPE.GCurve2d && (gnode as GCurve2d).geo instanceof Ln2) {\r\n line2d = (gnode as GCurve2d).geo as Ln2\r\n } else if (gnode.getType() === GNODE_TYPE.GPolycurve) {\r\n const curves = (gnode as GPolycurve).geo.getAllCurves()\r\n if (curves.length === 1 && curves[0] instanceof Ln2) {\r\n line2d = curves[0]\r\n }\r\n }\r\n if (!line2d) {\r\n return\r\n }\r\n\r\n const dir = line2d.getDirection().clone()\r\n dir.userData = { refCurve: line2d }\r\n SnapHelpMgr.instance().addSnapHelperDirs(EN_SNAP_HELPER_TYPE.BRIEF, dir)\r\n\r\n if (!previousSnapPt) {\r\n return\r\n }\r\n\r\n const closestPt = new Vec2()\r\n alg.D.ptToCurve2d(previousSnapPt, line2d, closestPt)\r\n if (closestPt.equals(previousSnapPt)) {\r\n return\r\n }\r\n\r\n const perpendicularDir = closestPt.subtracted(previousSnapPt).normalize()\r\n if (!perpendicularDir.isPerpendicular(line2d.getDirection())) {\r\n return\r\n }\r\n perpendicularDir.userData = { refCurve: line2d, snapType: EN_SNAP_TYPE.VerticalToCurve }\r\n SnapHelpMgr.instance().addSnapHelperDirs(EN_SNAP_HELPER_TYPE.BRIEF, perpendicularDir)\r\n}\r\n\r\n/**\r\n * 生成参考点\r\n */\r\nexport function createReferencePoint(lastPickedResult: IPickedResult | undefined, lastTime: number) {\r\n const nowTime = new Date().getTime()\r\n if (!(lastPickedResult && nowTime - lastTime > HOVER_TIME && lastPickedResult.pickedGNodes?.length === 1)) {\r\n return lastTime\r\n }\r\n\r\n const gnode = lastPickedResult.pickedGNodes[0]\r\n if (gnode.getType() === GNODE_TYPE.GPolygon) {\r\n const center = (gnode as GPolygon).geo.getCentroidPoint()\r\n center.userData = { snapType: EN_SNAP_TYPE.Center }\r\n SnapHelpMgr.instance().addSnapHelperPoints(EN_SNAP_HELPER_TYPE.BRIEF, center)\r\n return nowTime\r\n }\r\n\r\n if (gnode.getType() === GNODE_TYPE.GCurve2d && (gnode as GCurve2d).geo instanceof Arc2) {\r\n const arc = (gnode as GCurve2d).geo as Arc2\r\n const poles = getArc2Poles(arc)\r\n poles.forEach(it => {\r\n it.userData = { snapType: EN_SNAP_TYPE.Pole }\r\n SnapHelpMgr.instance().addSnapHelperPoints(EN_SNAP_HELPER_TYPE.BRIEF, it)\r\n })\r\n return nowTime\r\n }\r\n\r\n return lastTime\r\n}\r\n\r\nfunction getArc2Poles(arc: Arc2) {\r\n const center = arc.getCenter()\r\n const coord = arc.getCoord()\r\n const candidatePts = [\r\n center.added(coord.getDx().multiplied(arc.getA())),\r\n center.added(coord.getDx().multiplied(-arc.getA())),\r\n center.added(coord.getDy().multiplied(arc.getB())),\r\n center.added(coord.getDy().multiplied(-arc.getB())),\r\n ]\r\n\r\n const poles: Vec2[] = []\r\n candidatePts.forEach(pt => {\r\n const param = arc.getParamAt(pt)\r\n const onArcPt = arc.getPtAt(param)\r\n if (onArcPt.equals(pt) && poles.findIndex(_ => _.equals(pt)) < 0) {\r\n poles.push(pt)\r\n }\r\n })\r\n return poles\r\n}\r\n\r\n/**\r\n * 绘制捕捉辅助对象\r\n */\r\nexport function drawSnapHelperPrompt(ptSnap: PtSnap, grep: GRep) {\r\n if (!ptSnap.getSnappedObjects().length) {\r\n return\r\n }\r\n\r\n const plane = Plane.XOY()\r\n for (const snappedObj of ptSnap.getSnappedObjects()) {\r\n if (snappedObj instanceof Ln2 && snappedObj.userData?.snapType === EN_SNAP_TYPE.ReferCurve && snappedObj.userData?.lastPickedPt) {\r\n const lastPickedPt = snappedObj.userData.lastPickedPt as Vec2\r\n const line = new Ln2(lastPickedPt, ptSnap.snappedPt)\r\n let color: number = EN_SNAP_PT_COLOR.PARALLEL_TO_AXIS\r\n const lineDir = line.getDirection()\r\n if (lineDir.isParallel(Vec2.X())) {\r\n color = 0xff0000\r\n } else if (lineDir.isParallel(Vec2.Y())) {\r\n color = 0x00ff00\r\n }\r\n const gline = new GCurve2d(plane, line)\r\n gline.setStyle({\r\n line: {\r\n color,\r\n width: 2,\r\n },\r\n })\r\n grep.addNode(gline)\r\n\r\n const gpoint = new GPoint2d(plane, lastPickedPt.clone())\r\n gpoint.setStyle({\r\n point: {\r\n color: EN_SNAP_PT_COLOR.PARALLEL_TO_AXIS,\r\n size: 6,\r\n },\r\n })\r\n grep.addNode(gpoint)\r\n } else if ((snappedObj as Vec2).isVector2?.() && (snappedObj as Vec2).userData?.refCurve) {\r\n const refCurve = (snappedObj as Vec2).userData.refCurve as Ln2\r\n const gcurve = new GCurve2d(plane, refCurve)\r\n gcurve.setStyle({\r\n line: {\r\n color: EN_SNAP_PT_COLOR.VERTICAL_PARALLEL,\r\n },\r\n })\r\n grep.addNode(gcurve)\r\n }\r\n }\r\n}\r\n","import { CCanvas } from '@ccpc/canvas'\r\nimport { GRep } from '@ccpc/core'\r\nimport { Vec2 } from '@ccpc/math'\r\nimport { EN_SNAP_HELP_OBJ, EN_SNAP_TYPE, PtSnap, SnapCandidates, SnapContext, SnapEngine, SnapSetting } from '@ccpc/snap'\r\n\r\nimport { EN_SNAP_PT_COLOR, type IPickedResult } from './i_picked_result'\r\nimport type { PickPointContext } from './pick_point_action'\r\nimport { PickUtil } from './pick_util'\r\nimport { SnapHelpMgr } from '../../model/snap_helper_manager'\r\nimport { HighLight } from '../../selection/high_light'\r\nimport { CmdMgr } from '../cmd_mgr'\r\nimport { drawSnapHelperPrompt } from './snap_helper_curve'\r\n\r\n/**\r\n * 平台侧吸附调用入口\r\n */\r\nexport class RunSnapUtil {\r\n /**\r\n * 计算当前鼠标位置的吸附结果\r\n * @param ccanvas 画布\r\n * @param screenPos 鼠标屏幕坐标\r\n * @param pickFilter 拾取过滤器\r\n */\r\n public static snapPoint(\r\n screenPos: Vec2,\r\n snapContext: SnapContext,\r\n ccanvas: CCanvas,\r\n context: PickPointContext,\r\n ): IPickedResult {\r\n snapContext.snappableGNodes = PickUtil.pickGNodes(ccanvas, screenPos, context.getPickFilter(), true)\r\n snapContext.cursorWorld = ccanvas.screenToWorkPlaneLocal(screenPos)\r\n snapContext.setSnapHelpers(EN_SNAP_HELP_OBJ.POINT, SnapHelpMgr.instance().getAllSnapHelperPoints())\r\n snapContext.setSnapHelpers(EN_SNAP_HELP_OBJ.CURVE, SnapHelpMgr.instance().getAllSnapHelperCurves())\r\n snapContext.setSnapHelpers(EN_SNAP_HELP_OBJ.DIR, SnapHelpMgr.instance().getAllSnapHelperDirs())\r\n SnapSetting.instance().setPixelsPerUnit(ccanvas.pixelsPerUnit())\r\n let candidates = SnapEngine.snap(snapContext)\r\n if (!candidates.snapResults.length) {\r\n candidates = new SnapCandidates()\r\n candidates.addSnapResult(new PtSnap(EN_SNAP_TYPE.PointOnSnapPlane, snapContext.cursorWorld.clone(), 0))\r\n }\r\n const snap = candidates.snapResults[0] as PtSnap\r\n this._drawSnapPrompt(candidates)\r\n if (context.highlightPickedGNodes) {\r\n HighLight.instance().reset([...snap.getSnappedGNodes()])\r\n }\r\n const plane = ccanvas.getWorkPlane().plane\r\n return {\r\n point: plane.getPtAt(snap.snappedPt),\r\n screenPt: screenPos.clone(),\r\n pickedPlane: plane,\r\n pickedGNodes: snap.getSnappedGNodes(),\r\n pickedRefObject: snap.getSnappedObjects(),\r\n snapType: snap.getSnapType(),\r\n }\r\n }\r\n\r\n private static _drawSnapPrompt(candidates: SnapCandidates) {\r\n const firstSnap = candidates.snapResults[0]\r\n if (!(firstSnap instanceof PtSnap)) {\r\n return\r\n }\r\n const grep = new GRep()\r\n let color = EN_SNAP_PT_COLOR.POINT_ON_FACE\r\n switch (firstSnap.getSnapType()) {\r\n case EN_SNAP_TYPE.Pole:\r\n case EN_SNAP_TYPE.EndPoint:\r\n color = EN_SNAP_PT_COLOR.END_POINT\r\n break\r\n case EN_SNAP_TYPE.MiddlePoint:\r\n case EN_SNAP_TYPE.Center:\r\n color = EN_SNAP_PT_COLOR.MIDDLE_POINT\r\n break\r\n case EN_SNAP_TYPE.ExtensionPoint:\n case EN_SNAP_TYPE.ParallelToX:\n case EN_SNAP_TYPE.ParallelToY:\n color = EN_SNAP_PT_COLOR.PARALLEL_TO_AXIS\n break\n case EN_SNAP_TYPE.PointOnCurve:\r\n color = EN_SNAP_PT_COLOR.POINT_ON_CURVE\r\n break\r\n case EN_SNAP_TYPE.ClosedLineParallelToX:\r\n case EN_SNAP_TYPE.ClosedLineParallelToY:\r\n color = EN_SNAP_PT_COLOR.PARALLEL_TO_AXIS\r\n break\r\n case EN_SNAP_TYPE.XPt:\r\n color = EN_SNAP_PT_COLOR.INTERSECT_POINT\r\n break\r\n case EN_SNAP_TYPE.ReferCurve:\r\n drawSnapHelperPrompt(firstSnap, grep)\r\n color = EN_SNAP_PT_COLOR.POINT_ON_CURVE\r\n break\r\n case EN_SNAP_TYPE.PerpendicularPoint:\r\n case EN_SNAP_TYPE.ParallelToCurve:\r\n case EN_SNAP_TYPE.VerticalToCurve:\r\n drawSnapHelperPrompt(firstSnap, grep)\r\n color = EN_SNAP_PT_COLOR.VERTICAL_PARALLEL\r\n break\r\n default:\r\n break\r\n }\r\n if (firstSnap.anotherSnapType) {\r\n switch (firstSnap.anotherSnapType) {\r\n case EN_SNAP_TYPE.ReferCurve:\r\n case EN_SNAP_TYPE.ParallelToCurve:\r\n case EN_SNAP_TYPE.VerticalToCurve:\r\n drawSnapHelperPrompt(firstSnap, grep)\r\n break\r\n default:\r\n break\r\n }\r\n }\r\n grep.addNode(firstSnap.getSnapPrompt())\r\n grep.setStyle({ point: { size: 8, color } })\r\n const action = CmdMgr.instance().getCurrentAction()\r\n action?.drawTmpGRep(grep)\r\n action?.getDoc().updateView()\r\n }\r\n}\r\n","import { Vec2, Vec3 } from '@ccpc/math';\nimport { EN_SNAP_HELP_OBJ, SnapContext } from '@ccpc/snap';\nimport { Action } from '../action';\nimport { FnKey, IMouseEvent } from '@ccpc/canvas';\nimport type { PickFilter } from './pick_filter';\nimport type { IPickedResult } from './i_picked_result';\nimport { createReferenceCurves, createReferenceDirs, createReferencePoint } from './snap_helper_curve';\nimport { RunSnapUtil } from './run_snap_util';\nimport { HighLight } from '../../selection/high_light';\nimport { EN_SNAP_HELPER_TYPE, SnapHelpMgr } from '../../model/snap_helper_manager';\n\r\nexport type IPickContextParam = {\n movingCallBack?: (pos: IPickedResult, fnKey: FnKey) => void\n clickCallBack?: (pos: IPickedResult, fnKey: FnKey) => void\n pickFilter?: PickFilter\n snapContext?: SnapContext\n}\n\r\n/**\r\n * 取点的Action\r\n */\r\nexport class PickPointAction extends Action<IPickedResult> {\n private _context: PickPointContext\n\n private _currentPickResult?: IPickedResult\n\n private _currentMousePos = Vec2.O()\n\n private _hoverSnappedPtTime = Date.now()\n\n private _hoverPickedGNodeTime = Date.now()\n\n private _lastPickedResult?: IPickedResult\n\r\n constructor(context = new PickPointContext()) {\n super()\n this._context = context\n if (context.snapContext) {\n context.snapContext.addSnapHelpers(\n EN_SNAP_HELP_OBJ.POINT,\n SnapHelpMgr.instance().getAllSnapHelperPoints(),\n )\n }\n }\n\n public getSnapContext(): SnapContext {\n return this._context.snapContext!\n }\n\n public setSnapContext(snapContext: SnapContext) {\n this._context.snapContext = snapContext\n }\n\r\n public getCurrentResult() {\r\n return this._currentPickResult\r\n }\r\n\r\n public getCurrentMousePos() {\r\n return this._currentMousePos\r\n }\r\n\r\n public getPickContext() {\r\n return this._context\r\n }\r\n\r\n public onDestroy(): void {\n super.onDestroy()\n SnapHelpMgr.instance().clearSnapHelperObjects(EN_SNAP_HELPER_TYPE.BRIEF)\n HighLight.instance().clear()\n this.getBuildInTmpElementPainter()?.clearTmp()\n }\n\r\n public onClick(evt: IMouseEvent) {\n this._currentMousePos = evt.pos\n if (this._context.getClickCallback() && this._currentPickResult) {\n this._context.getClickCallback()?.(this._currentPickResult, evt.fnKey)\n }\n if (this._currentPickResult) {\r\n this._markSuccess(this._currentPickResult)\r\n } else {\r\n const p = this._getPickPointResult(this._currentMousePos)\r\n this._markSuccess(p)\r\n }\r\n return true\r\n }\r\n\r\n public onMouseMove(evt: IMouseEvent): boolean {\n this._currentMousePos = evt.pos\n if (this.getBuildInTmpElementPainter()) {\n HighLight.instance().clear()\n this.getBuildInTmpElementPainter()?.clearTmp()\n }\n const res = this._getPickPointResult(evt.pos)\n this._context.movePoint(res, evt.fnKey)\n this._currentPickResult = res\n return true\n }\n\r\n protected _getPickPointResult(screenPos: Vec2) {\n createReferenceCurves(this._lastPickedResult, this._hoverSnappedPtTime)\n createReferenceDirs(\n this._lastPickedResult,\n this._hoverSnappedPtTime,\n this._context.snapContext?.previousPoint,\n )\n createReferencePoint(this._lastPickedResult, this._hoverPickedGNodeTime)\n\n const canvas = this.getCanvas()\n if (!this._context.snapContext) {\n this._context.snapContext = new SnapContext()\n }\n const res = RunSnapUtil.snapPoint(screenPos, this._context.snapContext, canvas, this._context)\n\n this._hoverSnappedPtTime = Date.now()\n if (\n !this._lastPickedResult?.pickedGNodes?.length ||\n !res.pickedGNodes?.length ||\n this._lastPickedResult.pickedGNodes.length !== res.pickedGNodes.length\n ) {\n this._hoverPickedGNodeTime = Date.now()\n } else if (res.pickedGNodes.some((v, idx) => v !== this._lastPickedResult!.pickedGNodes![idx])) {\n this._hoverPickedGNodeTime = Date.now()\n }\n this._lastPickedResult = {\n ...res,\n point: res.point.clone(),\n }\n return res\n }\n}\n\r\n/**\r\n * 取点上下文\r\n */\r\n// TODO 补充PickFilter等逻辑\r\nexport class PickPointContext {\n public snapContext?: SnapContext\n\n protected _currentPos: Vec3\n\n protected _movingCallBack?: (pos: IPickedResult, fnKey: FnKey) => void\n\n protected _clickCallBack?: (pos: IPickedResult, fnKey: FnKey) => void\n\n protected _pickFilter?: PickFilter\n\n private _highlightPickedGNodes?: boolean\n\n constructor(param?: IPickContextParam) {\n this._movingCallBack = param?.movingCallBack\n this._clickCallBack = param?.clickCallBack\n this._pickFilter = param?.pickFilter\n this.snapContext = param?.snapContext\n this._currentPos = Vec3.O()\n }\n\r\n public movePoint(p: IPickedResult, fnKey: FnKey) {\n if (this._movingCallBack) {\n this._movingCallBack(p, fnKey)\n }\n this._currentPos = p.point\n }\n\n public setClickCallBack(clickCallBack: (pos: IPickedResult, fnKey: FnKey) => void) {\n this._clickCallBack = clickCallBack\n }\n\n public getClickCallback() {\n return this._clickCallBack\n }\r\n\r\n public getPickFilter() {\r\n return this._pickFilter\r\n }\r\n\r\n public setPickFilter(filter?: PickFilter) {\n this._pickFilter = filter\n return this\n }\n\n public get highlightPickedGNodes(): boolean | undefined {\n return this._highlightPickedGNodes\n }\n\n public set highlightPickedGNodes(val: boolean | undefined) {\n this._highlightPickedGNodes = val\n }\n}\n","import { CmdMgr } from './cmd_mgr';\r\nimport { Cmd } from './cmd';\r\nimport { IConstructor } from '@ccpc/core';\r\n\r\n/**\r\n * 注册命令\r\n */\r\nexport function registerCmd(cmdId: string) {\r\n return (ctor: IConstructor<Cmd>) => {\r\n CmdMgr.instance().registerCmd(cmdId, ctor)\r\n }\r\n}\r\n"],"names":["CmdMgr","ClassManager","Signal","cmdId","cmd","rCmd","DebugUtil","Ctor","cmdParams","resolve","status","promiseExe","e","node","actions","next","c","evt","cmdMgr","CmdActionController","DefaultController","painter","TmpElementPainter","app","action","actionPromise","_params","index","i","grep","data","_evt","PickUtil","ccanvas","screenPos","pickFilter","forSnap","gNodes","pickedNodes","_","gnode","nodeValueCache","a","b","GPoint2d","GCurve2d","GPolycurve","GPolygon","GText2d","DefaultAction","picked","EditorMgr","editorMgr","Selection","doc","selectedEleIds","result","g","ElementId","ids","addGNodes","addEIds","id","success","numIds","HighLight","gnodes","App","container","evtProcess","cCanvas","CCanvas","EN_ActionStatus","ActionResult","_status","_data","Action","Cmd","EN_SNAP_HELPER_TYPE","SnapHelpMgr","snapHelperType","curves","dir","key","point","points","keys","p","deleteKey","idx","res","curvesKey","pt","type","EN_SNAP_PT_COLOR","HOVER_TIME","createReferenceCurves","lastPickedResult","lastTime","SnapSetting","nowTime","EN_SNAP_TYPE","localPt","curveX","Ln2","Vec2","CONST","curveY","createReferenceDirs","previousSnapPt","line2d","GNODE_TYPE","closestPt","alg","perpendicularDir","createReferencePoint","center","Arc2","arc","getArc2Poles","it","coord","candidatePts","poles","param","drawSnapHelperPrompt","ptSnap","plane","Plane","snappedObj","lastPickedPt","line","color","lineDir","gline","gpoint","refCurve","gcurve","RunSnapUtil","snapContext","context","EN_SNAP_HELP_OBJ","candidates","SnapEngine","SnapCandidates","PtSnap","snap","firstSnap","GRep","PickPointAction","PickPointContext","canvas","SnapContext","v","Vec3","fnKey","clickCallBack","filter","val","registerCmd","ctor"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ccpc/platform",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.28",
|
|
4
4
|
"description": "Platform command interaction layer for editor",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "./index.js",
|
|
8
8
|
"types": "./types/index.d.ts",
|
|
9
9
|
"peerDependencies": {
|
|
10
|
-
"@ccpc/canvas": "^0.1.
|
|
11
|
-
"@ccpc/core": "^0.1.
|
|
12
|
-
"@ccpc/math": "^0.1.
|
|
13
|
-
"@ccpc/snap": "^0.1.
|
|
10
|
+
"@ccpc/canvas": "^0.1.28",
|
|
11
|
+
"@ccpc/core": "^0.1.28",
|
|
12
|
+
"@ccpc/math": "^0.1.28",
|
|
13
|
+
"@ccpc/snap": "^0.1.28"
|
|
14
14
|
}
|
|
15
15
|
}
|