From f0340f2435b9ceb25d96cbc1eab3b07ff65f3562 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E8=AF=97=E6=B4=A5?= <2723065175@qq.com> Date: Tue, 22 Jun 2021 03:02:50 +0000 Subject: [PATCH] =?UTF-8?q?!1558=20=E5=8A=9F=E8=83=BD=EF=BC=9A=E5=8D=95?= =?UTF-8?q?=E6=9D=BF=E7=BB=98=E5=88=B6=E7=95=8C=E9=9D=A2=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E4=B8=AA=E7=BB=98=E5=88=B6=E4=B8=AA=E6=95=B0=E7=9A=84=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=EF=BC=8C=E4=B8=80=E6=AC=A1=E6=9C=80=E5=A4=9A=E5=8F=AF?= =?UTF-8?q?=E7=BB=98=E5=88=B650=E4=B8=AA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Add-on/DrawBoard/DrawSingleBoard.ts | 58 ++++++++++++++----- src/Common/BoardKeyList.ts | 1 + src/Common/CheckoutVaildValue.ts | 11 +++- src/Editor/DefaultConfig.ts | 3 +- src/UI/Components/Board/BoardCommon.tsx | 2 +- src/UI/Components/Board/CommonBoardOption.tsx | 16 +++-- src/UI/Components/Board/SingleBoardModal.tsx | 9 +++ src/UI/Store/BoardInterface.ts | 5 +- src/UI/Store/BoardStore.ts | 3 +- 9 files changed, 79 insertions(+), 29 deletions(-) diff --git a/src/Add-on/DrawBoard/DrawSingleBoard.ts b/src/Add-on/DrawBoard/DrawSingleBoard.ts index 9b0600630..2f8334bab 100644 --- a/src/Add-on/DrawBoard/DrawSingleBoard.ts +++ b/src/Add-on/DrawBoard/DrawSingleBoard.ts @@ -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); diff --git a/src/Common/BoardKeyList.ts b/src/Common/BoardKeyList.ts index df8424bb2..a696895e1 100644 --- a/src/Common/BoardKeyList.ts +++ b/src/Common/BoardKeyList.ts @@ -30,4 +30,5 @@ export enum EBoardKeyList SpliteHeight = "spliteHeight", SpliteWidth = "spliteWidth", SpliteThickness = "spliteThickness", + DrawNumber = "drawNumber", } diff --git a/src/Common/CheckoutVaildValue.ts b/src/Common/CheckoutVaildValue.ts index 25d7c9dae..c9212c8e2 100644 --- a/src/Common/CheckoutVaildValue.ts +++ b/src/Common/CheckoutVaildValue.ts @@ -204,7 +204,16 @@ export namespace CheckoutValid case "grooveAddWidth": case "back": if (isNaN(val)) - return "数值不能为空且必须为数字"; + return "数值不能为空且必须为数字!"; + case "drawNumber": + { + let count = safeEval(v); + let intCount = Math.floor(count); + if (intCount !== count) + return "绘制个数必须为整数!"; + if (count < 0 || count > 50) + return "绘制个数必须大于1且小于50!"; + } default: return ""; } diff --git a/src/Editor/DefaultConfig.ts b/src/Editor/DefaultConfig.ts index 067d3a559..0822619ce 100644 --- a/src/Editor/DefaultConfig.ts +++ b/src/Editor/DefaultConfig.ts @@ -169,7 +169,8 @@ export const DefaultSingleBoardOption: SingleBoardOption = { thickness: 18, rotateX: 0, rotateY: 0, - rotateZ: 0 + rotateZ: 0, + drawNumber: 1 }; Object.freeze(DefaultSingleBoardOption); diff --git a/src/UI/Components/Board/BoardCommon.tsx b/src/UI/Components/Board/BoardCommon.tsx index f41a73219..551ed9a51 100644 --- a/src/UI/Components/Board/BoardCommon.tsx +++ b/src/UI/Components/Board/BoardCommon.tsx @@ -78,7 +78,7 @@ export class SetBoardDataItem extends React.Component
{props.title}: - + diff --git a/src/UI/Components/Board/CommonBoardOption.tsx b/src/UI/Components/Board/CommonBoardOption.tsx index 194c98c81..eed4ff57f 100644 --- a/src/UI/Components/Board/CommonBoardOption.tsx +++ b/src/UI/Components/Board/CommonBoardOption.tsx @@ -1,21 +1,19 @@ -import { Intent } from '@blueprintjs/core'; -import { observable, toJS, action } from 'mobx'; +import { action, IObservableValue, observable, toJS } from 'mobx'; import * as React from 'react'; import { MathUtils } from 'three'; +import { InitRectBoardHoleOption, IRectHoleOption, SetRectHighHole } from '../../../Add-on/DrawDrilling/HoleUtils'; import { app } from '../../../ApplicationServices/Application'; import { CheckObjectType, CheckoutValid } from '../../../Common/CheckoutVaildValue'; +import { DataAdapter } from '../../../Common/DataAdapter'; import { safeEval } from '../../../Common/eval'; import { FixedNotZero } from '../../../Common/Utils'; import { Board } from '../../../DatabaseServices/Entity/Board'; import { CommandWrap } from '../../../Editor/CommandMachine'; +import { DefaultBoardProcessOption } from '../../../Editor/DefaultConfig'; import { userConfig } from '../../../Editor/UserConfig'; import { equaln } from '../../../Geometry/GeUtils'; -import { BoardProcessOption, IGrooveOption, SingleBoardOption, IUiOption } from '../../Store/BoardInterface'; +import { BoardProcessOption, IGrooveOption, IUiOption, SingleBoardOption } from '../../Store/BoardInterface'; import { ToasterValueError } from '../Toaster'; -import { IObservableValue } from 'mobx'; -import { DataAdapter } from '../../../Common/DataAdapter'; -import { DefaultBoardProcessOption } from '../../../Editor/DefaultConfig'; -import { InitRectBoardHoleOption, IRectHoleOption, SetRectHighHole } from '../../../Add-on/DrawDrilling/HoleUtils'; export interface ICommonOptionProps { @@ -41,7 +39,7 @@ export function AddCommonBoardProps(Com: React.ComponentType { static displayName = 'BoardOption'; public _ConfigOption: SingleBoardOption = observable({ - name: "", type: 0, rotateX: 0, rotateY: 0, rotateZ: 0 + name: "", type: 0, rotateX: 0, rotateY: 0, rotateZ: 0, drawNumber: 1 }); public _ProcessOption: BoardProcessOption = observable({ ...DefaultBoardProcessOption @@ -65,7 +63,7 @@ export function AddCommonBoardProps(Com: React.ComponentType public remarks: [string, string][] = observable(Array.from({ length: 12 }, () => ["", ""]) as [string, string][]); public otherBoardData = observable({ isChaiDan: true }); public _UIConfigOPtion: IUiOption = observable({ - name: "", type: "0", rotateX: "0", rotateY: "0", rotateZ: "0" + name: "", type: "0", rotateX: "0", rotateY: "0", rotateZ: "0", drawNumber: "1" }); constructor(props) { diff --git a/src/UI/Components/Board/SingleBoardModal.tsx b/src/UI/Components/Board/SingleBoardModal.tsx index 253ac9cd9..5bee8038d 100644 --- a/src/UI/Components/Board/SingleBoardModal.tsx +++ b/src/UI/Components/Board/SingleBoardModal.tsx @@ -14,6 +14,7 @@ export const SingleBoardModal = let processPars = [ ["spliteHeight", "拆单高"], ["spliteWidth", "拆单宽"], ["spliteThickness", "拆单厚"] ]; + let drNum = [["drawNumber", "绘制数"]]; let opt = props.store.m_Option; let uiOpt = props.store.UIOption; let processOpt = props.store.m_BoardProcessOption; @@ -34,6 +35,14 @@ export const SingleBoardModal = option={processOpt} isInline={true} /> + +
); })); diff --git a/src/UI/Store/BoardInterface.ts b/src/UI/Store/BoardInterface.ts index eff972e96..fbc3881c0 100644 --- a/src/UI/Store/BoardInterface.ts +++ b/src/UI/Store/BoardInterface.ts @@ -111,6 +111,7 @@ export interface BoardProcessOption extends IBaseOption [EBoardKeyList.SpliteHeight]?: string;//拆单高/宽/厚 [EBoardKeyList.SpliteWidth]?: string; [EBoardKeyList.SpliteThickness]?: string; + highDrill?: string[]; frontDrill: boolean; backDrill: boolean; @@ -250,13 +251,15 @@ export interface TBBoardOption extends BoardConfigOption isDrawStrengthenStrip?: boolean; divCount?: number; } + export interface SingleBoardOption extends BoardConfigOption { rotateX: number; rotateY: number; rotateZ: number; - + drawNumber: number; } + export enum StripType { H = "h", diff --git a/src/UI/Store/BoardStore.ts b/src/UI/Store/BoardStore.ts index 56142eac5..498157e1a 100644 --- a/src/UI/Store/BoardStore.ts +++ b/src/UI/Store/BoardStore.ts @@ -609,7 +609,8 @@ export class SingleBoardStore extends BoardStore thickness: 18, rotateX: 0, rotateY: 0, - rotateZ: 0 + rotateZ: 0, + drawNumber: 1 }; InitOption() {