!606 层板钉跟随模块变化

pull/606/MERGE
ZoeLeeFZ 5 years ago committed by ChenX
parent 9b7cb7d890
commit eb9df81e47

@ -0,0 +1,284 @@
import { Board, BoardType } from "../../DatabaseServices/Entity/Board";
import { GangDrill, GangDrillType } from "../../DatabaseServices/3DSolid/GangDrill";
import { LayerBoardOption, LayerNailOption } from "../../UI/Store/BoardInterface";
import { Matrix4, Vector3 } from "three";
import { MoveMatrix } from "../../Geometry/GeUtils";
import { ObjectId } from "../../DatabaseServices/ObjectId";
import { arrayLast } from "../../Common/ArrayExt";
import { ISpaceParse } from "../../Geometry/SpaceParse/ISpaceParse";
import { app } from "../../ApplicationServices/Application";
enum NailPos
{
Left = 0,
Right = 1,
Back = 2,
}
interface INailProps
{
pos: NailPos;
nail: GangDrill;
}
class BuildLayerNailsTool
{
private leftBoard: Board;
private rightBoard: Board;
private backBoard: Board;
private option: LayerBoardOption;
private nailOption: LayerNailOption;
private space: ISpaceParse;
private InitTool(option: LayerBoardOption, nailOption: LayerNailOption, space: ISpaceParse)
{
this.option = option;
this.nailOption = nailOption;
this.space = space;
}
//初始化层板钉
private InitBuildNails(br: Board): INailProps[]
{
const nailOpt = this.nailOption;
const layerOpt = this.option;
let rad = nailOpt.rad;
let leftShrink = layerOpt.leftShrink;
let rightShrink = layerOpt.rightShrink;
let depth = nailOpt.depth;
let frontDist = nailOpt.front;
//左右2侧初始层板钉
let initNails: INailProps[] = [];
if (this.leftBoard)
{
let lNail = GangDrill.CreateCylDrill(rad, nailOpt.length, GangDrillType.Nail);
lNail.ApplyMatrix(new Matrix4().makeRotationX(Math.PI / 2))
.ApplyMatrix(MoveMatrix(new Vector3(frontDist, br.Height + depth + leftShrink, -rad)));
initNails.push({
pos: NailPos.Left,
nail: lNail
});
}
if (this.rightBoard)
{
let rNail = GangDrill.CreateCylDrill(rad, nailOpt.length, GangDrillType.Nail);
rNail.ApplyMatrix(new Matrix4().makeRotationX(-Math.PI / 2))
.ApplyMatrix(MoveMatrix(new Vector3(frontDist, -depth - rightShrink, -rad)));
initNails.push({
pos: NailPos.Right,
nail: rNail
});
}
if (this.backBoard)
{
let backShrink = (this.space.Size.y - layerOpt.frontShrink) - br.Width;
let bNail = GangDrill.CreateCylDrill(rad, nailOpt.length, GangDrillType.Nail);
bNail.ApplyMatrix(new Matrix4().makeRotationY(-Math.PI / 2))
.ApplyMatrix(MoveMatrix(new Vector3(br.Width + depth + backShrink, frontDist, -rad)));
initNails.push({
pos: NailPos.Back,
nail: bNail
});
}
return initNails;
}
private ParseHasLRBoard()
{
this.leftBoard = null;
this.rightBoard = null;
this.backBoard = null;
let minX = this.space.SpaceBox.min.x;
let maxX = this.space.SpaceBox.max.x;
const nailOpt = this.nailOption;
//如果层板和左右板得距离大于这个值,则这边不绘制层板钉
let refDist = nailOpt.length - nailOpt.depth;
let vertBrs: Board[] = this.space.BoardMap.get(BoardType.Vertical);
if (vertBrs && vertBrs.length > 0)
{
if (vertBrs.length === 1)
{
let center = this.space.SpaceBox.getCenter(new Vector3);
let pos = vertBrs[0].Position.applyMatrix4(this.space.SpaceOCSInv);
if (pos.x < center.x)
this.leftBoard = vertBrs[0];
else
this.rightBoard = vertBrs[0];
}
else
{
vertBrs.sort((br1, br2) =>
{
return br1.MinPoint.applyMatrix4(this.space.SpaceOCSInv).x - br2.MinPoint.applyMatrix4(this.space.SpaceOCSInv).x;
});
let lBr = vertBrs[0];
let rBr = arrayLast(vertBrs);
let pos1 = lBr.Position.applyMatrix4(this.space.SpaceOCSInv);
let pos2 = rBr.Position.applyMatrix4(this.space.SpaceOCSInv);
if (Math.abs(pos1.x - minX + lBr.Thickness) < refDist)
this.leftBoard = lBr;
if (Math.abs(pos2.x - maxX) < refDist)
this.rightBoard = rBr;
}
}
//允许在背板绘制层板钉
if (nailOpt.isInBack)
{
let backBrs = this.space.BoardMap.get(BoardType.Behind);
let maxY = this.space.SpaceBox.max.y;
if (backBrs && backBrs.length === 1)
{
let backBr = backBrs[0];
let backPos = backBr.Position.applyMatrix4(this.space.SpaceOCSInv);
if (Math.abs(backPos.y - maxY - backBr.Thickness) < refDist)
this.backBoard = backBr;
}
}
}
//绘制层板钉
private GetNails(br: Board, initNails: INailProps[])
{
const nailOpt = this.nailOption;
let addCount = nailOpt.addCount;
let count = nailOpt.count;
let dist = nailOpt.dist;
let frontDist = nailOpt.front;
let backDist = nailOpt.behind;
let singleDist: number;
//绘制数量为1时,层板钉在中间位置
if (count === 1)
singleDist = (br.Width - frontDist - backDist) / 2;
else
singleDist = (br.Width - frontDist - backDist) / (count - 1);
let backSingleDist = (br.Height - frontDist - backDist) / (count === 1 ? 2 : (count - 1));
let buildNails: INailProps[] = [];
//构建层板钉
for (let i = 1; i <= count; i++)
{
let nailProps = initNails.map(n =>
{
return {
pos: n.pos,
nail: n.nail.Clone()
};
});
for (let nailProp of nailProps)
{
let dist = nailProp.pos === NailPos.Back ? backSingleDist : singleDist;
let vec = new Vector3(count === 1 ? dist : dist * (i - 1));
if (nailProp.pos === NailPos.Back)
vec = new Vector3(0, vec.x);
nailProp.nail.ApplyMatrix(MoveMatrix(vec));
}
buildNails.push(...nailProps);
}
//增加的层板钉
let addNails = [];
for (let i = 1; i <= addCount; i++)
{
let nails = buildNails.map(n =>
{
return {
pos: n.pos,
nail: n.nail.Clone()
};
});
nails.forEach(n =>
{
n.nail.ApplyMatrix(MoveMatrix(new Vector3(0, 0, dist * i)));
addNails.push(n);
});
nails = buildNails.map(n =>
{
return {
pos: n.pos,
nail: n.nail.Clone()
};
});
nails.forEach(n =>
{
n.nail.ApplyMatrix(MoveMatrix(new Vector3(0, 0, -dist * i)));
addNails.push(n);
});
}
buildNails.push(...addNails);
for (let nailProps of buildNails)
nailProps.nail.ApplyMatrix(br.OCS);
return buildNails;
}
Start(brs: Board[], option: LayerBoardOption, nailOption: LayerNailOption, space: ISpaceParse)
{
this.InitTool(option, nailOption, space);
this.ParseHasLRBoard();
if (!option.isActive || !nailOption.isDraw)
{
for (let br of brs)
{
br.ClearLayerNails();
}
return;
}
for (let br of brs)
{
let nailProps = this.GetNails(br, this.InitBuildNails(br));
let oldNailIds = br.LayerNails;
for (let i = nailProps.length; i < oldNailIds.length; i++)
oldNailIds[i].Object.Erase();
for (let i = 0; i < nailProps.length; i++)
{
let nId: ObjectId;
if (i < oldNailIds.length)
{
let nail = oldNailIds[i].Object as GangDrill;
nail.Radius = nailProps[i].nail.Radius;
nail.Height = nailProps[i].nail.Height;
nail.Position = nailProps[i].nail.Position;
nId = nail.Id;
}
else
{
app.Database.ModelSpace.Append(nailProps[i].nail);
nId = nailProps[i].nail.Id;
br.AppendNails([nId]);
if (nailProps[i].pos === NailPos.Left)
{
if (this.leftBoard)
this.leftBoard.AppendNails([nId]);
}
else if (nailProps[i].pos === NailPos.Right)
{
if (this.rightBoard)
this.rightBoard.AppendNails([nId]);
}
else
{
if (this.backBoard)
this.backBoard.AppendNails([nId]);
}
}
}
}
}
}
export const buildLayerNailTool = new BuildLayerNailsTool();

