!2409 功能:支持槽中槽倒角

add_mes_model_summary
ChenX 7 months ago
parent b0e1039355
commit 310b39a9d9

@ -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 ?? []))
{

@ -784,6 +784,14 @@ interface IParamProps
parames: Set<number>;
grooves: Map<number, Set<number>>;
path2D: Map<number, Set<number>>;
subGrooves?: Map<number, Set<number>>; // 槽中槽
}
enum IsGroove
{
none = 0,
groove = 1,
subGroove = 2,
}
/**
@ -817,7 +825,7 @@ export async function AddFilletAction(template: TemplateRecord): Promise<Templat
for (let br of ens)
{
if (!GetFilletData(br, ptRes.Point, brParamMap, false))
if (!GetFilletData(br, ptRes.Point, brParamMap, IsGroove.none))
GetFilletDataByPath2D(br, ptRes.Point, brParamMap);
}
}
@ -832,14 +840,31 @@ export async function AddFilletAction(template: TemplateRecord): Promise<Templat
if (brParamMap.size === 0) return;
let action = new TemplateFilletAction();
for (let [br, { parames, grooves, path2D }] of brParamMap)
for (let [br, { parames, grooves, path2D, subGrooves }] of brParamMap)
{
const gs: IGrooveFillet[] = [];
for (let [i, pars] of grooves)
{
gs.push({
Index: i,
ArcParams: [...pars]
ArcParams: [...pars],
});
}
// 槽中槽
if (subGrooves)
{
const subGs: IGrooveFillet[] = [];
for (let [j, ps] of subGrooves)
{
subGs.push({
Index: j,
ArcParams: [...ps],
});
}
gs.push({
Index: 0,
ArcParams: [],
Grooves: subGs
});
}
const p2d: IGrooveFillet[] = [];
@ -860,7 +885,8 @@ export async function AddFilletAction(template: TemplateRecord): Promise<Templat
return action;
}
function GetFilletData(br: Board, point: Vector3, brParamMap: Map<ExtrudeSolid, IParamProps>, isGroove = false, index?: number, originBoard?: Board)
//TODO: 支持槽中槽
function GetFilletData(br: Board, point: Vector3, brParamMap: Map<ExtrudeSolid, IParamProps>, 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<ExtrudeSolid,
let par = cu.GetParamAtPoint(pOCS);
if (isNaN(par))
{
if ((!br.Id || br.Grooves.length === 0) && origin.Modeling2D.length === 0)
if ((!br.Id && (!br.Grooves || br.Grooves.length === 0)) && (!origin.Modeling2D || origin.Modeling2D.length === 0))
Log("点取的点不在圆弧上!", LogType.Error);
}
else
@ -892,9 +918,13 @@ function GetFilletData(br: Board, point: Vector3, brParamMap: Map<ExtrudeSolid,
};
brParamMap.set(origin, data);
}
if (!isGroove)
// 非槽
if (isGroove === IsGroove.none)
{
data.parames.add(par);
else
}
// 槽
else if (isGroove === IsGroove.groove)
{
if (data.grooves.has(index))
{
@ -905,7 +935,12 @@ function GetFilletData(br: Board, point: Vector3, brParamMap: Map<ExtrudeSolid,
data.grooves.set(index, new Set([par]));
}
}
// 槽中槽
else
{
data.subGrooves = new Map();
data.subGrooves.set(index, new Set([par]));
}
Log("成功添加!");
return true;
}
@ -916,10 +951,20 @@ function GetFilletData(br: Board, point: Vector3, brParamMap: Map<ExtrudeSolid,
if (br.Id)
for (let i = 0; i < br.Grooves.length; i++)
{
let status = GetFilletData(br.Grooves[i] as Board, point, brParamMap, true, i, br);
let status = GetFilletData(br.Grooves[i] as Board, point, brParamMap, IsGroove.groove, i, br);
if (status)
return true;
}
else if (br.Grooves)
{
// 遍历槽中槽
for (let i = 0; i < br.Grooves.length; i++)
{
let status = GetFilletData(br.Grooves[i] as Board, point, brParamMap, IsGroove.subGroove, i, origin);
if (status)
return true;
}
}
return false;
}
function GetFilletDataByPath2D(br: Board, point: Vector3, brParamMap: Map<ExtrudeSolid, IParamProps>)

Loading…
Cancel
Save