优化空间分析

pull/93/head
Zoe 6 years ago
parent 65e83b8758
commit e2cfeb67f4

@ -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);
}
}

@ -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)

@ -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 (
<Dialog
@ -18,33 +22,72 @@ export class TopBottomBaordDiaLog extends React.Component<{ store?: TopBottomBoa
enforceFocus={false}
title={store.title}
>
<div className="pt-dialog-body" onKeyDown={e => e.stopPropagation()}>
<RadioGroup
onChange={e => store.boardOption.isTopWrapSide = e.currentTarget.value === "1"}
selectedValue={store.boardOption.isTopWrapSide ? "1" : "0"}
>
<Radio label="侧包顶" value="0" />
<Radio label="顶包侧" value="1" />
</RadioGroup>
{
Array.from(store.m_Parameter.keys()).map(k =>
<div className="pt-dialog-body" onKeyDown={e => e.stopPropagation()} style={flexStyle}>
<div className="pt-card pt-elevation-0">
<h4></h4>
<RadioGroup
onChange={e => store.topBoardOption.isWrapSide = e.currentTarget.value === "1"}
selectedValue={store.topBoardOption.isWrapSide ? "1" : "0"}
>
<Radio label="侧包顶" value="0" />
<Radio label="顶包侧" value="1" />
</RadioGroup>
{
return (
<div key={k}>
<label htmlFor="">{store.m_Parameter.get(k)}:</label>
<input
type="number"
value={store.boardOption[k]}
onChange={e =>
{
store.boardOption[k] = e.target.value;
}}
/>
</div>
)
})
}
Array.from(store.m_Parameter.keys()).map(k =>
{
return (
<div key={k}>
<label htmlFor="">{store.m_Parameter.get(k)}:</label>
<input
type="number"
value={store.topBoardOption[k]}
disabled={
((k === "rightExt" || k === "leftExt") && !store.topBoardOption.isWrapSide)
|| ((k === "offset" || k === "footThickness") && store.topBoardOption.isWrapSide)
}
onChange={e =>
{
store.topBoardOption[k] = e.target.value;
}}
/>
</div>
)
})
}
</div>
<div className="pt-card pt-elevation-0">
<h4></h4>
<RadioGroup
onChange={e => store.bottomBoardOption.isWrapSide = e.currentTarget.value === "1"}
selectedValue={store.bottomBoardOption.isWrapSide ? "1" : "0"}
>
<Radio label="侧包底" value="0" />
<Radio label="底包侧" value="1" />
</RadioGroup>
{
Array.from(store.m_Parameter.keys()).map(k =>
{
return (
<div key={k}>
<label htmlFor="">{store.m_Parameter.get(k)}:</label>
<input
type="number"
value={store.bottomBoardOption[k]}
disabled={
((k === "rightExt" || k === "leftExt") && !store.bottomBoardOption.isWrapSide)
|| ((k === "offset" || k === "footThickness") && store.bottomBoardOption.isWrapSide)
}
onChange={e =>
{
store.bottomBoardOption[k] = e.target.value;
}}
/>
</div>
)
})
}
</div>
</div>
<div className="pt-dialog-footer">

@ -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()

Loading…
Cancel
Save