@ -1,46 +1,25 @@
import { Matrix4, Vector3 } from 'three';
import { app } from '../../ApplicationServices/Application';
import { arrayLast } from '../../Common/ArrayExt';
import { GangDrill, GangDrillType } from '../../DatabaseServices/3DSolid/GangDrill';
import { Board, BoardType } from '../../DatabaseServices/Entity/Board';
import { ObjectId } from '../../DatabaseServices/ObjectId';
import { TemplateLayerBoard } from '../../DatabaseServices/Template/ProgramTempate/TemplateLayerBoard';
import { JigUtils } from '../../Editor/JigUtils';
import { MoveMatrix } from '../../Geometry/GeUtils';
import { LayerBoardOption } from '../../UI/Store/BoardInterface';
import { LayerBoardStore } from '../../UI/Store/BoardStore';
import { BuildLayerBoards, SetTemplatePositioning } from './BuildBoardTool';
import { DrawBoardTool } from './DrawBoardTool';
enum NailPos
{
Left = 0,
Right = 1,
Back = 2,
}
interface INailProps
{
pos: NailPos;
nail: GangDrill;
}
export class DrawLayerBoard extends DrawBoardTool
{
private leftBoard: Board;
private rightBoard: Board;
private backBoard: Board;
//构建板件
protected async buildBoard(isAppendSpace = true)
{
if (isAppendSpace)
{
const store = this.store as LayerBoardStore;
let temp = new TemplateLayerBoard().InitBaseParams();
temp.Option = this.store.m_Option as LayerBoardOption;
temp.Option = store.m_Option;
temp.NailOption = store.layerNailOption;
temp.UseBoardProcessOption = this.store.UseBoardProcessOption;
temp.BoardProcessOption = this.store.BoardProcessOption;
app.Database.TemplateTable.Append(temp);
await SetTemplatePositioning(this.space, temp);
temp.Objects.forEach(b => this.buildLayerNail(b.Object as Board));
}
else
{
@ -48,225 +27,4 @@ export class DrawLayerBoard extends DrawBoardTool
brs.forEach(b => JigUtils.Draw(b));
}
}
//初始化层板钉
private initBuildNails(br: Board): INailProps[]
{
this.leftBoard = null;
this.rightBoard = null;
this.backBoard = null;
const nailOpt = (this.store as LayerBoardStore).layerNailOption;
const layerOpt = (this.store as LayerBoardStore).m_Option;
let rad = nailOpt.rad;
let leftShrink = layerOpt.leftShrink;
let rightShrink = layerOpt.rightShrink;
let depth = nailOpt.depth;
let frontDist = nailOpt.front;
//分析是否有左右板
this.parseHasLRBoard();
//左右2侧初始层板钉
let initNails: INailProps[] = [];
if (this.leftBoard)
{
let lNail = GangDrill.CreateCylDrill(rad, nailOpt.length, GangDrillType.Nail);
lNail.ApplyMatrix(new Matrix4().makeRotationX(Math.PI / 2))
.ApplyMatrix(MoveMatrix(new Vector3(frontDist, br.Height + depth + leftShrink, -rad)));
initNails.push({
pos: NailPos.Left,
nail: lNail
});
}
if (this.rightBoard)
{
let rNail = GangDrill.CreateCylDrill(rad, nailOpt.length, GangDrillType.Nail);
rNail.ApplyMatrix(new Matrix4().makeRotationX(-Math.PI / 2))
.ApplyMatrix(MoveMatrix(new Vector3(frontDist, -depth - rightShrink, -rad)));
initNails.push({
pos: NailPos.Right,
nail: rNail
});
}
if (this.backBoard)
{
let backShrink = (this.space.Size.y - layerOpt.frontShrink) - br.Width;
let bNail = GangDrill.CreateCylDrill(rad, nailOpt.length, GangDrillType.Nail);
bNail.ApplyMatrix(new Matrix4().makeRotationY(-Math.PI / 2))
.ApplyMatrix(MoveMatrix(new Vector3(br.Width + depth + backShrink, frontDist, -rad)));
initNails.push({
pos: NailPos.Back,
nail: bNail
});
}
return initNails;
}
parseHasLRBoard()
{
let minX = this.space.SpaceBox.min.x;
let maxX = this.space.SpaceBox.max.x;
const nailOpt = (this.store as LayerBoardStore).layerNailOption;
//如果层板和左右板得距离大于这个值,则这边不绘制层板钉
let refDist = nailOpt.length - nailOpt.depth;
let vertBrs: Board[] = this.space.BoardMap.get(BoardType.Vertical);
if (vertBrs && vertBrs.length > 0)
{
if (vertBrs.length === 1)
{
let center = this.space.SpaceBox.getCenter(new Vector3);
let pos = vertBrs[0].Position.applyMatrix4(this.space.SpaceOCSInv);
if (pos.x < center.x)
this.leftBoard = vertBrs[0];
else
this.rightBoard = vertBrs[0];
}
else
{
vertBrs.sort((br1, br2) =>
{
return br1.MinPoint.applyMatrix4(this.space.SpaceOCSInv).x - br2.MinPoint.applyMatrix4(this.space.SpaceOCSInv).x;
});
let lBr = vertBrs[0];
let rBr = arrayLast(vertBrs);
let pos1 = lBr.Position.applyMatrix4(this.space.SpaceOCSInv);
let pos2 = rBr.Position.applyMatrix4(this.space.SpaceOCSInv);
if (Math.abs(pos1.x - minX + lBr.Thickness) < refDist)
this.leftBoard = lBr;
if (Math.abs(pos2.x - maxX) < refDist)
this.rightBoard = rBr;
}
}
//允许在背板绘制层板钉
if (nailOpt.isInBack)
{
let backBrs = this.space.BoardMap.get(BoardType.Behind);
let maxY = this.space.SpaceBox.max.y;
if (backBrs && backBrs.length === 1)
{
let backBr = backBrs[0];
let backPos = backBr.Position.applyMatrix4(this.space.SpaceOCSInv);
if (Math.abs(backPos.y - maxY - backBr.Thickness) < refDist)
this.backBoard = backBr;
}
}
}
//绘制层板钉
drawNails(br: Board, initNails: INailProps[])
{
const nailOpt = (this.store as LayerBoardStore).layerNailOption;
let addCount = nailOpt.addCount;
let count = nailOpt.count;
let dist = nailOpt.dist;
let frontDist = nailOpt.front;
let backDist = nailOpt.behind;
let singleDist: number;
//绘制数量为1时,层板钉在中间位置
if (count === 1)
singleDist = (br.Width - frontDist - backDist) / 2;
else
singleDist = (br.Width - frontDist - backDist) / (count - 1);
let backSingleDist = (br.Height - frontDist - backDist) / (count === 1 ? 2 : (count - 1));
let buildNails: INailProps[] = [];
//构建层板钉
for (let i = 1; i <= count; i++)
{
let nailProps = initNails.map(n =>
{
return {
pos: n.pos,
nail: n.nail.Clone()
};
});
for (let nailProp of nailProps)
{
let dist = nailProp.pos === NailPos.Back ? backSingleDist : singleDist;
let vec = new Vector3(count === 1 ? dist : dist * (i - 1));
if (nailProp.pos === NailPos.Back)
vec = new Vector3(0, vec.x);
nailProp.nail.ApplyMatrix(MoveMatrix(vec));
}
buildNails.push(...nailProps);
}
//增加的层板钉
let addNails = [];
for (let i = 1; i <= addCount; i++)
{
let nails = buildNails.map(n =>
{
return {
pos: n.pos,
nail: n.nail.Clone()
};
});
nails.forEach(n =>
{
n.nail.ApplyMatrix(MoveMatrix(new Vector3(0, 0, dist * i)));
addNails.push(n);
});
nails = buildNails.map(n =>
{
return {
pos: n.pos,
nail: n.nail.Clone()
};
});
nails.forEach(n =>
{
n.nail.ApplyMatrix(MoveMatrix(new Vector3(0, 0, -dist * i)));
addNails.push(n);
});
}
buildNails.push(...addNails);
let nailIDs: ObjectId[] = [];
let leftNailIds: ObjectId[] = [];
let rightNailIds: ObjectId[] = [];
let backNailIds: ObjectId[] = [];
for (let nailProps of buildNails)
{
nailProps.nail.ApplyMatrix(br.OCS);
app.Database.ModelSpace.Append(nailProps.nail);
nailIDs.push(nailProps.nail.Id);
if (nailProps.pos === NailPos.Left)
leftNailIds.push(nailProps.nail.Id);
else if (nailProps.pos === NailPos.Right)
rightNailIds.push(nailProps.nail.Id);
else
backNailIds.push(nailProps.nail.Id);
}
br.AppendNails(nailIDs);
if (this.leftBoard)
this.leftBoard.AppendNails(leftNailIds);
if (this.rightBoard)
this.rightBoard.AppendNails(rightNailIds);
if (this.backBoard)
this.backBoard.AppendNails(backNailIds);
}
private buildLayerNail(br: Board)
{
const nailOpt = (this.store as LayerBoardStore).layerNailOption;
const layerOpt = (this.store as LayerBoardStore).m_Option;
if (!layerOpt.isActive || !nailOpt.isDraw) return;
this.drawNails(br, this.initBuildNails(br));
}
}

