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