!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 { 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 { TemplateLayerBoard } from '../../DatabaseServices/Template/ProgramTempate/TemplateLayerBoard';
import { JigUtils } from '../../Editor/JigUtils'; import { JigUtils } from '../../Editor/JigUtils';
import { MoveMatrix } from '../../Geometry/GeUtils';
import { LayerBoardOption } from '../../UI/Store/BoardInterface'; import { LayerBoardOption } from '../../UI/Store/BoardInterface';
import { LayerBoardStore } from '../../UI/Store/BoardStore'; import { LayerBoardStore } from '../../UI/Store/BoardStore';
import { BuildLayerBoards, SetTemplatePositioning } from './BuildBoardTool'; import { BuildLayerBoards, SetTemplatePositioning } from './BuildBoardTool';
import { DrawBoardTool } from './DrawBoardTool'; import { DrawBoardTool } from './DrawBoardTool';
enum NailPos
{
Left = 0,
Right = 1,
Back = 2,
}
interface INailProps
{
pos: NailPos;
nail: GangDrill;
}
export class DrawLayerBoard extends DrawBoardTool export class DrawLayerBoard extends DrawBoardTool
{ {
private leftBoard: Board;
private rightBoard: Board;
private backBoard: Board;
//构建板件
protected async buildBoard(isAppendSpace = true) protected async buildBoard(isAppendSpace = true)
{ {
if (isAppendSpace) if (isAppendSpace)
{ {
const store = this.store as LayerBoardStore;
let temp = new TemplateLayerBoard().InitBaseParams(); 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.UseBoardProcessOption = this.store.UseBoardProcessOption;
temp.BoardProcessOption = this.store.BoardProcessOption; temp.BoardProcessOption = this.store.BoardProcessOption;
app.Database.TemplateTable.Append(temp); app.Database.TemplateTable.Append(temp);
await SetTemplatePositioning(this.space, temp); await SetTemplatePositioning(this.space, temp);
temp.Objects.forEach(b => this.buildLayerNail(b.Object as Board));
} }
else else
{ {
@ -48,225 +27,4 @@ export class DrawLayerBoard extends DrawBoardTool
brs.forEach(b => JigUtils.Draw(b)); 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; store.EditorTemplate = template;
if (template instanceof TemplateBoardRecord) if (template instanceof TemplateBoardRecord)
store.UpdateOption({ option: template.Option }); {
if (template instanceof TemplateLayerBoard)
store.UpdateOption({ option: template.Option, nailData: template.NailOption });
else
store.UpdateOption({ option: template.Option });
}
else else
{ {
store.UpdateOption(config); store.UpdateOption(config);
@ -76,7 +81,11 @@ export class EditorBoardTemplate implements Command
app.Editor.ModalManage.Callback = async () => app.Editor.ModalManage.Callback = async () =>
{ {
if (template instanceof TemplateBoardRecord) if (template instanceof TemplateBoardRecord)
{
template.Option = store.m_Option as BoardConfigOption; template.Option = store.m_Option as BoardConfigOption;
if (template instanceof TemplateLayerBoard)
template.NailOption = (store as LayerBoardStore).layerNailOption;
}
else if (template instanceof TemplateLeftRightBoardRecord) else if (template instanceof TemplateLeftRightBoardRecord)
{ {
let opt = store.m_Option as SideBoardOption; let opt = store.m_Option as SideBoardOption;

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

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

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

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

@ -1,10 +1,15 @@
import { BuildLayerBoards } from "../../../Add-on/DrawBoard/BuildBoardTool"; import { BuildLayerBoards } from "../../../Add-on/DrawBoard/BuildBoardTool";
import { ISpaceParse } from "../../../Geometry/SpaceParse/ISpaceParse"; import { ISpaceParse } from "../../../Geometry/SpaceParse/ISpaceParse";
import { LayerBoardOption } from "../../../UI/Store/BoardInterface"; import { LayerBoardOption, LayerNailOption } from "../../../UI/Store/BoardInterface";
import { Factory } from "../../CADFactory"; import { Factory } from "../../CADFactory";
import { TemplateBoardRecord } from "./TemplateBoard"; import { TemplateBoardRecord } from "./TemplateBoard";
import { DefaultLayerBoardConfig } from "../../../Editor/DefaultConfig"; import { DefaultLayerBoardConfig, DefaultNailOption } from "../../../Editor/DefaultConfig";
import { CADFiler } from "../../CADFiler"; 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(); super();
this.name = "层板(自动)"; this.name = "层板(自动)";
} }
protected option: LayerBoardOption; protected _option: LayerBoardOption = { ...DefaultLayerBoardConfig };
InitBaseParams() private _nailOption: LayerNailOption = { ...DefaultNailOption };
get NailOption()
{ {
super.InitBaseParams(); return { ...this._nailOption };
this.option = Object.assign({}, DefaultLayerBoardConfig);
return this;
} }
set NailOption(nailOpt: LayerNailOption)
{
this.WriteAllObjectRecord();
this._nailOption = { ...nailOpt };
}
GeneralBoardList(space: ISpaceParse) 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) ReadFile(file: CADFiler)
{ {
let ver = file.Read(); let ver = file.Read();
super.ReadFile(file); super.ReadFile(file);
if (!this.option) this._option.type = file.Read();
//@ts-ignore this._option.name = file.Read();
this.option = {}; this._option.frontShrink = file.Read();
this.option.type = file.Read(); this._option.leftShrink = file.Read();
this.option.name = file.Read(); this._option.rightShrink = file.Read();
this.option.frontShrink = file.Read(); this._option.calcHeight = file.Read();
this.option.leftShrink = file.Read(); this._option.isTotalLength = file.Read();
this.option.rightShrink = file.Read(); this._option.boardRelative = file.Read();
this.option.calcHeight = file.Read(); this._option.thickness = file.Read();
this.option.isTotalLength = file.Read(); this._option.count = file.Read();
this.option.boardRelative = file.Read(); this._option.spaceSize = file.Read();
this.option.thickness = file.Read(); this._option.isActive = file.Read();
this.option.count = file.Read(); if (ver > 1)
this.option.spaceSize = file.Read(); {
this.option.isActive = file.Read(); 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) WriteFile(file: CADFiler)
{ {
file.Write(1); file.Write(2);
super.WriteFile(file); super.WriteFile(file);
file.Write(this.option.type); file.Write(this._option.type);
file.Write(this.option.name); file.Write(this._option.name);
file.Write(this.option.frontShrink); file.Write(this._option.frontShrink);
file.Write(this.option.leftShrink); file.Write(this._option.leftShrink);
file.Write(this.option.rightShrink); file.Write(this._option.rightShrink);
file.Write(this.option.calcHeight); file.Write(this._option.calcHeight);
file.Write(this.option.isTotalLength); file.Write(this._option.isTotalLength);
file.Write(this.option.boardRelative); file.Write(this._option.boardRelative);
file.Write(this.option.thickness); file.Write(this._option.thickness);
file.Write(this.option.count); file.Write(this._option.count);
file.Write(this.option.spaceSize); file.Write(this._option.spaceSize);
file.Write(this.option.isActive); 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 @Factory
export class TemplateTopBottomBoard extends TemplateRecord export class TemplateTopBottomBoard extends TemplateRecord
{ {
private _topOption: TBBoardOption; private _topOption: TBBoardOption = { ...DefaultTopBoardOption };
private _bottomOption: TBBoardOption; private _bottomOption: TBBoardOption = { ...DefaultBottomBoardOption };
UseBoardProcessOption = false; UseBoardProcessOption = false;
BoardProcessOption: BoardProcessOption; BoardProcessOption: BoardProcessOption;
@AutoRecord DrawCounts: [number, number, number] = [1, 1, 1] @AutoRecord DrawCounts: [number, number, number] = [1, 1, 1];
constructor() constructor()
{ {
super(); super();
@ -29,9 +29,6 @@ export class TemplateTopBottomBoard extends TemplateRecord
} }
set TopOption(option: TBBoardOption) set TopOption(option: TBBoardOption)
{ {
//@ts-ignore
if (!this._topOption) this._topOption = {};
this.WriteAllObjectRecord(); this.WriteAllObjectRecord();
Object.assign(this._topOption, option); Object.assign(this._topOption, option);
} }
@ -41,19 +38,9 @@ export class TemplateTopBottomBoard extends TemplateRecord
} }
set BottomOption(option: TBBoardOption) set BottomOption(option: TBBoardOption)
{ {
//@ts-ignore
if (!this._bottomOption) this._bottomOption = {};
this.WriteAllObjectRecord(); this.WriteAllObjectRecord();
Object.assign(this._bottomOption, option); Object.assign(this._bottomOption, option);
} }
InitBaseParams()
{
super.InitBaseParams();
this._topOption = Object.assign({}, DefaultTopBoardOption);
this._bottomOption = Object.assign({}, DefaultBottomBoardOption);
return this;
}
protected async Update() protected async Update()
{ {
await super.Update(); await super.Update();
@ -165,7 +152,6 @@ export class TemplateTopBottomBoard extends TemplateRecord
this.DrawCounts[1] = file.Read(); this.DrawCounts[1] = file.Read();
this.DrawCounts[2] = file.Read(); this.DrawCounts[2] = file.Read();
this._topOption = {} as any;
this._topOption.type = file.Read(); this._topOption.type = file.Read();
this._topOption.name = file.Read(); this._topOption.name = file.Read();
this._topOption.isDraw = file.Read(); this._topOption.isDraw = file.Read();
@ -178,7 +164,6 @@ export class TemplateTopBottomBoard extends TemplateRecord
this._topOption.rightExt = file.Read(); this._topOption.rightExt = file.Read();
this._topOption.offset = file.Read(); this._topOption.offset = file.Read();
this._bottomOption = {} as any;
this._bottomOption.type = file.Read(); this._bottomOption.type = file.Read();
this._bottomOption.name = file.Read(); this._bottomOption.name = file.Read();
this._bottomOption.isDraw = file.Read(); this._bottomOption.isDraw = file.Read();

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

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

@ -392,3 +392,19 @@ export const DefaultLatticeConfig: ILatticeOption = {
downCut: 4, downCut: 4,
}; };
Object.freeze(DefaultLatticeConfig); 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,63 +74,60 @@ export const LayerBoardModal =
</div> </div>
</div> </div>
</div> </div>
{ <div>
!props.store.EditorTemplate && <h6 className={Classes.HEADING}></h6>
<div> <div>
<h6 className={Classes.HEADING}></h6> <Checkbox
<div> checked={nailOpt.isDraw}
<Checkbox label="是否绘制层板钉"
checked={nailOpt.isDraw} disabled={!brOpt.isActive}
label="是否绘制层板钉" onChange={() =>
disabled={!brOpt.isActive} {
onChange={() => nailOpt.isDraw = !nailOpt.isDraw;
{ }} />
nailOpt.isDraw = !nailOpt.isDraw; <div className="flexWrap">
}} /> {
<div className="flexWrap"> nailPars1.map(([k, v]) =>
{ <SetBoardDataItem
nailPars1.map(([k, v]) => type={CheckObjectType.BR}
<SetBoardDataItem key={k}
type={CheckObjectType.BR} optKey={k}
key={k} option={nailOpt}
optKey={k} uiOption={uiNailOption}
option={nailOpt} title={v}
uiOption={uiNailOption} isDisabled={(k === "addCount" || k === "dist") && (!brOpt.isActive || !nailOpt.isDraw)}
title={v} />
isDisabled={(k === "addCount" || k === "dist") && (!brOpt.isActive || !nailOpt.isDraw)} )
/> }
)
}
</div>
</div>
<div>
<Checkbox
checked={nailOpt.isGroup}
label="层板钉和层板编组"
disabled={!brOpt.isActive || !nailOpt.isDraw}
onChange={() =>
{
nailOpt.isGroup = !nailOpt.isGroup;
}} />
<Checkbox
checked={nailOpt.isInBack}
label="背板绘制层板钉"
disabled={!brOpt.isActive || !nailOpt.isDraw}
onChange={() =>
{
nailOpt.isInBack = !nailOpt.isInBack;
}} />
</div> </div>
<SetBoardDataBlock </div>
type={CheckObjectType.BR} <div>
pars={nailPars2} <Checkbox
option={nailOpt} checked={nailOpt.isGroup}
uiOption={uiNailOption} label="层板钉和层板编组"
className="flexWrap"
disabled={!brOpt.isActive || !nailOpt.isDraw} disabled={!brOpt.isActive || !nailOpt.isDraw}
/> onChange={() =>
{
nailOpt.isGroup = !nailOpt.isGroup;
}} />
<Checkbox
checked={nailOpt.isInBack}
label="背板绘制层板钉"
disabled={!brOpt.isActive || !nailOpt.isDraw}
onChange={() =>
{
nailOpt.isInBack = !nailOpt.isInBack;
}} />
</div> </div>
} <SetBoardDataBlock
type={CheckObjectType.BR}
pars={nailPars2}
option={nailOpt}
uiOption={uiNailOption}
className="flexWrap"
disabled={!brOpt.isActive || !nailOpt.isDraw}
/>
</div>
<BoardRePosBlock <BoardRePosBlock
uiOption={uiOption} uiOption={uiOption}
option={brOpt} option={brOpt}

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

@ -8,7 +8,7 @@ import { Singleton } from '../../Common/Singleton';
import { ClosingStripReg } from '../../Common/Utils'; import { ClosingStripReg } from '../../Common/Utils';
import { Board, BoardType } from '../../DatabaseServices/Entity/Board'; import { Board, BoardType } from '../../DatabaseServices/Entity/Board';
import { TemplateRecord } from '../../DatabaseServices/Template/TemplateRecord'; 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 { userConfig } from '../../Editor/UserConfig';
import { IConfigOption } from '../Components/Board/UserConfig'; import { IConfigOption } from '../Components/Board/UserConfig';
import { ModalState } from '../Components/Modal/ModalsManage'; import { ModalState } from '../Components/Modal/ModalsManage';
@ -260,20 +260,7 @@ export class LayerBoardStore extends BoardStore
{ {
title = "层板"; title = "层板";
@observable m_Option: LayerBoardOption = Object.assign({}, DefaultLayerBoardConfig); @observable m_Option: LayerBoardOption = Object.assign({}, DefaultLayerBoardConfig);
@observable layerNailOption: LayerNailOption = { @observable layerNailOption: LayerNailOption = Object.assign({}, DefaultNailOption);
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
};
uiLayerNailOption: any; uiLayerNailOption: any;
constructor() constructor()
{ {

Loading…
Cancel
Save