@ -66,7 +66,12 @@ export class EditorBoardTemplate implements Command
store.EditorTemplate = template;
if (template instanceof TemplateBoardRecord)
{
if (template instanceof TemplateLayerBoard)
store.UpdateOption({ option: template.Option, nailData: template.NailOption });
else
store.UpdateOption({ option: template.Option });
}
else
{
store.UpdateOption(config);
@ -76,7 +81,11 @@ export class EditorBoardTemplate implements Command
app.Editor.ModalManage.Callback = async () =>
{
if (template instanceof TemplateBoardRecord)
{
template.Option = store.m_Option as BoardConfigOption;
if (template instanceof TemplateLayerBoard)
template.NailOption = (store as LayerBoardStore).layerNailOption;
}
else if (template instanceof TemplateLeftRightBoardRecord)
{
let opt = store.m_Option as SideBoardOption;

@ -194,7 +194,7 @@ export class Board extends ExtrudeSolid
this.WriteAllObjectRecord();
for (let nail of this._LayerNails)
{
if (nail.Object)
if (nail.Object && !nail.IsErase)
nail.Object.Erase();
}
this._LayerNails.length = 0;

@ -12,8 +12,18 @@ import { CADFiler } from "../../CADFiler";
@Factory
export class TemplateBehindBoard extends TemplateBoardRecord
{
protected option: BehindBoardOption;
private grooveoption: IGrooveOption;
protected _option: BehindBoardOption = { ...DefaultBehindBoardConfig };
private grooveoption: IGrooveOption = {
grooveAddLength: "0",
grooveAddWidth: "0",
grooveAddDepth: "0",
knifeRadius: "3",
};
constructor()
{
super();
this.name = "背板(自动)";
}
set Grooveoption(option: IGrooveOption)
{
//@ts-ignore
@ -22,47 +32,28 @@ export class TemplateBehindBoard extends TemplateBoardRecord
this.WriteAllObjectRecord();
Object.assign(this.grooveoption, option);
}
InitBaseParams()
{
super.InitBaseParams();
this.option = Object.assign({}, DefaultBehindBoardConfig);
this.grooveoption = {
grooveAddLength: "0",
grooveAddWidth: "0",
grooveAddDepth: "0",
knifeRadius: "3",
};
this.name = "背板(自动)";
return this;
}
GeneralBoardList(space: ISpaceParse)
{
return BuildBehindBoards(this.option, space, this.grooveoption);
return BuildBehindBoards(this._option, space, this.grooveoption);
}
ReadFile(file: CADFiler)
{
let ver = file.Read();
super.ReadFile(file);
if (!this.option)
//@ts-ignore
this.option = {};
this.option.type = file.Read();
this.option.name = file.Read();
this.option.leftExt = file.Read();
this.option.rightExt = file.Read();
this.option.topExt = file.Read();
this.option.bottomExt = file.Read();
this.option.thickness = file.Read();
this.option.boardPosition = file.Read();
this.option.calcHeight = file.Read();
this.option.moveDist = file.Read();
this.option.boardRelative = file.Read();
this.option.spaceSize = file.Read();
this.option.count = file.Read();
this._option.type = file.Read();
this._option.name = file.Read();
this._option.leftExt = file.Read();
this._option.rightExt = file.Read();
this._option.topExt = file.Read();
this._option.bottomExt = file.Read();
this._option.thickness = file.Read();
this._option.boardPosition = file.Read();
this._option.calcHeight = file.Read();
this._option.moveDist = file.Read();
this._option.boardRelative = file.Read();
this._option.spaceSize = file.Read();
this._option.count = file.Read();
if (!this.grooveoption)
//@ts-ignore
this.grooveoption = {};
this.grooveoption.grooveAddLength = file.Read();
this.grooveoption.grooveAddWidth = file.Read();
this.grooveoption.grooveAddDepth = file.Read();
@ -72,19 +63,19 @@ export class TemplateBehindBoard extends TemplateBoardRecord
{
file.Write(1);
super.WriteFile(file);
file.Write(this.option.type);
file.Write(this.option.name);
file.Write(this.option.leftExt);
file.Write(this.option.rightExt);
file.Write(this.option.topExt);
file.Write(this.option.bottomExt);
file.Write(this.option.thickness);
file.Write(this.option.boardPosition);
file.Write(this.option.calcHeight);
file.Write(this.option.moveDist);
file.Write(this.option.boardRelative);
file.Write(this.option.spaceSize);
file.Write(this.option.count);
file.Write(this._option.type);
file.Write(this._option.name);
file.Write(this._option.leftExt);
file.Write(this._option.rightExt);
file.Write(this._option.topExt);
file.Write(this._option.bottomExt);
file.Write(this._option.thickness);
file.Write(this._option.boardPosition);
file.Write(this._option.calcHeight);
file.Write(this._option.moveDist);
file.Write(this._option.boardRelative);
file.Write(this._option.spaceSize);
file.Write(this._option.count);
file.Write(this.grooveoption.grooveAddLength);
file.Write(this.grooveoption.grooveAddWidth);

@ -22,18 +22,18 @@ export class TemplateBoardRecord extends TemplateRecord
@AutoRecord DrawBoardCount = 1;
protected option: BoardConfigOption;
protected _option: BoardConfigOption;
get Option()
{
return Object.assign({}, this.option);
return Object.assign({}, this._option);
}
set Option(option: BoardConfigOption)
{
//@ts-ignore
if (!this.option) this.option = {};
if (!this._option) this._option = {};
this.WriteAllObjectRecord();
Object.assign(this.option, option);
Object.assign(this._option, option);
}
protected GeneralBoardList(space: ISpaceParse): Board[]
{

@ -13,7 +13,7 @@ import { TemplateRecord } from "../TemplateRecord";
@Factory
export class TemplateLatticeRecord extends TemplateRecord
{
private option: ILatticeOption;
private option: ILatticeOption = { ...DefaultLatticeConfig };
constructor()
{
super();
@ -25,20 +25,9 @@ export class TemplateLatticeRecord extends TemplateRecord
}
set Option(option: ILatticeOption)
{
//@ts-ignore
if (!this.option) this.option = {};
this.WriteAllObjectRecord();
Object.assign(this.option, option);
}
InitBaseParams()
{
super.InitBaseParams();
this.option = Object.assign({}, DefaultLatticeConfig);
return this;
}
protected async Update()
{
await super.Update();
@ -89,10 +78,6 @@ export class TemplateLatticeRecord extends TemplateRecord
let ver = file.Read();
super.ReadFile(file);
if (!this.option)
//@ts-ignore
this.option = {};
this.option.arrayType = file.Read();
this.option.gripWidth = file.Read();
this.option.gripDepth = file.Read();

@ -1,10 +1,15 @@
import { BuildLayerBoards } from "../../../Add-on/DrawBoard/BuildBoardTool";
import { ISpaceParse } from "../../../Geometry/SpaceParse/ISpaceParse";
import { LayerBoardOption } from "../../../UI/Store/BoardInterface";
import { LayerBoardOption, LayerNailOption } from "../../../UI/Store/BoardInterface";
import { Factory } from "../../CADFactory";
import { TemplateBoardRecord } from "./TemplateBoard";
import { DefaultLayerBoardConfig } from "../../../Editor/DefaultConfig";
import { DefaultLayerBoardConfig, DefaultNailOption } from "../../../Editor/DefaultConfig";
import { CADFiler } from "../../CADFiler";
import { Board } from "../../Entity/Board";
import { buildLayerNailTool } from "../../../Add-on/DrawBoard/BuildLayerNailTool";
import { Box3Ext } from "../../../Geometry/Box";
import { Vector3 } from "three";
import { ObjectId } from "../../ObjectId";
/**
*
@ -17,52 +22,100 @@ export class TemplateLayerBoard extends TemplateBoardRecord
super();
this.name = "层板(自动)";
}
protected option: LayerBoardOption;
InitBaseParams()
protected _option: LayerBoardOption = { ...DefaultLayerBoardConfig };
private _nailOption: LayerNailOption = { ...DefaultNailOption };
get NailOption()
{
super.InitBaseParams();
this.option = Object.assign({}, DefaultLayerBoardConfig);
return this;
return { ...this._nailOption };
}
set NailOption(nailOpt: LayerNailOption)
{
this.WriteAllObjectRecord();
this._nailOption = { ...nailOpt };
}
GeneralBoardList(space: ISpaceParse)
{
return BuildLayerBoards(this.option, space);
return BuildLayerBoards(this._option, space);
}
protected async Update()
{
await super.Update();
let space = new ISpaceParse(this.PositioningSupportBoards, this._CacheSpaceCS);
space.ParseOK = true;
space.SpaceBox = new Box3Ext(new Vector3(), this._CacheSpaceSize);
let brs: Board[] = [];
for (let id of this.Objects)
{
if (!id.IsErase)
{
let b = id.Object as Board;
brs.push(b);
}
}
buildLayerNailTool.Start(brs, this._option, this._nailOption, space);
}
ReadFile(file: CADFiler)
{
let ver = file.Read();
super.ReadFile(file);
if (!this.option)
//@ts-ignore
this.option = {};
this.option.type = file.Read();
this.option.name = file.Read();
this.option.frontShrink = file.Read();
this.option.leftShrink = file.Read();
this.option.rightShrink = file.Read();
this.option.calcHeight = file.Read();
this.option.isTotalLength = file.Read();
this.option.boardRelative = file.Read();
this.option.thickness = file.Read();
this.option.count = file.Read();
this.option.spaceSize = file.Read();
this.option.isActive = file.Read();
this._option.type = file.Read();
this._option.name = file.Read();
this._option.frontShrink = file.Read();
this._option.leftShrink = file.Read();
this._option.rightShrink = file.Read();
this._option.calcHeight = file.Read();
this._option.isTotalLength = file.Read();
this._option.boardRelative = file.Read();
this._option.thickness = file.Read();
this._option.count = file.Read();
this._option.spaceSize = file.Read();
this._option.isActive = file.Read();
if (ver > 1)
{
this._nailOption.isDraw = file.Read();
this._nailOption.addCount = file.Read();
this._nailOption.dist = file.Read();
this._nailOption.isGroup = file.Read();
this._nailOption.isInBack = file.Read();
this._nailOption.front = file.Read();
this._nailOption.behind = file.Read();
this._nailOption.count = file.Read();
this._nailOption.rad = file.Read();
this._nailOption.length = file.Read();
this._nailOption.depth = file.Read();
}
}
WriteFile(file: CADFiler)
{
file.Write(1);
file.Write(2);
super.WriteFile(file);
file.Write(this.option.type);
file.Write(this.option.name);
file.Write(this.option.frontShrink);
file.Write(this.option.leftShrink);
file.Write(this.option.rightShrink);
file.Write(this.option.calcHeight);
file.Write(this.option.isTotalLength);
file.Write(this.option.boardRelative);
file.Write(this.option.thickness);
file.Write(this.option.count);
file.Write(this.option.spaceSize);
file.Write(this.option.isActive);
file.Write(this._option.type);
file.Write(this._option.name);
file.Write(this._option.frontShrink);
file.Write(this._option.leftShrink);
file.Write(this._option.rightShrink);
file.Write(this._option.calcHeight);
file.Write(this._option.isTotalLength);
file.Write(this._option.boardRelative);
file.Write(this._option.thickness);
file.Write(this._option.count);
file.Write(this._option.spaceSize);
file.Write(this._option.isActive);
//ver2
file.Write(this._nailOption.isDraw);
file.Write(this._nailOption.addCount);
file.Write(this._nailOption.dist);
file.Write(this._nailOption.isGroup);
file.Write(this._nailOption.isInBack);
file.Write(this._nailOption.front);
file.Write(this._nailOption.behind);
file.Write(this._nailOption.count);
file.Write(this._nailOption.rad);
file.Write(this._nailOption.length);
file.Write(this._nailOption.depth);
}
}

@ -13,11 +13,11 @@ import { TemplateRecord } from "../TemplateRecord";
@Factory
export class TemplateTopBottomBoard extends TemplateRecord
{
private _topOption: TBBoardOption;
private _bottomOption: TBBoardOption;
private _topOption: TBBoardOption = { ...DefaultTopBoardOption };
private _bottomOption: TBBoardOption = { ...DefaultBottomBoardOption };
UseBoardProcessOption = false;
BoardProcessOption: BoardProcessOption;
@AutoRecord DrawCounts: [number, number, number] = [1, 1, 1]
@AutoRecord DrawCounts: [number, number, number] = [1, 1, 1];
constructor()
{
super();
@ -29,9 +29,6 @@ export class TemplateTopBottomBoard extends TemplateRecord
}
set TopOption(option: TBBoardOption)
{
//@ts-ignore
if (!this._topOption) this._topOption = {};
this.WriteAllObjectRecord();
Object.assign(this._topOption, option);
}
@ -41,19 +38,9 @@ export class TemplateTopBottomBoard extends TemplateRecord
}
set BottomOption(option: TBBoardOption)
{
//@ts-ignore
if (!this._bottomOption) this._bottomOption = {};
this.WriteAllObjectRecord();
Object.assign(this._bottomOption, option);
}
InitBaseParams()
{
super.InitBaseParams();
this._topOption = Object.assign({}, DefaultTopBoardOption);
this._bottomOption = Object.assign({}, DefaultBottomBoardOption);
return this;
}
protected async Update()
{
await super.Update();
@ -165,7 +152,6 @@ export class TemplateTopBottomBoard extends TemplateRecord
this.DrawCounts[1] = file.Read();
this.DrawCounts[2] = file.Read();
this._topOption = {} as any;
this._topOption.type = file.Read();
this._topOption.name = file.Read();
this._topOption.isDraw = file.Read();
@ -178,7 +164,6 @@ export class TemplateTopBottomBoard extends TemplateRecord
this._topOption.rightExt = file.Read();
this._topOption.offset = file.Read();
this._bottomOption = {} as any;
this._bottomOption.type = file.Read();
this._bottomOption.name = file.Read();
this._bottomOption.isDraw = file.Read();

@ -17,13 +17,7 @@ export class TemplateVerticalBoard extends TemplateBoardRecord
super();
this.name = "立板(自动)";
}
protected option: VerticalBoardOption;
InitBaseParams()
{
super.InitBaseParams();
this.option = Object.assign({}, DefaultVerticalBoardConfig);
return this;
}
protected option: VerticalBoardOption = { ...DefaultVerticalBoardConfig };
GeneralBoardList(space: ISpaceParse)
{
return BuildVerticalBoards(this.option, space);
@ -32,9 +26,6 @@ export class TemplateVerticalBoard extends TemplateBoardRecord
{
let ver = file.Read();
super.ReadFile(file);
if (!this.option)
//@ts-ignore
this.option = {};
this.option.type = file.Read();
this.option.name = file.Read();
this.option.frontShrink = file.Read();

@ -10,12 +10,11 @@ import { Factory } from "../../CADFactory";
import { CADFiler } from "../../CADFiler";
import { Board } from "../../Entity/Board";
import { TemplateRecord } from "../TemplateRecord";
import { EBoardKeyList } from "../../../Common/BoardKeyList";
@Factory
export class TemplateWineRackRecord extends TemplateRecord
{
private option: IWineRackOption;
private option: IWineRackOption = { ...DefaultWineRackConfig };
constructor()
{
super();
@ -27,20 +26,9 @@ export class TemplateWineRackRecord extends TemplateRecord
}
set Option(option: IWineRackOption)
{
//@ts-ignore
if (!this.option) this.option = {};
this.WriteAllObjectRecord();
Object.assign(this.option, option);
}
InitBaseParams()
{
super.InitBaseParams();
this.option = Object.assign({}, DefaultWineRackConfig);
return this;
}
protected async Update()
{
await super.Update();
@ -87,10 +75,6 @@ export class TemplateWineRackRecord extends TemplateRecord
let ver = file.Read();
super.ReadFile(file);
if (!this.option)
//@ts-ignore
this.option = {};
this.option.type = file.Read();
this.option.arrayType = file.Read();
this.option.fullType = file.Read();

@ -392,3 +392,19 @@ export const DefaultLatticeConfig: ILatticeOption = {
downCut: 4,
};
Object.freeze(DefaultLatticeConfig);
export const DefaultNailOption: LayerNailOption = {
version: 1,
isDraw: true,
addCount: 0,
dist: 50,
isGroup: false,
isInBack: true,
front: 50,
behind: 50,
count: 2,
rad: 5,
length: 34,
depth: 13.5
};
Object.freeze(DefaultLayerNailOption);

@ -74,8 +74,6 @@ export const LayerBoardModal =
</div>
</div>
</div>
{
!props.store.EditorTemplate &&
<div>
<h6 className={Classes.HEADING}></h6>
<div>
@ -130,7 +128,6 @@ export const LayerBoardModal =
disabled={!brOpt.isActive || !nailOpt.isDraw}
/>
</div>
}
<BoardRePosBlock
uiOption={uiOption}
option={brOpt}

@ -194,7 +194,7 @@ export class TemplateManage extends React.Component<{ store?: TempalteEditorStor
};
private handleInsertByBasePt = async () =>
{
let template = await this.GetTempalteAndUpdate(true);
let template = await GetOnlineTemplate(this.currentTemplateInfo.id, this.currentProps);
if (!template)
return;
let ens = template.Db.ModelSpace.Entitys as Board[];
@ -241,6 +241,8 @@ export class TemplateManage extends React.Component<{ store?: TempalteEditorStor
mtx.setPosition(ptRes.Point.sub(baseP));
for (let e of nens)
e.ApplyMatrix(mtx);
await (nens[0].Template.Object as TemplateRecord).Root.UpdateTemplateTree();
}
break;
}

@ -8,7 +8,7 @@ import { Singleton } from '../../Common/Singleton';
import { ClosingStripReg } from '../../Common/Utils';
import { Board, BoardType } from '../../DatabaseServices/Entity/Board';
import { TemplateRecord } from '../../DatabaseServices/Template/TemplateRecord';
import { DefaultBehindBoardConfig, DefaultLayerBoardConfig, DefaultVerticalBoardConfig, DefaultTopBoardOption, DefaultBottomBoardOption, DefaultSideBoardOption, DefaultLayerNailOption, DefaultSingleBoardOption, DefaultClosingStripOption } from '../../Editor/DefaultConfig';
import { DefaultBehindBoardConfig, DefaultLayerBoardConfig, DefaultVerticalBoardConfig, DefaultTopBoardOption, DefaultBottomBoardOption, DefaultSideBoardOption, DefaultLayerNailOption, DefaultSingleBoardOption, DefaultClosingStripOption, DefaultNailOption } from '../../Editor/DefaultConfig';
import { userConfig } from '../../Editor/UserConfig';
import { IConfigOption } from '../Components/Board/UserConfig';
import { ModalState } from '../Components/Modal/ModalsManage';
@ -260,20 +260,7 @@ export class LayerBoardStore extends BoardStore
{
title = "层板";
@observable m_Option: LayerBoardOption = Object.assign({}, DefaultLayerBoardConfig);
@observable layerNailOption: LayerNailOption = {
version: 1,
isDraw: true,
addCount: 0,
dist: 50,
isGroup: false,
isInBack: true,
front: 50,
behind: 50,
count: 2,
rad: 5,
length: 34,
depth: 13.5
};
@observable layerNailOption: LayerNailOption = Object.assign({}, DefaultNailOption);
uiLayerNailOption: any;
constructor()
{

Loading…
Cancel
Save