|
|
|
@ -1,10 +1,9 @@
|
|
|
|
|
import { MathUtils } from 'three';
|
|
|
|
|
import { MathUtils, Matrix4, Vector3 } from 'three';
|
|
|
|
|
import { app } from '../../ApplicationServices/Application';
|
|
|
|
|
import { Board } from '../../DatabaseServices/Entity/Board';
|
|
|
|
|
import { Command } from '../../Editor/CommandMachine';
|
|
|
|
|
import { JigUtils } from '../../Editor/JigUtils';
|
|
|
|
|
import { PromptStatus } from '../../Editor/PromptResult';
|
|
|
|
|
import { MoveMatrix } from '../../Geometry/GeUtils';
|
|
|
|
|
import { BoardModal, BoardModalType } from '../../UI/Components/Board/BoardModal';
|
|
|
|
|
import { SingleBoardStore } from '../../UI/Store/BoardStore';
|
|
|
|
|
import { AutoCutting } from '../BoardCutting/AutoCuttingReactor';
|
|
|
|
@ -19,30 +18,59 @@ export class DrawSingleBoard implements Command
|
|
|
|
|
app.Editor.ModalManage.SetCallback(async () =>
|
|
|
|
|
{
|
|
|
|
|
const opt = store.m_Option;
|
|
|
|
|
let board = JigUtils.Draw(Board.CreateBoard(opt.height, opt.width, opt.thickness, opt.type));
|
|
|
|
|
board.BoardProcessOption = store.BoardProcessOption;
|
|
|
|
|
board.Name = opt.name;
|
|
|
|
|
let rx = MathUtils.degToRad(opt.rotateX);
|
|
|
|
|
let ry = MathUtils.degToRad(opt.rotateY);
|
|
|
|
|
let rz = MathUtils.degToRad(opt.rotateZ);
|
|
|
|
|
let boards: Board[] = [];
|
|
|
|
|
let moveMatrix = new Matrix4;
|
|
|
|
|
|
|
|
|
|
board.RotateBoard(rx, ry, rz);
|
|
|
|
|
for (let i = 0; i < opt.drawNumber; i++)
|
|
|
|
|
{
|
|
|
|
|
let board = Board.CreateBoard(opt.height, opt.width, opt.thickness, opt.type);
|
|
|
|
|
board.BoardProcessOption = store.BoardProcessOption;
|
|
|
|
|
board.Name = opt.name;
|
|
|
|
|
|
|
|
|
|
let rx = MathUtils.degToRad(opt.rotateX);
|
|
|
|
|
let ry = MathUtils.degToRad(opt.rotateY);
|
|
|
|
|
let rz = MathUtils.degToRad(opt.rotateZ);
|
|
|
|
|
|
|
|
|
|
board.RotateBoard(rx, ry, rz);
|
|
|
|
|
|
|
|
|
|
if (opt.type === 2)
|
|
|
|
|
moveMatrix.setPosition(0, (opt.thickness + 400) * i, 0);
|
|
|
|
|
else
|
|
|
|
|
moveMatrix.setPosition(0, (opt.width + 200) * i, 0);
|
|
|
|
|
|
|
|
|
|
board.ApplyMatrix(moveMatrix);
|
|
|
|
|
|
|
|
|
|
JigUtils.Draw(board);
|
|
|
|
|
boards.push(board);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let moveVector = new Vector3;//临时变量,也代表最后点的位置
|
|
|
|
|
|
|
|
|
|
let ptRes = await app.Editor.GetPoint({
|
|
|
|
|
Msg: "选择基点",
|
|
|
|
|
AllowNone: true,
|
|
|
|
|
Callback: v =>
|
|
|
|
|
Callback: p =>
|
|
|
|
|
{
|
|
|
|
|
let vec = v.clone().sub(board.MinPoint);
|
|
|
|
|
board.ApplyMatrix(MoveMatrix(vec));
|
|
|
|
|
moveVector.subVectors(p, moveVector);
|
|
|
|
|
moveMatrix.setPosition(moveVector);
|
|
|
|
|
moveVector.copy(p);
|
|
|
|
|
for (let i = 0; i < opt.drawNumber; i++)
|
|
|
|
|
{
|
|
|
|
|
boards[i].ApplyMatrix(moveMatrix);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
if (ptRes.Status === PromptStatus.OK)
|
|
|
|
|
{
|
|
|
|
|
let vec = ptRes.Point.sub(board.MinPoint);
|
|
|
|
|
board.ApplyMatrix(MoveMatrix(vec));
|
|
|
|
|
app.Database.ModelSpace.Append(board);
|
|
|
|
|
moveVector.subVectors(ptRes.Point, moveVector);
|
|
|
|
|
moveMatrix.setPosition(moveVector);
|
|
|
|
|
|
|
|
|
|
for (let i = 0; i < opt.drawNumber; i++)
|
|
|
|
|
{
|
|
|
|
|
boards[i].ApplyMatrix(moveMatrix);
|
|
|
|
|
app.Database.ModelSpace.Append(boards[i]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (store.autoCutOption.isAutoCut)
|
|
|
|
|
await AutoCutting(store.autoCutOption.isRelevance);
|
|
|
|
|