!1558 功能:单板绘制界面增加个绘制个数的功能,一次最多可绘制50个

pull/1558/MERGE
黄诗津 3 years ago committed by ChenX
parent ccb20aae90
commit f0340f2435

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

@ -30,4 +30,5 @@ export enum EBoardKeyList
SpliteHeight = "spliteHeight", SpliteHeight = "spliteHeight",
SpliteWidth = "spliteWidth", SpliteWidth = "spliteWidth",
SpliteThickness = "spliteThickness", SpliteThickness = "spliteThickness",
DrawNumber = "drawNumber",
} }

@ -204,7 +204,16 @@ export namespace CheckoutValid
case "grooveAddWidth": case "grooveAddWidth":
case "back": case "back":
if (isNaN(val)) 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: default:
return ""; return "";
} }

@ -169,7 +169,8 @@ export const DefaultSingleBoardOption: SingleBoardOption = {
thickness: 18, thickness: 18,
rotateX: 0, rotateX: 0,
rotateY: 0, rotateY: 0,
rotateZ: 0 rotateZ: 0,
drawNumber: 1
}; };
Object.freeze(DefaultSingleBoardOption); Object.freeze(DefaultSingleBoardOption);

@ -1,21 +1,19 @@
import { Intent } from '@blueprintjs/core'; import { action, IObservableValue, observable, toJS } from 'mobx';
import { observable, toJS, action } from 'mobx';
import * as React from 'react'; import * as React from 'react';
import { MathUtils } from 'three'; import { MathUtils } from 'three';
import { InitRectBoardHoleOption, IRectHoleOption, SetRectHighHole } from '../../../Add-on/DrawDrilling/HoleUtils';
import { app } from '../../../ApplicationServices/Application'; import { app } from '../../../ApplicationServices/Application';
import { CheckObjectType, CheckoutValid } from '../../../Common/CheckoutVaildValue'; import { CheckObjectType, CheckoutValid } from '../../../Common/CheckoutVaildValue';
import { DataAdapter } from '../../../Common/DataAdapter';
import { safeEval } from '../../../Common/eval'; import { safeEval } from '../../../Common/eval';
import { FixedNotZero } from '../../../Common/Utils'; import { FixedNotZero } from '../../../Common/Utils';
import { Board } from '../../../DatabaseServices/Entity/Board'; import { Board } from '../../../DatabaseServices/Entity/Board';
import { CommandWrap } from '../../../Editor/CommandMachine'; import { CommandWrap } from '../../../Editor/CommandMachine';
import { DefaultBoardProcessOption } from '../../../Editor/DefaultConfig';
import { userConfig } from '../../../Editor/UserConfig'; import { userConfig } from '../../../Editor/UserConfig';
import { equaln } from '../../../Geometry/GeUtils'; 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 { 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 export interface ICommonOptionProps
{ {
@ -41,7 +39,7 @@ export function AddCommonBoardProps(Com: React.ComponentType<ICommonOptionProps>
{ {
static displayName = 'BoardOption'; static displayName = 'BoardOption';
public _ConfigOption: SingleBoardOption = observable({ 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({ public _ProcessOption: BoardProcessOption = observable({
...DefaultBoardProcessOption ...DefaultBoardProcessOption
@ -65,7 +63,7 @@ export function AddCommonBoardProps(Com: React.ComponentType<ICommonOptionProps>
public remarks: [string, string][] = observable(Array.from({ length: 12 }, () => ["", ""]) as [string, string][]); public remarks: [string, string][] = observable(Array.from({ length: 12 }, () => ["", ""]) as [string, string][]);
public otherBoardData = observable({ isChaiDan: true }); public otherBoardData = observable({ isChaiDan: true });
public _UIConfigOPtion: IUiOption<SingleBoardOption> = observable({ public _UIConfigOPtion: IUiOption<SingleBoardOption> = observable({
name: "", type: "0", rotateX: "0", rotateY: "0", rotateZ: "0" name: "", type: "0", rotateX: "0", rotateY: "0", rotateZ: "0", drawNumber: "1"
}); });
constructor(props) constructor(props)
{ {

@ -14,6 +14,7 @@ export const SingleBoardModal =
let processPars = [ let processPars = [
["spliteHeight", "拆单高"], ["spliteWidth", "拆单宽"], ["spliteThickness", "拆单厚"] ["spliteHeight", "拆单高"], ["spliteWidth", "拆单宽"], ["spliteThickness", "拆单厚"]
]; ];
let drNum = [["drawNumber", "绘制数"]];
let opt = props.store.m_Option; let opt = props.store.m_Option;
let uiOpt = props.store.UIOption; let uiOpt = props.store.UIOption;
let processOpt = props.store.m_BoardProcessOption; let processOpt = props.store.m_BoardProcessOption;
@ -34,6 +35,14 @@ export const SingleBoardModal =
option={processOpt} option={processOpt}
isInline={true} isInline={true}
/> />
<SetBoardDataBlock
type={CheckObjectType.BR}
pars={drNum}
option={opt}
uiOption={uiOpt}
isInline={true}
/>
</div> </div>
); );
})); }));

@ -111,6 +111,7 @@ export interface BoardProcessOption extends IBaseOption
[EBoardKeyList.SpliteHeight]?: string;//拆单高/宽/厚 [EBoardKeyList.SpliteHeight]?: string;//拆单高/宽/厚
[EBoardKeyList.SpliteWidth]?: string; [EBoardKeyList.SpliteWidth]?: string;
[EBoardKeyList.SpliteThickness]?: string; [EBoardKeyList.SpliteThickness]?: string;
highDrill?: string[]; highDrill?: string[];
frontDrill: boolean; frontDrill: boolean;
backDrill: boolean; backDrill: boolean;
@ -250,13 +251,15 @@ export interface TBBoardOption extends BoardConfigOption
isDrawStrengthenStrip?: boolean; isDrawStrengthenStrip?: boolean;
divCount?: number; divCount?: number;
} }
export interface SingleBoardOption extends BoardConfigOption export interface SingleBoardOption extends BoardConfigOption
{ {
rotateX: number; rotateX: number;
rotateY: number; rotateY: number;
rotateZ: number; rotateZ: number;
drawNumber: number;
} }
export enum StripType export enum StripType
{ {
H = "h", H = "h",

@ -609,7 +609,8 @@ export class SingleBoardStore extends BoardStore<SingleBoardOption>
thickness: 18, thickness: 18,
rotateX: 0, rotateX: 0,
rotateY: 0, rotateY: 0,
rotateZ: 0 rotateZ: 0,
drawNumber: 1
}; };
InitOption() InitOption()
{ {

Loading…
Cancel
Save