From e2cfeb67f41906f1d59ab101c6ef2a3533585d48 Mon Sep 17 00:00:00 2001 From: Zoe Date: Tue, 3 Jul 2018 17:00:42 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=A9=BA=E9=97=B4=E5=88=86?= =?UTF-8?q?=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Add-on/DrawTopBottomBoard.ts | 47 +++++++---- src/Geometry/SpaceParse.ts | 22 ++++- src/UI/Components/Board/TopBottomBaord.tsx | 93 ++++++++++++++++------ src/UI/Store/BoardStore.ts | 24 +++++- 4 files changed, 140 insertions(+), 46 deletions(-) diff --git a/src/Add-on/DrawTopBottomBoard.ts b/src/Add-on/DrawTopBottomBoard.ts index 4d04d1319..4a2048683 100644 --- a/src/Add-on/DrawTopBottomBoard.ts +++ b/src/Add-on/DrawTopBottomBoard.ts @@ -31,24 +31,12 @@ export class DrawTopBottomBoard implements Command let state = await store.GetBoardOption(); if (state === ModalState.Ok) { - let opt = store.boardOption; + let topOpt = store.topBoardOption; + let bottomOpt = store.bottomBoardOption; - let topBarod: Board; + this.buildTBBoard(spaceParse, topOpt, spaceParse.BaseTopUpPoint, spaceParse.BaseTopDownPoint, true) + this.buildTBBoard(spaceParse, bottomOpt, spaceParse.BaseBottomDownPoint, spaceParse.BaseBottomUpPoint); - if (opt.isTopWrapSide) - { - topBarod = Board.CreateBoard(spaceParse.TotalLength, spaceParse.SpaceWidth - parseFloat(opt.forwardDistance) + parseFloat(opt.behindDistance), parseFloat(opt.thickness), BoardType.Layer); - spaceParse.BaseTopUpPoint.add(new Vector3(0, 0, parseFloat(opt.thickness))); - topBarod.ApplyMatrix(MoveMatrix(spaceParse.BaseTopUpPoint)); - } - else - { - topBarod = Board.CreateBoard(spaceParse.SpaceLength, spaceParse.SpaceWidth - parseFloat(opt.forwardDistance) + parseFloat(opt.behindDistance), parseFloat(opt.thickness), BoardType.Layer) - topBarod.ApplyMatrix(MoveMatrix(spaceParse.BaseTopDownPoint)); - } - - topBarod.ApplyMatrix(new Matrix4().extractRotation(spaceParse.OCS)) - app.m_Database.ModelSpace.Append(topBarod); } } else @@ -61,4 +49,31 @@ export class DrawTopBottomBoard implements Command app.m_Editor.m_CommandStore.Prompt("不是选择2块板或者板类型不正确") } } + buildTBBoard(spaceParse: TopAndBottomSpaceParse, opt, wrapPt: Vector3, noWrapPt: Vector3, isTop = false) + { + let board: Board; + let basePt: Vector3; + let length; + + if (opt.isWrapSide) + { + length = spaceParse.TotalLength; + basePt = wrapPt; + isTop && basePt.add(new Vector3(0, 0, parseFloat(opt.thickness))); + } + else + { + length = spaceParse.SpaceLength; + basePt = noWrapPt; + !isTop && basePt.add(new Vector3(0, 0, parseFloat(opt.thickness))); + basePt.add(new Vector3(0, 0, parseFloat(opt.offset) * (isTop ? -1 : 1))); + } + + board = Board.CreateBoard(length, spaceParse.SpaceWidth - parseFloat(opt.forwardDistance) + parseFloat(opt.behindDistance), parseFloat(opt.thickness), BoardType.Layer) + board.ApplyMatrix(MoveMatrix(basePt)); + + let rot = new Matrix4().extractRotation(spaceParse.OCS) + board.ApplyMatrix(rot); + app.m_Database.ModelSpace.Append(board); + } } diff --git a/src/Geometry/SpaceParse.ts b/src/Geometry/SpaceParse.ts index 3e25a2a18..92a9a369c 100644 --- a/src/Geometry/SpaceParse.ts +++ b/src/Geometry/SpaceParse.ts @@ -72,6 +72,10 @@ export class TopAndBottomSpaceParse extends SpaceParse private m_BaseTopDownPoint: Vector3; // 顶包侧顶板基点 private m_BaseTopUpPoint: Vector3; + //侧包底底板基点 + private m_BaseBottomDownPoint: Vector3; + //底包侧底板基点 + private m_BaseBottomUpPoint: Vector3; constructor(boards: Board[]) { @@ -101,6 +105,14 @@ export class TopAndBottomSpaceParse extends SpaceParse { return this.m_BaseTopUpPoint; } + get BaseBottomDownPoint() + { + return this.m_BaseBottomDownPoint; + } + get BaseBottomUpPoint() + { + return this.m_BaseBottomUpPoint; + } get OCS() { return this.m_StandardBoard ? this.m_StandardBoard.BoardOCS : new Matrix4(); @@ -180,17 +192,23 @@ export class TopAndBottomSpaceParse extends SpaceParse if (this.m_StandardBoard === this.m_LeftBoard) { this.m_BaseTopDownPoint = new Vector3(rMinPt.x, lMinPt.y); - this.m_BaseTopUpPoint = new Vector3(rMinPt.x + b2.Thickness, lMinPt.y) + this.m_BaseTopUpPoint = new Vector3(rMinPt.x + b2.Thickness, lMinPt.y); } else { this.m_BaseTopDownPoint = new Vector3(rMinPt.x, rMinPt.y); this.m_BaseTopUpPoint = new Vector3(rMinPt.x + b2.Thickness, rMinPt.y) } - this.m_BaseTopDownPoint.setZ(lMaxPt.z < rMaxPt.z ? lMaxPt.z : rMaxPt.z); + this.m_BaseTopDownPoint.setZ(lMaxPt.z < rMaxPt.z ? lMaxPt.z : rMaxPt.z); this.m_BaseTopUpPoint.setZ(lMaxPt.z > rMaxPt.z ? lMaxPt.z : rMaxPt.z); + this.m_BaseBottomUpPoint = this.m_BaseTopDownPoint.clone(); + this.m_BaseBottomDownPoint = this.m_BaseTopUpPoint.clone(); + + this.m_BaseBottomUpPoint.setZ(lMinPt.z > rMinPt.z ? lMinPt.z : rMinPt.z); + this.m_BaseBottomDownPoint.setZ(lMinPt.z < rMinPt.z ? lMinPt.z : rMinPt.z) + //分析背板 let behindBoards = this.boardMap.get(BoardType.Behind); if (behindBoards && behindBoards.length === 1) diff --git a/src/UI/Components/Board/TopBottomBaord.tsx b/src/UI/Components/Board/TopBottomBaord.tsx index d95480f17..3611f0a75 100644 --- a/src/UI/Components/Board/TopBottomBaord.tsx +++ b/src/UI/Components/Board/TopBottomBaord.tsx @@ -9,6 +9,10 @@ export class TopBottomBaordDiaLog extends React.Component<{ store?: TopBottomBoa render() { let store = this.props.store; + let flexStyle: React.CSSProperties = { + display: "flex", + justifyContent: "space-between" + } return ( -
e.stopPropagation()}> - store.boardOption.isTopWrapSide = e.currentTarget.value === "1"} - selectedValue={store.boardOption.isTopWrapSide ? "1" : "0"} - > - - - - { - Array.from(store.m_Parameter.keys()).map(k => +
e.stopPropagation()} style={flexStyle}> +
+

顶板

+ store.topBoardOption.isWrapSide = e.currentTarget.value === "1"} + selectedValue={store.topBoardOption.isWrapSide ? "1" : "0"} + > + + + { - return ( -
- - - { - store.boardOption[k] = e.target.value; - }} - /> -
- ) - }) - } + Array.from(store.m_Parameter.keys()).map(k => + { + return ( +
+ + + { + store.topBoardOption[k] = e.target.value; + }} + /> +
+ ) + }) + } +
+
+

