diff --git a/src/Add-on/KJLImport.ts b/src/Add-on/KJLImport.ts index 3a15b3daa..d2f65113b 100644 --- a/src/Add-on/KJLImport.ts +++ b/src/Add-on/KJLImport.ts @@ -2,6 +2,7 @@ import { Euler, Matrix4, Vector2, Vector3 } from "three"; import { app } from "../ApplicationServices/Application"; import { EBoardKeyList } from "../Common/BoardKeyList"; import { FileSystem } from "../Common/FileSystem"; +import { JigMoveEntity } from "../Common/JigMove"; import { FixIndex, ToFixed } from "../Common/Utils"; import { Board, BoardType } from "../DatabaseServices/Entity/Board"; import { ExtrudeSolid } from "../DatabaseServices/Entity/Extrude"; @@ -118,6 +119,13 @@ export class Command_KJLImport implements Command let gName = m.modelBrandGoodName; ParseModel(m, roomName, gName); } + + let ens = app.CommandReactor._createObejcts.filter(obj => obj instanceof Board) as Board[]; + if (ens.length === 0) + return true; + + let ok = await JigMoveEntity(ens); + return !ok; } } } diff --git a/src/Common/JigMove.ts b/src/Common/JigMove.ts new file mode 100644 index 000000000..7977463a1 --- /dev/null +++ b/src/Common/JigMove.ts @@ -0,0 +1,49 @@ +import { Matrix4, Vector3 } from "three"; +import { app } from "../ApplicationServices/Application"; +import { Entity } from "../DatabaseServices/Entity/Entity"; +import { PromptStatus } from "../Editor/PromptResult"; + +export async function JigMoveEntity(entitys: Entity[]): Promise +{ + let pos = new Vector3(); + let mtx = new Matrix4(); + let baseP = new Vector3(); + + while (true) + { + let ptRes = await app.Editor.GetPoint({ + Msg: "点取位置", + KeyWordList: [{ key: "B", msg: "基点" }], + Callback: (p: Vector3) => + { + mtx.setPosition(p.clone().sub(pos)); + for (let e of entitys) + e.ApplyMatrix(mtx); + pos.copy(p); + } + }); + if (ptRes.Status === PromptStatus.Keyword) + { + app.Editor.GetPointServices.snapServices.FilterErase = false; + let baseRes = await app.Editor.GetPoint({ Msg: "点取新基点:" }); + app.Editor.GetPointServices.snapServices.FilterErase = true; + if (baseRes.Status === PromptStatus.OK) + { + let p = baseRes.Point; + baseP.add(p).sub(pos); + pos = p; + } + continue; + } + if (ptRes.Status === PromptStatus.OK) + { + mtx.setPosition(ptRes.Point.sub(pos)); + for (let e of entitys) + e.ApplyMatrix(mtx); + + mtx.setPosition(ptRes.Point.sub(baseP)); + return mtx; + } + break; + } +} diff --git a/src/Reactor/CommandReactor.ts b/src/Reactor/CommandReactor.ts index 4a00263bf..954701c41 100644 --- a/src/Reactor/CommandReactor.ts +++ b/src/Reactor/CommandReactor.ts @@ -9,8 +9,8 @@ type CommandEndListener = (cmdName: string, changeObjects: CADObject[], createOb export class CommandReactor { - private _cmdName: string; - private _createObejcts: CADObject[] = []; + _cmdName: string; + _createObejcts: CADObject[] = []; constructor(private app: ApplicationService) { begin(commandMachine, commandMachine.CommandStart, (cmdName: string) =>