From 310b39a9d95cdd218cc26710bacfed6b95ad659d Mon Sep 17 00:00:00 2001 From: ChenX Date: Tue, 5 Mar 2024 01:25:41 +0000 Subject: [PATCH] =?UTF-8?q?!2409=20=E5=8A=9F=E8=83=BD:=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E6=A7=BD=E4=B8=AD=E6=A7=BD=E5=80=92=E8=A7=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Template/Action/TemplateFilletAction.ts | 54 +++++++++++++++- src/DatabaseServices/Template/TempateUtils.ts | 63 ++++++++++++++++--- 2 files changed, 105 insertions(+), 12 deletions(-) diff --git a/src/DatabaseServices/Template/Action/TemplateFilletAction.ts b/src/DatabaseServices/Template/Action/TemplateFilletAction.ts index f778e012a..943ed0d32 100644 --- a/src/DatabaseServices/Template/Action/TemplateFilletAction.ts +++ b/src/DatabaseServices/Template/Action/TemplateFilletAction.ts @@ -15,6 +15,7 @@ export interface IGrooveFillet { Index: number; ArcParams: number[]; + Grooves?: IGrooveFillet[];//子槽 } interface IFilletcActionData @@ -56,7 +57,19 @@ export class TemplateFilletAction extends TemplateAction { const groove = br.Grooves[data.Index]; if (groove) + { this.Fillet(groove, newValue, data); + //槽中槽 + if (data?.Grooves?.length >= groove.Grooves.length) + { + for (let sdata of data.Grooves) + { + let sGroove = groove.Grooves[sdata.Index]; + if (sGroove) + this.Fillet(sGroove, newValue, sdata); + } + } + } } } @@ -146,8 +159,8 @@ export class TemplateFilletAction extends TemplateAction for (let i = 0; i < parCount; i++) params.push(file.Read()); - const groove = []; - const path2d = []; + const groove: IGrooveFillet[] = []; + const path2d: IGrooveFillet[] = []; if (ver >= 3) { const grooveCount = file.Read(); @@ -162,6 +175,28 @@ export class TemplateFilletAction extends TemplateAction for (let j = 0; j < parCount; j++) data.ArcParams.push(file.Read()); groove.push(data); + + if (ver > 3) + { + //槽中槽 + data.Grooves = []; + let subGrooveCount = file.Read(); + for (let i = 0; i < subGrooveCount; i++) + { + let grooveIndex = file.Read() as number; + let arcParamsCount = file.Read(); + let arcParams: number[] = []; + for (let j = 0; j < arcParamsCount; j++) + arcParams.push(file.Read()); + + let subGrooveFilletData: IGrooveFillet = { + Index: grooveIndex, + ArcParams: arcParams + }; + + data.Grooves.push(subGrooveFilletData); + } + } } const path2DCount = file.Read(); @@ -187,7 +222,7 @@ export class TemplateFilletAction extends TemplateAction //对象将自身数据写入到文件. WriteFile(file: CADFiler) { - file.Write(3); + file.Write(4); super.WriteFile(file); file.Write(this.FilletDatas.length); for (let d of this.FilletDatas) @@ -197,6 +232,7 @@ export class TemplateFilletAction extends TemplateAction for (let param of d.ArcParams) file.Write(param); + //槽 file.Write(d.Grooves ? d.Grooves.length : 0); for (let data of (d.Grooves ?? [])) { @@ -204,7 +240,19 @@ export class TemplateFilletAction extends TemplateAction file.Write(data.ArcParams.length); for (let par of data.ArcParams) file.Write(par); + + //槽中槽 + file.Write(data.Grooves ? data.Grooves.length : 0); + for (let sdata of (data.Grooves ?? [])) + { + file.Write(sdata.Index); + file.Write(sdata.ArcParams.length); + for (let par of sdata.ArcParams) + file.Write(par); + } + //槽中槽end } + file.Write(d.Path2D ? d.Path2D.length : 0); for (let data of (d.Path2D ?? [])) { diff --git a/src/DatabaseServices/Template/TempateUtils.ts b/src/DatabaseServices/Template/TempateUtils.ts index 00f9cbaac..f6f196524 100644 --- a/src/DatabaseServices/Template/TempateUtils.ts +++ b/src/DatabaseServices/Template/TempateUtils.ts @@ -784,6 +784,14 @@ interface IParamProps parames: Set; grooves: Map>; path2D: Map>; + subGrooves?: Map>; // 槽中槽 +} + +enum IsGroove +{ + none = 0, + groove = 1, + subGroove = 2, } /** @@ -817,7 +825,7 @@ export async function AddFilletAction(template: TemplateRecord): Promise, isGroove = false, index?: number, originBoard?: Board) +//TODO: 支持槽中槽 +function GetFilletData(br: Board, point: Vector3, brParamMap: Map, isGroove = IsGroove.none, index?: number, originBoard?: Board) { let cu = br.ContourCurve; const origin = originBoard ?? br; @@ -871,7 +897,7 @@ function GetFilletData(br: Board, point: Vector3, brParamMap: Map)