底板

+ store.bottomBoardOption.isWrapSide = e.currentTarget.value === "1"} + selectedValue={store.bottomBoardOption.isWrapSide ? "1" : "0"} + > + + + + { + Array.from(store.m_Parameter.keys()).map(k => + { + return ( +
+ + + { + store.bottomBoardOption[k] = e.target.value; + }} + /> +
+ ) + }) + } +
diff --git a/src/UI/Store/BoardStore.ts b/src/UI/Store/BoardStore.ts index 07998534f..7037a5fd0 100644 --- a/src/UI/Store/BoardStore.ts +++ b/src/UI/Store/BoardStore.ts @@ -73,13 +73,31 @@ export class SideBoardStore extends BoardStore export class TopBottomBoardStore extends BoardStore { - @observable boardOption = { + @observable topBoardOption = { thickness: "0.18", forwardDistance: "0", behindDistance: "-0.18", - isTopWrapSide: false + isWrapSide: false, + leftExt: "0", + rightExt: "0", + offset: "0", + footThickness: "0.18" }; - m_Parameter = new Map([["thickness", "板厚"], ["forwardDistance", "前距"], ["behindDistance", "后距"]]); + @observable bottomBoardOption = { + thickness: "0.18", + forwardDistance: "0", + behindDistance: "-0.18", + isWrapSide: false, + leftExt: "0", + rightExt: "0", + offset: "0.8", + footThickness: "0.18" + }; + m_Parameter = new Map([ + ["thickness", "板厚"], ["forwardDistance", "前距"], ["behindDistance", "后距"], + ["leftExt", "左延伸"], ["rightExt", "右延伸"], + ["offset", "偏移距离"], ["footThickness", "地脚线厚"] + ]); title = "顶底板"; private static _store: TopBottomBoardStore; static Store()